资讯专栏INFORMATION COLUMN

区块链智能合约入门:Hello world(1)

felix0913 / 1321人阅读

摘要:区块链入门也从最基础的智能合约开始。在正式部署执行智能合约之前,我们需要在电脑上安装。这时需要调用支付部署智能合约所需要的费。显示智能合约的内容是什么,在这里是。是析构函数,用于销毁数据,终止合约。现在,钱仍然被锁在合约里,永久冻结。

Hello world 是最简单的程序之一,也是大部分程序员编写的第一个程序。区块链入门也从最基础的Hello world智能合约开始。

在正式部署执行Hello world智能合约之前,我们需要在电脑上安装MetaMask for CMT。这是一个安装在Chrome 浏览器的钱包工具,它的主要功能是管理 CyberMiles 帐号私钥,实现从网页上直接支付 CMTs (包括gas 费)等功能。

安装过程比较简单,去Chrome 应用商店中下载插件MataMask for CMT,打开开发者模式。

如果Chrome 浏览器中已经安装了其他版本的MetaMask,为了不影响使用,最好暂时停止使用其他版本的MetaMask,只留Metamask for CMT激活。

安装好MetaMask for CMT,生成一个新的 CyberMiles 帐号来存储 CMTs,在最上方选择Main CyberMiles Network 或CMT Test Network。

MetaMask 需要有真实的CMT或者test CMT来支付执行智能合约的gas 费,分别对应主链状态、测试链状态。

CMT转账速度非常快,差不多10秒就到账了,并且不用支付gas费,转账体验+1分!

在 Chrome 里打开Remix for CMT,将写好的Hello World智能合约代码放进中间的代码编辑区,当然,你也可以选择自己写代码。

之后点击右侧的 Start to compile, 编译器会自动检查这段代码是否存在常规性错误。没有问题的话,编译器会自动识别出该段合约的名称,也就是 Contract 后面的Greet。

如果有问题,编译器会给出提示,根据提示修改代码,再次编译即可。

检查代码没有问题后,就可以把Greet智能合约部署到 CyberMiles 区块链了。点击右侧最上方的Run,然后点击Deploy。这时需要调用MetaMask for CMT 支付部署智能合约所需要的gas 费。

一般情况下,MetaMask 的支付页面会自动跳出,点击 Submit 进行支付就可以了。如果没有自动跳出,手动点击插件就好了。可以看到,部署这个合约上链只需要花费0.000489个CMT。

支付完gas 费后,右下方Deployed Contracts 处就可以看到,我们的合约已经在CyberMiles 链上部署好了。

红色的terminate 可以终止这个合约,但只有合约owner 才可以执行这项操作,终止合约同样需要支持少量gas 费。

greet 显示智能合约的内容是什么,在这里是Hello World。当然,Hello World 这个词只是程序员的选择。作为智能合约的开发者,你可以让 greet() 返回任何字符 — 可以是一首歌,一篇文章,一本书,或者是一段加密的文字。

owner 显示这个合约的所有权归哪个地址所有。你为这个合约支付部署gas费的账号地址就是合约的所有者。

同时用区块浏览器www.cmttracking.io/查询交易地址信息,可以看到刚刚创建的合约地址。如果你的朋友有这个合约地址,在 At Address 栏内输入合约地址,点击At Address 就可以收到别致的智能合约问候啦!

我们上面知道怎么用Hello World智能合约在区块链存一段话,并让世界上任何人看见这段话。那么,这是怎么在代码里实现的呢?

pragma lity ^1.2.4;

这是智能合约所用的代码语言及版本。

contract Greet {
    
  function greet() {
  
  }

  function terminate() {
  
  }
}

以上代码介绍了智能合约的名字Greet,以及两个功能,greet和terminate。

address public owner;
 modifier onlyOwner() {
        assert(msg.sender == owner);
        _;
    }

    constructor () public {
        owner = msg.sender;
    }

以上的代码设置了合约的owner,owner的地址信息是公开的。信息发送者,也就是谁支付了gas费,让合约能够部署到链上,谁就是owner,并且定义了只有owner能够修改这个合约。

function greet() public pure returns (string) {
      return "Hello world";
  }

以上代码表明当你调用greet()时,就会出现 Hello World。这个功能只是从区块链上读取数据,所以不需要 gas 费用。这里你可以把 Hello World 改成任何文字。

 function terminate() external onlyOwner {
     selfdestruct(owner);   }

这就是智能合约最开始定义的terminate 终止合约的功能,并且定义了只有Owner可以执行这项功能。selfdestruct是析构函数,用于销毁数据,终止合约。

这个最基础的合约既设置了合约的Owner,同时也设置了Owner 能够销毁合约,当执行selfdesruct时,合约里的钱也会返还给Owner。

因为合约地址与钱包地址长地非常像,并且长度也一致,如果不小心把币打到了合约地址,一般情况下,是无法找回的。但如果你知道合约的owner是谁,可以联系合约的owner,在销毁合约时拿回你的资产。

这只是个人的小损失,如果项目方没有认真地对待代码,带来的资产损失是非常严重的。非常典型的案例是,今年7月份,Polkadot 有超过513,774.16 ETH 被冻结在Parity钱包中,就是因为合约中的 owner 被人设成 null 了,因此没有人可以终止合约,拿回存在合约里的钱。现在,钱仍然被锁在合约里,永久冻结。

谨慎对待,认真审查每一段代码,尤其是涉及到钱的代码,这是每个程序员该有的素质。

这是最简单最基础的Hello World,完整代码可去github查看。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/24533.html

相关文章

  • 智能合约开发环境搭建及Hello World合约

    摘要:今天我们来一步一步从搭建以太坊智能合约开发环境开始,讲解智能合约的如何编写。开发环境搭建安装强烈建议新手使用来进行开发。第行修改部署账户为新账户索引,即使用新账户来部署合约。 本文首发于深入浅出区块链社区原文链接:智能合约开发环境搭建及Hello World合约原文已更新,请读者前往原文阅读 如果你对于以太坊智能合约开发还没有概念(本文会假设你已经知道这些概念),建议先阅读入门篇。就先...

    Winer 评论0 收藏0
  • 区块技术学习指引

    摘要:引言给迷失在如何学习区块链技术的同学一个指引,区块链技术是随比特币诞生,因此要搞明白区块链技术,应该先了解下比特币。但区块链技术不单应用于比特币,还有非常多的现实应用场景,想做区块链应用开发,可进一步阅读以太坊系列。 本文始发于深入浅出区块链社区, 原文:区块链技术学习指引 原文已更新,请读者前往原文阅读 本章的文章越来越多,本文是一个索引帖,方便找到自己感兴趣的文章,你也可以使用左侧...

    Cristic 评论0 收藏0
  • 工厂模式管理多个以太坊solidity智能合约

    摘要:在新智能合约的构造函数中,将引用我们的合约工厂的地址。以太坊,主要是针对工程师使用进行区块链以太坊开发的详解。以太坊入门教程,主要介绍智能合约与应用开发,适合入门。这里是原文用工厂模式管理多个智能合约 我们写了一份小的计算合约作为Hello World。如果我们可以创建一个允许用户创建自己的计数器的合约怎么办? showImg(https://segmentfault.com/img/...

    leone 评论0 收藏0
  • 以太坊是什么 - 以太坊开发入门指南

    摘要:以太坊是什么以太坊是一个建立在区块链技术之上,去中心化应用平台。运行环境以太坊虚拟机是以太坊中智能合约的运行环境。是由以太坊客户端提供的是典型的开发以太坊时使用的客户端,基于语言开发。 本文首发于深入浅出区块链社区原文链接:以太坊是什么 - 以太坊开发入门指南原文已更新,请读者前往原文阅读 很多同学已经跃跃欲试投入到区块链开发队伍当中来,可是又感觉无从下手,本文将基于以太坊平台,以通俗...

    tomlingtm 评论0 收藏0
  • 区块平台EOSIO开发智能合约和dapp(一)

    摘要:与传统方式不同,在去中心化的网络及区块链上运行后端代码智能合约。这个博客涵盖了什么在本博客中,我将展示如何设置区块链并开发智能合约。 在我倾听Bettina Warburg的演讲之后,我对去中心化经济(dApps)的概念着迷。传统的Web应用程序是: 前端→后端→数据库 相比之下,dApp网站是: 前端→智能合约→区块链 例如,当你进入电子银行时,网页将调用后端代码来获取你的个人数据并...

    tylin 评论0 收藏0

发表评论

0条评论

felix0913

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<