JavaEE鸿蒙应用开发HTML&JS+前端Python+大数据开发人工智能开发电商视觉设计软件测试新媒体+短视频直播运营产品经理集成电路应用开发(含嵌入式)Linux云计算+运维开发C/C++拍摄剪辑+短视频制作PMP项目管理认证电商运营Go语言与区块链大数据PHP工程师Android+物联网iOS.NET

【Go语言与区块链】一篇文章从技术层面看——以太坊与智能合约

来源:黑马程序员

浏览55686人

2019.05.20

随着区块链的越来越火,区块链应用也是越来越多,我们本篇文章主要讲述区块链巨头之一——以太坊相关的内容。

首先解释一下为什么介绍以太坊。毕竟市场上前有老牌劲旅比特币,后有风头正盛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

在从项目的早期,为了适应不同系列的开发语言和操作系统,以太坊的团队就实现了很多个的客户端。如下图所示的表格,有使用各种开发语言来实现的以太坊客户端。客户端的多样性对于以太坊生态系统来说是一个巨大 的优势。

各个语言版本的客户端如下:

1.png

但是,对于一些准备做以太坊开发的初学者来说,建议使用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:UsersPHDAppDataRoamingEthereum,存储到 D:blockchain。切记,这里是剪切,如果C:UsersPHDAppDataRoaming这个目录下还有“Ethereum”文件夹,会导致下一步的命令报错,“无法创建该文件”。

b)打开命令行窗口CMD,敲入命令:mklink /J C:UsersPHDAppDataRoamingEthereum D:blockchainEthereum

显示,成功创建符号链接。

c)打开mist以太坊钱包,验证是否成功

3)把离线节点拷贝到所需文件夹下面。由于以太坊节点数据太大,等着mist自己更新需要几天的时间,速度比较慢,最快的方法是下载网上对应的镜像,放到所需文件夹下面,然后打开mist验证是否成功

以上就是搭建简单以太坊开发环境的所有步骤了,接着就可以进行智能合约的开发。

在开发智能合约之前 我们要先说明一下什么是智能合约。

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

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

智能合约可以做什么?

目前最常见的智能合约是各种加密货币合约,开发者可以很容易地透过部署一个智能合约,来提供运行于以太坊上的新加密代币。如果这份智能合约相容于ERC20标准1,开发者不需要重新开发从挖矿到交易的整个代币生态系,你的新加密代币就可以直接使用支持以太坊的电子钱包。

智能合约也可以用来运作各种公开公正的自动服务机构(DAO,权力下放自治组织)。透过分散在全球各节点上运作的智能合约,所有运作与决策都是公开透明的,降低了交易的不确定性。

智能合约和一般程序的差异

1)整合金流容易

2)部署时与后续写入时需要费用

3)存储资料的成本更高

4)部署后无法更改

将智能合约部署到区块链的流程

合约写好后,把.sol编译成EVM(Ethereum Virtual Machine)可用的二进制文件(Contract ByteCode)才能部署到Ethereum的区块链上执行,部署到区块链上的合约会有一个钱包地址(地址)和一样格式的合约地址(Contract Address)

3.png

部署后智能合约可自动执行。后续call智能合约的时候,使用者可以使用部署合约的钱包地址(所有者帐户),或依据编写的智能合约条件,让其他钱包地址也能呼叫这个智能合约。 呼叫智能合约,其实就是向这个合约地址发起交易,只是交易的不只是代币,而可以是智能合约提供的呼叫方法。

4.png

智能合约范例:

5.png

如何编写智能合约?

Ethereum上的智能合约需要使用solidity语言来编写,关于solidity语法的详细介绍,可以参考后面的文章
黑马程序员Go语言与区块链学科会有智能合约和以太坊以及EOS的区块链知识体系的系统讲解。
课程分为八个阶段
第一阶段Go语言开发实战
第二阶段Go语言高并发服务器开发
第三阶段去中心化前端开发与web服务器开发
第四阶段区块链密码学安全理论与开发
第五阶段区块链与智能合约开发
第六阶段区块链分布式应用开发
第七阶段区块链系统框架开发
第八阶段Go与区块链面试强化


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

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