-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathregistry.cairo
More file actions
63 lines (59 loc) · 2.56 KB
/
Copy pathregistry.cairo
File metadata and controls
63 lines (59 loc) · 2.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
// SPDX-License-Identifier: BUSL-1.1
/// Pure Cairo library for registry operations.
/// This library provides core registry functionality without storage dependencies.
pub mod registry {
use starknet::ContractAddress;
pub mod Errors {
pub const CALLER_NOT_MINIGAME: felt252 = 'Registry: not IMinigame';
pub const GAME_ALREADY_REGISTERED: felt252 = 'Registry: already registered';
pub const NOT_GAME_OWNER: felt252 = 'Registry: not game owner';
pub const NOT_REGISTRY_OWNER: felt252 = 'Registry: not registry owner';
pub const INVALID_GAME_ID: felt252 = 'Registry: invalid game id';
pub const GAME_IDS_EMPTY: felt252 = 'Registry: game_ids empty';
pub const ADDRESSES_EMPTY: felt252 = 'Registry: addresses empty';
pub const FEE_EXCEEDS_DENOMINATOR: felt252 = 'Registry: fee > denominator';
}
use crate::registry::interface::FEE_DENOMINATOR;
/// Validates that a fee numerator does not exceed the denominator (10_000 basis points)
pub fn assert_valid_fee_numerator(fee_numerator: u16) {
assert!(fee_numerator <= FEE_DENOMINATOR, "{}", Errors::FEE_EXCEEDS_DENOMINATOR);
}
/// Apply defaults for optional metadata fields.
/// Returns resolved values for color, client_url, renderer_address, royalty_fraction,
/// and skills_address.
pub fn apply_metadata_defaults(
color: Option<ByteArray>,
client_url: Option<ByteArray>,
renderer_address: Option<ContractAddress>,
royalty_fraction: Option<u128>,
skills_address: Option<ContractAddress>,
) -> (ByteArray, ByteArray, ContractAddress, u128, ContractAddress) {
let final_color = match color {
Option::Some(c) => c,
Option::None => "",
};
let final_client_url = match client_url {
Option::Some(url) => url,
Option::None => "",
};
let final_renderer_address: ContractAddress = match renderer_address {
Option::Some(addr) => addr,
Option::None => 0.try_into().unwrap(),
};
let final_royalty_fraction: u128 = match royalty_fraction {
Option::Some(fraction) => fraction,
Option::None => 0,
};
let final_skills_address: ContractAddress = match skills_address {
Option::Some(addr) => addr,
Option::None => 0.try_into().unwrap(),
};
(
final_color,
final_client_url,
final_renderer_address,
final_royalty_fraction,
final_skills_address,
)
}
}