:2026-07-10 20:27 点击:1
在区块链应用的开发、测试与学习过程中,搭建一个本地或私有的以太坊网络(即“私链”)是至关重要的一步,相较于测试网(如Ropsten, Goerli)或主网,私链提供了完全可控、无需成本、高自由度的环境,而为了方便开发调试和快速上手,为私链预置已知账号和密码(更准确地说是“私钥”和“地址”)是一个非常常见的需求,本文将详细介绍以太坊私链的搭建以及如何预置账号密码,助您快速启动开发与测试工作。
在以太坊网络中,账号的本质是由一对密钥组成的:私钥(Private Key) 和 公钥(Public Key),以及由公钥生成的 地址(Address),私钥相当于密码,拥有私钥就控制了该地址上的资产和操作权限。
在私链环境中预置账号密码,主要基于以下几点考虑:
搭建以太坊私链有多种工具可选,其中最常用的是:
本文将以Geth为例,介绍如何搭建私链并预置账号。
确保您已经安装了Geth,您可以通过以太坊官方文档或包管理器(如apt, brew, yum等)进行安装。
创世块是区块链的起始块,每个私有网络都需要一个独特的创世块配置文件,创建一个名为custom genesis.json的文件,内容如下:
{
"config": {
"chainId": 12345, // 私链的ID,确保与主网、测试网不同
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"istanbulBlock": 0,
"berlinBlock": 0,
"londonBlock": 0,
"mergeNetsplitBlock": 0,
"ethash": {}
},
"alloc": {}, // 在这里预置账号和初始以太币
"coinbase": "0x0000000000000000000000000000000000000000",
"difficulty": "0x40000",
"extraData": "",
"gasLimit": "0xffffffff",
"nonce": "0x0000000000000042",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp": "0x00"
}
关键在于alloc字段,我们将在这里预置账号。
假设我们想预置两个账号:
0x1234567890123456789012345678901234567890123456789012345678901234,地址 0x742d35Cc6634C0532925a3b844Bc454e4438f44e,初始余额 10000 ETH。0x5678901234567890123456789012345678901234567890123456789012345678,地址 0x8ba1f109551bD432803012645Hac136c6Ee8a3e5,初始余额 20000 ETH。我们需要将这两个账号的信息(地址和初始余额)填入alloc字段。注意:创世块配置中通常只填地址和余额,不直接填私钥,私钥由开发者自行妥善保管。
修改后的custom genesis.json如下:
{
"config": {
"chainId": 12345,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"istanbulBlock": 0,
"berlinBlock": 0,
"londonBlock": 0,
"mergeNetsplitBlock": 0,
"ethash": {}
},
"alloc": {
"0x742d35Cc6634C0532925a3b844Bc454e4438f44e": {
"balance": "0x2386f26fc10000" // 10000 ETH in wei (1 ETH = 1e18 wei)
},
"0x8ba1f109551bD432803012645Hac136c6Ee8a3e5": {
"balance": "0x47b760e00000000" // 20000 ETH in wei
}
},
"coinbase": "0x0000000000000000000000000000000000000000",
"difficulty": "0x40000",
"extraData": "",
"gasLimit": "0xffffffff",
"nonce": "0x0000000000000042",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp": "0x00"
}
打开终端,执行以下命令初始化私链:
geth --datadir "./my_private_chain" init custom genesis.json
--datadir 指定了链数据的存储目录。启动私链节点:
geth --datadir "./my_private_chain" --networkid 12345 --nodiscover --console
--networkid 必须与genesis.json中的chainId一致。--nodiscover 防止节点被公网发现,保持私有。--console 启动后自动进入JavaScript控制台,方便交互。启动成功后,您会进入Geth控制台,我们可以使用预置账号的私钥来解锁账号并进行操作。
导入账号(使用私钥):
personal.importRawKey("0x1234567890123456789012345678901234567890123456789012345678901234", "password1")
这里的"password1"是为该账号设置的密码,您可以根据需要设定,导入成功后会返回账号地址,确认与
对第二个账号执行相同操作:
personal.importRawKey("0x5678901234567890123456789012345678901234567890123456789012345678", "password2")
解锁账号: 在进行交易前,需要解锁账号:
本文由用户投稿上传,若侵权请提供版权资料并联系删除!