前言
通常使用开发的服务器都是Linux,我们这里选择使用ubuntu 16.04来构建,其中可能出现一些知识点不一定会做出详细的介绍,请看后面章节做出的解释,各位同学,可以按照我们给出的参数做出一个demo,再根据我们的提示尝试着修改一些参数,达到不同的效果。
环境准备
Oracle VM VirtualBox (可选)ubuntu 16.04geth 1.7.2
geth下载地址:
1.安装geth
为什么选择使用geth客户端?因为这里geth是目前对web3api支持最好,完整的客户端。同时支持作为客户端,节点,挖矿等功能,当然你们也可以使用其他的客户端,他们都有类似的功能。这里我们选择使用geth 1.7.2作为教程的演示使用,请确保你在和我演示的功能相近的版本来学习,截止(2017-12-05)目前最新版本为1.7.3。
- 将下载的geth解压并复制到/usr/bin 路径下
- 新启动一个控制台 输入
geth version显示出当前的版本信息
2.初始化geth节点
在启动节点前,我们需要准备私链所需要的创世文件init.json,其中描述了私链的初始信息。
{
"nonce": "0x0000000000000075",
"config": {
"chainId": 1123,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"timestamp": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x00",
"gasLimit": "0xffffffff",
"difficulty": "0x400",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x3333333333333333333333333333333333333333",
"alloc": { }
}
然后我们创建一个目录来存放我们的私链数据,并初始化私链。
mkdir qkl
geth init init.json --datadir "./qkl"
完成後會出現
successfully wrote genesis block and/or chain rule set: …
3.启动节点
启动节点我们提供了一条示例命令来启动。
geth --identity "test" --rpc --rpccorsdomain "*" --datadir ./qkl --port "30301" --nodiscover --rpcport 8101 --rpcapi "personal,db,eth,net,web3" --networkid 1998 console 2>> ./geth.log
解释下每个参数的意思:
--identity "test"表示在该私链中的标识符为test,这个主要是在多节点时用到来标明节点
--rpc表示启动文件方式的rpc调用
--rpccorsdomain "*"表示后面的jsonapi允许被跨域调用,这里的*是指所有域,正式发布不建议使用这个配置或改成真正的调用域
--datadir ./qkl表示私链的文件夹位置,没有这个参数geth默认会访问到主网mainnet
--port "30301"表示geth的通信端口,主要用来和各个节点通信使用(建议每个节点不一样)
--nodiscover表示该节点不会被其他节点主动扫描到,也不会去主动扫描其他节点,可以使用addPerss来手工加入节点,私链必备
--rpcport 8101表示jsonAPI的对外端口是8101这个端口在每一个私链上最好不一样(主要是都在同一个系统上会端口冲突)
--rpcapi "personal,db,eth,net,web3"表示在rpc对外服务中启动personal,db,eth,net,web3服务,需要什么加什么,不需要去之
--networkid 1998表示私链的id,如果两个私链的networkid不一致是会导致无法相连的,并且不指定该参数会连接到主链
console启动geth后启动一个js的控制台,里面可以访问上面提到的api
>> ./geth.log表示把日志输出到./geth.log文件中
更多的命令行参数可以参考我后面的文章或者直接查看英文文档
4.创建账户与挖矿
ok现在节点已经启动了,下面讲讲使用最基础的功能:
刚刚上面提到了我们使用的console是一个提供了全功能的api,并且运行环境是一个js的控制台,我们可以使用personal对象来创建账户
personal.newAccount("密码")
命令执行后会得到一个16进制的钱包地址,通过这个地址,我们可以在私链中进行转账,创建合约的操作。注意是私链中
创建了第一个账户之后,我们可以通过执行挖矿指令来开始挖矿。
miner.start()
启动该命令后系统会运行变慢,然后过一段时间我们去观察geth.log可以发现已经挖到了数据
然后查看下第一个账户下的资金余额,因为默认的挖矿都是将币挖到第一个账户下
eth.getBalance(eth.account[0])
完.