首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >用更多的汽油来称呼另一个合同的功能牢固吗?

用更多的汽油来称呼另一个合同的功能牢固吗?
EN

Ethereum用户
提问于 2018-04-30 22:06:17
回答 1查看 10.2K关注 0票数 25

我想把我的代码分解成多个合同,但我担心这会增加煤气费。外部函数调用是否比对同一契约中的函数的内部调用花费更多的气体?如果是的话,是每次调用的统一费用,还是传递给它的参数的大小?

EN

回答 1

Ethereum用户

回答已采纳

发布于 2018-05-01 03:52:43

一点。

这里有一个非常惯用的契约集,它包含一组函数,它们采用不同的路径来设置和获取相同的值。没有任何努力来优化气体。delegateCall可以做得更便宜。

您可以看到交易成本的差异,这与打包和解压请求有关。您可以看到,使用从"Module“调用到"StandAlone”契约的调用来设置值需要额外(大约)2,000个气体,如果直接调用,该契约将完成相同的任务。

有两件事值得一提。

管理费用占工作的比例过大,因为合同本身并没有做任何繁重的工作。基本上是固定费率的开销。

策划人是重要的比较者。尽管气体成本是为只读操作计算的,但它们基本上是免费的,前提是您不超过块gasLimit (预算)。

代码语言:javascript
代码运行次数:0
运行
复制
pragma solidity 0.4.19; 

contract StandAlone {
    uint public x = 1;

    function get() public view returns(uint) {
        return x;
    }

    function set(uint _x) public returns(bool success) {
        x = _x;
        return true;
    }

    function getLongWay() public view returns(uint) {
        return get();
    }
}

contract Module {

    StandAlone s;

    function Module(address SAAddress) public {
        s = StandAlone(SAAddress);
    }

    function get() public view returns(uint) {
        return s.get();
    }

    function set(uint  _x) public returns(bool success) {
        return s.set(_x);
    }
}

希望能帮上忙。

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

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

复制
相关文章

相似问题

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