与另一个合约以太坊的合约进行交互

时间:2018-08-01 21:28:40

标签: ethereum smartcontracts

我有一个问题想解决一个星期,我认为自己在那里90%。

如果我在私有区块链上部署合同MerchantA并通过坚固性命令行address检索合同ABIsolc --abi MerchantA.sol并将其存储。

我该在哪里使用全新合同SendMoneyContract方法中输入此ABI和地址,该方法将调用部署在地址0xrandom上的AnimalContract函数之一。

我在网上找到的材料是在同一文件中同时包含两个solidity源代码,但就我而言,我做不到。 MerchantAContract的原因在每个部署中都是唯一的[添加的每个商人都获得了唯一的合同`。

到目前为止,据我了解,我需要提供MerchantA合同地址和ABI。 我不知道如何在solidity函数中进行操作。

1 个答案:

答案 0 :(得分:2)

您不对ABI做任何事情。 假设您要从MerchantB调用MerchantA上的functionA函数,所要做的就是从MerchantA中获取接口,一个ERC20令牌接口的示例是:

contract Token {
  function totalSupply() constant returns (uint256 supply) {}
  function balanceOf(address _owner) constant returns (uint256 balance) {}
  function transfer(address _to, uint256 _value) returns (bool success) {}
  function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {}
  function approve(address _spender, uint256 _value) returns (bool success) {}
  function allowance(address _owner, address _spender) constant returns (uint256 remaining) {}

  event Transfer(address indexed _from, address indexed _to, uint256 _value);
  event Approval(address indexed _owner, address indexed _spender, uint256 _value);

  uint public decimals;
  string public name;
}

在MerchantB上,无论您要调用functionA的哪个位置,都应放置以下代码:

MerchantA merchantA = MerchantA(0x0000000000000000000000000000000000000000); //Replace 0x000000000000000000000000000000000000000 with the address of MerchantA
merchantA.functionA();

您将需要换出MerchantA的接口,因为您没有使用ERC20令牌以及要调用的功能。