From 684e374d6dbe74ee002c5f764b541323469d5170 Mon Sep 17 00:00:00 2001 From: ALPAC-4 Date: Thu, 7 Mar 2024 15:33:45 +0900 Subject: [PATCH] feat: add pair metadata --- precompile/binaries/minlib/dex.mv | Bin 10701 -> 10866 bytes precompile/binaries/stdlib/dex.mv | Bin 10701 -> 10866 bytes .../modules/initia_stdlib/sources/dex.move | 55 ++++++++++++------ .../modules/minitia_stdlib/sources/dex.move | 55 ++++++++++++------ 4 files changed, 74 insertions(+), 36 deletions(-) diff --git a/precompile/binaries/minlib/dex.mv b/precompile/binaries/minlib/dex.mv index 2b02537a40ef576b29c98027c1b65e27516b394b..23faf03113255c56131bae69cbcab8dd7bab07d2 100644 GIT binary patch delta 4792 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, + coin_b_metadata: Object, + } + #[event] struct CreatePairEvent has drop, store { coin_a: address, @@ -198,25 +203,17 @@ module initia_std::dex { const MAX_FEE_RATE: u128 = 50_000_000_000_000_000; // 5% #[view] - public fun pool_info(pair: Object, lbp_assertion: bool): (u64, u64, Decimal128, Decimal128, Decimal128) acquires Config, Pool { - let pair_addr = object::object_address(pair); - let config = borrow_global(pair_addr); - if (lbp_assertion) { - // assert LBP start time - let (_, timestamp) = get_block_info(); - assert!(timestamp >= config.weights.weights_before.timestamp, error::invalid_state(ELBP_NOT_STARTED)); - }; - - let pool = borrow_global(pair_addr); - let (coin_a_weight, coin_b_weight) = get_weight(&config.weights); + public fun get_pair_metadata( + pair: Object, + ): PairMetadataResponse acquires Pool { + let pool = borrow_global_mut(object::object_address(pair)); + let coin_a_metadata = fungible_asset::store_metadata(pool.coin_a_store); + let coin_b_metadata = fungible_asset::store_metadata(pool.coin_b_store); - ( - fungible_asset::balance(pool.coin_a_store), - fungible_asset::balance(pool.coin_b_store), - coin_a_weight, - coin_b_weight, - config.swap_fee_rate, - ) + PairMetadataResponse { + coin_a_metadata, + coin_b_metadata, + } } #[view] @@ -1186,6 +1183,28 @@ module initia_std::dex { } } + /// get all pool info at once (a_amount, b_amount, a_weight, b_weight, fee_rate) + public fun pool_info(pair: Object, lbp_assertion: bool): (u64, u64, Decimal128, Decimal128, Decimal128) acquires Config, Pool { + let pair_addr = object::object_address(pair); + let config = borrow_global(pair_addr); + if (lbp_assertion) { + // assert LBP start time + let (_, timestamp) = get_block_info(); + assert!(timestamp >= config.weights.weights_before.timestamp, error::invalid_state(ELBP_NOT_STARTED)); + }; + + let pool = borrow_global(pair_addr); + let (coin_a_weight, coin_b_weight) = get_weight(&config.weights); + + ( + fungible_asset::balance(pool.coin_a_store), + fungible_asset::balance(pool.coin_b_store), + coin_a_weight, + coin_b_weight, + config.swap_fee_rate, + ) + } + /// Calculate out amount /// https://balancer.fi/whitepaper.pdf (15) /// return (return_amount, fee_amount) diff --git a/precompile/modules/minitia_stdlib/sources/dex.move b/precompile/modules/minitia_stdlib/sources/dex.move index ea0cf44c..412a2b7f 100644 --- a/precompile/modules/minitia_stdlib/sources/dex.move +++ b/precompile/modules/minitia_stdlib/sources/dex.move @@ -119,6 +119,11 @@ module minitia_std::dex { coin_b_weight: Decimal128, } + struct PairMetadataResponse has drop { + coin_a_metadata: Object, + coin_b_metadata: Object, + } + #[event] struct CreatePairEvent has drop, store { coin_a: address, @@ -198,25 +203,17 @@ module minitia_std::dex { const MAX_FEE_RATE: u128 = 50_000_000_000_000_000; // 5% #[view] - public fun pool_info(pair: Object, lbp_assertion: bool): (u64, u64, Decimal128, Decimal128, Decimal128) acquires Config, Pool { - let pair_addr = object::object_address(pair); - let config = borrow_global(pair_addr); - if (lbp_assertion) { - // assert LBP start time - let (_, timestamp) = get_block_info(); - assert!(timestamp >= config.weights.weights_before.timestamp, error::invalid_state(ELBP_NOT_STARTED)); - }; - - let pool = borrow_global(pair_addr); - let (coin_a_weight, coin_b_weight) = get_weight(&config.weights); + public fun get_pair_metadata( + pair: Object, + ): PairMetadataResponse acquires Pool { + let pool = borrow_global_mut(object::object_address(pair)); + let coin_a_metadata = fungible_asset::store_metadata(pool.coin_a_store); + let coin_b_metadata = fungible_asset::store_metadata(pool.coin_b_store); - ( - fungible_asset::balance(pool.coin_a_store), - fungible_asset::balance(pool.coin_b_store), - coin_a_weight, - coin_b_weight, - config.swap_fee_rate, - ) + PairMetadataResponse { + coin_a_metadata, + coin_b_metadata, + } } #[view] @@ -1186,6 +1183,28 @@ module minitia_std::dex { } } + /// get all pool info at once (a_amount, b_amount, a_weight, b_weight, fee_rate) + public fun pool_info(pair: Object, lbp_assertion: bool): (u64, u64, Decimal128, Decimal128, Decimal128) acquires Config, Pool { + let pair_addr = object::object_address(pair); + let config = borrow_global(pair_addr); + if (lbp_assertion) { + // assert LBP start time + let (_, timestamp) = get_block_info(); + assert!(timestamp >= config.weights.weights_before.timestamp, error::invalid_state(ELBP_NOT_STARTED)); + }; + + let pool = borrow_global(pair_addr); + let (coin_a_weight, coin_b_weight) = get_weight(&config.weights); + + ( + fungible_asset::balance(pool.coin_a_store), + fungible_asset::balance(pool.coin_b_store), + coin_a_weight, + coin_b_weight, + config.swap_fee_rate, + ) + } + /// Calculate out amount /// https://balancer.fi/whitepaper.pdf (15) /// return (return_amount, fee_amount)