Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Updated claim ticket payment logic #69

Merged
merged 2 commits into from
Feb 17, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions launchpad-common/src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,10 @@ pub trait ConfigModule {
#[storage_mapper("nrWinningTickets")]
fn nr_winning_tickets(&self) -> SingleValueMapper<usize>;

#[view(getTotalLaunchpadTokensDeposited)]
#[storage_mapper("totalLaunchpadTokensDeposited")]
fn total_launchpad_tokens_deposited(&self) -> SingleValueMapper<BigUint>;

#[storage_mapper("launchpadTokensDeposited")]
fn launchpad_tokens_deposited(&self) -> SingleValueMapper<bool>;

Expand Down
1 change: 1 addition & 0 deletions launchpad-common/src/setup.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ pub trait SetupModule:
require!(payment_amount == amount_needed, "Wrong amount");

self.launchpad_tokens_deposited().set(true);
self.total_launchpad_tokens_deposited().set(payment_amount);
}

#[only_owner]
Expand Down
33 changes: 31 additions & 2 deletions launchpad-guaranteed-tickets/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
multiversx_sc::imports!();
multiversx_sc::derive_imports!();

use launchpad_common::{launch_stage::Flags, tickets::WINNING_TICKET};
use launchpad_common::{config::TokenAmountPair, launch_stage::Flags, tickets::WINNING_TICKET};

use crate::guranteed_ticket_winners::GuaranteedTicketsSelectionOperation;

Expand Down Expand Up @@ -212,7 +212,36 @@ pub trait LaunchpadGuaranteedTickets:
#[only_owner]
#[endpoint(claimTicketPayment)]
fn claim_ticket_payment_endpoint(&self) {
self.claim_ticket_payment();
self.require_claim_period();

let owner = self.blockchain().get_caller();

let ticket_price: TokenAmountPair<Self::Api> = self.ticket_price().get();
let ticket_payment_mapper = self.claimable_ticket_payment();
let claimable_ticket_payment = ticket_payment_mapper.get();
if claimable_ticket_payment > 0 {
ticket_payment_mapper.clear();

self.send()
.direct(&owner, &ticket_price.token_id, 0, &claimable_ticket_payment);
}

let total_launchpad_tokens_deposited = self.total_launchpad_tokens_deposited().get();
let amount_per_ticket = self.launchpad_tokens_per_winning_ticket().get();
let total_nr_winning_tickets = claimable_ticket_payment / ticket_price.amount;

let total_launchpad_tokens_won = total_nr_winning_tickets * amount_per_ticket;

if total_launchpad_tokens_won >= total_launchpad_tokens_deposited {
return;
}

let launchpad_token_id = self.launchpad_token_id().get();
let extra_launchpad_tokens = total_launchpad_tokens_deposited - total_launchpad_tokens_won;
if extra_launchpad_tokens > 0 {
self.send()
.direct_esdt(&owner, &launchpad_token_id, 0, &extra_launchpad_tokens);
}
}

#[view(getUserTicketsStatus)]
Expand Down
14 changes: 10 additions & 4 deletions launchpad-guaranteed-tickets/src/token_release.rs
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ pub trait TokenReleaseModule: config::ConfigModule {
"Wrong claim start round"
);
require!(
vesting_release_period > 0,
vesting_release_period > 0 || initial_release_percentage == MAX_PERCENTAGE,
"Wrong vesting release recurrency"
);

Expand All @@ -89,9 +89,11 @@ pub trait TokenReleaseModule: config::ConfigModule {
fn compute_claimable_tokens(&self, address: &ManagedAddress) -> BigUint {
let user_total_claimable_balance = self.user_total_claimable_balance(address).get();
let user_claimed_balance = self.user_claimed_balance(address).get();
if user_total_claimable_balance == user_claimed_balance {
return BigUint::zero();
}
require!(
user_claimed_balance < user_total_claimable_balance,
"Already claimed all tokens"
);

let unlock_schedule_mapper = self.unlock_schedule();
if unlock_schedule_mapper.is_empty() {
return BigUint::zero();
Expand All @@ -102,6 +104,10 @@ pub trait TokenReleaseModule: config::ConfigModule {
return BigUint::zero();
}

if unlock_schedule.initial_release_percentage == MAX_PERCENTAGE {
return user_total_claimable_balance;
}

let rounds_passed = current_round - unlock_schedule.claim_start_round;
let mut claimable_periods = rounds_passed / unlock_schedule.vesting_release_period;
if claimable_periods > unlock_schedule.vesting_release_times {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ use launchpad_common::{
user_interactions::UserInteractionsModule,
winner_selection::WinnerSelectionModule,
};
use launchpad_guaranteed_tickets::token_release::TokenReleaseModule;
use launchpad_guaranteed_tickets::{
guaranteed_tickets_init::GuaranteedTicketsInitModule, LaunchpadGuaranteedTickets,
};
Expand Down Expand Up @@ -201,8 +202,32 @@ where
&self.lp_wrapper,
&rust_biguint!(0),
|sc| {
sc.claim_ticket_payment();
sc.claim_ticket_payment_endpoint();
},
)
}

pub fn set_unlock_schedule(
&mut self,
claim_start_round: u64,
initial_release_percentage: u64,
vesting_release_times: u64,
vesting_release_percentage: u64,
vesting_release_period: u64,
) {
let _ = self.b_mock.execute_tx(
&self.owner_address,
&self.lp_wrapper,
&rust_biguint!(0),
|sc| {
sc.set_unlock_schedule(
claim_start_round,
initial_release_percentage,
vesting_release_times,
vesting_release_percentage,
vesting_release_period,
);
},
);
}
}
Loading
Loading