契约文档描述了使用密钥集控制模块。具体来说,给定模块(module foo 'foo-keyset ...),如果有人试图升级契约,那么'foo-keyset将“在事务签名集上强制执行”。
我正在努力理解执行'foo-keyset意味着什么。该字符串如何与签名集中的一个或多个特定签名相关联?这个字符串有什么意思吗?或者我可以给它取任何我想要的名字?如果字符串是任意的,那么具体强制执行什么?
我试图用契约文档来解决这个问题,看看是否有一种方法将这个键集字符串与键集中的一个或多个签名关联起来。文档将密钥集描述为公钥和密钥集谓词的列表,给出了一些JSON示例如下所示:
{ "keys": ["abc6bab9b88e08d","fe04ddd404feac2"], "pred": "keys-2" }
{ "keys": ["abc6bab9b88e08d","fe04ddd404feac2"], "pred": "my-module.custom-pred" }我想,也许可以使用键集谓词将'foo-keyset与键集中的特定键或一组键关联起来,比如需要谓词my-module.foo-keyset,但键集谓词的文档似乎将重点放在从键集中计数特定数目的匹配。
发布于 2022-06-21 20:20:55
键集引用是在环境中定义的唯一密钥集。不管是雷普还是区块链。在repl中,可以定义如下所示的键集:
(env-data {
"bob-guard": {"keys": ["bob"], "pred": "keys-all"}
,"alice-guard": {"keys": ["alice"], "pred": "keys-all"}
})在区块链上,您需要选择一个唯一的名称,并使用define-keyset定义它
(define-keyset 'my-unique-keyset-name (read-keyset "keyset"))read-keyset从事务数据中定义的变量my-keyset中读取密钥集。
如果您为您的模块定义了治理密钥集,那么在通过部署相同的模块名进行升级时,将验证密钥集。通过谓词(pred)检查密钥集的有效性。谓词可以是作为参数输入的任何函数、键集中的键数和匹配签名的计数。如果谓词返回true,则事务可以继续。您可以构造与此函数签名匹配的自定义谓词:
(defun keys-majority:bool(count:integer matched:integer)
(>= matched (+ (/ count 2) 1)))然后使用该自定义谓词创建密钥集:
(env-data {
"my-module-guard": {"keys": ["bob", "alice", "babena" ],
"pred": "my-module.keys-majority"}
})https://stackoverflow.com/questions/72620513
复制相似问题