我想把我的代码分解成多个合同,但我担心这会增加煤气费。外部函数调用是否比对同一契约中的函数的内部调用花费更多的气体?如果是的话,是每次调用的统一费用,还是传递给它的参数的大小?
发布于 2018-05-01 03:52:43
一点。
这里有一个非常惯用的契约集,它包含一组函数,它们采用不同的路径来设置和获取相同的值。没有任何努力来优化气体。delegateCall
可以做得更便宜。
您可以看到交易成本的差异,这与打包和解压请求有关。您可以看到,使用从"Module“调用到"StandAlone”契约的调用来设置值需要额外(大约)2,000个气体,如果直接调用,该契约将完成相同的任务。
有两件事值得一提。
管理费用占工作的比例过大,因为合同本身并没有做任何繁重的工作。基本上是固定费率的开销。
策划人是重要的比较者。尽管气体成本是为只读操作计算的,但它们基本上是免费的,前提是您不超过块gasLimit (预算)。
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);
}
}
希望能帮上忙。
https://ethereum.stackexchange.com/questions/47174
复制相似问题