键集失败后定义命名空间

Defining a namespace after the keyset fails

来自文档:

Example: Defining a namespace
Defining a namespace requires a keyset, and a namespace name of type string:

(define-keyset 'my-keyset)
(define-namespace 'my-namespace (read-keyset 'my-keyset))

文档最初是这样描述定义命名空间并将其与键集相关联的过程的,这是对本主题的粗略介绍。 我已经试过了,也预先创建了一个键集(这不是问题)。

所以我使用这个代码:

(define-keyset 'my-keyset)
(define-namespace 'my-namespace (read-keyset 'my-keyset))

键组也在那里 Keyset created in environment

当我将上面的示例代码加载到 REPL 中时,我收到以下错误消息:

2:1Invalid arguments, received ["my-namespace"] for namespace:string user-guard:guard admin-guard:guard -> string

为什么会发生这种情况,这个错误的意义是什么? 我在文档中读到

"In public blockchains, users are not allowed to use the root namespace (which is reserved for built-in contracts like the coin contract) and must define code within a namespace, which may or may not be definable (ie, users might be restricted to “user” namespaces)."

我想知道这是否与错误消息有关,但声明本身相当含糊,我不知道如何解决它以防万一这是正在发生的事情(或者它的真正含义)以及何时适用)

我试过用不同的方式写它,但它总是以同样的错误结束。 关于发生了什么以及为什么失败的任何想法?

文档已过时。

根据错误消息,需要 1 个字符串和 2 个守卫。

Invalid arguments, received ["my-namespace"] for namespace:string user-guard:guard admin-guard:guard -> string

即它需要这些输入

namespace:string 
user-guard:guard 
admin-guard:guard

这应该有效

(define-keyset 'my-keyset)
(define-namespace 'my-namespace (read-keyset 'my-keyset) (read-keyset 'my-keyset))