Chì duvemu custruisce una blockchain?

A storia sana di l'umanità hè un prucessu cuntinuu di sbarazzarsi di catene è di creà novi, ancu più forti. (Autore anonimu)

Analizendu numerosi prughjetti di blockchain (Bitshares, Hyperledger, Exonum, Ethereum, Bitcoin, etc.), capiscu chì da un puntu di vista tecnicu, sò tutti custruiti nantu à i stessi principii. Blockchains sò reminiscents di e case, chì, malgradu tutte e varietà di disinni, decoru è scopi, anu una fundazione, pareti, tetti, finestri, porte chì sò cunnessi l'un à l'altru in certi modi. È se capisce i principii basi di u disignu di l'edifiziu è cunnosce e proprietà di i materiali utilizati, pudete stabilisce u scopu di una casa particulari. Attualmente, una situazione hè ghjunta cù blockchain chì tutti anu intesu parlà, ma pocu persone capiscenu l'architettura è i principii di u funziunamentu. Dunque, ci hè un malintesi di perchè è cumu hè sensu per utilizà tecnulugii blockchain.

In questu articulu avemu da analizà e proprietà è i principii cumuni à tutti i blockchains. In seguitu, fighjemu i prublemi chì ponu esse risolti cù u blockchain è per rinfurzà u materiale, custruemu una piccula ma vera blockchain in u nostru situ virtuale!

Dunque, ricurdemu di quali prublemi di blockchain sò inizialmente risolti.

Sò sicuru chì parechji diceranu di una basa di dati distribuita, decentralizata, publica è immutable. Ma perchè tuttu questu era necessariu?

Preferite principià à studià ogni tecnulugia per leghje i normi, postu chì tutti l'articuli è i libri nantu à u tema studiatu sò basati nantu à elli. Ma attualmente ùn ci sò micca standard di blockchain; ISO hà creatu solu cumitati per u so sviluppu. Attualmente, ogni prughjettu di blockchain publicu hà u so propiu documentu White Paper, chì hè essenzialmente una specificazione tecnica. U primu prughjettu di blockchain cunnisciutu publicamente hè a reta di Bitcoin. Andà à u situ ufficiali di a reta è circà induve tuttu principia.

Sfida Blockchain

Allora, u compitu chì u blockchain risolve in a reta di pioniere di Bitcoin hè di realizà un trasferimentu di fiducia di a pruprietà di l'assi digitale (assi) in un ambiente micca fiduciale senza intermediari. Per esempiu, in a reta di Bitcoin, un attivu digitale hè bitcoin muniti digitale. E tutte e suluzioni tecniche di Bitcoin è altri blockchains venenu à risolve stu prublema.

I prublemi chì u blockchain risolve

Suppone chì una certa urganizazione finanziaria dice chì hà custruitu una reta in u mondu cù l'aiutu di quale hè pussibule di trasfiriri soldi à ogni persona. A crederete ? Se sta urganizazione hè Visa o MasterCard, probabilmente crederete, ma se, relativamente parlante, AnonymousWorldMoney, probabilmente ùn avete micca. Perchè? Ma perchè sapemu bè cumu i sistemi distribuiti sò fatti da cumpagnie private, per quale scopi, è ciò chì questu pò purtà. Fighjemu un ochju più vicinu à i prublemi di tali sistemi è cumu si ponu esse risolti cù e tecnulugia di blockchain.

Dicemu chì in u cundizionale AnonymousWorldMoney ci sò servitori cù basa di dati, è hè bonu s'ellu ci sò parechji in diversi centri di dati. Quandu u mittente trasferisce soldi, una transazzione hè registrata, chì hè replicata à tutti i servitori, è i soldi ghjunghjenu à u destinatariu.

Chì duvemu custruisce una blockchain?

In un mondu ideali, stu schema funziona bè, ma in u nostru ci sò i seguenti prublemi:

  1. U prublema di identificà i participanti da una banda è a necessità di l'anonimatu di e transazzione da l'altru. Quelli. avete bisognu di trasfiriri soldi à un destinatariu specificu è in tale manera chì nimu ùn sà di sta transazzione eccettu i participanti in a transazzione. I banche anu numeri di contu è carte bancarie ligati à un individuu specificu o entità giuridica, è u sicretu bancariu prutege l'infurmazioni di transazzione. E quale guarantisci chì u cundizionale AnonymousWorldMoney ùn usa micca e dati persunali è l'infurmazioni di transazzione per i so propiu scopi?
  2. Cumu assicurà chì u destinatariu hà ricevutu esattamente a quantità chì hè stata trasferita à ellu? Relativamente parlante, u mittente hà trasferitu $ 100, è u destinatariu hà ricevutu $ 10. U mittente vene à l'uffiziu AnonymousWorldMoney cù u so ricivutu, è l'impiegatu mostra a so versione, induve hè scrittu chì u mittente hà trasferitu solu $ 10.
  3. U prublema di un ambiente micca fiduciale, per esempiu, una scam chjamata doppia spesa. Un participante senza scrupulu pò passà u so equilibriu parechje volte finu à chì u pagamentu hè replicatu à tutti i servitori. Teorema CAP, Di sicuru, nimu annullatu, è l'accordu serà ultimamente ottinutu, ma qualchissia ùn riceve micca soldi per servizii o beni furniti. Per quessa, s'ellu ùn ci hè micca una fiducia cumpleta in l'urganizazione di pagamentu o i participanti in e transazzione, allora hè necessariu di custruisce una reta basata micca in a fiducia, ma in a criptografia.
  4. Conditional AnonymousWorldMoney hà un numeru finitu di servitori chì ponu esse indisponibili involontariamente o per intenzione maliziosa.
  5. AnonymousWorldMoney pigliarà a so propria cumissioni tangibili.
  6. A pussibilità di cuntrollu. Duranti u funziunamentu di Bitcoin, hè risultatu chì e persone ùn volenu micca solu trasfiriri muniti à l'altri, ma ancu per verificà e diverse cundizioni per a transazzione, i scenarii di travagliu di prugramma, automaticamente eseguisce l'azzioni secondu e cundizioni, etc.

Cumu blockchain risolve questi prublemi

  1. L'identificazione di i participanti hè realizatu cù un paru di chjavi: privati ​​​​è publichi, è l'algoritmu di firma digitale identifica in modu unicu u mittente è u destinatariu, lascendu a so identità anonima.
  2. E transazzione sò cullate in blocchi, l'hash di u bloccu hè calculatu è scrittu in u prossimu bloccu. Questa sequenza di registrazione di hashes in blocchi dà à a tecnulugia di blockchain u so nome, è rende ancu impussibile di cambià / sguassate in modo invisibile blocchi o transazzioni individuali da blocchi. Cusì, se una transazzione hè inclusa in u blockchain, pudete esse sicuru chì e so dati restanu senza cambià.
  3. A fraude di doppia spesa hè prevenuta ghjunghjendu à un cunsensu di a rete nantu à quali dati cunsiderà validi è quali scartà. In a reta di Bitcoin, u cunsensu hè ottenutu da a prova di travagliu (PoW).
  4. L'affidabilità di a reta hè ottenuta da u fattu chì u blockchain hè publicu, induve ogni participante pò eseguisce u so propiu node, riceve una copia completa di u blockchain è, in più, principia indipindente à verificà e transazzione per a correzione. Semu devi esse nutatu chì i blocchi muderni facenu pussibule di custruisce micca solu blocchi publichi (aperti), ma ancu privati ​​(chjusi), è ancu l'usu di schemi cumminati.
  5. U blockchain ùn si sbarazza micca completamente di e cumissioni, perchè ... avete da pagà a ghjente chì sustene a reta, ma in u blockchain a necessità di una cumissioni hè pruvata cusì cunvincente chì ùn ci hè dubbitu nantu à a so necessità.
  6. I blockchain muderni anu a capacità di implementà a logica cummerciale, chì in u blockchain hè chjamatu Smart Contracts. A logica di i cuntratti intelligenti hè implementata in diverse lingue d'altu livellu.

Dopu, avemu da cunsiderà queste suluzioni in più detail.

L'architettura blockchain

Cumpunenti Blockchain

Ogni participante pò lancià u so propiu node cù una copia completa di u blockchain (node ​​pienu). I nodi pieni chì ponu registrà transacciones nantu à u blockchain sò chjamati nodi di cunsensu (tistimone) o minatori (minatore). I nodi pieni chì verificanu solu a correttezza di e transazzione sò chjamati nodi di auditu (auditu). Clienti di luce (clienti di luce) ùn guardanu micca copie sanu di u blockchain, ma interagisce cù a reta cù i nodi sanu.
A maiò parte di l'utilizatori utilizanu clienti ligeri o portafogli web per fà transazzione. Tutti i nodi sò cunnessi unu à l'altru. Cù stu settore di elementi, l'architettura di a rete diventa più stabile:

Chì duvemu custruisce una blockchain?

Ciclu di vita di a transazzione

Fighjemu u ciclu di vita di a transazzione è scompone pezzo per pezzu:

Chì duvemu custruisce una blockchain?

Tecnulugie blockchain

Fighjemu in più detail nantu à e soluzioni tecniche è e so cunnessione cù l'altri.

Identificazione

Ogni transazzione blockchain deve esse firmata digitale. Dunque, per compie una transazzione, ogni participante deve avè una coppia di chjave: privatu / publicu. Calchì volta un paru di chjavi hè chjamatu wallet, perchè i chjavi sò assuciati unicu cù l'indirizzu digitale è l'equilibriu unicu di u participante. In realtà, i chjavi è l'indirizzi sò solu stringhe di numeri in diversi sistemi di numeri. Esempii di chjave è indirizzi di portafogli:

Private key: 0a78194a8a893b8baac7c09b6a4a4b4b161b2f80a126cbb79bde231a4567420f
Public key: 0579b478952214d7cddac32ac9dc522c821a4489bc10aac3a81b9d1cd7a92e57ba
Address: 0x3814JnJpGnt5tB2GD1qfKP709W3KbRdfb27V

Per creà una firma digitale in blockchains, un algoritmu basatu nantu à curve ellittiche hè utilizatu: Elliptic Curve Digital Signature Algorithm (ECDSA). Per u funziunamentu, a chjave privata (numaru 256-bit) hè generalmente presa in modu aleatoriu. U numaru di l'opzioni chjave hè 2 à u putere di 256, cusì pudemu parlà di l'impossibilità pratica di currisponde à i valori di e chjave private.

In seguitu, a chjave publica hè ottenuta da quella privata multiplichendu u so valore per e coordenate di un puntu situatu nantu à a curva ellittica, chì risultanu in e coordenate di un novu puntu nantu à a stessa curva. Questa azione assicura chì ottene una coppia di chjave adattata per transazzione di firma digitale. Infine, l'indirizzu di a billetera hè unicu derivatu da a chjave publica.

Ci sò assai articuli cù dettagli nantu à a criptografia utilizata in blockchain, per esempiu: Bitcoin in a nutshell - Criptografia

A chjave privata deve esse strettamente cunfidenziale è mantenuta sicura. A chjave publica hè cunnisciuta da tutti. Se a chjave privata hè persa, l'accessu à l'attivu (muniti) ùn pò micca esse restauratu è i soldi seranu persi per sempre. Dunque, u compitu di almacenà in modu sicuru e chjave private hè estremamente pertinente, perchè Questu ùn hè micca un bancu induve pudete sempre vene cù u vostru passaportu è restaurà u vostru contu. Ci hè una industria sana per a produzzione di i cosiddetti portafogli criptu friddi, simili à i flash drives:

Chì duvemu custruisce una blockchain?

o pudete aduprà metudi più affidabili, per esempiu, stamping the value of the private key on tokens:

Chì duvemu custruisce una blockchain?

Transazzioni

Più dettagli nantu à a struttura di transazzione ponu esse truvati in l'articulu Bitcoin in a nutshell - Transaction. Hè impurtante per noi di capisce chì ogni transazzione hà almenu e seguenti dati:

From: 0x48C89c341C5960Ca2Bf3732D6D8a0F4f89Cc4368 - цифровой адрес отправителя
To: 0x367adb7894334678b90аfe7882a5b06f7fbc783a - цифровой адрес получателя
Value: 0.0001 - сумма транзакции
Transaction Hash: 0x617ede331e8a99f46a363b32b239542bb4006e4fa9a2727a6636ffe3eb095cef - хэш транзакции

Dopu, a transazzione hè firmata cù una chjave privata è mandata (vede i dettagli nantu à u funziunamentu di u protocolu Bitcoin in un nutshell-Protocol) à tutti i nodi in u blockchain chì verificanu e transazzione per a validità. L'algoritmu di verificazione di transazzione ùn hè micca triviale è include duie decine di passi.

Blocchi di transazzione

Dopu avè verificatu a validità di e transazzione, i nodi formanu blocchi da elli. In più di e transazzione, l'hash di u bloccu precedente è un numeru (Nonce counter) sò scritti in u bloccu, è l'hash di u bloccu attuale hè calculatu cù l'algoritmu SHA-256. L'hash deve avè stabilitu e cundizioni di cumplessità. Per esempiu, in a reta di Bitcoin, a difficultà di l'hash hè cambiatu automaticamente ogni 2 simane secondu a putenza di a reta in modu chì un bloccu hè generatu circa una volta ogni 10 minuti. A cumplessità hè determinata da a seguente cundizione: l'hash trovu deve esse menu di un numeru predeterminatu. Se sta cundizione ùn hè micca cumpletata, allora 1 hè aghjuntu à u Nonce, è u travagliu di calculà l'hash hè ripetutu. Per selezziunà un hash, u campu Nonce hè utilizatu, perchè Questa hè l'unica dati in u bloccu chì pò esse cambiatu; u restu deve esse invariatu. Un hash validu deve avè un certu numaru di zeri principali, cum'è unu di i veri hash:

000000000000000000000bf03212e7dd1176f52f816fa395fc9b93c44bc11f91

Truvà successu un hash hè una prova di travagliu fattu (Proof-of-Work, PoW) per e rete Bitcoin o Ethereu. U prucessu di truvà hashes hè chjamatu mining, simili à a minera d'oru. U nomu definisce abbastanza precisamente l'essenza di u prucessu, perchè ci hè una ricerca simplice di opzioni, è se qualchissia trova un hash adattatu, allora questu hè veramente furtuna. Hè cum'è truvà una vera pepita d'oru in tunnellate di roccia residua. A ricumpensa di u bloccu hè avà 12.5 BTC è se u multiplicate da a tarifa Bitcoin attuale di $ 3900, avete più di un kilogramu d'oru puru. Ci hè qualcosa per luttà !

Dopu avè trovu successu un hash, u bloccu è l'hash trovu stessu sò scritti à u blockchain cum'è u prossimu blocu. Più dettagli nantu à a struttura di i blocchi ponu esse truvati in l'articulu Bitcoin in poche parole-Blockchain, è quì sottu hè un schema simplificatu:

Chì duvemu custruisce una blockchain?

U blockchain principia cù un bloccu chì ùn hà micca ancu l'hash di u bloccu precedente. Ci hè solu un tali bloccu in u blockchain è hà u so propiu nome Genesis block. I blocchi rimanenti anu a listessa struttura è sò diffirenti solu in u numeru di transacciones. Transazzioni reali è blocchi chì sò attualmente creati in Bitcoin o Ethereu ponu esse visti in Esplorazione di Bloccu.

A dimensione di i blocchi in Bitcoin hè limitata à 1MB è cù una quantità minima di informazioni in una transazzione di circa 200 bytes, u massimu di transazzione in un bloccu pò esse circa 6000. Da quì, per via, seguita u funziunamentu di Bitcoin, chì tutti ridi: un bloccu hè generatu circa una volta ogni 10 minuti * 60 seconde = 600 seconde, chì dà un rendiment formale di circa 10 TPS. Ancu s'ellu in fattu, questu ùn hè micca produtividade, ma un algoritmu di travagliu deliberatamente implementatu. In Ethereu, per a cumpetizione, anu fattu solu u tempu di generazione di blocchi 15 seconde. è a produtividade hè furmalmente aumentata. Dunque, in blockchains chì utilizanu PoW cum'è consensu, ùn hà micca sensu di paragunà u rendiment à tuttu, perchè dipende direttamente da a cumplessità di u calculu di cache, chì pò esse assignatu à qualsiasi valore.

Forchetti

Chì succèri si, per esempiu, parechji nodi truvaru hashes chì scontra i cundizioni cumplessità, ma sò differente in valore (in altri palori, sò ghjunti à differente consensus) è scrivite blocchi à u blockchain? Videmu cumu blockchain pruteghja contru sta situazione. In questu casu, una furchetta chjamata, è u blockchain hà duie versioni di a catena:

Chì duvemu custruisce una blockchain?

Chì succede dopu ? Dopu, una parte di a reta cumencia à travaglià nantu à u bloccu N + 2 da una catena, è una parte da un altru:

Chì duvemu custruisce una blockchain?

Unu di sti blocchi serà truvatu prima è mandatu à u blockchain, è dopu, secondu e regule, u blockchain duverà passà à una catena più longa è annullà tutte e transazzione da u bloccu alternativu:

Chì duvemu custruisce una blockchain?

À u listessu tempu, una situazione pò esse quandu a transazzione di un participant era solu in unu di i blocchi di furchetta, chì hè stata annullata. Per quessa, per esse sicuru chì a transazzione desiderata hè arregistrata in u blockchain, ci hè una ricunniscenza generale - prima di fiducia in a transazzione, duvete aspittà finu à chì i prossimi blocchi sò aghjuntu à u blockchain. Raccomandazioni per quanti blocchi per aspittà diverse blockchains varienu. Per esempiu, per a reta di Bitcoin u minimu hè 2 blocchi, u massimu hè 6.

A listessa stampa cù forchetta di bloccu serà osservata durante l'attaccu chjamatu 51% - questu hè quandu un gruppu di minatori prova di cultivà una catena di bloccu alternativu, cercandu di annullà a catena cù e so transazzione fraudulente. Ancu s'ellu hè oghje, invece di fraudulente, hè più prufittuosa di gastru u vostru putere nantu à a minera onesta.

Cunsensu

Per registrà un bloccu nantu à u blockchain, a reta deve ghjunghje à un cunsensu. Ricurdemu u compitu di ottene u cunsensu in e rete di cumunicazione di l'informatica. U prublema hè formulatu cum'è u compitu di i generali bizantini BFT (Tolleranza di culpa bizantina). Omiting a discrizzione pittoresca di i prublemi di l'armata bizantina, u prublema pò esse formulatu cusì: cumu i nodi di a rete ponu vene à un risultatu cumuni, se certi nodi di a rete ponu distorsioni deliberatamente. L'algoritmi esistenti per risolve u prublema BFT mostranu chì a reta pò funziunà currettamente s'ellu ci hè menu di 1/3 di fraudsters. Perchè u cunsensu BFT ùn hè micca statu appiicatu à a reta di Bitcoin? Perchè era necessariu di utilizà PoW? Ci sò parechje ragioni:

  • BFT travaglia bè cù un picculu settore fissu di nodi, ma in una blockchain publica u numeru di nodi hè imprevisible è, in più, i nodi ponu esse attivati ​​è disattivati ​​in modu aleatoriu.
  • Hè necessariu di motivà a ghjente per lancià i nodi di blockchain. Per fà questu, a ghjente deve esse ricumpensata. In BFT ùn ci hè formalmente nunda per riceve una ricumpensa, ma ciò chì a ricumpensa hè in PoW hè chjaru per tutti à un livellu intuitivu: per l'electricità cunsumata da u processatore in u prucessu di truvà u bloccu hash.

In più di PoW, ci sò parechji altri consensi chì sò usati in i blockchains muderni, per esempiu:

  • PoS (Proof-of-Stake) - nantu à a blockchain Hyperledger
  • DPoS (Delegated Proof-of-Stake) - nantu à a blockchain BitShares
  • Mudazzioni di BFT: SBFT (BFT simplificatu) è PBFT (BFT praticu), per esempiu in blockchain Esonu

Fighjemu un pocu nantu à u cunsensu PoS, perchè... Hè PoS è e so variità chì sò più diffusi in blockchains privati. Perchè in privatu? Da una banda, e caratteristiche di PoS sò megliu cumparatu cù PoW, perchè Per ottene u cunsensu, menu risorse di computing sò necessarii, chì significa chì a velocità di scrittura di dati à u blockchain aumenta. Ma da l'altra banda, PoS hà più opportunità per fraud, cusì per neutralizà questu, tutti i participanti in u blockchain deve esse cunnisciutu.

U cunsensu PoS hè basatu annantu à a selezzione di un node chì pò scrive un bloccu cù transazzione à u blockchain secondu a quantità di fondi in u contu, o megliu, micca in u contu, ma in u collateral, i.e. Quantu più fondi avete cum'è collateral, u più prubabile chì a rete sceglie u vostru node per scrive un bloccu. U accontu ùn serà micca restituitu se u bloccu hè invalidu. Questu furnisce a prutezzione contra a frode. Ci sò e seguenti variazioni di PoS:

  • U cunsensu di Delegated PoS (DPoS) divide i participanti in "votanti" è "validatori". I detentori di muniti (participanti di votu) deleganu u so putere di verificà è registrà e transazzione nantu à a blockchain à l'altri participanti. Cusì, i validatori facenu tuttu u travagliu computazionale è ricevenu una ricumpensa per questu, è a presenza di i participanti di u votu guarantisci l'onestà di i validatori, perchè ponu esse cambiatu in ogni mumentu.
  • U cunsensu LPoS (Leased Proof-of-Stake) permette di affittu i vostri fondi à altri nodi per ch'elli anu una megliu chance di validà i blocchi. Chì. Pudete riceve una cumissioni per transazzione senza participà à a verificazione di a transazzione attuale è bluccà a minera.

Ci hè una quantità di altri cunsensu chì ùn sò micca ancu largamente utilizati, vi elencu solu quì per l'infurmazioni, è una panoramica di l'algoritmi di cunsensu stessu pò esse truvata, per esempiu, in l'articulu: Algoritmi di cunsensu in Blockchain.

  • PoET (Proof-of-Elapsed Time)
  • PoC (prova di capacità)
  • PoB (Proof-of-Burn)
  • PoWeight (prova di pesu)
  • PoA (Proof-of-Activity) - PoW + PoS
  • PoI (Proof-of-Importans)

Modelli di affidabilità è implementazione di blockchains

Blockchain publicu

Sostenibilità Public o un altru nomu Blockchain senza permessu Questu hè ottenutu permettendu à qualchissia per cunnette è vede l'infurmazioni o ancu cunnette u so propiu node, è a fiducia hè custruita nantu à u consensu PoW.

Blockchain privatu

Private o Blockchain privatu permessu. In questi blockchains, solu un certu gruppu di participanti (urganisazioni o persone) anu accessu à l'infurmazioni. Tali blockchains sò custruiti da l'urganisazione cù u scopu di aumentà u benefiziu o l'efficienza generale. A so affidabilità hè assicurata da i scopi cumuni di i participanti è l'algoritmi di cunsensu PoS è BFT.

Consorziu Blockchain

Ci sò Consorziu o Blockchain permessu publicu. Quessi sò blockchains chì qualcunu pò cunnette per vede, ma un participante pò aghjunghje infurmazione o cunnette u so node solu cù u permessu di l'altri participanti. Tali blockchains sò custruiti da l'urganisazione per aumentà a fiducia da parte di i clienti o di i cunsumatori di i prudutti o di a sucietà in generale. Quì, a fiducia hè ancu ottenuta da a presenza di fiducia trà i participanti è i stessi algoritmi di cunsensu PoS è BFT.

Contratti intelligenti

Blockchains implementati dopu chì Bitcoin anu, à un gradu o un altru, aghjunghjenu a capacità di eseguisce cuntratti intelligenti. Essenzialmente, un cuntrattu intelligente hè una transazzione in quale u codice di u prugramma hè postu per l'esekzione. I cuntratti intelligenti nantu à a reta di Ethereu sò eseguiti in l'EVM (Ethereum Virtual Machine). Per cumincià à eseguisce un cuntrattu intelligente, deve esse esplicitamente lanciatu da una altra transazzione, o i precondizioni per l'esekzione deve esse cumpletu. I risultati di l'esekzione di u cuntrattu intelligenti seranu ancu arregistrati in u blockchain. Riceve dati da fora di u blockchain hè pussibule, ma estremamente limitatu.

Chì logica cummerciale pò esse implementata cù un cuntrattu intelligente? In fatti, ùn ci hè micca assai, per esempiu, cuntrollà e cundizioni utilizendu dati da u blockchain, cambiendu i pruprietarii di l'assi digitali sicondu sti cundizioni, arregistrendu dati in un almacenamiento permanente in u blockchain. A logica hè implementata in una lingua spiciali d'altu livellu Solidità.

Un esempiu classicu di funziunalità chì hè implementatu cù cuntratti intelligenti hè l'emissione di tokens per ICO. Per esempiu, aghju implementatu un cuntrattu intelligente per issuà un modestu AlexToken 500. By ligame in Etherscan si trova

codice fonte di u cuntrattu intelligenti in a lingua Solidità

pragma solidity ^0.4.23;
library SafeMath {
/**
* @dev Multiplies two numbers, throws on overflow.
**/
function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {
if (a == 0) {
return 0;
}
c = a * b;
assert(c / a == b);
return c;
}
/**
* @dev Integer division of two numbers, truncating the quotient.
**/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
// assert(b > 0); // Solidity automatically throws when dividing by 0
/**
* @title SafeMath
* @dev Math operations with safety checks that throw on error
*/
// uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return a / b;
}
/**
* @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
**/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
assert(b <= a);
return a - b;
}
/**
* @dev Adds two numbers, throws on overflow.
**/
function add(uint256 a, uint256 b) internal pure returns (uint256 c) {
c = a + b;
assert(c >= a);
return c;
}
}
/**
* @title Ownable
* @dev The Ownable contract has an owner address, and provides basic authorization control
* functions, this simplifies the implementation of "user permissions".
**/
contract Ownable {
address public owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev The Ownable constructor sets the original `owner` of the contract to the sender account.
**/
constructor() public {
owner = msg.sender;
}
/**
* @dev Throws if called by any account other than the owner.
**/
modifier onlyOwner() {
require(msg.sender == owner);
_;
}
/**
* @dev Allows the current owner to transfer control of the contract to a newOwner.
* @param newOwner The address to transfer ownership to.
**/
function transferOwnership(address newOwner) public onlyOwner {
require(newOwner != address(0));
emit OwnershipTransferred(owner, newOwner);
owner = newOwner;
}
}
/**
* @title ERC20Basic interface
* @dev Basic ERC20 interface
**/
contract ERC20Basic {
function totalSupply() public view returns (uint256);
function balanceOf(address who) public view returns (uint256);
function transfer(address to, uint256 value) public returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
}
/**
* @title ERC20 interface
* @dev see https://github.com/ethereum/EIPs/issues/20
**/
contract ERC20 is ERC20Basic {
function allowance(address owner, address spender) public view returns (uint256);
function transferFrom(address from, address to, uint256 value) public returns (bool);
function approve(address spender, uint256 value) public returns (bool);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
/**
* @title Basic token
* @dev Basic version of StandardToken, with no allowances.
**/
contract BasicToken is ERC20Basic {
using SafeMath for uint256;
mapping(address => uint256) balances;
uint256 totalSupply_;
/**
* @dev total number of tokens in existence
**/
function totalSupply() public view returns (uint256) {
return totalSupply_;
}
/**
* @dev transfer token for a specified address
* @param _to The address to transfer to.
* @param _value The amount to be transferred.
**/
function transfer(address _to, uint256 _value) public returns (bool) {
require(_to != address(0));
require(_value <= balances[msg.sender]);
balances[msg.sender] = balances[msg.sender].sub(_value);
balances[_to] = balances[_to].add(_value);
emit Transfer(msg.sender, _to, _value);
return true;
}
/**
* @dev Gets the balance of the specified address.
* @param _owner The address to query the the balance of.
* @return An uint256 representing the amount owned by the passed address.
**/
function balanceOf(address _owner) public view returns (uint256) {
return balances[_owner];
}
}
contract StandardToken is ERC20, BasicToken {
mapping (address => mapping (address => uint256)) internal allowed;
/**
* @dev Transfer tokens from one address to another
* @param _from address The address which you want to send tokens from
* @param _to address The address which you want to transfer to
* @param _value uint256 the amount of tokens to be transferred
**/
function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
require(_to != address(0));
require(_value <= balances[_from]);
require(_value <= allowed[_from][msg.sender]);
balances[_from] = balances[_from].sub(_value);
balances[_to] = balances[_to].add(_value);
allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
emit Transfer(_from, _to, _value);
return true;
}
/**
* @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
*
* Beware that changing an allowance with this method brings the risk that someone may use both the old
* and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
* race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
* @param _spender The address which will spend the funds.
* @param _value The amount of tokens to be spent.
**/
function approve(address _spender, uint256 _value) public returns (bool) {
allowed[msg.sender][_spender] = _value;
emit Approval(msg.sender, _spender, _value);
return true;
}
/**
* @dev Function to check the amount of tokens that an owner allowed to a spender.
* @param _owner address The address which owns the funds.
* @param _spender address The address which will spend the funds.
* @return A uint256 specifying the amount of tokens still available for the spender.
**/
function allowance(address _owner, address _spender) public view returns (uint256) {
return allowed[_owner][_spender];
}
/**
* @dev Increase the amount of tokens that an owner allowed to a spender.
*
* approve should be called when allowed[_spender] == 0. To increment
* allowed value is better to use this function to avoid 2 calls (and wait until
* the first transaction is mined)
* From MonolithDAO Token.sol
* @param _spender The address which will spend the funds.
* @param _addedValue The amount of tokens to increase the allowance by.
**/
function increaseApproval(address _spender, uint _addedValue) public returns (bool) {
allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
/**
* @dev Decrease the amount of tokens that an owner allowed to a spender.
*
* approve should be called when allowed[_spender] == 0. To decrement
* allowed value is better to use this function to avoid 2 calls (and wait until
* the first transaction is mined)
* From MonolithDAO Token.sol
* @param _spender The address which will spend the funds.
* @param _subtractedValue The amount of tokens to decrease the allowance by.
**/
function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {
uint oldValue = allowed[msg.sender][_spender];
if (_subtractedValue > oldValue) {
allowed[msg.sender][_spender] = 0;
} else {
allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
}
emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
return true;
}
}
/**
* @title Configurable
* @dev Configurable varriables of the contract
**/
contract Configurable {
uint256 public constant cap = 1000000000*10**18;
uint256 public constant basePrice = 100*10**18; // tokens per 1 ether
uint256 public tokensSold = 0;
uint256 public constant tokenReserve = 500000000*10**18;
uint256 public remainingTokens = 0;
}
/**
* @title CrowdsaleToken 
* @dev Contract to preform crowd sale with token
**/
contract CrowdsaleToken is StandardToken, Configurable, Ownable {
/**
* @dev enum of current crowd sale state
**/
enum Stages {
none,
icoStart, 
icoEnd
}
Stages currentStage;
/**
* @dev constructor of CrowdsaleToken
**/
constructor() public {
currentStage = Stages.none;
balances[owner] = balances[owner].add(tokenReserve);
totalSupply_ = totalSupply_.add(tokenReserve);
remainingTokens = cap;
emit Transfer(address(this), owner, tokenReserve);
}
/**
* @dev fallback function to send ether to for Crowd sale
**/
function () public payable {
require(currentStage == Stages.icoStart);
require(msg.value > 0);
require(remainingTokens > 0);
uint256 weiAmount = msg.value; // Calculate tokens to sell
uint256 tokens = weiAmount.mul(basePrice).div(1 ether);
uint256 returnWei = 0;
if(tokensSold.add(tokens) > cap){
uint256 newTokens = cap.sub(tokensSold);
uint256 newWei = newTokens.div(basePrice).mul(1 ether);
returnWei = weiAmount.sub(newWei);
weiAmount = newWei;
tokens = newTokens;
}
tokensSold = tokensSold.add(tokens); // Increment raised amount
remainingTokens = cap.sub(tokensSold);
if(returnWei > 0){
msg.sender.transfer(returnWei);
emit Transfer(address(this), msg.sender, returnWei);
}
balances[msg.sender] = balances[msg.sender].add(tokens);
emit Transfer(address(this), msg.sender, tokens);
totalSupply_ = totalSupply_.add(tokens);
owner.transfer(weiAmount);// Send money to owner
}
/**
* @dev startIco starts the public ICO
**/
function startIco() public onlyOwner {
require(currentStage != Stages.icoEnd);
currentStage = Stages.icoStart;
}
/**
* @dev endIco closes down the ICO 
**/
function endIco() internal {
currentStage = Stages.icoEnd;
// Transfer any remaining tokens
if(remainingTokens > 0)
balances[owner] = balances[owner].add(remainingTokens);
// transfer any remaining ETH balance in the contract to the owner
owner.transfer(address(this).balance); 
}
/**
* @dev finalizeIco closes down the ICO and sets needed varriables
**/
function finalizeIco() public onlyOwner {
require(currentStage != Stages.icoEnd);
endIco();
}
}
/**
* @title LavevelToken 
* @dev Contract to create the Lavevel Token
**/
contract AlexToken is CrowdsaleToken {
string public constant name = "AlexToken";
string public constant symbol = "ALT";
uint32 public constant decimals = 18;
}

è a rapprisintazioni binaria cum'è a rete vede

60806040526000600355600060045533600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560146101000a81548160ff021916908360028111156200006f57fe5b0217905550620001036b019d971e4fe8401e74000000600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200024a6401000000000262000b1d179091906401000000009004565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620001986b019d971e4fe8401e740000006001546200024a6401000000000262000b1d179091906401000000009004565b6001819055506b033b2e3c9fd0803ce8000000600481905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6b019d971e4fe8401e740000006040518082815260200191505060405180910390a362000267565b600081830190508281101515156200025e57fe5b80905092915050565b611cb880620002776000396000f300608060405260043610610112576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146104c7578063095ea7b31461055757806318160ddd146105bc57806323b872dd146105e7578063313ce5671461066c578063355274ea146106a3578063518ab2a8146106ce57806366188463146106f957806370a082311461075e57806389311e6f146107b55780638da5cb5b146107cc578063903a3ef61461082357806395d89b411461083a578063a9059cbb146108ca578063bf5839031461092f578063c7876ea41461095a578063cbcb317114610985578063d73dd623146109b0578063dd62ed3e14610a15578063f2fde38b14610a8c575b60008060008060006001600281111561012757fe5b600560149054906101000a900460ff16600281111561014257fe5b14151561014e57600080fd5b60003411151561015d57600080fd5b600060045411151561016e57600080fd5b3494506101a7670de0b6b3a764000061019968056bc75e2d6310000088610acf90919063ffffffff16565b610b0790919063ffffffff16565b9350600092506b033b2e3c9fd0803ce80000006101cf85600354610b1d90919063ffffffff16565b111561024c576101f66003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b915061022e670de0b6b3a764000061022068056bc75e2d6310000085610b0790919063ffffffff16565b610acf90919063ffffffff16565b90506102438186610b3990919063ffffffff16565b92508094508193505b61026184600354610b1d90919063ffffffff16565b6003819055506102886003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b6004819055506000831115610344573373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156102dd573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35b610395846000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a361045184600154610b1d90919063ffffffff16565b600181905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f193505050501580156104bf573d6000803e3d6000fd5b505050505050005b3480156104d357600080fd5b506104dc610b52565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561051c578082015181840152602081019050610501565b50505050905090810190601f1680156105495780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561056357600080fd5b506105a2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b8b565b604051808215151515815260200191505060405180910390f35b3480156105c857600080fd5b506105d1610c7d565b6040518082815260200191505060405180910390f35b3480156105f357600080fd5b50610652600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c87565b604051808215151515815260200191505060405180910390f35b34801561067857600080fd5b50610681611041565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b3480156106af57600080fd5b506106b8611046565b6040518082815260200191505060405180910390f35b3480156106da57600080fd5b506106e3611056565b6040518082815260200191505060405180910390f35b34801561070557600080fd5b50610744600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061105c565b604051808215151515815260200191505060405180910390f35b34801561076a57600080fd5b5061079f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112ed565b6040518082815260200191505060405180910390f35b3480156107c157600080fd5b506107ca611335565b005b3480156107d857600080fd5b506107e16113eb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561082f57600080fd5b50610838611411565b005b34801561084657600080fd5b5061084f6114ab565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561088f578082015181840152602081019050610874565b50505050905090810190601f1680156108bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108d657600080fd5b50610915600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114e4565b604051808215151515815260200191505060405180910390f35b34801561093b57600080fd5b50610944611703565b6040518082815260200191505060405180910390f35b34801561096657600080fd5b5061096f611709565b6040518082815260200191505060405180910390f35b34801561099157600080fd5b5061099a611716565b6040518082815260200191505060405180910390f35b3480156109bc57600080fd5b506109fb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611726565b604051808215151515815260200191505060405180910390f35b348015610a2157600080fd5b50610a76600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611922565b6040518082815260200191505060405180910390f35b348015610a9857600080fd5b50610acd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119a9565b005b600080831415610ae25760009050610b01565b8183029050818382811515610af357fe5b04141515610afd57fe5b8090505b92915050565b60008183811515610b1457fe5b04905092915050565b60008183019050828110151515610b3057fe5b80905092915050565b6000828211151515610b4757fe5b818303905092915050565b6040805190810160405280600981526020017f416c6578546f6b656e000000000000000000000000000000000000000000000081525081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600154905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610cc457600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d1157600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d9c57600080fd5b610ded826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e80826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f5182600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b601281565b6b033b2e3c9fd0803ce800000081565b60035481565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508083111561116d576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611201565b6111808382610b3990919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561139157600080fd5b60028081111561139d57fe5b600560149054906101000a900460ff1660028111156113b857fe5b141515156113c557600080fd5b6001600560146101000a81548160ff021916908360028111156113e457fe5b0217905550565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561146d57600080fd5b60028081111561147957fe5b600560149054906101000a900460ff16600281111561149457fe5b141515156114a157600080fd5b6114a9611b01565b565b6040805190810160405280600381526020017f414c54000000000000000000000000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561152157600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561156e57600080fd5b6115bf826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611652826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b60045481565b68056bc75e2d6310000081565b6b019d971e4fe8401e7400000081565b60006117b782600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a0557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611a4157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6002600560146101000a81548160ff02191690836002811115611b2057fe5b021790555060006004541115611c0a57611ba5600454600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015611c89573d6000803e3d6000fd5b505600a165627a7a723058205bbef016cc7699572f944871cb6f05e69915ada3a92a1d9f03a3fb434aac0c2b0029

Più dettagli nantu à i cuntratti intelligenti ponu esse truvati in l'articulu: Chì sò i cuntratti intelligenti in Ethereu.

cunchiusioni

Avemu listatu i tecnulugii nantu à quale i blocchi muderni sò custruiti è cumu sò cunnessi l'un à l'altru. Avà formulemu quali prublemi ponu esse risolti cù blockchain, è quali seranu, in u megliu, inefficace. Dunque, aduprà blockchain ùn hè micca necessariu se:

  • E transazzione sò realizate in un ambiente di fiducia;
  • A prisenza di una cumissioni di intermediari ùn aggrava micca a vita di i participanti;
  • I participanti ùn anu micca pruprietà chì ponu esse rapprisintati cum'è assi digitale;
  • Ùn ci hè micca distribuzione in l'assi digitale, i.e. u valore hè propiu o furnitu da un solu participante.

Chì riserva u futuru per a blockchain? Avà pudemu solu speculà nantu à i modi pussibuli per u sviluppu di e tecnulugia di blockchain:

  • Blockchain diventerà a listessa tecnulugia di basa di dati cumuni cum'è, per esempiu, SQL o NoSQL per risolve a so varietà specifica di prublemi;
  • Blockchain diventerà un protokollu generalizatu, cum'è HTTP hè per Internet;
  • Blockchain diventerà a basa per un novu sistema finanziariu è puliticu in u pianeta!

In a prossima parte, guardemu ciò chì blockchains esistenu attualmente è perchè sò usati in diverse industrii.

Questu hè solu u principiu!

Source: www.habr.com

Add a comment