Solidity

Solidity 是否為創建的嵌套合約創建了一個隱式 getter?

  • November 25, 2021

Solidity 是否為創建的嵌套合約創建了隱式 getter?

例子:

contract Foo {
  ....
}

contract Bar {
   Foo public foo;

  Bar() {
       foo = new Foo();
  }
}

使用 Truffle 進行嘗試時,它告訴我這Bar.foo()不是 ABI 的一部分。

我做錯了什麼,或者foo()只是不是由 Solidity 編譯器創建的?(我希望它返回創建的Foo()合約的地址)

如果你在一個 sol 文件中有 2 個合約定義,ContractA 和 ContractB,並且你想部署 ContracB,那麼像這樣使用它:

var ContractB = artifacts.require("ContractB")

module.exports = function(deployer) {
 deployer.deploy(ContractB, '750000000000000000000000000', 'MyCoinName', 18,{gas: 4700000})
};

注意:不應使用 .sol 並使用要部署的合約的名稱。

在 Solidity 0.5.x 中,您已明確將合約轉換為地址。編寫返回合約地址的函式的方法不止一種。在問題中“隱式”觀察……

contract Foo {
  ....
}

contract Bar {
  Foo foo;
  address public fooAddress;

  Bar() {
       foo = new Foo();
       fooAddress = address(foo);
  }
}

因此,thisContract.fooAddress()返回addressof foo

希望能幫助到你。

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