diff --git a/Clarinet.toml b/Clarinet.toml index 1a88fc9..38f56d1 100644 --- a/Clarinet.toml +++ b/Clarinet.toml @@ -14,40 +14,40 @@ contract_id = 'SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-ecc-v1' [[project.requirements]] contract_id = 'SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-merkle-tree-keccak160-v1' -[contracts.pyth-governance-v1] -path = 'contracts/pyth-governance-v1.clar' -clarity_version = 2 -epoch = 2.4 - -[contracts.pyth-oracle-v2] -path = 'contracts/pyth-oracle-v2.clar' -clarity_version = 2 -epoch = 2.4 - -[contracts.pyth-store-v1] -path = 'contracts/pyth-store-v1.clar' -clarity_version = 2 -epoch = 2.4 - -[contracts.pyth-pnau-decoder-v1] -path = 'contracts/pyth-pnau-decoder-v1.clar' -clarity_version = 2 -epoch = 2.4 +[contracts.pyth-governance-v2] +path = 'contracts/pyth-governance-v2.clar' +clarity_version = 3 +epoch = 3.0 + +[contracts.pyth-oracle-v3] +path = 'contracts/pyth-oracle-v3.clar' +clarity_version = 3 +epoch = 3.0 + +[contracts.pyth-storage-v3] +path = 'contracts/pyth-storage-v3.clar' +clarity_version = 3 +epoch = 3.0 + +[contracts.pyth-pnau-decoder-v2] +path = 'contracts/pyth-pnau-decoder-v2.clar' +clarity_version = 3 +epoch = 3.0 [contracts.pyth-traits-v1] path = 'contracts/pyth-traits-v1.clar' -clarity_version = 2 -epoch = 2.4 +clarity_version = 3 +epoch = 3.0 -[contracts.wormhole-core-v2] -path = 'contracts/wormhole/wormhole-core-v2.clar' -clarity_version = 2 -epoch = 2.4 +[contracts.wormhole-core-v3] +path = 'contracts/wormhole/wormhole-core-v3.clar' +clarity_version = 3 +epoch = 3.0 [contracts.wormhole-traits-v1] path = 'contracts/wormhole/wormhole-traits-v1.clar' -clarity_version = 2 -epoch = 2.4 +clarity_version = 3 +epoch = 3.0 [repl.analysis] passes = ['check_checker'] diff --git a/README.md b/README.md index 5098079..ef53ad6 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,5 @@ +# Stacks <> Pyth - edited by Granite team + / / ▶ Stacks Pyth Bridge / --- / Bridging Pyth price feeds to the Stacks blockchain. / / Retrieve trading pairs (BTC-USD, STX-USD, etc.) from Clarity smart contracts. @@ -43,12 +45,12 @@ $ npm test | network | address | | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| testnet | [ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-oracle-v2](https://explorer.hiro.so/txid/0x59dc127b983fcb8027706191b62138eb73a3ade8ecdbad5e99df4d2bfbbd6dfb?chain=testnet) | -| mainnet | [SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.pyth-oracle-v2](https://explorer.hiro.so/txid/0xee803f98e61c1d46d36d130c29d4a78099c8fb5700528226f3dc5a104954ffeb?chain=mainnet) | +| testnet | [ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-oracle-v3](https://explorer.hiro.so/txid/0x59dc127b983fcb8027706191b62138eb73a3ade8ecdbad5e99df4d2bfbbd6dfb?chain=testnet) | +| mainnet | [SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.pyth-oracle-v3](https://explorer.hiro.so/txid/0xee803f98e61c1d46d36d130c29d4a78099c8fb5700528226f3dc5a104954ffeb?chain=mainnet) | ### Onchain -The `pyth-oracle-v2` contract is exposing the following method: +The `pyth-oracle-v3` contract is exposing the following method: ```clarity (define-public (read-price-feed @@ -60,10 +62,10 @@ That can be consumed with the following invocation: ```clarity (contract-call? - 'SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.pyth-oracle-v2 ;; Address of the helper contract + 'SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.pyth-oracle-v3 ;; Address of the helper contract read-price-feed 0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43 ;; BTC-USD price identifier - 'SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.pyth-store-v1) + 'SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.pyth-storage-v1) ``` The authenticity of the price feeds is verified during their ingestion, making the cost of queries as light as possible. @@ -78,7 +80,7 @@ The full list of prices is available [here](https://pyth.network/price-feeds/). ### Offchain -For every new price recorded and stored on chain, the `pyth-store-v1` is emitting an event with the following shape: +For every new price recorded and stored on chain, the `pyth-storage-v1` is emitting an event with the following shape: ```clarity { @@ -115,19 +117,19 @@ $ curl https://hermes.pyth.network/api/latest_price_feeds?ids[]=ec7a775f46379b5e 504e41550100000003b8...a7b10321ad7c2404a910 ``` -This sequence of bytes is a Verified Action Approvals (VAA) including the price informations including its cryptographic elements helping the Pyth contract ensuring the authenticity of the data. +This sequence of bytes is a Verified Action Approvals (VAA) including the price information including its cryptographic elements helping the Pyth contract ensuring the authenticity of the data. This VAA can be encoded as a Clarity buffer, and submitted to the Pyth contract using the following: ```clarity (contract-call? - 'SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.pyth-oracle-v2 ;; Address of the helper contract + 'SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.pyth-oracle-v3 ;; Address of the helper contract verify-and-update-price 0x504e41550100000003b8...a7b10321ad7c2404a910 ;; BTC-USD price update { - pyth-storage-contract: 'SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.pyth-store-v1, - pyth-decoder-contract: 'SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.pyth-pnau-decoder-v1, - wormhole-core-contract: 'SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.wormhole-core-v2 + pyth-storage-contract: 'SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.pyth-storage-v1, + pyth-decoder-contract: 'SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.pyth-pnau-decoder-v2, + wormhole-core-contract: 'SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.wormhole-core-v3 }) ``` @@ -150,3 +152,9 @@ If the VAA is valid, the contract call will return a payload with the following Including all the prices successfully updating the oracle. All of the implementation details can be found in [Pyth documentation](https://docs.pyth.network/documentation/how-pyth-works). + +# Upgrades + +- Ported the codebase to Clarity V3 +- bump up nodejs dependencies +- introduced a utility function `set-price-testnet` in the `pyth-storage-v1` contract to set the price data for a specific feed without the need to produce a valid attestation. This function will only work on testnet. diff --git a/audits/.gitkeep b/audits/.gitkeep new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/audits/.gitkeep @@ -0,0 +1 @@ + diff --git a/audits/2024-12-08 Pyth Audit - Clarity Alliance.pdf b/audits/2024-12-08 Pyth Audit - Clarity Alliance.pdf new file mode 100644 index 0000000..81135df Binary files /dev/null and b/audits/2024-12-08 Pyth Audit - Clarity Alliance.pdf differ diff --git a/contracts/pyth-governance-v1.clar b/contracts/pyth-governance-v2.clar similarity index 83% rename from contracts/pyth-governance-v1.clar rename to contracts/pyth-governance-v2.clar index fbac19c..ee6e76f 100644 --- a/contracts/pyth-governance-v1.clar +++ b/contracts/pyth-governance-v2.clar @@ -1,7 +1,7 @@ ;; Title: pyth-governance -;; Version: v1 -;; Check for latest version: https://github.com/hirosystems/stacks-pyth-bridge#latest-version -;; Report an issue: https://github.com/hirosystems/stacks-pyth-bridge/issues +;; Version: v2 +;; Check for latest version: https://github.com/Trust-Machines/stacks-pyth-bridge#latest-version +;; Report an issue: https://github.com/Trust-Machines/stacks-pyth-bridge/issues (use-trait pyth-proxy-trait .pyth-traits-v1.proxy-trait) (use-trait pyth-decoder-trait .pyth-traits-v1.decoder-trait) @@ -26,28 +26,34 @@ ;; Special Stacks operation: update recipient address (define-constant PTGM_UPDATE_RECIPIENT_ADDRESS 0xa0) ;; Special Stacks operation: update storage contract address -(define-constant PTGM_UPDATE_PYTH_STORE_ADDRESS 0xa1) +(define-constant PTGM_UPDATE_PYTH_STORAGE_ADDRESS 0xa1) ;; Special Stacks operation: update decoder contract address (define-constant PTGM_UPDATE_PYTH_DECODER_ADDRESS 0xa2) ;; Stacks chain id attributed by Pyth (define-constant EXPECTED_CHAIN_ID (if is-in-mainnet 0xea86 0xc377)) ;; Stacks module id attributed by Pyth (define-constant EXPECTED_MODULE 0x03) +;; Emitter data size +(define-constant SIZE_OF_EMITTER_DATA u34) -;; Error unauthorized control flow -(define-constant ERR_UNAUTHORIZED_ACCESS (err u4004)) ;; Error unexpected action (define-constant ERR_UNEXPECTED_ACTION (err u4001)) -;; Error unexpected action payload -(define-constant ERR_UNEXPECTED_ACTION_PAYLOAD (err u4002)) ;; Error unexpected action -(define-constant ERR_INVALID_ACTION_PAYLOAD (err u4003)) +(define-constant ERR_INVALID_ACTION_PAYLOAD (err u4002)) +;; Error unauthorized control flow +(define-constant ERR_UNAUTHORIZED_ACCESS (err u4003)) ;; Error outdated action -(define-constant ERR_OUTDATED (err u4005)) +(define-constant ERR_OUTDATED (err u4004)) ;; Error unauthorized update -(define-constant ERR_UNAUTHORIZED_UPDATE (err u4006)) +(define-constant ERR_UNAUTHORIZED_UPDATE (err u4005)) ;; Error parsing PTGM -(define-constant ERR_INVALID_PTGM (err u4007)) +(define-constant ERR_INVALID_PTGM (err u4006)) +;; Error not standard principal +(define-constant ERR_NOT_STANDARD_PRINCIPAL (err u4007)) +;; Error Ptgm overlay bytes +(define-constant ERR_PTGM_CHECK_OVERLAY (err u4008)) +;; Error invalid price data source +(define-constant ERR_INVALID_PRICE_DATA_SOURCES (err u4009)) (define-data-var governance-data-source { emitter-chain: uint, emitter-address: (buff 32) } @@ -60,7 +66,7 @@ { emitter-chain: u26, emitter-address: 0xe101faedac5851e32b9b23b5f9411a8c2bac4aae3ed4dd7b811dd1a72ea4aa71 })) (define-data-var fee-value { mantissa: uint, exponent: uint } - { mantissa: u1, exponent: u1 }) + { mantissa: u1, exponent: u0 }) (define-data-var stale-price-threshold uint (if is-in-mainnet (* u2 u60 u60) (* u5 u365 u24 u60 u60))) ;; defaults: 2 hours on Mainnet, 5 years on Testnet (define-data-var fee-recipient-address principal (if is-in-mainnet 'SP3CRXBDXQ2N5P7E25Q39MEX1HSMRDSEAP3CFK2Z3 'ST3CRXBDXQ2N5P7E25Q39MEX1HSMRDSEAP1JST19D)) (define-data-var last-sequence-processed uint u0) @@ -72,10 +78,10 @@ pyth-storage-contract: principal, wormhole-core-contract: principal } { - pyth-oracle-contract: .pyth-oracle-v2, - pyth-decoder-contract: .pyth-pnau-decoder-v1, - pyth-storage-contract: .pyth-store-v1, - wormhole-core-contract: .wormhole-core-v2 + pyth-oracle-contract: .pyth-oracle-v3, + pyth-decoder-contract: .pyth-pnau-decoder-v2, + pyth-storage-contract: .pyth-storage-v3, + wormhole-core-contract: .wormhole-core-v3 }) (define-read-only (check-execution-flow @@ -128,11 +134,11 @@ (let ((expected-execution-plan (var-get current-execution-plan)) (vaa (try! (contract-call? wormhole-core-contract parse-and-verify-vaa vaa-bytes))) (ptgm (try! (parse-and-verify-ptgm (get payload vaa) (get sequence vaa))))) - ;; Ensure action's expectation + ;; Ensure action's expected (asserts! (is-eq (get action ptgm) PTGM_UPDATE_FEE) ERR_UNEXPECTED_ACTION) ;; Ensure that the action is authorized (try! (check-update-source (get emitter-chain vaa) (get emitter-address vaa))) - ;; Ensure that the lastest wormhole contract is used + ;; Ensure that the latest wormhole contract is used (try! (expect-active-wormhole-contract wormhole-core-contract expected-execution-plan)) ;; Update fee-value (let ((updated-data (try! (parse-and-verify-fee-value (get body ptgm))))) @@ -145,13 +151,13 @@ (let ((expected-execution-plan (var-get current-execution-plan)) (vaa (try! (contract-call? wormhole-core-contract parse-and-verify-vaa vaa-bytes))) (ptgm (try! (parse-and-verify-ptgm (get payload vaa) (get sequence vaa))))) - ;; Ensure action's expectation + ;; Ensure action's expected (asserts! (is-eq (get action ptgm) PTGM_STALE_PRICE_THRESHOLD) ERR_UNEXPECTED_ACTION) ;; Ensure that the action is authorized (try! (check-update-source (get emitter-chain vaa) (get emitter-address vaa))) - ;; Ensure that the lastest wormhole contract is used + ;; Ensure that the latest wormhole contract is used (try! (expect-active-wormhole-contract wormhole-core-contract expected-execution-plan)) - ;; Update fee-value + ;; Update stale-price-threshold (let ((updated-data (try! (parse-and-verify-stale-price-threshold (get body ptgm))))) (var-set stale-price-threshold updated-data) ;; Emit event @@ -162,96 +168,96 @@ (let ((expected-execution-plan (var-get current-execution-plan)) (vaa (try! (contract-call? wormhole-core-contract parse-and-verify-vaa vaa-bytes))) (ptgm (try! (parse-and-verify-ptgm (get payload vaa) (get sequence vaa))))) - ;; Ensure action's expectation + ;; Ensure action's expected (asserts! (is-eq (get action ptgm) PTGM_UPDATE_RECIPIENT_ADDRESS) ERR_UNEXPECTED_ACTION) ;; Ensure that the action is authorized (try! (check-update-source (get emitter-chain vaa) (get emitter-address vaa))) - ;; Ensure that the lastest wormhole contract is used + ;; Ensure that the latest wormhole contract is used (try! (expect-active-wormhole-contract wormhole-core-contract expected-execution-plan)) - ;; Update fee-recipient address + ;; Update fee-recipient-address (let ((updated-data (try! (parse-principal (get body ptgm))))) (var-set fee-recipient-address updated-data) ;; Emit event - (print { type: "fee-recipient", action: "updated", data: updated-data }) + (print { type: "fee-recipient-address", action: "updated", data: updated-data }) (ok updated-data)))) (define-public (update-wormhole-core-contract (vaa-bytes (buff 8192)) (wormhole-core-contract )) (let ((expected-execution-plan (var-get current-execution-plan)) (vaa (try! (contract-call? wormhole-core-contract parse-and-verify-vaa vaa-bytes))) (ptgm (try! (parse-and-verify-ptgm (get payload vaa) (get sequence vaa))))) - ;; Ensure action's expectation + ;; Ensure action's expected (asserts! (is-eq (get action ptgm) PTGM_UPDATE_WORMHOLE_CORE_ADDRESS) ERR_UNEXPECTED_ACTION) ;; Ensure that the action is authorized (try! (check-update-source (get emitter-chain vaa) (get emitter-address vaa))) - ;; Ensure that the lastest wormhole contract is used + ;; Ensure that the latest wormhole contract is used (try! (expect-active-wormhole-contract wormhole-core-contract expected-execution-plan)) ;; Update execution plan (let ((updated-data (try! (parse-principal (get body ptgm))))) (var-set current-execution-plan (merge expected-execution-plan { wormhole-core-contract: updated-data })) ;; Emit event (print { type: "wormhole-core-contract", action: "updated", data: updated-data }) - (ok (var-get current-execution-plan))))) + (ok updated-data)))) (define-public (update-pyth-oracle-contract (vaa-bytes (buff 8192)) (wormhole-core-contract )) (let ((expected-execution-plan (var-get current-execution-plan)) (vaa (try! (contract-call? wormhole-core-contract parse-and-verify-vaa vaa-bytes))) (ptgm (try! (parse-and-verify-ptgm (get payload vaa) (get sequence vaa))))) - ;; Ensure action's expectation + ;; Ensure action's expected (asserts! (is-eq (get action ptgm) PTGM_UPDATE_PYTH_ORACLE_ADDRESS) ERR_UNEXPECTED_ACTION) ;; Ensure that the action is authorized (try! (check-update-source (get emitter-chain vaa) (get emitter-address vaa))) - ;; Ensure that the lastest wormhole contract is used + ;; Ensure that the latest wormhole contract is used (try! (expect-active-wormhole-contract wormhole-core-contract expected-execution-plan)) ;; Update execution plan (let ((updated-data (try! (parse-principal (get body ptgm))))) (var-set current-execution-plan (merge expected-execution-plan { pyth-oracle-contract: updated-data })) ;; Emit event (print { type: "pyth-oracle-contract", action: "updated", data: updated-data }) - (ok (var-get current-execution-plan))))) + (ok updated-data)))) (define-public (update-pyth-decoder-contract (vaa-bytes (buff 8192)) (wormhole-core-contract )) (let ((expected-execution-plan (var-get current-execution-plan)) (vaa (try! (contract-call? wormhole-core-contract parse-and-verify-vaa vaa-bytes))) (ptgm (try! (parse-and-verify-ptgm (get payload vaa) (get sequence vaa))))) - ;; Ensure action's expectation + ;; Ensure action's expected (asserts! (is-eq (get action ptgm) PTGM_UPDATE_PYTH_DECODER_ADDRESS) ERR_UNEXPECTED_ACTION) ;; Ensure that the action is authorized (try! (check-update-source (get emitter-chain vaa) (get emitter-address vaa))) - ;; Ensure that the lastest wormhole contract is used + ;; Ensure that the latest wormhole contract is used (try! (expect-active-wormhole-contract wormhole-core-contract expected-execution-plan)) ;; Update execution plan (let ((updated-data (try! (parse-principal (get body ptgm))))) (var-set current-execution-plan (merge expected-execution-plan { pyth-decoder-contract: updated-data })) ;; Emit event (print { type: "pyth-decoder-contract", action: "updated", data: updated-data }) - (ok (var-get current-execution-plan))))) + (ok updated-data)))) -(define-public (update-pyth-store-contract (vaa-bytes (buff 8192)) (wormhole-core-contract )) +(define-public (update-pyth-storage-contract (vaa-bytes (buff 8192)) (wormhole-core-contract )) (let ((expected-execution-plan (var-get current-execution-plan)) (vaa (try! (contract-call? wormhole-core-contract parse-and-verify-vaa vaa-bytes))) (ptgm (try! (parse-and-verify-ptgm (get payload vaa) (get sequence vaa))))) - ;; Ensure action's expectation - (asserts! (is-eq (get action ptgm) PTGM_UPDATE_PYTH_STORE_ADDRESS) ERR_UNEXPECTED_ACTION) + ;; Ensure action's expected + (asserts! (is-eq (get action ptgm) PTGM_UPDATE_PYTH_STORAGE_ADDRESS) ERR_UNEXPECTED_ACTION) ;; Ensure that the action is authorized (try! (check-update-source (get emitter-chain vaa) (get emitter-address vaa))) - ;; Ensure that the lastest wormhole contract is used + ;; Ensure that the latest wormhole contract is used (try! (expect-active-wormhole-contract wormhole-core-contract expected-execution-plan)) ;; Update execution plan (let ((updated-data (try! (parse-principal (get body ptgm))))) (var-set current-execution-plan (merge expected-execution-plan { pyth-storage-contract: updated-data })) ;; Emit event (print { type: "pyth-storage-contract", action: "updated", data: updated-data }) - (ok (var-get current-execution-plan))))) + (ok updated-data)))) (define-public (update-prices-data-sources (vaa-bytes (buff 8192)) (wormhole-core-contract )) (let ((expected-execution-plan (var-get current-execution-plan)) (vaa (try! (contract-call? wormhole-core-contract parse-and-verify-vaa vaa-bytes))) (ptgm (try! (parse-and-verify-ptgm (get payload vaa) (get sequence vaa))))) - ;; Ensure action's expectation + ;; Ensure action's expected (asserts! (is-eq (get action ptgm) PTGM_UPDATE_PRICES_DATA_SOURCES) ERR_UNEXPECTED_ACTION) ;; Ensure that the action is authorized (try! (check-update-source (get emitter-chain vaa) (get emitter-address vaa))) - ;; Ensure that the lastest wormhole contract is used + ;; Ensure that the latest wormhole contract is used (try! (expect-active-wormhole-contract wormhole-core-contract expected-execution-plan)) ;; Update prices-data-sources (let ((updated-data (try! (parse-and-verify-prices-data-sources (get body ptgm))))) @@ -264,18 +270,23 @@ (let ((expected-execution-plan (var-get current-execution-plan)) (vaa (try! (contract-call? wormhole-core-contract parse-and-verify-vaa vaa-bytes))) (ptgm (try! (parse-and-verify-ptgm (get payload vaa) (get sequence vaa))))) - ;; Ensure action's expectation + ;; Ensure action's expected (asserts! (is-eq (get action ptgm) PTGM_UPDATE_GOVERNANCE_DATA_SOURCE) ERR_UNEXPECTED_ACTION) ;; Ensure that the action is authorized (try! (check-update-source (get emitter-chain vaa) (get emitter-address vaa))) - ;; Ensure that the lastest wormhole contract is used + ;; Ensure that the latest wormhole contract is used (try! (expect-active-wormhole-contract wormhole-core-contract expected-execution-plan)) - ;; Update prices-data-sources - (let ((updated-data (try! (parse-and-verify-governance-data-source (get body ptgm))))) - (var-set governance-data-source updated-data) + ;; Update governance-data-source + (let ( + (updated-data (try! (parse-and-verify-governance-data-source (get body ptgm)))) + (data-source {emitter-chain: (get emitter-chain updated-data), emitter-address: (get emitter-address updated-data)}) + (new-sequence (get emitter-sequence updated-data))) + (var-set governance-data-source data-source) + (var-set last-sequence-processed new-sequence) ;; Emit event (print { type: "governance-data-source", action: "updated", data: updated-data }) - (ok updated-data)))) + (ok updated-data) + ))) (define-private (check-update-source (emitter-chain uint) (emitter-address (buff 32))) (let ((authorized-data-source (var-get governance-data-source))) @@ -358,7 +369,8 @@ (cursor-target-chain-id (unwrap! (contract-call? 'SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-cursor-v2 read-buff-2 (get next cursor-action)) ERR_INVALID_PTGM)) (cursor-body (unwrap! (contract-call? 'SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-cursor-v2 read-buff-8192-max (get next cursor-target-chain-id) none) - ERR_INVALID_PTGM))) + ERR_INVALID_PTGM)) + (overlay-check (asserts! (is-eq (get pos (get next cursor-body)) (len ptgm-bytes)) ERR_PTGM_CHECK_OVERLAY))) ;; Check magic bytes (asserts! (is-eq (get value cursor-magic) PTGM_MAGIC) ERR_INVALID_PTGM) ;; Check target-chain-id @@ -383,6 +395,7 @@ ERR_INVALID_ACTION_PAYLOAD)) (cursor-exponent (unwrap! (contract-call? 'SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-cursor-v2 read-uint-64 (get next cursor-mantissa)) ERR_INVALID_ACTION_PAYLOAD))) + (asserts! (is-eq (get pos (get next cursor-exponent)) (len ptgm-body)) ERR_PTGM_CHECK_OVERLAY) (ok { mantissa: (get value cursor-mantissa), exponent: (get value cursor-exponent) @@ -392,16 +405,21 @@ (let ((cursor-ptgm-body (contract-call? 'SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-cursor-v2 new ptgm-body none)) (cursor-stale-price-threshold (unwrap! (contract-call? 'SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-cursor-v2 read-uint-64 (get next cursor-ptgm-body)) ERR_INVALID_ACTION_PAYLOAD))) + (asserts! (is-eq (get pos (get next cursor-stale-price-threshold)) (len ptgm-body)) ERR_PTGM_CHECK_OVERLAY) (ok (get value cursor-stale-price-threshold)))) (define-private (parse-and-verify-governance-data-source (ptgm-body (buff 8192))) (let ((cursor-ptgm-body (contract-call? 'SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-cursor-v2 new ptgm-body none)) (cursor-emitter-chain (unwrap! (contract-call? 'SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-cursor-v2 read-uint-16 (get next cursor-ptgm-body)) ERR_INVALID_ACTION_PAYLOAD)) - (cursor-emitter-address (unwrap! (contract-call? 'SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-cursor-v2 read-buff-32 (get next cursor-emitter-chain)) + (cursor-emitter-sequence (unwrap! (contract-call? 'SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-cursor-v2 read-uint-64 (get next cursor-emitter-chain)) + ERR_INVALID_ACTION_PAYLOAD)) + (cursor-emitter-address (unwrap! (contract-call? 'SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-cursor-v2 read-buff-32 (get next cursor-emitter-sequence)) ERR_INVALID_ACTION_PAYLOAD))) + (asserts! (is-eq (get pos (get next cursor-emitter-address)) (len ptgm-body)) ERR_PTGM_CHECK_OVERLAY) (ok { - emitter-chain: (get value cursor-emitter-chain), + emitter-chain: (get value cursor-emitter-chain), + emitter-sequence: (get value cursor-emitter-sequence), emitter-address: (get value cursor-emitter-address) }))) @@ -409,14 +427,16 @@ (let ((cursor-ptgm-body (contract-call? 'SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-cursor-v2 new ptgm-body none)) (cursor-principal-len (try! (contract-call? 'SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-cursor-v2 read-uint-8 (get next cursor-ptgm-body)))) (principal-bytes (contract-call? 'SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-cursor-v2 slice (get next cursor-principal-len) (some (get value cursor-principal-len)))) - (new-principal (unwrap! (from-consensus-buff? principal principal-bytes) ERR_UNEXPECTED_ACTION_PAYLOAD))) + (new-principal (unwrap! (from-consensus-buff? principal principal-bytes) ERR_INVALID_ACTION_PAYLOAD))) + (asserts! (is-eq (+ (get pos (get next cursor-principal-len)) (get value cursor-principal-len)) (len ptgm-body)) ERR_PTGM_CHECK_OVERLAY) + (asserts! (is-standard new-principal) ERR_NOT_STANDARD_PRINCIPAL) (ok new-principal))) (define-private (parse-and-verify-prices-data-sources (ptgm-body (buff 8192))) (let ((cursor-ptgm-body (contract-call? 'SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-cursor-v2 new ptgm-body none)) (cursor-num-data-sources (try! (contract-call? 'SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-cursor-v2 read-uint-8 (get next cursor-ptgm-body)))) (cursor-data-sources-bytes (contract-call? 'SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-cursor-v2 slice (get next cursor-num-data-sources) none)) - (data-sources (get result (fold parse-data-source cursor-data-sources-bytes { + (data-sources-bundle (fold parse-data-source cursor-data-sources-bytes { result: (list), cursor: { index: u0, @@ -424,7 +444,10 @@ }, bytes: cursor-data-sources-bytes, limit: (get value cursor-num-data-sources) - })))) + })) + (data-sources (get result data-sources-bundle))) + (asserts! (is-eq (get next-update-index (get cursor data-sources-bundle)) (len cursor-data-sources-bytes)) ERR_PTGM_CHECK_OVERLAY) + (asserts! (is-eq (get value cursor-num-data-sources) (len data-sources)) ERR_INVALID_PRICE_DATA_SOURCES) (ok data-sources))) (define-private (parse-data-source @@ -445,11 +468,10 @@ (let ((buffer (contract-call? 'SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-cursor-v2 new (get bytes acc) (some (get index (get cursor acc))))) (cursor-emitter-chain (unwrap-panic (contract-call? 'SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-cursor-v2 read-uint-16 (get next buffer)))) (cursor-emitter-address (unwrap-panic (contract-call? 'SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-cursor-v2 read-buff-32 (get next cursor-emitter-chain))))) - ;; Perform assertions { cursor: { index: (+ (get index (get cursor acc)) u1), - next-update-index: (+ (get index (get cursor acc)) u34), + next-update-index: (+ (get index (get cursor acc)) SIZE_OF_EMITTER_DATA), }, bytes: (get bytes acc), result: (unwrap-panic (as-max-len? (append (get result acc) { diff --git a/contracts/pyth-oracle-v2.clar b/contracts/pyth-oracle-v3.clar similarity index 65% rename from contracts/pyth-oracle-v2.clar rename to contracts/pyth-oracle-v3.clar index 06691c9..732b8df 100644 --- a/contracts/pyth-oracle-v2.clar +++ b/contracts/pyth-oracle-v3.clar @@ -1,23 +1,30 @@ ;; Title: pyth-oracle -;; Version: v2 -;; Check for latest version: https://github.com/hirosystems/stacks-pyth-bridge#latest-version -;; Report an issue: https://github.com/hirosystems/stacks-pyth-bridge/issues +;; Version: v3 +;; Check for latest version: https://github.com/Trust-Machines/stacks-pyth-bridge#latest-version +;; Report an issue: https://github.com/Trust-Machines/stacks-pyth-bridge/issues (use-trait pyth-storage-trait .pyth-traits-v1.storage-trait) (use-trait pyth-decoder-trait .pyth-traits-v1.decoder-trait) (use-trait wormhole-core-trait .wormhole-traits-v1.core-trait) -;; Generic error -(define-constant ERR_PANIC (err u0)) ;; Balance insufficient for handling fee -(define-constant ERR_BALANCE_INSUFFICIENT (err u402)) +(define-constant ERR_BALANCE_INSUFFICIENT (err u3001)) + +(define-public (get-price + (price-feed-id (buff 32)) + (pyth-storage-address )) + (begin + ;; Check execution flow + (try! (contract-call? .pyth-governance-v2 check-storage-contract pyth-storage-address)) + ;; Perform contract-call + (contract-call? pyth-storage-address read-price-with-staleness-check price-feed-id))) (define-public (read-price-feed (price-feed-id (buff 32)) (pyth-storage-address )) (begin ;; Check execution flow - (try! (contract-call? .pyth-governance-v1 check-storage-contract pyth-storage-address)) + (try! (contract-call? .pyth-governance-v2 check-storage-contract pyth-storage-address)) ;; Perform contract-call (contract-call? pyth-storage-address read price-feed-id))) @@ -30,17 +37,21 @@ })) (begin ;; Check execution flow - (try! (contract-call? .pyth-governance-v1 check-execution-flow contract-caller (some execution-plan))) + (try! (contract-call? .pyth-governance-v2 check-execution-flow contract-caller (some execution-plan))) ;; Perform contract-call (let ((pyth-decoder-contract (get pyth-decoder-contract execution-plan)) (wormhole-core-contract (get wormhole-core-contract execution-plan)) (pyth-storage-contract (get pyth-storage-contract execution-plan)) (decoded-prices (try! (contract-call? pyth-decoder-contract decode-and-verify-price-feeds price-feed-bytes wormhole-core-contract))) (updated-prices (try! (contract-call? pyth-storage-contract write decoded-prices))) - (fee-info (contract-call? .pyth-governance-v1 get-fee-info)) + (fee-info (contract-call? .pyth-governance-v2 get-fee-info)) (fee-amount (* (len updated-prices) (* (get mantissa fee-info) (pow u10 (get exponent fee-info)))))) ;; Charge fee - (unwrap! (stx-transfer? fee-amount tx-sender (get address fee-info)) ERR_BALANCE_INSUFFICIENT) + (if (> fee-amount u0) + (unwrap! (stx-transfer? fee-amount tx-sender (get address fee-info)) ERR_BALANCE_INSUFFICIENT) + true + ) + (ok updated-prices)))) (define-public (decode-price-feeds @@ -52,13 +63,16 @@ })) (begin ;; Check execution flow - (try! (contract-call? .pyth-governance-v1 check-execution-flow contract-caller (some execution-plan))) + (try! (contract-call? .pyth-governance-v2 check-execution-flow contract-caller (some execution-plan))) ;; Perform contract-call (let ((pyth-decoder-contract (get pyth-decoder-contract execution-plan)) (wormhole-core-contract (get wormhole-core-contract execution-plan)) (decoded-prices (try! (contract-call? pyth-decoder-contract decode-and-verify-price-feeds price-feed-bytes wormhole-core-contract))) - (fee-info (contract-call? .pyth-governance-v1 get-fee-info)) + (fee-info (contract-call? .pyth-governance-v2 get-fee-info)) (fee-amount (* (len decoded-prices) (* (get mantissa fee-info) (pow u10 (get exponent fee-info)))))) ;; Charge fee - (unwrap! (stx-transfer? fee-amount tx-sender (get address fee-info)) ERR_BALANCE_INSUFFICIENT) + (if (> fee-amount u0) + (unwrap! (stx-transfer? fee-amount tx-sender (get address fee-info)) ERR_BALANCE_INSUFFICIENT) + true + ) (ok decoded-prices)))) diff --git a/contracts/pyth-p2wh-decoder-v1.clar b/contracts/pyth-p2wh-decoder-v1.clar deleted file mode 100644 index 6330d2a..0000000 --- a/contracts/pyth-p2wh-decoder-v1.clar +++ /dev/null @@ -1,368 +0,0 @@ -;; Title: pyth-p2wh-decoder-v1 -;; Version: Developer Preview 1 -;; Check for latest version: https://github.com/hirosystems/stacks-pyth-bridge#latest-version -;; Report an issue: https://github.com/hirosystems/stacks-pyth-bridge/issues - -;;;; Traits - -;;;; Constants - -;; Price Feeds Ids (https://pyth.network/developers/price-feed-ids#pyth-evm-mainnet) -(define-constant STX_USD 0xec7a775f46379b5e943c3526b1c8d54cd49749176b0b98e02dde68d1bd335c17) -(define-constant BTC_USD 0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43) -(define-constant ETH_USD 0xff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace) - -;; Generic error -(define-constant ERR_PANIC (err u0)) -;; Unable to price feed magic bytes -(define-constant ERR_PF_PARSING_MAGIC_BYTES (err u2001)) -;; Unable to parse major version -(define-constant ERR_PF_PARSING_VERSION_MAJ (err u2002)) -;; Unable to parse minor version -(define-constant ERR_PF_PARSING_VERSION_MIN (err u2003)) -;; Unable to parse trailing header size -(define-constant ERR_PF_PARSING_TRAILING_HEADER_SIZE (err u2004)) -;; Unable to parse update type -(define-constant ERR_PF_PARSING_UPDATE_TYPE (err u2005)) -;; Unable to parse payload ID (P2WH, PNAU, ...) -(define-constant ERR_PF_PARSING_PAYLOAD_ID (err u2006)) -;; Unable to parse price attestation count -(define-constant ERR_P2WH_PARSING_ATTESTATION_COUNT (err u2007)) -;; Unable to parse price attestation size -(define-constant ERR_P2WH_PARSING_ATTESTATION_SIZE (err u2008)) -;; Unable to slice price attestation blobs -(define-constant ERR_P2WH_SLICING_ATTESTATION_BYTES (err u2009)) -;; Unable to retrieve price feed -(define-constant ERR_PF_NOT_FOUND (err u2010)) - -;;;; Data vars -;; - -;;;; Data maps -;; -(define-map prices - { price-feed-id: (buff 32) } - { - price: int, - conf: uint, - expo: int, - attestation-time: uint, - ema-price: int, - ema-conf: uint, - status: uint, - publish-time: uint, - prev-publish-time: uint, - prev-price: int, - prev-conf: uint, - }) - -(define-data-var watched-price-feeds - (list 1024 (buff 32)) - (list STX_USD BTC_USD ETH_USD)) - -;;;; Public functions -;; -(define-public (update-prices-feeds (vaas (list 4 (buff 2048)))) - (let ((decoded-vaas (map parse-and-verify-vaa vaas)) - (decoded-prices-attestations-batches (map parse-and-verify-price-attestations decoded-vaas)) - (watched-prices-feeds (var-get watched-price-feeds)) - (updated-prices-feeds (get updated-prices-feeds (fold process-prices-attestations-batch decoded-prices-attestations-batches { input: watched-prices-feeds, updated-prices-feeds: (list) })))) - (ok updated-prices-feeds))) - -;;;; Read only functions -;; - -(define-read-only (read-price-feed (price-feed-id (buff 32))) - (let ((price-feed-entry (unwrap! (map-get? prices { price-feed-id: price-feed-id }) ERR_PF_NOT_FOUND))) - (ok price-feed-entry))) - -(define-private (parse-and-verify-price-attestations (pf-bytes (buff 2048))) - (let ((cursor-price-attestations-header (try! (parse-price-attestations-header pf-bytes))) - (cursor-attestations-count (unwrap! (contract-call? .hk-cursor-v1 read-u16 (get next cursor-price-attestations-header)) - ERR_P2WH_PARSING_ATTESTATION_COUNT)) - (cursor-attestation-size (unwrap! (contract-call? .hk-cursor-v1 read-u16 (get next cursor-attestations-count)) - ERR_P2WH_PARSING_ATTESTATION_SIZE)) - (attestations-bytes (unwrap! (slice? pf-bytes (get pos (get next cursor-attestation-size)) (+ (get pos (get next cursor-attestation-size)) (* (get value cursor-attestations-count) (get value cursor-attestation-size)))) - ERR_P2WH_SLICING_ATTESTATION_BYTES)) - (attestations-cues (get result (fold is-price-attestation-cue attestations-bytes { size: (get value cursor-attestation-size), cursor: u0, result: (unwrap-panic (as-max-len? (list u0) u64)) }))) - (encoded-price-attestations (get result (fold parse-price-attestation attestations-cues { attestations-bytes: attestations-bytes, result: (unwrap-panic (as-max-len? (list { - price-feed-id: (unwrap-panic (as-max-len? 0x u32)), - price: (unwrap-panic (as-max-len? 0x u8)), - conf: (unwrap-panic (as-max-len? 0x u8)), - expo: (unwrap-panic (as-max-len? 0x u4)), - ema-price: (unwrap-panic (as-max-len? 0x u8)), - ema-conf: (unwrap-panic (as-max-len? 0x u8)), - status: (unwrap-panic (as-max-len? 0x u1)), - attestation-time: (unwrap-panic (as-max-len? 0x u8)), - publish-time: (unwrap-panic (as-max-len? 0x u8)), - prev-publish-time: (unwrap-panic (as-max-len? 0x u8)), - prev-price: (unwrap-panic (as-max-len? 0x u8)), - prev-conf: (unwrap-panic (as-max-len? 0x u8)), - }) u64)) }))) - (price-attestations (map decode-price-attestation (unwrap-panic (slice? encoded-price-attestations u1 (+ u1 (get value cursor-attestations-count))))))) - (ok { - attestations-count: (get value cursor-attestations-count), - attestation-size: (get value cursor-attestation-size), - price-attestations: price-attestations - }))) - -(define-private (parse-price-attestations-header (pf-bytes (buff 2048))) - (let ((cursor-magic (unwrap! (contract-call? .hk-cursor-v1 read-buff-4 { bytes: pf-bytes, pos: u0 }) - ERR_PF_PARSING_MAGIC_BYTES)) - ;; Todo: check magic bytes - (cursor-version-maj (unwrap! (contract-call? .hk-cursor-v1 read-u16 (get next cursor-magic)) - ERR_PF_PARSING_VERSION_MAJ)) - ;; Todo: check major version - (cursor-version-min (unwrap! (contract-call? .hk-cursor-v1 read-u16 (get next cursor-version-maj)) - ERR_PF_PARSING_VERSION_MIN)) - ;; Todo: check minor version - (cursor-header-size (unwrap! (contract-call? .hk-cursor-v1 read-u16 (get next cursor-version-min)) - ERR_PF_PARSING_TRAILING_HEADER_SIZE)) - ;; Todo: check minor version - (cursor-payload-id (unwrap! (contract-call? .hk-cursor-v1 read-u8 (get next cursor-header-size)) - ERR_PF_PARSING_PAYLOAD_ID))) - (ok { - value: { - magic: (get value cursor-magic), - version-maj: (get value cursor-version-maj), - version-min: (get value cursor-version-min), - header-size: (get value cursor-header-size), - payload-id: (get value cursor-payload-id) - }, - next: { - bytes: pf-bytes, - pos: (+ (get pos (get next cursor-payload-id)) - (- (get value cursor-header-size) u1)) - } - }))) - -;;;; Private functions -;; -(define-private (parse-and-verify-vaa (vaa-bytes (buff 2048))) - (let ((vaa (unwrap-panic (contract-call? .wormhole-core-dev-preview-1 parse-and-verify-vaa vaa-bytes)))) ;; try! - (get payload vaa))) - -(define-private (parse-price-feed-header (pf-bytes (buff 2048))) - (let ((cursor-magic (unwrap! (contract-call? .hk-cursor-v1 read-buff-4 { bytes: pf-bytes, pos: u0 }) - ERR_PF_PARSING_MAGIC_BYTES)) - ;; Todo: check magic bytes - (cursor-version-maj (unwrap! (contract-call? .hk-cursor-v1 read-u16 (get next cursor-magic)) - ERR_PF_PARSING_VERSION_MAJ)) - ;; Todo: check major version - (cursor-version-min (unwrap! (contract-call? .hk-cursor-v1 read-u16 (get next cursor-version-maj)) - ERR_PF_PARSING_VERSION_MIN)) - ;; Todo: check minor version - (cursor-trailing-header-size (unwrap! (contract-call? .hk-cursor-v1 read-u16 (get next cursor-version-min)) - ERR_PF_PARSING_TRAILING_HEADER_SIZE)) - ;; We use another offset for the trailing header and in the end add the - ;; offset by trailingHeaderSize to skip the future headers. - (cursor-udpate-type (unwrap! (contract-call? .hk-cursor-v1 read-u16 { bytes: pf-bytes, pos: (+ (get pos (get next cursor-trailing-header-size)) - (get value cursor-trailing-header-size)) }) - ERR_PF_PARSING_UPDATE_TYPE))) - (ok { - value: { - magic: (get value cursor-magic), - version-maj: (get value cursor-version-maj), - version-min: (get value cursor-version-min), - trailing-header-size: (get value cursor-trailing-header-size), - }, - next: (get next cursor-udpate-type) - }))) - -(define-private (is-price-attestation-cue - (entry (buff 1)) - (acc { cursor: uint, result: (list 64 uint), size: uint })) - (if (and - (is-eq u0 (mod (get cursor acc) (get size acc))) - (> (get cursor acc) u0) ) - { - cursor: (+ u1 (get cursor acc)), - result: (unwrap-panic (as-max-len? (append (get result acc) (get cursor acc)) u64)), - size: (get size acc) - } - { - cursor: (+ u1 (get cursor acc)), - result: (get result acc), - size: (get size acc) - })) - -(define-private (parse-price-attestation - (entry uint) - (acc { - attestations-bytes: (buff 2048), - result: (list 64 { - price-feed-id: (buff 32), - price: (buff 8), - conf: (buff 8), - expo: (buff 4), - ema-price: (buff 8), - ema-conf: (buff 8), - status: (buff 1), - attestation-time: (buff 8), - publish-time: (buff 8), - prev-publish-time: (buff 8), - prev-price: (buff 8), - prev-conf: (buff 8), - })})) - (let ((cursor-obsolete-1 (unwrap-panic (contract-call? .hk-cursor-v1 read-buff-32 { bytes: (get attestations-bytes acc), pos: entry }))) - (cursor-price-feed-id (unwrap-panic (contract-call? .hk-cursor-v1 read-buff-32 (get next cursor-obsolete-1)))) - (cursor-price (unwrap-panic (contract-call? .hk-cursor-v1 read-buff-8 (get next cursor-price-feed-id)))) - (cursor-conf (unwrap-panic (contract-call? .hk-cursor-v1 read-buff-8 (get next cursor-price)))) - (cursor-expo (unwrap-panic (contract-call? .hk-cursor-v1 read-buff-4 (get next cursor-conf)))) - (cursor-ema-price (unwrap-panic (contract-call? .hk-cursor-v1 read-buff-8 (get next cursor-expo)))) - (cursor-ema-conf (unwrap-panic (contract-call? .hk-cursor-v1 read-buff-8 (get next cursor-ema-price)))) - (cursor-status (unwrap-panic (contract-call? .hk-cursor-v1 read-buff-1 (get next cursor-ema-conf)))) - (cursor-obsolete-2 (unwrap-panic (contract-call? .hk-cursor-v1 read-buff-4 (get next cursor-status)))) - (cursor-obsolete-3 (unwrap-panic (contract-call? .hk-cursor-v1 read-buff-4 (get next cursor-obsolete-2)))) - (cursor-attestation-time (unwrap-panic (contract-call? .hk-cursor-v1 read-buff-8 (get next cursor-obsolete-3)))) - (cursor-publish-time (unwrap-panic (contract-call? .hk-cursor-v1 read-buff-8 (get next cursor-attestation-time)))) - (cursor-prev-publish-time (unwrap-panic (contract-call? .hk-cursor-v1 read-buff-8 (get next cursor-publish-time)))) - (cursor-prev-price (unwrap-panic (contract-call? .hk-cursor-v1 read-buff-8 (get next cursor-prev-publish-time)))) - (cursor-prev-conf (unwrap-panic (contract-call? .hk-cursor-v1 read-buff-8 (get next cursor-prev-price)))) - ) - { - attestations-bytes: (get attestations-bytes acc), - result: (unwrap-panic (as-max-len? (append (get result acc) { - price-feed-id: (get value cursor-price-feed-id), - price: (get value cursor-price), - conf: (get value cursor-conf), - expo: (get value cursor-expo), - ema-price: (get value cursor-ema-price), - ema-conf: (get value cursor-ema-conf), - status: (get value cursor-status), - attestation-time: (get value cursor-attestation-time), - publish-time: (get value cursor-publish-time), - prev-publish-time: (get value cursor-prev-publish-time), - prev-price: (get value cursor-prev-price), - prev-conf: (get value cursor-prev-conf), - }) u64)) - })) - -(define-private (decode-price-attestation - (entry { - price-feed-id: (buff 32), - price: (buff 8), - conf: (buff 8), - expo: (buff 4), - ema-price: (buff 8), - ema-conf: (buff 8), - status: (buff 1), - attestation-time: (buff 8), - publish-time: (buff 8), - prev-publish-time: (buff 8), - prev-price: (buff 8), - prev-conf: (buff 8) - })) - { - price-feed-id: (get price-feed-id entry), - price: (buff-to-int-be (get price entry)), - conf: (buff-to-uint-be (get conf entry)), - expo: (buff-to-int-be (get expo entry)), - ema-price: (buff-to-int-be (get ema-price entry)), - ema-conf: (buff-to-uint-be (get ema-conf entry)), - status: (buff-to-uint-be (get status entry)), - attestation-time: (buff-to-uint-be (get attestation-time entry)), - publish-time: (buff-to-uint-be (get publish-time entry)), - prev-publish-time: (buff-to-uint-be (get prev-publish-time entry)), - prev-price: (buff-to-int-be (get prev-price entry)), - prev-conf: (buff-to-uint-be (get prev-conf entry)), - }) - -(define-private (process-prices-attestations-batch - (entry (response - { - attestation-size: uint, - attestations-count: uint, - price-attestations: (list 254 { - price-feed-id: (buff 32), - price: int, - conf: uint, - expo: int, - ema-price: int, - ema-conf: uint, - status: uint, - attestation-time: uint, - publish-time: uint, - prev-publish-time: uint, - prev-price: int, - prev-conf: uint, - }) - } - uint)) - (acc { - input: (list 2048 (buff 32)), - updated-prices-feeds: (list 2048 (buff 32)) - })) - (let ((batch (unwrap-panic entry)) - (updated-prices-feeds (get updated-prices-feeds (fold process-price-attestation (get price-attestations batch) acc)))) - { - input: (get input acc), - updated-prices-feeds: updated-prices-feeds - })) - -(define-private (process-price-attestation - (entry { - price-feed-id: (buff 32), - price: int, - conf: uint, - expo: int, - ema-price: int, - ema-conf: uint, - status: uint, - attestation-time: uint, - publish-time: uint, - prev-publish-time: uint, - prev-price: int, - prev-conf: uint, - }) - (acc { input: (list 2048 (buff 32)), updated-prices-feeds: (list 2048 (buff 32)) })) - (match (index-of? (get input acc) (get price-feed-id entry)) - index (begin - ;; Update Price Feed - (map-set prices - { - price-feed-id: (get price-feed-id entry), - } - { - price: (get price entry), - conf: (get conf entry), - expo: (get expo entry), - ema-price: (get ema-price entry), - ema-conf: (get ema-conf entry), - status: (get status entry), - attestation-time: (get attestation-time entry), - publish-time: (get publish-time entry), - prev-publish-time: (get prev-publish-time entry), - prev-price: (get prev-price entry), - prev-conf: (get prev-conf entry), - }) - ;; TODO: check timestamps - ;; Emit event - (print { type: "price-feed", action: "updated", data: entry }) - { - input: (get input acc), - updated-prices-feeds: (unwrap-panic (as-max-len? (append (get updated-prices-feeds acc) (get price-feed-id entry)) u2048)) - }) - acc)) - -(define-private (parse-and-verify-price-feed (pf-bytes (buff 2048))) - (let ((cursor-price-feed-header (try! (parse-price-feed-header pf-bytes))) - ;; Todo: check minor version - (cursor-trailing-header-size (unwrap! (contract-call? .hk-cursor-v1 read-u8 (get next cursor-price-feed-header)) - ERR_PF_PARSING_TRAILING_HEADER_SIZE)) - (cursor-udpate-type (unwrap! (contract-call? .hk-cursor-v1 read-u8 (get next cursor-trailing-header-size)) - ERR_PF_PARSING_VERSION_MIN))) - ;; (cursor-guardian-set (unwrap! (contract-call? .hk-cursor-v1 read-u32 (get next cursor-version)) - ;; ERR_PARSING_VAA_GUARDIAN_SET)) - ;; (cursor-signatures (fold - ;; batch-read-signatures - ;; (list u0 u0 u0 u0 u0 u0 u0 u0 u0 u0 u0 u0 u0 u0 u0 u0 u0 u0 u0) - ;; { - ;; next: (get next cursor-signatures-len), - ;; value: (list), - ;; iter: (get value cursor-signatures-len) - ;; })) - (ok { - price-feed-header: (get value cursor-price-feed-header), - udpate-type: (get value cursor-udpate-type), - }))) \ No newline at end of file diff --git a/contracts/pyth-pnau-decoder-v1.clar b/contracts/pyth-pnau-decoder-v2.clar similarity index 88% rename from contracts/pyth-pnau-decoder-v1.clar rename to contracts/pyth-pnau-decoder-v2.clar index 6d1a3c8..e4772b1 100644 --- a/contracts/pyth-pnau-decoder-v1.clar +++ b/contracts/pyth-pnau-decoder-v2.clar @@ -1,7 +1,7 @@ ;; Title: pyth-pnau-decoder -;; Version: v1 -;; Check for latest version: https://github.com/hirosystems/stacks-pyth-bridge#latest-version -;; Report an issue: https://github.com/hirosystems/stacks-pyth-bridge/issues +;; Version: v2 +;; Check for latest version: https://github.com/Trust-Machines/stacks-pyth-bridge#latest-version +;; Report an issue: https://github.com/Trust-Machines/stacks-pyth-bridge/issues ;;;; Traits (impl-trait .pyth-traits-v1.decoder-trait) @@ -9,17 +9,14 @@ ;;;; Constants -;; Price Feeds Ids (https://pyth.network/developers/price-feed-ids#pyth-evm-mainnet) -(define-constant STX_USD 0xec7a775f46379b5e943c3526b1c8d54cd49749176b0b98e02dde68d1bd335c17) -(define-constant BTC_USD 0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43) - (define-constant PNAU_MAGIC 0x504e4155) ;; 'PNAU': Pyth Network Accumulator Update -(define-constant AUWV_MAGIC 0x41555756) ;; 'AUWV': Accumulator Update Wormhole Verficiation +(define-constant AUWV_MAGIC 0x41555756) ;; 'AUWV': Accumulator Update Wormhole Verification (define-constant PYTHNET_MAJOR_VERSION u1) (define-constant PYTHNET_MINOR_VERSION u0) +(define-constant UPDATE_TYPE_WORMHOLE_MERKLE u0) +(define-constant MESSAGE_TYPE_PRICE_FEED u0) +(define-constant MERKLE_PROOF_HASH_SIZE u20) -;; Generic error -(define-constant ERR_PANIC (err u0)) ;; Unable to price feed magic bytes (define-constant ERR_MAGIC_BYTES (err u2001)) ;; Unable to parse major version @@ -35,22 +32,21 @@ ;; Merkle root mismatch (define-constant ERR_INVALID_AUWV (err u2007)) ;; Merkle root mismatch -(define-constant MERKLE_ROOT_MISMATCH (err u2008)) -;; Price not found -(define-constant ERR_NOT_FOUND (err u0)) -;; Price not found -(define-constant ERR_UNAUTHORIZED_FLOW (err u2404)) +(define-constant ERR_MERKLE_ROOT_MISMATCH (err u2008)) +;; Incorrect AUWV payload +(define-constant ERR_INCORRECT_AUWV_PAYLOAD (err u2009)) ;; Price update not signed by an authorized source (define-constant ERR_UNAUTHORIZED_PRICE_UPDATE (err u2401)) +;; VAA buffer has unused, extra leading bytes (overlay) +(define-constant ERR_OVERLAY_PRESENT (err u2402)) ;;;; Public functions (define-public (decode-and-verify-price-feeds (pnau-bytes (buff 8192)) (wormhole-core-address )) (begin ;; Check execution flow - (try! (contract-call? .pyth-governance-v1 check-execution-flow contract-caller none)) + (try! (contract-call? .pyth-governance-v2 check-execution-flow contract-caller none)) ;; Proceed to update - (let ((prices-updates (try! (decode-pnau-price-update pnau-bytes wormhole-core-address)))) - (ok prices-updates)))) + (decode-pnau-price-update pnau-bytes wormhole-core-address))) ;;;; Private functions ;; #[filter(pnau-bytes, wormhole-core-address)] @@ -64,7 +60,7 @@ (contract-call? 'SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-cursor-v2 slice (get next cursor-pnau-vaa) none) (get merkle-root-hash (get value cursor-merkle-root-data))))) (prices-updates (map cast-decoded-price decoded-prices-updates)) - (authorized-prices-data-sources (contract-call? .pyth-governance-v1 get-authorized-prices-data-sources))) + (authorized-prices-data-sources (contract-call? .pyth-governance-v2 get-authorized-prices-data-sources))) ;; Ensure that update was published by an data source authorized by governance (unwrap! (index-of? authorized-prices-data-sources @@ -86,7 +82,7 @@ ;; Check payload type (asserts! (is-eq (get value cursor-payload-type) AUWV_MAGIC) ERR_MAGIC_BYTES) ;; Check update type - (asserts! (is-eq (get value cursor-wh-update-type) u0) ERR_PROOF_TYPE) + (asserts! (is-eq (get value cursor-wh-update-type) UPDATE_TYPE_WORMHOLE_MERKLE) ERR_PROOF_TYPE) (ok { value: { merkle-root-slot: (get value cursor-merkle-root-slot), @@ -115,9 +111,9 @@ ;; Check major version (asserts! (is-eq (get value cursor-version-maj) PYTHNET_MAJOR_VERSION) ERR_VERSION_MAJ) ;; Check minor version - (asserts! (is-eq (get value cursor-version-min) PYTHNET_MINOR_VERSION) ERR_VERSION_MIN) + (asserts! (>= (get value cursor-version-min) PYTHNET_MINOR_VERSION) ERR_VERSION_MIN) ;; Check proof type - (asserts! (is-eq (get value cursor-proof-type) u0) ERR_PROOF_TYPE) + (asserts! (is-eq (get value cursor-proof-type) UPDATE_TYPE_WORMHOLE_MERKLE) ERR_PROOF_TYPE) (ok { value: { magic: (get value cursor-magic), @@ -132,7 +128,7 @@ (define-private (parse-and-verify-prices-updates (bytes (buff 8192)) (merkle-root-hash (buff 20))) (let ((cursor-num-updates (try! (contract-call? 'SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-cursor-v2 read-uint-8 { bytes: bytes, pos: u0 }))) (cursor-updates-bytes (contract-call? 'SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-cursor-v2 slice (get next cursor-num-updates) none)) - (updates (get result (fold parse-price-info-and-proof cursor-updates-bytes { + (updates-data (fold parse-price-info-and-proof cursor-updates-bytes { result: (list), cursor: { index: u0, @@ -140,12 +136,16 @@ }, bytes: cursor-updates-bytes, limit: (get value cursor-num-updates) - }))) + })) + (updates (get result updates-data)) (merkle-proof-checks-success (get result (fold check-merkle-proof updates { result: true, merkle-root-hash: merkle-root-hash })))) - (asserts! merkle-proof-checks-success MERKLE_ROOT_MISMATCH) + (asserts! merkle-proof-checks-success ERR_MERKLE_ROOT_MISMATCH) + (asserts! (is-eq (get value cursor-num-updates) (len updates)) ERR_INCORRECT_AUWV_PAYLOAD) + ;; Overlay check; 1 is added because 1 byte is used to store "cursor-num-updates" + (asserts! (is-eq (+ u1 (get next-update-index (get cursor updates-data))) (len bytes)) ERR_OVERLAY_PRESENT) (ok updates))) (define-private (check-merkle-proof @@ -215,7 +215,7 @@ (cursor-ema-conf (unwrap-panic (contract-call? 'SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-cursor-v2 read-uint-64 (get next cursor-ema-price)))) (cursor-proof (contract-call? 'SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-cursor-v2 advance (get next cursor-message-size) (get value cursor-message-size))) (cursor-proof-size (unwrap-panic (contract-call? 'SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-cursor-v2 read-uint-8 cursor-proof))) - (proof-bytes (contract-call? 'SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-cursor-v2 slice (get next cursor-proof-size) (some (* u20 (get value cursor-proof-size))))) + (proof-bytes (contract-call? 'SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-cursor-v2 slice (get next cursor-proof-size) (some (* MERKLE_PROOF_HASH_SIZE (get value cursor-proof-size))))) (leaf-bytes (contract-call? 'SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-cursor-v2 slice (get next cursor-message-size) (some (get value cursor-message-size)))) (proof (get result (fold parse-proof proof-bytes { result: (list), @@ -227,7 +227,7 @@ limit: (get value cursor-proof-size) })))) ;; Check cursor-message-type - (unwrap-panic (if (is-eq (get value cursor-message-type) u0) (ok true) (err ERR_UPDATE_TYPE))) + (unwrap-panic (if (is-eq (get value cursor-message-type) MESSAGE_TYPE_PRICE_FEED) (ok true) (err ERR_UPDATE_TYPE))) { cursor: { index: (+ (get index (get cursor acc)) u1), @@ -237,7 +237,7 @@ u2 (get value cursor-message-size) u1 - (* (get value cursor-proof-size) u20)), + (* (get value cursor-proof-size) MERKLE_PROOF_HASH_SIZE)), }, bytes: (get bytes acc), result: (unwrap-panic (as-max-len? (append (get result acc) { @@ -282,11 +282,10 @@ ;; Parse update (let ((cursor-hash (contract-call? 'SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-cursor-v2 new (get bytes acc) (some (get index (get cursor acc))))) (hash (get value (unwrap-panic (contract-call? 'SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-cursor-v2 read-buff-20 (get next cursor-hash)))))) - ;; Perform assertions { cursor: { index: (+ (get index (get cursor acc)) u1), - next-update-index: (+ (get index (get cursor acc)) u20), + next-update-index: (+ (get index (get cursor acc)) MERKLE_PROOF_HASH_SIZE), }, bytes: (get bytes acc), result: (unwrap-panic (as-max-len? (append (get result acc) hash) u128)), diff --git a/contracts/pyth-store-v1.clar b/contracts/pyth-storage-v3.clar similarity index 55% rename from contracts/pyth-store-v1.clar rename to contracts/pyth-storage-v3.clar index df14884..09e4b60 100644 --- a/contracts/pyth-store-v1.clar +++ b/contracts/pyth-storage-v3.clar @@ -1,13 +1,16 @@ -;; Title: pyth-store -;; Version: v1 -;; Check for latest version: https://github.com/hirosystems/stacks-pyth-bridge#latest-version -;; Report an issue: https://github.com/hirosystems/stacks-pyth-bridge/issues +;; Title: pyth-storage +;; Version: v3 +;; Check for latest version: https://github.com/Trust-Machines/stacks-pyth-bridge#latest-version +;; Report an issue: https://github.com/Trust-Machines/stacks-pyth-bridge/issues (impl-trait .pyth-traits-v1.storage-trait) -(define-constant ERR_NEWER_PRICE_AVAILABLE (err u5000)) -(define-constant ERR_STALE_PRICE (err u5001)) -(define-constant ERR_INVALID_UPDATES (err u5003)) +(define-constant ERR_NEWER_PRICE_AVAILABLE (err u5001)) +(define-constant ERR_STALE_PRICE (err u5002)) +(define-constant ERR_RESTRICTED_TO_TESTNET (err u5003)) +(define-constant ERR_PRICE_FEED_NOT_FOUND (err u5004)) + +(define-constant STACKS_BLOCK_TIME u5) (define-map prices (buff 32) { price: int, @@ -21,8 +24,38 @@ (define-map timestamps (buff 32) uint) +(define-public (set-price-testnet + (data { + price-identifier: (buff 32), + price: int, + conf: uint, + expo: int, + ema-price: int, + ema-conf: uint, + publish-time: uint, + prev-publish-time: uint, + })) + (begin + (asserts! (not is-in-mainnet) ERR_RESTRICTED_TO_TESTNET) + (ok (write-batch-entry data)) + ) +) + (define-public (read (price-identifier (buff 32))) - (let ((entry (unwrap! (map-get? prices price-identifier) (err u404)))) + (let ((entry (unwrap! (map-get? prices price-identifier) ERR_PRICE_FEED_NOT_FOUND))) + (ok entry))) + +(define-read-only (get-price (price-identifier (buff 32))) + (let ((entry (unwrap! (map-get? prices price-identifier) ERR_PRICE_FEED_NOT_FOUND))) + (ok entry))) + +(define-read-only (read-price-with-staleness-check (price-identifier (buff 32))) + (let ( + (entry (unwrap! (map-get? prices price-identifier) ERR_PRICE_FEED_NOT_FOUND)) + (stale-price-threshold (contract-call? .pyth-governance-v2 get-stale-price-threshold)) + (latest-stacks-timestamp (unwrap! (get-stacks-block-info? time (- stacks-block-height u1)) ERR_STALE_PRICE)) + ) + (asserts! (>= (get publish-time entry) (+ (- latest-stacks-timestamp stale-price-threshold) STACKS_BLOCK_TIME)) ERR_STALE_PRICE) (ok entry))) (define-public (write (batch-updates (list 64 { @@ -37,9 +70,7 @@ }))) (let ((successful-updates (map unwrapped-entry (filter only-ok-entry (map write-batch-entry batch-updates))))) ;; Ensure that updates are always coming from the right contract - (try! (contract-call? .pyth-governance-v1 check-execution-flow contract-caller none)) - ;; Ensure we have at least one entry - (asserts! (> (len successful-updates) u0) ERR_INVALID_UPDATES) + (try! (contract-call? .pyth-governance-v2 check-execution-flow contract-caller none)) (ok successful-updates))) (define-private (write-batch-entry (entry { @@ -52,12 +83,13 @@ publish-time: uint, prev-publish-time: uint, })) - (let ((stale-price-threshold (contract-call? .pyth-governance-v1 get-stale-price-threshold)) - (latest-bitcoin-timestamp (unwrap! (get-block-info? time (- block-height u1)) ERR_STALE_PRICE))) + (let ((stale-price-threshold (contract-call? .pyth-governance-v2 get-stale-price-threshold)) + (latest-stacks-timestamp (unwrap! (get-stacks-block-info? time (- stacks-block-height u1)) ERR_STALE_PRICE)) + (publish-time (get publish-time entry))) ;; Ensure that we have not processed a newer price - (asserts! (is-price-update-more-recent (get price-identifier entry) (get publish-time entry)) ERR_NEWER_PRICE_AVAILABLE) + (asserts! (is-price-update-more-recent (get price-identifier entry) publish-time) ERR_NEWER_PRICE_AVAILABLE) ;; Ensure that price is not stale - (asserts! (>= (get publish-time entry) (- latest-bitcoin-timestamp stale-price-threshold)) ERR_STALE_PRICE) + (asserts! (>= publish-time (+ (- latest-stacks-timestamp stale-price-threshold) STACKS_BLOCK_TIME)) ERR_STALE_PRICE) ;; Update storage (map-set prices (get price-identifier entry) @@ -67,7 +99,7 @@ expo: (get expo entry), ema-price: (get ema-price entry), ema-conf: (get ema-conf entry), - publish-time: (get publish-time entry), + publish-time: publish-time, prev-publish-time: (get prev-publish-time entry) }) ;; Emit event diff --git a/contracts/pyth-traits-v1.clar b/contracts/pyth-traits-v1.clar index f70bcda..c6a92bf 100644 --- a/contracts/pyth-traits-v1.clar +++ b/contracts/pyth-traits-v1.clar @@ -1,7 +1,7 @@ ;; Title: pyth-traits ;; Version: v1 -;; Check for latest version: https://github.com/hirosystems/stacks-pyth-bridge#latest-version -;; Report an issue: https://github.com/hirosystems/stacks-pyth-bridge/issues +;; Check for latest version: https://github.com/Trust-Machines/stacks-pyth-bridge#latest-version +;; Report an issue: https://github.com/Trust-Machines/stacks-pyth-bridge/issues (use-trait wormhole-core-trait .wormhole-traits-v1.core-trait) @@ -32,6 +32,16 @@ prev-publish-time: uint, } uint)) + (read-price-with-staleness-check ((buff 32)) (response { + price: int, + conf: uint, + expo: int, + ema-price: int, + ema-conf: uint, + publish-time: uint, + prev-publish-time: uint, + } uint)) + (write ((list 64 { price-identifier: (buff 32), price: int, diff --git a/contracts/wormhole/wormhole-core-v2.clar b/contracts/wormhole/wormhole-core-v3.clar similarity index 74% rename from contracts/wormhole/wormhole-core-v2.clar rename to contracts/wormhole/wormhole-core-v3.clar index dcf5a3e..8f79649 100644 --- a/contracts/wormhole/wormhole-core-v2.clar +++ b/contracts/wormhole/wormhole-core-v3.clar @@ -1,7 +1,7 @@ ;; Title: wormhole-core -;; Version: v2 -;; Check for latest version: https://github.com/hirosystems/stacks-pyth-bridge#latest-version -;; Report an issue: https://github.com/hirosystems/stacks-pyth-bridge/issues +;; Version: v3 +;; Check for latest version: https://github.com/Trust-Machines/stacks-pyth-bridge#latest-version +;; Report an issue: https://github.com/Trust-Machines/stacks-pyth-bridge/issues ;;;; Traits @@ -10,8 +10,6 @@ ;;;; Constants -;; Generic error -(define-constant ERR_PANIC (err u0)) ;; VAA version not supported (define-constant ERR_VAA_PARSING_VERSION (err u1001)) ;; Unable to extract the guardian set-id from the VAA @@ -40,10 +38,8 @@ (define-constant ERR_VAA_CHECKS_VERSION_UNSUPPORTED (err u1101)) ;; Number of valid signatures insufficient (min: 13/19) (define-constant ERR_VAA_CHECKS_THRESHOLD_SIGNATURE (err u1102)) -;; Multiple signatures were issued by the same guardian -(define-constant ERR_VAA_CHECKS_REDUNDANT_SIGNATURE (err u1103)) ;; Guardian signature not comprised in guardian set specified -(define-constant ERR_VAA_CHECKS_GUARDIAN_SET_CONSISTENCY (err u1105)) +(define-constant ERR_VAA_CHECKS_GUARDIAN_SET_CONSISTENCY (err u1103)) ;; Guardian Set Update initiated by an unauthorized module (define-constant ERR_GSU_PARSING_MODULE (err u1201)) ;; Guardian Set Update initiated from an unauthorized module @@ -54,7 +50,7 @@ (define-constant ERR_GSU_PARSING_INDEX (err u1204)) ;; Guardian Set Update length is invalid (define-constant ERR_GSU_PARSING_GUARDIAN_LEN (err u1205)) -;; Guardian Set Update guardians payload is malformatted +;; Guardian Set Update guardians payload is malformed (define-constant ERR_GSU_PARSING_GUARDIANS_BYTES (err u1206)) ;; Guardian Set Update uncompressed public keys invalid (define-constant ERR_GSU_UNCOMPRESSED_PUBLIC_KEYS (err u1207)) @@ -68,28 +64,48 @@ (define-constant ERR_GSU_CHECK_INDEX (err u1304)) ;; Guardian Set Update emission payload unauthorized (define-constant ERR_GSU_CHECK_EMITTER (err u1305)) +;; First guardian set is not being updated by the deployer +(define-constant ERR_NOT_DEPLOYER (err u1306)) +;; Overlay present in vaa bytes +(define-constant ERR_GSU_CHECK_OVERLAY (err u1307)) +;; Empty guardian set +(define-constant ERR_EMPTY_GUARDIAN_SET (err u1308)) +;; Guardian Set Update emission payload unauthorized +(define-constant ERR_DUPLICATED_GUARDIAN_ADDRESSES (err u1309)) +;; Unable to get stacks timestamp +(define-constant ERR_STACKS_TIMESTAMP (err u1310)) ;; Guardian set upgrade emitting address (define-constant GSU-EMITTING-ADDRESS 0x0000000000000000000000000000000000000000000000000000000000000004) ;; Guardian set upgrade emitting chain (define-constant GSU-EMITTING-CHAIN u1) - - -(define-constant hk-cursor-v2 'SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-cursor-v2) - +;; Stacks chain id attributed by Pyth +(define-constant EXPECTED_CHAIN_ID (if is-in-mainnet 0xea86 0xc377)) +;; Core string module +(define-constant CORE_STRING_MODULE 0x00000000000000000000000000000000000000000000000000000000436f7265) +;; Guardian set update action +(define-constant ACTION_GUARDIAN_SET_UPDATE u2) +;; Core chain ID +(define-constant CORE_CHAIN_ID u0) +;; Guardian eth address size +(define-constant GUARDIAN_ETH_ADDRESS_SIZE u20) +;; 24 hours in seconds +(define-constant TWENTY_FOUR_HOURS u86400) ;;;; Data vars ;; Guardian Set Update uncompressed public keys invalid (define-data-var guardian-set-initialized bool false) +;; Contract deployer +(define-constant deployer contract-caller) ;; Keep track of the active guardian set-id (define-data-var active-guardian-set-id uint u0) +;; Keep track of exiting guardian set +(define-data-var previous-guardian-set {set-id: uint, expires-at: uint} {set-id: u0, expires-at: u0}) ;;;; Data maps ;; Map tracking guardians set -(define-map guardian-sets - { set-id: uint } - (list 19 { compressed-public-key: (buff 33), uncompressed-public-key: (buff 64) })) +(define-map guardian-sets uint (list 19 { compressed-public-key: (buff 33), uncompressed-public-key: (buff 64) })) ;;;; Public functions @@ -147,6 +163,7 @@ message-hash: vaa-body-hash, value: (list) }))) + (asserts! (is-eq (get pos (get next cursor-payload)) (len vaa-bytes)) ERR_GSU_CHECK_OVERLAY) (print { payload: (get value cursor-payload) }) (ok { vaa: { @@ -168,11 +185,13 @@ ;; @desc Parse and check the validity of a Verified Action Approval (VAA) ;; @param vaa-bytes: (define-read-only (parse-and-verify-vaa (vaa-bytes (buff 8192))) - (let ((message (try! (parse-vaa vaa-bytes)))) - ;; Ensure that the guardian-set-id is the active one - (asserts! (is-eq (get guardian-set-id (get vaa message)) (var-get active-guardian-set-id)) - ERR_VAA_CHECKS_GUARDIAN_SET_CONSISTENCY) - (let ((active-guardians (unwrap! (map-get? guardian-sets { set-id: (get guardian-set-id (get vaa message)) }) ERR_VAA_CHECKS_GUARDIAN_SET_CONSISTENCY)) + (let ( + (message (try! (parse-vaa vaa-bytes))) + (guardian-set-id (get guardian-set-id (get vaa message))) + ) + ;; Ensure that the guardian-set-id is the active one or unexpired previous one + (asserts! (try! (is-valid-guardian-set guardian-set-id)) ERR_VAA_CHECKS_GUARDIAN_SET_CONSISTENCY) + (let ((active-guardians (unwrap! (map-get? guardian-sets guardian-set-id) ERR_VAA_CHECKS_GUARDIAN_SET_CONSISTENCY)) (signatures-from-active-guardians (fold batch-check-active-public-keys (get recovered-public-keys message) { active-guardians: active-guardians, @@ -188,35 +207,42 @@ (ok (get vaa message))))) ;; @desc Update the active set of guardians -;; @param guardian-set-vaa: VAA embedding the Guardian Set Update informations +;; @param guardian-set-vaa: VAA embedding the Guardian Set Update information ;; @param uncompressed-public-keys: uncompressed public keys, used for recomputing ;; the addresses embedded in the VAA. `secp256k1-verify` returns a compressed -;; public key, and uncompressing the key in clarity would be inefficient and expansive. +;; public key, and uncompressing the key in clarity would be inefficient and expensive. (define-public (update-guardians-set (guardian-set-vaa (buff 2048)) (uncompressed-public-keys (list 19 (buff 64)))) (let ((vaa (if (var-get guardian-set-initialized) (try! (parse-and-verify-vaa guardian-set-vaa)) - (get vaa (try! (parse-vaa guardian-set-vaa))))) + (begin + (asserts! (is-eq contract-caller deployer) ERR_NOT_DEPLOYER) + (get vaa (try! (parse-vaa guardian-set-vaa))) + ))) (cursor-guardians-data (try! (parse-and-verify-guardians-set (get payload vaa)))) - (set-id (get new-index (get value cursor-guardians-data))) - (eth-addresses (get guardians-eth-addresses (get value cursor-guardians-data))) + (set-id (get new-index cursor-guardians-data)) + (eth-addresses (get guardians-eth-addresses cursor-guardians-data)) (consolidated-public-keys (fold check-and-consolidate-public-keys uncompressed-public-keys { cursor: u0, eth-addresses: eth-addresses, result: (list) })) + (result (get result consolidated-public-keys)) ) ;; Ensure that enough uncompressed-public-keys were provided + (try! (fold is-valid-guardian-entry result (ok true))) (asserts! (is-eq (len uncompressed-public-keys) (len eth-addresses)) ERR_GSU_UNCOMPRESSED_PUBLIC_KEYS) ;; Check emitting address (asserts! (is-eq (get emitter-address vaa) GSU-EMITTING-ADDRESS) ERR_GSU_CHECK_EMITTER) ;; Check emitting address (asserts! (is-eq (get emitter-chain vaa) GSU-EMITTING-CHAIN) ERR_GSU_CHECK_EMITTER) + ;; ensure guardian set has atleast one member + (asserts! (>= (len result) u1) ERR_EMPTY_GUARDIAN_SET) ;; Update storage - (map-set guardian-sets { set-id: set-id } (get result consolidated-public-keys)) - (var-set active-guardian-set-id set-id) + (map-set guardian-sets set-id result) + (try! (set-new-guardian-set-id set-id)) (var-set guardian-set-initialized true) ;; Emit Event (print { - type: "guardian-set", + type: "guardians-set", action: "updated", id: set-id, data: { guardians-eth-addresses: eth-addresses, guardians-public-keys: uncompressed-public-keys }}) @@ -230,7 +256,7 @@ (define-read-only (get-active-guardian-set) (let ((set-id (var-get active-guardian-set-id)) - (guardians (unwrap-panic (map-get? guardian-sets { set-id: set-id })))) + (guardians (unwrap-panic (map-get? guardian-sets set-id)))) (ok { set-id: set-id, guardians: guardians @@ -238,7 +264,7 @@ ;;;; Private functions -;; @desc Foldable function admitting an uncompressed 64 byts public key as an input, producing a record { uncompressed-public-key, compressed-public-key } +;; @desc Foldable function admitting an uncompressed 64 bytes public key as an input, producing a record { uncompressed-public-key, compressed-public-key } (define-private (check-and-consolidate-public-keys (uncompressed-public-key (buff 64)) (acc { @@ -257,7 +283,7 @@ result: (unwrap-panic (as-max-len? (append (get result acc) entry) u19)), })) -;; @desc Foldable function admitting an uncompressed 64 byts public key as an input, producing a record { uncompressed-public-key, compressed-public-key } +;; @desc Foldable function admitting an guardian input and their signature as an input, producing a record { recovered-compressed-public-key } (define-private (batch-recover-public-keys (entry { guardian-id: uint, signature: (buff 65) }) (acc { message-hash: (buff 32), value: (list 19 { recovered-compressed-public-key: (buff 33), guardian-id: uint }) })) @@ -317,10 +343,13 @@ (let ( (cursor-address-bytes (unwrap-panic (contract-call? 'SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-cursor-v2 read-buff-20 { bytes: (get bytes acc), pos: cue-position }))) ) - { - bytes: (get bytes acc), - result: (unwrap-panic (as-max-len? (append (get result acc) (get value cursor-address-bytes)) u19)) - })) + (if (is-none (index-of? (get result acc) (get value cursor-address-bytes))) + { + bytes: (get bytes acc), + result: (unwrap-panic (as-max-len? (append (get result acc) (get value cursor-address-bytes)) u19)) + } + acc + ))) ;; @desc Parse and verify payload's VAA (define-private (parse-and-verify-guardians-set (bytes (buff 8192))) @@ -335,43 +364,42 @@ ERR_GSU_PARSING_INDEX)) (cursor-guardians-count (unwrap! (contract-call? 'SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-cursor-v2 read-uint-8 (get next cursor-new-index)) ERR_GSU_PARSING_GUARDIAN_LEN)) - (guardians-bytes (unwrap! (contract-call? 'SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-cursor-v2 read-buff-8192-max (get next cursor-guardians-count) (some (* (get value cursor-guardians-count) u20))) + (guardians-bytes (unwrap! (contract-call? 'SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-cursor-v2 read-buff-8192-max (get next cursor-guardians-count) (some (* (get value cursor-guardians-count) GUARDIAN_ETH_ADDRESS_SIZE))) ERR_GSU_PARSING_GUARDIANS_BYTES)) (guardians-cues (get result (fold is-guardian-cue (get value guardians-bytes) { cursor: u0, result: (list) }))) (eth-addresses (get result (fold parse-guardian guardians-cues { bytes: (get value guardians-bytes), result: (list) })))) + (asserts! (is-eq (get pos (get next guardians-bytes)) (len bytes)) ERR_GSU_CHECK_OVERLAY) + ;; Ensure there are no duplicated addresses + (asserts! (is-eq (len eth-addresses) (get value cursor-guardians-count)) ERR_DUPLICATED_GUARDIAN_ADDRESSES) ;; Ensure that this message was emitted from authorized module - (asserts! (is-eq (get value cursor-module) 0x00000000000000000000000000000000000000000000000000000000436f7265) + (asserts! (is-eq (get value cursor-module) CORE_STRING_MODULE) ERR_GSU_CHECK_MODULE) ;; Ensure that this message is matching the adequate action - (asserts! (is-eq (get value cursor-action) u2) + (asserts! (is-eq (get value cursor-action) ACTION_GUARDIAN_SET_UPDATE) ERR_GSU_CHECK_ACTION) - ;; Ensure that this message is matching the adequate action - (asserts! (is-eq (get value cursor-chain) u0) - ERR_GSU_CHECK_CHAIN) - ;; Ensure that next index > current index - (asserts! (> (get value cursor-new-index) (var-get active-guardian-set-id)) - ERR_GSU_CHECK_INDEX) + ;; Ensure that this message is matching the expected chain + (asserts! (or (is-eq (get value cursor-chain) (buff-to-uint-be EXPECTED_CHAIN_ID)) (is-eq (get value cursor-chain) CORE_CHAIN_ID) ) ERR_GSU_CHECK_CHAIN) + (if (var-get guardian-set-initialized) + ;; Ensure that next index = current index + 1 + (asserts! (is-eq (get value cursor-new-index) (+ u1 (var-get active-guardian-set-id))) ERR_GSU_CHECK_INDEX) + ;; Ensure that next index > current index + (asserts! (> (get value cursor-new-index) (var-get active-guardian-set-id)) ERR_GSU_CHECK_INDEX) + ) + ;; Good to go! (ok { - value: { guardians-eth-addresses: eth-addresses, module: (get value cursor-module), action: (get value cursor-action), chain: (get value cursor-chain), new-index: (get value cursor-new-index) - }, - next: { - bytes: bytes, - pos: (+ (get pos (get next cursor-guardians-count)) - (* (get value cursor-guardians-count) u20)) - } - }))) + }))) (define-private (get-quorum (guardian-set-size uint)) (+ (/ (* guardian-set-size u2) u3) u1)) (define-private (is-guardian-cue (byte (buff 1)) (acc { cursor: uint, result: (list 19 uint) })) - (if (is-eq u0 (mod (get cursor acc) u20)) + (if (is-eq u0 (mod (get cursor acc) GUARDIAN_ETH_ADDRESS_SIZE)) { cursor: (+ u1 (get cursor acc)), result: (unwrap-panic (as-max-len? (append (get result acc) (get cursor acc)) u19)), @@ -380,3 +408,46 @@ cursor: (+ u1 (get cursor acc)), result: (get result acc), })) + +(define-private (is-valid-guardian-entry (entry { compressed-public-key: (buff 33), uncompressed-public-key: (buff 64)}) (prev-res (response bool uint))) + (begin + (try! prev-res) + (let ( + (compressed (get compressed-public-key entry)) + (uncompressed (get uncompressed-public-key entry))) + (if (or (is-eq 0x compressed) (is-eq 0x uncompressed)) + ERR_GSU_PARSING_GUARDIAN_LEN + (ok true) + ) + ) + ) +) + +(define-private (set-new-guardian-set-id (new-set-id uint)) + (if (var-get guardian-set-initialized) + (let ( + (latest-stacks-timestamp (unwrap! (get-stacks-block-info? time (- stacks-block-height u1)) ERR_STACKS_TIMESTAMP)) + (previous-set-expires-at (+ TWENTY_FOUR_HOURS latest-stacks-timestamp)) + ) + (var-set previous-guardian-set { + set-id: (var-get active-guardian-set-id), + expires-at: previous-set-expires-at + }) + (var-set active-guardian-set-id new-set-id) + (ok true) + ) + (begin (var-set active-guardian-set-id new-set-id) (ok true)) + ) +) + +(define-private (is-valid-guardian-set (set-id uint)) + (if (is-eq (var-get active-guardian-set-id) set-id) + (ok true) + (let ( + (prev-guardian-set (var-get previous-guardian-set)) + (prev-guardian-set-id (get set-id prev-guardian-set)) + (prev-guardian-set-expires-at (get expires-at prev-guardian-set)) + (latest-stacks-timestamp (unwrap! (get-stacks-block-info? time (- stacks-block-height u1)) ERR_STACKS_TIMESTAMP)) + ) (ok (and (is-eq prev-guardian-set-id set-id) (>= prev-guardian-set-expires-at latest-stacks-timestamp)))) + ) +) diff --git a/contracts/wormhole/wormhole-traits-v1.clar b/contracts/wormhole/wormhole-traits-v1.clar index 4e66b94..ad898f9 100644 --- a/contracts/wormhole/wormhole-traits-v1.clar +++ b/contracts/wormhole/wormhole-traits-v1.clar @@ -1,3 +1,8 @@ +;; Title: core-traits +;; Version: v1 +;; Check for latest version: https://github.com/Trust-Machines/stacks-pyth-bridge#latest-version +;; Report an issue: https://github.com/Trust-Machines/stacks-pyth-bridge/issues + (define-trait core-trait ( ;; Parse and Verify cryptographic validity of a VAA diff --git a/deployments/default.devnet-plan.yaml b/deployments/default.devnet-plan.yaml index b903b4f..0e94e36 100644 --- a/deployments/default.devnet-plan.yaml +++ b/deployments/default.devnet-plan.yaml @@ -15,7 +15,7 @@ plan: SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM cost: 64640 path: "./.cache/requirements/SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-cursor-v2.clar" - clarity-version: 2 + clarity-version: 3 - requirement-publish: contract-id: SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-ecc-v1 remap-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM @@ -23,7 +23,7 @@ plan: SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM cost: 9440 path: "./.cache/requirements/SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-ecc-v1.clar" - clarity-version: 2 + clarity-version: 3 - requirement-publish: contract-id: SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-merkle-tree-keccak160-v1 remap-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM @@ -31,95 +31,97 @@ plan: SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM cost: 11000 path: "./.cache/requirements/SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-merkle-tree-keccak160-v1.clar" - clarity-version: 2 + clarity-version: 3 + epoch: "2.4" + - id: 1 + transactions: - contract-publish: contract-name: wormhole-traits-v1 expected-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM cost: 4920 path: contracts/wormhole/wormhole-traits-v1.clar anchor-block-only: true - clarity-version: 2 + clarity-version: 3 - contract-publish: contract-name: pyth-traits-v1 expected-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM cost: 16340 path: contracts/pyth-traits-v1.clar anchor-block-only: true - clarity-version: 2 + clarity-version: 3 - contract-publish: - contract-name: pyth-governance-v1 + contract-name: pyth-governance-v2 expected-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM cost: 226570 - path: contracts/pyth-governance-v1.clar + path: contracts/pyth-governance-v2.clar anchor-block-only: true - clarity-version: 2 + clarity-version: 3 - contract-publish: - contract-name: pyth-oracle-v1 + contract-name: pyth-oracle-v3 expected-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM cost: 21680 - path: contracts/pyth-oracle-v1.clar + path: contracts/pyth-oracle-v3.clar anchor-block-only: true - clarity-version: 2 + clarity-version: 3 - contract-publish: - contract-name: pyth-pnau-decoder-v1 + contract-name: pyth-pnau-decoder-v2 expected-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM cost: 160350 - path: contracts/pyth-pnau-decoder-v1.clar + path: contracts/pyth-pnau-decoder-v2.clar anchor-block-only: true - clarity-version: 2 + clarity-version: 3 - contract-publish: - contract-name: pyth-store-v1 + contract-name: pyth-storage-v3 expected-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM cost: 22430 - path: contracts/pyth-store-v1.clar + path: contracts/pyth-storage-v3.clar anchor-block-only: true - clarity-version: 2 + clarity-version: 3 - contract-publish: - contract-name: wormhole-core-v1 + contract-name: wormhole-core-v3 expected-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM cost: 197240 - path: contracts/wormhole/wormhole-core-v1.clar - anchor-block-only: true - clarity-version: 2 - - contract-publish: - contract-name: pyth-helper-v1 - expected-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - cost: 4420 - path: contracts/pyth-helper-v1.clar + path: contracts/wormhole/wormhole-core-v3.clar anchor-block-only: true - clarity-version: 2 - epoch: "2.4" - - id: 1 + clarity-version: 3 + epoch: "3.0" + - id: 2 transactions: - contract-call: - contract-id: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.wormhole-core-v1 - expected-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM - method: update-guardians-set - parameters: - - 0x010000000001007ac31b282c2aeeeb37f3385ee0de5f8e421d30b9e5ae8ba3d4375c1c77a86e77159bb697d9c456d6f8c02d22a94b1279b65b0d6a9957e7d3857423845ac758e300610ac1d2000000030001000000000000000000000000000000000000000000000000000000000000000400000000000005390000000000000000000000000000000000000000000000000000000000436f7265020000000000011358cc3ae5c097b213ce3c81979e1b9f9570746aa5ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cdeb5f7389fa26941519f0863349c223b73a6ddee774a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d - - '(list 0x2a953a2e8b1052eb70c1d7b556b087deed598b55608396686c1c811b9796c763078687ce10459f4f25fb7a0fbf8727bb0fb51e00820e93a123f652ee843cf08d 0x2766db08820e311b22e109801ab8ea505b12e3df3d91ebc87c999ffb6929d1abb0ade987c74aa37db26eea4086ee738a2f34a5594edb8760da0eac5be356b731 0x54177ff4a8329520b76efd86f8bfce5c942554db16e673267dc1133b3f5e230b2d8cbf90fe274946045d4491de288d736680edc2ee9ee5b1b15416b0a34806c4 0x7fa3e98fcc2621337b217b61408a98facaabd25bad2b158438728ce863c14708cfcda1f3b50a16ca0211199079fb338d479a54546ec3c5f775af23a7d7f4fb24 0x0bdcbccc0297c2a4f92a7c39358c42f22a8ed700a78bd05c39c8b61aaf2338e825b6c0d26d1f2a2ae4129cd751201f73d7234c753bd0735212a5288b19748fd2 0xcfd90084be68de514fe14a7c281f492223f045566f859ea5c166d6e60bc650c23940909a8e96c2fbffbd15a598b4e6a5b5aa14c126bf58cc1a9e396fe7771965 0x8edf3f9d997357a0e2c916ee090392c3a645ebac4f6cd8f826d3ecc0173b33bf06b7c14e8002fc9a5d01af9824a5cb3778472cd477e0ab378091448bca6f0417 0x6200deeadd3b4e2cd0a168d42e720a3b88d3ce4769ff2808086e6fd36110fc05c591ccbf91368609dc3b21203e58c9883d4f580085469bef8d5bdcd26eb8ad69 0xd5225476d7849b362226952ffc561bab99832f3f8b99741f6d81bbeaffa8e7f6e54a85e5029a3b510707eaa9684df496e4b1268075ad0328693a30bf1b1e0033 0xd9fa78b5b958bea1929080b8ad96dc555d34b051a27aebf711eb1186b807b0448316d994606ac807121838d6c41a58f308bc6307acdf69491fa4b17282f3e66f 0xcc64af75ec2e2741fb9af9f6191cb9ee187d6d26af4d1e96d7bab47e6ec09be12d3192030dc4bbf54d1da319a7a2acfc7a9dd4c644af6646a4aaa02b1024bbab 0xb5943b6e284682ad2e011d6962d41febf86af2f5fc0c9c8f4b81358ff077f9c96ba0880eaf93541eae94b4fa41dba66dab7fb0201cc9af7c75681e5719b0c95f 0x0cfc9d5b5dcf702a1525f9d4ed1841e8eb8b34434cc82470dd35435f1dbdc73ffb51544b7500394eac9c7fa567868b495326075147a2d809ebbfd43273eeec91 0x0aa78894d894a15933969f5826347439e2c309f2049277a10066c9197840499498ad19ee3d1b291f932ec0890bbdafcec292c4f02a446670cd0084f997e25e2f 0x00f400e3fe40f64032485aad9240ead45a8e1fc83ec08c96db861c0eca155ac898df8673e778e3ccaae8a0f9e6af415fe40e99b0cbc88d7610e536b6041b07fb 0x604f384174c7ed3a0dc5f476569a978266a7943bd775449d1b8b27f4eb8beb99cdf095f9200a2dabb1bc5d68c3d96ea3d47f4d34499d59953669b6c8c093d578 0x4881345cbb299fa7c60ab2d16cb7fe7bf8d14675506ef6eb6037038b5b7092ea0a9e4d0b53ba3904edd99f86717d6ba81dffe44eb5b23c6fd22c91ab73c33021 0xee3d4cc17633afe7e1794fcfd728e0643325e3d130eb1daa39c0c5cb05a200b43876117a182cabdcc3795632aa529473a0c8245f9e4f6e43e54c3f1da28bcb82 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)' - cost: 5960 - - contract-call: - contract-id: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.wormhole-core-v1 + contract-id: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.wormhole-core-v3 expected-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM method: update-guardians-set parameters: - - 0x01000000010d0012e6b39c6da90c5dfd3c228edbb78c7a4c97c488ff8a346d161a91db067e51d638c17216f368aa9bdf4836b8645a98018ca67d2fec87d769cabfdf2406bf790a0002ef42b288091a670ef3556596f4f47323717882881eaf38e03345078d07a156f312b785b64dae6e9a87e3d32872f59cb1931f728cecf511762981baf48303668f0103cef2616b84c4e511ff03329e0853f1bd7ee9ac5ba71d70a4d76108bddf94f69c2a8a84e4ee94065e8003c334e899184943634e12043d0dda78d93996da073d190104e76d166b9dac98f602107cc4b44ac82868faf00b63df7d24f177aa391e050902413b71046434e67c770b19aecdf7fce1d1435ea0be7262e3e4c18f50ddc8175c0105d9450e8216d741e0206a50f93b750a47e0a258b80eb8fed1314cc300b3d905092de25cd36d366097b7103ae2d184121329ba3aa2d7c6cc53273f11af14798110010687477c8deec89d36a23e7948feb074df95362fc8dcbd8ae910ac556a1dee1e755c56b9db5d710c940938ed79bc1895a3646523a58bc55f475a23435a373ecfdd0107fb06734864f79def4e192497362513171530daea81f07fbb9f698afe7e66c6d44db21323144f2657d4a5386a954bb94eef9f64148c33aef6e477eafa2c5c984c01088769e82216310d1827d9bd48645ec23e90de4ef8a8de99e2d351d1df318608566248d80cdc83bdcac382b3c30c670352be87f9069aab5037d0b747208eae9c650109e9796497ff9106d0d1c62e184d83716282870cef61a1ee13d6fc485b521adcce255c96f7d1bca8d8e7e7d454b65783a830bddc9d94092091a268d311ecd84c26010c468c9fb6d41026841ff9f8d7368fa309d4dbea3ea4bbd2feccf94a92cc8a20a226338a8e2126cd16f70eaf15b4fc9be2c3fa19def14e071956a605e9d1ac4162010e23fcb6bd445b7c25afb722250c1acbc061ed964ba9de1326609ae012acdfb96942b2a102a2de99ab96327859a34a2b49a767dbdb62e0a1fb26af60fe44fd496a00106bb0bac77ac68b347645f2fb1ad789ea9bd76fb9b2324f25ae06f97e65246f142df717f662e73948317182c62ce87d79c73def0dba12e5242dfc038382812cfe00126da03c5e56cb15aeeceadc1e17a45753ab4dc0ec7bf6a75ca03143ed4a294f6f61bc3f478a457833e43084ecd7c985bf2f55a55f168aac0e030fc49e845e497101626e9d9a5d9e343f00010000000000000000000000000000000000000000000000000000000000000004c1759167c43f501c2000000000000000000000000000000000000000000000000000000000436f7265020000000000021358cc3ae5c097b213ce3c81979e1b9f9570746aa5ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cd66b9590e1c41e0b226937bf9217d1d67fd4e91f574a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d - - '(list 0x2a953a2e8b1052eb70c1d7b556b087deed598b55608396686c1c811b9796c763078687ce10459f4f25fb7a0fbf8727bb0fb51e00820e93a123f652ee843cf08d 0x2766db08820e311b22e109801ab8ea505b12e3df3d91ebc87c999ffb6929d1abb0ade987c74aa37db26eea4086ee738a2f34a5594edb8760da0eac5be356b731 0x54177ff4a8329520b76efd86f8bfce5c942554db16e673267dc1133b3f5e230b2d8cbf90fe274946045d4491de288d736680edc2ee9ee5b1b15416b0a34806c4 0x7fa3e98fcc2621337b217b61408a98facaabd25bad2b158438728ce863c14708cfcda1f3b50a16ca0211199079fb338d479a54546ec3c5f775af23a7d7f4fb24 0x0bdcbccc0297c2a4f92a7c39358c42f22a8ed700a78bd05c39c8b61aaf2338e825b6c0d26d1f2a2ae4129cd751201f73d7234c753bd0735212a5288b19748fd2 0xcfd90084be68de514fe14a7c281f492223f045566f859ea5c166d6e60bc650c23940909a8e96c2fbffbd15a598b4e6a5b5aa14c126bf58cc1a9e396fe7771965 0x8edf3f9d997357a0e2c916ee090392c3a645ebac4f6cd8f826d3ecc0173b33bf06b7c14e8002fc9a5d01af9824a5cb3778472cd477e0ab378091448bca6f0417 0x 0xd5225476d7849b362226952ffc561bab99832f3f8b99741f6d81bbeaffa8e7f6e54a85e5029a3b510707eaa9684df496e4b1268075ad0328693a30bf1b1e0033 0xd9fa78b5b958bea1929080b8ad96dc555d34b051a27aebf711eb1186b807b0448316d994606ac807121838d6c41a58f308bc6307acdf69491fa4b17282f3e66f 0xcc64af75ec2e2741fb9af9f6191cb9ee187d6d26af4d1e96d7bab47e6ec09be12d3192030dc4bbf54d1da319a7a2acfc7a9dd4c644af6646a4aaa02b1024bbab 0xb5943b6e284682ad2e011d6962d41febf86af2f5fc0c9c8f4b81358ff077f9c96ba0880eaf93541eae94b4fa41dba66dab7fb0201cc9af7c75681e5719b0c95f 0x0cfc9d5b5dcf702a1525f9d4ed1841e8eb8b34434cc82470dd35435f1dbdc73ffb51544b7500394eac9c7fa567868b495326075147a2d809ebbfd43273eeec91 0x0aa78894d894a15933969f5826347439e2c309f2049277a10066c9197840499498ad19ee3d1b291f932ec0890bbdafcec292c4f02a446670cd0084f997e25e2f 0x00f400e3fe40f64032485aad9240ead45a8e1fc83ec08c96db861c0eca155ac898df8673e778e3ccaae8a0f9e6af415fe40e99b0cbc88d7610e536b6041b07fb 0x604f384174c7ed3a0dc5f476569a978266a7943bd775449d1b8b27f4eb8beb99cdf095f9200a2dabb1bc5d68c3d96ea3d47f4d34499d59953669b6c8c093d578 0x4881345cbb299fa7c60ab2d16cb7fe7bf8d14675506ef6eb6037038b5b7092ea0a9e4d0b53ba3904edd99f86717d6ba81dffe44eb5b23c6fd22c91ab73c33021 0xee3d4cc17633afe7e1794fcfd728e0643325e3d130eb1daa39c0c5cb05a200b43876117a182cabdcc3795632aa529473a0c8245f9e4f6e43e54c3f1da28bcb82 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)' + - 0x01000000020d00ce45474d9e1b1e7790a2d210871e195db53a70ffd6f237cfe70e2686a32859ac43c84a332267a8ef66f59719cf91cc8df0101fd7c36aa1878d5139241660edc0010375cc906156ae530786661c0cd9aef444747bc3d8d5aa84cac6a6d2933d4e1a031cffa30383d4af8131e929d9f203f460b07309a647d6cd32ab1cc7724089392c000452305156cfc90343128f97e499311b5cae174f488ff22fbc09591991a0a73d8e6af3afb8a5968441d3ab8437836407481739e9850ad5c95e6acfcc871e951bc30105a7956eefc23e7c945a1966d5ddbe9e4be376c2f54e45e3d5da88c2f8692510c7429b1ea860ae94d929bd97e84923a18187e777aa3db419813a80deb84cc8d22b00061b2a4f3d2666608e0aa96737689e3ba5793810ff3a52ff28ad57d8efb20967735dc5537a2e43ef10f583d144c12a1606542c207f5b79af08c38656d3ac40713301086b62c8e130af3411b3c0d91b5b50dcb01ed5f293963f901fc36e7b0e50114dce203373b32eb45971cef8288e5d928d0ed51cd86e2a3006b0af6a65c396c009080009e93ab4d2c8228901a5f4525934000b2c26d1dc679a05e47fdf0ff3231d98fbc207103159ff4116df2832eea69b38275283434e6cd4a4af04d25fa7a82990b707010aa643f4cf615dfff06ffd65830f7f6cf6512dabc3690d5d9e210fdc712842dc2708b8b2c22e224c99280cd25e5e8bfb40e3d1c55b8c41774e287c1e2c352aecfc010b89c1e85faa20a30601964ccc6a79c0ae53cfd26fb10863db37783428cd91390a163346558239db3cd9d420cfe423a0df84c84399790e2e308011b4b63e6b8015010ca31dcb564ac81a053a268d8090e72097f94f366711d0c5d13815af1ec7d47e662e2d1bde22678113d15963da100b668ba26c0c325970d07114b83c5698f46097010dc9fda39c0d592d9ed92cd22b5425cc6b37430e236f02d0d1f8a2ef45a00bde26223c0a6eb363c8b25fd3bf57234a1d9364976cefb8360e755a267cbbb674b39501108db01e444ab1003dd8b6c96f8eb77958b40ba7a85fefecf32ad00b7a47c0ae7524216262495977e09c0989dd50f280c21453d3756843608eacd17f4fdfe47600001261025228ef5af837cb060bcd986fcfa84ccef75b3fa100468cfd24e7fadf99163938f3b841a33496c2706d0208faab088bd155b2e20fd74c625bb1cc8c43677a0163c53c409e0c5dfa000100000000000000000000000000000000000000000000000000000000000000046c5a054d7833d1e42000000000000000000000000000000000000000000000000000000000436f7265020000000000031358cc3ae5c097b213ce3c81979e1b9f9570746aa5ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cd15e7caf07c4e3dc8e7c469f92c8cd88fb8005a2074a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d + - "(list 0x2a953a2e8b1052eb70c1d7b556b087deed598b55608396686c1c811b9796c763078687ce10459f4f25fb7a0fbf8727bb0fb51e00820e93a123f652ee843cf08d 0x2766db08820e311b22e109801ab8ea505b12e3df3d91ebc87c999ffb6929d1abb0ade987c74aa37db26eea4086ee738a2f34a5594edb8760da0eac5be356b731 0x54177ff4a8329520b76efd86f8bfce5c942554db16e673267dc1133b3f5e230b2d8cbf90fe274946045d4491de288d736680edc2ee9ee5b1b15416b0a34806c4 0x7fa3e98fcc2621337b217b61408a98facaabd25bad2b158438728ce863c14708cfcda1f3b50a16ca0211199079fb338d479a54546ec3c5f775af23a7d7f4fb24 0x0bdcbccc0297c2a4f92a7c39358c42f22a8ed700a78bd05c39c8b61aaf2338e825b6c0d26d1f2a2ae4129cd751201f73d7234c753bd0735212a5288b19748fd2 0xcfd90084be68de514fe14a7c281f492223f045566f859ea5c166d6e60bc650c23940909a8e96c2fbffbd15a598b4e6a5b5aa14c126bf58cc1a9e396fe7771965 0x8edf3f9d997357a0e2c916ee090392c3a645ebac4f6cd8f826d3ecc0173b33bf06b7c14e8002fc9a5d01af9824a5cb3778472cd477e0ab378091448bca6f0417 0x47b15c5039dcb2850b59bea323db662cc597dd7d48fe6b8dbb6cd8704c45854bf0e92fa267c844ba1a700105e157c8099d55c82316cb5e50c56a5d0920ff91c2 0xd5225476d7849b362226952ffc561bab99832f3f8b99741f6d81bbeaffa8e7f6e54a85e5029a3b510707eaa9684df496e4b1268075ad0328693a30bf1b1e0033 0xd9fa78b5b958bea1929080b8ad96dc555d34b051a27aebf711eb1186b807b0448316d994606ac807121838d6c41a58f308bc6307acdf69491fa4b17282f3e66f 0xcc64af75ec2e2741fb9af9f6191cb9ee187d6d26af4d1e96d7bab47e6ec09be12d3192030dc4bbf54d1da319a7a2acfc7a9dd4c644af6646a4aaa02b1024bbab 0xb5943b6e284682ad2e011d6962d41febf86af2f5fc0c9c8f4b81358ff077f9c96ba0880eaf93541eae94b4fa41dba66dab7fb0201cc9af7c75681e5719b0c95f 0x0cfc9d5b5dcf702a1525f9d4ed1841e8eb8b34434cc82470dd35435f1dbdc73ffb51544b7500394eac9c7fa567868b495326075147a2d809ebbfd43273eeec91 0x0aa78894d894a15933969f5826347439e2c309f2049277a10066c9197840499498ad19ee3d1b291f932ec0890bbdafcec292c4f02a446670cd0084f997e25e2f 0x00f400e3fe40f64032485aad9240ead45a8e1fc83ec08c96db861c0eca155ac898df8673e778e3ccaae8a0f9e6af415fe40e99b0cbc88d7610e536b6041b07fb 0x604f384174c7ed3a0dc5f476569a978266a7943bd775449d1b8b27f4eb8beb99cdf095f9200a2dabb1bc5d68c3d96ea3d47f4d34499d59953669b6c8c093d578 0x4881345cbb299fa7c60ab2d16cb7fe7bf8d14675506ef6eb6037038b5b7092ea0a9e4d0b53ba3904edd99f86717d6ba81dffe44eb5b23c6fd22c91ab73c33021 0xee3d4cc17633afe7e1794fcfd728e0643325e3d130eb1daa39c0c5cb05a200b43876117a182cabdcc3795632aa529473a0c8245f9e4f6e43e54c3f1da28bcb82 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)" cost: 5960 - contract-call: - contract-id: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.wormhole-core-v1 + contract-id: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.wormhole-core-v3 expected-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM method: update-guardians-set parameters: - - 0x01000000020d00ce45474d9e1b1e7790a2d210871e195db53a70ffd6f237cfe70e2686a32859ac43c84a332267a8ef66f59719cf91cc8df0101fd7c36aa1878d5139241660edc0010375cc906156ae530786661c0cd9aef444747bc3d8d5aa84cac6a6d2933d4e1a031cffa30383d4af8131e929d9f203f460b07309a647d6cd32ab1cc7724089392c000452305156cfc90343128f97e499311b5cae174f488ff22fbc09591991a0a73d8e6af3afb8a5968441d3ab8437836407481739e9850ad5c95e6acfcc871e951bc30105a7956eefc23e7c945a1966d5ddbe9e4be376c2f54e45e3d5da88c2f8692510c7429b1ea860ae94d929bd97e84923a18187e777aa3db419813a80deb84cc8d22b00061b2a4f3d2666608e0aa96737689e3ba5793810ff3a52ff28ad57d8efb20967735dc5537a2e43ef10f583d144c12a1606542c207f5b79af08c38656d3ac40713301086b62c8e130af3411b3c0d91b5b50dcb01ed5f293963f901fc36e7b0e50114dce203373b32eb45971cef8288e5d928d0ed51cd86e2a3006b0af6a65c396c009080009e93ab4d2c8228901a5f4525934000b2c26d1dc679a05e47fdf0ff3231d98fbc207103159ff4116df2832eea69b38275283434e6cd4a4af04d25fa7a82990b707010aa643f4cf615dfff06ffd65830f7f6cf6512dabc3690d5d9e210fdc712842dc2708b8b2c22e224c99280cd25e5e8bfb40e3d1c55b8c41774e287c1e2c352aecfc010b89c1e85faa20a30601964ccc6a79c0ae53cfd26fb10863db37783428cd91390a163346558239db3cd9d420cfe423a0df84c84399790e2e308011b4b63e6b8015010ca31dcb564ac81a053a268d8090e72097f94f366711d0c5d13815af1ec7d47e662e2d1bde22678113d15963da100b668ba26c0c325970d07114b83c5698f46097010dc9fda39c0d592d9ed92cd22b5425cc6b37430e236f02d0d1f8a2ef45a00bde26223c0a6eb363c8b25fd3bf57234a1d9364976cefb8360e755a267cbbb674b39501108db01e444ab1003dd8b6c96f8eb77958b40ba7a85fefecf32ad00b7a47c0ae7524216262495977e09c0989dd50f280c21453d3756843608eacd17f4fdfe47600001261025228ef5af837cb060bcd986fcfa84ccef75b3fa100468cfd24e7fadf99163938f3b841a33496c2706d0208faab088bd155b2e20fd74c625bb1cc8c43677a0163c53c409e0c5dfa000100000000000000000000000000000000000000000000000000000000000000046c5a054d7833d1e42000000000000000000000000000000000000000000000000000000000436f7265020000000000031358cc3ae5c097b213ce3c81979e1b9f9570746aa5ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cd15e7caf07c4e3dc8e7c469f92c8cd88fb8005a2074a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d - - '(list 0x2a953a2e8b1052eb70c1d7b556b087deed598b55608396686c1c811b9796c763078687ce10459f4f25fb7a0fbf8727bb0fb51e00820e93a123f652ee843cf08d 0x2766db08820e311b22e109801ab8ea505b12e3df3d91ebc87c999ffb6929d1abb0ade987c74aa37db26eea4086ee738a2f34a5594edb8760da0eac5be356b731 0x54177ff4a8329520b76efd86f8bfce5c942554db16e673267dc1133b3f5e230b2d8cbf90fe274946045d4491de288d736680edc2ee9ee5b1b15416b0a34806c4 0x7fa3e98fcc2621337b217b61408a98facaabd25bad2b158438728ce863c14708cfcda1f3b50a16ca0211199079fb338d479a54546ec3c5f775af23a7d7f4fb24 0x0bdcbccc0297c2a4f92a7c39358c42f22a8ed700a78bd05c39c8b61aaf2338e825b6c0d26d1f2a2ae4129cd751201f73d7234c753bd0735212a5288b19748fd2 0xcfd90084be68de514fe14a7c281f492223f045566f859ea5c166d6e60bc650c23940909a8e96c2fbffbd15a598b4e6a5b5aa14c126bf58cc1a9e396fe7771965 0x8edf3f9d997357a0e2c916ee090392c3a645ebac4f6cd8f826d3ecc0173b33bf06b7c14e8002fc9a5d01af9824a5cb3778472cd477e0ab378091448bca6f0417 0x47b15c5039dcb2850b59bea323db662cc597dd7d48fe6b8dbb6cd8704c45854bf0e92fa267c844ba1a700105e157c8099d55c82316cb5e50c56a5d0920ff91c2 0xd5225476d7849b362226952ffc561bab99832f3f8b99741f6d81bbeaffa8e7f6e54a85e5029a3b510707eaa9684df496e4b1268075ad0328693a30bf1b1e0033 0xd9fa78b5b958bea1929080b8ad96dc555d34b051a27aebf711eb1186b807b0448316d994606ac807121838d6c41a58f308bc6307acdf69491fa4b17282f3e66f 0xcc64af75ec2e2741fb9af9f6191cb9ee187d6d26af4d1e96d7bab47e6ec09be12d3192030dc4bbf54d1da319a7a2acfc7a9dd4c644af6646a4aaa02b1024bbab 0xb5943b6e284682ad2e011d6962d41febf86af2f5fc0c9c8f4b81358ff077f9c96ba0880eaf93541eae94b4fa41dba66dab7fb0201cc9af7c75681e5719b0c95f 0x0cfc9d5b5dcf702a1525f9d4ed1841e8eb8b34434cc82470dd35435f1dbdc73ffb51544b7500394eac9c7fa567868b495326075147a2d809ebbfd43273eeec91 0x0aa78894d894a15933969f5826347439e2c309f2049277a10066c9197840499498ad19ee3d1b291f932ec0890bbdafcec292c4f02a446670cd0084f997e25e2f 0x00f400e3fe40f64032485aad9240ead45a8e1fc83ec08c96db861c0eca155ac898df8673e778e3ccaae8a0f9e6af415fe40e99b0cbc88d7610e536b6041b07fb 0x604f384174c7ed3a0dc5f476569a978266a7943bd775449d1b8b27f4eb8beb99cdf095f9200a2dabb1bc5d68c3d96ea3d47f4d34499d59953669b6c8c093d578 0x4881345cbb299fa7c60ab2d16cb7fe7bf8d14675506ef6eb6037038b5b7092ea0a9e4d0b53ba3904edd99f86717d6ba81dffe44eb5b23c6fd22c91ab73c33021 0xee3d4cc17633afe7e1794fcfd728e0643325e3d130eb1daa39c0c5cb05a200b43876117a182cabdcc3795632aa529473a0c8245f9e4f6e43e54c3f1da28bcb82 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)' - cost: 5960 - - contract-call: - contract-id: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM.pyth-helper-v1 - expected-sender: ST2CY5V39NHDPWSXMW9QDT3HC3GD6Q6XX4CFRK9AG - method: verify-and-update-price - parameters: - - 0x504e41550100000003b801000000030d002c9e33a703a8c86012c117474849ae41118270cf56e2db61c7af28f64ce322391d33cb738930dc3ffcfe5ae35dbd99c4e08a8ac4b390c858d94dc1f0b91e24d00101901948561c54c17b7a21a9885d3f60a85b410e18209b02ebe098b0dd422b02667565e3b5011203303a6445cf629d20cec3d4771f0b391ab03bfd54364ac049f70002a030ed0060f1ba123ddf5473bef4c1c8f4aec8737b47f11023f94d5339b72c4c3aa325515956ea702537a3950d74f86134396de437bfc97a5365fc090dbb382c0103f1f64ba806fe8ba7b7db3846d85fccbe7d803865e7b757301f4a5de6ebde40f923ee925a7df78871d39299d70fd117635263b91fe53f792bfff450d210431316000439e31501d7b661a1b075a9302b57a6fc500c1e760de7e949e30994055b061b280cefcab3eb3b5c780f56cd555e88ee3c674b798ddeb8713bd27a361b8b8f1c730008db908c61e4158d1a7a7d53b2ec14027a4a2b2f3207edf0db2fbb0f431f3cdc020ee9fc9f38e812d094dcf5dd18f3a8d1d1ee94e840f504b00e08d0fbd607ed6d0109cf5c52aed9f4a42691c3c33bc366fde4a3ad23aacdd46c14669ad321106cf8d257b9379fc45cbe91a26ee87f4800951c5ca89ff0069e4a47299f988b368c6b74000b1241dea623dd874e13135682d760ee48ac1888149bddcfac54ff3787f4b89629063d89e084350ff1168999365918f9bdf469323b817a25491e56341a0da5c498000d538baecc668df092ce3cfeebfa5968447584916cb503ce50e7f77443bbd2a3441bb1d962a7f3401bfcf30f444a3301ab72dcb87cc04b681bdada93d45001f53d010e2fd97eeac94ceb3fd87a6e4ab3b785c64db221d522e58230a6d9eb10cba3b53a086ba6989e4285ab0816a26ff64c1a3a05175d0ffa61f4f744f928d6c5b3f92600107f999fa2f5cd826520cdf36f2e3434f4619eca4c2fb944bdec79d84903f76aaa02727844ec451378ab165910140c866ebdc65aea2cc6717da4747d4ed8a7338700115ce8f97f4a39ccdf5a61c9425d8a306a35b598db9d0f936bece6f2d92e79f9b1306d4c4789fb73ba5bd29bf0d306f2e8079aae818bc70aa9db111b745f1f4ab900126933d7f1317e3e45d98687e66ae033d871e1026e92f1ad168ec197a92ad653571837b78ee8e2263f2aca1dfa112fc78de63de9e2231f62ab79db2d956704146c0165131de200000000001ae101faedac5851e32b9b23b5f9411a8c2bac4aae3ed4dd7b811dd1a72ea4aa710000000000df92280141555756000000000005e1b46c00002710dbdd79b598d499596393b24358343774fd54e63c01005500ec7a775f46379b5e943c3526b1c8d54cd49749176b0b98e02dde68d1bd335c170000000002bf687c00000000000091effffffff80000000065131de10000000065131de00000000002c073dc0000000000008d5f09014cff5b7c5413efc667d2bca5549edadde5324814fed82e330d4110d610f5d0325deddb5541eacccd70da0a613768335768226657b201a456613163b0b4a21cf17276c2be6d02280ff05d08a6d4cf481c00c544f4adff1c86c6845a21871b75b4cffdc9314a2b46bddcb2bd44861fa48d4cc429a0783cb122a3eda67b7a13ad6298995c3bddd6cfa1ba547ddd38f0da18fcb0f7ead4d1de56db6c0442b94883a78f40b3541982a58d2d400dbfb761cce7bf780c - cost: 5960 - epoch: "2.4" + # VAA of 4th guardians rotation + - 0x01000000030d03d4a37a6ff4361d91714730831e9d49785f61624c8f348a9c6c1d82bc1d98cadc5e936338204445c6250bb4928f3f3e165ad47ca03a5d63111168a2de4576856301049a5df10464ea4e1961589fd30fc18d1970a7a2ffaad617e56a0f7777f25275253af7d10a0f0f2494dc6e99fc80e444ab9ebbbee252ded2d5dcb50cbf7a54bb5a01055f4603b553b9ba9e224f9c55c7bca3da00abb10abd19e0081aecd3b352be061a70f79f5f388ebe5190838ef3cd13a2f22459c9a94206883b739c90b40d5d74640006a8fade3997f650a36e46bceb1f609edff201ab32362266f166c5c7da713f6a19590c20b68ed3f0119cb24813c727560ede086b3d610c2d7a1efa66f655bad90900080f5e495a75ea52241c59d145c616bfac01e57182ad8d784cbcc9862ed3afb60c0983ccbc690553961ffcf115a0c917367daada8e60be2cbb8b8008bac6341a8c010935ab11e0eea28b87a1edc5ccce3f1fac25f75b5f640fe6b0673a7cd74513c9dc01c544216cf364cc9993b09fda612e0cd1ced9c00fb668b872a16a64ebb55d27010ab2bc39617a2396e7defa24cd7c22f42dc31f3c42ffcd9d1472b02df8468a4d0563911e8fb6a4b5b0ce0bd505daa53779b08ff660967b31f246126ed7f6f29a7e000bdb6d3fd7b33bdc9ac3992916eb4aacb97e7e21d19649e7fa28d2dd6e337937e4274516a96c13ac7a8895da9f91948ea3a09c25f44b982c62ce8842b58e20c8a9000d3d1b19c8bb000856b6610b9d28abde6c35cb7705c6ca5db711f7be96d60eed9d72cfa402a6bfe8bf0496dbc7af35796fc768da51a067b95941b3712dce8ae1e7010ec80085033157fd1a5628fc0c56267469a86f0e5a66d7dede1ad4ce74ecc3dff95b60307a39c3bfbeedc915075070da30d0395def9635130584f709b3885e1bdc0010fc480eb9ee715a2d151b23722b48b42581d7f4001fc1696c75425040bfc1ffc5394fe418adb2b64bd3dc692efda4cc408163677dbe233b16bcdabb853a20843301118ee9e115e1a0c981f19d0772b850e666591322da742a9a12cce9f52a5665bd474abdd59c580016bee8aae67fdf39b315be2528d12eec3a652910e03cc4c6fa3801129d0d1e2e429e969918ec163d16a7a5b2c6729aa44af5dccad07d25d19891556a79b574f42d9adbd9e2a9ae5a6b8750331d2fccb328dd94c3bf8791ee1bfe85aa00661e99781981faea00010000000000000000000000000000000000000000000000000000000000000004fd4c6c55ec8dfd342000000000000000000000000000000000000000000000000000000000436f726502000000000004135893b5a76c3f739645648885bdccc06cd70a3cd3ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cd15e7caf07c4e3dc8e7c469f92c8cd88fb8005a2074a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d + # Uncompressed public keys of selected guardians: RockawayX, Staked, Figment, ChainodeTech, Inotel, HashQuark, ChainLayer, xLabs, Forbole, StakingFund, MoonletWallet, P2PValidator, 01node, MCFV2MAINNET, Everstake, ChorusOne, syncnode, Triton, StakingFacilities, cost: 5960 + - "(list + 0x9a1e801daa25d9808e70aae9981353086f958955cc94ef33a461b0e596feaef90a8474dd10cf6ae967143f86105c16d6304a3d268ea952fda9389139d4bb9da1 + 0x2766db08820e311b22e109801ab8ea505b12e3df3d91ebc87c999ffb6929d1abb0ade987c74aa37db26eea4086ee738a2f34a5594edb8760da0eac5be356b731 + 0x54177ff4a8329520b76efd86f8bfce5c942554db16e673267dc1133b3f5e230b2d8cbf90fe274946045d4491de288d736680edc2ee9ee5b1b15416b0a34806c4 + 0x7fa3e98fcc2621337b217b61408a98facaabd25bad2b158438728ce863c14708cfcda1f3b50a16ca0211199079fb338d479a54546ec3c5f775af23a7d7f4fb24 + 0x0bdcbccc0297c2a4f92a7c39358c42f22a8ed700a78bd05c39c8b61aaf2338e825b6c0d26d1f2a2ae4129cd751201f73d7234c753bd0735212a5288b19748fd2 + 0xcfd90084be68de514fe14a7c281f492223f045566f859ea5c166d6e60bc650c23940909a8e96c2fbffbd15a598b4e6a5b5aa14c126bf58cc1a9e396fe7771965 + 0x8edf3f9d997357a0e2c916ee090392c3a645ebac4f6cd8f826d3ecc0173b33bf06b7c14e8002fc9a5d01af9824a5cb3778472cd477e0ab378091448bca6f0417 + 0x47b15c5039dcb2850b59bea323db662cc597dd7d48fe6b8dbb6cd8704c45854bf0e92fa267c844ba1a700105e157c8099d55c82316cb5e50c56a5d0920ff91c2 + 0xd5225476d7849b362226952ffc561bab99832f3f8b99741f6d81bbeaffa8e7f6e54a85e5029a3b510707eaa9684df496e4b1268075ad0328693a30bf1b1e0033 + 0xd9fa78b5b958bea1929080b8ad96dc555d34b051a27aebf711eb1186b807b0448316d994606ac807121838d6c41a58f308bc6307acdf69491fa4b17282f3e66f + 0xcc64af75ec2e2741fb9af9f6191cb9ee187d6d26af4d1e96d7bab47e6ec09be12d3192030dc4bbf54d1da319a7a2acfc7a9dd4c644af6646a4aaa02b1024bbab + 0xb5943b6e284682ad2e011d6962d41febf86af2f5fc0c9c8f4b81358ff077f9c96ba0880eaf93541eae94b4fa41dba66dab7fb0201cc9af7c75681e5719b0c95f + 0x0cfc9d5b5dcf702a1525f9d4ed1841e8eb8b34434cc82470dd35435f1dbdc73ffb51544b7500394eac9c7fa567868b495326075147a2d809ebbfd43273eeec91 + 0x0aa78894d894a15933969f5826347439e2c309f2049277a10066c9197840499498ad19ee3d1b291f932ec0890bbdafcec292c4f02a446670cd0084f997e25e2f + 0x00f400e3fe40f64032485aad9240ead45a8e1fc83ec08c96db861c0eca155ac898df8673e778e3ccaae8a0f9e6af415fe40e99b0cbc88d7610e536b6041b07fb + 0x604f384174c7ed3a0dc5f476569a978266a7943bd775449d1b8b27f4eb8beb99cdf095f9200a2dabb1bc5d68c3d96ea3d47f4d34499d59953669b6c8c093d578 + 0x4881345cbb299fa7c60ab2d16cb7fe7bf8d14675506ef6eb6037038b5b7092ea0a9e4d0b53ba3904edd99f86717d6ba81dffe44eb5b23c6fd22c91ab73c33021 + 0xee3d4cc17633afe7e1794fcfd728e0643325e3d130eb1daa39c0c5cb05a200b43876117a182cabdcc3795632aa529473a0c8245f9e4f6e43e54c3f1da28bcb82 + 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)" + cost: 1000000 + epoch: "3.0" diff --git a/deployments/default.mainnet-plan.yaml b/deployments/default.mainnet-plan.yaml index 9b23be0..fd2163b 100644 --- a/deployments/default.mainnet-plan.yaml +++ b/deployments/default.mainnet-plan.yaml @@ -10,85 +10,91 @@ plan: transactions: - contract-publish: contract-name: wormhole-traits-v1 - expected-sender: SP19F0S4GN8CJQ4K9PKWRBVE00G2C86QTPTRXZ7GP - cost: 1486613 + expected-sender: SP3R4F6C1J3JQWWCVZ3S7FRRYPMYG6ZW6RZK31FXY + cost: 7070 path: contracts/wormhole/wormhole-traits-v1.clar anchor-block-only: true - clarity-version: 2 + clarity-version: 3 - contract-publish: contract-name: pyth-traits-v1 - expected-sender: SP19F0S4GN8CJQ4K9PKWRBVE00G2C86QTPTRXZ7GP - cost: 1487019 + expected-sender: SP3R4F6C1J3JQWWCVZ3S7FRRYPMYG6ZW6RZK31FXY + cost: 20710 path: contracts/pyth-traits-v1.clar anchor-block-only: true - clarity-version: 2 + clarity-version: 3 - contract-publish: - contract-name: pyth-governance-v1 - expected-sender: SP19F0S4GN8CJQ4K9PKWRBVE00G2C86QTPTRXZ7GP - cost: 1495228 - path: contracts/pyth-governance-v1.clar + contract-name: pyth-governance-v2 + expected-sender: SP3R4F6C1J3JQWWCVZ3S7FRRYPMYG6ZW6RZK31FXY + cost: 266550 + path: contracts/pyth-governance-v2.clar anchor-block-only: true - clarity-version: 2 + clarity-version: 3 - contract-publish: - contract-name: pyth-oracle-v1 - expected-sender: SP19F0S4GN8CJQ4K9PKWRBVE00G2C86QTPTRXZ7GP - cost: 1487263 - path: contracts/pyth-oracle-v1.clar + contract-name: pyth-oracle-v3 + expected-sender: SP3R4F6C1J3JQWWCVZ3S7FRRYPMYG6ZW6RZK31FXY + cost: 35980 + path: contracts/pyth-oracle-v3.clar anchor-block-only: true - clarity-version: 2 + clarity-version: 3 - contract-publish: - contract-name: pyth-pnau-decoder-v1 - expected-sender: SP19F0S4GN8CJQ4K9PKWRBVE00G2C86QTPTRXZ7GP - cost: 1492627 - path: contracts/pyth-pnau-decoder-v1.clar + contract-name: pyth-pnau-decoder-v2 + expected-sender: SP3R4F6C1J3JQWWCVZ3S7FRRYPMYG6ZW6RZK31FXY + cost: 162850 + path: contracts/pyth-pnau-decoder-v2.clar anchor-block-only: true - clarity-version: 2 + clarity-version: 3 - contract-publish: - contract-name: pyth-store-v1 - expected-sender: SP19F0S4GN8CJQ4K9PKWRBVE00G2C86QTPTRXZ7GP - cost: 1487263 - path: contracts/pyth-store-v1.clar + contract-name: pyth-storage-v3 + expected-sender: SP3R4F6C1J3JQWWCVZ3S7FRRYPMYG6ZW6RZK31FXY + cost: 46140 + path: contracts/pyth-storage-v3.clar anchor-block-only: true - clarity-version: 2 + clarity-version: 3 - contract-publish: - contract-name: wormhole-core-v1 - expected-sender: SP19F0S4GN8CJQ4K9PKWRBVE00G2C86QTPTRXZ7GP - cost: 1494091 - path: contracts/wormhole/wormhole-core-v1.clar + contract-name: wormhole-core-v3 + expected-sender: SP3R4F6C1J3JQWWCVZ3S7FRRYPMYG6ZW6RZK31FXY + cost: 237610 + path: contracts/wormhole/wormhole-core-v3.clar anchor-block-only: true - clarity-version: 2 - - contract-publish: - contract-name: pyth-helper-v1 - expected-sender: SP19F0S4GN8CJQ4K9PKWRBVE00G2C86QTPTRXZ7GP - cost: 1486613 - path: contracts/pyth-helper-v1.clar - anchor-block-only: true - clarity-version: 2 - epoch: "2.4" + clarity-version: 3 + epoch: "3.0" - id: 1 transactions: - contract-call: - contract-id: SP19F0S4GN8CJQ4K9PKWRBVE00G2C86QTPTRXZ7GP.wormhole-core-v1 - expected-sender: SP19F0S4GN8CJQ4K9PKWRBVE00G2C86QTPTRXZ7GP - method: update-guardians-set - parameters: - - 0x010000000001007ac31b282c2aeeeb37f3385ee0de5f8e421d30b9e5ae8ba3d4375c1c77a86e77159bb697d9c456d6f8c02d22a94b1279b65b0d6a9957e7d3857423845ac758e300610ac1d2000000030001000000000000000000000000000000000000000000000000000000000000000400000000000005390000000000000000000000000000000000000000000000000000000000436f7265020000000000011358cc3ae5c097b213ce3c81979e1b9f9570746aa5ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cdeb5f7389fa26941519f0863349c223b73a6ddee774a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d - - '(list 0x2a953a2e8b1052eb70c1d7b556b087deed598b55608396686c1c811b9796c763078687ce10459f4f25fb7a0fbf8727bb0fb51e00820e93a123f652ee843cf08d 0x2766db08820e311b22e109801ab8ea505b12e3df3d91ebc87c999ffb6929d1abb0ade987c74aa37db26eea4086ee738a2f34a5594edb8760da0eac5be356b731 0x54177ff4a8329520b76efd86f8bfce5c942554db16e673267dc1133b3f5e230b2d8cbf90fe274946045d4491de288d736680edc2ee9ee5b1b15416b0a34806c4 0x7fa3e98fcc2621337b217b61408a98facaabd25bad2b158438728ce863c14708cfcda1f3b50a16ca0211199079fb338d479a54546ec3c5f775af23a7d7f4fb24 0x0bdcbccc0297c2a4f92a7c39358c42f22a8ed700a78bd05c39c8b61aaf2338e825b6c0d26d1f2a2ae4129cd751201f73d7234c753bd0735212a5288b19748fd2 0xcfd90084be68de514fe14a7c281f492223f045566f859ea5c166d6e60bc650c23940909a8e96c2fbffbd15a598b4e6a5b5aa14c126bf58cc1a9e396fe7771965 0x8edf3f9d997357a0e2c916ee090392c3a645ebac4f6cd8f826d3ecc0173b33bf06b7c14e8002fc9a5d01af9824a5cb3778472cd477e0ab378091448bca6f0417 0x6200deeadd3b4e2cd0a168d42e720a3b88d3ce4769ff2808086e6fd36110fc05c591ccbf91368609dc3b21203e58c9883d4f580085469bef8d5bdcd26eb8ad69 0xd5225476d7849b362226952ffc561bab99832f3f8b99741f6d81bbeaffa8e7f6e54a85e5029a3b510707eaa9684df496e4b1268075ad0328693a30bf1b1e0033 0xd9fa78b5b958bea1929080b8ad96dc555d34b051a27aebf711eb1186b807b0448316d994606ac807121838d6c41a58f308bc6307acdf69491fa4b17282f3e66f 0xcc64af75ec2e2741fb9af9f6191cb9ee187d6d26af4d1e96d7bab47e6ec09be12d3192030dc4bbf54d1da319a7a2acfc7a9dd4c644af6646a4aaa02b1024bbab 0xb5943b6e284682ad2e011d6962d41febf86af2f5fc0c9c8f4b81358ff077f9c96ba0880eaf93541eae94b4fa41dba66dab7fb0201cc9af7c75681e5719b0c95f 0x0cfc9d5b5dcf702a1525f9d4ed1841e8eb8b34434cc82470dd35435f1dbdc73ffb51544b7500394eac9c7fa567868b495326075147a2d809ebbfd43273eeec91 0x0aa78894d894a15933969f5826347439e2c309f2049277a10066c9197840499498ad19ee3d1b291f932ec0890bbdafcec292c4f02a446670cd0084f997e25e2f 0x00f400e3fe40f64032485aad9240ead45a8e1fc83ec08c96db861c0eca155ac898df8673e778e3ccaae8a0f9e6af415fe40e99b0cbc88d7610e536b6041b07fb 0x604f384174c7ed3a0dc5f476569a978266a7943bd775449d1b8b27f4eb8beb99cdf095f9200a2dabb1bc5d68c3d96ea3d47f4d34499d59953669b6c8c093d578 0x4881345cbb299fa7c60ab2d16cb7fe7bf8d14675506ef6eb6037038b5b7092ea0a9e4d0b53ba3904edd99f86717d6ba81dffe44eb5b23c6fd22c91ab73c33021 0xee3d4cc17633afe7e1794fcfd728e0643325e3d130eb1daa39c0c5cb05a200b43876117a182cabdcc3795632aa529473a0c8245f9e4f6e43e54c3f1da28bcb82 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)' - cost: 1000000 - - contract-call: - contract-id: SP19F0S4GN8CJQ4K9PKWRBVE00G2C86QTPTRXZ7GP.wormhole-core-v1 - expected-sender: SP19F0S4GN8CJQ4K9PKWRBVE00G2C86QTPTRXZ7GP + contract-id: SP3R4F6C1J3JQWWCVZ3S7FRRYPMYG6ZW6RZK31FXY.wormhole-core-v3 + expected-sender: SP3R4F6C1J3JQWWCVZ3S7FRRYPMYG6ZW6RZK31FXY method: update-guardians-set parameters: - - 0x01000000010d0012e6b39c6da90c5dfd3c228edbb78c7a4c97c488ff8a346d161a91db067e51d638c17216f368aa9bdf4836b8645a98018ca67d2fec87d769cabfdf2406bf790a0002ef42b288091a670ef3556596f4f47323717882881eaf38e03345078d07a156f312b785b64dae6e9a87e3d32872f59cb1931f728cecf511762981baf48303668f0103cef2616b84c4e511ff03329e0853f1bd7ee9ac5ba71d70a4d76108bddf94f69c2a8a84e4ee94065e8003c334e899184943634e12043d0dda78d93996da073d190104e76d166b9dac98f602107cc4b44ac82868faf00b63df7d24f177aa391e050902413b71046434e67c770b19aecdf7fce1d1435ea0be7262e3e4c18f50ddc8175c0105d9450e8216d741e0206a50f93b750a47e0a258b80eb8fed1314cc300b3d905092de25cd36d366097b7103ae2d184121329ba3aa2d7c6cc53273f11af14798110010687477c8deec89d36a23e7948feb074df95362fc8dcbd8ae910ac556a1dee1e755c56b9db5d710c940938ed79bc1895a3646523a58bc55f475a23435a373ecfdd0107fb06734864f79def4e192497362513171530daea81f07fbb9f698afe7e66c6d44db21323144f2657d4a5386a954bb94eef9f64148c33aef6e477eafa2c5c984c01088769e82216310d1827d9bd48645ec23e90de4ef8a8de99e2d351d1df318608566248d80cdc83bdcac382b3c30c670352be87f9069aab5037d0b747208eae9c650109e9796497ff9106d0d1c62e184d83716282870cef61a1ee13d6fc485b521adcce255c96f7d1bca8d8e7e7d454b65783a830bddc9d94092091a268d311ecd84c26010c468c9fb6d41026841ff9f8d7368fa309d4dbea3ea4bbd2feccf94a92cc8a20a226338a8e2126cd16f70eaf15b4fc9be2c3fa19def14e071956a605e9d1ac4162010e23fcb6bd445b7c25afb722250c1acbc061ed964ba9de1326609ae012acdfb96942b2a102a2de99ab96327859a34a2b49a767dbdb62e0a1fb26af60fe44fd496a00106bb0bac77ac68b347645f2fb1ad789ea9bd76fb9b2324f25ae06f97e65246f142df717f662e73948317182c62ce87d79c73def0dba12e5242dfc038382812cfe00126da03c5e56cb15aeeceadc1e17a45753ab4dc0ec7bf6a75ca03143ed4a294f6f61bc3f478a457833e43084ecd7c985bf2f55a55f168aac0e030fc49e845e497101626e9d9a5d9e343f00010000000000000000000000000000000000000000000000000000000000000004c1759167c43f501c2000000000000000000000000000000000000000000000000000000000436f7265020000000000021358cc3ae5c097b213ce3c81979e1b9f9570746aa5ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cd66b9590e1c41e0b226937bf9217d1d67fd4e91f574a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d - - '(list 0x2a953a2e8b1052eb70c1d7b556b087deed598b55608396686c1c811b9796c763078687ce10459f4f25fb7a0fbf8727bb0fb51e00820e93a123f652ee843cf08d 0x2766db08820e311b22e109801ab8ea505b12e3df3d91ebc87c999ffb6929d1abb0ade987c74aa37db26eea4086ee738a2f34a5594edb8760da0eac5be356b731 0x54177ff4a8329520b76efd86f8bfce5c942554db16e673267dc1133b3f5e230b2d8cbf90fe274946045d4491de288d736680edc2ee9ee5b1b15416b0a34806c4 0x7fa3e98fcc2621337b217b61408a98facaabd25bad2b158438728ce863c14708cfcda1f3b50a16ca0211199079fb338d479a54546ec3c5f775af23a7d7f4fb24 0x0bdcbccc0297c2a4f92a7c39358c42f22a8ed700a78bd05c39c8b61aaf2338e825b6c0d26d1f2a2ae4129cd751201f73d7234c753bd0735212a5288b19748fd2 0xcfd90084be68de514fe14a7c281f492223f045566f859ea5c166d6e60bc650c23940909a8e96c2fbffbd15a598b4e6a5b5aa14c126bf58cc1a9e396fe7771965 0x8edf3f9d997357a0e2c916ee090392c3a645ebac4f6cd8f826d3ecc0173b33bf06b7c14e8002fc9a5d01af9824a5cb3778472cd477e0ab378091448bca6f0417 0x 0xd5225476d7849b362226952ffc561bab99832f3f8b99741f6d81bbeaffa8e7f6e54a85e5029a3b510707eaa9684df496e4b1268075ad0328693a30bf1b1e0033 0xd9fa78b5b958bea1929080b8ad96dc555d34b051a27aebf711eb1186b807b0448316d994606ac807121838d6c41a58f308bc6307acdf69491fa4b17282f3e66f 0xcc64af75ec2e2741fb9af9f6191cb9ee187d6d26af4d1e96d7bab47e6ec09be12d3192030dc4bbf54d1da319a7a2acfc7a9dd4c644af6646a4aaa02b1024bbab 0xb5943b6e284682ad2e011d6962d41febf86af2f5fc0c9c8f4b81358ff077f9c96ba0880eaf93541eae94b4fa41dba66dab7fb0201cc9af7c75681e5719b0c95f 0x0cfc9d5b5dcf702a1525f9d4ed1841e8eb8b34434cc82470dd35435f1dbdc73ffb51544b7500394eac9c7fa567868b495326075147a2d809ebbfd43273eeec91 0x0aa78894d894a15933969f5826347439e2c309f2049277a10066c9197840499498ad19ee3d1b291f932ec0890bbdafcec292c4f02a446670cd0084f997e25e2f 0x00f400e3fe40f64032485aad9240ead45a8e1fc83ec08c96db861c0eca155ac898df8673e778e3ccaae8a0f9e6af415fe40e99b0cbc88d7610e536b6041b07fb 0x604f384174c7ed3a0dc5f476569a978266a7943bd775449d1b8b27f4eb8beb99cdf095f9200a2dabb1bc5d68c3d96ea3d47f4d34499d59953669b6c8c093d578 0x4881345cbb299fa7c60ab2d16cb7fe7bf8d14675506ef6eb6037038b5b7092ea0a9e4d0b53ba3904edd99f86717d6ba81dffe44eb5b23c6fd22c91ab73c33021 0xee3d4cc17633afe7e1794fcfd728e0643325e3d130eb1daa39c0c5cb05a200b43876117a182cabdcc3795632aa529473a0c8245f9e4f6e43e54c3f1da28bcb82 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)' + - 0x01000000020d00ce45474d9e1b1e7790a2d210871e195db53a70ffd6f237cfe70e2686a32859ac43c84a332267a8ef66f59719cf91cc8df0101fd7c36aa1878d5139241660edc0010375cc906156ae530786661c0cd9aef444747bc3d8d5aa84cac6a6d2933d4e1a031cffa30383d4af8131e929d9f203f460b07309a647d6cd32ab1cc7724089392c000452305156cfc90343128f97e499311b5cae174f488ff22fbc09591991a0a73d8e6af3afb8a5968441d3ab8437836407481739e9850ad5c95e6acfcc871e951bc30105a7956eefc23e7c945a1966d5ddbe9e4be376c2f54e45e3d5da88c2f8692510c7429b1ea860ae94d929bd97e84923a18187e777aa3db419813a80deb84cc8d22b00061b2a4f3d2666608e0aa96737689e3ba5793810ff3a52ff28ad57d8efb20967735dc5537a2e43ef10f583d144c12a1606542c207f5b79af08c38656d3ac40713301086b62c8e130af3411b3c0d91b5b50dcb01ed5f293963f901fc36e7b0e50114dce203373b32eb45971cef8288e5d928d0ed51cd86e2a3006b0af6a65c396c009080009e93ab4d2c8228901a5f4525934000b2c26d1dc679a05e47fdf0ff3231d98fbc207103159ff4116df2832eea69b38275283434e6cd4a4af04d25fa7a82990b707010aa643f4cf615dfff06ffd65830f7f6cf6512dabc3690d5d9e210fdc712842dc2708b8b2c22e224c99280cd25e5e8bfb40e3d1c55b8c41774e287c1e2c352aecfc010b89c1e85faa20a30601964ccc6a79c0ae53cfd26fb10863db37783428cd91390a163346558239db3cd9d420cfe423a0df84c84399790e2e308011b4b63e6b8015010ca31dcb564ac81a053a268d8090e72097f94f366711d0c5d13815af1ec7d47e662e2d1bde22678113d15963da100b668ba26c0c325970d07114b83c5698f46097010dc9fda39c0d592d9ed92cd22b5425cc6b37430e236f02d0d1f8a2ef45a00bde26223c0a6eb363c8b25fd3bf57234a1d9364976cefb8360e755a267cbbb674b39501108db01e444ab1003dd8b6c96f8eb77958b40ba7a85fefecf32ad00b7a47c0ae7524216262495977e09c0989dd50f280c21453d3756843608eacd17f4fdfe47600001261025228ef5af837cb060bcd986fcfa84ccef75b3fa100468cfd24e7fadf99163938f3b841a33496c2706d0208faab088bd155b2e20fd74c625bb1cc8c43677a0163c53c409e0c5dfa000100000000000000000000000000000000000000000000000000000000000000046c5a054d7833d1e42000000000000000000000000000000000000000000000000000000000436f7265020000000000031358cc3ae5c097b213ce3c81979e1b9f9570746aa5ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cd15e7caf07c4e3dc8e7c469f92c8cd88fb8005a2074a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d + - "(list 0x2a953a2e8b1052eb70c1d7b556b087deed598b55608396686c1c811b9796c763078687ce10459f4f25fb7a0fbf8727bb0fb51e00820e93a123f652ee843cf08d 0x2766db08820e311b22e109801ab8ea505b12e3df3d91ebc87c999ffb6929d1abb0ade987c74aa37db26eea4086ee738a2f34a5594edb8760da0eac5be356b731 0x54177ff4a8329520b76efd86f8bfce5c942554db16e673267dc1133b3f5e230b2d8cbf90fe274946045d4491de288d736680edc2ee9ee5b1b15416b0a34806c4 0x7fa3e98fcc2621337b217b61408a98facaabd25bad2b158438728ce863c14708cfcda1f3b50a16ca0211199079fb338d479a54546ec3c5f775af23a7d7f4fb24 0x0bdcbccc0297c2a4f92a7c39358c42f22a8ed700a78bd05c39c8b61aaf2338e825b6c0d26d1f2a2ae4129cd751201f73d7234c753bd0735212a5288b19748fd2 0xcfd90084be68de514fe14a7c281f492223f045566f859ea5c166d6e60bc650c23940909a8e96c2fbffbd15a598b4e6a5b5aa14c126bf58cc1a9e396fe7771965 0x8edf3f9d997357a0e2c916ee090392c3a645ebac4f6cd8f826d3ecc0173b33bf06b7c14e8002fc9a5d01af9824a5cb3778472cd477e0ab378091448bca6f0417 0x47b15c5039dcb2850b59bea323db662cc597dd7d48fe6b8dbb6cd8704c45854bf0e92fa267c844ba1a700105e157c8099d55c82316cb5e50c56a5d0920ff91c2 0xd5225476d7849b362226952ffc561bab99832f3f8b99741f6d81bbeaffa8e7f6e54a85e5029a3b510707eaa9684df496e4b1268075ad0328693a30bf1b1e0033 0xd9fa78b5b958bea1929080b8ad96dc555d34b051a27aebf711eb1186b807b0448316d994606ac807121838d6c41a58f308bc6307acdf69491fa4b17282f3e66f 0xcc64af75ec2e2741fb9af9f6191cb9ee187d6d26af4d1e96d7bab47e6ec09be12d3192030dc4bbf54d1da319a7a2acfc7a9dd4c644af6646a4aaa02b1024bbab 0xb5943b6e284682ad2e011d6962d41febf86af2f5fc0c9c8f4b81358ff077f9c96ba0880eaf93541eae94b4fa41dba66dab7fb0201cc9af7c75681e5719b0c95f 0x0cfc9d5b5dcf702a1525f9d4ed1841e8eb8b34434cc82470dd35435f1dbdc73ffb51544b7500394eac9c7fa567868b495326075147a2d809ebbfd43273eeec91 0x0aa78894d894a15933969f5826347439e2c309f2049277a10066c9197840499498ad19ee3d1b291f932ec0890bbdafcec292c4f02a446670cd0084f997e25e2f 0x00f400e3fe40f64032485aad9240ead45a8e1fc83ec08c96db861c0eca155ac898df8673e778e3ccaae8a0f9e6af415fe40e99b0cbc88d7610e536b6041b07fb 0x604f384174c7ed3a0dc5f476569a978266a7943bd775449d1b8b27f4eb8beb99cdf095f9200a2dabb1bc5d68c3d96ea3d47f4d34499d59953669b6c8c093d578 0x4881345cbb299fa7c60ab2d16cb7fe7bf8d14675506ef6eb6037038b5b7092ea0a9e4d0b53ba3904edd99f86717d6ba81dffe44eb5b23c6fd22c91ab73c33021 0xee3d4cc17633afe7e1794fcfd728e0643325e3d130eb1daa39c0c5cb05a200b43876117a182cabdcc3795632aa529473a0c8245f9e4f6e43e54c3f1da28bcb82 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)" cost: 1000000 - contract-call: - contract-id: SP19F0S4GN8CJQ4K9PKWRBVE00G2C86QTPTRXZ7GP.wormhole-core-v1 - expected-sender: SP19F0S4GN8CJQ4K9PKWRBVE00G2C86QTPTRXZ7GP + contract-id: SP3R4F6C1J3JQWWCVZ3S7FRRYPMYG6ZW6RZK31FXY.wormhole-core-v3 + expected-sender: SP3R4F6C1J3JQWWCVZ3S7FRRYPMYG6ZW6RZK31FXY method: update-guardians-set parameters: - - 0x01000000020d00ce45474d9e1b1e7790a2d210871e195db53a70ffd6f237cfe70e2686a32859ac43c84a332267a8ef66f59719cf91cc8df0101fd7c36aa1878d5139241660edc0010375cc906156ae530786661c0cd9aef444747bc3d8d5aa84cac6a6d2933d4e1a031cffa30383d4af8131e929d9f203f460b07309a647d6cd32ab1cc7724089392c000452305156cfc90343128f97e499311b5cae174f488ff22fbc09591991a0a73d8e6af3afb8a5968441d3ab8437836407481739e9850ad5c95e6acfcc871e951bc30105a7956eefc23e7c945a1966d5ddbe9e4be376c2f54e45e3d5da88c2f8692510c7429b1ea860ae94d929bd97e84923a18187e777aa3db419813a80deb84cc8d22b00061b2a4f3d2666608e0aa96737689e3ba5793810ff3a52ff28ad57d8efb20967735dc5537a2e43ef10f583d144c12a1606542c207f5b79af08c38656d3ac40713301086b62c8e130af3411b3c0d91b5b50dcb01ed5f293963f901fc36e7b0e50114dce203373b32eb45971cef8288e5d928d0ed51cd86e2a3006b0af6a65c396c009080009e93ab4d2c8228901a5f4525934000b2c26d1dc679a05e47fdf0ff3231d98fbc207103159ff4116df2832eea69b38275283434e6cd4a4af04d25fa7a82990b707010aa643f4cf615dfff06ffd65830f7f6cf6512dabc3690d5d9e210fdc712842dc2708b8b2c22e224c99280cd25e5e8bfb40e3d1c55b8c41774e287c1e2c352aecfc010b89c1e85faa20a30601964ccc6a79c0ae53cfd26fb10863db37783428cd91390a163346558239db3cd9d420cfe423a0df84c84399790e2e308011b4b63e6b8015010ca31dcb564ac81a053a268d8090e72097f94f366711d0c5d13815af1ec7d47e662e2d1bde22678113d15963da100b668ba26c0c325970d07114b83c5698f46097010dc9fda39c0d592d9ed92cd22b5425cc6b37430e236f02d0d1f8a2ef45a00bde26223c0a6eb363c8b25fd3bf57234a1d9364976cefb8360e755a267cbbb674b39501108db01e444ab1003dd8b6c96f8eb77958b40ba7a85fefecf32ad00b7a47c0ae7524216262495977e09c0989dd50f280c21453d3756843608eacd17f4fdfe47600001261025228ef5af837cb060bcd986fcfa84ccef75b3fa100468cfd24e7fadf99163938f3b841a33496c2706d0208faab088bd155b2e20fd74c625bb1cc8c43677a0163c53c409e0c5dfa000100000000000000000000000000000000000000000000000000000000000000046c5a054d7833d1e42000000000000000000000000000000000000000000000000000000000436f7265020000000000031358cc3ae5c097b213ce3c81979e1b9f9570746aa5ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cd15e7caf07c4e3dc8e7c469f92c8cd88fb8005a2074a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d - - '(list 0x2a953a2e8b1052eb70c1d7b556b087deed598b55608396686c1c811b9796c763078687ce10459f4f25fb7a0fbf8727bb0fb51e00820e93a123f652ee843cf08d 0x2766db08820e311b22e109801ab8ea505b12e3df3d91ebc87c999ffb6929d1abb0ade987c74aa37db26eea4086ee738a2f34a5594edb8760da0eac5be356b731 0x54177ff4a8329520b76efd86f8bfce5c942554db16e673267dc1133b3f5e230b2d8cbf90fe274946045d4491de288d736680edc2ee9ee5b1b15416b0a34806c4 0x7fa3e98fcc2621337b217b61408a98facaabd25bad2b158438728ce863c14708cfcda1f3b50a16ca0211199079fb338d479a54546ec3c5f775af23a7d7f4fb24 0x0bdcbccc0297c2a4f92a7c39358c42f22a8ed700a78bd05c39c8b61aaf2338e825b6c0d26d1f2a2ae4129cd751201f73d7234c753bd0735212a5288b19748fd2 0xcfd90084be68de514fe14a7c281f492223f045566f859ea5c166d6e60bc650c23940909a8e96c2fbffbd15a598b4e6a5b5aa14c126bf58cc1a9e396fe7771965 0x8edf3f9d997357a0e2c916ee090392c3a645ebac4f6cd8f826d3ecc0173b33bf06b7c14e8002fc9a5d01af9824a5cb3778472cd477e0ab378091448bca6f0417 0x47b15c5039dcb2850b59bea323db662cc597dd7d48fe6b8dbb6cd8704c45854bf0e92fa267c844ba1a700105e157c8099d55c82316cb5e50c56a5d0920ff91c2 0xd5225476d7849b362226952ffc561bab99832f3f8b99741f6d81bbeaffa8e7f6e54a85e5029a3b510707eaa9684df496e4b1268075ad0328693a30bf1b1e0033 0xd9fa78b5b958bea1929080b8ad96dc555d34b051a27aebf711eb1186b807b0448316d994606ac807121838d6c41a58f308bc6307acdf69491fa4b17282f3e66f 0xcc64af75ec2e2741fb9af9f6191cb9ee187d6d26af4d1e96d7bab47e6ec09be12d3192030dc4bbf54d1da319a7a2acfc7a9dd4c644af6646a4aaa02b1024bbab 0xb5943b6e284682ad2e011d6962d41febf86af2f5fc0c9c8f4b81358ff077f9c96ba0880eaf93541eae94b4fa41dba66dab7fb0201cc9af7c75681e5719b0c95f 0x0cfc9d5b5dcf702a1525f9d4ed1841e8eb8b34434cc82470dd35435f1dbdc73ffb51544b7500394eac9c7fa567868b495326075147a2d809ebbfd43273eeec91 0x0aa78894d894a15933969f5826347439e2c309f2049277a10066c9197840499498ad19ee3d1b291f932ec0890bbdafcec292c4f02a446670cd0084f997e25e2f 0x00f400e3fe40f64032485aad9240ead45a8e1fc83ec08c96db861c0eca155ac898df8673e778e3ccaae8a0f9e6af415fe40e99b0cbc88d7610e536b6041b07fb 0x604f384174c7ed3a0dc5f476569a978266a7943bd775449d1b8b27f4eb8beb99cdf095f9200a2dabb1bc5d68c3d96ea3d47f4d34499d59953669b6c8c093d578 0x4881345cbb299fa7c60ab2d16cb7fe7bf8d14675506ef6eb6037038b5b7092ea0a9e4d0b53ba3904edd99f86717d6ba81dffe44eb5b23c6fd22c91ab73c33021 0xee3d4cc17633afe7e1794fcfd728e0643325e3d130eb1daa39c0c5cb05a200b43876117a182cabdcc3795632aa529473a0c8245f9e4f6e43e54c3f1da28bcb82 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)' + # VAA of 4th guardians rotation + - 0x01000000030d03d4a37a6ff4361d91714730831e9d49785f61624c8f348a9c6c1d82bc1d98cadc5e936338204445c6250bb4928f3f3e165ad47ca03a5d63111168a2de4576856301049a5df10464ea4e1961589fd30fc18d1970a7a2ffaad617e56a0f7777f25275253af7d10a0f0f2494dc6e99fc80e444ab9ebbbee252ded2d5dcb50cbf7a54bb5a01055f4603b553b9ba9e224f9c55c7bca3da00abb10abd19e0081aecd3b352be061a70f79f5f388ebe5190838ef3cd13a2f22459c9a94206883b739c90b40d5d74640006a8fade3997f650a36e46bceb1f609edff201ab32362266f166c5c7da713f6a19590c20b68ed3f0119cb24813c727560ede086b3d610c2d7a1efa66f655bad90900080f5e495a75ea52241c59d145c616bfac01e57182ad8d784cbcc9862ed3afb60c0983ccbc690553961ffcf115a0c917367daada8e60be2cbb8b8008bac6341a8c010935ab11e0eea28b87a1edc5ccce3f1fac25f75b5f640fe6b0673a7cd74513c9dc01c544216cf364cc9993b09fda612e0cd1ced9c00fb668b872a16a64ebb55d27010ab2bc39617a2396e7defa24cd7c22f42dc31f3c42ffcd9d1472b02df8468a4d0563911e8fb6a4b5b0ce0bd505daa53779b08ff660967b31f246126ed7f6f29a7e000bdb6d3fd7b33bdc9ac3992916eb4aacb97e7e21d19649e7fa28d2dd6e337937e4274516a96c13ac7a8895da9f91948ea3a09c25f44b982c62ce8842b58e20c8a9000d3d1b19c8bb000856b6610b9d28abde6c35cb7705c6ca5db711f7be96d60eed9d72cfa402a6bfe8bf0496dbc7af35796fc768da51a067b95941b3712dce8ae1e7010ec80085033157fd1a5628fc0c56267469a86f0e5a66d7dede1ad4ce74ecc3dff95b60307a39c3bfbeedc915075070da30d0395def9635130584f709b3885e1bdc0010fc480eb9ee715a2d151b23722b48b42581d7f4001fc1696c75425040bfc1ffc5394fe418adb2b64bd3dc692efda4cc408163677dbe233b16bcdabb853a20843301118ee9e115e1a0c981f19d0772b850e666591322da742a9a12cce9f52a5665bd474abdd59c580016bee8aae67fdf39b315be2528d12eec3a652910e03cc4c6fa3801129d0d1e2e429e969918ec163d16a7a5b2c6729aa44af5dccad07d25d19891556a79b574f42d9adbd9e2a9ae5a6b8750331d2fccb328dd94c3bf8791ee1bfe85aa00661e99781981faea00010000000000000000000000000000000000000000000000000000000000000004fd4c6c55ec8dfd342000000000000000000000000000000000000000000000000000000000436f726502000000000004135893b5a76c3f739645648885bdccc06cd70a3cd3ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cd15e7caf07c4e3dc8e7c469f92c8cd88fb8005a2074a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d + # Uncompressed public keys of selected guardians: RockawayX, Staked, Figment, ChainodeTech, Inotel, HashQuark, ChainLayer, xLabs, Forbole, StakingFund, MoonletWallet, P2PValidator, 01node, MCFV2MAINNET, Everstake, ChorusOne, syncnode, Triton, StakingFacilities, cost: 5960 + - "(list + 0x9a1e801daa25d9808e70aae9981353086f958955cc94ef33a461b0e596feaef90a8474dd10cf6ae967143f86105c16d6304a3d268ea952fda9389139d4bb9da1 + 0x2766db08820e311b22e109801ab8ea505b12e3df3d91ebc87c999ffb6929d1abb0ade987c74aa37db26eea4086ee738a2f34a5594edb8760da0eac5be356b731 + 0x54177ff4a8329520b76efd86f8bfce5c942554db16e673267dc1133b3f5e230b2d8cbf90fe274946045d4491de288d736680edc2ee9ee5b1b15416b0a34806c4 + 0x7fa3e98fcc2621337b217b61408a98facaabd25bad2b158438728ce863c14708cfcda1f3b50a16ca0211199079fb338d479a54546ec3c5f775af23a7d7f4fb24 + 0x0bdcbccc0297c2a4f92a7c39358c42f22a8ed700a78bd05c39c8b61aaf2338e825b6c0d26d1f2a2ae4129cd751201f73d7234c753bd0735212a5288b19748fd2 + 0xcfd90084be68de514fe14a7c281f492223f045566f859ea5c166d6e60bc650c23940909a8e96c2fbffbd15a598b4e6a5b5aa14c126bf58cc1a9e396fe7771965 + 0x8edf3f9d997357a0e2c916ee090392c3a645ebac4f6cd8f826d3ecc0173b33bf06b7c14e8002fc9a5d01af9824a5cb3778472cd477e0ab378091448bca6f0417 + 0x47b15c5039dcb2850b59bea323db662cc597dd7d48fe6b8dbb6cd8704c45854bf0e92fa267c844ba1a700105e157c8099d55c82316cb5e50c56a5d0920ff91c2 + 0xd5225476d7849b362226952ffc561bab99832f3f8b99741f6d81bbeaffa8e7f6e54a85e5029a3b510707eaa9684df496e4b1268075ad0328693a30bf1b1e0033 + 0xd9fa78b5b958bea1929080b8ad96dc555d34b051a27aebf711eb1186b807b0448316d994606ac807121838d6c41a58f308bc6307acdf69491fa4b17282f3e66f + 0xcc64af75ec2e2741fb9af9f6191cb9ee187d6d26af4d1e96d7bab47e6ec09be12d3192030dc4bbf54d1da319a7a2acfc7a9dd4c644af6646a4aaa02b1024bbab + 0xb5943b6e284682ad2e011d6962d41febf86af2f5fc0c9c8f4b81358ff077f9c96ba0880eaf93541eae94b4fa41dba66dab7fb0201cc9af7c75681e5719b0c95f + 0x0cfc9d5b5dcf702a1525f9d4ed1841e8eb8b34434cc82470dd35435f1dbdc73ffb51544b7500394eac9c7fa567868b495326075147a2d809ebbfd43273eeec91 + 0x0aa78894d894a15933969f5826347439e2c309f2049277a10066c9197840499498ad19ee3d1b291f932ec0890bbdafcec292c4f02a446670cd0084f997e25e2f + 0x00f400e3fe40f64032485aad9240ead45a8e1fc83ec08c96db861c0eca155ac898df8673e778e3ccaae8a0f9e6af415fe40e99b0cbc88d7610e536b6041b07fb + 0x604f384174c7ed3a0dc5f476569a978266a7943bd775449d1b8b27f4eb8beb99cdf095f9200a2dabb1bc5d68c3d96ea3d47f4d34499d59953669b6c8c093d578 + 0x4881345cbb299fa7c60ab2d16cb7fe7bf8d14675506ef6eb6037038b5b7092ea0a9e4d0b53ba3904edd99f86717d6ba81dffe44eb5b23c6fd22c91ab73c33021 + 0xee3d4cc17633afe7e1794fcfd728e0643325e3d130eb1daa39c0c5cb05a200b43876117a182cabdcc3795632aa529473a0c8245f9e4f6e43e54c3f1da28bcb82 + 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)" cost: 1000000 - epoch: "2.4" + epoch: "3.0" diff --git a/deployments/default.simnet-plan.yaml b/deployments/default.simnet-plan.yaml new file mode 100644 index 0000000..1ebb6b2 --- /dev/null +++ b/deployments/default.simnet-plan.yaml @@ -0,0 +1,105 @@ +--- +id: 0 +name: "Simulated deployment, used as a default for `clarinet console`, `clarinet test` and `clarinet check`" +network: simnet +genesis: + wallets: + - name: deployer + address: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM + balance: "100000000000000" + - name: faucet + address: STNHKEPYEPJ8ET55ZZ0M5A34J0R3N5FM2CMMMAZ6 + balance: "100000000000000" + - name: wallet_1 + address: ST1SJ3DTE5DN7X54YDH5D64R3BCB6A2AG2ZQ8YPD5 + balance: "100000000000000" + - name: wallet_2 + address: ST2CY5V39NHDPWSXMW9QDT3HC3GD6Q6XX4CFRK9AG + balance: "100000000000000" + - name: wallet_3 + address: ST2JHG361ZXG51QTKY2NQCVBPPRRE2KZB1HR05NNC + balance: "100000000000000" + - name: wallet_4 + address: ST2NEB84ASENDXKYGJPQW86YXQCEFEX2ZQPG87ND + balance: "100000000000000" + - name: wallet_5 + address: ST2REHHS5J3CERCRBEPMGH7921Q6PYKAADT7JP2VB + balance: "100000000000000" + - name: wallet_6 + address: ST3AM1A56AK2C1XAFJ4115ZSV26EB49BVQ10MGCS0 + balance: "100000000000000" + - name: wallet_7 + address: ST3PF13W7Z0RRM42A8VZRVFQ75SV1K26RXEP8YGKJ + balance: "100000000000000" + - name: wallet_8 + address: ST3NBRSFKX28FQ2ZJ1MAKX58HKHSDGNV5N7R21XCP + balance: "100000000000000" + contracts: + - costs + - pox + - pox-2 + - pox-3 + - pox-4 + - lockup + - costs-2 + - costs-3 + - cost-voting + - bns +plan: + batches: + - id: 0 + transactions: + - emulated-contract-publish: + contract-name: hk-cursor-v2 + emulated-sender: SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F + path: "./.cache/requirements/SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-cursor-v2.clar" + clarity-version: 2 + - emulated-contract-publish: + contract-name: hk-ecc-v1 + emulated-sender: SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F + path: "./.cache/requirements/SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-ecc-v1.clar" + clarity-version: 2 + - emulated-contract-publish: + contract-name: hk-merkle-tree-keccak160-v1 + emulated-sender: SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F + path: "./.cache/requirements/SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-merkle-tree-keccak160-v1.clar" + clarity-version: 2 + epoch: "2.4" + - id: 1 + transactions: + - emulated-contract-publish: + contract-name: wormhole-traits-v1 + emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM + path: contracts/wormhole/wormhole-traits-v1.clar + clarity-version: 3 + - emulated-contract-publish: + contract-name: pyth-traits-v1 + emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM + path: contracts/pyth-traits-v1.clar + clarity-version: 3 + - emulated-contract-publish: + contract-name: pyth-governance-v2 + emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM + path: contracts/pyth-governance-v2.clar + clarity-version: 3 + - emulated-contract-publish: + contract-name: pyth-oracle-v3 + emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM + path: contracts/pyth-oracle-v3.clar + clarity-version: 3 + - emulated-contract-publish: + contract-name: pyth-pnau-decoder-v2 + emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM + path: contracts/pyth-pnau-decoder-v2.clar + clarity-version: 3 + - emulated-contract-publish: + contract-name: pyth-storage-v3 + emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM + path: contracts/pyth-storage-v3.clar + clarity-version: 3 + - emulated-contract-publish: + contract-name: wormhole-core-v3 + emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM + path: contracts/wormhole/wormhole-core-v3.clar + clarity-version: 3 + epoch: "3.0" diff --git a/deployments/default.testnet-plan.yaml b/deployments/default.testnet-plan.yaml index 0e8b6aa..a3a3686 100644 --- a/deployments/default.testnet-plan.yaml +++ b/deployments/default.testnet-plan.yaml @@ -10,116 +10,118 @@ plan: transactions: - requirement-publish: contract-id: SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-cursor-v2 - remap-sender: ST3XVPDNZJ9QN0KJ327SYPKP6YS15PHJRBKWXTZ3M + remap-sender: ST3BZKCHK73FFAPVVRSZXMQAVV371ER8MMXBVWAZ6 remap-principals: - SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F: ST3XVPDNZJ9QN0KJ327SYPKP6YS15PHJRBKWXTZ3M - cost: 1000000 + SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F: ST3BZKCHK73FFAPVVRSZXMQAVV371ER8MMXBVWAZ6 + cost: 64640 path: "./.cache/requirements/SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-cursor-v2.clar" - clarity-version: 2 + clarity-version: 3 - requirement-publish: contract-id: SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-ecc-v1 - remap-sender: ST3XVPDNZJ9QN0KJ327SYPKP6YS15PHJRBKWXTZ3M + remap-sender: ST3BZKCHK73FFAPVVRSZXMQAVV371ER8MMXBVWAZ6 remap-principals: - SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F: ST3XVPDNZJ9QN0KJ327SYPKP6YS15PHJRBKWXTZ3M - cost: 1000000 + SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F: ST3BZKCHK73FFAPVVRSZXMQAVV371ER8MMXBVWAZ6 + cost: 9440 path: "./.cache/requirements/SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-ecc-v1.clar" - clarity-version: 2 + clarity-version: 3 - requirement-publish: contract-id: SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-merkle-tree-keccak160-v1 - remap-sender: ST3XVPDNZJ9QN0KJ327SYPKP6YS15PHJRBKWXTZ3M + remap-sender: ST3BZKCHK73FFAPVVRSZXMQAVV371ER8MMXBVWAZ6 remap-principals: - SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F: ST3XVPDNZJ9QN0KJ327SYPKP6YS15PHJRBKWXTZ3M - cost: 1000000 + SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F: ST3BZKCHK73FFAPVVRSZXMQAVV371ER8MMXBVWAZ6 + cost: 11000 path: "./.cache/requirements/SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-merkle-tree-keccak160-v1.clar" - clarity-version: 2 + clarity-version: 3 + epoch: "2.4" + - id: 1 + transactions: - contract-publish: contract-name: wormhole-traits-v1 - cost: 2899063 - expected-sender: ST3XVPDNZJ9QN0KJ327SYPKP6YS15PHJRBKWXTZ3M + expected-sender: ST3BZKCHK73FFAPVVRSZXMQAVV371ER8MMXBVWAZ6 + cost: 4920 path: contracts/wormhole/wormhole-traits-v1.clar anchor-block-only: true - clarity-version: 2 + clarity-version: 3 - contract-publish: contract-name: pyth-traits-v1 - cost: 2899963 - expected-sender: ST3XVPDNZJ9QN0KJ327SYPKP6YS15PHJRBKWXTZ3M + expected-sender: ST3BZKCHK73FFAPVVRSZXMQAVV371ER8MMXBVWAZ6 + cost: 16340 path: contracts/pyth-traits-v1.clar anchor-block-only: true - clarity-version: 2 + clarity-version: 3 - contract-publish: - contract-name: pyth-governance-v1 - cost: 2918145 - expected-sender: ST3XVPDNZJ9QN0KJ327SYPKP6YS15PHJRBKWXTZ3M - path: contracts/pyth-governance-v1.clar + contract-name: pyth-governance-v2 + expected-sender: ST3BZKCHK73FFAPVVRSZXMQAVV371ER8MMXBVWAZ6 + cost: 226570 + path: contracts/pyth-governance-v2.clar anchor-block-only: true - clarity-version: 2 + clarity-version: 3 - contract-publish: - contract-name: pyth-oracle-v1 - cost: 2900503 - expected-sender: ST3XVPDNZJ9QN0KJ327SYPKP6YS15PHJRBKWXTZ3M - path: contracts/pyth-oracle-v1.clar + contract-name: pyth-oracle-v3 + expected-sender: ST3BZKCHK73FFAPVVRSZXMQAVV371ER8MMXBVWAZ6 + cost: 21680 + path: contracts/pyth-oracle-v3.clar anchor-block-only: true - clarity-version: 2 + clarity-version: 3 - contract-publish: - contract-name: pyth-pnau-decoder-v1 - cost: 2912384 - expected-sender: ST3XVPDNZJ9QN0KJ327SYPKP6YS15PHJRBKWXTZ3M - path: contracts/pyth-pnau-decoder-v1.clar + contract-name: pyth-pnau-decoder-v2 + expected-sender: ST3BZKCHK73FFAPVVRSZXMQAVV371ER8MMXBVWAZ6 + cost: 160350 + path: contracts/pyth-pnau-decoder-v2.clar anchor-block-only: true - clarity-version: 2 + clarity-version: 3 - contract-publish: - contract-name: pyth-store-v1 - cost: 2900503 - expected-sender: ST3XVPDNZJ9QN0KJ327SYPKP6YS15PHJRBKWXTZ3M - path: contracts/pyth-store-v1.clar + contract-name: pyth-storage-v3 + expected-sender: ST3BZKCHK73FFAPVVRSZXMQAVV371ER8MMXBVWAZ6 + cost: 22430 + path: contracts/pyth-storage-v3.clar anchor-block-only: true - clarity-version: 2 + clarity-version: 3 - contract-publish: - contract-name: wormhole-core-v1 - cost: 2915625 - expected-sender: ST3XVPDNZJ9QN0KJ327SYPKP6YS15PHJRBKWXTZ3M - path: contracts/wormhole/wormhole-core-v1.clar + contract-name: wormhole-core-v3 + expected-sender: ST3BZKCHK73FFAPVVRSZXMQAVV371ER8MMXBVWAZ6 + cost: 197240 + path: contracts/wormhole/wormhole-core-v3.clar anchor-block-only: true - clarity-version: 2 - - contract-publish: - contract-name: pyth-helper-v1 - cost: 2899063 - expected-sender: ST3XVPDNZJ9QN0KJ327SYPKP6YS15PHJRBKWXTZ3M - path: contracts/pyth-helper-v1.clar - anchor-block-only: true - clarity-version: 2 - epoch: "2.4" - - id: 1 + clarity-version: 3 + epoch: "3.0" + - id: 2 transactions: - contract-call: - contract-id: ST3XVPDNZJ9QN0KJ327SYPKP6YS15PHJRBKWXTZ3M.wormhole-core-v1 - expected-sender: ST3XVPDNZJ9QN0KJ327SYPKP6YS15PHJRBKWXTZ3M - method: update-guardians-set - parameters: - - 0x010000000001007ac31b282c2aeeeb37f3385ee0de5f8e421d30b9e5ae8ba3d4375c1c77a86e77159bb697d9c456d6f8c02d22a94b1279b65b0d6a9957e7d3857423845ac758e300610ac1d2000000030001000000000000000000000000000000000000000000000000000000000000000400000000000005390000000000000000000000000000000000000000000000000000000000436f7265020000000000011358cc3ae5c097b213ce3c81979e1b9f9570746aa5ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cdeb5f7389fa26941519f0863349c223b73a6ddee774a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d - - '(list 0x2a953a2e8b1052eb70c1d7b556b087deed598b55608396686c1c811b9796c763078687ce10459f4f25fb7a0fbf8727bb0fb51e00820e93a123f652ee843cf08d 0x2766db08820e311b22e109801ab8ea505b12e3df3d91ebc87c999ffb6929d1abb0ade987c74aa37db26eea4086ee738a2f34a5594edb8760da0eac5be356b731 0x54177ff4a8329520b76efd86f8bfce5c942554db16e673267dc1133b3f5e230b2d8cbf90fe274946045d4491de288d736680edc2ee9ee5b1b15416b0a34806c4 0x7fa3e98fcc2621337b217b61408a98facaabd25bad2b158438728ce863c14708cfcda1f3b50a16ca0211199079fb338d479a54546ec3c5f775af23a7d7f4fb24 0x0bdcbccc0297c2a4f92a7c39358c42f22a8ed700a78bd05c39c8b61aaf2338e825b6c0d26d1f2a2ae4129cd751201f73d7234c753bd0735212a5288b19748fd2 0xcfd90084be68de514fe14a7c281f492223f045566f859ea5c166d6e60bc650c23940909a8e96c2fbffbd15a598b4e6a5b5aa14c126bf58cc1a9e396fe7771965 0x8edf3f9d997357a0e2c916ee090392c3a645ebac4f6cd8f826d3ecc0173b33bf06b7c14e8002fc9a5d01af9824a5cb3778472cd477e0ab378091448bca6f0417 0x6200deeadd3b4e2cd0a168d42e720a3b88d3ce4769ff2808086e6fd36110fc05c591ccbf91368609dc3b21203e58c9883d4f580085469bef8d5bdcd26eb8ad69 0xd5225476d7849b362226952ffc561bab99832f3f8b99741f6d81bbeaffa8e7f6e54a85e5029a3b510707eaa9684df496e4b1268075ad0328693a30bf1b1e0033 0xd9fa78b5b958bea1929080b8ad96dc555d34b051a27aebf711eb1186b807b0448316d994606ac807121838d6c41a58f308bc6307acdf69491fa4b17282f3e66f 0xcc64af75ec2e2741fb9af9f6191cb9ee187d6d26af4d1e96d7bab47e6ec09be12d3192030dc4bbf54d1da319a7a2acfc7a9dd4c644af6646a4aaa02b1024bbab 0xb5943b6e284682ad2e011d6962d41febf86af2f5fc0c9c8f4b81358ff077f9c96ba0880eaf93541eae94b4fa41dba66dab7fb0201cc9af7c75681e5719b0c95f 0x0cfc9d5b5dcf702a1525f9d4ed1841e8eb8b34434cc82470dd35435f1dbdc73ffb51544b7500394eac9c7fa567868b495326075147a2d809ebbfd43273eeec91 0x0aa78894d894a15933969f5826347439e2c309f2049277a10066c9197840499498ad19ee3d1b291f932ec0890bbdafcec292c4f02a446670cd0084f997e25e2f 0x00f400e3fe40f64032485aad9240ead45a8e1fc83ec08c96db861c0eca155ac898df8673e778e3ccaae8a0f9e6af415fe40e99b0cbc88d7610e536b6041b07fb 0x604f384174c7ed3a0dc5f476569a978266a7943bd775449d1b8b27f4eb8beb99cdf095f9200a2dabb1bc5d68c3d96ea3d47f4d34499d59953669b6c8c093d578 0x4881345cbb299fa7c60ab2d16cb7fe7bf8d14675506ef6eb6037038b5b7092ea0a9e4d0b53ba3904edd99f86717d6ba81dffe44eb5b23c6fd22c91ab73c33021 0xee3d4cc17633afe7e1794fcfd728e0643325e3d130eb1daa39c0c5cb05a200b43876117a182cabdcc3795632aa529473a0c8245f9e4f6e43e54c3f1da28bcb82 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)' - cost: 1000000 - - contract-call: - contract-id: ST3XVPDNZJ9QN0KJ327SYPKP6YS15PHJRBKWXTZ3M.wormhole-core-v1 - expected-sender: ST3XVPDNZJ9QN0KJ327SYPKP6YS15PHJRBKWXTZ3M - method: update-guardians-set - parameters: - - 0x01000000010d0012e6b39c6da90c5dfd3c228edbb78c7a4c97c488ff8a346d161a91db067e51d638c17216f368aa9bdf4836b8645a98018ca67d2fec87d769cabfdf2406bf790a0002ef42b288091a670ef3556596f4f47323717882881eaf38e03345078d07a156f312b785b64dae6e9a87e3d32872f59cb1931f728cecf511762981baf48303668f0103cef2616b84c4e511ff03329e0853f1bd7ee9ac5ba71d70a4d76108bddf94f69c2a8a84e4ee94065e8003c334e899184943634e12043d0dda78d93996da073d190104e76d166b9dac98f602107cc4b44ac82868faf00b63df7d24f177aa391e050902413b71046434e67c770b19aecdf7fce1d1435ea0be7262e3e4c18f50ddc8175c0105d9450e8216d741e0206a50f93b750a47e0a258b80eb8fed1314cc300b3d905092de25cd36d366097b7103ae2d184121329ba3aa2d7c6cc53273f11af14798110010687477c8deec89d36a23e7948feb074df95362fc8dcbd8ae910ac556a1dee1e755c56b9db5d710c940938ed79bc1895a3646523a58bc55f475a23435a373ecfdd0107fb06734864f79def4e192497362513171530daea81f07fbb9f698afe7e66c6d44db21323144f2657d4a5386a954bb94eef9f64148c33aef6e477eafa2c5c984c01088769e82216310d1827d9bd48645ec23e90de4ef8a8de99e2d351d1df318608566248d80cdc83bdcac382b3c30c670352be87f9069aab5037d0b747208eae9c650109e9796497ff9106d0d1c62e184d83716282870cef61a1ee13d6fc485b521adcce255c96f7d1bca8d8e7e7d454b65783a830bddc9d94092091a268d311ecd84c26010c468c9fb6d41026841ff9f8d7368fa309d4dbea3ea4bbd2feccf94a92cc8a20a226338a8e2126cd16f70eaf15b4fc9be2c3fa19def14e071956a605e9d1ac4162010e23fcb6bd445b7c25afb722250c1acbc061ed964ba9de1326609ae012acdfb96942b2a102a2de99ab96327859a34a2b49a767dbdb62e0a1fb26af60fe44fd496a00106bb0bac77ac68b347645f2fb1ad789ea9bd76fb9b2324f25ae06f97e65246f142df717f662e73948317182c62ce87d79c73def0dba12e5242dfc038382812cfe00126da03c5e56cb15aeeceadc1e17a45753ab4dc0ec7bf6a75ca03143ed4a294f6f61bc3f478a457833e43084ecd7c985bf2f55a55f168aac0e030fc49e845e497101626e9d9a5d9e343f00010000000000000000000000000000000000000000000000000000000000000004c1759167c43f501c2000000000000000000000000000000000000000000000000000000000436f7265020000000000021358cc3ae5c097b213ce3c81979e1b9f9570746aa5ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cd66b9590e1c41e0b226937bf9217d1d67fd4e91f574a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d - - '(list 0x2a953a2e8b1052eb70c1d7b556b087deed598b55608396686c1c811b9796c763078687ce10459f4f25fb7a0fbf8727bb0fb51e00820e93a123f652ee843cf08d 0x2766db08820e311b22e109801ab8ea505b12e3df3d91ebc87c999ffb6929d1abb0ade987c74aa37db26eea4086ee738a2f34a5594edb8760da0eac5be356b731 0x54177ff4a8329520b76efd86f8bfce5c942554db16e673267dc1133b3f5e230b2d8cbf90fe274946045d4491de288d736680edc2ee9ee5b1b15416b0a34806c4 0x7fa3e98fcc2621337b217b61408a98facaabd25bad2b158438728ce863c14708cfcda1f3b50a16ca0211199079fb338d479a54546ec3c5f775af23a7d7f4fb24 0x0bdcbccc0297c2a4f92a7c39358c42f22a8ed700a78bd05c39c8b61aaf2338e825b6c0d26d1f2a2ae4129cd751201f73d7234c753bd0735212a5288b19748fd2 0xcfd90084be68de514fe14a7c281f492223f045566f859ea5c166d6e60bc650c23940909a8e96c2fbffbd15a598b4e6a5b5aa14c126bf58cc1a9e396fe7771965 0x8edf3f9d997357a0e2c916ee090392c3a645ebac4f6cd8f826d3ecc0173b33bf06b7c14e8002fc9a5d01af9824a5cb3778472cd477e0ab378091448bca6f0417 0x 0xd5225476d7849b362226952ffc561bab99832f3f8b99741f6d81bbeaffa8e7f6e54a85e5029a3b510707eaa9684df496e4b1268075ad0328693a30bf1b1e0033 0xd9fa78b5b958bea1929080b8ad96dc555d34b051a27aebf711eb1186b807b0448316d994606ac807121838d6c41a58f308bc6307acdf69491fa4b17282f3e66f 0xcc64af75ec2e2741fb9af9f6191cb9ee187d6d26af4d1e96d7bab47e6ec09be12d3192030dc4bbf54d1da319a7a2acfc7a9dd4c644af6646a4aaa02b1024bbab 0xb5943b6e284682ad2e011d6962d41febf86af2f5fc0c9c8f4b81358ff077f9c96ba0880eaf93541eae94b4fa41dba66dab7fb0201cc9af7c75681e5719b0c95f 0x0cfc9d5b5dcf702a1525f9d4ed1841e8eb8b34434cc82470dd35435f1dbdc73ffb51544b7500394eac9c7fa567868b495326075147a2d809ebbfd43273eeec91 0x0aa78894d894a15933969f5826347439e2c309f2049277a10066c9197840499498ad19ee3d1b291f932ec0890bbdafcec292c4f02a446670cd0084f997e25e2f 0x00f400e3fe40f64032485aad9240ead45a8e1fc83ec08c96db861c0eca155ac898df8673e778e3ccaae8a0f9e6af415fe40e99b0cbc88d7610e536b6041b07fb 0x604f384174c7ed3a0dc5f476569a978266a7943bd775449d1b8b27f4eb8beb99cdf095f9200a2dabb1bc5d68c3d96ea3d47f4d34499d59953669b6c8c093d578 0x4881345cbb299fa7c60ab2d16cb7fe7bf8d14675506ef6eb6037038b5b7092ea0a9e4d0b53ba3904edd99f86717d6ba81dffe44eb5b23c6fd22c91ab73c33021 0xee3d4cc17633afe7e1794fcfd728e0643325e3d130eb1daa39c0c5cb05a200b43876117a182cabdcc3795632aa529473a0c8245f9e4f6e43e54c3f1da28bcb82 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)' - cost: 1000000 - - contract-call: - contract-id: ST3XVPDNZJ9QN0KJ327SYPKP6YS15PHJRBKWXTZ3M.wormhole-core-v1 - expected-sender: ST3XVPDNZJ9QN0KJ327SYPKP6YS15PHJRBKWXTZ3M + contract-id: ST3BZKCHK73FFAPVVRSZXMQAVV371ER8MMXBVWAZ6.wormhole-core-v3 + expected-sender: ST3BZKCHK73FFAPVVRSZXMQAVV371ER8MMXBVWAZ6 method: update-guardians-set parameters: - 0x01000000020d00ce45474d9e1b1e7790a2d210871e195db53a70ffd6f237cfe70e2686a32859ac43c84a332267a8ef66f59719cf91cc8df0101fd7c36aa1878d5139241660edc0010375cc906156ae530786661c0cd9aef444747bc3d8d5aa84cac6a6d2933d4e1a031cffa30383d4af8131e929d9f203f460b07309a647d6cd32ab1cc7724089392c000452305156cfc90343128f97e499311b5cae174f488ff22fbc09591991a0a73d8e6af3afb8a5968441d3ab8437836407481739e9850ad5c95e6acfcc871e951bc30105a7956eefc23e7c945a1966d5ddbe9e4be376c2f54e45e3d5da88c2f8692510c7429b1ea860ae94d929bd97e84923a18187e777aa3db419813a80deb84cc8d22b00061b2a4f3d2666608e0aa96737689e3ba5793810ff3a52ff28ad57d8efb20967735dc5537a2e43ef10f583d144c12a1606542c207f5b79af08c38656d3ac40713301086b62c8e130af3411b3c0d91b5b50dcb01ed5f293963f901fc36e7b0e50114dce203373b32eb45971cef8288e5d928d0ed51cd86e2a3006b0af6a65c396c009080009e93ab4d2c8228901a5f4525934000b2c26d1dc679a05e47fdf0ff3231d98fbc207103159ff4116df2832eea69b38275283434e6cd4a4af04d25fa7a82990b707010aa643f4cf615dfff06ffd65830f7f6cf6512dabc3690d5d9e210fdc712842dc2708b8b2c22e224c99280cd25e5e8bfb40e3d1c55b8c41774e287c1e2c352aecfc010b89c1e85faa20a30601964ccc6a79c0ae53cfd26fb10863db37783428cd91390a163346558239db3cd9d420cfe423a0df84c84399790e2e308011b4b63e6b8015010ca31dcb564ac81a053a268d8090e72097f94f366711d0c5d13815af1ec7d47e662e2d1bde22678113d15963da100b668ba26c0c325970d07114b83c5698f46097010dc9fda39c0d592d9ed92cd22b5425cc6b37430e236f02d0d1f8a2ef45a00bde26223c0a6eb363c8b25fd3bf57234a1d9364976cefb8360e755a267cbbb674b39501108db01e444ab1003dd8b6c96f8eb77958b40ba7a85fefecf32ad00b7a47c0ae7524216262495977e09c0989dd50f280c21453d3756843608eacd17f4fdfe47600001261025228ef5af837cb060bcd986fcfa84ccef75b3fa100468cfd24e7fadf99163938f3b841a33496c2706d0208faab088bd155b2e20fd74c625bb1cc8c43677a0163c53c409e0c5dfa000100000000000000000000000000000000000000000000000000000000000000046c5a054d7833d1e42000000000000000000000000000000000000000000000000000000000436f7265020000000000031358cc3ae5c097b213ce3c81979e1b9f9570746aa5ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cd15e7caf07c4e3dc8e7c469f92c8cd88fb8005a2074a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d - - '(list 0x2a953a2e8b1052eb70c1d7b556b087deed598b55608396686c1c811b9796c763078687ce10459f4f25fb7a0fbf8727bb0fb51e00820e93a123f652ee843cf08d 0x2766db08820e311b22e109801ab8ea505b12e3df3d91ebc87c999ffb6929d1abb0ade987c74aa37db26eea4086ee738a2f34a5594edb8760da0eac5be356b731 0x54177ff4a8329520b76efd86f8bfce5c942554db16e673267dc1133b3f5e230b2d8cbf90fe274946045d4491de288d736680edc2ee9ee5b1b15416b0a34806c4 0x7fa3e98fcc2621337b217b61408a98facaabd25bad2b158438728ce863c14708cfcda1f3b50a16ca0211199079fb338d479a54546ec3c5f775af23a7d7f4fb24 0x0bdcbccc0297c2a4f92a7c39358c42f22a8ed700a78bd05c39c8b61aaf2338e825b6c0d26d1f2a2ae4129cd751201f73d7234c753bd0735212a5288b19748fd2 0xcfd90084be68de514fe14a7c281f492223f045566f859ea5c166d6e60bc650c23940909a8e96c2fbffbd15a598b4e6a5b5aa14c126bf58cc1a9e396fe7771965 0x8edf3f9d997357a0e2c916ee090392c3a645ebac4f6cd8f826d3ecc0173b33bf06b7c14e8002fc9a5d01af9824a5cb3778472cd477e0ab378091448bca6f0417 0x47b15c5039dcb2850b59bea323db662cc597dd7d48fe6b8dbb6cd8704c45854bf0e92fa267c844ba1a700105e157c8099d55c82316cb5e50c56a5d0920ff91c2 0xd5225476d7849b362226952ffc561bab99832f3f8b99741f6d81bbeaffa8e7f6e54a85e5029a3b510707eaa9684df496e4b1268075ad0328693a30bf1b1e0033 0xd9fa78b5b958bea1929080b8ad96dc555d34b051a27aebf711eb1186b807b0448316d994606ac807121838d6c41a58f308bc6307acdf69491fa4b17282f3e66f 0xcc64af75ec2e2741fb9af9f6191cb9ee187d6d26af4d1e96d7bab47e6ec09be12d3192030dc4bbf54d1da319a7a2acfc7a9dd4c644af6646a4aaa02b1024bbab 0xb5943b6e284682ad2e011d6962d41febf86af2f5fc0c9c8f4b81358ff077f9c96ba0880eaf93541eae94b4fa41dba66dab7fb0201cc9af7c75681e5719b0c95f 0x0cfc9d5b5dcf702a1525f9d4ed1841e8eb8b34434cc82470dd35435f1dbdc73ffb51544b7500394eac9c7fa567868b495326075147a2d809ebbfd43273eeec91 0x0aa78894d894a15933969f5826347439e2c309f2049277a10066c9197840499498ad19ee3d1b291f932ec0890bbdafcec292c4f02a446670cd0084f997e25e2f 0x00f400e3fe40f64032485aad9240ead45a8e1fc83ec08c96db861c0eca155ac898df8673e778e3ccaae8a0f9e6af415fe40e99b0cbc88d7610e536b6041b07fb 0x604f384174c7ed3a0dc5f476569a978266a7943bd775449d1b8b27f4eb8beb99cdf095f9200a2dabb1bc5d68c3d96ea3d47f4d34499d59953669b6c8c093d578 0x4881345cbb299fa7c60ab2d16cb7fe7bf8d14675506ef6eb6037038b5b7092ea0a9e4d0b53ba3904edd99f86717d6ba81dffe44eb5b23c6fd22c91ab73c33021 0xee3d4cc17633afe7e1794fcfd728e0643325e3d130eb1daa39c0c5cb05a200b43876117a182cabdcc3795632aa529473a0c8245f9e4f6e43e54c3f1da28bcb82 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)' - cost: 1000000 + - "(list 0x2a953a2e8b1052eb70c1d7b556b087deed598b55608396686c1c811b9796c763078687ce10459f4f25fb7a0fbf8727bb0fb51e00820e93a123f652ee843cf08d 0x2766db08820e311b22e109801ab8ea505b12e3df3d91ebc87c999ffb6929d1abb0ade987c74aa37db26eea4086ee738a2f34a5594edb8760da0eac5be356b731 0x54177ff4a8329520b76efd86f8bfce5c942554db16e673267dc1133b3f5e230b2d8cbf90fe274946045d4491de288d736680edc2ee9ee5b1b15416b0a34806c4 0x7fa3e98fcc2621337b217b61408a98facaabd25bad2b158438728ce863c14708cfcda1f3b50a16ca0211199079fb338d479a54546ec3c5f775af23a7d7f4fb24 0x0bdcbccc0297c2a4f92a7c39358c42f22a8ed700a78bd05c39c8b61aaf2338e825b6c0d26d1f2a2ae4129cd751201f73d7234c753bd0735212a5288b19748fd2 0xcfd90084be68de514fe14a7c281f492223f045566f859ea5c166d6e60bc650c23940909a8e96c2fbffbd15a598b4e6a5b5aa14c126bf58cc1a9e396fe7771965 0x8edf3f9d997357a0e2c916ee090392c3a645ebac4f6cd8f826d3ecc0173b33bf06b7c14e8002fc9a5d01af9824a5cb3778472cd477e0ab378091448bca6f0417 0x47b15c5039dcb2850b59bea323db662cc597dd7d48fe6b8dbb6cd8704c45854bf0e92fa267c844ba1a700105e157c8099d55c82316cb5e50c56a5d0920ff91c2 0xd5225476d7849b362226952ffc561bab99832f3f8b99741f6d81bbeaffa8e7f6e54a85e5029a3b510707eaa9684df496e4b1268075ad0328693a30bf1b1e0033 0xd9fa78b5b958bea1929080b8ad96dc555d34b051a27aebf711eb1186b807b0448316d994606ac807121838d6c41a58f308bc6307acdf69491fa4b17282f3e66f 0xcc64af75ec2e2741fb9af9f6191cb9ee187d6d26af4d1e96d7bab47e6ec09be12d3192030dc4bbf54d1da319a7a2acfc7a9dd4c644af6646a4aaa02b1024bbab 0xb5943b6e284682ad2e011d6962d41febf86af2f5fc0c9c8f4b81358ff077f9c96ba0880eaf93541eae94b4fa41dba66dab7fb0201cc9af7c75681e5719b0c95f 0x0cfc9d5b5dcf702a1525f9d4ed1841e8eb8b34434cc82470dd35435f1dbdc73ffb51544b7500394eac9c7fa567868b495326075147a2d809ebbfd43273eeec91 0x0aa78894d894a15933969f5826347439e2c309f2049277a10066c9197840499498ad19ee3d1b291f932ec0890bbdafcec292c4f02a446670cd0084f997e25e2f 0x00f400e3fe40f64032485aad9240ead45a8e1fc83ec08c96db861c0eca155ac898df8673e778e3ccaae8a0f9e6af415fe40e99b0cbc88d7610e536b6041b07fb 0x604f384174c7ed3a0dc5f476569a978266a7943bd775449d1b8b27f4eb8beb99cdf095f9200a2dabb1bc5d68c3d96ea3d47f4d34499d59953669b6c8c093d578 0x4881345cbb299fa7c60ab2d16cb7fe7bf8d14675506ef6eb6037038b5b7092ea0a9e4d0b53ba3904edd99f86717d6ba81dffe44eb5b23c6fd22c91ab73c33021 0xee3d4cc17633afe7e1794fcfd728e0643325e3d130eb1daa39c0c5cb05a200b43876117a182cabdcc3795632aa529473a0c8245f9e4f6e43e54c3f1da28bcb82 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)" + cost: 5960 - contract-call: - contract-id: ST3XVPDNZJ9QN0KJ327SYPKP6YS15PHJRBKWXTZ3M.pyth-helper-v1 - expected-sender: ST3XVPDNZJ9QN0KJ327SYPKP6YS15PHJRBKWXTZ3M - method: verify-and-update-price + contract-id: ST3BZKCHK73FFAPVVRSZXMQAVV371ER8MMXBVWAZ6.wormhole-core-v3 + expected-sender: ST3BZKCHK73FFAPVVRSZXMQAVV371ER8MMXBVWAZ6 + method: update-guardians-set parameters: - - 0x504e41550100000003b801000000030d002c9e33a703a8c86012c117474849ae41118270cf56e2db61c7af28f64ce322391d33cb738930dc3ffcfe5ae35dbd99c4e08a8ac4b390c858d94dc1f0b91e24d00101901948561c54c17b7a21a9885d3f60a85b410e18209b02ebe098b0dd422b02667565e3b5011203303a6445cf629d20cec3d4771f0b391ab03bfd54364ac049f70002a030ed0060f1ba123ddf5473bef4c1c8f4aec8737b47f11023f94d5339b72c4c3aa325515956ea702537a3950d74f86134396de437bfc97a5365fc090dbb382c0103f1f64ba806fe8ba7b7db3846d85fccbe7d803865e7b757301f4a5de6ebde40f923ee925a7df78871d39299d70fd117635263b91fe53f792bfff450d210431316000439e31501d7b661a1b075a9302b57a6fc500c1e760de7e949e30994055b061b280cefcab3eb3b5c780f56cd555e88ee3c674b798ddeb8713bd27a361b8b8f1c730008db908c61e4158d1a7a7d53b2ec14027a4a2b2f3207edf0db2fbb0f431f3cdc020ee9fc9f38e812d094dcf5dd18f3a8d1d1ee94e840f504b00e08d0fbd607ed6d0109cf5c52aed9f4a42691c3c33bc366fde4a3ad23aacdd46c14669ad321106cf8d257b9379fc45cbe91a26ee87f4800951c5ca89ff0069e4a47299f988b368c6b74000b1241dea623dd874e13135682d760ee48ac1888149bddcfac54ff3787f4b89629063d89e084350ff1168999365918f9bdf469323b817a25491e56341a0da5c498000d538baecc668df092ce3cfeebfa5968447584916cb503ce50e7f77443bbd2a3441bb1d962a7f3401bfcf30f444a3301ab72dcb87cc04b681bdada93d45001f53d010e2fd97eeac94ceb3fd87a6e4ab3b785c64db221d522e58230a6d9eb10cba3b53a086ba6989e4285ab0816a26ff64c1a3a05175d0ffa61f4f744f928d6c5b3f92600107f999fa2f5cd826520cdf36f2e3434f4619eca4c2fb944bdec79d84903f76aaa02727844ec451378ab165910140c866ebdc65aea2cc6717da4747d4ed8a7338700115ce8f97f4a39ccdf5a61c9425d8a306a35b598db9d0f936bece6f2d92e79f9b1306d4c4789fb73ba5bd29bf0d306f2e8079aae818bc70aa9db111b745f1f4ab900126933d7f1317e3e45d98687e66ae033d871e1026e92f1ad168ec197a92ad653571837b78ee8e2263f2aca1dfa112fc78de63de9e2231f62ab79db2d956704146c0165131de200000000001ae101faedac5851e32b9b23b5f9411a8c2bac4aae3ed4dd7b811dd1a72ea4aa710000000000df92280141555756000000000005e1b46c00002710dbdd79b598d499596393b24358343774fd54e63c01005500ec7a775f46379b5e943c3526b1c8d54cd49749176b0b98e02dde68d1bd335c170000000002bf687c00000000000091effffffff80000000065131de10000000065131de00000000002c073dc0000000000008d5f09014cff5b7c5413efc667d2bca5549edadde5324814fed82e330d4110d610f5d0325deddb5541eacccd70da0a613768335768226657b201a456613163b0b4a21cf17276c2be6d02280ff05d08a6d4cf481c00c544f4adff1c86c6845a21871b75b4cffdc9314a2b46bddcb2bd44861fa48d4cc429a0783cb122a3eda67b7a13ad6298995c3bddd6cfa1ba547ddd38f0da18fcb0f7ead4d1de56db6c0442b94883a78f40b3541982a58d2d400dbfb761cce7bf780c + # VAA of 4th guardians rotation + - 0x01000000030d03d4a37a6ff4361d91714730831e9d49785f61624c8f348a9c6c1d82bc1d98cadc5e936338204445c6250bb4928f3f3e165ad47ca03a5d63111168a2de4576856301049a5df10464ea4e1961589fd30fc18d1970a7a2ffaad617e56a0f7777f25275253af7d10a0f0f2494dc6e99fc80e444ab9ebbbee252ded2d5dcb50cbf7a54bb5a01055f4603b553b9ba9e224f9c55c7bca3da00abb10abd19e0081aecd3b352be061a70f79f5f388ebe5190838ef3cd13a2f22459c9a94206883b739c90b40d5d74640006a8fade3997f650a36e46bceb1f609edff201ab32362266f166c5c7da713f6a19590c20b68ed3f0119cb24813c727560ede086b3d610c2d7a1efa66f655bad90900080f5e495a75ea52241c59d145c616bfac01e57182ad8d784cbcc9862ed3afb60c0983ccbc690553961ffcf115a0c917367daada8e60be2cbb8b8008bac6341a8c010935ab11e0eea28b87a1edc5ccce3f1fac25f75b5f640fe6b0673a7cd74513c9dc01c544216cf364cc9993b09fda612e0cd1ced9c00fb668b872a16a64ebb55d27010ab2bc39617a2396e7defa24cd7c22f42dc31f3c42ffcd9d1472b02df8468a4d0563911e8fb6a4b5b0ce0bd505daa53779b08ff660967b31f246126ed7f6f29a7e000bdb6d3fd7b33bdc9ac3992916eb4aacb97e7e21d19649e7fa28d2dd6e337937e4274516a96c13ac7a8895da9f91948ea3a09c25f44b982c62ce8842b58e20c8a9000d3d1b19c8bb000856b6610b9d28abde6c35cb7705c6ca5db711f7be96d60eed9d72cfa402a6bfe8bf0496dbc7af35796fc768da51a067b95941b3712dce8ae1e7010ec80085033157fd1a5628fc0c56267469a86f0e5a66d7dede1ad4ce74ecc3dff95b60307a39c3bfbeedc915075070da30d0395def9635130584f709b3885e1bdc0010fc480eb9ee715a2d151b23722b48b42581d7f4001fc1696c75425040bfc1ffc5394fe418adb2b64bd3dc692efda4cc408163677dbe233b16bcdabb853a20843301118ee9e115e1a0c981f19d0772b850e666591322da742a9a12cce9f52a5665bd474abdd59c580016bee8aae67fdf39b315be2528d12eec3a652910e03cc4c6fa3801129d0d1e2e429e969918ec163d16a7a5b2c6729aa44af5dccad07d25d19891556a79b574f42d9adbd9e2a9ae5a6b8750331d2fccb328dd94c3bf8791ee1bfe85aa00661e99781981faea00010000000000000000000000000000000000000000000000000000000000000004fd4c6c55ec8dfd342000000000000000000000000000000000000000000000000000000000436f726502000000000004135893b5a76c3f739645648885bdccc06cd70a3cd3ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cd15e7caf07c4e3dc8e7c469f92c8cd88fb8005a2074a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d + # Uncompressed public keys of selected guardians: RockawayX, Staked, Figment, ChainodeTech, Inotel, HashQuark, ChainLayer, xLabs, Forbole, StakingFund, MoonletWallet, P2PValidator, 01node, MCFV2MAINNET, Everstake, ChorusOne, syncnode, Triton, StakingFacilities, cost: 5960 + - "(list + 0x9a1e801daa25d9808e70aae9981353086f958955cc94ef33a461b0e596feaef90a8474dd10cf6ae967143f86105c16d6304a3d268ea952fda9389139d4bb9da1 + 0x2766db08820e311b22e109801ab8ea505b12e3df3d91ebc87c999ffb6929d1abb0ade987c74aa37db26eea4086ee738a2f34a5594edb8760da0eac5be356b731 + 0x54177ff4a8329520b76efd86f8bfce5c942554db16e673267dc1133b3f5e230b2d8cbf90fe274946045d4491de288d736680edc2ee9ee5b1b15416b0a34806c4 + 0x7fa3e98fcc2621337b217b61408a98facaabd25bad2b158438728ce863c14708cfcda1f3b50a16ca0211199079fb338d479a54546ec3c5f775af23a7d7f4fb24 + 0x0bdcbccc0297c2a4f92a7c39358c42f22a8ed700a78bd05c39c8b61aaf2338e825b6c0d26d1f2a2ae4129cd751201f73d7234c753bd0735212a5288b19748fd2 + 0xcfd90084be68de514fe14a7c281f492223f045566f859ea5c166d6e60bc650c23940909a8e96c2fbffbd15a598b4e6a5b5aa14c126bf58cc1a9e396fe7771965 + 0x8edf3f9d997357a0e2c916ee090392c3a645ebac4f6cd8f826d3ecc0173b33bf06b7c14e8002fc9a5d01af9824a5cb3778472cd477e0ab378091448bca6f0417 + 0x47b15c5039dcb2850b59bea323db662cc597dd7d48fe6b8dbb6cd8704c45854bf0e92fa267c844ba1a700105e157c8099d55c82316cb5e50c56a5d0920ff91c2 + 0xd5225476d7849b362226952ffc561bab99832f3f8b99741f6d81bbeaffa8e7f6e54a85e5029a3b510707eaa9684df496e4b1268075ad0328693a30bf1b1e0033 + 0xd9fa78b5b958bea1929080b8ad96dc555d34b051a27aebf711eb1186b807b0448316d994606ac807121838d6c41a58f308bc6307acdf69491fa4b17282f3e66f + 0xcc64af75ec2e2741fb9af9f6191cb9ee187d6d26af4d1e96d7bab47e6ec09be12d3192030dc4bbf54d1da319a7a2acfc7a9dd4c644af6646a4aaa02b1024bbab + 0xb5943b6e284682ad2e011d6962d41febf86af2f5fc0c9c8f4b81358ff077f9c96ba0880eaf93541eae94b4fa41dba66dab7fb0201cc9af7c75681e5719b0c95f + 0x0cfc9d5b5dcf702a1525f9d4ed1841e8eb8b34434cc82470dd35435f1dbdc73ffb51544b7500394eac9c7fa567868b495326075147a2d809ebbfd43273eeec91 + 0x0aa78894d894a15933969f5826347439e2c309f2049277a10066c9197840499498ad19ee3d1b291f932ec0890bbdafcec292c4f02a446670cd0084f997e25e2f + 0x00f400e3fe40f64032485aad9240ead45a8e1fc83ec08c96db861c0eca155ac898df8673e778e3ccaae8a0f9e6af415fe40e99b0cbc88d7610e536b6041b07fb + 0x604f384174c7ed3a0dc5f476569a978266a7943bd775449d1b8b27f4eb8beb99cdf095f9200a2dabb1bc5d68c3d96ea3d47f4d34499d59953669b6c8c093d578 + 0x4881345cbb299fa7c60ab2d16cb7fe7bf8d14675506ef6eb6037038b5b7092ea0a9e4d0b53ba3904edd99f86717d6ba81dffe44eb5b23c6fd22c91ab73c33021 + 0xee3d4cc17633afe7e1794fcfd728e0643325e3d130eb1daa39c0c5cb05a200b43876117a182cabdcc3795632aa529473a0c8245f9e4f6e43e54c3f1da28bcb82 + 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)" cost: 1000000 - epoch: "2.4" + epoch: "3.0" diff --git a/deployments/utils/update-guardians.mainnet-plan.yaml b/deployments/utils/update-guardians.mainnet-plan.yaml index b54a282..dfcf08a 100644 --- a/deployments/utils/update-guardians.mainnet-plan.yaml +++ b/deployments/utils/update-guardians.mainnet-plan.yaml @@ -96,4 +96,4 @@ plan: ] ] cost: 5960 - epoch: "2.4" + epoch: "3.0" diff --git a/deployments/utils/update-price.mainnet-plan.yaml b/deployments/utils/update-price.mainnet-plan.yaml index b144b7e..1c16fba 100644 --- a/deployments/utils/update-price.mainnet-plan.yaml +++ b/deployments/utils/update-price.mainnet-plan.yaml @@ -9,15 +9,15 @@ plan: - id: 0 transactions: - contract-call: - contract-id: SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.pyth-oracle-v2 + contract-id: SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.pyth-oracle-v3 expected-sender: SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0 method: verify-and-update-price-feeds parameters: # PNAU payload - 0x504e41550100000003b801000000040d009764f10b16b4937d5b10637552e67f85d3422a86fcf33062f9a986b889c2655d071b8b1e81ff7fedd7c40eda9f4e64dbe1f653128a4747f5257eb875528016860001f7e0d441b68739e32e0c55eaf1dbe1f4f017191ad25ca0e813e58cfd4cd24ab61f644fbf6b58b52845113877dcdc8ffe96410363516e4013f55047ef30d513590002a83c7a9397480bceaebdb8b3cb4a39f3592f2fb033b201db00e095549651ccb02a5c740cbaa5112c0b7d31c0d054ac10e5de1ca55818dfb6f1dd32f147d8235a01032abc479599481cd7b6b7a4ed5ddda8f054569bc28ecb8b0eacdf4254f7f86cc82a3ded85d8e4f8e0cfec317772f84e11477c4974c58232438953d394913e78f2010601bac86eaf7526ec765083808a9355957d7687fde48688e1f42334a7efdb59e067934f067864dcb0310ec20c62118c26bbe13615024e811e80847fdb671a765900082320a274ee9dfd1e1b3c7041591678168d115b03a8fd7143bfdc6ee209f717063e1240122de8d4edf2ce146b580923923de91ad07338e0be73142cbf621adbb60109333f3eab1d03a47b88254c57473e8058865802e9727e3f9353272b2b800517cf6ffb9c5bfa731e41afc2cb45f220d65204fb22ac2fb284ca4d124cd524220c3e000aebe496ce314223a56142a811f72b598d7d66f917af30cba2d90c0c6a04fe9c60544524d8075bfae44df5f6dcca89b9c61489bf36709b48a15afa5ae5b436e33f000ba0232b7b2e4989432c2233b4f9690614ca7902cfb0f3035e1076d5a13f905fb438ac346da1253fc82f3dc0c8e1af26ab08711af0ed0a2d1409f8397496c86f90010caac05a7e60c0fb4ad68cc2d25a8fe8e798c67c763fa1a28617d97b85084f90a174f81bd07a3e8d897755d168ab4ed272433e1c19464484588b7b8800c64166d6000d7c74630a9ce0d0dd28826dfc419c248eeb35b56c7b627276b2bb37f61a57dab612127e123a89c5ced1ad1034ce2ec64665983dbe9b0f4565195498329532a9fa000e516a64ab6db2ae4041762c716b765accf28d075df1ae1c99aa0f878bf388caa35d761338b08c0ba59fde3a0d55c2b83b928327f3be5ac8166b7e582b5c419d470112e59f242f4e2b7dc100c2f2ca4ee3482de87722aed0a711543bbd0d39a63761b85454c740c16b3a5d79a6aa1744219ca3b130d6406225f01cf672bdbfde02c7330066225ade00000000001ae101faedac5851e32b9b23b5f9411a8c2bac4aae3ed4dd7b811dd1a72ea4aa71000000000311c57f01415557560000000000081bb9f700002710cf647a56a139b249245eaaf115357ef8e7381de501005500e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43000005e7c94e82b600000000dd69ab96fffffff80000000066225add0000000066225add000005e5f18d02c000000000f58a7be00ac96cd6da5ef5983eedb01eab12f5a88f5ad4ce44e2d73b321b7502a21f10e08d81d471f48b4a4565391f72c0cb93c7981ea1339cc74176888a1e17fa1f4c5ca3a181d70005adc0dae9eac2638c268a06cdc60fc62ff05cd395bf8e286ae6f307003ba670db208a575e337404821633ecaa4dcce150cfb87aaf917427e972b95287f80fdb962c6d6943e662445f4640537460f4b7e192c22ec470561dfa7d78b188a0991bd16da2a4f9d8160e2cdd4106f85c1a3f08427700b90f75f4045b77223ff5515270545927 - "{ - pyth-storage-contract: 'SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.pyth-store-v1, - pyth-decoder-contract: 'SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.pyth-pnau-decoder-v1, - wormhole-core-contract: 'SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.wormhole-core-v2 + pyth-storage-contract: 'SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.pyth-storage-v1, + pyth-decoder-contract: 'SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.pyth-pnau-decoder-v2, + wormhole-core-contract: 'SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.wormhole-core-v3 }" cost: 1000000 diff --git a/deployments/v1/0-default.mainnet-plan.yaml b/deployments/v1/0-default.mainnet-plan.yaml index 88dc7ea..d04244e 100644 --- a/deployments/v1/0-default.mainnet-plan.yaml +++ b/deployments/v1/0-default.mainnet-plan.yaml @@ -14,57 +14,57 @@ plan: cost: 1486613 path: contracts/wormhole/wormhole-traits-v1.clar anchor-block-only: true - clarity-version: 2 + clarity-version: 3 - contract-publish: contract-name: pyth-traits-v1 expected-sender: SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0 cost: 1487019 path: contracts/pyth-traits-v1.clar anchor-block-only: true - clarity-version: 2 + clarity-version: 3 - contract-publish: - contract-name: pyth-governance-v1 + contract-name: pyth-governance-v2 expected-sender: SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0 cost: 1495228 - path: contracts/pyth-governance-v1.clar + path: contracts/pyth-governance-v2.clar anchor-block-only: true - clarity-version: 2 + clarity-version: 3 - contract-publish: contract-name: pyth-oracle-v1 expected-sender: SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0 cost: 1487263 path: contracts/pyth-oracle-v1.clar anchor-block-only: true - clarity-version: 2 + clarity-version: 3 - contract-publish: - contract-name: pyth-pnau-decoder-v1 + contract-name: pyth-pnau-decoder-v2 expected-sender: SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0 cost: 1492627 - path: contracts/pyth-pnau-decoder-v1.clar + path: contracts/pyth-pnau-decoder-v2.clar anchor-block-only: true - clarity-version: 2 + clarity-version: 3 - contract-publish: - contract-name: pyth-store-v1 + contract-name: pyth-storage-v1 expected-sender: SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0 cost: 1487263 - path: contracts/pyth-store-v1.clar + path: contracts/pyth-storage-v1.clar anchor-block-only: true - clarity-version: 2 + clarity-version: 3 - contract-publish: contract-name: wormhole-core-v1 expected-sender: SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0 cost: 1494091 path: contracts/wormhole/wormhole-core-v1.clar anchor-block-only: true - clarity-version: 2 + clarity-version: 3 - contract-publish: contract-name: pyth-helper-v1 expected-sender: SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0 cost: 1486613 path: contracts/pyth-helper-v1.clar anchor-block-only: true - clarity-version: 2 - epoch: "2.4" + clarity-version: 3 + epoch: "3.0" - id: 1 transactions: - contract-call: @@ -75,7 +75,7 @@ plan: # VAA of 1st guardians rotation - 0x010000000001007ac31b282c2aeeeb37f3385ee0de5f8e421d30b9e5ae8ba3d4375c1c77a86e77159bb697d9c456d6f8c02d22a94b1279b65b0d6a9957e7d3857423845ac758e300610ac1d2000000030001000000000000000000000000000000000000000000000000000000000000000400000000000005390000000000000000000000000000000000000000000000000000000000436f7265020000000000011358cc3ae5c097b213ce3c81979e1b9f9570746aa5ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cdeb5f7389fa26941519f0863349c223b73a6ddee774a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d # Uncompressed public keys of selected guardians for Epoch 1: CertusOne, Staked, Figment, ChainodeTech, Inotel, HashQuark, ChainLayer, DokiaCapital, Forbole, StakingFund, MoonletWallet, P2PValidator, 01node, MCFV2MAINNET, Everstake, ChorusOne, syncnode, Triton, StakingFacilities, cost: 5960 - - '(list + - "(list 0x2a953a2e8b1052eb70c1d7b556b087deed598b55608396686c1c811b9796c763078687ce10459f4f25fb7a0fbf8727bb0fb51e00820e93a123f652ee843cf08d 0x2766db08820e311b22e109801ab8ea505b12e3df3d91ebc87c999ffb6929d1abb0ade987c74aa37db26eea4086ee738a2f34a5594edb8760da0eac5be356b731 0x54177ff4a8329520b76efd86f8bfce5c942554db16e673267dc1133b3f5e230b2d8cbf90fe274946045d4491de288d736680edc2ee9ee5b1b15416b0a34806c4 @@ -94,7 +94,7 @@ plan: 0x604f384174c7ed3a0dc5f476569a978266a7943bd775449d1b8b27f4eb8beb99cdf095f9200a2dabb1bc5d68c3d96ea3d47f4d34499d59953669b6c8c093d578 0x4881345cbb299fa7c60ab2d16cb7fe7bf8d14675506ef6eb6037038b5b7092ea0a9e4d0b53ba3904edd99f86717d6ba81dffe44eb5b23c6fd22c91ab73c33021 0xee3d4cc17633afe7e1794fcfd728e0643325e3d130eb1daa39c0c5cb05a200b43876117a182cabdcc3795632aa529473a0c8245f9e4f6e43e54c3f1da28bcb82 - 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)' + 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)" cost: 1000000 - contract-call: contract-id: SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.wormhole-core-v1 @@ -104,7 +104,7 @@ plan: # VAA of 2nd guardians rotation - 0x01000000010d0012e6b39c6da90c5dfd3c228edbb78c7a4c97c488ff8a346d161a91db067e51d638c17216f368aa9bdf4836b8645a98018ca67d2fec87d769cabfdf2406bf790a0002ef42b288091a670ef3556596f4f47323717882881eaf38e03345078d07a156f312b785b64dae6e9a87e3d32872f59cb1931f728cecf511762981baf48303668f0103cef2616b84c4e511ff03329e0853f1bd7ee9ac5ba71d70a4d76108bddf94f69c2a8a84e4ee94065e8003c334e899184943634e12043d0dda78d93996da073d190104e76d166b9dac98f602107cc4b44ac82868faf00b63df7d24f177aa391e050902413b71046434e67c770b19aecdf7fce1d1435ea0be7262e3e4c18f50ddc8175c0105d9450e8216d741e0206a50f93b750a47e0a258b80eb8fed1314cc300b3d905092de25cd36d366097b7103ae2d184121329ba3aa2d7c6cc53273f11af14798110010687477c8deec89d36a23e7948feb074df95362fc8dcbd8ae910ac556a1dee1e755c56b9db5d710c940938ed79bc1895a3646523a58bc55f475a23435a373ecfdd0107fb06734864f79def4e192497362513171530daea81f07fbb9f698afe7e66c6d44db21323144f2657d4a5386a954bb94eef9f64148c33aef6e477eafa2c5c984c01088769e82216310d1827d9bd48645ec23e90de4ef8a8de99e2d351d1df318608566248d80cdc83bdcac382b3c30c670352be87f9069aab5037d0b747208eae9c650109e9796497ff9106d0d1c62e184d83716282870cef61a1ee13d6fc485b521adcce255c96f7d1bca8d8e7e7d454b65783a830bddc9d94092091a268d311ecd84c26010c468c9fb6d41026841ff9f8d7368fa309d4dbea3ea4bbd2feccf94a92cc8a20a226338a8e2126cd16f70eaf15b4fc9be2c3fa19def14e071956a605e9d1ac4162010e23fcb6bd445b7c25afb722250c1acbc061ed964ba9de1326609ae012acdfb96942b2a102a2de99ab96327859a34a2b49a767dbdb62e0a1fb26af60fe44fd496a00106bb0bac77ac68b347645f2fb1ad789ea9bd76fb9b2324f25ae06f97e65246f142df717f662e73948317182c62ce87d79c73def0dba12e5242dfc038382812cfe00126da03c5e56cb15aeeceadc1e17a45753ab4dc0ec7bf6a75ca03143ed4a294f6f61bc3f478a457833e43084ecd7c985bf2f55a55f168aac0e030fc49e845e497101626e9d9a5d9e343f00010000000000000000000000000000000000000000000000000000000000000004c1759167c43f501c2000000000000000000000000000000000000000000000000000000000436f7265020000000000021358cc3ae5c097b213ce3c81979e1b9f9570746aa5ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cd66b9590e1c41e0b226937bf9217d1d67fd4e91f574a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d # Uncompressed public keys of selected guardians for Epoch 2: CertusOne, Staked, Figment, ChainodeTech, Inotel, HashQuark, ChainLayer, FTX, Forbole, StakingFund, MoonletWallet, P2PValidator, 01node, MCFV2MAINNET, Everstake, ChorusOne, syncnode, Triton, StakingFacilities, cost: 5960 - - '(list + - "(list 0x2a953a2e8b1052eb70c1d7b556b087deed598b55608396686c1c811b9796c763078687ce10459f4f25fb7a0fbf8727bb0fb51e00820e93a123f652ee843cf08d 0x2766db08820e311b22e109801ab8ea505b12e3df3d91ebc87c999ffb6929d1abb0ade987c74aa37db26eea4086ee738a2f34a5594edb8760da0eac5be356b731 0x54177ff4a8329520b76efd86f8bfce5c942554db16e673267dc1133b3f5e230b2d8cbf90fe274946045d4491de288d736680edc2ee9ee5b1b15416b0a34806c4 @@ -123,7 +123,7 @@ plan: 0x604f384174c7ed3a0dc5f476569a978266a7943bd775449d1b8b27f4eb8beb99cdf095f9200a2dabb1bc5d68c3d96ea3d47f4d34499d59953669b6c8c093d578 0x4881345cbb299fa7c60ab2d16cb7fe7bf8d14675506ef6eb6037038b5b7092ea0a9e4d0b53ba3904edd99f86717d6ba81dffe44eb5b23c6fd22c91ab73c33021 0xee3d4cc17633afe7e1794fcfd728e0643325e3d130eb1daa39c0c5cb05a200b43876117a182cabdcc3795632aa529473a0c8245f9e4f6e43e54c3f1da28bcb82 - 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)' + 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)" cost: 1000000 - contract-call: contract-id: SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.wormhole-core-v1 @@ -133,7 +133,7 @@ plan: # VAA of 3rd guardians rotation - 0x01000000020d00ce45474d9e1b1e7790a2d210871e195db53a70ffd6f237cfe70e2686a32859ac43c84a332267a8ef66f59719cf91cc8df0101fd7c36aa1878d5139241660edc0010375cc906156ae530786661c0cd9aef444747bc3d8d5aa84cac6a6d2933d4e1a031cffa30383d4af8131e929d9f203f460b07309a647d6cd32ab1cc7724089392c000452305156cfc90343128f97e499311b5cae174f488ff22fbc09591991a0a73d8e6af3afb8a5968441d3ab8437836407481739e9850ad5c95e6acfcc871e951bc30105a7956eefc23e7c945a1966d5ddbe9e4be376c2f54e45e3d5da88c2f8692510c7429b1ea860ae94d929bd97e84923a18187e777aa3db419813a80deb84cc8d22b00061b2a4f3d2666608e0aa96737689e3ba5793810ff3a52ff28ad57d8efb20967735dc5537a2e43ef10f583d144c12a1606542c207f5b79af08c38656d3ac40713301086b62c8e130af3411b3c0d91b5b50dcb01ed5f293963f901fc36e7b0e50114dce203373b32eb45971cef8288e5d928d0ed51cd86e2a3006b0af6a65c396c009080009e93ab4d2c8228901a5f4525934000b2c26d1dc679a05e47fdf0ff3231d98fbc207103159ff4116df2832eea69b38275283434e6cd4a4af04d25fa7a82990b707010aa643f4cf615dfff06ffd65830f7f6cf6512dabc3690d5d9e210fdc712842dc2708b8b2c22e224c99280cd25e5e8bfb40e3d1c55b8c41774e287c1e2c352aecfc010b89c1e85faa20a30601964ccc6a79c0ae53cfd26fb10863db37783428cd91390a163346558239db3cd9d420cfe423a0df84c84399790e2e308011b4b63e6b8015010ca31dcb564ac81a053a268d8090e72097f94f366711d0c5d13815af1ec7d47e662e2d1bde22678113d15963da100b668ba26c0c325970d07114b83c5698f46097010dc9fda39c0d592d9ed92cd22b5425cc6b37430e236f02d0d1f8a2ef45a00bde26223c0a6eb363c8b25fd3bf57234a1d9364976cefb8360e755a267cbbb674b39501108db01e444ab1003dd8b6c96f8eb77958b40ba7a85fefecf32ad00b7a47c0ae7524216262495977e09c0989dd50f280c21453d3756843608eacd17f4fdfe47600001261025228ef5af837cb060bcd986fcfa84ccef75b3fa100468cfd24e7fadf99163938f3b841a33496c2706d0208faab088bd155b2e20fd74c625bb1cc8c43677a0163c53c409e0c5dfa000100000000000000000000000000000000000000000000000000000000000000046c5a054d7833d1e42000000000000000000000000000000000000000000000000000000000436f7265020000000000031358cc3ae5c097b213ce3c81979e1b9f9570746aa5ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cd15e7caf07c4e3dc8e7c469f92c8cd88fb8005a2074a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d # Uncompressed public keys of selected guardians for Epoch 2: CertusOne, Staked, Figment, ChainodeTech, Inotel, HashQuark, ChainLayer, xLabs, Forbole, StakingFund, MoonletWallet, P2PValidator, 01node, MCFV2MAINNET, Everstake, ChorusOne, syncnode, Triton, StakingFacilities, cost: 5960 - - '(list + - "(list 0x2a953a2e8b1052eb70c1d7b556b087deed598b55608396686c1c811b9796c763078687ce10459f4f25fb7a0fbf8727bb0fb51e00820e93a123f652ee843cf08d 0x2766db08820e311b22e109801ab8ea505b12e3df3d91ebc87c999ffb6929d1abb0ade987c74aa37db26eea4086ee738a2f34a5594edb8760da0eac5be356b731 0x54177ff4a8329520b76efd86f8bfce5c942554db16e673267dc1133b3f5e230b2d8cbf90fe274946045d4491de288d736680edc2ee9ee5b1b15416b0a34806c4 @@ -152,7 +152,7 @@ plan: 0x604f384174c7ed3a0dc5f476569a978266a7943bd775449d1b8b27f4eb8beb99cdf095f9200a2dabb1bc5d68c3d96ea3d47f4d34499d59953669b6c8c093d578 0x4881345cbb299fa7c60ab2d16cb7fe7bf8d14675506ef6eb6037038b5b7092ea0a9e4d0b53ba3904edd99f86717d6ba81dffe44eb5b23c6fd22c91ab73c33021 0xee3d4cc17633afe7e1794fcfd728e0643325e3d130eb1daa39c0c5cb05a200b43876117a182cabdcc3795632aa529473a0c8245f9e4f6e43e54c3f1da28bcb82 - 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)' + 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)" cost: 1000000 - contract-call: contract-id: SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.pyth-helper-v1 @@ -162,4 +162,4 @@ plan: # PNAU payload - 0x504e41550100000003b801000000030d0053bbe5d6ec86360500482ecfe68f015ee39b20b51f2498a1cd216669cf7a124a462f7c37adecd50eeb95c48304a6df8b252166660499ef5e29bf68b9934a81d200017d675c2ac214abad26560dad001d62b1fd439b5f683c77d6142ff43a7d48f3f1487cd40468d60859ffba22761c9baec08b70809e7d3ae9a7095696d8469516d6010227780a41bdf2b51327e4e34f6bf2c5a0afc8d395d0be32c600c86bed8b33993436e5a7129a5f42b4980947a7ee6d0011437fe83096a7be11f120e9e6cbb1f62d00034decb38b18b67835e95ec3e723d8aa5f927c0edf6fda818da1c1c6461ac03eed54ae2d0c71258bee206f4efb098ca8f1428d717a38d1e467d1d093b1a0e7439b0004a11bdedf6f73d2828f457b45ab0dcabb03369d5aa25173d874a77d09860297213eb54cdbc88ad0302c7f6cd19aafb4739b090771be5e64eeb299fc5ed561210d00068efddedd53845d43acf3fffda71ff8d8a5cb460c1db7701bb8d628562e1ed1bf495ad6280e839160e5accc3999d748405a97950e9db40739bc20c9ab9b03657f0008f2257f31d1faf556dc14756e05c83abbbfbfac47427655c0ea201bdf40c30f8701022545ab20a6712e94cda029804db77bdcb72290a8f8372cc03d31c42b951a000a71e288608dcd65999d7a778b0fc164da395fb0ab43f4e3969f900d2ae163d4097ce40c846966b43ecd82cdb420e273fb843f2e7f924ccd39694f432f4784c4c1000b0ad80690d2ae077b10f61b27fa3628e7d8d44b479bcf38716dfb51230e281b8b3efb3168ca630ab7988f66d2bbf392c5b76251d5707b78dcedfc03dc9a77574b010db88988868497aec5c9c3cdc83a2f39ec5b4ce8eba8efc391cc65e384cd98ba13650ee3e1c1d6f7ba7de3a91d68df67befb87ba853764becad0e2445f338d2a0c000ea7e6435467b12136983eef340c917512aa3178a6362915813ee2403a6afe7e8674e615e9949fff600a8fd5ed134099f4630db60c96d6bf41d5c65b49a0e856df0110d8abf4382fc05a7b1f7ee0344b4b6ab2d99ce05a09da44629091b8bec6441e225d2a47f857c32c9eaee55c0d97b01850978604ccc604d209fbb2e21f790a2d27001228c1e49492a1ca1eb324890d4d8edce37e73df2c6545409f92f5af038f12a106550e40d52c490ae0d26ab04748fc8ac017f365891795d55902838e04561f98f1006579e52f00000000001ae101faedac5851e32b9b23b5f9411a8c2bac4aae3ed4dd7b811dd1a72ea4aa710000000001dc08de0141555756000000000006e32d640000271082bd6338b7168545099d3b89575382a1719fd5b001005500ec7a775f46379b5e943c3526b1c8d54cd49749176b0b98e02dde68d1bd335c1700000000059b8cf00000000000013602fffffff8000000006579e52e000000006579e52e0000000005a89ef900000000000177390a8b1d580b30d9ff6ef843cb9e44f79d459b390e17ff15ce2dac75a2e3c2698a36411fc08faa4fa6de90f134a2daf2c1341e26eb084e134223b97dc008d9f0beb19e9ebed8ca4a8515ca9f2e62a9d57f9a10745d339f162052998a2979999e905223f48ec37f8272cabd22210512e0948b7f531c0cb71fca82952cd3ba5b3cbdbf54e52cc47ffe6ea1bdbd5074ea6fa95a91feaa758a6294fd1663ee9d40877c5dd57e98390e59ba61a7771f0452439f3f6459ac4ad455b31fe2f509e9fc0a84f3d862467a5a0a5a88 cost: 1000000 - epoch: "2.4" + epoch: "3.0" diff --git a/deployments/v1/0-default.testnet-plan.yaml b/deployments/v1/0-default.testnet-plan.yaml index b4065b7..5b3a17a 100644 --- a/deployments/v1/0-default.testnet-plan.yaml +++ b/deployments/v1/0-default.testnet-plan.yaml @@ -15,7 +15,7 @@ plan: SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E cost: 64640 path: "./.cache/requirements/SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-cursor-v2.clar" - clarity-version: 2 + clarity-version: 3 - requirement-publish: contract-id: SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-ecc-v1 remap-sender: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E @@ -23,7 +23,7 @@ plan: SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E cost: 9440 path: "./.cache/requirements/SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-ecc-v1.clar" - clarity-version: 2 + clarity-version: 3 - requirement-publish: contract-id: SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-merkle-tree-keccak160-v1 remap-sender: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E @@ -31,64 +31,64 @@ plan: SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E cost: 11000 path: "./.cache/requirements/SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-merkle-tree-keccak160-v1.clar" - clarity-version: 2 + clarity-version: 3 - contract-publish: contract-name: wormhole-traits-v1 cost: 2899063 expected-sender: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E path: contracts/wormhole/wormhole-traits-v1.clar anchor-block-only: true - clarity-version: 2 + clarity-version: 3 - contract-publish: contract-name: pyth-traits-v1 cost: 2899963 expected-sender: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E path: contracts/pyth-traits-v1.clar anchor-block-only: true - clarity-version: 2 + clarity-version: 3 - contract-publish: - contract-name: pyth-governance-v1 + contract-name: pyth-governance-v2 cost: 2918145 expected-sender: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E - path: contracts/pyth-governance-v1.clar + path: contracts/pyth-governance-v2.clar anchor-block-only: true - clarity-version: 2 + clarity-version: 3 - contract-publish: contract-name: pyth-oracle-v1 cost: 2900503 expected-sender: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E path: contracts/pyth-oracle-v1.clar anchor-block-only: true - clarity-version: 2 + clarity-version: 3 - contract-publish: - contract-name: pyth-pnau-decoder-v1 + contract-name: pyth-pnau-decoder-v2 cost: 2912384 expected-sender: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E - path: contracts/pyth-pnau-decoder-v1.clar + path: contracts/pyth-pnau-decoder-v2.clar anchor-block-only: true - clarity-version: 2 + clarity-version: 3 - contract-publish: - contract-name: pyth-store-v1 + contract-name: pyth-storage-v1 cost: 2900503 expected-sender: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E - path: contracts/pyth-store-v1.clar + path: contracts/pyth-storage-v1.clar anchor-block-only: true - clarity-version: 2 + clarity-version: 3 - contract-publish: contract-name: wormhole-core-v1 cost: 2915625 expected-sender: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E path: contracts/wormhole/wormhole-core-v1.clar anchor-block-only: true - clarity-version: 2 + clarity-version: 3 - contract-publish: contract-name: pyth-helper-v1 cost: 2899063 expected-sender: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E path: contracts/pyth-helper-v1.clar anchor-block-only: true - clarity-version: 2 - epoch: "2.4" + clarity-version: 3 + epoch: "3.0" - id: 1 transactions: - contract-call: @@ -99,7 +99,7 @@ plan: # VAA of 1st guardians rotation - 0x010000000001007ac31b282c2aeeeb37f3385ee0de5f8e421d30b9e5ae8ba3d4375c1c77a86e77159bb697d9c456d6f8c02d22a94b1279b65b0d6a9957e7d3857423845ac758e300610ac1d2000000030001000000000000000000000000000000000000000000000000000000000000000400000000000005390000000000000000000000000000000000000000000000000000000000436f7265020000000000011358cc3ae5c097b213ce3c81979e1b9f9570746aa5ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cdeb5f7389fa26941519f0863349c223b73a6ddee774a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d # Uncompressed public keys of selected guardians for Epoch 1: CertusOne, Staked, Figment, ChainodeTech, Inotel, HashQuark, ChainLayer, DokiaCapital, Forbole, StakingFund, MoonletWallet, P2PValidator, 01node, MCFV2MAINNET, Everstake, ChorusOne, syncnode, Triton, StakingFacilities, cost: 5960 - - '(list + - "(list 0x2a953a2e8b1052eb70c1d7b556b087deed598b55608396686c1c811b9796c763078687ce10459f4f25fb7a0fbf8727bb0fb51e00820e93a123f652ee843cf08d 0x2766db08820e311b22e109801ab8ea505b12e3df3d91ebc87c999ffb6929d1abb0ade987c74aa37db26eea4086ee738a2f34a5594edb8760da0eac5be356b731 0x54177ff4a8329520b76efd86f8bfce5c942554db16e673267dc1133b3f5e230b2d8cbf90fe274946045d4491de288d736680edc2ee9ee5b1b15416b0a34806c4 @@ -118,7 +118,7 @@ plan: 0x604f384174c7ed3a0dc5f476569a978266a7943bd775449d1b8b27f4eb8beb99cdf095f9200a2dabb1bc5d68c3d96ea3d47f4d34499d59953669b6c8c093d578 0x4881345cbb299fa7c60ab2d16cb7fe7bf8d14675506ef6eb6037038b5b7092ea0a9e4d0b53ba3904edd99f86717d6ba81dffe44eb5b23c6fd22c91ab73c33021 0xee3d4cc17633afe7e1794fcfd728e0643325e3d130eb1daa39c0c5cb05a200b43876117a182cabdcc3795632aa529473a0c8245f9e4f6e43e54c3f1da28bcb82 - 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)' + 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)" cost: 5960 - contract-call: contract-id: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.wormhole-core-v1 @@ -128,7 +128,7 @@ plan: # VAA of 2nd guardians rotation - 0x01000000010d0012e6b39c6da90c5dfd3c228edbb78c7a4c97c488ff8a346d161a91db067e51d638c17216f368aa9bdf4836b8645a98018ca67d2fec87d769cabfdf2406bf790a0002ef42b288091a670ef3556596f4f47323717882881eaf38e03345078d07a156f312b785b64dae6e9a87e3d32872f59cb1931f728cecf511762981baf48303668f0103cef2616b84c4e511ff03329e0853f1bd7ee9ac5ba71d70a4d76108bddf94f69c2a8a84e4ee94065e8003c334e899184943634e12043d0dda78d93996da073d190104e76d166b9dac98f602107cc4b44ac82868faf00b63df7d24f177aa391e050902413b71046434e67c770b19aecdf7fce1d1435ea0be7262e3e4c18f50ddc8175c0105d9450e8216d741e0206a50f93b750a47e0a258b80eb8fed1314cc300b3d905092de25cd36d366097b7103ae2d184121329ba3aa2d7c6cc53273f11af14798110010687477c8deec89d36a23e7948feb074df95362fc8dcbd8ae910ac556a1dee1e755c56b9db5d710c940938ed79bc1895a3646523a58bc55f475a23435a373ecfdd0107fb06734864f79def4e192497362513171530daea81f07fbb9f698afe7e66c6d44db21323144f2657d4a5386a954bb94eef9f64148c33aef6e477eafa2c5c984c01088769e82216310d1827d9bd48645ec23e90de4ef8a8de99e2d351d1df318608566248d80cdc83bdcac382b3c30c670352be87f9069aab5037d0b747208eae9c650109e9796497ff9106d0d1c62e184d83716282870cef61a1ee13d6fc485b521adcce255c96f7d1bca8d8e7e7d454b65783a830bddc9d94092091a268d311ecd84c26010c468c9fb6d41026841ff9f8d7368fa309d4dbea3ea4bbd2feccf94a92cc8a20a226338a8e2126cd16f70eaf15b4fc9be2c3fa19def14e071956a605e9d1ac4162010e23fcb6bd445b7c25afb722250c1acbc061ed964ba9de1326609ae012acdfb96942b2a102a2de99ab96327859a34a2b49a767dbdb62e0a1fb26af60fe44fd496a00106bb0bac77ac68b347645f2fb1ad789ea9bd76fb9b2324f25ae06f97e65246f142df717f662e73948317182c62ce87d79c73def0dba12e5242dfc038382812cfe00126da03c5e56cb15aeeceadc1e17a45753ab4dc0ec7bf6a75ca03143ed4a294f6f61bc3f478a457833e43084ecd7c985bf2f55a55f168aac0e030fc49e845e497101626e9d9a5d9e343f00010000000000000000000000000000000000000000000000000000000000000004c1759167c43f501c2000000000000000000000000000000000000000000000000000000000436f7265020000000000021358cc3ae5c097b213ce3c81979e1b9f9570746aa5ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cd66b9590e1c41e0b226937bf9217d1d67fd4e91f574a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d # Uncompressed public keys of selected guardians for Epoch 2: CertusOne, Staked, Figment, ChainodeTech, Inotel, HashQuark, ChainLayer, FTX, Forbole, StakingFund, MoonletWallet, P2PValidator, 01node, MCFV2MAINNET, Everstake, ChorusOne, syncnode, Triton, StakingFacilities, cost: 5960 - - '(list + - "(list 0x2a953a2e8b1052eb70c1d7b556b087deed598b55608396686c1c811b9796c763078687ce10459f4f25fb7a0fbf8727bb0fb51e00820e93a123f652ee843cf08d 0x2766db08820e311b22e109801ab8ea505b12e3df3d91ebc87c999ffb6929d1abb0ade987c74aa37db26eea4086ee738a2f34a5594edb8760da0eac5be356b731 0x54177ff4a8329520b76efd86f8bfce5c942554db16e673267dc1133b3f5e230b2d8cbf90fe274946045d4491de288d736680edc2ee9ee5b1b15416b0a34806c4 @@ -147,7 +147,7 @@ plan: 0x604f384174c7ed3a0dc5f476569a978266a7943bd775449d1b8b27f4eb8beb99cdf095f9200a2dabb1bc5d68c3d96ea3d47f4d34499d59953669b6c8c093d578 0x4881345cbb299fa7c60ab2d16cb7fe7bf8d14675506ef6eb6037038b5b7092ea0a9e4d0b53ba3904edd99f86717d6ba81dffe44eb5b23c6fd22c91ab73c33021 0xee3d4cc17633afe7e1794fcfd728e0643325e3d130eb1daa39c0c5cb05a200b43876117a182cabdcc3795632aa529473a0c8245f9e4f6e43e54c3f1da28bcb82 - 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)' + 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)" cost: 5960 - contract-call: contract-id: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.wormhole-core-v1 @@ -157,7 +157,7 @@ plan: # VAA of 3rd guardians rotation - 0x01000000020d00ce45474d9e1b1e7790a2d210871e195db53a70ffd6f237cfe70e2686a32859ac43c84a332267a8ef66f59719cf91cc8df0101fd7c36aa1878d5139241660edc0010375cc906156ae530786661c0cd9aef444747bc3d8d5aa84cac6a6d2933d4e1a031cffa30383d4af8131e929d9f203f460b07309a647d6cd32ab1cc7724089392c000452305156cfc90343128f97e499311b5cae174f488ff22fbc09591991a0a73d8e6af3afb8a5968441d3ab8437836407481739e9850ad5c95e6acfcc871e951bc30105a7956eefc23e7c945a1966d5ddbe9e4be376c2f54e45e3d5da88c2f8692510c7429b1ea860ae94d929bd97e84923a18187e777aa3db419813a80deb84cc8d22b00061b2a4f3d2666608e0aa96737689e3ba5793810ff3a52ff28ad57d8efb20967735dc5537a2e43ef10f583d144c12a1606542c207f5b79af08c38656d3ac40713301086b62c8e130af3411b3c0d91b5b50dcb01ed5f293963f901fc36e7b0e50114dce203373b32eb45971cef8288e5d928d0ed51cd86e2a3006b0af6a65c396c009080009e93ab4d2c8228901a5f4525934000b2c26d1dc679a05e47fdf0ff3231d98fbc207103159ff4116df2832eea69b38275283434e6cd4a4af04d25fa7a82990b707010aa643f4cf615dfff06ffd65830f7f6cf6512dabc3690d5d9e210fdc712842dc2708b8b2c22e224c99280cd25e5e8bfb40e3d1c55b8c41774e287c1e2c352aecfc010b89c1e85faa20a30601964ccc6a79c0ae53cfd26fb10863db37783428cd91390a163346558239db3cd9d420cfe423a0df84c84399790e2e308011b4b63e6b8015010ca31dcb564ac81a053a268d8090e72097f94f366711d0c5d13815af1ec7d47e662e2d1bde22678113d15963da100b668ba26c0c325970d07114b83c5698f46097010dc9fda39c0d592d9ed92cd22b5425cc6b37430e236f02d0d1f8a2ef45a00bde26223c0a6eb363c8b25fd3bf57234a1d9364976cefb8360e755a267cbbb674b39501108db01e444ab1003dd8b6c96f8eb77958b40ba7a85fefecf32ad00b7a47c0ae7524216262495977e09c0989dd50f280c21453d3756843608eacd17f4fdfe47600001261025228ef5af837cb060bcd986fcfa84ccef75b3fa100468cfd24e7fadf99163938f3b841a33496c2706d0208faab088bd155b2e20fd74c625bb1cc8c43677a0163c53c409e0c5dfa000100000000000000000000000000000000000000000000000000000000000000046c5a054d7833d1e42000000000000000000000000000000000000000000000000000000000436f7265020000000000031358cc3ae5c097b213ce3c81979e1b9f9570746aa5ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cd15e7caf07c4e3dc8e7c469f92c8cd88fb8005a2074a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d # Uncompressed public keys of selected guardians for Epoch 2: CertusOne, Staked, Figment, ChainodeTech, Inotel, HashQuark, ChainLayer, xLabs, Forbole, StakingFund, MoonletWallet, P2PValidator, 01node, MCFV2MAINNET, Everstake, ChorusOne, syncnode, Triton, StakingFacilities, cost: 5960 - - '(list + - "(list 0x2a953a2e8b1052eb70c1d7b556b087deed598b55608396686c1c811b9796c763078687ce10459f4f25fb7a0fbf8727bb0fb51e00820e93a123f652ee843cf08d 0x2766db08820e311b22e109801ab8ea505b12e3df3d91ebc87c999ffb6929d1abb0ade987c74aa37db26eea4086ee738a2f34a5594edb8760da0eac5be356b731 0x54177ff4a8329520b76efd86f8bfce5c942554db16e673267dc1133b3f5e230b2d8cbf90fe274946045d4491de288d736680edc2ee9ee5b1b15416b0a34806c4 @@ -176,7 +176,7 @@ plan: 0x604f384174c7ed3a0dc5f476569a978266a7943bd775449d1b8b27f4eb8beb99cdf095f9200a2dabb1bc5d68c3d96ea3d47f4d34499d59953669b6c8c093d578 0x4881345cbb299fa7c60ab2d16cb7fe7bf8d14675506ef6eb6037038b5b7092ea0a9e4d0b53ba3904edd99f86717d6ba81dffe44eb5b23c6fd22c91ab73c33021 0xee3d4cc17633afe7e1794fcfd728e0643325e3d130eb1daa39c0c5cb05a200b43876117a182cabdcc3795632aa529473a0c8245f9e4f6e43e54c3f1da28bcb82 - 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)' + 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)" cost: 5960 - contract-call: contract-id: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-helper-v1 @@ -186,4 +186,4 @@ plan: # PNAU payload - 0x504e41550100000003b801000000030d002c9e33a703a8c86012c117474849ae41118270cf56e2db61c7af28f64ce322391d33cb738930dc3ffcfe5ae35dbd99c4e08a8ac4b390c858d94dc1f0b91e24d00101901948561c54c17b7a21a9885d3f60a85b410e18209b02ebe098b0dd422b02667565e3b5011203303a6445cf629d20cec3d4771f0b391ab03bfd54364ac049f70002a030ed0060f1ba123ddf5473bef4c1c8f4aec8737b47f11023f94d5339b72c4c3aa325515956ea702537a3950d74f86134396de437bfc97a5365fc090dbb382c0103f1f64ba806fe8ba7b7db3846d85fccbe7d803865e7b757301f4a5de6ebde40f923ee925a7df78871d39299d70fd117635263b91fe53f792bfff450d210431316000439e31501d7b661a1b075a9302b57a6fc500c1e760de7e949e30994055b061b280cefcab3eb3b5c780f56cd555e88ee3c674b798ddeb8713bd27a361b8b8f1c730008db908c61e4158d1a7a7d53b2ec14027a4a2b2f3207edf0db2fbb0f431f3cdc020ee9fc9f38e812d094dcf5dd18f3a8d1d1ee94e840f504b00e08d0fbd607ed6d0109cf5c52aed9f4a42691c3c33bc366fde4a3ad23aacdd46c14669ad321106cf8d257b9379fc45cbe91a26ee87f4800951c5ca89ff0069e4a47299f988b368c6b74000b1241dea623dd874e13135682d760ee48ac1888149bddcfac54ff3787f4b89629063d89e084350ff1168999365918f9bdf469323b817a25491e56341a0da5c498000d538baecc668df092ce3cfeebfa5968447584916cb503ce50e7f77443bbd2a3441bb1d962a7f3401bfcf30f444a3301ab72dcb87cc04b681bdada93d45001f53d010e2fd97eeac94ceb3fd87a6e4ab3b785c64db221d522e58230a6d9eb10cba3b53a086ba6989e4285ab0816a26ff64c1a3a05175d0ffa61f4f744f928d6c5b3f92600107f999fa2f5cd826520cdf36f2e3434f4619eca4c2fb944bdec79d84903f76aaa02727844ec451378ab165910140c866ebdc65aea2cc6717da4747d4ed8a7338700115ce8f97f4a39ccdf5a61c9425d8a306a35b598db9d0f936bece6f2d92e79f9b1306d4c4789fb73ba5bd29bf0d306f2e8079aae818bc70aa9db111b745f1f4ab900126933d7f1317e3e45d98687e66ae033d871e1026e92f1ad168ec197a92ad653571837b78ee8e2263f2aca1dfa112fc78de63de9e2231f62ab79db2d956704146c0165131de200000000001ae101faedac5851e32b9b23b5f9411a8c2bac4aae3ed4dd7b811dd1a72ea4aa710000000000df92280141555756000000000005e1b46c00002710dbdd79b598d499596393b24358343774fd54e63c01005500ec7a775f46379b5e943c3526b1c8d54cd49749176b0b98e02dde68d1bd335c170000000002bf687c00000000000091effffffff80000000065131de10000000065131de00000000002c073dc0000000000008d5f09014cff5b7c5413efc667d2bca5549edadde5324814fed82e330d4110d610f5d0325deddb5541eacccd70da0a613768335768226657b201a456613163b0b4a21cf17276c2be6d02280ff05d08a6d4cf481c00c544f4adff1c86c6845a21871b75b4cffdc9314a2b46bddcb2bd44861fa48d4cc429a0783cb122a3eda67b7a13ad6298995c3bddd6cfa1ba547ddd38f0da18fcb0f7ead4d1de56db6c0442b94883a78f40b3541982a58d2d400dbfb761cce7bf780c cost: 5960 - epoch: "2.4" + epoch: "3.0" diff --git a/deployments/v1/1-upgrade-wormhole-core-v2.mainnet-plan.yaml b/deployments/v1/1-upgrade-wormhole-core-v2.mainnet-plan.yaml index b0331d4..435b584 100644 --- a/deployments/v1/1-upgrade-wormhole-core-v2.mainnet-plan.yaml +++ b/deployments/v1/1-upgrade-wormhole-core-v2.mainnet-plan.yaml @@ -9,14 +9,14 @@ plan: - id: 0 transactions: - contract-publish: - contract-name: wormhole-core-v2 + contract-name: wormhole-core-v3 expected-sender: SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0 cost: 1500000 - path: contracts/wormhole/wormhole-core-v2.clar + path: contracts/wormhole/wormhole-core-v3.clar anchor-block-only: true - clarity-version: 2 + clarity-version: 3 - contract-call: - contract-id: SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.pyth-governance-v1 + contract-id: SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.pyth-governance-v2 expected-sender: SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0 method: update-wormhole-core-contract parameters: @@ -26,14 +26,14 @@ plan: - id: 1 transactions: - contract-call: - contract-id: SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.wormhole-core-v2 + contract-id: SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.wormhole-core-v3 expected-sender: SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0 method: update-guardians-set parameters: # VAA of 1st guardians rotation - 0x010000000001007ac31b282c2aeeeb37f3385ee0de5f8e421d30b9e5ae8ba3d4375c1c77a86e77159bb697d9c456d6f8c02d22a94b1279b65b0d6a9957e7d3857423845ac758e300610ac1d2000000030001000000000000000000000000000000000000000000000000000000000000000400000000000005390000000000000000000000000000000000000000000000000000000000436f7265020000000000011358cc3ae5c097b213ce3c81979e1b9f9570746aa5ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cdeb5f7389fa26941519f0863349c223b73a6ddee774a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d # Uncompressed public keys of selected guardians for Epoch 1: CertusOne, Staked, Figment, ChainodeTech, Inotel, HashQuark, ChainLayer, DokiaCapital, Forbole, StakingFund, MoonletWallet, P2PValidator, 01node, MCFV2MAINNET, Everstake, ChorusOne, syncnode, Triton, StakingFacilities, cost: 5960 - - '(list + - "(list 0x2a953a2e8b1052eb70c1d7b556b087deed598b55608396686c1c811b9796c763078687ce10459f4f25fb7a0fbf8727bb0fb51e00820e93a123f652ee843cf08d 0x2766db08820e311b22e109801ab8ea505b12e3df3d91ebc87c999ffb6929d1abb0ade987c74aa37db26eea4086ee738a2f34a5594edb8760da0eac5be356b731 0x54177ff4a8329520b76efd86f8bfce5c942554db16e673267dc1133b3f5e230b2d8cbf90fe274946045d4491de288d736680edc2ee9ee5b1b15416b0a34806c4 @@ -52,17 +52,17 @@ plan: 0x604f384174c7ed3a0dc5f476569a978266a7943bd775449d1b8b27f4eb8beb99cdf095f9200a2dabb1bc5d68c3d96ea3d47f4d34499d59953669b6c8c093d578 0x4881345cbb299fa7c60ab2d16cb7fe7bf8d14675506ef6eb6037038b5b7092ea0a9e4d0b53ba3904edd99f86717d6ba81dffe44eb5b23c6fd22c91ab73c33021 0xee3d4cc17633afe7e1794fcfd728e0643325e3d130eb1daa39c0c5cb05a200b43876117a182cabdcc3795632aa529473a0c8245f9e4f6e43e54c3f1da28bcb82 - 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)' + 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)" cost: 1000000 - contract-call: - contract-id: SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.wormhole-core-v2 + contract-id: SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.wormhole-core-v3 expected-sender: SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0 method: update-guardians-set parameters: # VAA of 2nd guardians rotation - 0x01000000010d0012e6b39c6da90c5dfd3c228edbb78c7a4c97c488ff8a346d161a91db067e51d638c17216f368aa9bdf4836b8645a98018ca67d2fec87d769cabfdf2406bf790a0002ef42b288091a670ef3556596f4f47323717882881eaf38e03345078d07a156f312b785b64dae6e9a87e3d32872f59cb1931f728cecf511762981baf48303668f0103cef2616b84c4e511ff03329e0853f1bd7ee9ac5ba71d70a4d76108bddf94f69c2a8a84e4ee94065e8003c334e899184943634e12043d0dda78d93996da073d190104e76d166b9dac98f602107cc4b44ac82868faf00b63df7d24f177aa391e050902413b71046434e67c770b19aecdf7fce1d1435ea0be7262e3e4c18f50ddc8175c0105d9450e8216d741e0206a50f93b750a47e0a258b80eb8fed1314cc300b3d905092de25cd36d366097b7103ae2d184121329ba3aa2d7c6cc53273f11af14798110010687477c8deec89d36a23e7948feb074df95362fc8dcbd8ae910ac556a1dee1e755c56b9db5d710c940938ed79bc1895a3646523a58bc55f475a23435a373ecfdd0107fb06734864f79def4e192497362513171530daea81f07fbb9f698afe7e66c6d44db21323144f2657d4a5386a954bb94eef9f64148c33aef6e477eafa2c5c984c01088769e82216310d1827d9bd48645ec23e90de4ef8a8de99e2d351d1df318608566248d80cdc83bdcac382b3c30c670352be87f9069aab5037d0b747208eae9c650109e9796497ff9106d0d1c62e184d83716282870cef61a1ee13d6fc485b521adcce255c96f7d1bca8d8e7e7d454b65783a830bddc9d94092091a268d311ecd84c26010c468c9fb6d41026841ff9f8d7368fa309d4dbea3ea4bbd2feccf94a92cc8a20a226338a8e2126cd16f70eaf15b4fc9be2c3fa19def14e071956a605e9d1ac4162010e23fcb6bd445b7c25afb722250c1acbc061ed964ba9de1326609ae012acdfb96942b2a102a2de99ab96327859a34a2b49a767dbdb62e0a1fb26af60fe44fd496a00106bb0bac77ac68b347645f2fb1ad789ea9bd76fb9b2324f25ae06f97e65246f142df717f662e73948317182c62ce87d79c73def0dba12e5242dfc038382812cfe00126da03c5e56cb15aeeceadc1e17a45753ab4dc0ec7bf6a75ca03143ed4a294f6f61bc3f478a457833e43084ecd7c985bf2f55a55f168aac0e030fc49e845e497101626e9d9a5d9e343f00010000000000000000000000000000000000000000000000000000000000000004c1759167c43f501c2000000000000000000000000000000000000000000000000000000000436f7265020000000000021358cc3ae5c097b213ce3c81979e1b9f9570746aa5ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cd66b9590e1c41e0b226937bf9217d1d67fd4e91f574a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d # Uncompressed public keys of selected guardians for Epoch 2: CertusOne, Staked, Figment, ChainodeTech, Inotel, HashQuark, ChainLayer, FTX, Forbole, StakingFund, MoonletWallet, P2PValidator, 01node, MCFV2MAINNET, Everstake, ChorusOne, syncnode, Triton, StakingFacilities, cost: 5960 - - '(list + - "(list 0x2a953a2e8b1052eb70c1d7b556b087deed598b55608396686c1c811b9796c763078687ce10459f4f25fb7a0fbf8727bb0fb51e00820e93a123f652ee843cf08d 0x2766db08820e311b22e109801ab8ea505b12e3df3d91ebc87c999ffb6929d1abb0ade987c74aa37db26eea4086ee738a2f34a5594edb8760da0eac5be356b731 0x54177ff4a8329520b76efd86f8bfce5c942554db16e673267dc1133b3f5e230b2d8cbf90fe274946045d4491de288d736680edc2ee9ee5b1b15416b0a34806c4 @@ -81,17 +81,17 @@ plan: 0x604f384174c7ed3a0dc5f476569a978266a7943bd775449d1b8b27f4eb8beb99cdf095f9200a2dabb1bc5d68c3d96ea3d47f4d34499d59953669b6c8c093d578 0x4881345cbb299fa7c60ab2d16cb7fe7bf8d14675506ef6eb6037038b5b7092ea0a9e4d0b53ba3904edd99f86717d6ba81dffe44eb5b23c6fd22c91ab73c33021 0xee3d4cc17633afe7e1794fcfd728e0643325e3d130eb1daa39c0c5cb05a200b43876117a182cabdcc3795632aa529473a0c8245f9e4f6e43e54c3f1da28bcb82 - 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)' + 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)" cost: 1000000 - contract-call: - contract-id: SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.wormhole-core-v2 + contract-id: SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.wormhole-core-v3 expected-sender: SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0 method: update-guardians-set parameters: # VAA of 3rd guardians rotation - 0x01000000020d00ce45474d9e1b1e7790a2d210871e195db53a70ffd6f237cfe70e2686a32859ac43c84a332267a8ef66f59719cf91cc8df0101fd7c36aa1878d5139241660edc0010375cc906156ae530786661c0cd9aef444747bc3d8d5aa84cac6a6d2933d4e1a031cffa30383d4af8131e929d9f203f460b07309a647d6cd32ab1cc7724089392c000452305156cfc90343128f97e499311b5cae174f488ff22fbc09591991a0a73d8e6af3afb8a5968441d3ab8437836407481739e9850ad5c95e6acfcc871e951bc30105a7956eefc23e7c945a1966d5ddbe9e4be376c2f54e45e3d5da88c2f8692510c7429b1ea860ae94d929bd97e84923a18187e777aa3db419813a80deb84cc8d22b00061b2a4f3d2666608e0aa96737689e3ba5793810ff3a52ff28ad57d8efb20967735dc5537a2e43ef10f583d144c12a1606542c207f5b79af08c38656d3ac40713301086b62c8e130af3411b3c0d91b5b50dcb01ed5f293963f901fc36e7b0e50114dce203373b32eb45971cef8288e5d928d0ed51cd86e2a3006b0af6a65c396c009080009e93ab4d2c8228901a5f4525934000b2c26d1dc679a05e47fdf0ff3231d98fbc207103159ff4116df2832eea69b38275283434e6cd4a4af04d25fa7a82990b707010aa643f4cf615dfff06ffd65830f7f6cf6512dabc3690d5d9e210fdc712842dc2708b8b2c22e224c99280cd25e5e8bfb40e3d1c55b8c41774e287c1e2c352aecfc010b89c1e85faa20a30601964ccc6a79c0ae53cfd26fb10863db37783428cd91390a163346558239db3cd9d420cfe423a0df84c84399790e2e308011b4b63e6b8015010ca31dcb564ac81a053a268d8090e72097f94f366711d0c5d13815af1ec7d47e662e2d1bde22678113d15963da100b668ba26c0c325970d07114b83c5698f46097010dc9fda39c0d592d9ed92cd22b5425cc6b37430e236f02d0d1f8a2ef45a00bde26223c0a6eb363c8b25fd3bf57234a1d9364976cefb8360e755a267cbbb674b39501108db01e444ab1003dd8b6c96f8eb77958b40ba7a85fefecf32ad00b7a47c0ae7524216262495977e09c0989dd50f280c21453d3756843608eacd17f4fdfe47600001261025228ef5af837cb060bcd986fcfa84ccef75b3fa100468cfd24e7fadf99163938f3b841a33496c2706d0208faab088bd155b2e20fd74c625bb1cc8c43677a0163c53c409e0c5dfa000100000000000000000000000000000000000000000000000000000000000000046c5a054d7833d1e42000000000000000000000000000000000000000000000000000000000436f7265020000000000031358cc3ae5c097b213ce3c81979e1b9f9570746aa5ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cd15e7caf07c4e3dc8e7c469f92c8cd88fb8005a2074a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d # Uncompressed public keys of selected guardians for Epoch 2: CertusOne, Staked, Figment, ChainodeTech, Inotel, HashQuark, ChainLayer, xLabs, Forbole, StakingFund, MoonletWallet, P2PValidator, 01node, MCFV2MAINNET, Everstake, ChorusOne, syncnode, Triton, StakingFacilities, cost: 5960 - - '(list + - "(list 0x2a953a2e8b1052eb70c1d7b556b087deed598b55608396686c1c811b9796c763078687ce10459f4f25fb7a0fbf8727bb0fb51e00820e93a123f652ee843cf08d 0x2766db08820e311b22e109801ab8ea505b12e3df3d91ebc87c999ffb6929d1abb0ade987c74aa37db26eea4086ee738a2f34a5594edb8760da0eac5be356b731 0x54177ff4a8329520b76efd86f8bfce5c942554db16e673267dc1133b3f5e230b2d8cbf90fe274946045d4491de288d736680edc2ee9ee5b1b15416b0a34806c4 @@ -110,5 +110,5 @@ plan: 0x604f384174c7ed3a0dc5f476569a978266a7943bd775449d1b8b27f4eb8beb99cdf095f9200a2dabb1bc5d68c3d96ea3d47f4d34499d59953669b6c8c093d578 0x4881345cbb299fa7c60ab2d16cb7fe7bf8d14675506ef6eb6037038b5b7092ea0a9e4d0b53ba3904edd99f86717d6ba81dffe44eb5b23c6fd22c91ab73c33021 0xee3d4cc17633afe7e1794fcfd728e0643325e3d130eb1daa39c0c5cb05a200b43876117a182cabdcc3795632aa529473a0c8245f9e4f6e43e54c3f1da28bcb82 - 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)' + 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)" cost: 1000000 diff --git a/deployments/v1/1-upgrade-wormhole-core-v2.testnet-plan.yaml b/deployments/v1/1-upgrade-wormhole-core-v2.testnet-plan.yaml index cc4cbc1..0ef057f 100644 --- a/deployments/v1/1-upgrade-wormhole-core-v2.testnet-plan.yaml +++ b/deployments/v1/1-upgrade-wormhole-core-v2.testnet-plan.yaml @@ -9,14 +9,14 @@ plan: - id: 0 transactions: - contract-publish: - contract-name: wormhole-core-v2 + contract-name: wormhole-core-v3 expected-sender: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E cost: 1500000 - path: contracts/wormhole/wormhole-core-v2.clar + path: contracts/wormhole/wormhole-core-v3.clar anchor-block-only: true - clarity-version: 2 + clarity-version: 3 - contract-call: - contract-id: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-governance-v1 + contract-id: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-governance-v2 expected-sender: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E method: update-wormhole-core-contract parameters: @@ -29,18 +29,18 @@ plan: expected-sender: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E path: contracts/pyth-helper-v2.clar anchor-block-only: true - clarity-version: 2 + clarity-version: 3 - id: 1 transactions: - contract-call: - contract-id: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.wormhole-core-v2 + contract-id: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.wormhole-core-v3 expected-sender: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E method: update-guardians-set parameters: # VAA of 1st guardians rotation - 0x010000000001007ac31b282c2aeeeb37f3385ee0de5f8e421d30b9e5ae8ba3d4375c1c77a86e77159bb697d9c456d6f8c02d22a94b1279b65b0d6a9957e7d3857423845ac758e300610ac1d2000000030001000000000000000000000000000000000000000000000000000000000000000400000000000005390000000000000000000000000000000000000000000000000000000000436f7265020000000000011358cc3ae5c097b213ce3c81979e1b9f9570746aa5ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cdeb5f7389fa26941519f0863349c223b73a6ddee774a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d # Uncompressed public keys of selected guardians for Epoch 1: CertusOne, Staked, Figment, ChainodeTech, Inotel, HashQuark, ChainLayer, DokiaCapital, Forbole, StakingFund, MoonletWallet, P2PValidator, 01node, MCFV2MAINNET, Everstake, ChorusOne, syncnode, Triton, StakingFacilities, cost: 5960 - - '(list + - "(list 0x2a953a2e8b1052eb70c1d7b556b087deed598b55608396686c1c811b9796c763078687ce10459f4f25fb7a0fbf8727bb0fb51e00820e93a123f652ee843cf08d 0x2766db08820e311b22e109801ab8ea505b12e3df3d91ebc87c999ffb6929d1abb0ade987c74aa37db26eea4086ee738a2f34a5594edb8760da0eac5be356b731 0x54177ff4a8329520b76efd86f8bfce5c942554db16e673267dc1133b3f5e230b2d8cbf90fe274946045d4491de288d736680edc2ee9ee5b1b15416b0a34806c4 @@ -59,17 +59,17 @@ plan: 0x604f384174c7ed3a0dc5f476569a978266a7943bd775449d1b8b27f4eb8beb99cdf095f9200a2dabb1bc5d68c3d96ea3d47f4d34499d59953669b6c8c093d578 0x4881345cbb299fa7c60ab2d16cb7fe7bf8d14675506ef6eb6037038b5b7092ea0a9e4d0b53ba3904edd99f86717d6ba81dffe44eb5b23c6fd22c91ab73c33021 0xee3d4cc17633afe7e1794fcfd728e0643325e3d130eb1daa39c0c5cb05a200b43876117a182cabdcc3795632aa529473a0c8245f9e4f6e43e54c3f1da28bcb82 - 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)' + 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)" cost: 5960 - contract-call: - contract-id: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.wormhole-core-v2 + contract-id: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.wormhole-core-v3 expected-sender: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E method: update-guardians-set parameters: # VAA of 2nd guardians rotation - 0x01000000010d0012e6b39c6da90c5dfd3c228edbb78c7a4c97c488ff8a346d161a91db067e51d638c17216f368aa9bdf4836b8645a98018ca67d2fec87d769cabfdf2406bf790a0002ef42b288091a670ef3556596f4f47323717882881eaf38e03345078d07a156f312b785b64dae6e9a87e3d32872f59cb1931f728cecf511762981baf48303668f0103cef2616b84c4e511ff03329e0853f1bd7ee9ac5ba71d70a4d76108bddf94f69c2a8a84e4ee94065e8003c334e899184943634e12043d0dda78d93996da073d190104e76d166b9dac98f602107cc4b44ac82868faf00b63df7d24f177aa391e050902413b71046434e67c770b19aecdf7fce1d1435ea0be7262e3e4c18f50ddc8175c0105d9450e8216d741e0206a50f93b750a47e0a258b80eb8fed1314cc300b3d905092de25cd36d366097b7103ae2d184121329ba3aa2d7c6cc53273f11af14798110010687477c8deec89d36a23e7948feb074df95362fc8dcbd8ae910ac556a1dee1e755c56b9db5d710c940938ed79bc1895a3646523a58bc55f475a23435a373ecfdd0107fb06734864f79def4e192497362513171530daea81f07fbb9f698afe7e66c6d44db21323144f2657d4a5386a954bb94eef9f64148c33aef6e477eafa2c5c984c01088769e82216310d1827d9bd48645ec23e90de4ef8a8de99e2d351d1df318608566248d80cdc83bdcac382b3c30c670352be87f9069aab5037d0b747208eae9c650109e9796497ff9106d0d1c62e184d83716282870cef61a1ee13d6fc485b521adcce255c96f7d1bca8d8e7e7d454b65783a830bddc9d94092091a268d311ecd84c26010c468c9fb6d41026841ff9f8d7368fa309d4dbea3ea4bbd2feccf94a92cc8a20a226338a8e2126cd16f70eaf15b4fc9be2c3fa19def14e071956a605e9d1ac4162010e23fcb6bd445b7c25afb722250c1acbc061ed964ba9de1326609ae012acdfb96942b2a102a2de99ab96327859a34a2b49a767dbdb62e0a1fb26af60fe44fd496a00106bb0bac77ac68b347645f2fb1ad789ea9bd76fb9b2324f25ae06f97e65246f142df717f662e73948317182c62ce87d79c73def0dba12e5242dfc038382812cfe00126da03c5e56cb15aeeceadc1e17a45753ab4dc0ec7bf6a75ca03143ed4a294f6f61bc3f478a457833e43084ecd7c985bf2f55a55f168aac0e030fc49e845e497101626e9d9a5d9e343f00010000000000000000000000000000000000000000000000000000000000000004c1759167c43f501c2000000000000000000000000000000000000000000000000000000000436f7265020000000000021358cc3ae5c097b213ce3c81979e1b9f9570746aa5ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cd66b9590e1c41e0b226937bf9217d1d67fd4e91f574a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d # Uncompressed public keys of selected guardians for Epoch 2: CertusOne, Staked, Figment, ChainodeTech, Inotel, HashQuark, ChainLayer, FTX, Forbole, StakingFund, MoonletWallet, P2PValidator, 01node, MCFV2MAINNET, Everstake, ChorusOne, syncnode, Triton, StakingFacilities, cost: 5960 - - '(list + - "(list 0x2a953a2e8b1052eb70c1d7b556b087deed598b55608396686c1c811b9796c763078687ce10459f4f25fb7a0fbf8727bb0fb51e00820e93a123f652ee843cf08d 0x2766db08820e311b22e109801ab8ea505b12e3df3d91ebc87c999ffb6929d1abb0ade987c74aa37db26eea4086ee738a2f34a5594edb8760da0eac5be356b731 0x54177ff4a8329520b76efd86f8bfce5c942554db16e673267dc1133b3f5e230b2d8cbf90fe274946045d4491de288d736680edc2ee9ee5b1b15416b0a34806c4 @@ -88,17 +88,17 @@ plan: 0x604f384174c7ed3a0dc5f476569a978266a7943bd775449d1b8b27f4eb8beb99cdf095f9200a2dabb1bc5d68c3d96ea3d47f4d34499d59953669b6c8c093d578 0x4881345cbb299fa7c60ab2d16cb7fe7bf8d14675506ef6eb6037038b5b7092ea0a9e4d0b53ba3904edd99f86717d6ba81dffe44eb5b23c6fd22c91ab73c33021 0xee3d4cc17633afe7e1794fcfd728e0643325e3d130eb1daa39c0c5cb05a200b43876117a182cabdcc3795632aa529473a0c8245f9e4f6e43e54c3f1da28bcb82 - 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)' + 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)" cost: 5960 - contract-call: - contract-id: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.wormhole-core-v2 + contract-id: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.wormhole-core-v3 expected-sender: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E method: update-guardians-set parameters: # VAA of 3rd guardians rotation - 0x01000000020d00ce45474d9e1b1e7790a2d210871e195db53a70ffd6f237cfe70e2686a32859ac43c84a332267a8ef66f59719cf91cc8df0101fd7c36aa1878d5139241660edc0010375cc906156ae530786661c0cd9aef444747bc3d8d5aa84cac6a6d2933d4e1a031cffa30383d4af8131e929d9f203f460b07309a647d6cd32ab1cc7724089392c000452305156cfc90343128f97e499311b5cae174f488ff22fbc09591991a0a73d8e6af3afb8a5968441d3ab8437836407481739e9850ad5c95e6acfcc871e951bc30105a7956eefc23e7c945a1966d5ddbe9e4be376c2f54e45e3d5da88c2f8692510c7429b1ea860ae94d929bd97e84923a18187e777aa3db419813a80deb84cc8d22b00061b2a4f3d2666608e0aa96737689e3ba5793810ff3a52ff28ad57d8efb20967735dc5537a2e43ef10f583d144c12a1606542c207f5b79af08c38656d3ac40713301086b62c8e130af3411b3c0d91b5b50dcb01ed5f293963f901fc36e7b0e50114dce203373b32eb45971cef8288e5d928d0ed51cd86e2a3006b0af6a65c396c009080009e93ab4d2c8228901a5f4525934000b2c26d1dc679a05e47fdf0ff3231d98fbc207103159ff4116df2832eea69b38275283434e6cd4a4af04d25fa7a82990b707010aa643f4cf615dfff06ffd65830f7f6cf6512dabc3690d5d9e210fdc712842dc2708b8b2c22e224c99280cd25e5e8bfb40e3d1c55b8c41774e287c1e2c352aecfc010b89c1e85faa20a30601964ccc6a79c0ae53cfd26fb10863db37783428cd91390a163346558239db3cd9d420cfe423a0df84c84399790e2e308011b4b63e6b8015010ca31dcb564ac81a053a268d8090e72097f94f366711d0c5d13815af1ec7d47e662e2d1bde22678113d15963da100b668ba26c0c325970d07114b83c5698f46097010dc9fda39c0d592d9ed92cd22b5425cc6b37430e236f02d0d1f8a2ef45a00bde26223c0a6eb363c8b25fd3bf57234a1d9364976cefb8360e755a267cbbb674b39501108db01e444ab1003dd8b6c96f8eb77958b40ba7a85fefecf32ad00b7a47c0ae7524216262495977e09c0989dd50f280c21453d3756843608eacd17f4fdfe47600001261025228ef5af837cb060bcd986fcfa84ccef75b3fa100468cfd24e7fadf99163938f3b841a33496c2706d0208faab088bd155b2e20fd74c625bb1cc8c43677a0163c53c409e0c5dfa000100000000000000000000000000000000000000000000000000000000000000046c5a054d7833d1e42000000000000000000000000000000000000000000000000000000000436f7265020000000000031358cc3ae5c097b213ce3c81979e1b9f9570746aa5ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cd15e7caf07c4e3dc8e7c469f92c8cd88fb8005a2074a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d # Uncompressed public keys of selected guardians for Epoch 2: CertusOne, Staked, Figment, ChainodeTech, Inotel, HashQuark, ChainLayer, xLabs, Forbole, StakingFund, MoonletWallet, P2PValidator, 01node, MCFV2MAINNET, Everstake, ChorusOne, syncnode, Triton, StakingFacilities, cost: 5960 - - '(list + - "(list 0x2a953a2e8b1052eb70c1d7b556b087deed598b55608396686c1c811b9796c763078687ce10459f4f25fb7a0fbf8727bb0fb51e00820e93a123f652ee843cf08d 0x2766db08820e311b22e109801ab8ea505b12e3df3d91ebc87c999ffb6929d1abb0ade987c74aa37db26eea4086ee738a2f34a5594edb8760da0eac5be356b731 0x54177ff4a8329520b76efd86f8bfce5c942554db16e673267dc1133b3f5e230b2d8cbf90fe274946045d4491de288d736680edc2ee9ee5b1b15416b0a34806c4 @@ -117,5 +117,5 @@ plan: 0x604f384174c7ed3a0dc5f476569a978266a7943bd775449d1b8b27f4eb8beb99cdf095f9200a2dabb1bc5d68c3d96ea3d47f4d34499d59953669b6c8c093d578 0x4881345cbb299fa7c60ab2d16cb7fe7bf8d14675506ef6eb6037038b5b7092ea0a9e4d0b53ba3904edd99f86717d6ba81dffe44eb5b23c6fd22c91ab73c33021 0xee3d4cc17633afe7e1794fcfd728e0643325e3d130eb1daa39c0c5cb05a200b43876117a182cabdcc3795632aa529473a0c8245f9e4f6e43e54c3f1da28bcb82 - 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)' + 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)" cost: 5960 diff --git a/deployments/v1/2-upgrade-pyth-oracle-v2.mainnet-plan.yaml b/deployments/v1/2-upgrade-pyth-oracle-v2.mainnet-plan.yaml index 08447b2..1f5a358 100644 --- a/deployments/v1/2-upgrade-pyth-oracle-v2.mainnet-plan.yaml +++ b/deployments/v1/2-upgrade-pyth-oracle-v2.mainnet-plan.yaml @@ -9,32 +9,32 @@ plan: - id: 0 transactions: - contract-publish: - contract-name: pyth-oracle-v2 + contract-name: pyth-oracle-v3 expected-sender: SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0 cost: 1500000 - path: contracts/pyth-oracle-v2.clar + path: contracts/pyth-oracle-v3.clar anchor-block-only: true - clarity-version: 2 + clarity-version: 3 - contract-call: - contract-id: SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.pyth-governance-v1 + contract-id: SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.pyth-governance-v2 expected-sender: SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0 method: update-pyth-oracle-contract parameters: - 0x01000000030d044ce04515ca1bb86efcca35689dfe05f807a1777d0fd00f41fd4a6d6632565151338b06fc0ddd7ca818d0185ae498b40c14b417927c5efdbdcdc4f3576022d0280105dc270846d3dbd70c75e9b27f1e311b6d28711d603ef8c023d0d703437eecfc355884c32dc0d890a9613c375eaf08c8f2396367a980152720d480c761ebb4f27f01079c83a462ac207417c3db4fed70cac673e76054bbcf9ac49281230c52df1051a64db1208012097c5d320c6c55223593eecd84923fc998c0952b761be07597a56d00088ad9f72005fce5f71e01da3c07223a693496aee31a78b1de3b596bf6d7db9f313eeeca6bcf22476fe768589f1eb33b9edaf82079e35cba894b700bcfc2f770d40009efad48bd8ca2c21a385ce0bba12b76b3d0531694f6018c71cf693b3cbd63f875094060cf252ad4d44133f96f526b48c0b6a81725e51dcd6b62b7c2562cae4674010b01695bec37c4e1a20e84c8dbcd2e6c57106e8fa57c94d3111c0fae47fc1b819b3b59431a26d1d76dd3fd9c945d4c211322d7f4fd464bf63500426943913af6da000c241bb8c124fea2f506260b6e5eb3d71f3d25b2b514e7464a344905a6f8e1827a237701a704189e7a315e6838e489ad7c55a52b5db52cd005345612abe292f307000dc8715d4d6fea307b6ea82c081f6b3bce76733409147080dcb050a61073c13ee92f74f76a30b1bb9556984e3a82635e480017b03d2a928ef94215962aacc28da6000edc04978ed74cafe6aeab5434f3bb801aadcac7af635d3dc6b31fa3d71c199c7d47904325c37270183775401e4008ce7a038f4cf5d67a5e9822213d83663969e0010f75f6a6d0de3151a5754c62f0f77d2c417301136302f55f0ab62c7a1f3df061645ac050dc1a99ab49835e88ed9521004f8e433f8365952b762d15c4427eff07260010a49259faeda20f00270b4efee2df041d4d47fa01e3e2b9745e3e69ba1c1cbb987802d417977a54db56d2bce8935d4636a3d393e166e3706810286a4dc4fcd48f001180f5002ba14e25e3376ff57e9c9d2ddde1ce333378a56e9f88cd9ccafd9ed1984a058e923603ab20cd4d7e4eff8500b39e5b42119d87f69fd62edc5e56e861c100122ddbe4722e964d21ce55f8a7c83652683a5606d5b0e8323fd8600f1311f6e6585eaafd774befd804e96f846bb35cb6d236686c1bf5829fcd03e953492621d0920165a505af0000000000015635979a221c34931e32620b9293a463065555ea71fe97cd6237ade875b12e9e000000000000007d015054474d0300ea86250616b4594f9cb0dfef749ec4d1099570179958394ef00e707974682d6f7261636c652d7632 - - "'SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.wormhole-core-v2" + - "'SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.wormhole-core-v3" cost: 1000000 - id: 1 transactions: - contract-call: - contract-id: SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.pyth-oracle-v2 + contract-id: SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.pyth-oracle-v3 expected-sender: SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0 method: verify-and-update-price-feeds parameters: # PNAU payload - 0x504e41550100000003b801000000030d026b102bc02cdb8bdb4894627bf84a2e0fdb60262e086adaef120602351c27a68709e7d353b094f52b8d811845a717accc2635d71ccd67ba41c37d5dad886deb7800030bbe7dda773f536db496a3573afceb9cd952ddce136edce96bc2bc52cfcfde494819a6765545afaea3ca62a0098ee18c45bf2b71afad5e26bbb3d358cac66299000443bfed7d6d49ffe8980d955e1704c37dd9cea9b5c477c81cc0713ed2c0f30e913054ccb53fd81d492e5226bf8b2f593debe5b6a43b9991b176949b5db204ccde00061509d1b53e47f1542397f79b14ffef49843279957e524e55cc3d7597c326713e742ba3ad33fc9ff484e0421d19cde9f4be90042116b3ea8962c592f8bbda23e40107c29f886d3fe660f214c32d00769c49156fe7f1683c881b675f81c0a00b50d3f37421b2193c7f2aa95ee6ca02ddc6c79877f6685e5696ed49542a71340ef8beca01085743d5682e17c149ffa13f03220204d4a797a9064708f7c9ce3fc5e5daad9a5e3620def0b69893a80d7079e34358b50db06ce1f7310fadd9c911b534756a2dcb010aae2132e31461e2b904e95abb5e01e12787e71d3bbc29b41dd235c398d0de87d27403d3be6f465d204ef471f8739424c030512581da692e8d379483f5ecdcb22c010b1e9eb4223a0efdcb730ca0955a9301ec65c259154751f4058facdbadc703effa0cb6f3be39ab9c8abf79a98a7168194795dcd835e495afc8bf71e349c8c16e00010d155e34124941d4544a0ad78b0872a3c9d69f81ae61d03d71063a460f7ab0578a6905bef01362dd4cc8a9e7130a8c8ec120f9b13b993c7535f6a1f0df25ac36e3010e484b48e38e5f3936530b5e157348923a416746a88ca89d6c67da8c35033adf584242c53a9a2ac1b1f2516d681ce8ee5a36f7ba11f457b4521d70ddc1736b8108010f63d7ff14ce7936dc498893c00573243dc0481934ddcb4c2e71c527e63b5cb58067a878e14ace924a5f2e80d6b8637609d9e1cb4e9950e660af34a425b3899ca00110ab6c35bee875593535ebdb9330fccf385729699c663dbb4c652505e29702c666163800fc87665a245c3737bbaa1d8c75ec4ce617e82dc661217276ec8195374b0012921b631d1ad6c6604c1f86738e787ae50a0f7203b4e0c4df62e39561be3a309d109eaf9be3d3398d0220376055e40493a02424143613ceb8934171769aa63afc0165aeb9e300000000001ae101faedac5851e32b9b23b5f9411a8c2bac4aae3ed4dd7b811dd1a72ea4aa7100000000023a7c8e0141555756000000000007421d35000027101fc023e3636689c705ebae2b5992cdbe4af3a6ac01005500ec7a775f46379b5e943c3526b1c8d54cd49749176b0b98e02dde68d1bd335c170000000008630cf8000000000002265bfffffff80000000065aeb9e30000000065aeb9e3000000000852ef0c00000000000254480a499e6012f4e65e5262a240f06cdc2e936528c025b6921cd1d796cd706ef7004b4c84f78098ce07a926b5b5111e6f0a1747fe50b745323f42eeb25850e3e4539eec7c035a3f7c89b03e3f851c8968f89ff4d4239f529681886e798605d6930ea09049bed5d1704bde473fdea271e4577e40fb3c10b1fd7e0f10accbb18506914c3a46a21e3267a247bf5ed734de7dd360677ffa4432265df877a72eee404e486d4bf88c54b9f869dec66a3c7cc3b367e4460fd86a2f4d843c73c5219279901a76c0786e172f832f60 - "{ - pyth-storage-contract: 'SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.pyth-store-v1, - pyth-decoder-contract: 'SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.pyth-pnau-decoder-v1, - wormhole-core-contract: 'SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.wormhole-core-v2 + pyth-storage-contract: 'SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.pyth-storage-v1, + pyth-decoder-contract: 'SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.pyth-pnau-decoder-v2, + wormhole-core-contract: 'SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.wormhole-core-v3 }" cost: 1000000 diff --git a/deployments/v1/2-upgrade-pyth-oracle-v2.testnet-plan.yaml b/deployments/v1/2-upgrade-pyth-oracle-v2.testnet-plan.yaml index e5c3082..34e64a0 100644 --- a/deployments/v1/2-upgrade-pyth-oracle-v2.testnet-plan.yaml +++ b/deployments/v1/2-upgrade-pyth-oracle-v2.testnet-plan.yaml @@ -9,32 +9,32 @@ plan: - id: 0 transactions: - contract-publish: - contract-name: pyth-oracle-v2 + contract-name: pyth-oracle-v3 expected-sender: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E cost: 1500000 - path: contracts/pyth-oracle-v2.clar + path: contracts/pyth-oracle-v3.clar anchor-block-only: true - clarity-version: 2 + clarity-version: 3 - contract-call: - contract-id: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-governance-v1 + contract-id: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-governance-v2 expected-sender: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E method: update-pyth-oracle-contract parameters: - 0x01000000030d013c560c6bbc713803096ee90e0994ad503b392fea10c5b8490d8771a8faac0d494eee6db9548718a6bd58e2fbfd0a81a93611a8d2ad237a914c95b43870e95fde01045afb91eb8b6513a33fbfc671ba6a798a5c72c05ecbeaa9341d4b0e3ecb6b9797484f0211706c025b0fded280e43723a9552c6e0a458ff087e0aa033504e7077d0005f80bc8122ca76a6a00b836be9b7c62501aa53296500bf22640a83e53a225e45b52c24a5fcad47ffd6aeb95ec45ac14332163f1c4cfe0a0e600183d78618a649c0007ce8f665edb3f32eae5f9072d8b6ddf004e74e06f2f5c41f457d2b126a0f5d1d25ea7486222c4a85d8ad7e84555efc8b9d46df369b4b504d466e05b73c71623b10108401a43a3ed21ef8c05d4719c586c56f4ec4710242abfc211919738a03f3990fc3d1f9af94104f4593bf93a8a4bb8f74b1ce3056c8f919de3fc6c18f36e0e1da100094ea84cbbee2683cceae8169e791d5f0b6e1d8a98ba9015847ae2314238d88c757112f355d67d796d7de050959eabb4934d8ffebdb2a5ee97bc965a6fa3779a4b000b4a569948a156a2624df5ca7c1daf8b01b24d98e9cc813c595e330f0b4923619524eff06ea78edb5705ca3540d48ed6a1f2dfc0ffd33b69d02e641e751caea737000cf53f8dc11fdcfafcf88ada961876385e475d9d1cca85f6b03624a54807cf28c25f8ee9655ee202a51a794de397610253fa8710b70ce3086bf18b2942c7b6c19b010d9203e26195c7c4aae2fcb9449665885e9cad8acee081a217e2163eee6b75cb40180583dbe871b012625b1e5920bc3153a1a7c5fdebfc99c47a68d461ab4c0221000ff563b950953e5bd6f48f6657ca4e0561a71e07316b240393fd04f0fac0396c0955e488b56ffffb237bfdbfa79d56b16c8262ec7e7c306d4b8019ddd8662e1614011087f0c8e6f42139cb9b58c4c7e4ddb894776dc306745d6028532b4e963c2b1e4a0c3fdea84b5fd4f8ffa8dd0aa1ceaf08607c2c687df827829ca6386fe375548701117a7ab02704af53a5d0e92c7f50330398167ae8bd4c907c3fe6a587f848ca481740c41aed5dbe7899d6d9784331577f77dfa36a042987e4dcab3b93af27bdc3a30012fbc3be66ae6aecb7a1e81e8537cec709fe19089aeb6df32aa302ae441f216d814659a6e25942a50e760697cd0aa97764e6ac355a2e9c88a74529aeeecdb57b8f0165a505a90000000000015635979a221c34931e32620b9293a463065555ea71fe97cd6237ade875b12e9e000000000000007c015054474d0300c37725061ab4594f9cb0dfef749ec4d1099570179958394ef00e707974682d6f7261636c652d7632 - - "'ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.wormhole-core-v2" + - "'ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.wormhole-core-v3" cost: 1000000 - id: 1 transactions: - contract-call: - contract-id: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-oracle-v2 + contract-id: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-oracle-v3 expected-sender: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E method: verify-and-update-price-feeds parameters: # PNAU payload - 0x504e41550100000003b801000000030d0221e8cc3d46a31cfec2d9c923fbf9769244fbfda0541ceee60a9be20381870a10772422dfba0553a1153fddcd68787781e6cdfcc2a8a423e7115ec0f82489c9f7010389a20662a1641c7d028a48bd8bc3fd4e3bab55bd05595dc3c2ee3a9636e000f47738b6b94f024ed2e9db712ee53e3a769c4ece5370c0c75b6d067efc0a0738df000402a383ede342042ede33259b998f7082d7bbd0d4a1cfc307dbd0c8a770b430f96ffc7612245939db4a58229150c16d00111ab674d173ae545df595f7f346a50e010672c91c2f91e8c580059aabc0c67e688dd33510a1ffa4f967e035906d71924ac82dde2e66587a26076079ac4b2e51306e9d76c376679343e905465aac5d087c9e0107c0014d1631d99224415fb9b28d89031632adb20074a3b8c1b8ffae7566f9b1cc04e95d79b296808b282b40ccf7793ecb0bf29b4bf32595d1f1fd984495ca22180008b4dcb85fd705e131c27b52020a02b75182f050035ee1aa38529816a82aa6a01f2f29b9c7c3c86c7aa9459dd8e5680db584e408b509cebb36da11f4f89ed45dd2000b31c0d3a3275bb9270706c397260a7d984aa935a296f1eb8b20cdcbf6d57b726370637c958cc88136e1cb59578b67d8bb253b3ec6ee9e55e306b06e2939d49016000cc3d981ce7b9aa2a7d1d4c545d14e7c0b5494cd907e73365a8bd9f9b795eb254d50e861d60a0dece7e0a454c44b92c28d88e3d9f043f7afba23cbc27b39dd2723010dfb185cfb06cfc91395543341ca600ecc54d033745b16f16d485512d24de7326005a9e01674b820d9ed37f49b5a064d475fe90c1646a94b0a75b46d888c9e9ff1010ef225d346610362267cc95030bab12f7ded66e90931cd7b33a75b2e3ac100758445bfc7e956777051f23cb52a1c3ea31825e05f404ae1e2ef19497bd35a14a094000f89a42f6a6bc80d2630fc7f088bef763c63dd0ecd432009b31db509e91ddaa76603d889112b49b9c996f23110e1a21e9f8bf160de62027f27cfa4a4b664e523de00105fbc3e45bfe249c1d55ee34b2c19ccfd1c6f61b801fbb87a027ef560d16a29f456d27d0a8555a614d57f4c3c421a9380ba9c7ef11aa094730a701fcc9c9176a30112c81637eba3e28234c3e520c14afa0e84288296ed330043fce9384a1e66aa27703b89351bd90b0c880fb0dae89cb49d98abe9b0862c7b83e426e2a54a22f26ece0165aebb2700000000001ae101faedac5851e32b9b23b5f9411a8c2bac4aae3ed4dd7b811dd1a72ea4aa7100000000023a7e990141555756000000000007421f61000027102086c7b6b2789170929e85729f448eef8cc1966e01005500ec7a775f46379b5e943c3526b1c8d54cd49749176b0b98e02dde68d1bd335c1700000000085d5648000000000001fb21fffffff80000000065aebb270000000065aebb27000000000853e6fd00000000000250830afd186ca195fb66ca2bd28c3cf4723f2915c0accfcb5dc2044cf8297149a0b0cfc934556c8187cde31ef6e7fab09834c22a9914ce96a3e9f3e6cc818c252eea4ace06b4d7938273be8fdb428c954d90bcfc4329a64c186e3e428c0ea6308895238c0e2693498a576249bb4b53236eedbae74d84958fcd7ab8d6214c3b62056901f2dad8585d903dd6d8e4f55038817cb5cf2b2cbb05244d26ddfb1327e4e868de7a0597c0782b3d456eefad038dbf472d0224608b8fdcdbfd18e05fdfb0d807f048242d64cab5450f - "{ - pyth-storage-contract: 'ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-store-v1, - pyth-decoder-contract: 'ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-pnau-decoder-v1, - wormhole-core-contract: 'ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.wormhole-core-v2 + pyth-storage-contract: 'ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-storage-v1, + pyth-decoder-contract: 'ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-pnau-decoder-v2, + wormhole-core-contract: 'ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.wormhole-core-v3 }" cost: 1000000 diff --git a/deployments/v1/3-update-wormhole-guardian-set.mainnet-plan.yaml b/deployments/v1/3-update-wormhole-guardian-set.mainnet-plan.yaml index 0f4c032..c4560b5 100644 --- a/deployments/v1/3-update-wormhole-guardian-set.mainnet-plan.yaml +++ b/deployments/v1/3-update-wormhole-guardian-set.mainnet-plan.yaml @@ -9,14 +9,14 @@ plan: - id: 0 transactions: - contract-call: - contract-id: SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.wormhole-core-v2 + contract-id: SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0.wormhole-core-v3 expected-sender: SP2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY2P2PKN0 method: update-guardians-set parameters: # VAA of 4th guardians rotation - 0x01000000030d03d4a37a6ff4361d91714730831e9d49785f61624c8f348a9c6c1d82bc1d98cadc5e936338204445c6250bb4928f3f3e165ad47ca03a5d63111168a2de4576856301049a5df10464ea4e1961589fd30fc18d1970a7a2ffaad617e56a0f7777f25275253af7d10a0f0f2494dc6e99fc80e444ab9ebbbee252ded2d5dcb50cbf7a54bb5a01055f4603b553b9ba9e224f9c55c7bca3da00abb10abd19e0081aecd3b352be061a70f79f5f388ebe5190838ef3cd13a2f22459c9a94206883b739c90b40d5d74640006a8fade3997f650a36e46bceb1f609edff201ab32362266f166c5c7da713f6a19590c20b68ed3f0119cb24813c727560ede086b3d610c2d7a1efa66f655bad90900080f5e495a75ea52241c59d145c616bfac01e57182ad8d784cbcc9862ed3afb60c0983ccbc690553961ffcf115a0c917367daada8e60be2cbb8b8008bac6341a8c010935ab11e0eea28b87a1edc5ccce3f1fac25f75b5f640fe6b0673a7cd74513c9dc01c544216cf364cc9993b09fda612e0cd1ced9c00fb668b872a16a64ebb55d27010ab2bc39617a2396e7defa24cd7c22f42dc31f3c42ffcd9d1472b02df8468a4d0563911e8fb6a4b5b0ce0bd505daa53779b08ff660967b31f246126ed7f6f29a7e000bdb6d3fd7b33bdc9ac3992916eb4aacb97e7e21d19649e7fa28d2dd6e337937e4274516a96c13ac7a8895da9f91948ea3a09c25f44b982c62ce8842b58e20c8a9000d3d1b19c8bb000856b6610b9d28abde6c35cb7705c6ca5db711f7be96d60eed9d72cfa402a6bfe8bf0496dbc7af35796fc768da51a067b95941b3712dce8ae1e7010ec80085033157fd1a5628fc0c56267469a86f0e5a66d7dede1ad4ce74ecc3dff95b60307a39c3bfbeedc915075070da30d0395def9635130584f709b3885e1bdc0010fc480eb9ee715a2d151b23722b48b42581d7f4001fc1696c75425040bfc1ffc5394fe418adb2b64bd3dc692efda4cc408163677dbe233b16bcdabb853a20843301118ee9e115e1a0c981f19d0772b850e666591322da742a9a12cce9f52a5665bd474abdd59c580016bee8aae67fdf39b315be2528d12eec3a652910e03cc4c6fa3801129d0d1e2e429e969918ec163d16a7a5b2c6729aa44af5dccad07d25d19891556a79b574f42d9adbd9e2a9ae5a6b8750331d2fccb328dd94c3bf8791ee1bfe85aa00661e99781981faea00010000000000000000000000000000000000000000000000000000000000000004fd4c6c55ec8dfd342000000000000000000000000000000000000000000000000000000000436f726502000000000004135893b5a76c3f739645648885bdccc06cd70a3cd3ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cd15e7caf07c4e3dc8e7c469f92c8cd88fb8005a2074a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d # Uncompressed public keys of selected guardians: RockawayX, Staked, Figment, ChainodeTech, Inotel, HashQuark, ChainLayer, xLabs, Forbole, StakingFund, MoonletWallet, P2PValidator, 01node, MCFV2MAINNET, Everstake, ChorusOne, syncnode, Triton, StakingFacilities, cost: 5960 - - '(list + - "(list 0x9a1e801daa25d9808e70aae9981353086f958955cc94ef33a461b0e596feaef90a8474dd10cf6ae967143f86105c16d6304a3d268ea952fda9389139d4bb9da1 0x2766db08820e311b22e109801ab8ea505b12e3df3d91ebc87c999ffb6929d1abb0ade987c74aa37db26eea4086ee738a2f34a5594edb8760da0eac5be356b731 0x54177ff4a8329520b76efd86f8bfce5c942554db16e673267dc1133b3f5e230b2d8cbf90fe274946045d4491de288d736680edc2ee9ee5b1b15416b0a34806c4 @@ -35,5 +35,5 @@ plan: 0x604f384174c7ed3a0dc5f476569a978266a7943bd775449d1b8b27f4eb8beb99cdf095f9200a2dabb1bc5d68c3d96ea3d47f4d34499d59953669b6c8c093d578 0x4881345cbb299fa7c60ab2d16cb7fe7bf8d14675506ef6eb6037038b5b7092ea0a9e4d0b53ba3904edd99f86717d6ba81dffe44eb5b23c6fd22c91ab73c33021 0xee3d4cc17633afe7e1794fcfd728e0643325e3d130eb1daa39c0c5cb05a200b43876117a182cabdcc3795632aa529473a0c8245f9e4f6e43e54c3f1da28bcb82 - 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)' + 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)" cost: 1000000 diff --git a/deployments/v1/3-update-wormhole-guardian-set.testnet-plan.yaml b/deployments/v1/3-update-wormhole-guardian-set.testnet-plan.yaml index 4f09283..28733fd 100644 --- a/deployments/v1/3-update-wormhole-guardian-set.testnet-plan.yaml +++ b/deployments/v1/3-update-wormhole-guardian-set.testnet-plan.yaml @@ -9,14 +9,14 @@ plan: - id: 0 transactions: - contract-call: - contract-id: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.wormhole-core-v2 + contract-id: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.wormhole-core-v3 expected-sender: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E method: update-guardians-set parameters: # VAA of 4rd guardians rotation - 0x01000000030d03d4a37a6ff4361d91714730831e9d49785f61624c8f348a9c6c1d82bc1d98cadc5e936338204445c6250bb4928f3f3e165ad47ca03a5d63111168a2de4576856301049a5df10464ea4e1961589fd30fc18d1970a7a2ffaad617e56a0f7777f25275253af7d10a0f0f2494dc6e99fc80e444ab9ebbbee252ded2d5dcb50cbf7a54bb5a01055f4603b553b9ba9e224f9c55c7bca3da00abb10abd19e0081aecd3b352be061a70f79f5f388ebe5190838ef3cd13a2f22459c9a94206883b739c90b40d5d74640006a8fade3997f650a36e46bceb1f609edff201ab32362266f166c5c7da713f6a19590c20b68ed3f0119cb24813c727560ede086b3d610c2d7a1efa66f655bad90900080f5e495a75ea52241c59d145c616bfac01e57182ad8d784cbcc9862ed3afb60c0983ccbc690553961ffcf115a0c917367daada8e60be2cbb8b8008bac6341a8c010935ab11e0eea28b87a1edc5ccce3f1fac25f75b5f640fe6b0673a7cd74513c9dc01c544216cf364cc9993b09fda612e0cd1ced9c00fb668b872a16a64ebb55d27010ab2bc39617a2396e7defa24cd7c22f42dc31f3c42ffcd9d1472b02df8468a4d0563911e8fb6a4b5b0ce0bd505daa53779b08ff660967b31f246126ed7f6f29a7e000bdb6d3fd7b33bdc9ac3992916eb4aacb97e7e21d19649e7fa28d2dd6e337937e4274516a96c13ac7a8895da9f91948ea3a09c25f44b982c62ce8842b58e20c8a9000d3d1b19c8bb000856b6610b9d28abde6c35cb7705c6ca5db711f7be96d60eed9d72cfa402a6bfe8bf0496dbc7af35796fc768da51a067b95941b3712dce8ae1e7010ec80085033157fd1a5628fc0c56267469a86f0e5a66d7dede1ad4ce74ecc3dff95b60307a39c3bfbeedc915075070da30d0395def9635130584f709b3885e1bdc0010fc480eb9ee715a2d151b23722b48b42581d7f4001fc1696c75425040bfc1ffc5394fe418adb2b64bd3dc692efda4cc408163677dbe233b16bcdabb853a20843301118ee9e115e1a0c981f19d0772b850e666591322da742a9a12cce9f52a5665bd474abdd59c580016bee8aae67fdf39b315be2528d12eec3a652910e03cc4c6fa3801129d0d1e2e429e969918ec163d16a7a5b2c6729aa44af5dccad07d25d19891556a79b574f42d9adbd9e2a9ae5a6b8750331d2fccb328dd94c3bf8791ee1bfe85aa00661e99781981faea00010000000000000000000000000000000000000000000000000000000000000004fd4c6c55ec8dfd342000000000000000000000000000000000000000000000000000000000436f726502000000000004135893b5a76c3f739645648885bdccc06cd70a3cd3ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cd15e7caf07c4e3dc8e7c469f92c8cd88fb8005a2074a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d # Uncompressed public keys of selected guardians: RockawayX, Staked, Figment, ChainodeTech, Inotel, HashQuark, ChainLayer, xLabs, Forbole, StakingFund, MoonletWallet, P2PValidator, 01node, MCFV2MAINNET, Everstake, ChorusOne, syncnode, Triton, StakingFacilities, cost: 5960 - - '(list + - "(list 0x9a1e801daa25d9808e70aae9981353086f958955cc94ef33a461b0e596feaef90a8474dd10cf6ae967143f86105c16d6304a3d268ea952fda9389139d4bb9da1 0x2766db08820e311b22e109801ab8ea505b12e3df3d91ebc87c999ffb6929d1abb0ade987c74aa37db26eea4086ee738a2f34a5594edb8760da0eac5be356b731 0x54177ff4a8329520b76efd86f8bfce5c942554db16e673267dc1133b3f5e230b2d8cbf90fe274946045d4491de288d736680edc2ee9ee5b1b15416b0a34806c4 @@ -35,5 +35,5 @@ plan: 0x604f384174c7ed3a0dc5f476569a978266a7943bd775449d1b8b27f4eb8beb99cdf095f9200a2dabb1bc5d68c3d96ea3d47f4d34499d59953669b6c8c093d578 0x4881345cbb299fa7c60ab2d16cb7fe7bf8d14675506ef6eb6037038b5b7092ea0a9e4d0b53ba3904edd99f86717d6ba81dffe44eb5b23c6fd22c91ab73c33021 0xee3d4cc17633afe7e1794fcfd728e0643325e3d130eb1daa39c0c5cb05a200b43876117a182cabdcc3795632aa529473a0c8245f9e4f6e43e54c3f1da28bcb82 - 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)' + 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)" cost: 1000000 diff --git a/example/cbtc/Clarinet.toml b/example/cbtc/Clarinet.toml index fe0a6df..1aac6c0 100644 --- a/example/cbtc/Clarinet.toml +++ b/example/cbtc/Clarinet.toml @@ -8,19 +8,19 @@ telemetry = false contract_id = "SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-tokens-v1" [[project.requirements]] -contract_id = "ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-oracle-v2" +contract_id = "ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-oracle-v3" [[project.requirements]] contract_id = "ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.wormhole-core-v1" [[project.requirements]] -contract_id = "ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.wormhole-core-v2" +contract_id = "ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.wormhole-core-v3" [[project.requirements]] -contract_id = 'ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-store-v1' +contract_id = 'ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-storage-v3' [[project.requirements]] -contract_id = 'ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-pnau-decoder-v1' +contract_id = 'ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-pnau-decoder-v2' [contracts.cbtc-token] path = "contracts/cbtc-token.clar" diff --git a/example/cbtc/contracts/cbtc-pool.clar b/example/cbtc/contracts/cbtc-pool.clar index 1368ad0..749b626 100644 --- a/example/cbtc/contracts/cbtc-pool.clar +++ b/example/cbtc/contracts/cbtc-pool.clar @@ -38,12 +38,12 @@ (define-private (update-and-read-stx-price-from-pyth (stx-price-feed (buff 2048))) (let ((updated-prices-ids (unwrap! - (contract-call? 'ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-oracle-v2 verify-and-update-price-feeds + (contract-call? 'ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-oracle-v3 verify-and-update-price-feeds stx-price-feed { - pyth-storage-contract: 'ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-store-v1, - pyth-decoder-contract: 'ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-pnau-decoder-v1, - wormhole-core-contract: 'ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.wormhole-core-v2 + pyth-storage-contract: 'ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-storage-v3, + pyth-decoder-contract: 'ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-pnau-decoder-v2, + wormhole-core-contract: 'ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.wormhole-core-v3 }) (err u0))) (price (unwrap! (element-at? updated-prices-ids u0) (err u404)))) @@ -51,12 +51,12 @@ (define-private (update-and-read-btc-price-from-pyth (btc-price-feed (buff 2048))) (let ((updated-prices-ids (unwrap! - (contract-call? 'ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-oracle-v2 verify-and-update-price-feeds + (contract-call? 'ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-oracle-v3 verify-and-update-price-feeds btc-price-feed { - pyth-storage-contract: 'ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-store-v1, - pyth-decoder-contract: 'ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-pnau-decoder-v1, - wormhole-core-contract: 'ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.wormhole-core-v2 + pyth-storage-contract: 'ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-storage-v3, + pyth-decoder-contract: 'ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-pnau-decoder-v2, + wormhole-core-contract: 'ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.wormhole-core-v3 }) (err u0))) (price (unwrap! (element-at? updated-prices-ids u0) (err u404)))) @@ -69,6 +69,6 @@ (read-price-from-pyth 0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43)) (define-private (read-price-from-pyth (price-id (buff 32))) - (let ((feed (unwrap! (contract-call? 'ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-oracle-v2 read-price-feed price-id 'ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-store-v1) (err u0))) + (let ((feed (unwrap! (contract-call? 'ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-oracle-v3 read-price-feed price-id 'ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-storage-v3) (err u0))) (price (get price feed))) (ok (to-uint price)))) diff --git a/example/cbtc/deployments/default.devnet-plan.yaml b/example/cbtc/deployments/default.devnet-plan.yaml index c78e93d..6abfcab 100644 --- a/example/cbtc/deployments/default.devnet-plan.yaml +++ b/example/cbtc/deployments/default.devnet-plan.yaml @@ -26,7 +26,7 @@ plan: SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM cost: 38790 path: ".cache/requirements/SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-cursor-v1.clar" - clarity-version: 2 + clarity-version: 3 - requirement-publish: contract-id: SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.wormhole-core-trait remap-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM @@ -34,7 +34,7 @@ plan: SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM cost: 6460 path: ".cache/requirements/SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.wormhole-core-trait.clar" - clarity-version: 2 + clarity-version: 3 - requirement-publish: contract-id: SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.wormhole-core-dev-preview-1 remap-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM @@ -42,7 +42,7 @@ plan: SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM cost: 198570 path: ".cache/requirements/SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.wormhole-core-dev-preview-1.clar" - clarity-version: 2 + clarity-version: 3 - requirement-publish: contract-id: SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.pyth-oracle-dev-preview-1 remap-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM @@ -50,15 +50,15 @@ plan: SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM cost: 164670 path: ".cache/requirements/SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.pyth-oracle-dev-preview-1.clar" - clarity-version: 2 + clarity-version: 3 - contract-publish: contract-name: cbtc-token expected-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM cost: 12800 path: contracts/cbtc-token.clar anchor-block-only: true - clarity-version: 2 - epoch: "2.4" + clarity-version: 3 + epoch: "3.0" - id: 2 transactions: - contract-call: @@ -148,4 +148,4 @@ plan: 0xee3d4cc17633afe7e1794fcfd728e0643325e3d130eb1daa39c0c5cb05a200b43876117a182cabdcc3795632aa529473a0c8245f9e4f6e43e54c3f1da28bcb82 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204)' cost: 5960 - epoch: "2.4" + epoch: "3.0" diff --git a/example/cbtc/deployments/default.simnet-plan.yaml b/example/cbtc/deployments/default.simnet-plan.yaml index 92cb2c0..09b63c0 100644 --- a/example/cbtc/deployments/default.simnet-plan.yaml +++ b/example/cbtc/deployments/default.simnet-plan.yaml @@ -53,68 +53,68 @@ plan: contract-name: hk-tokens-v1 emulated-sender: SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F path: ".cache/requirements/SP2J933XB2CP2JQ1A4FGN8JA968BBG3NK3EKZ7Q9F.hk-tokens-v1.clar" - clarity-version: 2 + clarity-version: 3 - emulated-contract-publish: contract-name: hk-cursor-v2 emulated-sender: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E path: ".cache/requirements/ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.hk-cursor-v2.clar" - clarity-version: 2 + clarity-version: 3 - emulated-contract-publish: contract-name: hk-merkle-tree-keccak160-v1 emulated-sender: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E path: ".cache/requirements/ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.hk-merkle-tree-keccak160-v1.clar" - clarity-version: 2 + clarity-version: 3 - emulated-contract-publish: contract-name: wormhole-traits-v1 emulated-sender: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E path: ".cache/requirements/ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.wormhole-traits-v1.clar" - clarity-version: 2 + clarity-version: 3 - emulated-contract-publish: contract-name: pyth-traits-v1 emulated-sender: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E path: ".cache/requirements/ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-traits-v1.clar" - clarity-version: 2 + clarity-version: 3 - emulated-contract-publish: - contract-name: pyth-governance-v1 + contract-name: pyth-governance-v2 emulated-sender: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E - path: ".cache/requirements/ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-governance-v1.clar" - clarity-version: 2 + path: ".cache/requirements/ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-governance-v2.clar" + clarity-version: 3 - emulated-contract-publish: - contract-name: pyth-oracle-v2 + contract-name: pyth-oracle-v3 emulated-sender: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E - path: ".cache/requirements/ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-oracle-v2.clar" - clarity-version: 2 + path: ".cache/requirements/ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-oracle-v3.clar" + clarity-version: 3 - emulated-contract-publish: - contract-name: pyth-pnau-decoder-v1 + contract-name: pyth-pnau-decoder-v2 emulated-sender: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E - path: ".cache/requirements/ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-pnau-decoder-v1.clar" - clarity-version: 2 + path: ".cache/requirements/ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-pnau-decoder-v2.clar" + clarity-version: 3 - emulated-contract-publish: - contract-name: pyth-store-v1 + contract-name: pyth-storage-v1 emulated-sender: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E - path: ".cache/requirements/ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-store-v1.clar" - clarity-version: 2 + path: ".cache/requirements/ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-storage-v1.clar" + clarity-version: 3 - emulated-contract-publish: contract-name: wormhole-core-v1 emulated-sender: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E path: ".cache/requirements/ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.wormhole-core-v1.clar" - clarity-version: 2 + clarity-version: 3 - emulated-contract-publish: - contract-name: wormhole-core-v2 + contract-name: wormhole-core-v3 emulated-sender: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E - path: ".cache/requirements/ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.wormhole-core-v2.clar" - clarity-version: 2 + path: ".cache/requirements/ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.wormhole-core-v3.clar" + clarity-version: 3 - emulated-contract-publish: contract-name: cbtc-token emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM path: contracts/cbtc-token.clar - clarity-version: 2 + clarity-version: 3 - emulated-contract-publish: contract-name: cbtc-pool emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM path: contracts/cbtc-pool.clar - clarity-version: 2 - epoch: "2.4" + clarity-version: 3 + epoch: "3.0" - id: 1 transactions: - emulated-contract-call: @@ -139,45 +139,45 @@ plan: - "0x01000000020d00ce45474d9e1b1e7790a2d210871e195db53a70ffd6f237cfe70e2686a32859ac43c84a332267a8ef66f59719cf91cc8df0101fd7c36aa1878d5139241660edc0010375cc906156ae530786661c0cd9aef444747bc3d8d5aa84cac6a6d2933d4e1a031cffa30383d4af8131e929d9f203f460b07309a647d6cd32ab1cc7724089392c000452305156cfc90343128f97e499311b5cae174f488ff22fbc09591991a0a73d8e6af3afb8a5968441d3ab8437836407481739e9850ad5c95e6acfcc871e951bc30105a7956eefc23e7c945a1966d5ddbe9e4be376c2f54e45e3d5da88c2f8692510c7429b1ea860ae94d929bd97e84923a18187e777aa3db419813a80deb84cc8d22b00061b2a4f3d2666608e0aa96737689e3ba5793810ff3a52ff28ad57d8efb20967735dc5537a2e43ef10f583d144c12a1606542c207f5b79af08c38656d3ac40713301086b62c8e130af3411b3c0d91b5b50dcb01ed5f293963f901fc36e7b0e50114dce203373b32eb45971cef8288e5d928d0ed51cd86e2a3006b0af6a65c396c009080009e93ab4d2c8228901a5f4525934000b2c26d1dc679a05e47fdf0ff3231d98fbc207103159ff4116df2832eea69b38275283434e6cd4a4af04d25fa7a82990b707010aa643f4cf615dfff06ffd65830f7f6cf6512dabc3690d5d9e210fdc712842dc2708b8b2c22e224c99280cd25e5e8bfb40e3d1c55b8c41774e287c1e2c352aecfc010b89c1e85faa20a30601964ccc6a79c0ae53cfd26fb10863db37783428cd91390a163346558239db3cd9d420cfe423a0df84c84399790e2e308011b4b63e6b8015010ca31dcb564ac81a053a268d8090e72097f94f366711d0c5d13815af1ec7d47e662e2d1bde22678113d15963da100b668ba26c0c325970d07114b83c5698f46097010dc9fda39c0d592d9ed92cd22b5425cc6b37430e236f02d0d1f8a2ef45a00bde26223c0a6eb363c8b25fd3bf57234a1d9364976cefb8360e755a267cbbb674b39501108db01e444ab1003dd8b6c96f8eb77958b40ba7a85fefecf32ad00b7a47c0ae7524216262495977e09c0989dd50f280c21453d3756843608eacd17f4fdfe47600001261025228ef5af837cb060bcd986fcfa84ccef75b3fa100468cfd24e7fadf99163938f3b841a33496c2706d0208faab088bd155b2e20fd74c625bb1cc8c43677a0163c53c409e0c5dfa000100000000000000000000000000000000000000000000000000000000000000046c5a054d7833d1e42000000000000000000000000000000000000000000000000000000000436f7265020000000000031358cc3ae5c097b213ce3c81979e1b9f9570746aa5ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cd15e7caf07c4e3dc8e7c469f92c8cd88fb8005a2074a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d" - (list 0x2a953a2e8b1052eb70c1d7b556b087deed598b55608396686c1c811b9796c763078687ce10459f4f25fb7a0fbf8727bb0fb51e00820e93a123f652ee843cf08d 0x2766db08820e311b22e109801ab8ea505b12e3df3d91ebc87c999ffb6929d1abb0ade987c74aa37db26eea4086ee738a2f34a5594edb8760da0eac5be356b731 0x54177ff4a8329520b76efd86f8bfce5c942554db16e673267dc1133b3f5e230b2d8cbf90fe274946045d4491de288d736680edc2ee9ee5b1b15416b0a34806c4 0x7fa3e98fcc2621337b217b61408a98facaabd25bad2b158438728ce863c14708cfcda1f3b50a16ca0211199079fb338d479a54546ec3c5f775af23a7d7f4fb24 0x0bdcbccc0297c2a4f92a7c39358c42f22a8ed700a78bd05c39c8b61aaf2338e825b6c0d26d1f2a2ae4129cd751201f73d7234c753bd0735212a5288b19748fd2 0xcfd90084be68de514fe14a7c281f492223f045566f859ea5c166d6e60bc650c23940909a8e96c2fbffbd15a598b4e6a5b5aa14c126bf58cc1a9e396fe7771965 0x8edf3f9d997357a0e2c916ee090392c3a645ebac4f6cd8f826d3ecc0173b33bf06b7c14e8002fc9a5d01af9824a5cb3778472cd477e0ab378091448bca6f0417 0x47b15c5039dcb2850b59bea323db662cc597dd7d48fe6b8dbb6cd8704c45854bf0e92fa267c844ba1a700105e157c8099d55c82316cb5e50c56a5d0920ff91c2 0xd5225476d7849b362226952ffc561bab99832f3f8b99741f6d81bbeaffa8e7f6e54a85e5029a3b510707eaa9684df496e4b1268075ad0328693a30bf1b1e0033 0xd9fa78b5b958bea1929080b8ad96dc555d34b051a27aebf711eb1186b807b0448316d994606ac807121838d6c41a58f308bc6307acdf69491fa4b17282f3e66f 0xcc64af75ec2e2741fb9af9f6191cb9ee187d6d26af4d1e96d7bab47e6ec09be12d3192030dc4bbf54d1da319a7a2acfc7a9dd4c644af6646a4aaa02b1024bbab 0xb5943b6e284682ad2e011d6962d41febf86af2f5fc0c9c8f4b81358ff077f9c96ba0880eaf93541eae94b4fa41dba66dab7fb0201cc9af7c75681e5719b0c95f 0x0cfc9d5b5dcf702a1525f9d4ed1841e8eb8b34434cc82470dd35435f1dbdc73ffb51544b7500394eac9c7fa567868b495326075147a2d809ebbfd43273eeec91 0x0aa78894d894a15933969f5826347439e2c309f2049277a10066c9197840499498ad19ee3d1b291f932ec0890bbdafcec292c4f02a446670cd0084f997e25e2f 0x00f400e3fe40f64032485aad9240ead45a8e1fc83ec08c96db861c0eca155ac898df8673e778e3ccaae8a0f9e6af415fe40e99b0cbc88d7610e536b6041b07fb 0x604f384174c7ed3a0dc5f476569a978266a7943bd775449d1b8b27f4eb8beb99cdf095f9200a2dabb1bc5d68c3d96ea3d47f4d34499d59953669b6c8c093d578 0x4881345cbb299fa7c60ab2d16cb7fe7bf8d14675506ef6eb6037038b5b7092ea0a9e4d0b53ba3904edd99f86717d6ba81dffe44eb5b23c6fd22c91ab73c33021 0xee3d4cc17633afe7e1794fcfd728e0643325e3d130eb1daa39c0c5cb05a200b43876117a182cabdcc3795632aa529473a0c8245f9e4f6e43e54c3f1da28bcb82 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204) - emulated-contract-call: - contract-id: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.wormhole-core-v2 + contract-id: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.wormhole-core-v3 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM method: update-guardians-set parameters: - "0x010000000001007ac31b282c2aeeeb37f3385ee0de5f8e421d30b9e5ae8ba3d4375c1c77a86e77159bb697d9c456d6f8c02d22a94b1279b65b0d6a9957e7d3857423845ac758e300610ac1d2000000030001000000000000000000000000000000000000000000000000000000000000000400000000000005390000000000000000000000000000000000000000000000000000000000436f7265020000000000011358cc3ae5c097b213ce3c81979e1b9f9570746aa5ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cdeb5f7389fa26941519f0863349c223b73a6ddee774a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d" - (list 0x2a953a2e8b1052eb70c1d7b556b087deed598b55608396686c1c811b9796c763078687ce10459f4f25fb7a0fbf8727bb0fb51e00820e93a123f652ee843cf08d 0x2766db08820e311b22e109801ab8ea505b12e3df3d91ebc87c999ffb6929d1abb0ade987c74aa37db26eea4086ee738a2f34a5594edb8760da0eac5be356b731 0x54177ff4a8329520b76efd86f8bfce5c942554db16e673267dc1133b3f5e230b2d8cbf90fe274946045d4491de288d736680edc2ee9ee5b1b15416b0a34806c4 0x7fa3e98fcc2621337b217b61408a98facaabd25bad2b158438728ce863c14708cfcda1f3b50a16ca0211199079fb338d479a54546ec3c5f775af23a7d7f4fb24 0x0bdcbccc0297c2a4f92a7c39358c42f22a8ed700a78bd05c39c8b61aaf2338e825b6c0d26d1f2a2ae4129cd751201f73d7234c753bd0735212a5288b19748fd2 0xcfd90084be68de514fe14a7c281f492223f045566f859ea5c166d6e60bc650c23940909a8e96c2fbffbd15a598b4e6a5b5aa14c126bf58cc1a9e396fe7771965 0x8edf3f9d997357a0e2c916ee090392c3a645ebac4f6cd8f826d3ecc0173b33bf06b7c14e8002fc9a5d01af9824a5cb3778472cd477e0ab378091448bca6f0417 0x6200deeadd3b4e2cd0a168d42e720a3b88d3ce4769ff2808086e6fd36110fc05c591ccbf91368609dc3b21203e58c9883d4f580085469bef8d5bdcd26eb8ad69 0xd5225476d7849b362226952ffc561bab99832f3f8b99741f6d81bbeaffa8e7f6e54a85e5029a3b510707eaa9684df496e4b1268075ad0328693a30bf1b1e0033 0xd9fa78b5b958bea1929080b8ad96dc555d34b051a27aebf711eb1186b807b0448316d994606ac807121838d6c41a58f308bc6307acdf69491fa4b17282f3e66f 0xcc64af75ec2e2741fb9af9f6191cb9ee187d6d26af4d1e96d7bab47e6ec09be12d3192030dc4bbf54d1da319a7a2acfc7a9dd4c644af6646a4aaa02b1024bbab 0xb5943b6e284682ad2e011d6962d41febf86af2f5fc0c9c8f4b81358ff077f9c96ba0880eaf93541eae94b4fa41dba66dab7fb0201cc9af7c75681e5719b0c95f 0x0cfc9d5b5dcf702a1525f9d4ed1841e8eb8b34434cc82470dd35435f1dbdc73ffb51544b7500394eac9c7fa567868b495326075147a2d809ebbfd43273eeec91 0x0aa78894d894a15933969f5826347439e2c309f2049277a10066c9197840499498ad19ee3d1b291f932ec0890bbdafcec292c4f02a446670cd0084f997e25e2f 0x00f400e3fe40f64032485aad9240ead45a8e1fc83ec08c96db861c0eca155ac898df8673e778e3ccaae8a0f9e6af415fe40e99b0cbc88d7610e536b6041b07fb 0x604f384174c7ed3a0dc5f476569a978266a7943bd775449d1b8b27f4eb8beb99cdf095f9200a2dabb1bc5d68c3d96ea3d47f4d34499d59953669b6c8c093d578 0x4881345cbb299fa7c60ab2d16cb7fe7bf8d14675506ef6eb6037038b5b7092ea0a9e4d0b53ba3904edd99f86717d6ba81dffe44eb5b23c6fd22c91ab73c33021 0xee3d4cc17633afe7e1794fcfd728e0643325e3d130eb1daa39c0c5cb05a200b43876117a182cabdcc3795632aa529473a0c8245f9e4f6e43e54c3f1da28bcb82 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204) - emulated-contract-call: - contract-id: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.wormhole-core-v2 + contract-id: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.wormhole-core-v3 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM method: update-guardians-set parameters: - "0x01000000010d0012e6b39c6da90c5dfd3c228edbb78c7a4c97c488ff8a346d161a91db067e51d638c17216f368aa9bdf4836b8645a98018ca67d2fec87d769cabfdf2406bf790a0002ef42b288091a670ef3556596f4f47323717882881eaf38e03345078d07a156f312b785b64dae6e9a87e3d32872f59cb1931f728cecf511762981baf48303668f0103cef2616b84c4e511ff03329e0853f1bd7ee9ac5ba71d70a4d76108bddf94f69c2a8a84e4ee94065e8003c334e899184943634e12043d0dda78d93996da073d190104e76d166b9dac98f602107cc4b44ac82868faf00b63df7d24f177aa391e050902413b71046434e67c770b19aecdf7fce1d1435ea0be7262e3e4c18f50ddc8175c0105d9450e8216d741e0206a50f93b750a47e0a258b80eb8fed1314cc300b3d905092de25cd36d366097b7103ae2d184121329ba3aa2d7c6cc53273f11af14798110010687477c8deec89d36a23e7948feb074df95362fc8dcbd8ae910ac556a1dee1e755c56b9db5d710c940938ed79bc1895a3646523a58bc55f475a23435a373ecfdd0107fb06734864f79def4e192497362513171530daea81f07fbb9f698afe7e66c6d44db21323144f2657d4a5386a954bb94eef9f64148c33aef6e477eafa2c5c984c01088769e82216310d1827d9bd48645ec23e90de4ef8a8de99e2d351d1df318608566248d80cdc83bdcac382b3c30c670352be87f9069aab5037d0b747208eae9c650109e9796497ff9106d0d1c62e184d83716282870cef61a1ee13d6fc485b521adcce255c96f7d1bca8d8e7e7d454b65783a830bddc9d94092091a268d311ecd84c26010c468c9fb6d41026841ff9f8d7368fa309d4dbea3ea4bbd2feccf94a92cc8a20a226338a8e2126cd16f70eaf15b4fc9be2c3fa19def14e071956a605e9d1ac4162010e23fcb6bd445b7c25afb722250c1acbc061ed964ba9de1326609ae012acdfb96942b2a102a2de99ab96327859a34a2b49a767dbdb62e0a1fb26af60fe44fd496a00106bb0bac77ac68b347645f2fb1ad789ea9bd76fb9b2324f25ae06f97e65246f142df717f662e73948317182c62ce87d79c73def0dba12e5242dfc038382812cfe00126da03c5e56cb15aeeceadc1e17a45753ab4dc0ec7bf6a75ca03143ed4a294f6f61bc3f478a457833e43084ecd7c985bf2f55a55f168aac0e030fc49e845e497101626e9d9a5d9e343f00010000000000000000000000000000000000000000000000000000000000000004c1759167c43f501c2000000000000000000000000000000000000000000000000000000000436f7265020000000000021358cc3ae5c097b213ce3c81979e1b9f9570746aa5ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cd66b9590e1c41e0b226937bf9217d1d67fd4e91f574a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d" - (list 0x2a953a2e8b1052eb70c1d7b556b087deed598b55608396686c1c811b9796c763078687ce10459f4f25fb7a0fbf8727bb0fb51e00820e93a123f652ee843cf08d 0x2766db08820e311b22e109801ab8ea505b12e3df3d91ebc87c999ffb6929d1abb0ade987c74aa37db26eea4086ee738a2f34a5594edb8760da0eac5be356b731 0x54177ff4a8329520b76efd86f8bfce5c942554db16e673267dc1133b3f5e230b2d8cbf90fe274946045d4491de288d736680edc2ee9ee5b1b15416b0a34806c4 0x7fa3e98fcc2621337b217b61408a98facaabd25bad2b158438728ce863c14708cfcda1f3b50a16ca0211199079fb338d479a54546ec3c5f775af23a7d7f4fb24 0x0bdcbccc0297c2a4f92a7c39358c42f22a8ed700a78bd05c39c8b61aaf2338e825b6c0d26d1f2a2ae4129cd751201f73d7234c753bd0735212a5288b19748fd2 0xcfd90084be68de514fe14a7c281f492223f045566f859ea5c166d6e60bc650c23940909a8e96c2fbffbd15a598b4e6a5b5aa14c126bf58cc1a9e396fe7771965 0x8edf3f9d997357a0e2c916ee090392c3a645ebac4f6cd8f826d3ecc0173b33bf06b7c14e8002fc9a5d01af9824a5cb3778472cd477e0ab378091448bca6f0417 0x 0xd5225476d7849b362226952ffc561bab99832f3f8b99741f6d81bbeaffa8e7f6e54a85e5029a3b510707eaa9684df496e4b1268075ad0328693a30bf1b1e0033 0xd9fa78b5b958bea1929080b8ad96dc555d34b051a27aebf711eb1186b807b0448316d994606ac807121838d6c41a58f308bc6307acdf69491fa4b17282f3e66f 0xcc64af75ec2e2741fb9af9f6191cb9ee187d6d26af4d1e96d7bab47e6ec09be12d3192030dc4bbf54d1da319a7a2acfc7a9dd4c644af6646a4aaa02b1024bbab 0xb5943b6e284682ad2e011d6962d41febf86af2f5fc0c9c8f4b81358ff077f9c96ba0880eaf93541eae94b4fa41dba66dab7fb0201cc9af7c75681e5719b0c95f 0x0cfc9d5b5dcf702a1525f9d4ed1841e8eb8b34434cc82470dd35435f1dbdc73ffb51544b7500394eac9c7fa567868b495326075147a2d809ebbfd43273eeec91 0x0aa78894d894a15933969f5826347439e2c309f2049277a10066c9197840499498ad19ee3d1b291f932ec0890bbdafcec292c4f02a446670cd0084f997e25e2f 0x00f400e3fe40f64032485aad9240ead45a8e1fc83ec08c96db861c0eca155ac898df8673e778e3ccaae8a0f9e6af415fe40e99b0cbc88d7610e536b6041b07fb 0x604f384174c7ed3a0dc5f476569a978266a7943bd775449d1b8b27f4eb8beb99cdf095f9200a2dabb1bc5d68c3d96ea3d47f4d34499d59953669b6c8c093d578 0x4881345cbb299fa7c60ab2d16cb7fe7bf8d14675506ef6eb6037038b5b7092ea0a9e4d0b53ba3904edd99f86717d6ba81dffe44eb5b23c6fd22c91ab73c33021 0xee3d4cc17633afe7e1794fcfd728e0643325e3d130eb1daa39c0c5cb05a200b43876117a182cabdcc3795632aa529473a0c8245f9e4f6e43e54c3f1da28bcb82 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204) - emulated-contract-call: - contract-id: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.wormhole-core-v2 + contract-id: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.wormhole-core-v3 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM method: update-guardians-set parameters: - "0x01000000020d00ce45474d9e1b1e7790a2d210871e195db53a70ffd6f237cfe70e2686a32859ac43c84a332267a8ef66f59719cf91cc8df0101fd7c36aa1878d5139241660edc0010375cc906156ae530786661c0cd9aef444747bc3d8d5aa84cac6a6d2933d4e1a031cffa30383d4af8131e929d9f203f460b07309a647d6cd32ab1cc7724089392c000452305156cfc90343128f97e499311b5cae174f488ff22fbc09591991a0a73d8e6af3afb8a5968441d3ab8437836407481739e9850ad5c95e6acfcc871e951bc30105a7956eefc23e7c945a1966d5ddbe9e4be376c2f54e45e3d5da88c2f8692510c7429b1ea860ae94d929bd97e84923a18187e777aa3db419813a80deb84cc8d22b00061b2a4f3d2666608e0aa96737689e3ba5793810ff3a52ff28ad57d8efb20967735dc5537a2e43ef10f583d144c12a1606542c207f5b79af08c38656d3ac40713301086b62c8e130af3411b3c0d91b5b50dcb01ed5f293963f901fc36e7b0e50114dce203373b32eb45971cef8288e5d928d0ed51cd86e2a3006b0af6a65c396c009080009e93ab4d2c8228901a5f4525934000b2c26d1dc679a05e47fdf0ff3231d98fbc207103159ff4116df2832eea69b38275283434e6cd4a4af04d25fa7a82990b707010aa643f4cf615dfff06ffd65830f7f6cf6512dabc3690d5d9e210fdc712842dc2708b8b2c22e224c99280cd25e5e8bfb40e3d1c55b8c41774e287c1e2c352aecfc010b89c1e85faa20a30601964ccc6a79c0ae53cfd26fb10863db37783428cd91390a163346558239db3cd9d420cfe423a0df84c84399790e2e308011b4b63e6b8015010ca31dcb564ac81a053a268d8090e72097f94f366711d0c5d13815af1ec7d47e662e2d1bde22678113d15963da100b668ba26c0c325970d07114b83c5698f46097010dc9fda39c0d592d9ed92cd22b5425cc6b37430e236f02d0d1f8a2ef45a00bde26223c0a6eb363c8b25fd3bf57234a1d9364976cefb8360e755a267cbbb674b39501108db01e444ab1003dd8b6c96f8eb77958b40ba7a85fefecf32ad00b7a47c0ae7524216262495977e09c0989dd50f280c21453d3756843608eacd17f4fdfe47600001261025228ef5af837cb060bcd986fcfa84ccef75b3fa100468cfd24e7fadf99163938f3b841a33496c2706d0208faab088bd155b2e20fd74c625bb1cc8c43677a0163c53c409e0c5dfa000100000000000000000000000000000000000000000000000000000000000000046c5a054d7833d1e42000000000000000000000000000000000000000000000000000000000436f7265020000000000031358cc3ae5c097b213ce3c81979e1b9f9570746aa5ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cd15e7caf07c4e3dc8e7c469f92c8cd88fb8005a2074a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d" - (list 0x2a953a2e8b1052eb70c1d7b556b087deed598b55608396686c1c811b9796c763078687ce10459f4f25fb7a0fbf8727bb0fb51e00820e93a123f652ee843cf08d 0x2766db08820e311b22e109801ab8ea505b12e3df3d91ebc87c999ffb6929d1abb0ade987c74aa37db26eea4086ee738a2f34a5594edb8760da0eac5be356b731 0x54177ff4a8329520b76efd86f8bfce5c942554db16e673267dc1133b3f5e230b2d8cbf90fe274946045d4491de288d736680edc2ee9ee5b1b15416b0a34806c4 0x7fa3e98fcc2621337b217b61408a98facaabd25bad2b158438728ce863c14708cfcda1f3b50a16ca0211199079fb338d479a54546ec3c5f775af23a7d7f4fb24 0x0bdcbccc0297c2a4f92a7c39358c42f22a8ed700a78bd05c39c8b61aaf2338e825b6c0d26d1f2a2ae4129cd751201f73d7234c753bd0735212a5288b19748fd2 0xcfd90084be68de514fe14a7c281f492223f045566f859ea5c166d6e60bc650c23940909a8e96c2fbffbd15a598b4e6a5b5aa14c126bf58cc1a9e396fe7771965 0x8edf3f9d997357a0e2c916ee090392c3a645ebac4f6cd8f826d3ecc0173b33bf06b7c14e8002fc9a5d01af9824a5cb3778472cd477e0ab378091448bca6f0417 0x47b15c5039dcb2850b59bea323db662cc597dd7d48fe6b8dbb6cd8704c45854bf0e92fa267c844ba1a700105e157c8099d55c82316cb5e50c56a5d0920ff91c2 0xd5225476d7849b362226952ffc561bab99832f3f8b99741f6d81bbeaffa8e7f6e54a85e5029a3b510707eaa9684df496e4b1268075ad0328693a30bf1b1e0033 0xd9fa78b5b958bea1929080b8ad96dc555d34b051a27aebf711eb1186b807b0448316d994606ac807121838d6c41a58f308bc6307acdf69491fa4b17282f3e66f 0xcc64af75ec2e2741fb9af9f6191cb9ee187d6d26af4d1e96d7bab47e6ec09be12d3192030dc4bbf54d1da319a7a2acfc7a9dd4c644af6646a4aaa02b1024bbab 0xb5943b6e284682ad2e011d6962d41febf86af2f5fc0c9c8f4b81358ff077f9c96ba0880eaf93541eae94b4fa41dba66dab7fb0201cc9af7c75681e5719b0c95f 0x0cfc9d5b5dcf702a1525f9d4ed1841e8eb8b34434cc82470dd35435f1dbdc73ffb51544b7500394eac9c7fa567868b495326075147a2d809ebbfd43273eeec91 0x0aa78894d894a15933969f5826347439e2c309f2049277a10066c9197840499498ad19ee3d1b291f932ec0890bbdafcec292c4f02a446670cd0084f997e25e2f 0x00f400e3fe40f64032485aad9240ead45a8e1fc83ec08c96db861c0eca155ac898df8673e778e3ccaae8a0f9e6af415fe40e99b0cbc88d7610e536b6041b07fb 0x604f384174c7ed3a0dc5f476569a978266a7943bd775449d1b8b27f4eb8beb99cdf095f9200a2dabb1bc5d68c3d96ea3d47f4d34499d59953669b6c8c093d578 0x4881345cbb299fa7c60ab2d16cb7fe7bf8d14675506ef6eb6037038b5b7092ea0a9e4d0b53ba3904edd99f86717d6ba81dffe44eb5b23c6fd22c91ab73c33021 0xee3d4cc17633afe7e1794fcfd728e0643325e3d130eb1daa39c0c5cb05a200b43876117a182cabdcc3795632aa529473a0c8245f9e4f6e43e54c3f1da28bcb82 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204) - emulated-contract-call: - contract-id: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-governance-v1 + contract-id: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-governance-v2 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM method: update-wormhole-core-contract parameters: - "0x01000000030d0174bb45a284f30077f2860e8c505a9a6f1828c376ee2f8c6cd20265c4fb353771093d2e53822a0fc69455079d1fb986f7cc1d00711cf22c16d097e13d56f41c5b000251fe80e0028bc978c8e4c6b952f8627cc8278db92c701227daf131ec5dd6d66e76a6f1697178a47706f8688ad105bc058ff23cbd39ce4329fe575a6efdc504770004e0288228df43f7b9e3437cf37a83918d5787a39e70a5daed17ebd8b780fa78475d6043609579f0c3d5c1a917570a615fd8535654e25a315fafa7eab77f41b66101051cb5b23e6f095efa43deb179a28f82a45dba1ecb54f58cf2a389a8594b6d986708890b93fbc4064b24e1ddac7c561b65e9617a0871af7808b831c781d9cfc32c0107c71dede63e3b519770afcc577ad1ebf4d744cc4114e5cdc2b8ad219bd0c7fcb339213a849bb2ff1802f061e0e226db43eb82d5291b1be3c81f03fcaba56eacb101097b4ac0591063fabe8cb6cca5cc6a761d5f3459cbf5f1df43222ac5c405b83d5524ad2db1110776d8ae20543a807020b39874bf3204c86c7a3ecd0d3b8457cef3010aa098f32fb8e4d6e806f6676923eaf2ed0e20ade6cc7acc684b14bbec1aadcfe3335b1a814342b847f7569e306b7fc662d1e4d6a51b3d77d4a33f84c26ae9541d010beb732a21dfdae860d03c7889d08aa6f7fc2fb48fe42ce3cd36caa8b040db5ad026dda936c1ff1302420af075d1985d9b69e9542339db90e216e71c6bba6090b8000d6aac43ec33195d88ee8a8bc0e222410a5a97bf147077c31ceb5303492dd2d44d46817011c3da375df4e7b7fe4cc26612c2cab37c04a27e37ed0f85f18c9e6656000fc324dbe6070711c7c9d37413c6cf12f9d0bf83099697702ed276c59224f7b72816669fe163031c7069b2e3565de86be1574fbd1f36ba2bdfdf5e1cc6224d2710001008d7ef27a421f708b54b2202e129099a55e93e26dde4bd55844153d827d6216e15ea0431915456baa0e88289cd92d798b1504916377774ceece491ff159706b3001155bd12cc12f8d3cab39918645add19ce520c51dadf93de6959df392be70597f73fe6c0176d3bd8fc1057d69dc0b0a294e66d435a9653f694bdd3a46f6b1370fa0112d7bea9778aae8d3d848401bd8f308a6210b11cd46acda06a950f11f7e704d3ee377ad8949736a067307233cbd86e1f4201d3a042cc9aafe5d8ba43c61424674e006583f78f0000000000015635979a221c34931e32620b9293a463065555ea71fe97cd6237ade875b12e9e0000000000000071015054474d0306c37727061ab4594f9cb0dfef749ec4d1099570179958394ef010776f726d686f6c652d636f72652d7632" - "'ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.wormhole-core-v1" - emulated-contract-call: - contract-id: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-governance-v1 + contract-id: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.pyth-governance-v2 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM method: update-pyth-oracle-contract parameters: - "0x01000000030d013c560c6bbc713803096ee90e0994ad503b392fea10c5b8490d8771a8faac0d494eee6db9548718a6bd58e2fbfd0a81a93611a8d2ad237a914c95b43870e95fde01045afb91eb8b6513a33fbfc671ba6a798a5c72c05ecbeaa9341d4b0e3ecb6b9797484f0211706c025b0fded280e43723a9552c6e0a458ff087e0aa033504e7077d0005f80bc8122ca76a6a00b836be9b7c62501aa53296500bf22640a83e53a225e45b52c24a5fcad47ffd6aeb95ec45ac14332163f1c4cfe0a0e600183d78618a649c0007ce8f665edb3f32eae5f9072d8b6ddf004e74e06f2f5c41f457d2b126a0f5d1d25ea7486222c4a85d8ad7e84555efc8b9d46df369b4b504d466e05b73c71623b10108401a43a3ed21ef8c05d4719c586c56f4ec4710242abfc211919738a03f3990fc3d1f9af94104f4593bf93a8a4bb8f74b1ce3056c8f919de3fc6c18f36e0e1da100094ea84cbbee2683cceae8169e791d5f0b6e1d8a98ba9015847ae2314238d88c757112f355d67d796d7de050959eabb4934d8ffebdb2a5ee97bc965a6fa3779a4b000b4a569948a156a2624df5ca7c1daf8b01b24d98e9cc813c595e330f0b4923619524eff06ea78edb5705ca3540d48ed6a1f2dfc0ffd33b69d02e641e751caea737000cf53f8dc11fdcfafcf88ada961876385e475d9d1cca85f6b03624a54807cf28c25f8ee9655ee202a51a794de397610253fa8710b70ce3086bf18b2942c7b6c19b010d9203e26195c7c4aae2fcb9449665885e9cad8acee081a217e2163eee6b75cb40180583dbe871b012625b1e5920bc3153a1a7c5fdebfc99c47a68d461ab4c0221000ff563b950953e5bd6f48f6657ca4e0561a71e07316b240393fd04f0fac0396c0955e488b56ffffb237bfdbfa79d56b16c8262ec7e7c306d4b8019ddd8662e1614011087f0c8e6f42139cb9b58c4c7e4ddb894776dc306745d6028532b4e963c2b1e4a0c3fdea84b5fd4f8ffa8dd0aa1ceaf08607c2c687df827829ca6386fe375548701117a7ab02704af53a5d0e92c7f50330398167ae8bd4c907c3fe6a587f848ca481740c41aed5dbe7899d6d9784331577f77dfa36a042987e4dcab3b93af27bdc3a30012fbc3be66ae6aecb7a1e81e8537cec709fe19089aeb6df32aa302ae441f216d814659a6e25942a50e760697cd0aa97764e6ac355a2e9c88a74529aeeecdb57b8f0165a505a90000000000015635979a221c34931e32620b9293a463065555ea71fe97cd6237ade875b12e9e000000000000007c015054474d0300c37725061ab4594f9cb0dfef749ec4d1099570179958394ef00e707974682d6f7261636c652d7632" - - "'ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.wormhole-core-v2" + - "'ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.wormhole-core-v3" - emulated-contract-call: - contract-id: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.wormhole-core-v2 + contract-id: ST2T5JKWWP3FYYX4YRK8GK5BG2YCNGEAEY1JKX06E.wormhole-core-v3 emulated-sender: ST1PQHQKV0RJXZFY1DGX8MNSNYVE3VGZJSRTPGZGM method: update-guardians-set parameters: - "0x01000000030d03d4a37a6ff4361d91714730831e9d49785f61624c8f348a9c6c1d82bc1d98cadc5e936338204445c6250bb4928f3f3e165ad47ca03a5d63111168a2de4576856301049a5df10464ea4e1961589fd30fc18d1970a7a2ffaad617e56a0f7777f25275253af7d10a0f0f2494dc6e99fc80e444ab9ebbbee252ded2d5dcb50cbf7a54bb5a01055f4603b553b9ba9e224f9c55c7bca3da00abb10abd19e0081aecd3b352be061a70f79f5f388ebe5190838ef3cd13a2f22459c9a94206883b739c90b40d5d74640006a8fade3997f650a36e46bceb1f609edff201ab32362266f166c5c7da713f6a19590c20b68ed3f0119cb24813c727560ede086b3d610c2d7a1efa66f655bad90900080f5e495a75ea52241c59d145c616bfac01e57182ad8d784cbcc9862ed3afb60c0983ccbc690553961ffcf115a0c917367daada8e60be2cbb8b8008bac6341a8c010935ab11e0eea28b87a1edc5ccce3f1fac25f75b5f640fe6b0673a7cd74513c9dc01c544216cf364cc9993b09fda612e0cd1ced9c00fb668b872a16a64ebb55d27010ab2bc39617a2396e7defa24cd7c22f42dc31f3c42ffcd9d1472b02df8468a4d0563911e8fb6a4b5b0ce0bd505daa53779b08ff660967b31f246126ed7f6f29a7e000bdb6d3fd7b33bdc9ac3992916eb4aacb97e7e21d19649e7fa28d2dd6e337937e4274516a96c13ac7a8895da9f91948ea3a09c25f44b982c62ce8842b58e20c8a9000d3d1b19c8bb000856b6610b9d28abde6c35cb7705c6ca5db711f7be96d60eed9d72cfa402a6bfe8bf0496dbc7af35796fc768da51a067b95941b3712dce8ae1e7010ec80085033157fd1a5628fc0c56267469a86f0e5a66d7dede1ad4ce74ecc3dff95b60307a39c3bfbeedc915075070da30d0395def9635130584f709b3885e1bdc0010fc480eb9ee715a2d151b23722b48b42581d7f4001fc1696c75425040bfc1ffc5394fe418adb2b64bd3dc692efda4cc408163677dbe233b16bcdabb853a20843301118ee9e115e1a0c981f19d0772b850e666591322da742a9a12cce9f52a5665bd474abdd59c580016bee8aae67fdf39b315be2528d12eec3a652910e03cc4c6fa3801129d0d1e2e429e969918ec163d16a7a5b2c6729aa44af5dccad07d25d19891556a79b574f42d9adbd9e2a9ae5a6b8750331d2fccb328dd94c3bf8791ee1bfe85aa00661e99781981faea00010000000000000000000000000000000000000000000000000000000000000004fd4c6c55ec8dfd342000000000000000000000000000000000000000000000000000000000436f726502000000000004135893b5a76c3f739645648885bdccc06cd70a3cd3ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cd15e7caf07c4e3dc8e7c469f92c8cd88fb8005a2074a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d" - (list 0x9a1e801daa25d9808e70aae9981353086f958955cc94ef33a461b0e596feaef90a8474dd10cf6ae967143f86105c16d6304a3d268ea952fda9389139d4bb9da1 0x2766db08820e311b22e109801ab8ea505b12e3df3d91ebc87c999ffb6929d1abb0ade987c74aa37db26eea4086ee738a2f34a5594edb8760da0eac5be356b731 0x54177ff4a8329520b76efd86f8bfce5c942554db16e673267dc1133b3f5e230b2d8cbf90fe274946045d4491de288d736680edc2ee9ee5b1b15416b0a34806c4 0x7fa3e98fcc2621337b217b61408a98facaabd25bad2b158438728ce863c14708cfcda1f3b50a16ca0211199079fb338d479a54546ec3c5f775af23a7d7f4fb24 0x0bdcbccc0297c2a4f92a7c39358c42f22a8ed700a78bd05c39c8b61aaf2338e825b6c0d26d1f2a2ae4129cd751201f73d7234c753bd0735212a5288b19748fd2 0xcfd90084be68de514fe14a7c281f492223f045566f859ea5c166d6e60bc650c23940909a8e96c2fbffbd15a598b4e6a5b5aa14c126bf58cc1a9e396fe7771965 0x8edf3f9d997357a0e2c916ee090392c3a645ebac4f6cd8f826d3ecc0173b33bf06b7c14e8002fc9a5d01af9824a5cb3778472cd477e0ab378091448bca6f0417 0x47b15c5039dcb2850b59bea323db662cc597dd7d48fe6b8dbb6cd8704c45854bf0e92fa267c844ba1a700105e157c8099d55c82316cb5e50c56a5d0920ff91c2 0xd5225476d7849b362226952ffc561bab99832f3f8b99741f6d81bbeaffa8e7f6e54a85e5029a3b510707eaa9684df496e4b1268075ad0328693a30bf1b1e0033 0xd9fa78b5b958bea1929080b8ad96dc555d34b051a27aebf711eb1186b807b0448316d994606ac807121838d6c41a58f308bc6307acdf69491fa4b17282f3e66f 0xcc64af75ec2e2741fb9af9f6191cb9ee187d6d26af4d1e96d7bab47e6ec09be12d3192030dc4bbf54d1da319a7a2acfc7a9dd4c644af6646a4aaa02b1024bbab 0xb5943b6e284682ad2e011d6962d41febf86af2f5fc0c9c8f4b81358ff077f9c96ba0880eaf93541eae94b4fa41dba66dab7fb0201cc9af7c75681e5719b0c95f 0x0cfc9d5b5dcf702a1525f9d4ed1841e8eb8b34434cc82470dd35435f1dbdc73ffb51544b7500394eac9c7fa567868b495326075147a2d809ebbfd43273eeec91 0x0aa78894d894a15933969f5826347439e2c309f2049277a10066c9197840499498ad19ee3d1b291f932ec0890bbdafcec292c4f02a446670cd0084f997e25e2f 0x00f400e3fe40f64032485aad9240ead45a8e1fc83ec08c96db861c0eca155ac898df8673e778e3ccaae8a0f9e6af415fe40e99b0cbc88d7610e536b6041b07fb 0x604f384174c7ed3a0dc5f476569a978266a7943bd775449d1b8b27f4eb8beb99cdf095f9200a2dabb1bc5d68c3d96ea3d47f4d34499d59953669b6c8c093d578 0x4881345cbb299fa7c60ab2d16cb7fe7bf8d14675506ef6eb6037038b5b7092ea0a9e4d0b53ba3904edd99f86717d6ba81dffe44eb5b23c6fd22c91ab73c33021 0xee3d4cc17633afe7e1794fcfd728e0643325e3d130eb1daa39c0c5cb05a200b43876117a182cabdcc3795632aa529473a0c8245f9e4f6e43e54c3f1da28bcb82 0x21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204) - epoch: "2.4" + epoch: "3.0" diff --git a/example/relayer/src/config/mod.rs b/example/relayer/src/config/mod.rs index e70dfb1..80b782f 100644 --- a/example/relayer/src/config/mod.rs +++ b/example/relayer/src/config/mod.rs @@ -60,7 +60,7 @@ impl Config { let config_file: ConfigFile = match toml::from_slice(&file_buffer) { Ok(s) => s, Err(e) => { - return Err(format!("Config file malformatted {}", e.to_string())); + return Err(format!("Config file malformed {}", e.to_string())); } }; Config::from_config_file(config_file) diff --git a/package-lock.json b/package-lock.json index 4f3db5e..9b643db 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,25 +9,39 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "@hirosystems/clarinet-sdk": "^1.0.2", + "@hirosystems/clarinet-sdk": "^2.9.0", "@noble/hashes": "^1.3.2", "@noble/secp256k1": "^2.0.0", - "@stacks/transactions": "^6.9.0", - "vitest": "^0.34.1", - "vitest-environment-clarinet": "^1.0.3" + "@stacks/transactions": "^6.16.1", + "vitest": "^1.6.0", + "vitest-environment-clarinet": "^2.1.0" }, "devDependencies": { - "@fast-check/vitest": "^0.0.8", - "@vitest/ui": "^0.34.6", + "@fast-check/vitest": "^0.1.3", "chokidar-cli": "^3.0.0", - "fast-check": "^3.13.1", - "prettier": "^3.0.3" + "fast-check": "^3.22.0", + "prettier": "^3.3.3" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" } }, "node_modules/@esbuild/android-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", "cpu": [ "arm" ], @@ -40,9 +54,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", - "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", "cpu": [ "arm64" ], @@ -55,9 +69,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", - "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", "cpu": [ "x64" ], @@ -70,9 +84,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", "cpu": [ "arm64" ], @@ -85,9 +99,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", - "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", "cpu": [ "x64" ], @@ -100,9 +114,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", - "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", "cpu": [ "arm64" ], @@ -115,9 +129,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", - "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", "cpu": [ "x64" ], @@ -130,9 +144,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", - "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", "cpu": [ "arm" ], @@ -145,9 +159,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", - "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", "cpu": [ "arm64" ], @@ -160,9 +174,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", - "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", "cpu": [ "ia32" ], @@ -175,9 +189,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", "cpu": [ "loong64" ], @@ -190,9 +204,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", - "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", "cpu": [ "mips64el" ], @@ -205,9 +219,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", - "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", "cpu": [ "ppc64" ], @@ -220,9 +234,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", - "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", "cpu": [ "riscv64" ], @@ -235,9 +249,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", - "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", "cpu": [ "s390x" ], @@ -250,9 +264,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", - "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", "cpu": [ "x64" ], @@ -265,9 +279,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", - "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", "cpu": [ "x64" ], @@ -280,9 +294,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", - "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", "cpu": [ "x64" ], @@ -295,9 +309,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", - "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", "cpu": [ "x64" ], @@ -310,9 +324,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", - "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", "cpu": [ "arm64" ], @@ -325,9 +339,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", - "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", "cpu": [ "ia32" ], @@ -340,9 +354,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", "cpu": [ "x64" ], @@ -355,9 +369,9 @@ } }, "node_modules/@fast-check/vitest": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/@fast-check/vitest/-/vitest-0.0.8.tgz", - "integrity": "sha512-cFrcu7nwH+rk1qm1J4YrM1k4MIwvIHG7MrQUMGizqPe58XsvvpZz0X9Xkx1e+xaNg9s1YRVTd241WSR0dK/SpQ==", + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@fast-check/vitest/-/vitest-0.1.3.tgz", + "integrity": "sha512-mdLtUVdR/dmmSifzFsY/69Bz+EQDxzdUIDrTfLVfRyebgzVGoA7iuHPwQIN438naHwcm7XyDz05MCA3Tl8v56w==", "dev": true, "funding": [ { @@ -373,32 +387,32 @@ "fast-check": "^3.0.0" }, "peerDependencies": { - "vitest": ">=0.28.1" + "vitest": ">=0.28.1 <1.0.0 || ^1 || ^2" } }, "node_modules/@hirosystems/clarinet-sdk": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@hirosystems/clarinet-sdk/-/clarinet-sdk-1.1.0.tgz", - "integrity": "sha512-O4iP+eqc2jtbCJcndC22l12ODIi8GxwUcWhWaltvnPBn+PXqCLxDqNU78C6iDCfPp/Ro2fcJy9z27KNqnu+A9g==", + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@hirosystems/clarinet-sdk/-/clarinet-sdk-2.9.0.tgz", + "integrity": "sha512-9Ad4fbcdEa285ap6grpj9OXmDv5e0W5uYYIlM0zY5xRwqy3rTSjoTSnhjkN3Yy3t4BixOHuZhbwpz9lMIGT1LA==", "dependencies": { - "@hirosystems/clarinet-sdk-wasm": "^1.1.0", - "@stacks/transactions": "^6.9.0", + "@hirosystems/clarinet-sdk-wasm": "^2.9.0", + "@stacks/transactions": "^6.13.0", "kolorist": "^1.8.0", "prompts": "^2.4.2", - "vitest": "^0.34.5", + "vitest": "^1.0.4", "yargs": "^17.7.2" }, "bin": { - "clarinet-sdk": "dist/cjs/bin/index.js" + "clarinet-sdk": "dist/cjs/node/src/bin/index.js" }, "engines": { "node": ">=18.0.0" } }, "node_modules/@hirosystems/clarinet-sdk-wasm": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@hirosystems/clarinet-sdk-wasm/-/clarinet-sdk-wasm-1.1.0.tgz", - "integrity": "sha512-hGf2Ib6qYVnhV2+idW1GuOsh1Fom4fhp+QYjxHmfGQvx9ptSb037/4YVlep+jbO4hKXHHF2uQJgKMRPwVrtN2g==" + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@hirosystems/clarinet-sdk-wasm/-/clarinet-sdk-wasm-2.9.0.tgz", + "integrity": "sha512-5jLGWbHU4TlhMR4UwTjkASpd8WbKve1t1WwJxSAs4KITlNd84ZfPbs5jx+O092CCinbnbyyaiC9q4ur8H+MtdQ==" }, "node_modules/@jest/schemas": { "version": "29.6.3", @@ -412,72 +426,220 @@ } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" }, "node_modules/@noble/hashes": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", - "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.5.0.tgz", + "integrity": "sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==", "engines": { - "node": ">= 16" + "node": "^14.21.3 || >=16" }, "funding": { "url": "https://paulmillr.com/funding/" } }, "node_modules/@noble/secp256k1": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-2.0.0.tgz", - "integrity": "sha512-rUGBd95e2a45rlmFTqQJYEFA4/gdIARFfuTuTqLglz0PZ6AKyzyXsEZZq7UZn8hZsvaBgpCzKKBJizT2cJERXw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-2.1.0.tgz", + "integrity": "sha512-XLEQQNdablO0XZOIniFQimiXsZDNwaYgL96dZwC54Q30imSbAOFf3NKtepc+cXyuZf5Q1HCgbqgZ2UFFuHVcEw==", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.0.tgz", + "integrity": "sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" ] }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "devOptional": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.0.tgz", + "integrity": "sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ] }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "devOptional": true, - "engines": { - "node": ">= 8" - } + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.0.tgz", + "integrity": "sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "devOptional": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.0.tgz", + "integrity": "sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.0.tgz", + "integrity": "sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.0.tgz", + "integrity": "sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.0.tgz", + "integrity": "sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.0.tgz", + "integrity": "sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.0.tgz", + "integrity": "sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.0.tgz", + "integrity": "sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.0.tgz", + "integrity": "sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.0.tgz", + "integrity": "sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@polka/url": { - "version": "1.0.0-next.23", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.23.tgz", - "integrity": "sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==", - "devOptional": true + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.0.tgz", + "integrity": "sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.0.tgz", + "integrity": "sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.0.tgz", + "integrity": "sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.0.tgz", + "integrity": "sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ] }, "node_modules/@sinclair/typebox": { "version": "0.27.8", @@ -485,32 +647,32 @@ "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" }, "node_modules/@stacks/common": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/@stacks/common/-/common-6.8.1.tgz", - "integrity": "sha512-ewL9GLZNQYa5a/3K4xSHlHIgHkD4rwWW/QEaPId8zQIaL+1O9qCaF4LX9orNQeOmEk8kvG0x2xGV54fXKCZeWQ==", + "version": "6.16.0", + "resolved": "https://registry.npmjs.org/@stacks/common/-/common-6.16.0.tgz", + "integrity": "sha512-PnzvhrdGRMVZvxTulitlYafSK4l02gPCBBoI9QEoTqgSnv62oaOXhYAUUkTMFKxdHW1seVEwZsrahuXiZPIAwg==", "dependencies": { "@types/bn.js": "^5.1.0", "@types/node": "^18.0.4" } }, "node_modules/@stacks/network": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/@stacks/network/-/network-6.8.1.tgz", - "integrity": "sha512-n8M25pPbLqpSBctabtsLOTBlmPvm9EPQpTI//x7HLdt5lEjDXxauEQt0XGSvDUZwecrmztqt9xNxlciiGApRBw==", + "version": "6.17.0", + "resolved": "https://registry.npmjs.org/@stacks/network/-/network-6.17.0.tgz", + "integrity": "sha512-numHbfKjwco/rbkGPOEz8+FcJ2nBnS/tdJ8R422Q70h3SiA9eqk9RjSzB8p4JP8yW1SZvW+eihADHfMpBuZyfw==", "dependencies": { - "@stacks/common": "^6.8.1", + "@stacks/common": "^6.16.0", "cross-fetch": "^3.1.5" } }, "node_modules/@stacks/transactions": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/@stacks/transactions/-/transactions-6.9.0.tgz", - "integrity": "sha512-hSs9+0Ew++GwMZMgPObOx0iVCQRxkiCqI+DHdPEikAmg2utpyLh2/txHOjfSIkQHvcBfJJ6O5KphmxDP4gUqiA==", + "version": "6.17.0", + "resolved": "https://registry.npmjs.org/@stacks/transactions/-/transactions-6.17.0.tgz", + "integrity": "sha512-FUah2BRgV66ApLcEXGNGhwyFTRXqX5Zco3LpiM3essw8PF0NQlHwwdPgtDko5RfrJl3LhGXXe/30nwsfNnB3+g==", "dependencies": { "@noble/hashes": "1.1.5", "@noble/secp256k1": "1.7.1", - "@stacks/common": "^6.8.1", - "@stacks/network": "^6.8.1", + "@stacks/common": "^6.16.0", + "@stacks/network": "^6.17.0", "c32check": "^2.0.0", "lodash.clonedeep": "^4.5.0" } @@ -538,41 +700,33 @@ ] }, "node_modules/@types/bn.js": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.4.tgz", - "integrity": "sha512-ZtBd9L8hVtoBpPMSWfbwjC4dhQtJdlPS+e1A0Rydb7vg7bDcUwiRklPx24sMYtXcmAMST/k0Wze7JLbNU/5SkA==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.6.tgz", + "integrity": "sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==", "dependencies": { "@types/node": "*" } }, - "node_modules/@types/chai": { - "version": "4.3.9", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.9.tgz", - "integrity": "sha512-69TtiDzu0bcmKQv3yg1Zx409/Kd7r0b5F1PfpYJfSHzLGtB53547V4u+9iqKYsTu/O2ai6KTb0TInNpvuQ3qmg==" - }, - "node_modules/@types/chai-subset": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.4.tgz", - "integrity": "sha512-CCWNXrJYSUIojZ1149ksLl3AN9cmZ5djf+yUoVVV+NuYrtydItQVlL2ZDqyC6M6O9LWRnVf8yYDxbXHO2TfQZg==", - "dependencies": { - "@types/chai": "*" - } + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==" }, "node_modules/@types/node": { - "version": "18.18.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.8.tgz", - "integrity": "sha512-OLGBaaK5V3VRBS1bAkMVP2/W9B+H8meUfl866OrMNQqt7wDgdpWPp5o6gmIc9pB+lIQHSq4ZL8ypeH1vPxcPaQ==", + "version": "18.19.54", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.54.tgz", + "integrity": "sha512-+BRgt0G5gYjTvdLac9sIeE0iZcJxi4Jc4PV5EUzqi+88jmQLr+fRZdv2tCTV7IHKSGxM6SaLoOXQWWUiLUItMw==", "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/@vitest/expect": { - "version": "0.34.6", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.34.6.tgz", - "integrity": "sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.6.0.tgz", + "integrity": "sha512-ixEvFVQjycy/oNgHjqsL6AZCDduC+tflRluaHIzKIsdbzkLn2U/iBnVeJwB6HsIjQBdfMR8Z0tRxKUsvFJEeWQ==", "dependencies": { - "@vitest/spy": "0.34.6", - "@vitest/utils": "0.34.6", + "@vitest/spy": "1.6.0", + "@vitest/utils": "1.6.0", "chai": "^4.3.10" }, "funding": { @@ -580,12 +734,12 @@ } }, "node_modules/@vitest/runner": { - "version": "0.34.6", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.34.6.tgz", - "integrity": "sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.6.0.tgz", + "integrity": "sha512-P4xgwPjwesuBiHisAVz/LSSZtDjOTPYZVmNAnpHHSR6ONrf8eCJOFRvUwdHn30F5M1fxhqtl7QZQUk2dprIXAg==", "dependencies": { - "@vitest/utils": "0.34.6", - "p-limit": "^4.0.0", + "@vitest/utils": "1.6.0", + "p-limit": "^5.0.0", "pathe": "^1.1.1" }, "funding": { @@ -593,67 +747,47 @@ } }, "node_modules/@vitest/snapshot": { - "version": "0.34.6", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.34.6.tgz", - "integrity": "sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.6.0.tgz", + "integrity": "sha512-+Hx43f8Chus+DCmygqqfetcAZrDJwvTj0ymqjQq4CvmpKFSTVteEOBzCusu1x2tt4OJcvBflyHUE0DZSLgEMtQ==", "dependencies": { - "magic-string": "^0.30.1", + "magic-string": "^0.30.5", "pathe": "^1.1.1", - "pretty-format": "^29.5.0" + "pretty-format": "^29.7.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/spy": { - "version": "0.34.6", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.34.6.tgz", - "integrity": "sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ==", - "dependencies": { - "tinyspy": "^2.1.1" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/ui": { - "version": "0.34.6", - "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-0.34.6.tgz", - "integrity": "sha512-/fxnCwGC0Txmr3tF3BwAbo3v6U2SkBTGR9UB8zo0Ztlx0BTOXHucE0gDHY7SjwEktCOHatiGmli9kZD6gYSoWQ==", - "devOptional": true, + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.6.0.tgz", + "integrity": "sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw==", "dependencies": { - "@vitest/utils": "0.34.6", - "fast-glob": "^3.3.0", - "fflate": "^0.8.0", - "flatted": "^3.2.7", - "pathe": "^1.1.1", - "picocolors": "^1.0.0", - "sirv": "^2.0.3" + "tinyspy": "^2.2.0" }, "funding": { "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "vitest": ">=0.30.1 <1" } }, "node_modules/@vitest/utils": { - "version": "0.34.6", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.6.tgz", - "integrity": "sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.6.0.tgz", + "integrity": "sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==", "dependencies": { - "diff-sequences": "^29.4.3", - "loupe": "^2.3.6", - "pretty-format": "^29.5.0" + "diff-sequences": "^29.6.3", + "estree-walker": "^3.0.3", + "loupe": "^2.3.7", + "pretty-format": "^29.7.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", "bin": { "acorn": "bin/acorn" }, @@ -662,9 +796,12 @@ } }, "node_modules/acorn-walk": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz", - "integrity": "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==", + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dependencies": { + "acorn": "^8.11.0" + }, "engines": { "node": ">=0.4.0" } @@ -715,21 +852,24 @@ "integrity": "sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==" }, "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "devOptional": true, + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -765,9 +905,9 @@ } }, "node_modules/chai": { - "version": "4.3.10", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz", - "integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", + "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.3", @@ -775,7 +915,7 @@ "get-func-name": "^2.0.2", "loupe": "^2.3.6", "pathval": "^1.1.1", - "type-detect": "^4.0.8" + "type-detect": "^4.1.0" }, "engines": { "node": ">=4" @@ -793,16 +933,10 @@ } }, "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -815,6 +949,9 @@ "engines": { "node": ">= 8.10.0" }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, "optionalDependencies": { "fsevents": "~2.3.2" } @@ -986,6 +1123,11 @@ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, + "node_modules/confbox": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.7.tgz", + "integrity": "sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==" + }, "node_modules/cross-fetch": { "version": "3.1.8", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", @@ -994,12 +1136,25 @@ "node-fetch": "^2.6.12" } }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -1020,9 +1175,9 @@ } }, "node_modules/deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", + "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", "dependencies": { "type-detect": "^4.0.0" }, @@ -1044,9 +1199,9 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" @@ -1055,42 +1210,73 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "engines": { "node": ">=6" } }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, "node_modules/fast-check": { - "version": "3.13.2", - "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.13.2.tgz", - "integrity": "sha512-ouTiFyeMoqmNg253xqy4NSacr5sHxH6pZpLOaHgaAdgZxFWdtsfxExwolpveoAE9CJdV+WYjqErNGef6SqA5Mg==", + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.22.0.tgz", + "integrity": "sha512-8HKz3qXqnHYp/VCNn2qfjHdAdcI8zcSqOyX64GOMukp7SL2bfzfeDKjSd+UyECtejccaZv3LcvZTm9YDD22iCQ==", "dev": true, "funding": [ { @@ -1103,48 +1289,17 @@ } ], "dependencies": { - "pure-rand": "^6.0.0" + "pure-rand": "^6.1.0" }, "engines": { "node": ">=8.0.0" } }, - "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", - "devOptional": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "devOptional": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fflate": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.1.tgz", - "integrity": "sha512-/exOvEuc+/iaUm105QIiOt4LpBdMTWsXxqR0HDF35vx3fmaKzw7354gTilCh5rkzEt8WYyG//ku3h3nRmd7CHQ==", - "devOptional": true - }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "devOptional": true, + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -1164,12 +1319,6 @@ "node": ">=6" } }, - "node_modules/flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", - "devOptional": true - }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -1199,11 +1348,22 @@ "node": "*" } }, + "node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "devOptional": true, + "dev": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -1211,6 +1371,14 @@ "node": ">= 6" } }, + "node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "engines": { + "node": ">=16.17.0" + } + }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -1227,7 +1395,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "devOptional": true, + "dev": true, "engines": { "node": ">=0.10.0" } @@ -1244,7 +1412,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "devOptional": true, + "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -1256,15 +1424,31 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "devOptional": true, + "dev": true, "engines": { "node": ">=0.12.0" } }, - "node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==" + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/js-tokens": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.0.tgz", + "integrity": "sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==" }, "node_modules/kleur": { "version": "3.0.3", @@ -1280,9 +1464,13 @@ "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==" }, "node_modules/local-pkg": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", - "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", + "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", + "dependencies": { + "mlly": "^1.4.2", + "pkg-types": "^1.0.3" + }, "engines": { "node": ">=14" }, @@ -1329,67 +1517,49 @@ } }, "node_modules/magic-string": { - "version": "0.30.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", - "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", + "version": "0.30.11", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", + "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" + "@jridgewell/sourcemap-codec": "^1.5.0" } }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "devOptional": true, - "engines": { - "node": ">= 8" - } + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "devOptional": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", "engines": { - "node": ">=8.6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/mlly": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.4.2.tgz", - "integrity": "sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.1.tgz", + "integrity": "sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==", "dependencies": { - "acorn": "^8.10.0", - "pathe": "^1.1.1", - "pkg-types": "^1.0.3", - "ufo": "^1.3.0" - } - }, - "node_modules/mrmime": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", - "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", - "devOptional": true, - "engines": { - "node": ">=10" + "acorn": "^8.11.3", + "pathe": "^1.1.2", + "pkg-types": "^1.1.1", + "ufo": "^1.5.3" } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "funding": [ { "type": "github", @@ -1431,15 +1601,54 @@ "node": ">=0.10.0" } }, - "node_modules/p-limit": { + "node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-limit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz", + "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==", "dependencies": { "yocto-queue": "^1.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -1490,10 +1699,18 @@ "node": ">=4" } }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, "node_modules/pathe": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz", - "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==" }, "node_modules/pathval": { "version": "1.1.1", @@ -1504,15 +1721,15 @@ } }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==" }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "devOptional": true, + "dev": true, "engines": { "node": ">=8.6" }, @@ -1521,19 +1738,19 @@ } }, "node_modules/pkg-types": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", - "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.2.0.tgz", + "integrity": "sha512-+ifYuSSqOQ8CqP4MbZA5hDpb97n3E8SVWdJe+Wms9kj745lmd3b7EZJiqvmLwAlmRfjrI7Hi5z3kdBJ93lFNPA==", "dependencies": { - "jsonc-parser": "^3.2.0", - "mlly": "^1.2.0", - "pathe": "^1.1.0" + "confbox": "^0.1.7", + "mlly": "^1.7.1", + "pathe": "^1.1.2" } }, "node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "version": "8.4.47", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", + "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", "funding": [ { "type": "opencollective", @@ -1549,18 +1766,18 @@ } ], "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "nanoid": "^3.3.7", + "picocolors": "^1.1.0", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" } }, "node_modules/prettier": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", - "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -1598,9 +1815,9 @@ } }, "node_modules/pure-rand": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", - "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", "dev": true, "funding": [ { @@ -1613,30 +1830,10 @@ } ] }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "devOptional": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" }, "node_modules/readdirp": { "version": "3.6.0", @@ -1664,77 +1861,79 @@ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "devOptional": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, "node_modules/rollup": { - "version": "3.29.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", - "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.0.tgz", + "integrity": "sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==", + "dependencies": { + "@types/estree": "1.0.6" + }, "bin": { "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=14.18.0", + "node": ">=18.0.0", "npm": ">=8.0.0" }, "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.24.0", + "@rollup/rollup-android-arm64": "4.24.0", + "@rollup/rollup-darwin-arm64": "4.24.0", + "@rollup/rollup-darwin-x64": "4.24.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.24.0", + "@rollup/rollup-linux-arm-musleabihf": "4.24.0", + "@rollup/rollup-linux-arm64-gnu": "4.24.0", + "@rollup/rollup-linux-arm64-musl": "4.24.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.24.0", + "@rollup/rollup-linux-riscv64-gnu": "4.24.0", + "@rollup/rollup-linux-s390x-gnu": "4.24.0", + "@rollup/rollup-linux-x64-gnu": "4.24.0", + "@rollup/rollup-linux-x64-musl": "4.24.0", + "@rollup/rollup-win32-arm64-msvc": "4.24.0", + "@rollup/rollup-win32-ia32-msvc": "4.24.0", + "@rollup/rollup-win32-x64-msvc": "4.24.0", "fsevents": "~2.3.2" } }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "devOptional": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, "node_modules/siginfo": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==" }, - "node_modules/sirv": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.3.tgz", - "integrity": "sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==", - "devOptional": true, - "dependencies": { - "@polka/url": "^1.0.0-next.20", - "mrmime": "^1.0.0", - "totalist": "^3.0.0" - }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "engines": { - "node": ">= 10" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/sisteransi": { @@ -1743,9 +1942,9 @@ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "engines": { "node": ">=0.10.0" } @@ -1756,9 +1955,9 @@ "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==" }, "node_modules/std-env": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.4.3.tgz", - "integrity": "sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q==" + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", + "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==" }, "node_modules/string-width": { "version": "4.2.3", @@ -1784,34 +1983,45 @@ "node": ">=8" } }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/strip-literal": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.3.0.tgz", - "integrity": "sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-2.1.0.tgz", + "integrity": "sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==", "dependencies": { - "acorn": "^8.10.0" + "js-tokens": "^9.0.0" }, "funding": { "url": "https://github.com/sponsors/antfu" } }, "node_modules/tinybench": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.5.1.tgz", - "integrity": "sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==" + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==" }, "node_modules/tinypool": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.7.0.tgz", - "integrity": "sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.4.tgz", + "integrity": "sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==", "engines": { "node": ">=14.0.0" } }, "node_modules/tinyspy": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.0.tgz", - "integrity": "sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz", + "integrity": "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==", "engines": { "node": ">=14.0.0" } @@ -1820,7 +2030,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "devOptional": true, + "dev": true, "dependencies": { "is-number": "^7.0.0" }, @@ -1828,32 +2038,23 @@ "node": ">=8.0" } }, - "node_modules/totalist": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", - "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", - "devOptional": true, - "engines": { - "node": ">=6" - } - }, "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", "engines": { "node": ">=4" } }, "node_modules/ufo": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.1.tgz", - "integrity": "sha512-uY/99gMLIOlJPwATcMVYfqDSxUR9//AUcgZMzwfSTJPDKzA1S8mX4VLqa+fiAtveraQUBCz4FFcwVZBGbwBXIw==" + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz", + "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==" }, "node_modules/undici-types": { "version": "5.26.5", @@ -1861,31 +2062,32 @@ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" }, "node_modules/vite": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.0.tgz", - "integrity": "sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==", + "version": "5.4.8", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.8.tgz", + "integrity": "sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==", "dependencies": { - "esbuild": "^0.18.10", - "postcss": "^8.4.27", - "rollup": "^3.27.1" + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": "^18.0.0 || >=20.0.0" }, "funding": { "url": "https://github.com/vitejs/vite?sponsor=1" }, "optionalDependencies": { - "fsevents": "~2.3.2" + "fsevents": "~2.3.3" }, "peerDependencies": { - "@types/node": ">= 14", + "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", + "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" @@ -1903,6 +2105,9 @@ "sass": { "optional": true }, + "sass-embedded": { + "optional": true + }, "stylus": { "optional": true }, @@ -1915,80 +2120,76 @@ } }, "node_modules/vite-node": { - "version": "0.34.6", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.34.6.tgz", - "integrity": "sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.6.0.tgz", + "integrity": "sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==", "dependencies": { "cac": "^6.7.14", "debug": "^4.3.4", - "mlly": "^1.4.0", "pathe": "^1.1.1", "picocolors": "^1.0.0", - "vite": "^3.0.0 || ^4.0.0 || ^5.0.0-0" + "vite": "^5.0.0" }, "bin": { "vite-node": "vite-node.mjs" }, "engines": { - "node": ">=v14.18.0" + "node": "^18.0.0 || >=20.0.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/vitest": { - "version": "0.34.6", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.34.6.tgz", - "integrity": "sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==", - "dependencies": { - "@types/chai": "^4.3.5", - "@types/chai-subset": "^1.3.3", - "@types/node": "*", - "@vitest/expect": "0.34.6", - "@vitest/runner": "0.34.6", - "@vitest/snapshot": "0.34.6", - "@vitest/spy": "0.34.6", - "@vitest/utils": "0.34.6", - "acorn": "^8.9.0", - "acorn-walk": "^8.2.0", - "cac": "^6.7.14", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.6.0.tgz", + "integrity": "sha512-H5r/dN06swuFnzNFhq/dnz37bPXnq8xB2xB5JOVk8K09rUtoeNN+LHWkoQ0A/i3hvbUKKcCei9KpbxqHMLhLLA==", + "dependencies": { + "@vitest/expect": "1.6.0", + "@vitest/runner": "1.6.0", + "@vitest/snapshot": "1.6.0", + "@vitest/spy": "1.6.0", + "@vitest/utils": "1.6.0", + "acorn-walk": "^8.3.2", "chai": "^4.3.10", "debug": "^4.3.4", - "local-pkg": "^0.4.3", - "magic-string": "^0.30.1", + "execa": "^8.0.1", + "local-pkg": "^0.5.0", + "magic-string": "^0.30.5", "pathe": "^1.1.1", "picocolors": "^1.0.0", - "std-env": "^3.3.3", - "strip-literal": "^1.0.1", - "tinybench": "^2.5.0", - "tinypool": "^0.7.0", - "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0", - "vite-node": "0.34.6", + "std-env": "^3.5.0", + "strip-literal": "^2.0.0", + "tinybench": "^2.5.1", + "tinypool": "^0.8.3", + "vite": "^5.0.0", + "vite-node": "1.6.0", "why-is-node-running": "^2.2.2" }, "bin": { "vitest": "vitest.mjs" }, "engines": { - "node": ">=v14.18.0" + "node": "^18.0.0 || >=20.0.0" }, "funding": { "url": "https://opencollective.com/vitest" }, "peerDependencies": { "@edge-runtime/vm": "*", - "@vitest/browser": "*", - "@vitest/ui": "*", + "@types/node": "^18.0.0 || >=20.0.0", + "@vitest/browser": "1.6.0", + "@vitest/ui": "1.6.0", "happy-dom": "*", - "jsdom": "*", - "playwright": "*", - "safaridriver": "*", - "webdriverio": "*" + "jsdom": "*" }, "peerDependenciesMeta": { "@edge-runtime/vm": { "optional": true }, + "@types/node": { + "optional": true + }, "@vitest/browser": { "optional": true }, @@ -2000,25 +2201,16 @@ }, "jsdom": { "optional": true - }, - "playwright": { - "optional": true - }, - "safaridriver": { - "optional": true - }, - "webdriverio": { - "optional": true } } }, "node_modules/vitest-environment-clarinet": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/vitest-environment-clarinet/-/vitest-environment-clarinet-1.0.3.tgz", - "integrity": "sha512-h/FeWPiEBS4a359Y8ZNo8nsftsfEoyLtZpJdnvDggDzcEUNkAsssU4tQzLp+KPm2VohAleqjFGSYMOGRbgLtDA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/vitest-environment-clarinet/-/vitest-environment-clarinet-2.1.0.tgz", + "integrity": "sha512-1SA9XZh47qmbV724sGo2FyjVU+Ar3m5TOU4bLGSlWDb/x388IKUPrHbHWqIQNwY+gwEm9VBfXEAd1LOSUdemBw==", "peerDependencies": { - "@hirosystems/clarinet-sdk": "1", - "vitest": "0" + "@hirosystems/clarinet-sdk": ">=2.6.0", + "vitest": "^1.5.2" } }, "node_modules/webidl-conversions": { @@ -2035,6 +2227,20 @@ "webidl-conversions": "^3.0.0" } }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/which-module": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", @@ -2042,9 +2248,9 @@ "dev": true }, "node_modules/why-is-node-running": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", - "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", "dependencies": { "siginfo": "^2.0.0", "stackback": "0.0.2" @@ -2136,9 +2342,9 @@ } }, "node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", + "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", "engines": { "node": ">=12.20" }, diff --git a/package.json b/package.json index 2d16d72..9bbefb5 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "stacks-pyth-testing", "version": "1.0.0", - "description": "**Status**: *Alpha, do not use in production*", + "description": "Pyth implementation on Stacks", "main": "index.js", "directories": { "test": "unit-tests" @@ -16,18 +16,17 @@ "license": "ISC", "type": "module", "dependencies": { - "@hirosystems/clarinet-sdk": "^1.0.2", + "@hirosystems/clarinet-sdk": "^2.9.0", "@noble/hashes": "^1.3.2", "@noble/secp256k1": "^2.0.0", - "@stacks/transactions": "^6.9.0", - "vitest": "^0.34.1", - "vitest-environment-clarinet": "^1.0.3" + "@stacks/transactions": "^6.16.1", + "vitest": "^1.6.0", + "vitest-environment-clarinet": "^2.1.0" }, "devDependencies": { - "@fast-check/vitest": "^0.0.8", - "@vitest/ui": "^0.34.6", + "@fast-check/vitest": "^0.1.3", "chokidar-cli": "^3.0.0", - "fast-check": "^3.13.1", - "prettier": "^3.0.3" + "fast-check": "^3.22.0", + "prettier": "^3.3.3" } } diff --git a/unit-tests/pyth/helpers.ts b/unit-tests/pyth/helpers.ts index 37eae9c..a927692 100644 --- a/unit-tests/pyth/helpers.ts +++ b/unit-tests/pyth/helpers.ts @@ -70,6 +70,14 @@ export namespace pyth { "00000000000000000000000000000000000000000000000000000000000000FF", ), }; + + export const DefaultGovernanceDataSourceUpdate = { + chain: 99, + sequence: 1n, + address: hexToBytes( + "00000000000000000000000000000000000000000000000000000000000000FF", + ), + }; export const DefaultPricesDataSources = [ { chain: 1, @@ -135,7 +143,7 @@ export namespace pyth { updateStoreContract?: PtgmUpdateContract; updateDecoderContract?: PtgmUpdateContract; updatePricesDataSources?: wormhole.Emitter[]; - updateGovernanceDataSource?: wormhole.Emitter; + updateGovernanceDataSource?: wormhole.NewEmitter; } export interface PtgmUpdateFeeValue { @@ -170,7 +178,7 @@ export namespace pyth { updateOracleContract?: PtgmUpdateContract; updateStoreContract?: PtgmUpdateContract; updateDecoderContract?: PtgmUpdateContract; - updateGovernanceDataSource?: wormhole.Emitter; + updateGovernanceDataSource?: wormhole.NewEmitter; } export interface PnauHeader { @@ -368,6 +376,8 @@ export namespace pyth { v = Buffer.alloc(2); v.writeUint16BE(payload.updateGovernanceDataSource.chain, 0); components.push(v); + // sequence + components.push(bigintToBuffer(payload.updateGovernanceDataSource.sequence, 8)) // Address components.push(payload.updateGovernanceDataSource.address); } else if (payload.updatePricesDataSources) { @@ -586,11 +596,11 @@ export namespace pyth { ): PriceUpdate { return { priceIdentifier: priceIdentifier, - price: opts?.price || 100n, + price: opts?.price !== undefined ? opts.price : 100n, conf: opts?.conf || 10n, emaPrice: opts?.emaPrice || 95n, emaConf: opts?.emaConf || 9n, - expo: -4, + expo: opts?.expo || -4, publishTime: opts?.publishTime || timestampNow(), prevPublishTime: opts?.prevPublishTime || timestampNow() - 10n, }; @@ -601,7 +611,7 @@ export namespace pyth { } export function applyGovernanceDataSourceUpdate( - updateGovernanceDataSource: wormhole.Emitter, + updateGovernanceDataSource: wormhole.NewEmitter, emitter: wormhole.Emitter, guardianSet: wormhole.Guardian[], txSenderAddress: string, diff --git a/unit-tests/pyth/oracle.test.ts b/unit-tests/pyth/oracle.test.ts index 2026d8a..386cd58 100644 --- a/unit-tests/pyth/oracle.test.ts +++ b/unit-tests/pyth/oracle.test.ts @@ -4,13 +4,14 @@ import { ParsedTransactionResult } from "@hirosystems/clarinet-sdk"; import { pnauMainnetVaas } from "./fixtures"; import { wormhole } from "../wormhole/helpers"; -const pythOracleContractName = "pyth-oracle-v2"; -const pythDecoderPnauContractName = "pyth-pnau-decoder-v1"; -const pythStorageContractName = "pyth-store-v1"; -const wormholeCoreContractName = "wormhole-core-v2"; +const pythOracleContractName = "pyth-oracle-v3"; +const pythDecoderPnauContractName = "pyth-pnau-decoder-v2"; +const pythStorageContractName = "pyth-storage-v3"; +const wormholeCoreContractName = "wormhole-core-v3"; -describe("pyth-oracle-v2::decode-and-verify-price-feeds mainnet VAAs", () => { +describe("pyth-oracle-v3::decode-and-verify-price-feeds mainnet VAAs", () => { const accounts = simnet.getAccounts(); + const deployer = accounts.get("deployer")!; const sender = accounts.get("wallet_1")!; let block: ParsedTransactionResult[] | undefined = undefined; @@ -18,16 +19,22 @@ describe("pyth-oracle-v2::decode-and-verify-price-feeds mainnet VAAs", () => { // Before starting the test suite, we have to setup the guardian set. beforeEach(async () => { block = wormhole.applyMainnetGuardianSetUpdates( - sender, + deployer, wormholeCoreContractName, ); }); - it("should succeed handling the 3 guardians rotations", () => { - expect(block!).toHaveLength(3); + it("should succeed handling the 2 guardians rotations", () => { + expect(block!).toHaveLength(1); block!.forEach((b: ParsedTransactionResult) => { expect(b.result).toHaveClarityType(ClarityType.ResponseOk); }); + + const newUpdateBlock = wormhole.applyNextMainnetGuardianSetUpdates(sender, wormholeCoreContractName) + expect(newUpdateBlock!).toHaveLength(1); + newUpdateBlock!.forEach((b: ParsedTransactionResult) => { + expect(b.result).toHaveClarityType(ClarityType.ResponseOk); + }); }); it("should succeed handling PNAU mainnet payloads", () => { diff --git a/unit-tests/pyth/pnau.test.ts b/unit-tests/pyth/pnau.test.ts index ebb3147..d026bc6 100644 --- a/unit-tests/pyth/pnau.test.ts +++ b/unit-tests/pyth/pnau.test.ts @@ -3,14 +3,15 @@ import { beforeEach, describe, expect, it } from "vitest"; import { wormhole } from "../wormhole/helpers"; import { pyth } from "./helpers"; -const pythOracleContractName = "pyth-oracle-v2"; -const pythDecoderPnauContractName = "pyth-pnau-decoder-v1"; -const pythGovernanceContractName = "pyth-governance-v1"; -const pythStorageContractName = "pyth-store-v1"; -const wormholeCoreContractName = "wormhole-core-v2"; +const pythOracleContractName = "pyth-oracle-v3"; +const pythDecoderPnauContractName = "pyth-pnau-decoder-v2"; +const pythGovernanceContractName = "pyth-governance-v2"; +const pythStorageContractName = "pyth-storage-v3"; +const wormholeCoreContractName = "wormhole-core-v3"; -describe("pyth-pnau-decoder-v1::decode-and-verify-price-feeds success", () => { +describe("pyth-pnau-decoder-v2::decode-and-verify-price-feeds success", () => { const accounts = simnet.getAccounts(); + const deployer = accounts.get("deployer")!; const sender = accounts.get("wallet_1")!; const guardianSet = wormhole.generateGuardianSetKeychain(19); let pricesUpdates = pyth.buildPriceUpdateBatch([ @@ -35,12 +36,12 @@ describe("pyth-pnau-decoder-v1::decode-and-verify-price-feeds success", () => { wormhole.applyGuardianSetUpdate( guardianSet, 1, - sender, + deployer, wormholeCoreContractName, ); pyth.applyGovernanceDataSourceUpdate( - pyth.DefaultGovernanceDataSource, + pyth.DefaultGovernanceDataSourceUpdate, pyth.InitialGovernanceDataSource, guardianSet, sender, @@ -130,8 +131,9 @@ describe("pyth-pnau-decoder-v1::decode-and-verify-price-feeds success", () => { }); }); -describe("pyth-pnau-decoder-v1::decode-and-verify-price-feeds failures", () => { +describe("pyth-pnau-decoder-v2::decode-and-verify-price-feeds failures", () => { const accounts = simnet.getAccounts(); + const deployer = accounts.get("deployer")!; const sender = accounts.get("wallet_1")!; const guardianSet = wormhole.generateGuardianSetKeychain(19); let pricesUpdates = pyth.buildPriceUpdateBatch([ @@ -170,12 +172,12 @@ describe("pyth-pnau-decoder-v1::decode-and-verify-price-feeds failures", () => { wormhole.applyGuardianSetUpdate( guardianSet, 1, - sender, + deployer, wormholeCoreContractName, ); pyth.applyGovernanceDataSourceUpdate( - pyth.DefaultGovernanceDataSource, + pyth.DefaultGovernanceDataSourceUpdate, pyth.InitialGovernanceDataSource, guardianSet, sender, @@ -562,10 +564,13 @@ describe("pyth-pnau-decoder-v1::decode-and-verify-price-feeds failures", () => { expect(res.result).toBeErr(Cl.uint(2002)); }); - it("should fail if PNAU minor version is incorrect", () => { + it("should not fail if PNAU minor version is above minimum minor due to forward compatibility", () => { let actualPricesUpdates = pyth.buildPriceUpdateBatch([ [pyth.BtcPriceIdentifier, { price: 100n }], ]); + let pricesUpdatesToSubmit = [ + pyth.BtcPriceIdentifier, + ]; let actualPricesUpdatesVaaPayload = pyth.buildAuwvVaaPayload(actualPricesUpdates); let payload = pyth.serializeAuwvVaaPayloadToBuffer( @@ -595,7 +600,7 @@ describe("pyth-pnau-decoder-v1::decode-and-verify-price-feeds failures", () => { [Cl.buffer(pnau), executionPlan], sender, ); - expect(res.result).toBeErr(Cl.uint(2003)); + expect(res.result.type).toBe(ClarityType.ResponseOk) }); it("should fail if PNAU proof type version is incorrect", () => { @@ -671,10 +676,9 @@ describe("pyth-pnau-decoder-v1::decode-and-verify-price-feeds failures", () => { expect(res.result).toBeErr(Cl.uint(2008)); }); - it("should fail if the price is below stale threshold", () => { - // Everytime a simnet block is being mined, we add 1500s to the initial genesis time - usually bringing us to the future. - let onChainTime = pyth.timestampNow() + 1500n * BigInt(simnet.blockHeight); - simnet.mineEmptyBlocks(7); // stale threshold set to 10800 (3 hours), so by mining 7 blocks (1800s), we are advancing enough + it("should not update prices if the price is below stale threshold", () => { + let onChainTime = pyth.timestampNow() + BigInt(simnet.blockHeight); + simnet.mineEmptyBlocks(21); // stale threshold set to 10800 (3 hours), so by mining 21 blocks (1800s), we are advancing enough let actualPricesUpdates = pyth.buildPriceUpdateBatch([ [ pyth.BtcPriceIdentifier, @@ -684,6 +688,9 @@ describe("pyth-pnau-decoder-v1::decode-and-verify-price-feeds failures", () => { }, ], ]); + let pricesUpdatesToSubmit = [ + pyth.BtcPriceIdentifier, + ]; let actualPricesUpdatesVaaPayload = pyth.buildAuwvVaaPayload(actualPricesUpdates); let payload = pyth.serializeAuwvVaaPayloadToBuffer( @@ -711,16 +718,16 @@ describe("pyth-pnau-decoder-v1::decode-and-verify-price-feeds failures", () => { [Cl.buffer(pnau), executionPlan], sender, ); - expect(res.result).toBeErr(Cl.uint(5003)); + expect(res.result).toBeOk(Cl.list([])); }); it("should only return validated prices and filter invalid prices", () => { - // Everytime a simnet block is being mined, we add 1500s to the initial genesis time - usually bringing us to the future. + // Everytime a simnet block is being mined, we add 600s to the initial genesis time - usually bringing us to the future. let previousOnChainTime = - pyth.timestampNow() + 1500n * BigInt(simnet.blockHeight); - simnet.mineEmptyBlocks(7); // stale threshold set to 10800 (3 hours), so by mining 7 blocks (1800s), we are advancing enough + pyth.timestampNow() + 600n * BigInt(simnet.blockHeight); + simnet.mineEmptyBlocks(21); // stale threshold set to 10800 (3 hours), so by mining 21 blocks (1800s), we are advancing enough let newOnChainTime = - pyth.timestampNow() + 1500n * BigInt(simnet.blockHeight); + pyth.timestampNow() + 600n * BigInt(simnet.blockHeight); let actualPricesUpdates = pyth.buildPriceUpdateBatch([ [ pyth.BtcPriceIdentifier, @@ -762,6 +769,18 @@ describe("pyth-pnau-decoder-v1::decode-and-verify-price-feeds failures", () => { ); expect(res.result).toBeOk( Cl.list([ + Cl.tuple({ + "price-identifier": Cl.buffer(pyth.BtcPriceIdentifier), + price: Cl.int(actualPricesUpdates.decoded[1].price), + conf: Cl.uint(actualPricesUpdates.decoded[1].conf), + "ema-conf": Cl.uint(actualPricesUpdates.decoded[1].emaConf), + "ema-price": Cl.int(actualPricesUpdates.decoded[1].emaPrice), + expo: Cl.int(actualPricesUpdates.decoded[1].expo), + "prev-publish-time": Cl.uint( + actualPricesUpdates.decoded[1].prevPublishTime, + ), + "publish-time": Cl.uint(actualPricesUpdates.decoded[0].publishTime), + }), Cl.tuple({ "price-identifier": Cl.buffer(pyth.StxPriceIdentifier), price: Cl.int(actualPricesUpdates.decoded[1].price), diff --git a/unit-tests/pyth/ptgm.test.ts b/unit-tests/pyth/ptgm.test.ts index 8980613..2f527e1 100644 --- a/unit-tests/pyth/ptgm.test.ts +++ b/unit-tests/pyth/ptgm.test.ts @@ -6,15 +6,16 @@ import { bytesToHex, hexToBytes } from "@noble/hashes/utils"; import { ParsedTransactionResult } from "@hirosystems/clarinet-sdk"; import { ptgmTestnetVaas } from "./fixtures"; -const pythOracleContractName = "pyth-oracle-v2"; -const pythStorageContractName = "pyth-store-v1"; -const pythDecoderPnauContractName = "pyth-pnau-decoder-v1"; -const pythGovernanceContractName = "pyth-governance-v1"; -const wormholeCoreContractName = "wormhole-core-v2"; +const pythOracleContractName = "pyth-oracle-v3"; +const pythStorageContractName = "pyth-storage-v3"; +const pythDecoderPnauContractName = "pyth-pnau-decoder-v2"; +const pythGovernanceContractName = "pyth-governance-v2"; +const wormholeCoreContractName = "wormhole-core-v3"; const initialFeeRecipient = "ST3CRXBDXQ2N5P7E25Q39MEX1HSMRDSEAP1JST19D"; -describe("pyth-governance-v1::update-fee-value mainnet VAAs", () => { +describe("pyth-governance-v2::update-fee-value mainnet VAAs", () => { const accounts = simnet.getAccounts(); + const deployer = accounts.get("deployer")!; const sender = accounts.get("wallet_1")!; let block: ParsedTransactionResult[] | undefined = undefined; @@ -22,13 +23,13 @@ describe("pyth-governance-v1::update-fee-value mainnet VAAs", () => { // Before starting the test suite, we have to setup the guardian set. beforeEach(async () => { block = wormhole.applyMainnetGuardianSetUpdates( - sender, + deployer, wormholeCoreContractName, ); }); it("should succeed handling the 3 guardians rotations", () => { - expect(block!).toHaveLength(3); + expect(block!).toHaveLength(1); block!.forEach((b: ParsedTransactionResult) => { expect(b.result).toHaveClarityType(ClarityType.ResponseOk); }); @@ -72,8 +73,9 @@ describe("pyth-governance-v1::update-fee-value mainnet VAAs", () => { }); -describe("pyth-governance-v1::update-fee-value", () => { +describe("pyth-governance-v2::update-fee-value", () => { const accounts = simnet.getAccounts(); + const deployer = accounts.get("deployer")!; const sender = accounts.get("wallet_1")!; const guardianSet = wormhole.generateGuardianSetKeychain(19); let updateFeeValue = { @@ -87,7 +89,7 @@ describe("pyth-governance-v1::update-fee-value", () => { wormhole.applyGuardianSetUpdate( guardianSet, 1, - sender, + deployer, wormholeCoreContractName, ); }); @@ -158,8 +160,9 @@ describe("pyth-governance-v1::update-fee-value", () => { }); }); -describe("pyth-governance-v1::update-fee-recipient", () => { +describe("pyth-governance-v2::update-fee-recipient", () => { const accounts = simnet.getAccounts(); + const deployer = accounts.get("deployer")!; const sender = accounts.get("wallet_1")!; const guardianSet = wormhole.generateGuardianSetKeychain(19); let updateFeeRecipient = { @@ -172,7 +175,7 @@ describe("pyth-governance-v1::update-fee-recipient", () => { wormhole.applyGuardianSetUpdate( guardianSet, 1, - sender, + deployer, wormholeCoreContractName, ); }); @@ -207,7 +210,7 @@ describe("pyth-governance-v1::update-fee-recipient", () => { expect(Cl.ok(res.result)).toBeOk( Cl.tuple({ address: Cl.standardPrincipal(updateFeeRecipient.address), - exponent: Cl.uint(1), + exponent: Cl.uint(0), mantissa: Cl.uint(1), }), ); @@ -237,7 +240,7 @@ describe("pyth-governance-v1::update-fee-recipient", () => { }); }); -describe("pyth-governance-v1::update-wormhole-core-contract", () => { +describe("pyth-governance-v2::update-wormhole-core-contract", () => { const accounts = simnet.getAccounts(); const sender = accounts.get("wallet_1")!; const deployer = accounts.get("deployer")!; @@ -253,7 +256,7 @@ describe("pyth-governance-v1::update-wormhole-core-contract", () => { wormhole.applyGuardianSetUpdate( guardianSet, 1, - sender, + deployer, wormholeCoreContractName, ); }); @@ -295,7 +298,10 @@ describe("pyth-governance-v1::update-wormhole-core-contract", () => { updateWormholeContract.contractName, ), }); - expect(res.result).toBeOk(executionPlan); + expect(res.result).toBeOk(Cl.contractPrincipal( + updateWormholeContract.address, + updateWormholeContract.contractName, + )); res = simnet.callReadOnlyFn( pythGovernanceContractName, @@ -326,7 +332,7 @@ describe("pyth-governance-v1::update-wormhole-core-contract", () => { [Cl.bufferFromHex("00"), Cl.tuple(executionPlanBase)], sender, ); - expect(res.result).toBeErr(Cl.uint(4004)); + expect(res.result).toBeErr(Cl.uint(4003)); }); it("should fail if action mismatches", () => { @@ -353,7 +359,7 @@ describe("pyth-governance-v1::update-wormhole-core-contract", () => { }); }); -describe("pyth-governance-v1::update-pyth-decoder-contract", () => { +describe("pyth-governance-v2::update-pyth-decoder-contract", () => { const accounts = simnet.getAccounts(); const sender = accounts.get("wallet_1")!; const deployer = accounts.get("deployer")!; @@ -369,7 +375,7 @@ describe("pyth-governance-v1::update-pyth-decoder-contract", () => { wormhole.applyGuardianSetUpdate( guardianSet, 1, - sender, + deployer, wormholeCoreContractName, ); }); @@ -411,7 +417,10 @@ describe("pyth-governance-v1::update-pyth-decoder-contract", () => { wormholeCoreContractName, ), }); - expect(res.result).toBeOk(executionPlan); + expect(res.result).toBeOk(Cl.contractPrincipal( + updateDecoderContract.address, + updateDecoderContract.contractName, + )); res = simnet.callReadOnlyFn( pythGovernanceContractName, @@ -442,7 +451,7 @@ describe("pyth-governance-v1::update-pyth-decoder-contract", () => { [Cl.bufferFromHex("00"), Cl.tuple(executionPlanBase)], sender, ); - expect(res.result).toBeErr(Cl.uint(4004)); + expect(res.result).toBeErr(Cl.uint(4003)); }); it("should not be callable directly", () => { @@ -455,7 +464,7 @@ describe("pyth-governance-v1::update-pyth-decoder-contract", () => { ], sender, ); - expect(res.result).toBeErr(Cl.uint(4004)); + expect(res.result).toBeErr(Cl.uint(4003)); }); it("should fail if action mismatches", () => { @@ -482,14 +491,14 @@ describe("pyth-governance-v1::update-pyth-decoder-contract", () => { }); }); -describe("pyth-governance-v1::update-pyth-store-contract", () => { +describe("pyth-governance-v2::update-pyth-storage-contract", () => { const accounts = simnet.getAccounts(); const sender = accounts.get("wallet_1")!; const deployer = accounts.get("deployer")!; const guardianSet = wormhole.generateGuardianSetKeychain(19); let updateStoreContract = { address: "ST2CY5V39NHDPWSXMW9QDT3HC3GD6Q6XX4CFRK9AG", - contractName: "pyth-store-v2", + contractName: "pyth-storage-v3", }; let ptgmVaaPayload = pyth.buildPtgmVaaPayload({ updateStoreContract }); @@ -498,7 +507,7 @@ describe("pyth-governance-v1::update-pyth-store-contract", () => { wormhole.applyGuardianSetUpdate( guardianSet, 1, - sender, + deployer, wormholeCoreContractName, ); }); @@ -518,7 +527,7 @@ describe("pyth-governance-v1::update-pyth-store-contract", () => { ); let res = simnet.callPublicFn( pythGovernanceContractName, - `update-pyth-store-contract`, + `update-pyth-storage-contract`, [Cl.buffer(vaa), wormholeContract], sender, ); @@ -540,7 +549,10 @@ describe("pyth-governance-v1::update-pyth-store-contract", () => { wormholeCoreContractName, ), }); - expect(res.result).toBeOk(executionPlan); + expect(res.result).toBeOk(Cl.contractPrincipal( + updateStoreContract.address, + updateStoreContract.contractName, + )); res = simnet.callReadOnlyFn( pythGovernanceContractName, @@ -571,7 +583,7 @@ describe("pyth-governance-v1::update-pyth-store-contract", () => { [Cl.bufferFromHex("00"), Cl.tuple(executionPlanBase)], sender, ); - expect(res.result).toBeErr(Cl.uint(4004)); + expect(res.result).toBeErr(Cl.uint(4003)); res = simnet.callPublicFn( pythOracleContractName, @@ -582,7 +594,7 @@ describe("pyth-governance-v1::update-pyth-store-contract", () => { ], sender, ); - expect(res.result).toBeErr(Cl.uint(4004)); + expect(res.result).toBeErr(Cl.uint(4003)); }); it("should fail if action mismatches", () => { @@ -601,7 +613,7 @@ describe("pyth-governance-v1::update-pyth-store-contract", () => { ); let res = simnet.callPublicFn( pythGovernanceContractName, - `update-pyth-store-contract`, + `update-pyth-storage-contract`, [Cl.buffer(vaa), wormholeContract], sender, ); @@ -609,7 +621,7 @@ describe("pyth-governance-v1::update-pyth-store-contract", () => { }); }); -describe("pyth-governance-v1::update-pyth-oracle-contract", () => { +describe("pyth-governance-v2::update-pyth-oracle-contract", () => { const accounts = simnet.getAccounts(); const sender = accounts.get("wallet_1")!; const deployer = accounts.get("deployer")!; @@ -625,7 +637,7 @@ describe("pyth-governance-v1::update-pyth-oracle-contract", () => { wormhole.applyGuardianSetUpdate( guardianSet, 1, - sender, + deployer, wormholeCoreContractName, ); }); @@ -671,7 +683,10 @@ describe("pyth-governance-v1::update-pyth-oracle-contract", () => { ), ...executionPlanBase, }); - expect(res.result).toBeOk(executionPlan); + expect(res.result).toBeOk( Cl.contractPrincipal( + updateOracleContract.address, + updateOracleContract.contractName, + )); res = simnet.callReadOnlyFn( pythGovernanceContractName, @@ -688,7 +703,7 @@ describe("pyth-governance-v1::update-pyth-oracle-contract", () => { [Cl.bufferFromHex("00"), Cl.tuple(executionPlanBase)], sender, ); - expect(res.result).toBeErr(Cl.uint(4004)); + expect(res.result).toBeErr(Cl.uint(4003)); }); it("should fail if action mismatches", () => { @@ -715,8 +730,9 @@ describe("pyth-governance-v1::update-pyth-oracle-contract", () => { }); }); -describe("pyth-governance-v1::update-prices-data-sources", () => { +describe("pyth-governance-v2::update-prices-data-sources", () => { const accounts = simnet.getAccounts(); + const deployer = accounts.get("deployer")!; const sender = accounts.get("wallet_1")!; const guardianSet = wormhole.generateGuardianSetKeychain(19); let updatePricesDataSources = [ @@ -740,7 +756,7 @@ describe("pyth-governance-v1::update-prices-data-sources", () => { wormhole.applyGuardianSetUpdate( guardianSet, 1, - sender, + deployer, wormholeCoreContractName, ); }); @@ -803,12 +819,14 @@ describe("pyth-governance-v1::update-prices-data-sources", () => { }); }); -describe("pyth-governance-v1::update-governance-data-source", () => { +describe("pyth-governance-v2::update-governance-data-source", () => { const accounts = simnet.getAccounts(); + const deployer = accounts.get("deployer")!; const sender = accounts.get("wallet_1")!; const guardianSet = wormhole.generateGuardianSetKeychain(19); let updateGovernanceDataSource = { chain: 0xff, + sequence: 100n, address: hexToBytes( "FF00000000000000000000000000000000000000000000000000000000000000", ), @@ -819,12 +837,12 @@ describe("pyth-governance-v1::update-governance-data-source", () => { wormhole.applyGuardianSetUpdate( guardianSet, 1, - sender, + deployer, wormholeCoreContractName, ); pyth.applyGovernanceDataSourceUpdate( - pyth.DefaultGovernanceDataSource, + pyth.DefaultGovernanceDataSourceUpdate, pyth.InitialGovernanceDataSource, guardianSet, sender, @@ -864,6 +882,87 @@ describe("pyth-governance-v1::update-governance-data-source", () => { Cl.tuple({ "emitter-address": Cl.buffer(updateGovernanceDataSource.address), "emitter-chain": Cl.uint(updateGovernanceDataSource.chain), + "emitter-sequence": Cl.uint(updateGovernanceDataSource.sequence) + }), + ); + }); + + it("should update governance data source on lower sequence", () => { + let ptgmVaaPayload = pyth.buildPtgmVaaPayload({ + updateGovernanceDataSource, + }); + let payload = pyth.serializePtgmVaaPayloadToBuffer(ptgmVaaPayload); + let body = wormhole.buildValidVaaBodySpecs({ + payload, + emitter: pyth.DefaultGovernanceDataSource, + sequence: 2n, + }); + let header = wormhole.buildValidVaaHeader(guardianSet, body, { + version: 1, + guardianSetId: 1, + }); + let vaa = wormhole.serializeVaaToBuffer(header, body); + + let wormholeContract = Cl.contractPrincipal( + simnet.deployer, + wormholeCoreContractName, + ); + let res = simnet.callPublicFn( + pythGovernanceContractName, + `update-governance-data-source`, + [Cl.buffer(vaa), wormholeContract], + sender, + ); + expect(res.result).toBeOk( + Cl.tuple({ + "emitter-address": Cl.buffer(updateGovernanceDataSource.address), + "emitter-chain": Cl.uint(updateGovernanceDataSource.chain), + "emitter-sequence": Cl.uint(updateGovernanceDataSource.sequence) + }), + ); + + // update emitter with new emitter with lower sequence + let newEmitter = { + chain: 0xff, + sequence: 0n, + address: hexToBytes( + "FF00000000000000000000000000000000000000000000000000000000000000", + ), + }; + + ptgmVaaPayload = pyth.buildPtgmVaaPayload({ + updateGovernanceDataSource: newEmitter, + }); + + let currentEmitter = { + chain: 0xff, + address: hexToBytes( + "FF00000000000000000000000000000000000000000000000000000000000000", + ), + }; + + payload = pyth.serializePtgmVaaPayloadToBuffer(ptgmVaaPayload); + body = wormhole.buildValidVaaBodySpecs({ + payload, + emitter: currentEmitter, + sequence: 101n, + }); + header = wormhole.buildValidVaaHeader(guardianSet, body, { + version: 1, + guardianSetId: 1, + }); + vaa = wormhole.serializeVaaToBuffer(header, body); + res = simnet.callPublicFn( + pythGovernanceContractName, + `update-governance-data-source`, + [Cl.buffer(vaa), wormholeContract], + sender, + ); + expect(res.result).toBeOk( + Cl.tuple({ + "emitter-address": Cl.buffer(newEmitter.address), + "emitter-chain": Cl.uint(newEmitter.chain), + "emitter-sequence": Cl.uint(newEmitter.sequence) }), ); }); @@ -925,7 +1024,7 @@ describe("pyth-governance-v1::update-governance-data-source", () => { [Cl.buffer(vaa), wormholeContract], sender, ); - expect(res.result).toBeErr(Cl.uint(4007)); + expect(res.result).toBeErr(Cl.uint(4006)); }); it("should fail if target chain id is mismatching", () => { @@ -955,7 +1054,7 @@ describe("pyth-governance-v1::update-governance-data-source", () => { [Cl.buffer(vaa), wormholeContract], sender, ); - expect(res.result).toBeErr(Cl.uint(4007)); + expect(res.result).toBeErr(Cl.uint(4006)); }); it("should fail if module is mismatching", () => { @@ -985,7 +1084,7 @@ describe("pyth-governance-v1::update-governance-data-source", () => { [Cl.buffer(vaa), wormholeContract], sender, ); - expect(res.result).toBeErr(Cl.uint(4007)); + expect(res.result).toBeErr(Cl.uint(4006)); }); it("should fail if sequence is outdated", () => { @@ -1014,7 +1113,7 @@ describe("pyth-governance-v1::update-governance-data-source", () => { [Cl.buffer(vaa), wormholeContract], sender, ); - expect(res.result).toBeErr(Cl.uint(4005)); + expect(res.result).toBeErr(Cl.uint(4004)); }); it("should fail if data source is unauthorized", () => { @@ -1043,12 +1142,13 @@ describe("pyth-governance-v1::update-governance-data-source", () => { [Cl.buffer(vaa), wormholeContract], sender, ); - expect(res.result).toBeErr(Cl.uint(4006)); + expect(res.result).toBeErr(Cl.uint(4005)); }); }); -describe("pyth-governance-v1::update-stale-price-threshold", () => { +describe("pyth-governance-v2::update-stale-price-threshold", () => { const accounts = simnet.getAccounts(); + const deployer = accounts.get("deployer")!; const sender = accounts.get("wallet_1")!; const guardianSet = wormhole.generateGuardianSetKeychain(19); let updateStalePriceThreshold = { @@ -1061,7 +1161,7 @@ describe("pyth-governance-v1::update-stale-price-threshold", () => { wormhole.applyGuardianSetUpdate( guardianSet, 1, - sender, + deployer, wormholeCoreContractName, ); }); diff --git a/unit-tests/wormhole/fixtures.ts b/unit-tests/wormhole/fixtures.ts index a9e07d1..c36f824 100644 --- a/unit-tests/wormhole/fixtures.ts +++ b/unit-tests/wormhole/fixtures.ts @@ -1,30 +1,6 @@ export const gsuMainnetVaas = [ { - vaa: "010000000001007ac31b282c2aeeeb37f3385ee0de5f8e421d30b9e5ae8ba3d4375c1c77a86e77159bb697d9c456d6f8c02d22a94b1279b65b0d6a9957e7d3857423845ac758e300610ac1d2000000030001000000000000000000000000000000000000000000000000000000000000000400000000000005390000000000000000000000000000000000000000000000000000000000436f7265020000000000011358cc3ae5c097b213ce3c81979e1b9f9570746aa5ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cdeb5f7389fa26941519f0863349c223b73a6ddee774a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d", - keys: [ - "2a953a2e8b1052eb70c1d7b556b087deed598b55608396686c1c811b9796c763078687ce10459f4f25fb7a0fbf8727bb0fb51e00820e93a123f652ee843cf08d", - "2766db08820e311b22e109801ab8ea505b12e3df3d91ebc87c999ffb6929d1abb0ade987c74aa37db26eea4086ee738a2f34a5594edb8760da0eac5be356b731", - "54177ff4a8329520b76efd86f8bfce5c942554db16e673267dc1133b3f5e230b2d8cbf90fe274946045d4491de288d736680edc2ee9ee5b1b15416b0a34806c4", - "7fa3e98fcc2621337b217b61408a98facaabd25bad2b158438728ce863c14708cfcda1f3b50a16ca0211199079fb338d479a54546ec3c5f775af23a7d7f4fb24", - "0bdcbccc0297c2a4f92a7c39358c42f22a8ed700a78bd05c39c8b61aaf2338e825b6c0d26d1f2a2ae4129cd751201f73d7234c753bd0735212a5288b19748fd2", - "cfd90084be68de514fe14a7c281f492223f045566f859ea5c166d6e60bc650c23940909a8e96c2fbffbd15a598b4e6a5b5aa14c126bf58cc1a9e396fe7771965", - "8edf3f9d997357a0e2c916ee090392c3a645ebac4f6cd8f826d3ecc0173b33bf06b7c14e8002fc9a5d01af9824a5cb3778472cd477e0ab378091448bca6f0417", - "6200deeadd3b4e2cd0a168d42e720a3b88d3ce4769ff2808086e6fd36110fc05c591ccbf91368609dc3b21203e58c9883d4f580085469bef8d5bdcd26eb8ad69", - "d5225476d7849b362226952ffc561bab99832f3f8b99741f6d81bbeaffa8e7f6e54a85e5029a3b510707eaa9684df496e4b1268075ad0328693a30bf1b1e0033", - "d9fa78b5b958bea1929080b8ad96dc555d34b051a27aebf711eb1186b807b0448316d994606ac807121838d6c41a58f308bc6307acdf69491fa4b17282f3e66f", - "cc64af75ec2e2741fb9af9f6191cb9ee187d6d26af4d1e96d7bab47e6ec09be12d3192030dc4bbf54d1da319a7a2acfc7a9dd4c644af6646a4aaa02b1024bbab", - "b5943b6e284682ad2e011d6962d41febf86af2f5fc0c9c8f4b81358ff077f9c96ba0880eaf93541eae94b4fa41dba66dab7fb0201cc9af7c75681e5719b0c95f", - "0cfc9d5b5dcf702a1525f9d4ed1841e8eb8b34434cc82470dd35435f1dbdc73ffb51544b7500394eac9c7fa567868b495326075147a2d809ebbfd43273eeec91", - "0aa78894d894a15933969f5826347439e2c309f2049277a10066c9197840499498ad19ee3d1b291f932ec0890bbdafcec292c4f02a446670cd0084f997e25e2f", - "00f400e3fe40f64032485aad9240ead45a8e1fc83ec08c96db861c0eca155ac898df8673e778e3ccaae8a0f9e6af415fe40e99b0cbc88d7610e536b6041b07fb", - "604f384174c7ed3a0dc5f476569a978266a7943bd775449d1b8b27f4eb8beb99cdf095f9200a2dabb1bc5d68c3d96ea3d47f4d34499d59953669b6c8c093d578", - "4881345cbb299fa7c60ab2d16cb7fe7bf8d14675506ef6eb6037038b5b7092ea0a9e4d0b53ba3904edd99f86717d6ba81dffe44eb5b23c6fd22c91ab73c33021", - "ee3d4cc17633afe7e1794fcfd728e0643325e3d130eb1daa39c0c5cb05a200b43876117a182cabdcc3795632aa529473a0c8245f9e4f6e43e54c3f1da28bcb82", - "21f338444e96af31cf44958acf5764844efbddace3b823ed761c340c59ed2685d829818c83eebe8f00f783f1048a53515845536668a9e0c059ade7579a0f4204", - ], - }, - { - vaa: "01000000010d0012e6b39c6da90c5dfd3c228edbb78c7a4c97c488ff8a346d161a91db067e51d638c17216f368aa9bdf4836b8645a98018ca67d2fec87d769cabfdf2406bf790a0002ef42b288091a670ef3556596f4f47323717882881eaf38e03345078d07a156f312b785b64dae6e9a87e3d32872f59cb1931f728cecf511762981baf48303668f0103cef2616b84c4e511ff03329e0853f1bd7ee9ac5ba71d70a4d76108bddf94f69c2a8a84e4ee94065e8003c334e899184943634e12043d0dda78d93996da073d190104e76d166b9dac98f602107cc4b44ac82868faf00b63df7d24f177aa391e050902413b71046434e67c770b19aecdf7fce1d1435ea0be7262e3e4c18f50ddc8175c0105d9450e8216d741e0206a50f93b750a47e0a258b80eb8fed1314cc300b3d905092de25cd36d366097b7103ae2d184121329ba3aa2d7c6cc53273f11af14798110010687477c8deec89d36a23e7948feb074df95362fc8dcbd8ae910ac556a1dee1e755c56b9db5d710c940938ed79bc1895a3646523a58bc55f475a23435a373ecfdd0107fb06734864f79def4e192497362513171530daea81f07fbb9f698afe7e66c6d44db21323144f2657d4a5386a954bb94eef9f64148c33aef6e477eafa2c5c984c01088769e82216310d1827d9bd48645ec23e90de4ef8a8de99e2d351d1df318608566248d80cdc83bdcac382b3c30c670352be87f9069aab5037d0b747208eae9c650109e9796497ff9106d0d1c62e184d83716282870cef61a1ee13d6fc485b521adcce255c96f7d1bca8d8e7e7d454b65783a830bddc9d94092091a268d311ecd84c26010c468c9fb6d41026841ff9f8d7368fa309d4dbea3ea4bbd2feccf94a92cc8a20a226338a8e2126cd16f70eaf15b4fc9be2c3fa19def14e071956a605e9d1ac4162010e23fcb6bd445b7c25afb722250c1acbc061ed964ba9de1326609ae012acdfb96942b2a102a2de99ab96327859a34a2b49a767dbdb62e0a1fb26af60fe44fd496a00106bb0bac77ac68b347645f2fb1ad789ea9bd76fb9b2324f25ae06f97e65246f142df717f662e73948317182c62ce87d79c73def0dba12e5242dfc038382812cfe00126da03c5e56cb15aeeceadc1e17a45753ab4dc0ec7bf6a75ca03143ed4a294f6f61bc3f478a457833e43084ecd7c985bf2f55a55f168aac0e030fc49e845e497101626e9d9a5d9e343f00010000000000000000000000000000000000000000000000000000000000000004c1759167c43f501c2000000000000000000000000000000000000000000000000000000000436f7265020000000000021358cc3ae5c097b213ce3c81979e1b9f9570746aa5ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cd66b9590e1c41e0b226937bf9217d1d67fd4e91f574a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d", + vaa: "01000000020d00ce45474d9e1b1e7790a2d210871e195db53a70ffd6f237cfe70e2686a32859ac43c84a332267a8ef66f59719cf91cc8df0101fd7c36aa1878d5139241660edc0010375cc906156ae530786661c0cd9aef444747bc3d8d5aa84cac6a6d2933d4e1a031cffa30383d4af8131e929d9f203f460b07309a647d6cd32ab1cc7724089392c000452305156cfc90343128f97e499311b5cae174f488ff22fbc09591991a0a73d8e6af3afb8a5968441d3ab8437836407481739e9850ad5c95e6acfcc871e951bc30105a7956eefc23e7c945a1966d5ddbe9e4be376c2f54e45e3d5da88c2f8692510c7429b1ea860ae94d929bd97e84923a18187e777aa3db419813a80deb84cc8d22b00061b2a4f3d2666608e0aa96737689e3ba5793810ff3a52ff28ad57d8efb20967735dc5537a2e43ef10f583d144c12a1606542c207f5b79af08c38656d3ac40713301086b62c8e130af3411b3c0d91b5b50dcb01ed5f293963f901fc36e7b0e50114dce203373b32eb45971cef8288e5d928d0ed51cd86e2a3006b0af6a65c396c009080009e93ab4d2c8228901a5f4525934000b2c26d1dc679a05e47fdf0ff3231d98fbc207103159ff4116df2832eea69b38275283434e6cd4a4af04d25fa7a82990b707010aa643f4cf615dfff06ffd65830f7f6cf6512dabc3690d5d9e210fdc712842dc2708b8b2c22e224c99280cd25e5e8bfb40e3d1c55b8c41774e287c1e2c352aecfc010b89c1e85faa20a30601964ccc6a79c0ae53cfd26fb10863db37783428cd91390a163346558239db3cd9d420cfe423a0df84c84399790e2e308011b4b63e6b8015010ca31dcb564ac81a053a268d8090e72097f94f366711d0c5d13815af1ec7d47e662e2d1bde22678113d15963da100b668ba26c0c325970d07114b83c5698f46097010dc9fda39c0d592d9ed92cd22b5425cc6b37430e236f02d0d1f8a2ef45a00bde26223c0a6eb363c8b25fd3bf57234a1d9364976cefb8360e755a267cbbb674b39501108db01e444ab1003dd8b6c96f8eb77958b40ba7a85fefecf32ad00b7a47c0ae7524216262495977e09c0989dd50f280c21453d3756843608eacd17f4fdfe47600001261025228ef5af837cb060bcd986fcfa84ccef75b3fa100468cfd24e7fadf99163938f3b841a33496c2706d0208faab088bd155b2e20fd74c625bb1cc8c43677a0163c53c409e0c5dfa000100000000000000000000000000000000000000000000000000000000000000046c5a054d7833d1e42000000000000000000000000000000000000000000000000000000000436f7265020000000000031358cc3ae5c097b213ce3c81979e1b9f9570746aa5ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cd15e7caf07c4e3dc8e7c469f92c8cd88fb8005a2074a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d", keys: [ "2a953a2e8b1052eb70c1d7b556b087deed598b55608396686c1c811b9796c763078687ce10459f4f25fb7a0fbf8727bb0fb51e00820e93a123f652ee843cf08d", "2766db08820e311b22e109801ab8ea505b12e3df3d91ebc87c999ffb6929d1abb0ade987c74aa37db26eea4086ee738a2f34a5594edb8760da0eac5be356b731", @@ -33,7 +9,7 @@ export const gsuMainnetVaas = [ "0bdcbccc0297c2a4f92a7c39358c42f22a8ed700a78bd05c39c8b61aaf2338e825b6c0d26d1f2a2ae4129cd751201f73d7234c753bd0735212a5288b19748fd2", "cfd90084be68de514fe14a7c281f492223f045566f859ea5c166d6e60bc650c23940909a8e96c2fbffbd15a598b4e6a5b5aa14c126bf58cc1a9e396fe7771965", "8edf3f9d997357a0e2c916ee090392c3a645ebac4f6cd8f826d3ecc0173b33bf06b7c14e8002fc9a5d01af9824a5cb3778472cd477e0ab378091448bca6f0417", - /**/ "6200deeadd3b4e2cd0a168d42e720a3b88d3ce4769ff2808086e6fd36110fc05c591ccbf91368609dc3b21203e58c9883d4f580085469bef8d5bdcd26eb8ad69", + "47b15c5039dcb2850b59bea323db662cc597dd7d48fe6b8dbb6cd8704c45854bf0e92fa267c844ba1a700105e157c8099d55c82316cb5e50c56a5d0920ff91c2", "d5225476d7849b362226952ffc561bab99832f3f8b99741f6d81bbeaffa8e7f6e54a85e5029a3b510707eaa9684df496e4b1268075ad0328693a30bf1b1e0033", "d9fa78b5b958bea1929080b8ad96dc555d34b051a27aebf711eb1186b807b0448316d994606ac807121838d6c41a58f308bc6307acdf69491fa4b17282f3e66f", "cc64af75ec2e2741fb9af9f6191cb9ee187d6d26af4d1e96d7bab47e6ec09be12d3192030dc4bbf54d1da319a7a2acfc7a9dd4c644af6646a4aaa02b1024bbab", @@ -48,9 +24,9 @@ export const gsuMainnetVaas = [ ], }, { - vaa: "01000000020d00ce45474d9e1b1e7790a2d210871e195db53a70ffd6f237cfe70e2686a32859ac43c84a332267a8ef66f59719cf91cc8df0101fd7c36aa1878d5139241660edc0010375cc906156ae530786661c0cd9aef444747bc3d8d5aa84cac6a6d2933d4e1a031cffa30383d4af8131e929d9f203f460b07309a647d6cd32ab1cc7724089392c000452305156cfc90343128f97e499311b5cae174f488ff22fbc09591991a0a73d8e6af3afb8a5968441d3ab8437836407481739e9850ad5c95e6acfcc871e951bc30105a7956eefc23e7c945a1966d5ddbe9e4be376c2f54e45e3d5da88c2f8692510c7429b1ea860ae94d929bd97e84923a18187e777aa3db419813a80deb84cc8d22b00061b2a4f3d2666608e0aa96737689e3ba5793810ff3a52ff28ad57d8efb20967735dc5537a2e43ef10f583d144c12a1606542c207f5b79af08c38656d3ac40713301086b62c8e130af3411b3c0d91b5b50dcb01ed5f293963f901fc36e7b0e50114dce203373b32eb45971cef8288e5d928d0ed51cd86e2a3006b0af6a65c396c009080009e93ab4d2c8228901a5f4525934000b2c26d1dc679a05e47fdf0ff3231d98fbc207103159ff4116df2832eea69b38275283434e6cd4a4af04d25fa7a82990b707010aa643f4cf615dfff06ffd65830f7f6cf6512dabc3690d5d9e210fdc712842dc2708b8b2c22e224c99280cd25e5e8bfb40e3d1c55b8c41774e287c1e2c352aecfc010b89c1e85faa20a30601964ccc6a79c0ae53cfd26fb10863db37783428cd91390a163346558239db3cd9d420cfe423a0df84c84399790e2e308011b4b63e6b8015010ca31dcb564ac81a053a268d8090e72097f94f366711d0c5d13815af1ec7d47e662e2d1bde22678113d15963da100b668ba26c0c325970d07114b83c5698f46097010dc9fda39c0d592d9ed92cd22b5425cc6b37430e236f02d0d1f8a2ef45a00bde26223c0a6eb363c8b25fd3bf57234a1d9364976cefb8360e755a267cbbb674b39501108db01e444ab1003dd8b6c96f8eb77958b40ba7a85fefecf32ad00b7a47c0ae7524216262495977e09c0989dd50f280c21453d3756843608eacd17f4fdfe47600001261025228ef5af837cb060bcd986fcfa84ccef75b3fa100468cfd24e7fadf99163938f3b841a33496c2706d0208faab088bd155b2e20fd74c625bb1cc8c43677a0163c53c409e0c5dfa000100000000000000000000000000000000000000000000000000000000000000046c5a054d7833d1e42000000000000000000000000000000000000000000000000000000000436f7265020000000000031358cc3ae5c097b213ce3c81979e1b9f9570746aa5ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cd15e7caf07c4e3dc8e7c469f92c8cd88fb8005a2074a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d", + vaa: "01000000030d03d4a37a6ff4361d91714730831e9d49785f61624c8f348a9c6c1d82bc1d98cadc5e936338204445c6250bb4928f3f3e165ad47ca03a5d63111168a2de4576856301049a5df10464ea4e1961589fd30fc18d1970a7a2ffaad617e56a0f7777f25275253af7d10a0f0f2494dc6e99fc80e444ab9ebbbee252ded2d5dcb50cbf7a54bb5a01055f4603b553b9ba9e224f9c55c7bca3da00abb10abd19e0081aecd3b352be061a70f79f5f388ebe5190838ef3cd13a2f22459c9a94206883b739c90b40d5d74640006a8fade3997f650a36e46bceb1f609edff201ab32362266f166c5c7da713f6a19590c20b68ed3f0119cb24813c727560ede086b3d610c2d7a1efa66f655bad90900080f5e495a75ea52241c59d145c616bfac01e57182ad8d784cbcc9862ed3afb60c0983ccbc690553961ffcf115a0c917367daada8e60be2cbb8b8008bac6341a8c010935ab11e0eea28b87a1edc5ccce3f1fac25f75b5f640fe6b0673a7cd74513c9dc01c544216cf364cc9993b09fda612e0cd1ced9c00fb668b872a16a64ebb55d27010ab2bc39617a2396e7defa24cd7c22f42dc31f3c42ffcd9d1472b02df8468a4d0563911e8fb6a4b5b0ce0bd505daa53779b08ff660967b31f246126ed7f6f29a7e000bdb6d3fd7b33bdc9ac3992916eb4aacb97e7e21d19649e7fa28d2dd6e337937e4274516a96c13ac7a8895da9f91948ea3a09c25f44b982c62ce8842b58e20c8a9000d3d1b19c8bb000856b6610b9d28abde6c35cb7705c6ca5db711f7be96d60eed9d72cfa402a6bfe8bf0496dbc7af35796fc768da51a067b95941b3712dce8ae1e7010ec80085033157fd1a5628fc0c56267469a86f0e5a66d7dede1ad4ce74ecc3dff95b60307a39c3bfbeedc915075070da30d0395def9635130584f709b3885e1bdc0010fc480eb9ee715a2d151b23722b48b42581d7f4001fc1696c75425040bfc1ffc5394fe418adb2b64bd3dc692efda4cc408163677dbe233b16bcdabb853a20843301118ee9e115e1a0c981f19d0772b850e666591322da742a9a12cce9f52a5665bd474abdd59c580016bee8aae67fdf39b315be2528d12eec3a652910e03cc4c6fa3801129d0d1e2e429e969918ec163d16a7a5b2c6729aa44af5dccad07d25d19891556a79b574f42d9adbd9e2a9ae5a6b8750331d2fccb328dd94c3bf8791ee1bfe85aa00661e99781981faea00010000000000000000000000000000000000000000000000000000000000000004fd4c6c55ec8dfd342000000000000000000000000000000000000000000000000000000000436f726502000000000004135893b5a76c3f739645648885bdccc06cd70a3cd3ff6cb952589bde862c25ef4392132fb9d4a42157114de8460193bdf3a2fcf81f86a09765f4762fd1107a0086b32d7a0977926a205131d8731d39cbeb8c82b2fd82faed2711d59af0f2499d16e726f6b211b39756c042441be6d8650b69b54ebe715e234354ce5b4d348fb74b958e8966e2ec3dbd4958a7cd15e7caf07c4e3dc8e7c469f92c8cd88fb8005a2074a3bf913953d695260d88bc1aa25a4eee363ef0000ac0076727b35fbea2dac28fee5ccb0fea768eaf45ced136b9d9e24903464ae889f5c8a723fc14f93124b7c738843cbb89e864c862c38cddcccf95d2cc37a4dc036a8d232b48f62cdd4731412f4890da798f6896a3331f64b48c12d1d57fd9cbe7081171aa1be1d36cafe3867910f99c09e347899c19c38192b6e7387ccd768277c17dab1b7a5027c0b3cf178e21ad2e77ae06711549cfbb1f9c7a9d8096e85e1487f35515d02a92753504a8d75471b9f49edb6fbebc898f403e4773e95feb15e80c9a99c8348d", keys: [ - "2a953a2e8b1052eb70c1d7b556b087deed598b55608396686c1c811b9796c763078687ce10459f4f25fb7a0fbf8727bb0fb51e00820e93a123f652ee843cf08d", + "9a1e801daa25d9808e70aae9981353086f958955cc94ef33a461b0e596feaef90a8474dd10cf6ae967143f86105c16d6304a3d268ea952fda9389139d4bb9da1", "2766db08820e311b22e109801ab8ea505b12e3df3d91ebc87c999ffb6929d1abb0ade987c74aa37db26eea4086ee738a2f34a5594edb8760da0eac5be356b731", "54177ff4a8329520b76efd86f8bfce5c942554db16e673267dc1133b3f5e230b2d8cbf90fe274946045d4491de288d736680edc2ee9ee5b1b15416b0a34806c4", "7fa3e98fcc2621337b217b61408a98facaabd25bad2b158438728ce863c14708cfcda1f3b50a16ca0211199079fb338d479a54546ec3c5f775af23a7d7f4fb24", diff --git a/unit-tests/wormhole/helpers.ts b/unit-tests/wormhole/helpers.ts index fc98304..ec588e7 100644 --- a/unit-tests/wormhole/helpers.ts +++ b/unit-tests/wormhole/helpers.ts @@ -45,6 +45,12 @@ export namespace wormhole { return keychain; }; + export interface NewEmitter { + chain: number; + sequence: bigint; + address: Uint8Array; + } + export interface Emitter { chain: number; address: Uint8Array; @@ -84,6 +90,7 @@ export namespace wormhole { export const GovernanceUpdateEmitter = { chain: 1, + sequence: 0, address: hexToBytes( "0000000000000000000000000000000000000000000000000000000000000004", ), @@ -503,12 +510,6 @@ export namespace wormhole { const vaaRotation1 = Cl.bufferFromHex(gsuMainnetVaas[0].vaa); let publicKeysRotation1 = gsuMainnetVaas[0].keys.map(Cl.bufferFromHex); - const vaaRotation2 = Cl.bufferFromHex(gsuMainnetVaas[1].vaa); - let publicKeysRotation2 = gsuMainnetVaas[1].keys.map(Cl.bufferFromHex); - - const vaaRotation3 = Cl.bufferFromHex(gsuMainnetVaas[2].vaa); - let publicKeysRotation3 = gsuMainnetVaas[2].keys.map(Cl.bufferFromHex); - const block = simnet.mineBlock([ tx.callPublicFn( contractName, @@ -516,18 +517,24 @@ export namespace wormhole { [vaaRotation1, Cl.list(publicKeysRotation1)], txSenderAddress, ), + ]); + return block; + } + + export function applyNextMainnetGuardianSetUpdates( + txSenderAddress: string, + contractName: string, + ) { + const vaaRotation2 = Cl.bufferFromHex(gsuMainnetVaas[1].vaa); + let publicKeysRotation2 = gsuMainnetVaas[1].keys.map(Cl.bufferFromHex); + + const block = simnet.mineBlock([ tx.callPublicFn( contractName, "update-guardians-set", [vaaRotation2, Cl.list(publicKeysRotation2)], txSenderAddress, ), - tx.callPublicFn( - contractName, - "update-guardians-set", - [vaaRotation3, Cl.list(publicKeysRotation3)], - txSenderAddress, - ), ]); return block; } diff --git a/unit-tests/wormhole/vaa.test.ts b/unit-tests/wormhole/vaa.test.ts index d574024..626d6b7 100644 --- a/unit-tests/wormhole/vaa.test.ts +++ b/unit-tests/wormhole/vaa.test.ts @@ -5,10 +5,10 @@ import { wormhole } from "./helpers"; import { ParsedTransactionResult, tx } from "@hirosystems/clarinet-sdk"; import { hexToBytes } from "@noble/hashes/utils"; -const contractName = "wormhole-core-v2"; +const contractName = "wormhole-core-v3"; const verbosity = 0; -describe("wormhole-core-v2::parse-vaa success", () => { +describe("wormhole-core-v3::parse-vaa success", () => { const accounts = simnet.getAccounts(); const sender = accounts.get("wallet_1")!; const keychain = wormhole.generateGuardianSetKeychain(19); @@ -60,8 +60,9 @@ describe("wormhole-core-v2::parse-vaa success", () => { }); }); -describe("wormhole-core-v2::update-guardians-set failures", () => { +describe("wormhole-core-v3::update-guardians-set failures", () => { const accounts = simnet.getAccounts(); + const deployer = accounts.get("deployer")!; const sender = accounts.get("wallet_1")!; const keychain = wormhole.generateGuardianSetKeychain(19); @@ -93,7 +94,7 @@ describe("wormhole-core-v2::update-guardians-set failures", () => { contractName, `update-guardians-set`, [Cl.buffer(vaa), Cl.list(uncompressedPublicKey)], - sender, + deployer, ); expect(res.result).toBeErr(Cl.uint(1303)); }); @@ -126,7 +127,7 @@ describe("wormhole-core-v2::update-guardians-set failures", () => { contractName, `update-guardians-set`, [Cl.buffer(vaa), Cl.list(uncompressedPublicKey)], - sender, + deployer, ); expect(res.result).toBeErr(Cl.uint(1302)); }); @@ -159,7 +160,7 @@ describe("wormhole-core-v2::update-guardians-set failures", () => { contractName, `update-guardians-set`, [Cl.buffer(vaa), Cl.list(uncompressedPublicKey)], - sender, + deployer, ); expect(res.result).toBeErr(Cl.uint(1304)); }); @@ -195,7 +196,7 @@ describe("wormhole-core-v2::update-guardians-set failures", () => { contractName, `update-guardians-set`, [Cl.buffer(vaa), Cl.list(uncompressedPublicKey)], - sender, + deployer, ); expect(res.result).toBeErr(Cl.uint(1301)); }); @@ -232,7 +233,7 @@ describe("wormhole-core-v2::update-guardians-set failures", () => { contractName, `update-guardians-set`, [Cl.buffer(vaa), Cl.list(uncompressedPublicKey)], - sender, + deployer, ); expect(res.result).toBeErr(Cl.uint(1305)); }); @@ -269,14 +270,15 @@ describe("wormhole-core-v2::update-guardians-set failures", () => { contractName, `update-guardians-set`, [Cl.buffer(vaa), Cl.list(uncompressedPublicKey)], - sender, + deployer, ); expect(res.result).toBeErr(Cl.uint(1305)); }); }); -describe("wormhole-core-v2::update-guardians-set success", () => { +describe("wormhole-core-v3::update-guardians-set success", () => { const accounts = simnet.getAccounts(); + const deployer = accounts.get("deployer")!; const sender = accounts.get("wallet_1")!; const guardianSet1Keys = wormhole.generateGuardianSetKeychain(19); const guardianSet2Keys = wormhole.generateGuardianSetKeychain(19); @@ -287,7 +289,7 @@ describe("wormhole-core-v2::update-guardians-set success", () => { let [result, vaaHeader, vaaBody] = wormhole.applyGuardianSetUpdate( guardianSet1Keys, 1, - sender, + deployer, contractName, ); let [serializeVaaToClarityValue, _] = wormhole.serializeVaaToClarityValue( @@ -435,19 +437,20 @@ describe("wormhole-core-v2::update-guardians-set success", () => { sender, ), ])[0].result; - expect(res).toBeErr(Cl.uint(1207)); + expect(res).toBeErr(Cl.uint(1205)); }); }); -describe("wormhole-core-v2::parse-and-verify-vaa success", () => { +describe("wormhole-core-v3::parse-and-verify-vaa success", () => { const accounts = simnet.getAccounts(); + const deployer = accounts.get("deployer")!; const sender = accounts.get("wallet_1")!; const guardianSet1Keys = wormhole.generateGuardianSetKeychain(19); // const guardianSet2Keys = wormhole.generateGuardianSetKeychain(19); // Before starting the test suite, we have to setup the guardian set. beforeEach(async () => { - wormhole.applyGuardianSetUpdate(guardianSet1Keys, 1, sender, contractName); + wormhole.applyGuardianSetUpdate(guardianSet1Keys, 1, deployer, contractName); }); it("should succeed if the vaa is valid", () => { @@ -525,14 +528,15 @@ describe("wormhole-core-v2::parse-and-verify-vaa success", () => { }); }); -describe("wormhole-core-v2::parse-and-verify-vaa failures", () => { +describe("wormhole-core-v3::parse-and-verify-vaa failures", () => { const accounts = simnet.getAccounts(); + const deployer = accounts.get("deployer")!; const sender = accounts.get("wallet_1")!; const guardianSet1Keys = wormhole.generateGuardianSetKeychain(19); // Before starting the test suite, we have to setup the guardian set. beforeEach(async () => { - wormhole.applyGuardianSetUpdate(guardianSet1Keys, 1, sender, contractName); + wormhole.applyGuardianSetUpdate(guardianSet1Keys, 1, deployer, contractName); }); it("should fail if the version is invalid", () => { @@ -578,7 +582,7 @@ describe("wormhole-core-v2::parse-and-verify-vaa failures", () => { [Cl.buffer(vaa)], sender, ); - expect(res.result).toBeErr(Cl.uint(1105)); + expect(res.result).toBeErr(Cl.uint(1103)); }); it("should fail if one key is being used multiple times", () => { @@ -662,20 +666,27 @@ describe("wormhole-core-v2::parse-and-verify-vaa failures", () => { }); }); -describe("wormhole-core-v2::update-guardians-set mainnet guardian rotations", () => { +describe("wormhole-core-v3::update-guardians-set mainnet guardian rotations", () => { const accounts = simnet.getAccounts(); + const deployer = accounts.get("deployer")!; const sender = accounts.get("wallet_1")!; let block: ParsedTransactionResult[] | undefined = undefined; // Before starting the test suite, we have to setup the guardian set. beforeEach(async () => { - block = wormhole.applyMainnetGuardianSetUpdates(sender, contractName); + block = wormhole.applyMainnetGuardianSetUpdates(deployer, contractName); }); - it("should succeed handling the 3 guardians rotations", () => { - expect(block!).toHaveLength(3); + it("should succeed handling the 2 guardians rotations", () => { + expect(block!).toHaveLength(1); block!.forEach((b: ParsedTransactionResult) => { expect(b.result).toHaveClarityType(ClarityType.ResponseOk); }); + + const newUpdateBlock = wormhole.applyNextMainnetGuardianSetUpdates(sender, contractName) + expect(newUpdateBlock!).toHaveLength(1); + newUpdateBlock!.forEach((b: ParsedTransactionResult) => { + expect(b.result).toHaveClarityType(ClarityType.ResponseOk); + }); }); });