跳转至

如何在Gonka上创建并提交治理提案

使用inferenced提交提案的分步指南。 与Gonka交易和治理对齐。 在运行命令前,请将所有占位符替换为自己的值。

占位符

占位符 含义
<COLD_KEY_NAME> 密钥环中的密钥名称(不是你的gonka1...地址)
<PATH_TO_PROPOSAL_JSON> 提案JSON文件的路径,例如./proposal.json
<NODE_URL> 节点基础URL,不含/chain-rpc/,例如http://node1.gonka.ai:8000
<CHAIN_ID> 例如主网的gonka-mainnet

如果命令因connectionparse失败,请检查每个RPC命令是否使用带恰好一个<NODE_URL>/chain-rpc//chain-rpc/


两个URL(不要混用)

任务 变量
inferenced query / tx <NODE_URL>/chain-rpc/(必须包含/chain-rpc/
create-client(种子节点上的HTTP .../v1/participants <NODE_URL>(不含/chain-rpc/

create-client中为--node-address使用<NODE_URL>/chain-rpc/是错误的,会导致失败或调用错误的服务。


前提条件

1. 安装CLI

从Gonka发布页面下载适用于你操作系统的版本,解压后:

chmod +x inferenced
./inferenced --help

详细的 CLI 安装说明,请参见本地机器 CLI 设置指南。安装 CLI 后,您可以返回此页面并继续。

2. 从链上读取治理参数

不要依赖旧文档中的固定数值。治理参数可在链上配置,因此在起草提案或宣布投票规则前,请查询实时数值:

./inferenced query gov params \
  --node "<NODE_URL>/chain-rpc/" \
  --chain-id "<CHAIN_ID>" \
  -o json | jq '.params | {
      min_deposit,
      expedited_min_deposit,
      max_deposit_period,
      voting_period,
      expedited_voting_period,
      quorum,
      threshold,
      expedited_threshold,
      veto_threshold,
      burn_vote_veto
    }'

您的提案JSON deposit 必须满足 min_deposit(相同的denom,金额 >= 最小值)。如果提案是加急的,请同时检查 expedited_min_depositexpedited_voting_periodexpedited_threshold

在撰写本文时,主网使用:

min_deposit:              500000000000ngonka   # 500 GNK
expedited_min_deposit:    1000000000000ngonka  # 1000 GNK
max_deposit_period:       86400s    # 24 hours
voting_period:            172800s   # 48 hours
expedited_voting_period:  43200s    # 12 hours
quorum:                   0.25
threshold:                0.500000000000000000
expedited_threshold:      0.667000000000000000
veto_threshold:           0.334000000000000000
burn_vote_veto:           true

3. 提案 JSON

准备一个 gov v1 JSON(messages, metadata, deposit, title, summary).

提案必须至少包含一条消息 一个非空的 metadata 字段。如果一个信号类提案的 messages 数组为空且 metadata 也为空,则在提交时会被拒绝(either metadata or Msgs length must be non-nil),因此在这种情况下应将 metadata 设置为非空值。

需要准备的两个主要部分:

提案描述字段

保持链上文本简短清晰。

确保提案包含以下内容:

  • 提案内容的简要概述。
  • 指向包含所有详细信息的完整提案描述的链接。
  • 如果提案请求资金,需提供资金应发送到的钱包地址。
  • 如果提案请求资金,需提供请求的金额和代币类型(denom)。

提案 JSON 结构

关于 JSON 结构,最佳方法是查看之前的提案并以其作为参考。

您可以检查之前提案的 JSON,了解不同类型提案的结构。 在许多情况下,从一个类似的先前提案出发并进行修改会更简便。

对于 MsgUpdateParams 等消息,链上要求提供完整的 params 对象以及正确的 authority(gov 模块地址)。 获取 gov 模块地址:

./inferenced query auth module-accounts \
  --node "<NODE_URL>/chain-rpc/" \
  --chain-id "<CHAIN_ID>" \
  -o json | jq -r '.accounts[] | select(.value.name=="gov") | .value.address'

在需要消息类型的地方使用该地址作为 authority

如果 jq 行没有打印任何内容,请运行一次不带 jq 的相同查询,并手动找到 gov 模块条目。输出格式可能因 SDK 版本而略有不同。

4. 可选:新建密钥 + 注册参与者 (create-client)

这将创建一个密钥并调用种子 HTTP API(参与者注册)。 仅使用 <NODE_URL>

./inferenced create-client "<COLD_KEY_NAME>" \
  --node-address "<NODE_URL>"

安全地保存助记词。 如果已有用于治理的已注资密钥,请跳过此步骤,避免重复注册。

在所有地方(例如 file)对 keys showtx gov submit-proposaltx gov vote 使用相同的 --keyring-backend


将提案发布到链上

1. 检查余额

./inferenced query bank balances \
  "$(./inferenced keys show "<COLD_KEY_NAME>" -a --keyring-backend file)" \
  --node "<NODE_URL>/chain-rpc/" \
  --chain-id "<CHAIN_ID>"

确保您有足够的ngonka(或您的节点所期望的费用代币)用于min_deposit和费用。

2. 提交

来自官方Gonka文档的推荐模式:

./inferenced tx gov submit-proposal "<PATH_TO_PROPOSAL_JSON>" \
  --from "<COLD_KEY_NAME>" \
  --keyring-backend file \
  --chain-id "<CHAIN_ID>" \
  --node "<NODE_URL>/chain-rpc/" \
  --unordered --timeout-duration=60s \
  --gas 2000000 --gas-adjustment 5.0 \
  --yes

提交后,请注意输出中的提案编号,或通过查询命令找到它。 分享提案编号,以便向社区发布公告。


投票与计票

投票步骤和结果计算公式在专用页面上有详细说明:


提交参数变更提案

简而言之: 使用 MsgUpdateParams 起草提案,包含该模块的所有参数,确保保证金满足 min_deposit,提交后进行跟踪/追加保证金/投票。

1. 获取治理模块地址(授权方)

inferenced query auth module-accounts --node <NODE_URL>/chain-rpc/ | grep -B2 'name: gov'

2. 导出目标模块的当前参数

inferenced query inference params -o json --node <NODE_URL>/chain-rpc/ > current_params.json

3. 检查治理质押和计票参数

inferenced query gov params -o json --node <NODE_URL>/chain-rpc/ \
  | jq '.params | {
      min_deposit,
      expedited_min_deposit,
      voting_period,
      expedited_voting_period,
      quorum,
      threshold,
      expedited_threshold,
      veto_threshold,
      burn_vote_veto
    }'

4. 起草提案文件

inferenced tx gov draft-proposal
# fills draft_proposal.json and draft_metadata.json

编辑draft_proposal.json并包含完整的params对象。

5. 提交提案

inferenced tx gov submit-proposal ./draft_proposal.json \
  --from <COLD_KEY_NAME> \
  --keyring-backend file \
  --unordered --timeout-duration=60s \
  --gas=2000000 --gas-adjustment=5.0 \
  --node <NODE_URL>/chain-rpc/ \
  --yes

6. 确保您的提案已在链上

inferenced query gov proposals --node <NODE_URL>/chain-rpc/

仔细审查内容(尤其是参数更新)

# 2a) Get current module params (example: inference module)
inferenced query inference params -o json --node <NODE_URL>/chain-rpc/ > current_params.json

# 2b) Extract proposed params from the proposal
inferenced query gov proposal <VOTE_PROPOSAL_ID> -o json --node <NODE_URL>/chain-rpc/ \
  | jq '.proposal.messages[] | select(."type"=="inference/x/inference/MsgUpdateParams") | .value' \
  > proposed_params.json

# 2c) Diff
diff -u current_params.json proposed_params.json || true

对于 MsgUpdateParams,模块通常期望完整的 params 对象,并将 authority 设置为 gov 模块账户