# 系统智能合约 API

# 概述

TOP Network系统合约提供的功能包括节点注册、节点投票、节点入网、节点选举、链上治理等。

系统合约函数如下表所示。

方法名 说明
nodeJoinNetwork 节点入网,调用入网合约。
submitProposal 提交提案。
withdrawProposal 撤销提案。
tccVote TCC委员表决提案。
registerNode 矿工注册。
unregisterNode 注销矿工。
setDividendRatio 设置矿工分红比例。
setNodeName 设置矿工昵称。
redeemNodeDeposit 赎回矿工注册保证金。
updateNodeInfo 支持同时更新矿工类型、矿工名称、矿工保证金和分红比例。
updateNodeType 更新矿工类型。
stakeDeposit 增加矿工保证金。
unstakeDeposit 减少矿工保证金。
voteNode 给矿工投票。
unvoteNode 取消矿工投票。
claimNodeReward 领取矿工奖励。
claimVoterDividend 领取投票者分红。

# 节点入网

方法名

nodeJoinNetwork

请求参数

参数名称 是否必选 默认值 类型 说明
node_account_addr - String 矿工账户地址。

返回参数

无。

# 提交提案

方法名

submitProposal

请求参数

参数名称 是否必选 默认值 类型 说明
proposal_type - Uint8 提案类型:1--修改链上治理参数提案;2--社区基金管理提案。
target - String 当提案类型为修改链上治理参数提案时,target为链上治理参数名称,链上治理参数请参见链上治理参数
当提案类型为社区基金管理提案时,target为接受转账账户地址,销毁账户地址为:T!0001Ebj8hBvoLdvcEEUwNZ423zM3Kh9d4nL1Ug。
value - String 当target为链上治理参数时,value为修改后的值。
当target为接受转账账户地址,value为转账金额,单位uTOP。
proposal_deposit - Uint64 提案保证金,单位uTOP。
effective_timer_height - Uint64 提案通过后生效时钟高度。如生效始终高度小于提案通过时的始终高度,那么提案在通过后会立刻生效。

返回参数

无。

# 撤销提案

方法名

withdrawProposal

请求参数

参数名称 是否必选 默认值 类型 说明
proposal_id - String 提案ID。

返回参数

无。

# TCC委员表决提案

方法名

tccVote

请求参数

参数名称 是否必选 默认值 类型 说明
proposal_id - String 提案ID。
opinion - Bool true: 赞成, false: 反对。

返回参数

无。

# 矿工注册

方法名

registerNode

请求参数

参数名称 是否必选 默认值 类型 说明
node_type - String 矿工类型,包括edge(边缘矿工)、validator(验证矿工)、advance(高级矿工),高级矿工兼具archive(存档)、validator(验证)、auditor(审计)节点。
您可以注册成为三种类型中的一种。
注册成为高级矿工后,advance矿工被选举为何种节点取决于矿工的选票:
advance矿工被选举为audtior、archive节点,矿工所获得的选票需要大于等于矿工实际质押的保证金(此处节点保证金以TOP计算,非uTOP)。
当选票低于实际质押保证金时,advance矿工只能被选为validator。
说明:
矿工选票须由接受投票而得,可以由其他矿工投票,也可由本账户投票。
nodename - String 矿工昵称,4-16字符,字母、数字或下划线。
node_sign_key - String 系统默认使用账户Key作为矿工的工作时使用的key。
为了更好地保护您的账户资产,建议您创建一对无资产的公私钥对,节点工作时使用其私钥对区块进行签名。
此处请传入对应的公钥,其他节点可使用该公钥进行验签。
dividend_ratio - Uint32 高级矿工可以为给自己投票的账户设置分红比例,高级矿工收到的所有奖励(工作奖励、选票奖励),会按照设置的分红比例分到支持自己的投票者账户上。

返回参数

无。

# 注销矿工

方法名

unregisterNode

请求参数

无。

返回参数

无。

# 设置矿工分红比例

方法名

setDividendRatio

请求参数

参数名称 是否必选 默认值 类型 说明
dividend_ratio Integer 分红比例,取值范围 [0,100]。

返回参数

无。

# 设置矿工昵称

方法名

setNodeName

请求参数

参数名称 是否必选 默认值 类型 说明
nodename String 矿工昵称。

返回参数

无。

# 赎回矿工注册保证金

方法名

redeemNodeDeposit

请求参数

无。

返回参数

无。

# 更新矿工信息

方法名

updateNodeInfo

请求参数

参数名称 是否必选 默认值 类型 说明
node_name String 更新后的矿工名称。
updated_deposit_type Int 1:增加矿工保证金;2:减少矿工保证金。
node_deposit Uint64 增加或减少的矿工保证金。
dividend_ratio Uint32 更新后的分红比例。
node_type String 更新后的矿工类型:edge(边缘矿工)、validator(验证矿工)、advance(高级矿工)。

返回参数 无。

# 更新矿工类型

方法名

updateNodeType

请求参数

参数名称 是否必选 默认值 类型 说明
node_type String 矿工类型。

返回参数

无。

# 增加矿工保证金

方法名

stakeDeposit

请求参数

无。

返回参数

无。

# 减少矿工保证金

方法名

unstakeDeposit

请求参数

参数名称 是否必选 默认值 类型 说明
unstake_deposit - Uint64 减少的保证金金额,单位uTOP。

返回参数

无。

# 给矿工投票

方法名

voteNode

请求参数

参数名称 是否必选 默认值 类型 说明
vote_info - Map<std::String, uint64> 接受投票的矿工账户(String);投票数量(Uint64)。

返回参数

无。

# 取消矿工投票

方法名

unvoteNode

请求参数

参数名称 是否必选 默认值 类型 说明
vote_info Map<std::String, uint64> <矿工账户, 票数> map

返回参数

无。

# 领取矿工奖励

方法名

claimNodeReward

请求参数

无。

返回参数

无。

# 领取投票者分红

方法名

claimVoterDividend

请求参数

无。

返回参数

无。