Solidity

合約不會部署(Truffle、React + Redux Box)

  • August 11, 2017

我正在嘗試開發一個允許多重簽名操作的智能合約。

因此,例如,如果我想將管理員添加到 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)

  1. 複製https://github.com/IsThisThePayneResidence/personal-solidity-contracts
  2. npm install
  3. truffle compile --all
  4. 執行 testrpc (安裝只需鍵入npm install ethereumjs-testrpc
  5. truffle deploy
  6. truffle console
  7. (在 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 天的時間來試圖弄清楚。

引用自:https://ethereum.stackexchange.com/questions/23997