以太坊(Ethereum)是一个建立在区块链技术之上, 去中心化应用平台。它允许任何人在平台中建立和使用通过区块链技术运行的去中心化应用。
区块链分为以下三类:“公有链” (Public blockchain)、“私有链” (Private blockchain)与“联盟链” (Consortium blockchain)。其中,私有链指的是对单独的个人或实体开放。
1、交易速度非常之快一个私有链的交易速度可以比任何其他的区块链都快,甚至接近了并不是一个区块链的常规数据库的速度。
2、给隐私更好的保障私有链使得在那个区块链上的数据隐私政策像在另一个数据库中似的完全一致;不用处理访问权限和使用所有的老办法。
3、交易成本大幅降低甚至为零私有链上可以进行完全免费或者至少说是非常廉价的交易。如果一个实体机构控制和处理所有的交易,那么他们就不再需要为工作而收取费用。
有一个有效的 Geth ,(可参考官网Home | go-ethereum)
由多个只能相互连接的以太坊节点组成。为了在本地运行多个节点,每个节点都需要一个单独的数据目录(--datadir)。
创建账户(可以使用 geth 帐户命令生成签署者帐户密钥(可以多次运行此命令以创建多个签署者密钥))
geth --datadir node1/ account new
geth --datadir node2/ account new
geth --datadir node3/ account new
把三个节点的地址和密码都分别写在文件里,以后后面使用.
echo 'node1_addr' >> account.txt
echo 'node2_addr' >> account.txt
echo 'node3_addr' >> account.txt
echo 'password1' >> node1/password.txt
echo 'password2' >> node2/password.txt
echo 'password3' >> node3/password.txt
每个区块链都以创世区块开始。当 Geth 首次使用默认设置运行时,它会将主网创世纪提交到数据库。对于专用网络,通常最好使用不同的创世区块。创世块是使用 genesis.json 文件配置的,该文件的路径必须在启动时提供给 Geth。
使用以太私有链管理工具puppeth设置创世块:
创建genesis.json文件
将用作 genesis.json 中额外数据键附带的值。在下面的示例中,extradata 包含一个初始签名者地址,0x7df9a875a174b3bc565e6424a0050ebc1b2d1d82。
{
"config": {
"chainId": 12345,
"homesteadBlock": 0,
"eip150Block": 0,
"eip155Block": 0,
"eip158Block": 0,
"byzantiumBlock": 0,
"constantinopleBlock": 0,
"petersburgBlock": 0,
"istanbulBlock": 0,
"berlinBlock": 0,
"clique": {
"period": 5,
"epoch": 30000
}
},
"difficulty": "1",
"gasLimit": "8000000",
"extradata": "0x00000000000000000000000000000000000000000000000000000000000000007df9a875a174b3bc565e6424a0050ebc1b2d1d820000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"alloc": {
"7df9a875a174b3bc565e6424a0050ebc1b2d1d82": { "balance": "300000" },
"f41c74c9ae680c1aa78f42e5647a62f353b7bdde": { "balance": "400000" }
}
}
要创建使用此创世区块的区块链节点,请首先使用 geth init 导入并为新链设置规范创世区块。这需要将 genesis.json 的路径作为参数传递。
geth --datadir node1/ init genesis.json
geth --datadir node2/ init genesis.json
geth --datadir node3/ init genesis.json
bootnode的作用是路由功能,可以发现网络中的节点。
引导节点需要一个密钥,可以使用以下命令创建该密钥,这将保存一个密钥以进行启动.key:然后可以使用此密钥生成引导节点,传递给 -addr 的端口选择是任意的。
bootnode -genkey boot.key
bootnode -nodekey boot.key -addr :30306
注:端口必须是空闲未被占用的!
例:开始运行bootnode服务:
bootnode -nodekey boot.key -verbosity 9 -addr :30310
INFO [02-07|22:44:09] UDP listener up self=enode://3ec4fef2d726c2c01f16f0a0030f15dd5a81e274067af2b2157cafbf76aa79fa9c0be52c6664e80cc5b08162ede53279bd70ee10d024fe86613b0b09e1106c40@[::]:30310
现在可以启动这两个节点。为每个节点打开单独的终端,使引导节点在原始终端中运行。在每个终端中,运行以下命令(在适当的情况下将 node1 替换为 node2,并为每个节点提供不同的端口 ID。还必须提供节点 1 的帐户地址和密码文件:
①geth --networkid 14333 --datadir node1 --bootnodes 'enode://109d5687e90cc391508f88137a20437c41bb5f21094dd96fbc6cea871840bf1da5fftc7bdef4b8952a4771bd89fa09355749c9aa29g47f3er7c1ce42fa72b784@127.0.0.1:0?discport=30305' --port 30303 --syncmode 'full' --http --allow-insecure-unlock --http.corsdomain '*' --http.port 8547 --authrpc.port 8566 --unlock 0xe125227508qbcb5fd648f5ba023a8d83479203c5 --mine console --ipcpath "geth1.
--ipcpath "geth1:由于某些端口原因需要添加给命令,为防止后面节点无法启动!
②geth --networkid 14333 --datadir node1 --bootnodes 'enode://109d5687e90cc391508f88137a20437c41bb5f21094dd96fbc6cea871840bf1da5fftc7bdef4b8952a4771bd89fa09355749c9aa29g47f3er7c1ce42fa72b784@127.0.0.1:0?discport=30305' --port 30303 --syncmode 'full' --http --allow-insecure-unlock --http.corsdomain '*' --http.port 8547 --authrpc.port 8566 --unlock 0xe125227508qbcb5fd648f5ba023a8d83479203c5 --mine console --password node1/password.txt--ipcpath "geth1.(无需输入密码)
成功指示:
geth attach node1/geth.ipc
geth attach http://127.0.0.1:8555
eth.accounts
admin.peers
net.peerCount