The explorer is out of sync. The last synced block is 191 hours ago. Current block height: explorer: 2206528 / node: 2330155 / ref: 2330156

Program cleo_token_v1_1.aleo

Program ID
cleo_token_v1_1.aleo
Owner signature
sign1yg6pnnfkrtja6jeu29v5w005uvnpye8qlqsxx2apltqwh6tk4qpnuq8a5tjhsphel2u92rwc3gljpytfp6787gyapkxsj2cuse5sgpyyjqke9cvp8qu4zhhqad4gvsxs24v3c5szfgnf6tns7yycwprrpx3jam6ptd7a4cuqexc99xgxjd8e2gw945jpue5t3444kz35pe5pynrry0h
Times called
7
Similar programs
Imports
-
Mappings
initialized (boolean -> boolean)
contract_owner (boolean -> address)
supply_token (boolean -> u64)
accounts (address -> u64)
token_meta (field -> TokenMetadata)
Structs
TokenMetadata
Records
Token
Functions
-
Transitions
initialize(address) -> () finalize(address)
register(TokenMetadata) -> () finalize(TokenMetadata, address)
mint(address, u64) -> Token finalize(address, u64, address)
burn_public(public address, public u64) -> () finalize(address, u64, address)
burn_private(address, Token, u64) -> Token finalize(address)
transfer_private(Token, address, u64) -> (Token, Token)
transfer_public(address, u64) -> () finalize(address, address, u64)
deposit(Token, u64) -> Token finalize(address, u64)
withdraw(address, u64) -> Token finalize(address, u64)
Program Source Code (Aleo Instruction) Upload Leo source

program cleo_token_v1_1.aleo;

record Token:
    owner as address.private;
    amount as u64.private;

struct TokenMetadata:
    from_chain_id as u32;
    from_asset_addr as field;

mapping initialized:
    key as boolean.public;
    value as boolean.public;

mapping contract_owner:
    key as boolean.public;
    value as address.public;

mapping supply_token:
    key as boolean.public;
    value as u64.public;

mapping accounts:
    key as address.public;
    value as u64.public;

mapping token_meta:
    key as field.public;
    value as TokenMetadata.public;

function initialize:
    input r0 as address.private;
    async initialize r0 into r1;
    output r1 as cleo_token_v1_1.aleo/initialize.future;
finalize initialize:
    input r0 as address.public;
    get.or_use initialized[true] false into r1;
    not r1 into r2;
    assert.eq r2 true;
    set r0 into contract_owner[true];
    set true into initialized[true];

function register:
    input r0 as TokenMetadata.private;
    async register r0 self.caller into r1;
    output r1 as cleo_token_v1_1.aleo/register.future;
finalize register:
    input r0 as TokenMetadata.public;
    input r1 as address.public;
    get.or_use initialized[true] false into r2;
    assert.eq r2 true;
    get contract_owner[true] into r3;
    assert.eq r3 r1;
    hash.bhp256 r0 into r4 as field;
    contains token_meta[r4] into r5;
    not r5 into r6;
    assert.eq r6 true;
    set r0 into token_meta[r4];

function mint:
    input r0 as address.private;
    input r1 as u64.private;
    lte r1 100000u64 into r2;
    assert.eq r2 true;
    cast r0 r1 into r3 as Token.record;
    async mint r0 r1 self.caller into r4;
    output r3 as Token.record;
    output r4 as cleo_token_v1_1.aleo/mint.future;
finalize mint:
    input r0 as address.public;
    input r1 as u64.public;
    input r2 as address.public;
    get contract_owner[true] into r3;
    assert.eq r3 r2;
    get.or_use supply_token[true] 0u64 into r4;
    add r4 r1 into r5;
    lte r5 100000000000u64 into r6;
    assert.eq r6 true;
    get.or_use accounts[r0] 0u64 into r7;
    set r5 into supply_token[true];
    add r7 r1 into r8;
    set r8 into accounts[r0];

function burn_public:
    input r0 as address.public;
    input r1 as u64.public;
    async burn_public r0 r1 self.caller into r2;
    output r2 as cleo_token_v1_1.aleo/burn_public.future;
finalize burn_public:
    input r0 as address.public;
    input r1 as u64.public;
    input r2 as address.public;
    get contract_owner[true] into r3;
    assert.eq r3 r2;
    get.or_use accounts[r0] 0u64 into r4;
    sub r4 r1 into r5;
    set r5 into accounts[r0];

function burn_private:
    input r0 as address.private;
    input r1 as Token.record;
    input r2 as u64.private;
    sub r1.amount r2 into r3;
    cast r1.owner r3 into r4 as Token.record;
    async burn_private self.caller into r5;
    output r4 as Token.record;
    output r5 as cleo_token_v1_1.aleo/burn_private.future;
finalize burn_private:
    input r0 as address.public;
    get contract_owner[true] into r1;
    assert.eq r1 r0;

function transfer_private:
    input r0 as Token.record;
    input r1 as address.private;
    input r2 as u64.private;
    sub r0.amount r2 into r3;
    cast r0.owner r3 into r4 as Token.record;
    cast r1 r2 into r5 as Token.record;
    output r4 as Token.record;
    output r5 as Token.record;

function transfer_public:
    input r0 as address.private;
    input r1 as u64.private;
    async transfer_public self.caller r0 r1 into r2;
    output r2 as cleo_token_v1_1.aleo/transfer_public.future;
finalize transfer_public:
    input r0 as address.public;
    input r1 as address.public;
    input r2 as u64.public;
    get accounts[r0] into r3;
    sub r3 r2 into r4;
    set r4 into accounts[r0];
    get.or_use accounts[r0] 0u64 into r5;
    add r5 r2 into r6;
    set r6 into accounts[r1];

function deposit:
    input r0 as Token.record;
    input r1 as u64.private;
    sub r0.amount r1 into r2;
    cast r0.owner r2 into r3 as Token.record;
    async deposit self.caller r1 into r4;
    output r3 as Token.record;
    output r4 as cleo_token_v1_1.aleo/deposit.future;
finalize deposit:
    input r0 as address.public;
    input r1 as u64.public;
    get.or_use accounts[r0] 0u64 into r2;
    add r2 r1 into r3;
    set r3 into accounts[r0];

function withdraw:
    input r0 as address.private;
    input r1 as u64.private;
    cast r0 r1 into r2 as Token.record;
    async withdraw self.caller r1 into r3;
    output r2 as Token.record;
    output r3 as cleo_token_v1_1.aleo/withdraw.future;
finalize withdraw:
    input r0 as address.public;
    input r1 as u64.public;
    get accounts[r0] into r2;
    sub r2 r1 into r3;
    set r3 into accounts[r0];











Not implemented