首页 > 其他分享 >以太坊私有链 —— POW搭建

以太坊私有链 —— POW搭建

时间:2024-06-14 23:32:40浏览次数:26  
标签:geth http 以太 私有 POW -- personal eth 区块

一、使用的GO与Geth版本

GO:1.22.4

geth:1.10.26

二、安装配置GO语言

安装GO 1.22.4语言环境(linux)

wget https://golang.google.cn/dl/go1.22.4.linux-amd64.tar.gz

解压到指定目录

tar -zxvf go1.22.4.linux-amd64.tar.gz -C /usr/local/

配置GOPATH环境

export PATH=$PATH:/usr/local/go/bin

三、下载geth并配置 

​wget  https://gethstore.blob.core.windows.net/builds/geth-alltools-linux-amd64-1.10.26-e5eb32ac.tar.gz

解压到指定目录

tar -zxvf geth-alltools-linux-amd64-1.10.26-e5eb32ac.tar.gz -C /usr/local/

配置geth环境

export PATH=$PATH:/usr/local/geth-alltools-linux-amd64-1.10.26-e5eb32ac

四、搭建POW私链

1、创建账户

# 创建私有链目录
mkdir privatechain
cd privatechain

# 创建账户
geth account new --datadir data

2、自定义创世区块(genesis.json),在alloc字段下面写入创建账户的地址

# 创建genesis.json文件
vim genesis.json

# 写入一下代码
{
  "config": {
    "chainId": 108,
    "homesteadBlock": 0,
    "eip150Block": 0,
    "eip155Block": 0,
    "eip158Block": 0,
    "byzantiumBlock": 0,
    "constantinopleBlock": 0,
    "petersburgBlock": 0,
    "ethash": {}
  },
  "difficulty": "1",
  "gasLimit": "8000000",
   "alloc": {
    "生成的账户地址": { "balance": "10000000000000000" }
  }
}

3、初始化区块链

geth --datadir data init genesis.json

4、启动私有链

geth --datadir data --networkid 1008 console 2>geth.log

5、启动并开启rpc服务

普通模式
geth --datadir data --networkid 1008  --http --http.addr 127.0.0.1 --http.vhosts "*" --http.api "db,net,eth,web3,personal,miner" --http.corsdomain "*" --nodiscover -- --allow-insecure-unlock  console 2> 1.log
 
 
开发者模式
 
geth --datadir ./devdata --networkid 18 --port 30303 --http --http.addr 0.0.0.0 --http.vhosts "*"  --http.port 8545 --http.api 'db,net,eth,web3,personal' --http.corsdomain "*"  --dev --dev.period 1 console 2> 1.log
 
挂起模式
nohup geth --datadir data --networkid 1009  --http --http.addr 127.0.0.1 --http.port 8545 --http.vhosts "*" --http.api "db,net,eth,web3,personal,miner" --http.corsdomain "*" --nodiscover --snapshot=false --allow-insecure-unlock 2> 1.log &
 
挂起模式进入控制台:
geth attach http://localhost:8545

五、geth的使用

--datadir指定节点数据目录
init指定初始化节点使用的配置文件 genesis.json
--identity设定节点标识
--http开启http rpc 服务
--http.port指定http rpc端口
--http.corsdomain指定跨域
--http.addr监听地址,默认为127.0.0.1,只能本地访问
--http.api设置节点上启用RPC接口
--nodiscover使用此选项可确保未手动添加您的人员无法发现您的节点。否则,如果您的节点具有相同的创世纪文件和网络ID,则可能无意中将您的节点添加到陌生人的区块链中
--networkid设定网络ID,当创建的链的 genesis block 和 network id 刚好与网络上其他人的链相同,那么就看哪条链长,如果比对方的短,那么链上的数据会全部被覆盖,变成对方的链。
--allow-insecure-unlock允许使用 http 协议进行账户解锁
--port网络侦听端口,对等端连接端口
--ipcdisable指定跨域

六、私有链相关操作

1、进入区块链数据中运行节点运行一下代码进入终端

geth attach ipc:geth.ipc

2、相关操作

  1. eth:包含一些跟操作区块链相关的方法;
  2. net:包含一些查看p2p网络状态的方法;
  3. admin:包含一些与管理节点相关的方法;
  4. miner:包含启动&停止挖矿的一些方法;
  5. personal:主要包含一些管理账户的方法;
  6. txpool:包含一些查看交易内存池的方法;
  7. web3:包含了以上对象,还包含一些单位换算方法;

3、相关API命令

3.1、查看账户

# 查看账户,如果为空代表没有创世区块,如果有代表创世区块也是第一个区块
> personal.listAccounts
["0xcb0bf04fdb1dde448e5ef34568c3145b6f9103fb"]
# 可使用eth.conbase查看创世区块
> eth.coinbase
"0xcb0bf04fdb1dde448e5ef34568c3145b6f9103fb"

3,2、创建账户

# 创建账户,并设置密码为123456
> personal.newAccount("123456")
"0x45ed6706610d8b2c0d97027871636b39eb9829b2"

3.3、获取指定账户

> personal.listAccounts
["0xcb0bf04fdb1dde448e5ef34568c3145b6f9103fb", "0x45ed6706610d8b2c0d97027871636b39eb9829b2", "0xb892bdbd6305a38790b044f8a0012da67c69d64b"]
> personal.listAccounts[0]
"0xcb0bf04fdb1dde448e5ef34568c3145b6f9103fb"
> personal.listAccounts[1]
"0x45ed6706610d8b2c0d97027871636b39eb9829b2"
> personal.listAccounts[2]
"0xb892bdbd6305a38790b044f8a0012da67c69d64b"

3.4、查看账户余额

> eth.getBalance("0xcb0bf04fdb1dde448e5ef34568c3145b6f9103fb")
10000000000000000

3.5、转账操作

# 成功获取交易区块
> eth.sendTransaction({from:personal.listAccounts[0],to:personal.listAccounts[1],value:10})
"0xb1f8e6f92260b7870aaa99e6f8e8f78c6c991cbd9c7b24c846365dcd1147f07c"
# 获取状态
> txpool.status
{
  pending: 1,
  queued: 0
}
# 获取代办区块
> eth.getBlock("pending",true)
{
  difficulty: 131072,
  extraData: "0xd883010a1a846765746888676f312e31382e35856c696e7578",
  gasLimit: 8007811,
  gasUsed: 21000,
  hash: null,
  logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
  miner: null,
  mixHash: "0x0000000000000000000000000000000000000000000000000000000000000000",
  nonce: null,
  number: 1,
  parentHash: "0x3d9209ff83171cdfe2b20b9c970f62d0bbde3d678f9ff2a3601056a7851efea2",
  receiptsRoot: "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2",
  sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
  size: 641,
  stateRoot: "0x0000000000000000000000000000000000000000000000000000000000000000",
  timestamp: 1718342329,
  totalDifficulty: 0,
  transactions: [{
      blockHash: "0x49d7bb9bd69fb6643a84dfeb40c0abebdec5b22f95c08e280ae47486d3aee494",
      blockNumber: 1,
      chainId: "0x6c",
      from: "0xcb0bf04fdb1dde448e5ef34568c3145b6f9103fb",
      gas: 21000,
      gasPrice: 1000000000,
      hash: "0xb1f8e6f92260b7870aaa99e6f8e8f78c6c991cbd9c7b24c846365dcd1147f07c",
      input: "0x",
      nonce: 0,
      r: "0xf87348f863df0044d588790c207d96bdb4a57b94362a5d51ad76ecfe05a2f201",
      s: "0x66cf27c90de49db8c1ec7d32d9967906b4182ef76215e20c119d06b13e9d3441",
      to: "0x45ed6706610d8b2c0d97027871636b39eb9829b2",
      transactionIndex: 0,
      type: "0x0",
      v: "0xfc",
      value: 10
  }],
  transactionsRoot: "0xe23873f07b95abbcd5df83391afd4648943e23faae7b4a202e40d6dd1e88d32e",
  uncles: []
}

3.6、进行挖矿及状态的pending为0表示转账成功

> eth.getBalance("0x45ed6706610d8b2c0d97027871636b39eb9829b2")
0
> eth.getBalance("0xcb0bf04fdb1dde448e5ef34568c3145b6f9103fb")
10000000000000000
> miner.start()
null
> txpool.status
{
  pending: 0,
  queued: 0
}
> eth.getBalance("0xcb0bf04fdb1dde448e5ef34568c3145b6f9103fb")
4009999999999999990
> eth.getBalance("0x45ed6706610d8b2c0d97027871636b39eb9829b2")
10

# 获取交易哈希
> eth.getTransaction("0xb1f8e6f92260b7870aaa99e6f8e8f78c6c991cbd9c7b24c846365dcd1147f07c")
{
  blockHash: "0x047a7bfb275352ae58467a1078df71f4b14fa19660c646a9a0ab0454337789a2",
  blockNumber: 1,
  chainId: "0x6c",
  from: "0xcb0bf04fdb1dde448e5ef34568c3145b6f9103fb",
  gas: 21000,
  gasPrice: 1000000000,
  hash: "0xb1f8e6f92260b7870aaa99e6f8e8f78c6c991cbd9c7b24c846365dcd1147f07c",
  input: "0x",
  nonce: 0,
  r: "0xf87348f863df0044d588790c207d96bdb4a57b94362a5d51ad76ecfe05a2f201",
  s: "0x66cf27c90de49db8c1ec7d32d9967906b4182ef76215e20c119d06b13e9d3441",
  to: "0x45ed6706610d8b2c0d97027871636b39eb9829b2",
  transactionIndex: 0,
  type: "0x0",
  v: "0xfc",
  value: 10
}

3.8、查看区块

# 查看当前区块总数
> eth.blockNumber
177
> eth.getBlock(4)
{
  difficulty: 131264,
  extraData: "0xd883010a1a846765746888676f312e31382e35856c696e7578",
  gasLimit: 8031290,
  gasUsed: 0,
  hash: "0x4cefd8e79ba65ab6b692aaf7f98789a58cdb0a5fa59dc6251e756e8bfa77224b",
  logsBloom: "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
  miner: "0xcb0bf04fdb1dde448e5ef34568c3145b6f9103fb",
  mixHash: "0x7ca0368b1420c5ae28c05980aa90e29420ff996112f9a8ff3d9a0289a22a7a1a",
  nonce: "0x368b7a0b4b052002",
  number: 4,
  parentHash: "0xbf02ab12a7d3357471f3a7692782745e365c88de02e8f416646a0762a60faa3d",
  receiptsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
  sha3Uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
  size: 536,
  stateRoot: "0x1c9173dbf81dab449ddae081282bdec235d8deeea364c313ec0d61fa6031e3cd",
  timestamp: 1718342947,
  totalDifficulty: 524673,
  transactions: [],
  transactionsRoot: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
  uncles: []
}

七、配置合约到私有链中

        7.1、合约

pragma solidity ^0.8.19;



contract test{
    function testGeth(uint a) public view  returns(uint b){
        b = a * 100;
    }
    
}

       7.2、abi和bin

> abi
[{
    inputs: [{
        internalType: "uint256",
        name: "a",
        type: "uint256"
    }],
    name: "testGeth",
    outputs: [{
        internalType: "uint256",
        name: "b",
        type: "uint256"
    }],
    stateMutability: "view",
    type: "function"
}]
> bin
"0x6080604052348015600e575f80fd5b506101a08061001c5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c80632f3483451461002d575b5f80fd5b610047600480360381019061004291906100a9565b61005d565b60405161005491906100e3565b60405180910390f35b5f60648261006b9190610129565b9050919050565b5f80fd5b5f819050919050565b61008881610076565b8114610092575f80fd5b50565b5f813590506100a38161007f565b92915050565b5f602082840312156100be576100bd610072565b5b5f6100cb84828501610095565b91505092915050565b6100dd81610076565b82525050565b5f6020820190506100f65f8301846100d4565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61013382610076565b915061013e83610076565b925082820261014c81610076565b91508282048414831517610163576101626100fc565b5b509291505056fea2646970667358221220d93a45e5cc420131c3afd1e7cf89c1735fc398d32f296f6c458a7f703abf00fc64736f6c634300081a0033"

7.3、部署合约

        

# 评估合约手续费,判断账户是否可以进行部署
> web3.eth.estimateGas({data:bin})
53000

> eth.getBalance(personal.listAccounts[0])
1.22600999999999999999e+21   # 由于刚刚一直在挖矿没有关闭,所以余额变大了

> personal.unlockAccount(personal.listAccounts[0])
Unlock account 0xcb0bf04fdb1dde448e5ef34568c3145b6f9103fb
Passphrase: 
true
> var myContract = eth.contract(abi);
undefined
> var contract = myContract.new({from:personal.listAccounts[0],data:bin, gas:600000})
undefined
> contract
{
  abi: [{
      inputs: [{...}],
      name: "testGeth",
      outputs: [{...}],
      stateMutability: "view",
      type: "function"
  }],
  address: undefined,
  transactionHash: "0xe9602d91330272965c28901e11373ce8684d72f9c75b2899937f69bb3bab1224"
}

标签:geth,http,以太,私有,POW,--,personal,eth,区块
From: https://blog.csdn.net/qq_53930467/article/details/139678183

相关文章

  • Windows: 使用PowerShell管理Hyper-V虚拟机
    Hyper-V是Windows操作系统中强大的虚拟化平台,通过Hyper-V,用户可以创建和管理虚拟机(VM)。作为计算机专业人士,我们可能更倾向于使用命令行工具来高效地管理系统。在Windows上,PowerShell是一个功能强大的命令行工具,可以用来管理Hyper-V虚拟机。本文将详细介绍如何使用PowerShell......
  • 以太网交换机堆叠和级联的区别
    以太网交换机堆叠和级联是网络架构中的两种常见方法,用于扩展网络规模和增强网络性能。本文将详细比较以太网交换机堆叠和级联的六个区别。1.定义与作用:-以太网交换机堆叠:以太网交换机堆叠是将多个物理交换机通过堆叠模块或堆叠线缆连接在一起,形成一台逻辑上的大型交换机......
  • 禁止Windows用户使用cmd、powershell、注册表、*.bat脚本、修改网卡IP等操作
    如果你想让你的计算机或域控用户的计算机禁止使用cmd、powershell、注册表、bat脚本、修改网卡IP等操作1. 使用本地组策略(如果是本地用户)如果是非域用户,如果你在Windows10Pro或更高版本上,可以使用本地组策略(LocalGroupPolicy)来限制访问。打开“本地组策略编辑器”(gpedit.......
  • FlowUs本地部署:数据自主权与定制化服务的完美融合|FlowUs息流企业级解决方案本地私有化
    在当今数字化时代,企业对数据的控制和安全性要求越来越高,同时,用户对软件的使用习惯也趋向多样化。针对这些需求,FlowUs作为一款多功能的协作平台,提供了灵活的解决方案。FlowUs本地部署对于有本地化需求的客户,FlowUs支持企业私有化部署服务。这意味着企业可以根据自己的需求,在本......
  • 论文解读——AAMAS2024《OPEx: A Large Language Model-Powered Framework for Embodi
    一、研究背景  具身指令执行(EmbodiedInstructionFollowing,EIF)是指在一个特定的物理或虚拟环境中,使能自主代理(如机器人或虚拟代理)根据自然语言指令来执行复杂的任务。这种研究领域集中于探索自然语言理解与机器执行能力的结合,尤其是在模拟家庭或日常环境中,如何使代理......
  • git clone 私有仓库, 提示 "remote: Repository not found."
    现象私有仓库,已经在github里面关联了sshpubkey但是尝试使用gitclone将仓库克隆至本地时,提示"remote:Repositorynotfound.",如图解决方法改用AccessToken获取Github去到Setting->DeveloperSettings->personalaccesstokens->generatenewtoken......
  • 手把手教你搭建Docker私有仓库Harbor
    1、什么是Docker私有仓库Docker私有仓库是用于存储和管理Docker镜像的私有存储库。Docker默认会有一个公共的仓库DockerHub,而与DockerHub不同,私有仓库是受限访问的,只有授权用户才能够上传、下载和管理其中的镜像。这种私有仓库可以部署在本地云环境中,用于组织内部开发、测试和......
  • 私有化部署bitwarden密码管理器(二)——npm方式部署
    带域名解析有证书的国外Vps部署bitwarden密码管理器前期准备工作完成之后,接下来介绍带域名解析有证书的国外Vps部署bitwarden密码管理器,这种部署方式比较简单,所以比较推荐。NginxProxyManager介绍项目文档地址:https://nginxproxymanager.com/github地址:https://github.com......
  • 私有化部署bitwarden密码管理器(一)——环境准备
    碎碎念现在各种网站和手机APP都要求设置密码和输入密码,每个人都要设置大量的密码。如果都设为统一密码,就存在一旦一个密码被攻破,其他密码都失效的情况。如果要分别设置为不同密码,那么记住密码又成了一个困难的问题。所以密码管理工具也就应运而生,比较有名的密码管理工具有1Passwo......
  • 私有化部署bitwarden密码管理器(三)——nginx方式部署
    仅有IP无证书的环境部署bitwarden密码管理器虽然使用npm方式部署比较简单,但是很多小伙伴可能没有一台带域名国外vps,接下来介绍仅有IP的Vps,如国内的服务器无域名证书或者是本地无外网的环境如:虚拟机、NAS、树莓派等环境部署bitwarden密码管理器。部署NginxNginx和NginxProxy......