美文网首页
以太坊私链的搭建详情

以太坊私链的搭建详情

作者: CPinging | 来源:发表于2018-12-25 22:31 被阅读20次

私链搭建过程

这里我使用了JSON格式的搭建方法,并使用Geth来辅助搭建。

注意:这里使用的是MacOs系统

参考文章:https://www.cnblogs.com/lion.net/p/7809862.html

第一步,我们需要下载geth源码并编译。

1 首先打开https://github.com/ethereum/go-ethereum.git

2 下载压缩包到某个文件夹下

3 cd go-ethereum-master

4 make geth

5 make all

然而,当我运行geth命令,我发现并不能成功:

后来经过一番测试,我们要这样运行(找到源码的bin目录下的geth):

image.png

之后,我们需要在某个文件夹下创建xxx.json文件:

image.png

方法如下:

cat > cp.json

{
    "config": {
      "chainId": 15,
      "homesteadBlock": 0,
      "eip155Block": 0,
      "eip158Block": 0
    },
    "difficulty": "4",
    "gasLimit": "2100000",
    "alloc": {
      "7df9a875a174b3bc565e6424a0050ebc1b2d1d82": {
        "balance": "300000"
      },
      "f41c74c9ae680c1aa78f42e5647a62f353b7bdde": {
        "balance": "400000"
      }
} }

这里我们初始化了两个地址,并赋值了启动资金。

"alloc": {
      "7df9a875a174b3bc565e6424a0050ebc1b2d1d82": {
        "balance": "300000"
      },
      "f41c74c9ae680c1aa78f42e5647a62f353b7bdde": {
        "balance": "400000"
      }

之后,我们需要在拥有cp.json的文件夹下运行命令:

geth init cp.json --datadir blockchainData

之后我们在另外一个shell中运行:

geth --networkid 123 --datadir blockchainData console

以便打开终端。

然后我们可以运行相应的命令:

由于我们在这个地址下预存了部分钱,所以能够显示余额。

image.png

查看帐户,可以看到当前帐户是空的:

web3.eth.accounts

创建帐户的方式有两种,第一种创建帐户时直接初始化密码:

web3.personal.newAccount("123456")
image.png

其中返回的0xb2d06dc22f1bcd9f8c2f7530d955480c49be40e5是帐户,123456是帐户的密码。

第二种方法是先创建账户,然后输入密码:

> web3.personal.newAccount()
Passphrase:
Repeat passphrase:

此时我们查看账户情况:

image.png

这个时候,我们需要设置一个miner:

miner.setEtherbase("0xb2d06dc22f1bcd9f8c2f7530d955480c49be40e5")。

之后我们开始挖矿:

得到:

image.png

之后我们编写智能合约:

pragma solidity ^0.4.4;
                
contract test {
    function multiply(uint a) constant returns(uint d){
        return a * 7;
    }
}

之后我们需要获得:

  • 字节码
image.png image.png
> var bin = "0x6060604052341561000f57600080fd5b60b18061001d6000396000f300606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60006007820290509190505600a165627a7a72305820b4a0d85170cc10fb54be34cdb092932573cb7cff24711610a0b1b71a06cc34c90029"
undefined

这里注意:0x

之后我们输入bin

image.png

对于abi,我们需要借助网站:http://www.bejson.com/jsonviewernew/

我们复制下面内容:

image.png

点击这个:


得到:

image.png

继续点击去除转义:

image.png

得到:

[{"constant":true,"inputs":[{"name":"a","type":"uint256"}],"name":"multiply","outputs":[{"name":"d","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]

复制到shell中,我们得到:

> var ab = [{"constant":true,"inputs":[{"name":"a","type":"uint256"}],"name":"multiply","outputs":[{"name":"d","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]
image.png
> abi
[{
    constant: true,
    inputs: [{
        name: "a",
        type: "uint256"
    }],
    name: "multiply",
    outputs: [{
        name: "d",
        type: "uint256"
    }],
    payable: false,
    stateMutability: "view",
    type: "function"
}]

之后我们需要查询这个函数需要的gas值:

web3.eth.estimateGas({data: bin})
image.png

之后

> var my = eth.contract(abi)
undefined
> var contract = my.new({from:cp0,data:bin,gas:100000});
INFO [12-25|21:07:30.564] Submitted contract creation              fullhash=0xbd82da7cfd303de1c5abcc74352bb09fb421b6329cca4583cd69ff5e14fc5d8d contract=0xA87B6429EC4A7bADDC033014B37b12B970bc1D5f
undefined

这里cp0我曾经运行过 cp0 = web3.eth.accounts[0]

之后运行contract

> contract
{
  abi: [{
      constant: true,
      inputs: [{...}],
      name: "multiply",
      outputs: [{...}],
      payable: false,
      stateMutability: "view",
      type: "function"
  }],
  address: undefined,
  transactionHash: "0xbd82da7cfd303de1c5abcc74352bb09fb421b6329cca4583cd69ff5e14fc5d8d"
}

然而这个私链机制需要我们进行挖矿才能得到后续的动作:

> miner.start()
INFO [12-25|21:08:49.037] Updated mining threads                   threads=4
INFO [12-25|21:08:49.037] Transaction pool price threshold updated price=1000000000
null

之后查看区块状态:

> txpool.status
{
  pending: 0,
  queued: 0
}

查看这个合约的地址:

> eth.getCode(contract.address)
"0x606060405260043610603f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063c6888fa1146044575b600080fd5b3415604e57600080fd5b606260048080359060200190919050506078565b6040518082815260200191505060405180910390f35b60006007820290509190505600a165627a7a72305820b4a0d85170cc10fb54be34cdb092932573cb7cff24711610a0b1b71a06cc34c90029"

之后我们运行合约:

image.png

即部署成功。

相关文章

网友评论

      本文标题:以太坊私链的搭建详情

      本文链接:https://www.haomeiwen.com/subject/klbqlqtx.html