solidity学习记

合约的实例会一直运行在区块链上吗

合约的实例不会一直运行在区块链上,而是在执行完交易后,将其状态存储在区块链上。当需要访问合约时,可以通过调用其函数来重新激活它,执行相应的操作,并更新其状态。

当一个合约被部署到区块链上后,它的状态将被永久存储在区块链上,并且可以通过合约地址来访问它。每当合约被调用时,它会在区块链上执行,但是当它执行完毕后,它的状态将再次被保存在区块链上,并且合约实例将被删除。

需要注意的是,每次调用合约的函数时,都需要支付一定的燃气费用。因此,需要仔细设计合约的函数,以确保它们的执行效率和燃气消耗在合理的范围内。

创建一个合约的实例有几种方式

在以太坊区块链上,可以通过以下几种方式来创建合约实例:

  1. 部署合约:使用 Solidity 或其他智能合约语言编写合约代码,并使用以太坊客户端(如 Remix,Truffle 或 Web3.js)部署到区块链上。部署合约时,会创建一个新的合约实例,并分配一个唯一的合约地址。

  2. 复制合约:可以通过在 Solidity 中使用 clone 函数来复制一个已经存在的合约实例。clone 函数将复制合约的代码和状态,并创建一个新的合约实例。

  3. 调用合约:可以通过调用一个已经存在的合约的函数来创建新的合约实例。合约代码可以在函数中使用 Solidity 的 new 关键字来创建新的合约实例,并将其状态分配给一个新的合约地址。

需要注意的是,每次创建合约实例时,都需要支付一定的燃气费用,因此需要仔细设计合约代码,以确保合约实例的创建和操作效率和燃气消耗在合理的范围内。

以太坊上可以有同名合约吗

以太坊上可以有同名合约,但是合约的地址必须是唯一的。不同的合约可以有相同的名称,但是它们的地址是不同的。因此,合约的名称并不是唯一标识合约的方式,合约地址才是真正的唯一标识。

合约和合约实例是两个不同的地址吗

是的,合约和合约实例是两个不同的地址。合约是一个智能合约的代码,它被编译成字节码并部署到区块链上。合约实例是在部署合约后创建的,它是合约的一个运行实例,有自己的地址和状态。每次调用合约时,都会创建一个新的合约实例,它们都有不同的地址。

合约A内部会new 合约B,我只部署合约A,合约B会被自动部署吗

如果在合约A的代码中有创建合约B的代码,则在执行合约A时,合约B会被自动部署。但如果没有创建合约B的代码,则合约B不会被自动部署。在这种情况下,您需要手动部署合约B,并将其地址传递给合约A的构造函数。

solidity有哪些访问控制符

Solidity有以下访问控制符:

  1. public:公共访问控制符,可以被任何人访问。
  2. private:私有访问控制符,只能在当前合约中被访问。
  3. internal:内部访问控制符,只能在当前合约及其派生合约中被访问。
  4. external:外部访问控制符,只能在当前合约之外被访问。通常用于合约之间的交互。
posted @ 2023-03-22 09:43  woncode  阅读(27)  评论(0编辑  收藏  举报