以太坊智能合约生命周期

简介: 之前我们写过如何将以太坊智能合约通过truffle部署到区块链上。在本文将进一步了解以太坊智能合约。智能合约的建立当我们编写完成一个智能合约后,当它被部署到区块链时,我们可能会有一些操作要做。

之前我们写过如何将以太坊智能合约通过truffle部署到区块链上。在本文将进一步了解以太坊智能合约。

智能合约的建立

当我们编写完成一个智能合约后,当它被部署到区块链时,我们可能会有一些操作要做。例如,设置一些变量。与面向对象编程语言中的类一样,智能合约也有一个构造函数constructor。构造函数是与合约同名的函数。

pragma solidity ^0.4.11;

contract power {

    uint value;

    /* 这个功能在初始化的时候执行 */
    function power(uint number, uint p) { 
      value = number ** p;
    }

    function getPower() constant returns (uint) {
       return value;
    }

}

如果你尝试部署此合约,你将看到必须向合约交易提供两个参数。

samrt-contracts-lifecycle

如果我们将智能合约部署到区块链,我们将能够看到智能合约的执行代码,当我们读取存储的值时,它等于我们的power。

samrt-contracts-lifecycle

在部署时,构造函数constructor确实有助于自定义合约。传统的类大部分时间都是在对象被销毁时调用的析构函数。以太坊 智能合约也可能是这样的。

谁在与智能合约交互?

当你创建智能合约时,你可能需要知道在运行时谁与它交互。在以太坊区块链链中,actors(智能合同或钱包)通过他们的地址address来识别。如果你想知道调用函数的地址address,可以使用msg.sender访问它。存储地址可以让你根据交易创建者实现相应的逻辑。

假设我们想从Hello World教程中改进我们的Counter合约,并且只允许合约的创建者能够更新计数器。我们需要添加两个步骤:一个构造函数,它将存储创建者的地址和另外一个是增量函数,以确保它是调用函数的创建者。

下面是我们的Counter合约更新:

pragma solidity ^0.4.11;

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;
    }

}

所以我们目前的合约只允许最初的创造者增加计数器。

智能合约的销毁

再美好的事也会结束,再好的智能合约也会over!当使用销毁函数kill掉合约时,就不再可以与它进行交互了。要kill一个合约,你需要调用销毁函数selfdestruct(address)。提供一个地址作为参数,让你将存储在合约中的剩余钱传送到相应的地址。

当你执行一个销毁函数来破坏一个合约时,检查调用者的身份可以让你保护合约不会被任何人破坏。

pragma solidity ^0.4.11;

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()。为了实现语言的健壮性,重新命名了suicide()函数。

来看看,让我们调用我们的kill函数:

kill

几秒钟后,如果你尝试访问你的合约,你会看到,你不能再与它互动交互了。

killed
这样我们就简单了解了一个智能合约的生命周期。

安利一个教程: 以太坊dapp,主要是介绍使用node.js、mongodb、区块链、ipfs实现去中心化电商DApp实战,适合进阶。

相关文章
|
9月前
|
存储 安全 区块链
区块链智能合约DAPP开发|DAPP合约代币项目开发(案例说明)
区块链技术使用了分布式网络来实现去中心化
|
JSON JavaScript 前端开发
以太坊 – 部署智能合约到Ganache
将编译好的智能合约部署到本地的Ganache区块链网络。步骤如下:更新项目的配置文件,修改网络配置连接到本地区块链网络(Ganache)。创建迁移脚本,告诉Truffle如何部署智能合约。运行新创建的迁移脚本,部署智能合约。...
1493 0
以太坊 – 部署智能合约到Ganache
|
区块链
DAPP智能合约系统丨DAPP智能合约系统开发成功案例分析丨DAPP智能合约源码平台
QueryContract(contractName,method string,kvs[]*common.KeyValuePair,timeout int64)(*common.TxResponse,error)
|
存储 Rust 分布式计算
DAPP智能合约开发运营版,DAPP链上智能合约系统开发详细及源码
基于区块链技术的基础设施 区块链脱胎于BTC系统,从本质上讲,它是一个共享数据库,存储于其中的数据或信息,具有“不可伪造”、“公开透明”、“集体维护”等特征,基于这些特征,区块链奠定了坚实的“信任”基础,创造了可靠的“合作”机制。
DAPP智能合约开发运营版,DAPP链上智能合约系统开发详细及源码
|
存储 JavaScript 前端开发
什么是DAPP智能合约系统开发?链上DAPP智能合约系统开发原理及详细
 Web 3.0的纽带作用:   与DAPP浏览器相辅相成的是其底层网络架构Web 3.0,这是和信息互联网时代传统浏览器基于的Web 2.0完全不同的体系架构。区块链技术,尤其是ETH的出现使Web 3.0成为基于区块链进行价值传递的基础网络。
什么是DAPP智能合约系统开发?链上DAPP智能合约系统开发原理及详细
|
存储 安全 程序员
DAPP智能合约系统开发区块链智能合约系统模式开发
DApp智能合约系统开发,区块链智能合约app开发,DApp智能合约软件开发、现成DApp智能合约模式系统、DApp智能合约开发搭建、区块链智能合约系统定制开发、DApp智能合约开发需求及费用。 区块链智能合约(Smartcontract)是一种特殊协议,旨在提供、验证及执行合约。具体来说,智能合约是区块链被称之为“去中心化的”重要原因,它允许我们在不需要第三方的情况下,执行可追溯、不可逆转和安全的交易。
|
存储 安全 测试技术
智能合约中存在的3种最常见的误解
智能合约中存在的3种最常见的误解
185 0
|
区块链
智能合约有哪些特点?DAPP智能合约系统模式开发
智能合约系统开发,DAPP智能合约系统模式开发
238 0
智能合约有哪些特点?DAPP智能合约系统模式开发
|
JavaScript 测试技术 区块链
使用truffle部署以太坊智能合约到区块链
truffle是以太坊(ethereum)开发智能合约(smart contract)过程中最受欢迎的框架,本教程来安装构建一个基本的Truffle项目并部署一个智能合约到区块链。
2159 0
|
移动开发 前端开发 JavaScript
开发基于以太坊智能合约的DApp
最近要找个H5的前端写个简单的DApp,聊过几个H5的工程师,都被跟以太坊交互的部分吓住了。虽然网上有N多的教程,但是对于H5工程师来说,还是有些困难。分析其原因,在于不了解ganache-cli(原来叫testrpc)/web3/以太坊节点/metamask之间的架构关系。
1550 0