加入節點網絡
上一章中,我們介紹了 DMC 的節點網絡。這一章中,我們將加入其中,成為一個節點,親身體會區塊鏈網絡的魅力。
dmc-nodes
dmc-nodes 是由 DMC 社區提供的一款快速啟動 DMC 主網節點的腳本工具,他能幫助開發者快速啟動三種不同類型的節點。
項目地址:https://github.com/datamallchain/dmc-nodes
安裝
1 | git clone git@github.com:datamallchain/dmc-nodes.git |
啟動
1 | dmc seed.js // 快速啟動一個同步節點 |
默認數據,配置存儲位置 /data
主網全節點數據同步
全節點區塊數據同步耗時長,DMC 社區提供最新鏡像啟動服務,極大縮短區塊同步時間。
服務地址:http://backups.dmctech.io:2748/
使用方法
下載數據:
訪問 http://backups.dmctech.io:2748/ 選擇想要同步的數據包文件,直接點擊下載
或者獲取文件URL,使用 wget 命令進行下載
1
wget http://backups.dmctech.io:2748/data_21395806.tar.gz
解壓文件:
1
tar -zxvSf data_21395806.tar.gz
修改快速啟動腳本配置文件 config.json :
將 data_dir 參數指向剛剛數據文件解壓的 data 目錄即可。
1
"data_dir": "data",
啟動全節點
1
dmc seed.js
手動加入 DMC 節點網絡
如果你不使用 dmc-nodes 這個工具進行節點啟動的話,你也可以自行編寫啟動腳本,加入到節點網絡中來。
加入 DMC 網絡配置需要涉及幾個關鍵信息:
獲得節點網絡的 chainId
TestNet:
1 | chainId: 'c102a8115bef9e4a4e751559aac2cdc2859417e6476f8cb6054cd3f7dffe1ce4' |
DMC 主網:
1 | chainId: '4d1fb981dd562d2827447dafa89645622bdcd4e29185d60eeb45539f25d2d85d' |
提供 P2P 監聽的地址以及端口
1 | 'p2p-listen-endpoint' : '0.0.0.0:9870' |
區塊數據同步的目標節點信息
區塊數據同步必須先從已經在運行的超級節點中同步數據。
TestNet:1
2
3
4
5
6
7
8{
"p2p-peer-address": [
"154.31.0.101:9870",
"154.31.0.101:9901",
"154.31.0.72:5701",
"154.31.0.72:5702"
]
}
DMC 主網:
DMC 主網的超級節點已全部被社區節點取代,具體的節點信息,請訪問 https://github.com/datamallchain/p2p-address/blob/main/p2p_address.json
1 | { |
注意:示例中給出的 DMC 主網 BP P2P 地址,會發生變動,請時刻關注。
genesis.json 文件
TestNet:
1 | { |
DMC 主網:
1 | { |
如何成為一個同步節點
如果節點僅僅作為同步 DMC 區塊數據,非常簡單。以下代碼保存至 sync_node.js
:
1 | var chain = require('chain'); |
上述代碼中,net
模塊中的 p2p-peer-address
是一個可變值,請注意修改。
運行同步節點:
1 | dmc sync_node.js |
如何成為一個 BP 節點
(* BP 區塊生產者)
重要提示:使用 Producer 身份發起註冊申請,最好 producer key 不要和 active key 一樣!
如果節點需要申請註冊成為 DMC 主網的區塊生產者,需要涉及到 3 個方面:
- 配置 Producer 信息啟動 DMC 節點服務
- 使用 Producer 身份發起註冊申請
- 鑄造 PST 使得成為 Producer
配置 Producer 信息啟動 DMC 節點服務
只有持有的 PST@datamall
數量達到一定的值,DMC 節點才會真正的成為 Producer,擁有生產區塊的權限,其他情況僅僅作為同步區塊數據的身份存在。
以下代碼實現了配置一個 Producer,保存代碼至 producer_node.js
:
1 | const dmc = require('chain'); |
對於 BP 的 API 節點建議禁用外網 RPC,如果節點需要 RPC 訪問,建議使用內網 HTTP,對應配置示例代碼如下:1
2
3dmc.load("http", {
"http-server-address": "127.0.0.1:8870",
});
其中 config.json
的內容為
1 | { |
參數說明
配置項 | 說明 | 備註 |
---|---|---|
chainId | DMC 區塊鏈網絡 ID | 不可更改 |
httpEndpoint | 我們提供的 RPC 接口 | 不可更改 |
url | 註冊 BP 的 url 信息 | 按需更改 |
location | 註冊 BP 的 地址 | 按需更改 |
config_dir | 本地區塊鏈配置保存位置 | 不推薦更改 |
data_dir | 本地區塊鏈數據保存位置 | 不推薦更改 |
http_port | 本地區塊鏈監聽的 RPC 端口,對外提供訪問服務 | 按需更改 |
p2p_port | 本地區塊鏈監聽的 p2p 端口,用於其他節點連接 | 按需更改 |
p2p_peer_address | 需要連接的其他節點 P2P 地址 | 按需更改 |
安裝依賴1
dmc --install dmc.js
運行 Producer 節點:
1 | dmc producer_node.js |
根據要求輸入私鑰和出塊者名稱,具體格式為
producer-name:private-key
即出塊者名稱:私鑰
,以英文:
為分隔。
以testnetbppa4為例,輸入:
testnetbppa4:5K7NFbDfjxV7khfKdRvPEUt5Ny***cdfiR83p1t3npPEavAegc3
注意保持該進程不會被關閉
使用 Producer 身份發起註冊申請
以下代碼保存至 register_bp.js
:
1 | var DMC = require('dmc.js'); |
執行代碼
1 | dmc register_bp.js |
輸入內容同上
鑄造(mint) PST@datamall
成為 Producer
只有持有足量的 PST@datamall
才有可能成為 Produer,其中鑄造 PST 數量和鑄造合約有關,公式為$PST = \frac{DMC}{m’\times p} $
以下代碼保存至mint.js
1 | var DMC = require('dmc.js'); |
執行代碼
1 | $ dmc mint.js |
1 | input the producer-name:private-key! oooo:xxxx |
上例會鑄造 20 PST@datamall
硬件推薦配置
名稱 | 配置 |
---|---|
CPU | 8 核心 |
內存 | 16GB RAM |
儲存空間 | 500GB 硬盤 |