Autore originale: Johan
sfondo
TON (The Open Network) è una piattaforma blockchain decentralizzata originariamente progettata e sviluppata dal team di Telegram. TON mira a fornire una piattaforma blockchain scalabile e ad alte prestazioni per supportare applicazioni decentralizzate (DApp) su larga scala e contratti intelligenti.
TON è così speciale, è facile da usare, è profondamente integrato con Telegram, rendendo facile l'uso dei token per le persone comuni; è anche complesso, ha un'architettura completamente diversa dalle altre blockchain e utilizza FunC non mainstream; Linguaggio del contratto intelligente. Oggi discuteremo le caratteristiche di TON e i problemi di sicurezza delle risorse degli utenti dal punto di vista di conti, token e transazioni.
Caratteristiche di TON
Generazione del conto
L'indirizzo dell'account TON viene generato in modo diverso dalla maggior parte delle blockchain. È un indirizzo di contratto intelligente. Innanzitutto, avvia una chiave privata. TON utilizza principalmente l'algoritmo Ed 25519 per generare una chiave pubblica. Il processo di generazione è il seguente:
Esistono due forme di chiavi pubbliche. Una è la chiave pubblica originale calcolata dalla chiave privata, che assomiglia a:
E39ECDA0A7B0C60A7107EC43967829DBE8BC356A49B9DFC6186B3EAC74B5477D
L'altra è la chiave pubblica "abbellita", che contiene alcune informazioni e cifre di controllo della chiave pubblica, nella forma: Pubjns2gp7DGCnEH7EOWeCnb6Lw1akm538YYaz6sdLVHfRB2
Sarebbe troppo ingenuo pensare di poter ottenere l'indirizzo dell'account proprio come Ethereum ottenendo la chiave pubblica Il semplice fatto di avere la chiave pubblica dell'utente non è sufficiente per calcolare l'indirizzo dell'account dell'utente. Abbiamo appena detto che l'indirizzo dell'account dell'utente è un indirizzo di contratto intelligente, ma non abbiamo nemmeno un account. Come possiamo implementare un contratto intelligente? La sequenza corretta è calcolare prima l'indirizzo, ricevere una quantità iniziale di token e quindi poter distribuire il contratto. Il processo di calcolo dell'indirizzo del conto è mostrato nella figura seguente:
Anche l'indirizzo dell'utente è disponibile in molte forme. La prima è la forma originale, che assomiglia a:
0:b4c1b2ede12aa76f4a44353944258bcc8f99e9c7c474711a152c78b43218e296
e un modulo intuitivo, come:
Rete principale:
Rimbalzabile:
EQC0wbLt4Sqnb0pENTlEJYvMj5npx8R0cRoVLHi0MhjilkPX
Non rimbalzabile:
UQC0wbLt4Sqnb0pENTlEJYvMj5npx8R0cRoVLHi0Mhjilh4S
Rete di prova:
Rimbalzabile:
kQC0wbLt4Sqnb0pENTlEJYvMj5npx8R0cRoVLHi0Mhjilvhd
Non rimbalzabile:
0QC0wbLt4Sqnb0pENTlEJYvMj5npx8R0cRoVLHi0MhjilqWY
Se osservi attentamente questi indirizzi, puoi vedere che differiscono solo nel primo e nell'ultimo carattere e che l'"account_id" al centro è lo stesso. Tuttavia, non possiamo ancora vedere la relazione tra la chiave pubblica e l'indirizzo dell'account. In realtà, il mistero sta nel fatto che i "dati iniziali" contengono inizialmente la chiave pubblica dell'utente, attraverso la quale l'utente controlla la proprietà del contratto del portafoglio. "workchainId" è facile da capire. TON non è solo una singola catena. È composto da molti frammenti. Ogni frammento fa parte dell'intera rete e gestisce un insieme specifico di account e transazioni. Per poter localizzare e gestire gli smart contract è necessario indicare chiaramente in quale shard si trovano. Qual è la differenza tra "rimbalzabile" e "non rimbalzabile"? Questo è legato al meccanismo di funzionamento dei contratti intelligenti, continuiamo a guardare di seguito.
contratto di portafoglio
Quello che segue è un codice sorgente di un contratto di portafoglio utente. Puoi vedere che legge 4 parametri (stored_seqno, stored_subwallet, public_key, plugins) quando riceve il messaggio dell'utente:
portafoglio-v4-codice.fc
() recv_external(fetta in_msg) impuro {
var signature = in_msg~load_bits( 512);
var cs = in_msg;
var (subwallet_id, valid_until, msg_seqno) = (cs~load_uint( 32), cs~load_uint( 32), cs~load_uint( 32));
throw_if( 36, valid_until <= now());
var ds = get_data().begin_parse();
var (stored_seqno, stored_subwallet, public_key, plugins) = (ds~load_uint( 32), ds~load_uint( 32), ds~load_uint( 256), ds~load_dict()); ;;#Idati iniziali
{NS} = ...
throw_unless( 33, msg_seqno == stored_seqno);
throw_unless( 34, subwallet_id == stored_subwallet);
throw_unless( 35, check_signature(slice_hash(in_msg), firma, chiave_pubblica));
//...
}
Esatto, quando si distribuisce il contratto del portafoglio di questo utente, è necessario passare alcuni parametri iniziali, che includono informazioni public_key a 256 bit. Ciò garantisce che ogni utente abbia un contratto indipendente quando utilizza lo stesso codice di contratto. Tutte le transazioni avviate dall'utente devono firmare `in_msg`, quindi verificare la firma (check_signature) tramite il proprio contratto di portafoglio, quindi il contratto chiamerà tutte le operazioni sulla catena. Da qui possiamo anche dedurre che la chiave pubblica di un utente può effettivamente corrispondere a innumerevoli indirizzi di portafoglio. È sufficiente distribuire portafogli con codici sorgente diversi o dati di inizializzazione diversi per ottenere indirizzi di contratto completamente diversi.
Gettone Jetton
Il token è la rappresentazione degli asset sulla catena, quindi è un elemento base che dobbiamo comprendere. Jetton è la forma standard del token TON Jetton è costituito da due contratti, Jetton-minter e Jetton-wallet:
Quando viene emesso un token, verrà creato un contratto Jetton-minter. L'inizializzazione del contratto registra l'importo totale di token, amministratori, codici portafoglio e altre informazioni.
Quando i token vengono distribuiti agli utenti, il contratto Minter distribuirà un contratto di portafoglio per l'utente e registrerà il saldo dell'utente, la proprietà, l'indirizzo del contratto Minter del token, il codice del portafoglio utente e altre informazioni quando il contratto viene inizializzato. Ogni utente distribuirà un contratto indipendentemente. Tieni presente che il contratto creato qui è un contratto di portafoglio utilizzato per gestire un token Jetton specifico, che è diverso dal contratto del portafoglio dell'account dell'utente. Owner_address qui registra l'indirizzo del portafoglio dell'account dell'utente.
Quando l'utente Alice trasferisce denaro all'utente Bob, la relazione di chiamata è la seguente:
Alice firma l'APP fuori catena e fornisce le istruzioni operative chiamando il contratto del suo portafoglio. Queste istruzioni chiamano ulteriormente il suo portafoglio token per effettuare il trasferimento. Quando il portafoglio token di Bob riceve il token, avviserà il contratto del portafoglio di Bob (ovvero l'indirizzo del proprietario del portafoglio Bob Jetton). Se rimane Gas durante la transazione, verrà restituito all'indirizzo di risposta, solitamente il contratto del conto di Alice.
Questo è un trasferimento di token Jetton analizzato dal browser Tonviewer:
Un trasferimento ERC 20 deve chiamare almeno un contratto, mentre un trasferimento di token Jetton deve chiamare almeno quattro contratti. Ciò viene fatto per consentire l'esecuzione simultanea dei trasferimenti sulla catena e migliorare l'efficienza delle transazioni.
commercio
Quando succede qualcosa a un conto in TON, verrà avviata una transazione. L'evento più comune è "la ricezione di un messaggio". La transazione include quanto segue:
Il messaggio in arrivo che attiva inizialmente il contratto (esiste un metodo di attivazione speciale)
Azioni contrattuali causate da messaggi in arrivo, come l'aggiornamento dello spazio di archiviazione del contratto (facoltativo)
Messaggi in uscita ad altri partecipanti (facoltativo)
Ci sono diverse caratteristiche a cui devi prestare attenzione quando fai trading:
1. Asincrono: le transazioni TON non vengono completate in una chiamata. Potrebbe essere necessario passare messaggi a più contratti intelligenti diversi per eseguire una serie di chiamate. A causa del diverso routing nelle catene di shard, TON non può garantire l'ordine di consegna dei messaggi tra più contratti intelligenti.
2. Commissioni di gestione: la natura asincrona comporta anche un problema, ovvero le spese di gestione consumate sono difficili da stimare. Pertanto, quando si avvia una transazione, il portafoglio solitamente invia alcuni token in più come commissioni di gestione. Se il contratto richiamato dispone di un buon meccanismo di commissioni di gestione, le restanti commissioni di gestione verranno eventualmente restituite al portafoglio dell'utente. Per questo motivo gli utenti potrebbero osservare che i token del loro portafoglio diminuiscono improvvisamente e poi aumentano dopo pochi minuti.
3. Rimbalzo: il rimbalzo è un meccanismo di gestione degli errori del contratto Quando il contratto chiamante non esiste o genera un errore, se la transazione è impostata per il rimbalzo, il messaggio rimbalzato verrà rispedito al contratto chiamante. Ad esempio, se un utente avvia un trasferimento e si verifica un errore nel processo di chiamata, è necessario un messaggio di mancato recapito in modo che il contratto del portafoglio dell'utente possa ripristinare il proprio saldo. Quasi tutti i messaggi interni inviati tra contratti intelligenti dovrebbero essere rimbalzabili, ovvero il loro bit di "rimbalzo" dovrebbe essere impostato.
Sicurezza patrimoniale
TON ha molte funzionalità che possono causare problemi di sicurezza, quindi gli utenti devono anche essere consapevoli di alcune insidie comuni.
Attacco di intercettazione a pagamento
Come accennato in precedenza, i portafogli spesso devono inviare maggiori commissioni di gestione per evitare errori di esecuzione delle transazioni, il che consente agli aggressori di trovare opportunità per fare del male. Se sei un utente del portafoglio TON, potresti aver riscontrato questa situazione. Ricevi sempre vari NFT o token nel tuo portafoglio. Pensavi che fossero solo alcuni airdrop di token spazzatura, ma quando hai controllato le informazioni sulla transazione, hai scoperto che non era possibile venderli. Meno soldi? Tuttavia, quando si avvia una transazione, si scopre che la commissione di gestione richiesta è estremamente elevata (1 TON). In questo momento, è necessario prestare attenzione. Potrebbe trattarsi di una frode relativa alle commissioni di gestione.
L'aggressore ha utilizzato un contratto token attentamente costruito per rendere estremamente alta la commissione di trasferimento stimata del portafoglio, ma durante l'esecuzione effettiva ha solo trattenuto la commissione e non ha inviato un messaggio di trasferimento.
Pesca del primo e dell'ultimo numero
Il phishing dei numeri di testa e coda non è esclusivo di TON. Questo tipo di attacco di phishing esiste in tutte le principali catene pubbliche. L'aggressore genererà un account ad alta imitazione con lo stesso primo e ultimo numero per ogni indirizzo utente nell'intera rete. Quando l'utente invia un trasferimento, l'aggressore utilizzerà anche l'account ad alta imitazione per inviare un piccolo trasferimento nell'account dell'utente. ricevuta. Lasciare una traccia nella ricevuta del pagamento. Quando l'utente ricevente desidera trasferire nuovamente un token, può copiare l'indirizzo dal record storico. In questo momento, è probabile che venga copiato nell'indirizzo dell'attaccante, causando il trasferimento all'indirizzo sbagliato il comportamento dell'utente.
commenta la pesca
TON può aggiungere un commento durante il trasferimento di denaro per annotare le informazioni sulla transazione. Questa funzione viene spesso utilizzata durante la ricarica sugli scambi. Gli scambi solitamente richiedono agli utenti di annotare l'ID utente durante la ricarica. Tuttavia, questa funzione viene spesso sfruttata in modo dannoso, con gli aggressori che defraudano gli utenti delle loro risorse scrivendo informazioni fraudolente nelle note. Come mostrato nell'immagine:
Gli utenti devono prestare particolare attenzione al numero di telegramma anonimo NFT Se l'utente utilizza il numero di telegramma anonimo per aprire un account TG ma non apre la verifica in due passaggi, una volta che l'NFT viene phishing, gli hacker possono accedere direttamente all'account TG di destinazione. e condurre successivi furti di beni.
Vulnerabilità del contratto intelligente
Le vulnerabilità della sicurezza nei contratti intelligenti causeranno danni ai fondi degli utenti investiti nei contratti intelligenti Gli utenti devono scegliere progetti ben controllati quando scelgono i progetti. Gli smart contract di TON sono programmati principalmente utilizzando il linguaggio FunC, ma utilizzano anche il più avanzato Tact, o il Fift di livello inferiore, che sono tutti linguaggi altamente originali. I nuovi linguaggi di programmazione comporteranno nuovi rischi per la sicurezza. Soprattutto per gli sviluppatori, che devono avere buone abitudini di programmazione sicura, padroneggiare le migliori pratiche di sicurezza e sottoporsi a severi controlli di sicurezza prima della distribuzione nell'ambiente di produzione Non discutere della sicurezza del contratto per ora.
Attacco di ricarica falso
Gli utenti di portafogli o scambi devono prestare attenzione agli attacchi di depositi falsi. Di solito esistono due tipi di attacchi di depositi falsi:
Per le monete contraffatte, l'aggressore emette un token con gli stessi metadati del token di destinazione. Se il programma di immissione automatizzata non verifica se si tratta del contratto di minatore corretto, ciò comporterà un'immissione errata.
Rimbalzo, il processo di trasferimento di TON richiede una relazione di chiamata tra i contratti del portafoglio dei due utenti Se il contratto del portafoglio del destinatario non esiste e la transazione è impostata su Rimbalzabile, il messaggio verrà rimbalzato e i fondi originali verranno detratti dal conto. spese di gestione. Restituzione al mittente. Gli amici interessati ai dettagli possono consultare l'articolo sulla ricarica falsa che abbiamo precedentemente divulgato.
Riassumere
Questo articolo introduce alcuni principi tecnici di base di TON dal punto di vista della creazione della chiave pubblica e privata di TON, del contratto del portafoglio, della forma del token, delle caratteristiche della transazione, ecc. E discute anche i possibili problemi di sicurezza nel processo di utilizzo di TON. Spero che possa essere d'aiuto tutti imparano. Porta ispirazione.
Link di riferimento:
Italiano: https://docs.ton.org/
https://github.com/ton-blockchain/wallet-contract