Windows下以太坊集成开发环境(Remix-IDE)搭建与智能合约的简单应用

前面我们介绍了在以太坊平台下开发区块链私有链的过程,以及在私有链下进行挖矿的操作,而随着区块链技术的发展,区块链技术已不仅限于比特币的应用,未来将重在着眼于向其他领域的扩展推广,以此开启区块链2.0以智能合约为代表的时代。本文选用remix作为开发应用平台,配合geth客户端实现与以太坊网络的交互,下一篇文章则改用truffle和ganache搭建开发框架(这是后话)。

本文分为remix-ide搭建和智能合约部署应用两部分。

一、remix-ide搭建

【准备工作】

1.安装Node.js。Node提供了JavaScript的运行环境,并且包含大量扩展模块划分不同功能简化应用的开发。

①由以下网址下载node.js,并根据指令一步一步安装到自己指定的文件夹:

https://nodejs.org/en/download/

②安装结束后,打开运行环境,输入cmd进入DOS环境,指令输入:

node --version

 

 即表示node安装成功。

2.node.js安装成功后,安装位置文件夹包含内容如下所示:

 

 可见node已包含npm管理工具,我们在这里用到的是npm服务器下载第三方包至本地使用的功能。

【remix搭建】

做好前期准备后,开始着手搭建remix环境。

1.下载remix到本机:

(建立单独的文件夹,这样下载的文件可追溯)进入到新文件夹下,指令输入:

git clone https://github.com/ethereum/remix-ide.git

2.下载成功后会在文件夹中生成多个文件夹,其中包括remix-ide文件夹,进入到该文件夹下:

cd remix-ide

接着安装所需工具包:

npm install 

执行启动命令:

npm start

(因为我在搭建环境时这里没有遇到过难以解决的问题,所以一些细小的问题已经记不清了,但总归是可以解决的)

3.该装的装好了,并且启动本地服务器,这时可以尝试打开浏览器:

输入网址:http://127.0.0.1:8080

【我遇到的问题在这里】

一切都看上去那么美好,别人遇到的问题我遇到并且解决了,别人没有遇到的问题我遇到并且也解决了,然而就是无法打开浏览器,始终显示连接失败,无法打开。在各种琢磨寻找解决方案近三天后,无意中找到了应对措施:

输入指令:

npm install http-server

利用node.js中的http-server开启本地服务,浏览器才能打开。最后的实现效果是这样的:

 

 

 

 

二、智能合约部署与简单应用

以上是基于remix浏览器开发环境的搭建过程,接下来就要借助开发平台编写智能合约并部署在私有链上,通过一步一步操作执行对智能合约的运行细节有更加深刻的体会。

 1.编写智能合约

①输入智能合约内容:

 

 

②sol文件编译

 

 如果编译遇到问题会在页面左下方显示,根据自己编写的错误点进行对应修正即可。

③获取相应参数

编译成功后会有如下显示:

 

 注意左下方红色框里的内容,点开弹出如下详情:

 

 点击“BYTECODE”旁边的记事板,便将BYTECODE的内容复制了,然后打开一个记事本将内容保存;

点击“ABI”旁边的记事板,同理保存。

以上两个参数在后面智能合约的部署中会用到。

2.智能合约的部署

智能合约的部署分为两个方面:geth控制台,remix-ide

【geth控制台】

①在前面私有链的搭建中介绍过创世区块的初始化和进入geth控制台的操作,如果装有区块信息的.json文件没有更改那么无需初始化操作,直接进入控制台即可:

geth --datadir ./data/00 --networkid xxxxx --port xxxx --rpc --rpcport xxxx --rpccorsdomain "*" console --allow-insecure-unlock

一项一项解释:

这句明显和之前的进入控制台的指令有所不同:

--networkid 还是和之前的一样,创世区块.json文件里的id是什么这里就是什么

--port 端口号,可以自行设定,避开固定设备端口号即可

--rpcport 本地rpc端口号,用于与remix浏览器链接,后面会提到

--allow-insecure-unlock 这是在后面进行合约部署时会要求解锁主账户,在进入控制台之前设定好允许不安全解锁方便后面用户解锁

②成功进入geth控制台

 

③进入控制台后,首先建立一个新账号:

 

 

 

 ④并对该账号解锁,因为后面remix的操作是针对该账号进行:

 

 括号里第一个参数是解锁对象,由于当前只拥有一个账号,所以该账号即为基础账号可以直接用coinbase代替,如果拥有多个账号想要选择的话可以如下操作:

输入指令:eth.accounts 显示当前所有账号

输入指令:personal.unlockAccount(eth.account[i],"xxxx",1000*60*30) 即解锁第i+1个账号,其密码为xxxx,解锁时间为1000*60*30毫秒(换算一下就是30分钟)

 

【remix-ide】

①选择“environment”为“web3 provider”

 

 ②如果上面按照文中指示一步步做的话这里不会出现连接失败的问题,否则如果在geth没有按照上面要求进入控制台就会出现下面的错误提示:

not possible to connect to the web3 provider

(一旦出现该提示记得重新回头按上述说明操作一遍)

③点击web3 provider会出现提示框:

 

 注意端口号,是不是很眼熟,这个就是前面提到的--rpcport,按照这里指示的端口号填写当初进入控制台时的参数就不会报错,否则就会出现连接失败的错误提示。

④点击OK,如果一切顺利就会发现页面左侧的相关参数已如geth控制台下的内容自动填入:

 

 然后点击“Deploy”部署该智能合约helloworld.sol到对应的networkid 为314590的以太坊网络上去。

⑤如果按照上面geth的操作执行了,那么这里就会正常显示pending,否则还会出现账号未解锁的错误:

 

 pending表示该合约待解决。什么意思?意思就是合约还没有经过全网认可,还不能被部署。

怎么办?我们知道合约的部署是通过交易的方式实现的,所以需要执行一步挖矿操作,使得合约被全网验证。于是我们回到geth控制台下,输入指令:

miner.start()

发现geth在挖矿的同时remix也有相应反响:

 

 表示挖矿成功,合约验证通过,接下来该部署到私有链上去了。

⑥还记得我们上面保存在记事本里的两个参数吗?BYTECODE和ABI

geth控制台下输入:

code="BYTECODE的内容"

abi=ABI里的内容
(code的内容待双引号,abi不带,看仔细哟)

⑦输入指令:

mycontract=eth.contract(abi)

contract=mycontract.new({from:eth.coinbase,data:code,gas:1000000})

⑧合约创建完成,但是还需要挖矿来部署:

miner.start()

⑨尝试调用智能合约:

contract.函数名.call(合约中该函数对应的参数内容)

如果顺利的话应该会出现对应的结果,但是我一直没成功,始终显示:

gas required exceeds allowance xxx

所以如果大家看到这篇文章有对应的解决方案欢迎指导,感激不尽。

由于这里我并没有成功实现,只是在Windows环境下将对应步骤进行展示说明,不太具有说服性,下一篇文章将使用truffle搭配ganache的方式重新尝试部署智能合约。(这个成功实现了,不用担心~)

over,欢迎指正

 

相关文章