著曞『むヌサリアムブロックチェヌン向けのSolidityスマヌトコントラクトの䜜成。 実践ガむド』

著曞『むヌサリアムブロックチェヌン向けのSolidityスマヌトコントラクトの䜜成。 実践ガむド』
XNUMX 幎以䞊にわたり、私は『Creating Solidity Smart Contracts for the Ethereum Blockchain』ずいう本に取り組んできたした。 実践ガむド』が完成し、曞籍化されたした。 リットル単䜍で出版および入手可胜.

私の本が、Ethereum ブロックチェヌン甚の Solidity スマヌト コンタクトず分散型 DApps の䜜成をすぐに始めるのに圹立぀こずを願っおいたす。 実践的なタスクを含む 12 レッスンで構成されおいたす。 これらを完了するず、読者は独自のロヌカル Ethereum ノヌドを䜜成し、スマヌト コントラクトを公開しおそのメ゜ッドを呌び出し、オラクルを䜿甚しお珟実䞖界ずスマヌト コントラクトの間でデヌタを亀換し、Rinkeby テスト デバッグ ネットワヌクを操䜜できるようになりたす。

この本は、ブロックチェヌンの分野の高床なテクノロゞヌに興味があり、興味深く有望な仕事をするための知識をすばやく習埗したいすべおの人を察象ずしおいたす。

以䞋にこの本の目次ず第 XNUMX 章を瀺したす (たた、 リトレヌれ 本の断片が入手可胜です。 フィヌドバック、コメント、提案をお埅ちしおおりたす。 この本の次の版を準備するずきは、これらすべおを考慮に入れるように努めたす。

目次導入私たちの本は、むヌサリアム ブロックチェヌンの原理を理解するだけでなく、このネットワヌク甚の Solidity プログラミング蚀語で分散型 DApps を䜜成する実践的なスキルを習埗したい人を察象ずしおいたす。

この本を読むだけでなく、レッスンで説明されおいる実践的なタスクを実行しながら、この本を読んで䜜業するこずをお勧めしたす。 動䜜するには、Debian たたは Ubuntu OS がむンストヌルされたロヌカル コンピュヌタヌ、仮想サヌバヌ、たたはクラりド サヌバヌが必芁です。 Raspberry Pi を䜿甚しお倚くのタスクを実行するこずもできたす。

最初のレッスンで むヌサリアム ブロックチェヌンの動䜜原理ず基本甚語を芋お、このブロックチェヌンがどこで䜿甚できるかに぀いおも説明したす。

目暙 XNUMX回目のレッスン — このコヌス内のさらなる䜜業のために、Ubuntu および Debian サヌバヌ䞊でプラむベヌト Ethereum ブロックチェヌン ノヌドを䜜成したす。 ブロックチェヌン ノヌドの動䜜を保蚌する geth や swarm 分散デヌタ ストレヌゞ デヌモンなどの基本ナヌティリティをむンストヌルする機胜を芋おいきたす。

XNUMX回目のレッスン 安䟡な Raspberry Pi マむクロコンピュヌタヌでむヌサリアムを実隓する方法を教えたす。 Raspberry Pi に Rasberian オペレヌティング システム (OS)、ブロックチェヌン ノヌドに電力を䟛絊する Geth ナヌティリティ、および Swarm 分散デヌタ ストレヌゞ デヌモンをむンストヌルしたす。

レッスン XNUMX は、むヌサリアム ネットワヌク䞊のアカりントず暗号通貚ナニット、および Geth コン゜ヌルからあるアカりントから別のアカりントに資金を転送する方法に特化しおいたす。 アカりントを䜜成し、資金移動取匕を開始し、取匕ステヌタスず領収曞を取埗する方法を孊びたす。

XNUMX回目のレッスンでは むヌサリアム ネットワヌク䞊のスマヌト コントラクトに぀いお理解し、むヌサリアム仮想マシンによるスマヌト コントラクトの実行に぀いお孊びたす。

Ethereum プラむベヌト ネットワヌク䞊で最初のスマヌト コントラクトを䜜成しお公開し、その関数を呌び出す方法を孊びたす。 これを行うには、Remix Solidity IDE を䜿甚したす。 solc バッチ コンパむラをむンストヌルしお䜿甚する方法も孊習したす。
いわゆるアプリケヌション バむナリ むンタヌフェむス (ABI) に぀いおも説明し、その䜿甚方法に぀いおも説明したす。

XNUMX番目のレッスン Node.js を実行する JavaScript スクリプトの䜜成ず、Solidity スマヌト コントラクトを䜿甚した操䜜の実行に特化しおいたす。

Ubuntu、Debian、Rasberian OS に Node.js をむンストヌルし、むヌサリアム ロヌカル ネットワヌク䞊でスマヌト コントラクトを公開し、その関数を呌び出すためのスクリプトを䜜成したす。

さらに、スクリプトを䜿甚しお通垞のアカりント間で資金を転送する方法や、スマヌト コントラクト アカりントに資金を入金する方法も孊びたす。

XNUMX回目のレッスンでは Solidity スマヌト コントラクト開発者の間で人気のある Truffle フレヌムワヌクをむンストヌルしお䜿甚する方法を孊びたす。 truffle-contract モゞュヌルを䜿甚しおコントラクト関数を呌び出す JavaScript スクリプトを䜜成し、Truffle を䜿甚しおスマヌト コントラクトをテストする方法を孊びたす。

XNUMX番目のレッスン Solidity デヌタ型専甚。 笊号付きおよび笊号なし敎数、笊号付き数倀、文字列、アドレス、耇玠倉数、配列、列挙型、構造䜓、蟞曞などのデヌタ型を扱うスマヌト コントラクトを䜜成したす。

XNUMX回目のレッスンでは むヌサリアムメむンネット甚のスマヌトコントラクトの䜜成にたた䞀歩近づきたす。 Geth プラむベヌト ネットワヌクおよび Rinkeby テストネット䞊で Truffle を䜿甚しおコントラクトを公開する方法を孊びたす。 Rinkeby ネットワヌク䞊でスマヌト コントラクトをデバッグするこずは、メむン ネットワヌクに公開する前に非垞に圹立ちたす。そこにはほずんどすべおが本物ですが、無料です。

レッスンの䞀環ずしお、Rinkeby テスト ネットワヌク ノヌドを䜜成し、資金を投入しお、スマヌト コントラクトを公開したす。

レッスン10 Ethereum Swarm 分散デヌタ ストレヌゞ専甚。 分散ストレヌゞを䜿甚するず、むヌサリアム ブロックチェヌンに倧量のデヌタを保存する手間が省けたす。

このチュヌトリアルでは、ロヌカル Swarm ストレヌゞを䜜成し、ファむルおよびファむル ディレクトリに察する曞き蟌みおよび読み取り操䜜を行いたす。 次に、パブリック Swarm ゲヌトりェむを操䜜する方法、Node.js から Swarm にアクセスするためのスクリプトを䜜成する方法、および Perl Net::Ethereum::Swarm モゞュヌルを䜿甚する方法を孊びたす。

レッスンの目暙 11 — 人気の Python プログラミング蚀語ず Web3.py フレヌムワヌクを䜿甚した Solidity スマヌト コントラクトの操䜜をマスタヌしたす。 フレヌムワヌクをむンストヌルし、スマヌト コントラクトをコンパむルしお公開するためのスクリプトを䜜成し、その関数を呌び出したす。 この堎合、Web3.py は単独で、たたは Truffle 統合開発環境ず組み合わせお䜿甚​​されたす。

レッスン12で オラクルを䜿甚しおスマヌトコントラクトず珟実䞖界の間でデヌタを転送する方法を孊びたす。 これは、Web サむト、IoT デバむス、さたざたなデバむスやセンサヌからデヌタを受信したり、スマヌト コントラクトからこれらのデバむスにデヌタを送信したりするのに圹立ちたす。 レッスンの実践的な郚分では、ロシア連邊䞭倮銀行の Web サむトから米ドルずルヌブルの間の珟圚の為替レヌトを受け取るオラクルずスマヌト コントラクトを䜜成したす。

レッスン 1. ブロックチェヌンずむヌサリアム ネットワヌクに぀いお簡単に説明するレッスンの目的: むヌサリアム ブロックチェヌンの動䜜原理、その応甚分野、基本的な甚語に぀いお孊びたす。
実践的なタスク: このレッスンには含たれおいたせん。

今日、ブロックチェヌン テクノロゞヌ (Blockchain)、暗号通貚 (Cryptocurrency たたは Crypto Currency)、ビットコむン (Bitcoin)、むニシャル コむン オファリング (ICO、むニシャル コむン オファリング)、スマヌト コントラクト (スマヌト コントラクト) に぀いお聞いたこずがない゜フトりェア開発者はほずんどいないでしょう。ブロックチェヌンに関連するその他の抂念や甚語も同様です。

ブロックチェヌン技術は新たな垂堎を開拓し、プログラマヌの雇甚を創出したす。 暗号通貚テクノロゞヌずスマヌト コントラクト テクノロゞヌの耇雑さをすべお理解しおいれば、この知識を実際に適甚するこずに問題はありたせん。

暗号通貚ずブロックチェヌンに関しおは倚くの憶枬があるず蚀わざるを埗たせん。 暗号通貚レヌトの倉曎、ピラミッドの創蚭、暗号通貚法の耇雑さなどに関する議論は脇に眮きたす。 私たちのトレヌニング コヌスでは、むヌサリアム ブロックチェヌン (むヌサリアム、むヌサ) のスマヌト コントラクトのアプリケヌションず、いわゆる分散型アプリケヌション (分散アプリケヌション、DApp) の開発の技術的偎面に䞻に焊点を圓おたす。

ブロックチェヌンずは䜕ですか

ブロックチェヌン (Block Chain) は、特定の方法で盞互に接続されたデヌタ ブロックのチェヌンです。 チェヌンの先頭には最初のブロックがあり、これはプラむマリ ブロック (ゞェネシス ブロック) たたはゞェネシス ブロックず呌ばれたす。 続いお XNUMX 番目、XNUMX 番目ず続きたす。

これらすべおのデヌタ ブロックは、ブロックチェヌン ネットワヌクの倚数のノヌドに自動的に耇補されたす。 これにより、ブロックチェヌン デヌタの分散ストレヌゞが確保されたす。
ブロックチェヌン システムは、ネットワヌク内に接続され、デヌタ ブロックのチェヌン内のすべおの倉曎を耇補する倚数のノヌド (物理サヌバヌたたは仮想サヌバヌ) ず考えるこずができたす。 これは巚倧なマルチサヌバヌ コンピュヌタヌのようなもので、そのようなコンピュヌタヌのノヌド (サヌバヌ) は䞖界䞭に分散できたす。 たた、自分のコンピュヌタをブロックチェヌン ネットワヌクに远加するこずもできたす。

分散デヌタベヌス

ブロックチェヌンは、ブロックチェヌン ネットワヌクのすべおのノヌドにわたっお耇補される分散デヌタベヌスず考えるこずができたす。 理論的には、少なくずも XNUMX ぀のノヌドが動䜜し、ブロックチェヌンのすべおのブロックが保存されおいる限り、ブロックチェヌンは動䜜したす。

分散デヌタレゞストリ

ブロックチェヌンは、デヌタず操䜜 (トランザクション) の分散台垳ず考えるこずができたす。 このようなレゞスタヌの別名はレゞャヌです。

分散台垳にデヌタを远加するこずはできたすが、倉曎たたは削陀するこずはできたせん。 この䞍可胜性は、特に、暗号アルゎリズム、チェヌンにブロックを远加するための特別なアルゎリズム、および分散型デヌタ ストレヌゞを䜿甚するこずによっお実珟されたす。

ブロックを远加しお操䜜 (トランザクション) を実行するずきは、秘密鍵ず公開鍵が䜿甚されたす。 ブロックチェヌン ナヌザヌに自分のデヌタ ブロックぞのアクセスのみを蚱可するこずで、ブロックチェヌン ナヌザヌを制限したす。

取匕

ブロックチェヌンは、操䜜トランザクションに関する情報をブロックに保存したす。 同時に、すでに完了した叀いトランザクションをロヌルバックしたり倉曎したりするこずはできたせん。 新しいトランザクションは、新しく远加されたブロックに保存されたす。

このようにしお、トランザクション履歎党䜓を倉曎せずにブロックチェヌン䞊に蚘録するこずができたす。 したがっお、ブロックチェヌンは、たずえば銀行取匕、著䜜暩情報、䞍動産所有者の倉曎履歎などを安党に保存するために䜿甚できたす。

むヌサリアム ブロックチェヌンには、いわゆるシステム状態が含たれおいたす。 トランザクションが実行されるず、状態は初期状態から珟圚の状態に倉化したす。 トランザクションはブロックに蚘録されたす。

パブリックおよびプラむベヌトのブロックチェヌン

ここで泚意すべきこずは、ここで述べたこずはすべお、個人や法人、政府機関や政府によっお制埡できない、いわゆるパブリックブロックチェヌンネットワヌクにのみ圓おはたりたす。
いわゆるプラむベヌトブロックチェヌンネットワヌクは、その䜜成者の完党な制埡䞋にあり、そこではあらゆるこずが可胜です。たずえば、チェヌンのすべおのブロックを完党に眮き換えるこずです。

ブロックチェヌンの実甚化

ブロックチェヌンは䜕に圹立぀のでしょうか?

぀たり、ブロックチェヌンを利甚するこずで、お互いを信頌しおいない人や䌁業の間でも安党に取匕取匕を行うこずができるようになりたす。 ブロックチェヌンに蚘録されたデヌタ取匕、個人デヌタ、曞類、蚌明曞、契玄曞、請求曞などは、蚘録埌に改ざんしたり眮き換えたりするこずはできたせん。 したがっお、ブロックチェヌンに基づいお、たずえば、さたざたな皮類の文曞の信頌できる分散レゞストリを䜜成するこずが可胜です。

もちろん、暗号通貚システムがブロックチェヌンに基づいお䜜成され、通垞の玙幣に代わるように蚭蚈されおいるこずはご存知でしょう。 玙幣は法定通貚ずも呌ばれたすFiat Money から。
ブロックチェヌンは、ブロックに蚘録されたトランザクションの保存ず䞍倉性を保蚌するため、暗号通貚システムの䜜成に䜿甚できたす。 これには、異なるナヌザヌ (アカりント) 間の暗号資金の送金の党履歎が含たれおおり、あらゆる操䜜を远跡できたす。

暗号通貚システム内の取匕は匿名で行うこずができたすが、暗号通貚を匕き出しお法定通貚に亀換するず、通垞、暗号通貚資産の所有者の身元が明らかになりたす。

いわゆるスマヌト コントラクトは、むヌサリアム ネットワヌク䞊で実行される゜フトりェアであり、トランザクションの締結ずその実装の監芖のプロセスを自動化できたす。 これは、トランザクションの支払いがむヌサ暗号通貚を䜿甚しお実行される堎合に特に効果的です。

Solidity プログラミング蚀語で蚘述された Ethereum ブロックチェヌンず Ethereum スマヌト コントラクトは、たずえば次の分野で䜿甚できたす。

  • 文曞の公蚌に代わる手段。
  • 䞍動産物件の登録簿および䞍動産物件ずの取匕に関する情報の保管。
  • 知的財産曞籍、画像、音楜䜜品などに関する著䜜暩情報の保管。
  • 独立した投祚システムの創蚭。
  • 金融ず銀行。
  • 囜際芏暡での物流、商品の移動の远跡。
  • ID カヌド システムに類䌌した個人デヌタの保管。
  • 商業分野における安党な取匕。
  • 健康蚺断の結果や所定の凊眮の履歎の保存

ブロックチェヌンの問題

しかし、もちろん、すべおが思ったほど単玔なわけではありたせん。

ブロックチェヌンにデヌタを远加する前のデヌタの怜蚌に関する問題 (たずえば、デヌタが停物かどうか)、ブロックチェヌンで動䜜するシステムおよびアプリケヌション ゜フトりェアのセキュリティの問題、アクセスを盗むために゜ヌシャル ゚ンゞニアリング手法が䜿甚される可胜性に関する問題がありたす。暗号通貚りォレットなどぞ。

繰り返しになりたすが、ノヌドが䞖界䞭に分散しおいるパブリック ブロックチェヌンではなく、個人たたは組織に属するプラむベヌト ブロックチェヌンに぀いお話しおいる堎合、ここでの信頌レベルは信頌レベルよりも高くなりたす。この人やこの組織で。

ブロックチェヌンに蚘録されたデヌタは誰でも利甚できるこずも考慮する必芁がありたす。 この意味で、ブロックチェヌン特にパブリックは機密情報の保存には適しおいたせん。 ただし、ブロックチェヌン䞊の情報は倉曎できないずいう事実は、さたざたな皮類の䞍正行為の防止や調査に圹立ちたす。

むヌサリアム分散アプリケヌションは、䜿甚料を暗号通貚で支払うず䟿利です。 暗号通貚を所有する人、たたは暗号通貚を賌入する意思がある人が増えれば増えるほど、DApps ずスマヌトコントラクトの人気はさらに高たるでしょう。

ブロックチェヌンの実甚化を劚げる䞀般的な問題には、新しいブロックを远加できる速床の制限や、トランザクションのコストが比范的高いこずが挙げられたす。 しかし、この分野の技術は掻発に開発されおおり、技術的な問題は時間の経過ずずもに解決されるこずが期埅されおいたす。

もう XNUMX ぀の問題は、むヌサリアム ブロックチェヌン䞊のスマヌト コントラクトが仮想マシンの隔離された環境で動䜜し、珟実䞖界のデヌタにアクセスできないこずです。 特に、スマヌト コントラクト プログラム自䜓は、サむトや物理デバむス (センサヌ、接点など) からデヌタを読み取るこずはできず、倖郚デバむスにデヌタを出力するこずもできたせん。 この問題ずその解決方法に぀いおは、スマヌト コントラクトの情報仲介者であるいわゆるオラクルに特化したレッスンで説明したす。

法的な制限もありたす。 たずえば、䞀郚の囜では、暗号通貚を支払い手段ずしお䜿甚するこずが犁止されおいたすが、有䟡蚌刞などの䞀皮のデゞタル資産ずしお所有するこずは可胜です。 このような資産は​​取匕所で売買できたす。 いずれの堎合でも、暗号通貚を䜿甚するプロゞェクトを䜜成する堎合は、プロゞェクトが管蜄する囜の法埋をよく理解しおおく必芁がありたす。

ブロックチェヌンチェヌンがどのように圢成されるか

すでに述べたように、ブロックチェヌンはデヌタ ブロックの単玔なチェヌンです。 たず、このチェヌンの最初のブロックが圢成され、次に XNUMX 番目のブロックがそれに远加されたす。 トランザクションデヌタはブロックに栌玍されおいるものずし、最新のブロックに远加されたす。

図では、 1.1 では、最初のブロックが次のブロックを参照する、ブロックのシヌケンスの最も単玔なバヌゞョンを瀺したした。

著曞『むヌサリアムブロックチェヌン向けのSolidityスマヌトコントラクトの䜜成。 実践ガむド』
米。 1.1. 単玔なブロックのシヌケンス

ただし、このオプションを䜿甚するず、ブロックには倉曎から保護する情報が含たれおいないため、チェヌン内のブロックの内容を非垞に簡単に改ざんできたす。 ブロックチェヌンは信頌関係のない個人や䌁業が䜿甚するこずを想定しおいるため、このデヌタ保存方法はブロックチェヌンには適しおいないず結論付けるこずができたす。

ブロックを停造から保護したしょう。 最初の段階では、各ブロックをチェックサムで保護しようずしたす (図 1.2)。

著曞『むヌサリアムブロックチェヌン向けのSolidityスマヌトコントラクトの䜜成。 実践ガむド』
米。 1.2. チェックサムを䜿甚しおこれらのブロックに保護を远加する

ブロックにはブロック デヌタのチェックサムが含たれおいるため、攻撃者はブロックを単玔に倉曎するこずはできたせん。 チェックサムを確認するず、デヌタが倉曎されおいるこずがわかりたす。

チェックサムを蚈算するには、MD-5、SHA-1、SHA-256 などのハッシュ関数のいずれかを䜿甚できたす。 ハッシュ関数は、デヌタのブロックに察しお䞍可逆的な操䜜を実行するこずにより、倀 (たずえば、䞀定長のテキスト文字列) を蚈算したす。 挔算はハッシュ関数の皮類によっお異なりたす。

デヌタブロックの内容が少し倉わっただけで、ハッシュ倀も倉わりたす。 ハッシュ関数倀を分析するこずによっお、その倀が蚈算されたデヌタ ブロックを再構築するこずは䞍可胜です。

このような保護で十分でしょうか? 残念だけど違う。

このスキヌムでは、チェックサム (ハッシュ関数) は個々のブロックのみを保護し、ブロックチェヌン党䜓を保護するわけではありたせん。 ハッシュ関数を蚈算するアルゎリズムを知っおいる攻撃者は、ブロックの内容を簡単に眮き換えるこずができたす。 たた、チェヌンからブロックを削陀したり、新しいブロックを远加したりするこずを劚げるものは䜕もありたせん。

チェヌン党䜓を党䜓ずしお保護するために、前のブロックからのデヌタのハッシュをデヌタずずもに各ブロックに保存するこずもできたす (図 1.3)。

著曞『むヌサリアムブロックチェヌン向けのSolidityスマヌトコントラクトの䜜成。 実践ガむド』
米。 1.3. 前のブロックのハッシュをデヌタ ブロックに远加したす

このスキヌムでは、ブロックを倉曎するには、埌続のすべおのブロックのハッシュ関数を再蚈算する必芁がありたす。 䜕が問題なのでしょうか

実際のブロックチェヌンでは、新しいブロックを远加するために人為的な困難がさらに䜜成され、倧量のコンピュヌティング リ゜ヌスを必芁ずするアルゎリズムが䜿甚されたす。 ブロックに倉曎を加えるには、この XNUMX ぀のブロックだけでなく、埌続のすべおのブロックを再蚈算する必芁があるこずを考えるず、これは非垞に困難になりたす。

ブロックチェヌン デヌタは倚数のネットワヌク ノヌドに保存 (耇補) されおいるこずも芚えおおいおください。 分散ストレヌゞが䜿甚されたす。 これにより、ブロックを停装するこずがはるかに困難になりたす。 すべおのネットワヌク ノヌドに倉曎を加える必芁がありたす。

ブロックには前のブロックに関する情報が保存されおいるため、チェヌン内のすべおのブロックの内容を確認するこずができたす。

むヌサリアムブロックチェヌン

むヌサリアム ブロックチェヌンは、分散型 DApp を䜜成できるプラットフォヌムです。 他のプラットフォヌムずは異なり、むヌサリアムでは、Solidity プログラミング蚀語で曞かれた、いわゆるスマヌト コントラクト (スマヌト コントラクト) の䜿甚が蚱可されおいたす。

このプラットフォヌムは、Bitcoin Magazine の創蚭者である Vitalik Buterin によっお 2013 幎に䜜成され、2015 幎に開始されたした。 トレヌニング コヌスで孊習たたは行うこずはすべお、特にむヌサリアム ブロックチェヌンず Solidity スマヌト コントラクトに関連しおいたす。

マむニングたたはブロックの䜜成方法

マむニングは、ブロックチェヌン チェヌンに新しいブロックを远加するかなり耇雑でリ゜ヌスを倧量に消費するプロセスであり、「暗号通貚マむニング」ではありたせん。 マむニングはブロックチェヌンの機胜を保蚌したす。 むヌサリアム ブロックチェヌンにトランザクションを远加するのはこのプロセスです。

ブロックの远加に関わる人や組織はマむナヌず呌ばれたす。
マむナヌ ノヌドで実行されおいる゜フトりェアは、ネットワヌクによっお指定された特定のハッシュ倀を取埗するために、最埌のブロックの Nonce ず呌ばれるハッシュ パラメヌタヌを芋぀けようずしたす。 Ethereum で䜿甚される Ethash ハッシュ アルゎリズムでは、順次怜玢を通じおのみ Nonce 倀を取埗できたす。

マむナヌ ノヌドが正しい Nonce 倀を芋぀けた堎合、これがいわゆるプルヌフ オブ ワヌク (PoW、Proof-of-work) ずなりたす。 この堎合、ブロックがむヌサリアム ネットワヌクに远加されるず、マむナヌはネットワヌク通貚であるむヌサで特定の報酬を受け取りたす。 執筆時点では報酬は 5 むヌサですが、これは時間の経過ずずもに枛少したす。

したがっお、むヌサリアムマむナヌはブロックを远加するこずでネットワヌクの動䜜を保蚌し、その察䟡ずしお暗号通貚を受け取りたす。 むンタヌネット䞊にはマむナヌやマむニングに関する情報がたくさんありたすが、ここではむヌサリアム ネットワヌク䞊での Solidity コントラクトず DApps の䜜成に焊点を圓おたす。

レッスンの抂芁

最初のレッスンでは、ブロックチェヌンに぀いお孊び、それが特別に構成された䞀連のブロックであるこずを孊びたした。 以前に蚘録されたブロックの内容は倉曎できたせん。これは、倚くのネットワヌク ノヌド䞊で埌続のすべおのブロックを再蚈算する必芁があり、倚くのリ゜ヌスず時間を必芁ずするためです。

ブロックチェヌンはトランザクションの結果を保存するために䜿甚できたす。 その䞻な目的は、信頌関係のない圓事者 (個人や組織) 間で安党な取匕を組織するこずです。 ビゞネスの具䜓的な分野ず、むヌサリアム ブロックチェヌンず Solidity スマヌト コントラクトがどの分野で䜿甚できるかを孊びたした。 これは銀行郚門、財産暩の登録、曞類などです。

たた、ブロックチェヌンを䜿甚するずさたざたな問題が発生する可胜性があるこずも孊びたした。 これらは、ブロックチェヌンに远加された情報の怜蚌の問題、ブロックチェヌンの速床、トランザクションのコスト、スマヌトコントラクトず珟実䞖界の間のデヌタ亀換の問題、およびナヌザヌアカりントから暗号通貚資金を盗むこずを目的ずした攻撃者による朜圚的な攻撃です。 。

たた、ブロックチェヌンに新しいブロックを远加するプロセスずしおのマむニングに぀いおも簡単に説明したした。 トランザクションを完了するにはマむニングが必芁です。 マむニングに携わる人々はブロックチェヌンの機胜を保蚌し、これに察しお仮想通貚で報酬を受け取りたす。

レッスン 2. Ubuntu ず Debian OS での䜜業環境の準備オペレヌティング システムの遞択
必芁なナヌティリティのむンストヌル
Ubuntu ぞの Geth ず Swarm のむンストヌル
Debian ぞの Geth ず Swarm のむンストヌル
予備準備
Go ディストリビュヌションのダりンロヌド
環境倉数の蚭定
Goのバヌゞョンを確認する
Geth ず Swarm のむンストヌル
プラむベヌトブロックチェヌンの䜜成
genesis.jsonファむルの準備
䜜業甚のディレクトリを䜜成する
アカりントを䜜成する
ノヌドの初期化の開始
ノヌド起動オプション
ノヌドに接続したす
マむニング管理ず残高チェック
Geth コン゜ヌルのシャットダりン
レッスンの抂芁

レッスン 3. Raspberry Pi 3 での䜜業環境の準備Raspberry Pi 3 を䜜業甚に準備する
ラズベリアンのむンストヌル
アップデヌトのむンストヌル
SSH アクセスの有効化
静的IPアドレスの蚭定
必芁なナヌティリティのむンストヌル
Goのむンストヌル
Go ディストリビュヌションのダりンロヌド
環境倉数の蚭定
Goのバヌゞョンを確認する
Geth ず Swarm のむンストヌル
プラむベヌトブロックチェヌンの䜜成
アカりントず残高を確認する
レッスンの抂芁

レッスン 4. アカりントずアカりント間の資金移動アカりントの衚瀺ず远加
アカりントのリストを衚瀺する
アカりントの远加
geth accountコマンドオプション
アカりントのパスワヌド
むヌサリアムの暗号通貚
むヌサリアムの通貚単䜍
私たちは口座の珟圚の残高を決定したす
ある口座から別の口座に資金を移動する
eth.sendTransaction メ゜ッド
取匕ステヌタスの衚瀺
取匕受領曞
レッスンの抂芁

レッスン 5. 最初の契玄の発行むヌサリアムのスマヌトコントラクト
スマヌトコントラクトの実行
むヌサリアム仮想マシン
統合開発環境 Remix Solidity IDE
コンパむルの実行䞭
コントラクト関数の呌び出し
プラむベヌトネットワヌク䞊で契玄を公開する
ABI 定矩ずコントラクト バむナリ コヌドの取埗
契玄曞の発行
コントラクト公開トランザクションステヌタスの確認
コントラクト関数の呌び出し
バッチコンパむラ solc
Ubuntu ぞの Solc のむンストヌル
Debian ぞの solc のむンストヌル
HelloSol コントラクトのコンパむル
契玄曞の発行
Rasberian ぞの solc のむンストヌル
レッスンの抂芁

レッスン 6. スマヌト コントラクトず Node.jsNode.js のむンストヌル
Ubuntu ぞのむンストヌル
Debian ぞのむンストヌル
Ganache-cli のむンストヌルず実行
Web3のむンストヌル
゜ルクのむンストヌル
Rasberian ぞの Node.js のむンストヌル
コン゜ヌルでアカりントのリストを取埗するスクリプト
スマヌトコントラクトを公開するためのスクリプト
起動しおパラメヌタを取埗する
起動オプションの取埗
契玄曞の䜜成
アカりントのブロックを解陀する
ABI ずコントラクトバむナリコヌドのロヌド
必芁なガス量の芋積もり
オブゞェクトを䜜成しおコントラクトの公開を開始する
契玄公開スクリプトの実行
スマヌトコントラクト関数の呌び出し
公開されたスマヌトコントラクトを曎新するこずはできたすか?
Web3 バヌゞョン 1.0.x での䜜業
アカりントのリストの取埗
契玄曞の発行
コントラクト関数の呌び出し
ある口座から別の口座に資金を移動する
契玄口座に資金を送金する
HelloSol スマヌト コントラクトの曎新
アカりント残高を衚瀺するスクリプトを䜜成する
getBalance 関数ぞの呌び出しを call_contract_get_promise.js スクリプトに远加したす。
スマヌトコントラクトアカりントに補充したす
レッスンの抂芁

レッスン 7. トリュフの抂芁Truffleのむンストヌル
HelloSol プロゞェクトを䜜成する
プロゞェクトディレクトリずファむルの䜜成
契玄ディレクトリ
カタログの移行
ディレクトリテスト
truffle-config.js ファむル
HelloSol コントラクトのコンパむル
契玄曞の発行を開始する
Truffle プロンプトでの HelloSol コントラクト関数の呌び出し
Node.js を実行する JavaScript スクリプトから HelloSol コントラクト関数を呌び出す
truffle-contract モゞュヌルのむンストヌル
コントラクト関数 getValue および getString の呌び出し
コントラクト関数 setValue および setString の呌び出し
契玄の倉曎ず再発行
Web3 バヌゞョン 1.0.x での䜜業
HelloSol スマヌト コントラクトに倉曎を加える
コントラクトメ゜ッドを呌び出すためのスクリプト
トリュフでのテスト
剛性詊隓
JavaScript テスト
レッスンの抂芁

レッスン 8. Solidity デヌタ型デヌタ型を孊習するための契玄
ブヌルデヌタ型
笊号なし敎数ず笊号付き敎数
固定小数点数
アドレス
耇合型の倉数
固定サむズの配列
動的配列
䞊堎
構造
蟞曞のマッピング
レッスンの抂芁

レッスン 9. プラむベヌト ネットワヌクおよび Rinkeby ネットワヌクぞのコントラクトの移行Truffle からプラむベヌト Geth ネットワヌクぞのコントラクトの公開
プラむベヌトネットワヌクノヌドの準備
仕事の契玄曞の準備
コントラクトをコンパむルしお Truffle ネットワヌクに移行する
ロヌカル ネットワヌク移行 geth の開始
トリュフのアヌティファクトを入手する
Truffle から Rinkeby テストネットぞのコントラクトの公開
Rinkeby で動䜜するように Geth ノヌドを準備する
ノヌドの同期
アカりントの远加
Rinkeby アカりントにむヌサをチャヌゞする
Rinkeby ネットワヌクぞの契玄移行の開始
Rinkebyネットワヌク䞊の契玄情報の閲芧
Rinkeby Network 甹 Truffle コン゜ヌル
コントラクト関数を呌び出す簡単な方法
Node.jsを䜿甚したコントラクトメ゜ッドの呌び出し
Rinkby の Truffle コン゜ヌルでアカりント間で資金を移動する
レッスンの抂芁

レッスン 10. Ethereum Swarm 分散型デヌタ ストレヌゞむヌサリアムスりォヌムはどのように機胜したすか?
Swarm のむンストヌルず起動
ファむルずディレクトリの操䜜
Ethereum Swarm ぞのファむルのアップロヌド
Ethereum Swarm からのファむルの読み取り
アップロヌドされたファむルのマニフェストを衚瀺する
サブディレクトリを含むディレクトリのロヌド
ダりンロヌドしたディレクトリからファむルを読み取る
パブリック Swarm ゲヌトりェむの䜿甚
Node.js スクリプトから Swarm にアクセスする
Perl Net::Ethereum::Swarm モゞュヌル
Net::Ethereum::Swarm モゞュヌルのむンストヌル
デヌタの曞き蟌みず読み取り
レッスンの抂芁

レッスン 11. Python で Ethereum を操䜜するための Web3.py フレヌムワヌクWeb3.pyのむンストヌル
必芁なパッケヌゞの曎新ずむンストヌル
easysolcモゞュヌルのむンストヌル
Web3.py を䜿甚したコントラクトの発行
契玄曞の䜜成
プロバむダヌに接続する
契玄発行の実行
契玄アドレスずabiをファむルに保存する
契玄公開スクリプトの実行
コントラクトメ゜ッドの呌び出し
JSON ファむルからコントラクトのアドレスず abi を読み取る
プロバむダヌに接続する
コントラクトオブゞェクトの䜜成
コントラクトメ゜ッドの呌び出し
Truffle ず Web3.py
レッスンの抂芁

レッスン 12. オラクルスマヌトコントラクトは倖郚からのデヌタを信頌できたすか?
ブロックチェヌン情報仲介者ずしおのオラクル
情報元
゜ヌスからのデヌタを衚すコヌド
ブロックチェヌンに為替レヌトを蚘録するOracle
USDRateオラクル契玄
スマヌトコントラクトでの為替レヌトの曎新
Web゜ケットプロバむダヌの䜿甚
RateUpdate むベントを埅っおいたす
RateUpdate むベントの凊理
スマヌトコントラクトでのデヌタ曎新の開始
レッスンの抂芁

出所 habr.com

コメントを远加したす