ブロックチェーン開発(パート3)最初のイーサリアムスマートコントラクトの作成とデバッグ

ブロックチェーン開発(パート3)最初のイーサリアムスマートコントラクトの作成とデバッグ

1. スマートコントラクトIDEの紹介

現在、Ethereum はスマート コントラクトを記述するための 3 つの言語をサポートしています。

Solidity: JavaScript と同様に、これは Ethereum の公式推奨言語であり、最も人気のあるスマート コントラクト言語です。具体的な使用方法については、Solidity のドキュメント (https://solidity.readthedocs.io/en/latest/) を参照してください。

Serpent: Python スタイルに似ています。ドキュメント アドレス: https://github.com/ethereum/wiki/wiki/Serpent

LLL: Lisp のようなスタイルですが、現在は廃止されています。

さまざまな習慣に応じて、さまざまな高級言語を選択できます。最も人気があるのは Solidity です。この記事のすべてのスマート コントラクトは Solidity 言語で記述されています。

スマート コントラクトを記述できる一般的な IDE がいくつかあります。

Mix: 初期の頃は Ethereum の主な開発 IDE でした。完全なグラフィカル インターフェイスを使用して、スマート コントラクトと DAPP の作成、デバッグ、および展開をサポートします。しかし、最初の司会者ギャビン・ウッドが去ったことで、番組は徐々に衰退し、最終的には発展が止まってしまいました。チーム全体がリミックス プロジェクトに取り組みました。将来的なことを考慮すると、Mix を学習することはお勧めしません。

リミックス:オリジナルMixチームによる新作です。現在、シンプルなデバッグ機能のみがオンラインになっています。今後は特に注意していただければと思います。

browser-solidity: このプロジェクトは、スマート コントラクトのブラウザー バージョンの開発環境です。ブラウザでの直接的な開発、デバッグ、コンパイルをサポートできます。初心者にとってはインストールなしですぐに始められるのでとても便利です。次のアドレスに直接アクセスできます: https://ethereum.github.io/browser-solidity/。この記事では開発にこの IDE を使用します。

Ethereum Studio: サードパーティ企業によって開発されたスマート コントラクト オンライン IDE のエンタープライズ バージョン。強力で無料で使用できます。エンタープライズレベルの開発ツールとして使用できます。次のアドレスにアクセスしてください: https://live.ether.camp/

Visual Studio 2015: はい、Microsoft の VS 2015 です。Microsoft は Ethereum のスマート コントラクト書き込み機能を統合しており、Microsoft が Ethereum を重視していることがわかります。

2. 最初のスマートコントラクトを書く

1. スマートコントラクトの構文を学ぶ方法

スマート コントラクトの構文と例は、Solidity のドキュメント Web サイト http://solidity.readthedocs.io/en/latest/ で参照できます。基本的に、これらのオンライン ドキュメントを読んだ後は、それらを習得したことになります。残りは、コードの作成を練習するだけです。

2. サンプル契約コード

まず、サンプル コードを示し、次にこのコードを例にして、スマート コントラクトの作成とデバッグについて説明します。

————————————————————————————————————-

契約投票

構造体候補{

uint 投票数;

文字列名;

}

投票者構造体{

bool が投票しました。

}

マッピング(アドレス => Voter) 一般有権者;

候補者[] 公選候補者

関数Voter() {

候補者.push(候補者({

名前: "lihe",

投票数: 0

}));

候補者.push(候補者({

名前:「だんだん」

投票数: 0

}));

}

関数 Vote_candidate(uint8 numCandidate)

{

投票者[msg.sender].voted || numCandidate>candidates.length)の場合、戻り値:

候補者[候補者数].投票数+=1;

投票者[msg.sender].voted=true;

}

関数 Getcount() は(文字列、uint、文字列、uint) を返します{

戻り値: (候補者[0].名前、候補者[0].投票数、候補者[1].名前、候補者[1].投票数);

}

}

————————————————————————————————————–

このコードは、lihe と dandan という 2 人の候補者に投票する投票プログラムを作成します。投票できるのは一人につき一度だけであり、最終的にliheとdandanの投票結果がフィードバックされます。機能は次のように説明されます。

function Votelihe(): コンストラクタ、スマートコントラクトは1回だけ実行されます

関数 Vote_candidate(): 候補者に投票します。各有権者は 1 票しか投じることができません。

関数 Getcount(): 現在の候補者の投票数を返します

3. IDEを使用してスマートコントラクトを作成する

まず、browser-solidity を開きます。 IDE の主な機能は次のとおりです。

サンプル コードを左側のコード編集ボックスにコピーすると、IDE は自動的に構文エラーを検出し、次に示すように右側のウィンドウに表示します。

ご覧のとおり、宣言されていないオブジェクトがあり、これは 14 行目のエラーです。明らかに、構造体オブジェクト candidates を candidates2 として誤って記述しました。修正することで検証に合格できます。

ブラウザでコードを記述すると、自動的にローカルブラウザキャッシュに保存されることに注意してください。ブラウザのキャッシュをクリアすれば、コードは失われません。

3. 最初のスマートコントラクトのデバッグ

現在、browser-solidity では 2 つの一般的なデバッグ方法が使用されています。 1 つはローカル仮想マシンのデバッグ モードを使用する方法であり、もう 1 つはデバッグのためにローカル プライベート チェーンに接続する方法です。

1. ローカル仮想マシンデバッグモード

ローカル仮想マシンのデバッグとは、どのノードにも接続せず、デバッグ用にメモリ内に仮想 Ethereum ノードを作成することを意味します。利点は、速度が速く、構成が簡単なことです。欠点は、仮想デバッグのみであるため、実際のブロックチェーンノードでスマートコントラクトを実行した結果が期待した結果と異なる可能性があることです。

まず、DEBUG 環境設定で、JavaScript VM を選択して、以下に示すようにローカル仮想デバッグ モードを設定します。

設定が成功すると、以下のようにアカウントステータスバーに利用可能なアカウントのリストが表示されます。

スマート コントラクト コードを記述したら、「作成」ボタンをクリックしてスマート コントラクトをメモリにデプロイし、デバッグします。デプロイが成功すると、スマート コントラクト機能の実行ボタンとパラメーター入力ボックスが表示され、以下に示すようにスマート コントラクトをデバッグできます。

関数を実行すると、対応するトランザクション データが表示され、スマート コントラクトのデバッグ全体が完了します。

スマート コントラクトを段階的にデバッグする場合は、バグ アイコンを選択し、段階的なデバッグ インターフェイスに切り替えて、スマート コントラクトを段階的に実行します。ここで実行されるシングルステップは、コードではなく、下の図に示すように、スマート コントラクトからコンパイルされた OPCODE を参照することに注意してください。

2. デバッグのためにローカルプライベートチェーンに接続する

デバッグのためにローカル プライベート チェーンに接続するということは、RPC インターフェイスを介してローカル Ethereum ノードに接続し、実際にスマート コントラクトをデプロイしてデバッグすることを意味します。欠点は、速度が遅く、構成が複雑なことです。利点は、実際にスマート コントラクトを実行し、エラーを最大限に防ぐことができることです。プライベートチェーンの構成については、私のオリジナル記事「ブロックチェーン開発(I)Ethereumをベースとしたプライベートチェーン環境の構築」を参照してください。

まず、DEBUG 環境設定で、Web3 プロバイダーを選択して、ローカル仮想デバッグ モードを設定します。デフォルトでは、接続アドレス http://localhost:8545 が指定されます。設定したプライベート チェーン RPC ポートが変更された場合は、次に示すように、対応するポートに変更することを忘れないでください。

次に、アカウント ステータス バーに切り替えます。この時点で表示される利用可能なアカウントはすべて、デプロイしたプライベート チェーン内のアカウントである必要があります。そうでない場合は、プライベート チェーンが正常に接続されていないことを意味します。考えられる理由は2つあります。 1 つは、プライベート チェーンによって提供されるポートは http 経由でアクセスされるのに対し、browser-solidity の Web アクセス アドレスは https であることです。解決策は、browser-solidity アクセス アドレスを http プロトコル アドレス http://ethereum.github.io/browser-solidity/ に変更することです。もう 1 つは、システム時刻がネットワークと同期されていないことです。 Windows システムに組み込まれている時刻同期機能を使用して同期することができます。

4. その他の一般的なスマートコントラクトリソース

次のサンプル Web サイトでは、迅速な反復学習を容易にするために、いくつかの成熟したコードを参照しています。一般的なウェブサイトの例は次のとおりです。

https://github.com/ethereum/wiki/wiki/Solidity-Collections

http://ether.fund/contracts/

https://github.com/chriseth/solidity-examples

出典: ethereum

https://github.com/fivedogit/solidity-baby-steps

出典: http://dapps.ethercasts.com

http://ether.fund/contracts

一般的に使用される開発フレームワークは次の 3 つです。

Truffle: 取扱説明書 http://truffle.readthedocs.io/en/latest/

Ethereum の人気の開発フレームワークである Truffle のマニュアル。このフレームワークは非常に人気があります。

Dapple: 取扱説明書 http://dapple.readthedocs.io/en/master/

この開発フレームワークはGitterチャートで見ました。あまり使う人はいないと思います。まずは観察してみましょう。

Meteor: 手順のアドレス: https://github.com/ethereum/wiki/wiki/Dapp-using-Meteor

この開発フレームワークは Ethereum によって公式に推奨されており、Ethereum の公式 wiki に含まれています。学ぶ価値はあります。もちろん、公式のイーサリアムは方向性を変えることが多いので、将来的に何か別のものに変わる可能性もあります。


<<:  iOS 10 に Circle Pay 機能が追加されました。Apple はビットコインへの道を切り開いているのでしょうか?

>>:  コインゾーントレンド: 今週のビッグデータに基づくビットコインの価格動向 (2016-09-13)

推薦する

新華社:デジタル人民元紅包試験プログラムは終了しました。体験はどのようなもので、結果はどうですか?

新華社記者の呉宇と呉燕廷約1週間続いた深センのデジタル人民元紅包実験は成功裏に終了した。 「幸運な人...

2025年の暗号通貨市場の分析: トランプ時代のMEMEブームと冷静な思考

1.現状:BSCチェーンMEMEプロジェクトの発生と市場差別化の矛盾1. MEMEプロジェクトの短期...

リブラは中国版デジタル通貨に影響を与えるでしょうか?

注:この記事は、2019年12月25日にFT Chineseで最初に公開されました。リブラは設立以来...

パニック指数は42、ファンドのリスク選好度は徐々に回復

米国株は一晩中急上昇を続け、FRBの今後の利上げに対するリスク資本の期待が徐々に弱まり始めていること...

韓国のビットコイン取引所Yapizonから3831BTCが盗まれ、ユーザーは損失を全て負担

韓国のビットコイン取引所ヤピゾンがハッカー攻撃の最新の被害者となり、顧客から3,831 BTC (約...

中央銀行デジタル通貨はお金の進化の次のステップになる可能性があるとBISの報告書は述べている

BlockBeatsによると、国際決済銀行(BIS)は、中央銀行デジタル通貨(CBDC)は通貨の未来...

ブロックチェーンウィークリーレポート | DeFiがSECの規制上の注目を集め、イングランド銀行はデジタル通貨の発行を検討

Defiに代表される暗号資産の規模は急速に拡大しており、SEC規制当局の注目を集めています。 The...

メディアは、Bitmainが100万BCH以上を保有していると報じた。弱気相場での株式保有について、ビットメインはどう考えているのでしょうか?

CNNは、ビットメインのIPO前の投資家向け文書が漏洩したと報じた。3月31日時点で、ビットメイン...

ビットコインパブリックチェーンはスマートコントラクト革命を推進する

この記事の著者である Chris DeRose は、Counterparty Foundation ...

ブロックチェーンのいくつかの主要なアプリケーションについて簡単に説明します。どれが落とし穴になるのでしょうか?

紙が広く使用されるようになったのは、東漢の蔡倫が製紙技術を改良したためである。今日、紙は人間の生活に...

アリババ・ファイナンシャル・クラウドはブロックチェーンベースのクラウドサービスプラットフォームを提供する可能性がある

2016年雲奇会議上海サミットが上海科学技術館で開催されました。アリババの金融部門のメンバーが会議で...

仮想通貨が盗まれた場合、警察を呼ぶことはできますか?

本日、2人が仮想通貨の盗難について劉弁護士に相談しました。二人は事件を報告するために地元の警察署へ行...

最も商業的に価値のあるオープンソースブロックチェーンプロジェクト:Hyperledger(1)

導入:オープンソース ブロックチェーン プロジェクトである Hyperledger は、わずか 1 ...

Slock.itはIOUの販売を継続する

クレイジーな解説:分散型自律組織に関しては、スマートコントラクトの自動実行機能により、組織内の人的要...

鉱業の回復により中古鉱山機械の価格が2倍になり、新しい鉱山機械の回収期間が長くなりました。

Odaily Planet デイリー翻訳 |モニ4月以降、ビットコインの強気相場が戻ってきたようで...