以太坊官方提供了一些API(点我查看)给开发者使用,但是依靠这些API还不足以做成一个完整功能的钱包。
如何做一个功能完整的以太坊钱包,主要在转账这块,由于安全性考虑,在加解密,数字签名这块不可能有现成的API暴露给开发者。官方给了一个NodeJs的模块给我们使用!!
这个NodeJs的模块叫web3,主要连接以太坊暴露出来的RPC层,开发者利用web3连接RPC层,从而可以与区块链交互。
开始搭建
(本文开发环境是Mac/Linux, 以太坊客户端是Go-ethereum,需要NodeJs的环境)
NodeJS安装
nodejs官网 ,自己谷歌如何下载。
安装完nodejs环境,会自带一个npm的包管理器。
创建钱包目录,我们姑且叫 wallet
cd wallet
npm init //初始化node模块,填写相关信息
在wallet目录下, 新建一个叫app.js的文件。
其内容如下:
var Web3 = require('web3');
if (typeof web3 !== 'undefined') {
web3 = new Web3(web3.currentProvider);
} else {
// set the provider you want from Web3.providers
web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
}
var version = web3.version.api;
console.log(version);
然后
cd wallet
node app.js //执行js文件
会发现报错,连接不到RPC层。因为要使用这个web3的模块,必须在本地搭一个以太坊的节点,如何搭建,请看这里。
在本地搭建好以太坊节点后,记得启动节点的选项:
geth --rinkeby --rpc --rpcaddr 0.0.0.0 --rpcapi eth,net,web3 --syncmode fast --cache 1028 --datadir data --rpccorsdomain 'http://localhost:8080' console
此处,--rinkeby 表示连接测试链 rinkeby(我使用测试链,因为我没钱买以太币啊,用这个测试链测试转、收钱,跟正式环境的一样的。);
--rpc 表示启用HTTP-RPC服务器,这样你的web3模块才能与这个本地节点交互,从而跟整个世界的以太坊区块链交互;
--rpcapi 表示HTTP-RPC提供的API;
--syncmode 表示同步模式,有fast、full、light
--rpccorsdomain 表示允许跨域请求的域名列表 用逗号分开
(更多Geth命令,可以看这个帖子)
启动完本地节点,此时再执行命令:
node app.js //执行js文件
就有输出了。
后续,如何转账、查看余额、查看交易等。。