参考文章:
http://blog.fens.me/bitcoin-geth-testnet/
http://blog.luoyuanhang.com/2018/04/18/set-up-eth-private-chain-for-development
环境准备
安装golang
1、下载二进制包:go1.4.linux-amd64.tar.gz。
https://golang.google.cn/dl/
2、将下载的二进制包解压至 /usr/local目录。
tar xvf go1.15.5.linux-amd64.tar.gz -C /usr/local/
3、将 /usr/local/go/bin 目录添加至PATH环境变量:
#vim /etc/profile
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin
4、环境变量:
source /etc/profile
安装ethereum
下载地址https://geth.ethereum.org/downloads/
解压
tar xvf geth-linux-amd64-1.9.24-cc05b050.tar.gz -C /usr/local/
改名
cd /usr/local/
mv geth-linux-amd64-1.9.24-cc05b050 geth
创建geth软连接
ln -s /usr/local/geth/geth /usr/bin
测试启动
geth -h
是否正常输出
以太坊私有测试链
自定义创世块
创建一个名为genesis.json
文件
{
"config": {
"chainId": 666,
"homesteadBlock": 0,
"eip150Block": 0,
"eip150Hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"istanbulBlock": 0,
"ethash": {}
},
"nonce": "0x0",
"timestamp": "0x5ddf8f3e",
"extraData": "0x0000000000000000000000000000000000000000000000000000000000000000",
"gasLimit": "0x47b760",
"difficulty": "0x00002",
"mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x0000000000000000000000000000000000000000",
"alloc": {
"7df9a875a174b3bc565e6424a0050ebc1b2d1d82": { "balance": "300" },
"f41c74c9ae680c1aa78f42e5647a62f353b7bdde": { "balance": "400" }
},
"number": "0x0",
"gasUsed": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
参数配置
config | 区块链的相关参数 |
---|---|
chainId | 防止重放攻击(replay attack,简单来说就是未经授权的用户来假扮交易的发送者) |
homesteadBlock | Homestead^2是以太坊的第二个发行版本(Frontier^3是第一个发行版本),值为0表示的使用的是该版本的以太坊 |
difficult | 初始挖矿难度 |
gasLimit | 每一个区块所消耗的gas上限 |
alloc | 可以往地址中预先分配以太币 |
生成创世块
geth --datadir /data init genesis.json
--datadir
:指定区块链的数据目录(默认为~/.ethereum
)
init
:创世块初始化JSON文件的目录
会报出以下错误 忽略即可
Failed to enumerate USB devices
看到Successfully wrote genesis state
输出即可
启动测试
启动geth有如下主要参数(可以使用geth --help
进行查看):
相关启动参数
参数 | 参数 |
---|---|
--nodiscover | 关闭节点的可发现性,可以防止使用了相同network id和创世块的节点连接到你的区块链网络中(只能通过手动来添加节点) |
--maxpeers 0 | 指定网络中的最多节点数 |
--rpc | MetaMask 连接节点需要启用RPC服务 |
--rpcapi "db,eth,net,web3" | 指定启用的RPC API |
--rpcport "8080" | 指定RPC的端口 |
--rpccorsdomain | 指定哪些URL可以连接到你的节点 |
--datadir | 以太坊区块链的数据目录 |
--port | 连接到其它节点的网络监听端口 |
--identity "FirstNode" | 指定节点名称 |
--allow-insecure-unlock | 新版本geth,出于安全考虑,默认禁止了HTTP通道解锁账户。如果已经了解打开此功能的风险,可通启动命令中添加参数 |
console | 启动geth控制台程序 |
geth --identity "ACET" --rpc --rpcport "8545" --datadir /data --rpcaddr 0.0.0.0 --rpccorsdomain "*" --port "30303" --nodiscover --maxpeers 5 --rpcapi "admin,db,eth,debug,miner,net,shh,txpool,personal,web3" --allow-insecure-unlock --networkid 666 console
geth客户端登陆操作
#登陆
geth attach rpc:http://127.0.0.1:8545
#查看状态
eth
#查看最新区块高度
eth.blockNumber
# 查看同步状态,返回 false 未同步或同步到最新了
eth.syncing
#生成账户,密码
password123personal.newAccount('password123')
节点连接
在节点的geth控制台中执行:
> admin.nodeInfo
我们得到该节点的信息:
{
enode: "enode://e04ae6fa2784739fc06e4371a1a475507270520fb40f261752a1c7ea4bf641e95c27edfd246ac238a1d7361d63791b8110e4c7eea50f624f25185fd954648926@127.0.0.1:30303?discport=0",
enr: "enr:-JO4QKd_wkQ_fzMFDkqGnmqvFAPgORGcHlaoc2qaWaUSJUPLBHE9x-VuRK0su64V2vyeHqS_jBaU7BEGyT03mm-FWUcBg2V0aMrJhPxk7ASDEYwwgmlkgnY0gmlwhH8AAAGJc2VjcDI1NmsxoQLgSub6J4Rzn8BuQ3GhpHVQcnBSD7QPJhdSocfqS_ZB6YN0Y3CCdl8",
id: "3f5e29e26e7dc14582af0d6dd1a961fb9e23af52637e26f04e6adfd7f2bea77a",
ip: "127.0.0.1",
listenAddr: "[::]:30303",
name: "Geth/ACET/v1.9.24-stable-cc05b050/linux-amd64/go1.15.5",
ports: {
discovery: 0,
listener: 30303
},
protocols: {
eth: {
config: {
byzantiumBlock: 4370000,
chainId: 1, ##与下方network必须一致否则无法正常连接
constantinopleBlock: 7280000,
daoForkBlock: 1920000,
daoForkSupport: true,
eip150Block: 2463000,
eip150Hash: "0x2086799aeebeae135c246c65021c82b4e15a2c451340993aacfd2751886514f0",
eip155Block: 2675000,
eip158Block: 2675000,
ethash: {},
homesteadBlock: 1150000,
istanbulBlock: 9069000,
muirGlacierBlock: 9200000,
petersburgBlock: 7280000
},
difficulty: 17179869184,
genesis: "0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3",
head: "0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3",
network: 666 ##与上方必须一致否则无法正常连接
}
}
}
节点中创建账号:
> personal.newAccount()
设置密码后,得到地址:
Please remember your password!
"0xc4e62bdf4f928f5f788e389904f868da9d96543c"
钱包进行解锁:
> personal.unlockAccount("0xa9436991e002986f58d948d79e737df190c4f26b")
MetaMask 连接节点
需要开启rpc 上面的启动命令已经开启了rpc
然后在 metamask 点击新加一个自定义 RPC
填写相对应的信息
注意这三处必须全部一样
点击保存后链ID会自动转换为0x29a
URL 使用:http://云服务器IP:8545