Ethereum 上で DApps を開発したことがある場合は、フロントエンド JavaScript で web3.js を使用したことがあるかもしれません。 Ethers.js は web3.js の軽量な代替品です。 Ethers.js には Web3.js に比べて多くの利点がありますが、私が気に入っている機能の 1 つは、Ethers.js が提供する状態とキーの管理です。 Web3 の設計シナリオでは、DApp はローカル ノードに接続し、キーの保存、トランザクションの署名、Ethereum ブロックチェーンとのやり取りを行う必要があります。現実にはそうではなく、大多数のユーザーはローカルで geth ノードを実行することはありません。 Metamask はブラウザ アプリケーションでこのノード環境を効果的にシミュレートするため、ほとんどの Web3 アプリケーションでは、キーを保存し、トランザクションに署名し、Ethereum とのやり取りを完了するために Metamask を使用する必要があります。 Ethers.js は異なる設計アプローチを採用しており、開発者にさらなる柔軟性を提供します。 Ethers.js は「ノード」を 2 つの異なる役割に分割します。
ethers.js は非常に合理化された Ethereum 操作ライブラリで、次の 4 つのモジュールが含まれています。 1. 新しいプロジェクトsendtokenoneを作成する
2. package.jsonを変更し、依存パッケージをインストールするa) 変更された package.json ファイルは次のとおりです。 { "名前": "sendtokenone", "バージョン": "1.0.0", "説明": "ethers.js デプロイメント コントラクト", "主要": ""、 「スクリプト」: { "test": "echo \"エラー: テストが指定されていません\" && exit 1" }, 「キーワード」: [], "著者": ""、 「ライセンス」: 「ISC」、 「依存関係」: { "@openzeppelin/契約": "^3.4", "@truffle/hdwallet-provider": "^1.5.0", "ビッグナンバー": "^1.1.0", "bignumber.js": "^8.1.1", "チャイ": "^4.2.0", "約束通りのチャイ": "^7.1.1", "eslint": "^5.15.0", "イーサリアムjs-tx": "^1.3.7", "エーテル": "^5.4.7", "リクエスト": "^2.88.2", "web3": "^1.3.0" }, 「devDependencies」: { "@babel/core": "^7.12.3", "@babel/プリセット環境": "^7.12.1" } } b) 依存パッケージをインストールする
3. 新しいスマートコントラクトを作成する3.1 EventValue.solコントラクトを作成するsendtokenone/contacts ディレクトリで、次の内容の EventValue.sol 契約を作成します。 // SPDX ライセンス識別子: MIT プラグマ solidity ^0.6.0; 契約イベント値 { イベント ValueChanged(アドレス インデックス付き作成者、uint oldValue、uint newValue); uint _値; コンストラクタ(uint 値) public { uint tmp = _値; _value = 値; ValueChanged(msg.sender, tmp, value) を送信します。 } 関数 getValue() ビュー public 戻り値 (uint) { _value を返します。 } 関数setValue(uint value) パブリック { uint tmp = _値; _value = 値; ValueChanged(msg.sender, tmp, value) を送信します。 } } 3.2 デプロイメントスクリプトの作成migDeployという名前の新しいフォルダを作成し、このフォルダにデプロイメントスクリプト1_deploy_event.jsを作成します。 mkdir migDeploy cd migDeploy 1_deploy_event.js をタッチします 1_deploy_event.jsの内容は次のとおりです。 const {ethers} = require("ethers") 定数 fs = require('fs') プロバイダー = new ethers.providers.JsonRpcProvider('http://localhost:8545') とします。 関数 getHexString(prikeyPath) { const privKeyFile = fs.readFileSync(prikeyPath).toString().trim(); const privKey = new Buffer.from(privKeyFile, 'hex'); privKeyを返す } // var privKey = getHexString(".secret") var privKey = '0x403d...23d5' ウォレット = new ethers.Wallet(privKey,provider) とします。 var jsonStr = fs.readFileSync('./build/contracts/EventValue.json') var jsonInfo = JSON.parse(jsonStr) var jsonAbi = jsonInfo.abi var バイトコード = jsonInfo.bytecode 非同期関数deployContract(abi,バイトコード,ウォレット) { factory = new ethers.ContractFactory(abi, バイトコード, ウォレット) を作成します。 ContractObj = factory.deploy(100) を待機します。 コンソールログ('契約アドレス=',契約オブジェクト.アドレス) console.log('deploy txHash=',contractObj.deployTransaction.hash) contractObj.deployed() を待つ } デプロイコントラクト(jsonAbi、バイトコード、ウォレット) 3.3 契約書を作成するa) ガナッシュのIPを127.0.0.1、ポートを8545に設定します。 モジュール.エクスポート = { ネットワーク: 発達: ホスト: "127.0.0.1", // ローカルホスト (デフォルト: なし) port: 8545, // 標準 Ethereum ポート (デフォルト: なし) network_id: "*", // 任意のネットワーク (デフォルト: なし) }, }, // ここでデフォルトの mocha オプションを設定し、特別なレポーターなどを使用します。 モカ: // タイムアウト: 100000 }, // コンパイラを設定する コンパイラ: ソルク: { version: "0.6.6", // solc-bin から正確なバージョンを取得します (デフォルト: truffle のバージョン) // docker: true, // docker でローカルにインストールした "0.5.1" を使用します (デフォルト: false) // 設定: { // 最適化とevmVersionに関するアドバイスについては、Solidityのドキュメントを参照してください // オプティマイザー: { // 有効: false、 // 実行回数: 200 // }, // evmバージョン: "ビザンチウム" // } } }, }; ブラックフレームコンソールを開き、トリュフを使用して契約をコンパイルします
3.4 契約の展開黒枠のターミナルで次のコマンドを入力してコントラクトをデプロイします。
効果は以下のとおりです。 コントラクト アドレスと txHash を印刷すると、コントラクトのデプロイメントが成功したことが示されます。 これで、ethers.js を使用して Solidity スマート コントラクトをデプロイする方法についての説明は終わりです。ethers.js を使用して Solidity スマート コントラクトをデプロイする方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 |
<<: Docker のインストールと構成イメージの高速化の実装
var() の紹介と使用法詳細 (MDN) IEは無効ですが、他の主流のブラウザは有効ですvar()...
目次序文原因を発見するカスタムフィルタリングルール要約する序文インターネットの急速な発展に伴い、情報...
目次1. JDKをダウンロードする(例としてjdk1.8.0を使用する) 2. JDK をインストー...
1. フロントエンド主導の実装手順最初のステップは、ページのインポートボタンをクリックしてExcel...
1. jdkダウンロードアドレスをダウンロードする我下載的是jdk-8u221-linux-x64....
1. MySQLデータベースのユーザーテーブルのレコードのHostフィールド値を%に変更します。奇妙...
1. 事前準備 (windows7+mysql-8.0.18-winx64) 1. ダウンロードアド...
MacBookにpython3.7.0をインストールする詳細な手順は、参考までに記録されています。具...
rm コマンドrm コマンドは、ファイルを削除するときによく使用されるコマンドです。ファイルまたはデ...
この記事は元々ブロガーのWeiwei Miaoによって書かれたものです。ブログホームページ: htt...
テーブルの欠点1. テーブルは他の HTML タグよりも多くのバイトを占有します。 (ダウンロード時...
nginxをインストールするnginx-fullをインストールする必要があることに注意してください。...
序文:日々の勉強や仕事の中で、データをエクスポートする必要に迫られることがよくあります。たとえば、デ...
World Wide Web Consortium (W3C) は、HTML 5 仕様のドラフトをリ...
目次tf-gpu をダウンロード取得したtf-gpuイメージに基づいて独自のイメージを構築するイメー...