1. 程式人生 > >星雲鏈智能合約開發(三):運行星雲鏈

星雲鏈智能合約開發(三):運行星雲鏈

星雲鏈智能合約開發 安裝星雲鏈

創世區塊配置

在項目根目錄下的conf/default/genesis.conf,為創世區塊配置文件。

meta {
  # 每條鏈的唯一標識
  # 每個區塊和交易只會屬於一條唯一的鏈,保證安全性
  chain_id: 100
}

consensus {
  # 在貢獻度證明(PoD)被充分驗證前,星雲鏈采用DPoS共識算法
  # DPoS共識中,21個人組成一個朝代
  # 每隔一段時間都會切換朝代,每個朝代內,21個礦工輪流出塊
  # 由於DPoS只是過渡方案,所以暫時不開放給公眾挖礦,即當前版本朝代不會發生變更
  dpos {
    # 初始朝代,包含21個初始礦工地址
    dynasty: [
      [ miner address ],
      ...
    ]
  }
}

# 預分配的代幣
token_distribution [
  {
    address: [ allocation address ]
    value: [ amount of allocation tokens ]
  },
  ...
]

在此,我們使用默認配置即可,暫不用修改。

星雲節點配置

在項目根目錄下的conf/default/config.conf,為星雲節點配置文件

# 網絡配置
network {
  # 對於全網第一個節點,不需要配置seed
  # 否則,其他節點啟動時需要配置seed,seed節點將會把網絡中其他節點的路由信息同步給剛啟動的節點
  # 可以配置多個seed, ["...", "..."]
  seed: ["/ip4/127.0.0.1/tcp/8680/ipfs/QmP7HDFcYmJL12Ez4ZNVCKjKedfE7f48f1LAkUc3Whz4jP"]

  # 節點監聽網絡消息端口,可以配置多個
  listen: ["0.0.0.0:8680"]

  # 網絡私鑰,用於確認身份節點
  # private_key: "conf/network/id_ed25519"
}

# 鏈配置
chain {
  # 鏈的唯一標識
  chain_id: 100

  # 數據存儲地址
  datadir: "data.db"

  # 賬戶keystore文件存儲地址
  keydir: "keydir"

  # 創世區塊配置
  genesis: "conf/default/genesis.conf"

  # 簽名算法,請勿修改
  signature_ciphers: ["ECC_SECP256K1"]

  # 礦工地址,礦工的keystore文件需要放置在配置的keydir下
  miner: "n1XkoVVjswb5Gek3rRufqjKNpwrDdsnQ7Hq"

  # Coinbase地址,該地址用於接收礦工的挖礦獎勵,可以和礦工地址一致
  # 該地址的keystore無需暴露,不用放置在配置的keydir下
  coinbase: "n1FF1nz6tarkDVwWQkMnnwFPuPKUaQTdptE"

  # 礦工地址的密碼
  passphrase: "passphrase"
}

# API配置
rpc {
    # GRPC服務端口
    rpc_listen: ["127.0.0.1:8684"]

    # HTTP服務端口
    http_listen: ["127.0.0.1:8685"]

    # 開放的API模塊
    # API模塊包含所有和用戶私鑰無關的接口
    # Admin模塊包含所有和用戶私鑰相關的接口,需要慎重考慮該模塊的訪問權限
    http_module: ["api", "admin"]
}

# 日誌配置
app {
    # 日誌級別: 支持[debug, info, warn, error, fatal]
    log_level: "info"

    # 日誌存放位置
    log_file: "logs"

    # 是否打開crash report服務
    enable_crash_report: false
}

# 監控服務配置
stats {
    # 是否打開監控服務
    enable_metrics: false

    # 監控服務將數據上傳到Influxdb
    # 配置Influxdb的訪問信息
    influxdb: {
        host: "http://localhost:8086"
        db: "nebulas"
        user: "admin"
        password: "admin"
    }
}

在此,我們使用默認配置即可,暫不用修改。

礦工節點配置

在項目根目錄下的conf/example/miner.conf,為礦工節點配置文件

network {
  # seed: "UNCOMMENT_AND_SET_SEED_NODE_ADDRESS"
  seed: ["/ip4/127.0.0.1/tcp/8680/ipfs/QmP7HDFcYmJL12Ez4ZNVCKjKedfE7f48f1LAkUc3Whz4jP"]
  listen: ["0.0.0.0:8780"]
  network_id: 1
}

chain {
  chain_id: 100
  datadir: "miner.1.db"
  keydir: "keydir"
  genesis: "conf/default/genesis.conf"
  start_mine: true
  # 總共21個礦工,在我們目前的測試環境中,由於我們只啟動了21個礦工中的一個,就是coinbase,挖礦獎勵將放入該賬戶
  coinbase: "n1XkoVVjswb5Gek3rRufqjKNpwrDdsnQ7Hq"
  miner: "n1FF1nz6tarkDVwWQkMnnwFPuPKUaQTdptE"
  # 密碼
  passphrase: "passphrase"
  # 加密算法
  signature_ciphers: ["ECC_SECP256K1"]
}

rpc {
    rpc_listen: ["127.0.0.1:8784"]
    http_listen: ["127.0.0.1:8785"]
    http_module: ["api","admin"]

    # http_cors: []
}

app {
    log_level: "debug"
    log_file: "logs/miner.1"
    enable_crash_report: true
}

stats {
    enable_metrics: false
    influxdb: {
        host: "http://localhost:8086"
        db: "nebulas"
        user: "admin"
        password: "admin"
    }
}

啟動星雲鏈

此時啟動的星雲鏈是本地的私有鏈,和官方的測試網和主網沒有任何相互關聯

第一步:啟動你的第一個星雲節點。

cd $GOPATH/src/github.com/nebulasio/go-nebulas
./neb -c conf/default/config.conf

啟動成功的話,將會看到如下信息
技術分享圖片

第二步:啟動你的第一個礦工節點,它的seed節點即我們剛剛啟動的第一個節點。

cd $GOPATH/src/github.com/nebulasio/go-nebulas
./neb -c conf/example/miner.conf

在這個節點啟動後,你會先看到如下信息,表示當前節點正在找種子節點同步。
技術分享圖片

等待一會兒,將會看到如下信息,表示當前節點已經連上了seed節點完成了同步。
技術分享圖片

再等待幾分鐘,你會看到如下信息,表示當前礦工節點挖出了第一個區塊。
技術分享圖片

由於我們只啟動了21個礦工節點中的一個礦工節點,所以每隔15*21s才出一個塊。你可以啟動更多的礦工節點,填補的空缺。但是需要註意,多個節點間的端口號不要相互沖突了。

星雲鏈智能合約開發(三):運行星雲鏈