首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在调用_addr.call(abi.encodeWithSignature(.))之前设置变量时,变量不会改变

在调用_addr.call(abi.encodeWithSignature(.))之前设置变量时,变量不会改变
EN

Ethereum用户
提问于 2020-11-02 19:07:57
回答 1查看 142关注 0票数 0

我在合同的函数中调用了一个名为"getExpectedReturn“的1icnh智能契约函数。当我在调用之前设置一个变量(名为v1)时,变量不会改变,但是如果在调用之后设置了一个变量(名为v2),它就会工作。我不知道为什么会这样。下面是一个简单的合同来复制这个问题:

代码语言:javascript
复制
pragma solidity ^0.6.6;

contract A  {

    address internal constant ONE_INCH_ADDRESS = 0xC586BeF4a0992C495Cf22e1aeEE4E446CECDee0E;
   
    uint256 public v1 = 1;   
    uint256 public v2 = 2;
   
    event Ev1( uint256  v1, uint256  v2);

    function A1 () public {
       
        v1 = 11;  /*this does not work*/
         
 
        ONE_INCH_ADDRESS.call(abi.encodeWithSignature(
                                "getExpectedReturn(address,address,uint256,uint256,uint256)",
                                                    0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE,
                                                    0x6B175474E89094C44Da98b954EedeAC495271d0F,
                                                    1000000000000000000, 100, 0));
        v2 = 22; /* this works*/

        emit Ev1(v1, v2); /* here v1 is 1 but should be 11 ! and v2 is 22*/
        
    }
}

职能A的执行日志附后:

代码语言:javascript
复制
[ { "from": "0x69A5e5e86c72aE3D57bBD25A38f63bc527176228", "topic": "0x9aa0a5ee181172acba4a8b7e3c24db463f4c218ff10a6ea1777f43817d257414", "event": "Ev1", "args": { "0": "1", "1": "22", "v1": "1", "v2": "22", "length": 2 } } ]

欢迎任何建议。

PS1:合同部署在一个混合的分叉主板上。(已使用的地址位于,ETH:0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE,DAI:0x6B175474E89094C44Da98b954EedeAC495271d0F)上

EN

回答 1

Ethereum用户

回答已采纳

发布于 2020-12-10 19:56:04

好像是一只怪虫。

这是您在mainnet上的事务,事件看起来很好。

票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/89865

复制
相关文章

相似问题

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