The explorer is out of sync. The last synced block is 188 hours ago. Current block height: explorer: 2206528 / node: 2328285 / ref: 2328284

Program arc20_usdt.aleo

Program ID
arc20_usdt.aleo
Owner signature
sign1xdhq23k6rg52h80lg47p65kalny4x4qvz976lt40yg6r4f6yquqzz2xeuemu6vukxh45ma6qwjv8vxjw5ht7845ghdrzys4hvfr4vqcm8555plq8qm58hteazn04fgnvceu4hnp7zj3ekzquseymgmanpdnzxhqtsugxlmvxwjmkv6xc8al30jgjgj4cfrs9ks4pt9temfjpzduf4a6
Times called
5
Similar programs
Imports
-
Mappings
account (address -> u128)
approvals (field -> u128)
Structs
Approval
Records
token
Functions
-
Transitions
mint_private(address, u128) -> token finalize(address, u128)
transfer_public(public address, public u128) -> () finalize(address, address, u128)
transfer_private(token, address, u128) -> (token, token)
transfer_private_to_public(token, public address, public u128) -> token finalize(address, u128)
transfer_public_to_private(public address, public u128) -> token finalize(address, u128)
approve_public(public address, public u128) -> () finalize(field, u128)
unapprove_public(public address, public u128) -> () finalize(field, u128)
transfer_from_public(public address, public address, public u128) -> () finalize(field, address, address, u128)
Program Source Code (Aleo Instruction) Upload Leo source

program arc20_usdt.aleo;

record token:
    owner as address.private;
    amount as u128.private;

struct Approval:
    approver as address;
    spender as address;

mapping account:
    key as address.public;
    value as u128.public;

mapping approvals:
    key as field.public;
    value as u128.public;

function mint_private:
    input r0 as address.private;
    input r1 as u128.private;
    cast r0 r1 into r2 as token.record;
    async mint_private self.caller r1 into r3;
    output r2 as token.record;
    output r3 as arc20_usdt.aleo/mint_private.future;
finalize mint_private:
    input r0 as address.public;
    input r1 as u128.public;
    is.eq 0field 0field into r2;
    assert.eq r2 true;

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

function transfer_private:
    input r0 as token.record;
    input r1 as address.private;
    input r2 as u128.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_private_to_public:
    input r0 as token.record;
    input r1 as address.public;
    input r2 as u128.public;
    sub r0.amount r2 into r3;
    cast r0.owner r3 into r4 as token.record;
    async transfer_private_to_public r1 r2 into r5;
    output r4 as token.record;
    output r5 as arc20_usdt.aleo/transfer_private_to_public.future;
finalize transfer_private_to_public:
    input r0 as address.public;
    input r1 as u128.public;
    get.or_use account[r0] 0u128 into r2;
    add r2 r1 into r3;
    set r3 into account[r0];

function transfer_public_to_private:
    input r0 as address.public;
    input r1 as u128.public;
    cast r0 r1 into r2 as token.record;
    async transfer_public_to_private self.caller r1 into r3;
    output r2 as token.record;
    output r3 as arc20_usdt.aleo/transfer_public_to_private.future;
finalize transfer_public_to_private:
    input r0 as address.public;
    input r1 as u128.public;
    get.or_use account[r0] 0u128 into r2;
    sub r2 r1 into r3;
    set r3 into account[r0];

function approve_public:
    input r0 as address.public;
    input r1 as u128.public;
    cast self.caller r0 into r2 as Approval;
    hash.bhp256 r2 into r3 as field;
    async approve_public r3 r1 into r4;
    output r4 as arc20_usdt.aleo/approve_public.future;
finalize approve_public:
    input r0 as field.public;
    input r1 as u128.public;
    get.or_use approvals[r0] 0u128 into r2;
    add r2 r1 into r3;
    set r3 into approvals[r0];

function unapprove_public:
    input r0 as address.public;
    input r1 as u128.public;
    cast self.caller r0 into r2 as Approval;
    hash.bhp256 r2 into r3 as field;
    async unapprove_public r3 r1 into r4;
    output r4 as arc20_usdt.aleo/unapprove_public.future;
finalize unapprove_public:
    input r0 as field.public;
    input r1 as u128.public;
    get approvals[r0] into r2;
    sub r2 r1 into r3;
    set r3 into approvals[r0];

function transfer_from_public:
    input r0 as address.public;
    input r1 as address.public;
    input r2 as u128.public;
    cast r0 self.caller into r3 as Approval;
    hash.bhp256 r3 into r4 as field;
    async transfer_from_public r4 r0 r1 r2 into r5;
    output r5 as arc20_usdt.aleo/transfer_from_public.future;
finalize transfer_from_public:
    input r0 as field.public;
    input r1 as address.public;
    input r2 as address.public;
    input r3 as u128.public;
    get approvals[r0] into r4;
    sub r4 r3 into r5;
    set r5 into approvals[r0];
    get account[r1] into r6;
    sub r6 r3 into r7;
    set r7 into account[r1];
    get.or_use account[r2] 0u128 into r8;
    add r8 r3 into r9;
    set r9 into account[r2];

Block heightTimestampTransition IDFunction callState
1,958,5702024-04-10 09:03:28au17q3fz52r3kv6dvqr4g92n33wljwlg8fyajz77nu595z3aelkngzqzatjnytransfer_private_to_publicAccepted
1,958,5702024-04-10 09:03:28au12yutqc2gvynt06y39dd243wl68ycyl86l366fu7el4yvl29nmqyqy4fr8stransfer_public_to_privateAccepted
1,958,4912024-04-10 08:55:18au1ad9fjpnmeu0lxq4xhmflfzstuyphxvnen9p65k4365e675ryqsfqe0s09kmint_privateAccepted
1,945,8012024-04-09 12:46:03au18hkrv5xhqr6j6rdtwen9kgnqjd23jgrzyugf84yygx9q4l69kcxq2urgs0transfer_private_to_publicAccepted
1,945,7922024-04-09 12:45:03au1ffm5uynw2hnu4x273cra0ha7kchzgdvaj9et46drkalnpu5ppgzsc35xjjmint_privateAccepted




Not implemented