启动
第一步
创建一个目录作为以太坊的数据存放目录
第二步
创建一个配置文件用来做创世区块以及设置网络genesis.json
{
"config": {
"chainId": 18,是本私有链的ID
"homesteadBlock": 0,指明Homestead版本的兼容的区块开始编号
"eip155Block": 0,兼容的区块开始编号
"eip158Block": 0
},
"alloc" : {},
"coinbase" : "0x0000000000000000000000000000000000000000",
"difficulty" : "0x2",
"extraData" : "",
"gasLimit" : "0xffffffff",
"nonce" : "0x0000000000000042",nonce 和 mixhash 是作为输入,让每个节点都可以通过计算来做
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00"
}
说明:
-
nonce
和mixhash
是作为输入,让每个节点都可以通过计算来做 -
proof-of-work
,确认这个区块的挖掘者确实做了足够多的计算找到了合法的 -
difficulty
就是制定了本链一开始的挖矿难度,在我们的私有测试节点中,这个值设得很低,这样就比较容易挖到矿 -
alloc
可以预分配一些以太币给某些地址 -
coinbase
就是当成功挖出genesis
区块后,接收奖金的地址 -
timestamp
两个区块的时间戳之差来调整挖矿的难度 -
parentHash
指向前一个区块的哈希指针 -
extraData
可用于存储任何信息 -
gasLimit
规定了每一个区块中能够消耗的最大的gas
值,也就事实上限制了区块的大小 -
config
用来为这个私有网络确立一系列参数
第三步
初始化 genesis
文件
cd ~/test/private
//目录换成你自己的目录
geth --datadir . init genesis.json
第四步
启动节点
geth --datadir . --networkid 4224 --rpc --rpcport 8545 --port 30303 --rpccorsdomain="*" -rpcapi eth,web3,personal,net console 2> log.txt
命令太长了,可以写一个 .sh 文件,运行的时候,直接在命令行 ./rungeth.sh
(如遇到没有权限用 chmod 777 rungeth.sh
加权限)
--datadir ./data
数据位置指定
--port 30303
不同的节点之前连接的端口号
--rpc
允许远程访问
--rpcaddr 0.0.0.0
本地的任意有效IP作为连接IP
--rpcport 8545
服务的端口号
--rpcapi 'db,net,eth,web3,personal'
rpc远程调用的模块
--rpccorsdomain '*'
可以跨域访问
console
控制台
2> 1.log
它会把输出的命令存在 log 里
找帮助指令:
geth -h |grep rpc
第五步
启动成功就会进入geth控制台了,在控制台里可以做一些事情,有以下命令: https://www.jianshu.com/p/8250e209902f
参考:使用Web3.js查询以太币和代币余额以及转账https://www.jianshu.com/p/496c9d833df9
第一步 node.js 服务器端
搭建node.js 的基本环境,然后启动 node.js
var Web3=require("web3");
var web3 = new Web3(new Web3.providers.HttpProvider("http://127.0.0.1:8545"));
var abi=[
{
"constant": false,
"inputs": [
{
"name": "_message",
"type": "string"
}
],
"name": "setMessage",
"outputs": [],
"payable": false,
"stateMutability": "nonpayable",
"type": "function"
},
{
"constant": true,
"inputs": [],
"name": "getMessage",
"outputs": [
{
"name": "",
"type": "string"
}
],
"payable": false,
"stateMutability": "view",
"type": "function"
}
];
var address="0xd069af98379fe4326c33f6718e0ce820c0f63a55";
var message = new web3.eth.Contract(abi,address);
router.get("/getMessage",function(req,resp){
message.methods.getMessage().call(function(error,result){
resp.send(result);
});
});
第二步
在小程序端掉用以太坊的数据
调用小程序提供的api 去请求中心化的服务器node.js 的数据
wx.request({
url: 'http://localhost:3000/user/getMessage', //仅为示例,并非真实的接口地址
success: function (res) {
console.log(res.data)
_this.setData({
message:res.data
})
}
})
网友评论