声明:以下は尋雷会社が作成した「尋雷グローバルブロックチェーン応用コンペティション開発ガイド」文書ですが、なぜこの文書をブロックチェーン開発ガイドとして使用したのでしょうか?
Thunderは実際にはイーサリアムのスマートコントラクトで構築されたプライベートチェーンであり、技術は非常に成熟しており、ブロックチェーン技術に関する詳細な研究が行われており、これは私たちのブロックチェーン開発にとって重要な意義を持っています。
「一つの例から推論を導く」ことわざにあるように、XunleiのおかげでXunleiが書いたブロックチェーン開発ガイドの文書を読むことで、他のブロックチェーンアプリケーションを開発できます。
文書には次のように記されています。
1/16 Thunderグローバルブロックチェーン応用コンペティション開発ガイド 契約開発を路線推奨に含む 1. スマートコントラクトを書く前に、ブロックチェーンの基礎について一定の理解を持つ必要があります(添付:Ethereum Overview)。 2. solidity言語(solidity API)を学ぶこと。 3. トリュフフレームワークとソリディティ学習を組み合わせて使いこなすことを学ぶ。 トリュフは地元で開発してください ブロックチェーン環境で契約を実行。 4. Zeppelin-solidty(セキュリティに特化した標準化された契約フレームワーク)と設計統合の学習と利用 契約モード、データと論理契約の分離、権限セキュリティの制御、アップグレードロジックの検討など。 5. web3.jsを使って契約とやり取りすることを学ぶ。 Metamaskプラグインとブロックチェーンのウェブサービスを活用しましょう 交流。 6. フォーラムQ&A:http://wanke.xunlei.com/forum.php? mod=forumdisplay&fid=53(このフォーラムで発生した問題は元に戻すことができます。) 3営業日以内にご返信いたします) 基本概念 ブロックチェーン ブロックチェーンは分散型の分散コンピューティングシステムであり、その主な特徴はデータの永続的な不変性です。 偽造はできず、高い開放性、透明性、信頼を持っています。 コア技術には、ビザンチン障害耐性合意アルゴリズム(PBFT)が含まれます。 暗号化技術、P2P技術などです。 取引 ブロックチェーンは、グローバルに共有されるトランザクションデータベースシステムとして理解できます。 許可を得たソフトウェアなら読み取れます ブロックチェーンネットワークからデータを取る。 ブロックネットワーク内のデータを変更する必要がある場合は、ブランケットを開始しなければなりません ブロックノードによって受け入れられるリクエストがあり、これらはシステム内で総称してトランザクションと呼ばれます。 取引はトランザクション形式で、ブロックチェーンに提出されます。すべてまたはすべて実行されるわけではありません。 トレーディングエグゼクティブ 行が完了すると、ブロックチェーンに永久に保存され、再度変更や実行は不可能です。 トランザクションはシステム内のアカウントによって開始・署名され、暗号技術により取引は秘密鍵でのみ保持されます 2/16 誰かがそれを始め、他の人は改変や偽作はできません。 これにより取引の真正性と安全性が保証されます。 アカウント ブロックチェーンシステムには2種類の口座があり、1つは外部口座、もう1つは契約口座です。 外部アカウント所有 あなた自身のユニークな公開鍵と秘密鍵があり、アカウントはこの鍵ペアによって管理されます。 先物口座には独自のコードがあり、その口座は 独自のコード管理。 アカウントはアドレスで識別され、アドレスの長さも同じで、両タイプのアカウントに違いはありません。 外部口座の住所は以下の通りです。 公開鍵が生成され、契約アドレスは契約口座が作成されたアドレスと契約口座作成に関わった取引数を使用します (nonce)が生成されます。 契約は公式住所で展開され、通常のアカウントでは契約書を直接公開することはできません。 ユーザーの組み合わせ 荀雷が公式に審査し、公開しなければなりません。 システム内では、両タイプの口座に違いはありません。 各アカウントにはシステム内に256ビットの容量があります 256ビットまでのキー・バリュー保存構造は「ストレージ」と呼ばれます。 各口座には「残高」と呼ばれるものがあります ウェイの残高は、数値付きの取引を口座に送信することで変更できます。 契約 コントラクトはコードを保存するブロックチェーンアカウントであり、コントラクトの呼び出しはこのアカウントにトランザクションを送信することで行われます。 いつ それ以前のより人気のあった契約型プログラミング言語はSolidityでした。 現在、コンテストはSolidity言語での契約提出のみをサポートしています。 契約はデータ保存と機能の二つに分かれており、データは契約の状態を保存し、関数が契約そのものです 外部インターフェースは関数を呼び出すことでデータクエリや状態変更を実現します。 プログラミング言語で契約書を作成し、コンパイル後にEVMバイトコードを取得します。 契約口座に取引を送ることで、実数です 現在の契約コールです。 ガス ガスはブロックチェーンの支払い単位であり、取引が作成されると一定量のガスが指定されます。 ロード トランザクションの計算量を制限し、トランザクション実行のための手数料を支払うためです。 取引の実行中、ガス EVMが設定したルールによって消費されます。 ガス価格は取引作成者が指定した値と、取引を実行するために必要な手数料の量です その金額はGas_Price*ガスです。 取引終了:ガスが残っている場合は、残りの部分がクリエイターの提案に返却されます ユーザー。 ガスが不足するとトランザクション実行が失敗し、システムのセキュリティのためのフラッド攻撃を防ぐためにトランザクションが失敗します 手数料は返金されません。 ガソリン価格の最小単位はweiで、10^18 wei = 1チェーングラムです。 固体 3/16 Solidityはスマートコントラクト向けに設計された高水準プログラミング言語で、EVM(イーサリアム)上で動作しています。 仮想マシン)。 言語設計の実装はC++/Python/JavaScriptの影響を受けています。 Solidityは、継承、多型、インターフェース、抽象化、ライブラリ、カスタムデータ型などをサポートする強型言語です セックス。 Solidityはアセンブリ命令プログラミングをサポートしており、コードはバイトコードにコンパイルされEVM上で動作します。 固体は 最も人気のあるスマートコントラクト開発言語は、Thunder Contract Platformが推奨・サポートしている言語でもあります。 注記: 1. イーサリアム仮想マシンは、スマートコントラクトのためのランタイム環境を提供するイーサリアム上の仮想環境です シミュレーションマシン。 競技プラットフォームはEVMと互換性がありますが、公式プラットフォームの使用制限に従う必要があります。 2. 口座の種類は外部口座(通常の取引口座アドレス)と先物口座に分けられます。 契約を作成してください これは宛先アカウントアドレス0にトランザクションを送信するプロセスです。 3. コンペティションでは、トリュフ(トリュフ v4.1.5 ソリディティ v0.4.21)を用いて賢明な組み合わせを開発することが指定されています プラットフォームは参加者が提出した文書のソースコードに基づいてバイトコードを検証します。 , トリュフとの契約を結ぶ スマートコントラクトのソリディティ開発フレームワーク Truffle。 開発、デバッグ、編集の完全なセットを提供します オンプレミス環境の翻訳、展開、テスト。 テンプレートのいくつかを基に「アンボックス」コマンドを使えば、 対応する契約構造を生成します。 トリュフをインストール NPM I -G トリュフ [root@opennode三代]# トリュフ版 Truffle v4.1.5(コア:4.1.5) Solidity v0.4.21 (solc-js) 開始 1. トリュフで契約プロジェクトを初期化する 4/16 MKDIRシンプルストレージ CDシンプルストレージ トリュフ・イニット 2. 新しい契約ファイルを作成する:Truffleを使って契約を作成できます また、SimpleStorageのコマンドラインから直接新しいファイルを作成することも可能です contract/SimpleStorage.sol SimpleStorage.sol プラグマ・ソリディティ ^0.4.21; コントラクト SimpleStorage { uint myVariable; function set(uint x) public { myVariable = x;
} 関数 get() 定数の公開リターン (ユイント) { return myVariable;
}
} 3. 移行スクリプトの追加:TruffleのCreate migrationを使えます コマンドラインメソッド2_deploy_contract追加され、新しいファイルも直接作成できます 移動/2_deploy_contract.js 2_deploy_contract.js トリュフの移動の実行 行順はファイル名に関連しているため、複数のデプロイスクリプトを順番に名前付けする必要があります var SimpleStorage = artifacts.require("SimpleStorage"); module.exports = function(deployer) { deployer.deploy(SimpleStorage); 5/16 }; 4. truffleコンパイルコントラクトを実行し、コンパイルされたコントラクトはビルドフォルダにあります。 契約ごとに デプロイに必要なバイトコードやabiCodeなどを含む対応するjsonファイルがあります 5. truffle.jsを編集してTruffleデプロイメント契約とRPC接続を設定し、ブロックチェーンとやり取りします。 [root@localhost opennode]# vi truffle.js module.exports = {
networks: {
development: {
host: "127.0.0.1",
port: 8545, network_id:「*」
}
} }; 6. コンソール上でTruffleのデフォルトブロックチェーン環境をオンにする。 トリュフの発展 トリュフ開発は
http://127.0.0.1:9545/
Accounts: (0) 0x627306090abab3a6e1400e9345bc60c78a8bef57 (1) 0xf17f52151ebef6c7334fad080c5704d77216b732 (2) 0xc5fdf4076b8f3a5357c5e395ab970b5b54098fef (3) 0x821aea9a577a9b44299b9c15c88cf3087f3b5544 (4) 0x0d1d4e623d10f9fba5db95830f7d3839406c6af2 (5) 0x2932b7a2355d6fecc4b5c0b6bd44cc31df247a2e (6) 0x2191ef87e392377ec08e7c08eb105ef5448eced5 (7) 0x0f4f2ac550a1b4e2280d04c21cea7ebd822934b5 (8) 0x6330a553fc93768f612722bb8c2ec78ac90b3bbc (9) 0x5aeda56215b167893e80b4fe645ba6d5bab767de 6/16 秘密鍵: (0) c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e 4a9ec0a0f44dc0d3 (1) AE6AE8e5CCBFB04590405997ee2D52D2B330726137B87505 3c36d94e974d162f (2) 0dbbe8e4ae425a6d2687f1a7e3ba17bc98c673636790f1b8 AD91193C05875EF1 (3) c88b703fb08cbea894b6aeff5a544fb92e78a18e19814cd8 5da83b71f772AA6c (4) 388c684f0ba1ef5017716adb5d21a053ea8e90277d086833 7519f97bede61418 (5) 659cbb0e2411a44db63778987b1e22153c086a95eb6b18bd f89DE078917ABC63 (6) 82d052c865f5763aad42add438569276c00d3d88a2d062d3 6b2bae914d58b8c8 (7) AA3680D5d48A8283413F7A108367C7299CA73F553735860A 87b08f39395618b7 (8) 0f62d96d6675f32685bbdb8ac13cda7c23436f63efbb9d07 700d8669ff12b7c4 (9) 8d5366123CB560bb606379F90A0BFD4769eecc0557F1B362 DCAE9012B548B1E5
Mnemonic: candy maple cake sugar pudding cream ハニーリッチなめらかなクランブルの甘いお菓子 ⚠ 重要:⚠このニモニックは トリュフの君だ。 安全ではありません。 生産中に使わないように注意してください 7/16 ブロックチェーンを使わないと資金を失うリスクがあります。 トリュフ(現像)> これにより、Truffleはデフォルトで10のアカウントを生成し、それぞれが生成される契約を実行できるネイティブなブロックチェーン環境を提供します 初期の口座残高は100エーテルです。 また、Ganacheが提供するグラフィカルインターフェースも利用できます 設定が接続されているポートを変更する必要があります。 7. truffleの移行ポート展開契約を新しいコンソール(またはTruffle)で実行します Develop Console to Migrate を実行します。 8. トリュフで契約コードをテストします。 SimpleStorage.deployed().then(function(instance ){戻る instance.get.call(); }).then(function(value) {return value.toNumber()}) // 0 SimpleStorage.deployed().then(function(instance ){return instance.set(100); }); 出力トランザクション情報 SimpleStorage.deployed().then(function(instance ){戻る instance.get.call(); }).then(function(value) {return value.toNumber()}); // 100 9. Truffleを使って契約をテストし、新しいまたは 新しいファイルを作成してテスト/SimpleStorage.test.jsを直接作成してください。 const SimpleStorage = artifacts.require('SimpleStorage'); contract('SimpleStorage', function(accounts) { 8/16 it(「真を主張すべき」、function(done)
{ var simpleStorage = SimpleStorage.deployed(); varインスタンス; simpleStorage.then(res => { インスタンス = res; Return instance.get() }).then(value => { assert.equal('0', value.toNumber(), '0と等しくない」) }).then(() => { インスタンス.set(100) }).then(() => { Return instance.get() }).then(value => { assert.equal('100', value.toNumber(), 'not equal 100') }) done(); }); }); 新しいコンソールでは、truffle test ./test/SimpleStorage.test.js を入力してください。 10. リミックスでのテスト契約 トリュフをリミックスで開発したプット契約は素早く修正可能です 提案契約の展開および発動。 Remixはコンパイルランタイム環境を提供し、契約によって制御可能です このテーブルでは、契約の各トランザクションの詳細情報(入力および出力パラメータ、署名済みメソッドデータなど)を確認できます。 トランザクションハッシュやその他の情報。 デバッグのサポート。 1. コンパイル詳細を使って契約のコンパイル詳細を確認します。 バイトコードを含む、abi web3.jsドリップアー法の迅速な展開を用いています。 9/16 2. runを使って契約を作成し、コンソールが契約を作成したトランザクションを閲覧できます。 Truffle Unboxを使ってインタラクティブな契約アプリを作成します 上記のステップは、基本的なTruffle initを使ってコンパイル、デプロイ、デバッグ可能なコントラクト環境を作成します。 以下に Truffle Unboxで新しいプロジェクトを作成してください。そこにTruffleプロジェクトのテンプレートが入っています いくつかの契約アプリケーションインタラクション環境依存関係。 公式の商品はTruffle Boxesでチェックできます テンプレートボックス。 以下はreactテンプレートです。 1. 新しいプロジェクト truf-react MKDIR truf-react 10/16 CD truf-react トリュフのアンボックス リアクション アンボックスプロセスは抽出テンプレートをダウンロードし、npmインストールなどの操作を実行します。 2. プロジェクトのtruffle.jsを設定する module.exports = { 参照 <http://truffleframework.com/docs/advanced/confi グレイション> トリュフをカスタマイズするために 配置!
networks: {
development: {
host: '127.0.0.1',
port: '9545', network_id: '*' // マッチ 任意のネットワークID
}
} }; 3. トリュフの発酵を始める 4. SRC/App.jsの改正 import React, { Component } from 'react' インポート SimpleStorageContract から '.. /ビルド/契約/SimpleStorage.json import getWeb3 from './utils/getWeb3' インポート './css/oswald.css' インポート './css/open-sans.css' インポート './css/pure-min.css' 11/16 インポート './App.css' コンセントコントラクト = require('truffle-contract') const simpleStorage = contract(SimpleStorageContract) class App extends Component { コンストラクター(プロップス) { スーパー(小道具) this.state = {
storageValue: 0,
web3: null,
inputValue: 0,
address: null
} this.changeValueHandle = this.changeValueHandle.bind(this) this.setHandle = this.setHandle.bind(this)
} componentWillMount() { ネットワークプロバイダーとWeb3を入手しましょう インスタンス。 詳細はutils/getWeb3をご覧ください 情報。 getWeb3 .then(results => { this.setState({
web3: results.web3 }) 契約を具体化する かつてWeb3が提供しました。 12/16 this.instantiateContract() }) .catch(() => { console.log('エラー ウェブ3を見つけること。』) })
} instantiateContract() {
/* * スマートコントラクトの例
* * 通常、これらの関数は は の文脈で呼ばれます。 * 州管理図書館、しかし 便宜上、ここに置いた。 */ this.simpleStorageSet(5)
} changeValueHandle(event) { this.setState({
inputValue: Number(event.target.value) })
} setHandle() { this.simpleStorageSet(this.state.inputValue)
} simpleStorageSet(x) { simpleStorage.setProvider(this.state.web3.curren tProvider) これは後で宣言します。 13/16 SimpleStorage上で関数を連鎖できます。 var simpleStorageInstance アカウントを作ろう。 this.state.web3.eth.getAccounts((error, アカウント) => { simpleStorage.deployed().then((instance) => { simpleStorageInstance = インスタンス this.setState({
address: instance.address }) ストア 与えられた値は、デフォルトで5です。 帰還 simpleStorageInstance.set(x, {from: 会計[0]}) }).then(((result) => { 価値を得よう 契約書からそれが機能していることを証明するために。 帰還 simpleStorageInstance.get.call(accounts[0]) }).then(((result) => { 更新状態 その結果。 帰還 this.setState({ storageValue: result.c[0] }) }) })
} render() { 戻り( <div className="App"> <ナビ className="navbar pure-menu pure-menuhorizontal"> 14/16 <a href="#" className="pure-menu-heading puremenu-link">Truffle ボックス</a> </nav> <メイン className="container"> <div className="pure-g"> <div className="pure-u-1-1"> <h1>準備完了!</h1> <p>トリュフボックスは設置済みで準備完了です。</p> <h2>スマートコントラクトの例</h2> <p>もし契約がコンパイルされ移行された場合 成功すると、以下に保存された値を示します。 5(デフォルト)。</p> <p>オンラインに保存された値を変更してみてください<strong> App.jsの59</strong>。</p> <p>保存値は以下の通りです: {this.state.storageValue}</p> <p>展開契約アドレス: {this.state.address}</p> </div> <div> <input type="number" onChange= {this.changeValueHandle}/> <button onClick={this.setHandle}>set</button> 15/16 </div> </div> </main> </div> );
}
} デフォルトのアプリをエクスポートします コントラクト集合の呼び出しメソッドを追加しました。 そして契約書の住所も見せてください。 5. 新しいコンソールを開き、npmを実行します 6. ブラウザの http://lcoalhost:3000 を開き、契約の結果を見る。 7. セットボックスと入力ボックスを通じて保存された契約データの値を設定します。 8. Enter in trufle development(発展に入る)
//将xxx替换为address SimpleStorage.at('xxxx').then(res => {return res.get()}) BigNUmber型の返り値が得られ、c配列の値が設定されます storedData。 ブラウザプラグインのMetamaskを使ってブロックチェーンとやり取りしましょう 参考文献 http://truffleframework.com/tutorials/pet-shop 参加者は書類を提出します このコンペティションでは、Truffleをスマートコントラクト開発に使用することを明記しており、Truffleバージョンv4.1.5はsolcjs版に対応しています v0.4.21。 開発者はTruffleプロジェクトのzipパッケージおよび関連するプロジェクト紹介文書を提出する必要があります。これには、少なくとも 以下は以下の通りです: 16/16 1. Truffle Project Basic ファイル構造:契約の構築移行テスト package.json truffle.js truffle-config.js README.md // エンジニアリング文書の説明 node_modulesは不要 2. プロジェクト全体の説明(製品背景紹介、製品の重要性を含む)をPPTまたはPDFで提供する必要がある。 アプリダウンロードアドレス(任意)、製品使用プロセスの紹介。 今後のサードパーティ開発者は、今後公開されるThunderChainガイダンス文書に基づき、契約アプリケーションやChain Pocketを実装することができます 交流。 ドキュメントとツール ソリディティAPI トリュフの記録 Ganacheはネイティブのブロックチェーン環境向けにグラフィカルインターフェースを提供します Zeppelin-Solidtyは、安全で標準化された契約枠組みにコミットしています MetaMaskは、RPC接続を通じてブロックチェーン環境を持つブラウザ向けのブラウザプラグインを提供します web3.js ブロックチェーンと相互作用するためのEthereumカプセル化されたJS 最後に、PDFドキュメントのダウンロードです:
Dev_Guide_zh.pdf
(373.55 KB, ダウンロード数: 6)
|