Ethereum 私有链和 web3.js 使用

96
老码农不上班
2016.11.07 21:07* 字数 589

原文首发于个人主页:https://huangwenwei.com/blogs/ethereum-private-chain-and-web3js

安装以太坊客户端(Geth)

sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum

安装进程管理工具

pm2 需要 node 环境

//nvm install node
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | bash
export NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node
source ~/git/nvm/nvm.sh
nvm install 7

//npm install -g pm2
source ~/.bashrc
export npm_config_registry=https://registry.npm.taobao.org

启动 geth 配置文件

~/geth.json
[
  {
    "name"              : "geth",
    "cwd"               : "/usr/bin/",
    "script"            : "geth",
    "args"              : "--rpcapi eth,web3 --rpc --dev --datadir /home/username/geth_private_data",
    "log_date_format"   : "YYYY-MM-DD HH:mm Z",
    "out_file"      : "/home/username/geth_private_data/log/geth_out.log",
    "error_file"    : "/home/username/geth_private_data/log/geth_err.log",
    "log_file"      : "/home/username/geth_private_data/log/geth_log.log",
    "merge_logs"        : false,
    "watch"             : false,
    "max_restarts"      : 10,
    "exec_interpreter"  : "none",
    "exec_mode"         : "fork_mode"
  }
]

执行 pm2 start geth.json 即可启动 geth
另外如果不想使用 pm2 ,直接启动私有链请查看下面这种方式:

  1. 新建一个 shell 脚本文件
~/geth_private.sh
#!/bin/bash
geth=${GETH:-geth}
$geth --datadir data --networkid 31415926 --rpc --rpcapi "admin,debug,eth,miner,net,personal,shh,txpool,web3" rpcaddr "0.0.0.0" --rpccorsdomain "*" --nodiscover console
  1. 更改文件属性问可执行
chmod +x geth_private.sh
  1. 三种方式执行 shell 启动脚本
nohup ./geth_private.sh 0<&- &>/dev/null & // 守护进程启动私有链节点
nohup ./geth_private.sh 0<&- &> /tmp/geth.log  & // 守护进程启动私有链节点且把日志打印到 /tmp/geth.log 文件
./geth_private.sh //启动私有链节点并进入交互控制台

第二种打印日志的方式非常有用。其一是如果 geth 启动不成功,可以在日志中看到具体错误体制。其二是在测试链中部署智能合约(切记要确保 geth 中有一个账户处于解锁状态且有一定量的 ether,一般这个账户是 coinbase)被确认时会输出合约地址到日志文件中。在私有测试链中,进入 js 交互控制台,输入 miner.start(1) 挖矿,控制台输出类似 Mined block (#72 / 517dcfd1). Wait 5 blocks for confirmation 则表示合约部署成功。

Ethereum JavaScript API

Ethereum 实现了****javascript runtime environment**** JavaScript Console
Ethereum's Javascript console exposes the full web3 JavaScript Dapp API and the admin API.
当你安装好 geth 并启动服务之后,通过Non-interactive use: JSRE script mode 命令(例如 Managing accounts) 或者 Interactive use: the JSRE REPL Console 进入控制台操作 geth

$ geth attach ipc:/some/custom/path
$ geth attach http://191.168.1.1:8545
$ geth attach ws://191.168.1.1:8546

如果你想单独在 node 服务中写代码操作 geth ,添加 web3.js 即可。
web3.js 实现了使用 node 操作 geth 。使用的前提要求启动 geth 启动时 rpcapi 包含了 web3,在上面的配置文件中 "args" : "--rpcapi eth,web3 --rpc --dev --datadir /home/username/geth_private_data"已经设置好了。
同时可以看看参考连接详细了解:

安装:

//install web3.js
npm install web3
//install solidity for smart contract develope
sudo add-apt-repository ppa:ethereum/ethereum
sudo add-apt-repository ppa:ethereum/ethereum-dev
sudo apt-get update
sudo apt-get install solc

web.js 是一个 node 库,实现了Web3.js API Reference
另外有一点需要注意的是:当你都写好并且编译好智能合约之后,接下来的新建和部署智能合约到区块链上需要确保有一个解锁的账号(EOA)及账户有一定的资金

Create and deploy a contract
Before you begin this section, make sure you have both an unlocked account as well as some funds. Create and deploy a contract

推荐阅读:

区块链技术