在macOS/Linux使用以太坊C++客户端Aleth
以太坊C++客户端Aleth已经于2019年底停止维护,最新版本停止在1.8.0。
下载二进制文件
进入aleth v1.8.0的Github Release页:https://github.com/ethereum/aleth/releases/tag/v1.8.0
下载对应的二进制文件,解压后如下图:
上图选中的二进制文件aleth就是本文要使用的以太坊C++客户端。
启动私有ETH节点
创建两个文件夹,用于存放节点数据
shell
mkdir -p ~/aleth_data/data
mkdir -p ~/aleth_data/db
创建配置文件config.json
:
json
{
"sealEngine": "Ethash",
"params": {
"accountStartNonce": "0x00",
"homesteadForkBlock": "0x0",
"daoHardforkBlock": "0x0",
"EIP150ForkBlock": "0x0",
"EIP158ForkBlock": "0x0",
"byzantiumForkBlock": "0x0",
"constantinopleForkBlock": "0x0",
"networkID" : "0x29a",
"chainID": "0x29a",
"maximumExtraDataSize": "0x20",
"tieBreakingGas": false,
"minGasLimit": "0x1388",
"maxGasLimit": "7fffffffffffffff",
"gasLimitBoundDivisor": "0x0400",
"minimumDifficulty": "0x000002",
"difficultyBoundDivisor": "0x0008",
"durationLimit": "0x0d",
"blockReward": "0x4563918244F40000"
},
"genesis": {
"nonce": "0x0000000000000042",
"difficulty": "0x020000",
"mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"author": "0x19dbca3be6358f474caea47a0f177a33afa5a1d2",
"timestamp": "0x1234",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x11b7c1c8370e4b5ed3be8db4e347b4e8c933adb3db69cbdb7a38e1e50b1b82fa",
"gasLimit": "0x10000000000"
},
"accounts": {
"0x19dbca3be6358f474caea47a0f177a33afa5a1d2": { "balance": "0xffffffffffffffff" },
"0x47c9a59fe5d28ff862f8eaf5924dbc90af00b0ce": { "balance": "0xffffffffffffffff" }
}
}
启动aleth节点:
shell
./aleth -C \
--config config.json \
--data-dir ~/aleth_data/data \
--db-path ~/aleth_data/db \
--no-discovery \
--allow-local-discovery \
--unsafe-transactions \
--listen 30303 \
-v 4 \
-a 0x19dbca3be6358f474caea47a0f177a33afa5a1d2
# -C :启用CPU挖矿
# --config :指定配置文件
# --data-dir :指定配置文件和密钥路径(默认值:/root/.ethereum)
# --db-path :指定数据库存放路径(默认值:/root/.ethereum)
# --no-discovery :不启用网络发现服务
# --allow-local-discovery : 网络发现服务中允许发现本地节点(测试使用)
# --unsafe-transactions :允许所有交易在不未经验证的情况下执行(极度危险)
# --listen :监听的P2P端口(默认值:30303)
# -v :日志详细程度(范围:0-4,默认值:2)。
# -a :设置挖矿收益地址
启动之后输出如下图:
启动控制台
aleth不像geth一样自带控制台,需要自己安装,地址:ethereum/ethereum-console - GitHub。
使用npm安装控制台:
shell
npm --registry https://registry.npmmirror.com install -g ethereum-console
安装好之后即可通过ipc连接至aleth:
shell
ethconsole ~/aleth_data/data/geth.ipc
控制台使用:
- 查看本地节点信息:
web3.admin.nodeInfo()
- 查看控制台使用的web3版本:
web3.version
- 生成新账户:
web3.eth.personal.newAccount("123456")
- 查看所有账户:
web3.eth.personal.getAccounts()
- 开始挖矿:
web3.miner.start(1)
- 停止挖矿:
web3.miner.stop()
- 查看账户余额:
web3.eth.getBalance("0x19dbca3be6358f474caea47a0f177a33afa5a1d2")
- 设置挖矿收益地址:
web3.miner.setEtherbase("0x19dbca3be6358f474caea47a0f177a33afa5a1d2")
- 解锁账户:
web3.eth.personal.unlockAccount("0x19dbca3be6358f474caea47a0f177a33afa5a1d2","123456",1)
- 发送交易:
web3.eth.sendTransaction({from: "0x19dbca3be6358f474caea47a0f177a33afa5a1d2",to: "0x47c9a59fe5d28ff862f8eaf5924dbc90af00b0ce",value: '1'})
- 退出控制台:
.exit
在发送交易时,控制台会报如下错误:
Error: Failed to subscribe to new newBlockHeaders to confirm the transaction receipts.
且节点日志会输出:
{"jsonrpc":"2.0","id":15,"method":"eth_subscribe","params":["newHeads"]} {"error":{"code":-32601,"message":"METHOD_NOT_FOUND: The method being requested is not available on this server"},"id":15,"jsonrpc":"2.0"}
这是因为控制台会去尝试订阅新区块事件,但是节点并没有提供这个功能,具体原因还不清楚,有可能是控制台使用的web3js版本(1.0.0-beta.31)过旧。
交易依然发送成功了,可以在挖矿共识之后查看账户余额来确认。
控制台的详细使用文档,和web3js的文档相同,可以参考:https://web3js.readthedocs.io/