Ubuntu系统运行以太坊

安装以太坊应用geth、go语言

  1. su命令进入管理员权限,sudo mkdir test 创建test文件夹,cd test进入目录
  2. sudo git clone https://github.com/ethereum/go-ethereum.git 命令下载以太坊客户端源码
  3. 下载完成后在创建好的目录有了文件,使用cd go-ethereum命令再 make geth构建geth
  4. sudo tar -zxvf go1.9.2.linux-amd64.tar.gz -C /home/seina/test 把go解压到test目录里面
  5. vim /etc/profile 配置环境变量
    GOPATH=/home/seina/seina/test
    GOROOT=/opt/go
  6. 启动一个以太链接:
    没把geth放到全局变量,算了,以后运行
    ./usr/bin/geth version
    出现了版本号则可以在当前目录运行
    在这里插入图片描述
    在根目录里面,cd / 即可进入。

./usr/bin/geth --datadir ./test命令会在当前目录创建一个test文件夹然后执行全节点下载。
新建的test文件夹下面有两个文件,一个geth一个keystore。前者存储全节点信息,后者存放用户密钥。
rm -r test 命令删除测试用的test文件夹。

搭建一条私链

geth --datadir .–syncmode会启动节点同步,但是耗时占用资源大,故不做下载。

在根目录创建myChain文件夹,新建一个genesis.json
代码如下:

{
    "config": {
        "chainId": 15,
    },
    "difficulty": "2000",
    "gasLimit": "0x2fefd8"
    "alloc": {
        "0x42F656cD5Ce8D5bbCB5E6AAF862F08a50fC18F74": { "balance": "30000000000000" }
    }
}

保存退出后回到根目录,创建初始区块
./usr/bin/geth --datadir …/myChain/ init …/myChain/genesis.json
显示出如下效果,即表示私链创始成功。
Ubuntu系统运行以太坊_第1张图片
此时myChain文件夹出现了两个文件夹:geth和keystore。geth下有一个lightchaindata文件。初始信息全部保存在这个文件夹中。
…/usr/bin/geth --datadir . --networkid 8546
启动自己的私链。得到效果如图:
Ubuntu系统运行以太坊_第2张图片

写一个智能合约

现在同级目录下写一个合约代码,功能是计算一个数的平方。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 --bin test.sol

solc --abi test.sol

得到的效果如图所示:
Ubuntu系统运行以太坊_第3张图片
接下来打开另外一个终端,启动自己的私链,用以下代码启动:

geth --networkid 8546 --datadir ../myChain/ --identity "TestNode" --rpc --rpcport "8545"  --port "30303" --rpcaddr "localhost" --nodiscover --allow-insecure-unlock console

启动完成后需要定义sol文件编译出来的code 和 abi。复制粘贴以下编译出来的两端代码即可。其中注意code 需要 补充0x 作为开头。
Ubuntu系统运行以太坊_第4张图片

3.创建合约对象
contract = eth.contract(abi)
4.预估gas费用
eth.estimateGas({data: code})
5.解锁账号:
personal.unlockAccount(“0x37d901f62ea6648ad6fcbbcb8e53383b48f0c19a”)
输入密码返回true成功。
6.部署合约
initializer = {from: web3.eth.accounts[0], data: code, gas:300000};

7.定义token
token = contract.new(initializer)
8.开启挖矿,等待一会
miner.start()
9.停止挖矿
miner.stop()
10获取挖矿地址
token.address
11.部署合约在刚刚的地址
myContract = contract.at("")
12.调用合约方法
myContract.getHelloMessage.call()

附录:

安装solc代码段:

sudo add-apt-repository ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install solc

你可能感兴趣的:(硕士学习,ubuntu,区块链)