这里的合约定义更多的是自动执行约定,而不是预置了一个带有合约地址的合约代码,当时看源码时候就产生过疑惑
Contract表示一种自定义执行约定,调用合约的方式必须是交易,交易到区块上面打包。
每一个合约实现,都被称为一个module,上面就有4个module,tdpos,kernel,consensus,proposal。
XPoS是超级链的一种改进型的DPoS算法,他是在一段预设的时间长度(一轮区块生产周期)内选择若干个验证节点,同时将这样一轮区块生产周期分为N个时间段, 这若干个候选节点按照约定的时间段协议协同挖矿的一种算法。在选定验证节点集合后,XPoS通过Chained-BFT算法来保证轮值期间的安全性。 总结一下,整个XPoS主要包括2大阶段:
本身一种共识机制,xuperchain默认是tdpos共识,如果开启了改共识,它需要通过合约来执行一系列的共识准备工作
它有一下几种操作:
voteMethod = “vote”
revokeVoteMethod = “revoke_vote” // 候选人投票撤销
nominateCandidateMethod = “nominate_candidate” // 候选人提名
revokeCandidateMethod = “revoke_candidate” // 候选人罢黜
checkValidaterMethod = “check_validater” // 验证人生成
tdpos会有一个自动交易生成器来自动产生交易,例如{"module":"tdpos","method":"check_validater","args":{"term":"842378","version":"0"},"tag":null,"deadline":0,"tx":null,"trigger":null}
,这个交易表示需要执行验证人检查
kernel是xuperchain的核心合约,用来创建,停止,更新链的核心参数,有以下一些方法
"CreateBlockChain": (*Kernel).runCreateBlockChain, "UpdateMaxBlockSize": (*Kernel).runUpdateMaxBlockSize, "UpdateReservedContract": (*Kernel).runUpdateReservedContract, "UpdateForbiddenContract": (*Kernel).runUpdateForbiddenContract, "UpdateBlockChainData": (*Kernel).runUpdateBlockChainData, "UpdateNewAccountResourceAmount": (*Kernel).runUpdateNewAccountResourceAmount, "UpdateIrreversibleSlideWindow": (*Kernel).runUpdateIrreversibleSlideWindow, "UpdateGasPrice": (*Kernel).runUpdateGasPrice, "StopBlockChain":
consensus合约,目前只有一个方法,动态更新共识updateConsensusMethod
提案和投票机制是区块链系统实现自我进化的关键。系统首次上线后难免遇到很多问题,我们提供提案/投票机制为区块链的社区治理提供便利的工具,以保证未来系统的可持续发展。具体实现方法如下:
Step1:提案者(proposer) 通过发起一个事务声明一个可调用的合约,并约定提案的投票截止高度,生效高度;
Step2:投票者(voter) 通过发起一个事务来对提案投票,当达到系统约定的投票率并且账本达到合约的生效高度后,合约就会自动被调用;
Step3:为了防止机制被滥用,被投票的事务的需要冻结参与者的一笔燃料,直到合约生效后解冻。
提案合约包含以下合约方法
proposeMethod: voteMethod: createTriggerMethod: thawMethod: