Ubuntu20.04初步学习区块链部署简单的智能合约

Posted liuyh19980

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ubuntu20.04初步学习区块链部署简单的智能合约相关的知识,希望对你有一定的参考价值。

目录

环境准备

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

以上是关于Ubuntu20.04初步学习区块链部署简单的智能合约的主要内容,如果未能解决你的问题,请参考以下文章

XuperChain 百度区块链简易学习帖

在Ubuntu中部署并测试HyperLedger Fabric

区块链入门Truffle 项目实战,Solidity IDE, 智能合约部署

使用 Browser-solidity 在 Go-Ethereum 上进行简单的智能合约部署

区块链入门教程--开发编译部署调用HelloWorld合约

区块链手机操作系统已初步完成