微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否从另一个合同部署了可能的调用公共视图返回?

如何解决是否从另一个合同部署了可能的调用公共视图返回?

阅读文档。

https://docs.soliditylang.org/en/v0.5.3/units-and-global-variables.html#members-of-address-types

我看到一个合约可以调用一个合约,但它们使用gas。 可以调用公共视图返回这样的函数 从另一个合同公开视图返回

这个例子就像我有的:

A点

contract PointA {
    uint256 number = 10;
    
    function retrieve() public view returns (uint256) {
        return number;
    }
}

B 点

contract PointB {
    address PointA = 0x9a6120275387Dc5Aa5dab0D87aeeee5894A3411B;

    function retrieve() public view returns (uint256) {
        uint256 PointA = PointA.call(bytes4(sha3("retrieve()")));
        return PointA;
    }
}

解决方法

仅当完整的调用链是(只读)calls,而不是 transactions

PointA.sol

pragma solidity ^0.8;

contract PointA {
    uint256 number = 10;
    
    function retrieve() public view returns (uint256) {
        return number;
    }
}

PointB.sol

pragma solidity ^0.8;

interface PointA {
    function retrieve() external view returns (uint256);
}

contract PointB {
    PointA pointA = PointA(0xd9145CCE52D386f254917e481eB44e9943F39138);

    function retrieve() public view returns (uint256) {
        uint256 retrieved = pointA.retrieve();
        return retrieved;
    }
}

当您调用(不处理)PointB 函数retrieve() 时,它使EVM 调用PointA 函数{ {1}}。


您问题中 retrieve() 函数的命名有点不幸。它执行 EVM 调用(或有时称为“消息调用”,docs),但它与 call()(只读、无气体)RPC 方法无关。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。