以太坊私链,也就是搭建属于自己的区块链,最常见的方式就是通过Geth(Go-Ethereum)搭建了,他可以算是比较真实的区块链平台了,唯一区别就是不需要挖矿,也就是不需要共识,Geth搭建私链时,我们需要配置创世块、bootnode、启动节点、挖矿等操作,搭建私链教程可点击此处。
测试环境中的公链,一些组织为了让开发者更方便的开发DApp,搭建了自己的以太坊平台并对外开放,这些测试平台的以太币可以免费获取,但每个账户获取的数量有限,不过也足以我们用来测试了,在下文的实践中用的也是这种方案。而测试平台有哪些呢,在我们安装了MetaMask插件以后,可以在里面找到。
以太坊,最后的环境肯定是以太坊了,不过我们在上线前一定要做好测试,因为区块链具有不可篡改性,我们的DApp在上线后出bug可是无法修复的,只能通过发布一个新的DApp,然后通知你的用户以后使用新地址,所以我们在设计合约时应当设置有无效标志位,尽早地告知调用者该合约已经废弃。
编程语言
编写一个DApp可以说是包括两部分,合约部分和业务逻辑部分。
智能合约
Solidity,类JavaScript,这是以太坊推荐的语言,也是最流行的智能合约语言,另外测试、调试Solidity有一个非常好的在线IDE–Remix,由以太坊团队推出的。由于考虑在线网络比较慢,可以使用本地IDE。
业务逻辑
业务逻辑部分即提供客户端与智能合约交互的接口,相当于目前BS结构中的后台逻辑,因此业务逻辑部分可部署在中心服务器中,而且在以太坊中每个智能合约函数的每一行代码都有固定的gas费用以及延时的,一些简单的逻辑应该交由业务逻辑处理,编写业务逻辑目前提供有以下几种语言:
JavaScript,主要是基于Web3.js这个库调用智能合约,本文例子也是使用JavaScript编写的。
Go,上述提到的以太坊私链搭建工具geth就是使用Go编写的。
Java
Ruby
Haskell
Rust
DApp原理
一个DApp被调用之前需要先部署到以太坊上,不管是私链,公链还是联盟链。故本章节分为两部分,DApp部署原理和调用原理。
部署
一个DApp由多个智能合约组成,部署一个DApp也就是同时部署多个智能合约,这里讲述一下部署一个智能合约的流程,如下图所示。
将编写好的Solidity智能合约通过RPC调用以太坊钱包或Web3.js等工具。
Web3.js发送合约源码到部署在以太坊节点的Solc编译器。
编译器返回合约字节码。
发送合约字节码和初始化参数到以太坊节点。
以太坊节点上EVM验证完成后,部署到全网的所有节点,完成后返回合约地址和应用二进制接口(ABI)。
这里推荐使用Remix进行部署,因为Remix不仅可以连接浏览器内嵌的以太坊VM,还可以和MetaMask联动,使用MetaMask当前所连的以太坊网络,而且Remix还可以调试部署好的合约,十分方便。在Remix上部署十分简单,选择部署的以太坊网络和填好合约初始化参数后,点击create按钮即可。如果我们选的是MetaMask当前的以太坊网络,则会跳转交易界面,因为部署合约本质上也是一笔交易,我们需要付交易手续费。
部署后的合约其实外部还不能调用,还需要我们上传源代码进行验证,不然别人不可能在不清楚源码情况下向合约发起交易,向你转账。
调用
部署好的合约我们就可以调用了,根据调用方式的不同,本文分为前端调用和后端调用。
前端调用相对来说简单一点,因为有MetaMask这个强大的插件,我们不必操心以太坊数据源,直接调用web3.currentProvider即可,下图展示了前端调用合约的一般流程,由于前端连接的Web3 Provider是与特定的以太坊节点相连,前端不需要管方法的签名,只需无脑调用合约中的方法即可。
至于后台调用就麻烦一点了,由于后台没有MetaMask这么方便的工具可调用,因此要是调用公链上的智能合约,只能使用特定账户的私钥签名方法后,并且以该账户的身份调用合约
审核编辑 黄昊宇
-
编程
+关注
关注
88文章
3587浏览量
93580 -
区块链
+关注
关注
110文章
15559浏览量
105750
发布评论请先 登录
相关推荐
评论