From 0fe5e6cd0e76b31e2817f34ec5ff568e0440b9bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20=C3=96zer?= <104102680+omerozerr@users.noreply.github.com> Date: Wed, 15 Nov 2023 16:35:00 +0300 Subject: [PATCH 1/3] Update main.leo --- 3.restricted-mint-multisig/src/main.leo | 104 +++++++++++++++++------- 1 file changed, 75 insertions(+), 29 deletions(-) diff --git a/3.restricted-mint-multisig/src/main.leo b/3.restricted-mint-multisig/src/main.leo index 4b99389..ba7ee44 100644 --- a/3.restricted-mint-multisig/src/main.leo +++ b/3.restricted-mint-multisig/src/main.leo @@ -1,46 +1,92 @@ -import multisig.leo; +program multisig.aleo { + const ADD_SIGNER_FN: field = 1field; + const CHANGE_REQUIRED_SIGNATURES_FN: field = 2field; -program token.aleo { - const MINT_FN: field = 1field; + mapping required_signatures: bool => u64; + mapping proposals: Proposal => u64; + mapping signers: address => bool; + mapping propmapping : Proposal_signer => bool; - record token { + struct Proposal_signer { + proposal: Proposal, + signer_address: address + + } + + struct Proposal { + program_address: address, + function_id: field, + args_hash: field, + } + + record ticket { owner: address, - amount: u64, + 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); } - struct MintArgs { - receiver: address, - amount: u64, + finalize sign(caller: address, proposal: Proposal) { + assert(Mapping::get(signers, caller)); + + let propA: Proposal_signer = Proposal_signer { + proposal: proposal, + signer_address: caller + }; + assert(!Mapping::get(propmapping, propA)); + Mapping::set(propmapping, propA, true); + let signatures: u64 = Mapping::get_or_use(proposals, proposal, 0u64); + Mapping::set(proposals, proposal, signatures + 1u64); } - transition mint(ticket_: multisig.leo/ticket.record, args: MintArgs) -> token { + transition add_signer(ticket_: ticket, new_signer: address) { assert_eq( ticket_.program_address, - aleo16l909ch9c9zujjlthk47knk72zq0r4wd7eveqm8ukgta6cfszsgs4nd7p4 // address("token.aleo") + aleo10frku8hz8zyyh03avmr2gjg6zyqz98g2fmcew96a50vxeke995qsuf90f2 // address("multisig.aleo") ); - assert_eq(ticket_.function_id, MINT_FN); - assert_eq(ticket_.args_hash, BHP256::hash_to_field(args)); - multisig.leo/burn(ticket_); - - return token { - owner: args.receiver, - amount: args.amount, - }; + assert_eq(ticket_.function_id, ADD_SIGNER_FN); + assert_eq(ticket_.args_hash, BHP256::hash_to_field(new_signer)); + return then finalize(new_signer); } - transition transfer(sender: token, receiver: address, amount: u64) -> (token, token) { - let difference: u64 = sender.amount - amount; + finalize add_signer(new_signer: address) { + Mapping::set(signers, new_signer, true); + } - let remaining: token = token { - owner: sender.owner, - amount: difference, - }; + 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)); - let transferred: token = token { - owner: receiver, - amount: amount, - }; + return then finalize(new_required_signatures); + } - return (remaining, transferred); + finalize change_required_signatures(new_required_signatures: u64) { + Mapping::set(required_signatures, true, new_required_signatures); } + + transition burn(ticket_: ticket) {} } From 909805e68102a81457a31951465449061cd0d7e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20=C3=96zer?= <104102680+omerozerr@users.noreply.github.com> Date: Wed, 15 Nov 2023 16:39:03 +0300 Subject: [PATCH 2/3] Update main.leo --- 3.restricted-mint-multisig/src/main.leo | 104 +++++++----------------- 1 file changed, 29 insertions(+), 75 deletions(-) diff --git a/3.restricted-mint-multisig/src/main.leo b/3.restricted-mint-multisig/src/main.leo index ba7ee44..4b99389 100644 --- a/3.restricted-mint-multisig/src/main.leo +++ b/3.restricted-mint-multisig/src/main.leo @@ -1,92 +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; - mapping propmapping : Proposal_signer => bool; +program token.aleo { + const MINT_FN: field = 1field; - struct Proposal_signer { - proposal: Proposal, - signer_address: address - - } - - 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 propA: Proposal_signer = Proposal_signer { - proposal: proposal, - signer_address: caller - }; - assert(!Mapping::get(propmapping, propA)); - Mapping::set(propmapping, propA, true); - 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); + } } From 8ebde9f32f070ff444716885ca6747b34f31d045 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20=C3=96zer?= <104102680+omerozerr@users.noreply.github.com> Date: Wed, 15 Nov 2023 16:40:49 +0300 Subject: [PATCH 3/3] bug fix --- 3.restricted-mint-multisig/imports/multisig.leo | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/3.restricted-mint-multisig/imports/multisig.leo b/3.restricted-mint-multisig/imports/multisig.leo index 1652050..9dd40b2 100644 --- a/3.restricted-mint-multisig/imports/multisig.leo +++ b/3.restricted-mint-multisig/imports/multisig.leo @@ -5,6 +5,13 @@ program multisig.aleo { mapping required_signatures: bool => u64; mapping proposals: Proposal => u64; mapping signers: address => bool; + mapping propmapping : Proposalsigner => bool; + + struct Proposalsigner { + proposal: Proposal, + signer_address: address + + } struct Proposal { program_address: address, @@ -41,6 +48,13 @@ program multisig.aleo { finalize sign(caller: address, proposal: Proposal) { assert(Mapping::get(signers, caller)); + + let temp: Proposalsigner = Proposalsigner { + proposal: proposal, + signer_address: caller + }; + assert(!Mapping::get_or_use(propmapping, temp,false)); + Mapping::set(propmapping, temp, true); let signatures: u64 = Mapping::get_or_use(proposals, proposal, 0u64); Mapping::set(proposals, proposal, signatures + 1u64); } @@ -74,5 +88,5 @@ program multisig.aleo { Mapping::set(required_signatures, true, new_required_signatures); } - transition burn(ticket_: ticket) {} + transition burn(ticket_: ticket) {} }