简单环境搭建---实现简单Hello World合约
我这里将使用当前最活跃的智能合约开发框架truffle为基础来开发。
就像一般网站或App开发一样,在提供公开服务之前,开发者会在自己用于写程序的电脑(又称作本机)或透过测试网络来测试程序执行的效果,测试完成后,才会部署到公开的网络上提供服务。开发区块链智能合约(程序)的过程也是如此。特别是公开链上所有写入或读取计算结果的操作都需要真金白银(虚拟代币),而且根据网络状况,每个公开链上的操作都需要要一小段反应时间(15秒~数分钟),这些等待颇浪费宝贵的开发时间。因此在开发的过程中,我将使用geth客户端,启动一个以太坊(开发者)网络节点。
此外,开发前还需准备一个合手的编辑器。我目前是使用Remix -Solidity IDE来开发。
一、Solidity安装
强烈建议新手使用Remix -Solidity IDE来进行开发。
Remix 是一个基于浏览器的Solidity,就可以不用安装Solidity,本文的Hello World也将基于Remix Solidity IDE来进行。
二、geth 安装
git clone https://github.com/ethereum/go-ethereum
sudo apt-get install -y build-essential golang
cd go-ethereum
make geth
安装完以后,就是把geth控制台启动。
三、启动环境
geth --datadir testNet --dev console 2>> test.log
执行命名后,会进入geth控制台,这时光标停在一个向右的箭头处,如下图:
命令参数说明(更多命令详解我会在接下来博文中介绍):
–dev 启用开发者网络(模式),开发者网络会使用POA共识,默认预分配一个开发者账户并且会自动开启挖矿。
–datadir 后面的参数是区块数据及秘钥存放目录。
第一次输入命令后,它会放在当前目录下新建一个testNet目录来存放数据。
console 进入控制台
2>> test.log 表示把控制台日志输出到test.log文件
四、准备账户
部署智能合约需要一个外部账户,先来看看分配的开发者账户,在控制台使用以下命令查看账户:
再来看一下账户里的余额,使用一下命令:
eth.getBalance(eth.accounts[0])
eth.accounts[0]表示账户列表第一个账户
开发者账户因余额太多,如果用这个账户来部署合约时会无法看到余额变化,为了更好的体验完整的过程,这里选择创建一个新的账户。
创建账户
使用以下命令创建账户:
personal.newAccount("xitou") xitou为新账户的密码,回车后,返回一个新账户。
现在查看下账户列表:
可以看到账户包含两个账户,新账户在第二个(索引为1)位置。
现在看看账户的余额:
可以看到新账户的余额为0
给新账户转账
我们知道没有余额的账户是没法部署合约的,那就从默认账户转1以太币给新账户,使用以下命令(请使用你自己eth.accounts对应输出的账户):
eth.sendTransaction({from:'0xd39e4470d6cb34b1efdbc500ca08e6bccb7715ea', to:'0x2df65f4920e2f4d69c48e070bfc08f6cc5f67c66', value: web3.toWei(1, "ether")})
再次查看新账户余额,可以新账户有1个以太币
解锁账户
在部署合约前需要先解锁账户(就像银行转账要输入密码一样),使用以下命令:
personal.unlockAccount(eth.accounts[1],"xitou")
解锁成功后,账户就准备完毕,接下来就是编写合约代码。
五、编写合约代码
现在来开始编写第一个智能合约代码,solidity代码如下:
在弹出的对话框中找到WEB3DEPLOY部分,点复制,粘贴到编辑器后,修改相应信息即可。
六、部署合约
将修改后的代码,复制回geth控制台里,回车后,看到输出:
说明合约已经部署成功。
现在查看下新账户的余额:
是不是比之前转账的余额少了。