Ano ang dapat nating bumuo ng isang blockchain?

Ang buong kasaysayan ng sangkatauhan ay isang tuluy-tuloy na proseso ng pag-alis ng mga tanikala at paglikha ng bago, kahit na mas malakas pa. (Anonymous na may-akda)

Pagsusuri ng maraming proyekto ng blockchain (Bitshares, Hyperledger, Exonum, Ethereum, Bitcoin, atbp.), Naiintindihan ko na mula sa teknikal na pananaw, lahat sila ay binuo sa parehong mga prinsipyo. Ang mga blockchain ay nagpapaalala sa mga bahay, na, sa kabila ng lahat ng iba't ibang disenyo, palamuti at layunin, ay may pundasyon, dingding, bubong, bintana, pinto na konektado sa bawat isa sa ilang mga paraan. At kung naiintindihan mo ang mga pangunahing prinsipyo ng disenyo ng gusali at alam ang mga katangian ng mga materyales na ginamit, maaari mong matukoy ang nilalayon na layunin ng isang partikular na bahay. Sa kasalukuyan, ang isang sitwasyon ay lumitaw sa blockchain na narinig ng lahat tungkol dito, ngunit kakaunti ang mga tao na nauunawaan ang arkitektura at mga prinsipyo ng operasyon. Samakatuwid, mayroong hindi pagkakaunawaan kung bakit at paano makatuwirang gamitin ang mga teknolohiyang blockchain.

Sa artikulong ito susuriin natin ang mga katangian at prinsipyong karaniwan sa lahat ng blockchain. Susunod, tingnan natin ang mga problemang maaaring lutasin gamit ang blockchain at para mapalakas ang materyal, bumuo tayo ng maliit ngunit totoong blockchain sa ating virtual na site!

Kaya, tandaan natin kung anong mga problema ang unang nalutas ng blockchain.

Sigurado ako na marami ang magsasabi tungkol sa isang distributed, decentralized, public at immutable database. Ngunit bakit kailangan ang lahat ng ito?

Mas gusto kong simulan ang pag-aaral ng anumang teknolohiya sa pamamagitan ng pagbabasa ng mga pamantayan, dahil lahat ng artikulo at libro sa paksang pinag-aaralan ay nakabatay sa kanila. Ngunit sa kasalukuyan ay walang mga pamantayan sa blockchain; Ang ISO ay nilikha lamang mga komite para sa kanilang pag-unlad. Sa kasalukuyan, ang bawat pampublikong proyekto ng blockchain ay may sariling White paper na dokumento, na mahalagang teknikal na detalye. Ang unang kilalang proyekto ng blockchain ay ang Bitcoin network. Pumunta sa opisyal na website ng network at tingnan mo kung saan nagsimula ang lahat.

Blockchain Challenge

Kaya, ang gawain na nalutas ng blockchain sa network ng pioneer ng Bitcoin ay upang magsagawa ng isang pinagkakatiwalaang paglipat ng pagmamay-ari ng mga digital na asset (mga asset) sa isang hindi pinagkakatiwalaang kapaligiran na walang mga tagapamagitan. Halimbawa, sa network ng Bitcoin, ang isang digital asset ay bitcoin digital coins. At lahat ng teknikal na solusyon ng Bitcoin at iba pang mga blockchain ay bumaba sa paglutas ng problemang ito.

Mga problemang nareresolba ng blockchain

Ipagpalagay na ang isang tiyak na organisasyon sa pananalapi ay nagsabi na nagtayo ito ng isang network sa buong mundo sa tulong kung saan posible na maglipat ng pera sa sinumang tao. Maniniwala ka ba sa kanya? Kung Visa o MasterCard ang organisasyong ito, malamang na paniniwalaan mo ito, ngunit kung, medyo nagsasalita, AnonymousWorldMoney, malamang na hindi. Bakit? Ngunit dahil alam na alam namin kung paano ginagawa ng mga pribadong kumpanya ang mga distributed system, para sa anong mga layunin, at kung ano ang maaaring humantong sa. Tingnan natin ang mga problema ng naturang mga sistema at kung paano sila malulutas gamit ang mga teknolohiyang blockchain.

Sabihin nating sa kondisyon na AnonymousWorldMoney mayroong mga server na may mga database, at mabuti kung mayroong ilan sa mga ito sa iba't ibang mga sentro ng data. Kapag ang nagpadala ay naglipat ng pera, ang isang transaksyon ay nakarehistro, na ginagaya sa lahat ng mga server, at ang pera ay umaabot sa tatanggap.

Ano ang dapat nating bumuo ng isang blockchain?

Sa isang perpektong mundo, mahusay ang pamamaraang ito, ngunit sa atin ang mga sumusunod na problema ay lumitaw:

  1. Ang problema sa pagtukoy ng mga kalahok sa isang banda at ang pangangailangan para sa hindi pagkakilala ng mga transaksyon sa kabilang banda. Yung. kailangan mong maglipat ng pera sa isang partikular na tatanggap at sa paraang walang nakakaalam tungkol sa transaksyong ito maliban sa mga kalahok sa transaksyon. Ang mga bangko ay may mga account number at bank card na naka-link sa isang partikular na indibidwal o legal na entity, at pinoprotektahan ng bank secrecy ang impormasyon ng transaksyon. At sino ang nagtitiyak na ang kondisyon na AnonymousWorldMoney ay hindi gumagamit ng personal na data at impormasyon ng transaksyon para sa sarili nitong mga layunin?
  2. Paano makasigurado na ang tatanggap ay nakatanggap ng eksaktong halaga na inilipat sa kanya? Sa relatibong pagsasalita, ang nagpadala ay naglipat ng $100, at ang tatanggap ay nakatanggap ng $10. Dumating ang nagpadala sa tanggapan ng AnonymousWorldMoney dala ang kanyang resibo, at ipinakita ng klerk ang kanyang bersyon, kung saan nakasulat na $10 lang ang inilipat ng nagpadala.
  3. Ang problema ng isang hindi pinagkakatiwalaang kapaligiran, halimbawa, isang scam na tinatawag na double-spending. Ang isang walang prinsipyong kalahok ay maaaring gumastos ng kanyang balanse nang maraming beses hanggang ang pagbabayad ay ginagaya sa lahat ng mga server. CAP theorem, siyempre, walang nakansela, at ang kasunduan sa huli ay makakamit, ngunit ang isang tao ay hindi makakatanggap ng pera para sa mga serbisyo o kalakal na ibinigay. Samakatuwid, kung walang kumpletong tiwala sa organisasyon ng pagbabayad o mga kalahok sa mga transaksyon, kinakailangan na bumuo ng isang network na hindi batay sa tiwala, ngunit sa cryptography.
  4. Ang Conditional AnonymousWorldMoney ay may limitadong bilang ng mga server na maaaring maging hindi available nang hindi sinasadya o dahil sa malisyosong layunin.
  5. Ang AnonymousWorldMoney ay kukuha ng sarili nitong komisyon.
  6. Posibilidad ng kontrol. Sa panahon ng pagpapatakbo ng Bitcoin, lumabas na ang mga tao ay hindi lamang nais na maglipat ng mga barya sa isa't isa, kundi pati na rin upang suriin ang iba't ibang mga kondisyon para sa transaksyon, mga sitwasyon sa trabaho ng programa, awtomatikong magsagawa ng mga aksyon depende sa mga kondisyon, atbp.

Paano nalulutas ng blockchain ang mga problemang ito

  1. Ang pagkilala sa mga kalahok ay isinasagawa gamit ang isang pares ng mga susi: pribado at pampubliko, at ang digital signature algorithm ay natatanging kinikilala ang nagpadala at tatanggap, na iniiwan ang kanilang mga pagkakakilanlan na hindi nagpapakilala.
  2. Ang mga transaksyon ay kinokolekta sa mga bloke, ang hash ng bloke ay kinakalkula at nakasulat sa susunod na bloke. Ang pagkakasunud-sunod ng pagtatala ng mga hash sa mga bloke ay nagbibigay sa teknolohiya ng blockchain ng pangalan nito, at ginagawa rin nitong imposible na hindi kapansin-pansing baguhin / tanggalin ang mga bloke o indibidwal na mga transaksyon mula sa mga bloke. Kaya, kung ang isang transaksyon ay kasama sa blockchain, maaari mong tiyakin na ang data nito ay mananatiling hindi nagbabago.
  3. Ang pandaraya sa dobleng paggastos ay pinipigilan sa pamamagitan ng pag-abot sa isang consensus ng network kung aling data ang ituturing na wasto at kung alin ang itatapon. Sa network ng Bitcoin, ang consensus ay nakakamit sa pamamagitan ng patunay ng trabaho (PoW).
  4. Ang pagiging maaasahan ng network ay nakakamit sa pamamagitan ng katotohanan na ang blockchain ay pampubliko, kung saan ang bawat kalahok ay maaaring magpatakbo ng kanilang sariling node, makatanggap ng kumpletong kopya ng blockchain at, bukod dito, independiyenteng magsimulang suriin ang mga transaksyon para sa kawastuhan. Dapat pansinin na ang mga modernong blockchain ay ginagawang posible na bumuo ng hindi lamang pampubliko (bukas) kundi pati na rin pribado (sarado) na mga blockchain, pati na rin ang paggamit ng pinagsamang mga scheme.
  5. Ang blockchain ay hindi ganap na mapupuksa ang mga komisyon, dahil... kailangan mong bayaran ang mga taong sumusuporta sa network, ngunit sa blockchain ang pangangailangan para sa isang komisyon ay napatunayang napakakumbinsi na walang duda tungkol sa pangangailangan nito.
  6. Ang mga modernong blockchain ay may kakayahang magpatupad ng lohika ng negosyo, na sa blockchain ay tinatawag na Smart Contracts. Ang lohika ng mga matalinong kontrata ay ipinatupad sa iba't ibang mataas na antas ng mga wika.

Susunod, isasaalang-alang namin ang mga solusyon na ito nang mas detalyado.

Arkitektura ng Blockchain

Mga Bahagi ng Blockchain

Ang bawat kalahok ay maaaring maglunsad ng kanilang sariling node na may buong kopya ng blockchain (buong node). Ang buong node na maaaring magtala ng mga transaksyon sa blockchain ay tinatawag consensus nodes (saksi) o mga minero (miner). Ang mga buong node na tumitingin lamang sa kawastuhan ng mga transaksyon ay tinatawag mga node sa pag-audit (pag-audit). Mga magaan na kliyente (mga light client) ay hindi nag-iimbak ng mga buong kopya ng blockchain, ngunit nakikipag-ugnayan sa network gamit ang mga buong node.
Karamihan sa mga user ay gumagamit ng mga magaan na kliyente o web wallet upang gumawa ng mga transaksyon. Ang lahat ng mga node ay konektado sa bawat isa. Sa hanay ng mga elementong ito, nagiging mas matatag ang arkitektura ng network:

Ano ang dapat nating bumuo ng isang blockchain?

Ikot ng buhay ng transaksyon

Tingnan natin ang lifecycle ng transaksyon at hatiin ito nang paisa-isa:

Ano ang dapat nating bumuo ng isang blockchain?

Mga teknolohiyang Blockchain

Isaalang-alang natin nang mas detalyado ang mga teknikal na solusyon at ang kanilang mga koneksyon sa isa't isa.

Pagkakakilanlan

Ang bawat transaksyon sa blockchain ay dapat na digital na nilagdaan. Samakatuwid, upang makumpleto ang isang transaksyon, ang bawat kalahok ay dapat magkaroon ng isang pangunahing pares: pribado / pampubliko. Minsan ang isang pares ng mga susi ay tinatawag na wallet, dahil ang mga susi ay natatanging nauugnay sa natatanging digital address at balanse ng kalahok. Sa katotohanan, ang mga susi at address ay mga string lamang ng mga numero sa iba't ibang sistema ng numero. Mga halimbawa ng mga susi at wallet address:

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

Upang lumikha ng isang digital na lagda sa mga blockchain, isang algorithm batay sa mga elliptic curve ay ginagamit: Elliptic Curve Digital Signature Algorithm (ECDSA). Para gumana ito, ang pribadong key (256-bit na numero) ay karaniwang kinukuha nang random. Ang bilang ng mga pangunahing pagpipilian ay 2 hanggang sa kapangyarihan ng 256, kaya maaari nating pag-usapan ang praktikal na imposibilidad ng pagtutugma ng mga halaga ng mga pribadong key.

Susunod, ang pampublikong susi ay nakuha mula sa pribado sa pamamagitan ng pagpaparami ng halaga nito sa mga coordinate ng isang punto na matatagpuan sa elliptic curve, na nagreresulta sa mga coordinate ng isang bagong punto sa parehong curve. Tinitiyak ng pagkilos na ito na makakakuha ka ng key pair na angkop para sa digitally signing transactions. Panghuli, ang address ng wallet ay natatanging hinango mula sa pampublikong susi.

Mayroong maraming mga artikulo na may mga detalye sa cryptography na ginagamit sa blockchain, halimbawa: Bitcoin sa maikling salita – Cryptography

Ang pribadong susi ay dapat na mahigpit na kumpidensyal at panatilihing ligtas. Ang pampublikong susi ay kilala ng lahat. Kung nawala ang pribadong susi, hindi na maibabalik ang access sa asset (mga barya) at tuluyang mawawala ang pera. Samakatuwid, ang gawain ng ligtas na pag-iimbak ng mga pribadong susi ay lubhang nauugnay, dahil Ito ay hindi isang bangko kung saan maaari kang laging sumama sa iyong pasaporte at ibalik ang iyong account. Mayroong isang buong industriya para sa paggawa ng tinatawag na cold crypto wallet, katulad ng mga flash drive:

Ano ang dapat nating bumuo ng isang blockchain?

o maaari kang gumamit ng mas maaasahang mga pamamaraan, halimbawa, pagtatakan ng halaga ng pribadong key sa mga token:

Ano ang dapat nating bumuo ng isang blockchain?

Mga Transaksyon

Higit pang mga detalye tungkol sa istraktura ng transaksyon ay matatagpuan sa artikulo Bitcoin sa maikling salita – Transaksyon. Mahalagang maunawaan natin na ang bawat transaksyon ay may kahit man lang sumusunod na data:

From: 0x48C89c341C5960Ca2Bf3732D6D8a0F4f89Cc4368 - Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ адрСс отправитСля
To: 0x367adb7894334678b90Π°fe7882a5b06f7fbc783a - Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ адрСс получатСля
Value: 0.0001 - сумма Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ
Transaction Hash: 0x617ede331e8a99f46a363b32b239542bb4006e4fa9a2727a6636ffe3eb095cef - Ρ…ΡΡˆ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ

Susunod, ang transaksyon ay nilagdaan gamit ang isang pribadong key at ipinadala (tingnan ang mga detalye sa pagpapatakbo ng protocol Bitcoin sa maikling salita-Protocol) sa lahat ng node sa blockchain na nagsusuri ng mga transaksyon para sa bisa. Ang algorithm sa pag-verify ng transaksyon ay hindi mahalaga at kasama dalawang dosenang hakbang.

Mga bloke ng transaksyon

Pagkatapos suriin ang bisa ng mga transaksyon, ang mga node ay bumubuo ng mga bloke mula sa kanila. Bilang karagdagan sa mga transaksyon, ang hash ng nakaraang block at isang numero (Nonce counter) ay nakasulat sa block, at ang hash ng kasalukuyang block ay kinakalkula gamit ang SHA-256 algorithm. Ang hash ay dapat na nagtatag ng mga kundisyon ng pagiging kumplikado. Halimbawa, sa network ng Bitcoin, ang kahirapan ng hash ay awtomatikong nababago tuwing 2 linggo depende sa kapangyarihan ng network upang ang isang bloke ay nabuo nang humigit-kumulang isang beses bawat 10 minuto. Ang pagiging kumplikado ay tinutukoy ng sumusunod na kundisyon: ang hash na natagpuan ay dapat na mas mababa sa isang paunang natukoy na numero. Kung ang kundisyong ito ay hindi natugunan, pagkatapos ay 1 ay idinagdag sa Nonce, at ang gawain ng pagkalkula ng hash ay paulit-ulit. Para pumili ng hash, ginagamit ang Nonce field, dahil Ito ang tanging data sa block na maaaring baguhin; ang iba ay dapat manatiling hindi nagbabago. Ang isang wastong hash ay dapat magkaroon ng isang tiyak na bilang ng mga nangungunang zero, tulad ng isa sa mga tunay na hash:

000000000000000000000bf03212e7dd1176f52f816fa395fc9b93c44bc11f91

Ang matagumpay na paghahanap ng hash ay patunay ng gawaing nagawa (Proof-of-Work, PoW) para sa mga network ng Bitcoin o Ethereum. Ang proseso ng paghahanap ng mga hash ay tinatawag na pagmimina, katulad ng pagmimina ng ginto. Ang pangalan ay medyo tumpak na tumutukoy sa kakanyahan ng proseso, dahil mayroong isang simpleng paghahanap ng mga pagpipilian, at kung may nakahanap ng angkop na hash, kung gayon ito ay talagang swerte. Ito ay tulad ng paghahanap ng isang tunay na gintong nugget sa tonelada ng basurang bato. Ang block reward ay 12.5 BTC na ngayon at kung i-multiply mo ito sa kasalukuyang rate ng Bitcoin na $3900, makakakuha ka ng higit sa isang kilo ng purong ginto. May dapat ipaglaban!

Pagkatapos ng matagumpay na paghahanap ng hash, ang block at ang natagpuang hash mismo ay isusulat sa blockchain bilang susunod na block. Higit pang mga detalye sa istraktura ng mga bloke ay matatagpuan sa artikulo Bitcoin sa madaling sabi-Blockchain, at sa ibaba ay isang pinasimple na diagram:

Ano ang dapat nating bumuo ng isang blockchain?

Ang blockchain ay nagsisimula sa isang bloke na wala pang hash ng nakaraang bloke. Mayroon lamang isang ganoong block sa blockchain at may sariling pangalan na Genesis block. Ang natitirang mga bloke ay may parehong istraktura at naiiba lamang sa bilang ng mga transaksyon. Ang mga tunay na transaksyon at block na kasalukuyang ginagawa sa Bitcoin o Ethereum ay maaaring tingnan sa I-block ang Explorer.

Ang laki ng mga block sa Bitcoin ay limitado sa 1MB at may pinakamababang halaga ng impormasyon sa isang transaksyon na humigit-kumulang 200 bytes, ang maximum na bilang ng mga transaksyon sa isang block ay maaaring humigit-kumulang 6000. Mula dito, sa pamamagitan ng paraan, ay sumusunod sa pagganap ng Bitcoin, na pinagtatawanan ng lahat: ang isang bloke ay nabuo nang humigit-kumulang isang beses bawat 10 minuto * 60 segundo = 600 segundo, na nagbibigay ng isang pormal na pagganap ng halos 10 TPS. Bagaman sa katunayan, hindi ito pagiging produktibo, ngunit isang sadyang ipinatupad na algorithm ng trabaho. Sa Ethereum, para sa kompetisyon, ginawa lang nila ang block generation time na 15 segundo. at ang pagiging produktibo ay pormal na tumaas. Samakatuwid, sa mga blockchain na gumagamit ng PoW bilang pinagkasunduan, walang saysay na ihambing ang pagganap sa lahat, dahil direkta itong nakasalalay sa pagiging kumplikado ng pagkalkula ng cache, na maaaring italaga sa anumang halaga.

Mga tinidor

Ano ang mangyayari kung, halimbawa, maraming mga node ang nakahanap ng mga hash na nakakatugon sa mga kundisyon ng pagiging kumplikado, ngunit iba ang halaga (sa madaling salita, dumating sila sa iba't ibang mga consensus) at nagsulat ng mga bloke sa blockchain? Tingnan natin kung paano pinoprotektahan ng blockchain ang sitwasyong ito. Sa kasong ito, nangyayari ang isang tinatawag na tinidor, at ang blockchain ay may dalawang bersyon ng kadena:

Ano ang dapat nating bumuo ng isang blockchain?

Anong mangyayari sa susunod? Susunod, ang bahagi ng network ay nagsisimulang gumana sa block N+2 mula sa isang chain, at bahagi mula sa isa pa:

Ano ang dapat nating bumuo ng isang blockchain?

Ang isa sa mga bloke na ito ay matatagpuan nang mas maaga at ipapadala sa blockchain, at pagkatapos, ayon sa mga patakaran, ang blockchain ay kailangang lumipat sa isang mas mahabang chain at kanselahin ang lahat ng mga transaksyon mula sa alternatibong bloke:

Ano ang dapat nating bumuo ng isang blockchain?

Kasabay nito, maaaring lumitaw ang isang sitwasyon kapag ang transaksyon ng isang kalahok ay nasa isa lamang sa mga fork block, na nakansela. Samakatuwid, upang matiyak na ang nais na transaksyon ay naitala sa blockchain, mayroong isang pangkalahatang rekomendasyon - bago magtiwala sa transaksyon, dapat kang maghintay hanggang ang susunod na ilang mga bloke ay idinagdag sa blockchain. Ang mga rekomendasyon para sa kung gaano karaming mga bloke ang maghihintay para sa iba't ibang mga blockchain ay nag-iiba. Halimbawa, para sa Bitcoin network ang minimum ay 2 blocks, ang maximum ay 6.

Ang parehong larawan na may mga block na tinidor ay mapapansin sa panahon ng tinatawag na 51% na pag-atake - ito ay kapag ang isang grupo ng mga minero ay sumusubok na palaguin ang isang alternatibong block chain, na naglalayong kanselahin ang chain sa kanilang mga mapanlinlang na transaksyon. Bagama't sa kasalukuyan, sa halip na pandaraya, mas kumikita ang paggastos ng iyong kapangyarihan sa tapat na pagmimina.

Pinagkasunduan

Upang makapagtala ng isang bloke sa blockchain, dapat maabot ng network ang isang pinagkasunduan. Tandaan natin ang gawain ng pagkamit ng consensus sa mga network ng komunikasyon sa computer. Ang problema ay nabuo bilang ang gawain ng mga heneral ng Byzantine BFT (Pagpaparaya sa kasalanan ng Byzantine). Inaalis ang kaakit-akit na paglalarawan ng mga problema ng hukbong Byzantine, ang problema ay maaaring mabuo tulad ng sumusunod: paano makakamit ang mga node ng network sa isang karaniwang resulta kung ang ilang mga node ng network ay maaaring sadyang i-distort ang mga ito. Ang mga kasalukuyang algorithm para sa paglutas ng problema sa BFT ay nagpapakita na ang network ay maaaring gumana nang tama kung mayroong mas mababa sa 1/3 ng mga manloloko. Bakit hindi nailapat ang consensus ng BFT sa network ng Bitcoin? Bakit kinailangang gumamit ng PoW? Mayroong ilang mga kadahilanan:

  • Ang BFT ay gumagana nang maayos sa isang maliit na nakapirming hanay ng mga node, ngunit sa isang pampublikong blockchain ang bilang ng mga node ay hindi mahuhulaan at, bukod dito, ang mga node ay maaaring i-on at i-off nang random.
  • Kinakailangang hikayatin ang mga tao na maglunsad ng mga blockchain node. Upang magawa ito, ang mga tao ay dapat gantimpalaan. Sa BFT, walang pormal na matatanggap ng gantimpala, ngunit kung para saan ang gantimpala sa PoW ay malinaw sa lahat sa isang intuitive na antas: para sa kuryenteng natupok ng processor sa proseso ng paghahanap ng block hash.

Bilang karagdagan sa PoW, mayroong ilang iba pang mga consensus na ginagamit sa mga modernong blockchain, halimbawa:

  • PoS (Proof-of-Stake) - sa blockchain Hyperledger
  • DPoS (Delegated Proof-of-Stake) - sa blockchain BitShares
  • Mga Pagbabago ng BFT: SBFT (Simplified BFT) at PBFT (Practical BFT), halimbawa sa blockchain Exonum

Pag-isipan natin nang kaunti ang pinagkasunduan ng PoS, dahil... Ito ay ang PoS at ang mga uri nito na pinakalaganap sa mga pribadong blockchain. Bakit in private? Sa isang banda, ang mga katangian ng PoS ay mas mahusay kumpara sa PoW, dahil Upang makamit ang pinagkasunduan, mas kaunting mga mapagkukunan ng computing ang kailangan, na nangangahulugang ang bilis ng pagsulat ng data sa blockchain ay tumataas. Ngunit sa kabilang banda, ang PoS ay may mas maraming pagkakataon para sa pandaraya, kaya para ma-neutralize ito, dapat malaman ang lahat ng kalahok sa blockchain.

Ang pinagkasunduan ng PoS ay batay sa pagpili ng isang node na maaaring magsulat ng isang bloke na may mga transaksyon sa blockchain depende sa halaga ng mga pondo sa account, o sa halip, hindi sa account, ngunit sa collateral, i.e. Kung mas maraming pondo ang mayroon ka bilang collateral, mas malamang na pipiliin ng network ang iyong node para magsulat ng block. Ang deposito ay hindi ibabalik kung ang block ay hindi wasto. Nagbibigay ito ng proteksyon laban sa pandaraya. Mayroong mga sumusunod na variation ng PoS:

  • Hinahati ng Delegated PoS (DPoS) consensus ang mga kalahok sa "mga botante" at "mga validator". Ang mga may hawak ng coin (mga kalahok sa pagboto) ay nagtalaga ng kanilang kapangyarihan upang i-verify at itala ang mga transaksyon sa blockchain sa ibang mga kalahok. Kaya, ginagawa ng mga validator ang lahat ng gawaing computational at tumatanggap ng gantimpala para dito, at ang pagkakaroon ng mga kalahok sa pagboto ay ginagarantiyahan ang katapatan ng mga validator, dahil maaari silang baguhin anumang oras.
  • Nagbibigay-daan sa iyo ang consensus ng LPoS (Leased Proof-of-Stake) na ipaarkila ang iyong mga pondo sa iba pang mga node para magkaroon sila ng mas magandang pagkakataon na ma-validate ang mga block. yun. Maaari kang makatanggap ng komisyon para sa mga transaksyon nang hindi nakikilahok sa aktwal na pag-verify ng transaksyon at pag-block ng pagmimina.

Mayroong ilang iba pang mga pinagkasunduan na hindi pa gaanong ginagamit, ililista ko lang ang mga ito dito para sa impormasyon, at ang isang pangkalahatang-ideya ng mga algorithm ng pinagkasunduan mismo ay matatagpuan, halimbawa, sa artikulo: Consensus Algorithms sa Blockchain.

  • PoET (Proof-of-Elapsed Time)
  • PoC (Proof-of-Capacity)
  • PoB (Proof-of-Burn)
  • PoWeight (Proof-of-Weight)
  • PoA (Proof-of-Activity) – PoW + PoS
  • PoI (Proof-of-Importans)

Mga modelo ng pagiging maaasahan at deployment ng mga blockchain

Pampublikong blockchain

Tibay Publiko o ibang pangalan Walang pahintulot na blockchain Ito ay nakakamit sa pamamagitan ng pagpayag sa sinuman na kumonekta at tingnan ang impormasyon o kahit na ikonekta ang kanilang sariling node, at ang tiwala ay binuo sa PoW consensus.

Pribadong blockchain

pribado o Pribadong Pinahintulutang blockchain. Sa mga blockchain na ito, isang partikular na grupo lamang ng mga kalahok (mga organisasyon o tao) ang may access sa impormasyon. Ang ganitong mga blockchain ay itinayo ng mga organisasyon na may layuning pataasin ang pangkalahatang benepisyo o kahusayan. Ang kanilang pagiging maaasahan ay sinisiguro ng mga karaniwang layunin ng mga kalahok at ang PoS at BFT consensus algorithm.

Blockchain consortium

Doon Consortium o Blockchain na Pinahintulutan ng Publiko. Ito ay mga blockchain na maaaring kumonekta ng sinuman upang tingnan, ngunit ang isang kalahok ay maaaring magdagdag ng impormasyon o ikonekta ang kanyang node lamang sa pahintulot ng ibang mga kalahok. Ang ganitong mga blockchain ay binuo ng mga organisasyon upang mapataas ang tiwala sa bahagi ng mga customer o mga mamimili ng mga produkto o lipunan sa kabuuan. Dito, ang pagiging maaasahan ay nakakamit din sa pamamagitan ng pagkakaroon ng tiwala sa pagitan ng mga kalahok at ng parehong PoS at BFT consensus algorithm.

Mga Kontrata ng Smart

Ang mga Blockchain na ipinatupad pagkatapos ng Bitcoin ay, sa isang antas o iba pa, ay nagdagdag ng kakayahang magsagawa ng mga matalinong kontrata. Sa pangkalahatan, ang isang matalinong kontrata ay isang transaksyon kung saan inilalagay ang code ng programa para sa pagpapatupad. Ang mga matalinong kontrata sa Ethereum network ay isinasagawa sa EVM (Ethereum Virtual Machine). Upang simulan ang pagpapatupad ng isang matalinong kontrata, dapat itong tahasang ilunsad ng isa pang transaksyon, o dapat matugunan ang mga paunang kondisyon para sa pagpapatupad. Ang mga resulta ng pagpapatupad ng matalinong kontrata ay itatala din sa blockchain. Ang pagtanggap ng data mula sa labas ng blockchain ay posible, ngunit lubhang limitado.

Anong lohika ng negosyo ang maaaring ipatupad gamit ang isang matalinong kontrata? Sa katunayan, walang gaanong, halimbawa, pagsuri sa mga kondisyon gamit ang data mula sa blockchain, pagpapalit ng mga may-ari ng mga digital na asset depende sa mga kundisyong ito, pagtatala ng data sa isang permanenteng imbakan sa loob ng blockchain. Ang lohika ay ipinatupad sa isang espesyal na mataas na antas ng wika Solidity.

Ang isang klasikong halimbawa ng functionality na ipinapatupad gamit ang mga smart contract ay ang pag-isyu ng mga token para sa mga ICO. Halimbawa, nagpatupad ako ng matalinong kontrata para mag-isyu ng katamtamang 500 AlexToken. Sa pamamagitan ng link sa Etherscan ay matatagpuan

source code ng smart contract sa Solidity language

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;
}

at ang binary na representasyon ayon sa nakikita ng network

60806040526000600355600060045533600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560146101000a81548160ff021916908360028111156200006f57fe5b0217905550620001036b019d971e4fe8401e74000000600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200024a6401000000000262000b1d179091906401000000009004565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620001986b019d971e4fe8401e740000006001546200024a6401000000000262000b1d179091906401000000009004565b6001819055506b033b2e3c9fd0803ce8000000600481905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6b019d971e4fe8401e740000006040518082815260200191505060405180910390a362000267565b600081830190508281101515156200025e57fe5b80905092915050565b611cb880620002776000396000f300608060405260043610610112576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146104c7578063095ea7b31461055757806318160ddd146105bc57806323b872dd146105e7578063313ce5671461066c578063355274ea146106a3578063518ab2a8146106ce57806366188463146106f957806370a082311461075e57806389311e6f146107b55780638da5cb5b146107cc578063903a3ef61461082357806395d89b411461083a578063a9059cbb146108ca578063bf5839031461092f578063c7876ea41461095a578063cbcb317114610985578063d73dd623146109b0578063dd62ed3e14610a15578063f2fde38b14610a8c575b60008060008060006001600281111561012757fe5b600560149054906101000a900460ff16600281111561014257fe5b14151561014e57600080fd5b60003411151561015d57600080fd5b600060045411151561016e57600080fd5b3494506101a7670de0b6b3a764000061019968056bc75e2d6310000088610acf90919063ffffffff16565b610b0790919063ffffffff16565b9350600092506b033b2e3c9fd0803ce80000006101cf85600354610b1d90919063ffffffff16565b111561024c576101f66003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b915061022e670de0b6b3a764000061022068056bc75e2d6310000085610b0790919063ffffffff16565b610acf90919063ffffffff16565b90506102438186610b3990919063ffffffff16565b92508094508193505b61026184600354610b1d90919063ffffffff16565b6003819055506102886003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b6004819055506000831115610344573373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156102dd573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35b610395846000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a361045184600154610b1d90919063ffffffff16565b600181905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f193505050501580156104bf573d6000803e3d6000fd5b505050505050005b3480156104d357600080fd5b506104dc610b52565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561051c578082015181840152602081019050610501565b50505050905090810190601f1680156105495780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561056357600080fd5b506105a2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b8b565b604051808215151515815260200191505060405180910390f35b3480156105c857600080fd5b506105d1610c7d565b6040518082815260200191505060405180910390f35b3480156105f357600080fd5b50610652600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c87565b604051808215151515815260200191505060405180910390f35b34801561067857600080fd5b50610681611041565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b3480156106af57600080fd5b506106b8611046565b6040518082815260200191505060405180910390f35b3480156106da57600080fd5b506106e3611056565b6040518082815260200191505060405180910390f35b34801561070557600080fd5b50610744600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061105c565b604051808215151515815260200191505060405180910390f35b34801561076a57600080fd5b5061079f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112ed565b6040518082815260200191505060405180910390f35b3480156107c157600080fd5b506107ca611335565b005b3480156107d857600080fd5b506107e16113eb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561082f57600080fd5b50610838611411565b005b34801561084657600080fd5b5061084f6114ab565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561088f578082015181840152602081019050610874565b50505050905090810190601f1680156108bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108d657600080fd5b50610915600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114e4565b604051808215151515815260200191505060405180910390f35b34801561093b57600080fd5b50610944611703565b6040518082815260200191505060405180910390f35b34801561096657600080fd5b5061096f611709565b6040518082815260200191505060405180910390f35b34801561099157600080fd5b5061099a611716565b6040518082815260200191505060405180910390f35b3480156109bc57600080fd5b506109fb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611726565b604051808215151515815260200191505060405180910390f35b348015610a2157600080fd5b50610a76600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611922565b6040518082815260200191505060405180910390f35b348015610a9857600080fd5b50610acd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119a9565b005b600080831415610ae25760009050610b01565b8183029050818382811515610af357fe5b04141515610afd57fe5b8090505b92915050565b60008183811515610b1457fe5b04905092915050565b60008183019050828110151515610b3057fe5b80905092915050565b6000828211151515610b4757fe5b818303905092915050565b6040805190810160405280600981526020017f416c6578546f6b656e000000000000000000000000000000000000000000000081525081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600154905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610cc457600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d1157600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d9c57600080fd5b610ded826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e80826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f5182600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b601281565b6b033b2e3c9fd0803ce800000081565b60035481565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508083111561116d576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611201565b6111808382610b3990919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561139157600080fd5b60028081111561139d57fe5b600560149054906101000a900460ff1660028111156113b857fe5b141515156113c557600080fd5b6001600560146101000a81548160ff021916908360028111156113e457fe5b0217905550565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561146d57600080fd5b60028081111561147957fe5b600560149054906101000a900460ff16600281111561149457fe5b141515156114a157600080fd5b6114a9611b01565b565b6040805190810160405280600381526020017f414c54000000000000000000000000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561152157600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561156e57600080fd5b6115bf826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611652826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b60045481565b68056bc75e2d6310000081565b6b019d971e4fe8401e7400000081565b60006117b782600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a0557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611a4157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6002600560146101000a81548160ff02191690836002811115611b2057fe5b021790555060006004541115611c0a57611ba5600454600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015611c89573d6000803e3d6000fd5b505600a165627a7a723058205bbef016cc7699572f944871cb6f05e69915ada3a92a1d9f03a3fb434aac0c2b0029

Higit pang mga detalye tungkol sa mga matalinong kontrata ay makikita sa artikulo: Ano ang mga matalinong kontrata sa Ethereum.

Konklusyon

Inilista namin ang mga teknolohiya kung saan itinayo ang mga modernong blockchain at kung paano sila konektado sa isa't isa. Ngayon, bumalangkas tayo kung aling mga problema ang maaaring lutasin gamit ang blockchain, at kung aling mga solusyon ang magiging, sa pinakamahusay, hindi epektibo. Kaya, ang paggamit ng blockchain ay hindi kinakailangan kung:

  • Ang mga transaksyon ay isinasagawa sa isang pinagkakatiwalaang kapaligiran;
  • Ang pagkakaroon ng isang komisyon ng mga tagapamagitan ay hindi nagpapalala sa buhay ng mga kalahok;
  • Ang mga kalahok ay walang ari-arian na maaaring katawanin bilang mga digital na asset;
  • Walang pamamahagi sa mga digital asset, i.e. ang halaga ay pagmamay-ari o ibinibigay ng isang kalahok lamang.

Ano ang hinaharap para sa blockchain? Ngayon ay maaari lamang tayong mag-isip tungkol sa mga posibleng paraan para sa pagbuo ng mga teknolohiyang blockchain:

  • Ang Blockchain ay magiging katulad ng karaniwang teknolohiya ng database gaya ng, halimbawa, SQL o NoSQL para sa paglutas ng partikular na hanay ng mga problema nito;
  • Ang Blockchain ay magiging isang malawakang protocol, tulad ng HTTP ay para sa Internet;
  • Ang Blockchain ay magiging batayan para sa isang bagong sistema ng pananalapi at pampulitika sa planeta!

Sa susunod na bahagi ay titingnan natin kung ano ang kasalukuyang umiiral na mga blockchain at kung bakit ginagamit ang mga ito sa iba't ibang industriya.

Ito ay simula pa lamang!

Pinagmulan: www.habr.com

Magdagdag ng komento