是否可以调用 public 查看 return 从另一个合同部署?

is posible call public view return deployed, from anther contract?

正在阅读文档。

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

我看到一个合约可以调用另一个合约,但它们使用 gas。 可以调用像 public view return 这样的函数 从另一个 contract public 视图 return?

这个例子就像我有的那样:

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, not 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 函数 retrieve().


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