Ubuntu20.04初步学习区块链部署简单的智能合约
Posted liuyh19980
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ubuntu20.04初步学习区块链部署简单的智能合约相关的知识,希望对你有一定的参考价值。
目录
首先要安装VMware workstations虚拟机,并安装好ubuntu系统。下载地址:
环境准备
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上搭建一个私有链并部署一个简单的智能合约的全部步骤 。
以上是关于Ubuntu20.04初步学习区块链部署简单的智能合约的主要内容,如果未能解决你的问题,请参考以下文章
在Ubuntu中部署并测试HyperLedger Fabric
区块链入门Truffle 项目实战,Solidity IDE, 智能合约部署