policy-collection
Description
This policy allows to creating collections of tokens.
A collection is defined by an unique collection ID.
The collection-id has the following form: c_${name}_${hash}
- where:
${name} is the human-readable name of the collection.
${hash} is a hash derived from the collection guard and name.
The collection ID is protected from from-running and unauthorized use or declaration. However, the collection-human readable name has no protection and can be reused by anybody else. As such, wallets, market-places should only rely on the collection ID.
A collection is protected by a guard which prohibits someone other than the collection creator to include tokens. The guard is enforced on token creation.
If the guard is a keyset, the signature may be scoped to the capability:
(ADD-TO-COLLECTION collection-id token-id)
When created a collection must be registered with its creator’s name. If the creator’s name is a principal (recommended), it is validated against the guard, and can be trusted by third parties.
Ranks
Each token when created inside a collection is given automatically a rank.
Ranks start with #1 and are immutable.
Implemented hooks
(defun enforce-init)
Input data structures
collection
Handled by (enforce-init)
(defschema collection-msg-sch
id:string
)
Mandatory
External functions
create-collection-id
name string creator-guard guard → string
Pure function
Create a collection-id from an human-readable name.
(use marmalade-ng.policy-collection)
(create-collection-id "PrettyKitties" (keyset-ref-guard "user.pretty-kitties-owner"))
> "c_PrettyKitties_e8XfSKUAM1fZ8HkaM1FqaYIc6v-xPUF1S2qyzz6vqQs"
create-collection
id string name string size integer creator string creator-guard guard → bool
Create and register a collection.
The creator guard will be enforced.
size is the maximum number of tokens that can be contained in the collection. If size is 0, the collection is unlimited.
(use marmalade-ng.policy-collection)
(create-collection "c_PrettyKitties_e8XfSKUAM1fZ8HkaM1FqaYIc6v-xPUF1S2qyzz6vqQs"
"PrettyKitties" 112 "r:user.pretty-kitties-owner"
(keyset-ref-guard "user.pretty-kitties-owner"))
View functions
get-collection
collection-id string → object{collection-sch}
Get collection details from a collection-id.
(use marmalade-ng.policy-collection)
(get-collection "c_Cats_ZMLLJuSq0JoHSR4f_ZgUa2H_p7Rr71CN8CjQ7ZL_hU0")
{"creator": "k:1caa4f5f12ea490f8f020734ed08be1926f290855818e19abfaf6dc8d03ce798",
"creator-guard": KeySet {keys: ["1caa4f5f12ea490f8f020734ed08be1926f290855818e19abfaf6dc8d03ce798"],
pred: keys-all},
"id": "c_Cats_ZMLLJuSq0JoHSR4f_ZgUa2H_p7Rr71CN8CjQ7ZL_hU0",
"max-size": 0,
"name": "Cats",
"size": 3
}
get-token-collection
token-id string → object{collection-sch}
Get collection details of a token.
(use marmalade-ng.policy-collection)
(get-token-collection "t:MkygmZK2iaGHuTTmKnzJMke3HcALz8SgTyxnD5A-VkA")
{"creator": "k:1caa4f5f12ea490f8f020734ed08be1926f290855818e19abfaf6dc8d03ce798",
"creator-guard": KeySet {keys: ["1caa4f5f12ea490f8f020734ed08be1926f290855818e19abfaf6dc8d03ce798"],
pred: keys-all},
"id": "c_Cats_ZMLLJuSq0JoHSR4f_ZgUa2H_p7Rr71CN8CjQ7ZL_hU0",
"max-size": 0,
"name": "Cats",
"size": 3
}
get-all-collections
→
[string]
Return all collection-ids of the system.
Important: Local only function. Do not use in transactions.
(use marmalade-ng.policy-collection)
(get-all-collections)
> ["c_Dogs_8BRJPRYtqM-2w8ASMYq6Toq4PIvhws-kHh0nbYfT1iY", "c_Cats_ZMLLJuSq0JoHSR4f_ZgUa2H_p7Rr71CN8CjQ7ZL_hU0"]
get-collections-by-creator
creator string → object{collection-sch}
Return the list of all collection objects owned by a creator.
(use marmalade-ng.policy-collection)
(get-collections-by-creator "k:1caa4f5f12ea490f8f020734ed08be1926f290855818e19abfaf6dc8d03ce798")
[ {"creator": "k:1caa4f5f12ea490f8f020734ed08be1926f290855818e19abfaf6dc8d03ce798",
"creator-guard": KeySet {keys: ["1caa4f5f12ea490f8f020734ed08be1926f290855818e19abfaf6dc8d03ce798"],
pred: keys-all},
"id": "c_Cats_ZMLLJuSq0JoHSR4f_ZgUa2H_p7Rr71CN8CjQ7ZL_hU0",
"max-size": 0,
"name": "Cats",
"size": 3
},
{"creator": "k:1caa4f5f12ea490f8f020734ed08be1926f290855818e19abfaf6dc8d03ce798",
"creator-guard": KeySet {keys: ["1caa4f5f12ea490f8f020734ed08be1926f290855818e19abfaf6dc8d03ce798"],
pred: keys-all},
"id": "c_WildCats_G_X53tGkoawB8WDvJdTvlMG_VWmHeYZVieS-n5DUi9U",
"max-size": 0,
"name": "WildCats",
"size": 3
}]
get-token-rank-in-collection
token-id string → int
Return the rank of a given token inside the collection.
(use marmalade-ng.policy-collection)
(get-token-rank-in-collection "t:MkygmZK2iaGHuTTmKnzJMke3HcALz8SgTyxnD5A-VkA")
> 2
list-tokens-of-collection
collection-id string → [string]
List all token-ids belonging to a collection.
Tokens are sorted by rank.
Important: Local only function. Do not use in transactions.
(use marmalade-ng.policy-collection)
(list-tokens-of-collection "c_Dogs_8BRJPRYtqM-2w8ASMYq6Toq4PIvhws-kHh0nbYfT1iY")
> ["t:C6KzoW9DSYdSbrZuUOazHzlpdA_vtZyiwFo9WTIUhP8",
"t:MkygmZK2iaGHuTTmKnzJMke3HcALz8SgTyxnD5A-VkA",
"t:Axc6q-aWpN9g1u3NveIXaNMOqJ5n_Wsudw4GDnFiZNM"]
list-tokens-of-collections
collection-ids [string] → [string]
List all token-ids belonging to a list of collections.
The order of the tokens in the result list is undefined.
Important: Local only function. Do not use in transactions.
(use marmalade-ng.policy-collection)
(list-tokens-of-collections ["c_Dogs_8BRJPRYtqM-2w8ASMYq6Toq4PIvhws-kHh0nbYfT1iY",
"c_Cats_ZMLLJuSq0JoHSR4f_ZgUa2H_p7Rr71CN8CjQ7ZL_hU0"])
> ["t:C6KzoW9DSYdSbrZuUOazHzlpdA_vtZyiwFo9WTIUhP8",
"t:MkygmZK2iaGHuTTmKnzJMke3HcALz8SgTyxnD5A-VkA",
"t:Axc6q-aWpN9g1u3NveIXaNMOqJ5n_Wsudw4GDnFiZNM"]
Events
CREATE-COLLECTION
collection-id string collection-name string collection-size integer creator string
Emitted when a collection is created.
ADD-TO-COLLECTION
collection-id string token-id string
Emitted when a token is added to a collection.