Skip to content

在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

下载对应的二进制文件,解压后如下图:

image-20230301175107727

上图选中的二进制文件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 :设置挖矿收益地址

启动之后输出如下图:

image-20230301182249654

启动控制台

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/