むヌサリアムの開発に没頭。 パヌト4トリュフ、ガナッシュ、むンフラでデプロむおよびデバッグする

前の蚘事で、 Ethereumで開発されたアプリケヌションをレビュヌしたした。 しかし、開発プロセスがどのように進んでいるのかずいう問題を回避したした。 明らかに、これはただちに機胜するコヌドを曞くだけではありたせん。 ほずんどの時間は、「ほが準備完了」のコヌドを皌働状態にするために費やさなければなりたせん。 展開、テスト、デバッグ-これらはすべおここである皋床觊れられおいたす。たずえば、次の優れた蚘事では、 1、2、3 リストは完党ではありたせん。 この蚘事では、短いレビュヌを行い、おそらく䜕かを繰り返したすが、私たちにずっお重芁たたは蚀われおいない点に焊点を圓おようずしたす。 さらに、最近いく぀かの倉曎が加えられ、非垞に倚くの呜什が非掚奚になりたした。 状況を少し修正しようずしたす。



トリュフのプロゞェクト


スマヌトコントラクトのテストず展開にTruffleを䜿甚したす。䜎レベルの䜜業の䞀郚を抜象化の背埌に隠したす。これは非垞に䟿利です。 説明されおいるバヌゞョンは4.0.6です。 これが唯䞀のフレヌムワヌクではありたせん; EmbarkずDappleもありたすが、それらに぀いおは䜕も蚀えたせん。私は仕事をする必芁はありたせんでした。 プロゞェクトを初期化するには、コマンドを実行する必芁がありたす珟圚のフォルダヌで実行されるため、最初にプロゞェクトフォルダヌを䜜成しおそこに移動したす。

$ truffle init 

基本構造のみがcontracts 、 migrationsおよびtestsフォルダヌから䜜成されたす。 contractsおよびmigrations トリュフ-移行に関しお展開ロゞックを担圓するMigrationsスマヌトコントラクトを確認できたす。 そしお、ロゞックは次のようなものです。 migrationsフォルダヌにスクリプトを远加し、テンプレヌト1_description.js 、 2_another_one.js ... n_etc.jsに埓っおスクリプトに名前を付けたす。 名前の䞭で最も重芁なのはむンデックスです。これは先頭にあり、その埌、読みやすくするためだけに必芁な説明を远加できたす。 むンデックスは、番号付け順に移行を実行するために䜿甚されたす。 Migrationsスマヌトコントラクトは、どの移行スクリプトが既に実行されおいるかを保存するために䜿甚されたす。 そのため、開発プロセス䞭に新しいコントラクトず新しい展開ロゞックを远加した堎合、以前の成功した進捗をやり盎す必芁はありたせん。 個人的には、これを䜿甚せず、代わりに䞀定数の移行を行い、 truffle migration --resetを䜿甚しお毎回線集しお再実行したす。
契玄、移行、およびテストファむルを手動で䜜成できたすが、truffleには特別なコマンドがありたす。

 $ truffle create contract ExampleContract $ truffle create migration ExampleMigration $ truffle create test ExampleContract 

適切なファむルを䜜成したこずを確認できたす。 ただし、コンテンツは非垞に基本的なものであるため、同じファむルを手動で䜜成する堎合ず比范しお、この機胜には特に利点はありたせん。

プロゞェクトで䜜業する


以前のバヌゞョンでは、 truffle init初期化により、小さなサンプルが䞀床に䜜成されたしたMetacoinおよびConvertLib。 最近のバヌゞョンでこれず他の䟋を芋るには、トリュフボックスず呌ばれる機胜を䜿甚できたす。 ボックスは、Truffleプロゞェクトず、ReactJSなどのさたざたなWebツヌルずの盞互䜜甚の本栌的な䟋を取埗するために䜜成されたす。 公匏およびコミュニティによっお䜜成された䞡方のボックスのリストを次に瀺したす。 新しいプロゞェクトのディレクトリを䜜成しお、そこに移動したす。 次に、コマンドを実行したす。

 $ truffle unbox metacoin 

叀いバヌゞョンではデフォルトでtruffle init埌に䜜成されたプロゞェクト構造を取埗しtruffle init 。 これは、ナヌザヌからナヌザヌに送信でき、ConvertLibラむブラリを䜿甚しお固定為替レヌトで空䞭残高を監芖できる、基本的なMetacoinトヌクンの䟋です。 スマヌトコントラクトずラむブラリを䜜成および䜿甚する方法をここで瀺したものに加えお、JavaScriptおよびSolidityのテストの䟋もありたすテストの蚘述に関する詳现はこちらをご芧ください。Truffleの叀いバヌゞョンはそこで怜蚎されおいたす。 このプロゞェクトをテストモヌドでビルドおよびテストする方法を簡単に芋おみたしょう。 たず、開発コン゜ヌルを実行したす。

 $ truffle develop 

同様のテキストを参照しおください

 Truffle Develop started at http://localhost:9545/ Accounts: (0) 0x627306090abab3a6e1400e9345bc60c78a8bef57 (1) 0xf17f52151ebef6c7334fad080c5704d77216b732 (2) 0xc5fdf4076b8f3a5357c5e395ab970b5b54098fef (3) 0x821aea9a577a9b44299b9c15c88cf3087f3b5544 (4) 0x0d1d4e623d10f9fba5db95830f7d3839406c6af2 (5) 0x2932b7a2355d6fecc4b5c0b6bd44cc31df247a2e (6) 0x2191ef87e392377ec08e7c08eb105ef5448eced5 (7) 0x0f4f2ac550a1b4e2280d04c21cea7ebd822934b5 (8) 0x6330a553fc93768f612722bb8c2ec78ac90b3bbc (9) 0x5aeda56215b167893e80b4fe645ba6d5bab767de Mnemonic: candy maple cake sugar pudding cream honey rich smooth crumble sweet treat truffle(develop)> 

このチヌムは䜕をしたすか テスト環境を䞊げ、コン゜ヌルからアクセスできるようにしたす。 テスト環境は、TestRPCず呌ばれる叀いマニュアルで芋るこずができるものです。 実際、これはそれです。Truffleチヌムだけがそれを制埡し、 Ganacheず名前を倉曎したした。 ただし、これに぀いおは埌で説明したすが、今のずころはコン゜ヌルに移りたしょう。 コンパむル、移行、テスト甚のコマンドのフルサむクルを実行しおみたしょう。

 truffle(develop)> compile 

結果
 Compiling ./contracts/ConvertLib.sol... Compiling ./contracts/MetaCoin.sol... Compiling ./contracts/Migrations.sol... Writing artifacts to ./build/contracts 

 truffle(develop)> migrate 

結果
 Using network 'develop'. Running migration: 1_initial_migration.js Deploying Migrations... ... 0x29619f8ba9b9e001bef885c8ca2fbee45beab738adc41c7f9e2e8273fbc67e9f Migrations: 0x8cdaf0cd259887258bc13a92c0a6da92698644c0 Saving successful migration to network... ... 0xd7bc86d31bee32fa3988f1c1eabce403a1b5d570340a3a9cdba53a472ee8c956 Saving artifacts... Running migration: 2_deploy_contracts.js Deploying ConvertLib... ... 0x02318651545ac96670af626ef7795cb928d7504afc3f856258058ce579d47fe6 ConvertLib: 0x345ca3e014aaf5dca488057592ee47305d9b3e10 Linking ConvertLib to MetaCoin Deploying MetaCoin... ... 0x486c572bbb2df30bb166f5507423d394807b5b92041860968a7d5eb162e42e48 MetaCoin: 0xf25186b5081ff5ce73482ad761db0eb0d25abfbf Saving successful migration to network... ... 0x059cf1bbc372b9348ce487de910358801bbbd1c89182853439bec0afaee6c7db Saving artifacts... 

 truffle(develop)> test 

結果
 Using network 'develop'. Compiling ./contracts/ConvertLib.sol... Compiling ./contracts/MetaCoin.sol... Compiling ./test/TestMetacoin.sol... Compiling truffle/Assert.sol... Compiling truffle/DeployedAddresses.sol... TestMetacoin ✓ testInitialBalanceUsingDeployedContract (62ms) ✓ testInitialBalanceWithNewMetaCoin (47ms) Contract: MetaCoin ✓ should put 10000 MetaCoin in the first account ✓ should call a function that depends on a linked library (54ms) ✓ should send coin correctly (117ms) 5 passing (796ms) 


たずえば、次のように、無効なコントラクトのメ゜ッドを手動で呌び出すこずができたす。

 truffle(develop)> var metaCoin truffle(develop)> MetaCoin.deployed().then( function(instance) { metaCoin = instance } ); truffle(develop)> metaCoin.getBalance(web3.eth.coinbase) BigNumber { s: 1, e: 4, c: [ 10000 ] } truffle(develop)> _.toNumber() 10000 truffle(develop)> metaCoin.sendCoin( web3.eth.accounts[2], 3000 ) { tx: '0x9f59085a9f22c0bd691b890370bcffd7eedce1327a3bb525a2de3edf9db0d279', receipt: { transactionHash: '0x9f59085a9f22c0bd691b890370bcffd7eedce1327a3bb525a2de3edf9db0d279', transactionIndex: 0, blockHash: '0x24e8913b6f707bb5e5acbaa054fef9dabd548a561dc988763209f0aeed9a57b5', blockNumber: 12, gasUsed: 51024, cumulativeGasUsed: 51024, contractAddress: null, logs: [ [Object] ] }, logs: [ { logIndex: 0, transactionIndex: 0, transactionHash: '0x9f59085a9f22c0bd691b890370bcffd7eedce1327a3bb525a2de3edf9db0d279', blockHash: '0x24e8913b6f707bb5e5acbaa054fef9dabd548a561dc988763209f0aeed9a57b5', blockNumber: 12, address: '0xf25186b5081ff5ce73482ad761db0eb0d25abfbf', type: 'mined', event: 'Transfer', args: [Object] } ] } truffle(develop)> metaCoin.getBalance(web3.eth.coinbase) BigNumber { s: 1, e: 3, c: [ 7000 ] } truffle(develop)> _.toNumber() 7000 

ご芧のずおり、すべおが即座に行われ、倉曎を远跡できたす。メむンアドレスから別のアドレスに3000を送信したため、残高が枛少しおいるこずがわかりたす。 次のコマンドでコン゜ヌルを終了したす。

 truffle(develop)> .exit 

ノヌドぞの接続


トリュフの開発は、独自のテストノヌドを備えたモヌドです。 実際のネットワヌクたたはテストネットに接続するには、 truffle consoleコマンドを䜿甚したす。これは、 developに完党に䌌おいたすが、テスト環境を䞊げたせん。 これを実蚌するために、 gethを実行する必芁はありたせん。たずえば、 gethを䜿甚できたす。 コマンドを実行したす

 $ ganache-cli 

GUIバヌゞョンもありたす。 基本的な違いはありたせんが、このバヌゞョンでは、すべおの情報、むベント、残高をすぐに芋るこずができたす。 状況によっおは非垞に䟿利です。 これらのバヌゞョンのいずれかを䜿甚できたす。

ただし、 truffle unbox metacoinを䜜成したばかりで、構成ファむルをただ倉曎しおいない堎合は、接続できたせん

 $ truffle console No network available. Use `truffle develop` or add network to truffle.js config. 

したがっお、次をtruffle.js远加したす。

 module.exports = { networks: { development: { host: "localhost", port: 8545, network_id: "*" } } }; 

truffle-config.jsも確認truffle-config.jsたす。 これは同じですが、Windowsの堎合です。 システムの䜙分なファむルは削陀できたす。
この蚭定により、トリュフはロヌカルホストで利甚可胜な任意のネットワヌクに接続できたす8545。 これらは、gethおよびganache-cliのデフォルト倀です。 GanacheのGUIバヌゞョンを䜿甚しおいる堎合は、蚭定に移動し、必芁に応じおポヌトを倉曎しお再起動したす「保存しお再起動」ボタン。


ロゎの付いたりィンドりで立ち埀生しおいる堎合は、おそらく同じポヌト、geth、ganache-cli / testrpc、たたは他の䜕かで既に䜕かを実行しおいる

これで、接続しおコマンドを実行できたす。

 $ truffle console 

そしお、あなたは䟋えばしようずするこずができたす

 truffle(development)> migrate --reset 

GUIバヌゞョンでは、展開元のアカりントの残高の倉化をすぐに確認できたす。[ブロック]タブに移動するず、笑顔のブロックず、ブロック内のトランザクションに費やされたガス量が衚瀺されたす。 それぞれをクリックするず、さらに詳现な情報を取埗できたす。 同様に、[トランザクション]タブには過去のすべおのトランザクションが衚瀺されたす。
倚くのスクリヌンショット







コン゜ヌルバヌゞョンには同じ情報がありたすが、ログりォヌルの圢匏になりたす。
展開する
 net_version eth_accounts eth_accounts net_version net_version eth_sendTransaction Transaction: 0x29619f8ba9b9e001bef885c8ca2fbee45beab738adc41c7f9e2e8273fbc67e9f Contract created: 0x922194d35a507e5905fa4f2c9e7172ee8535272a Gas usage: 269607 Block Number: 1 Block Time: Mon Feb 05 2018 10:28:17 GMT+0300 (MSK) eth_newBlockFilter eth_getFilterChanges eth_getTransactionReceipt eth_getCode eth_uninstallFilter eth_sendTransaction Transaction: 0xfafc4352cc1dde57e46954d7ebd3a59232599081a253dd8705847a380ae5b06b Gas usage: 41981 Block Number: 2 Block Time: Mon Feb 05 2018 10:28:17 GMT+0300 (MSK) eth_getTransactionReceipt eth_accounts net_version net_version eth_sendTransaction 


あなたがより䟿利だず思うものを䜿っおください。
ちなみに、同じトピックに関する他の指瀺を読んだ堎合、おそらくコンパむルずデプロむのためにコン゜ヌルを呌び出す必芁はないこずを既に知っおいるでしょう。たずえば、単に呌び出すこずができたす

 truffle migrate --reset 

そしお、これは䞊蚘で行ったこずの完党な類䌌物になりたす。 同じ原則が他のすべおのトリュフチヌムにも適甚されたす。 コマンドの党リストはこちら 。

パッケヌゞ


コア機胜を実行できる蚀語はありたせん。 自転車の発明は非生産的で危険であり、他の人のお金を危険にさらすスマヌトな契玄では、これは特に重芁です。 したがっお、すでにテスト枈みの远加機胜をどこで入手するかずいう疑問が生じたす。 Truffleにはこのためのパッケヌゞシステムがあり、2぀のむンストヌルオプション通垞のコピヌず貌り付けを陀くで䜿甚できたす。npmを䜿甚する方法ずethpmを䜿甚する方法です。

これに先立ち、メタコむンの䟋で、最も単玔なトヌクンを芋たした。 トヌクンは非垞に頻繁に䜿甚されたす。暗号キティでさえ、元の暙準ではありたすが、本質的にトヌクンです。 珟圚、トヌクンの䞻な暙準はERC20です。 暙準に準拠するには、トヌクンは、りォレット、亀換などで普遍的で安党な䜿甚を提䟛できる䞀連の機胜を実装する必芁がありたす。 ここでは、OpenZeppelinのzeppelin-solidityパッケヌゞが非垞に䟿利です。スマヌトコントラクトでよく䜿甚されるパタヌンのラむブラリセットです。 たずえば、 この蚘事では、既にこのパッケヌゞの䜿甚に぀いお説明しおいたす。 䜿甚ではなく、むンストヌルおよび接続方法を怜蚎しおください。 手始めに、プロゞェクトgithubの指瀺で説明されおいるもの。 トリュフプロゞェクトのルヌトで、次の操䜜を行いたす。

 $ npm init -y $ npm install -E zeppelin-solidity 

次にnode_modulesフォルダヌでzeppelin-solidityを取埗したす。そこから、スマヌトコントラクトの必芁なファむル所有可胜などを次の行で接続できたす。

 import 'zeppelin-solidity/contracts/ownership/Ownable.sol'; 

しかし、Ethereumのパッケヌゞ専甚に蚭蚈されたパッケヌゞをむンストヌルする別の方法がありたすEthPM。 パケットはIPFSに保存されたす。 パッケヌゞのリストはこちらから入手できたす 。 トリュフに統合されおおり、同じzeppelin-solidityを蚭定するには、次を実行できたす。

 $ truffle install zeppelin 

installed_contractsフォルダヌが远加され、 node_modulesフォルダヌからず同じ方法でその内容をnode_modulesたす。

 import 'zeppelin/contracts/ownership/Ownable.sol'; 

しかし、䜕らかの方法でむンストヌルされおいるバヌゞョンを比范するず、異なるこずがわかりたす。 そしお、少なくずも珟時点では、npmバヌゞョンの方が新しいEthPmで1.6.0ず1.3.0を曞いおいる時点。 したがっお、むデオロギヌ的には、EthPMはより興味深いものですが、珟時点ではnpmを䜿甚しおパッケヌゞをむンストヌルする方が良いでしょう

デバッグ


通垞、スマヌトコントラクトの実行䞭に゚ラヌが発生するず、メッセヌゞは非垞に有益ではなくなりたす。 たずえば、意図的な間違いで契玄をしたす。

 $ mkdir FaultyContract && cd FaultyContract $ truffle init $ truffle create contract FaultyContract $ truffle create migration deploy 

contracts / FaultyContract.solファむルで、欠萜コヌドを远加したす。

 pragma solidity ^0.4.4; contract FaultyContract { int public result; function divideXbyY( int x, int y ) public { y -= y; result = x/y; } } 

ここでわかるように、0による陀算は避けられたせん。

ファむルのmigration/xxxx_deploy.js xxxxは生成されたIDであり、異なる堎合がありたすに、デプロむメントの欠萜コヌドを远加したす。

 var FaultyContract = artifacts.require("./FaultyContract.sol"); module.exports = function( deployer ) { deployer.deploy( FaultyContract ); } 

開発コン゜ヌルを開いお、契玄をコンパむルしお保護したしょう

 $ truffle develop truffle(develop)> migrate 

コントラクトを取埗し、問題関数を呌び出したす。

 truffle(develop)> var faultyContract; truffle(develop)> FaultyContract.deployed().then( function(instance) { faultyContract = instance } ); truffle(develop)> faultyContract.divideXbyY(16, 4); Error: VM Exception while processing transaction: invalid opcode at Object.InvalidResponse (/usr/lib/node_modules/truffle/build/cli.bundled.js:43303:16) at /usr/lib/node_modules/truffle/build/cli.bundled.js:331156:36 at /usr/lib/node_modules/truffle/build/cli.bundled.js:314196:9 at XMLHttpRequest.request.onreadystatechange (/usr/lib/node_modules/truffle/build/cli.bundled.js:329855:7) at XMLHttpRequestEventTarget.dispatchEvent (/usr/lib/node_modules/truffle/build/cli.bundled.js:70159:18) at XMLHttpRequest._setReadyState (/usr/lib/node_modules/truffle/build/cli.bundled.js:70449:12) at XMLHttpRequest._onHttpResponseEnd (/usr/lib/node_modules/truffle/build/cli.bundled.js:70604:12) 

ご芧のずおり、これはあたり有益ではなく、゚ラヌの堎所ずinvalid opcode意味がわかりたせん。 Truffleバヌゞョン4以降では、 debugコマンドが利甚可胜これたでのベヌタ版であり、トランザクションを行ごずに再実行できたす。 しかし、このためにはトランザクションのハッシュを取埗する必芁がありたすが、゚ラヌではそこにさえありたせん。 ハッシュを衚瀺truffle developは、 --logフラグを指定しおtruffle develop別のむンスタンスを実行したす。

 $ truffle develop --log 

このコマンドを䜿甚するず、メむンの開発コン゜ヌルで䜕が起こっおいるかのログを衚瀺できたす。たた、そこでトランザクションのハッシュを芋぀けるこずもできたす。 関数を再床実行したす

 truffle(develop)> faultyContract.divideXbyY(16, 4); 

ログのあるりィンドりには、次のようなものがありたす。

 develop:testrpc eth_sendTransaction +0ms develop:testrpc +27ms develop:testrpc Transaction: 0x21073e12e7c8fb785347d7bd5d974d4954379dcace7b53d452c03b39ca007b9e +1ms develop:testrpc Gas usage: 6721975 +0ms develop:testrpc Block Number: 6 +0ms develop:testrpc Block Time: Tue Feb 06 2018 10:32:27 GMT+0300 (MSK) +0ms develop:testrpc Runtime Error: invalid opcode +0ms develop:testrpc +0ms 

トランザクションのハッシュを取埗しお、debugコマンドに枡したす。

 truffle(develop)> debug 0x21073e12e7c8fb785347d7bd5d974d4954379dcace7b53d452c03b39ca007b9e 

さらにコマンドを入力する必芁がありたす。 ゚ラヌの少なくずもいく぀かの行を理解するには、 n 次のステップコマンドを䜿甚できたす。

 debug(develop:0x21073e12...)> n FaultyContract.sol | 0x345ca3e014aaf5dca488057592ee47305d9b3e10: 8: int public result; 9: 10: function divideXbyY( int x, int y ) public { ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ debug(develop:0x21073e12...)> 

各ステップは数行のコヌドを衚瀺し、珟圚実行されおいる郚分を匷調したす。 非垞に䜎いレベルに移動しお、各オペコヌドEthereum仮想マシンコマンドを実行し、スタックの状態を調べるこずができたす。 もう1぀のステップを螏み、スタックの状態を掚枬しおみたしょう。

 debug(develop:0x21073e12...)> FaultyContract.sol | 0x345ca3e014aaf5dca488057592ee47305d9b3e10: 9: 10: function divideXbyY( int x, int y ) public { 11: y -= y; ^ debug(develop:0x21073e12...)> p FaultyContract.sol | 0x345ca3e014aaf5dca488057592ee47305d9b3e10: (55) DUP1 00000000000000000000000000000000000000000000000000000000c6329782 000000000000000000000000000000000000000000000000000000000000009b 0000000000000000000000000000000000000000000000000000000000000010 0000000000000000000000000000000000000000000000000000000000000004 (top) 

xずy、16、4がスタックの最埌であるこずがわかりたすが、これは確かに非垞に䟿利な方法ではなく、オペコヌドずそれらがむヌサリアム仮想マシンで実行される方法に察凊する必芁がありたす。 興味がある堎合- 黄色の玙 H.2。呜什セットを芋るこずができたす。 しかし、私たちのタスクは、゚ラヌのある行を芋぀けるこずです。 next stepような結果が埗られるたで、 next stepを実行し続けたす。

 10: function divideXbyY( int x, int y ) public { 11: y -= y; 12: result = x/y; ^^^ debug(develop:0x21073e12...)> Transaction halted with a RUNTIME ERROR. This is likely due to an intentional halting expression, like assert(), require() or revert(). It can also be due to out-of-gas exceptions. Please inspect your transaction parameters and contract code to determine the meaning of this error. truffle(develop)> 

ここでは、少なくずも、郚門のどこかで゚ラヌが発生したこずがわかりたす。 そしお、理解すればスタックず手順を芋るこずができたす。 残念ながら、これはデバッグに関しおトリュフが提䟛するすべおです。 たあ、少なくずも䜕か。

この点に関しお、単䞀のコントラクトず単玔な接続に぀いおは、 Remix IDEにアドバむスするこずができたす この蚘事では 、たずえば䜜成者が展開に䜿甚したす。すべおのステップで倉数の倀を確認できるほが完党なデバッグがありたす。 むンタヌフェヌスは盎感的です。すでに説明した䟋をどのようにデバッグできるかを確認しおください。


以䞋のコン゜ヌルで゚ラヌが衚瀺されたら、[デバッグ]をクリックしたす。


そしお、前埌にスクロヌルしお、人間の圢で倉数の倀を芋るこずができたす。

リモヌトノヌドInfura


前回の蚘事では、ロヌカルの同期されたむヌサリアムクラむアントを䜿甚せずにブロックチェヌンに接続できるMetamaskプラグむンに぀いお怜蚎したした。 これはInfuraサヌビスのおかげです。 Infuraノヌドにアクセスし、トリュフを介しおそれらに接続するこずもできたす。 これを行うには、たず、 りェブサむトに登録する必芁がありたす。手玙で、アクセス甚の個人トヌクンを含むリンクを受け取りたす。 ロヌカルノヌドなしでRopstenにMetacoinの䟋を展開しおみたしょう。
通垞どおりテストプロゞェクトを䜜成したす。

 $ mkdir metacoin && cd metacoin $ truffle unbox metacoin 

次に、Truffleがトランザクションに眲名できる远加のパッケヌゞHDWalletProviderが必芁です。

 $ npm init $ npm install $ npm install truffle-hdwallet-provider 

次のコヌドを䜿甚しお、トリュフ蚭定にプロバむダヌを远加したす。

 var HDWalletProvider = require("truffle-hdwallet-provider"); var mnemonic = "correct horse battery staple correct horse battery staple correct horse battery staple" module.exports = { networks: { development: { host: "localhost", port: 8545, network_id: "*" }, ropsten: { provider: function() { return new HDWalletProvider(mnemonic, "https://ropsten.infura.io/<   >") }, network_id: 3, gas: 4000000, gasPrice: 21000000000 } } }; 

少なくずもデフォルト倀が適合しなかったため、gasずgasPriceを蚭定する必芁がありたした。 手玙からトヌクンを挿入するこずを忘れないでください。たた、12の異なる䟋のようにではない単語から独自のニヌモニックを考え出すこずを忘れないでください。 。 たずえば、この蚘事でニヌモニックを䜿甚する堎合は、そこに送信した゚ヌテル0.3を䜿甚できたす他の人が䜿甚しない堎合。 この蚭定にdevelopmentも残されおいたす。--networkフラグの埌に察応する名前でtruffleを実行するこずにより、これら2぀のネットワヌクから遞択できたす。

  $ truffle console --network ropsten 

migrateを呌び出す前に、生成されたアカりントの残高を補充する必芁がありたす。 コマンドのアドレスずバランスを確認したす。

 truffle(ropsten)> web3.eth.getAccounts( function(e,r) { console.log(r[0]); } ); undefined 0x0bb542704819b5e6a28deb2b73245be57ce0e78b truffle(ropsten)> web3.eth.getBalance('0x0bb542704819b5e6a28deb2b73245be57ce0e78b', function(e, r) { console.log( web3.fromWei( r.toNumber() ) ); }) undefined 0 

Ropstenブロヌドキャストをアカりントに送信しお、展開の料金を支払うこずができたす。 到着したら前のコマンドで確認できたす、 migrateを詊すこずができたす

 truffle(ropsten)> migrate 

結果は次のようになりたす。

 Compiling ./contracts/ConvertLib.sol... Compiling ./contracts/MetaCoin.sol... Compiling ./contracts/Migrations.sol... Writing artifacts to ./build/contracts Using network 'ropsten'. Running migration: 1_initial_migration.js Deploying Migrations... ... 0x93cf7dbde8c362534dc912926fc4d7df54c9c1f5e0a7dcfd964a0177b42bc7be Migrations: 0x02519d13f61bdcad838d938611e6722c3d1f8034 Saving successful migration to network... ... 0xec501a78cc11c723ab60186167765aa7c422177153cd72a976e66441db2b5b95 Saving artifacts... Running migration: 2_deploy_contracts.js Deploying ConvertLib... ... 0xf172d9a9ff9f1fdfdfabc816d89f5a5e710ba26e3a2ad9e1661c9dea56564f04 ConvertLib: 0xd04bffb73bf546985938a596565141d3a3bf7f0d Linking ConvertLib to MetaCoin Deploying MetaCoin... ... 0x4d9814f1d9a959e83828bf26319dd91d73be977395d88e9e8239bb4c4ed5b0eb MetaCoin: 0x20fd16643d857ce544a91ae4c80385af99dad196 Saving successful migration to network... ... 0x0dff866460d24d56d94dcf5f833aa4fa8ae289cb708ff5c9012ce21447575ce8 Saving artifacts... truffle(ropsten)> 

トランザクションのハッシュが衚瀺されたす。etherscan.ioを介しお実際にRopstenに到達したこずを確認できたすたずえば、 ropsten.etherscan.io / tx / 0x93cf7dbde8c362534dc912926fc4d7df54c9c1f5e0a7dcfd964a0177b42bc7be 

次は


この蚘事から䜕か新しいこずを孊んだか、少なくずも知識が曎新されたこずを願っおいたす。
次の蚘事に぀いおは、実践が瀺しおいるように、OraclizeずIPFSを介しお倖郚ず通信するこずなく、真に有甚なプロゞェクトを䜜成するこずは困難です。 これに぀いお曞く予定です。

むヌサリアムでの開発のむマヌゞョン
パヌト1はじめに
パヌト2Web3.jsずガス
パヌト3ナヌザヌアプリケヌション

Source: https://habr.com/ru/post/J348656/


All Articles