[英]Truffle deployed contracts can't be verified through Etherscan
我面臨的問題是,松露生成的字節碼不同於solcjs(本地編譯器),也不同於Remix(在線編譯器)。 因此,我無法通過Etherscan驗證我的合同(請參閱https://etherscan.io/verifyContract )
我的環境:
OS: Ubuntu 15.10
$ uname -a
Linux sasha 4.2.0-42-generic #49-Ubuntu SMP Tue Jun 28 21:26:26 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
$ truffle version
Truffle v3.2.4
$ solcjs --version
0.4.11+commit.68ef5810.Emscripten.clang
我試圖做的:
1)我創建了一個簡單的智能合約Ownable:
pragma solidity ^0.4.11;
contract Ownable {
address public owner;
function Ownable() {
owner = msg.sender;
}
modifier onlyOwner {
if (msg.sender != owner) throw;
_;
}
function transferOwnership(address newOwner) onlyOwner {
if (newOwner != address(0)) {
owner = newOwner;
}
}
}
2)啟動一個新的松露項目並將Ownable.sol復制到“合同”文件夾中。
所以項目的結構必須如下:
test-comtract
-- contracts
-- Ownable.sol
-- migrations
-- 1_initial_migration.js
-- 2_deploy_contracts.js
-- test
truffle.js
3)編制松露項目:
$ cd test-comtract
$ truffle compile
編譯完成后,將創建“build”文件夾。
4)轉到“build”文件夾並在那里搜索Ownable.json文件。 在此文件中,在“unlinked_binary”屬性中搜索生成的字節碼。 值如下所示:
5)試圖通過Remix在線編譯器編譯。 HTTPS // ethereum.github.io /瀏覽器的堅固性/#版本= soljson-v0.4.11 + commit.68ef5810.js&優化=真
編譯結果如下:
6)嘗試通過solcjs幫助編譯:
$ cd test-comtract/contracts
$ solcjs --optimize --bin Ownable.sol
在“test-comtract / contracts”文件夾中將創建文件“Ownable.sol:Ownable.bin”
結果:SolJS字節碼與Remix字節碼相同,但與松露字節碼不同。
7)我還通過松露將Ownable.sol部署到以太坊(TEST_NET)。 您可以通過以下網址查看:
https://ropsten.etherscan.io/address/0x6c8e1b321ce94b12069222b543558d4159527ecd
也許有人面臨這樣的問題。 我會非常感激地聽到任何版本的原因。 也許這是Truffle框架的一個已知錯誤。 在谷歌我發現更多的文章描述了類似的問題,但沒有人提出解決方案。 我非常需要幫助
提前致謝!
- 亞歷克斯
在solc / truffle-compile中有一個編譯器優化,此時etherscan在編譯契約時不支持。
發送評論給etherscan關於它!
有一個驗證程序2.0支持Truffle的編譯。
你可以做我做的事情並開始猜測優化級別和編譯器。 你可能會在100次嘗試后得到它。 我做到了。 從現在開始,我不會在松露的主網上部署任何東西。 它非常適合測試和開發,但它與etherscan不一致。 為此,您需要連接所有內容並在將來使用remix。
我創建了truffle-plugin-verify
來自動化Etherscan上的Truffle合同驗證。
npm install truffle-plugin-verify
truffle.js
或truffle.js
truffle-config.js
文件中 module.exports = {
/* ... rest of truffle-config */
plugins: [
'truffle-plugin-verify'
]
}
module.exports = {
/* ... rest of truffle-config */
api_keys: {
etherscan: 'MY_API_KEY'
}
}
將合同遷移到公共網絡后,您可以通過運行以下方式在Etherscan上進行驗證:
truffle run verify ContractName [--network networkName]
更多信息可以在存儲庫或我的文章中自動驗證Etherscan上的Truffle智能合約 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.