主页 > imtoken官方版下载安卓最新版 > Solidity语法---以太坊智能合约生命周期
Solidity语法---以太坊智能合约生命周期
合约对象初始化
在 Solidity 中编写合约与面向对象的编程语言非常相似。 我们可以通过构造函数来初始化合约对象。 构造函数是一个函数,其方法名称与契约名称相同。 创建合约时,会调用构造函数来初始化状态变量的数据。
pragma solidity ^0.4.4;
contract Power {
uint value;
/* 合约初始化时会调用构造函数 */
function Power(uint number, uint p) {
value = number ** p;
}
function getPower() constant returns (uint) {
return value;
}
}
同一个合约可以同时有两个构造函数吗?
从上图不难看出,当我们在同一个合约中有多个构造函数时,会出现如下错误信息:
More than one constructor defined.
function Power(uint number) {
^
Spanning multiple lines.
Another declaration is here
如果您尝试部署 Power 合约,您将看到您需要为合约交易提供两个参数。
合约部署成功后,我们会看到getPower函数返回的值。
构造函数(constructor)会在合约创建时初始化数据。 传统的类会在对象被销毁时调用析构函数(destructor)。 在以太坊智能合约中,销毁合约时会自动调用析构函数。 相关数据。
合同所有人
在创建合约对象的时候,在构造函数中保存了我们当前合约的合约地址,在increment函数中加入了判断。 只有在我们的合约内部调用时,状态变量 count 才会加 1,否则不会执行其他操作。
pragma solidity ^0.4.4;
contract Counter {
uint count = 0;
address owner; //存储Counter合约owner
function Counter() {
owner = msg.sender; // 存储Counter合约owner
}
function increment() public {
if (owner == msg.sender) { // 判断是谁在调用`increment`方法
count = count + 1;
}
}
/* 读取count的值 */
function getCount() constant returns (uint) {
return count;
}
}
因此,我们在合约中增加了一层保护。 只有合约的创建者可以调用 increment 方法将计数加 1。
析构函数——合约的销毁
最完美的东西是有始有终的,契约也一样,也可以结束。 当合约被 kill 方法杀死后销毁以太坊,我们将无法再与合约进行交互。 如果一个合约被销毁,当前地址指向一个僵尸对象,僵尸对象调用的任何方法都会抛出异常。 如果要销毁合约,需要调用selfdestruct(address)来销毁它。
pragma solidity ^0.4.4;
contract Counter {
uint count = 0;
address owner;
function Counter() {
owner = msg.sender;
}
function increment() public {
if (owner == msg.sender) {
count = count + 1;
}
}
function getCount() constant returns (uint) {
return count;
}
function kill() {
if (owner == msg.sender) { // 检查谁在调用
selfdestruct(owner); // 销毁合约
}
}
}
在其他一些较早的教程中销毁以太坊,您可能会看到 suicide() 方法,但为了更好的语言可读性,该方法已重命名。 如果需要,您可以直接调用 selfdestruct() 方法。
接下来调用我们的kill方法看看效果:
执行kill方法,过一会刷新,你会发现刚才的合约没有了。
原文:以太坊智能合约生命周期