diff --git a/Cargo.toml b/Cargo.toml index 7deeb1d00..16553f4b9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -126,40 +126,40 @@ serde_yaml = "0.9.34" ## Aptos dependencies ### We use a forked version so that we can override dependency versions. This is required ### to be avoid dependency conflicts with other Sovereign Labs crates. -aptos-api = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" } -aptos-api-types = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" } -aptos-bitvec = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" } -aptos-block-executor = { git = "https://github.com/movementlabsxyz/aptos-core.git", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" } -aptos-cached-packages = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" } -aptos-config = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" } -aptos-consensus-types = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" } -aptos-crypto = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41", features = [ +aptos-api = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "368de0e2d6d20f01c7cf32260bc05c037b56874e" } +aptos-api-types = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "368de0e2d6d20f01c7cf32260bc05c037b56874e" } +aptos-bitvec = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "368de0e2d6d20f01c7cf32260bc05c037b56874e" } +aptos-block-executor = { git = "https://github.com/movementlabsxyz/aptos-core.git", rev = "368de0e2d6d20f01c7cf32260bc05c037b56874e" } +aptos-cached-packages = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "368de0e2d6d20f01c7cf32260bc05c037b56874e" } +aptos-config = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "368de0e2d6d20f01c7cf32260bc05c037b56874e" } +aptos-consensus-types = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "368de0e2d6d20f01c7cf32260bc05c037b56874e" } +aptos-crypto = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "368de0e2d6d20f01c7cf32260bc05c037b56874e", features = [ "cloneable-private-keys", ] } -aptos-db = { git = "https://github.com/movementlabsxyz/aptos-core.git", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" } -aptos-executor = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" } -aptos-executor-test-helpers = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" } -aptos-executor-types = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" } -aptos-faucet-core = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" } -aptos-framework = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" } -aptos-language-e2e-tests = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" } -aptos-mempool = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" } -aptos-proptest-helpers = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" } -aptos-sdk = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" } -aptos-state-view = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" } -aptos-storage-interface = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" } -aptos-temppath = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" } -aptos-types = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" } -aptos-vm = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" } -aptos-vm-genesis = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" } -aptos-vm-logging = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" } -aptos-vm-validator = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" } -aptos-logger = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" } -aptos-vm-types = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" } -aptos-indexer = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" } -aptos-indexer-grpc-fullnode = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" } -aptos-indexer-grpc-table-info = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" } -aptos-protos = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "9dfc8e7a3d622597dfd81cc4ba480a5377f87a41" } +aptos-db = { git = "https://github.com/movementlabsxyz/aptos-core.git", rev = "368de0e2d6d20f01c7cf32260bc05c037b56874e" } +aptos-executor = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "368de0e2d6d20f01c7cf32260bc05c037b56874e" } +aptos-executor-test-helpers = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "368de0e2d6d20f01c7cf32260bc05c037b56874e" } +aptos-executor-types = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "368de0e2d6d20f01c7cf32260bc05c037b56874e" } +aptos-faucet-core = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "368de0e2d6d20f01c7cf32260bc05c037b56874e" } +aptos-framework = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "368de0e2d6d20f01c7cf32260bc05c037b56874e" } +aptos-language-e2e-tests = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "368de0e2d6d20f01c7cf32260bc05c037b56874e" } +aptos-mempool = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "368de0e2d6d20f01c7cf32260bc05c037b56874e" } +aptos-proptest-helpers = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "368de0e2d6d20f01c7cf32260bc05c037b56874e" } +aptos-sdk = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "368de0e2d6d20f01c7cf32260bc05c037b56874e" } +aptos-state-view = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "368de0e2d6d20f01c7cf32260bc05c037b56874e" } +aptos-storage-interface = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "368de0e2d6d20f01c7cf32260bc05c037b56874e" } +aptos-temppath = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "368de0e2d6d20f01c7cf32260bc05c037b56874e" } +aptos-types = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "368de0e2d6d20f01c7cf32260bc05c037b56874e" } +aptos-vm = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "368de0e2d6d20f01c7cf32260bc05c037b56874e" } +aptos-vm-genesis = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "368de0e2d6d20f01c7cf32260bc05c037b56874e" } +aptos-vm-logging = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "368de0e2d6d20f01c7cf32260bc05c037b56874e" } +aptos-vm-validator = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "368de0e2d6d20f01c7cf32260bc05c037b56874e" } +aptos-logger = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "368de0e2d6d20f01c7cf32260bc05c037b56874e" } +aptos-vm-types = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "368de0e2d6d20f01c7cf32260bc05c037b56874e" } +aptos-indexer = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "368de0e2d6d20f01c7cf32260bc05c037b56874e" } +aptos-indexer-grpc-fullnode = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "368de0e2d6d20f01c7cf32260bc05c037b56874e" } +aptos-indexer-grpc-table-info = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "368de0e2d6d20f01c7cf32260bc05c037b56874e" } +aptos-protos = { git = "https://github.com/movementlabsxyz/aptos-core", rev = "368de0e2d6d20f01c7cf32260bc05c037b56874e" } # Indexer processor = { git = "https://github.com/movementlabsxyz/aptos-indexer-processors", rev = "7658338eb9224abd9698c1e02dbc6ca526c268ce" } diff --git a/networks/movement/movement-client/Cargo.toml b/networks/movement/movement-client/Cargo.toml index 462c39dfd..b09d95ce9 100644 --- a/networks/movement/movement-client/Cargo.toml +++ b/networks/movement/movement-client/Cargo.toml @@ -35,6 +35,10 @@ path = "src/bin/e2e/followers_consistent.rs" name = "movement-tests-e2e-whitelist" path = "src/bin/e2e/whitelist.rs" +[[bin]] +name = "movement-tests-e2e-governed-gas-pool-testnet" +path = "src/bin/e2e/governed_gas_pool_testnet.rs" + [dependencies] aptos-sdk = { workspace = true } aptos-types = { workspace = true } diff --git a/networks/movement/movement-client/src/bin/e2e/governed_gas_pool_testnet.rs b/networks/movement/movement-client/src/bin/e2e/governed_gas_pool_testnet.rs new file mode 100644 index 000000000..795f2263b --- /dev/null +++ b/networks/movement/movement-client/src/bin/e2e/governed_gas_pool_testnet.rs @@ -0,0 +1,124 @@ +use anyhow::Context; +use movement_client::{ + coin_client::CoinClient, + rest_client::{Client, FaucetClient}, + types::LocalAccount, +}; +use once_cell::sync::Lazy; +use std::str::FromStr; +use url::Url; + +static SUZUKA_CONFIG: Lazy = Lazy::new(|| { + let dot_movement = dot_movement::DotMovement::try_from_env().unwrap(); + let config = dot_movement.try_get_config_from_json::().unwrap(); + config +}); + +// :!:>section_1c +static NODE_URL: Lazy = Lazy::new(|| { + let node_connection_address = SUZUKA_CONFIG + .execution_config + .maptos_config + .client + .maptos_rest_connection_hostname + .clone(); + let node_connection_port = SUZUKA_CONFIG + .execution_config + .maptos_config + .client + .maptos_rest_connection_port + .clone(); + + let node_connection_url = + format!("http://{}:{}", node_connection_address, node_connection_port); + + Url::from_str(node_connection_url.as_str()).unwrap() +}); + +static FAUCET_URL: Lazy = Lazy::new(|| { + let faucet_listen_address = SUZUKA_CONFIG + .execution_config + .maptos_config + .client + .maptos_faucet_rest_connection_hostname + .clone(); + let faucet_listen_port = SUZUKA_CONFIG + .execution_config + .maptos_config + .client + .maptos_faucet_rest_connection_port + .clone(); + + let faucet_listen_url = format!("http://{}:{}", faucet_listen_address, faucet_listen_port); + + Url::from_str(faucet_listen_url.as_str()).unwrap() +}); +// <:!:section_1c + +#[tokio::main] +async fn main() -> Result<(), anyhow::Error> { + let rest_client = Client::new(NODE_URL.clone()); + let faucet_client = FaucetClient::new(FAUCET_URL.clone(), NODE_URL.clone()); // <:!:section_1a + + let coin_client = CoinClient::new(&rest_client); // <:!:section_1b + + // Create the proposer account and fund it from the faucet + let mut proposer = LocalAccount::generate(&mut rand::rngs::OsRng); + faucet_client + .fund_account(&proposer, 1_000_000) + .await + .context("Failed to fund proposer account")?; + + // Create the beneficiary account and fund it from the faucet + let beneficiary = LocalAccount::generate(&mut rand::rngs::OsRng); + faucet_client + .fund_account(&beneficiary, 1_000_000) + .await + .context("Failed to fund beneficiary account")?; + let beneficiary_address = beneficiary.address().to_hex_literal(); + + // TODO: run some methods, collect some gas, and check the balance of the governed gas pool + + let amount = 100_000; // TODO: replace with appropriate amount w.r.t. gas collection. + + let pre_beneficiary_balance = coin_client + .get_account_balance(&beneficiary.address()) + .await + .context("Failed to get beneficiary's account balance")?; + + // Build the move script payload + let fund_from_governed_gas_pool_script = format!( + r#" +script {{ + use aptos_framework::aptos_governance; + use aptos_framework::consensus_config; + use aptos_framework::governed_gas_pool; + fun main(core_resources: &signer) {{ + let framework_signer = aptos_governance::get_signer_testnet_only(core_resources, @0000000000000000000000000000000000000000000000000000000000000001); + + // fund the beneficiary account + governed_gas_pool::fund( + &framework_signer, + @0x{beneficiary_address}, + {amount} + ); + + }} +}} +"# + ); + + // Assert the emission of the governed gas pool + let post_beneficiary_balance = coin_client + .get_account_balance(&beneficiary.address()) + .await + .context("Failed to get beneficiary's account balance")?; + assert_eq!( + post_beneficiary_balance, + pre_beneficiary_balance + amount, + "Beneficiary's balance should be increased by {}", + amount + ); + + Ok(()) +} diff --git a/process-compose/movement-full-node/process-compose.governed-gas-pool-testnet.yml b/process-compose/movement-full-node/process-compose.governed-gas-pool-testnet.yml new file mode 100644 index 000000000..7f46eaf61 --- /dev/null +++ b/process-compose/movement-full-node/process-compose.governed-gas-pool-testnet.yml @@ -0,0 +1,14 @@ +version: "3" + +environment: + +processes: + + test-governed-gas-pool-testnet: + command: | + cargo run --bin movement-tests-e2e-government-gas-pool-testnet + depends_on: + movement-full-node: + condition: process_healthy + movement-faucet: + condition: process_healthy \ No newline at end of file