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 のインストールと構成イメージの高速化の実装
序文デッドロックの本質はリソースの競合です。バッチ挿入の順序が一貫していないと、デッドロックに陥りや...
ページをナビゲートする2つの方法宣言型ナビゲーション: リンクをクリックしてナビゲーションを実現する...
Google Chinaは、ウェブサイトやブログを素早く簡単に多言語化できる翻訳ツールをリリースした...
目次1. はじめに2. 本文2.1 モジュールとは何ですか? 2.2 解決2.3、require.r...
ReadOnly 属性を持つ TextBox は、クライアント上で次のマークアップとして表示されます...
1. 概要1.1 基本概念: Docker は、Go 言語をベースにしたオープンソースのアプリケーシ...
目次1. Dockerを使用する利点2. Dockerをインストールする1) LinuxにDocke...
序文この記事では、MySQL 8.0 の新機能を使用して再帰クエリを実装します。詳細なサンプル コー...
Linux のコマンドラインで他のユーザーにメッセージを送信するのは簡単です。これを行うコマンドは多...
目次クラスタクラスターの詳細クラスター内のイベントクラスター内のメソッドクラスター内の属性クラスター...
説明と紹介Docker inspect は Docker クライアントのネイティブ コマンドであり、...
目次1. インストール2. vue2でEchartsを使用するmain.jsファイル内コンテナが与え...
1. 新サイトホームページのリンクレイアウト1. リンク配置の位置:リンク配置の位置によって、リンク...
トラブル発生が突然で、業務も迫っていたため、現場のスクリーンショットを撮る時間がありませんでしたので...
以下のように表示されます。表から条件フィールドでグループ化仮想テーブルとフィールドを作成し、フィール...