Skip to content

Commit

Permalink
assert check is already launched (#499)
Browse files Browse the repository at this point in the history
  • Loading branch information
MSghais authored Feb 17, 2025
1 parent 4ac0650 commit 848436f
Show file tree
Hide file tree
Showing 4 changed files with 56 additions and 7 deletions.
5 changes: 0 additions & 5 deletions onchain/cairo/launchpad/.snfoundry_cache/.prev_tests_failed
Original file line number Diff line number Diff line change
@@ -1,5 +0,0 @@
afk_launchpad::tests::launchpad_tests::launchpad_tests::test_launch_token
afk_launchpad::tests::launchpad_tests::launchpad_tests::test_set_protocol_fee_percent_non_admin
afk_launchpad::tests::liquidity_tests::liquidity_tests::test_add_liquidity_ekubo
afk_launchpad::tests::launchpad_tests::launchpad_tests::test_get_coin_amount_by_quote_amount_for_buy_steps_exp
afk_launchpad::tests::launchpad_tests::launchpad_tests::test_get_coin_amount_by_quote_amount_for_buy_steps
1 change: 1 addition & 0 deletions onchain/cairo/launchpad/src/launchpad/errors.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -46,3 +46,4 @@ pub const NO_AVAILABLE_SUPPLY: felt252 = 'No available supply';
pub const SUPPLY_ABOVE_TOTAL_OWNED: felt252 = 'Supply above total';
pub const EXTERNAL_CONTRACT_NOT_SETUP: felt252 = 'External address Zero';
pub const NOT_CLAIMABLE: felt252 = 'Not claimable';
pub const POOL_COIN_ALREADY_LAUNCHED: felt252 = 'Pool already launched';
10 changes: 8 additions & 2 deletions onchain/cairo/launchpad/src/launchpad/launchpad.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,7 @@ pub mod LaunchpadMarketplace {
// Stats
total_token: u64,
total_launch: u64,
is_coin_launched: Map::<ContractAddress, bool>,
// TODO check edge case supply for Bonding curve
// HIGH SECURITY RISK
// EDGE CASE SUPPLY AND THRESHOLD
Expand Down Expand Up @@ -1144,8 +1145,10 @@ pub mod LaunchpadMarketplace {
let caller = get_caller_address();
let token = self.token_created.read(coin_address);

// let launch_pool = self.launched_coins.read(coin_address);
// assert!(launch_pool.owner.is_zero(), errors::POOL_COIN_ALREADY_LAUNCHED);

let is_coin_launched = self.is_coin_launched.read(coin_address);
assert(!is_coin_launched, errors::POOL_COIN_ALREADY_LAUNCHED);

// TODO Add test for Paid launched token bonding curve
// Handle paid launch if enabled
// Price of the token and the address is set by the admin
Expand Down Expand Up @@ -1221,6 +1224,9 @@ pub mod LaunchpadMarketplace {
// Store launch data
self.launched_coins.entry(coin_address).write(launch_token_pump.clone());

// add bool to true when launch one time
// prevent reinit the launch pool
self.is_coin_launched.entry(coin_address).write(true);
let total_launch = self.total_launch.read();
self.total_launch.write(total_launch + 1);
self.array_launched_coins.entry(total_launch).write(launch_token_pump);
Expand Down
47 changes: 47 additions & 0 deletions onchain/cairo/launchpad/src/tests/launchpad_tests.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -1042,6 +1042,53 @@ mod launchpad_tests {
);
}

#[test]
#[should_panic]
fn multi_launch_token_panic() {
println!("multi_launch_token_panic");
let (sender_address, erc20, launchpad) = request_fixture();
// start_cheat_caller_address_global(sender_address);
start_cheat_caller_address(erc20.contract_address, sender_address);
let default_token = launchpad.get_default_token();
assert(default_token.token_address == erc20.contract_address, 'no default token');
assert(default_token.starting_price == INITIAL_KEY_PRICE, 'no init price');
start_cheat_caller_address(launchpad.contract_address, sender_address);

let token_address = launchpad
.create_token(
recipient: OWNER(),
// owner: OWNER(),
symbol: SYMBOL(),
name: NAME(),
initial_supply: DEFAULT_INITIAL_SUPPLY(),
contract_address_salt: SALT(),
is_unruggable: false,
);
// println!("test token_address {:?}", token_address);
let memecoin = IERC20Dispatcher { contract_address: token_address };
start_cheat_caller_address(memecoin.contract_address, OWNER());

let balance_contract = memecoin.balance_of(launchpad.contract_address);
println!("test balance_contract {:?}", balance_contract);

let total_supply = memecoin.total_supply();
// println!(" memecoin total_supply {:?}", total_supply);
memecoin.approve(launchpad.contract_address, total_supply);

// let allowance = memecoin.allowance(sender_address, launchpad.contract_address);
// println!("test allowance meme coin{}", allowance);
// memecoin.transfer(launchpad.contract_address, total_supply);
stop_cheat_caller_address(memecoin.contract_address);

start_cheat_caller_address(launchpad.contract_address, sender_address);

launchpad.launch_token(token_address, bonding_type: BondingType::Linear);
let amount_first_buy = 1_u256;

launchpad.launch_token(token_address, bonding_type: BondingType::Linear);
}


#[test]
#[fork("Mainnet")]
fn launchpad_integration_linear() {
Expand Down

0 comments on commit 848436f

Please sign in to comment.