ETH私有链搭建与使用-启动eth节点并进行钱包余额初始化(2)


操作系统环境:CentOS 7.6.1810,操作基础目录/data,如无该目录请手动创建(mkdir /data)

 

1.创建创世区块数据json文件并启动ETH节点

1.1在/data目录中新建一个文件夹(mkdir eth-test),进入该目录(cd eth-test)

1.2创建customGenesis.json文件并填入以下内容

touch customGenesis.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": {
        "0xFfD4a30C08d9f16F095f6315e14bd034F7d04fb0": {
            "balance": "100000000000000000000000000000000"
        }
   },
  "number": "0x0",
  "gasUsed": "0x0",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
}

alloc中的钱包地址为你需要初始化并且有私钥的钱包地址,后面导入该钱包就会有对应余额可用,我这里用的是我们上一篇文章中通过metamask生成的钱包地址.

1.3初始化区块

geth --datadir data init customGenesis.json

1.4启动节点,指定挖矿账户,进入eth console操作界面

geth --datadir "./data" --rpc --rpcaddr=0.0.0.0 --rpcport 8545 --rpccorsdomain "*" --rpcapi "eth,net,web3,personal,admin,txpool,debug,miner" --nodiscover --maxpeers 30 --networkid 1981 --port 30303 --allow-insecure-unlock --mine --miner.etherbase "0xFfD4a30C08d9f16F095f6315e14bd034F7d04fb0" console

1.5后台启动并进入console

后台启动并立即开始挖矿

nohup geth --datadir "./data" --rpc --rpcaddr=0.0.0.0 --rpcport 8545 --rpccorsdomain "*" --rpcapi "eth,net,web3,personal,admin,txpool,debug,miner" --nodiscover --maxpeers 30 --networkid 1981 --port 30303 --allow-insecure-unlock --mine --miner.threads 1 --miner.etherbase "0x078e73093E4F3dDFce2b41b0D72827A021d9d6cB" 2>> ./geth.log &

进入console

geth attach ipc:/data/eth-test/data/geth.ipc

1.6参数说明

ETHEREUM选项:
  --config value                        TOML 配置文件
  --datadir "/home/user4/.ethereum"  数据库和keystore密钥的数据目录
  --keystore                            keystore存放目录(默认在datadir内)
  --nousb                               禁用监控和管理USB硬件钱包
  --networkid value                     网络标识符(整型, 1=Frontier, 2=Morden (弃用), 3=Ropsten, 4=Rinkeby) (默认: 1)
  --testnet                             Ropsten网络:预配置的POW(proof-of-work)测试网络
  --rinkeby                             RRinkeby网络: 预配置的POA(proof-of-authority)测试网络
  --syncmode "fast"                     同步模式 ("fast", "full", or "light")
  --gcmode value                        区块链垃圾收集模式 ("full", "archive") (default: "full")
  --ethstats value                      上报ethstats service  URL (nodename:secret@host:port)
  --identity value                      自定义节点名
  --lightserv value                     允许LES请求时间最大百分比(090)(默认值:0)
  --lightpeers value                    最大LES client peers数量(默认值:100)
  --lightkdf                            在KDF强度消费时降低key-derivation RAM&CPU使用
  --whitelist value                     使用逗号分隔的块编号到hash的映射来执行(<number>=<hash>)

开发链选项:
  --dev               使用POA共识网络,默认预分配一个开发者账户并且会自动开启挖矿
  --dev.period value  开发者模式下挖矿周期 (0 = 仅在交易pending时进行挖矿) (默认: 0)

ETHASH选项:
  --ethash.cachedir                         ethash验证缓存目录(默认 = datadir目录内)
  --ethash.cachesinmem value                在内存保存的最近的ethash缓存个数  (每个缓存16MB ) (默认: 2)
  --ethash.cachesondisk value               在磁盘保存的最近的ethash缓存个数 (每个缓存16MB) (默认: 3)
  --ethash.dagdir "/home/user4/.ethash"  存ethash DAGs目录 (default = inside home folder)
  --ethash.dagsinmem value                  在内存保存的最近的ethash DAGs 个数 (每个1GB以上) (默认: 1)
  --ethash.dagsondisk value                 在磁盘保存的最近的ethash DAGs 个数 (每个1GB以上) (默认: 2)

交易池选项:
  --txpool.locals value        将逗号分隔的帐户视为局部变量(没有刷新,包含优先级)
  --txpool.nolocals            为本地提交交易禁用价格豁免
  --txpool.journal value       本地交易的磁盘日志:用于节点重启 (默认: "transactions.rlp")
  --txpool.rejournal value     重新生成本地交易日志的时间间隔 (默认: 1小时)
  --txpool.pricelimit value    加入交易池的最小的gas价格限制(默认: 1)
  --txpool.pricebump value     价格波动百分比(相对之前已有交易) (默认: 10)
  --txpool.accountslots value  每个帐户保证可执行的最少交易槽数量  (默认: 16)
  --txpool.globalslots value   所有帐户可执行的最大交易槽数量 (默认: 4096)
  --txpool.accountqueue value  每个帐户允许的最多非可执行交易槽数量 (默认: 64)
  --txpool.globalqueue value   所有帐户非可执行交易最大槽数量  (默认: 1024)
  --txpool.lifetime value      非可执行交易最大入队时间(默认: 3小时)

性能调优选项:
  --cache value            分配给内部缓存的内存的兆字节 (默认值为: 1024)
  --cache.database value   用于数据库io的缓存内存预留百分比 (default: 50)
  --cache.trie value       用于trie缓存的缓存内存预留百分比 (default: 25)
  --cache.gc value         用于trie修剪的缓存内存预留百分比 (default: 25)
  --trie-cache-gens value  需要保存在内存中的trie节点代数 (default: 120)

帐户选项:
  --unlock value    需解锁账户用逗号分隔
  --password value  用于非交互式密码输入的密码文件

API和控制台选项:
  --rpc                  启用HTTP-RPC服务器
  --rpcaddr value        HTTP-RPC服务器接口地址(默认值:"localhost")
  --rpcport value        HTTP-RPC服务器监听端口(默认值:8545)
  --rpcapi value         基于HTTP-RPC接口提供的API
  --ws                   启用WS-RPC服务器
  --wsaddr value         WWS-RPC服务器监听接口地址(default: "localhost")
  --wsport value         WS-RPC服务器监听端口(默认值:8546)
  --wsapi value          基于WS-RPC的接口提供的API
  --wsorigins value      websockets请求允许的源
  --ipcdisable           禁用IPC-RPC服务器(默认是打开的)
  --ipcpath              包含在datadir里的IPC socket/pipe文件名(转义过的显式路径)
  --rpccorsdomain value  允许跨域请求的逗号分隔域名列表(浏览器强制)
  --rpcvhosts value      接受请求的虚拟主机名的逗号分隔列表(服务器强制的)。接受“*”通配符.(default: "localhost")
  --jspath loadScript    JavaScript加载脚本的根路径 (default: ".")
  --exec value           执行JavaScript语句(需要结合console/attach命令一起使用)
  --preload value        预加载到控制台的逗号分隔的JavaScript文件列表

网络选项:
  --bootnodes value     用于P2P发现bootstrap的逗号分隔的enode url(为轻量级服务器设置v4+v5)
  --bootnodesv4 value   用于P2P v4发现bootstrap的逗号分隔的enode url(轻服务器, 全节点)
  --bootnodesv5 value   用于P2P v5发现bootstrap的逗号分隔的enode url(轻服务器, 轻节点)
  --port value          网卡监听端口(默认值:30303)
  --maxpeers value      最大的网络节点数量(如果设置为0,网络将被禁用)(默认值:25)
  --maxpendpeers value  最大尝试连接的数量(如果设置为0,则将使用默认值)(默认值:0)
  --nat value           NAT端口映射机制 (any|none|upnp|pmp|extip:<IP>)(default: "any")
  --nodiscover          禁用节点发现机制(手动添加节点)
  --v5disc              启用实验性的RLPx V5(Topic发现)机制
  --netrestrict value   限制对给定IP网络的网络通信(CIDR掩码)
  --nodekey value       P2P节点密钥文件
  --nodekeyhex value    十六进制的P2P节点密钥(用于测试)

矿工选项:
  --mine                         启动挖矿
  --miner.threads value          挖矿使用的CPU线程数量(默认值:0)
  --miner.notify value           逗号分隔的HTTP URL列表,用于通知新工作包
  --miner.gasprice "1000000000"  挖矿交易的最低gas价格
  --miner.gastarget value        被挖区块的目标gas的底层(default: 8000000),即被记录的区块提供的gas要高于该值,否则不会被记录
  --miner.gaslimit value         被挖区块的目标gas的顶层(default: 8000000),即被记录的区块提供的gas要低于该值,否则不会被记录
  --miner.etherbase value        挖矿奖励地址(默认=第一个创建的帐户)(default: "0")
  --miner.extradata value        矿工设置的额外块数据(default = client version)
  --miner.recommit value         重新创建正在挖的块的时间间隔(default: 3s)
  --miner.noverify               禁用远程密封验证

GAS价格选项:
  --gpoblocks value      用于检查gas价格的最近生成的块的个数 (default: 20)
  --gpopercentile value  建议的gas价格是一组最近的交易gas价格的该给定百分比的值(default: 60)

虚拟机选项:
  --vmdebug         记录VM及合约调试的有用信息
  --vm.evm value    外部EVM配置(默认=内置解释器)
  --vm.ewasm value  外部ewasm配置(默认=内置解释器)

日志和调试选项:
  --fakepow                 禁用proof-of-work验证
  --nocompaction            在导入后禁用db压缩
  --verbosity value         日志详细度:0=silent, 1=error, 2=warn, 3=info, 4=debug, 5=detail (default: 3)
  --vmodule value           每个模块详细度:以 <pattern>=<level>的逗号分隔列表 (比如 eth/*=6,p2p=5)
  --backtrace value         请求特定日志记录堆栈跟踪 (比如 "block.go:271")
  --debug                   带有调用站点位置(文件和行号)的日志消息
  --pprof                   启用pprof HTTP服务器
  --pprofaddr value         pprof HTTP服务器监听接口 (default: "127.0.0.1")
  --pprofport value         pprof HTTP服务器监听端口 (default: 6060)
  --memprofilerate value    按该给定频率打开memory profiling(default: 524288)
  --blockprofilerate value  按指定频率打开block profiling (default: 0)
  --cpuprofile value        将CPU profile写入指定文件
  --trace value             将execution trace写入指定文件

METRICS和状态选项:
  --metrics                          启用metrics标准收集和报告
  --metrics.influxdb                 启用metrics导出/推送到外部的InfluxDB数据库
  --metrics.influxdb.endpoint value  将metrics报告给InfluxDB数据库API端点(default: "http://localhost:8086")
  --metrics.influxdb.database value  将报告的metrics推送到的InfluxDB数据库的名称(default: "geth")
  --metrics.influxdb.username value  授权访问数据库的用户名 (default: "test")
  --metrics.influxdb.password value  授权访问数据库的密码 (default: "test")
  --metrics.influxdb.host.tag host   连接到所有测量值的InfluxDB数据库主机标记(default: "localhost")

WHISPER(实验)选项:
  --shh                       启用Whisper
  --shh.maxmessagesize value  可接受的最大的消息大小 (default: 1048576)
  --shh.pow value             可接受的最小的POW (default: 0.2)
  --shh.restrict-light        限制两个Whisper客户端之间的连接

弃用选项:
  --minerthreads value     用于挖矿的CPU线程数(已弃用,现在使用--miner.threads) (default: 0)
  --targetgaslimit value   被挖区块的目标gas底层(弃用, 现在使用--miner.gastarget) (default: 8000000)
  --gasprice "1000000000"  挖去交易的最小gas价格(弃用, 现在使用--miner.gasprice)
  --etherbase value        区块挖矿奖励的address(default = 第一个账户, 弃用, 现在使用--miner.etherbase) (default: "0")
  --extradata value        被矿工设置的区块额外数据(default = client version, 弃用, 现在使用 --miner.extradata)

其他选项:
  --override.constantinople value  手动指定constantinople分支区块,覆盖绑定设置 (default: 0)
  --help, -h                       显示帮助信息

2.通过私钥导入钱包并查询可用余额

personal.importRawKey("54732a579d1cd92215100f985de437dc8345fec50a8405707be173b719c93071", "123456")

第一个参数为钱包地址私钥,第二个参数为设置的密码,解锁账户需要此密码

 

查询可用余额

eth.getBalance("0xffd4a30c08d9f16f095f6315e14bd034f7d04fb0")

 看到余额是我们设置的值代表成功,如果显示为0,请检查创世区块json文件,并重新初始化再启动

 

3.试试在geth console中创建账户并通过导入账户给创建的新账户转账吧

3.1创建账户

personal.newAccount("123456")

 

 创建成功后返回对应账户钱包地址,这里的参数为解锁账户密码,我这里统一设置为123456,方便记忆

3.2查看新账户余额并给新账户转账

解锁账户

personal.unlockAccount("0xffd4a30c08d9f16f095f6315e14bd034f7d04fb0", "123456");

转账

web3.eth.sendTransaction({from:"0xffd4a30c08d9f16f095f6315e14bd034f7d04fb0",to:"0xc436efd727da4cb08414752e024e588102a147d0",value:web3.toWei(2,"ether")})

 

 转账之后返回transactionId:0xfcdc7665d550ba5d678fd338ae0ffba0bd3f9264efc385ad496a871467537817,这里我们查询到新账户的余额依然是0.这是因为我们只是发送了交易,目前还没有矿工处理,需要开启挖矿打包该笔交易.

查看待处理任务

txpool.status

开启挖矿(参数代表使用线程数量,首次开启挖矿需要等待一段时间完成DAG的过程)

miner.start(1)

 

 

看到成功挖矿后停止挖矿

miner.stop()

查询新账户余额(这里eth的精度是18位,实际是2个eth)

 

4.多节点部署

4.1通过之前的步骤采用同一个json文件搭建并启动一个新的eth节点

4.2查看新节点信息

admin.nodeInfo.enode

 

4.3节点加入

在原有的节点上加入这个新节点,参数在上面查询的基础上修改ip地址为服务器ip地址,放开对应端口的防火墙拦截即可

admin.addPeer("enode://610499a16f016c404a7c75c3edd1cc62947240f49b736db2de71a50a6d13a14c2e76440eb3e7ef0b00ea0e6ccab68e3ed7c9af33be0f0130cbe16a9090bda3eb@116.62.58.xxx:30303?discport=0")

 

 查询节点数量

net.peerCount

至此,恭喜你,基础的geth钱包操作及多节点搭建就完成了.后续文章将介绍智能合约的部署和调用,如果你觉得文章对你有帮助,可以请作者喝杯咖啡.

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM