目錄
環境準備
1、安裝curl、git
2、安裝go
3、配置go的環境變數
4、安裝以太坊環境
5、安裝solc(solidity編譯環境)
搭建私有鏈
一、準備創世區塊組態檔
二、初始化:寫入創世區塊
三、智能合約相關準備
四、啟動以太坊私有鏈節點
首先要安裝VMware workstations虛擬機,并安裝好ubuntu系統,下載地址:
下載Vmware虛擬機
Ubuntu20.04
環境準備
1、安裝curl、git
apt-get update
apt-get install git
apt-get install curl
2、安裝go
curl -O https://storage.googleapis.com/golang/go1.13.4.linux-amd64.tar.gz
Unpack it to the /usr/local (might require sudo)
tar -C /usr/local -xzf go1.13.4.linux-amd64.tar.gz
3、配置go的環境變數
mkdir -p ~/go; echo "export GOPATH=$HOME/go" >> ~/.bashrc
echo "export PATH=$PATH:$HOME/go/bin:/usr/local/go/bin" >> ~/.bashrc
source ~/.bashrc
驗證go :
go version
4、安裝以太坊環境
sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo add-apt-repository -y ppa:ethereum/ethereum-dev
sudo apt-get update
sudo apt-get install ethereum
5、安裝solc(solidity編譯環境)
sudo add-apt-repository ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install solc
搭建私有鏈
首先創建私有鏈專門的data目錄并進入:
mkdir /home/private_eth1
cd private_eth1
一、準備創世區塊組態檔
以太坊支持自定義創世區塊,要運行私有鏈,我們就需要定義自己的創世區塊,創世區塊資訊寫在一個json格式的組態檔中,首先將下面的內容保存到一個json檔案中,例如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": {
"0x1e82968C4624880FD1E8e818421841E6DB8D1Fa4" : {"balance" : "30000000000000000000"}
},
"number": "0x0",
"gasUsed": "0x0",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000"
}
二、初始化:寫入創世區塊
使用以下命令初始化創世區塊,指定私有鏈資料的存放目錄、創世區塊檔案genesis.json目錄.
/*
* --datadir:指定私鏈資料的存放目錄.當要在同一計算機中創建其他私鏈節點時,可創建另外的檔案夾,例如data2,
* 然后通過--datadir data2區分不同的私鏈節點,如果未設定--datadir,則會讀取以太坊主網的資料,
* 默認位置在/root/.ethereum中,
* */
$ geth --datadir /home/private_eth1/ init genesis.json
成功后結果應該如下:
三、智能合約相關準備
在這里使用一個簡單的輸出平方的合約:新建一個檔案,命名為test.sol,內容如下:
// SPDX-License-Identifier: SimPL-2.0
pragma solidity ^0.8.6;
contract test{
function multiply(uint256 input) public pure returns(uint256 res){
return input * input;
}
}
然后在這個sol所在的目錄進行編譯(要用到solc,前面已經安裝過)
1. 利用solc工具獲取合約的二進制編碼,保存
solc --bin test.sol
2.獲取合約的abi,保存
solc --abi test.sol
所得到的結果如下:

需要把這兩個結果找個地方存一下,可以存在記事本里,或者下一步重新開啟一個終端,這個終端暫時不要動,
四、啟動以太坊私有鏈節點
初始化完成后,就有了一條自己的私有鏈,之后就可以啟動自己的私有鏈節點并做一些操作,在終端中輸入以下命令即可啟動節點,此處私有鏈不用同步全部區塊資料(注意修改路徑)
geth --networkid 666 --datadir /home/liuyihu/private_eth1/ --identity "TestNode" --rpc --rpcport "8545" --port "30303" --rpcaddr "localhost" --nodiscover --allow-insecure-unlock console
啟動成功如下:

創建新賬戶,創建成功將回傳賬戶地址
personal.newAccount("123456") # “123456”是賬戶密碼
記好密碼不要忘記!
1.定義code和abi,注意code就是剛剛的bin,要用0x開頭,加引號;

2.創建合約物件
contract = eth.contract(abi)

3.預估gas費用
eth.estimateGas({data: code})

4.解鎖賬號:
personal.unlockAccount("0x37d901f62ea6648ad6fcbbcb8e53383b48f0c19a")

此處括號里的地址是前面自己創建的賬戶地址,記得修改,
輸入密碼回傳true成功,
5.部署合約
initializer = {from: web3.eth.accounts[0], data: code, gas:300000};

6.定義token
token = contract.new(initializer)

7.開啟挖礦,此處需要等待一會
miner.start()
出現🔨 mined potential block則停止挖礦

8.停止挖礦
miner.stop()
此處回傳null,
9獲取挖礦地址
token.address
10.部署合約在剛剛的地址
myContract = contract.at("")
11.呼叫合約方法
myContract.multiply.call(9)
注意,multiply是合約里的方法,call是呼叫,此處呼叫這個方法計算9的平方,回傳值應該為81,最后三步的運行結果如下:

以上,就是在ubuntu20.04上搭建一個私有鏈并部署一個簡單的智能合約的全部步驟 ,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/336303.html
標籤:區塊鏈

