博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
深入浅出以太坊智能合约
阅读量:6114 次
发布时间:2019-06-21

本文共 1653 字,大约阅读时间需要 5 分钟。

Eth(以太坊)不知道你有没有听说过,ICO你一定听说过。但你知道ICO其实是借助Eth的智能合约实现的吗?什么是智能合约,Eth为啥这么火?智能合约的特点是什么,我怎么写智能合约?基于智能合约还有Dapp,即分布式app,Dapp又是什么?

本系列文章将全面讲述Ethereum的原理,特点和机制,以及涉及的各种概念。

区块链的运行机制

首先大家必须了解区块链。这里只做一个简单的描述,区块链就是一条全网账单链,链的使用者凭着自己的私钥加密交易内容,然后发送到网络上后,矿工通过比拼算力将内容加密提交到区块链上,同时获得使用者支付的手续费。

由于大家都在竞争加密内容,所以全网的算力都是使用者提交内容的见证人,因此区块链交易有迅速,不可逆的特点。

账户和消息传递

在区块链中的交易就是一个地址往另一个地址转移基本单位,Ethereum在这里将这种行为抽象成消息传递。每一次消息传递有发送者,也有接受者,消息内容可以是一笔交易,也有可能是一段信息。转账,其实就是一个消息传递。

在Ethereum中有两种账户,一种是人操作的正常账户,另一种是智能账户,正常账户中只有当前的Eth钱数,而智能账户中存储了两个东西:状态和代码,每当收到相应的消息时,这些代码就会被执行,从而改变其状态。这些账户也就是所谓的智能合约的载体。

这些智能账户就是智能合约的基础,要了解智能合约是怎么执行的,先要了解EVM。

EVM

前面提到了,真正的计算是在各个矿工的电脑中进行的。Ethereum的改进之处,就是在矿工收集足够消息,准备加密生成一个Block时,必须启动一个运行时环境,也就是EVM,来运行智能账户收到消息时对应的代码。

这个环境包含了一些内置变量,比如当前Block的Number,消息来源的地址等,还会提供一些API,一个stack供智能合约执行时使用。

通过EVM运行代码后,智能账户的状态发生了变化,然后矿工将这些状态同正常账户里的资金变化一起,加密生成新的block,链接到全网账单上。因此一个交易只会在一个Block里出现,并且要得到大多数算力的确认才能挂载,所以可以保证这些code执行的唯一性和正确性。

智能合约的示例

概念有时候比较晦涩,我们举一个募捐的智能合约的例子来帮助理解:

假设我们想向全网用户发起募捐,那就先可以定义一个智能账户,它有三个状态:当前募捐总量,捐款目标和被捐赠人的地址,然后给它定义两个函数:

接收募捐函数

接收募捐函数每次收到发过来的转账请求,先核对下发送者是否有足够多的钱(EVM会提供发送请求者的地址,程序可以通过地址获取到该人当前的区块链财务状况。)然后每次募捐函数调用时,都会比较下当前募捐总量跟捐款目标的比较,如果超过目标,就把当前收到的捐款全部发送到指定的被捐款人地址,否则的话,就只更新当前募捐总量状态值。

捐款函数

将所有捐款发送到保存的被捐赠人地址,并且将当前捐款总量清零。

每一个想要募捐的人,用自己的eth地址向该智能账户发起一笔转账,并且指明了要调用接受其募捐函数。

于是我们就有一个募捐智能合约啦,人们可以往里面捐款,达到限额后钱会自动发送到指定账户,全世界的矿工都在为这个合约进行计算和担保,不再需要人去盯着看有没有被挪用,这就是智能合约的魅力所在。

Ethereum最核心的智能合约机制大概就是这样,其实也并不复杂,接下来我们还会讲一下,ICO是怎么借助智能合约实现的,其实原理非常简单,等你明白了你一定会大吃一惊。

原文:http://baijiahao.baidu.com/s?id=1576362675066362360&wfr=spider&for=pc

--------------------------------------------------------------------

如果你希望高效的学习以太坊DApp开发,可以访问汇智网提供的最热门在线互动教程:

1. 实战入门教程
2. 

3. 其他更多内容也可以访问。

转载地址:http://ecjka.baihongyu.com/

你可能感兴趣的文章
Nancy之基于Nancy.Hosting.Self的小Demo
查看>>
android 控件各种颜色的半透明效果配置
查看>>
DMA(直接存储器存取)
查看>>
列表中的字典排序
查看>>
类型、元类型、泛型
查看>>
读写锁 ReentrantReadWriteLock
查看>>
dpkg:错误:正在解析文件 '/var/lib/dpkg/updates/0014' 第 0 行附近:在字段名 #padding 中有换行符问题的解决方法...
查看>>
【Linux】Ctentos下载
查看>>
vue中config/index.js:配置的详细理解
查看>>
springboot将项目源代码打包
查看>>
微信小程序之if操作
查看>>
【全网最全的博客美化系列教程】06.推荐和反对炫酷样式的实现
查看>>
Oracle 11g服务器安装详细步骤——图文教程(系统 windows server 2012 R2)
查看>>
SQL Server如何用SQL实现一批字符串的全部组合
查看>>
054 kafka内部机制
查看>>
Java反射机制
查看>>
php 7 新特性整理小结
查看>>
学会了这项技能,你就能获得任何想要的信息!
查看>>
IOS开发--解析复杂json数据
查看>>
linux之 修改磁盘调度算法
查看>>