概述

Forge CLI 创建出来每一条链都会有自己对应的 forge_release.toml,里面是这条链的配置信息。每条链创建成功后会出现如下信息提示配置文件的位置,用户可以直接在文件里修改。

✔ Config file /Users/.forge_chains/forge_test1/forge_release.toml is updated!

Forge 的配置信息主要有两种,链的配置节点配置

  • 链的配置 主要包括对链本身的设置,一旦链启动过,这些配置信息会被记录在链的状态中,并在所有节点间同步,因此 链的配置 的信息在链首次启动后就不可更改。
  • 节点配置 主要包括对节点自身的设置,因此即使在链启动后也可以随时更改,只不过需要重启节点才能生效。

用户在第一次使用 forge start 启动链之前必须确定好所有链的配置

Forge 使用了 toml 作为配置文件的格式。每一条配置信息都是一个键值对,并有自己的分区。

[]方括号中的内容代表不重复的分区。如:[forge]下的配置代表这些配置属于 forge[forge.transaction] 下的配置代表这些配置属于 forge.transaction。Forge 在运行时会去对应的分区下面读取配置内容。

以下是 Forge 中各项配置的详细解释。如果某项配置在 forge_release.toml 中没有出现,则 Forge 会使用默认值,否则将以 forge_release.toml 中的配置为准。

链的配置

所有交易

[forge.transaction] 分区下定义的是关于所有交易的配置。对于某种交易的特定配置会在 [forge.transaction.*] 下配置,后面会具体描述。

[forge.transaction]
max_asset_size = 1000000
含义默认值举例
max_asset_sizeasset 的自定义 data 域的最大值每个 asset 自带的 data 域大小不能超过1000000 bytes。

Declare 交易

[forge.transaction.declare]
restricted = false
含义默认值举例
restricted执行Declare交易时是否限制用户自由声明新账户。该链不限制用户声明新账户。关于如何在受限情况下声明新账户,可以参考Declare 交易。

管理员账户

管理员账户拥有对链的最高权限,许多特殊交易,如对链的升级等,必须要管理员账户才能执行。用户在创建链的时候可以选择是使用自己已有的账户作为管理员账户还是生成新的管理员账户。不管是哪一种情况,用户都需要保护好管理员账户的 私钥

如果用户选择通过 Forge CLI 生成管理员账户,在创建完链后,sk的位置会有如下信息提示:

Your moderator SK has been preserved in ~/.forgerc.yml
[forge.prime.moderator]
address = "z11LFAwVJ4NdAHVVbVeNJsJ4nxHH3UJ8Fusy"
pk = "ABCcGxD3sIzn5qLaxXn0ZPzCJxKsglEobuJOZwEfIoY"
balance = 0
含义
address管理员账户地址
pk管理员账户公钥
balance管理员账户初始余额

链持币账户

链持币账户是一个特殊账户,没有sk 或者pk。链持币账户中的币只能通过特定交易转出,目前只有 Poke交易可以转出。

[forge.prime.token_holder]
balance = 4000000000
含义
balance链持币账户初始余额

如果链不支持 Poke交易,则链持币账户的初始余额应设置成 0,否则这部分币将被困在链持币账户中。

初始账户

除了之前提及的 管理员账户链持币账户, 用户还可以预设更多别的账户。链在初始化的时候,会自动声明这些账户,并根据配置生成对应的账户余额。

[[]]双方括号中的内容代表可重复的分区。如 [[forge.accounts]]分区和里面的配置可以出现多次,代表多个 account 配置。

[[forge.accounts]]
address = "<addr1>"
pk = "<base64 of pk1 without padding>"
balance = 1000

[[forge.accounts]]
address = "<addr2>"
pk = "<base64 of pk2 without padding>"
balance = 2000

通证信息

[forge.token]
name = "ArcBlock"
symbol = "ABT"
unit = "arc"
description = "Forge token ABT"
icon = "data:image/png;base64,iVBORw0KGgoAAA"
decimal = 18
initial_supply = 7_500_000_000
total_supply = 7_500_000_000
inflation_rate = 0
含义默认值举例
name通证的名称-
symbol通证的符号-
unit通证的最小单位,类似与比特币上的聪-
description通证的描述-
icon通证的图标,需要做 base64 编码放在这里-
decimal通证的精度-
initial_supply通证初始供应量-
total_supply通证的总供应量-
inflation_rate通证的膨胀率-

共识引擎

[tendermint.genesis]
genesis_time = "2019-02-10T17:29:13.31415926Z"
chain_id = "forge"
max_bytes = 150000
含义默认值举例
genesis_time链的初始时间,必须是 ISO 8601 格式的 UTC 时间。生成链的时候,Forge CLI 会填入对应的时间。假如填入的是以上时间,则说明这条链是在 2019 年 2 月 10 日下午五点 UTC 时间创立的。
chain_id链的 ID,所有节点必须保持一致这条链的 ID 是forge
max_bytes每个区块数据量的最大值每个区块的大小不能超过 150000 bytes

初始验证节点

用户可以加入自定义的验证节点(参与出块的节点)。但如果超过或等于三分之二的验证节点无法正常运行,则整条链也不能正常运行。如果没有任何初始验证节点的配置,本节点默认为唯一的验证节点,这样链就退化成单节点的链。

[[tendermint.genesis.validators]]
address = "74BC09AD20D6FC0881B353ABF0F9B7F70236ECF7"
name = "shanghai"
power = "1000"

[tendermint.genesis.validators.pub_key]
type = "tendermint/PubKeyEd25519"
value = "rO20HkBgLYnXnnAekRpFOrwqfiyVfvqDA5tYH4YCFjo="

[[tendermint.genesis.validators]]
address = "43D6B21BDCFBB672C7C8375BF127D3466A889DAF"
name = "beijing"
power = "1000"

[tendermint.genesis.validators.pub_key]
type = "tendermint/PubKeyEd25519"
value = "2ziJ4pHMKmBHrwo1mUzu85C9RR4LyVHfqjSIlwejYBM="

节点配置

Forge

[forge]
path = "~/.forge_release/core"
logpath = "logs"
sock_grpc = "tcp://127.0.0.1:28210"
pub_sub_key = "ABTTOTHEMOON"
含义默认值举例
pathForge 的主路径Forge 相关的代码会存储在 ~/.forge_release/core下。
logpathForge log 的路径,会跟在主路径之后Forge 相关的 log 会存在~/.forge_release/core/logs下。
sock_grpcForge 在本节点运行时的 gRPC 端口Forge 在本节点的 gRPC 端口会运行在 tcp://127.0.0.1:28210
pub_sub_keyForge 在发布和订阅信息时用来加密数据的秘钥Forge 在发布和订阅数据时会使用 ABTTOTHEMOON来加密数据。

Forge Web

[forge.web]
enabled = true
port = 8210
含义默认值举例
enabled是否自动运行 Forge WebForge Web 将自动运行。
portForge Web 监听的端口-

缓存

[cache]
path = "~/.forge_release/cache/mnesia_data_dir"
含义默认值举例
pathForge 的缓存位置Forge 的缓存将放在 ~/.forge_release/cache/mnesia_data_dir下。

共识引擎

[tendermint]
moniker = "beijing"
path = "/home/work/.forge_chains/forge_beijing/forge_release/tendermint"
keypath = "/home/work/.forge_chains/forge_beijing/keys"
logpath = "logs"
sock_rpc = "tcp://127.0.0.1:32001"
sock_grpc = "tcp://127.0.0.1:36001"
sock_p2p = "tcp://0.0.0.0:37001"
persistent_peers = "2b2a41a70f9ab7c43d4772857bcfaa254887e4b6@47.104.23.85:37001,c6525de61a02379108592fcb6514b19d4a196be9@182.92.167.126:37001"
timeout_commit = "5s"
含义默认值举例
moniker节点昵称节点可以自己明明,会显示在 Peer 列表里面
pathtendermint 数据存储目录-
keypathtendermint 节点公钥、私钥存储目录-
logpathtendermint 日志存储目录,相对于数据存储目录-
sock_rpctendermint 的 rpc 端口-
sock_grpctendermint 的 grpc 端口-
sock_p2ptendermint 的 p2p 端口,如果需要组网,需要注意防火墙配置-
persistent_peerstendermint 应该保持连接的节点列表-
timeout_commit出块时间-