Select Git revision
-
RANWEZ Pierre authoredRANWEZ Pierre authored
contract.jsligo 2.88 KiB
#import "../common/constants.mligo" "Constants"
#import "parameter.jsligo" "Parameter"
#import "storage.jsligo" "Storage"
#import "conditions.jsligo" "Conditions"
#import "contracts/fa2.jsligo" "FA2"
export type vote =
| ["yay"]
| ["nope"]
| ["pass"];
// ===============================================================================================
namespace Preamble {
export const prepare_new_proposal = (
params: Parameter.Types.proposal_params,
storage: Storage.Types.t
): Storage.Types.proposal => {
Conditions.only_signer(storage);
Conditions.amount_must_be_zero_tez((Tezos.get_amount()));
return Storage.Utils.create_proposal(params);
};
export const retrieve_a_proposal = (
proposal_number: nat,
storage: Storage.Types.t
): Storage.Types.proposal => {
Conditions.only_signer(storage);
const target_proposal: Storage.Types.proposal =
Storage.Utils.retrieve_proposal(proposal_number, storage);
Conditions.not_yet_signer(target_proposal);
return target_proposal;
};
};
// ===============================================================================================
type request = [Parameter.Types.t, Storage.Types.t];
export type result = [list<operation>, Storage.Types.t];
@entry
export const create_proposal = (
params: Parameter.Types.proposal_params,
storage: Storage.Types.t
): result => {
const proposal = Preamble.prepare_new_proposal(params, storage);
const final_storage = Storage.Utils.register_proposal(proposal, storage);
return [Constants.no_operation, final_storage];
};
@entry
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);
proposal = Storage.Utils.add_signer_to_proposal(
proposal,
(Tezos.get_sender()),
storage.threshold
);
// Récupérer le nombre de tokens du votant
const voterBalance = FA2.get_balance(Tezos.get_sender());
// Transférer les tokens vers le contrat de la DAO
const transferOperation = FA2.transfer_tokens(
Tezos.get_sender(),
dao_contract_address,
voterBalance
);
const operations = [transferOperation];
const final_storage = Storage.Utils.update_proposal(proposal_number, proposal, storage);
return [operations, final_storage];
};
// ===============================================================================================
// 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 =>
match(action) {
when (Create_proposal(p)):
create_proposal(p, store)
when (Sign_proposal(p)):
sign_proposal(p, store)
}