From aa20b6edc4f7bbe0d775808cbc2521e7fbd2ab1b Mon Sep 17 00:00:00 2001 From: primata Date: Tue, 24 Mar 2026 00:32:04 -0300 Subject: [PATCH 1/8] add movement changes Co-Authored-By: Claude Sonnet 4.6 --- examples/Move.toml | 75 +++++++ examples/config.sh | 137 +++++++++++++ examples/deploy.sh | 105 ++++++++++ examples/encode_configs.sh | 193 ++++++++++++++++++ examples/oft-adapter-aptos-move/Move.toml | 53 ++--- examples/oft-aptos-move/.gitignore | 5 +- examples/oft-aptos-move/Move.toml | 58 +++--- .../sources/oft_implementation/oft_fa.move | 22 +- .../test/movement/oft_fa_tests.move | 2 + .../tests/implementations/oft_fa_tests.move | 79 +++++++ examples/propose.sh | 39 ++++ examples/set_move_env.sh | 193 ++++++++++++++++++ 12 files changed, 904 insertions(+), 57 deletions(-) create mode 100644 examples/Move.toml create mode 100644 examples/config.sh create mode 100644 examples/deploy.sh create mode 100644 examples/encode_configs.sh create mode 100644 examples/propose.sh create mode 100644 examples/set_move_env.sh diff --git a/examples/Move.toml b/examples/Move.toml new file mode 100644 index 0000000000..18fbea6d78 --- /dev/null +++ b/examples/Move.toml @@ -0,0 +1,75 @@ +[package] +name = "oft" +version = "1.0.0" +authors = [] + +[addresses] +oft = "_" +oft_admin = "_" +# aptos-mainnet +oft_common = "0xcf4e1eb4b32b84266f27efe35539a9a3b7a3ec822299d8eb828ca32e581aa72c" +router_node_0 = "0x6de27e5aa7dbee0fc32af2a92b8aa0b96e0033026ade8f22e4692cd8603220e9" +simple_msglib = "0x52d5c6f8dcb20ed8ace8dbaa7cc09a98eb1dbec0f184720795310c031ace5111" +blocked_msglib = "0x3ca0d187f1938cf9776a0aa821487a650fc7bb2ab1c1d241ba319192aae4afc6" +uln_302 = "0xc33752e0220faf79e45385dd73fb28d681dcd9f1569a1480725507c1f3c3aba9" +router_node_1 = "0x2ae54c38567f217c42b255016a38ccd68b67eb276a6cc3ebad609935fe3cc70c" +endpoint_v2_common = "0xe1dc2a62b445403bea0dbd73df8cee03b3ead0a06b003e72e401c030a810a133" +endpoint_v2 = "0xe60045e20fc2c99e869c1c34a65b9291c020cd12a0d37a00a53ac1348af4f43c" +layerzero_admin = "0x19f1c63510f3ea8b8cd467ebe663897371919c185218d2859927f5a357b0bcae" +layerzero_treasury_admin = "0x19f1c63510f3ea8b8cd467ebe663897371919c185218d2859927f5a357b0bcae" +msglib_types = "0xa3fac5ed887625dd1d4371a60c7bfd5869e8ce5c3c5783fb8898dc0128365c31" +treasury = "0x77c941e60b8e2c8d784de2ee456fd497283edfe1e15704c99a192ff795fc38b7" +worker_peripherals = "0x19f1c63510f3ea8b8cd467ebe663897371919c185218d2859927f5a357b0bcae" +price_feed_router_0 = "0x969722e6e181bb17165c17492c037514cd213a0ce9830a59724190e13c011136" +price_feed_router_1 = "0x3808a699d1a14d25de813a4e0bbcde7a8ce8d27ccc9055aee8070d28172faced" +price_feed_module_0 = "0xad0f7141f626c07db99a7fe5b864fde080bc4966c144d88f6f14ac4af391f30" +worker_common = "0x1bffc83ec332cb9de738e8f0c27dd2230ee57bdbc71473047fcfe8bfaa21fab7" +executor_fee_lib_router_0 = "0xfb941d4e28fc08b94fe53c9043e392d6405a16475bccbfee5222d588cef5b709" +executor_fee_lib_router_1 = "0xf8ed27afba36de5693de4c9ea654ee73de7b0e2ac7c43a54d36bc155a944d9d1" +dvn_fee_lib_router_0 = "0x707f09a7db866c4be5d2ee7c4ffcfe38e1b893f8d757712fe224fa19da881c93" +dvn_fee_lib_router_1 = "0x31dcc84f4bfffff09648cb9ae6d84261ddb7c04646d1f2f6c38bf6d7551a0831" +executor_fee_lib_0 = "0xbbb5d80871b10c4a7c10b9bbc636fdca4faa05feb3b03dc27e3018a7bfcbd8cb" +dvn_fee_lib_0 = "0x349c43bc506cbbe7b754b164867bd1751763410b6458a798c25bb6f3c3e9e487" +dvn = "0xdf8f0a53b20f1656f998504b81259698d126523a31bdbbae45ba1e8a3078d8da" +native_token_metadata_address = "0xa" + +[dev-addresses] +oft = "0x302814823" +oft_admin = "0x12321241" +oft_common = "0x30281482332" +router_node_0 = "0x10000f" +simple_msglib = "0x100011" +blocked_msglib = "0x100001" +uln_302 = "0x100013" +router_node_1 = "0x100010" +endpoint_v2_common = "0x100007" +endpoint_v2 = "0x100006" +layerzero_admin = "0x200001" +layerzero_treasury_admin = "0x200002" +msglib_types = "0x10000b" +treasury = "0x100012" +worker_peripherals = "0x3000" +price_feed_router_0 = "0x10000d" +price_feed_router_1 = "0x10000e" +price_feed_module_0 = "0x10000c" +worker_common = "0x100014" +executor_fee_lib_router_0 = "0x100009" +executor_fee_lib_router_1 = "0x10000a" +dvn_fee_lib_router_0 = "0x100004" +dvn_fee_lib_router_1 = "0x100005" +executor_fee_lib_0 = "0x100008" +dvn_fee_lib_0 = "0x100003" +dvn = "0x100002" + +[dependencies.AptosFramework] +git = "https://github.com/aptos-labs/aptos-framework.git" +rev = "99f5e915b6d231d0ffbc1aff282d36148d2a8b24" +subdir = "aptos-framework" + +[dependencies] +endpoint_v2_common = { git = "https://github.com/LayerZero-Labs/LayerZero-v2", rev = "main", subdir = "packages/layerzero-v2/aptos/contracts/endpoint_v2_common" } +endpoint_v2 = { git = "https://github.com/LayerZero-Labs/LayerZero-v2", rev = "main", subdir = "packages/layerzero-v2/aptos/contracts/endpoint_v2" } +oft_common = { git = "https://github.com/LayerZero-Labs/LayerZero-v2", rev = "main", subdir = "packages/layerzero-v2/aptos/contracts/oapps/oft_common" } + +[dev-dependencies] +simple_msglib = { git = "https://github.com/LayerZero-Labs/LayerZero-v2", rev = "main", subdir = "packages/layerzero-v2/aptos/contracts/msglib/libs/simple_msglib" } diff --git a/examples/config.sh b/examples/config.sh new file mode 100644 index 0000000000..e1de42c0a4 --- /dev/null +++ b/examples/config.sh @@ -0,0 +1,137 @@ +module_address="${1:-}" +admin="${2:-}" +eid="${3:-40101}" +peer="${4:-}" +cli=${5:-"movement"} +network=${6:-"mainnet"} +profile=${7:-"default"} + +echo "Using CLI: $cli" +echo "Using Network: $network" +echo "Module Address: $module_address" +echo "Admin: $admin" +echo "EID: $eid" +echo "Peer: $peer" + +multisig=false +multisig_address="" + +# ── Set these per deployment ───────────────────────────────────────────────── + +# ───────────────────────────────────────────────────────────────────────────── + +if $multisig; then + if [ -z "$multisig_address" ]; then + echo "Error: multisig_address must be set if multisig is true" + exit 1 + fi + command="multisig create_transaction --multisig-address $multisig_address" +else + command="move run" +fi + +deployer=$(awk '/^ '$profile':/{flag=1} flag && /^ account:/{print $2; exit}' .$cli/config.yaml) +[[ "$deployer" != 0x* ]] && deployer="0x${deployer}" +if [ -z "$module_address" ]; then + module_address="$deployer" +fi +[[ "$module_address" != 0x* ]] && module_address="0x${module_address}" +[[ -n "$multisig_address" && "$multisig_address" != 0x* ]] && multisig_address="0x${multisig_address}" +[[ -n "$peer" && "$peer" != 0x* ]] && peer="0x${peer}" +[[ -n "$admin" && "$admin" != 0x* ]] && admin="0x${admin}" + +case "${cli}:${network}" in + movement:testnet) + msg_lib=0xcc1c03aed42e2841211865758b5efe93c0dde2cb7a2a5dc6cf25a4e33ad23690 + executor=0x93353700091200ef9fdc536ce6a86182cc7e62da25f94356be9421c6310b9585 + endpoint=0x7f03103b83c51c8b09be1751a797a65ac6e755f72947ecdecffc203d32d816c6 + required_dvns="0x5b983a8faf6977f0bc76ed2a96fda5abdacaeb829841c2d4da176acd78d19d97,0x5e621608b81aa5243d193bf69438c9402712303490d5d974f06f63c154fd977b,0x756f8ab056688d22687740f4a9aeec3b361170b28d08b719e28c4d38eed1043e" + ;; + movement:mainnet) + msg_lib=0xc33752e0220faf79e45385dd73fb28d681dcd9f1569a1480725507c1f3c3aba9 + executor=0x15a5bbf1eb7998a22c9f23810d424abe40bd59ddd8e6ab7e59529853ebed41c4 + endpoint=0xe60045e20fc2c99e869c1c34a65b9291c020cd12a0d37a00a53ac1348af4f43c + required_dvns="0x2b696b3ee859b7eb624e1fd5de49f4d3806f49862f1177d6827fd1beffde9179,0xdf8f0a53b20f1656f998504b81259698d126523a31bdbbae45ba1e8a3078d8da,0xbcfb6d3ce5e99275e5fa09b3f53eaaea32365c776d023c51a680c4c420d88b91" + ;; + aptos:testnet) + msg_lib=0xcc1c03aed42e2841211865758b5efe93c0dde2cb7a2a5dc6cf25a4e33ad23690 + executor=0x93353700091200ef9fdc536ce6a86182cc7e62da25f94356be9421c6310b9585 + endpoint=0x7f03103b83c51c8b09be1751a797a65ac6e755f72947ecdecffc203d32d816c6 + required_dvns="0x5e621608b81aa5243d193bf69438c9402712303490d5d974f06f63c154fd977b,0x756f8ab056688d22687740f4a9aeec3b361170b28d08b719e28c4d38eed1043e,0x5b983a8faf6977f0bc76ed2a96fda5abdacaeb829841c2d4da176acd78d19d97" + ;; + aptos:mainnet) + msg_lib=0xc33752e0220faf79e45385dd73fb28d681dcd9f1569a1480725507c1f3c3aba9 + executor=0x15a5bbf1eb7998a22c9f23810d424abe40bd59ddd8e6ab7e59529853ebed41c4 + endpoint=0xe60045e20fc2c99e869c1c34a65b9291c020cd12a0d37a00a53ac1348af4f43c + required_dvns="0x9880ed7ade7e7f8f8eb070ce72c51b231921e29e65b3d51fa3810814bba32c00,0xf3f0a412626edba5ddd3613d91109b241893873ac5479ade231cf0b3130572b5,0xcb2ab3c2fb799c6578b9950f9db7ff555a2d4967ef15437230346f56599801ae" + ;; + *) + echo "Error: unknown cli/network combination '${cli}:${network}'. Use cli=movement|aptos and network=testnet|mainnet." + exit 1 + ;; +esac + +enforced_options="0x00030100110100000000000000000000000000013880" +optional_dvns="" +use_default_dvns=false +use_default_confirmations=false +use_default_optional_dvns=false +send_confirmations=10 +receive_confirmations=10 +max_message_length=10000 + +source ./encode_configs.sh +read -r executor_config send_config receive_config <<<"$(encode_lz_configs \ + $use_default_confirmations $send_confirmations $receive_confirmations \ + $use_default_dvns $use_default_optional_dvns \ + "$required_dvns" "$optional_dvns" \ + $executor $max_message_length $msg_lib)" + +echo "Executor Config: $executor_config" +echo "Send Config: $send_config" +echo "Receive Config: $receive_config" + +echo yes | $cli $command \ + --function-id "$module_address::oapp_core::set_delegate" \ + --args address:$deployer \ + --profile $profile + +echo yes | $cli $command \ + --function-id "$module_address::oapp_core::set_enforced_options" \ + --args u32:$eid u16:1 hex:$enforced_options \ + --profile $profile + +echo yes | $cli $command \ + --function-id "$module_address::oapp_core::set_enforced_options" \ + --args u32:$eid u16:2 hex:$enforced_options \ + --profile $profile + +echo yes | $cli $command \ + --function-id "$module_address::oapp_core::set_send_library" \ + --args u32:$eid address:$msg_lib \ + --profile $profile + +echo yes | $cli $command \ + --function-id "$module_address::oapp_core::set_receive_library" \ + --args u32:$eid address:$msg_lib u64:0 \ + --profile $profile + +echo yes | $cli $command \ + --function-id "$module_address::oapp_core::set_config" \ + --args address:$msg_lib u32:$eid u32:1 hex:$executor_config \ + --profile $profile + +echo yes | $cli $command \ + --function-id "$module_address::oapp_core::set_config" \ + --args address:$msg_lib u32:$eid u32:2 hex:$send_config \ + --profile $profile + +echo yes | $cli $command \ + --function-id "$module_address::oapp_core::set_config" \ + --args address:$msg_lib u32:$eid u32:3 hex:$receive_config \ + --profile $profile + +echo yes | $cli $command \ + --function-id "$module_address::oapp_core::set_peer" \ + --args u32:$eid hex:$peer \ + --profile $profile diff --git a/examples/deploy.sh b/examples/deploy.sh new file mode 100644 index 0000000000..34b300d7f4 --- /dev/null +++ b/examples/deploy.sh @@ -0,0 +1,105 @@ +# #!/bin/sh + +# # Exit on any error +set -e +# Exit on undefined variables +set -u +# Exit on pipe failures +set -o pipefail +cli="aptos" +environment="mainnet" +profile="gui" +token_name="GUI" +symbol="GUI" +icon_uri="https://www.guiinu.com/favicon.svg" +project_uri="https://www.guiinu.com/" +module_name="oft_adapter_fa" +target_eid=30325 +target_fa="0x0009da434d9b873b5159e8eeed70202ad22dc075867a7793234fbc981b63e119" +shared_decimals=6 +peer="0xc78639b024a4c159d13f8c8a80e4fed0bd5aa62a1924c905239e3b6bcb7aa81f" +dir="" +if [ "$module_name" == "oft_fa" ] ; then + dir="oft-aptos-move" +elif [ "$module_name" == "oft_adapter_fa" ] ; then + dir="oft-adapter-aptos-move" +fi + +source ./set_move_env.sh +set_move_env "$cli" "$environment" "$dir" + +echo "Initializing $cli..." +if [ $profile == "testnet" ]; then + echo "" | $cli init --assume-yes --network $environment --profile $profile +fi + +echo "Extracting deployer address from $profile account..." +deployer=$(awk '/^ '$profile':/{flag=1} flag && /^ account:/{print $2; exit}' .$cli/config.yaml) +# Validate deployer address is not empty +if [ -z "$deployer" ]; then + echo "Error: Failed to extract deployer address from .$cli/config.yaml" + exit 1 +fi + + +# config the final admin (can be the same as deployer or different) +final_admin=$deployer + +echo "Publishing module..." +# publish_result=$($cli move deploy-object --address-name oft --named-addresses oft_admin=$deployer --profile $profile --assume-yes --package-dir $dir 2>&1) +# echo "Publish result: $publish_result" +# object_addr=$(echo "$publish_result" | grep -oE 'object address (0x[0-9a-fA-F]+)' | grep -oE '0x[0-9a-fA-F]+' | head -n 1 || true) +object_addr="0xc78639b024a4c159d13f8c8a80e4fed0bd5aa62a1924c905239e3b6bcb7aa81f" + +if [ -z "$object_addr" ]; then + echo "Error: Failed to extract object address from publish result" + echo "Publish output:" + # echo "$publish_result" + exit 1 +fi + +echo "Deployer address: $deployer" +echo "Initializing $symbol..." + +to_u8_vec() { + printf "%s" "$1" \ + | od -An -t u1 \ + | tr -s '[:space:]' '\n' \ + | grep -E '^[0-9]+$' \ + | awk 'NR==1{printf "%s",$1; next} {printf ", %s",$1}' +} + +token_name_u8=$(to_u8_vec "$token_name") +symbol_u8=$(to_u8_vec "$symbol") +icon_uri_u8=$(to_u8_vec "$icon_uri") +project_uri_u8=$(to_u8_vec "$project_uri") + +# if [ "$module_name" == "oft_fa" ] ; then +# echo yes | $cli move run --function-id ${object_addr}::${module_name}::initialize \ +# --args "u8:[$token_name_u8]" \ +# "u8:[$symbol_u8]" \ +# "u8:[$icon_uri_u8]" \ +# "u8:[$project_uri_u8]" \ +# u8:$shared_decimals \ +# u8:$shared_decimals \ +# --profile $profile + +# elif [ "$module_name" == "oft_adapter_fa" ] ; then +# echo yes | $cli move run --function-id ${object_addr}::${module_name}::initialize \ +# --args --args address:$target_fa \ +# u8:$shared_decimals \ +# --profile $profile +# fi + + +if [ "$final_admin" != "$deployer" ]; then + movement move run --assume-yes --function-id 0x1::object::transfer_call \ + --args address:${object_addr} \ + address:${final_admin} \ + --profile $profile +fi + +if [ "$peer" ]; then + echo "Configuring $symbol with peer $peer and target EID $target_eid client $cli on network $environment..." + bash config.sh "$object_addr" "$final_admin" "$target_eid" "$peer" "$cli" "$environment" "$profile" +fi \ No newline at end of file diff --git a/examples/encode_configs.sh b/examples/encode_configs.sh new file mode 100644 index 0000000000..eccca00240 --- /dev/null +++ b/examples/encode_configs.sh @@ -0,0 +1,193 @@ +#!/bin/bash +# ============================================================ +# LayerZero V2 Aptos Move Config Encoder +# Generates big-endian encoded vector for set_config(): +# config_type 1 = ExecutorConfig +# config_type 2 = SendUln (UlnConfig) +# config_type 3 = RecvUln (UlnConfig) +# +# Usage: +# source encode_configs.sh +# +# read -r EXECUTOR_CFG SEND_ULN_CFG RECV_ULN_CFG <<< "$(encode_lz_configs \ +# false 10 10 \ +# false \ +# true \ +# "addr1,addr2,addr3" "" \ +# 10000 )" +# ============================================================ + +# ============================================================ +# Encoding Helpers (big-endian) +# ============================================================ + +_encode_u8() { + printf "%02x" "$1" +} + +_encode_u32() { + local val=$1 + printf "%02x%02x%02x%02x" \ + $(((val >> 24) & 0xFF)) \ + $(((val >> 16) & 0xFF)) \ + $(((val >> 8) & 0xFF)) \ + $((val & 0xFF)) +} + +_encode_u64() { + local val=$1 + printf "%02x%02x%02x%02x%02x%02x%02x%02x" \ + $(((val >> 56) & 0xFF)) \ + $(((val >> 48) & 0xFF)) \ + $(((val >> 40) & 0xFF)) \ + $(((val >> 32) & 0xFF)) \ + $(((val >> 24) & 0xFF)) \ + $(((val >> 16) & 0xFF)) \ + $(((val >> 8) & 0xFF)) \ + $((val & 0xFF)) +} + +_encode_bool() { + if [ "$1" = true ] || [ "$1" = "1" ]; then + printf "01" + else + printf "00" + fi +} + +_encode_uleb128() { + local val=$1 + local result="" + while [ "$val" -ge 128 ]; do + result="${result}$(printf "%02x" $(((val & 0x7F) | 0x80)))" + val=$((val >> 7)) + done + result="${result}$(printf "%02x" "$val")" + echo -n "$result" +} + +_encode_address() { + local addr="${1#0x}" + addr="${addr// /}" + printf "%064s" "$addr" | tr ' ' '0' +} + +# ============================================================ +# encode_lz_configs +# +# DVN addresses are passed as comma-separated strings. +# optional_dvn_threshold is derived from the optional_dvns length +# +# Arguments (positional): +# $1 use_default_confirmations bool - use default confirmations (send & recv) +# $2 send_confirmations_amount u64 - send confirmation count (ignored if $1=true) +# $3 recv_confirmations_amount u64 - recv confirmation count (ignored if $1=true) +# $4 use_default_required_dvns bool - use default required DVNs +# $5 use_default_optional_dvns bool - use default optional DVNs +# $6 required_dvns str - comma-separated required DVN addresses +# $7 optional_dvns str - comma-separated optional DVN addresses +# $8 executor_address addr - executor bytes32 address +# $9 max_message_size u32 - executor max message size +# $10 uln_address addr - ULN address (shared send/recv) +# +# Output: three space-separated hex strings (no 0x prefix) +# EXECUTOR_CONFIG SEND_ULN_CONFIG RECV_ULN_CONFIG +# +# Example: +# read -r EX SEND RECV <<< "$(encode_lz_configs \ +# false 10 10 \ +# false \ +# true \ +# "2b696b...,bcfb6d...,df8f0a..." "" \ +# $executor 10000 $msg_lib)" +# ============================================================ + +encode_lz_configs() { + local use_default_confirmations="$1" + local send_confirmations_amount="$2" + local recv_confirmations_amount="$3" + local use_default_required_dvns="$4" + local use_default_optional_dvns="$5" + local required_dvns_csv="$6" + local optional_dvns_csv="$7" + local executor_address="$8" + local max_message_size="$9" + local uln_address="${10}" + + # Split comma-separated DVN strings into arrays and sort ascending (big-endian) + local required_dvns=() + if [ -n "$required_dvns_csv" ]; then + IFS=',' read -ra required_dvns <<< "$required_dvns_csv" + IFS=$'\n' required_dvns=($(for d in "${required_dvns[@]}"; do + echo "${d#0x}" | tr '[:upper:]' '[:lower:]' + done | sort)); unset IFS + fi + local optional_dvns=() + if [ -n "$optional_dvns_csv" ]; then + IFS=',' read -ra optional_dvns <<< "$optional_dvns_csv" + IFS=$'\n' optional_dvns=($(for d in "${optional_dvns[@]}"; do + echo "${d#0x}" | tr '[:upper:]' '[:lower:]' + done | sort)); unset IFS + fi + + # Derive optional_dvn_threshold from optional_dvns length + local optional_dvn_threshold=${#optional_dvns[@]} + + # --- Validation --- + if [ "$use_default_required_dvns" = false ] && [ "${#required_dvns[@]}" -eq 0 ]; then + echo "ERROR: use_default_required_dvns=false but REQUIRED_DVNS is empty" >&2 + return 1 + fi + + # --- Executor Config --- + local executor_cfg="" + executor_cfg+=$(_encode_u32 "$max_message_size") + executor_cfg+=$(_encode_address "$executor_address") + + # --- helper: encode UlnConfig --- + # $1 = confirmations amount for this direction + _encode_uln() { + local conf_amount="$1" + local result="" + # confirmations: u64 + if [ "$use_default_confirmations" = true ]; then + result+=$(_encode_u64 0) + else + result+=$(_encode_u64 "$conf_amount") + fi + # optional_dvn_threshold: u8 + if [ "$use_default_optional_dvns" = true ]; then + result+=$(_encode_u8 0) + else + result+=$(_encode_u8 "$optional_dvn_threshold") + fi + # required_dvns: vector
+ if [ "$use_default_required_dvns" = false ]; then + result+=$(_encode_uleb128 "${#required_dvns[@]}") + for dvn in "${required_dvns[@]}"; do + result+=$(_encode_address "$dvn") + done + else + result+=$(_encode_uleb128 0) + fi + # optional_dvns: vector
+ if [ "$use_default_optional_dvns" = false ]; then + result+=$(_encode_uleb128 "${#optional_dvns[@]}") + for dvn in "${optional_dvns[@]}"; do + result+=$(_encode_address "$dvn") + done + else + result+=$(_encode_uleb128 0) + fi + # use_default bools + result+=$(_encode_bool "$use_default_confirmations") + result+=$(_encode_bool "$use_default_required_dvns") + result+=$(_encode_bool "$use_default_optional_dvns") + echo -n "$result" + } + + local send_uln_cfg=$(_encode_uln "$send_confirmations_amount") + local recv_uln_cfg=$(_encode_uln "$recv_confirmations_amount") + + echo "${executor_cfg} ${send_uln_cfg} ${recv_uln_cfg}" +} diff --git a/examples/oft-adapter-aptos-move/Move.toml b/examples/oft-adapter-aptos-move/Move.toml index cacddf99cd..f454ed7170 100644 --- a/examples/oft-adapter-aptos-move/Move.toml +++ b/examples/oft-adapter-aptos-move/Move.toml @@ -6,30 +6,31 @@ authors = [] [addresses] oft = "_" oft_admin = "_" -oft_common = "_" -router_node_0 = "_" -simple_msglib = "_" -blocked_msglib = "_" -uln_302 = "_" -router_node_1 = "_" -endpoint_v2_common = "_" -endpoint_v2 = "_" -layerzero_admin = "_" -layerzero_treasury_admin = "_" -msglib_types = "_" -treasury = "_" -worker_peripherals = "_" -price_feed_router_0 = "_" -price_feed_router_1 = "_" -price_feed_module_0 = "_" -worker_common = "_" -executor_fee_lib_router_0 = "_" -executor_fee_lib_router_1 = "_" -dvn_fee_lib_router_0 = "_" -dvn_fee_lib_router_1 = "_" -executor_fee_lib_0 = "_" -dvn_fee_lib_0 = "_" -dvn = "_" +# aptos-mainnet +oft_common = "0xcf4e1eb4b32b84266f27efe35539a9a3b7a3ec822299d8eb828ca32e581aa72c" +router_node_0 = "0x6de27e5aa7dbee0fc32af2a92b8aa0b96e0033026ade8f22e4692cd8603220e9" +simple_msglib = "0x52d5c6f8dcb20ed8ace8dbaa7cc09a98eb1dbec0f184720795310c031ace5111" +blocked_msglib = "0x3ca0d187f1938cf9776a0aa821487a650fc7bb2ab1c1d241ba319192aae4afc6" +uln_302 = "0xc33752e0220faf79e45385dd73fb28d681dcd9f1569a1480725507c1f3c3aba9" +router_node_1 = "0x2ae54c38567f217c42b255016a38ccd68b67eb276a6cc3ebad609935fe3cc70c" +endpoint_v2_common = "0xe1dc2a62b445403bea0dbd73df8cee03b3ead0a06b003e72e401c030a810a133" +endpoint_v2 = "0xe60045e20fc2c99e869c1c34a65b9291c020cd12a0d37a00a53ac1348af4f43c" +layerzero_admin = "0x19f1c63510f3ea8b8cd467ebe663897371919c185218d2859927f5a357b0bcae" +layerzero_treasury_admin = "0x19f1c63510f3ea8b8cd467ebe663897371919c185218d2859927f5a357b0bcae" +msglib_types = "0xa3fac5ed887625dd1d4371a60c7bfd5869e8ce5c3c5783fb8898dc0128365c31" +treasury = "0x77c941e60b8e2c8d784de2ee456fd497283edfe1e15704c99a192ff795fc38b7" +worker_peripherals = "0x19f1c63510f3ea8b8cd467ebe663897371919c185218d2859927f5a357b0bcae" +price_feed_router_0 = "0x969722e6e181bb17165c17492c037514cd213a0ce9830a59724190e13c011136" +price_feed_router_1 = "0x3808a699d1a14d25de813a4e0bbcde7a8ce8d27ccc9055aee8070d28172faced" +price_feed_module_0 = "0xad0f7141f626c07db99a7fe5b864fde080bc4966c144d88f6f14ac4af391f30" +worker_common = "0x1bffc83ec332cb9de738e8f0c27dd2230ee57bdbc71473047fcfe8bfaa21fab7" +executor_fee_lib_router_0 = "0xfb941d4e28fc08b94fe53c9043e392d6405a16475bccbfee5222d588cef5b709" +executor_fee_lib_router_1 = "0xf8ed27afba36de5693de4c9ea654ee73de7b0e2ac7c43a54d36bc155a944d9d1" +dvn_fee_lib_router_0 = "0x707f09a7db866c4be5d2ee7c4ffcfe38e1b893f8d757712fe224fa19da881c93" +dvn_fee_lib_router_1 = "0x31dcc84f4bfffff09648cb9ae6d84261ddb7c04646d1f2f6c38bf6d7551a0831" +executor_fee_lib_0 = "0xbbb5d80871b10c4a7c10b9bbc636fdca4faa05feb3b03dc27e3018a7bfcbd8cb" +dvn_fee_lib_0 = "0x349c43bc506cbbe7b754b164867bd1751763410b6458a798c25bb6f3c3e9e487" +dvn = "0xdf8f0a53b20f1656f998504b81259698d126523a31bdbbae45ba1e8a3078d8da" native_token_metadata_address = "0xa" # For Initia: "0x8e4733bdabcf7d4afc3d14f0dd46c9bf52fb0fce9e4b996c939e195b8bc891d9" @@ -63,7 +64,7 @@ dvn = "0x100002" [dependencies.AptosFramework] git = "https://github.com/aptos-labs/aptos-framework.git" -rev = "mainnet" +rev = "99f5e915b6d231d0ffbc1aff282d36148d2a8b24" subdir = "aptos-framework" [dependencies] @@ -72,4 +73,4 @@ endpoint_v2 = { git = "https://github.com/LayerZero-Labs/LayerZero-v2", rev = "a oft_common = { git = "https://github.com/LayerZero-Labs/LayerZero-v2", rev = "aptos-v2-jan-6", subdir = "packages/layerzero-v2/aptos/contracts/oapps/oft_common" } [dev-dependencies] -simple_msglib = { git = "https://github.com/LayerZero-Labs/LayerZero-v2", rev = "aptos-v2-jan-6", subdir = "packages/layerzero-v2/aptos/contracts/msglib/libs/simple_msglib" } \ No newline at end of file +simple_msglib = { git = "https://github.com/LayerZero-Labs/LayerZero-v2", rev = "main", subdir = "packages/layerzero-v2/aptos/contracts/msglib/libs/simple_msglib" } diff --git a/examples/oft-aptos-move/.gitignore b/examples/oft-aptos-move/.gitignore index 738da4dab9..04f1cacf75 100644 --- a/examples/oft-aptos-move/.gitignore +++ b/examples/oft-aptos-move/.gitignore @@ -26,8 +26,11 @@ pnpm-error.log .idea .aptos - +.movement shell-scripts transactions/* !transactions/.gitkeep + +.movement +.aptos \ No newline at end of file diff --git a/examples/oft-aptos-move/Move.toml b/examples/oft-aptos-move/Move.toml index cacddf99cd..9a1633ed2c 100644 --- a/examples/oft-aptos-move/Move.toml +++ b/examples/oft-aptos-move/Move.toml @@ -6,32 +6,32 @@ authors = [] [addresses] oft = "_" oft_admin = "_" -oft_common = "_" -router_node_0 = "_" -simple_msglib = "_" -blocked_msglib = "_" -uln_302 = "_" -router_node_1 = "_" -endpoint_v2_common = "_" -endpoint_v2 = "_" -layerzero_admin = "_" -layerzero_treasury_admin = "_" -msglib_types = "_" -treasury = "_" -worker_peripherals = "_" -price_feed_router_0 = "_" -price_feed_router_1 = "_" -price_feed_module_0 = "_" -worker_common = "_" -executor_fee_lib_router_0 = "_" -executor_fee_lib_router_1 = "_" -dvn_fee_lib_router_0 = "_" -dvn_fee_lib_router_1 = "_" -executor_fee_lib_0 = "_" -dvn_fee_lib_0 = "_" -dvn = "_" +# movement-mainnet +oft_common = "0xcf4e1eb4b32b84266f27efe35539a9a3b7a3ec822299d8eb828ca32e581aa72c" +router_node_0 = "0x6de27e5aa7dbee0fc32af2a92b8aa0b96e0033026ade8f22e4692cd8603220e9" +simple_msglib = "0x52d5c6f8dcb20ed8ace8dbaa7cc09a98eb1dbec0f184720795310c031ace5111" +blocked_msglib = "0x3ca0d187f1938cf9776a0aa821487a650fc7bb2ab1c1d241ba319192aae4afc6" +uln_302 = "0xc33752e0220faf79e45385dd73fb28d681dcd9f1569a1480725507c1f3c3aba9" +router_node_1 = "0x2ae54c38567f217c42b255016a38ccd68b67eb276a6cc3ebad609935fe3cc70c" +endpoint_v2_common = "0xe1dc2a62b445403bea0dbd73df8cee03b3ead0a06b003e72e401c030a810a133" +endpoint_v2 = "0xe60045e20fc2c99e869c1c34a65b9291c020cd12a0d37a00a53ac1348af4f43c" +layerzero_admin = "0x19f1c63510f3ea8b8cd467ebe663897371919c185218d2859927f5a357b0bcae" +layerzero_treasury_admin = "0x19f1c63510f3ea8b8cd467ebe663897371919c185218d2859927f5a357b0bcae" +msglib_types = "0xa3fac5ed887625dd1d4371a60c7bfd5869e8ce5c3c5783fb8898dc0128365c31" +treasury = "0x77c941e60b8e2c8d784de2ee456fd497283edfe1e15704c99a192ff795fc38b7" +worker_peripherals = "0x19f1c63510f3ea8b8cd467ebe663897371919c185218d2859927f5a357b0bcae" +price_feed_router_0 = "0x969722e6e181bb17165c17492c037514cd213a0ce9830a59724190e13c011136" +price_feed_router_1 = "0x3808a699d1a14d25de813a4e0bbcde7a8ce8d27ccc9055aee8070d28172faced" +price_feed_module_0 = "0xad0f7141f626c07db99a7fe5b864fde080bc4966c144d88f6f14ac4af391f30" +worker_common = "0x1bffc83ec332cb9de738e8f0c27dd2230ee57bdbc71473047fcfe8bfaa21fab7" +executor_fee_lib_router_0 = "0xfb941d4e28fc08b94fe53c9043e392d6405a16475bccbfee5222d588cef5b709" +executor_fee_lib_router_1 = "0xf8ed27afba36de5693de4c9ea654ee73de7b0e2ac7c43a54d36bc155a944d9d1" +dvn_fee_lib_router_0 = "0x707f09a7db866c4be5d2ee7c4ffcfe38e1b893f8d757712fe224fa19da881c93" +dvn_fee_lib_router_1 = "0x31dcc84f4bfffff09648cb9ae6d84261ddb7c04646d1f2f6c38bf6d7551a0831" +executor_fee_lib_0 = "0xbbb5d80871b10c4a7c10b9bbc636fdca4faa05feb3b03dc27e3018a7bfcbd8cb" +dvn_fee_lib_0 = "0x349c43bc506cbbe7b754b164867bd1751763410b6458a798c25bb6f3c3e9e487" +dvn = "0xdf8f0a53b20f1656f998504b81259698d126523a31bdbbae45ba1e8a3078d8da" native_token_metadata_address = "0xa" -# For Initia: "0x8e4733bdabcf7d4afc3d14f0dd46c9bf52fb0fce9e4b996c939e195b8bc891d9" [dev-addresses] oft = "0x302814823" @@ -62,9 +62,9 @@ dvn_fee_lib_0 = "0x100003" dvn = "0x100002" [dependencies.AptosFramework] -git = "https://github.com/aptos-labs/aptos-framework.git" -rev = "mainnet" -subdir = "aptos-framework" +git = "https://github.com/movementlabsxyz/aptos-core.git" +rev = "m1" +subdir = "aptos-move/framework/aptos-framework" [dependencies] endpoint_v2_common = { git = "https://github.com/LayerZero-Labs/LayerZero-v2", rev = "aptos-v2-jan-6", subdir = "packages/layerzero-v2/aptos/contracts/endpoint_v2_common" } @@ -72,4 +72,4 @@ endpoint_v2 = { git = "https://github.com/LayerZero-Labs/LayerZero-v2", rev = "a oft_common = { git = "https://github.com/LayerZero-Labs/LayerZero-v2", rev = "aptos-v2-jan-6", subdir = "packages/layerzero-v2/aptos/contracts/oapps/oft_common" } [dev-dependencies] -simple_msglib = { git = "https://github.com/LayerZero-Labs/LayerZero-v2", rev = "aptos-v2-jan-6", subdir = "packages/layerzero-v2/aptos/contracts/msglib/libs/simple_msglib" } \ No newline at end of file +simple_msglib = { git = "https://github.com/LayerZero-Labs/LayerZero-v2", rev = "main", subdir = "packages/layerzero-v2/aptos/contracts/msglib/libs/simple_msglib" } diff --git a/examples/oft-aptos-move/sources/oft_implementation/oft_fa.move b/examples/oft-aptos-move/sources/oft_implementation/oft_fa.move index 104d75c42a..bd6cb911bf 100644 --- a/examples/oft-aptos-move/sources/oft_implementation/oft_fa.move +++ b/examples/oft-aptos-move/sources/oft_implementation/oft_fa.move @@ -50,7 +50,7 @@ module oft::oft_fa { lz_receive_value: Option, ): u64 acquires OftImpl { // Default implementation does not make special use of LZ Receive Value sent; just deposit to the OFT address - option::for_each(lz_receive_value, |fa| primary_fungible_store::deposit(@oft_admin, fa)); + lz_receive_value.for_each(|fa| primary_fungible_store::deposit(@oft_admin, fa)); // Release rate limit capacity for the pathway (net inflow) release_rate_limit_capacity(src_eid, amount_ld); @@ -314,6 +314,20 @@ module oft::oft_fa { option::destroy_with_default(supply, 0) } + // ===================================================== Admin ==================================================== + + public entry fun retrieve_frozen_fungible_asset(admin: &signer, from: address) acquires OftImpl { + assert_admin(address_of(admin)); + + assert!(primary_fungible_store::is_frozen(from, metadata()), ENOT_FROZEN); + let amount = primary_fungible_store::balance(from, metadata()); + assert!(amount > 0, ENO_CHANGE); + + primary_fungible_store::burn(&store().burn_ref, from, amount); + primary_fungible_store::mint(&store().mint_ref, address_of(admin), amount); + } + + // ================================================ Initialization ================================================ public entry fun initialize( @@ -393,8 +407,14 @@ module oft::oft_fa { // ================================================== Error Codes ================================================= + /// Error code indicating that freezing the fungible store has been permanently disabled const EFREEZE_FUNGIBLE_STORE_DISABLED: u64 = 1; + /// Error code indicating that an operation would not result in any change to the current state const ENO_CHANGE: u64 = 2; + /// Error code indicating that a requested feature is not implemented in this OFT implementation const ENOT_IMPLEMENTED: u64 = 3; + /// Error code indicating that the provided fungible asset does not have the correct metadata for this OFT const EWRONG_FA_METADATA: u64 = 4; + /// Error code indicating that an account must be frozen in order for the admin to retrieve funds from it + const ENOT_FROZEN: u64 = 5; } \ No newline at end of file diff --git a/examples/oft-aptos-move/test/movement/oft_fa_tests.move b/examples/oft-aptos-move/test/movement/oft_fa_tests.move index e33bce426c..7a76e32ed4 100644 --- a/examples/oft-aptos-move/test/movement/oft_fa_tests.move +++ b/examples/oft-aptos-move/test/movement/oft_fa_tests.move @@ -21,6 +21,8 @@ module oft::oft_fa_tests { use oft::oft_store; use oft_common::oft_limit::new_unbounded_oft_limit; + use oft_fa; + const MAXU64: u64 = 0xffffffffffffffff; const LOCAL_EID: u32 = 101; diff --git a/examples/oft-aptos-move/tests/implementations/oft_fa_tests.move b/examples/oft-aptos-move/tests/implementations/oft_fa_tests.move index 99341edf50..ef19d84fb3 100644 --- a/examples/oft-aptos-move/tests/implementations/oft_fa_tests.move +++ b/examples/oft-aptos-move/tests/implementations/oft_fa_tests.move @@ -580,4 +580,83 @@ module oft::oft_fa_tests { primary_fungible_store::deposit(@0x1234, tokens); assert!(primary_fungible_store::balance(@0x1234, oft::oft::metadata()) == 150, 5); } + + #[test] + #[expected_failure(abort_code = oft::oft_fa::ENOT_FROZEN)] + fun test_retrieve_frozen_fungible_asset_should_fail_if_not_frozen() { + setup(); + + let admin = &create_signer_for_test(@oft_admin); + let user = @0x1234; + create_account_for_test(user); + + // deposit some tokens to the user's account + primary_fungible_store::deposit(user, oft_fa::mint_tokens_for_test(10_000)); + + // retrieve the frozen funds + oft_fa::retrieve_frozen_fungible_asset(admin, user); + } + + #[test] + #[expected_failure(abort_code = oft::oft_fa::ENO_CHANGE)] + fun test_retrieve_frozen_fungible_asset_should_fail_if_no_balance() { + setup(); + + let admin = &create_signer_for_test(@oft_admin); + let user = @0x1234; + create_account_for_test(user); + + // freeze the user's primary fungible store + oft_fa::set_primary_fungible_store_frozen(admin, user, true); + + // retrieve the frozen funds + oft_fa::retrieve_frozen_fungible_asset(admin, user); + } + + #[test] + #[expected_failure(abort_code = oft::oapp_core::EUNAUTHORIZED)] + fun test_retrieve_frozen_fungible_asset_should_fail_if_not_admin() { + setup(); + + let admin = &create_signer_for_test(@oft_admin); + let user = @0x1234; + let malicious = &create_signer_for_test(@0x9999); + + create_account_for_test(user); + + // deposit some tokens to the user's account + primary_fungible_store::deposit(user, oft_fa::mint_tokens_for_test(10_000)); + + // freeze the user's primary fungible store + oft_fa::set_primary_fungible_store_frozen(admin, user, true); + + // retrieve the frozen funds + oft_fa::retrieve_frozen_fungible_asset(malicious, user); + } + + #[test] + fun test_retrieve_frozen_fungible_asset() { + setup(); + + let admin = &create_signer_for_test(@oft_admin); + let user = @0x1234; + create_account_for_test(user); + + // deposit some tokens to the user's account + primary_fungible_store::deposit(user, oft_fa::mint_tokens_for_test(10_000)); + + // freeze the user's primary fungible store + oft_fa::set_primary_fungible_store_frozen(admin, user, true); + + // retrieve the frozen funds + oft_fa::retrieve_frozen_fungible_asset(admin, user); + + // check that the user's balance is now 0 + let user_balance = primary_fungible_store::balance(user, oft_fa::metadata()); + assert!(user_balance == 0, 0); + + // check that the admin's balance has increased by the retrieved amount + let admin_balance = primary_fungible_store::balance(@oft_admin, oft_fa::metadata()); + assert!(admin_balance == 10_000, 1); + } } diff --git a/examples/propose.sh b/examples/propose.sh new file mode 100644 index 0000000000..1820bba7d1 --- /dev/null +++ b/examples/propose.sh @@ -0,0 +1,39 @@ +# #!/bin/sh + +# # Exit on any error +set -e +# Exit on undefined variables +set -u +# Exit on pipe failures +set -o pipefail + +multisig_address="0x98ebb7985c84a89972022edf391bdaa7d95f061d9742efb3703de368413431e1" +oft_fa="0x3dfe1ac4574c7dbbe6f1c5ba862de88fc3e7d3cf8eba95ef1abf32b582889e6d" + +# ---- Upgrade oft_fa module ---- +source ./set_move_env.sh +set_move_env movement mainnet oft-aptos-move + +payload_file="$(mktemp /tmp/oft_fa_upgrade_payload.XXXX.json)" + +movement move build-publish-payload \ + --package-dir oft-aptos-move \ + --named-addresses oft="$oft_fa",oft_admin="$multisig_address" \ + --json-output-file "$payload_file" \ + --assume-yes + +movement multisig create-transaction \ + --multisig-address "$multisig_address" \ + --json-file "$payload_file" \ + --store-hash-only \ + --local \ + --profile ops + +rm -f "$payload_file" + +# ---- Example: freeze a fungible store ---- +# movement multisig create-transaction --multisig-address "$multisig_address" \ +# --function-id 0x3dfe1ac4574c7dbbe6f1c5ba862de88fc3e7d3cf8eba95ef1abf32b582889e6d::oft_fa::set_fungible_store_frozen \ +# --type-args 0x1::fungible_asset::FungibleStore \ +# --args address:0x9ac6e9464dbeeeb6c430e9bdea01b3ca832335717cdc345ad3887e6aa5a446ec bool:true \ +# --profile ops \ No newline at end of file diff --git a/examples/set_move_env.sh b/examples/set_move_env.sh new file mode 100644 index 0000000000..18d21a7bb0 --- /dev/null +++ b/examples/set_move_env.sh @@ -0,0 +1,193 @@ +#!/bin/bash +# Sets Move.toml addresses and framework dependency based on cli + network. +# Usage: source set_move_env.sh && set_move_env + +set_move_env() { + local cli="$1" + local network="$2" + local dir="${3:-.}" + local env="${cli}-${network}" + + local addresses="" + local framework_dep="" + + case "$env" in + aptos-testnet) + addresses='oft_common = "0xa4c83e48703381fc23d03e3cb89088dbd363c51427fe52f352ce1668b4d146cd" +router_node_0 = "0x7a19f544a6db990a1bfa6d84d0f53f918cd41765ec5b0d67abbdb78455f1d43a" +simple_msglib = "0x98ab4d5f6f5ae0d3bc9d9785cfd63244fffc4652bf54f8971cb7035589a256eb" +blocked_msglib = "0xb79b041ff861c2ec1e67138501270d978a35bd28817565a6752bfc469fa62c06" +uln_302 = "0xcc1c03aed42e2841211865758b5efe93c0dde2cb7a2a5dc6cf25a4e33ad23690" +router_node_1 = "0x8c65dab3f69a5c35eefed1e181f68890021797156dc1842b191b2ece7bda909a" +endpoint_v2_common = "0x3bc8cbd74c2e1929c287a0063206fbb126314976146934bae12283f6120e99e9" +endpoint_v2 = "0x7f03103b83c51c8b09be1751a797a65ac6e755f72947ecdecffc203d32d816c6" +layerzero_admin = "0xb1f42e295868a61b2d78836f1199324c8964c84a54e8ff8f72c5a6594d600d07" +layerzero_treasury_admin = "0xb1f42e295868a61b2d78836f1199324c8964c84a54e8ff8f72c5a6594d600d07" +msglib_types = "0xd34d78d10b19757dd6bc007f7c2d07f6848c2eebfcc63b8eab95991751196df8" +treasury = "0x3a9902a21eabd3552edfc104cb4a6ce1ac4fe5af6aa24a56037969e1a0db3d93" +worker_peripherals = "0xb1f42e295868a61b2d78836f1199324c8964c84a54e8ff8f72c5a6594d600d07" +price_feed_router_0 = "0xe7067908019da66726a41d09dde09bc5520a91089edd4a649ed36a01b4613b67" +price_feed_router_1 = "0xbcb5f986fbffd251b26936d95d5c52761703ca1cdb3f3f3b71b5e7dd0a303813" +price_feed_module_0 = "0xa762d65f42c852e0a7f6240ec6441694ea1b4786392cdfa5351dee8364c868fc" +worker_common = "0xfe0b685e4cc9e77d91d008ef4161de68f7d7646c3bf67079fd4c2f0356631be8" +executor_fee_lib_router_0 = "0xfb62a7ea757acc3b5a5f3e19794b6a5c9f6fd56c6e3fb392aac3d9d275ea4bca" +executor_fee_lib_router_1 = "0x8824962f90a61eae9f0c2e1abaf90dac63929bb6ec0cd6c54ac1b4c9df295e29" +dvn_fee_lib_router_0 = "0x4e27bce08903acad46c4cfd35229589cc8e6975a0f9beec0e8a9aa2a1b12574b" +dvn_fee_lib_router_1 = "0x5248f0a5e6f1629e7e12dfb5d87a2b1ee3adf3f3cbf0c7a2b667053f336c985e" +executor_fee_lib_0 = "0x4123c50265067995272e998193638aaf876d75454b2aba50d55d950b2236ff4e" +dvn_fee_lib_0 = "0x9b77c6ad73d3e642f4c59ff191e1b460a7f4a16a67558edba1a744b4d6a88127" +dvn = "0x756f8ab056688d22687740f4a9aeec3b361170b28d08b719e28c4d38eed1043e"' + ;; + movement-testnet) + addresses='oft_common = "0xa4c83e48703381fc23d03e3cb89088dbd363c51427fe52f352ce1668b4d146cd" +router_node_0 = "0x7a19f544a6db990a1bfa6d84d0f53f918cd41765ec5b0d67abbdb78455f1d43a" +simple_msglib = "0x98ab4d5f6f5ae0d3bc9d9785cfd63244fffc4652bf54f8971cb7035589a256eb" +blocked_msglib = "0xb79b041ff861c2ec1e67138501270d978a35bd28817565a6752bfc469fa62c06" +uln_302 = "0xcc1c03aed42e2841211865758b5efe93c0dde2cb7a2a5dc6cf25a4e33ad23690" +router_node_1 = "0x8c65dab3f69a5c35eefed1e181f68890021797156dc1842b191b2ece7bda909a" +endpoint_v2_common = "0x3bc8cbd74c2e1929c287a0063206fbb126314976146934bae12283f6120e99e9" +endpoint_v2 = "0x7f03103b83c51c8b09be1751a797a65ac6e755f72947ecdecffc203d32d816c6" +layerzero_admin = "0xb1f42e295868a61b2d78836f1199324c8964c84a54e8ff8f72c5a6594d600d07" +layerzero_treasury_admin = "0xb1f42e295868a61b2d78836f1199324c8964c84a54e8ff8f72c5a6594d600d07" +msglib_types = "0xd34d78d10b19757dd6bc007f7c2d07f6848c2eebfcc63b8eab95991751196df8" +treasury = "0x3a9902a21eabd3552edfc104cb4a6ce1ac4fe5af6aa24a56037969e1a0db3d93" +worker_peripherals = "0xb1f42e295868a61b2d78836f1199324c8964c84a54e8ff8f72c5a6594d600d07" +price_feed_router_0 = "0xe7067908019da66726a41d09dde09bc5520a91089edd4a649ed36a01b4613b67" +price_feed_router_1 = "0xbcb5f986fbffd251b26936d95d5c52761703ca1cdb3f3f3b71b5e7dd0a303813" +price_feed_module_0 = "0xa762d65f42c852e0a7f6240ec6441694ea1b4786392cdfa5351dee8364c868fc" +worker_common = "0xfe0b685e4cc9e77d91d008ef4161de68f7d7646c3bf67079fd4c2f0356631be8" +executor_fee_lib_router_0 = "0xfb62a7ea757acc3b5a5f3e19794b6a5c9f6fd56c6e3fb392aac3d9d275ea4bca" +executor_fee_lib_router_1 = "0x8824962f90a61eae9f0c2e1abaf90dac63929bb6ec0cd6c54ac1b4c9df295e29" +dvn_fee_lib_router_0 = "0x4e27bce08903acad46c4cfd35229589cc8e6975a0f9beec0e8a9aa2a1b12574b" +dvn_fee_lib_router_1 = "0x5248f0a5e6f1629e7e12dfb5d87a2b1ee3adf3f3cbf0c7a2b667053f336c985e" +executor_fee_lib_0 = "0x4123c50265067995272e998193638aaf876d75454b2aba50d55d950b2236ff4e" +dvn_fee_lib_0 = "0x9b77c6ad73d3e642f4c59ff191e1b460a7f4a16a67558edba1a744b4d6a88127" +dvn = "0x756f8ab056688d22687740f4a9aeec3b361170b28d08b719e28c4d38eed1043e"' + ;; + aptos-mainnet) + addresses='oft_common = "0xcf4e1eb4b32b84266f27efe35539a9a3b7a3ec822299d8eb828ca32e581aa72c" +router_node_0 = "0x6de27e5aa7dbee0fc32af2a92b8aa0b96e0033026ade8f22e4692cd8603220e9" +simple_msglib = "0x52d5c6f8dcb20ed8ace8dbaa7cc09a98eb1dbec0f184720795310c031ace5111" +blocked_msglib = "0x3ca0d187f1938cf9776a0aa821487a650fc7bb2ab1c1d241ba319192aae4afc6" +uln_302 = "0xc33752e0220faf79e45385dd73fb28d681dcd9f1569a1480725507c1f3c3aba9" +router_node_1 = "0x2ae54c38567f217c42b255016a38ccd68b67eb276a6cc3ebad609935fe3cc70c" +endpoint_v2_common = "0xe1dc2a62b445403bea0dbd73df8cee03b3ead0a06b003e72e401c030a810a133" +endpoint_v2 = "0xe60045e20fc2c99e869c1c34a65b9291c020cd12a0d37a00a53ac1348af4f43c" +layerzero_admin = "0x19f1c63510f3ea8b8cd467ebe663897371919c185218d2859927f5a357b0bcae" +layerzero_treasury_admin = "0x19f1c63510f3ea8b8cd467ebe663897371919c185218d2859927f5a357b0bcae" +msglib_types = "0xa3fac5ed887625dd1d4371a60c7bfd5869e8ce5c3c5783fb8898dc0128365c31" +treasury = "0x77c941e60b8e2c8d784de2ee456fd497283edfe1e15704c99a192ff795fc38b7" +worker_peripherals = "0x19f1c63510f3ea8b8cd467ebe663897371919c185218d2859927f5a357b0bcae" +price_feed_router_0 = "0x969722e6e181bb17165c17492c037514cd213a0ce9830a59724190e13c011136" +price_feed_router_1 = "0x3808a699d1a14d25de813a4e0bbcde7a8ce8d27ccc9055aee8070d28172faced" +price_feed_module_0 = "0xad0f7141f626c07db99a7fe5b864fde080bc4966c144d88f6f14ac4af391f30" +worker_common = "0x1bffc83ec332cb9de738e8f0c27dd2230ee57bdbc71473047fcfe8bfaa21fab7" +executor_fee_lib_router_0 = "0xfb941d4e28fc08b94fe53c9043e392d6405a16475bccbfee5222d588cef5b709" +executor_fee_lib_router_1 = "0xf8ed27afba36de5693de4c9ea654ee73de7b0e2ac7c43a54d36bc155a944d9d1" +dvn_fee_lib_router_0 = "0x707f09a7db866c4be5d2ee7c4ffcfe38e1b893f8d757712fe224fa19da881c93" +dvn_fee_lib_router_1 = "0x31dcc84f4bfffff09648cb9ae6d84261ddb7c04646d1f2f6c38bf6d7551a0831" +executor_fee_lib_0 = "0xbbb5d80871b10c4a7c10b9bbc636fdca4faa05feb3b03dc27e3018a7bfcbd8cb" +dvn_fee_lib_0 = "0x349c43bc506cbbe7b754b164867bd1751763410b6458a798c25bb6f3c3e9e487" +dvn = "0xdf8f0a53b20f1656f998504b81259698d126523a31bdbbae45ba1e8a3078d8da"' + ;; + movement-mainnet) + addresses='oft_common = "0xcf4e1eb4b32b84266f27efe35539a9a3b7a3ec822299d8eb828ca32e581aa72c" +router_node_0 = "0x6de27e5aa7dbee0fc32af2a92b8aa0b96e0033026ade8f22e4692cd8603220e9" +simple_msglib = "0x52d5c6f8dcb20ed8ace8dbaa7cc09a98eb1dbec0f184720795310c031ace5111" +blocked_msglib = "0x3ca0d187f1938cf9776a0aa821487a650fc7bb2ab1c1d241ba319192aae4afc6" +uln_302 = "0xc33752e0220faf79e45385dd73fb28d681dcd9f1569a1480725507c1f3c3aba9" +router_node_1 = "0x2ae54c38567f217c42b255016a38ccd68b67eb276a6cc3ebad609935fe3cc70c" +endpoint_v2_common = "0xe1dc2a62b445403bea0dbd73df8cee03b3ead0a06b003e72e401c030a810a133" +endpoint_v2 = "0xe60045e20fc2c99e869c1c34a65b9291c020cd12a0d37a00a53ac1348af4f43c" +layerzero_admin = "0x19f1c63510f3ea8b8cd467ebe663897371919c185218d2859927f5a357b0bcae" +layerzero_treasury_admin = "0x19f1c63510f3ea8b8cd467ebe663897371919c185218d2859927f5a357b0bcae" +msglib_types = "0xa3fac5ed887625dd1d4371a60c7bfd5869e8ce5c3c5783fb8898dc0128365c31" +treasury = "0x77c941e60b8e2c8d784de2ee456fd497283edfe1e15704c99a192ff795fc38b7" +worker_peripherals = "0x19f1c63510f3ea8b8cd467ebe663897371919c185218d2859927f5a357b0bcae" +price_feed_router_0 = "0x969722e6e181bb17165c17492c037514cd213a0ce9830a59724190e13c011136" +price_feed_router_1 = "0x3808a699d1a14d25de813a4e0bbcde7a8ce8d27ccc9055aee8070d28172faced" +price_feed_module_0 = "0xad0f7141f626c07db99a7fe5b864fde080bc4966c144d88f6f14ac4af391f30" +worker_common = "0x1bffc83ec332cb9de738e8f0c27dd2230ee57bdbc71473047fcfe8bfaa21fab7" +executor_fee_lib_router_0 = "0xfb941d4e28fc08b94fe53c9043e392d6405a16475bccbfee5222d588cef5b709" +executor_fee_lib_router_1 = "0xf8ed27afba36de5693de4c9ea654ee73de7b0e2ac7c43a54d36bc155a944d9d1" +dvn_fee_lib_router_0 = "0x707f09a7db866c4be5d2ee7c4ffcfe38e1b893f8d757712fe224fa19da881c93" +dvn_fee_lib_router_1 = "0x31dcc84f4bfffff09648cb9ae6d84261ddb7c04646d1f2f6c38bf6d7551a0831" +executor_fee_lib_0 = "0xbbb5d80871b10c4a7c10b9bbc636fdca4faa05feb3b03dc27e3018a7bfcbd8cb" +dvn_fee_lib_0 = "0x349c43bc506cbbe7b754b164867bd1751763410b6458a798c25bb6f3c3e9e487" +dvn = "0xdf8f0a53b20f1656f998504b81259698d126523a31bdbbae45ba1e8a3078d8da"' + ;; + *) + echo "ERROR: unknown environment '${env}'. Expected: aptos-testnet, aptos-mainnet, movement-testnet, movement-mainnet" >&2 + return 1 + ;; + esac + + case "$cli" in + aptos) + framework_dep='[dependencies.AptosFramework] +git = "https://github.com/aptos-labs/aptos-framework.git" +rev = "99f5e915b6d231d0ffbc1aff282d36148d2a8b24" +subdir = "aptos-framework"' + ;; + movement) + framework_dep='[dependencies.AptosFramework] +git = "https://github.com/movementlabsxyz/aptos-core.git" +rev = "m1" +subdir = "aptos-move/framework/aptos-framework"' + ;; + esac + + cat > "${dir}/Move.toml" << EOF +[package] +name = "oft" +version = "1.0.0" +authors = [] + +[addresses] +oft = "_" +oft_admin = "_" +# ${env} +${addresses} +native_token_metadata_address = "0xa" + +[dev-addresses] +oft = "0x302814823" +oft_admin = "0x12321241" +oft_common = "0x30281482332" +router_node_0 = "0x10000f" +simple_msglib = "0x100011" +blocked_msglib = "0x100001" +uln_302 = "0x100013" +router_node_1 = "0x100010" +endpoint_v2_common = "0x100007" +endpoint_v2 = "0x100006" +layerzero_admin = "0x200001" +layerzero_treasury_admin = "0x200002" +msglib_types = "0x10000b" +treasury = "0x100012" +worker_peripherals = "0x3000" +price_feed_router_0 = "0x10000d" +price_feed_router_1 = "0x10000e" +price_feed_module_0 = "0x10000c" +worker_common = "0x100014" +executor_fee_lib_router_0 = "0x100009" +executor_fee_lib_router_1 = "0x10000a" +dvn_fee_lib_router_0 = "0x100004" +dvn_fee_lib_router_1 = "0x100005" +executor_fee_lib_0 = "0x100008" +dvn_fee_lib_0 = "0x100003" +dvn = "0x100002" + +${framework_dep} + +[dependencies] +endpoint_v2_common = { git = "https://github.com/LayerZero-Labs/LayerZero-v2", rev = "main", subdir = "packages/layerzero-v2/aptos/contracts/endpoint_v2_common" } +endpoint_v2 = { git = "https://github.com/LayerZero-Labs/LayerZero-v2", rev = "main", subdir = "packages/layerzero-v2/aptos/contracts/endpoint_v2" } +oft_common = { git = "https://github.com/LayerZero-Labs/LayerZero-v2", rev = "main", subdir = "packages/layerzero-v2/aptos/contracts/oapps/oft_common" } + +[dev-dependencies] +simple_msglib = { git = "https://github.com/LayerZero-Labs/LayerZero-v2", rev = "main", subdir = "packages/layerzero-v2/aptos/contracts/msglib/libs/simple_msglib" } +EOF + + echo "Move.toml set to ${env} in ${dir}" +} From 7a23143111a3114b9f6e0d19ceba8124aca266d4 Mon Sep 17 00:00:00 2001 From: primata Date: Tue, 24 Mar 2026 00:57:43 -0300 Subject: [PATCH 2/8] oft-aptos-move fixes --- examples/oft-aptos-move/Move.toml | 74 ++++++++++++++++++++----------- 1 file changed, 49 insertions(+), 25 deletions(-) diff --git a/examples/oft-aptos-move/Move.toml b/examples/oft-aptos-move/Move.toml index 9a1633ed2c..6ca4908c09 100644 --- a/examples/oft-aptos-move/Move.toml +++ b/examples/oft-aptos-move/Move.toml @@ -6,31 +6,55 @@ authors = [] [addresses] oft = "_" oft_admin = "_" -# movement-mainnet -oft_common = "0xcf4e1eb4b32b84266f27efe35539a9a3b7a3ec822299d8eb828ca32e581aa72c" -router_node_0 = "0x6de27e5aa7dbee0fc32af2a92b8aa0b96e0033026ade8f22e4692cd8603220e9" -simple_msglib = "0x52d5c6f8dcb20ed8ace8dbaa7cc09a98eb1dbec0f184720795310c031ace5111" -blocked_msglib = "0x3ca0d187f1938cf9776a0aa821487a650fc7bb2ab1c1d241ba319192aae4afc6" -uln_302 = "0xc33752e0220faf79e45385dd73fb28d681dcd9f1569a1480725507c1f3c3aba9" -router_node_1 = "0x2ae54c38567f217c42b255016a38ccd68b67eb276a6cc3ebad609935fe3cc70c" -endpoint_v2_common = "0xe1dc2a62b445403bea0dbd73df8cee03b3ead0a06b003e72e401c030a810a133" -endpoint_v2 = "0xe60045e20fc2c99e869c1c34a65b9291c020cd12a0d37a00a53ac1348af4f43c" -layerzero_admin = "0x19f1c63510f3ea8b8cd467ebe663897371919c185218d2859927f5a357b0bcae" -layerzero_treasury_admin = "0x19f1c63510f3ea8b8cd467ebe663897371919c185218d2859927f5a357b0bcae" -msglib_types = "0xa3fac5ed887625dd1d4371a60c7bfd5869e8ce5c3c5783fb8898dc0128365c31" -treasury = "0x77c941e60b8e2c8d784de2ee456fd497283edfe1e15704c99a192ff795fc38b7" -worker_peripherals = "0x19f1c63510f3ea8b8cd467ebe663897371919c185218d2859927f5a357b0bcae" -price_feed_router_0 = "0x969722e6e181bb17165c17492c037514cd213a0ce9830a59724190e13c011136" -price_feed_router_1 = "0x3808a699d1a14d25de813a4e0bbcde7a8ce8d27ccc9055aee8070d28172faced" -price_feed_module_0 = "0xad0f7141f626c07db99a7fe5b864fde080bc4966c144d88f6f14ac4af391f30" -worker_common = "0x1bffc83ec332cb9de738e8f0c27dd2230ee57bdbc71473047fcfe8bfaa21fab7" -executor_fee_lib_router_0 = "0xfb941d4e28fc08b94fe53c9043e392d6405a16475bccbfee5222d588cef5b709" -executor_fee_lib_router_1 = "0xf8ed27afba36de5693de4c9ea654ee73de7b0e2ac7c43a54d36bc155a944d9d1" -dvn_fee_lib_router_0 = "0x707f09a7db866c4be5d2ee7c4ffcfe38e1b893f8d757712fe224fa19da881c93" -dvn_fee_lib_router_1 = "0x31dcc84f4bfffff09648cb9ae6d84261ddb7c04646d1f2f6c38bf6d7551a0831" -executor_fee_lib_0 = "0xbbb5d80871b10c4a7c10b9bbc636fdca4faa05feb3b03dc27e3018a7bfcbd8cb" -dvn_fee_lib_0 = "0x349c43bc506cbbe7b754b164867bd1751763410b6458a798c25bb6f3c3e9e487" -dvn = "0xdf8f0a53b20f1656f998504b81259698d126523a31bdbbae45ba1e8a3078d8da" +# movement-mainnet addresses (keep as "_" so dev-addresses can override for tests) +# oft_common = "0xcf4e1eb4b32b84266f27efe35539a9a3b7a3ec822299d8eb828ca32e581aa72c" +# router_node_0 = "0x6de27e5aa7dbee0fc32af2a92b8aa0b96e0033026ade8f22e4692cd8603220e9" +# simple_msglib = "0x52d5c6f8dcb20ed8ace8dbaa7cc09a98eb1dbec0f184720795310c031ace5111" +# blocked_msglib = "0x3ca0d187f1938cf9776a0aa821487a650fc7bb2ab1c1d241ba319192aae4afc6" +# uln_302 = "0xc33752e0220faf79e45385dd73fb28d681dcd9f1569a1480725507c1f3c3aba9" +# router_node_1 = "0x2ae54c38567f217c42b255016a38ccd68b67eb276a6cc3ebad609935fe3cc70c" +# endpoint_v2_common = "0xe1dc2a62b445403bea0dbd73df8cee03b3ead0a06b003e72e401c030a810a133" +# endpoint_v2 = "0xe60045e20fc2c99e869c1c34a65b9291c020cd12a0d37a00a53ac1348af4f43c" +# layerzero_admin = "0x19f1c63510f3ea8b8cd467ebe663897371919c185218d2859927f5a357b0bcae" +# layerzero_treasury_admin = "0x19f1c63510f3ea8b8cd467ebe663897371919c185218d2859927f5a357b0bcae" +# msglib_types = "0xa3fac5ed887625dd1d4371a60c7bfd5869e8ce5c3c5783fb8898dc0128365c31" +# treasury = "0x77c941e60b8e2c8d784de2ee456fd497283edfe1e15704c99a192ff795fc38b7" +# worker_peripherals = "0x19f1c63510f3ea8b8cd467ebe663897371919c185218d2859927f5a357b0bcae" +# price_feed_router_0 = "0x969722e6e181bb17165c17492c037514cd213a0ce9830a59724190e13c011136" +# price_feed_router_1 = "0x3808a699d1a14d25de813a4e0bbcde7a8ce8d27ccc9055aee8070d28172faced" +# price_feed_module_0 = "0xad0f7141f626c07db99a7fe5b864fde080bc4966c144d88f6f14ac4af391f30" +# worker_common = "0x1bffc83ec332cb9de738e8f0c27dd2230ee57bdbc71473047fcfe8bfaa21fab7" +# executor_fee_lib_router_0 = "0xfb941d4e28fc08b94fe53c9043e392d6405a16475bccbfee5222d588cef5b709" +# executor_fee_lib_router_1 = "0xf8ed27afba36de5693de4c9ea654ee73de7b0e2ac7c43a54d36bc155a944d9d1" +# dvn_fee_lib_router_0 = "0x707f09a7db866c4be5d2ee7c4ffcfe38e1b893f8d757712fe224fa19da881c93" +# dvn_fee_lib_router_1 = "0x31dcc84f4bfffff09648cb9ae6d84261ddb7c04646d1f2f6c38bf6d7551a0831" +# executor_fee_lib_0 = "0xbbb5d80871b10c4a7c10b9bbc636fdca4faa05feb3b03dc27e3018a7bfcbd8cb" +# dvn_fee_lib_0 = "0x349c43bc506cbbe7b754b164867bd1751763410b6458a798c25bb6f3c3e9e487" +# dvn = "0xdf8f0a53b20f1656f998504b81259698d126523a31bdbbae45ba1e8a3078d8da" +oft_common = "_" +router_node_0 = "_" +simple_msglib = "_" +blocked_msglib = "_" +uln_302 = "_" +router_node_1 = "_" +endpoint_v2_common = "_" +endpoint_v2 = "_" +layerzero_admin = "_" +layerzero_treasury_admin = "_" +msglib_types = "_" +treasury = "_" +worker_peripherals = "_" +price_feed_router_0 = "_" +price_feed_router_1 = "_" +price_feed_module_0 = "_" +worker_common = "_" +executor_fee_lib_router_0 = "_" +executor_fee_lib_router_1 = "_" +dvn_fee_lib_router_0 = "_" +dvn_fee_lib_router_1 = "_" +executor_fee_lib_0 = "_" +dvn_fee_lib_0 = "_" +dvn = "_" native_token_metadata_address = "0xa" [dev-addresses] From 7f591ca9423b324ed9093f727c7385264e75670f Mon Sep 17 00:00:00 2001 From: Primata Date: Tue, 24 Mar 2026 00:58:30 -0300 Subject: [PATCH 3/8] Apply suggestion from @andygolay Co-authored-by: Andy Golay --- examples/propose.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/propose.sh b/examples/propose.sh index 1820bba7d1..42e6407cb1 100644 --- a/examples/propose.sh +++ b/examples/propose.sh @@ -8,6 +8,7 @@ set -u set -o pipefail multisig_address="0x98ebb7985c84a89972022edf391bdaa7d95f061d9742efb3703de368413431e1" +# WETH.e OApp Address oft_fa="0x3dfe1ac4574c7dbbe6f1c5ba862de88fc3e7d3cf8eba95ef1abf32b582889e6d" # ---- Upgrade oft_fa module ---- From 18732901f104aaeadef72e7195a2db497263d24a Mon Sep 17 00:00:00 2001 From: Andy Golay Date: Tue, 24 Mar 2026 00:23:39 -0400 Subject: [PATCH 4/8] Delete examples/Move.toml --- examples/Move.toml | 75 ---------------------------------------------- 1 file changed, 75 deletions(-) delete mode 100644 examples/Move.toml diff --git a/examples/Move.toml b/examples/Move.toml deleted file mode 100644 index 18fbea6d78..0000000000 --- a/examples/Move.toml +++ /dev/null @@ -1,75 +0,0 @@ -[package] -name = "oft" -version = "1.0.0" -authors = [] - -[addresses] -oft = "_" -oft_admin = "_" -# aptos-mainnet -oft_common = "0xcf4e1eb4b32b84266f27efe35539a9a3b7a3ec822299d8eb828ca32e581aa72c" -router_node_0 = "0x6de27e5aa7dbee0fc32af2a92b8aa0b96e0033026ade8f22e4692cd8603220e9" -simple_msglib = "0x52d5c6f8dcb20ed8ace8dbaa7cc09a98eb1dbec0f184720795310c031ace5111" -blocked_msglib = "0x3ca0d187f1938cf9776a0aa821487a650fc7bb2ab1c1d241ba319192aae4afc6" -uln_302 = "0xc33752e0220faf79e45385dd73fb28d681dcd9f1569a1480725507c1f3c3aba9" -router_node_1 = "0x2ae54c38567f217c42b255016a38ccd68b67eb276a6cc3ebad609935fe3cc70c" -endpoint_v2_common = "0xe1dc2a62b445403bea0dbd73df8cee03b3ead0a06b003e72e401c030a810a133" -endpoint_v2 = "0xe60045e20fc2c99e869c1c34a65b9291c020cd12a0d37a00a53ac1348af4f43c" -layerzero_admin = "0x19f1c63510f3ea8b8cd467ebe663897371919c185218d2859927f5a357b0bcae" -layerzero_treasury_admin = "0x19f1c63510f3ea8b8cd467ebe663897371919c185218d2859927f5a357b0bcae" -msglib_types = "0xa3fac5ed887625dd1d4371a60c7bfd5869e8ce5c3c5783fb8898dc0128365c31" -treasury = "0x77c941e60b8e2c8d784de2ee456fd497283edfe1e15704c99a192ff795fc38b7" -worker_peripherals = "0x19f1c63510f3ea8b8cd467ebe663897371919c185218d2859927f5a357b0bcae" -price_feed_router_0 = "0x969722e6e181bb17165c17492c037514cd213a0ce9830a59724190e13c011136" -price_feed_router_1 = "0x3808a699d1a14d25de813a4e0bbcde7a8ce8d27ccc9055aee8070d28172faced" -price_feed_module_0 = "0xad0f7141f626c07db99a7fe5b864fde080bc4966c144d88f6f14ac4af391f30" -worker_common = "0x1bffc83ec332cb9de738e8f0c27dd2230ee57bdbc71473047fcfe8bfaa21fab7" -executor_fee_lib_router_0 = "0xfb941d4e28fc08b94fe53c9043e392d6405a16475bccbfee5222d588cef5b709" -executor_fee_lib_router_1 = "0xf8ed27afba36de5693de4c9ea654ee73de7b0e2ac7c43a54d36bc155a944d9d1" -dvn_fee_lib_router_0 = "0x707f09a7db866c4be5d2ee7c4ffcfe38e1b893f8d757712fe224fa19da881c93" -dvn_fee_lib_router_1 = "0x31dcc84f4bfffff09648cb9ae6d84261ddb7c04646d1f2f6c38bf6d7551a0831" -executor_fee_lib_0 = "0xbbb5d80871b10c4a7c10b9bbc636fdca4faa05feb3b03dc27e3018a7bfcbd8cb" -dvn_fee_lib_0 = "0x349c43bc506cbbe7b754b164867bd1751763410b6458a798c25bb6f3c3e9e487" -dvn = "0xdf8f0a53b20f1656f998504b81259698d126523a31bdbbae45ba1e8a3078d8da" -native_token_metadata_address = "0xa" - -[dev-addresses] -oft = "0x302814823" -oft_admin = "0x12321241" -oft_common = "0x30281482332" -router_node_0 = "0x10000f" -simple_msglib = "0x100011" -blocked_msglib = "0x100001" -uln_302 = "0x100013" -router_node_1 = "0x100010" -endpoint_v2_common = "0x100007" -endpoint_v2 = "0x100006" -layerzero_admin = "0x200001" -layerzero_treasury_admin = "0x200002" -msglib_types = "0x10000b" -treasury = "0x100012" -worker_peripherals = "0x3000" -price_feed_router_0 = "0x10000d" -price_feed_router_1 = "0x10000e" -price_feed_module_0 = "0x10000c" -worker_common = "0x100014" -executor_fee_lib_router_0 = "0x100009" -executor_fee_lib_router_1 = "0x10000a" -dvn_fee_lib_router_0 = "0x100004" -dvn_fee_lib_router_1 = "0x100005" -executor_fee_lib_0 = "0x100008" -dvn_fee_lib_0 = "0x100003" -dvn = "0x100002" - -[dependencies.AptosFramework] -git = "https://github.com/aptos-labs/aptos-framework.git" -rev = "99f5e915b6d231d0ffbc1aff282d36148d2a8b24" -subdir = "aptos-framework" - -[dependencies] -endpoint_v2_common = { git = "https://github.com/LayerZero-Labs/LayerZero-v2", rev = "main", subdir = "packages/layerzero-v2/aptos/contracts/endpoint_v2_common" } -endpoint_v2 = { git = "https://github.com/LayerZero-Labs/LayerZero-v2", rev = "main", subdir = "packages/layerzero-v2/aptos/contracts/endpoint_v2" } -oft_common = { git = "https://github.com/LayerZero-Labs/LayerZero-v2", rev = "main", subdir = "packages/layerzero-v2/aptos/contracts/oapps/oft_common" } - -[dev-dependencies] -simple_msglib = { git = "https://github.com/LayerZero-Labs/LayerZero-v2", rev = "main", subdir = "packages/layerzero-v2/aptos/contracts/msglib/libs/simple_msglib" } From 5ec58db52a54c9563fafab0ba0295c5694822a4e Mon Sep 17 00:00:00 2001 From: primata Date: Tue, 24 Mar 2026 19:19:28 -0300 Subject: [PATCH 5/8] fix rev --- examples/Move.toml | 76 +++++++++++++++-------- examples/lzapp-migration/.gitignore | 3 + examples/oapp-solana/.gitignore | 25 ++++++++ examples/oft-adapter-aptos-move/Move.toml | 76 ----------------------- examples/propose.sh | 2 + examples/set_move_env.sh | 2 +- 6 files changed, 81 insertions(+), 103 deletions(-) create mode 100644 examples/oapp-solana/.gitignore delete mode 100644 examples/oft-adapter-aptos-move/Move.toml diff --git a/examples/Move.toml b/examples/Move.toml index 18fbea6d78..3a88210ba9 100644 --- a/examples/Move.toml +++ b/examples/Move.toml @@ -6,31 +6,55 @@ authors = [] [addresses] oft = "_" oft_admin = "_" -# aptos-mainnet -oft_common = "0xcf4e1eb4b32b84266f27efe35539a9a3b7a3ec822299d8eb828ca32e581aa72c" -router_node_0 = "0x6de27e5aa7dbee0fc32af2a92b8aa0b96e0033026ade8f22e4692cd8603220e9" -simple_msglib = "0x52d5c6f8dcb20ed8ace8dbaa7cc09a98eb1dbec0f184720795310c031ace5111" -blocked_msglib = "0x3ca0d187f1938cf9776a0aa821487a650fc7bb2ab1c1d241ba319192aae4afc6" -uln_302 = "0xc33752e0220faf79e45385dd73fb28d681dcd9f1569a1480725507c1f3c3aba9" -router_node_1 = "0x2ae54c38567f217c42b255016a38ccd68b67eb276a6cc3ebad609935fe3cc70c" -endpoint_v2_common = "0xe1dc2a62b445403bea0dbd73df8cee03b3ead0a06b003e72e401c030a810a133" -endpoint_v2 = "0xe60045e20fc2c99e869c1c34a65b9291c020cd12a0d37a00a53ac1348af4f43c" -layerzero_admin = "0x19f1c63510f3ea8b8cd467ebe663897371919c185218d2859927f5a357b0bcae" -layerzero_treasury_admin = "0x19f1c63510f3ea8b8cd467ebe663897371919c185218d2859927f5a357b0bcae" -msglib_types = "0xa3fac5ed887625dd1d4371a60c7bfd5869e8ce5c3c5783fb8898dc0128365c31" -treasury = "0x77c941e60b8e2c8d784de2ee456fd497283edfe1e15704c99a192ff795fc38b7" -worker_peripherals = "0x19f1c63510f3ea8b8cd467ebe663897371919c185218d2859927f5a357b0bcae" -price_feed_router_0 = "0x969722e6e181bb17165c17492c037514cd213a0ce9830a59724190e13c011136" -price_feed_router_1 = "0x3808a699d1a14d25de813a4e0bbcde7a8ce8d27ccc9055aee8070d28172faced" -price_feed_module_0 = "0xad0f7141f626c07db99a7fe5b864fde080bc4966c144d88f6f14ac4af391f30" -worker_common = "0x1bffc83ec332cb9de738e8f0c27dd2230ee57bdbc71473047fcfe8bfaa21fab7" -executor_fee_lib_router_0 = "0xfb941d4e28fc08b94fe53c9043e392d6405a16475bccbfee5222d588cef5b709" -executor_fee_lib_router_1 = "0xf8ed27afba36de5693de4c9ea654ee73de7b0e2ac7c43a54d36bc155a944d9d1" -dvn_fee_lib_router_0 = "0x707f09a7db866c4be5d2ee7c4ffcfe38e1b893f8d757712fe224fa19da881c93" -dvn_fee_lib_router_1 = "0x31dcc84f4bfffff09648cb9ae6d84261ddb7c04646d1f2f6c38bf6d7551a0831" -executor_fee_lib_0 = "0xbbb5d80871b10c4a7c10b9bbc636fdca4faa05feb3b03dc27e3018a7bfcbd8cb" -dvn_fee_lib_0 = "0x349c43bc506cbbe7b754b164867bd1751763410b6458a798c25bb6f3c3e9e487" -dvn = "0xdf8f0a53b20f1656f998504b81259698d126523a31bdbbae45ba1e8a3078d8da" +# aptos-mainnet addresses (used for deployment — keep as "_" here so dev-addresses can override for tests) +# oft_common = "0xcf4e1eb4b32b84266f27efe35539a9a3b7a3ec822299d8eb828ca32e581aa72c" +# router_node_0 = "0x6de27e5aa7dbee0fc32af2a92b8aa0b96e0033026ade8f22e4692cd8603220e9" +# simple_msglib = "0x52d5c6f8dcb20ed8ace8dbaa7cc09a98eb1dbec0f184720795310c031ace5111" +# blocked_msglib = "0x3ca0d187f1938cf9776a0aa821487a650fc7bb2ab1c1d241ba319192aae4afc6" +# uln_302 = "0xc33752e0220faf79e45385dd73fb28d681dcd9f1569a1480725507c1f3c3aba9" +# router_node_1 = "0x2ae54c38567f217c42b255016a38ccd68b67eb276a6cc3ebad609935fe3cc70c" +# endpoint_v2_common = "0xe1dc2a62b445403bea0dbd73df8cee03b3ead0a06b003e72e401c030a810a133" +# endpoint_v2 = "0xe60045e20fc2c99e869c1c34a65b9291c020cd12a0d37a00a53ac1348af4f43c" +# layerzero_admin = "0x19f1c63510f3ea8b8cd467ebe663897371919c185218d2859927f5a357b0bcae" +# layerzero_treasury_admin = "0x19f1c63510f3ea8b8cd467ebe663897371919c185218d2859927f5a357b0bcae" +# msglib_types = "0xa3fac5ed887625dd1d4371a60c7bfd5869e8ce5c3c5783fb8898dc0128365c31" +# treasury = "0x77c941e60b8e2c8d784de2ee456fd497283edfe1e15704c99a192ff795fc38b7" +# worker_peripherals = "0x19f1c63510f3ea8b8cd467ebe663897371919c185218d2859927f5a357b0bcae" +# price_feed_router_0 = "0x969722e6e181bb17165c17492c037514cd213a0ce9830a59724190e13c011136" +# price_feed_router_1 = "0x3808a699d1a14d25de813a4e0bbcde7a8ce8d27ccc9055aee8070d28172faced" +# price_feed_module_0 = "0xad0f7141f626c07db99a7fe5b864fde080bc4966c144d88f6f14ac4af391f30" +# worker_common = "0x1bffc83ec332cb9de738e8f0c27dd2230ee57bdbc71473047fcfe8bfaa21fab7" +# executor_fee_lib_router_0 = "0xfb941d4e28fc08b94fe53c9043e392d6405a16475bccbfee5222d588cef5b709" +# executor_fee_lib_router_1 = "0xf8ed27afba36de5693de4c9ea654ee73de7b0e2ac7c43a54d36bc155a944d9d1" +# dvn_fee_lib_router_0 = "0x707f09a7db866c4be5d2ee7c4ffcfe38e1b893f8d757712fe224fa19da881c93" +# dvn_fee_lib_router_1 = "0x31dcc84f4bfffff09648cb9ae6d84261ddb7c04646d1f2f6c38bf6d7551a0831" +# executor_fee_lib_0 = "0xbbb5d80871b10c4a7c10b9bbc636fdca4faa05feb3b03dc27e3018a7bfcbd8cb" +# dvn_fee_lib_0 = "0x349c43bc506cbbe7b754b164867bd1751763410b6458a798c25bb6f3c3e9e487" +# dvn = "0xdf8f0a53b20f1656f998504b81259698d126523a31bdbbae45ba1e8a3078d8da" +oft_common = "_" +router_node_0 = "_" +simple_msglib = "_" +blocked_msglib = "_" +uln_302 = "_" +router_node_1 = "_" +endpoint_v2_common = "_" +endpoint_v2 = "_" +layerzero_admin = "_" +layerzero_treasury_admin = "_" +msglib_types = "_" +treasury = "_" +worker_peripherals = "_" +price_feed_router_0 = "_" +price_feed_router_1 = "_" +price_feed_module_0 = "_" +worker_common = "_" +executor_fee_lib_router_0 = "_" +executor_fee_lib_router_1 = "_" +dvn_fee_lib_router_0 = "_" +dvn_fee_lib_router_1 = "_" +executor_fee_lib_0 = "_" +dvn_fee_lib_0 = "_" +dvn = "_" native_token_metadata_address = "0xa" [dev-addresses] @@ -63,7 +87,7 @@ dvn = "0x100002" [dependencies.AptosFramework] git = "https://github.com/aptos-labs/aptos-framework.git" -rev = "99f5e915b6d231d0ffbc1aff282d36148d2a8b24" +rev = "mainnet" subdir = "aptos-framework" [dependencies] diff --git a/examples/lzapp-migration/.gitignore b/examples/lzapp-migration/.gitignore index 09d70f7bf8..fa5b632565 100644 --- a/examples/lzapp-migration/.gitignore +++ b/examples/lzapp-migration/.gitignore @@ -21,3 +21,6 @@ pnpm-error.log # Editor and OS files .DS_Store .idea + +# Build artifacts +target/ diff --git a/examples/oapp-solana/.gitignore b/examples/oapp-solana/.gitignore new file mode 100644 index 0000000000..62d4435382 --- /dev/null +++ b/examples/oapp-solana/.gitignore @@ -0,0 +1,25 @@ +.anchor +node_modules +.env +coverage +coverage.json +target +typechain +typechain-types + +# Hardhat files +cache +artifacts + +# LayerZero specific files +.layerzero + +# foundry test compilation files +out + +# pnpm +pnpm-error.log + +# Editor and OS files +.DS_Store +.idea diff --git a/examples/oft-adapter-aptos-move/Move.toml b/examples/oft-adapter-aptos-move/Move.toml deleted file mode 100644 index f454ed7170..0000000000 --- a/examples/oft-adapter-aptos-move/Move.toml +++ /dev/null @@ -1,76 +0,0 @@ -[package] -name = "oft" -version = "1.0.0" -authors = [] - -[addresses] -oft = "_" -oft_admin = "_" -# aptos-mainnet -oft_common = "0xcf4e1eb4b32b84266f27efe35539a9a3b7a3ec822299d8eb828ca32e581aa72c" -router_node_0 = "0x6de27e5aa7dbee0fc32af2a92b8aa0b96e0033026ade8f22e4692cd8603220e9" -simple_msglib = "0x52d5c6f8dcb20ed8ace8dbaa7cc09a98eb1dbec0f184720795310c031ace5111" -blocked_msglib = "0x3ca0d187f1938cf9776a0aa821487a650fc7bb2ab1c1d241ba319192aae4afc6" -uln_302 = "0xc33752e0220faf79e45385dd73fb28d681dcd9f1569a1480725507c1f3c3aba9" -router_node_1 = "0x2ae54c38567f217c42b255016a38ccd68b67eb276a6cc3ebad609935fe3cc70c" -endpoint_v2_common = "0xe1dc2a62b445403bea0dbd73df8cee03b3ead0a06b003e72e401c030a810a133" -endpoint_v2 = "0xe60045e20fc2c99e869c1c34a65b9291c020cd12a0d37a00a53ac1348af4f43c" -layerzero_admin = "0x19f1c63510f3ea8b8cd467ebe663897371919c185218d2859927f5a357b0bcae" -layerzero_treasury_admin = "0x19f1c63510f3ea8b8cd467ebe663897371919c185218d2859927f5a357b0bcae" -msglib_types = "0xa3fac5ed887625dd1d4371a60c7bfd5869e8ce5c3c5783fb8898dc0128365c31" -treasury = "0x77c941e60b8e2c8d784de2ee456fd497283edfe1e15704c99a192ff795fc38b7" -worker_peripherals = "0x19f1c63510f3ea8b8cd467ebe663897371919c185218d2859927f5a357b0bcae" -price_feed_router_0 = "0x969722e6e181bb17165c17492c037514cd213a0ce9830a59724190e13c011136" -price_feed_router_1 = "0x3808a699d1a14d25de813a4e0bbcde7a8ce8d27ccc9055aee8070d28172faced" -price_feed_module_0 = "0xad0f7141f626c07db99a7fe5b864fde080bc4966c144d88f6f14ac4af391f30" -worker_common = "0x1bffc83ec332cb9de738e8f0c27dd2230ee57bdbc71473047fcfe8bfaa21fab7" -executor_fee_lib_router_0 = "0xfb941d4e28fc08b94fe53c9043e392d6405a16475bccbfee5222d588cef5b709" -executor_fee_lib_router_1 = "0xf8ed27afba36de5693de4c9ea654ee73de7b0e2ac7c43a54d36bc155a944d9d1" -dvn_fee_lib_router_0 = "0x707f09a7db866c4be5d2ee7c4ffcfe38e1b893f8d757712fe224fa19da881c93" -dvn_fee_lib_router_1 = "0x31dcc84f4bfffff09648cb9ae6d84261ddb7c04646d1f2f6c38bf6d7551a0831" -executor_fee_lib_0 = "0xbbb5d80871b10c4a7c10b9bbc636fdca4faa05feb3b03dc27e3018a7bfcbd8cb" -dvn_fee_lib_0 = "0x349c43bc506cbbe7b754b164867bd1751763410b6458a798c25bb6f3c3e9e487" -dvn = "0xdf8f0a53b20f1656f998504b81259698d126523a31bdbbae45ba1e8a3078d8da" -native_token_metadata_address = "0xa" -# For Initia: "0x8e4733bdabcf7d4afc3d14f0dd46c9bf52fb0fce9e4b996c939e195b8bc891d9" - -[dev-addresses] -oft = "0x302814823" -oft_admin = "0x12321241" -oft_common = "0x30281482332" -router_node_0 = "0x10000f" -simple_msglib = "0x100011" -blocked_msglib = "0x100001" -uln_302 = "0x100013" -router_node_1 = "0x100010" -endpoint_v2_common = "0x100007" -endpoint_v2 = "0x100006" -layerzero_admin = "0x200001" -layerzero_treasury_admin = "0x200002" -msglib_types = "0x10000b" -treasury = "0x100012" -worker_peripherals = "0x3000" -price_feed_router_0 = "0x10000d" -price_feed_router_1 = "0x10000e" -price_feed_module_0 = "0x10000c" -worker_common = "0x100014" -executor_fee_lib_router_0 = "0x100009" -executor_fee_lib_router_1 = "0x10000a" -dvn_fee_lib_router_0 = "0x100004" -dvn_fee_lib_router_1 = "0x100005" -executor_fee_lib_0 = "0x100008" -dvn_fee_lib_0 = "0x100003" -dvn = "0x100002" - -[dependencies.AptosFramework] -git = "https://github.com/aptos-labs/aptos-framework.git" -rev = "99f5e915b6d231d0ffbc1aff282d36148d2a8b24" -subdir = "aptos-framework" - -[dependencies] -endpoint_v2_common = { git = "https://github.com/LayerZero-Labs/LayerZero-v2", rev = "aptos-v2-jan-6", subdir = "packages/layerzero-v2/aptos/contracts/endpoint_v2_common" } -endpoint_v2 = { git = "https://github.com/LayerZero-Labs/LayerZero-v2", rev = "aptos-v2-jan-6", subdir = "packages/layerzero-v2/aptos/contracts/endpoint_v2" } -oft_common = { git = "https://github.com/LayerZero-Labs/LayerZero-v2", rev = "aptos-v2-jan-6", subdir = "packages/layerzero-v2/aptos/contracts/oapps/oft_common" } - -[dev-dependencies] -simple_msglib = { git = "https://github.com/LayerZero-Labs/LayerZero-v2", rev = "main", subdir = "packages/layerzero-v2/aptos/contracts/msglib/libs/simple_msglib" } diff --git a/examples/propose.sh b/examples/propose.sh index 1820bba7d1..cd7e5d48f9 100644 --- a/examples/propose.sh +++ b/examples/propose.sh @@ -16,6 +16,8 @@ set_move_env movement mainnet oft-aptos-move payload_file="$(mktemp /tmp/oft_fa_upgrade_payload.XXXX.json)" +movement multisig + movement move build-publish-payload \ --package-dir oft-aptos-move \ --named-addresses oft="$oft_fa",oft_admin="$multisig_address" \ diff --git a/examples/set_move_env.sh b/examples/set_move_env.sh index 18d21a7bb0..ebfc9d6077 100644 --- a/examples/set_move_env.sh +++ b/examples/set_move_env.sh @@ -126,7 +126,7 @@ dvn = "0xdf8f0a53b20f1656f998504b81259698d126523a31bdbbae45ba1e8a3078d8da"' aptos) framework_dep='[dependencies.AptosFramework] git = "https://github.com/aptos-labs/aptos-framework.git" -rev = "99f5e915b6d231d0ffbc1aff282d36148d2a8b24" +rev = "mainnet" subdir = "aptos-framework"' ;; movement) From 417768a34355ca3c5f3368605a53e0e908b2c81f Mon Sep 17 00:00:00 2001 From: primata Date: Thu, 2 Apr 2026 20:57:46 -0300 Subject: [PATCH 6/8] add propose and stake txs --- examples/oft-aptos-move/Move.toml | 80 +++++++++++-------------------- examples/propose.sh | 2 - examples/stake.sh | 17 +++++++ 3 files changed, 45 insertions(+), 54 deletions(-) create mode 100644 examples/stake.sh diff --git a/examples/oft-aptos-move/Move.toml b/examples/oft-aptos-move/Move.toml index 6ca4908c09..89e6336296 100644 --- a/examples/oft-aptos-move/Move.toml +++ b/examples/oft-aptos-move/Move.toml @@ -6,55 +6,31 @@ authors = [] [addresses] oft = "_" oft_admin = "_" -# movement-mainnet addresses (keep as "_" so dev-addresses can override for tests) -# oft_common = "0xcf4e1eb4b32b84266f27efe35539a9a3b7a3ec822299d8eb828ca32e581aa72c" -# router_node_0 = "0x6de27e5aa7dbee0fc32af2a92b8aa0b96e0033026ade8f22e4692cd8603220e9" -# simple_msglib = "0x52d5c6f8dcb20ed8ace8dbaa7cc09a98eb1dbec0f184720795310c031ace5111" -# blocked_msglib = "0x3ca0d187f1938cf9776a0aa821487a650fc7bb2ab1c1d241ba319192aae4afc6" -# uln_302 = "0xc33752e0220faf79e45385dd73fb28d681dcd9f1569a1480725507c1f3c3aba9" -# router_node_1 = "0x2ae54c38567f217c42b255016a38ccd68b67eb276a6cc3ebad609935fe3cc70c" -# endpoint_v2_common = "0xe1dc2a62b445403bea0dbd73df8cee03b3ead0a06b003e72e401c030a810a133" -# endpoint_v2 = "0xe60045e20fc2c99e869c1c34a65b9291c020cd12a0d37a00a53ac1348af4f43c" -# layerzero_admin = "0x19f1c63510f3ea8b8cd467ebe663897371919c185218d2859927f5a357b0bcae" -# layerzero_treasury_admin = "0x19f1c63510f3ea8b8cd467ebe663897371919c185218d2859927f5a357b0bcae" -# msglib_types = "0xa3fac5ed887625dd1d4371a60c7bfd5869e8ce5c3c5783fb8898dc0128365c31" -# treasury = "0x77c941e60b8e2c8d784de2ee456fd497283edfe1e15704c99a192ff795fc38b7" -# worker_peripherals = "0x19f1c63510f3ea8b8cd467ebe663897371919c185218d2859927f5a357b0bcae" -# price_feed_router_0 = "0x969722e6e181bb17165c17492c037514cd213a0ce9830a59724190e13c011136" -# price_feed_router_1 = "0x3808a699d1a14d25de813a4e0bbcde7a8ce8d27ccc9055aee8070d28172faced" -# price_feed_module_0 = "0xad0f7141f626c07db99a7fe5b864fde080bc4966c144d88f6f14ac4af391f30" -# worker_common = "0x1bffc83ec332cb9de738e8f0c27dd2230ee57bdbc71473047fcfe8bfaa21fab7" -# executor_fee_lib_router_0 = "0xfb941d4e28fc08b94fe53c9043e392d6405a16475bccbfee5222d588cef5b709" -# executor_fee_lib_router_1 = "0xf8ed27afba36de5693de4c9ea654ee73de7b0e2ac7c43a54d36bc155a944d9d1" -# dvn_fee_lib_router_0 = "0x707f09a7db866c4be5d2ee7c4ffcfe38e1b893f8d757712fe224fa19da881c93" -# dvn_fee_lib_router_1 = "0x31dcc84f4bfffff09648cb9ae6d84261ddb7c04646d1f2f6c38bf6d7551a0831" -# executor_fee_lib_0 = "0xbbb5d80871b10c4a7c10b9bbc636fdca4faa05feb3b03dc27e3018a7bfcbd8cb" -# dvn_fee_lib_0 = "0x349c43bc506cbbe7b754b164867bd1751763410b6458a798c25bb6f3c3e9e487" -# dvn = "0xdf8f0a53b20f1656f998504b81259698d126523a31bdbbae45ba1e8a3078d8da" -oft_common = "_" -router_node_0 = "_" -simple_msglib = "_" -blocked_msglib = "_" -uln_302 = "_" -router_node_1 = "_" -endpoint_v2_common = "_" -endpoint_v2 = "_" -layerzero_admin = "_" -layerzero_treasury_admin = "_" -msglib_types = "_" -treasury = "_" -worker_peripherals = "_" -price_feed_router_0 = "_" -price_feed_router_1 = "_" -price_feed_module_0 = "_" -worker_common = "_" -executor_fee_lib_router_0 = "_" -executor_fee_lib_router_1 = "_" -dvn_fee_lib_router_0 = "_" -dvn_fee_lib_router_1 = "_" -executor_fee_lib_0 = "_" -dvn_fee_lib_0 = "_" -dvn = "_" +# movement-mainnet +oft_common = "0xcf4e1eb4b32b84266f27efe35539a9a3b7a3ec822299d8eb828ca32e581aa72c" +router_node_0 = "0x6de27e5aa7dbee0fc32af2a92b8aa0b96e0033026ade8f22e4692cd8603220e9" +simple_msglib = "0x52d5c6f8dcb20ed8ace8dbaa7cc09a98eb1dbec0f184720795310c031ace5111" +blocked_msglib = "0x3ca0d187f1938cf9776a0aa821487a650fc7bb2ab1c1d241ba319192aae4afc6" +uln_302 = "0xc33752e0220faf79e45385dd73fb28d681dcd9f1569a1480725507c1f3c3aba9" +router_node_1 = "0x2ae54c38567f217c42b255016a38ccd68b67eb276a6cc3ebad609935fe3cc70c" +endpoint_v2_common = "0xe1dc2a62b445403bea0dbd73df8cee03b3ead0a06b003e72e401c030a810a133" +endpoint_v2 = "0xe60045e20fc2c99e869c1c34a65b9291c020cd12a0d37a00a53ac1348af4f43c" +layerzero_admin = "0x19f1c63510f3ea8b8cd467ebe663897371919c185218d2859927f5a357b0bcae" +layerzero_treasury_admin = "0x19f1c63510f3ea8b8cd467ebe663897371919c185218d2859927f5a357b0bcae" +msglib_types = "0xa3fac5ed887625dd1d4371a60c7bfd5869e8ce5c3c5783fb8898dc0128365c31" +treasury = "0x77c941e60b8e2c8d784de2ee456fd497283edfe1e15704c99a192ff795fc38b7" +worker_peripherals = "0x19f1c63510f3ea8b8cd467ebe663897371919c185218d2859927f5a357b0bcae" +price_feed_router_0 = "0x969722e6e181bb17165c17492c037514cd213a0ce9830a59724190e13c011136" +price_feed_router_1 = "0x3808a699d1a14d25de813a4e0bbcde7a8ce8d27ccc9055aee8070d28172faced" +price_feed_module_0 = "0xad0f7141f626c07db99a7fe5b864fde080bc4966c144d88f6f14ac4af391f30" +worker_common = "0x1bffc83ec332cb9de738e8f0c27dd2230ee57bdbc71473047fcfe8bfaa21fab7" +executor_fee_lib_router_0 = "0xfb941d4e28fc08b94fe53c9043e392d6405a16475bccbfee5222d588cef5b709" +executor_fee_lib_router_1 = "0xf8ed27afba36de5693de4c9ea654ee73de7b0e2ac7c43a54d36bc155a944d9d1" +dvn_fee_lib_router_0 = "0x707f09a7db866c4be5d2ee7c4ffcfe38e1b893f8d757712fe224fa19da881c93" +dvn_fee_lib_router_1 = "0x31dcc84f4bfffff09648cb9ae6d84261ddb7c04646d1f2f6c38bf6d7551a0831" +executor_fee_lib_0 = "0xbbb5d80871b10c4a7c10b9bbc636fdca4faa05feb3b03dc27e3018a7bfcbd8cb" +dvn_fee_lib_0 = "0x349c43bc506cbbe7b754b164867bd1751763410b6458a798c25bb6f3c3e9e487" +dvn = "0xdf8f0a53b20f1656f998504b81259698d126523a31bdbbae45ba1e8a3078d8da" native_token_metadata_address = "0xa" [dev-addresses] @@ -91,9 +67,9 @@ rev = "m1" subdir = "aptos-move/framework/aptos-framework" [dependencies] -endpoint_v2_common = { git = "https://github.com/LayerZero-Labs/LayerZero-v2", rev = "aptos-v2-jan-6", subdir = "packages/layerzero-v2/aptos/contracts/endpoint_v2_common" } -endpoint_v2 = { git = "https://github.com/LayerZero-Labs/LayerZero-v2", rev = "aptos-v2-jan-6", subdir = "packages/layerzero-v2/aptos/contracts/endpoint_v2" } -oft_common = { git = "https://github.com/LayerZero-Labs/LayerZero-v2", rev = "aptos-v2-jan-6", subdir = "packages/layerzero-v2/aptos/contracts/oapps/oft_common" } +endpoint_v2_common = { git = "https://github.com/LayerZero-Labs/LayerZero-v2", rev = "main", subdir = "packages/layerzero-v2/aptos/contracts/endpoint_v2_common" } +endpoint_v2 = { git = "https://github.com/LayerZero-Labs/LayerZero-v2", rev = "main", subdir = "packages/layerzero-v2/aptos/contracts/endpoint_v2" } +oft_common = { git = "https://github.com/LayerZero-Labs/LayerZero-v2", rev = "main", subdir = "packages/layerzero-v2/aptos/contracts/oapps/oft_common" } [dev-dependencies] simple_msglib = { git = "https://github.com/LayerZero-Labs/LayerZero-v2", rev = "main", subdir = "packages/layerzero-v2/aptos/contracts/msglib/libs/simple_msglib" } diff --git a/examples/propose.sh b/examples/propose.sh index 01071d1998..42e6407cb1 100644 --- a/examples/propose.sh +++ b/examples/propose.sh @@ -17,8 +17,6 @@ set_move_env movement mainnet oft-aptos-move payload_file="$(mktemp /tmp/oft_fa_upgrade_payload.XXXX.json)" -movement multisig - movement move build-publish-payload \ --package-dir oft-aptos-move \ --named-addresses oft="$oft_fa",oft_admin="$multisig_address" \ diff --git a/examples/stake.sh b/examples/stake.sh new file mode 100644 index 0000000000..1d183a61ac --- /dev/null +++ b/examples/stake.sh @@ -0,0 +1,17 @@ +# #!/bin/sh + +# # Exit on any error +set -e +# Exit on undefined variables +set -u +# Exit on pipe failures +set -o pipefail +source ./set_move_env.sh +set_move_env movement mainnet oft-aptos-move +multisig_address="0x98ebb7985c84a89972022edf391bdaa7d95f061d9742efb3703de368413431e1" + +movement multisig create-transaction \ + --multisig-address "$multisig_address" \ + --function-id 0xb52bac12e50458cd2b958b82b05e3a240834eefbfc4b1bc0729fd580c625f1ea::liquid_staking::stake_and_mint \ + --args u64:1000000000000000 \ + --profile ops \ No newline at end of file From 503e15f22d3ffb64fc5b2328b5b9c1261ef4f5c5 Mon Sep 17 00:00:00 2001 From: Andy Golay Date: Thu, 2 Apr 2026 21:03:32 -0400 Subject: [PATCH 7/8] add execute script --- examples/execute.sh | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 examples/execute.sh diff --git a/examples/execute.sh b/examples/execute.sh new file mode 100644 index 0000000000..1302dcb8e8 --- /dev/null +++ b/examples/execute.sh @@ -0,0 +1,39 @@ +# #!/bin/sh + +# # Exit on any error +set -e +# Exit on undefined variables +set -u +# Exit on pipe failures +set -o pipefail + +# Must match propose.sh exactly so the rebuilt payload hashes to the same value as on-chain. +multisig_address="0x98ebb7985c84a89972022edf391bdaa7d95f061d9742efb3703de368413431e1" +oft_fa="0x3dfe1ac4574c7dbbe6f1c5ba862de88fc3e7d3cf8eba95ef1abf32b582889e6d" + +source ./set_move_env.sh +set_move_env movement mainnet oft-aptos-move + +payload_file="$(mktemp /tmp/oft_fa_upgrade_payload.XXXX.json)" + +movement move build-publish-payload \ + --package-dir oft-aptos-move \ + --named-addresses oft="$oft_fa",oft_admin="$multisig_address" \ + --json-output-file "$payload_file" \ + --assume-yes + +# Hash-only proposals: use execute-with-payload (not `multisig execute`). +# Optional: simulate first with --local +movement multisig execute-with-payload \ + --multisig-address "$multisig_address" \ + --json-file "$payload_file" \ + --profile ops + +rm -f "$payload_file" + +# Optional: verify payload matches a pending proposal before submitting (needs sequence number). +# movement multisig verify-proposal \ +# --multisig-address "$multisig_address" \ +# --sequence-number \ +# --json-file "$payload_file" \ +# --profile ops From 7d6ab85d31b74d1b86ad07b551f78233eb4b2e4e Mon Sep 17 00:00:00 2001 From: Andy Golay Date: Fri, 3 Apr 2026 18:24:37 -0400 Subject: [PATCH 8/8] add propose and execute for object upgrade --- examples/execute_object_upgrade.sh | 52 ++++++++++++++++++++++++++++++ examples/propose_object_upgrade.sh | 50 ++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100755 examples/execute_object_upgrade.sh create mode 100755 examples/propose_object_upgrade.sh diff --git a/examples/execute_object_upgrade.sh b/examples/execute_object_upgrade.sh new file mode 100755 index 0000000000..ce92de55e6 --- /dev/null +++ b/examples/execute_object_upgrade.sh @@ -0,0 +1,52 @@ +# #!/bin/sh + +# Execute a hash-only multisig proposal for object_code_deployment::upgrade. Rebuild must match propose_object_upgrade.sh +# (same oft_fa, named-addresses, package, and jq transform) or the hash will not match. +# +# Requires: jq (brew install jq) +# +set -e +set -u +set -o pipefail + +if ! command -v jq >/dev/null 2>&1; then + echo "jq is required (e.g. brew install jq)" >&2 + exit 1 +fi + +multisig_address="0x98ebb7985c84a89972022edf391bdaa7d95f061d9742efb3703de368413431e1" +oft_fa="0x3dfe1ac4574c7dbbe6f1c5ba862de88fc3e7d3cf8eba95ef1abf32b582889e6d" + +source ./set_move_env.sh +set_move_env movement mainnet oft-aptos-move + +base_payload="$(mktemp /tmp/oft_object_upgrade_base.XXXXXX.json)" +payload_file="$(mktemp /tmp/oft_object_upgrade_payload.XXXXXX.json)" + +cleanup() { + rm -f "$base_payload" "$payload_file" +} +trap cleanup EXIT + +movement move build-publish-payload \ + --package-dir oft-aptos-move \ + --named-addresses oft="$oft_fa",oft_admin="$multisig_address" \ + --json-output-file "$base_payload" \ + --assume-yes + +jq --arg obj "$oft_fa" \ + '.function_id = "0x1::object_code_deployment::upgrade" | .args += [{"type": "address", "value": $obj}]' \ + "$base_payload" >"$payload_file" + +# Simulate first: append --local. Remove --assume-yes to review gas prompts interactively. +movement multisig execute-with-payload \ + --multisig-address "$multisig_address" \ + --json-file "$payload_file" \ + --assume-yes \ + --profile eoa + +# movement multisig verify-proposal \ +# --multisig-address "$multisig_address" \ +# --sequence-number \ +# --json-file "$payload_file" \ +# --profile ops diff --git a/examples/propose_object_upgrade.sh b/examples/propose_object_upgrade.sh new file mode 100755 index 0000000000..7c4ed8f42c --- /dev/null +++ b/examples/propose_object_upgrade.sh @@ -0,0 +1,50 @@ +# #!/bin/sh + +# Multisig proposal for upgrading a package deployed with 0x1::object_code_deployment (object holds PackageRegistry). +# +# Movement CLI only has `build-publish-payload`, which targets 0x1::code::publish_package_txn. The first two +# arguments (package metadata + module bytecode) are the same as for object_code_deployment::upgrade; we +# rewrite the JSON to call 0x1::object_code_deployment::upgrade and append the code-object address. +# +# Requires: jq (brew install jq) +# +set -e +set -u +set -o pipefail + +if ! command -v jq >/dev/null 2>&1; then + echo "jq is required (e.g. brew install jq)" >&2 + exit 1 +fi + +multisig_address="0x98ebb7985c84a89972022edf391bdaa7d95f061d9742efb3703de368413431e1" +# Must match propose.sh: @oft and the code object arg to object_code_deployment::upgrade. +oft_fa="0x3dfe1ac4574c7dbbe6f1c5ba862de88fc3e7d3cf8eba95ef1abf32b582889e6d" + +source ./set_move_env.sh +set_move_env movement mainnet oft-aptos-move + +base_payload="$(mktemp /tmp/oft_object_upgrade_base.XXXXXX.json)" +payload_file="$(mktemp /tmp/oft_object_upgrade_payload.XXXXXX.json)" + +cleanup() { + rm -f "$base_payload" "$payload_file" +} +trap cleanup EXIT + +movement move build-publish-payload \ + --package-dir oft-aptos-move \ + --named-addresses oft="$oft_fa",oft_admin="$multisig_address" \ + --json-output-file "$base_payload" \ + --assume-yes + +jq --arg obj "$oft_fa" \ + '.function_id = "0x1::object_code_deployment::upgrade" | .args += [{"type": "address", "value": $obj}]' \ + "$base_payload" >"$payload_file" + +movement multisig create-transaction \ + --multisig-address "$multisig_address" \ + --json-file "$payload_file" \ + --store-hash-only \ + --local \ + --profile ops