linux+geth+不能同步公链数据,以太坊公链私链geth同步

本文详细介绍了如何在Linux环境中搭建以太坊私有链,包括安装必要的环境、Go语言、geth客户端,创建并初始化创世区块,以及设置启动脚本。同时,还涉及到了智能合约的安装以及同步节点和获取链状态的操作。
摘要由CSDN通过智能技术生成

1、安装必备环境插件 #1-5 公有链 +6-10 私有链

yum update -y && yum install git wget bzip2 vim gcc-c++ ntp epel-release nodejs cmake -y

yum install -y curl git golang nodejs gcc-c++

2、安装go语言

wget https://dl.google.com/go/go1.10.linux-amd64.tar.gz

tar -C /usr/local -xzf go1.10.linux-amd64.tar.gz

echo 'export GOROOT=/usr/local/go' >> /etc/bashrc

echo 'export PATH=

math?formula=PATH%3AGOROOT/bin' >> /etc/bashrc

echo 'export GOPATH=/root/go' >> /etc/bashrc

echo 'export PATH=

math?formula=PATH%3AGOPATH/bin' >> /etc/bashrc

source /etc/bashrc

3、验证go语言安装成功

[root@jubeiTest root]# go version

go version go1.10 linux/amd64

4、安装geth客户端 '我的路径'=/mnt/

git clone https://github.com/ethereum/go-ethereum.git

cd go-ethereum

make all

echo 'export PATH=$PATH:/’你的路径’/go-ethereum/build/bin' >> /etc/bashrc

source /etc/bashrc

5、验证geth

[root@jubeiTest go-ethereum]# geth version

Geth

Version: 1.8.18-unstable

Git Commit: 1ff152f3a43e4adf030ac61eb5d8da345554fc5a

Architecture: amd64

Protocol Versions: [63 62]

Network Id: 1

Go Version: go1.10

Operating System: linux

GOPATH=/root/go

GOROOT=/usr/local/go

6、智能合约

cd ~

wget https://cmake.org/files/v3.9/cmake-3.9.2.tar.gz

tar xvf cmake-3.9.2.tar.gz && cd cmake-3.9.2

./configure && make && make install

pwd

/home/ddp/cmake-3.9.2

cd /mnt/

mkdir geth_data

touch start.sh

chmod 755 start.sh

vim start.sh

(nohup geth --syncmode "fast" --cache=512 --datadir "/mnt/geth_data/data0" --rpc --rpcapi db,net,eth,web3,personal --rpcaddr 0.0.0.0 --rpccorsdomain "*" 2>>geth_log &)

sh start.sh

cd geth_data

geth attach ./geth.ipc

eth.syncing

同步节点

eth.syncing

{

currentBlock: 164096,

highestBlock: 6841125,

knownStates: 318087,

pulledStates: 307252,

startingBlock: 0

}

7、创建创世文件(genesis.json)

{

"config": {

"chainId": 15,

"homesteadBlock": 0,

"eip155Block": 0,

"eip158Block": 0

},

"alloc" : {},

"coinbase" : "0x0000000000000000000000000000000000000000",

"difficulty" : "0x20000",

"extraData" : "",

"gasLimit" : "0x2fefd8",

"nonce" : "0x0000000000001993",

"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",

"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",

"timestamp" : "0x00"

}

8、初始化创世文件

$ geth --datadir ‘你的路径’ init ‘你的路径’/genesis.json

9、创建start.sh脚本

(nohup geth --syncmode "fast" --cache=512 --datadir "/mnt/geth_data/data0" --rpc --rpcapi db,net,eth,web3,personal --rpcaddr 0.0.0.0 --rpccorsdomain "*" 2>>geth_log &)

10、进入控制台

math?formula=cd%20%E2%80%98%E4%BD%A0%E7%9A%84%E8%B7%AF%E5%BE%84%E2%80%99 geth attach ./geth.ipc

同步命令eth.syncing

history命令

yum update -y && yum install git wget bzip2 vim gcc-c++ ntp epel-release nodejs cmake -y

wget https://dl.google.com/go/go1.10.linux-amd64.tar.gz

tar -C /usr/local -xzf go1.10.linux-amd64.tar.gz

echo 'export GOROOT=/usr/local/go' >> /etc/bashrc

echo 'export PATH=$PATH:$GOROOT/bin' >> /etc/bashrc

echo 'export GOPATH=/root/go' >> /etc/bashrc

echo 'export PATH=$PATH:$GOPATH/bin' >> /etc/bashrc

source /etc/bashrc

go version

cd /mnt/

git clone https://github.com/ethereum/go-ethereum.git

cd go-ethereum/

make all

echo 'export PATH=$PATH:/mnt/go-ethereum/build/bin' >> /etc/bashrc

source /etc/bashrc

cd /mnt/

mkdir

mkdir geth_data

cd geth_data/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
进行geth私链的硬分叉需要以下步骤: 1. 编写分叉代码:编写一个智能合约,其中包括原始代码以及要执行的新代码。 2. 执行分叉代码:在私链上运行分叉代码,以使节点能够识别新的规则。 3. 更新节点:更新参与私链的节点,以便它们能够识别新规则并执行新代码。 4. 启动分叉:启动私链以执行硬分叉。 以下是更详细的步骤: 1. 编写分叉代码 首先,你需要编写一个智能合约,其中包括原始代码以及要执行的新代码。在新代码中,你需要指定要执行的新规则。 例如,如果你要创建一个新的代币,你需要指定代币的名称、符号和总量。在这个过程中,你还需要指定新规则的实现方式。 以下是一个创建新代币的示例代码: ``` pragma solidity ^0.4.16; contract MyToken { string public name; string public symbol; uint8 public decimals; uint256 public totalSupply; mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; function MyToken() public { name = "MyToken"; symbol = "MT"; decimals = 18; totalSupply = 1000000 * 10**uint256(decimals); balanceOf[msg.sender] = totalSupply; } event Transfer(address indexed from, address indexed to, uint256 value); function transfer(address _to, uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); require(balanceOf[_to] + _value >= balanceOf[_to]); balanceOf[msg.sender] -= _value; balanceOf[_to] += _value; Transfer(msg.sender, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value >= balanceOf[_to]); require(_value <= allowance[_from][msg.sender]); balanceOf[_from] -= _value; balanceOf[_to] += _value; allowance[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } } ``` 在这个示例中,我们创建了一个名为 "MyToken" 的代币,符号为 "MT",小数点为 18,总量为 1000000。 2. 执行分叉代码 接下来,你需要在私链上运行分叉代码,以使节点能够识别新规则。 在这个过程中,你需要将新代码添加到私链中。你可以使用 Remix 或 Truffle 等工具来编译和部署智能合约。 例如,你可以使用以下命令在私链上部署 MyToken 合约: ``` var myToken = web3.eth.contract(abi).new({from:web3.eth.accounts[0], data:bytecode, gas: 3000000}, function(e, contract){ if(!e) { if(!contract.address) { console.log("Contract transaction send: TransactionHash: " + contract.transactionHash + " waiting to be mined..."); } else { console.log("Contract mined! Address: " + contract.address); console.log(contract); } } }); ``` 执行以上命令后,你应该可以在私链上看到新的代币合约地址。 3. 更新节点 接下来,你需要更新参与私链的节点,以便它们能够识别新规则并执行新代码。 在这个过程中,你需要将新代码添加到节点中。你可以使用以下命令将新合约添加到节点中: ``` geth attach ipc:/path/to/geth.ipc var myTokenContract = eth.contract(abi); var myToken = myTokenContract.at("0x123456..."); ``` 在以上命令中,你需要将 abi 和地址替换为你自己的值。 4. 启动分叉 最后,你需要启动私链以执行硬分叉。 你可以使用以下命令启动私链以执行硬分叉: ``` geth -- datadir /path/to/chaindata --networkid 1234 --port 30303 --rpc --rpcport 8545 --rpcaddr 127.0.0.1 --rpcapi "eth,net,web3,personal" --gasprice 0 --nodiscover --maxpeers 0 --unlock 0 --password /path/to/passwordfile.txt --mine --targetgaslimit 4700000 --fork "0x1234567890abcdef" --cache 1024 ``` 在以上命令中,你需要将 datadir、networkid、port、rpcport、rpcaddr、password 和 fork 替换为你自己的值。 这个命令将启动私链并执行硬分叉。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值