以太坊开发从 0 到 1

对智能合约开发有了基本的了解之后,我来通过一个最小环境来开始第一个智能合约的开发。在正式开发之前,我需要了解一下程序开发的一个基本流程。通常情况下,我们会有三种环境,分别是开发环境、测试环境和生产环境。

开发环境主要是用来编写代码,保证程序可以正常执行,在这个过程中我们会编写一些测试用例来保证代码的正确性。当程序开发完成后,我们需要对我们编写代码进行仿真测试,即模拟真实的情况对系统的功能、性能进行系统测试,这个环境我们叫做测试环境。当整个系统全部测试完毕,最后我们会将智能合约代码部署到正式的公链上,这个环境我叫做生产环境。

下面我以以太坊开发为例。Ganache 是官方推荐的一个开发环境,特点是部署速度快,很适合日常进行智能合约的开发。Rinkeby 是以太坊的测试环境,与以太的主网比较类似,是专门用来进行智能合约测试的。不管是开发环境还是测试环境在智能合约部署和运行过程中都不需要花费真正的以太坊代币(ETH),在开发环境中 Ganache 在每次启动的时候都会默认给 10 个账户 100 个 ETH,测试环境中需要向测试网络借一定数量的以太代币进行测试。


下面我们通过搭建一个最小开发环境来开始第一个智能合约。最小开发环境会用的 remix,一个基于浏览器的开发集成环境https://remix.ethereum.org/,和一个钱包 MetaMask,Google Chrome 浏览器的一个插件。Remix 用来进行智能合约开发和部署,MetaMask 作为一个以太坊的浏览器进行身份认证、合约签署。


基本环境安装好以后,创建 MetaMask 的账户,在 remix 中编写你的智能合约代码。

Greetings.sol 就是使用 solidity 开发智能的合约文件,后缀是 sol。
// 这是指定 solidity 语言的版本
pragma solidity ^0.4.18;
// 这是定义一个合约名字是 Greetings
contract Greetings{
// 定义一个字符串变量 messages
string messages;
// 定义一个构造函数 Greetings(),类型是 public。合约执行时函数会自动执行
function Greetings() public{
//Greetings()函数的业务逻辑代码,这里比较简单只给 messages 赋值一个字符串
messages=”This is Eric first contract”;
}
// 定义一个函数 setGreetings(string _message),参数是字符串类型的变量,函数类型是 public,其它合约和 WEB 是可以调用的。
function setGreetings(string _message) public {
messages=_message;
}
// 定义一个函数 getGreetings(),函数类型是 public,其它合约和 WEB 是可以调用的。
function getGreetings()public view returns(string){
// getGreetings 函数的业务逻辑代码,这里比较简单返回之前在 setGreetings(string _message) 给变量 messages 的赋值。
return messages;
}
}

使用 MetaMask 钱包对应账户登录钱包,选择对应的测试网络,或者正式网络。这里需要说明是合约在部署和运行的时候是要消耗对应的 GAS,因此这里我们选择测试网络 Rinkeby,登录https://www.rinkeby.io官网借相应的代币。

在借用代币的时候可以使用第三方账号(Google、Facebook、Twitter)发布一个 MetaMask 账号地址,然后将帖子的 URL 粘贴到 rinkeby 网站的文本框中,直接选择 3 天 18.7 个以太。转账成功后就可以在 MetaMask 钱包里看到对应的代币。

最后一步点击 Run 部署智能合约,点击 Create,在钱包确认后,该合约就被部署在了 Rinkeby 的测试网络,可以看到对应智能合约地址。在 remix 里点击 setGreetings 给设置一个字符串,点击 getGreetings 方法可以获得对应的字符串。


至此我们已经完成一个智能合约的开发、部署。恭喜你已经步入了智能合约开发的世界。需要注意的是,以上只是作为智能合约程序员的基本能力,在一个实际项目中往往需要程序员、架构师和运营人员共同配合来完成一个项目的落地。