SafeCoin
Home
NetworkAccountsCheckpointsEpochsStakeTransactionsValidators
AssetsSAFETokensNFTs
EcosystemDeFiProjects
AnalyticsStatisticsEmissions
DevelopersAPI

Package

0x5c13cb3e849150de1b33c603c587135e6f63f092da0de08b7fc23041b5ea6a8a

version
1
digest
F6XtFXLZNiSiD8vkQGiRmnFWrFBKFF5PX5yzsNsSp13W
previous transaction
DcDumrL2KzwE4Rmb4FizRxhzB3JGK6XAi8DnerYdJtbr

Modules (1)

directory
// Move bytecode v6
module 5c13cb3e849150de1b33c603c587135e6f63f092da0de08b7fc23041b5ea6a8a.directory {
use 0000000000000000000000000000000000000000000000000000000000000002::clock;
use 0000000000000000000000000000000000000000000000000000000000000002::coin;
use 0000000000000000000000000000000000000000000000000000000000000002::event;
use 0000000000000000000000000000000000000000000000000000000000000002::object;
use 0000000000000000000000000000000000000000000000000000000000000002::table;
use 0000000000000000000000000000000000000000000000000000000000000002::transfer;
use 0000000000000000000000000000000000000000000000000000000000000002::tx_context;
use 0000000000000000000000000000000000000000000000000000000000000002::url;
use 0000000000000000000000000000000000000000000000000000000000000001::ascii;
use 0000000000000000000000000000000000000000000000000000000000000001::option;
use 0000000000000000000000000000000000000000000000000000000000000001::string;
use 0000000000000000000000000000000000000000000000000000000000000001::type_name;

struct Directory has key {
	id: UID,
	listings: Table<TypeName, Listing>,
	count: u64
}

struct Listing has copy, drop, store {
	creator: address,
	website: String,
	links: vector<String>,
	tags: vector<String>,
	listed_ms: u64,
	updated_ms: u64
}

struct TokenListed has copy, drop {
	coin_type: TypeName,
	creator: address,
	symbol: String,
	name: String,
	description: String,
	decimals: u8,
	icon_url: Option<String>,
	website: String,
	links: vector<String>,
	tags: vector<String>,
	listed_ms: u64
}

struct ListingUpdated has copy, drop {
	coin_type: TypeName,
	website: String,
	links: vector<String>,
	tags: vector<String>,
	updated_ms: u64
}

init(Arg0: &mut TxContext) {
B0:
	0: CopyLoc[0](Arg0: &mut TxContext)
	1: Call object::new(&mut TxContext): UID
	2: MoveLoc[0](Arg0: &mut TxContext)
	3: Call table::new<TypeName, Listing>(&mut TxContext): Table<TypeName, Listing>
	4: LdU64(0)
	5: Pack[0](Directory)
	6: Call transfer::share_object<Directory>(Directory)
	7: Ret
}

public list<Ty0>(Arg0: &mut Directory, Arg1: &CoinMetadata<Ty0>, Arg2: String, Arg3: vector<String>, Arg4: vector<String>, Arg5: &Clock, Arg6: &TxContext) {
L7:	loc0: Option<String>
L8:	loc1: TypeName
L9:	loc2: address
L10:	loc3: Option<String>
L11:	loc4: u64
L12:	loc5: Option<Url>
L13:	loc6: Url
B0:
	0: Call type_name::get<Ty0>(): TypeName
	1: StLoc[8](loc1: TypeName)
	2: CopyLoc[0](Arg0: &mut Directory)
	3: ImmBorrowField[0](Directory.listings: Table<TypeName, Listing>)
	4: CopyLoc[8](loc1: TypeName)
	5: Call table::contains<TypeName, Listing>(&Table<TypeName, Listing>, TypeName): bool
	6: Not
	7: BrFalse(9)
B1:
	8: Branch(19)
B2:
	9: MoveLoc[1](Arg1: &CoinMetadata<Ty0>)
	10: Pop
	11: MoveLoc[0](Arg0: &mut Directory)
	12: Pop
	13: MoveLoc[6](Arg6: &TxContext)
	14: Pop
	15: MoveLoc[5](Arg5: &Clock)
	16: Pop
	17: LdConst[0](u64: 0)
	18: Abort
B3:
	19: ImmBorrowLoc[2](Arg2: String)
	20: ImmBorrowLoc[3](Arg3: vector<String>)
	21: ImmBorrowLoc[4](Arg4: vector<String>)
	22: Call check_strings(&String, &vector<String>, &vector<String>)
	23: MoveLoc[5](Arg5: &Clock)
	24: Call clock::timestamp_ms(&Clock): u64
	25: StLoc[11](loc4: u64)
	26: MoveLoc[6](Arg6: &TxContext)
	27: Call tx_context::sender(&TxContext): address
	28: StLoc[9](loc2: address)
	29: CopyLoc[0](Arg0: &mut Directory)
	30: MutBorrowField[0](Directory.listings: Table<TypeName, Listing>)
	31: CopyLoc[8](loc1: TypeName)
	32: CopyLoc[9](loc2: address)
	33: CopyLoc[2](Arg2: String)
	34: CopyLoc[3](Arg3: vector<String>)
	35: CopyLoc[4](Arg4: vector<String>)
	36: CopyLoc[11](loc4: u64)
	37: CopyLoc[11](loc4: u64)
	38: Pack[1](Listing)
	39: Call table::add<TypeName, Listing>(&mut Table<TypeName, Listing>, TypeName, Listing)
	40: CopyLoc[0](Arg0: &mut Directory)
	41: ImmBorrowField[1](Directory.count: u64)
	42: ReadRef
	43: LdU64(1)
	44: Add
	45: MoveLoc[0](Arg0: &mut Directory)
	46: MutBorrowField[1](Directory.count: u64)
	47: WriteRef
	48: CopyLoc[1](Arg1: &CoinMetadata<Ty0>)
	49: Call coin::get_icon_url<Ty0>(&CoinMetadata<Ty0>): Option<Url>
	50: StLoc[12](loc5: Option<Url>)
	51: ImmBorrowLoc[12](loc5: Option<Url>)
	52: Call option::is_some<Url>(&Option<Url>): bool
	53: BrFalse(63)
B4:
	54: MoveLoc[12](loc5: Option<Url>)
	55: Call option::destroy_some<Url>(Option<Url>): Url
	56: StLoc[13](loc6: Url)
	57: ImmBorrowLoc[13](loc6: Url)
	58: Call url::inner_url(&Url): String
	59: Call string::from_ascii(String): String
	60: Call option::some<String>(String): Option<String>
	61: StLoc[7](loc0: Option<String>)
	62: Branch(67)
B5:
	63: MoveLoc[12](loc5: Option<Url>)
	64: Call option::destroy_none<Url>(Option<Url>)
	65: Call option::none<String>(): Option<String>
	66: StLoc[7](loc0: Option<String>)
B6:
	67: MoveLoc[7](loc0: Option<String>)
	68: StLoc[10](loc3: Option<String>)
	69: MoveLoc[8](loc1: TypeName)
	70: MoveLoc[9](loc2: address)
	71: CopyLoc[1](Arg1: &CoinMetadata<Ty0>)
	72: Call coin::get_symbol<Ty0>(&CoinMetadata<Ty0>): String
	73: CopyLoc[1](Arg1: &CoinMetadata<Ty0>)
	74: Call coin::get_name<Ty0>(&CoinMetadata<Ty0>): String
	75: CopyLoc[1](Arg1: &CoinMetadata<Ty0>)
	76: Call coin::get_description<Ty0>(&CoinMetadata<Ty0>): String
	77: MoveLoc[1](Arg1: &CoinMetadata<Ty0>)
	78: Call coin::get_decimals<Ty0>(&CoinMetadata<Ty0>): u8
	79: MoveLoc[10](loc3: Option<String>)
	80: MoveLoc[2](Arg2: String)
	81: MoveLoc[3](Arg3: vector<String>)
	82: MoveLoc[4](Arg4: vector<String>)
	83: MoveLoc[11](loc4: u64)
	84: Pack[2](TokenListed)
	85: Call event::emit<TokenListed>(TokenListed)
	86: Ret
}

public update<Ty0>(Arg0: &mut Directory, Arg1: &TreasuryCap<Ty0>, Arg2: String, Arg3: vector<String>, Arg4: vector<String>, Arg5: &Clock) {
L6:	loc0: TypeName
L7:	loc1: &mut Listing
L8:	loc2: u64
B0:
	0: Call type_name::get<Ty0>(): TypeName
	1: StLoc[6](loc0: TypeName)
	2: CopyLoc[0](Arg0: &mut Directory)
	3: ImmBorrowField[0](Directory.listings: Table<TypeName, Listing>)
	4: CopyLoc[6](loc0: TypeName)
	5: Call table::contains<TypeName, Listing>(&Table<TypeName, Listing>, TypeName): bool
	6: BrFalse(8)
B1:
	7: Branch(14)
B2:
	8: MoveLoc[0](Arg0: &mut Directory)
	9: Pop
	10: MoveLoc[5](Arg5: &Clock)
	11: Pop
	12: LdConst[1](u64: 1)
	13: Abort
B3:
	14: ImmBorrowLoc[2](Arg2: String)
	15: ImmBorrowLoc[3](Arg3: vector<String>)
	16: ImmBorrowLoc[4](Arg4: vector<String>)
	17: Call check_strings(&String, &vector<String>, &vector<String>)
	18: MoveLoc[5](Arg5: &Clock)
	19: Call clock::timestamp_ms(&Clock): u64
	20: StLoc[8](loc2: u64)
	21: MoveLoc[0](Arg0: &mut Directory)
	22: MutBorrowField[0](Directory.listings: Table<TypeName, Listing>)
	23: CopyLoc[6](loc0: TypeName)
	24: Call table::borrow_mut<TypeName, Listing>(&mut Table<TypeName, Listing>, TypeName): &mut Listing
	25: StLoc[7](loc1: &mut Listing)
	26: CopyLoc[2](Arg2: String)
	27: CopyLoc[7](loc1: &mut Listing)
	28: MutBorrowField[2](Listing.website: String)
	29: WriteRef
	30: CopyLoc[3](Arg3: vector<String>)
	31: CopyLoc[7](loc1: &mut Listing)
	32: MutBorrowField[3](Listing.links: vector<String>)
	33: WriteRef
	34: CopyLoc[4](Arg4: vector<String>)
	35: CopyLoc[7](loc1: &mut Listing)
	36: MutBorrowField[4](Listing.tags: vector<String>)
	37: WriteRef
	38: CopyLoc[8](loc2: u64)
	39: MoveLoc[7](loc1: &mut Listing)
	40: MutBorrowField[5](Listing.updated_ms: u64)
	41: WriteRef
	42: MoveLoc[6](loc0: TypeName)
	43: MoveLoc[2](Arg2: String)
	44: MoveLoc[3](Arg3: vector<String>)
	45: MoveLoc[4](Arg4: vector<String>)
	46: MoveLoc[8](loc2: u64)
	47: Pack[3](ListingUpdated)
	48: Call event::emit<ListingUpdated>(ListingUpdated)
	49: Ret
}

public is_listed<Ty0>(Arg0: &Directory): bool {
B0:
	0: MoveLoc[0](Arg0: &Directory)
	1: ImmBorrowField[0](Directory.listings: Table<TypeName, Listing>)
	2: Call type_name::get<Ty0>(): TypeName
	3: Call table::contains<TypeName, Listing>(&Table<TypeName, Listing>, TypeName): bool
	4: Ret
}

public listing<Ty0>(Arg0: &Directory): &Listing {
B0:
	0: MoveLoc[0](Arg0: &Directory)
	1: ImmBorrowField[0](Directory.listings: Table<TypeName, Listing>)
	2: Call type_name::get<Ty0>(): TypeName
	3: Call table::borrow<TypeName, Listing>(&Table<TypeName, Listing>, TypeName): &Listing
	4: Ret
}

public count(Arg0: &Directory): u64 {
B0:
	0: MoveLoc[0](Arg0: &Directory)
	1: ImmBorrowField[1](Directory.count: u64)
	2: ReadRef
	3: Ret
}

public creator(Arg0: &Listing): address {
B0:
	0: MoveLoc[0](Arg0: &Listing)
	1: ImmBorrowField[6](Listing.creator: address)
	2: ReadRef
	3: Ret
}

public website(Arg0: &Listing): &String {
B0:
	0: MoveLoc[0](Arg0: &Listing)
	1: ImmBorrowField[2](Listing.website: String)
	2: Ret
}

public links(Arg0: &Listing): &vector<String> {
B0:
	0: MoveLoc[0](Arg0: &Listing)
	1: ImmBorrowField[3](Listing.links: vector<String>)
	2: Ret
}

public tags(Arg0: &Listing): &vector<String> {
B0:
	0: MoveLoc[0](Arg0: &Listing)
	1: ImmBorrowField[4](Listing.tags: vector<String>)
	2: Ret
}

public listed_ms(Arg0: &Listing): u64 {
B0:
	0: MoveLoc[0](Arg0: &Listing)
	1: ImmBorrowField[7](Listing.listed_ms: u64)
	2: ReadRef
	3: Ret
}

check_strings(Arg0: &String, Arg1: &vector<String>, Arg2: &vector<String>) {
L3:	loc0: u64
L4:	loc1: u64
L5:	loc2: bool
L6:	loc3: u64
L7:	loc4: u64
L8:	loc5: u64
L9:	loc6: u64
L10:	loc7: u64
L11:	loc8: u64
L12:	loc9: &vector<String>
L13:	loc10: &vector<String>
B0:
	0: MoveLoc[0](Arg0: &String)
	1: Call string::length(&String): u64
	2: LdConst[5](u64: 256)
	3: Le
	4: BrFalse(6)
B1:
	5: Branch(12)
B2:
	6: MoveLoc[2](Arg2: &vector<String>)
	7: Pop
	8: MoveLoc[1](Arg1: &vector<String>)
	9: Pop
	10: LdConst[3](u64: 3)
	11: Abort
B3:
	12: CopyLoc[1](Arg1: &vector<String>)
	13: VecLen(30)
	14: LdConst[4](u64: 8)
	15: Le
	16: BrFalse(23)
B4:
	17: CopyLoc[2](Arg2: &vector<String>)
	18: VecLen(30)
	19: LdConst[4](u64: 8)
	20: Le
	21: StLoc[5](loc2: bool)
	22: Branch(25)
B5:
	23: LdFalse
	24: StLoc[5](loc2: bool)
B6:
	25: MoveLoc[5](loc2: bool)
	26: BrFalse(28)
B7:
	27: Branch(34)
B8:
	28: MoveLoc[2](Arg2: &vector<String>)
	29: Pop
	30: MoveLoc[1](Arg1: &vector<String>)
	31: Pop
	32: LdConst[2](u64: 2)
	33: Abort
B9:
	34: MoveLoc[1](Arg1: &vector<String>)
	35: StLoc[12](loc9: &vector<String>)
	36: CopyLoc[12](loc9: &vector<String>)
	37: VecLen(30)
	38: StLoc[4](loc1: u64)
	39: LdU64(0)
	40: StLoc[8](loc5: u64)
	41: MoveLoc[4](loc1: u64)
	42: StLoc[11](loc8: u64)
B10:
	43: CopyLoc[8](loc5: u64)
	44: CopyLoc[11](loc8: u64)
	45: Lt
	46: BrFalse(68)
B11:
	47: CopyLoc[8](loc5: u64)
	48: StLoc[9](loc6: u64)
	49: CopyLoc[12](loc9: &vector<String>)
	50: MoveLoc[9](loc6: u64)
	51: VecImmBorrow(30)
	52: Call string::length(&String): u64
	53: LdConst[5](u64: 256)
	54: Le
	55: BrFalse(57)
B12:
	56: Branch(63)
B13:
	57: MoveLoc[12](loc9: &vector<String>)
	58: Pop
	59: MoveLoc[2](Arg2: &vector<String>)
	60: Pop
	61: LdConst[3](u64: 3)
	62: Abort
B14:
	63: MoveLoc[8](loc5: u64)
	64: LdU64(1)
	65: Add
	66: StLoc[8](loc5: u64)
	67: Branch(43)
B15:
	68: MoveLoc[12](loc9: &vector<String>)
	69: Pop
	70: MoveLoc[2](Arg2: &vector<String>)
	71: StLoc[13](loc10: &vector<String>)
	72: CopyLoc[13](loc10: &vector<String>)
	73: VecLen(30)
	74: StLoc[3](loc0: u64)
	75: LdU64(0)
	76: StLoc[6](loc3: u64)
	77: MoveLoc[3](loc0: u64)
	78: StLoc[10](loc7: u64)
B16:
	79: CopyLoc[6](loc3: u64)
	80: CopyLoc[10](loc7: u64)
	81: Lt
	82: BrFalse(102)
B17:
	83: CopyLoc[6](loc3: u64)
	84: StLoc[7](loc4: u64)
	85: CopyLoc[13](loc10: &vector<String>)
	86: MoveLoc[7](loc4: u64)
	87: VecImmBorrow(30)
	88: Call string::length(&String): u64
	89: LdConst[5](u64: 256)
	90: Le
	91: BrFalse(93)
B18:
	92: Branch(97)
B19:
	93: MoveLoc[13](loc10: &vector<String>)
	94: Pop
	95: LdConst[3](u64: 3)
	96: Abort
B20:
	97: MoveLoc[6](loc3: u64)
	98: LdU64(1)
	99: Add
	100: StLoc[6](loc3: u64)
	101: Branch(79)
B21:
	102: MoveLoc[13](loc10: &vector<String>)
	103: Pop
	104: Ret
}

Constants [
	0 => u64: 0
	1 => u64: 1
	2 => u64: 2
	3 => u64: 3
	4 => u64: 8
	5 => u64: 256
]
}