【问题标题】:Does deploy a contract mean create a new block in blockchain?部署合约是否意味着在区块链中创建一个新区块?
【发布时间】:2021-11-26 12:17:29
【问题描述】:

我正在使用以太坊网络来部署智能合约。合同是用 Solidity 编写的,我正在使用 Remix IDE 进行部署和测试。我目前正在使用测试网络。

我不明白的是,当我将智能合约部署到以太坊网络时,它会在区块链上创建一个新区块吗?我的合约在运行时可能会将交易发送到不同的账户。这笔交易是否在智能合约的区块内?一旦我部署了合约,它就应该在网络中运行。每当合约上有方法调用时,是否总是在区块中产生交易?

【问题讨论】:

    标签: blockchain ethereum smartcontracts


    【解决方案1】:

    实时网络(例如以太坊主网或 Ropsten 测试网)和模拟器(例如 Remix VM 或 Ganache)之间存在细微差别。

    当您要部署合约时,其编译后的字节码作为没有接收者的交易的data 字段传递(to 字段被省略)。


    在实时网络上,交易被广播到网络,并在内存池中等待被挖掘。

    当矿工挖掘此交易时,他们机器上的 EVM 计算在其执行期间发生的状态更改(即合约部署)并广播状态更改(例如,将合约字节码存储在新创建的地址下存储)到网络的其余部分。


    但是,EVM 模拟器的每个实例通常在一台机器上运行(例如,在 Remix 的情况下在您的浏览器中运行)并且无法访问矿工网络。另外,在开发过程中每次都等待外部矿工挖掘您的交易是无效的。

    因此,当您在模拟器上发送交易时,它会立即在本地执行并包装在一个新块中。


    所以回答你的问题:

    部署合约是否意味着在区块链中创建一个新区块?

    • 实时网络 - 否
    • 模拟器 - 是的

    每当合约上有方法调用时,是否总会在区块中产生一笔交易?

    事务(读写)和调用(只读)是有区别的。有关交易,请参见上文。只读调用根本不会被挖掘(因此它们是免费的),它们只会在您的节点提供者的机器上(或在模拟器中)调用。

    【讨论】:

    • 那么对于一个现网来说,它会等到网络中的所有矿工都应用状态更改,然后才会创建一个新块?那么对于一个实时网络,部署一个联系人最终会创建一个新块吗?我理解正确吗?
    • @JoeyYiZhao 矿工不会等待其他人应用提交的状态更改。我会将您的声明更正为“部署合约最终将包含(但不会创建)在一个新区块中”......您可以在 this wiki page 上阅读有关以太坊挖矿概念的更多信息。
    猜你喜欢
    • 2021-07-29
    • 1970-01-01
    • 1970-01-01
    • 2018-08-02
    • 1970-01-01
    • 2016-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多