黑马程序员技术交流社区

标题: 一篇文章从技术层面看——以太坊与智能合约 [打印本页]

作者: 播妞    时间: 2018-5-9 15:12
标题: 一篇文章从技术层面看——以太坊与智能合约
随着区块链的越来越火,区块链应用也是越来越多,我们本篇文章主要讲述区块链巨头之一——以太坊相关的内容。
首先解释一下为什么介绍以太坊。毕竟市场上前有老牌劲旅比特币,后有风头正盛EOS。

原因如下:
1.与比特币相比,在以太坊上编程更加灵活。比特币作为第一个区块链应用,自产生起就不可避免的金融属性,所以比特币上的编程也更偏向于金融有关的业务,不够灵活。相比之下,在以太坊上编程用的是类js语言solidity(后续文章会专门介绍这个),是图灵完备的语言,所以处理的业务也就不再限制于金融方面,更加灵活。
2.和EOS相比,以太坊已经运行了很多程序,目前没有什么大的问题出现,而目前EOS的公链还没上线 ,尽管EOS白皮书介绍其功能更加完善,市场仍处于观望状态。
3.对开发者来说,以太坊支持多种语言的客户端,可以适应不同系列的开发语言和操作系统,入门更方便。

技术入门
如果是想深入的进行这门技术开发的话,建议利用好下面的一些资源。
以太坊官网:https://www.ethereum.org/
以太坊爱好者:http://ethfans.org/
以太坊白皮书:
http://ethfans.org/wikis/%E4%BB%A5%E5%A4%AA%E5%9D%8A%E7%99%BD%E7%9A%AE%E4%B9%A6
在从项目的早期,为了适应不同系列的开发语言和操作系统,以太坊的团队就实现了很多个的客户端。如下图所示的表格,有使用各种开发语言来实现的以太坊客户端。客户端的多样性对于以太坊生态系统来说是一个巨大 的优势。

各个语言版本的客户端如下:
但是,对于一些准备做以太坊开发的初学者来说,建议使用mist开发环境。因为mist的开发相比较于下载geth开发比较简单,快捷。如果喜欢自主性更大的开发环境,建议使用geth+钱包开发。
Mist是一个去中心化的分散的web3.0应用的浏览器,geth(go-ethereum)是go语言的客户端。
本文以mist为例:
1)下载mist客户端
https://github.com/ethereum/mist/releases
2)做一个映射,做以太坊开发首先要同步以太坊数据,一般情况下会把节点数据同步到系统盘,截至写文章的时候公链数据有200多G,使系统盘负载过大,最好是做一个映射。操作步骤如下:
a)剪切C:\Users\PHD\AppData\Roaming\Ethereum,存储到 D:\blockchain\。切记,这里是剪切,如果C:\Users\PHD\AppData\Roaming\这个目录下还有“Ethereum”文件夹,会导致下一步的命令报错,“无法创建该文件”。
b)打开命令行窗口CMD,敲入命令:mklink /J C:\Users\PHD\AppData\Roaming\Ethereum D:\blockchain\Ethereum
显示,成功创建符号链接。
c)打开mist以太坊钱包,验证是否成功
3)把离线节点拷贝到所需文件夹下面。由于以太坊节点数据太大,等着mist自己更新需要几天的时间,速度比较慢,最快的方法是下载网上对应的镜像,放到所需文件夹下面,然后打开mist验证是否成功
以上就是搭建简单以太坊开发环境的所有步骤了,接着就可以进行智能合约的开发。

在开发智能合约之前 我们要先说明一下什么是智能合约。
智能合约是一套以数字形式定义的承诺,承诺控制着数字资产并包含了合约参与者约定的权利和义务,由计算机系统自动执行。智能合约程序不只是一个可以自动执行的计算机程序,它本身就是一个系统参与者,对接收到的信息进行回应,可以接收和储存价值,也可以向外发送信息和价值。这个程序就像一个可以被信任的人,可以临时保管资产,总是按照事先的规则执行操作。(目前最靠谱的解释)

通常会把写区块链程序改称写智能合约。虽然比特币(Bitcoin)上也能写智能合约,但是比特币所支持的语法仅与交易有关,能做的事情比较有限。因此目前提到写智能合约,通常指的是支持执行图灵完备程序的以太坊(Ethereum)区块链。

智能合约可以做什么?
目前最常见的智能合约是各种加密货币合约,开发者可以很容易地透过部署一个智能合约,来提供运行于以太坊上的新加密代币。如果这份智能合约相容于ERC20标准1,开发者不需要重新开发从挖矿到交易的整个代币生态系,你的新加密代币就可以直接使用支持以太坊的电子钱包。
智能合约也可以用来运作各种公开公正的自动服务机构(DAO,权力下放自治组织)。透过分散在全球各节点上运作的智能合约,所有运作与决策都是公开透明的,降低了交易的不确定性。

智能合约和一般程序的差异
1)整合金流容易
2)部署时与后续写入时需要费用
3)存储资料的成本更高
4)部署后无法更改

将智能合约部署到区块链的流程
合约写好后,把.sol编译成EVM(Ethereum Virtual Machine)可用的二进制文件(Contract ByteCode)才能部署到Ethereum的区块链上执行,部署到区块链上的合约会有一个钱包地址(地址)和一样格式的合约地址(Contract Address)
部署后智能合约可自动执行。后续call智能合约的时候,使用者可以使用部署合约的钱包地址(所有者帐户),或依据编写的智能合约条件,让其他钱包地址也能呼叫这个智能合约。 呼叫智能合约,其实就是向这个合约地址发起交易,只是交易的不只是代币,而可以是智能合约提供的呼叫方法。
智能合约范例:
如何编写智能合约?
Ethereum上的智能合约需要使用solidity语言来编写,关于solidity语法的详细介绍,可以参考后面的文章
黑马程序员Go语言与区块链学科会有智能合约和以太坊以及EOS的区块链知识体系的系统讲解。
课程分为八个阶段
第一阶段Go语言开发实战
第二阶段Go语言高并发服务器开发
第三阶段去中心化前端开发与web服务器开发
第四阶段区块链密码学安全理论与开发
第五阶段区块链与智能合约开发
第六阶段区块链分布式应用开发
第七阶段区块链系统框架开发
第八阶段Go与区块链面试强化


人才培养方向包含密码学安全开发、区块链系统开发、区块链应用开发、Go语言Web开发、Go语言微服务开发、Go语言分布式开发。

Go语言入门免费资源-黑马出品回帖即可下载入门级视频资源


后续更多区块链精品免费课程分享,大家可持续关注黑马程序员Go语言与区块链学科,对本学科感兴趣的同学也可添加播妞QQ3414556270获取更多相关资源~
作者:传智播客Go语言与区块链学院



作者: 热爱党和人民    时间: 2018-5-9 21:39
赞一个赞一个赞一个赞一个赞一个赞一个赞一个赞一个赞一个赞一个
作者: panfan    时间: 2018-5-24 14:32
生活不止眼前的苟且,还有诗和远方的田野
作者: 100387510    时间: 2018-5-24 21:32
看看回复后有什么好东西
作者: liangrun    时间: 2018-6-6 14:35
庞氏骗局
作者: alarick    时间: 2018-6-17 13:29
水电费水电费
作者: baby14    时间: 2018-6-20 07:39
多谢分享
作者: 4db    时间: 2018-6-24 15:49
666666666666
作者: 000000001    时间: 2018-8-2 17:13
大事是谁所所所所所所所所所所所所所所所所所所所
作者: IT的威特    时间: 2019-2-28 01:59
感谢分享
作者: zhaohb2020    时间: 2020-4-6 14:47
回复看什么
作者: wer4d    时间: 2022-2-27 22:54
22222222222222222222222




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2