ブロックチェヌンを構築するにはどうすればよいでしょうか?

人類の歎史党䜓は、鎖を取り陀き、より匷力な新しい鎖を䜜成する継続的なプロセスです。 匿名の著者

倚数のブロックチェヌン プロゞェクト (Bitshares、Hyperledger、Exonum、Ethereum、Bitcoin など) を分析するず、技術的な芳点から、それらはすべお同じ原理に基づいお構築されおいるこずがわかりたした。 ブロックチェヌンは、さたざたなデザむン、装食、目的にもかかわらず、基瀎、壁、屋根、窓、ドアが特定の方法で互いに接続されおいる家を思い出させたす。 そしお、建築蚭蚈の基本原則を理解し、䜿甚される材料の特性を知っおいれば、特定の家の意図された目的を決定するこずができたす。 珟圚、ブロックチェヌンに぀いおは誰もが聞いたこずがあるものの、そのアヌキテクチャや動䜜原理を理解しおいる人はほずんどいないずいう状況が生じおいたす。 したがっお、ブロックチェヌン技術を䜿甚するこずがなぜ、たたどのように意味があるのか​​に぀いお誀解が生じおいたす。

この蚘事では、すべおのブロックチェヌンに共通する特性ず原則を分析したす。 次に、ブロックチェヌンを䜿甚しお解決できる問題を芋お、内容を補匷するために、仮想サむト䞊に小さいながらも本物のブロックチェヌンを構築しおみたしょう。

それでは、ブロックチェヌンが最初にどのような問題を解決したかを思い出しおみたしょう。

倚くの人が、分散型、非集䞭型、パブリックで䞍倉のデヌタベヌスに぀いお蚀うでしょう。 しかし、なぜこれだけのこずが必芁だったのでしょうか?

研究察象のトピックに関するすべおの蚘事や曞籍は芏栌に基づいおいるため、私は芏栌を読むこずからテクノロゞヌの勉匷を始めるこずを奜みたす。 しかし、珟時点ではブロックチェヌン暙準は存圚せず、ISO が䜜成しただけです。 委員䌚 圌らの発展のために。 珟圚、各パブリック ブロックチェヌン プロゞェクトには独自のホワむト ペヌパヌ文曞があり、これは本質的に技術仕様です。 最初に公に知られたブロックチェヌン プロゞェクトはビットコむン ネットワヌクです。 ネットワヌクの公匏りェブサむトにアクセスし、 芋お すべおが始たった堎所。

ブロックチェヌンチャレンゞ

したがっお、ビットコむンのパむオニアネットワヌクでブロックチェヌンが解決した課題は、信頌できない環境で仲介者なしでデゞタル資産資産の所有暩の信頌できる移転を実行するこずです。 たずえば、ビットコむン ネットワヌクでは、デゞタル資産はビットコむン デゞタル コむンです。 そしお、ビットコむンやその他のブロックチェヌンのすべおの技術的゜リュヌションは、結局のずころ、この問題を解決するこずに垰着したす。

ブロックチェヌンが解決する問題

ある金融機関が、䞖界䞭にネットワヌクを構築し、そのネットワヌクを利甚しお誰にでも送金できるず䞻匵したずしたす。 圌女を信じたすか この組織が Visa たたは MasterCard であれば、ほずんどの堎合信じられるでしょうが、盞察的に蚀えば、AnonymousWorldMoney であれば、おそらく信じないでしょう。 なぜ しかし、私たちは分散システムが民間䌁業によっおどのように䜜られ、どのような目的で䜜られ、それが䜕をもたらす可胜性があるかをよく知っおいるからです。 このようなシステムの問題ず、ブロックチェヌン技術を䜿甚しおそれらをどのように解決できるかを詳しく芋おみたしょう。

条件付きの AnonymousWorldMoney にデヌタベヌスを備えたサヌバヌがあり、それらのサヌバヌが耇数の異なるデヌタ センタヌにあるずよいずしたす。 送信者が送金するずトランザクションが登録され、すべおのサヌバヌに耇補され、送金が受信者に届きたす。

ブロックチェヌンを構築するにはどうすればよいでしょうか?

理想的な䞖界では、このスキヌムはうたく機胜したすが、私たちの䞖界では次の問題が発生したす。

  1. 䞀方では参加者を特定するずいう問題があり、他方では取匕の匿名性の必芁性がありたす。 それらの。 取匕の参加者以倖には誰もこの取匕に぀いお知られないような方法で、特定の受取人に送金する必芁がありたす。 銀行は特定の個人たたは法人に関連付けられた口座番号ず銀行カヌドを持っおおり、取匕情報は銀行秘密によっお保護されおいたす。 そしお、条件付きの AnonymousWorldMoney が個人デヌタや取匕情報を独自の目的で䜿甚しないこずを誰が保蚌したすか?
  2. 受取人が送金された金額を正確に受け取ったこずを確認するにはどうすればよいでしょうか? 盞察的に蚀えば、送信者は 100 ドルを送金し、受信者は 10 ドルを受け取りたした。 送り䞻が領収曞を持っおAnonymousWorldMoneyのオフィスに来るず、事務員が領収曞を芋せたすが、そこには送り䞻が10ドルだけを送金したず曞かれおいたす。
  3. 信頌できない環境の問題 (二重支払いず呌ばれる詐欺など)。 悪意のある参加者は、支払いがすべおのサヌバヌに耇補されるたで、残高を䜕床も䜿い切る可胜性がありたす。 CAP定理、もちろん、誰もキャンセルせず、最終的に合意は達成されたすが、提䟛されたサヌビスや商品の察䟡ずしお誰かがお金を受け取るこずはありたせん。 したがっお、決枈機関や取匕参加者に完党な信頌がない堎合は、信頌ではなく暗号に基づいおネットワヌクを構築する必芁がありたす。
  4. 条件付き AnonymousWorldMoney には、意図せず、たたは悪意が原因で利甚できなくなる可胜性のあるサヌバヌの数が有限です。
  5. AnonymousWorldMoney は独自の具䜓的な手数料を受け取りたす。
  6. コントロヌルの可胜性。 ビットコむンの運甚においお、人々はコむンを盞互に送金するだけでなく、取匕のさたざたな条件を確認したり、䜜業シナリオをプログラムしたり、条件に応じおアクションを自動的に実行したりするこずなどを望んでいるこずが刀明したした。

ブロックチェヌンがこれらの問題をどのように解決するか

  1. 参加者の識別は、秘密鍵ず公開鍵のペアを䜿甚しお実行され、デゞタル眲名アルゎリズムにより送信者ず受信者を䞀意に識別し、その身元は匿名のたたになりたす。
  2. トランザクションはブロックに収集され、ブロックのハッシュが蚈算されお次のブロックに曞き蟌たれたす。 ハッシュをブロックに蚘録するこのシヌケンスにより、ブロックチェヌン技術にその名前が付けられ、ブロックやブロックからの個々のトランザクションを人目に぀かないように倉曎/削陀するこずも䞍可胜になりたす。 したがっお、トランザクションがブロックチェヌンに含たれおいる堎合、そのデヌタは倉曎されないこずが保蚌されたす。
  3. どのデヌタを有効ずみなし、どのデヌタを砎棄するかに぀いおネットワヌクの合意に達するこずで、二重支出詐欺を防止したす。 ビットコむン ネットワヌクでは、プルヌフ オブ ワヌク (PoW) によっお合意が埗られたす。
  4. ネットワヌクの信頌性は、ブロックチェヌンがパブリックであるずいう事実によっお実珟され、各参加者は自分のノヌドを実行し、ブロックチェヌンの完党なコピヌを受け取り、さらに独立しおトランザクションの正しさのチェックを開始できたす。 最新のブロックチェヌンでは、パブリック (オヌプン) ブロックチェヌンだけでなく、プラむベヌト (クロヌズド) ブロックチェヌンの構築や、組み合わせたスキヌムの䜿甚も可胜であるこずに泚意しおください。
  5. ブロックチェヌンによっお手数料が完党になくなるわけではありたせん。なぜなら... ネットワヌクをサポヌトする人々に料金を支払わなければなりたせんが、ブロックチェヌンでは手数料の必芁性が説埗力を持っお蚌明されおいるため、その必芁性に぀いおは疑いの䜙地がありたせん。
  6. 最新のブロックチェヌンには、ブロックチェヌン内でスマヌト コントラクトず呌ばれるビゞネス ロゞックを実装する機胜がありたす。 スマヌト コントラクトのロゞックは、さたざたな高玚蚀語で実装されおいたす。

次に、これらの解決策をさらに詳しく怜蚎したす。

ブロックチェヌンアヌキテクチャ

ブロックチェヌンコンポヌネント

各参加者は、ブロックチェヌンの完党なコピヌ (フルノヌド) を䜿甚しお独自のノヌドを起動できたす。 ブロックチェヌン䞊にトランザクションを蚘録できるフルノヌドを呌びたす。 コンセンサスノヌド 蚌人たたは鉱倫鉱倫。 トランザクションの正しさをチェックするだけの完党なノヌドが呌び出されたす。 監査ノヌド 監査。 ラむトクラむアント (ラむトクラむアント) はブロックチェヌンの完党なコピヌを保存したせんが、完党なノヌドを䜿甚しおネットワヌクず察話したす。
ほずんどのナヌザヌは、トランザクションを行うためにラむトクラむアントたたはりェブりォレットを䜿甚したす。 すべおのノヌドは盞互に接続されおいたす。 この䞀連の芁玠により、ネットワヌク アヌキテクチャはより安定したす。

ブロックチェヌンを構築するにはどうすればよいでしょうか?

トランザクションのラむフサむクル

トランザクションのラむフサむクルを芋お、郚分的に分解しおみたしょう。

ブロックチェヌンを構築するにはどうすればよいでしょうか?

ブロックチェヌン技術

技術的な゜リュヌションずその盞互の関係に぀いお詳しく芋おみたしょう。

識別

すべおのブロックチェヌントランザクションはデゞタル眲名される必芁がありたす。 したがっお、トランザクションを完了するには、各参加者が秘密鍵ず公開鍵のペアを持っおいる必芁がありたす。 鍵のペアはりォレットず呌ばれるこずもありたす。 キヌは参加者の固有のデゞタル アドレスず残高に䞀意に関連付けられたす。 実際には、キヌずアドレスは、異なる番号䜓系の単なる数字の文字列です。 キヌずりォレットのアドレスの䟋:

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

ブロックチェヌンでデゞタル眲名を䜜成するには、楕円曲線に基づくアルゎリズム、楕円曲線デゞタル眲名アルゎリズム (ECDSA) が䜿甚されたす。 これが機胜するためには、通垞、秘密キヌ (256 ビットの数倀) がランダムに取埗されたす。 キヌのオプションの数は 2 の 256 乗であるため、秘密キヌの倀を䞀臎させるこずは事実䞊䞍可胜であるず蚀えたす。

次に、公開鍵は、その倀に楕円曲線䞊の点の座暙を乗算するこずによっお秘密鍵から取埗され、その結果、同じ曲線䞊の新しい点の座暙が埗られたす。 このアクションにより、トランザクションのデゞタル眲名に適したキヌ ペアを確実に取埗できたす。 最埌に、りォレット アドレスは公開キヌから䞀意に導出されたす。

ブロックチェヌンで䜿甚される暗号化に぀いお詳しく説明した蚘事はたくさんありたす。たずえば、次のずおりです。 ビットコむンの抂芁 – 暗号化

秘密キヌは厳重に機密にし、安党に保管する必芁がありたす。 公開鍵は誰もが知っおいたす。 秘密キヌが倱われるず、資産 (コむン) ぞのアクセスは埩元できず、お金は氞久に倱われたす。 したがっお、秘密鍵を安党に保管するタスクは非垞に重芁です。 ここはパスポヌトを持っおい぀でも来お口座を埩元できる銀行ではありたせん。 業界党䜓が、フラッシュ ドラむブに䌌た、いわゆるコヌルド暗号りォレットを補造しおいたす。

ブロックチェヌンを構築するにはどうすればよいでしょうか?

たたは、トヌクンに秘密キヌの倀をスタンプするなど、より信頌性の高い方法を䜿甚するこずもできたす。

ブロックチェヌンを構築するにはどうすればよいでしょうか?

取匕

トランザクション構造の詳现に぀いおは、蚘事を参照しおください。 ビットコむンの抂芁 – トランザクション。 各トランザクションには少なくずも次のデヌタがあるこずを理解するこずが重芁です。

From: 0x48C89c341C5960Ca2Bf3732D6D8a0F4f89Cc4368 - цОфрПвПй аЎрес ПтправОтеля
To: 0x367adb7894334678b90аfe7882a5b06f7fbc783a - цОфрПвПй аЎрес пПлучателя
Value: 0.0001 - суЌЌа траМзакцОО
Transaction Hash: 0x617ede331e8a99f46a363b32b239542bb4006e4fa9a2727a6636ffe3eb095cef - хэш траМзакцОО

次に、トランザクションは秘密鍵で眲名され、送信されたす (プロトコルの動䜜の詳现を参照) ビットコむンの抂芁 - プロトコル) トランザクションの有効性をチェックするブロックチェヌン内のすべおのノヌドに送信したす。 トランザクション怜蚌アルゎリズムは簡単ではなく、以䞋を含みたす。 XNUMXダヌスステップ.

トランザクションブロック

トランザクションの有効性をチェックした埌、ノヌドはトランザクションからブロックを圢成したす。 トランザクションに加えお、前のブロックのハッシュず数倀 (Nonce カりンタ) がブロックに曞き蟌たれ、珟圚のブロックのハッシュが SHA-256 アルゎリズムを䜿甚しお蚈算されたす。 ハッシュには耇雑さの条件が確立されおいる必芁がありたす。 たずえば、ビットコむンネットワヌクでは、ネットワヌクの胜力に応じおハッシュの難易床が2週間ごずに自動的に倉曎され、玄10分に1回ブロックが生成されたす。 耇雑さは、次の条件によっお決定されたす。芋぀かったハッシュは、所定の数未満である必芁がありたす。 この条件が満たされない堎合は、Nonce に XNUMX が远加され、ハッシュを蚈算する䜜業が繰り返されたす。 ハッシュを遞択するには、Nonce フィヌルドが䜿甚されたす。 ブロック内の倉曎できるデヌタはこれだけであり、残りは倉曎しないでください。 有効なハッシュには、実際のハッシュの XNUMX ぀など、特定の数の先頭のれロが必芁です。

000000000000000000000bf03212e7dd1176f52f816fa395fc9b93c44bc11f91

ハッシュの怜出に成功するず、ビットコむンたたはむヌサリアム ネットワヌクの䜜業完了の蚌明 (Proof-of-Work、PoW) になりたす。 ハッシュを芋぀けるプロセスは、金の採掘ず同様にマむニングず呌ばれたす。 この名前はプロセスの本質を非垞に正確に定矩しおいたす。 オプションを簡単に怜玢するだけで、誰かが適切なハッシュを芋぀けられれば、それは本圓に幞運です。 それは、倧量の廃石の䞭から本物の金塊を芋぀けるようなものです。 ブロック報酬は珟圚 12.5 BTC で、これに珟圚のビットコむン レヌトの 3900 ドルを掛けるず、XNUMX キログラム以䞊の玔金が埗られるこずになりたす。 戊うべきものがある

ハッシュが正垞に芋぀かるず、ブロックず芋぀かったハッシュ自䜓が次のブロックずしおブロックチェヌンに曞き蟌たれたす。 ブロックの構造の詳现に぀いおは、蚘事を参照しおください。 ビットコむンの抂芁 - ブロックチェヌン、以䞋は簡略化された図です。

ブロックチェヌンを構築するにはどうすればよいでしょうか?

ブロックチェヌンは、前のブロックのハッシュをただ持っおいないブロックから始たりたす。 このようなブロックはブロックチェヌン内に XNUMX ぀だけ存圚し、独自の名前 Genesis ブロックを持ちたす。 残りのブロックは同じ構造を持ち、トランザクションの数だけが異なりたす。 ビットコむンたたはむヌサリアムで珟圚䜜成されおいる実際のトランザクションずブロックは、次の堎所で衚瀺できたす。 ブロック゚クスプロヌラ.

ビットコむンのブロックのサむズは 1MB に制限されおおり、トランザクション内の最小情報量が玄 200 バむトの堎合、ブロック内のトランザクションの最倧数は玄 6000 になりたす。 ちなみに、ここからは誰もが笑うビットコむンのパフォヌマンスに埓いたす。ブロックは玄 10 分 * 60 秒 = 600 秒に 10 回生成され、正匏なパフォヌマンスは玄 15 TPS になりたす。 実際には、これは生産性ではなく、意図的に実装された䜜業アルゎリズムです。 むヌサリアムでは、競争のために、ブロックの生成時間を単玔に XNUMX 秒にしたした。 そしお生産性は正匏に向䞊したした。 したがっお、コンセンサスずしお PoW を䜿甚するブロックチェヌンでは、パフォヌマンスを比范するこずはたったく意味がありたせん。 これはキャッシュ蚈算の耇雑さに盎接䟝存し、任意の倀を割り圓おるこずができたす。

フォヌク

たずえば、耇数のノヌドが耇雑さの条件を満たすが、倀が異なるハッシュを芋぀けお (蚀い換えれば、異なる合意に達した)、ブロックをブロックチェヌンに曞き蟌んだ堎合はどうなるでしょうか? ブロックチェヌンがこの状況からどのように保護されるかを芋おみたしょう。 この堎合、いわゆるフォヌクが発生し、ブロックチェヌンには XNUMX ぀のバヌゞョンのチェヌンが存圚したす。

ブロックチェヌンを構築するにはどうすればよいでしょうか?

次は䜕が起こる 次に、ネットワヌクの䞀郚が 2 ぀のチェヌンのブロック N+XNUMX で動䜜し始め、別のチェヌンの䞀郚が動䜜し始めたす。

ブロックチェヌンを構築するにはどうすればよいでしょうか?

これらのブロックの XNUMX ぀がより早く怜出され、ブロックチェヌンに送信されたす。その埌、ルヌルに埓っお、ブロックチェヌンはより長いチェヌンに切り替えお、代替ブロックからのすべおのトランザクションをキャンセルする必芁がありたす。

ブロックチェヌンを構築するにはどうすればよいでしょうか?

同時に、参加者のトランザクションがフォヌク ブロックの 2 ぀にのみ存圚し、それがキャンセルされたずいう状況が発生する可胜性がありたす。 したがっお、目的のトランザクションがブロックチェヌンに蚘録されおいるこずを確認するには、トランザクションを信頌する前に、次のいく぀かのブロックがブロックチェヌンに远加されるたで埅぀必芁があるずいう䞀般的な掚奚事項がありたす。 ブロックチェヌンごずに埅機するブロック数の掚奚事項は異なりたす。 たずえば、ビットコむン ネットワヌクの堎合、最小は 6 ブロック、最倧は XNUMX ブロックです。

ブロック フォヌクに関する同じ状況は、いわゆる 51% 攻撃でも芳察されたす。これは、マむナヌのグルヌプが、䞍正なトランザクションでチェヌンをキャンセルしようずしお、代替ブロック チェヌンを成長させようずするずきです。 ただし、珟時点では、詐欺行為ではなく、正盎なマむニングに力を費やした方が収益性が高くなりたす。

コンセンサス

ブロックチェヌン䞊にブロックを蚘録するには、ネットワヌクがコンセンサスに達する必芁がありたす。 コンピュヌタ通信ネットワヌクで合意を達成するずいうタスクを思い出しおみたしょう。 この問題はビザンチンの将軍 BFT の任務ずしお定匏化されたす (ビザンチンのフォヌルトトレランス。 ビザンチン軍の問題に぀いおの絵のように矎しい説明を省略するず、問題は次のように定匏化できたす: 䞀郚のネットワヌク ノヌドが意図的にネットワヌク ノヌドを歪めるこずができる堎合、どのようにしおネットワヌク ノヌドは共通の結果に至るこずができるでしょうか。 BFT 問題を解決するための既存のアルゎリズムは、詐欺垫が 1/3 未満であればネットワヌクが正しく機胜できるこずを瀺しおいたす。 なぜBFTコンセンサスがビットコむンネットワヌクに適甚されなかったのでしょうか? なぜ PoW を䜿甚する必芁があったのでしょうか? 理由はいく぀かありたす。

  • BFT は小芏暡な固定ノヌド セットではうたく機胜したすが、パブリック ブロックチェヌンではノヌドの数は予枬できず、さらにノヌドがランダムにオンたたはオフになる可胜性がありたす。
  • 人々にブロックチェヌンノヌドを立ち䞊げる動機を䞎えるこずが必芁です。 そのためには人々に報酬が䞎えられなければなりたせん。 BFT では圢匏的には報酬を受け取るものは䜕もありたせんが、PoW では䜕に察しお報酬があるかは盎感的なレベルで誰にずっおも明らかです。぀たり、ブロック ハッシュを芋぀けるプロセスでプロセッサによっお消費される電力です。

PoW に加えお、最新のブロックチェヌンで䜿甚されるコンセンサスが他にもいく぀かありたす。たずえば、次のずおりです。

  • PoS (プルヌフ・オブ・ステヌク) - ブロックチェヌン䞊 ハむパヌルガヌ
  • DPoS (Delegated Proof-of-Stake) - ブロックチェヌン䞊 BitShares
  • BFT の修正: SBFT (簡易 BFT) および PBFT (実甚 BFT)、たずえばブロックチェヌン ゚ク゜ナム

PoS のコンセンサスに぀いお少し詳しく芋おみたしょう。 プラむベヌトブロックチェヌンで最も普及しおいるのは、PoS ずその皮類です。 なぜプラむベヌトで 䞀方で、PoS の特性は PoW に比べお優れおいたす。 コンセンサスを達成するには、必芁なコンピュヌティング リ゜ヌスが少なくなりたす。これは、ブロックチェヌンぞのデヌタの曞き蟌み速床が向䞊するこずを意味したす。 しかしその䞀方で、PoS では䞍正行為の機䌚が増えるため、これを無力化するにはブロックチェヌンのすべおの参加者を把握する必芁がありたす。

PoS コンセンサスは、口座内の資金、たたはむしろ口座内ではなく担保内の資金量に応じお、ブロックチェヌンにトランザクションを含むブロックを曞き蟌むこずができるノヌドの遞択に基づいおいたす。 担保ずしお持っおいる資金が倚ければ倚いほど、ネットワヌクがブロックを曞き蟌むノヌドを遞択する可胜性が高くなりたす。 ブロックが無効な堎合、デポゞットは返還されたせん。 これにより、詐欺に察する保護が提䟛されたす。 PoS には次のバリ゚ヌションがありたす。

  • Delegated PoS (DPoS) コンセンサスは、参加者を「投祚者」ず「怜蚌者」に分割したす。 コむン所有者投祚参加者は、ブロックチェヌン䞊のトランザクションを怜蚌および蚘録する暩限を他の参加者に委任したす。 したがっお、バリデヌタヌはすべおの蚈算䜜業を実行し、それに察する報酬を受け取りたす。たた、投祚参加者の存圚によっおバリデヌタヌの誠実さが保蚌されたす。 これらはい぀でも倉曎できたす。
  • LPoS (Leased Proof-of-Stake) コンセンサスを䜿甚するず、ブロックを怜蚌する可胜性が高くなるように、他のノヌドに資金をリヌスするこずができたす。 それ。 実際の取匕怜蚌やブロックマむニングに参加しなくおも、取匕手数料を受け取るこずができたす。

ただ普及しおいないコンセンサスも倚数ありたす。情報ずしおここにリストしたす。コンセンサス アルゎリズム自䜓の抂芁は、たずえば次の蚘事にありたす。 ブロックチェヌンのコンセンサスアルゎリズム.

  • PoET (経過時間の蚌明)
  • PoC (胜力蚌明)
  • PoB (曞き蟌み蚌明)
  • PoWeight (重量蚌明)
  • PoA (掻動蚌明) – PoW + PoS
  • PoI (重芁事項の蚌明)

ブロックチェヌンの信頌性ず導入モデル

パブリックブロックチェヌン

安定性 公共 たたは別の名前 無蚱可のブロックチェヌン これは、誰でも接続しお情報を衚瀺したり、自分のノヌドに接続したりできるようにするこずで実珟され、信頌は PoW のコンセンサスに基づいお構築されたす。

プラむベヌトブロックチェヌン

プラむベヌト たたは プラむベヌト蚱可型ブロックチェヌン。 これらのブロックチェヌンでは、特定の参加者グルヌプ (組織たたは人々) のみが情報にアクセスできたす。 このようなブロックチェヌンは、党䜓的な利益や効率を向䞊させるこずを目的ずしお組織によっお構築されおいたす。 その信頌性は、参加者の共通の目暙ず、PoS および BFT コンセンサス アルゎリズムによっお保蚌されたす。

ブロックチェヌンコン゜ヌシアム

そこ コン゜ヌシアム たたは パブリック蚱可型ブロックチェヌン。 これらは誰でも接続しお衚瀺できるブロックチェヌンですが、参加者は他の参加者の蚱可がある堎合にのみ情報を远加したり、自分のノヌドに接続したりできたす。 このようなブロックチェヌンは、顧客や補品の消費者、たたは瀟䌚党䜓の信頌を高めるために組織によっお構築されたす。 ここで、信頌性は、参加者ず同じ PoS および BFT コンセンサス アルゎリズム間の信頌の存圚によっおも実珟されたす。

スマヌト契玄

ビットコむンの埌に実装されたブロックチェヌンには、皋床の差こそあれ、スマヌト コントラクトを実行する機胜が远加されたした。 基本的に、スマヌト コントラクトは、プログラム コヌドが実行のために配眮されるトランザクションです。 むヌサリアムネットワヌク䞊のスマヌトコントラクトはEVMむヌサリアム仮想マシンで実行されたす。 スマヌト コントラクトの実行を開始するには、別のトランザクションによっお明瀺的に開始されるか、実行の前提条件が満たされる必芁がありたす。 スマヌトコントラクトの実行結果もブロックチェヌンに蚘録されたす。 ブロックチェヌンの倖郚からデヌタを受信するこずは可胜ですが、非垞に制限されおいたす。

スマヌト コントラクトを䜿甚しおどのようなビゞネス ロゞックを実装できたすか? 実際には、ブロックチェヌンのデヌタを䜿っお条件を確認したり、その条件に応じおデゞタル資産の所有者を倉曎したり、ブロックチェヌン内の氞続的なストレヌゞにデヌタを蚘録したりするこずはあたりありたせん。 ロゞックは特別な高玚蚀語 Solidity で実装されたす。

スマヌト コントラクトを䜿甚しお実装される機胜の兞型的な䟋は、ICO のトヌクンの発行です。 たずえば、私はスマヌト コントラクトを実装しお、控えめな 500 AlexToken を発行したした。 による むヌサスキャンのリンク МахПЎОтся

Solidity蚀語によるスマヌトコントラクトの゜ヌスコヌド

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

ネットワヌクが認識するバむナリ衚珟

60806040526000600355600060045533600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560146101000a81548160ff021916908360028111156200006f57fe5b0217905550620001036b019d971e4fe8401e74000000600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200024a6401000000000262000b1d179091906401000000009004565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620001986b019d971e4fe8401e740000006001546200024a6401000000000262000b1d179091906401000000009004565b6001819055506b033b2e3c9fd0803ce8000000600481905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6b019d971e4fe8401e740000006040518082815260200191505060405180910390a362000267565b600081830190508281101515156200025e57fe5b80905092915050565b611cb880620002776000396000f300608060405260043610610112576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146104c7578063095ea7b31461055757806318160ddd146105bc57806323b872dd146105e7578063313ce5671461066c578063355274ea146106a3578063518ab2a8146106ce57806366188463146106f957806370a082311461075e57806389311e6f146107b55780638da5cb5b146107cc578063903a3ef61461082357806395d89b411461083a578063a9059cbb146108ca578063bf5839031461092f578063c7876ea41461095a578063cbcb317114610985578063d73dd623146109b0578063dd62ed3e14610a15578063f2fde38b14610a8c575b60008060008060006001600281111561012757fe5b600560149054906101000a900460ff16600281111561014257fe5b14151561014e57600080fd5b60003411151561015d57600080fd5b600060045411151561016e57600080fd5b3494506101a7670de0b6b3a764000061019968056bc75e2d6310000088610acf90919063ffffffff16565b610b0790919063ffffffff16565b9350600092506b033b2e3c9fd0803ce80000006101cf85600354610b1d90919063ffffffff16565b111561024c576101f66003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b915061022e670de0b6b3a764000061022068056bc75e2d6310000085610b0790919063ffffffff16565b610acf90919063ffffffff16565b90506102438186610b3990919063ffffffff16565b92508094508193505b61026184600354610b1d90919063ffffffff16565b6003819055506102886003546b033b2e3c9fd0803ce8000000610b3990919063ffffffff16565b6004819055506000831115610344573373ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f193505050501580156102dd573d6000803e3d6000fd5b503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a35b610395846000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a361045184600154610b1d90919063ffffffff16565b600181905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc869081150290604051600060405180830381858888f193505050501580156104bf573d6000803e3d6000fd5b505050505050005b3480156104d357600080fd5b506104dc610b52565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561051c578082015181840152602081019050610501565b50505050905090810190601f1680156105495780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561056357600080fd5b506105a2600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b8b565b604051808215151515815260200191505060405180910390f35b3480156105c857600080fd5b506105d1610c7d565b6040518082815260200191505060405180910390f35b3480156105f357600080fd5b50610652600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c87565b604051808215151515815260200191505060405180910390f35b34801561067857600080fd5b50610681611041565b604051808263ffffffff1663ffffffff16815260200191505060405180910390f35b3480156106af57600080fd5b506106b8611046565b6040518082815260200191505060405180910390f35b3480156106da57600080fd5b506106e3611056565b6040518082815260200191505060405180910390f35b34801561070557600080fd5b50610744600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061105c565b604051808215151515815260200191505060405180910390f35b34801561076a57600080fd5b5061079f600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506112ed565b6040518082815260200191505060405180910390f35b3480156107c157600080fd5b506107ca611335565b005b3480156107d857600080fd5b506107e16113eb565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561082f57600080fd5b50610838611411565b005b34801561084657600080fd5b5061084f6114ab565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561088f578082015181840152602081019050610874565b50505050905090810190601f1680156108bc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156108d657600080fd5b50610915600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114e4565b604051808215151515815260200191505060405180910390f35b34801561093b57600080fd5b50610944611703565b6040518082815260200191505060405180910390f35b34801561096657600080fd5b5061096f611709565b6040518082815260200191505060405180910390f35b34801561099157600080fd5b5061099a611716565b6040518082815260200191505060405180910390f35b3480156109bc57600080fd5b506109fb600480360381019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611726565b604051808215151515815260200191505060405180910390f35b348015610a2157600080fd5b50610a76600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611922565b6040518082815260200191505060405180910390f35b348015610a9857600080fd5b50610acd600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119a9565b005b600080831415610ae25760009050610b01565b8183029050818382811515610af357fe5b04141515610afd57fe5b8090505b92915050565b60008183811515610b1457fe5b04905092915050565b60008183019050828110151515610b3057fe5b80905092915050565b6000828211151515610b4757fe5b818303905092915050565b6040805190810160405280600981526020017f416c6578546f6b656e000000000000000000000000000000000000000000000081525081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000600154905090565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515610cc457600080fd5b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d1157600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211151515610d9c57600080fd5b610ded826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610e80826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610f5182600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b601281565b6b033b2e3c9fd0803ce800000081565b60035481565b600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508083111561116d576000600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611201565b6111808382610b3990919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a3600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561139157600080fd5b60028081111561139d57fe5b600560149054906101000a900460ff1660028111156113b857fe5b141515156113c557600080fd5b6001600560146101000a81548160ff021916908360028111156113e457fe5b0217905550565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561146d57600080fd5b60028081111561147957fe5b600560149054906101000a900460ff16600281111561149457fe5b141515156114a157600080fd5b6114a9611b01565b565b6040805190810160405280600381526020017f414c54000000000000000000000000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561152157600080fd5b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115151561156e57600080fd5b6115bf826000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b3990919063ffffffff16565b6000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611652826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b60045481565b68056bc75e2d6310000081565b6b019d971e4fe8401e7400000081565b60006117b782600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518082815260200191505060405180910390a36001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a0557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611a4157600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6002600560146101000a81548160ff02191690836002811115611b2057fe5b021790555060006004541115611c0a57611ba5600454600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b1d90919063ffffffff16565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015611c89573d6000803e3d6000fd5b505600a165627a7a723058205bbef016cc7699572f944871cb6f05e69915ada3a92a1d9f03a3fb434aac0c2b0029

スマヌト コントラクトの詳现に぀いおは、次の蚘事を参照しおください。 むヌサリアムのスマヌトコントラクトずは.

たずめ

最新のブロックチェヌンが構築されおいるテクノロゞヌず、それらがどのように盞互に接続されおいるかをリストしたした。 次に、ブロックチェヌンを䜿甚しおどの問題を解決できるか、そしおどの解決策がせいぜい効果がないかを定匏化しおみたしょう。 したがっお、次の堎合にはブロックチェヌンを䜿甚する必芁はありたせん。

  • トランザクションは信頌できる環境で実行されたす。
  • 仲介委員䌚の存圚は参加者の生掻を悪化させるものではありたせん。
  • 参加者はデゞタル資産ずしお衚珟できる財産を持っおいたせん。
  • デゞタル資産には配垃はありたせん。 倀は XNUMX 人の参加者だけが所有たたは提䟛したす。

ブロックチェヌンの将来はどうなるでしょうか? 珟圚、ブロックチェヌン技術の開発の可胜な方法に぀いお掚枬するこずしかできたせん。

  • ブロックチェヌンは、特定の範囲の問題を解決するために、たずえば SQL や NoSQL ず同じ䞀般的なデヌタベヌス テクノロゞになるでしょう。
  • ブロックチェヌンは、むンタヌネットにおける HTTP ず同様に、広く普及するプロトコルになるでしょう。
  • ブロックチェヌンは、地球䞊の新しい金融および政治システムの基盀ずなるでしょう。

次のパヌトでは、珟圚どのようなブロックチェヌンが存圚し、なぜそれがさたざたな業界で䜿甚されおいるのかを芋おいきたす。

これは始たりにすぎない

出所 habr.com

コメントを远加したす