如何在以太坊上发布自己的智能合约

作者: admin 分类: 区块链 发布时间: 2018-01-26 11:36 ė1,754 浏览数 6没有评论
文章转自王牌软件
站长推荐:NSetup一键部署软件
一键式完成美化安装包制作,自动增量升级,数据统计,数字签名。应对各种复杂场景,脚本模块化拆分,常规复杂的脚本代码,图形化设置。无需专业的研发经验,轻松完成项目部署。(www.nsetup.cn)

我们现在基本都知道以太坊是一个区块链应用开发平台,基于以太坊构建的网络和智能合约语言,我们可以实现各种各样的与现实世界接近的分布式应用(DApp)。很多人沉迷于数字货币的炒作以及对部分ICO项目的疯狂投资,但实际上,很多的项目正是利用大家对区块链,特别是智能合约不理解这种“信息不对称”,来实现让大家乖乖交出自己的ETH的。

今天通过下面一场实操告诉大家,智能合约开发没那么难,那些ICO白皮书里面宣传得花里胡哨的内容不要轻信,我们理应在懂得一定原理的基础上再去深入分析其价值是否成立。今天演示一个最简单的众筹合约如何实现。

一、智能合约的演变

先铺垫一下,大家看看从比特币到以太坊,智能合约是如何演变的。注意下方智能合约的位置,这个位置表明上方的应用(APP)必须通过智能合约来实现对应区块链网络的功能。

区块链架构

那么,我们看一个简单的例子,就是A转账给B,在比特币和以太坊中大概都怎么实现的:

比特币脚本语言
智能合约(伪代码)

上面的示例对部分人可能比较难理解,但是也应该有一个大致的感受,就是:以太坊智能合约实现的方式貌似能看懂,比较易读。

事实也是这样的,智能合约使得区块链的扩展性更强,且实现上更简洁,从而让以太坊发展成为目前最大的一个区块链开发平台。为了理解方便,我对智能合约的定义是:

智能合约就是区块链环境里的可执行代码。

二、搭建以太坊私有链(Private-Net)

为了在以太坊上发布智能合约,必须安装以太坊Mist钱包,注意不能是imToken或Myehterwallet这类轻钱包。Mist钱包不仅包含钱包的所有功能,还包含智能合约部署功能,其他钱包目前不支持。

另外,这里有个背景需要说明:

区块链的形态分为三种:公有链,联盟链,私有链。比特币和以太坊目前是最大的公有链,联盟链是企业使用较多的,以IBM hyperledger fabric为代表,私有链是公司内部或者个人需要而搭建的一个网络。

默认情况下,启动Mist钱包会同步所有以太坊区块信息,即连接的是公有链,这会花费非常长的时间及占用大量的硬盘空间,所以除非自己真的需要发布智能合约,否则,尽量避免使用公有链。本次演示是在私有链中进行的,下面是基本的配置方法:

1、安装Ethereum Wallet钱包(即Mist钱包);

2、安装Geth(以太坊挖矿程序);

3、创建私有链:

参考http://blog.csdn.net/sportshark/article/details/51855007

私有链搭建成功后,每次先启动geth,使用命令“geth –identity “PICCetherum” –rpc –rpccorsdomain “*” –datadir “D:\Program Files\Geth\geth\chain” –port “30303″  –rpcapi “db,eth,net,web3″ –networkid 95518 console”,然后在打开Ethereum Wallet程序,这样连接的就是私有链,你在启动时和启动后都可以看见“Private-Net”字样。

三、开发一个属于自己的最简单“众筹”合约

假设我是个骗子,我写了一个漂亮的白皮书,然后我需要开发一个众筹的智能合约,让大家往这个智能合约上打ETH,等众筹时间到了,不论资金是否筹集满,我都把资金转移到自己账户上。

现在有一个基本的前提逻辑需要了解:

在给以太坊智能合约发送ETH的时候,这些ETH是被智能合约锁定的。

因此合约在开发时,一方面要支持大家发送货币,另外一方面要支持从这个合约里把锁定的ETH提取出来

打开钱包,进入Private-Net,点击界面“Contracts”,选择“Deploy New Contract”(部署新的智能合约):

部署合约界面

点击后可进入一个合约编辑界面,大家通过“SOLIDITY CONTRACT SOUCE CODE”找到。到了这个关键的地方,我这骗人的合约怎么实现呢?

Contract NBICO {

address public organizer;

event FundTransfer(address backer, uint amount, bool isContribution);

function NBICO() {

organizer = msg.sender;

}

function destory() {

if(msg.sender == organizer) {

suicide(organizer);

}

}

}

上面代码已通过实际操作成功,大家不妨事实。看下面这个截图:

合约概况

如上图所示,上面有三个合约,BIGONE是收到转账后合约锁定了100个ETH的情况,SMALL ONE 是我通过调用合约中的“destory”方法,实现“自杀”(suicide),即合约失效,同时资金转移到合约创建人的账户中,因此显示为灰色,且余额为0。

针对上面的代码解释如下:

1)定义了一个合约名为“牛逼的ICO”:NBICO

2)定义了组织者地址(organizer)和转账方法(FundTransfer)

3)在初始方法(NBICO)中设置organizer的地址;

4)在销毁方法(destory)中判断当前操作是否为组织人organizer发起,如果是,则进行“自杀”(suicide),自杀后,智能合约不可用,智能合约上锁定的资金全部转移到organizer名下。

四、后记

你或许不太懂上面代码的具体含义,或者实际动手操作起来有一定难度,但是通过这么一个演示,你应该明白了:

通过廖廖几行代码,就可以实现一个简单的“众筹”,如果你相信我白皮书里说的。其实,最简单的众筹是:直接给我转账,如果没有白皮书,就依赖于你是否信任我这个人

所以ICO时可信度可以这么描述:

1)白皮书有一定的可信度,主要目的是为了信息透明,以后可以看是不是这么做的,但不能完全相信白皮书;

2)团队的可信度更高,说白了投资一个ICO更多的是看中这个团队,而某些项目看中某个人也是有可能的;

3)众筹智能合约的代码可信度最高,因为通过阅读代码可知道,发起方是否可以随意提取代码。比如我上面这个智能合约,懂行的人一看就知道有问题。

因此,众筹智能合约必须开源!!!

https://www.jianshu.com/p/3aa80732ed73



只回答业务咨询点击这里给我发消息 点击这里给我发消息

学习日记,兼职软件设计,软件修改,毕业设计。

本文出自 学习日记,转载时请注明出处及相应链接。

本文永久链接: https://www.softwareace.cn/?p=1724

0

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">


Ɣ回顶部

无觅相关文章插件,快速提升流量