搭建本地測試節點

注意:搭建節點前請確保本地安裝 DMC【安裝運行環境

啟動一個本地 DMC 節點,這樣你就能在本地開發 DMC 的具體內容了,實際開發環境中,需要通過下面的不同插件來開發 DMC 節點。

新建 start_dmc 文件夾,保存代碼至 start_dmc/node.js:

1
const dmc = require("chain");

配置 HTTP 服務

http 插件

如:http-server-address 用於配置本地服務地址,默認值為127.0.0.1:8888。

1
2
3
dmc.load('http', {
'http-server-address': '0.0.0.0:8888'
});

具體 http 配置信息請參考 http 插件

配置區塊信息

chain 插件

如:delete-all-blocks 用於確定是否刪除所有狀態數據和區塊數據,默認值為 false。

1
2
3
dmc.load('chain',{
'delete-all-blocks':true
});

具體 chain 配置信息請參考 chain 插件

獲取 P2P 信息

net 插件

p2p-listen-endpoint 用於監聽 p2p 鏈接的地址和端口,默認值為:0.0.0.0:9876。

1
2
3
dmc.load('net',{
'p2p-listen-endpoint':'0.0.0.0:9876'
})

具體 net 配置信息請參考 net 插件

控制區塊生產的信息

producer 插件

producer-name:控制節點出塊的賬戶名。

enable-stale-production:啟用產生區塊,即使區塊是靜止的。

1
2
3
4
dmc.load('producer', {
'producer-name': 'dmc',
'enable-stale-production': true
});

具體 producer 配置信息請參考 producer 插件

修改及查看 DMC 配置以及數據目錄

dmc.data_dir:dmc 的數據存放目錄。

dmc.config_dir:dmc 的配置存放目錄。

1
2
dmc.config_dir = 'dmc_config_dir/';
dmc.data_dir = 'dmc_data_dir/';

啟動節點

1
dmc.start();

高級配置

1
2
3
4
5
6
7
dmc.load('http', {
'http-server-address': '0.0.0.0:8889'
});

dmc.load('net', {
'p2p-listen-endpoint': '0.0.0.0:9877'
});
1
2
3
4
5
6
7
// 修改 DMC 配置以及數據目錄
dmc.config_dir = 'dmc_config_dir/';
dmc.data_dir = 'dmc_data_dir/';

// 查看 DMC 配置以及數據目錄
console.notice('config_dir:', dmc.config_dir);
console.notice('data_dir:', dmc.data_dir);
1
2
3
dmc.load('chain', {
'delete-all-blocks': true
});

更多插件請點擊這裡

節點代碼實例

以下代碼保存至 start_dmc/genesis.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
"initial_timestamp": "2023-03-17T00:00:00.000",
"initial_key": "DM6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV",
"initial_configuration": {
"max_block_net_usage": 1048576,
"target_block_net_usage_pct": 1000,
"max_transaction_net_usage": 524288,
"base_per_transaction_net_usage": 12,
"net_usage_leeway": 500,
"context_free_discount_net_usage_num": 20,
"context_free_discount_net_usage_den": 100,
"max_block_cpu_usage": 200000,
"target_block_cpu_usage_pct": 1000,
"max_transaction_cpu_usage": 150000,
"min_transaction_cpu_usage": 100,
"max_transaction_lifetime": 3600,
"deferred_trx_expiration_window": 600,
"max_transaction_delay": 3888000,
"max_inline_action_size": 4096,
"max_inline_action_depth": 4,
"max_authority_depth": 6
}
}

下面代碼存為 start_dmc/node.js,用來啟動一個本地 DMC 節點。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
const dmc = require("chain");

dmc.config_dir = 'dmc_config_dir/';
dmc.data_dir = 'dmc_data_dir/';
dmc.name = "dmc"
dmc.load('http', {
'http-server-address': '0.0.0.0:8888'
});
dmc.load('chain', {
'delete-all-blocks': true,
"genesis-json": "genesis.json"
});
dmc.load('net', {
'p2p-listen-endpoint': '0.0.0.0:9876'
})
dmc.load('producer', {
'producer-name': 'dmc',
'enable-stale-production': true
});
dmc.load('chain_api');
dmc.start();

注意:如後面開發和測試遇見問題,請重啟 DMC 節點服務再嘗試!

運行 DMC 開發環境:

1
$ dmc start_dmc/node.js

運行結果日誌(部分)

1
2
3
$ dmc start_dmc/node.js
……
info 2023-04-08T03:48:47.900 thread-0 producer_plugin.cpp:2443 produce_block ] Produced block 3b0b39149bd407db... #2 @ 2023-04-08T03:48:48.000 signed by dmc [trxs: 0, lib: 1, confirmed: 0]

如果你看到了以上的消息,說明運行成功,dmc 已經開始區塊生產。

下一章節
👉 【編寫 ABI 文件