繁体   English   中英

间接合约的函数调用消耗了谁的gas?

[英]Whose gas is consumed for indirect contract's function call?

我正在为 Dapp 开发人员研究可靠性。

让我假设下面的这种情况,有 2 个合约, AB

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM