From 48115003f8726b08fc626b66846d81c5b3381c4c Mon Sep 17 00:00:00 2001 From: Usn Zorro <> Date: Tue, 30 Aug 2022 16:22:50 +0300 Subject: [PATCH] Owner can swap Near on USN with specified overcollateralization --- src/lib.rs | 182 ++++++++++++++++++++++++++++++++-- src/oracle/mod.rs | 8 ++ src/oracle/oracle.rs | 106 ++++++++++++++++++++ src/oracle/priceoracle.rs | 59 +++++++++++ tests/price_oracle.wasm | Bin 0 -> 219031 bytes tests/sandbox-setup.js | 57 +++++++++++ tests/tests.js | 199 ++++++++++++++++++++++++++++++++++++++ 7 files changed, 605 insertions(+), 6 deletions(-) create mode 100644 src/oracle/mod.rs create mode 100644 src/oracle/oracle.rs create mode 100644 src/oracle/priceoracle.rs create mode 100644 tests/price_oracle.wasm diff --git a/src/lib.rs b/src/lib.rs index 55dafe4..5b9f851 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,6 +1,7 @@ #![deny(warnings)] mod event; mod ft; +mod oracle; mod owner; mod stable; mod staking; @@ -21,6 +22,7 @@ use near_sdk::{ assert_one_yocto, env, ext_contract, is_promise_success, near_bindgen, sys, AccountId, Balance, BorshStorageKey, Gas, PanicOnDefault, Promise, PromiseOrValue, ONE_YOCTO, }; +use oracle::{ExchangeRate, Oracle, PriceData}; use std::fmt::Debug; @@ -35,6 +37,10 @@ const NO_DEPOSIT: Balance = 0; const USN_DECIMALS: u8 = 18; const GAS_FOR_REFUND_PROMISE: Gas = Gas(5_000_000_000_000); const GAS_FOR_FT_TRANSFER: Gas = Gas(25_000_000_000_000); +const GAS_FOR_BUY_PROMISE: Gas = Gas(10_000_000_000_000); +const MIN_COLLATERAL_RATIO: u32 = 100; +const MAX_COLLATERAL_RATIO: u32 = 1000; +const PERCENT_MULTIPLIER: u128 = 100; #[derive(BorshStorageKey, BorshSerialize)] enum StorageKey { @@ -62,6 +68,14 @@ pub enum ContractStatus { Paused, } +#[derive(Serialize, Deserialize, Clone)] +#[serde(crate = "near_sdk::serde")] +pub struct ExpectedRate { + pub multiplier: U128, + pub slippage: U128, + pub decimals: u8, +} + impl std::fmt::Display for ContractStatus { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self { @@ -139,6 +153,7 @@ pub struct Contract { status: ContractStatus, commission: CommissionV1, stable_treasury: StableTreasury, + oracle: Oracle, } const DATA_IMAGE_SVG_NEAR_ICON: &str = @@ -156,16 +171,59 @@ pub trait FtApi { #[ext_contract(ext_self)] trait ContractCallback { + #[private] + fn mint_with_price_callback( + &mut self, + near: U128, + collateral_ratio: u32, + #[callback] price: PriceData, + ) -> U128; + + #[private] + fn handle_refund(&mut self, attached_deposit: U128); + #[private] fn handle_withdraw_refund(&mut self, account_id: AccountId, token_id: AccountId, amount: U128); } trait ContractCallback { + fn mint_with_price_callback( + &mut self, + near: U128, + collateral_ratio: u32, + price: PriceData, + ) -> U128; + + fn handle_refund(&mut self, attached_deposit: U128); + fn handle_withdraw_refund(&mut self, account_id: AccountId, token_id: AccountId, amount: U128); } #[near_bindgen] impl ContractCallback for Contract { + #[private] + fn mint_with_price_callback( + &mut self, + near: U128, + collateral_ratio: u32, + #[callback] price: PriceData, + ) -> U128 { + let rate: ExchangeRate = price.into(); + assert!(near.0 > 0, "Amount should be positive"); + + self.finish_mint_by_near(near.0, rate, collateral_ratio) + .into() + } + + #[private] + fn handle_refund(&mut self, attached_deposit: U128) { + if !is_promise_success() { + Promise::new(self.owner_id.clone()) + .transfer(attached_deposit.0) + .as_return(); + } + } + #[private] fn handle_withdraw_refund(&mut self, account_id: AccountId, token_id: AccountId, amount: U128) { if !is_promise_success() { @@ -204,6 +262,7 @@ impl Contract { status: ContractStatus::Working, commission: CommissionV1::default(), stable_treasury: StableTreasury::new(StorageKey::StableTreasury), + oracle: Oracle::default(), }; this @@ -322,11 +381,6 @@ impl Contract { pub smooth: ExchangeRate, } - #[derive(BorshSerialize, BorshDeserialize)] - struct Oracle { - pub last_report: Option, - } - #[derive(BorshDeserialize, BorshSerialize)] struct ExponentialSpreadParams { pub min: f64, @@ -429,6 +483,7 @@ impl Contract { &mut prev.stable_treasury, StorageKey::StableTreasury, ), + oracle: prev.oracle, } } @@ -572,6 +627,67 @@ impl FungibleTokenReceiver for Contract { #[near_bindgen] impl Contract { + // Owner only + #[payable] + pub fn mint_by_near(&mut self, collateral_ratio: u32) { + self.assert_owner(); + self.abort_if_pause(); + assert!( + collateral_ratio >= MIN_COLLATERAL_RATIO && collateral_ratio <= MAX_COLLATERAL_RATIO, + "Collateral ratio is out of bounds" + ); + + let near = env::attached_deposit(); + + Oracle::get_exchange_rate_promise() + .then(ext_self::mint_with_price_callback( + near.into(), + collateral_ratio, + env::current_account_id(), + NO_DEPOSIT, + GAS_FOR_BUY_PROMISE, + )) + // Returning callback promise, so the transaction will return the value or a failure. + // But the refund will still happen. + .as_return() + .then(ext_self::handle_refund( + near.into(), + env::current_account_id(), + NO_DEPOSIT, + GAS_FOR_REFUND_PROMISE, + )); + } + + fn finish_mint_by_near( + &mut self, + near: Balance, + rate: ExchangeRate, + collateral_ratio: u32, + ) -> Balance { + let near = U256::from(near); + let multiplier = U256::from(rate.multiplier()); + let collateral_ratio = U256::from(collateral_ratio); + + // Make exchange: NEAR -> USN + let amount = near * multiplier / 10u128.pow(u32::from(rate.decimals() - USN_DECIMALS)); + + // Apply collateral rate + let amount = amount * U256::from(PERCENT_MULTIPLIER) / collateral_ratio; + + // Expected result (128-bit) can have 20 digits before and 18 after the decimal point. + // We don't expect more than 10^20 tokens on a single account. It panics if overflows. + let amount = amount.as_u128(); + + if amount == 0 { + env::panic_str("Not enough NEAR: attached deposit exchanges to 0 tokens"); + } + + self.token.internal_deposit(&self.owner_id, amount); + event::emit::ft_mint(&self.owner_id, amount, None); + + amount + } + #[payable] pub fn withdraw(&mut self, asset_id: Option, amount: U128) -> Promise { let account_id = env::predecessor_account_id(); @@ -695,7 +811,7 @@ impl Contract { #[cfg(all(test, not(target_arch = "wasm32")))] mod tests { use near_sdk::test_utils::{accounts, VMContextBuilder}; - use near_sdk::{testing_env, Balance, ONE_YOCTO}; + use near_sdk::{testing_env, Balance, ONE_NEAR, ONE_YOCTO}; use super::*; @@ -922,6 +1038,60 @@ mod tests { contract.withdraw(None, U128(999900000000000000000)); } + #[test] + #[should_panic(expected = "This method can be called only by owner")] + fn test_buy_not_owner() { + let mut context = get_context(accounts(1)); + testing_env!(context.build()); + + let mut contract = Contract::new(accounts(1)); + + testing_env!(context + .predecessor_account_id(accounts(2)) + .attached_deposit(ONE_NEAR) + .build()); + contract.mint_by_near(100); + } + + #[test] + #[should_panic] + fn test_buy_low_collateral_rate() { + let mut context = get_context(accounts(1)); + testing_env!(context.build()); + + let mut contract = Contract::new(accounts(1)); + + testing_env!(context.attached_deposit(ONE_NEAR).build()); + contract.mint_by_near(MIN_COLLATERAL_RATIO - 1); + } + + #[test] + #[should_panic] + fn test_buy_exceeded_collateral_rate() { + let mut context = get_context(accounts(1)); + testing_env!(context.build()); + + let mut contract = Contract::new(accounts(1)); + + testing_env!(context.attached_deposit(ONE_NEAR).build()); + contract.mint_by_near(MAX_COLLATERAL_RATIO + 1); + } + + #[test] + fn test_owner_buy() { + let context = get_context(accounts(1)); + testing_env!(context.build()); + + let mut contract = Contract::new(accounts(1)); + + let fresh_rate = ExchangeRate::test_fresh_rate(); + + assert_eq!( + contract.finish_mint_by_near(1_000_000_000_000 * ONE_NEAR, fresh_rate.clone(), 100), + 11143900000000_000000000000000000 + ); + } + #[test] fn test_view_commission() { let context = get_context(accounts(1)); diff --git a/src/oracle/mod.rs b/src/oracle/mod.rs new file mode 100644 index 0000000..fe4c87b --- /dev/null +++ b/src/oracle/mod.rs @@ -0,0 +1,8 @@ +mod oracle; +mod priceoracle; + +pub use oracle::*; + +// Exposing original priceoracle DTO allows to decrease +// gas consumption from 25 to 19 TGas (~24%). +pub use priceoracle::PriceData; diff --git a/src/oracle/oracle.rs b/src/oracle/oracle.rs new file mode 100644 index 0000000..6b4b27d --- /dev/null +++ b/src/oracle/oracle.rs @@ -0,0 +1,106 @@ +use near_sdk::Timestamp; + +use crate::oracle::priceoracle::{ext_priceoracle, PriceData}; +use crate::*; + +struct OracleConfig { + oracle_address: &'static str, + asset_id: &'static str, + gas: Gas, +} + +const CONFIG: OracleConfig = if cfg!(feature = "mainnet") { + OracleConfig { + oracle_address: "priceoracle.near", + asset_id: "wrap.near", // NEARUSDT + gas: Gas(5_000_000_000_000), + } +} else if cfg!(feature = "testnet") { + OracleConfig { + oracle_address: "priceoracle.testnet", + asset_id: "wrap.testnet", // NEARUSDT + gas: Gas(5_000_000_000_000), + } +} else { + OracleConfig { + oracle_address: "priceoracle.test.near", + asset_id: "wrap.test.near", + gas: Gas(5_000_000_000_000), + } +}; + +#[derive(BorshSerialize, BorshDeserialize, Serialize, Deserialize, Clone)] +#[serde(crate = "near_sdk::serde")] +pub struct ExchangeRate { + multiplier: u128, + decimals: u8, + timestamp: Timestamp, + recency_duration: Timestamp, +} + +impl ExchangeRate { + pub fn multiplier(&self) -> u128 { + self.multiplier + } + + pub fn decimals(&self) -> u8 { + self.decimals + } + + pub fn timestamp(&self) -> Timestamp { + self.timestamp + } +} + +#[derive(BorshSerialize, BorshDeserialize)] +pub struct Oracle { + pub last_report: Option, +} + +impl Default for Oracle { + fn default() -> Self { + Self { last_report: None } + } +} + +impl Oracle { + pub fn get_exchange_rate_promise() -> Promise { + ext_priceoracle::get_price_data( + vec![CONFIG.asset_id.into()], + CONFIG.oracle_address.parse().unwrap(), + 0, + CONFIG.gas, + ) + } +} + +impl From for ExchangeRate { + fn from(price_data: PriceData) -> Self { + let price = price_data.price(&CONFIG.asset_id.into()); + + if env::block_timestamp() >= price_data.timestamp() + price_data.recency_duration() { + env::panic_str("Oracle provided an outdated price data"); + } + + let exchange_rate = ExchangeRate { + multiplier: price.multiplier.into(), + decimals: price.decimals, + timestamp: price_data.timestamp(), + recency_duration: price_data.recency_duration(), + }; + + exchange_rate + } +} + +#[cfg(test)] +impl ExchangeRate { + pub fn test_fresh_rate() -> Self { + Self { + multiplier: 111439, + decimals: 28, + timestamp: env::block_timestamp(), + recency_duration: env::block_timestamp() + 1000000000, + } + } +} diff --git a/src/oracle/priceoracle.rs b/src/oracle/priceoracle.rs new file mode 100644 index 0000000..fccd5a1 --- /dev/null +++ b/src/oracle/priceoracle.rs @@ -0,0 +1,59 @@ +//! Interface to `priceoracle.near`. + +use near_sdk::{ext_contract, json_types::U64, Timestamp}; + +use crate::*; + +// From https://github.com/NearDeFi/price-oracle/blob/main/src/*.rs +type AssetId = String; +type DurationSec = u32; + +// From https://github.com/NearDeFi/price-oracle/blob/main/src/utils.rs +#[derive(BorshSerialize, BorshDeserialize, Deserialize, Clone, Copy)] +#[serde(crate = "near_sdk::serde")] +pub struct Price { + pub multiplier: U128, + pub decimals: u8, +} + +// From https://github.com/NearDeFi/price-oracle/blob/main/src/asset.rs +#[derive(BorshSerialize, BorshDeserialize, Deserialize)] +#[serde(crate = "near_sdk::serde")] +pub struct AssetOptionalPrice { + pub asset_id: AssetId, + pub price: Option, +} + +// From https://github.com/NearDeFi/price-oracle/blob/main/src/lib.rs +#[derive(BorshSerialize, BorshDeserialize, Deserialize)] +#[serde(crate = "near_sdk::serde")] +pub struct PriceData { + timestamp: U64, + recency_duration_sec: DurationSec, + prices: Vec, +} + +impl PriceData { + pub fn timestamp(&self) -> Timestamp { + Timestamp::from(self.timestamp) + } + + pub fn recency_duration(&self) -> Timestamp { + Timestamp::from(self.recency_duration_sec) * 10u64.pow(9) + } + + pub fn price(&self, asset: &AssetId) -> Price { + let asset_error = format!("Oracle has NOT provided an exchange rate for {}", asset); + self.prices + .iter() + .find(|aop| &aop.asset_id == asset) + .expect(&asset_error) + .price + .expect(&asset_error) + } +} + +#[ext_contract(ext_priceoracle)] +pub trait PriceOracle { + fn get_price_data(&self, asset_ids: Vec) -> PriceData; +} diff --git a/tests/price_oracle.wasm b/tests/price_oracle.wasm new file mode 100644 index 0000000000000000000000000000000000000000..6c54b351c26b333bd9c8e3a3954b5b1c14ac7c03 GIT binary patch literal 219031 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�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�zKO_x2Ra-z|Z3i z@QxI@Qh$FLUlD&6#B(Dd;WUyjNH+cRK}cdU!!Z*dHUgGPBT(Qw9`jH{dNQ*8;`5Kx{|m?0BeMVi literal 0 HcmV?d00001 diff --git a/tests/sandbox-setup.js b/tests/sandbox-setup.js index 3eca7e9..b17b446 100644 --- a/tests/sandbox-setup.js +++ b/tests/sandbox-setup.js @@ -18,6 +18,8 @@ const config = { usdcPath: './tests/test_token.wasm', refPath: './tests/ref_exchange.wasm', poolPath: './tests/staking_pool.wasm', + priceoraclePath: './tests/price_oracle.wasm', + priceoracleMultiplier: '111439', amount: new BN('300000000000000000000000000', 10), // 26 digits, 300 NEAR masterId: 'test.near', usnId: 'usn.test.near', @@ -25,6 +27,7 @@ const config = { usdcId: 'usdc.test.near', refId: 'ref.test.near', poolId: 'pool.test.near', + oracleId: 'priceoracle.test.near', aliceId: 'alice.test.near', carolId: 'carol.test.near', }; @@ -69,6 +72,7 @@ const usnMethods = { 'withdraw_all', 'transfer_commission', 'add_stable_asset', + 'mint_by_near', ], }; @@ -99,6 +103,16 @@ const poolMethods = { ], }; +const oracleMethods = { + changeMethods: [ + 'new', + 'add_asset', + 'add_asset_ema', + 'add_oracle', + 'report_prices', + ], +}; + async function sandboxSetup() { portUsed.check(config.port, config.domain).then( (inUse) => { @@ -137,6 +151,7 @@ async function sandboxSetup() { await masterAccount.createAccount(config.usdcId, pubKey, config.amount); await masterAccount.createAccount(config.refId, pubKey, config.amount); await masterAccount.createAccount(config.poolId, pubKey, config.amount); + await masterAccount.createAccount(config.oracleId, pubKey, config.amount); await masterAccount.createAccount(config.aliceId, pubKey, config.amount); await masterAccount.createAccount(config.carolId, pubKey, config.amount); keyStore.setKey(config.networkId, config.usnId, privKey); @@ -144,6 +159,7 @@ async function sandboxSetup() { keyStore.setKey(config.networkId, config.usdcId, privKey); keyStore.setKey(config.networkId, config.refId, privKey); keyStore.setKey(config.networkId, config.poolId, privKey); + keyStore.setKey(config.networkId, config.oracleId, privKey); keyStore.setKey(config.networkId, config.aliceId, privKey); keyStore.setKey(config.networkId, config.carolId, privKey); @@ -273,6 +289,47 @@ async function sandboxSetup() { amount: '1', }); + // Deploy the priceoracle contract. + const wasmPriceoracle = await fs.readFile(config.priceoraclePath); + const oracleAccount = new nearAPI.Account(near.connection, config.oracleId); + await oracleAccount.deployContract(wasmPriceoracle); + + // Initialize the Oracle contract. + const oracleContract = new nearAPI.Contract( + oracleAccount, + config.oracleId, + oracleMethods + ); + await oracleContract.new({ + args: { + recency_duration_sec: 360, + owner_id: config.oracleId, + near_claim_amount: '0', + }, + }); + await oracleContract.add_oracle({ + args: { account_id: config.oracleId }, + amount: '1', + }); + await oracleContract.add_asset({ + args: { asset_id: 'wrap.test.near' }, + amount: '1', + }); + await oracleContract.add_asset_ema({ + args: { asset_id: 'wrap.test.near', period_sec: 3600 }, + amount: '1', + }); + await oracleContract.report_prices({ + args: { + prices: [ + { + asset_id: 'wrap.test.near', + price: { multiplier: config.priceoracleMultiplier, decimals: 28 }, + }, + ], + }, + }); + // Initialize other accounts connected to the contract for all test cases. const aliceAccount = new nearAPI.Account(near.connection, config.aliceId); const aliceContract = new nearAPI.Contract( diff --git a/tests/tests.js b/tests/tests.js index 2de93f7..17c614e 100644 --- a/tests/tests.js +++ b/tests/tests.js @@ -7,6 +7,7 @@ const BN = require('bn.js'); const ONE_YOCTO = '1'; const GAS_FOR_CALL = '200000000000000'; // 200 TGas const ONE_NEAR = '1000000000000000000000000'; +const TEN_NEARS = '10000000000000000000000000'; describe('Smoke Test', function () { it('should get a version', async () => { @@ -256,6 +257,204 @@ describe('Guardian', function () { }); }); +describe('Owner', function () { + this.timeout(15000); + + before(async () => { + await global.usnContract.propose_new_owner({ + args: { proposed_owner_id: config.aliceId }, + }); + assert.equal(await global.usnContract.owner(), config.usnId); + + await global.aliceContract.accept_ownership({ + args: {}, + }); + assert.equal(await global.usnContract.owner(), config.aliceId); + }); + + + it('should fail to buy USN being called not by owner', async () => { + await assert.rejects( + async () => { + await global.usnContract.mint_by_near({ + args: { + collateral_ratio: 100, + } + }); + }, + (err) => { + assert.match(err.message, /This method can be called only by owner/); + return true; + } + ); + }); + + it('should fail to buy USN being due to low collateral ratio', async () => { + await assert.rejects( + async () => { + await global.aliceContract.mint_by_near({ + args: { + collateral_ratio: 99, + } + }); + }, + (err) => { + assert.match(err.message, /Collateral ratio is out of bounds/); + return true; + } + ); + }); + + it('should fail to buy USN being due to exceeded collateral ratio', async () => { + await assert.rejects( + async () => { + await global.aliceContract.mint_by_near({ + args: { + collateral_ratio: 1001, + } + }); + }, + (err) => { + assert.match(err.message, /Collateral ratio is out of bounds/); + return true; + } + ); + }); + + it('should be able to mint USN for NEAR with 100% collateralization', async () => { + const nearOwnerBalanceBefore = await global.aliceAccount.state(); + const nearUsnBalanceBefore = await global.usnAccount.state(); + const usnBalanceBefore = await global.aliceContract.ft_balance_of({ + account_id: config.aliceId, + }); + + await global.aliceContract.mint_by_near({ + args: { + collateral_ratio: 100, + }, + amount: TEN_NEARS, + gas: GAS_FOR_CALL, + }); + + const nearOwnerBalanceAfter = await global.aliceAccount.state(); + const nearUsnBalanceAfter = await global.usnAccount.state(); + const usnBalanceAfter = await global.aliceContract.ft_balance_of({ + account_id: config.aliceId, + }); + + assert(new BN(nearUsnBalanceAfter.amount) + .sub(new BN(nearUsnBalanceBefore.amount)) + .gt(new BN(TEN_NEARS)) + ); + assert(new BN(nearOwnerBalanceBefore.amount) + .sub(new BN(nearOwnerBalanceAfter.amount)) + .gt(new BN(TEN_NEARS)) + ); + assert.equal(new BN(usnBalanceAfter) + .sub(new BN(usnBalanceBefore)).toString(), + '111439000000000000000' // 111.43$ + ); + }); + + it('should be able to mint USN for NEAR with 210% collateralization', async () => { + const nearOwnerBalanceBefore = await global.aliceAccount.state(); + const nearUsnBalanceBefore = await global.usnAccount.state(); + const usnBalanceBefore = await global.aliceContract.ft_balance_of({ + account_id: config.aliceId, + }); + + await global.aliceContract.mint_by_near({ + args: { + collateral_ratio: 210, + }, + amount: TEN_NEARS, + gas: GAS_FOR_CALL, + }); + + const nearOwnerBalanceAfter = await global.aliceAccount.state(); + const nearUsnBalanceAfter = await global.usnAccount.state(); + const usnBalanceAfter = await global.aliceContract.ft_balance_of({ + account_id: config.aliceId, + }); + + assert(new BN(nearUsnBalanceAfter.amount) + .sub(new BN(nearUsnBalanceBefore.amount)) + .gt(new BN(TEN_NEARS)) + ); + assert(new BN(nearOwnerBalanceBefore.amount) + .sub(new BN(nearOwnerBalanceAfter.amount)) + .gt(new BN(TEN_NEARS)) + ); + assert.equal(new BN(usnBalanceAfter) + .sub(new BN(usnBalanceBefore)).toString(), + '53066190476190476190' // 53.06$ + ); + }); + + it('should be able to mint USN for NEAR with 1000% collateralization', async () => { + const nearOwnerBalanceBefore = await global.aliceAccount.state(); + const nearUsnBalanceBefore = await global.usnAccount.state(); + const usnBalanceBefore = await global.aliceContract.ft_balance_of({ + account_id: config.aliceId, + }); + + await global.aliceContract.mint_by_near({ + args: { + collateral_ratio: 1000, + }, + amount: TEN_NEARS, + gas: GAS_FOR_CALL, + }); + + const nearOwnerBalanceAfter = await global.aliceAccount.state(); + const nearUsnBalanceAfter = await global.usnAccount.state(); + const usnBalanceAfter = await global.aliceContract.ft_balance_of({ + account_id: config.aliceId, + }); + + assert(new BN(nearUsnBalanceAfter.amount) + .sub(new BN(nearUsnBalanceBefore.amount)) + .gt(new BN(TEN_NEARS)) + ); + assert(new BN(nearOwnerBalanceBefore.amount) + .sub(new BN(nearOwnerBalanceAfter.amount)) + .gt(new BN(TEN_NEARS)) + ); + assert.equal(new BN(usnBalanceAfter) + .sub(new BN(usnBalanceBefore)).toString(), + '11143900000000000000' // 11.14$ + ); + }); + + after(async () => { + const aliceBalance = await global.aliceContract.ft_balance_of({ + account_id: config.aliceId, + }); + + // Flush balances and force registration removal. + + if (aliceBalance != '0') { + await global.aliceContract.ft_transfer({ + args: { + receiver_id: 'any', + amount: aliceBalance, + }, + amount: ONE_YOCTO, + }); + } + + await global.aliceContract.propose_new_owner({ + args: { proposed_owner_id: config.usnId }, + }); + assert.equal(await global.usnContract.owner(), config.aliceId); + + await global.usnContract.accept_ownership({ + args: {}, + }); + assert.equal(await global.usnContract.owner(), config.usnId); + }); +}); + describe('User', async function () { this.timeout(15000);