Introduzione à i Smart Contracts

In questu articulu, avemu da guardà ciò chì i cuntratti intelligenti sò, ciò chì sò, avemu da fà cunniscenze cù e diverse plataformi di cuntratti intelligenti, e so caratteristiche, è ancu discute cumu si travaglianu è chì vantaghji ponu purtà. Stu materiale serà assai utile per i lettori chì ùn sò micca bè familiarizati cù u tema di cuntratti intelligenti, ma volenu avvicinassi à capiscenu.

Cuntrattu regulare vs. cuntrattu intelligenti

Prima di sfondà in i dettagli, pigliemu un esempiu di e sferenze trà un cuntrattu regulare, chì hè specificatu nantu à carta, è un cuntrattu intelligente, chì hè rapprisintatu digitale.

Introduzione à i Smart Contracts

Cumu hà travagliatu prima di l'avventu di cuntratti intelligenti? Imagine un gruppu di persone chì volenu stabilisce certe regule è cundizioni per a distribuzione di i valori, è ancu un certu mecanismu per guarantiscia l'implementazione di sta distribuzione secondu e regule è e cundizioni datu. Allora si riuniscenu, scrivenu un documentu nantu à quale anu scrittu i so dati d'identificazione, i termini, i valori implicati, datali è firmanu. Stu cuntrattu hè statu ancu certificatu da una parte di fiducia, cum'è un nutariu. In più, sti pirsuni si n'andò in direzzione diffirenti cù a so copia di carta di un tali cuntrattu è cuminciaru à fà alcune azzioni chì ùn puderanu micca currisponde à u cuntrattu stessu, vale à dì, anu fattu una cosa, ma nantu à a carta hè stata certificata chì deve fà qualcosa. completamente differente. E cumu per esce da sta situazione? In fatti, unu di i membri di u gruppu hà bisognu di piglià stu documentu, piglià qualchi evidenza, pigliallu in tribunale è ottene u rispettu trà u cuntrattu è l'azzioni attuali. Piuttostu spessu, hè difficiule di ottene una implementazione ghjusta di stu cuntrattu, chì porta à cunsequenze dispiacenti.

Chì si pò dì di i cuntratti intelligenti? Cumbinanu a pussibilità di scrive i termini di u cuntrattu è u mecanismu per a so implementazione stretta. Se e cundizioni sò state stabilite è a transazzione currispondente o a dumanda hè stata firmata, allora una volta chì a dumanda o transazzione hè stata accettata, ùn hè più pussibule di cambià e cundizioni o influenzà a so implementazione.

Ci hè un validatore o una reta sana, è ancu una basa di dati chì guarda tutti i cuntratti intelligenti chì sò stati sottumessi per l'esekzione in un strettu ordine cronologicu. Hè impurtante ancu chì sta basa di dati deve cuntene tutte e cundizioni di attivazione per eseguisce u cuntrattu intelligente. Inoltre, deve piglià in contu u valore assai chì a distribuzione hè descritta in u cuntrattu. Se questu hè applicatu à una certa munita digitale, allora sta basa di dati deve piglià in contu.

In altri palori, i validatori di cuntrattu intelligenti devenu avè accessu à tutte e dati chì u cuntrattu intelligenti opera. Per esempiu, una sola basa di dati deve esse aduprata per cuntà simultaneamente muniti digitale, saldi di l'utilizatori, transazzioni d'utilizatori è timestamps. Allora, in un cuntrattu intelligente, a cundizione pò esse l'equilibriu di l'utilizatori in una certa munita, l'arrivu di un certu tempu, o u fattu chì una certa transazzione hè stata realizata, ma nunda di più.

Definizione di un cuntrattu intelligente

In generale, a terminologia stessa hè stata creata da u ricercatore Nick Szabo è prima utilizata in u 1994, è hè statu documentatu in u 1997 in un articulu chì descrive l'idea stessa di cuntratti intelligenti.

I cuntratti intelligenti implicanu chì una certa automatizazione di a distribuzione di valore hè realizata, chì pò dipende solu di e cundizioni chì sò predeterminate in anticipu. In a so forma più simplice, s'assumiglia à un cuntrattu cù termini strettamente definiti, chì hè firmatu da certi partiti.

I cuntratti intelligenti sò pensati per minimizzà a fiducia in terze parti. Calchì volta u centru di decisione da quale tuttu dipende hè cumplettamente escluditu. Inoltre, tali cuntratti sò più faciuli di audità. Questa hè una cunsequenza di qualchi funziunalità di designu di un tali sistema, ma a maiò parte di spessu capiscenu per un cuntrattu intelligente un ambiente decentralizatu è a presenza di funzioni chì permettenu à qualcunu di analizà a basa di dati è di fà un auditu cumpletu di l'esekzione di cuntratti. Questu assicura a prutezzione contra i cambiamenti di dati retroattivi chì implicanu cambiamenti in l'esecuzione di u cuntrattu stessu. A digitalizazione di a maiò parte di i prucessi quandu creanu è lanciate un cuntrattu intelligente spessu simplificà a tecnulugia è u costu di a so implementazione.

Un esempiu simplice - serviziu di escrow

Fighjemu un esempiu assai simplice. Vi aiuterà à avvicinassi à capiscenu a funziunalità di i cuntratti intelligenti, è ancu à capisce megliu in quali casi deve esse usatu.

Introduzione à i Smart Contracts

Pò esse ancu implementatu cù Bitcoin, ancu s'ellu avà Bitcoin pò ancu esse chjamatu una piattaforma cumpleta per i cuntratti intelligenti. Dunque, avemu qualchì cumpratore è avemu una tenda in linea. Un cliente vole cumprà un monitor da questa tenda. In u casu più simplice, u cumpratore cumpleta è manda un pagamentu, è a tenda in linea accetta, cunfirma, è poi spedisce a merchenzie. In ogni casu, in questa situazione, ci hè bisognu di una grande fiducia - u cumpratore deve fiducia in a tenda online per tuttu u costu di u monitor. Siccomu una tenda in linea pò avè una bassa reputazione à l'ochji di u cumpratore, ci hè u risicu chì per una certa ragione, dopu avè accettatu u pagamentu, a tenda ricusarà u serviziu è ùn mandarà micca e merchenzie à u cumpratore. Per quessa, u cumpratore dumanda a quistione (è, per quessa, a tenda in linea dumanda sta quistione) ciò chì pò esse appiicata in questu casu per minimizzà tali risichi è rende tali transazzione più affidabile.

In u casu di Bitcoin, hè pussibule di permette à u cumpratore è u vinditore di sceglie indipindente un mediatore. Ci hè parechje persone chì sò implicati in a risoluzione di prublemi cuntruversi. È i nostri participanti ponu sceglie da una lista generale di mediatori quellu chì anu fiducia. Inseme creanu un indirizzu multisignature 2 di 3 induve ci sò trè chjavi è duie firme cù qualsiasi duie chjavi sò necessarii per gastru muniti da quellu indirizzu. Una chjave appartene à u cumpratore, a seconda à a tenda online, è a terza à u mediatore. È à un tali indirizzu multisignature u cumpratore mandarà a quantità necessaria per pagà per u monitor. Avà, quandu u vinditore vede chì i soldi sò bluccati per qualchì tempu à un indirizzu multisignature chì dipende di ellu, pò mandà in modu sicuru u monitor per mail.

Dopu, u cumpratore riceve u pacchettu, inspecciona e merchenzie è piglia una decisione nantu à a compra finale. Puderà cumplettamente d'accordu cù u serviziu furnitu è ​​firmà a transazzione cù a so chjave, induve trasferisce muniti da l'indirizzu multisignature à u vinditore, o pò esse insatisfattu di qualcosa. In u sicondu casu, cuntattate un mediatore per mette inseme una transazzione alternativa chì distribuirà quelli muniti in modu diversu.

Diciamu chì u monitoru hè ghjuntu un pocu graffiatu è u kit ùn hà micca include un cable per cunnette à l'urdinatore, anche se u situ web di a tenda online hà dettu chì u cable deve esse inclusu in u kit. Allora u cumpratore raccoglie l'evidenza necessaria per pruvà à u mediatore chì hè statu ingannatu in questa situazione: piglia screenshots di u situ, piglia una foto di a ricevuta di mail, piglia una foto di i scratch in u monitor è mostra chì u sigillo era rottu è u cable hè statu tiratu fora. A tenda in linea, à u turnu, recullà a so evidenza è a trasfirìu à u mediatore.

U mediatore hè interessatu à suddisfà simultaneamente l'indignazione di u cumpratore è l'interessi di a tenda online (diventà chjaru perchè dopu). Custituisce una transazzione in quale muniti da un indirizzu multisignature seranu spesi in una certa proporzione trà u cumpratore, a tenda in linea è u mediatore, postu chì ellu piglia una parte per ellu stessu cum'è ricumpensa per u so travagliu. Diciamu chì u 90% di a quantità tutale va à u vinditore, u 5% à u mediatore è u 5% a compensazione à u cumpratore. U mediatore firma sta transazzione cù a so chjave, ma ùn pò ancu esse appiicata, perchè esige duie firme, ma solu una vale a pena. Manda una tale transazzione sia à u cumpratore sia à u venditore. Se almenu unu di elli hè cuntentu di sta opzione per a redistribuzione di muniti, a transazzione serà pre-firmata è distribuita à a reta. Per cunvalidà, hè abbastanza chì unu di i partiti di a transazzione accunsente cù l'opzione di u mediatore.

Hè impurtante di sceglie inizialmente un mediatore per chì i dui participanti anu fiducia in ellu. In questu casu, hà da agisce indipindentamente di l'interessi di unu o di l'altru è valuterà in modu obiettivu a situazione. Se u mediatore ùn furnisce micca una opzione per a distribuzione di muniti chì satisfarà almenu un participante, allora, dopu avè accunsentutu inseme, u cumpratore è a tenda in linea ponu mandà e muniti à un novu indirizzu multisignature mettendu e so duie firme. U novu indirizzu multisignature serà cumpilatu cù un mediatore diversu, chì pò esse più cumpetente in a materia è furnisce una opzione megliu.

Esempiu cù un dormitoriu è un frigorifero

Fighjemu un esempiu più cumplessu chì mostra e capacità di un cuntrattu intelligente più esplicitamente.

Introduzione à i Smart Contracts

Diciamu chì ci sò trè omi chì si sò mudificate di pocu tempu in a stessa stanza di dormitori. I trè sò interessate à cumprà un frigorifero per a so stanza chì ponu aduprà inseme. Unu d'elli s'hè vuluntariu per cullà a quantità necessaria per cumprà un frigorifero è negoziate cù u vinditore. Tuttavia, si ncuntravanu solu pocu è ùn ci hè micca abbastanza fiducia trà elli. Ovviamente, dui di elli piglianu un risicu dandu soldi à u terzu. Inoltre, anu bisognu à ghjunghje à un accordu per sceglie un venditore.

Puderanu usà u serviziu di escrow, vale à dì, sceglite un mediatore chì monitorerà l'esekzione di a transazzione è risolve i prublemi cuntruversu s'ellu ci hè. Allora, dopu avè accunsentutu, scrivenu un cuntrattu intelligenti è prescrive certe cundizioni in questu.

A prima cundizione hè chì prima di un certu tempu, dì in una settimana, u cuntu currispundente smart contract deve riceve trè pagamenti da certi indirizzi per una certa quantità. S'ellu ùn succede micca, u cuntrattu intelligente cessà di eseguisce è torna e muniti à tutti i participanti. Se a cundizione hè cumpleta, i valori di l'identificatori di u venditore è di u mediatore sò stabiliti, è a cundizione hè verificata chì tutti i participanti accunsenu cù a scelta di u vinditore è u mediatore. Quandu tutte e cundizioni sò scontri, allura i fondi saranu trasferiti à l'indirizzi specificati. Stu approcciu pò prutege i participanti da u fraudulente da ogni parte è generalmente elimina a necessità di fiducia.

Videmu in questu esempiu u principiu stessu chì sta capacità di mette i paràmetri per rializà ogni cundizione permette di creà sistemi di ogni cumplessità è prufundità di livelli nidificati. Inoltre, pudete definisce prima a prima cundizione in u cuntrattu intelligenti, è solu dopu à u so cumpiimentu pudete stabilisce parametri per a prossima cundizione. In altri palori, a cundizione hè scritta formalmente, è i paràmetri per questu pò esse stabilitu digià durante u so funziunamentu.

Classificazione di cuntratti intelligenti

Per a classificazione, pudete stabilisce diversi gruppi di criteri. Tuttavia, à u mumentu di u sviluppu di a tecnulugia, quattru di elli sò pertinenti.

I cuntratti intelligenti ponu esse distinti da u so ambiente d'esekzione, chì ponu esse centralizzati o decentralizati. In u casu di a decentralizazione, avemu una indipendenza assai più grande è a tolleranza di colpa quandu eseguisce cuntratti intelligenti.

Puderanu ancu esse distinti da u prucessu di stabilisce è cumpiendu e cundizioni: ponu esse programabili liberamente, limitati o predefiniti, vale à dì strettamente tipati. Quandu ci sò solu 4 cuntratti intelligenti specifichi nantu à a piattaforma smart contract, i paràmetri per elli ponu esse stabiliti in ogni modu. In cunsiquenza, a stallazione di elli hè assai più simplice: selezziunate un cuntrattu da a lista è passemu i paràmetri.

Sicondu u metudu di l'iniziu, ci sò cuntratti intelligenti automatizati, vale à dì, quandu certe cundizioni si verificanu, sò auto-executive, è ci sò cuntratti in quale e cundizioni sò specificate, ma a piattaforma ùn verifica automaticamente u so cumplementu; deve esse iniziatu separatamente.

Inoltre, i cuntratti intelligenti varienu in u so livellu di privacy. Puderanu esse completamente aperti, parzialmente o completamente cunfidenziale. L'ultime significa chì l'osservatori di terzu ùn vedenu micca i termini di i cuntratti intelligenti. Tuttavia, u tema di a privacy hè assai largu è hè megliu cunsiderà separatamente da l'articulu attuale.

Quì sottu, daremu un ochju più attentu à i primi trè criteri per purtà più chiarezza à l'intelligenza di u tema attuale.

Cuntratti intelligenti per runtime

Introduzione à i Smart Contracts

Basatu nantu à l'ambiente di esecutivu, una distinzione hè fatta trà e plataforme di cuntratti intelligenti centralizzate è decentralizate. In u casu di cuntratti digitali centralizzati, un serviziu unicu hè utilizatu, induve ci hè solu un validatore è pò esse un serviziu di salvezza è ricuperazione, chì hè ancu amministratu cintrali. Ci hè una basa di dati chì guarda tutte l'infurmazioni necessarii per stabilisce i termini di u cuntrattu intelligente è distribuisce u valore chì hè cunsideratu in questa basa di dati di serviziu. Un tali serviziu centralizatu hà un cliente chì stabilisce e cundizioni cù certe richieste è usa tali cuntratti. A causa di a natura centralizata di a piattaforma, i miccanismi d'autentificazione pò esse menu sicuru ch'è in cripto muniti.

Per esempiu, pudemu piglià i fornituri di cumunicazione mobile (sferenti operatori mobili). Dicemu chì un certu operatore mantene un registru centralizatu di u trafficu nantu à i so servitori, chì pò esse trasmessi in diversi formati, per esempiu: in forma di chjama di voce, trasmissione SMS, trafficu Internet mobile, è secondu e diverse norme, è ancu mantene i registri. di fondi nantu à i saldi di l'utilizatori. In cunsiquenza, u fornitore di cumunicazione mobile pò stabilisce cuntratti per a cuntabilità di i servizii furniti è u so pagamentu cù e diverse cundizioni. In questu casu, hè faciule per stabilisce e cundizioni cum'è "invià un SMS cù un tali è un codice à un tali è un tali numeru è riceverete tali è tali cundizioni per a distribuzione di u trafficu".

Un altru esempiu pò esse datu: banche tradiziunali cù funziunalità ampliata di Internet banking è cuntratti assai sèmplice, cum'è pagamentu regulare, cunversione automatica di pagamentu in entrata, deduzzione automatica di interessu à un contu specificu, etc.

Se parlemu di cuntratti intelligenti cù un ambiente di esecutivu decentralizatu, allora avemu un gruppu di validatori. Ideale, qualcunu pò diventà un validatore. A causa di u protokollu di sincronizazione di basa di dati è ghjunghje à u cunsensu, avemu una basa di dati cumuni chì avà guardà tutte e transazzione cù cuntratti strettamente descritti, è micca alcune dumande cundiziunali, i formati di quale spessu cambianu, è ùn ci hè micca una specificazione aperta. Quì, e transazzione cuntenenu struzzioni per eseguisce u cuntrattu secondu una specificazione stretta. Questa specificazione hè aperta è, per quessa, l'utilizatori di a piattaforma ponu audità è validà cuntratti intelligenti. Quì vedemu chì e plataforme decentralizate sò superiori à e centralizzate in quantu à l'indipendenza è a toleranza di difetti, ma u so designu è mantenimentu sò assai più cumplessi.

Cuntratti intelligenti per u metudu di stabilisce è cumpiendu e cundizioni

Avà fighjemu un sguardu più vicinu à cumu i cuntratti intelligenti ponu differisce in a manera chì stabiliscenu è cumpiendu e cundizioni. Quì turnemu a nostra attenzione à i cuntratti intelligenti chì sò programabili in modu aleatoriu è Turing cumpletu. Un cuntrattu intelligenti Turing-complete permette di stabilisce quasi tutti l'algoritmi cum'è cundizioni per l'esekzione di u cuntrattu: scrive cicli, alcune funzioni per calculà probabilità, è simili - ghjustu finu à i vostri algoritmi di firma elettronica. In questu casu, significhemu veramente scrittura arbitraria di logica.

Ci sò ancu cuntratti intelligenti arbitrarie, ma micca Turing cumpletu. Questu include Bitcoin è Litecoin cù u so propiu script. Questu significa chì pudete aduprà solu certe operazioni in ogni ordine, ma ùn pudete più scrive loops è i vostri algoritmi.

Inoltre, ci sò e plataforme di cuntratti intelligenti chì implementanu cuntratti intelligenti predefiniti. Questi include Bitshares è Steemit. Bitshares hà una gamma di cuntratti intelligenti per u cummerciu, a gestione di u contu, a gestione di a piattaforma stessa è i so paràmetri. Steemit hè una piattaforma simili, ma ùn hè più focu annantu à l'emissione di tokens è u cummerciu, cum'è Bitshares, ma in i blogging, vale à dì chì guarda è processa u cuntenutu in una manera decentralizata.

I cuntratti arbitrarii Turing-complete includenu a piattaforma Ethereum è RootStock, chì hè sempre in sviluppu. Per quessa, quì sottu avemu abitatu in un pocu più di dettu nantu à a piattaforma smart contract Ethereum.

Cuntratti intelligenti per metudu di iniziazione

Basatu nantu à u metudu di l'iniziu, i cuntratti intelligenti ponu ancu esse divisu in almenu dui gruppi: automatizatu è manuale (micca automatizatu). L'automatizazione sò carattarizati da u fattu chì, datu tutti i paràmetri è e cundizioni cunnisciuti, u cuntrattu intelligente hè cumplettamente eseguitu automaticamente, vale à dì, ùn hè micca bisognu di mandà transazzioni supplementari è di spende una cumissioni supplementari per ogni esicuzzioni sussegwente. A piattaforma stessu hà tutte e dati per calculà cumu si compie u cuntrattu intelligente. A logica ùn hè micca arbitraria, ma predeterminata è tuttu questu hè previsible. Questu hè, pudete estimà in anticipu a cumplessità di eseguisce un cuntrattu intelligente, utilizate un tipu di cumissioni constante per questu, è tutti i prucessi per a so implementazione sò più efficaci.

Per i cuntratti intelligenti chì sò liberamente programati, l'esekzione ùn hè micca automatizata. Per inizià un tali cuntrattu intelligenti, à quasi ogni passu avete bisognu di creà una nova transazzione, chì chjamà a prossima tappa di esecuzione o u prossimu mètudu di cuntrattu intelligente, pagà a cumissioni approprita è aspittà chì a transazzione sia cunfirmata. L'esecuzione pò esse cumpletu cù successu o micca, perchè u codice di u cuntrattu intelligente hè arbitrariu è alcuni mumenti imprevisible ponu appare, cum'è un ciclu eternu, una mancanza di certi paràmetri è argumenti, eccezzioni unhandled, etc.

Conti Ethereum

Tipi di contu Ethereum

Fighjemu chì tipi di cunti ponu esse nantu à a piattaforma Ethereu. Ci sò solu dui tipi di cunti quì è ùn ci sò altre opzioni. U primu tipu hè chjamatu un contu d'utilizatore, u sicondu hè un contu di cuntrattu. Scupritemu cumu si sò diffirenti.

U contu d'utilizatore hè cuntrullatu solu da a chjave persunale di a firma elettronica. U pruprietariu di u contu genera a so propria coppia di chjave per a firma elettronica utilizendu l'algoritmu ECDSA (Algoritmu di firma digitale di curva ellittica). Solu transazzione firmata cù sta chjave pò cambià u statu di stu contu.

Una logica separata hè furnita per u contu smart contract. Pò esse cuntrullatu solu da un codice di software predefinitu chì determina cumplettamente u cumpurtamentu di u cuntrattu intelligente: cumu gestionerà e so muniti in certi circustanzi, à l'iniziativa di quale utilizatore è in quali cundizioni supplementari seranu distribuiti sti muniti. Se certi punti ùn sò micca furniti da i sviluppatori in u codice di u prugramma, ponu esse prublemi. Per esempiu, un cuntrattu intelligente pò riceve un certu statu in u quale ùn accetta micca l'iniziu di più esecutivu da alcunu di l'utilizatori. In questu casu, i muniti seranu veramente congelati, perchè u cuntrattu intelligente ùn furnisce micca per esce da stu statu.

Cumu sò creati cunti nantu à Ethereu

In u casu di un contu d'utilizatore, u pruprietariu genera indipindente una coppia di chjave cù ECDSA. Hè impurtante di nutà chì Ethereu usa esattamente u stessu algoritmu è esattamente a stessa curva ellittica per a firma elettronica cum'è Bitcoin, ma l'indirizzu hè calculatu in una manera ligeramente diversa. Quì, u risultatu di u doppiu hashing ùn hè più utilizatu, cum'è in Bitcoin, ma l'hashing unicu hè furnitu cù a funzione Keccak à una durata di 256 bits. I bits menu significativu sò tagliati da u valore risultatu, vale à dì i bits 160 più significativi di u valore di hash di output. In u risultatu, avemu un indirizzu in Ethereu. In fatti, pigghia 20 bytes.

Per piacè nutate chì l'identificatore di u contu in Ethereu hè codificatu in hex senza applicà un checksum, à u cuntrariu di Bitcoin è parechji altri sistemi, induve l'indirizzu hè codificatu in un sistema di numeri di basa 58 cù l'aghjunzione di un checksum. Questu significa chì avete bisognu à esse attentu à travaglià cù l'identificatori di u contu in Ethereu: ancu un sbagliu in l'identificatore hè garantitu per guidà a perdita di muniti.

Ci hè una funzione impurtante è hè chì un contu d'utilizatore à u livellu generale di a basa di dati hè creatu in u mumentu chì accetta u primu pagamentu in entrata.

A creazione di un cuntu cuntrattu intelligente piglia un approcciu completamente diversu. In principiu, unu di l'utilizatori scrive u codice fonte di u cuntrattu intelligente, dopu chì u codice hè passatu per un compilatore speciale per a piattaforma Ethereu, ottenendu bytecode per a so propria macchina virtuale Ethereum. U bytecode resultante hè piazzatu in un campu speciale di a transazzione. Hè certificatu in nome di u contu di l'iniziatore. Dopu, sta transazzione hè propagata in tutta a reta è mette u codice di u cuntrattu intelligente. A cumissioni per a transazzione è, per quessa, per l'esekzione di u cuntrattu hè ritirata da u saldu di u contu di l'iniziatore.

Ogni cuntrattu intelligente cuntene necessariamente u so propiu custruttore (di stu cuntrattu). Pò esse viotu o pò avè cuntenutu. Dopu chì u custruttore hè eseguitu, hè creatu un identificatore di cuntu cuntratu intelligente, utilizendu quale pudete mandà muniti, chjamate certi metudi di cuntrattu intelligenti, etc.

Struttura di transazzione Ethereum

Per fà più chjaru, avemu da cumincià à guardà a struttura di una transazzione Ethereu è un esempiu di codice di cuntrattu intelligenti.

Introduzione à i Smart Contracts

Una transazzione Ethereu hè custituita da parechji campi. U primu di questi, nonce, hè un certu numaru di serie di a transazzione relative à u cuntu stessu chì u distribuisce è hè u so autore. Questu hè necessariu per distinguerà e transazzione doppia, vale à dì per escludiri u casu quandu a listessa transazzione hè accettata duie volte. Utilizendu un identificatore, ogni transazzione hà un valore hash unicu.

Dopu vene un campu cum'è prezzu di u gasu. Questu indica u prezzu à quale a valuta di basa Ethereu hè cunvertita in gasu, chì hè utilizatu per pagà per l'esekzione di u cuntrattu intelligente è l'attribuzione di a risorsa di a macchina virtuale. Cosa significa?

In Bitcoin, i tariffi sò pagati direttamente da a valuta di basa - Bitcoin stessu. Questu hè pussibule grazia à un mecanismu simplice per u calculu: paghemu strettamente per a quantità di dati cuntenuti in a transazzione. In Ethereu a situazione hè più cumplicata, perchè hè assai difficiuli di s'appoghjanu nantu à u voluminu di dati di transazzione. Quì, a transazzione pò ancu cuntene u codice di prugramma chì serà eseguitu nantu à a macchina virtuale, è ogni operazione di a macchina virtuale pò avè una cumplessità sfarente. Ci sò ancu operazioni chì allocate memoria per variàbili. Avaranu a so propria cumplessità, da quale u pagamentu per ogni operazione dependerà.

U costu di ogni operazione in equivalente gasu serà custante. Hè introduttu specificamente per determinà u costu constante di ogni operazione. Sicondu a carica nantu à a reta, u prezzu di u gasu cambierà, vale à dì u coefficientu secondu chì a munita di basa serà cunvertita in questa unità ausiliaria per pagà a cumissioni.

Ci hè una funzione più di una transazzione in Ethereu: u bytecode chì cuntene per l'esekzione in una macchina virtuale serà eseguitu finu à chì finisce cù qualchì risultatu (successu o fallimentu) o finu à chì una certa quantità di muniti assignati esce per pagà a cumissioni. . Hè per evità una situazione induve, in casu d'errore, tutte e muniti di u contu di u mittente sò stati spesi in cumissioni (per esempiu, un tipu di ciculu eternu iniziatu in una macchina virtuale), u seguente campu esiste - principià u gasu (spessu chjamatu limitu di gas) - determina a quantità massima di muniti chì u mittente hè dispostu à passà per compie una certa transazzione.

U prossimu campu hè chjamatu indirizzu di destinazione. Questu include l'indirizzu di u destinatariu di e muniti o l'indirizzu di un cuntrattu intelligente specificu chì i metudi seranu chjamati. Dopu vene u campu valore, induve a quantità di muniti chì sò mandati à l'indirizzu di destinazione hè inseritu.

Dopu hè un campu interessante chjamatu données, induve tutta a struttura si mette. Questu ùn hè micca un campu separatu, ma una struttura sana in quale hè definitu u codice per a macchina virtuale. Pudete mette dati arbitrarie quì - ci sò reguli separati per questu.

È l'ultimu campu hè chjamatu Signature. Contene simultaneamente a firma elettronica di l'autore di sta transazzione è a chjave publica cù quale sta firma serà verificata. Da a chjave publica pudete uttene l'identificatore di u contu di u mittente di sta transazzione, vale à dì, identificà unicu u contu di u mittente in u sistema stessu. Avemu scupertu u principale di a struttura di a transazzione.

Esempiu di codice di cuntrattu intelligenti per Solidity

Fighjemu avà un ochju più vicinu à u cuntrattu intelligente più simplice cù un esempiu.

contract Bank {
    address owner;
    mapping(address => uint) balances;
    
    function Bank() {
        owner = msg.sender;
    }

    function deposit() public payable {
        balances[msg.sender] += msg.value;
    }

    function withdraw(uint amount) public {
        if (balances[msg.sender] >= amount) {
            balances[msg.sender] -= amount;
            msg.sender.transfer(amount);
        }
    }

    function getMyBalance() public view returns(uint) {
        return balances[msg.sender];
    }

    function kill() public {
        if (msg.sender == owner)
            selfdestruct(owner);
    }
}

Sopra hè un codice fonte simplificatu chì pò mantene e muniti di l'utilizatori è rinvià nantu à dumanda.

Dunque, ci hè un cuntrattu intelligente di u Bancu chì eseguisce e seguenti funzioni: accumule muniti nantu à u so equilibriu, vale à dì quandu una transazzione hè cunfirmata è un tali cuntrattu intelligente hè creatu, un novu contu hè creatu chì pò cuntene muniti in u so equilibriu; ricorda l'utilizatori è a distribuzione di muniti trà elli; hà parechji metudi per a gestione di i saldi, vale à dì, hè pussibule di rinfurzà, ritirate è verificate u saldo di l'utilizatori.

Andemu per ogni linea di codice fonte. Stu cuntrattu hà campi custanti. Unu di elli, cù l'indirizzu tipu, hè chjamatu pruprietariu. Quì u cuntrattu ricorda l'indirizzu di l'utilizatore chì hà creatu stu cuntrattu intelligente. In più, ci hè una struttura dinamica chì mantene a currispundenza trà l'indirizzi di l'utilizatori è i saldi.

Questu hè seguitu da u metudu Bank - hà u listessu nome cum'è u cuntrattu. Per quessa, questu hè u so custruttore. Quì a variabile di u pruprietariu hè attribuita l'indirizzu di a persona chì hà postu stu cuntrattu intelligente in a reta. Questu hè l'unicu ciò chì succede in questu custruttore. Questu hè, msg in questu casu hè esattamente i dati chì sò stati trasferiti à a macchina virtuale cù a transazzione chì cuntene tuttu u codice di stu cuntrattu. Per quessa, msg.sender hè l'autore di sta transazzione chì ospita stu codice. Serà u pruprietariu di u cuntrattu intelligente.

U metudu di accontu permette di trasfiriri un certu nùmeru di muniti à u cuntu di u cuntrattu per transazzione. In questu casu, u cuntrattu intelligente, riceve sti muniti, li lascia nantu à u so bilanciu, ma registra in a struttura di bilanci quale era esattamente u mittente di sti muniti per sapè à quale appartenenu.

U prossimu metudu hè chjamatu retirazzione è ci vole un paràmetru - a quantità di muniti chì qualchissia vole ritirà da questa banca. Questu verifica s'ellu ci sò abbastanza muniti in u saldu di l'utilizatore chì chjama stu metudu per mandà. Se ci sò abbastanza di elli, u cuntrattu intelligente stessu torna quellu numeru di muniti à u chjamante.

Dopu vene u metudu per verificà l'equilibriu attuale di l'utilizatori. Quellu chì chjama stu metudu serà utilizatu per ricuperà stu equilibriu in u cuntrattu intelligente. Hè nutate chì u modificatore di stu metudu hè vista. Questu significa chì u metudu stessu ùn cambia micca e variàbili di a so classa in ogni modu è in realtà hè solu un metudu di lettura. Nisuna transazzione separata hè creata per chjamà stu metudu, nisuna tarifa hè pagata, è tutti i calculi sò realizati in u locu, dopu chì l'utilizatore riceve u risultatu.

U metudu di uccisione hè necessariu per distrughje u statu di u cuntrattu intelligente. E quì ci hè un verificatu supplementu se u chjamante di stu metudu hè u pruprietariu di stu cuntrattu. Sì cusì, u cuntrattu s'autodestruisce, è a funzione di distruzzione piglia un paràmetru - l'identificatore di u contu à quale u cuntrattu mandarà tutte e muniti chì restanu in u so equilibriu. In questu casu, e muniti rimanenti andaranu automaticamente à l'indirizzu di u pruprietariu di u cuntrattu.

Cumu funziona un node pienu nantu à a reta di Ethereu?

Fighjemu schematicamente cumu tali cuntratti intelligenti sò eseguiti nantu à a piattaforma Ethereu è cumu funziona un nodu di rete cumpletu.

Introduzione à i Smart Contracts

Un node sanu nantu à a reta Ethereu deve avè almenu quattru moduli.
U primu, cum'è per qualsiasi protokollu descentralizatu, hè u modulu di rete P2P - un modulu per a cunnessione di a rete è u travagliu cù altri nodi, induve i blocchi, transazzione è infurmazioni nantu à altri nodi sò scambiati. Questu hè un cumpunente tradiziunale per tutte e criptocurrencies decentralizate.

In seguitu, avemu un modulu per almacenà e dati di blockchain, trasfurmà, sceglie un ramu priurità, appending blocks, unlinking blocks, validing these blocks, etc.

U terzu modulu hè chjamatu EVM (Ethereum virtual machine) - questa hè una macchina virtuale chì riceve bytecode da e transazzioni Ethereum. Stu modulu piglia u statu attuale di un contu particulari è face cambiamenti à u so statu basatu annantu à u bytecode ricevutu. A versione di a macchina virtuale nantu à ogni node di a reta deve esse uguali. I calculi chì si facenu nantu à ogni node Ethereum sò esattamente u listessu, ma si trovanu in una manera asincrona: qualcunu cuntrolla è accetta sta transazzione prima, vale à dì, eseguisce tuttu u codice cuntenutu in questu, è qualchissia dopu. Dunque, quandu una transazzione hè creata, hè distribuitu à a reta, i nodi l'accettanu, è à u mumentu di a verificazione, in u listessu modu chì Bitcoin Script hè eseguitu in Bitcoin, u bytecode di a macchina virtuale hè eseguitu quì.

Una transazzione hè cunsiderata verificata se tuttu u codice cuntenutu in questu hè statu eseguitu, un novu statu di un certu contu hè statu generatu è salvatu finu à ch'ella sia chjaru se sta transazzione hè stata applicata o micca. Se a transazzione hè appiicata, allora stu statu hè cunsideratu micca solu cumpletu, ma ancu attuale. Ci hè una basa di dati chì guarda u statu di ogni contu per ogni node di rete. A causa di u fattu chì tutti i calculi sò in u stessu modu è u statu di u blockchain hè u listessu, a basa di dati chì cuntene i stati di tutti i cunti serà ancu u stessu per ogni node.

Miti è limitazioni di i cuntratti intelligenti

In quantu à e restrizioni chì esistenu per e plataforme di cuntrattu intelligenti simili à Ethereu, ponu esse citati i seguenti:

  • esecuzione di codice;
  • alloca memoria;
  • dati blockchain;
  • mandà pagamentu;
  • crià un novu cuntrattu;
  • chjamate altri cuntratti.

Fighjemu e restrizioni chì sò imposte à una macchina virtuale, è, in cunseguenza, dissipate certi miti nantu à i cuntratti intelligenti. Nant'à una macchina virtuale, chì pò esse micca solu in Ethereu, ma ancu in e plataforme simili, pudete fà operazioni logiche veramente arbitrarie, vale à dì, scrive u codice è serà eseguitu quì, pudete ancu attribuisce memoria. Tuttavia, a tarifa hè pagata separatamente per ogni operazione è per ogni unità addiziale di memoria attribuita.

In seguitu, a macchina virtuale pò leghje e dati da a basa di dati blockchain per aduprà sta dati cum'è un trigger per eseguisce una o una altra logica di cuntrattu intelligente. A macchina virtuale pò creà è mandà transazzione, pò creà novi cuntratti è chjamà metudi di altri cuntratti intelligenti chì sò digià publicati nantu à a reta: esistenti, dispunibili, etc.

U mitu più cumuni hè chì i cuntratti intelligenti Ethereum ponu utilizà l'infurmazioni da ogni risorsa Internet in i so termini. A verità hè chì una macchina virtuale ùn pò micca mandà una dumanda di rete à qualchì risorsa d'infurmazione esterna in Internet, vale à dì, hè impussibile di scrive un cuntrattu intelligenti chì distribuirà u valore trà l'utilizatori secondu, per dì, ciò chì u clima hè fora. o chì vincìu qualchi campiunatu, o basatu nantu à ciò chì altru incidente accadutu in u mondu esternu, perchè l'infurmazioni nantu à questi incidenti ùn sò micca solu in a basa di dati di a piattaforma stessa. Questu hè, ùn ci hè nunda in u blockchain nantu à questu. Se ùn ci appare micca, allora a macchina virtuale ùn pò micca aduprà sta dati cum'è triggers.

Svantaghji di Ethereu

Elenchemu i principali. U primu svantaghju hè chì ci sò parechje difficultà in u disignu, u sviluppu è a prova di cuntratti intelligenti in Ethereu (Ethereu usa a lingua Solidità per scrive cuntratti intelligenti). Infatti, a pratica mostra chì un percentinu assai grande di tutti l'errori appartenenu à u fattore umanu. Questu hè veramente veru per i cuntratti intelligenti di Ethereum digià scritti chì anu una cumplessità media o più alta. Sè per i cuntratti intelligenti simplici, a probabilità di un errore hè chjuca, allora in i cuntratti intelligenti cumplessi ci sò assai spessu errori chì portanu à u furtu di fondi, a so congelazione, a distruzzione di cuntratti intelligenti in modu inespettatu, etc. Parechje tali casi sò digià digià. cunnisciutu.

U sicondu svantaghju hè chì a macchina virtuale stessu ùn hè micca perfetta, postu chì hè ancu scrittu da e persone. Pò eseguisce cumandamenti arbitrarii, è quì si trova a vulnerabilità: una quantità di cumandamenti ponu esse cunfigurati in una certa manera chì portanu à cunsequenze chì eranu impreviste in anticipu. Questu hè un spaziu assai cumplessu, ma ci sò digià parechji studii chì mostranu chì questi vulnerabili esistenu in a versione attuale di a reta Ethereu è ponu purtà à u fallimentu di parechji cuntratti intelligenti.

Un altru grande difficultà, pò esse cunsideratu un svantaghju. Si trova in u fattu chì pudete praticamente o tecnicamente ghjunghje à a cunclusione chì se compilate u bytecode di un cuntrattu chì serà eseguitu nantu à una macchina virtuale, pudete stabilisce un ordine specificu di operazioni. Quandu eseguite inseme, queste operazioni caricheranu assai a macchina virtuale è rallentaranu in modu sproporzionatu à a tarifa chì hè stata pagata per eseguisce queste operazioni.

In u passatu, ci era digià un periodu in u sviluppu di Ethereu, quandu parechji picciotti chì anu capitu in dettagliu l'operazione di una macchina virtuale truvaru tali vulnerabilità. In fatti, e transazzione paganu una tarifa assai chjuca, ma praticamenti rallenta tutta a reta. Questi prublemi sò assai difficiuli di risolve, postu chì hè necessariu, prima, per determinà elli, in segundu, per aghjustà u prezzu per eseguisce queste operazioni è, in terzu, per realizà una furchetta dura, chì significa aghjurnà tutti i nodi di rete à una nova versione. di u software, è dopu attivazione simultanea di sti cambiamenti.

In quantu à Ethereu, assai ricerca hè stata realizata, assai sperienza pratica hè stata acquistata: sia pusitivu è negativu, ma in ogni modu restanu difficultà è vulnerabili chì anu da esse trattatu in qualchì manera.

Allora, a parte tematica di l'articulu hè finita, andemu à e dumande chì si ponenu abbastanza spessu.

Часто задаваемые вопросы

- Se tutti i partiti di un cuntrattu intelligente esistenti volenu cambià i termini, ponu annullà stu cuntrattu intelligente cù multisig, è poi creà un novu cuntrattu intelligente cù i termini aghjurnati di a so esecuzione?

A risposta quì serà doppia. Perchè? Perchè da una banda, un cuntrattu intelligente hè definitu una volta è ùn implica più alcuna mudificazione, è da l'altra banda, pò avè una logica pre-scritta chì prevede un cambiamentu cumpletu o parziale di certi cundizioni. Vale à dì, sè vo vulete cambià qualcosa in u vostru cuntrattu intelligente, allora deve prescrive e cundizioni in quale pudete aghjurnà sti cundizioni. Per quessa, solu in una manera prudente pò esse urganizata a rinnuvamentu di u cuntrattu. Ma quì, ancu, pudete curriri in prublemi: fate qualchì errore è uttene una vulnerabilità currispundente. Dunque, tali cose anu da esse assai detallatu è cuncepitu cù cura è pruvati.

- E se u mediatore entra in un accordu cù unu di i partiti participanti: escrow o smart contract? Hè un mediatore necessariu in un cuntrattu intelligente?

Un mediatore ùn hè micca necessariu in un cuntrattu intelligente. Pò esse micca esse. Se, in u casu di escrow, u mediatore entra in una cuspirazione cù unu di i partiti, allora sì, questu schema perde bruscamente tuttu u so valore. Per quessa, i mediatori sò selezziunati in tale manera chì sò fiduciati da tutti i partiti implicati in stu prucessu à u stessu tempu. In cunsiquenza, simpricimenti ùn trasferete micca muniti à un indirizzu multisignature cù un mediatore chì ùn avete micca fiducia.

- Hè pussibule cun una transazzione Ethereum per trasfirià parechji tokens diffirenti da u vostru indirizzu à diversi indirizzi di destinazione, per esempiu, indirizzi di scambiu induve sti tokens sò scambiati?

Questa hè una bona quistione è cuncerna u mudellu di transazzione Ethereum è cumu si sferisce da u mudellu Bitcoin. È a diffarenza hè radicali. Se in u mudellu di transazzione Ethereum si trasfiriu solu muniti, allora sò trasferiti solu da un indirizzu à l'altru, senza cambià, solu a quantità specifica chì avete specificatu. In altri palori, questu ùn hè micca un mudellu di outputs unspent (UTXO), ma un mudellu di cunti è saldi currispondenti. Hè teoricamente pussibule di mandà parechji tokens diffirenti in una transazzione à una volta, sè vo scrivite un cuntrattu intelligenti astutu, ma avete sempre duverà fà parechje transazzione, creà un cuntrattu, poi trasfiriri tokens è muniti à questu, è poi chjamate u metudu adattatu. . Questu hè bisognu di sforzu è tempu, cusì in pratica ùn funziona micca cusì è tutti i pagamenti in Ethereu sò fatti in transazzione separata.

- Unu di i miti nantu à a piattaforma Ethereum hè chì hè impussibile di discriverà e cundizioni chì dependeranu di e dati di una risorsa Internet esterna, allora chì fà?

A suluzione hè chì u cuntrattu intelligenti stessu pò furnisce unu o più cusì-chiamatu oraculi di fiducia, chì recullanu dati nantu à u statu di e cose in u mondu esternu è trasmettenu à i cuntratti intelligenti per metudi spiciali. U cuntrattu stessu cunsidereghja i dati chì hà ricevutu da parte di fiducia per esse veri. Per una affidabilità più grande, sceglite solu un grande gruppu di oraculi è minimizzà u risicu di a so collusione. U cuntrattu stessu ùn pò micca piglià in contu i dati di l'oraculi chì contraddianu a maiuranza.

Una di e lezioni di u cursu in linea nantu à Blockchain hè dedicata à questu tema - "Introduzione à i Smart Contracts".

Source: www.habr.com

Add a comment