翻訳 元: Dengchain 翻訳 プロジェクト _
イーサリアムはイーサリアムで最も人気のあるブラウザです。その機能の1つは、スマートコントラクトのソースコードを検証することです。これにより、ユーザーは契約を使用する前に、ソースコードを通じて契約の機能を理解できます。これにより、契約に対するユーザーの信頼が高まり、開発者にメリットがあります。
Etherscan Webサイトのフォームからコードを送信することは、コードを検証するための主要な方法ですが、多くの手作業が必要です。コンパイラのバージョンやコンストラクタのパラメータなどを入力し、拡張されたコントラクトソースコードを送信する必要があります。コードは、デプロイされたコードと完全に一致する必要があります。
一部の人々は、コマンドラインツールを使用してTruffleコントラクトを巻き戻し、ブラウザーベースのRemixIDEを使用して展開されたソースコードを展開します。次に、同じ拡張ソースコードをEtherscanにコピーして、フォームの送信を検証します。これは非常に面倒なプロセスであり、自動化する必要があります。
これが 、EtherscanAPIを介してTruffleコントラクトを自動的に検証するtruffle-plugin-verifyプラグインを作成した理由です。このプラグインは、 Renの開発者を含む、さまざまな参加者が参加するオープンソースプロジェクトです。このプラグインを使用して、簡単なコマンドで契約を確認します。
truffle run verify ContractName
依存
この記事では、デプロイ可能なTruffleプロジェクトがすでにあることを前提としています。そうでない場合は、このTruffleチュートリアルを参照できます。このチュートリアルでは、Infuraを使用してTruffleプロジェクトのデプロイメントをセットアップする方法についても説明しています。
GitHubでこの記事のソースコードを確認することもできます。
契約する
例としてカジノ契約を取り上げましょう。契約では、プレイヤーは1-10ETHを賭けることができます。契約が不足しないようにするために、プレーヤーは総契約額のほんの一部しか賭けることができません。
当選番号は、現在のブロック番号に対するモジュロ演算の結果です。この操作はテストでは問題ありませんが、本番環境で悪用される可能性があることに注意してください。
この記事では、契約をさらに分割して、複数のファイルに分散するようにします。プラグインの全機能を表示すると便利です。
契約/Killable.sol
pragma solidity ^0.5.8;
contract Killable {
address payable public owner;
constructor() public {
owner = msg.sender;
}
function kill() external {
require(msg.sender == owner, "Only the owner can kill this contract");
selfdestruct(owner);
}
}
契約/Casino.sol
pragma solidity ^0.5.8;
import "./Killable.sol"
contract Casino is Killable {
event Play(address payable indexed player, uint256 betSize, uint8 betNumber, uint8 winningNumber);
event Payout(address payable winner, uint256 payout);
function fund() external payable {}
function bet(uint8 number) external payable {
require(msg.value <= getMaxBet(), "Bet amount can not exceed max bet size");
require(msg.value >0, "A bet should be placed");
uint8 winningNumber = generateWinningNumber();
emit Play(msg.sender, msg.value, number, winningNumber);
if (number == winningNumber) {
payout(msg.sender, msg.value * 10);
}
}
function getMaxBet() public view returns (uint256) {
return address(this).balance / 100;
}
function generateWinningNumber() internal view returns (uint8) {
return uint8(block.number % 10 + 1); // Don't do this in production
}
function payout(address payable winner, uint256 amount) internal {
assert(amount > 0);
assert(amount <= address(this).balance);
winner.transfer(amount);
emit Payout(winner, amount);
}
}
契約を確認する
コントラクトの準備ができたので、truffle-plugin-verifyを使用してコントラクトを検証することがいかに簡単であるかを示すことができます。
1.truffle-plugin-verifyをインストールして有効にします
Truffleプラグインは、npmまたはyarnを使用してインストールできます。
npm install -D truffle-plugin-verify
yarn add -D truffle-plugin-verify
truffle-config.js
インストール後、Truffleのまたはファイルに以下を追加しtruffle.js
てプラグインを有効にします。
module.exports = {
/* ... rest of truffle-config */
plugins: [
'truffle-plugin-verify'
]
}
2. Etherscan APIキーを作成し、それをTruffleに追加します
Etherscan APIキーを作成するには、最初にEtherscanWebサイトでアカウントを作成する必要があります。アカウントを作成した後、上の画像に示すように、プロファイルページに新しいAPIキーを追加できます。新しいキーを作成したら、それを次のファイルtruffle-config.js
または truffle.js
ファイルに追加しますapi_keys
。
module.exports = {
/* ... rest of truffle-config */
api_keys: {
etherscan: 'MY_API_KEY'
}
}
現在、APIキーをコードベースに送信することはできません 。dotenvを使用してAPIキーを保存 し、gitリポジトリ内 の.env
ファイルを無視して、truffle-config.js
または truffle.js
構成ファイルで読み取ることをお勧めします。読み取り方法は次のとおりです。次のとおりです。
var HDWalletProvider = require("truffle-hdwallet-provider");
require('dotenv').config();
module.exports = {
networks: {
rinkeby: {
provider: function() {
return new HDWalletProvider(`${process.env.MNEMONIC}`, `https://rinkeby.infura.io/v3/${process.env.INFURA_ID}`)
},
network_id: 4
}
},
plugins: [
'truffle-plugin-verify'
],
api_keys: {
etherscan: process.env.ETHERSCAN_API_KEY
}
};
構成ファイルは上記とは異なる場合がありますが、パブリックネットワークの展開が設定されていて、両方が正しく設定されている限り、plugins
問題api_keys
はありません。
3.契約を展開して確認します
truffle-plugin-verifyの使用が設定され、次のステップは実際にスマートコントラクトを展開して検証することです。
配備:
truffle migrate --network rinkeby
これにはしばらく時間がかかり、デプロイされると、次のようなものが表示されます。
Summary
=======
> Total deployments: 2
> Final cost: 0.0146786 ETH
契約が展開されると、truffle-plugin-verifyを使用してカジノ契約をEtherscanできます。
truffle run verify Casino --network rinkeby
それでもしばらく時間がかかり、最終的には次のように戻ります。
Pass - Verified: https://rinkeby.etherscan.io/address/0xAf6e21d371f1F3D2459D352242564451af9AA23F#contracts
契約を表示するには、上記のアドレスにアクセスしてください
結論は
この記事では、契約がデプロイされるたびに実行する手動の手順がいくつかあるため、Etherscanオンラインフォームを使用してコードを検証するのがいかに面倒であるかについて説明しました。この記事では、truffle-plugin-verifyを使用して、開発者が1つの簡単なコマンドでスマートコントラクトを検証できるようにします。これにより、手動検証の代わりに、簡単で自動化された方法が提供されます。
この翻訳は、Chainlinkコミュニティと CellNetworkによってサポートされてい ます。
元のアドレス: EtherscanでTruffleスマートコントラクトを自動的に確認する
作成者: Rosco Kalis