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 のインストールと構成イメージの高速化の実装
IPマスカレードとポート転送Firewalldは2種類のネットワークアドレス変換をサポートしています...
% ワイルドカードを使用すると、インデックス失敗の問題が発生することがよくあります。ここでは、lik...
このチュートリアルの動作環境: Windows 7 システム、MySQL 8 バージョン、Dell ...
この記事の例では、Vueスライダー検証の実装を共有しています。コードは次のとおりです。 <テン...
Ubuntu 20.04は2020年4月に正式にリリースされました。本日、ミラーシステムを正式にイン...
デフォルトでは、CentOS 7 上の PHP は apache または nobody として実行さ...
MySQLのパーティショニングは、非常に大きなテーブルを管理するのに役立ちます。MySQLのパーティ...
1. CSSは左の固定幅と右の適応幅を実現します1. ポジショニング <!DOCTYPE ht...
序文この記事では、docker-compose の構成をいくつか紹介します。これらを参考にして、独自...
目次マルチアプリケーションの展開1-Tomcat 構成1.1- プロジェクト構成1.2-サービス構成...
MySQL 8 の公式バージョン 8.0.11 がリリースされました。公式発表によると、MySQL ...
目次基本タイプあらゆるタイプ配列タプルインタフェース関数自己推論を入力する結合タイプ(1つ以上選択)...
純粋な CSS を使用して波の効果を実現することは、常に非常に困難でした。 波形曲線を実現するにはベ...
フォルダー内のすべての txt ファイルのファイル名の前に「gt_」を追加する必要があります。つまり...
目次レイアウトを作成するCSSスタイルを追加するJavaScript で要素を操作する対象要素を取得...