[英]Is it possible to call contract function from another contract without consuming Gas?
[英]Whose gas is consumed for indirect contract's function call?
我正在为 Dapp 开发人员研究可靠性。
让我假设下面的这种情况,有 2 个合约, A
和B
。
contract A {
B contract_b;
constructor(address b_addr) {
contract_b = B(b_addr);
}
function pass() public {
contract_b.do_sth();
}
}
contract B {
constructor(address b_addr) {
//
}
function do_sth() external {
// do something state-changing stuffs //
}
}
我隐约注意到view函数不花gas,
所以如果do_sth()
是view
函数,那么就没有什么麻烦了。
但是通过调试,我发现在处理由pass()
调用的do_sth()
pass()
,
msg.sender
成为A 的msg.sender
地址,而不是原始发件人。
这意味着,在do_sth()
范围内, msg.sender
已更改。
那么, do_sth()
过程会消耗谁的gas呢?
每笔以太坊交易都有一个 gas 附加到它上面,并且在交易处理过程中只能使用这个 gas。 任何合约调用都计入原始交易,合约无法自行支付 gas 费用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.