diff --git a/common/errors.mligo b/common/errors.mligo index 2772c773ad58132c9194e089caf29558e9e01acc..935383dd5e06e3452ec3c53d9084e15436e4659b 100644 --- a/common/errors.mligo +++ b/common/errors.mligo @@ -13,3 +13,6 @@ let has_already_signed = "You have already signed this proposal" [@no_mutation] let unknown_contract_entrypoint = "Cannot connect to the target transfer token entrypoint" + +[@no_mutation] +let insufficient_balance = "FA2_BALANCE" diff --git a/fa2/errors.mligo b/fa2/errors.mligo index 94fb56b5ba74c1e562c3a9df8741e53d97470e5f..7863a6960b6de764a73ea1da6c82c08da62ba63a 100644 --- a/fa2/errors.mligo +++ b/fa2/errors.mligo @@ -27,3 +27,6 @@ let rec_hook_undef = "FA2_RECEIVER_HOOK_UNDEFINED" [@no_mutation] let send_hook_under = "FA2_SENDER_HOOK_UNDEFINED" + +[@no_mutation] +let insufficient_balance = "FA2_BALANCE" diff --git a/src/conditions.jsligo b/src/conditions.jsligo index 34549592f50232e82c304945fc87b21fad5922f3..e7705879320e53bb32f53a0616b6982c8b80f247 100644 --- a/src/conditions.jsligo +++ b/src/conditions.jsligo @@ -19,3 +19,8 @@ export const not_yet_signer = (proposal: Storage.Types.proposal): unit => ! Set.mem((Tezos.get_sender()), proposal.approved_signers), Errors.has_already_signed ); + +@inline +export const insufficient_balance = (a_number: int) : unit=> { + assert_with_error(a_number == (0 as int), Errors.insufficient_balance); +}; \ No newline at end of file diff --git a/src/contract.jsligo b/src/contract.jsligo index e5fd758d3b9eec551b4787d28bf155febf9db724..8524cc3f614d8f962e79a43c3a7c551f04a9aac6 100644 --- a/src/contract.jsligo +++ b/src/contract.jsligo @@ -8,6 +8,7 @@ #import "contracts/fa2.jsligo" "FA2" + export type vote = ["yay"] | ["nope"] | ["pass"]; // =============================================================================================== @@ -52,8 +53,9 @@ export const make_vote = ( proposal_number: nat, vote: vote, storage: Storage.Types.t, - dao_contract_address: address -): result => { + dao_contract_address: address, + +): { operations: list<operation>, final_storage: Storage.Types.t } => { let proposal = Preamble.retrieve_a_proposal(proposal_number, storage); proposal = Storage.Utils.add_signer_to_proposal( @@ -63,6 +65,10 @@ export const make_vote = ( ); // Récupérer le nombre de tokens du votant const voterBalance = FA2.get_balance(Tezos.get_sender()); + + Conditions.insufficient_balance(voterBalance); + + // Transférer les tokens vers le contrat de la DAO const transferOperation = FA2.transfer_tokens( @@ -70,12 +76,13 @@ export const make_vote = ( dao_contract_address, voterBalance ); - const operations = [transferOperation]; const final_storage = Storage.Utils.update_proposal(proposal_number, proposal, storage); - return [operations, final_storage]; + return { operations: transferOperation, final_storage: final_storage }; }; + + // =============================================================================================== @entry diff --git a/src/contracts/fa2.jsligo b/src/contracts/fa2.jsligo index 314e8823042fe1ee79a0970020f45795b6098586..21a975576dfaaf7f971b4d84c704bab014ed1a4e 100644 --- a/src/contracts/fa2.jsligo +++ b/src/contracts/fa2.jsligo @@ -31,3 +31,10 @@ export const get_balance = (une_adresse : address): int => { return 2 ; } +export const transfer_tokens = ( + sender: address, + recipient: address, + amount: int +) : list<operation> => { + return list([]) ; +};