间接合约的函数调用消耗了谁的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 //
    }
}

我隐约注意到视图函数不消耗 gas,

所以如果 do_sth()view 函数,那么就没什么麻烦了。

但通过调试,我发现在处理由 pass()

调用的 do_sth()

msg.sender 成为 A 的 concontact 地址,不是原始发件人

这意味着,在 do_sth() 范围内,msg.sender 已更改。

那么,do_sth()过程会消耗谁的gas?

每笔以太坊交易都附加了gas,在交易处理过程中只能消耗gas。任何合约调用都计入原始交易,合约不能自己支付燃料费。