部署合约是否意味着在区块链中创建一个新区块?
Does deploy a contract mean create a new block in blockchain?
我正在使用以太坊网络部署智能合约。合约是用 Solidity 编写的,我正在使用 Remix IDE 进行部署和测试。我目前正在使用测试网络。
我不明白的是,当我将智能合约部署到以太坊网络时,它会在区块链上创建一个新区块吗?当它是 运行 时,我的合约可能会将交易发送到不同的帐户。这笔交易是否在智能合约的区块内?一旦我部署了合约,它应该在网络中 运行 。每当调用合约的方法时,它是否总是在区块中生成交易?
实时网络(例如以太坊主网或 Ropsten 测试网)和模拟器(例如 Remix VM 或 Ganache)之间略有不同。
当你想部署一个合约时,它的编译字节码作为没有收件人的交易的 data
字段传递(to
字段被省略)。
在实时网络上,交易被广播到网络,并在内存池中等待被挖掘。
当矿工挖出这笔交易时,他们机器上的 EVM 会计算在执行期间发生的状态变化(换句话说,合约部署)并广播状态变化(例如,将合约字节码存储在新的创建地址存储)到网络的其余部分。
但是,EVM 模拟器的每个实例通常都在一台机器上运行(例如,如果是 Remix,则在您的浏览器中运行)并且无法访问矿工网络。另外在开发过程中每次都等待外部矿工来挖掘你的交易是无效的。
因此,当您在模拟器上发送交易时,它会在本地执行并立即包装在一个新块中。
所以回答你的问题:
Does deploy a contract mean create a new block in blockchain?
- 实时网络 - 没有
- 模拟器 - 是
Whenever there is a method call on the contract, does it always generate a transaction in the block?
事务(读写)和调用(只读)之间存在差异。对于交易,请参见上文。只读调用根本不会被挖掘(因此它们是免费的),它们只会在您的节点提供者的机器上(或在模拟器中)被调用。
我正在使用以太坊网络部署智能合约。合约是用 Solidity 编写的,我正在使用 Remix IDE 进行部署和测试。我目前正在使用测试网络。
我不明白的是,当我将智能合约部署到以太坊网络时,它会在区块链上创建一个新区块吗?当它是 运行 时,我的合约可能会将交易发送到不同的帐户。这笔交易是否在智能合约的区块内?一旦我部署了合约,它应该在网络中 运行 。每当调用合约的方法时,它是否总是在区块中生成交易?
实时网络(例如以太坊主网或 Ropsten 测试网)和模拟器(例如 Remix VM 或 Ganache)之间略有不同。
当你想部署一个合约时,它的编译字节码作为没有收件人的交易的 data
字段传递(to
字段被省略)。
在实时网络上,交易被广播到网络,并在内存池中等待被挖掘。
当矿工挖出这笔交易时,他们机器上的 EVM 会计算在执行期间发生的状态变化(换句话说,合约部署)并广播状态变化(例如,将合约字节码存储在新的创建地址存储)到网络的其余部分。
但是,EVM 模拟器的每个实例通常都在一台机器上运行(例如,如果是 Remix,则在您的浏览器中运行)并且无法访问矿工网络。另外在开发过程中每次都等待外部矿工来挖掘你的交易是无效的。
因此,当您在模拟器上发送交易时,它会在本地执行并立即包装在一个新块中。
所以回答你的问题:
Does deploy a contract mean create a new block in blockchain?
- 实时网络 - 没有
- 模拟器 - 是
Whenever there is a method call on the contract, does it always generate a transaction in the block?
事务(读写)和调用(只读)之间存在差异。对于交易,请参见上文。只读调用根本不会被挖掘(因此它们是免费的),它们只会在您的节点提供者的机器上(或在模拟器中)被调用。