目录
首先要安装VMware workstations虚拟机,并安装好ubuntu系统。下载地址:
https://releases.ubuntu.com/20.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 tar -C /usr/local -xzf go1.13.4.linux-amd64.tar.gz
(might require sudo)
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" --port "30303" --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://blog.csdn.net/liuyh19980/article/details/120960387