The explorer is out of sync. The last synced block is 524 hours ago. Current block height: explorer: 2206528 / node: 2541516 / ref: 2492275

Program dev_truecoin_token_v007.aleo

Program ID
dev_truecoin_token_v007.aleo
Owner signature
sign16ztjd0l26k3ndmrgk6qewrrhchge94wp72rzsunkkvz7prqwsgp9cult8mmm8jayn3w2jl4azfqp5xaa48ur0mqp02wr53t7tx60sq2crlhg2a4wrvs2c7ueftcx44yf7f508jg9vx0ds03ys2wkhs70qrkkkv9kavt83kpj7mjkmzgnxxkmju28an98m76cjlna06w25cxqx4svucp
Times called
76
Similar programs
0
Imports
-
Mappings
public_balance (address -> u64)
aml_blocklist (address -> boolean)
aml_version (boolean -> u32)
Structs
UpdateAMLBlocklist
MintArgs
Action
Proposal
Records
Token
KYC
AML
Authorization
MintRequest
Functions
-
Transitions
authorize_mint(address, u64, field) -> (Authorization, MintRequest)
mint_public(Authorization, AML, KYC, u32, MintArgs) -> (AML, KYC) finalize(MintArgs, u32, u32)
mint_private(Authorization, AML, KYC, u32, MintArgs) -> (AML, KYC, Token)
issue_kyc(address, u32) -> KYC
redeem_public(KYC, u32, u64) -> KYC finalize(address, u64, u32)
redeem_private(KYC, u32, u64, Token) -> (KYC, Token)
transfer_public(public address, public u64) -> () finalize(address, address, u64)
transfer_private(Token, address, u64) -> (Token, Token)
transfer_private_to_public(Token, public address, public u64) -> Token finalize(address, u64)
transfer_public_to_private(address, public u64) -> Token finalize(address, u64)
join(Token, Token) -> Token
update_aml_blocklist(UpdateAMLBlocklist) -> () finalize(UpdateAMLBlocklist)
issue_aml(u32) -> AML finalize(address)
verify_aml(AML) -> AML finalize(u32)
verify_kyc(KYC, u32) -> KYC finalize(u32)
Program Source Code (Aleo Instruction) Upload Leo source

program dev_truecoin_token_v007.aleo;

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

record KYC:
    owner as address.private;
    expiry_block_height as u32.private;

record AML:
    owner as address.private;
    version as u32.private;

struct UpdateAMLBlocklist:
    account as address;
    blocked as boolean;

struct MintArgs:
    to as address;
    amount as u64;
    iv as field;

struct Action:
    action_id as u8;

struct Proposal:
    action as Action;
    argument_hash as field;
    nonce as u64;

record Authorization:
    owner as address.private;
    proposal as Proposal.private;

record MintRequest:
    owner as address.private;
    argument as MintArgs.private;

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

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

mapping aml_version:
    key as boolean.public;
    value as u32.public;

function authorize_mint:
    input r0 as address.private;
    input r1 as u64.private;
    input r2 as field.private;
    cast r0 r1 r2 into r3 as MintArgs;
    cast 0u8 into r4 as Action;
    hash.bhp256 r3 into r5 as field;
    cast r4 r5 0u64 into r6 as Proposal;
    cast r0 r6 into r7 as Authorization.record;
    cast r0 r3 into r8 as MintRequest.record;
    output r7 as Authorization.record;
    output r8 as MintRequest.record;

function mint_public:
    input r0 as Authorization.record;
    input r1 as AML.record;
    input r2 as KYC.record;
    input r3 as u32.private;
    input r4 as MintArgs.private;
    assert.eq r0.proposal.action.action_id 0u8;
    hash.bhp256 r4 into r5 as field;
    assert.eq r0.proposal.argument_hash r5;
    assert.eq r4.to r2.owner;
    cast r1.owner r1.version into r6 as AML.record;
    lte r3 r2.expiry_block_height into r7;
    assert.eq r7 true;
    cast r2.owner r2.expiry_block_height into r8 as KYC.record;
    async mint_public r4 r1.version r3 into r9;
    output r6 as AML.record;
    output r8 as KYC.record;
    output r9 as dev_truecoin_token_v007.aleo/mint_public.future;
finalize mint_public:
    input r0 as MintArgs.public;
    input r1 as u32.public;
    input r2 as u32.public;
    get aml_version[true] into r3;
    assert.eq r1 r3;
    lt block.height r2 into r4;
    assert.eq r4 true;
    get.or_use public_balance[r0.to] 0u64 into r5;
    add r5 r0.amount into r6;
    set r6 into public_balance[r0.to];

function mint_private:
    input r0 as Authorization.record;
    input r1 as AML.record;
    input r2 as KYC.record;
    input r3 as u32.private;
    input r4 as MintArgs.private;
    assert.eq r0.proposal.action.action_id 0u8;
    hash.bhp256 r4 into r5 as field;
    assert.eq r0.proposal.argument_hash r5;
    assert.eq r4.to r2.owner;
    cast r1.owner r1.version into r6 as AML.record;
    lte r3 r2.expiry_block_height into r7;
    assert.eq r7 true;
    cast r2.owner r2.expiry_block_height into r8 as KYC.record;
    cast r4.to r4.amount into r9 as Token.record;
    output r6 as AML.record;
    output r8 as KYC.record;
    output r9 as Token.record;

function issue_kyc:
    input r0 as address.private;
    input r1 as u32.private;
    cast r0 r1 into r2 as KYC.record;
    output r2 as KYC.record;

function redeem_public:
    input r0 as KYC.record;
    input r1 as u32.private;
    input r2 as u64.private;
    lte r1 r0.expiry_block_height into r3;
    assert.eq r3 true;
    cast r0.owner r0.expiry_block_height into r4 as KYC.record;
    async redeem_public r0.owner r2 r1 into r5;
    output r4 as KYC.record;
    output r5 as dev_truecoin_token_v007.aleo/redeem_public.future;
finalize redeem_public:
    input r0 as address.public;
    input r1 as u64.public;
    input r2 as u32.public;
    lt block.height r2 into r3;
    assert.eq r3 true;
    get.or_use public_balance[r0] 0u64 into r4;
    sub r4 r1 into r5;
    set r5 into public_balance[r0];

function redeem_private:
    input r0 as KYC.record;
    input r1 as u32.private;
    input r2 as u64.private;
    input r3 as Token.record;
    lte r1 r0.expiry_block_height into r4;
    assert.eq r4 true;
    cast r0.owner r0.expiry_block_height into r5 as KYC.record;
    sub r3.amount r2 into r6;
    cast r3.owner r6 into r7 as Token.record;
    output r5 as KYC.record;
    output r7 as Token.record;

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

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_private_to_public:
    input r0 as Token.record;
    input r1 as address.public;
    input r2 as u64.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 dev_truecoin_token_v007.aleo/transfer_private_to_public.future;
finalize transfer_private_to_public:
    input r0 as address.public;
    input r1 as u64.public;
    get.or_use public_balance[r0] 0u64 into r2;
    add r2 r1 into r3;
    set r3 into public_balance[r0];

function transfer_public_to_private:
    input r0 as address.private;
    input r1 as u64.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 dev_truecoin_token_v007.aleo/transfer_public_to_private.future;
finalize transfer_public_to_private:
    input r0 as address.public;
    input r1 as u64.public;
    get.or_use public_balance[r0] 0u64 into r2;
    sub r2 r1 into r3;
    set r3 into public_balance[r0];

function join:
    input r0 as Token.record;
    input r1 as Token.record;
    add r0.amount r1.amount into r2;
    cast r0.owner r2 into r3 as Token.record;
    output r3 as Token.record;

function update_aml_blocklist:
    input r0 as UpdateAMLBlocklist.private;
    async update_aml_blocklist r0 into r1;
    output r1 as dev_truecoin_token_v007.aleo/update_aml_blocklist.future;
finalize update_aml_blocklist:
    input r0 as UpdateAMLBlocklist.public;
    set r0.blocked into aml_blocklist[r0.account];
    get.or_use aml_version[true] 0u32 into r1;
    add r1 1u32 into r2;
    set r2 into aml_version[true];

function issue_aml:
    input r0 as u32.private;
    cast self.caller r0 into r1 as AML.record;
    async issue_aml self.caller into r2;
    output r1 as AML.record;
    output r2 as dev_truecoin_token_v007.aleo/issue_aml.future;
finalize issue_aml:
    input r0 as address.public;
    get.or_use aml_blocklist[r0] false into r1;
    not r1 into r2;
    assert.eq r2 true;

function verify_aml:
    input r0 as AML.record;
    cast r0.owner r0.version into r1 as AML.record;
    async verify_aml r0.version into r2;
    output r1 as AML.record;
    output r2 as dev_truecoin_token_v007.aleo/verify_aml.future;
finalize verify_aml:
    input r0 as u32.public;
    get aml_version[true] into r1;
    assert.eq r0 r1;

function verify_kyc:
    input r0 as KYC.record;
    input r1 as u32.private;
    lte r1 r0.expiry_block_height into r2;
    assert.eq r2 true;
    cast r0.owner r0.expiry_block_height into r3 as KYC.record;
    async verify_kyc r1 into r4;
    output r3 as KYC.record;
    output r4 as dev_truecoin_token_v007.aleo/verify_kyc.future;
finalize verify_kyc:
    input r0 as u32.public;
    lt block.height r0 into r1;
    assert.eq r1 true;

Block heightTimestampTransition IDFunction callState
1,624,4802024-03-06 17:40:35au1xdhk7xcfrdcjhua3prz0zrg4ydt6wutl0gakwr9rgyjn0f60fvpsvhgwtnauthorize_mintAccepted
1,595,4542024-03-04 09:54:29au1he52fmtx3er22vnacx96hf4ujfc3rpkx3vgll7wxhzjq6afz3y8qwukr5uissue_kycAccepted
1,595,2642024-03-04 09:26:28au1veh4magqcphcc72wz6uxezpj53r3wnvaj02utkp3lew7706j6ggq7pm65nissue_kycAccepted
1,595,1252024-03-04 09:06:05au10pwhgqps0xwdttc5z045yra2snnx55u09yr6u8sffrnprgmazgxsluxrr6issue_kycAccepted
1,595,0842024-03-04 09:00:31au1msjpcg9fwms7z3z9wjcquhvl20mux90d88tm63cdw3c57cs95szsz8rgppissue_kycAccepted
1,566,6752024-03-01 13:55:24au14vzv3538rt9946c24q804zpch5s0975rhllf4pfxshqed8de7uxsuqavfnissue_kycAccepted
1,566,3622024-03-01 13:14:49au1l2x7lm8p7rqczyehxrput00gx3ptdurnc5ke67rrgrqnulh86v9sj3dx4yauthorize_mintAccepted
1,566,3472024-03-01 13:12:39au15v5mc2r75ufthltdfhxhuv9t834jq2h2nggawahce0uwf3vh5yrsyqs83jissue_kycAccepted
1,566,3252024-03-01 13:09:50au10uchtnanylz7yk0vfx2frygaev2tue0j9fqquy8ke23mfn4kwqxqj9wzfhissue_amlAccepted
1,566,2962024-03-01 13:05:01au1pkfqmlvy7064hgtg3yfqr4nf4d373cawakgenlxyljf5p8fvsqpstc7pxfissue_amlAccepted
1,566,2882024-03-01 13:03:33au1ttxl8v5836f7sqruum08u9x09z0fha0ml994jar72pasjf7tuv9qjxmkuvupdate_aml_blocklistAccepted
1,566,2532024-03-01 12:58:00au19r2ea4apv5mprsl9tj38ujmzs8ls7srfk640j4h3a3uknwk74qxs3ld25pissue_amlAccepted
1,566,1372024-03-01 12:38:33au1gt893390mpz6w33y28u2dw5kcus3d3wcdcukrzsz9xku9nf7e5gqd33rvmissue_kycAccepted
1,565,9712024-03-01 12:11:21au1dxrlzaka0kh77s6q9jgxxextzdfyhnpr88t48xc23gmnvwerkqxq68m7vkissue_amlAccepted
1,565,9572024-03-01 12:08:59au1um5ayhpfq8zunnz8h2jxe7amvmeqcrcgwph32vnun3yr9swf8yqqe4t8y5issue_kycAccepted
1,565,9452024-03-01 12:07:13au1s0qu8kt86876trj0wrrh2tq7q9hdm3sjyvxlqvacsgyzfasvavysr78uf3update_aml_blocklistAccepted
1,565,9422024-03-01 12:06:58au1yw4yf4utddndgd8m27senmuxfpvef72c8rtvknm7gsxq35gqncgqdd8sscissue_amlAccepted
1,565,9302024-03-01 12:04:48au144x68a2cvtkhgkh0vtxg99mxvllk5qcf5kkqn4tz6v5asswd9uqqz7qdazissue_amlAccepted
1,565,9232024-03-01 12:03:59au197t4l9lk0x05x24n45p26hyx0gjc4s6tj2wfc8r2rga39jf3ccpsg4ca37update_aml_blocklistAccepted
1,565,7792024-03-01 11:41:24au1rvnwkqqqpfyx65agwh2vsds7nl5mqc33lnrmnw0rpavq43t9pq8sy53ne9issue_kycAccepted
1,565,7602024-03-01 11:38:20au120p7fjsfl2zu7ggvcadu2pd0376dc8uwk22mlt4ytldz5f6wmyyqf7pt9aissue_amlAccepted
1,565,7412024-03-01 11:34:48au1vwzqyjctpc7s2gnzye3ws5ec0hm83dddfjwe5ns5v5dptz7awvgs00p9q7issue_amlAccepted
1,565,7242024-03-01 11:32:18au1hdutmdupdgsuz6ppuu3s7q0wyh64hcz2v6uthz0dln6x5h4f2qqq2rue5wupdate_aml_blocklistAccepted
1,565,6292024-03-01 11:18:58au1umke8sznv45zddgyhc5860xahqxnu0xm3pnzfz79rvxhp67p0szqp8vufxissue_amlAccepted
1,565,6032024-03-01 11:14:48au1fg9sw82cllpkqpv8ak4zqqpcn4wr66gnd7kwfklzd9865txmvq8st59hfmissue_kycAccepted
1,565,5302024-03-01 11:03:22au1ka2vaf3zx3vy8unv8zdy2uy2pfq547aep60egzulyvcpry9fxg9st66349issue_amlAccepted
1,565,5232024-03-01 11:01:41au1t3pw8u9k4ncsn5h26ehhqxqfjw5lfdx728k9eszlx34fxedj2srsw3kp6uupdate_aml_blocklistAccepted
1,565,4992024-03-01 10:58:16au1gxql0jamgrpf3hge8zl0m7gufpf86zqr83mc525d0hv6davtrv8sx3d7lyissue_amlAccepted
1,565,4962024-03-01 10:56:57au1mt80887nt07qehqgrpqwerhkhnh92fqugpvkn8tup3vsw6mzev8qhtd4vnupdate_aml_blocklistAccepted
1,565,4772024-03-01 10:53:56au1ezvsr0l2fhzj3rm68agn0764jqlzdk0hden0nmfzut3248cwl5qsmk0atqissue_amlAccepted






Not implemented