Skip to content
Snippets Groups Projects
Commit 1bd5c525 authored by Mouctar Fofana's avatar Mouctar Fofana
Browse files

ajout de la méthode buy_token et début des devs pour la mise à jour de la balance

parent cda57240
No related branches found
No related tags found
No related merge requests found
...@@ -8,14 +8,9 @@ ...@@ -8,14 +8,9 @@
#import "contracts/fa2.jsligo" "FA2" #import "contracts/fa2.jsligo" "FA2"
export type vote = ["yay"] | ["nope"] | ["pass"];
export type vote =
| ["yay"]
| ["nope"]
| ["pass"];
// =============================================================================================== // ===============================================================================================
namespace Preamble { namespace Preamble {
export const prepare_new_proposal = ( export const prepare_new_proposal = (
params: Parameter.Types.proposal_params, params: Parameter.Types.proposal_params,
...@@ -38,7 +33,6 @@ namespace Preamble { ...@@ -38,7 +33,6 @@ namespace Preamble {
}; };
// =============================================================================================== // ===============================================================================================
type request = [Parameter.Types.t, Storage.Types.t]; type request = [Parameter.Types.t, Storage.Types.t];
export type result = [list<operation>, Storage.Types.t]; export type result = [list<operation>, Storage.Types.t];
...@@ -54,34 +48,59 @@ export const create_proposal = ( ...@@ -54,34 +48,59 @@ export const create_proposal = (
}; };
@entry @entry
export const make_vote = (proposal_number: nat, vote:vote,storage: Storage.Types.t, dao_contract_address : address ): result => { export const make_vote = (
proposal_number: nat,
vote: vote,
storage: Storage.Types.t,
dao_contract_address: address
): result => {
let proposal = Preamble.retrieve_a_proposal(proposal_number, storage); let proposal = Preamble.retrieve_a_proposal(proposal_number, storage);
proposal = Storage.Utils.add_signer_to_proposal( proposal
= Storage.Utils.add_signer_to_proposal(
proposal, proposal,
(Tezos.get_sender()), (Tezos.get_sender()),
storage.threshold storage.threshold
); );
// Récupérer le nombre de tokens du votant // Récupérer le nombre de tokens du votant
const voterBalance = FA2.get_balance(Tezos.get_sender()); const voterBalance = FA2.get_balance(Tezos.get_sender());
// Transférer les tokens vers le contrat de la DAO // Transférer les tokens vers le contrat de la DAO
const transferOperation = FA2.transfer_tokens( const transferOperation =
FA2.transfer_tokens(
Tezos.get_sender(), Tezos.get_sender(),
dao_contract_address, dao_contract_address,
voterBalance voterBalance
); );
const operations = [transferOperation]; const operations = [transferOperation];
const final_storage =
Storage.Utils.update_proposal(proposal_number, proposal, storage);
return [operations, final_storage];
};
const final_storage = Storage.Utils.update_proposal(proposal_number, proposal, storage); // ===============================================================================================
return [operations, final_storage]; @entry
export const buy_token = (
buyer_address: address,
amount: nat,
storage: Storage.Types.t
): result => {
// Transférer les tokens de la "banque" vers l'acheteur
const transferOperation =
FA2.transfer_tokens(storage.bank_address, buyer_address, amount);
// Mettre à jour le stockage pour refléter le nouveau solde de l'acheteur et de la "banque"
const final_storage =
Storage.Utils.update_balances(
storage.bank_address,
buyer_address,
amount,
storage
);
// Retourner une liste d'opérations et le stockage mis à jour
return [[transferOperation], final_storage];
}; };
// =============================================================================================== // ===============================================================================================
// This function is now only used for tests, and will be removed once tests are rewritten // This function is now only used for tests, and will be removed once tests are rewritten
export const main = (action: Parameter.Types.t, store: Storage.Types.t): result => export const main = (action: Parameter.Types.t, store: Storage.Types.t): result =>
match(action) { match(action) {
when (Create_proposal(p)): when (Create_proposal(p)):
......
...@@ -18,7 +18,8 @@ export namespace Types { ...@@ -18,7 +18,8 @@ export namespace Types {
proposal_map: big_map<nat, proposal>, proposal_map: big_map<nat, proposal>,
signers: set<address>, signers: set<address>,
threshold: nat, threshold: nat,
metadata: big_map<string, bytes> metadata: big_map<string, bytes>,
balances: big_map<address, nat>
}; };
}; };
...@@ -31,7 +32,8 @@ export namespace Utils { ...@@ -31,7 +32,8 @@ export namespace Utils {
proposal_map: Big_map.empty as big_map<nat, Types.proposal>, proposal_map: Big_map.empty as big_map<nat, Types.proposal>,
signers: signers, signers: signers,
threshold: threshold, threshold: threshold,
metadata: (Big_map.empty as big_map<string, bytes>) metadata: (Big_map.empty as big_map<string, bytes>),
balances: (Big_map.empty as big_map<address, nat>)
} }
); );
@inline @inline
...@@ -105,4 +107,29 @@ export namespace Utils { ...@@ -105,4 +107,29 @@ export namespace Utils {
); );
return { ...storage, proposal_map: proposal_map } return { ...storage, proposal_map: proposal_map }
}; };
/*
@inline
export const update_balances = (bank_address: address, buyer_address: address, amount: nat, storage: Types.t): Types.t => {
// Vérifier si les adresses existent dans le stockage, sinon initialiser à 0
if (Test.equal(Big_map.find_opt(bank_address, storage.balances), None())) {
let storage = { ...storage };
storage.balances = Big_map.add(bank_address, 0n, storage.balances);
}
if (Test.equal(Big_map.find_opt(buyer_address, storage.balances), None())) {
let updatedStorage = { ...storage };
updatedStorage.balances = Big_map.add(buyer_address, 0n, updatedStorage.balances);
}
// Récupérer les soldes actuels
const bank_balance = Big_map.find_opt(bank_address, storage.balances).get();
const buyer_balance = Big_map.find_opt(buyer_address, storage.balances).get();
// Mettre à jour les soldes
storage.balances = Big_map.update(bank_address, Some(bank_balance - amount), storage.balances);
storage.balances = Big_map.update(buyer_address, Some(buyer_balance + amount), storage.balances);
// Retourner le stockage mis à jour
return storage;
};
*/
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment