diff --git a/3.restricted-mint-multisig/imports/multisig.leo b/3.restricted-mint-multisig/imports/multisig.leo index 1652050..e65e095 100644 --- a/3.restricted-mint-multisig/imports/multisig.leo +++ b/3.restricted-mint-multisig/imports/multisig.leo @@ -1,78 +1,46 @@ -program multisig.aleo { - const ADD_SIGNER_FN: field = 1field; - const CHANGE_REQUIRED_SIGNATURES_FN: field = 2field; +import multisig.leo; - mapping required_signatures: bool => u64; - mapping proposals: Proposal => u64; - mapping signers: address => bool; +program token.aleo { + const MINT_FN: field = 1field; - struct Proposal { - program_address: address, - function_id: field, - args_hash: field, - } - - record ticket { + record token { owner: address, - program_address: address, - function_id: field, - args_hash: field, - } - - transition mint_ticket(proposal: Proposal) -> ticket { - return ticket { - owner: self.caller, - program_address: proposal.program_address, - function_id: proposal.function_id, - args_hash: proposal.args_hash, - } then finalize(proposal); - } - - finalize mint_ticket(proposal: Proposal) { - let signatures: u64 = Mapping::get_or_use(proposals, proposal, 0u64); - let min_signatures: u64 = Mapping::get_or_use(required_signatures, true, 0u64); - assert(signatures >= min_signatures); - Mapping::set(proposals, proposal, 0u64); - } - - transition sign(proposal: Proposal) { - return then finalize(self.caller, proposal); + amount: u64, } - finalize sign(caller: address, proposal: Proposal) { - assert(Mapping::get(signers, caller)); - let signatures: u64 = Mapping::get_or_use(proposals, proposal, 0u64); - Mapping::set(proposals, proposal, signatures + 1u64); + struct MintArgs { + receiver: address, + amount: u64, } - transition add_signer(ticket_: ticket, new_signer: address) { + transition mint(ticket_: multisig.leo/ticket.record, args: MintArgs) -> token { assert_eq( ticket_.program_address, - aleo10frku8hz8zyyh03avmr2gjg6zyqz98g2fmcew96a50vxeke995qsuf90f2 // address("multisig.aleo") + aleo16l909ch9c9zujjlthk47knk72zq0r4wd7eveqm8ukgta6cfszsgs4nd7p4 // address("token.aleo") ); - assert_eq(ticket_.function_id, ADD_SIGNER_FN); - assert_eq(ticket_.args_hash, BHP256::hash_to_field(new_signer)); - return then finalize(new_signer); - } + assert_eq(ticket_.function_id, MINT_FN); + assert_eq(ticket_.args_hash, BHP256::hash_to_field(args)); + multisig.leo/burn(ticket_); - finalize add_signer(new_signer: address) { - Mapping::set(signers, new_signer, true); + return token { + owner: args.receiver, + amount: args.amount, + }; } - transition change_required_signatures(ticket_: ticket, new_required_signatures: u64) { - assert_eq( - ticket_.program_address, - aleo10frku8hz8zyyh03avmr2gjg6zyqz98g2fmcew96a50vxeke995qsuf90f2 // address("multisig.aleo") - ); - assert_eq(ticket_.function_id, CHANGE_REQUIRED_SIGNATURES_FN); - assert_eq(ticket_.args_hash, BHP256::hash_to_field(new_required_signatures)); + transition transfer(sender: token, receiver: address, amount: u64) -> (token, token) { + let difference: u64 = sender.amount - amount; - return then finalize(new_required_signatures); - } + let remaining: token = token { + owner: sender.owner, + amount: difference, + }; - finalize change_required_signatures(new_required_signatures: u64) { - Mapping::set(required_signatures, true, new_required_signatures); - } + let transferred: token = token { + owner: receiver, + amount: amount, + }; - transition burn(ticket_: ticket) {} -} + return (remaining, transferred); + } +} \ No newline at end of file