Module 0x4::aptos_token
This defines a minimally viable token for no-code solutions akin to the original token at 0x3::token module. The key features are:
- Base token and collection features
- Creator definable mutability for tokens
- Creator-based freezing of tokens
- Standard object-based transfer and events
- Metadata property type
- Resource
AptosCollection - Resource
AptosToken - Constants
- Function
create_collection - Function
create_collection_object - Function
mint - Function
mint_token_object - Function
mint_soul_bound - Function
mint_soul_bound_token_object - Function
mint_internal - Function
borrow - Function
are_properties_mutable - Function
is_burnable - Function
is_freezable_by_creator - Function
is_mutable_description - Function
is_mutable_name - Function
is_mutable_uri - Function
authorized_borrow - Function
burn - Function
freeze_transfer - Function
unfreeze_transfer - Function
set_description - Function
set_name - Function
set_uri - Function
add_property - Function
add_typed_property - Function
remove_property - Function
update_property - Function
update_typed_property - Function
collection_object - Function
borrow_collection - Function
is_mutable_collection_description - Function
is_mutable_collection_royalty - Function
is_mutable_collection_uri - Function
is_mutable_collection_token_description - Function
is_mutable_collection_token_name - Function
is_mutable_collection_token_uri - Function
is_mutable_collection_token_properties - Function
are_collection_tokens_burnable - Function
are_collection_tokens_freezable - Function
authorized_borrow_collection - Function
set_collection_description - Function
set_collection_royalties - Function
set_collection_royalties_call - Function
set_collection_uri
use 0x1::error;
use 0x1::object;
use 0x1::option;
use 0x1::signer;
use 0x1::string;
use 0x4::collection;
use 0x4::property_map;
use 0x4::royalty;
use 0x4::token;
Resource AptosCollection
Storage state for managing the no-code Collection.
#[resource_group_member(#[group = 0x1::object::ObjectGroup])]
struct AptosCollection has key
Fields
-
mutator_ref: option::Option<collection::MutatorRef> - Used to mutate collection fields
-
royalty_mutator_ref: option::Option<royalty::MutatorRef> - Used to mutate royalties
-
mutable_description: bool - Determines if the creator can mutate the collection's description
-
mutable_uri: bool - Determines if the creator can mutate the collection's uri
-
mutable_token_description: bool - Determines if the creator can mutate token descriptions
-
mutable_token_name: bool - Determines if the creator can mutate token names
-
mutable_token_properties: bool - Determines if the creator can mutate token properties
-
mutable_token_uri: bool - Determines if the creator can mutate token uris
-
tokens_burnable_by_creator: bool - Determines if the creator can burn tokens
-
tokens_freezable_by_creator: bool - Determines if the creator can freeze tokens
Resource AptosToken
Storage state for managing the no-code Token.
#[resource_group_member(#[group = 0x1::object::ObjectGroup])]
struct AptosToken has key
Fields
-
burn_ref: option::Option<token::BurnRef> - Used to burn.
-
transfer_ref: option::Option<object::TransferRef> - Used to control freeze.
-
mutator_ref: option::Option<token::MutatorRef> - Used to mutate fields
-
property_mutator_ref: property_map::MutatorRef - Used to mutate properties
Constants
The collection does not exist
const ECOLLECTION_DOES_NOT_EXIST: u64 = 1;
The field being changed is not mutable
const EFIELD_NOT_MUTABLE: u64 = 4;
The provided signer is not the creator
const ENOT_CREATOR: u64 = 3;
The token does not exist
const ETOKEN_DOES_NOT_EXIST: u64 = 2;
The property map being mutated is not mutable
const EPROPERTIES_NOT_MUTABLE: u64 = 6;
The token being burned is not burnable
const ETOKEN_NOT_BURNABLE: u64 = 5;
Function create_collection
Create a new collection
public entry fun create_collection(creator: &signer, description: string::String, max_supply: u64, name: string::String, uri: string::String, mutable_description: bool, mutable_royalty: bool, mutable_uri: bool, mutable_token_description: bool, mutable_token_name: bool, mutable_token_properties: bool, mutable_token_uri: bool, tokens_burnable_by_creator: bool, tokens_freezable_by_creator: bool, royalty_numerator: u64, royalty_denominator: u64)
Implementation
public entry fun create_collection(
creator: &signer,
description: String,
max_supply: u64,
name: String,
uri: String,
mutable_description: bool,
mutable_royalty: bool,
mutable_uri: bool,
mutable_token_description: bool,
mutable_token_name: bool,
mutable_token_properties: bool,
mutable_token_uri: bool,
tokens_burnable_by_creator: bool,
tokens_freezable_by_creator: bool,
royalty_numerator: u64,
royalty_denominator: u64,
) {
create_collection_object(
creator,
description,
max_supply,
name,
uri,
mutable_description,
mutable_royalty,
mutable_uri,
mutable_token_description,
mutable_token_name,
mutable_token_properties,
mutable_token_uri,
tokens_burnable_by_creator,
tokens_freezable_by_creator,
royalty_numerator,
royalty_denominator
);
}
Function create_collection_object
public fun create_collection_object(creator: &signer, description: string::String, max_supply: u64, name: string::String, uri: string::String, mutable_description: bool, mutable_royalty: bool, mutable_uri: bool, mutable_token_description: bool, mutable_token_name: bool, mutable_token_properties: bool, mutable_token_uri: bool, tokens_burnable_by_creator: bool, tokens_freezable_by_creator: bool, royalty_numerator: u64, royalty_denominator: u64): object::Object<aptos_token::AptosCollection>
Implementation
public fun create_collection_object(
creator: &signer,
description: String,
max_supply: u64,
name: String,
uri: String,
mutable_description: bool,
mutable_royalty: bool,
mutable_uri: bool,
mutable_token_description: bool,
mutable_token_name: bool,
mutable_token_properties: bool,
mutable_token_uri: bool,
tokens_burnable_by_creator: bool,
tokens_freezable_by_creator: bool,
royalty_numerator: u64,
royalty_denominator: u64,
): Object<AptosCollection> {
let creator_addr = signer::address_of(creator);
let royalty = royalty::create(royalty_numerator, royalty_denominator, creator_addr);
let constructor_ref = collection::create_fixed_collection(
creator,
description,
max_supply,
name,
option::some(royalty),
uri,
);
let object_signer = constructor_ref.generate_signer();
let mutator_ref = if (mutable_description || mutable_uri) {
option::some(collection::generate_mutator_ref(&constructor_ref))
} else {
option::none()
};
let royalty_mutator_ref = if (mutable_royalty) {
option::some(royalty::generate_mutator_ref(constructor_ref.generate_extend_ref()))
} else {
option::none()
};
let aptos_collection = AptosCollection {
mutator_ref,
royalty_mutator_ref,
mutable_description,
mutable_uri,
mutable_token_description,
mutable_token_name,
mutable_token_properties,
mutable_token_uri,
tokens_burnable_by_creator,
tokens_freezable_by_creator,
};
move_to(&object_signer, aptos_collection);
constructor_ref.object_from_constructor_ref()
}
Function mint
With an existing collection, directly mint a viable token into the creators account.
public entry fun mint(creator: &signer, collection: string::String, description: string::String, name: string::String, uri: string::String, property_keys: vector<string::String>, property_types: vector<string::String>, property_values: vector<vector<u8>>)
Implementation
public entry fun mint(
creator: &signer,
collection: String,
description: String,
name: String,
uri: String,
property_keys: vector<String>,
property_types: vector<String>,
property_values: vector<vector<u8>>,
) acquires AptosCollection, AptosToken {
mint_token_object(creator, collection, description, name, uri, property_keys, property_types, property_values);
}
Function mint_token_object
Mint a token into an existing collection, and retrieve the object / address of the token.
public fun mint_token_object(creator: &signer, collection: string::String, description: string::String, name: string::String, uri: string::String, property_keys: vector<string::String>, property_types: vector<string::String>, property_values: vector<vector<u8>>): object::Object<aptos_token::AptosToken>
Implementation
public fun mint_token_object(
creator: &signer,
collection: String,
description: String,
name: String,
uri: String,
property_keys: vector<String>,
property_types: vector<String>,
property_values: vector<vector<u8>>,
): Object<AptosToken> acquires AptosCollection, AptosToken {
let constructor_ref = mint_internal(
creator,
collection,
description,
name,
uri,
property_keys,
property_types,
property_values,
);
let collection = collection_object(creator, &collection);
// If tokens are freezable, add a transfer ref to be able to freeze transfers
let freezable_by_creator = are_collection_tokens_freezable(collection);
if (freezable_by_creator) {
let aptos_token_addr = constructor_ref.address_from_constructor_ref();
let aptos_token = &mut AptosToken[aptos_token_addr];
let transfer_ref = constructor_ref.generate_transfer_ref();
aptos_token.transfer_ref.fill(transfer_ref);
};
constructor_ref.object_from_constructor_ref()
}
Function mint_soul_bound
With an existing collection, directly mint a soul bound token into the recipient’s account.
public entry fun mint_soul_bound(creator: &signer, collection: string::String, description: string::String, name: string::String, uri: string::String, property_keys: vector<string::String>, property_types: vector<string::String>, property_values: vector<vector<u8>>, soul_bound_to: address)
Implementation
public entry fun mint_soul_bound(
creator: &signer,
collection: String,
description: String,
name: String,
uri: String,
property_keys: vector<String>,
property_types: vector<String>,
property_values: vector<vector<u8>>,
soul_bound_to: address,
) acquires AptosCollection {
mint_soul_bound_token_object(
creator,
collection,
description,
name,
uri,
property_keys,
property_types,
property_values,
soul_bound_to
);
}
Function mint_soul_bound_token_object
With an existing collection, directly mint a soul bound token into the recipient’s account.
public fun mint_soul_bound_token_object(creator: &signer, collection: string::String, description: string::String, name: string::String, uri: string::String, property_keys: vector<string::String>, property_types: vector<string::String>, property_values: vector<vector<u8>>, soul_bound_to: address): object::Object<aptos_token::AptosToken>
Implementation
public fun mint_soul_bound_token_object(
creator: &signer,
collection: String,
description: String,
name: String,
uri: String,
property_keys: vector<String>,
property_types: vector<String>,
property_values: vector<vector<u8>>,
soul_bound_to: address,
): Object<AptosToken> acquires AptosCollection {
let constructor_ref = mint_internal(
creator,
collection,
description,
name,
uri,
property_keys,
property_types,
property_values,
);
let transfer_ref = constructor_ref.generate_transfer_ref();
let linear_transfer_ref = transfer_ref.generate_linear_transfer_ref();
linear_transfer_ref.transfer_with_ref(soul_bound_to);
transfer_ref.disable_ungated_transfer();
constructor_ref.object_from_constructor_ref()
}
Function mint_internal
fun mint_internal(creator: &signer, collection: string::String, description: string::String, name: string::String, uri: string::String, property_keys: vector<string::String>, property_types: vector<string::String>, property_values: vector<vector<u8>>): object::ConstructorRef
Implementation
fun mint_internal(
creator: &signer,
collection: String,
description: String,
name: String,
uri: String,
property_keys: vector<String>,
property_types: vector<String>,
property_values: vector<vector<u8>>,
): ConstructorRef acquires AptosCollection {
let constructor_ref = token::create(creator, collection, description, name, option::none(), uri);
let object_signer = constructor_ref.generate_signer();
let collection_obj = collection_object(creator, &collection);
let collection = borrow_collection(&collection_obj);
let mutator_ref = if (
collection.mutable_token_description
|| collection.mutable_token_name
|| collection.mutable_token_uri
) {
option::some(token::generate_mutator_ref(&constructor_ref))
} else {
option::none()
};
let burn_ref = if (collection.tokens_burnable_by_creator) {
option::some(token::generate_burn_ref(&constructor_ref))
} else {
option::none()
};
let aptos_token = AptosToken {
burn_ref,
transfer_ref: option::none(),
mutator_ref,
property_mutator_ref: property_map::generate_mutator_ref(&constructor_ref),
};
move_to(&object_signer, aptos_token);
let properties = property_map::prepare_input(property_keys, property_types, property_values);
property_map::init(&constructor_ref, properties);
constructor_ref
}
Function borrow
fun borrow<T: key>(token: &object::Object<T>): &aptos_token::AptosToken
Implementation
inline fun borrow<T: key>(token: &Object<T>): &AptosToken {
let token_address = token.object_address();
assert!(
exists<AptosToken>(token_address),
error::not_found(ETOKEN_DOES_NOT_EXIST),
);
&AptosToken[token_address]
}
Function are_properties_mutable
#[view]
public fun are_properties_mutable<T: key>(token: object::Object<T>): bool
Implementation
public fun are_properties_mutable<T: key>(token: Object<T>): bool acquires AptosCollection {
let collection = token::collection_object(token);
borrow_collection(&collection).mutable_token_properties
}
Function is_burnable
#[view]
public fun is_burnable<T: key>(token: object::Object<T>): bool
Implementation
public fun is_burnable<T: key>(token: Object<T>): bool acquires AptosToken {
borrow(&token).burn_ref.is_some()
}
Function is_freezable_by_creator
#[view]
public fun is_freezable_by_creator<T: key>(token: object::Object<T>): bool
Implementation
public fun is_freezable_by_creator<T: key>(token: Object<T>): bool acquires AptosCollection {
are_collection_tokens_freezable(token::collection_object(token))
}
Function is_mutable_description
#[view]
public fun is_mutable_description<T: key>(token: object::Object<T>): bool
Implementation
public fun is_mutable_description<T: key>(token: Object<T>): bool acquires AptosCollection {
is_mutable_collection_token_description(token::collection_object(token))
}
Function is_mutable_name
#[view]
public fun is_mutable_name<T: key>(token: object::Object<T>): bool
Implementation
public fun is_mutable_name<T: key>(token: Object<T>): bool acquires AptosCollection {
is_mutable_collection_token_name(token::collection_object(token))
}
Function is_mutable_uri
#[view]
public fun is_mutable_uri<T: key>(token: object::Object<T>): bool
Implementation
public fun is_mutable_uri<T: key>(token: Object<T>): bool acquires AptosCollection {
is_mutable_collection_token_uri(token::collection_object(token))
}
Function authorized_borrow
fun authorized_borrow<T: key>(token: &object::Object<T>, creator: &signer): &aptos_token::AptosToken
Implementation
inline fun authorized_borrow<T: key>(token: &Object<T>, creator: &signer): &AptosToken {
let token_address = token.object_address();
assert!(
exists<AptosToken>(token_address),
error::not_found(ETOKEN_DOES_NOT_EXIST),
);
assert!(
token::creator(*token) == signer::address_of(creator),
error::permission_denied(ENOT_CREATOR),
);
&AptosToken[token_address]
}
Function burn
public entry fun burn<T: key>(creator: &signer, token: object::Object<T>)
Implementation
public entry fun burn<T: key>(creator: &signer, token: Object<T>) acquires AptosToken {
let aptos_token = authorized_borrow(&token, creator);
assert!(
aptos_token.burn_ref.is_some(),
error::permission_denied(ETOKEN_NOT_BURNABLE),
);
move aptos_token;
let aptos_token = move_from<AptosToken>(token.object_address());
let AptosToken {
burn_ref,
transfer_ref: _,
mutator_ref: _,
property_mutator_ref,
} = aptos_token;
property_map::burn(property_mutator_ref);
token::burn(burn_ref.extract());
}
Function freeze_transfer
public entry fun freeze_transfer<T: key>(creator: &signer, token: object::Object<T>)
Implementation
public entry fun freeze_transfer<T: key>(creator: &signer, token: Object<T>) acquires AptosCollection, AptosToken {
let aptos_token = authorized_borrow(&token, creator);
assert!(
are_collection_tokens_freezable(token::collection_object(token))
&& aptos_token.transfer_ref.is_some(),
error::permission_denied(EFIELD_NOT_MUTABLE),
);
aptos_token.transfer_ref.borrow().disable_ungated_transfer();
}
Function unfreeze_transfer
public entry fun unfreeze_transfer<T: key>(creator: &signer, token: object::Object<T>)
Implementation
public entry fun unfreeze_transfer<T: key>(
creator: &signer,
token: Object<T>
) acquires AptosCollection, AptosToken {
let aptos_token = authorized_borrow(&token, creator);
assert!(
are_collection_tokens_freezable(token::collection_object(token))
&& aptos_token.transfer_ref.is_some(),
error::permission_denied(EFIELD_NOT_MUTABLE),
);
aptos_token.transfer_ref.borrow().enable_ungated_transfer();
}
Function set_description
public entry fun set_description<T: key>(creator: &signer, token: object::Object<T>, description: string::String)
Implementation
public entry fun set_description<T: key>(
creator: &signer,
token: Object<T>,
description: String,
) acquires AptosCollection, AptosToken {
assert!(
is_mutable_description(token),
error::permission_denied(EFIELD_NOT_MUTABLE),
);
let aptos_token = authorized_borrow(&token, creator);
token::set_description(aptos_token.mutator_ref.borrow(), description);
}
Function set_name
public entry fun set_name<T: key>(creator: &signer, token: object::Object<T>, name: string::String)
Implementation
public entry fun set_name<T: key>(
creator: &signer,
token: Object<T>,
name: String,
) acquires AptosCollection, AptosToken {
assert!(
is_mutable_name(token),
error::permission_denied(EFIELD_NOT_MUTABLE),
);
let aptos_token = authorized_borrow(&token, creator);
token::set_name(aptos_token.mutator_ref.borrow(), name);
}
Function set_uri
public entry fun set_uri<T: key>(creator: &signer, token: object::Object<T>, uri: string::String)
Implementation
public entry fun set_uri<T: key>(
creator: &signer,
token: Object<T>,
uri: String,
) acquires AptosCollection, AptosToken {
assert!(
is_mutable_uri(token),
error::permission_denied(EFIELD_NOT_MUTABLE),
);
let aptos_token = authorized_borrow(&token, creator);
token::set_uri(aptos_token.mutator_ref.borrow(), uri);
}
Function add_property
public entry fun add_property<T: key>(creator: &signer, token: object::Object<T>, key: string::String, type: string::String, value: vector<u8>)
Implementation
public entry fun add_property<T: key>(
creator: &signer,
token: Object<T>,
key: String,
type: String,
value: vector<u8>,
) acquires AptosCollection, AptosToken {
let aptos_token = authorized_borrow(&token, creator);
assert!(
are_properties_mutable(token),
error::permission_denied(EPROPERTIES_NOT_MUTABLE),
);
property_map::add(&aptos_token.property_mutator_ref, key, type, value);
}
Function add_typed_property
public entry fun add_typed_property<T: key, V: drop>(creator: &signer, token: object::Object<T>, key: string::String, value: V)
Implementation
public entry fun add_typed_property<T: key, V: drop>(
creator: &signer,
token: Object<T>,
key: String,
value: V,
) acquires AptosCollection, AptosToken {
let aptos_token = authorized_borrow(&token, creator);
assert!(
are_properties_mutable(token),
error::permission_denied(EPROPERTIES_NOT_MUTABLE),
);
property_map::add_typed(&aptos_token.property_mutator_ref, key, value);
}
Function remove_property
public entry fun remove_property<T: key>(creator: &signer, token: object::Object<T>, key: string::String)
Implementation
public entry fun remove_property<T: key>(
creator: &signer,
token: Object<T>,
key: String,
) acquires AptosCollection, AptosToken {
let aptos_token = authorized_borrow(&token, creator);
assert!(
are_properties_mutable(token),
error::permission_denied(EPROPERTIES_NOT_MUTABLE),
);
property_map::remove(&aptos_token.property_mutator_ref, &key);
}
Function update_property
public entry fun update_property<T: key>(creator: &signer, token: object::Object<T>, key: string::String, type: string::String, value: vector<u8>)
Implementation
public entry fun update_property<T: key>(
creator: &signer,
token: Object<T>,
key: String,
type: String,
value: vector<u8>,
) acquires AptosCollection, AptosToken {
let aptos_token = authorized_borrow(&token, creator);
assert!(
are_properties_mutable(token),
error::permission_denied(EPROPERTIES_NOT_MUTABLE),
);
property_map::update(&aptos_token.property_mutator_ref, &key, type, value);
}
Function update_typed_property
public entry fun update_typed_property<T: key, V: drop>(creator: &signer, token: object::Object<T>, key: string::String, value: V)
Implementation
public entry fun update_typed_property<T: key, V: drop>(
creator: &signer,
token: Object<T>,
key: String,
value: V,
) acquires AptosCollection, AptosToken {
let aptos_token = authorized_borrow(&token, creator);
assert!(
are_properties_mutable(token),
error::permission_denied(EPROPERTIES_NOT_MUTABLE),
);
property_map::update_typed(&aptos_token.property_mutator_ref, &key, value);
}
Function collection_object
fun collection_object(creator: &signer, name: &string::String): object::Object<aptos_token::AptosCollection>
Implementation
inline fun collection_object(creator: &signer, name: &String): Object<AptosCollection> {
let collection_addr = collection::create_collection_address(&signer::address_of(creator), name);
object::address_to_object<AptosCollection>(collection_addr)
}
Function borrow_collection
fun borrow_collection<T: key>(token: &object::Object<T>): &aptos_token::AptosCollection
Implementation
inline fun borrow_collection<T: key>(token: &Object<T>): &AptosCollection {
let collection_address = token.object_address();
assert!(
exists<AptosCollection>(collection_address),
error::not_found(ECOLLECTION_DOES_NOT_EXIST),
);
&AptosCollection[collection_address]
}
Function is_mutable_collection_description
public fun is_mutable_collection_description<T: key>(collection: object::Object<T>): bool
Implementation
public fun is_mutable_collection_description<T: key>(
collection: Object<T>,
): bool acquires AptosCollection {
borrow_collection(&collection).mutable_description
}
Function is_mutable_collection_royalty
public fun is_mutable_collection_royalty<T: key>(collection: object::Object<T>): bool
Implementation
public fun is_mutable_collection_royalty<T: key>(
collection: Object<T>,
): bool acquires AptosCollection {
borrow_collection(&collection).royalty_mutator_ref.is_some()
}
Function is_mutable_collection_uri
public fun is_mutable_collection_uri<T: key>(collection: object::Object<T>): bool
Implementation
public fun is_mutable_collection_uri<T: key>(
collection: Object<T>,
): bool acquires AptosCollection {
borrow_collection(&collection).mutable_uri
}
Function is_mutable_collection_token_description
public fun is_mutable_collection_token_description<T: key>(collection: object::Object<T>): bool
Implementation
public fun is_mutable_collection_token_description<T: key>(
collection: Object<T>,
): bool acquires AptosCollection {
borrow_collection(&collection).mutable_token_description
}
Function is_mutable_collection_token_name
public fun is_mutable_collection_token_name<T: key>(collection: object::Object<T>): bool
Implementation
public fun is_mutable_collection_token_name<T: key>(
collection: Object<T>,
): bool acquires AptosCollection {
borrow_collection(&collection).mutable_token_name
}
Function is_mutable_collection_token_uri
public fun is_mutable_collection_token_uri<T: key>(collection: object::Object<T>): bool
Implementation
public fun is_mutable_collection_token_uri<T: key>(
collection: Object<T>,
): bool acquires AptosCollection {
borrow_collection(&collection).mutable_token_uri
}
Function is_mutable_collection_token_properties
public fun is_mutable_collection_token_properties<T: key>(collection: object::Object<T>): bool
Implementation
public fun is_mutable_collection_token_properties<T: key>(
collection: Object<T>,
): bool acquires AptosCollection {
borrow_collection(&collection).mutable_token_properties
}
Function are_collection_tokens_burnable
public fun are_collection_tokens_burnable<T: key>(collection: object::Object<T>): bool
Implementation
public fun are_collection_tokens_burnable<T: key>(
collection: Object<T>,
): bool acquires AptosCollection {
borrow_collection(&collection).tokens_burnable_by_creator
}
Function are_collection_tokens_freezable
public fun are_collection_tokens_freezable<T: key>(collection: object::Object<T>): bool
Implementation
public fun are_collection_tokens_freezable<T: key>(
collection: Object<T>,
): bool acquires AptosCollection {
borrow_collection(&collection).tokens_freezable_by_creator
}
Function authorized_borrow_collection
fun authorized_borrow_collection<T: key>(collection: &object::Object<T>, creator: &signer): &aptos_token::AptosCollection
Implementation
inline fun authorized_borrow_collection<T: key>(collection: &Object<T>, creator: &signer): &AptosCollection {
let collection_address = collection.object_address();
assert!(
exists<AptosCollection>(collection_address),
error::not_found(ECOLLECTION_DOES_NOT_EXIST),
);
assert!(
collection::creator(*collection) == signer::address_of(creator),
error::permission_denied(ENOT_CREATOR),
);
&AptosCollection[collection_address]
}
Function set_collection_description
public entry fun set_collection_description<T: key>(creator: &signer, collection: object::Object<T>, description: string::String)
Implementation
public entry fun set_collection_description<T: key>(
creator: &signer,
collection: Object<T>,
description: String,
) acquires AptosCollection {
let aptos_collection = authorized_borrow_collection(&collection, creator);
assert!(
aptos_collection.mutable_description,
error::permission_denied(EFIELD_NOT_MUTABLE),
);
collection::set_description(aptos_collection.mutator_ref.borrow(), description);
}
Function set_collection_royalties
public fun set_collection_royalties<T: key>(creator: &signer, collection: object::Object<T>, royalty: royalty::Royalty)
Implementation
public fun set_collection_royalties<T: key>(
creator: &signer,
collection: Object<T>,
royalty: royalty::Royalty,
) acquires AptosCollection {
let aptos_collection = authorized_borrow_collection(&collection, creator);
assert!(
aptos_collection.royalty_mutator_ref.is_some(),
error::permission_denied(EFIELD_NOT_MUTABLE),
);
royalty::update(aptos_collection.royalty_mutator_ref.borrow(), royalty);
}
Function set_collection_royalties_call
entry fun set_collection_royalties_call<T: key>(creator: &signer, collection: object::Object<T>, royalty_numerator: u64, royalty_denominator: u64, payee_address: address)
Implementation
entry fun set_collection_royalties_call<T: key>(
creator: &signer,
collection: Object<T>,
royalty_numerator: u64,
royalty_denominator: u64,
payee_address: address,
) acquires AptosCollection {
let royalty = royalty::create(royalty_numerator, royalty_denominator, payee_address);
set_collection_royalties(creator, collection, royalty);
}
Function set_collection_uri
public entry fun set_collection_uri<T: key>(creator: &signer, collection: object::Object<T>, uri: string::String)
Implementation
public entry fun set_collection_uri<T: key>(
creator: &signer,
collection: Object<T>,
uri: String,
) acquires AptosCollection {
let aptos_collection = authorized_borrow_collection(&collection, creator);
assert!(
aptos_collection.mutable_uri,
error::permission_denied(EFIELD_NOT_MUTABLE),
);
collection::set_uri(aptos_collection.mutator_ref.borrow(), uri);
}