diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7e5432980..e3f847d73 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -58,7 +58,7 @@ jobs: cd andromeda-core make schemas ``` - draft: false - prerelease: false + draft: true + prerelease: true env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/contracts/os/andromeda-kernel/src/interface.rs b/contracts/os/andromeda-kernel/src/interface.rs index d833b87a0..8acfbbb95 100644 --- a/contracts/os/andromeda-kernel/src/interface.rs +++ b/contracts/os/andromeda-kernel/src/interface.rs @@ -1,5 +1,6 @@ use andromeda_std::{ ado_base::MigrateMsg, + deploy::ADOMetadata, os::kernel::{ExecuteMsg, InstantiateMsg, QueryMsg}, }; use cw_orch::{interface, prelude::*}; @@ -36,3 +37,14 @@ impl Uploadable for KernelContract { .unwrap() } } + +impl ADOMetadata for KernelContract { + fn name() -> String { + CONTRACT_ID.to_string() + } + + fn version() -> String { + let version = env!("CARGO_PKG_VERSION"); + version.to_string() + } +} diff --git a/packages/deploy/src/chains/mainnets.rs b/packages/deploy/src/chains/mainnets.rs new file mode 100644 index 000000000..ea39eebdc --- /dev/null +++ b/packages/deploy/src/chains/mainnets.rs @@ -0,0 +1,205 @@ +use cw_orch::{ + environment::{ChainKind, NetworkInfo}, + prelude::ChainInfo, +}; + +pub const ANDROMEDA_MAINNET_NETWORK: NetworkInfo = NetworkInfo { + chain_name: "andromeda", + pub_address_prefix: "andr", + coin_type: 118u32, +}; + +pub const ANDROMEDA_MAINNET: ChainInfo = ChainInfo { + chain_id: "andromeda-1", + gas_denom: "uandr", + fcd_url: None, + gas_price: 0.025, + grpc_urls: &["https://andromeda-grpc.polkachu.com:21290"], + lcd_url: Some("https://andromeda-api.polkachu.com"), + network_info: ANDROMEDA_MAINNET_NETWORK, + kind: ChainKind::Mainnet, +}; + +pub const STARGAZE_MAINNET_NETWORK: NetworkInfo = NetworkInfo { + chain_name: "stargaze", + pub_address_prefix: "stars", + coin_type: 118u32, +}; + +pub const STARGAZE_MAINNET: ChainInfo = ChainInfo { + chain_id: "stargaze-1", + gas_denom: "ustars", + fcd_url: None, + gas_price: 0.025, + grpc_urls: &["https://stargaze-grpc.polkachu.com:21290"], + lcd_url: Some("https://stargaze-api.polkachu.com"), + network_info: STARGAZE_MAINNET_NETWORK, + kind: ChainKind::Mainnet, +}; + +pub const NEUTRON_MAINNET_NETWORK: NetworkInfo = NetworkInfo { + chain_name: "neutron", + pub_address_prefix: "neutron", + coin_type: 118u32, +}; + +pub const NEUTRON_MAINNET: ChainInfo = ChainInfo { + chain_id: "neutron-1", + gas_denom: "untrn", + fcd_url: None, + gas_price: 0.0053, + grpc_urls: &["https://neutron-grpc.publicnode.com:443"], + lcd_url: Some("https://neutron-api.polkachu.com"), + network_info: NEUTRON_MAINNET_NETWORK, + kind: ChainKind::Mainnet, +}; + +pub const MIGALOO_MAINNET_NETWORK: NetworkInfo = NetworkInfo { + chain_name: "migaloo", + pub_address_prefix: "migaloo", + coin_type: 118u32, +}; + +pub const MIGALOO_MAINNET: ChainInfo = ChainInfo { + chain_id: "migaloo-1", + gas_denom: "uwhale", + fcd_url: None, + gas_price: 1.0, + grpc_urls: &["https://migaloo-grpc.polkachu.com:443"], + lcd_url: Some("https://migaloo-api.polkachu.com"), + network_info: MIGALOO_MAINNET_NETWORK, + kind: ChainKind::Mainnet, +}; + +pub const JUNO_MAINNET_NETWORK: NetworkInfo = NetworkInfo { + chain_name: "juno", + pub_address_prefix: "juno", + coin_type: 118u32, +}; + +pub const JUNO_MAINNET: ChainInfo = ChainInfo { + chain_id: "juno-1", + gas_denom: "ujuno", + fcd_url: None, + gas_price: 0.075, + grpc_urls: &["https://juno-grpc.polkachu.com:443"], + lcd_url: Some("https://juno-api.polkachu.com"), + network_info: JUNO_MAINNET_NETWORK, + kind: ChainKind::Mainnet, +}; + +pub const DESMOS_MAINNET_NETWORK: NetworkInfo = NetworkInfo { + chain_name: "desmos", + pub_address_prefix: "desmos", + coin_type: 118u32, +}; + +pub const DESMOS_MAINNET: ChainInfo = ChainInfo { + chain_id: "desmos", + gas_denom: "udsm", + fcd_url: None, + gas_price: 0.001, + grpc_urls: &["https://desmos-grpc.lavenderfive.com:443/"], + lcd_url: Some("https://api.mainnet.desmos.network"), + network_info: DESMOS_MAINNET_NETWORK, + kind: ChainKind::Mainnet, +}; + +pub const CHIHUAHUA_MAINNET_NETWORK: NetworkInfo = NetworkInfo { + chain_name: "chihuahua", + pub_address_prefix: "chihuahua", + coin_type: 118u32, +}; + +pub const CHIHUAHUA_MAINNET: ChainInfo = ChainInfo { + chain_id: "chihuahua-1", + gas_denom: "uhuahua", + fcd_url: None, + gas_price: 1.0, + grpc_urls: &["https://chiahuahua-grpc.polkachu.com:21290"], + lcd_url: Some("https://chihuahua-api.polkachu.com"), + network_info: CHIHUAHUA_MAINNET_NETWORK, + kind: ChainKind::Mainnet, +}; + +pub const UMEE_MAINNET_NETWORK: NetworkInfo = NetworkInfo { + chain_name: "umee", + pub_address_prefix: "umee", + coin_type: 118u32, +}; + +pub const UMEE_MAINNET: ChainInfo = ChainInfo { + chain_id: "umee-1", + gas_denom: "uumee", + fcd_url: None, + gas_price: 0.1, + grpc_urls: &["https://umee-grpc.polkachu.com:21290"], + lcd_url: Some("https://umee-api.polkachu.com"), + network_info: UMEE_MAINNET_NETWORK, + kind: ChainKind::Mainnet, +}; + +pub const NIBIRU_MAINNET_NETWORK: NetworkInfo = NetworkInfo { + chain_name: "nibiru", + pub_address_prefix: "nibi", + coin_type: 118u32, +}; + +pub const NIBIRU_MAINNET: ChainInfo = ChainInfo { + chain_id: "cataclysm-1", + gas_denom: "unibi", + fcd_url: None, + gas_price: 0.025, + grpc_urls: &["https://nibiru-grpc.polkachu.com:21290"], + lcd_url: Some("https://nibiru-api.polkachu.com"), + network_info: NIBIRU_MAINNET_NETWORK, + kind: ChainKind::Mainnet, +}; + +pub const COREUM_MAINNET_NETWORK: NetworkInfo = NetworkInfo { + chain_name: "coreum", + pub_address_prefix: "core", + coin_type: 118u32, +}; + +pub const COREUM_MAINNET: ChainInfo = ChainInfo { + chain_id: "coreum-1", + gas_denom: "ucore", + fcd_url: None, + gas_price: 0.0625, + grpc_urls: &["https://coreum-grpc.polkachu.com:21290"], + lcd_url: Some("https://coreum-api.polkachu.com"), + network_info: COREUM_MAINNET_NETWORK, + kind: ChainKind::Mainnet, +}; + +pub const ARCHWAY_MAINNET_NETWORK: NetworkInfo = NetworkInfo { + chain_name: "archway", + pub_address_prefix: "archway", + coin_type: 118u32, +}; + +pub const ARCHWAY_MAINNET: ChainInfo = ChainInfo { + chain_id: "archway-1", + gas_denom: "aarch", + fcd_url: None, + gas_price: 140000000000.0, + grpc_urls: &["https://archway-grpc.polkachu.com:21290"], + lcd_url: Some("https://archway-api.polkachu.com"), + network_info: ARCHWAY_MAINNET_NETWORK, + kind: ChainKind::Mainnet, +}; + +pub const MAINNET_CHAINS: &[ChainInfo] = &[ + ANDROMEDA_MAINNET, + STARGAZE_MAINNET, + NEUTRON_MAINNET, + MIGALOO_MAINNET, + JUNO_MAINNET, + DESMOS_MAINNET, + CHIHUAHUA_MAINNET, + UMEE_MAINNET, + NIBIRU_MAINNET, + COREUM_MAINNET, + ARCHWAY_MAINNET, +]; diff --git a/packages/deploy/src/chains/mod.rs b/packages/deploy/src/chains/mod.rs index 69f26a28c..48d190181 100644 --- a/packages/deploy/src/chains/mod.rs +++ b/packages/deploy/src/chains/mod.rs @@ -1,13 +1,23 @@ pub mod devnets; +pub mod mainnets; pub mod testnets; use cw_orch::prelude::ChainInfo; use devnets::DEVNET_CHAINS; +use mainnets::MAINNET_CHAINS; use testnets::TESTNET_CHAINS; pub fn get_chain(chain: String) -> ChainInfo { - [TESTNET_CHAINS, DEVNET_CHAINS] - .concat() + let all_chains: Vec = [MAINNET_CHAINS, TESTNET_CHAINS, DEVNET_CHAINS].concat(); + let unique_chain_names: std::collections::HashSet<&str> = all_chains + .iter() + .map(|c| c.network_info.chain_name) + .collect(); + if unique_chain_names.len() != all_chains.len() { + panic!("Duplicate chain names found in ChainInfo"); + } + + all_chains .iter() .find(|c| c.chain_id == chain || c.network_info.chain_name == chain) .unwrap() diff --git a/packages/deploy/src/chains/testnets.rs b/packages/deploy/src/chains/testnets.rs index 9cd5b3d99..1504caa6f 100644 --- a/packages/deploy/src/chains/testnets.rs +++ b/packages/deploy/src/chains/testnets.rs @@ -4,7 +4,7 @@ use cw_orch::{ }; pub const ANDROMEDA_TESTNET_NETWORK: NetworkInfo = NetworkInfo { - chain_name: "andromeda", + chain_name: "andromeda-testnet", pub_address_prefix: "andr", coin_type: 118u32, }; @@ -21,7 +21,7 @@ pub const ANDROMEDA_TESTNET: ChainInfo = ChainInfo { }; pub const STARGAZE_TESTNET_NETWORK: NetworkInfo = NetworkInfo { - chain_name: "stargaze", + chain_name: "stargaze-testnet", pub_address_prefix: "stars", coin_type: 118u32, }; diff --git a/packages/deploy/src/contracts.rs b/packages/deploy/src/contracts.rs index be6d91ef2..ef87551ad 100644 --- a/packages/deploy/src/contracts.rs +++ b/packages/deploy/src/contracts.rs @@ -1,4 +1,5 @@ use andromeda_address_list::AddressListContract; +use andromeda_adodb::ADODBContract; use andromeda_app_contract::AppContract; use andromeda_auction::AuctionContract; use andromeda_boolean::BooleanContract; @@ -10,6 +11,9 @@ use andromeda_cw20::CW20Contract; use andromeda_cw20_exchange::Cw20ExchangeContract; use andromeda_cw20_staking::CW20StakingContract; use andromeda_cw721::CW721Contract; +use andromeda_economics::EconomicsContract; +use andromeda_ibc_registry::IBCRegistryContract; +use andromeda_kernel::KernelContract; use andromeda_lockdrop::LockdropContract; use andromeda_marketplace::MarketplaceContract; use andromeda_merkle_airdrop::MerkleAirdropContract; @@ -24,6 +28,7 @@ use andromeda_string_storage::StringStorageContract; use andromeda_timelock::TimelockContract; use andromeda_validator_staking::ValidatorStakingContract; use andromeda_vesting::VestingContract; +use andromeda_vfs::VFSContract; use andromeda_weighted_distribution_splitter::WeightedDistributionSplitterContract; use cw_orch::prelude::*; @@ -79,3 +84,13 @@ pub fn all_contracts() -> Vec { deployable!(MarketplaceContract), ] } + +pub fn os_contracts() -> Vec { + vec![ + deployable!(ADODBContract), + deployable!(KernelContract), + deployable!(VFSContract), + deployable!(EconomicsContract), + deployable!(IBCRegistryContract), + ] +} diff --git a/packages/deploy/src/os.rs b/packages/deploy/src/os.rs index 4070eeed0..58b526c72 100644 --- a/packages/deploy/src/os.rs +++ b/packages/deploy/src/os.rs @@ -1,4 +1,5 @@ -use crate::error::DeployError; +use crate::{contracts::os_contracts, error::DeployError}; +use adodb::{ExecuteMsgFns as ADODBExecuteMsgFns, QueryMsgFns as ADODBQueryMsgFns}; use andromeda_std::ado_base::MigrateMsg; use andromeda_std::amp::AndrAddr; use andromeda_std::os::*; @@ -107,7 +108,6 @@ impl OperatingSystemDeployment { // For each module we check if it's been instantiated already. // If it has, we migrate it to the new code id. // If it hasn't, we instantiate it. - let modules: [(&str, &Contract>); 4] = [ ("adodb", self.adodb.as_instance()), ("vfs", self.vfs.as_instance()), @@ -127,7 +127,7 @@ impl OperatingSystemDeployment { ("adodb", self.adodb.as_instance()), ("vfs", self.vfs.as_instance()), ("economics", self.economics.as_instance()), - ("ibc_registry", self.ibc_registry.as_instance()), + ("ibc-registry", self.ibc_registry.as_instance()), ]; for (module_name, contract) in modules { @@ -137,6 +137,34 @@ impl OperatingSystemDeployment { Ok(()) } + + /// Publishes all OS ADOs with the created ADODB. + /// Skips publishing if the ADO version is already published. + fn publish(&self) -> Result<(), DeployError> { + let uploaded_contracts: [(&str, &Contract>); 5] = [ + ("kernel", self.kernel.as_instance()), + ("adodb", self.adodb.as_instance()), + ("vfs", self.vfs.as_instance()), + ("economics", self.economics.as_instance()), + ("ibc-registry", self.ibc_registry.as_instance()), + ]; + let deployable = os_contracts(); + for (name, contract) in uploaded_contracts { + let (_, version, _) = deployable.iter().find(|(n, _, _)| n == name).unwrap(); + let versions = self.adodb.ado_versions(&name.to_string(), None, None)?; + if versions.contains(&format!("{}@{}", name, version)) { + log::info!( + "Skipping publishing {} {} - already published", + name, + version + ); + continue; + } + let code_id = contract.code_id().unwrap(); + self.adodb.publish(name, code_id, version, None, None)?; + } + Ok(()) + } } pub fn deploy(chain: String, kernel_address: Option) -> Result { @@ -153,6 +181,9 @@ pub fn deploy(chain: String, kernel_address: Option) -> Result