区块链智能合约

xiaoxiao2021-03-01  8

智能合约这个术语是跨领域法律学者尼克·萨博(Nick Szabo)提出来的,他对智能合约的定义是“一个智能合约是一套以数字形式定义的承诺(promises),包括合约参与方可以在上面执行这些承诺的协议。”换成更加通俗的描述就是“智能合约是一个在计算机系统上,当一定条件被满足的情况下,可以被自动执行的合约。”

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

智能合约就是区块链环境里的可执行代码。 2.搭建以太坊私有链(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”字样。 3.开发一个属于自己的最简单“众筹”合约 假设我是个骗子,我写了一个漂亮的白皮书,然后我需要开发一个众筹的智能合约,让大家往这个智能合约上打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名下。 4.后记 你或许不太懂上面代码的具体含义,或者实际动手操作起来有一定难度,但是通过这么一个演示,你应该明白了: 通过廖廖几行代码,就可以实现一个简单的“众筹”,如果你相信我白皮书里说的。其实,最简单的众筹是:直接给我转账,如果没有白皮书,就依赖于你是否信任我这个人。 所以ICO时可信度可以这么描述: 1)白皮书有一定的可信度,主要目的是为了信息透明,以后可以看是不是这么做的,但不能完全相信白皮书; 2)团队的可信度更高,说白了投资一个ICO更多的是看中这个团队,而某些项目看中某个人也是有可能的; 3)众筹智能合约的代码可信度最高,因为通过阅读代码可知道,发起方是否可以随意提取代码。比如我上面这个智能合约,懂行的人一看就知道有问题。 转自:https://www.jianshu.com/p/3aa80732ed73
转载请注明原文地址: https://www.6miu.com/read-3450218.html

最新回复(0)