首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当我在合同中订立新合同时,煤气从何而来?

当我在合同中订立新合同时,煤气从何而来?
EN

Ethereum用户
提问于 2017-09-30 08:49:22
回答 1查看 102关注 0票数 1

假设我通过调用父合同中的函数来创建另一个合同,创建新合同所需的气体是否包含在运行创建新合同的函数中?

代码语言:javascript
复制
pragma solidity ^0.4.15;

contract Test {
    bool public active = true;
    address public owner;
    address public contract_address;

    uint public amountReceived;

    address[] public activeContracts;
    uint256 public gasLeft;

    function () payable {
        amountReceived = msg.value;
        gasLeft = msg.gas;
    }

    function Test() {
        owner = msg.sender;
        contract_address = this;
        gasLeft = msg.gas;
    }

    function updateStatus() {
        active = false;
    }

    function kill() {
        selfdestruct(owner);
        gasLeft = msg.gas;
    }

    function createSubContract() {
        address newContractAddress = new SubTest();
        activeContracts.push(newContractAddress);
        gasLeft = msg.gas;
    }
}

contract SubTest {

    address public owner;
    address public contract_address;

    uint256 public amountReceived;
    uint256 public gasLeft;

    function () payable {
        amountReceived = msg.value;
        gasLeft = msg.gas;
    }

    function SubTest() {
        owner = msg.sender;
        contract_address = this;
        gasLeft = msg.gas;
    }

    function kill() {
        selfdestruct(owner);
        gasLeft = msg.gas;
    }

}

这是我正在测试的合同样本。为了创建一个分包合同,我称之为createSubContract函数,调用该函数所需的gas是否包括创建契约所需的gas?

EN

回答 1

Ethereum用户

发布于 2017-09-30 09:23:12

是。您必须为您的createSubContract()函数调用分配足够的gas,以便能够覆盖来自createSubContract()的所有后续调用的所有气体使用情况。

尽管对子调用的这种气体分配可以以更精细的方式完成,即您不必将事务的所有气体转发给子调用,因为它解释了这里

合同可以决定其剩余天然气中的多少应与内部消息调用一起发送,以及它希望保留多少。如果在内部调用(或任何其他异常)中发生异常,这将由放置在堆栈上的错误值发出信号。在这种情况下,只有与呼叫一起发送的气体被耗尽。在稳固性中,在这种情况下,调用契约默认会导致手动异常,从而导致异常“冒泡”调用堆栈。

在未来,大都会硬叉将允许合同支付天然气。检查它的这里,EIP 86 (帐户安全抽象)段。

票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/27495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档