首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过智能合约将已部署的智能合约的价值返还给智能合约

通过智能合约将已部署的智能合约的价值返还给智能合约
EN

Stack Overflow用户
提问于 2020-02-16 20:55:15
回答 1查看 1.6K关注 0票数 1

我正在尝试使用区块链上已部署的智能合约的函数返回值。

代码语言:javascript
复制
pragma solidity 0.6.2;

contract Caller {

   address cont;

   function changeAdd(address _change) public {
     cont = _change;
   }

   function caller (bytes memory test) public returns(bool, bytes memory) {
      bytes memory payload = abi.encodeWithSignature("callMe(bytes)", test);
      (bool success, bytes memory result)= address(cont).call(payload);
      return (success, (result));

   }

   function viewCont() public view returns(address) {
       return cont;
   }  
}

部署的测试契约是这样的:

代码语言:javascript
复制
pragma solidity 0.6.2;

contract Store {

  uint counter;

  function callMe(bytes calldata test) external returns(bytes memory) {
     counter++;
     return abi.encode(test);
  }

  function viewCounter () public view returns(uint256) {
     return(counter);
  }

  function clearCounter() public  {
     counter = 0 ;
  }   
}

在这个例子中,我在区块链上部署了合约“商店”,在那里它被分配了一个随机地址,为了使用Caller.caller函数,可以通过Caller.changeAdd函数指向这个地址。因此,我尝试以字节的形式将数据发送到Store协定,该协定应将相同的数据发送回Caller协定。我正在尝试仅隔离最初发送的数据,以便我可以使用它来测试区块链上智能合约之间的交互。一开始我试着发送一个整数,但我找不到一种方法。所以我使用了字节,它起作用了,但我收到的数据仍然不同于我一开始发送的数据(例如,我发送0x0,我收到一个大的字节数,这与0x0不一样)。

我希望在如何接收和处理两个不同的,未链接的智能合约之间的数据方面的任何帮助,提前谢谢你。

EN

回答 1

Stack Overflow用户

发布于 2020-02-18 17:59:12

你有没有尝试使用abi.decode的实心度函数?

在下面的示例中,合同B调用合同A的setName,然后使用abi.decode函数对结果进行解码。

代码语言:javascript
复制
contract A {
    string public name;
    constructor(string memory tokenName) public {
        name = tokenName;
    }

    function setName(string memory newName) public returns ( string memory){
        name = newName;
        return newName;
    }
}


contract B  {
    event Log(string msg);
    string public myName;
    function call(address addr, string memory newName) public {
        bytes memory payload = abi.encodeWithSignature("setName(string)", newName);  
        (bool success, bytes memory result)= addr.call(payload);

        // Decode data
        string memory name = abi.decode(result, (string));

        myName = name;
        emit Log(name);
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60248647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档