From 816c05791a2093eb5b0cce1611dd9cee6fa27d6d Mon Sep 17 00:00:00 2001 From: tserg <8017125+tserg@users.noreply.github.com> Date: Tue, 2 Apr 2024 17:23:15 +0800 Subject: [PATCH 01/20] add sketch --- src/core/shrine.cairo | 80 +++++++++--------- src/interfaces/IShrine.cairo | 2 + src/lib.cairo | 5 ++ src/periphery/interfaces.cairo | 10 +++ src/periphery/trove_data_provider.cairo | 105 ++++++++++++++++++++++++ 5 files changed, 162 insertions(+), 40 deletions(-) create mode 100644 src/periphery/interfaces.cairo create mode 100644 src/periphery/trove_data_provider.cairo diff --git a/src/core/shrine.cairo b/src/core/shrine.cairo index dcdd14875..5fe09459b 100644 --- a/src/core/shrine.cairo +++ b/src/core/shrine.cairo @@ -522,6 +522,46 @@ pub mod shrine { self.deposits.read((yang_id, trove_id)) } + // Returns an ordered array of the `YangBalance` struct for a trove's deposits. + // Starts from yang ID 1. + // Note that zero values are added to the return array because downstream + // computation assumes the full array of yangs. + fn get_trove_deposits(self: @ContractState, trove_id: u64) -> Span { + let mut yang_balances: Array = ArrayTrait::new(); + + let mut current_yang_id: u32 = START_YANG_IDX; + let loop_end: u32 = self.yangs_count.read() + START_YANG_IDX; + loop { + if current_yang_id == loop_end { + break yang_balances.span(); + } + + let deposited: Wad = self.deposits.read((current_yang_id, trove_id)); + yang_balances.append(YangBalance { yang_id: current_yang_id, amount: deposited }); + + current_yang_id += 1; + } + } + + // Returns an ordered array of the `YangBalance` struct for the total deposited yangs in the Shrine. + // Starts from yang ID 1. + fn get_shrine_deposits(self: @ContractState) -> Span { + let mut yang_balances: Array = ArrayTrait::new(); + + let mut current_yang_id: u32 = START_YANG_IDX; + let loop_end: u32 = self.yangs_count.read() + START_YANG_IDX; + loop { + if current_yang_id == loop_end { + break yang_balances.span(); + } + + let yang_total: Wad = self.yang_total.read(current_yang_id); + yang_balances.append(YangBalance { yang_id: current_yang_id, amount: yang_total }); + + current_yang_id += 1; + } + } + fn get_budget(self: @ContractState) -> SignedWad { self.budget.read() } @@ -1394,46 +1434,6 @@ pub mod shrine { } } - // Returns an ordered array of the `YangBalance` struct for a trove's deposits. - // Starts from yang ID 1. - // Note that zero values are added to the return array because downstream - // computation assumes the full array of yangs. - fn get_trove_deposits(self: @ContractState, trove_id: u64) -> Span { - let mut yang_balances: Array = ArrayTrait::new(); - - let mut current_yang_id: u32 = START_YANG_IDX; - let loop_end: u32 = self.yangs_count.read() + START_YANG_IDX; - loop { - if current_yang_id == loop_end { - break yang_balances.span(); - } - - let deposited: Wad = self.deposits.read((current_yang_id, trove_id)); - yang_balances.append(YangBalance { yang_id: current_yang_id, amount: deposited }); - - current_yang_id += 1; - } - } - - // Returns an ordered array of the `YangBalance` struct for the total deposited yangs in the Shrine. - // Starts from yang ID 1. - fn get_shrine_deposits(self: @ContractState) -> Span { - let mut yang_balances: Array = ArrayTrait::new(); - - let mut current_yang_id: u32 = START_YANG_IDX; - let loop_end: u32 = self.yangs_count.read() + START_YANG_IDX; - loop { - if current_yang_id == loop_end { - break yang_balances.span(); - } - - let yang_total: Wad = self.yang_total.read(current_yang_id); - yang_balances.append(YangBalance { yang_id: current_yang_id, amount: yang_total }); - - current_yang_id += 1; - } - } - // Returns a tuple of: // 1. the custom threshold (maximum LTV before liquidation) // 2. the total value of the yangs, at a given interval diff --git a/src/interfaces/IShrine.cairo b/src/interfaces/IShrine.cairo index 665ac407c..908bdb29d 100644 --- a/src/interfaces/IShrine.cairo +++ b/src/interfaces/IShrine.cairo @@ -13,6 +13,8 @@ pub trait IShrine { fn get_protocol_owned_troves_debt(self: @TContractState) -> Wad; fn get_yangs_count(self: @TContractState) -> u32; fn get_deposit(self: @TContractState, yang: ContractAddress, trove_id: u64) -> Wad; + fn get_trove_deposits(self: @TContractState, trove_id: u64) -> Span; + fn get_shrine_deposits(self: @TContractState) -> Span; fn get_budget(self: @TContractState) -> SignedWad; fn get_yang_price(self: @TContractState, yang: ContractAddress, interval: u64) -> (Wad, Wad); fn get_yang_rate(self: @TContractState, yang: ContractAddress, rate_era: u64) -> Ray; diff --git a/src/lib.cairo b/src/lib.cairo index 9d82f194c..04348a67d 100644 --- a/src/lib.cairo +++ b/src/lib.cairo @@ -54,6 +54,11 @@ mod utils { pub mod reentrancy_guard; } +mod periphery { + pub mod interfaces; + pub mod trove_data_provider; +} + // mock used for local devnet deployment mod mock { pub mod blesser; diff --git a/src/periphery/interfaces.cairo b/src/periphery/interfaces.cairo new file mode 100644 index 000000000..b1e378b99 --- /dev/null +++ b/src/periphery/interfaces.cairo @@ -0,0 +1,10 @@ +use opus::types::AssetBalance; +use starknet::ContractAddress; +use wadray::Wad; + +#[starknet::interface] +pub trait IFrontendDataProvider { + // getters + fn get_trove_deposits(self: @TContractState, trove_id: u64) -> (Span, Span); + fn get_shrine_deposits(self: @TContractState) -> (Span, Span, Span); +} diff --git a/src/periphery/trove_data_provider.cairo b/src/periphery/trove_data_provider.cairo new file mode 100644 index 000000000..9cf93fe89 --- /dev/null +++ b/src/periphery/trove_data_provider.cairo @@ -0,0 +1,105 @@ +#[starknet::contract] +pub mod trove_data_provider { + use core::num::traits::Zero; + use opus::interfaces::IGate::{IGateDispatcher, IGateDispatcherTrait}; + use opus::interfaces::ISentinel::{ISentinelDispatcher, ISentinelDispatcherTrait}; + use opus::interfaces::IShrine::{IShrineDispatcher, IShrineDispatcherTrait}; + use opus::periphery::interfaces::IFrontendDataProvider; + use opus::types::{AssetBalance, YangBalance}; + use starknet::ContractAddress; + use wadray::Wad; + + // + // Storage + // + + #[storage] + struct Storage { + // Sentinel associated with the Shrine + sentinel: ISentinelDispatcher, + shrine: IShrineDispatcher, + } + + // + // Constructor + // + + #[constructor] + fn constructor(ref self: ContractState, shrine: ContractAddress, sentinel: ContractAddress) { + self.shrine.write(IShrineDispatcher { contract_address: shrine }); + self.sentinel.write(ISentinelDispatcher { contract_address: sentinel }); + } + + // + // External functions + // + + #[abi(embed_v0)] + impl IFrontendDataProviderImpl of IFrontendDataProvider { + // Returns a tuple of ordered arrays of + // 1. asset balances for a given trove + // 2. total value of each deposited asset for a given trove + fn get_trove_deposits(self: @ContractState, trove_id: u64) -> (Span, Span) { + let shrine: IShrineDispatcher = self.shrine.read(); + let sentinel: ISentinelDispatcher = self.sentinel.read(); + + let mut trove_yang_balances: Span = shrine.get_trove_deposits(trove_id); + let mut yang_addresses: Span = sentinel.get_yang_addresses(); + + assert(trove_yang_balances.len() == yang_addresses.len(), 'TDP: Length mismatch'); + + let mut trove_asset_balances: Array = ArrayTrait::new(); + let mut yang_values: Array = ArrayTrait::new(); + + loop { + match trove_yang_balances.pop_front() { + Option::Some(yang_balance) => { + let asset: ContractAddress = *yang_addresses.pop_front().unwrap(); + let asset_amt: u128 = sentinel.convert_to_assets(asset, *yang_balance.amount); + trove_asset_balances.append(AssetBalance { address: asset, amount: asset_amt }); + + let (yang_price, _, _) = shrine.get_current_yang_price(asset); + let yang_value: Wad = *yang_balance.amount * yang_price; + yang_values.append(yang_value); + }, + Option::None => { break (trove_asset_balances.span(), yang_values.span()); } + } + } + } + + // Returns a tuple of ordered arrays of + // 1. asset balances for the Shrine + // 2. total value of each deposited asset for the Shrine + // 3. ceiling for the asset + fn get_shrine_deposits(self: @ContractState) -> (Span, Span, Span) { + let shrine: IShrineDispatcher = self.shrine.read(); + let sentinel: ISentinelDispatcher = self.sentinel.read(); + + let mut shrine_yang_balances: Span = shrine.get_shrine_deposits(); + let mut yang_addresses: Span = sentinel.get_yang_addresses(); + + assert(shrine_yang_balances.len() == yang_addresses.len(), 'TDP: Length mismatch'); + + let mut shrine_asset_balances: Array = ArrayTrait::new(); + let mut yang_values: Array = ArrayTrait::new(); + let mut asset_ceilings: Array = ArrayTrait::new(); + + loop { + match shrine_yang_balances.pop_front() { + Option::Some(yang_balance) => { + let asset: ContractAddress = *yang_addresses.pop_front().unwrap(); + let asset_amt: u128 = sentinel.convert_to_assets(asset, *yang_balance.amount); + shrine_asset_balances.append(AssetBalance { address: asset, amount: asset_amt }); + + let (yang_price, _, _) = shrine.get_current_yang_price(asset); + let yang_value: Wad = *yang_balance.amount * yang_price; + yang_values.append(yang_value); + + asset_ceilings.append(sentinel.get_yang_asset_max(asset)); + }, + Option::None => { break (shrine_asset_balances.span(), yang_values.span(), asset_ceilings.span()); } + } + } + } + } +} From 13bad2d481a4a266fdae9168e4bcb55dcc74ec44 Mon Sep 17 00:00:00 2001 From: tserg <8017125+tserg@users.noreply.github.com> Date: Tue, 2 Apr 2024 17:25:17 +0800 Subject: [PATCH 02/20] rename file --- src/lib.cairo | 2 +- .../{trove_data_provider.cairo => frontend_data_provider.cairo} | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename src/periphery/{trove_data_provider.cairo => frontend_data_provider.cairo} (99%) diff --git a/src/lib.cairo b/src/lib.cairo index 04348a67d..75d4038da 100644 --- a/src/lib.cairo +++ b/src/lib.cairo @@ -55,8 +55,8 @@ mod utils { } mod periphery { + pub mod frontend_data_provider; pub mod interfaces; - pub mod trove_data_provider; } // mock used for local devnet deployment diff --git a/src/periphery/trove_data_provider.cairo b/src/periphery/frontend_data_provider.cairo similarity index 99% rename from src/periphery/trove_data_provider.cairo rename to src/periphery/frontend_data_provider.cairo index 9cf93fe89..7ffbfbf5d 100644 --- a/src/periphery/trove_data_provider.cairo +++ b/src/periphery/frontend_data_provider.cairo @@ -1,5 +1,5 @@ #[starknet::contract] -pub mod trove_data_provider { +pub mod frontend_data_provider { use core::num::traits::Zero; use opus::interfaces::IGate::{IGateDispatcher, IGateDispatcherTrait}; use opus::interfaces::ISentinel::{ISentinelDispatcher, ISentinelDispatcherTrait}; From 9c13fd777a8ff207112d63e0ea308f36dcd939b4 Mon Sep 17 00:00:00 2001 From: tserg <8017125+tserg@users.noreply.github.com> Date: Thu, 4 Apr 2024 12:03:16 +0800 Subject: [PATCH 03/20] minor fixes --- src/periphery/frontend_data_provider.cairo | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/periphery/frontend_data_provider.cairo b/src/periphery/frontend_data_provider.cairo index 7ffbfbf5d..960ad9250 100644 --- a/src/periphery/frontend_data_provider.cairo +++ b/src/periphery/frontend_data_provider.cairo @@ -46,7 +46,7 @@ pub mod frontend_data_provider { let mut trove_yang_balances: Span = shrine.get_trove_deposits(trove_id); let mut yang_addresses: Span = sentinel.get_yang_addresses(); - assert(trove_yang_balances.len() == yang_addresses.len(), 'TDP: Length mismatch'); + assert(trove_yang_balances.len() == yang_addresses.len(), 'FDP: Length mismatch'); let mut trove_asset_balances: Array = ArrayTrait::new(); let mut yang_values: Array = ArrayTrait::new(); @@ -55,6 +55,7 @@ pub mod frontend_data_provider { match trove_yang_balances.pop_front() { Option::Some(yang_balance) => { let asset: ContractAddress = *yang_addresses.pop_front().unwrap(); + assert(yang_balance.address == asset, 'FDP: Address mismatch'); let asset_amt: u128 = sentinel.convert_to_assets(asset, *yang_balance.amount); trove_asset_balances.append(AssetBalance { address: asset, amount: asset_amt }); @@ -78,7 +79,7 @@ pub mod frontend_data_provider { let mut shrine_yang_balances: Span = shrine.get_shrine_deposits(); let mut yang_addresses: Span = sentinel.get_yang_addresses(); - assert(shrine_yang_balances.len() == yang_addresses.len(), 'TDP: Length mismatch'); + assert(shrine_yang_balances.len() == yang_addresses.len(), 'FDP: Length mismatch'); let mut shrine_asset_balances: Array = ArrayTrait::new(); let mut yang_values: Array = ArrayTrait::new(); @@ -88,7 +89,9 @@ pub mod frontend_data_provider { match shrine_yang_balances.pop_front() { Option::Some(yang_balance) => { let asset: ContractAddress = *yang_addresses.pop_front().unwrap(); - let asset_amt: u128 = sentinel.convert_to_assets(asset, *yang_balance.amount); + assert(yang_balance.address == asset, 'FDP: Address mismatch'); + let gate = IGateDispatcher { contract_address: sentinel.get_gate_address(asset) }; + let asset_amt: u128 = gate.get_total_assets(); shrine_asset_balances.append(AssetBalance { address: asset, amount: asset_amt }); let (yang_price, _, _) = shrine.get_current_yang_price(asset); From 14684051e040ddb5502357e8d3d3e86e21a2d4d4 Mon Sep 17 00:00:00 2001 From: tserg <8017125+tserg@users.noreply.github.com> Date: Thu, 4 Apr 2024 12:45:37 +0800 Subject: [PATCH 04/20] change yang idx to u32 in sentinel --- src/core/sentinel.cairo | 16 ++++++++-------- src/interfaces/ISentinel.cairo | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/core/sentinel.cairo b/src/core/sentinel.cairo index 59ba2e660..74dd834e1 100644 --- a/src/core/sentinel.cairo +++ b/src/core/sentinel.cairo @@ -28,7 +28,7 @@ pub mod sentinel { // Helper constant to set the starting index for iterating over the // yangs in the order they were added - const LOOP_START: u64 = 1; + const LOOP_START: u32 = 1; // // Storage @@ -42,10 +42,10 @@ pub mod sentinel { // mapping between a yang address and our deployed Gate yang_to_gate: LegacyMap::, // length of the yang_addresses array - yang_addresses_count: u64, + yang_addresses_count: u32, // array of yang addresses added to the Shrine via this Sentinel // starts from index 1 - yang_addresses: LegacyMap::, + yang_addresses: LegacyMap::, // The Shrine associated with this Sentinel shrine: IShrineDispatcher, // mapping between a yang address and the cap on the yang's asset in the @@ -119,8 +119,8 @@ pub mod sentinel { } fn get_yang_addresses(self: @ContractState) -> Span { - let mut idx: u64 = LOOP_START; - let loop_end: u64 = self.yang_addresses_count.read() + LOOP_START; + let mut idx: u32 = LOOP_START; + let loop_end: u32 = self.yang_addresses_count.read() + LOOP_START; let mut addresses: Array = ArrayTrait::new(); loop { if idx == loop_end { @@ -131,11 +131,11 @@ pub mod sentinel { } } - fn get_yang_addresses_count(self: @ContractState) -> u64 { + fn get_yang_addresses_count(self: @ContractState) -> u32 { self.yang_addresses_count.read() } - fn get_yang(self: @ContractState, idx: u64) -> ContractAddress { + fn get_yang(self: @ContractState, idx: u32) -> ContractAddress { self.yang_addresses.read(idx) } @@ -190,7 +190,7 @@ pub mod sentinel { let gate = IGateDispatcher { contract_address: gate }; assert(gate.get_asset() == yang, 'SE: Asset of gate is not yang'); - let index: u64 = self.yang_addresses_count.read() + 1; + let index: u32 = self.yang_addresses_count.read() + 1; self.yang_addresses_count.write(index); self.yang_addresses.write(index, yang); self.yang_to_gate.write(yang, gate); diff --git a/src/interfaces/ISentinel.cairo b/src/interfaces/ISentinel.cairo index e1ccef011..ae2181faa 100644 --- a/src/interfaces/ISentinel.cairo +++ b/src/interfaces/ISentinel.cairo @@ -7,8 +7,8 @@ pub trait ISentinel { fn get_gate_address(self: @TContractState, yang: ContractAddress) -> ContractAddress; fn get_gate_live(self: @TContractState, yang: ContractAddress) -> bool; fn get_yang_addresses(self: @TContractState) -> Span; - fn get_yang_addresses_count(self: @TContractState) -> u64; - fn get_yang(self: @TContractState, idx: u64) -> ContractAddress; + fn get_yang_addresses_count(self: @TContractState) -> u32; + fn get_yang(self: @TContractState, idx: u32) -> ContractAddress; fn get_yang_asset_max(self: @TContractState, yang: ContractAddress) -> u128; fn get_asset_amt_per_yang(self: @TContractState, yang: ContractAddress) -> Wad; // external From cdde63fe1f66a4fafd71d18c75e717dc6cdcb147 Mon Sep 17 00:00:00 2001 From: tserg <8017125+tserg@users.noreply.github.com> Date: Thu, 4 Apr 2024 15:53:16 +0800 Subject: [PATCH 05/20] add more data; add custom types --- src/periphery/frontend_data_provider.cairo | 115 ++++++++++++++------- src/periphery/interfaces.cairo | 6 +- src/types.cairo | 23 +++++ 3 files changed, 101 insertions(+), 43 deletions(-) diff --git a/src/periphery/frontend_data_provider.cairo b/src/periphery/frontend_data_provider.cairo index 960ad9250..38a0d2ced 100644 --- a/src/periphery/frontend_data_provider.cairo +++ b/src/periphery/frontend_data_provider.cairo @@ -1,13 +1,12 @@ #[starknet::contract] pub mod frontend_data_provider { - use core::num::traits::Zero; use opus::interfaces::IGate::{IGateDispatcher, IGateDispatcherTrait}; use opus::interfaces::ISentinel::{ISentinelDispatcher, ISentinelDispatcherTrait}; use opus::interfaces::IShrine::{IShrineDispatcher, IShrineDispatcherTrait}; use opus::periphery::interfaces::IFrontendDataProvider; - use opus::types::{AssetBalance, YangBalance}; + use opus::types::{ShrineYangAssetInfo, TroveYangAssetInfo, YangBalance}; use starknet::ContractAddress; - use wadray::Wad; + use wadray::{Ray, Wad}; // // Storage @@ -36,10 +35,8 @@ pub mod frontend_data_provider { #[abi(embed_v0)] impl IFrontendDataProviderImpl of IFrontendDataProvider { - // Returns a tuple of ordered arrays of - // 1. asset balances for a given trove - // 2. total value of each deposited asset for a given trove - fn get_trove_deposits(self: @ContractState, trove_id: u64) -> (Span, Span) { + // Returns an ordered array of YangInfo struct for a trove + fn get_trove_deposits(self: @ContractState, trove_id: u64) -> Span { let shrine: IShrineDispatcher = self.shrine.read(); let sentinel: ISentinelDispatcher = self.sentinel.read(); @@ -48,31 +45,32 @@ pub mod frontend_data_provider { assert(trove_yang_balances.len() == yang_addresses.len(), 'FDP: Length mismatch'); - let mut trove_asset_balances: Array = ArrayTrait::new(); - let mut yang_values: Array = ArrayTrait::new(); - + let mut yang_infos: Array = ArrayTrait::new(); + let current_rate_era: u64 = shrine.get_current_rate_era(); loop { match trove_yang_balances.pop_front() { Option::Some(yang_balance) => { - let asset: ContractAddress = *yang_addresses.pop_front().unwrap(); - assert(yang_balance.address == asset, 'FDP: Address mismatch'); - let asset_amt: u128 = sentinel.convert_to_assets(asset, *yang_balance.amount); - trove_asset_balances.append(AssetBalance { address: asset, amount: asset_amt }); - - let (yang_price, _, _) = shrine.get_current_yang_price(asset); - let yang_value: Wad = *yang_balance.amount * yang_price; - yang_values.append(yang_value); + let yang: ContractAddress = *yang_addresses.pop_front().unwrap(); + assert(sentinel.get_yang(*yang_balance.yang_id) == yang, 'FDP: Address mismatch'); + + let (shrine_yang_info, yang_price) = self + .get_shrine_yang_info_helper( + shrine, sentinel, yang, *yang_balance.amount, current_rate_era + ); + + let asset_amt: u128 = sentinel.convert_to_assets(yang, *yang_balance.amount); + let trove_yang_info = TroveYangAssetInfo { + shrine_yang_info, amount: asset_amt, value: *yang_balance.amount * yang_price, + }; + yang_infos.append(trove_yang_info); }, - Option::None => { break (trove_asset_balances.span(), yang_values.span()); } + Option::None => { break yang_infos.span(); } } } } - // Returns a tuple of ordered arrays of - // 1. asset balances for the Shrine - // 2. total value of each deposited asset for the Shrine - // 3. ceiling for the asset - fn get_shrine_deposits(self: @ContractState) -> (Span, Span, Span) { + // Returns an ordered array of YangInfo struct for the Shrine + fn get_shrine_deposits(self: @ContractState) -> Span { let shrine: IShrineDispatcher = self.shrine.read(); let sentinel: ISentinelDispatcher = self.sentinel.read(); @@ -81,28 +79,65 @@ pub mod frontend_data_provider { assert(shrine_yang_balances.len() == yang_addresses.len(), 'FDP: Length mismatch'); - let mut shrine_asset_balances: Array = ArrayTrait::new(); - let mut yang_values: Array = ArrayTrait::new(); - let mut asset_ceilings: Array = ArrayTrait::new(); - + let mut yang_infos: Array = ArrayTrait::new(); + let current_rate_era: u64 = shrine.get_current_rate_era(); loop { match shrine_yang_balances.pop_front() { Option::Some(yang_balance) => { - let asset: ContractAddress = *yang_addresses.pop_front().unwrap(); - assert(yang_balance.address == asset, 'FDP: Address mismatch'); - let gate = IGateDispatcher { contract_address: sentinel.get_gate_address(asset) }; - let asset_amt: u128 = gate.get_total_assets(); - shrine_asset_balances.append(AssetBalance { address: asset, amount: asset_amt }); - - let (yang_price, _, _) = shrine.get_current_yang_price(asset); - let yang_value: Wad = *yang_balance.amount * yang_price; - yang_values.append(yang_value); - - asset_ceilings.append(sentinel.get_yang_asset_max(asset)); + let yang: ContractAddress = *yang_addresses.pop_front().unwrap(); + assert(sentinel.get_yang(*yang_balance.yang_id) == yang, 'FDP: Address mismatch'); + + let (shrine_yang_info, _) = self + .get_shrine_yang_info_helper( + shrine, sentinel, yang, *yang_balance.amount, current_rate_era + ); + yang_infos.append(shrine_yang_info); }, - Option::None => { break (shrine_asset_balances.span(), yang_values.span(), asset_ceilings.span()); } + Option::None => { break yang_infos.span(); } } } } } + + // + // Internal functions + // + + #[generate_trait] + impl FrontendDataProviderHelpers of FrontendDataProviderHelpersTrait { + // Helper function to generate a YangInfo struct for a yang. + // Returns a tuple of a YangInfo struct and the yang price + fn get_shrine_yang_info_helper( + self: @ContractState, + shrine: IShrineDispatcher, + sentinel: ISentinelDispatcher, + yang: ContractAddress, + yang_amt: Wad, + current_rate_era: u64 + ) -> (ShrineYangAssetInfo, Wad) { + let gate = IGateDispatcher { contract_address: sentinel.get_gate_address(yang) }; + let deposited: u128 = gate.get_total_assets(); + + let (yang_price, _, _) = shrine.get_current_yang_price(yang); + let yang_value: Wad = yang_amt * yang_price; + let asset_price: Wad = yang_value / deposited.into(); + + let threshold: Ray = shrine.get_yang_threshold(yang); + let base_rate: Ray = shrine.get_yang_rate(yang, current_rate_era); + let ceiling: u128 = sentinel.get_yang_asset_max(yang); + + ( + ShrineYangAssetInfo { + address: yang, + price: asset_price, + threshold, + base_rate, + deposited, + ceiling, + deposited_value: yang_value + }, + yang_price + ) + } + } } diff --git a/src/periphery/interfaces.cairo b/src/periphery/interfaces.cairo index b1e378b99..777163295 100644 --- a/src/periphery/interfaces.cairo +++ b/src/periphery/interfaces.cairo @@ -1,10 +1,10 @@ -use opus::types::AssetBalance; +use opus::types::{ShrineYangAssetInfo, TroveYangAssetInfo}; use starknet::ContractAddress; use wadray::Wad; #[starknet::interface] pub trait IFrontendDataProvider { // getters - fn get_trove_deposits(self: @TContractState, trove_id: u64) -> (Span, Span); - fn get_shrine_deposits(self: @TContractState) -> (Span, Span, Span); + fn get_trove_deposits(self: @TContractState, trove_id: u64) -> Span; + fn get_shrine_deposits(self: @TContractState) -> Span; } diff --git a/src/types.cairo b/src/types.cairo index 3aa951723..09d0e618a 100644 --- a/src/types.cairo +++ b/src/types.cairo @@ -212,3 +212,26 @@ pub mod pragma { pub sources: u32, } } + +// +// Periphery - Frontend Data Provider +// + +#[derive(Copy, Debug, Drop, Serde)] +pub struct TroveYangAssetInfo { + pub shrine_yang_info: ShrineYangAssetInfo, + pub amount: u128, // Amount of the yang's asset in the asset's decimals for the trove + pub value: Wad, // Value of the yang in the trove +} + +#[derive(Copy, Debug, Drop, Serde)] +pub struct ShrineYangAssetInfo { + pub address: ContractAddress, // Address of the yang's ERC-20 asset + pub price: Wad, // Price of the yang's asset + pub threshold: Ray, // Base threshold of the yang + pub base_rate: Ray, // Base rate of the yang + pub deposited: u128, // Amount of yang's asset deposited in Shrine + pub ceiling: u128, // Maximum amount of yang's asset in Shrine + pub deposited_value: Wad // Value of yang deposited in Shrine +} + From 5248913095d277f676e4d3038f98953f2356b0bc Mon Sep 17 00:00:00 2001 From: tserg <8017125+tserg@users.noreply.github.com> Date: Thu, 4 Apr 2024 15:54:39 +0800 Subject: [PATCH 06/20] fix comments --- src/periphery/frontend_data_provider.cairo | 8 ++++---- src/types.cairo | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/periphery/frontend_data_provider.cairo b/src/periphery/frontend_data_provider.cairo index 38a0d2ced..24d3f2250 100644 --- a/src/periphery/frontend_data_provider.cairo +++ b/src/periphery/frontend_data_provider.cairo @@ -35,7 +35,7 @@ pub mod frontend_data_provider { #[abi(embed_v0)] impl IFrontendDataProviderImpl of IFrontendDataProvider { - // Returns an ordered array of YangInfo struct for a trove + // Returns an ordered array of TroveYangAssetInfo struct for a trove fn get_trove_deposits(self: @ContractState, trove_id: u64) -> Span { let shrine: IShrineDispatcher = self.shrine.read(); let sentinel: ISentinelDispatcher = self.sentinel.read(); @@ -69,7 +69,7 @@ pub mod frontend_data_provider { } } - // Returns an ordered array of YangInfo struct for the Shrine + // Returns an ordered array of ShrineYangAssetInfo struct for the Shrine fn get_shrine_deposits(self: @ContractState) -> Span { let shrine: IShrineDispatcher = self.shrine.read(); let sentinel: ISentinelDispatcher = self.sentinel.read(); @@ -105,8 +105,8 @@ pub mod frontend_data_provider { #[generate_trait] impl FrontendDataProviderHelpers of FrontendDataProviderHelpersTrait { - // Helper function to generate a YangInfo struct for a yang. - // Returns a tuple of a YangInfo struct and the yang price + // Helper function to generate a ShrineYangAssetInfo struct for a yang. + // Returns a tuple of a ShrineYangAssetInfo struct and the yang price fn get_shrine_yang_info_helper( self: @ContractState, shrine: IShrineDispatcher, diff --git a/src/types.cairo b/src/types.cairo index 09d0e618a..587b0cc68 100644 --- a/src/types.cairo +++ b/src/types.cairo @@ -230,7 +230,7 @@ pub struct ShrineYangAssetInfo { pub price: Wad, // Price of the yang's asset pub threshold: Ray, // Base threshold of the yang pub base_rate: Ray, // Base rate of the yang - pub deposited: u128, // Amount of yang's asset deposited in Shrine + pub deposited: u128, // Amount of yang's asset in the asset's decimals deposited in Shrine pub ceiling: u128, // Maximum amount of yang's asset in Shrine pub deposited_value: Wad // Value of yang deposited in Shrine } From bb555ccab398efaa40e0858e77dae18dec03d5ae Mon Sep 17 00:00:00 2001 From: tserg <8017125+tserg@users.noreply.github.com> Date: Thu, 4 Apr 2024 17:04:54 +0800 Subject: [PATCH 07/20] add yin and rm info --- src/periphery/frontend_data_provider.cairo | 24 +++++++++++++++++++++- src/periphery/interfaces.cairo | 4 +++- src/types.cairo | 14 +++++++++++++ 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/src/periphery/frontend_data_provider.cairo b/src/periphery/frontend_data_provider.cairo index 24d3f2250..f3124fac5 100644 --- a/src/periphery/frontend_data_provider.cairo +++ b/src/periphery/frontend_data_provider.cairo @@ -4,7 +4,7 @@ pub mod frontend_data_provider { use opus::interfaces::ISentinel::{ISentinelDispatcher, ISentinelDispatcherTrait}; use opus::interfaces::IShrine::{IShrineDispatcher, IShrineDispatcherTrait}; use opus::periphery::interfaces::IFrontendDataProvider; - use opus::types::{ShrineYangAssetInfo, TroveYangAssetInfo, YangBalance}; + use opus::types::{Health, RecoveryModeInfo, ShrineYangAssetInfo, TroveYangAssetInfo, YangBalance, YinInfo}; use starknet::ContractAddress; use wadray::{Ray, Wad}; @@ -35,6 +35,28 @@ pub mod frontend_data_provider { #[abi(embed_v0)] impl IFrontendDataProviderImpl of IFrontendDataProvider { + fn get_yin_info(self: @ContractState) -> YinInfo { + let shrine: IShrineDispatcher = self.shrine.read(); + + YinInfo { + yin_spot_price: shrine.get_yin_spot_price(), + yin_total_supply: shrine.get_total_yin(), + yin_ceiling: shrine.get_debt_ceiling(), + } + } + + fn get_recovery_mode_info(self: @ContractState) -> RecoveryModeInfo { + let shrine: IShrineDispatcher = self.shrine.read(); + let shrine_health: Health = shrine.get_shrine_health(); + + let target_factor: Ray = shrine.get_recovery_mode_target_factor(); + let buffer_factor: Ray = shrine.get_recovery_mode_buffer_factor(); + let target_ltv: Ray = target_factor * shrine_health.threshold; + let buffer_ltv: Ray = (target_factor + buffer_factor) * shrine_health.threshold; + + RecoveryModeInfo { is_recovery_mode: shrine.is_recovery_mode(), target_ltv, buffer_ltv } + } + // Returns an ordered array of TroveYangAssetInfo struct for a trove fn get_trove_deposits(self: @ContractState, trove_id: u64) -> Span { let shrine: IShrineDispatcher = self.shrine.read(); diff --git a/src/periphery/interfaces.cairo b/src/periphery/interfaces.cairo index 777163295..eb55d7d86 100644 --- a/src/periphery/interfaces.cairo +++ b/src/periphery/interfaces.cairo @@ -1,10 +1,12 @@ -use opus::types::{ShrineYangAssetInfo, TroveYangAssetInfo}; +use opus::types::{RecoveryModeInfo, ShrineYangAssetInfo, TroveYangAssetInfo, YinInfo}; use starknet::ContractAddress; use wadray::Wad; #[starknet::interface] pub trait IFrontendDataProvider { // getters + fn get_yin_info(self: @TContractState) -> YinInfo; + fn get_recovery_mode_info(self: @TContractState) -> RecoveryModeInfo; fn get_trove_deposits(self: @TContractState, trove_id: u64) -> Span; fn get_shrine_deposits(self: @TContractState) -> Span; } diff --git a/src/types.cairo b/src/types.cairo index 587b0cc68..4dd32a4fc 100644 --- a/src/types.cairo +++ b/src/types.cairo @@ -217,6 +217,20 @@ pub mod pragma { // Periphery - Frontend Data Provider // +#[derive(Copy, Debug, Drop, Serde)] +pub struct YinInfo { + pub yin_spot_price: Wad, // Spot price of yin + pub yin_total_supply: Wad, // Total supply of yin + pub yin_ceiling: Wad, // Maximum amount of yin allowed +} + +#[derive(Copy, Debug, Drop, Serde)] +pub struct RecoveryModeInfo { + pub is_recovery_mode: bool, + pub target_ltv: Ray, + pub buffer_ltv: Ray, +} + #[derive(Copy, Debug, Drop, Serde)] pub struct TroveYangAssetInfo { pub shrine_yang_info: ShrineYangAssetInfo, From 7e56647c23595b6ed87fe77de4fd7b709c952186 Mon Sep 17 00:00:00 2001 From: tserg <8017125+tserg@users.noreply.github.com> Date: Thu, 4 Apr 2024 17:28:43 +0800 Subject: [PATCH 08/20] add comments --- src/types.cairo | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/types.cairo b/src/types.cairo index 4dd32a4fc..b8c2c985a 100644 --- a/src/types.cairo +++ b/src/types.cairo @@ -227,8 +227,8 @@ pub struct YinInfo { #[derive(Copy, Debug, Drop, Serde)] pub struct RecoveryModeInfo { pub is_recovery_mode: bool, - pub target_ltv: Ray, - pub buffer_ltv: Ray, + pub target_ltv: Ray, // Recovery mode is triggered once Shrine's LTV exceeds this + pub buffer_ltv: Ray, // Thresholds are scaled once Shrine's LTV exceeds this } #[derive(Copy, Debug, Drop, Serde)] From b82972438416c1d67a213a3fca50f82f6441e61e Mon Sep 17 00:00:00 2001 From: tserg <8017125+tserg@users.noreply.github.com> Date: Thu, 4 Apr 2024 17:33:00 +0800 Subject: [PATCH 09/20] rename types --- src/periphery/frontend_data_provider.cairo | 28 +++++++++++----------- src/periphery/interfaces.cairo | 6 ++--- src/types.cairo | 6 ++--- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/periphery/frontend_data_provider.cairo b/src/periphery/frontend_data_provider.cairo index f3124fac5..2f066259e 100644 --- a/src/periphery/frontend_data_provider.cairo +++ b/src/periphery/frontend_data_provider.cairo @@ -4,7 +4,7 @@ pub mod frontend_data_provider { use opus::interfaces::ISentinel::{ISentinelDispatcher, ISentinelDispatcherTrait}; use opus::interfaces::IShrine::{IShrineDispatcher, IShrineDispatcherTrait}; use opus::periphery::interfaces::IFrontendDataProvider; - use opus::types::{Health, RecoveryModeInfo, ShrineYangAssetInfo, TroveYangAssetInfo, YangBalance, YinInfo}; + use opus::types::{Health, RecoveryModeInfo, ShrineAssetInfo, TroveAssetInfo, YangBalance, YinInfo}; use starknet::ContractAddress; use wadray::{Ray, Wad}; @@ -57,8 +57,8 @@ pub mod frontend_data_provider { RecoveryModeInfo { is_recovery_mode: shrine.is_recovery_mode(), target_ltv, buffer_ltv } } - // Returns an ordered array of TroveYangAssetInfo struct for a trove - fn get_trove_deposits(self: @ContractState, trove_id: u64) -> Span { + // Returns an ordered array of TroveAssetInfo struct for a trove + fn get_trove_assets_info(self: @ContractState, trove_id: u64) -> Span { let shrine: IShrineDispatcher = self.shrine.read(); let sentinel: ISentinelDispatcher = self.sentinel.read(); @@ -67,7 +67,7 @@ pub mod frontend_data_provider { assert(trove_yang_balances.len() == yang_addresses.len(), 'FDP: Length mismatch'); - let mut yang_infos: Array = ArrayTrait::new(); + let mut yang_infos: Array = ArrayTrait::new(); let current_rate_era: u64 = shrine.get_current_rate_era(); loop { match trove_yang_balances.pop_front() { @@ -75,14 +75,14 @@ pub mod frontend_data_provider { let yang: ContractAddress = *yang_addresses.pop_front().unwrap(); assert(sentinel.get_yang(*yang_balance.yang_id) == yang, 'FDP: Address mismatch'); - let (shrine_yang_info, yang_price) = self + let (shrine_asset_info, yang_price) = self .get_shrine_yang_info_helper( shrine, sentinel, yang, *yang_balance.amount, current_rate_era ); let asset_amt: u128 = sentinel.convert_to_assets(yang, *yang_balance.amount); - let trove_yang_info = TroveYangAssetInfo { - shrine_yang_info, amount: asset_amt, value: *yang_balance.amount * yang_price, + let trove_yang_info = TroveAssetInfo { + shrine_asset_info, amount: asset_amt, value: *yang_balance.amount * yang_price, }; yang_infos.append(trove_yang_info); }, @@ -91,8 +91,8 @@ pub mod frontend_data_provider { } } - // Returns an ordered array of ShrineYangAssetInfo struct for the Shrine - fn get_shrine_deposits(self: @ContractState) -> Span { + // Returns an ordered array of ShrineAssetInfo struct for the Shrine + fn get_shrine_assets_info(self: @ContractState) -> Span { let shrine: IShrineDispatcher = self.shrine.read(); let sentinel: ISentinelDispatcher = self.sentinel.read(); @@ -101,7 +101,7 @@ pub mod frontend_data_provider { assert(shrine_yang_balances.len() == yang_addresses.len(), 'FDP: Length mismatch'); - let mut yang_infos: Array = ArrayTrait::new(); + let mut yang_infos: Array = ArrayTrait::new(); let current_rate_era: u64 = shrine.get_current_rate_era(); loop { match shrine_yang_balances.pop_front() { @@ -127,8 +127,8 @@ pub mod frontend_data_provider { #[generate_trait] impl FrontendDataProviderHelpers of FrontendDataProviderHelpersTrait { - // Helper function to generate a ShrineYangAssetInfo struct for a yang. - // Returns a tuple of a ShrineYangAssetInfo struct and the yang price + // Helper function to generate a ShrineAssetInfo struct for a yang. + // Returns a tuple of a ShrineAssetInfo struct and the yang price fn get_shrine_yang_info_helper( self: @ContractState, shrine: IShrineDispatcher, @@ -136,7 +136,7 @@ pub mod frontend_data_provider { yang: ContractAddress, yang_amt: Wad, current_rate_era: u64 - ) -> (ShrineYangAssetInfo, Wad) { + ) -> (ShrineAssetInfo, Wad) { let gate = IGateDispatcher { contract_address: sentinel.get_gate_address(yang) }; let deposited: u128 = gate.get_total_assets(); @@ -149,7 +149,7 @@ pub mod frontend_data_provider { let ceiling: u128 = sentinel.get_yang_asset_max(yang); ( - ShrineYangAssetInfo { + ShrineAssetInfo { address: yang, price: asset_price, threshold, diff --git a/src/periphery/interfaces.cairo b/src/periphery/interfaces.cairo index eb55d7d86..9667cf41a 100644 --- a/src/periphery/interfaces.cairo +++ b/src/periphery/interfaces.cairo @@ -1,4 +1,4 @@ -use opus::types::{RecoveryModeInfo, ShrineYangAssetInfo, TroveYangAssetInfo, YinInfo}; +use opus::types::{RecoveryModeInfo, ShrineAssetInfo, TroveAssetInfo, YinInfo}; use starknet::ContractAddress; use wadray::Wad; @@ -7,6 +7,6 @@ pub trait IFrontendDataProvider { // getters fn get_yin_info(self: @TContractState) -> YinInfo; fn get_recovery_mode_info(self: @TContractState) -> RecoveryModeInfo; - fn get_trove_deposits(self: @TContractState, trove_id: u64) -> Span; - fn get_shrine_deposits(self: @TContractState) -> Span; + fn get_trove_assets_info(self: @TContractState, trove_id: u64) -> Span; + fn get_shrine_assets_info(self: @TContractState) -> Span; } diff --git a/src/types.cairo b/src/types.cairo index b8c2c985a..7032d96b2 100644 --- a/src/types.cairo +++ b/src/types.cairo @@ -232,14 +232,14 @@ pub struct RecoveryModeInfo { } #[derive(Copy, Debug, Drop, Serde)] -pub struct TroveYangAssetInfo { - pub shrine_yang_info: ShrineYangAssetInfo, +pub struct TroveAssetInfo { + pub shrine_asset_info: ShrineAssetInfo, pub amount: u128, // Amount of the yang's asset in the asset's decimals for the trove pub value: Wad, // Value of the yang in the trove } #[derive(Copy, Debug, Drop, Serde)] -pub struct ShrineYangAssetInfo { +pub struct ShrineAssetInfo { pub address: ContractAddress, // Address of the yang's ERC-20 asset pub price: Wad, // Price of the yang's asset pub threshold: Ray, // Base threshold of the yang From e02aea0b9ddce783d180d2192aedc4f8442df985 Mon Sep 17 00:00:00 2001 From: tserg <8017125+tserg@users.noreply.github.com> Date: Fri, 5 Apr 2024 14:58:22 +0800 Subject: [PATCH 10/20] add upgradeable --- src/lib.cairo | 2 + src/periphery/frontend_data_provider.cairo | 47 +++++++++++++++++++++- src/periphery/roles.cairo | 7 ++++ src/utils/upgradeable.cairo | 41 +++++++++++++++++++ 4 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 src/periphery/roles.cairo create mode 100644 src/utils/upgradeable.cairo diff --git a/src/lib.cairo b/src/lib.cairo index 75d4038da..c1bea1ab5 100644 --- a/src/lib.cairo +++ b/src/lib.cairo @@ -52,11 +52,13 @@ mod utils { pub mod exp; pub mod math; pub mod reentrancy_guard; + pub mod upgradeable; } mod periphery { pub mod frontend_data_provider; pub mod interfaces; + pub mod roles; } // mock used for local devnet deployment diff --git a/src/periphery/frontend_data_provider.cairo b/src/periphery/frontend_data_provider.cairo index 2f066259e..ff0dac56e 100644 --- a/src/periphery/frontend_data_provider.cairo +++ b/src/periphery/frontend_data_provider.cairo @@ -1,24 +1,57 @@ #[starknet::contract] pub mod frontend_data_provider { + use access_control::access_control_component; use opus::interfaces::IGate::{IGateDispatcher, IGateDispatcherTrait}; use opus::interfaces::ISentinel::{ISentinelDispatcher, ISentinelDispatcherTrait}; use opus::interfaces::IShrine::{IShrineDispatcher, IShrineDispatcherTrait}; use opus::periphery::interfaces::IFrontendDataProvider; + use opus::periphery::roles::frontend_data_provider_roles; use opus::types::{Health, RecoveryModeInfo, ShrineAssetInfo, TroveAssetInfo, YangBalance, YinInfo}; - use starknet::ContractAddress; + use opus::utils::upgradeable::{IUpgradeable, upgradeable_component}; + use starknet::{ClassHash, ContractAddress}; use wadray::{Ray, Wad}; + // + // Components + // + + component!(path: access_control_component, storage: access_control, event: AccessControlEvent); + + #[abi(embed_v0)] + impl AccessControlPublic = access_control_component::AccessControl; + impl AccessControlHelpers = access_control_component::AccessControlHelpers; + + component!(path: upgradeable_component, storage: upgradeable, event: UpgradeableEvent); + + impl UpgradeableHelpers = upgradeable_component::UpgradeableHelpers; + // // Storage // #[storage] struct Storage { + // components + #[substorage(v0)] + access_control: access_control_component::Storage, + #[substorage(v0)] + upgradeable: upgradeable_component::Storage, // Sentinel associated with the Shrine sentinel: ISentinelDispatcher, shrine: IShrineDispatcher, } + // + // Events + // + + #[event] + #[derive(Copy, Drop, starknet::Event, PartialEq)] + pub enum Event { + AccessControlEvent: access_control_component::Event, + UpgradeableEvent: upgradeable_component::Event, + } + // // Constructor // @@ -29,6 +62,18 @@ pub mod frontend_data_provider { self.sentinel.write(ISentinelDispatcher { contract_address: sentinel }); } + // + // Upgradeable + // + + #[abi(embed_v0)] + impl IUpgradeableImpl of IUpgradeable { + fn upgrade(ref self: ContractState, new_class_hash: ClassHash) { + self.access_control.assert_has_role(frontend_data_provider_roles::UPGRADE); + self.upgradeable.upgrade(new_class_hash); + } + } + // // External functions // diff --git a/src/periphery/roles.cairo b/src/periphery/roles.cairo new file mode 100644 index 000000000..814e289a7 --- /dev/null +++ b/src/periphery/roles.cairo @@ -0,0 +1,7 @@ +pub mod frontend_data_provider_roles { + pub const UPGRADE: u128 = 1; + + pub fn default_admin_role() -> u128 { + UPGRADE + } +} diff --git a/src/utils/upgradeable.cairo b/src/utils/upgradeable.cairo new file mode 100644 index 000000000..36d1cec26 --- /dev/null +++ b/src/utils/upgradeable.cairo @@ -0,0 +1,41 @@ +// With reference to OpenZeppelin's cairo-contracts +// https://github.com/OpenZeppelin/cairo-contracts/blob/main/src/upgrades/upgradeable.cairo + +use starknet::ClassHash; + +#[starknet::interface] +pub trait IUpgradeable { + fn upgrade(ref self: TContractState, new_class_hash: ClassHash); +} + +#[starknet::component] +pub mod upgradeable_component { + use core::num::traits::Zero; + use starknet::syscalls::replace_class_syscall; + use starknet::{ClassHash, SyscallResultTrait}; + + #[storage] + struct Storage {} + + #[event] + #[derive(Copy, Drop, PartialEq, starknet::Event)] + pub enum Event { + Upgraded: Upgraded + } + + #[derive(Copy, Drop, PartialEq, starknet::Event)] + pub struct Upgraded { + class_hash: ClassHash + } + + #[generate_trait] + pub impl UpgradeableHelpers< + TContractState, +HasComponent + > of UpgradeableHelpersTrait { + fn upgrade(ref self: ComponentState, new_class_hash: ClassHash) { + assert(!new_class_hash.is_zero(), 'Class hash cannot be zero'); + replace_class_syscall(new_class_hash).unwrap_syscall(); + self.emit(Upgraded { class_hash: new_class_hash }); + } + } +} From a7a8eb6f90e9e5c4acac8eb3df920563e29308ad Mon Sep 17 00:00:00 2001 From: tserg <8017125+tserg@users.noreply.github.com> Date: Mon, 15 Apr 2024 15:52:33 +0800 Subject: [PATCH 11/20] move types to new file --- src/lib.cairo | 1 + src/periphery/frontend_data_provider.cairo | 3 +- src/periphery/interfaces.cairo | 2 +- src/periphery/types.cairo | 36 +++++++++++++++++++++ src/types.cairo | 37 ---------------------- 5 files changed, 40 insertions(+), 39 deletions(-) create mode 100644 src/periphery/types.cairo diff --git a/src/lib.cairo b/src/lib.cairo index c1bea1ab5..748b4f070 100644 --- a/src/lib.cairo +++ b/src/lib.cairo @@ -59,6 +59,7 @@ mod periphery { pub mod frontend_data_provider; pub mod interfaces; pub mod roles; + pub mod types; } // mock used for local devnet deployment diff --git a/src/periphery/frontend_data_provider.cairo b/src/periphery/frontend_data_provider.cairo index ff0dac56e..02fa75dfc 100644 --- a/src/periphery/frontend_data_provider.cairo +++ b/src/periphery/frontend_data_provider.cairo @@ -6,7 +6,8 @@ pub mod frontend_data_provider { use opus::interfaces::IShrine::{IShrineDispatcher, IShrineDispatcherTrait}; use opus::periphery::interfaces::IFrontendDataProvider; use opus::periphery::roles::frontend_data_provider_roles; - use opus::types::{Health, RecoveryModeInfo, ShrineAssetInfo, TroveAssetInfo, YangBalance, YinInfo}; + use opus::periphery::types::{RecoveryModeInfo, ShrineAssetInfo, TroveAssetInfo, YinInfo}; + use opus::types::{Health, YangBalance}; use opus::utils::upgradeable::{IUpgradeable, upgradeable_component}; use starknet::{ClassHash, ContractAddress}; use wadray::{Ray, Wad}; diff --git a/src/periphery/interfaces.cairo b/src/periphery/interfaces.cairo index 9667cf41a..31f9b5b24 100644 --- a/src/periphery/interfaces.cairo +++ b/src/periphery/interfaces.cairo @@ -1,4 +1,4 @@ -use opus::types::{RecoveryModeInfo, ShrineAssetInfo, TroveAssetInfo, YinInfo}; +use opus::periphery::types::{RecoveryModeInfo, ShrineAssetInfo, TroveAssetInfo, YinInfo}; use starknet::ContractAddress; use wadray::Wad; diff --git a/src/periphery/types.cairo b/src/periphery/types.cairo new file mode 100644 index 000000000..d8f990ac4 --- /dev/null +++ b/src/periphery/types.cairo @@ -0,0 +1,36 @@ +use starknet::ContractAddress; +use wadray::{Ray, Wad}; + + +#[derive(Copy, Debug, Drop, Serde)] +pub struct YinInfo { + pub yin_spot_price: Wad, // Spot price of yin + pub yin_total_supply: Wad, // Total supply of yin + pub yin_ceiling: Wad, // Maximum amount of yin allowed +} + +#[derive(Copy, Debug, Drop, Serde)] +pub struct RecoveryModeInfo { + pub is_recovery_mode: bool, + pub target_ltv: Ray, // Recovery mode is triggered once Shrine's LTV exceeds this + pub buffer_ltv: Ray, // Thresholds are scaled once Shrine's LTV exceeds this +} + +#[derive(Copy, Debug, Drop, Serde)] +pub struct TroveAssetInfo { + pub shrine_asset_info: ShrineAssetInfo, + pub amount: u128, // Amount of the yang's asset in the asset's decimals for the trove + pub value: Wad, // Value of the yang in the trove +} + +#[derive(Copy, Debug, Drop, Serde)] +pub struct ShrineAssetInfo { + pub address: ContractAddress, // Address of the yang's ERC-20 asset + pub price: Wad, // Price of the yang's asset + pub threshold: Ray, // Base threshold of the yang + pub base_rate: Ray, // Base rate of the yang + pub deposited: u128, // Amount of yang's asset in the asset's decimals deposited in Shrine + pub ceiling: u128, // Maximum amount of yang's asset in Shrine + pub deposited_value: Wad // Value of yang deposited in Shrine +} + diff --git a/src/types.cairo b/src/types.cairo index 7032d96b2..3aa951723 100644 --- a/src/types.cairo +++ b/src/types.cairo @@ -212,40 +212,3 @@ pub mod pragma { pub sources: u32, } } - -// -// Periphery - Frontend Data Provider -// - -#[derive(Copy, Debug, Drop, Serde)] -pub struct YinInfo { - pub yin_spot_price: Wad, // Spot price of yin - pub yin_total_supply: Wad, // Total supply of yin - pub yin_ceiling: Wad, // Maximum amount of yin allowed -} - -#[derive(Copy, Debug, Drop, Serde)] -pub struct RecoveryModeInfo { - pub is_recovery_mode: bool, - pub target_ltv: Ray, // Recovery mode is triggered once Shrine's LTV exceeds this - pub buffer_ltv: Ray, // Thresholds are scaled once Shrine's LTV exceeds this -} - -#[derive(Copy, Debug, Drop, Serde)] -pub struct TroveAssetInfo { - pub shrine_asset_info: ShrineAssetInfo, - pub amount: u128, // Amount of the yang's asset in the asset's decimals for the trove - pub value: Wad, // Value of the yang in the trove -} - -#[derive(Copy, Debug, Drop, Serde)] -pub struct ShrineAssetInfo { - pub address: ContractAddress, // Address of the yang's ERC-20 asset - pub price: Wad, // Price of the yang's asset - pub threshold: Ray, // Base threshold of the yang - pub base_rate: Ray, // Base rate of the yang - pub deposited: u128, // Amount of yang's asset in the asset's decimals deposited in Shrine - pub ceiling: u128, // Maximum amount of yang's asset in Shrine - pub deposited_value: Wad // Value of yang deposited in Shrine -} - From 98a420e8c4d120cdf7cc3cc1e64b26f78bdb8c9b Mon Sep 17 00:00:00 2001 From: tserg <8017125+tserg@users.noreply.github.com> Date: Fri, 3 May 2024 14:42:21 +0800 Subject: [PATCH 12/20] add to deployment script --- scripts/deploy/Scarb.toml | 1 + scripts/deploy/src/deploy_devnet.cairo | 7 +++++ scripts/deploy/src/lib.cairo | 1 + scripts/deploy/src/periphery_deployment.cairo | 29 +++++++++++++++++++ 4 files changed, 38 insertions(+) create mode 100644 scripts/deploy/src/periphery_deployment.cairo diff --git a/scripts/deploy/Scarb.toml b/scripts/deploy/Scarb.toml index 6ad20bea9..856872082 100644 --- a/scripts/deploy/Scarb.toml +++ b/scripts/deploy/Scarb.toml @@ -35,6 +35,7 @@ build-external-contracts = [ "opus::mock::erc20_mintable::erc20_mintable", "opus::mock::mock_pragma::mock_pragma", "opus::mock::mock_switchboard::mock_switchboard", + "opus::periphery::frontend_data_provider::frontend_data_provider", ] [scripts] diff --git a/scripts/deploy/src/deploy_devnet.cairo b/scripts/deploy/src/deploy_devnet.cairo index 53f8c45d6..4ff79ee48 100644 --- a/scripts/deploy/src/deploy_devnet.cairo +++ b/scripts/deploy/src/deploy_devnet.cairo @@ -3,6 +3,7 @@ use deployment::constants; use deployment::core_deployment; use deployment::mock_deployment; use deployment::mock_utils; +use deployment::periphery_deployment; use deployment::utils; use opus::constants::{ETH_USD_PAIR_ID, PRAGMA_DECIMALS, STRK_USD_PAIR_ID, WBTC_DECIMALS, WBTC_USD_PAIR_ID}; use opus::core::roles::{absorber_roles, sentinel_roles, seer_roles, shrine_roles}; @@ -174,6 +175,11 @@ fn main() { utils::set_yang_pair_id_for_oracle(switchboard, wbtc, WBTC_USD_PAIR_ID); utils::set_yang_pair_id_for_oracle(switchboard, strk, STRK_USD_PAIR_ID); + // Peripheral deployment + let frontend_data_provider: ContractAddress = periphery_deployment::deploy_frontend_data_provider( + admin, shrine, sentinel + ); + // Print summary table of deployed contracts println!("-------------------------------------------------\n"); println!("Deployed addresses"); @@ -184,6 +190,7 @@ fn main() { println!("Controller: {}", controller); println!("Equalizer: {}", equalizer); println!("Flash Mint: {}", flash_mint); + println!("Frontend Data Provider: {}", frontend_data_provider); println!("Gate[ETH]: {}", eth_gate); println!("Gate[STRK]: {}", strk_gate); println!("Gate[WBTC]: {}", wbtc_gate); diff --git a/scripts/deploy/src/lib.cairo b/scripts/deploy/src/lib.cairo index 8346af562..50e2c3b2a 100644 --- a/scripts/deploy/src/lib.cairo +++ b/scripts/deploy/src/lib.cairo @@ -4,4 +4,5 @@ mod deploy_devnet; mod deploy_sepolia; pub mod mock_deployment; pub mod mock_utils; +pub mod periphery_deployment; pub mod utils; diff --git a/scripts/deploy/src/periphery_deployment.cairo b/scripts/deploy/src/periphery_deployment.cairo new file mode 100644 index 000000000..e8fb4ae0d --- /dev/null +++ b/scripts/deploy/src/periphery_deployment.cairo @@ -0,0 +1,29 @@ +use deployment::constants::MAX_FEE; +use sncast_std::{ + declare, DeclareResult, deploy, DeployResult, DisplayClassHash, DisplayContractAddress, invoke, InvokeResult, + ScriptCommandError +}; +use starknet::{ClassHash, ContractAddress}; + +// +// Deployment helpers +// + +pub fn deploy_frontend_data_provider( + admin: ContractAddress, shrine: ContractAddress, sentinel: ContractAddress +) -> ContractAddress { + let declare_frontend_data_provider = declare("frontend_data_provider", Option::Some(MAX_FEE), Option::None) + .expect('failed FDP declare'); + let frontend_data_provider_calldata: Array = array![admin.into(), shrine.into(), sentinel.into()]; + let deploy_frontend_data_provider = deploy( + declare_frontend_data_provider.class_hash, + frontend_data_provider_calldata, + Option::None, + true, + Option::Some(MAX_FEE), + Option::None + ) + .expect('failed FDP deploy'); + + deploy_frontend_data_provider.contract_address +} From 00b725fa7fba2fc5a67521f5f0aa771660648bfa Mon Sep 17 00:00:00 2001 From: tserg <8017125+tserg@users.noreply.github.com> Date: Fri, 3 May 2024 14:42:41 +0800 Subject: [PATCH 13/20] fix admin in ctor --- src/periphery/frontend_data_provider.cairo | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/periphery/frontend_data_provider.cairo b/src/periphery/frontend_data_provider.cairo index 02fa75dfc..3185512a3 100644 --- a/src/periphery/frontend_data_provider.cairo +++ b/src/periphery/frontend_data_provider.cairo @@ -58,7 +58,10 @@ pub mod frontend_data_provider { // #[constructor] - fn constructor(ref self: ContractState, shrine: ContractAddress, sentinel: ContractAddress) { + fn constructor( + ref self: ContractState, admin: ContractAddress, shrine: ContractAddress, sentinel: ContractAddress + ) { + self.access_control.initializer(admin, Option::Some(frontend_data_provider_roles::default_admin_role())); self.shrine.write(IShrineDispatcher { contract_address: shrine }); self.sentinel.write(ISentinelDispatcher { contract_address: sentinel }); } From 3156acb19eeed7a4e6a9326244e303cfdc230661 Mon Sep 17 00:00:00 2001 From: tserg <8017125+tserg@users.noreply.github.com> Date: Fri, 3 May 2024 14:44:29 +0800 Subject: [PATCH 14/20] update scripts --- scripts/deploy/src/deploy_devnet.cairo | 7 +------ scripts/deploy/src/deploy_sepolia.cairo | 8 +++++++- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/scripts/deploy/src/deploy_devnet.cairo b/scripts/deploy/src/deploy_devnet.cairo index 4ff79ee48..b65151faa 100644 --- a/scripts/deploy/src/deploy_devnet.cairo +++ b/scripts/deploy/src/deploy_devnet.cairo @@ -1,10 +1,5 @@ use deployment::constants::{MAX_FEE, SALT}; -use deployment::constants; -use deployment::core_deployment; -use deployment::mock_deployment; -use deployment::mock_utils; -use deployment::periphery_deployment; -use deployment::utils; +use deployment::{constants, core_deployment, mock_deployment, mock_utils, periphery_deployment, utils}; use opus::constants::{ETH_USD_PAIR_ID, PRAGMA_DECIMALS, STRK_USD_PAIR_ID, WBTC_DECIMALS, WBTC_USD_PAIR_ID}; use opus::core::roles::{absorber_roles, sentinel_roles, seer_roles, shrine_roles}; use opus::utils::math::wad_to_fixed_point; diff --git a/scripts/deploy/src/deploy_sepolia.cairo b/scripts/deploy/src/deploy_sepolia.cairo index e334795fa..761a3e03d 100644 --- a/scripts/deploy/src/deploy_sepolia.cairo +++ b/scripts/deploy/src/deploy_sepolia.cairo @@ -1,5 +1,5 @@ use deployment::constants::MAX_FEE; -use deployment::{constants, core_deployment, utils}; +use deployment::{constants, core_deployment, periphery_deployment, utils}; use opus::constants::{ETH_USD_PAIR_ID, STRK_USD_PAIR_ID}; use opus::core::roles; use sncast_std::{ @@ -112,6 +112,11 @@ fn main() { utils::set_yang_pair_id_for_oracle(pragma, eth, ETH_USD_PAIR_ID); utils::set_yang_pair_id_for_oracle(pragma, strk, STRK_USD_PAIR_ID); + // Peripheral deployment + let frontend_data_provider: ContractAddress = periphery_deployment::deploy_frontend_data_provider( + admin, shrine, sentinel + ); + println!("-------------------------------------------------\n"); println!("Abbot: {}", abbot); println!("Absorber: {}", absorber); @@ -120,6 +125,7 @@ fn main() { println!("Controller: {}", controller); println!("Equalizer: {}", equalizer); println!("Flash Mint: {}", flash_mint); + println!("Frontend Data Provider: {}", frontend_data_provider); println!("Gate[ETH]: {}", eth_gate); println!("Gate[STRK]: {}", strk_gate); println!("Pragma: {}", pragma); From 7203e838919426cdd232167c893b5e00f3f9313b Mon Sep 17 00:00:00 2001 From: tserg <8017125+tserg@users.noreply.github.com> Date: Mon, 6 May 2024 22:09:02 +0800 Subject: [PATCH 15/20] apply mc suggestions --- src/periphery/frontend_data_provider.cairo | 18 +++++++++--------- src/periphery/types.cairo | 6 +++--- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/periphery/frontend_data_provider.cairo b/src/periphery/frontend_data_provider.cairo index 3185512a3..004b26862 100644 --- a/src/periphery/frontend_data_provider.cairo +++ b/src/periphery/frontend_data_provider.cairo @@ -88,9 +88,9 @@ pub mod frontend_data_provider { let shrine: IShrineDispatcher = self.shrine.read(); YinInfo { - yin_spot_price: shrine.get_yin_spot_price(), - yin_total_supply: shrine.get_total_yin(), - yin_ceiling: shrine.get_debt_ceiling(), + spot_price: shrine.get_yin_spot_price(), + total_supply: shrine.get_total_yin(), + ceiling: shrine.get_debt_ceiling(), } } @@ -116,7 +116,7 @@ pub mod frontend_data_provider { assert(trove_yang_balances.len() == yang_addresses.len(), 'FDP: Length mismatch'); - let mut yang_infos: Array = ArrayTrait::new(); + let mut asset_infos: Array = ArrayTrait::new(); let current_rate_era: u64 = shrine.get_current_rate_era(); loop { match trove_yang_balances.pop_front() { @@ -133,9 +133,9 @@ pub mod frontend_data_provider { let trove_yang_info = TroveAssetInfo { shrine_asset_info, amount: asset_amt, value: *yang_balance.amount * yang_price, }; - yang_infos.append(trove_yang_info); + asset_infos.append(trove_yang_info); }, - Option::None => { break yang_infos.span(); } + Option::None => { break asset_infos.span(); } } } } @@ -150,7 +150,7 @@ pub mod frontend_data_provider { assert(shrine_yang_balances.len() == yang_addresses.len(), 'FDP: Length mismatch'); - let mut yang_infos: Array = ArrayTrait::new(); + let mut asset_infos: Array = ArrayTrait::new(); let current_rate_era: u64 = shrine.get_current_rate_era(); loop { match shrine_yang_balances.pop_front() { @@ -162,9 +162,9 @@ pub mod frontend_data_provider { .get_shrine_yang_info_helper( shrine, sentinel, yang, *yang_balance.amount, current_rate_era ); - yang_infos.append(shrine_yang_info); + asset_infos.append(shrine_yang_info); }, - Option::None => { break yang_infos.span(); } + Option::None => { break asset_infos.span(); } } } } diff --git a/src/periphery/types.cairo b/src/periphery/types.cairo index d8f990ac4..68cbda8bb 100644 --- a/src/periphery/types.cairo +++ b/src/periphery/types.cairo @@ -4,9 +4,9 @@ use wadray::{Ray, Wad}; #[derive(Copy, Debug, Drop, Serde)] pub struct YinInfo { - pub yin_spot_price: Wad, // Spot price of yin - pub yin_total_supply: Wad, // Total supply of yin - pub yin_ceiling: Wad, // Maximum amount of yin allowed + pub spot_price: Wad, // Spot price of yin + pub total_supply: Wad, // Total supply of yin + pub ceiling: Wad, // Maximum amount of yin allowed } #[derive(Copy, Debug, Drop, Serde)] From 2997f5f0887be3aca523da852f29d1c2987019a0 Mon Sep 17 00:00:00 2001 From: tserg <8017125+tserg@users.noreply.github.com> Date: Tue, 7 May 2024 12:13:44 +0800 Subject: [PATCH 16/20] add print --- scripts/deploy/src/deploy_devnet.cairo | 1 + scripts/deploy/src/deploy_sepolia.cairo | 1 + 2 files changed, 2 insertions(+) diff --git a/scripts/deploy/src/deploy_devnet.cairo b/scripts/deploy/src/deploy_devnet.cairo index b65151faa..db2dc8c23 100644 --- a/scripts/deploy/src/deploy_devnet.cairo +++ b/scripts/deploy/src/deploy_devnet.cairo @@ -171,6 +171,7 @@ fn main() { utils::set_yang_pair_id_for_oracle(switchboard, strk, STRK_USD_PAIR_ID); // Peripheral deployment + println!("Deploying periphery contracts"); let frontend_data_provider: ContractAddress = periphery_deployment::deploy_frontend_data_provider( admin, shrine, sentinel ); diff --git a/scripts/deploy/src/deploy_sepolia.cairo b/scripts/deploy/src/deploy_sepolia.cairo index 761a3e03d..495d8de4a 100644 --- a/scripts/deploy/src/deploy_sepolia.cairo +++ b/scripts/deploy/src/deploy_sepolia.cairo @@ -113,6 +113,7 @@ fn main() { utils::set_yang_pair_id_for_oracle(pragma, strk, STRK_USD_PAIR_ID); // Peripheral deployment + println!("Deploying periphery contracts"); let frontend_data_provider: ContractAddress = periphery_deployment::deploy_frontend_data_provider( admin, shrine, sentinel ); From 436647463c0f8d4ab61cf058617b081323f3f256 Mon Sep 17 00:00:00 2001 From: tserg <8017125+tserg@users.noreply.github.com> Date: Tue, 7 May 2024 12:14:03 +0800 Subject: [PATCH 17/20] add sepolia deployment --- README.md | 1 + .../deploy_sepolia_alpha-sepolia_state.json | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/README.md b/README.md index e1d7feccd..6921ecd2e 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,7 @@ Note that Devnet deployments are ephemeral. Once you kill your Devnet instance, | Controller | `0x3297c2080d6c565055ca1c7695b9b6e458600515ebd76101ec4221bcea877ce` | | Equalizer | `0x43d5cd32847304e168fca09feef5620aaf7c3a0e6fa1689416541be95d8d183` | | Flash Mint | `0x2c6c7acedfbb6607ecc33cd6b2134f3dea2f16998b44219067063ae4ccb6e42` | +| Frontend Data Provider | `0x6b5a9c82979978e0fa2584422f2048f9c3f2fed04e82cba9f435f9c5b66195a` | | Gate[ETH] | `0x20ee25588aa6225c58a55110fc5f5b983d074d4ed5b1d98788825a9d3305ac0` | | Gate[STRK] | `0x594f653061a2181514fad04dc005f7eb8210786a45b577f416029e0ffb01cd7` | | Pragma | `0x71415935245134eaa125de2df12772443726d5a149a4995f60208c28653a54f` | diff --git a/scripts/deploy/deploy_sepolia_alpha-sepolia_state.json b/scripts/deploy/deploy_sepolia_alpha-sepolia_state.json index 9f9cb4a96..bb332c81f 100644 --- a/scripts/deploy/deploy_sepolia_alpha-sepolia_state.json +++ b/scripts/deploy/deploy_sepolia_alpha-sepolia_state.json @@ -528,6 +528,29 @@ "status": "Success", "timestamp": 1714623104, "misc": null + }, + "a0c6d143f2f8ba10d8a5038653c8a128ad9a3a78d91cebc698d9b128ee8ac67f": { + "name": "declare", + "output": { + "type": "DeclareResponse", + "class_hash": "0xcf41883647354a7b73b19ff51c4613a2f084124b75bea0f4dad33329c2ae63", + "transaction_hash": "0x7000aa72f175dd2e396443d0ef08a04e512f1a684f4d5ad5115c451c5872411" + }, + "status": "Success", + "timestamp": 1715052833, + "misc": null + }, + + "d26a9e3e01718f030181958dad59ccac02f3c8ec27500daf0930b264cb619fe0": { + "name": "deploy", + "output": { + "type": "DeployResponse", + "contract_address": "0x6b5a9c82979978e0fa2584422f2048f9c3f2fed04e82cba9f435f9c5b66195a", + "transaction_hash": "0x7fe2f9045ab9d9b84377722b6e9766907b34799891fb44518ea72098203e622" + }, + "status": "Success", + "timestamp": 1715054721, + "misc": null } } } From 4012653be0b130ec5bad76b12527e09fcd60d388 Mon Sep 17 00:00:00 2001 From: tserg <8017125+tserg@users.noreply.github.com> Date: Tue, 7 May 2024 22:32:24 +0800 Subject: [PATCH 18/20] modify deploy script --- scripts/deploy/src/constants.cairo | 2 +- scripts/deploy/src/deploy_sepolia.cairo | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/deploy/src/constants.cairo b/scripts/deploy/src/constants.cairo index 7f96aabdf..fee9d5b3a 100644 --- a/scripts/deploy/src/constants.cairo +++ b/scripts/deploy/src/constants.cairo @@ -1,7 +1,7 @@ use starknet::{ClassHash, ContractAddress}; // Constants for deployment -pub const MAX_FEE: felt252 = 999999999999999; +pub const MAX_FEE: felt252 = 9999999999999999; pub const SALT: felt252 = 0x3; // Constants for Shrine diff --git a/scripts/deploy/src/deploy_sepolia.cairo b/scripts/deploy/src/deploy_sepolia.cairo index 495d8de4a..ada80d748 100644 --- a/scripts/deploy/src/deploy_sepolia.cairo +++ b/scripts/deploy/src/deploy_sepolia.cairo @@ -13,7 +13,7 @@ fn main() { println!("Deploying core contracts"); //let shrine: ContractAddress = core_deployment::deploy_shrine(admin); - let shrine: ContractAddress = 0x4b3bfe81472b5a01dc3c1fba3456bb0979852deaca43da49d406189371d09e6.try_into().unwrap(); + let shrine: ContractAddress = core_deployment::deploy_shrine(admin); let flash_mint: ContractAddress = core_deployment::deploy_flash_mint(shrine); let sentinel: ContractAddress = core_deployment::deploy_sentinel(admin, shrine); let seer: ContractAddress = core_deployment::deploy_seer(admin, shrine, sentinel); From 17ccdf26d3f5ce4f73e674eccbaf0f54fe040270 Mon Sep 17 00:00:00 2001 From: tserg <8017125+tserg@users.noreply.github.com> Date: Tue, 7 May 2024 22:33:26 +0800 Subject: [PATCH 19/20] update state file and sepolia addresses --- README.md | 30 +- .../deploy_sepolia_alpha-sepolia_state.json | 479 +++++++++--------- 2 files changed, 254 insertions(+), 255 deletions(-) diff --git a/README.md b/README.md index 6921ecd2e..021da0f67 100644 --- a/README.md +++ b/README.md @@ -22,18 +22,18 @@ Note that Devnet deployments are ephemeral. Once you kill your Devnet instance, | Module | Address | | ------ | --------| -| Abbot | `0x6352de997a7fde3bc733675180e843b5fe585b7ef464a2987a76fae454af78d` | -| Absorber | `0x48deaee30965a88184619f8b3b30b805727654468ae9b42b483a84831b9e5ea` | -| Allocator | `0xa7b142b8937cb31507fe598252d44a516f2bc64eb285f1807163461d6c208e` | -| Caretaker | `0xeab066a1083f32ff92e3ac9696dc847928fa0f4035bda93dacc34df1cef604` | -| Controller | `0x3297c2080d6c565055ca1c7695b9b6e458600515ebd76101ec4221bcea877ce` | -| Equalizer | `0x43d5cd32847304e168fca09feef5620aaf7c3a0e6fa1689416541be95d8d183` | -| Flash Mint | `0x2c6c7acedfbb6607ecc33cd6b2134f3dea2f16998b44219067063ae4ccb6e42` | -| Frontend Data Provider | `0x6b5a9c82979978e0fa2584422f2048f9c3f2fed04e82cba9f435f9c5b66195a` | -| Gate[ETH] | `0x20ee25588aa6225c58a55110fc5f5b983d074d4ed5b1d98788825a9d3305ac0` | -| Gate[STRK] | `0x594f653061a2181514fad04dc005f7eb8210786a45b577f416029e0ffb01cd7` | -| Pragma | `0x71415935245134eaa125de2df12772443726d5a149a4995f60208c28653a54f` | -| Purger | `0x67f57eec3ce8ba9781985cafcb774283d6450662906691b65d882e13dc59934` | -| Seer | `0x14dac867b21b5b6645cc046e0125cca8e81e8dd9d95ca5dd8e756fa053a2984` | -| Sentinel | `0x2f1778912ef186e2434dfe0957e00ed2122dd48f3aa2e8bc46173fd67bdd065` | -| Shrine | `0x4b3bfe81472b5a01dc3c1fba3456bb0979852deaca43da49d406189371d09e6` | +| Abbot | `0x55753ea07d7c53b0d512dd14aa1fb536b02efc179907905610619eecaac1e97` | +| Absorber | `0x32e5f6bfc937e239e9f1c7c2c30f0d8ce59d7d703d82bc69382b4d2b0be1e4e` | +| Allocator | `0x470ad58d601501eab46479e69c0d9367e2b429aca88a1775114e3b074b2117b` | +| Caretaker | `0x1461305951ac7fb7af835a9a19b99ae5e135ba1fb64477d4b92a871fb85a2b1` | +| Controller | `0x5c4d4b9ce7f54dc50354b99dfca29c3ba3935501e5244e048fa87b83043ddc2` | +| Equalizer | `0x54b46ed341533fe4da0116f27e201276165e3a3fd030ac391b6e9967668996d` | +| Flash Mint | `0x6f1577c508f95e633d22eaa65c5781442651336d30a95ba149a80fd85db29bc` | +| Frontend Data Provider | `0x6f7cf629552047a337324712571068b3f8f2deddcc0454533596ef5dfa192d` | +| Gate[ETH] | `0x23dbc80de342f86f2b33b27d5593c259809961d9ecbd9f69b7088babba1016f` | +| Gate[STRK] | `0x2918116ed1154cfe378eaefa5ee83914c9bed787815cdb5a82d25185737dad` | +| Pragma | `0xa163eb702f1cba67680cb67a2ad018dd6d349b76ebc9d85102a83857948304` | +| Purger | `0x1e188c4223245660e692e7f0b9834d11687cec5aa37da0889cbe2e2e2743c28` | +| Seer | `0x1ba77782ba5dea67bcf4f71c2b98849b598d030df02952bf8f62e3eb6b5b192` | +| Sentinel | `0x255e43013fd414520d27a0491c64aa03705e6f728999d0ceb44e395ac5c9c1d` | +| Shrine | `0x7d2a06078ee45540e9507a0daf01ac94f0550b675958dda88cbbc6fc8993708` | diff --git a/scripts/deploy/deploy_sepolia_alpha-sepolia_state.json b/scripts/deploy/deploy_sepolia_alpha-sepolia_state.json index bb332c81f..43d83daf6 100644 --- a/scripts/deploy/deploy_sepolia_alpha-sepolia_state.json +++ b/scripts/deploy/deploy_sepolia_alpha-sepolia_state.json @@ -2,298 +2,290 @@ "version": 1, "transactions": { "transactions": { - "672716b767bf77c3d8d32d49bc395827201b5e39e837cc8e73d12574ec6abf3c": { + "590468097c3c7ae35ceca740e7d51fc2fd28ae1cca6ea6793b5b7129b2cda758": { "name": "declare", "output": { "type": "DeclareResponse", - "class_hash": "0x254e9a76a6d1823abf86b7c5810b4f5bcd83ddb513bd003c5fb1c7747128f5e", - "transaction_hash": "0xd7f6978b909e780025d69d0fad1e7bcd1bc729fca45e3adf24e025612353e8" - }, - "status": "Success", - "timestamp": 1713355931, - "misc": null - }, - "130c2d3876286111a091882d78b57bafd505831537efb8fd3ce9f7f6dda165cb": { - "name": "invoke", - "output": { - "type": "InvokeResponse", - "transaction_hash": "0x153514a06405148f02949764c95239d5ff0fd04366c62f34943d010e879f94" + "class_hash": "0x6264182dffc615e1ceb983f944a6e58b69c50c6c152fc8d5161afdec979256c", + "transaction_hash": "0x58c295605f169ca636b3fa636c3379efe1ff3679c84941be290ae633dda1d73" }, "status": "Success", - "timestamp": 1713435351, + "timestamp": 1713363989, "misc": null }, - "dd41c47640601d43f25990b718d0f0e49e032659237a9340a09f8c46dcae329a": { - "name": "declare", + "2629b50d1bb6cd4b0910207957e0c856a27b98f81305800d85dc66f737012858": { + "name": "deploy", "output": { - "type": "DeclareResponse", - "class_hash": "0x59f96128a0028d997436de056ccbaee279ceeb8308dba48704a944f07f549ef", - "transaction_hash": "0x2886f11ab4e8b83ecf5b70a3ac3356f9f80ce79ff0f0edc35c93756d056311c" + "type": "DeployResponse", + "contract_address": "0x1461305951ac7fb7af835a9a19b99ae5e135ba1fb64477d4b92a871fb85a2b1", + "transaction_hash": "0x100df4cdda7b1585e3c0b442504d7bdecb999c60b93cdac199142177e9fd428" }, "status": "Success", - "timestamp": 1713280889, + "timestamp": 1715090611, "misc": null }, - "99c844f1f239fc6d3a56473a1af36a59a59aed012b457056578b0972288b16d7": { + "672716b767bf77c3d8d32d49bc395827201b5e39e837cc8e73d12574ec6abf3c": { "name": "declare", "output": { "type": "DeclareResponse", - "class_hash": "0x7d17157480d3f859f63c1a4608d05b7ac198702f56d78291c5673b58961c577", - "transaction_hash": "0x7e846312c321c9190298f8d05f769b5309b92b9068d9fda3265fbeff433e05c" - }, - "status": "Success", - "timestamp": 1713355915, - "misc": null - }, - "f8d08132334abb17221bd38782ab5084d5258d5166e06768916a470d6626a6ae": { - "name": "invoke", - "output": { - "type": "InvokeResponse", - "transaction_hash": "0x1485672fd5f4a79e455f7cb56ebb6dd97a1ac12dbc3372f0108ba715740b314" + "class_hash": "0x254e9a76a6d1823abf86b7c5810b4f5bcd83ddb513bd003c5fb1c7747128f5e", + "transaction_hash": "0xd7f6978b909e780025d69d0fad1e7bcd1bc729fca45e3adf24e025612353e8" }, "status": "Success", - "timestamp": 1713433100, + "timestamp": 1713355931, "misc": null }, - "906724d17758727ccff27d143fd27b4aa200bcd94f5ad87c59d482efc3f7f980": { + "0b59dbfa449f0220724f6f9a439adb6a232c214889a87750fc046f4a4c8c7248": { "name": "declare", "output": { "type": "DeclareResponse", - "class_hash": "0x1209806ce6bc5460848db5da2e9e8ac9e9e79b528c0c71e9a1cbb108b1ba42e", - "transaction_hash": "0x1961fdde4e26dfa647644357199f179caa1b20fc5f68801a9ebde4de84df5ac" + "class_hash": "0x6610d366e50e22faaec547d9422e60fef572660ce619ccf5c54d2ef547c9665", + "transaction_hash": "0x5bee1c596a801a9fcae3318fd13c3ef49724aa32ad1e7d8421b62917d54dce" }, "status": "Success", - "timestamp": 1713364996, + "timestamp": 1713364003, "misc": null }, - "433d3ee88b65037cf06fb91c3c9e8563f955741ee4fe5e537b0c2b017a1048df": { - "name": "invoke", + "ff25df488156fe1f3cc18038ebc977ef6fa92e5898dade16860ecc39f50c0b43": { + "name": "deploy", "output": { - "type": "InvokeResponse", - "transaction_hash": "0x4c388b93e419da08a2c8c9897700215d70fd5b590e17e67f85622fa013c81f9" + "type": "DeployResponse", + "contract_address": "0x32e5f6bfc937e239e9f1c7c2c30f0d8ce59d7d703d82bc69382b4d2b0be1e4e", + "transaction_hash": "0x4d670dcbb3b7d7a26d4c31614de917d1fa10dd9101afdc7148c52fc05311738" }, "status": "Success", - "timestamp": 1713433087, + "timestamp": 1715090586, "misc": null }, - "2c0f6b42cc23cb96cb07ac70465b71c4d16924e8c7e2e622e0b514aec57e3f25": { + "c241d3d17509a4149661fed49af585e1df25dc95b702c6dcc05f5d3d5a2f5b2a": { "name": "invoke", "output": { "type": "InvokeResponse", - "transaction_hash": "0x96508b708e25247e8c65ef9ac8bb65d1adfa92a9d6bfb395f7f8b88cda49da" + "transaction_hash": "0x3dbd7a854c570c00546c89e7f262e804842f2eb524ea61a069867c73c8999d6" }, "status": "Success", - "timestamp": 1713433018, + "timestamp": 1715092126, "misc": null }, - "ab07556e3639f1e3877800dc224ff0710c7c40392f5d409e5619cc277e1870de": { + "a7176d040a1e285c747e860bd7b19f182408186e434362a887d96255b1c9d7b7": { "name": "deploy", "output": { "type": "DeployResponse", - "contract_address": "0x6352de997a7fde3bc733675180e843b5fe585b7ef464a2987a76fae454af78d", - "transaction_hash": "0x1e0e05946a121056859de983c54a4338a389d868538711d1f25ef24e112b5b0" + "contract_address": "0x2918116ed1154cfe378eaefa5ee83914c9bed787815cdb5a82d25185737dad", + "transaction_hash": "0x67e2c3d507cd9810fc739b11b8f939cf6b17f31014125fe61daa950d74a1c94" }, "status": "Success", - "timestamp": 1713355921, + "timestamp": 1715090630, "misc": null }, - "d41337fc230f61eec2dd63997056d3903d4c31062dbbaee8d5a108792b36d85d": { + "cc9cd35c3009845371bb83e6cfda8fa6bc42001012ae3ff88a856e0b2c4d8d1d": { "name": "deploy", "output": { "type": "DeployResponse", - "contract_address": "0x2f1778912ef186e2434dfe0957e00ed2122dd48f3aa2e8bc46173fd67bdd065", - "transaction_hash": "0x67b001ac0bd56e9fe6abc7aecf9f1625d53739686c82bec65352cb2168e3ee" + "contract_address": "0x470ad58d601501eab46479e69c0d9367e2b429aca88a1775114e3b074b2117b", + "transaction_hash": "0x47628e2ea1d190269bf59a206c19dbcb0e965cc36f67a9eb559e13bad07284a" }, "status": "Success", - "timestamp": 1713355893, + "timestamp": 1715090599, "misc": null }, - "19045b7533a8feb631b724103299fe7ac3beea5cf01a0a6823de7a4fbcee6d0e": { - "name": "deploy", + "1f454045d025e1e7bc6ed9c96e7dd14304de187441a481a1b85ba9b96166f0ae": { + "name": "invoke", "output": { - "type": "DeployResponse", - "contract_address": "0x67f57eec3ce8ba9781985cafcb774283d6450662906691b65d882e13dc59934", - "transaction_hash": "0x4fbdf22582c27b488778cb7c5345a772362370dd0cd4be203041a365e7611f7" + "type": "InvokeResponse", + "transaction_hash": "0x2798a2819c2c9adb04e3951c984b4549c564c0b930701b4b4a2134e71170a08" }, "status": "Success", - "timestamp": 1713355952, + "timestamp": 1715091708, "misc": null }, - "76bfa9c9f3dfade656b49d2d274ea2504a55954c69a7a7cb902a76787fb5b33d": { + "078af5ddda2a4cced6a879bbe1430a4c5a34dc7d74878c8e639e02e565fef2cd": { "name": "invoke", "output": { "type": "InvokeResponse", - "transaction_hash": "0x222c84ba34d01e164f8f4aa4494a1cefc05940d72b911394d228a8b9c2c4574" + "transaction_hash": "0x1fa459b47e42d42403ed24c2ea6088f5cb3b14a0ada900fdbb31b44ac90dcb6" }, "status": "Success", - "timestamp": 1713433093, + "timestamp": 1715090679, "misc": null }, - "eba955446c7f9eb7da1771c25f223a9ef27bbed88d7efc08136e4f7e498e2a08": { + "906724d17758727ccff27d143fd27b4aa200bcd94f5ad87c59d482efc3f7f980": { "name": "declare", "output": { "type": "DeclareResponse", - "class_hash": "0xce68b83ddd51fcfb3b6eaf25e4d8eea63cc9373618d1b5a1f6909cf211d78", - "transaction_hash": "0x235ff10d619fbdb2374273437802548631f8deb6c7988362dc1951f6953213e" + "class_hash": "0x1209806ce6bc5460848db5da2e9e8ac9e9e79b528c0c71e9a1cbb108b1ba42e", + "transaction_hash": "0x1961fdde4e26dfa647644357199f179caa1b20fc5f68801a9ebde4de84df5ac" }, "status": "Success", - "timestamp": 1713355974, + "timestamp": 1713364996, "misc": null }, - "e1ce68c49048946426271a365518255162c48e617f0109f2cd735b71807da324": { + "1f49f82c25190c04766fef1b038fdf756fa0f17ca8d66b713fea4bd6504f30e7": { "name": "invoke", "output": { "type": "InvokeResponse", - "transaction_hash": "0x5943f066c7dc76589c8f0221c16382b3c3badb0fea783cfd6049ca6a41c6d06" + "transaction_hash": "0x557c9d2e0739f1fb0d3a32505aa6977fb4ed0c33ba2119c504596babf8182ac" }, "status": "Success", - "timestamp": 1713434215, + "timestamp": 1715092056, "misc": null }, - "0e2b6907e29db2d30ee7e78fef850044502b6d36b903d3036c493a4d0f456434": { + "52d1eb667c40e3b5cc63acf33e5ed8dea61c51297d94320c0a5cfa32b05d8f7f": { "name": "deploy", "output": { "type": "DeployResponse", - "contract_address": "0x20ee25588aa6225c58a55110fc5f5b983d074d4ed5b1d98788825a9d3305ac0", - "transaction_hash": "0x1c8a21c164b82016b2ed0a9d1a2f8f85817aff3da59eb02dd2c161bcc7fa007" + "contract_address": "0x6f7cf629552047a337324712571068b3f8f2deddcc0454533596ef5dfa192d", + "transaction_hash": "0x1ac740976f47bea6e6ce4b8782fbd9a7522d765c297dbe9a7b00678aa6a84a7" }, "status": "Success", - "timestamp": 1713364009, + "timestamp": 1715092138, "misc": null }, - "19ecb2b5d40cf6b2e1b3f2a97f92bb71cf19842be0d5ef6d3a572ab0167da663": { - "name": "declare", + "6fef334cc5e893160b81fce56bc931f2009bc22b4f2ffef9567af5963823fd8a": { + "name": "deploy", "output": { - "type": "DeclareResponse", - "class_hash": "0x180bc88b3fcb18e158fa4708779bfa4323557fde86d0dc287bad827b600247d", - "transaction_hash": "0x2221c92fa8aec039855dee74cf2f8498247d7d8db99d4cc5a0edf4bbfbbb2b9" + "type": "DeployResponse", + "contract_address": "0xa163eb702f1cba67680cb67a2ad018dd6d349b76ebc9d85102a83857948304", + "transaction_hash": "0x6323cfb99036c2bbf0baf4749428b2c53cb37e5d40ef35eeb727fee9f2898a8" }, "status": "Success", - "timestamp": 1713355887, + "timestamp": 1715090635, "misc": null }, - "ff98b6e386b0a1cf2f236d1139a341846690c81853bf14baa1c89650badc3e0a": { + "f2ebdd9abfe936f2f693ef932da0959db0731985b1462c87e169a554258fe5fd": { "name": "deploy", "output": { "type": "DeployResponse", - "contract_address": "0xeab066a1083f32ff92e3ac9696dc847928fa0f4035bda93dacc34df1cef604", - "transaction_hash": "0x6ff1e0160603cf890071142171883f306646f61fca72d5ac842a014c04014be" + "contract_address": "0x255e43013fd414520d27a0491c64aa03705e6f728999d0ceb44e395ac5c9c1d", + "transaction_hash": "0x68dfddeec80a329d55bbb9375fca528b4832fd67fb5c7e352568f418cee0bdd" }, "status": "Success", - "timestamp": 1713363980, + "timestamp": 1715090568, "misc": null }, - "346ec38cf2c9afebf08d66d1cf178400bc44ead9d9fca7f93bbfaee7c2adc268": { + "9e1e2c155d0e2b0b5a9694f5f47b2197b65ae7fd4d4721559a5b47a54bbabd3a": { "name": "invoke", "output": { "type": "InvokeResponse", - "transaction_hash": "0x54d3215b2d6a8694ee2858a79859d792fb003d294da0065d0b8bc2bfa9eadb3" + "transaction_hash": "0x5b9d4bcd6bcb2bb6520b8bfd84231dc660deb099f2392650b90af4179a105e1" }, "status": "Success", - "timestamp": 1713433106, + "timestamp": 1715089391, "misc": null }, - "e82d65e6dd02669ca0172faae1966dde6b65c9fe70a2d5a3c1610544da200254": { - "name": "invoke", + "2e71c5d1d8ac74ab004630e9777fb83f7a535f16693425e8bd18b0719c286c98": { + "name": "declare", "output": { - "type": "InvokeResponse", - "transaction_hash": "0x7457bd43ee1274641ce7de54f5eb0fc3b448c8827e32ab6bfaabeb39c3bff8" + "type": "DeclareResponse", + "class_hash": "0x2b4e510a5aa0a547d8a266f3fc54457281769e82a4247b1bbcc1cd55d768116", + "transaction_hash": "0x61876a39196cdf4ff7e30be46024062f36b9c9c2f6727dce0bb02091f6b41af" + }, + "status": "Success", + "timestamp": 1713355960, + "misc": null + }, + "5007559b15931fb0862b0bb7717746e0fc3b3a38af6cfa9539385f09fe1c5161": { + "name": "deploy", + "output": { + "type": "DeployResponse", + "contract_address": "0x23dbc80de342f86f2b33b27d5593c259809961d9ecbd9f69b7088babba1016f", + "transaction_hash": "0x377828a7bd69b8b0fe8a5df5d5b8d1a6bb6547157b9732f220d911340d5cc5e" }, "status": "Success", - "timestamp": 1713433113, + "timestamp": 1715090624, "misc": null }, - "5d983dbde214e2d0bdd632a4d5bd2319277738abfe0a43201b0fdb278ea7d0bf": { + "6588f9b47bd171f17602a857c6cabb703d6cec9a213879ecdfb596ae59f71db1": { "name": "invoke", "output": { "type": "InvokeResponse", - "transaction_hash": "0x4ffc4d65fcc4464a475f8c502375531d17cb955254d19cac75925c9e0275ad7" + "transaction_hash": "0x6215fe7f936f542ac0329c804615b83132d04f4b0c4e7dad36c0c60f3820670" }, "status": "Success", - "timestamp": 1713435357, + "timestamp": 1715091714, "misc": null }, - "590468097c3c7ae35ceca740e7d51fc2fd28ae1cca6ea6793b5b7129b2cda758": { + "99c844f1f239fc6d3a56473a1af36a59a59aed012b457056578b0972288b16d7": { "name": "declare", "output": { "type": "DeclareResponse", - "class_hash": "0x6264182dffc615e1ceb983f944a6e58b69c50c6c152fc8d5161afdec979256c", - "transaction_hash": "0x58c295605f169ca636b3fa636c3379efe1ff3679c84941be290ae633dda1d73" + "class_hash": "0x7d17157480d3f859f63c1a4608d05b7ac198702f56d78291c5673b58961c577", + "transaction_hash": "0x7e846312c321c9190298f8d05f769b5309b92b9068d9fda3265fbeff433e05c" }, "status": "Success", - "timestamp": 1713363989, + "timestamp": 1713355915, "misc": null }, - "a1f1e61e1f9780ef2cd43951e4688ae9f449bd863d650ceb13048cfd4bf07097": { - "name": "invoke", + "189a73592c03c2eee41e593da13d971c369c2d2174c215178b21df22135f849f": { + "name": "declare", "output": { - "type": "InvokeResponse", - "transaction_hash": "0x25ed295d1ed164b346ba3d6660ccb99c95e0567e6e5d729a54c1372a678546e" + "type": "DeclareResponse", + "class_hash": "0x665c3040b091dec0e9d36bed35fb350ba60ff7fe70b24526988d81cfc537ab9", + "transaction_hash": "0x692b4cd0023d83dd22176306a56ebef2758c5c81f4324a89bb366c3f02d832" }, "status": "Success", - "timestamp": 1713365947, + "timestamp": 1713355946, "misc": null }, - "88a9396d55311a803a08e17160cbcd81990b5ea05069495687a6ace83a279b44": { + "6c6e200775d712203d37d84171a01792add004f9367bdd7de175efd85707cfc8": { "name": "invoke", "output": { "type": "InvokeResponse", - "transaction_hash": "0x5a0aba2f261c52ebffa4aab6d9c6c733d5646ca051aebabf7e2edecffa9b50" + "transaction_hash": "0x2cbabb40ec6512be296cb58b1e760ded767f73543fe2d17fab138879bb5687e" }, "status": "Success", - "timestamp": 1713365785, + "timestamp": 1715090653, "misc": null }, - "cbfda53e2f3e4cbd5591e2051e714bd28bfe02e4ed0f5314d3c939b4261d1e26": { + "282e5b842143e5a332a1d67d9cb77d8f4ae61921a587a4a01e5c3836c582083c": { "name": "invoke", "output": { "type": "InvokeResponse", - "transaction_hash": "0x3352b4d99a2817ec9c42b99f084822b28ffe4ee1e153d175649b71d97141fd9" + "transaction_hash": "0x3dea09626a616d19eaf760ed23e9d790a9f26ff082e1699b20eac4bedc5cb8d" }, "status": "Success", - "timestamp": 1713434222, + "timestamp": 1715092114, "misc": null }, - "9961b551607f9104c4db0ade2a733b0ead13b6d6c8940bdca78b9e89d899a800": { + "6763e7acf8d8a77f395f3bc8431309a8952f9491e71a0b7e6dc6db4c5b49d729": { "name": "invoke", "output": { "type": "InvokeResponse", - "transaction_hash": "0x8e2d3e369b9257c7fd60c4b6c687aba3bc160388e08328f36feb3a81efe3b8" + "transaction_hash": "0x45ada6ed2ea6ac0c47e71a927af162b3c06ef128ecedcc9244e1beaa765ae21" }, "status": "Success", - "timestamp": 1713433125, + "timestamp": 1715092132, "misc": null }, - "f936c9ad74d4104968ce9d09ed5043cb02f99d0d170f1d16936808463230d44b": { - "name": "invoke", + "7687cff9743ad4f4d63a80500b752c9c88a069f58ce843e6397b6d29fd32140f": { + "name": "deploy", "output": { - "type": "InvokeResponse", - "transaction_hash": "0x21cc70763c84302ac61d769f17c8360a4abdf5948eec243693bf166ef3506c1" + "type": "DeployResponse", + "contract_address": "0x1e188c4223245660e692e7f0b9834d11687cec5aa37da0889cbe2e2e2743c28", + "transaction_hash": "0x423b0a7471d00ef67e373740bf6cf8d90b271881993de4fc176691bd629f5cc" }, "status": "Success", - "timestamp": 1713365779, + "timestamp": 1715090592, "misc": null }, - "9dbcd80d2c2442f297687f21712c2a5b9900eead2f337c2a5ba7e04306b2a8ba": { - "name": "deploy", + "a81b8a81e0988da6aa36500a42b54fbe17fe9da021f6248f2678829c63f04b28": { + "name": "invoke", "output": { - "type": "DeployResponse", - "contract_address": "0x4b3bfe81472b5a01dc3c1fba3456bb0979852deaca43da49d406189371d09e6", - "transaction_hash": "0x59ed06d55a1a8594f510ef6b88c7111b8824f83a5c2875825256b1b365e1fa8" + "type": "InvokeResponse", + "transaction_hash": "0x3e55263f63e71a431ca1e67cfd28e3a12e2d2b91e49c48342f04d80bdd630e6" }, "status": "Success", - "timestamp": 1713355100, + "timestamp": 1715090648, "misc": null }, - "f1bc19a11ce70f15c52e7098960d7f94dd38d6c976347e652b7a54063bdcb605": { - "name": "deploy", + "00cd99ebfb79f461ccfd6d62bcfcce1bdbf5759875fc458adcbd50d7b035d4ad": { + "name": "invoke", "output": { - "type": "DeployResponse", - "contract_address": "0x14dac867b21b5b6645cc046e0125cca8e81e8dd9d95ca5dd8e756fa053a2984", - "transaction_hash": "0x4d6295f0eb56caa317ba85ec70c1d6a580bb2f2d754ccc61244cbd655a7ce1b" + "type": "InvokeResponse", + "transaction_hash": "0x1c2293194082289cdc1a4491805abe1f9593cc0c1cac28c2f24393fac7e9668" }, "status": "Success", - "timestamp": 1713355907, + "timestamp": 1715092045, "misc": null }, "c5335df53f10ee4a3d158004384345a603443c589d18af40834cc1301b1f6867": { @@ -307,249 +299,256 @@ "timestamp": 1713355392, "misc": null }, - "0b59dbfa449f0220724f6f9a439adb6a232c214889a87750fc046f4a4c8c7248": { - "name": "declare", + "1eea556576b2b7764e132d113da0607dcf071820677363ab66151058a47d4be7": { + "name": "invoke", "output": { - "type": "DeclareResponse", - "class_hash": "0x6610d366e50e22faaec547d9422e60fef572660ce619ccf5c54d2ef547c9665", - "transaction_hash": "0x5bee1c596a801a9fcae3318fd13c3ef49724aa32ad1e7d8421b62917d54dce" + "type": "InvokeResponse", + "transaction_hash": "0x426be998e810354f771b05311c301070ad44f09598a661b86ece6b78b215fe8" }, "status": "Success", - "timestamp": 1713364003, + "timestamp": 1715091660, "misc": null }, - "cc9cd35c3009845371bb83e6cfda8fa6bc42001012ae3ff88a856e0b2c4d8d1d": { - "name": "deploy", + "9b656ffc4bc3ed2ccfebb6fba7d5a16c44cf66aa988687b496bd00ccf1b6eeba": { + "name": "invoke", "output": { - "type": "DeployResponse", - "contract_address": "0xa7b142b8937cb31507fe598252d44a516f2bc64eb285f1807163461d6c208e", - "transaction_hash": "0x7979a61a26d3337ad7ede5d0b43dce5c16b612fb7d7e3b2e24c125d6ef575d" + "type": "InvokeResponse", + "transaction_hash": "0x285e956fd94375ab74bc15447027900b52f84d308f62f34bc2cfae54e5f424e" }, "status": "Success", - "timestamp": 1713355966, + "timestamp": 1715092108, "misc": null }, - "aef80ff8c4cb4020056530ddf7d38a1ca8859f0dd43431f2f2f9c082f00e5d2d": { - "name": "deploy", + "dd41c47640601d43f25990b718d0f0e49e032659237a9340a09f8c46dcae329a": { + "name": "declare", "output": { - "type": "DeployResponse", - "contract_address": "0x48deaee30965a88184619f8b3b30b805727654468ae9b42b483a84831b9e5ea", - "transaction_hash": "0x5775df2234fc500580344e9c82f51be99e144dbf58bfedaa2cb693f703fc460" + "type": "DeclareResponse", + "class_hash": "0x2ad9f2d9e74cce3fc04815168300d0ebd4a3076023a71dda0f9147304e55db7", + "transaction_hash": "0x2c4b11ed98ec65c0332241bf517fe5cc7aea5856ece5dd9a026fb697be27283" }, "status": "Success", - "timestamp": 1713355937, + "timestamp": 1715090494, "misc": null }, - "2e71c5d1d8ac74ab004630e9777fb83f7a535f16693425e8bd18b0719c286c98": { - "name": "declare", + "2e29404ae7b8bab65cd1e7342c6cc181c71bafa766c42e3279e08a3d4e9944fe": { + "name": "invoke", "output": { - "type": "DeclareResponse", - "class_hash": "0x2b4e510a5aa0a547d8a266f3fc54457281769e82a4247b1bbcc1cd55d768116", - "transaction_hash": "0x61876a39196cdf4ff7e30be46024062f36b9c9c2f6727dce0bb02091f6b41af" + "type": "InvokeResponse", + "transaction_hash": "0x3bcdc66f192dfff954873cdaa6278ca711afda402a1231f46ee8c2259ed378" }, "status": "Success", - "timestamp": 1713355960, + "timestamp": 1715091762, "misc": null }, - "0cb2494e20c382ccd4ac0b2b82e543aa7b709e9f419f5e2c184ffa7e899f1dbf": { + "cb6947bf5f49c95e7485b70f339ec1e5c5c4601b2aac6f3ba96fe9475a59dab0": { "name": "invoke", "output": { "type": "InvokeResponse", - "transaction_hash": "0xdda0d22acf141e12425f32963b9ab58fc41cc84d7713e8db35ce25bf1efa4b" + "transaction_hash": "0x70df76bd280c07c6ea209b9faab2ef85d614ad89aabef287e5501198b114583" }, "status": "Success", - "timestamp": 1713433119, + "timestamp": 1715090667, "misc": null }, - "eb23acb2d3c5bf75816831965ea5429da4424c2e0eef3532c388af428f693cee": { - "name": "invoke", + "82bec2e01f015da72444f510c9a37d1a93aa0dcca5e9272b47929c69823f1ffd": { + "name": "deploy", "output": { - "type": "InvokeResponse", - "transaction_hash": "0x2f6adfe60c6e3a51c7daa8e9799eb03c11d613610f23a56de87088e647f0f79" + "type": "DeployResponse", + "contract_address": "0x7d2a06078ee45540e9507a0daf01ac94f0550b675958dda88cbbc6fc8993708", + "transaction_hash": "0x12d8ef7f5ee2dd8a9e8108e3487acd11207c3f322e9484081e6af51ebb0fa0" }, "status": "Success", - "timestamp": 1713435170, + "timestamp": 1715090551, "misc": null }, - "c7d2c05e91fae9c17354d86d7eefa4e98852e746704749c6b134ab4ffefa3ae9": { + "8b805a268bad2da6e2875a767fefa5e369d61b53160cd5e5a9630f082f4ad315": { "name": "deploy", "output": { "type": "DeployResponse", - "contract_address": "0x594f653061a2181514fad04dc005f7eb8210786a45b577f416029e0ffb01cd7", - "transaction_hash": "0x61f8d1805e31b1581a5650bad109a9108e7838b498718302e9830a17916f4a5" + "contract_address": "0x55753ea07d7c53b0d512dd14aa1fb536b02efc179907905610619eecaac1e97", + "transaction_hash": "0x5736d7b69f09c114dcbcf70c8b8c67ba8733942e5a1a6118e608e005078f153" }, "status": "Success", - "timestamp": 1713364016, + "timestamp": 1715090580, "misc": null }, - "a856e17b1f401cd5a8cb65374f379c47955d1800f167ded72510be87bad50f7d": { + "c4a592b9dcbdc84d134d0876432788a100a7a8a193eeaf365d7b30c09a2eaf0f": { "name": "invoke", "output": { "type": "InvokeResponse", - "transaction_hash": "0x7126ae4381ba6ecdbbac7190326f5d2c262ffd6c1c88e48ac12b47a44c10a8c" + "transaction_hash": "0x7740d7d61b391493997fba96b96619866f6122b5f3a03347c7af4102afa1a0" }, "status": "Success", - "timestamp": 1713435594, + "timestamp": 1715092067, "misc": null }, - "c477836e682e13d9c36f767c479a13ac66e74d800da2ec891a5befe6d2b1670a": { + "e844bec4c4f5285b779b5b085d09973ba36209bc15cd7c3dc71b767dcb1ea5f2": { "name": "invoke", "output": { - "type": "ErrorResponse", - "message": "Transaction has been reverted = Error in the called contract (0x017721cd89df40d33907b70b42be2a524abeea23a572cf41c79ffe2422e7814e):\nError at pc=0:4573:\nGot an exception while executing a hint: Execution failed. Failure reason: 0x4661696c656420746f20646573657269616c697a6520706172616d202331 ('Failed to deserialize param #1').\nCairo traceback (most recent call last):\nUnknown location (pc=0:67)\nUnknown location (pc=0:1835)\nUnknown location (pc=0:2478)\nUnknown location (pc=0:3255)\nUnknown location (pc=0:3795)\n\nError in the called contract (0x014dac867b21b5b6645cc046e0125cca8e81e8dd9d95ca5dd8e756fa053a2984):\nExecution failed. Failure reason: 0x4661696c656420746f20646573657269616c697a6520706172616d202331 ('Failed to deserialize param #1').\n" + "type": "InvokeResponse", + "transaction_hash": "0x1c73d7e4f6ae4e2cca11e8464c3548a19dc63a9cddba3431a62d347ba110250" }, - "status": "Fail", - "timestamp": 1713434097, + "status": "Success", + "timestamp": 1715092027, "misc": null }, - "50409426cf6b2dc0e8cd9b6b47c7328c78157ebd846b0474465e53d495f7b80b": { + "26f08bc8f675d23aca14ea8849f600516cba4f6b7fddd962ed7a83bfbe3b1050": { "name": "invoke", "output": { "type": "InvokeResponse", - "transaction_hash": "0x41028a33e564cdb6b3432eb5f6b1c0e0d3126b8d091e10963a7eee763ccc002" + "transaction_hash": "0x79c8736321baa822e7358ce779f5485e74534366438106b7dc46f9c0b50a824" }, "status": "Success", - "timestamp": 1713434233, + "timestamp": 1715090641, "misc": null }, - "c4c44b8f78a990847c932fa7f5349658975fe171cd6a489dddf9f25f9caf95a3": { - "name": "declare", + "a076ae2bd566233cdbbf06236d0c4716e6d4e0308b6e68ed4d4d4f988ca52a8a": { + "name": "invoke", "output": { - "type": "DeclareResponse", - "class_hash": "0x47cb08872e58eae7b8df7e2cff177f096955be5ba90a3ac5e5a04853591ad83", - "transaction_hash": "0x41e3e846f244a3da8d80f9956e5288079cbfa7946fd16642660d33784e52a6a" + "type": "InvokeResponse", + "transaction_hash": "0x762b3e0ad84fe521f55b14ebfe5b7dd59f057200d9949d0b27a298147878042" }, "status": "Success", - "timestamp": 1713355901, + "timestamp": 1715091649, "misc": null }, - "e9c27c40e36a647afbf691ba2a90bbdc2b2c46615aa27f276e2d6fab6310e3e8": { + "a7b18bb54e2d49bf38d9ac40694d8f2f347d0681250b006aeefada325c9912e2": { "name": "deploy", "output": { "type": "DeployResponse", - "contract_address": "0x43d5cd32847304e168fca09feef5620aaf7c3a0e6fa1689416541be95d8d183", - "transaction_hash": "0x33815d28ed3ba8562b321bb95bba1c1da8c87f3255c90eb06f66f4c30c83c14" + "contract_address": "0x1ba77782ba5dea67bcf4f71c2b98849b598d030df02952bf8f62e3eb6b5b192", + "transaction_hash": "0x20a0f18c8b3bd798258e0c734ff7912276fe79ea3e26cc95c416384c2063693" }, "status": "Success", - "timestamp": 1713363879, + "timestamp": 1715090574, "misc": null }, - "33bf38bfae2a6495d4c4777da70d012b5023450cce05918a48cd31f4c42c4fbc": { - "name": "deploy", + "a0c6d143f2f8ba10d8a5038653c8a128ad9a3a78d91cebc698d9b128ee8ac67f": { + "name": "declare", "output": { - "type": "DeployResponse", - "contract_address": "0x3297c2080d6c565055ca1c7695b9b6e458600515ebd76101ec4221bcea877ce", - "transaction_hash": "0x4e41c9e6ea364d0f8d2c67e34d8bc05bce33fa394d46be2df38e701d16561e1" + "type": "DeclareResponse", + "class_hash": "0xcf41883647354a7b73b19ff51c4613a2f084124b75bea0f4dad33329c2ae63", + "transaction_hash": "0x7000aa72f175dd2e396443d0ef08a04e512f1a684f4d5ad5115c451c5872411" }, "status": "Success", - "timestamp": 1713363995, + "timestamp": 1715052833, "misc": null }, - "189a73592c03c2eee41e593da13d971c369c2d2174c215178b21df22135f849f": { - "name": "declare", + "7bb15c170fb4d0d30d9e28a2b02dd417b9fef38ec6a4884f24131e2dbe121ac8": { + "name": "invoke", "output": { - "type": "DeclareResponse", - "class_hash": "0x665c3040b091dec0e9d36bed35fb350ba60ff7fe70b24526988d81cfc537ab9", - "transaction_hash": "0x692b4cd0023d83dd22176306a56ebef2758c5c81f4324a89bb366c3f02d832" + "type": "InvokeResponse", + "transaction_hash": "0x1d7b73b3192d2bebf867f68e7c6250e4a99a9feac9fc961507e1b6ca402af55" }, "status": "Success", - "timestamp": 1713355946, + "timestamp": 1715092119, "misc": null }, - "d1557f6c2f8e726c768cbbf1619cbaa4943010757b3fd2d98a097fcd3c7859ae": { + "603bee0cd5681a9151465b5b041984a9e0c1d16b647a36d17afa7906aafb614f": { "name": "invoke", "output": { "type": "InvokeResponse", - "transaction_hash": "0x6408e934bcb5750582b8f038317dbcfd1b6dfb19fe6410fb66a7fefd8bc2d2c" + "transaction_hash": "0x41dd07056b44c75c2e22fbb255fcb8bc4ba8f23525a099f17c05790c6ac0fc1" }, "status": "Success", - "timestamp": 1713365755, + "timestamp": 1715090673, "misc": null }, - "d318b23c85f11deb4ded680ca17c859f6ef9bc99b43880ae1e51297778b2cfca": { + "40eae2d86da41b16152459d9fd09b58e3800c6a1c126411a64033464cae4ec84": { "name": "deploy", "output": { "type": "DeployResponse", - "contract_address": "0x2c6c7acedfbb6607ecc33cd6b2134f3dea2f16998b44219067063ae4ccb6e42", - "transaction_hash": "0x4f87f6711c9174ec9855c386107d06b641e4ebb92a0bc37f5aaabc487b0c4a5" + "contract_address": "0x5c4d4b9ce7f54dc50354b99dfca29c3ba3935501e5244e048fa87b83043ddc2", + "transaction_hash": "0x59354c2e3952f5d50f6bf7af8ba50f64f54f2b2ab2dc77a96dc8549c919134" }, "status": "Success", - "timestamp": 1713355878, + "timestamp": 1715090617, "misc": null }, - "ee755cc389e7beab0d6f0ec3404534cecec816b2177aa4101cfa73fe4f726373": { + "c4c44b8f78a990847c932fa7f5349658975fe171cd6a489dddf9f25f9caf95a3": { "name": "declare", "output": { "type": "DeclareResponse", - "class_hash": "0x10f7b5f840ea90a9b2651794cc123eac6f4996007f80a29d6db65ee0023af4f", - "transaction_hash": "0x6f873c2421430dca5078a752eb339728fb60adc52e369006b7de44ae1d617e" + "class_hash": "0x47cb08872e58eae7b8df7e2cff177f096955be5ba90a3ac5e5a04853591ad83", + "transaction_hash": "0x41e3e846f244a3da8d80f9956e5288079cbfa7946fd16642660d33784e52a6a" }, "status": "Success", - "timestamp": 1713363974, + "timestamp": 1713355901, "misc": null }, - "6fef334cc5e893160b81fce56bc931f2009bc22b4f2ffef9567af5963823fd8a": { + "b3bd661f4807613f905ae527a94a0628471145c84798b04324bf1107a867b139": { "name": "deploy", "output": { "type": "DeployResponse", - "contract_address": "0x71415935245134eaa125de2df12772443726d5a149a4995f60208c28653a54f", - "transaction_hash": "0x74a0b99fc170f6106508ab4d7c411db034c3ab714594c9f006fe8959b58906" + "contract_address": "0x54b46ed341533fe4da0116f27e201276165e3a3fd030ac391b6e9967668996d", + "transaction_hash": "0x65aaf6b7c2f04593c2be27d05d3122c59c418676f4a7fdd2551ed5acba656aa" }, "status": "Success", - "timestamp": 1713365749, + "timestamp": 1715090605, "misc": null }, - "3d1e981cd23eed7155be70df6b2afb1bfb6f247b9c9a1fdc4c699136a44e05a7": { - "name": "invoke", + "eba955446c7f9eb7da1771c25f223a9ef27bbed88d7efc08136e4f7e498e2a08": { + "name": "declare", "output": { - "type": "InvokeResponse", - "transaction_hash": "0x1a267e6bdad667a5b50c1e16ea2e11f79c80dcbdf8ff646532843affaac026f" + "type": "DeclareResponse", + "class_hash": "0xce68b83ddd51fcfb3b6eaf25e4d8eea63cc9373618d1b5a1f6909cf211d78", + "transaction_hash": "0x235ff10d619fbdb2374273437802548631f8deb6c7988362dc1951f6953213e" }, "status": "Success", - "timestamp": 1713365767, + "timestamp": 1713355974, "misc": null }, - "8731e4d54f1055e199f93ef668c4131b9994ad2c9d5a44a87d3c99b0b6daf57c": { - "name": "invoke", + "aeee1e3eacf6f1d0fa0b29d348ba056f7fa4b8522a95c2e44cb2f215059fb68b": { + "name": "deploy", "output": { - "type": "InvokeResponse", - "transaction_hash": "0x1e21d502ce831a1528beb180378e28c8f4e1e49a0ca7ee30277ff835f170537" + "type": "DeployResponse", + "contract_address": "0x6f1577c508f95e633d22eaa65c5781442651336d30a95ba149a80fd85db29bc", + "transaction_hash": "0xad7497c079c3f11bce9d9bb05bd81a18913d5c5a9fb6993f62bbeda6064885" }, "status": "Success", - "timestamp": 1714361713, + "timestamp": 1715090562, + "misc": null + }, + "ee755cc389e7beab0d6f0ec3404534cecec816b2177aa4101cfa73fe4f726373": { + "name": "declare", + "output": { + "type": "DeclareResponse", + "class_hash": "0x10f7b5f840ea90a9b2651794cc123eac6f4996007f80a29d6db65ee0023af4f", + "transaction_hash": "0x6f873c2421430dca5078a752eb339728fb60adc52e369006b7de44ae1d617e" + }, + "status": "Success", + "timestamp": 1713363974, "misc": null }, - "219aec8d3b2e9d0242998a12d367b869488750095694ad43832c6c73e1e152a4": { + "360bf6065e903fd651edecd75779f4fd2f436844bccdd9a8551ad68e7544825b": { "name": "invoke", "output": { "type": "InvokeResponse", - "transaction_hash": "0x763314d0b1ee5aa2281df2826e97f5d51e3741e744abca2734d1e001240c56" + "transaction_hash": "0x766753f62458332f3e17bb87b6eb7abd9f6cf321cfdd3d7c633d66aa705ceef" }, "status": "Success", - "timestamp": 1714623104, + "timestamp": 1715091756, "misc": null }, - "a0c6d143f2f8ba10d8a5038653c8a128ad9a3a78d91cebc698d9b128ee8ac67f": { - "name": "declare", + "3ee681620507be463f5fc2202ae84feb8be6e03a5de86389e6725bcd9bdeff29": { + "name": "invoke", "output": { - "type": "DeclareResponse", - "class_hash": "0xcf41883647354a7b73b19ff51c4613a2f084124b75bea0f4dad33329c2ae63", - "transaction_hash": "0x7000aa72f175dd2e396443d0ef08a04e512f1a684f4d5ad5115c451c5872411" + "type": "InvokeResponse", + "transaction_hash": "0x70fffc7cbb1fac23915d7851ab999d463a1b20e785a6ecf21ee65e7f18e8bd3" }, "status": "Success", - "timestamp": 1715052833, + "timestamp": 1715090660, "misc": null }, - - "d26a9e3e01718f030181958dad59ccac02f3c8ec27500daf0930b264cb619fe0": { - "name": "deploy", + "19ecb2b5d40cf6b2e1b3f2a97f92bb71cf19842be0d5ef6d3a572ab0167da663": { + "name": "declare", "output": { - "type": "DeployResponse", - "contract_address": "0x6b5a9c82979978e0fa2584422f2048f9c3f2fed04e82cba9f435f9c5b66195a", - "transaction_hash": "0x7fe2f9045ab9d9b84377722b6e9766907b34799891fb44518ea72098203e622" + "type": "DeclareResponse", + "class_hash": "0x939fe8f3c39bbac9d01268a73ec713f872aeab64b1bd90a4117a3ece37f2c6", + "transaction_hash": "0x349d77fd7915ef8b5457008b058a484476852378c308d5cee036bda79724d84" }, "status": "Success", - "timestamp": 1715054721, + "timestamp": 1715088968, "misc": null } } From 1eb1b4158c2e8b7338619850c5529896c2e9c9f7 Mon Sep 17 00:00:00 2001 From: tserg <8017125+tserg@users.noreply.github.com> Date: Wed, 8 May 2024 15:48:38 +0800 Subject: [PATCH 20/20] clean up --- src/periphery/frontend_data_provider.cairo | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/periphery/frontend_data_provider.cairo b/src/periphery/frontend_data_provider.cairo index 004b26862..231502f0d 100644 --- a/src/periphery/frontend_data_provider.cairo +++ b/src/periphery/frontend_data_provider.cairo @@ -37,7 +37,6 @@ pub mod frontend_data_provider { access_control: access_control_component::Storage, #[substorage(v0)] upgradeable: upgradeable_component::Storage, - // Sentinel associated with the Shrine sentinel: ISentinelDispatcher, shrine: IShrineDispatcher, } @@ -125,15 +124,15 @@ pub mod frontend_data_provider { assert(sentinel.get_yang(*yang_balance.yang_id) == yang, 'FDP: Address mismatch'); let (shrine_asset_info, yang_price) = self - .get_shrine_yang_info_helper( + .get_shrine_asset_info_helper( shrine, sentinel, yang, *yang_balance.amount, current_rate_era ); let asset_amt: u128 = sentinel.convert_to_assets(yang, *yang_balance.amount); - let trove_yang_info = TroveAssetInfo { + let trove_asset_info = TroveAssetInfo { shrine_asset_info, amount: asset_amt, value: *yang_balance.amount * yang_price, }; - asset_infos.append(trove_yang_info); + asset_infos.append(trove_asset_info); }, Option::None => { break asset_infos.span(); } } @@ -158,11 +157,11 @@ pub mod frontend_data_provider { let yang: ContractAddress = *yang_addresses.pop_front().unwrap(); assert(sentinel.get_yang(*yang_balance.yang_id) == yang, 'FDP: Address mismatch'); - let (shrine_yang_info, _) = self - .get_shrine_yang_info_helper( + let (shrine_asset_info, _) = self + .get_shrine_asset_info_helper( shrine, sentinel, yang, *yang_balance.amount, current_rate_era ); - asset_infos.append(shrine_yang_info); + asset_infos.append(shrine_asset_info); }, Option::None => { break asset_infos.span(); } } @@ -178,7 +177,7 @@ pub mod frontend_data_provider { impl FrontendDataProviderHelpers of FrontendDataProviderHelpersTrait { // Helper function to generate a ShrineAssetInfo struct for a yang. // Returns a tuple of a ShrineAssetInfo struct and the yang price - fn get_shrine_yang_info_helper( + fn get_shrine_asset_info_helper( self: @ContractState, shrine: IShrineDispatcher, sentinel: ISentinelDispatcher,