创建私链并部署合约

使用dev的方式创建以太坊私链(单节点)

启动私链

# 开启私链
geth --networkid 123 --dev --datadir data1 --rpc --rpcaddr 192.168.1.114 --rpcport 8989 --port 3000
# 进入私链控制台
cd data1
geth attach ipc:geth.ipc

创建合约

  1. 使用npm下载solcjs
npm install -g solc@0.4.17
  1. 新建 HelloWorld.sol 文件,并写如下代码
pragma solidity ^0.4.17;

contract HelloWorld{
    function mutiply(uint number) public returns(uint){
        return number*6;
    }
}
  1. 使用solcjs编译代码,得到二进制和abi文件
solcjs --bin --abi HelloWorld.sol

部署合约

var code = "0x..." //将编译生成的二进制内容拷贝到字符串中
var abi = ... //将abi内容拷贝过来
var myContract = eth.contract(abi)
web3.eth.estimateGas({data:code}) //评估汽油费
personal.unlockAccount(personal.listAccount[0]) //输入密码,解锁第一个账户
//部署合约
var contract = myContract.new({from:personal.listAccount[0],data:code,gas:200000})
//挖矿,将合约加入区块链
miner.start()
miner.stop()
//测试方法
contract.mutiply.call(6) //结果为 36

使用创世纪块初始化以太坊私链,并部署多节点

新建创世块文件,genesis.json 并写入以下内容:

{
  "config": {
    "chainId": 101,
    "homesteadBlock": 0,
    "eip155Block": 0,
    "eip158Block": 0
  },
  "alloc": {},
  "coinbase": "0x0000000000000000000000000000000000000000",
  "difficulty": "0x400",
  "extraData": "",
  "gasLimit": "0xffffffff",
  "nonce": "0x0000000000000042",
  "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "timestamp": "0x00"
}

节点1

  1. 初始化节点1的创世块
geth --datadir  data1  init  genesis.json
  1. 启动节点1
geth  --datadir data1 --rpcport 8481 --port 30301 --networkid 29381 console

节点2

  1. 初始化节点2的创世块
geth --datadir  data2  init  genesis.json
  1. 启动节点2
geth  --datadir data2 --rpcport 8482 --port 30302 --networkid 29381 console

连接两个节点并验证连接的有效性

  1. 查看节点1的信息
admin.nodeInfo

结果:

{
  enode: "enode://49d1e1238345d2a457d42da3a87a22cfbecca9c55bab57fa0f15ab8d05c3c107147da17b38e1fbe7ce608f02e8968d4d16501eb794eb0edf2404fdf26d9bffa7@113.46.147.90:30301",
  id: "61fa75d7e36d6949d8486e485a58a81454b69692fc78e47c5a104b60e02d2649",
  ip: "113.46.147.90",
  listenAddr: "[::]:30301",
  name: "Geth/v1.8.17-stable/linux-amd64/go1.9.7",
  ports: {
    discovery: 30301,
    listener: 30301
  },
  protocols: {
    eth: {
      config: {
        chainId: 101,
        eip150Hash: "0x0000000000000000000000000000000000000000000000000000000000000000",
        eip155Block: 0,
        eip158Block: 0,
        homesteadBlock: 0
      },
      difficulty: 1024,
      genesis: "0x2720038ef46044a7a895296b85745294340ecfcedc32f8c9e9802129aeb62890",
      head: "0x2720038ef46044a7a895296b85745294340ecfcedc32f8c9e9802129aeb62890",
      network: 29381
    }
  }
}
  1. 将节点1的enode信息加入节点2

在节点2的终端输入以下内容:

admin.addPeer("enode://49d1e1238345d2a457d42da3a87a22cfbecca9c55bab57fa0f15ab8d05c3c107147da17b38e1fbe7ce608f02e8968d4d16501eb794eb0edf2404fdf26d9bffa7@113.46.147.90:30301")
  1. 验证节点是否加入成功
admin.peers

结果:

[{
    caps: ["eth/63"],
    enode: "enode://49d1e1238345d2a457d42da3a87a22cfbecca9c55bab57fa0f15ab8d05c3c107147da17b38e1fbe7ce608f02e8968d4d16501eb794eb0edf2404fdf26d9bffa7@113.46.147.90:30301",
    id: "61fa75d7e36d6949d8486e485a58a81454b69692fc78e47c5a104b60e02d2649",
    name: "Geth/v1.8.17-stable/linux-amd64/go1.9.7",
    network: {
      inbound: false,
      localAddress: "192.168.1.114:38360",
      remoteAddress: "113.46.147.90:30301",
      static: true,
      trusted: false
    },
    protocols: {
      eth: {
        difficulty: 1024,
        head: "0x2720038ef46044a7a895296b85745294340ecfcedc32f8c9e9802129aeb62890",
        version: 63
      }
    }
}]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

攻城老湿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值