目录
环境准备
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上搭建一个私有链并部署一个简单的智能合约的全部步骤?。
|