合約不會部署(Truffle、React + Redux Box)
我正在嘗試開發一個允許多重簽名操作的智能合約。
因此,例如,如果我想將管理員添加到 AdminStorage,我將需要一些管理員的同意。它與 Multisig 錢包交易確認完全一樣,但需要呼叫外部合約方法。
所以我有契約 AdminStorage(在contracts/storage/AdminStorage.sol 中)。它只是一個簡單的地址儲存——沒什麼好寫的。
但最重要的是,我有 Multisin(在契約/multisig 中)和 MultisigAddAdmin(擴展 Multisig)。這些的目的是將所有這些多重簽名屬性添加到管理員添加中。
AdminStorage.add 的呼叫者還沒有任何限制,但這只是一個測試執行。很快,此方法將只能從 MultisigAddAdmin 呼叫。
問題是:MultisigAddAdmin 不會部署。沒有錯誤(例如當您嘗試部署和抽象契約時“檢查您的 gas 限制”)- 沒有。Truffle 可以很好地執行遷移,它甚至可以列印部署的地址,但隨後我轉到 Truffle 控制台並且 MultisigAddAdmin.isDeployed() 是錯誤的。而且我也無法從 web3.js(在 React 應用程序中)訪問已部署的實例。
重現步驟:
(您將需要 NodeJS 7、最新的 Truffle 和 testrpc)
- 複製https://github.com/IsThisThePayneResidence/personal-solidity-contracts
npm install
truffle compile --all
- 執行 testrpc (安裝只需鍵入
npm install ethereumjs-testrpc
)truffle deploy
truffle console
- (在 Truffle 控制台中)
MultisigAddAdmin.isDeployed()
請幫忙!
如果其他人遇到同樣的問題:
該問題在契約遷移中仍然存在。具體來說,在
2_deploy_contracts.js
.我總是看到有人建議的部署依賴聯繫人的“真正方式”對我不起作用。
所以
deployer.deploy( AdminStorage, [ "0x82283F163eddAa01ca22d080873baE2D1681A94f", "0x228B4B687be1103b0985c316C6e7CBA93B4CDaBd", "0xC73256378982fF9e8aF364fD1b0B8Fbf2786DD45", "0xaD392E402Dd3A0c8b7468e3dac063e777d0963Ee" ] ).then(() => { deployer.link(AdminStorage, MultisigAddAdmin); console.log(`AdminStorage.address: ${AdminStorage.address}`); deployer.deploy(MultisigAddAdmin).then(() => { console.log(`MultisigAddAdmin.address: ${MultisigAddAdmin.address}`); }); });
顯然,這不是我應該進行契約地址注入的方式。將注入移至單獨的方法,將 MultisigAddAdmin 部署從 Promise 處理程序中移出並在實際程式碼中呼叫 setter 方法解決了問題。
希望它可以幫助某人不要浪費 4 天的時間來試圖弄清楚。