From 0dafaddb8c120984de2b6e6417ecbaef8262a8ca Mon Sep 17 00:00:00 2001 From: Alex Mootz Date: Wed, 8 Nov 2023 09:20:32 -0500 Subject: [PATCH 1/2] chore: update comet --- comet.wasm | Bin 35801 -> 34381 bytes test-suites/src/setup.rs | 4 ++-- test-suites/tests/test_emitter.rs | 8 +++++++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/comet.wasm b/comet.wasm index 193b33dae0307189c60cd6d0b1ee09c84264f907..a6a1434544c1d84e89865545756c825407709e50 100644 GIT binary patch literal 34381 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 D^GUF( diff --git a/test-suites/src/setup.rs b/test-suites/src/setup.rs index 5a8e2352..e62862e2 100644 --- a/test-suites/src/setup.rs +++ b/test-suites/src/setup.rs @@ -60,9 +60,9 @@ pub fn create_fixture_with_data<'a>(wasm: bool) -> TestFixture<'a> { // mint LP tokens with whale fixture.tokens[TokenIndex::BLND].mint(&frodo, &(500_001 * SCALAR_7)); - fixture.tokens[TokenIndex::BLND].approve(&frodo, &fixture.lp.address, &i128::MAX, &99999); + // fixture.tokens[TokenIndex::BLND].approve(&frodo, &fixture.lp.address, &i128::MAX, &99999); fixture.tokens[TokenIndex::USDC].mint(&frodo, &(12_501 * SCALAR_7)); - fixture.tokens[TokenIndex::USDC].approve(&frodo, &fixture.lp.address, &i128::MAX, &99999); + // fixture.tokens[TokenIndex::USDC].approve(&frodo, &fixture.lp.address, &i128::MAX, &99999); fixture.lp.join_pool( &(50_000 * SCALAR_7), &vec![&fixture.env, 500_001 * SCALAR_7, 12_501 * SCALAR_7], diff --git a/test-suites/tests/test_emitter.rs b/test-suites/tests/test_emitter.rs index 14034cc6..2cf9c1d5 100644 --- a/test-suites/tests/test_emitter.rs +++ b/test-suites/tests/test_emitter.rs @@ -72,7 +72,13 @@ fn test_emitter() { // Mint enough tokens to a new backstop address to perform a swap, then swap the backstops let old_backstop_balance = bstop_token.balance(&fixture.backstop.address); let new_backstop = Address::random(&fixture.env); - bstop_token.mint(&new_backstop, &(old_backstop_balance + 1)); + fixture.tokens[TokenIndex::BLND].mint(&new_backstop, &(505_001 * SCALAR_7)); + fixture.tokens[TokenIndex::USDC].mint(&new_backstop, &(13_501 * SCALAR_7)); + fixture.lp.join_pool( + &(old_backstop_balance + 1), + &vec![&fixture.env, 505_001 * SCALAR_7, 13_501 * SCALAR_7], + &new_backstop, + ); fixture.emitter.swap_backstop(&new_backstop); assert_eq!(fixture.env.auths().len(), 0); assert_eq!(fixture.emitter.get_backstop(), new_backstop.clone()); From 800a4f300d26c4072d3ff609d416d767bd3f31fe Mon Sep 17 00:00:00 2001 From: Alex Mootz Date: Thu, 9 Nov 2023 08:52:33 -0500 Subject: [PATCH 2/2] feat: add set_admin function --- pool/src/contract.rs | 22 +++++++++++++++- test-suites/tests/test_pool.rs | 46 ++++++++++++++++++++++++++++------ 2 files changed, 59 insertions(+), 9 deletions(-) diff --git a/pool/src/contract.rs b/pool/src/contract.rs index e804d1c0..25b8cbc5 100644 --- a/pool/src/contract.rs +++ b/pool/src/contract.rs @@ -39,6 +39,15 @@ pub trait Pool { usdc_id: Address, ); + /// (Admin only) Set a new address as the admin of this pool + /// + /// ### Arguments + /// * `new_admin` - The new admin address + /// + /// ### Panics + /// If the caller is not the admin + fn set_admin(e: Env, new_admin: Address); + /// (Admin only) Update the pool /// /// ### Arguments @@ -46,7 +55,7 @@ pub trait Pool { /// /// ### Panics /// If the caller is not the admin - fn update_pool(e: Env, backstiop_take_rate: u64); + fn update_pool(e: Env, backstop_take_rate: u64); /// (Admin only) Initialize a reserve in the pool /// @@ -233,6 +242,17 @@ impl Pool for PoolContract { ); } + fn set_admin(e: Env, new_admin: Address) { + storage::bump_instance(&e); + let admin = storage::get_admin(&e); + admin.require_auth(); + + storage::set_admin(&e, &new_admin); + + e.events() + .publish((Symbol::new(&e, "set_admin"), admin), new_admin); + } + fn update_pool(e: Env, backstop_take_rate: u64) { storage::bump_instance(&e); let admin = storage::get_admin(&e); diff --git a/test-suites/tests/test_pool.rs b/test-suites/tests/test_pool.rs index 5f13fc6f..4a3ec7d2 100644 --- a/test-suites/tests/test_pool.rs +++ b/test-suites/tests/test_pool.rs @@ -535,7 +535,7 @@ fn test_pool_user() { /// Does not test internal state management of the lending pool, only external effects. #[test] fn test_pool_config() { - let fixture = create_fixture_with_data(true); + let fixture = create_fixture_with_data(false); let pool_fixture = &fixture.pools[0]; @@ -682,12 +682,46 @@ fn test_pool_config() { ] ); + // Set admin (admin only) + let new_admin = Address::random(&fixture.env); + pool_fixture.pool.set_admin(&new_admin); + assert_eq!( + fixture.env.auths()[0], + ( + fixture.bombadil.clone(), + AuthorizedInvocation { + function: AuthorizedFunction::Contract(( + pool_fixture.pool.address.clone(), + Symbol::new(&fixture.env, "set_admin"), + vec![&fixture.env, new_admin.to_val(),] + )), + sub_invocations: std::vec![] + } + ) + ); + let event = vec![&fixture.env, fixture.env.events().all().last_unchecked()]; + assert_eq!( + event, + vec![ + &fixture.env, + ( + pool_fixture.pool.address.clone(), + ( + Symbol::new(&fixture.env, "set_admin"), + fixture.bombadil.clone() + ) + .into_val(&fixture.env), + new_admin.into_val(&fixture.env) + ) + ] + ); + // Set status (admin only) pool_fixture.pool.set_status(&1); assert_eq!( fixture.env.auths()[0], ( - fixture.bombadil.clone(), + new_admin.clone(), AuthorizedInvocation { function: AuthorizedFunction::Contract(( pool_fixture.pool.address.clone(), @@ -707,11 +741,7 @@ fn test_pool_config() { &fixture.env, ( pool_fixture.pool.address.clone(), - ( - Symbol::new(&fixture.env, "set_status"), - fixture.bombadil.clone() - ) - .into_val(&fixture.env), + (Symbol::new(&fixture.env, "set_status"), new_admin.clone()).into_val(&fixture.env), 1u32.into_val(&fixture.env) ) ] @@ -758,7 +788,7 @@ fn test_pool_config() { assert_eq!( fixture.env.auths()[0], ( - fixture.bombadil.clone(), + new_admin.clone(), AuthorizedInvocation { function: AuthorizedFunction::Contract(( pool_fixture.pool.address.clone(),