间接合约的函数调用消耗了谁的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 //
}
}
我隐约注意到视图函数不消耗 gas,
所以如果 do_sth()
是 view
函数,那么就没什么麻烦了。
但通过调试,我发现在处理由 pass()
、
调用的 do_sth()
时
msg.sender
成为 A 的 concontact 地址,不是原始发件人。
这意味着,在 do_sth()
范围内,msg.sender
已更改。
那么,do_sth()
过程会消耗谁的gas?
每笔以太坊交易都附加了gas,在交易处理过程中只能消耗gas。任何合约调用都计入原始交易,合约不能自己支付燃料费。
我正在为 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 //
}
}
我隐约注意到视图函数不消耗 gas,
所以如果 do_sth()
是 view
函数,那么就没什么麻烦了。
但通过调试,我发现在处理由 pass()
、
do_sth()
时
msg.sender
成为 A 的 concontact 地址,不是原始发件人。
这意味着,在 do_sth()
范围内,msg.sender
已更改。
那么,do_sth()
过程会消耗谁的gas?
每笔以太坊交易都附加了gas,在交易处理过程中只能消耗gas。任何合约调用都计入原始交易,合约不能自己支付燃料费。