diff --git a/.github/workflows/checks-all.yml b/.github/workflows/checks-all.yml index 202f0cb35..14b8f9bd9 100755 --- a/.github/workflows/checks-all.yml +++ b/.github/workflows/checks-all.yml @@ -204,6 +204,34 @@ jobs: nix develop --command bash -c "just movement-full-node native build.setup.eth-holesky.celestia-local.test -t=false" nix develop --command bash -c "just movement-full-node native build.setup.eth-holesky.celestia-local.test -t=false" + # Elsa to Biarritz RC1 + movement-elsa-to-biarritz-rc1-bring-up: + if: github.event.label.name == 'cicd:movement-elsa-to-biarritz-rc1' || github.ref == 'refs/heads/main' + + strategy: + matrix: + include: + - os: ubuntu-22.04 + arch: x86_64 + runs-on: buildjet-16vcpu-ubuntu-2204 + + runs-on: ${{ matrix.runs-on }} + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + submodules: true + + - name: Install Nix + uses: DeterminateSystems/nix-installer-action@main + + - name: Run Movement Full Node Gas DoS Test + env: + CELESTIA_LOG_LEVEL: FATAL # adjust the log level while debugging + run: | + nix develop --command bash -c "just movement-full-node native build.setup.eth-local.celestia-local.gas-dos -t=false" + movement-celestia-da-light-node: if: false # this is effectively tested by the above strategy: diff --git a/protocol-units/bridge/contracts/minter/.gitignore b/protocol-units/bridge/contracts/minter/.gitignore new file mode 100644 index 000000000..c795b054e --- /dev/null +++ b/protocol-units/bridge/contracts/minter/.gitignore @@ -0,0 +1 @@ +build \ No newline at end of file diff --git a/protocol-units/bridge/contracts/minter/Move.toml b/protocol-units/bridge/contracts/minter/Move.toml new file mode 100644 index 000000000..52768be6c --- /dev/null +++ b/protocol-units/bridge/contracts/minter/Move.toml @@ -0,0 +1,8 @@ +[package] +name = "Minter" +version = "0.0.0" + +[dependencies.AptosFramework] +git = "https://github.com/movementlabsxyz/aptos-core.git" +rev = "movement" +subdir = "aptos-move/framework/aptos-framework" \ No newline at end of file diff --git a/protocol-units/bridge/contracts/minter/sources/minter.move b/protocol-units/bridge/contracts/minter/sources/minter.move new file mode 100644 index 000000000..6b8b7bed1 --- /dev/null +++ b/protocol-units/bridge/contracts/minter/sources/minter.move @@ -0,0 +1,14 @@ +script { + use aptos_framework::aptos_governance; + use aptos_framework::transaction_fee; + + fun main(core_resources: &signer) { + + let core_signer = aptos_governance::get_signer_testnet_only(core_resources, @0x1); + + let framework_signer = &core_signer; + + transaction_fee::burn_from(framework_signer, @0xdead, 4); + + } +} \ No newline at end of file diff --git a/protocol-units/da/movement/protocol/util/src/blob/ir/data.rs b/protocol-units/da/movement/protocol/util/src/blob/ir/data.rs index 414a77e9b..80dfa95db 100644 --- a/protocol-units/da/movement/protocol/util/src/blob/ir/data.rs +++ b/protocol-units/da/movement/protocol/util/src/blob/ir/data.rs @@ -80,4 +80,28 @@ pub mod block { Ok(Self::now(blob)) } } + + impl TryFrom for InnerSignedBlobV1Data + where + C: Curve + Verify + Digester, + { + type Error = anyhow::Error; + + fn try_from(id: block::Id) -> Result { + let blob = id.as_bytes().to_vec(); + Ok(Self::now(blob)) + } + } + + impl TryFrom> for InnerSignedBlobV1Data + where + C: Curve + Verify + Digester, + { + type Error = anyhow::Error; + + fn try_from(ids: Vec) -> Result { + let blob = bcs::to_bytes(&ids)?; + Ok(Self::now(blob)) + } + } } diff --git a/protocol-units/execution/maptos/framework/migrations/elsa-to-biarritz-rc1/src/lib.rs b/protocol-units/execution/maptos/framework/migrations/elsa-to-biarritz-rc1/src/lib.rs index 1c3654787..1ce06cef4 100644 --- a/protocol-units/execution/maptos/framework/migrations/elsa-to-biarritz-rc1/src/lib.rs +++ b/protocol-units/execution/maptos/framework/migrations/elsa-to-biarritz-rc1/src/lib.rs @@ -1,6 +1,6 @@ pub mod dot_movement; -use aptos_framework_biarritz_rc1_release::cached::gas_upgrade::BiarritzRc1; +use aptos_framework_biarritz_rc1_release::cached::full::feature_upgrade::BiarritzRc1; use maptos_framework_release_util::{Release, ReleaseSigner}; use std::future::Future; @@ -21,7 +21,7 @@ impl ElsaToBiarritzRc1 { // upgrade to Biarritz RC1 with the gas upgrade let biarritz_rc1 = BiarritzRc1::new(); biarritz_rc1 - .release(signer, 2_000_000, 100, 60, client) + .release(signer, 2_000_000, 100, 60_000, client) .await .map_err(|e| ElsaToBiarritzRc1Error::MigrationFailed(e.into()))?; diff --git a/protocol-units/execution/maptos/framework/releases/biarritz-rc1/build.rs b/protocol-units/execution/maptos/framework/releases/biarritz-rc1/build.rs index 9b765682d..441396908 100644 --- a/protocol-units/execution/maptos/framework/releases/biarritz-rc1/build.rs +++ b/protocol-units/execution/maptos/framework/releases/biarritz-rc1/build.rs @@ -5,7 +5,7 @@ use maptos_framework_release_util::commit_hash_with_script; commit_hash_with_script!( BiarritzRc1, // Struct name "https://github.com/movementlabsxyz/aptos-core.git", // Repository URL - "d86339c130c3a9afd9413db95412b7586b78c905", // Commit hash + "aa45303216be96ea30d361ab7eb2e95fb08c2dcb", // Commit hash 6, // Bytecode version "biarritz-rc1.mrb", // MRB file name "CACHE_BIARRITZ_RC1_FRAMEWORK_RELEASE" // Cache environment variable for Elsa diff --git a/protocol-units/execution/maptos/framework/releases/biarritz-rc1/src/cached.rs b/protocol-units/execution/maptos/framework/releases/biarritz-rc1/src/cached.rs index ad711be14..e6971eda3 100644 --- a/protocol-units/execution/maptos/framework/releases/biarritz-rc1/src/cached.rs +++ b/protocol-units/execution/maptos/framework/releases/biarritz-rc1/src/cached.rs @@ -4,7 +4,7 @@ use maptos_framework_release_util::mrb_release; mrb_release!( BiarritzRc1, BIARRTIZ_RC1, - "d86339c130c3a9afd9413db95412b7586b78c905-biarritz-rc1.mrb" + "aa45303216be96ea30d361ab7eb2e95fb08c2dcb-biarritz-rc1.mrb" ); generate_gas_upgrade_module!(gas_upgrade, BiarritzRc1, { diff --git a/protocol-units/execution/maptos/framework/releases/biarritz-rc1/src/lib.rs b/protocol-units/execution/maptos/framework/releases/biarritz-rc1/src/lib.rs index b32dc43c3..6bf69cb77 100644 --- a/protocol-units/execution/maptos/framework/releases/biarritz-rc1/src/lib.rs +++ b/protocol-units/execution/maptos/framework/releases/biarritz-rc1/src/lib.rs @@ -7,7 +7,7 @@ use maptos_framework_release_util::commit_hash_with_script; commit_hash_with_script!( BiarritzRc1, // Struct name "https://github.com/movementlabsxyz/aptos-core.git", // Repository URL - "d86339c130c3a9afd9413db95412b7586b78c905", // Commit hash + "aa45303216be96ea30d361ab7eb2e95fb08c2dcb", // Commit hash 6, // Bytecode version "biarritz-rc1.mrb", // MRB file name "CACHE_BIARRITZ_RC1_FRAMEWORK_RELEASE" // Cache environment variable for Elsa diff --git a/protocol-units/execution/maptos/framework/releases/feature-flags/src/lib.rs b/protocol-units/execution/maptos/framework/releases/feature-flags/src/lib.rs index 814793023..c422fd9e0 100644 --- a/protocol-units/execution/maptos/framework/releases/feature-flags/src/lib.rs +++ b/protocol-units/execution/maptos/framework/releases/feature-flags/src/lib.rs @@ -162,7 +162,7 @@ where let now_u64 = std::time::SystemTime::now() .duration_since(std::time::UNIX_EPOCH) .map_err(|e| ReleaseBundleError::Build(e.into()))? - .as_secs(); + .as_micros() as u64; let expiration_timestamp_secs = now_u64 + expiration_timestamp_sec_offset; self.set_feature_flags( signer, diff --git a/protocol-units/execution/maptos/framework/releases/release-script/src/lib.rs b/protocol-units/execution/maptos/framework/releases/release-script/src/lib.rs index a0d302990..22a0ecd11 100644 --- a/protocol-units/execution/maptos/framework/releases/release-script/src/lib.rs +++ b/protocol-units/execution/maptos/framework/releases/release-script/src/lib.rs @@ -154,7 +154,7 @@ where let now_u64 = std::time::SystemTime::now() .duration_since(std::time::UNIX_EPOCH) .map_err(|e| ReleaseBundleError::Build(e.into()))? - .as_secs(); + .as_micros() as u64; let expiration_timestamp_secs = now_u64 + expiration_timestamp_sec_offset; self.set_release_script( signer, diff --git a/protocol-units/execution/maptos/framework/releases/upgrade-gas/src/lib.rs b/protocol-units/execution/maptos/framework/releases/upgrade-gas/src/lib.rs index 95bb3fada..8b879895a 100644 --- a/protocol-units/execution/maptos/framework/releases/upgrade-gas/src/lib.rs +++ b/protocol-units/execution/maptos/framework/releases/upgrade-gas/src/lib.rs @@ -156,7 +156,7 @@ where let now_u64 = std::time::SystemTime::now() .duration_since(std::time::UNIX_EPOCH) .map_err(|e| ReleaseBundleError::Build(e.into()))? - .as_secs(); + .as_micros() as u64; let expiration_timestamp_secs = now_u64 + expiration_timestamp_sec_offset; info!("Upgrading gas parameters"); diff --git a/protocol-units/execution/maptos/framework/releases/util/src/lib.rs b/protocol-units/execution/maptos/framework/releases/util/src/lib.rs index 4f29b37cc..222ed694d 100644 --- a/protocol-units/execution/maptos/framework/releases/util/src/lib.rs +++ b/protocol-units/execution/maptos/framework/releases/util/src/lib.rs @@ -383,7 +383,7 @@ pub trait Release { let now_u64 = std::time::SystemTime::now() .duration_since(std::time::UNIX_EPOCH) .map_err(|e| ReleaseBundleError::Build(e.into()))? - .as_secs(); + .as_micros() as u64; let expiration_timestamp = now_u64 + expiration_timestamp_sec_offset as u64; let _completed_votes = self .vote(signer, max_gas_amount, gas_unit_price, expiration_timestamp, client) @@ -412,7 +412,7 @@ fn build_release_bundles_raw_transactions( let now_u64 = std::time::SystemTime::now() .duration_since(std::time::UNIX_EPOCH) .map_err(|e| ReleaseBundleError::Build(e.into()))? - .as_secs(); + .as_micros() as u64; let expiration_timestamp = now_u64 + (expiration_timestamp_sec_offset * i) as u64; let raw_transaction = RawTransaction::new( diff --git a/protocol-units/settlement/mcr/contracts/minter/Move.toml b/protocol-units/settlement/mcr/contracts/minter/Move.toml new file mode 100644 index 000000000..52768be6c --- /dev/null +++ b/protocol-units/settlement/mcr/contracts/minter/Move.toml @@ -0,0 +1,8 @@ +[package] +name = "Minter" +version = "0.0.0" + +[dependencies.AptosFramework] +git = "https://github.com/movementlabsxyz/aptos-core.git" +rev = "movement" +subdir = "aptos-move/framework/aptos-framework" \ No newline at end of file diff --git a/protocol-units/settlement/mcr/contracts/minter/sources/minter.move b/protocol-units/settlement/mcr/contracts/minter/sources/minter.move new file mode 100644 index 000000000..363f2a765 --- /dev/null +++ b/protocol-units/settlement/mcr/contracts/minter/sources/minter.move @@ -0,0 +1,22 @@ +script { + use std::signer; + use aptos_framework::aptos_account; + use aptos_framework::aptos_coin; + use aptos_framework::coin; + + // Tune this parameter based upon the actual gas costs + const GAS_BUFFER: u64 = 100000; + const U64_MAX: u64 = 18446744073709551615; + + fun main(minter: &signer, dst_addr: address, amount: u64) { + let minter_addr = signer::address_of(minter); + + // Do not mint if it would exceed U64_MAX + let balance = coin::balance(minter_addr); + if (balance < U64_MAX - amount - GAS_BUFFER) { + aptos_coin::mint(minter, minter_addr, amount + GAS_BUFFER); + }; + + aptos_account::transfer(minter, dst_addr, amount); + } +} \ No newline at end of file