[cosmwasm] Use ParsedVaa from wormhole contract (#1237)

* Use ParsedVaa from wormhole contract

* Cleanup

* Pin it

* Test this CI

* Cleanup

* Revert "Test this CI"

This reverts commit 0cb2caedd3d3f7d49d7f53cd0d67fc12be092c2f.

* Use tag
This commit is contained in:
guibescos 2024-01-24 17:40:15 +00:00 committed by GitHub
parent 35b5736533
commit 6917c84b0e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 29 additions and 64 deletions

View File

@ -1486,6 +1486,7 @@ dependencies = [
"sha3 0.9.1",
"terraswap",
"thiserror",
"wormhole-cosmwasm",
]
[[package]]
@ -2644,13 +2645,24 @@ version = "0.48.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
[[package]]
name = "wormhole-cosmwasm"
version = "0.1.0"
source = "git+https://github.com/wormhole-foundation/wormhole?tag=v2.23.37#846c2e9c9dce18a48745e79ba2ee7eaa5acaf1f4"
dependencies = [
"cosmwasm-std",
"cosmwasm-storage",
"generic-array",
"hex",
"k256",
"schemars",
"serde",
"sha3 0.9.1",
"thiserror",
]
[[package]]
name = "zeroize"
version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9"
[[patch.unused]]
name = "cw20-wrapped-2"
version = "0.1.0"
source = "git+https://github.com/wormhole-foundation/wormhole?tag=v2.14.8#7e982cb03264cf1cccfbb5d947c00d6ad3e2f8f1"

View File

@ -2,6 +2,8 @@
members = ["contracts/pyth", "sdk/rust"]
exclude = ["examples/cw-contract"]
resolver = "2"
[profile.release]
opt-level = 3
debug = false
@ -12,6 +14,3 @@ codegen-units = 1
panic = 'abort'
incremental = false
overflow-checks = true
[patch.crates-io]
cw20-wrapped-2 = { git = "https://github.com/wormhole-foundation/wormhole", tag = "v2.14.8"}

View File

@ -40,6 +40,7 @@ cosmwasm-schema = "1.1.9"
osmosis-std = "0.15.2"
pyth-sdk-cw = { path = "../../sdk/rust" }
pythnet-sdk = { path = "../../../../pythnet/pythnet_sdk" }
wormhole-cosmwasm = {git = "https://github.com/wormhole-foundation/wormhole", tag="v2.23.37"}
[dev-dependencies]
cosmwasm-vm = { version = "1.0.0", default-features = false }

View File

@ -34,10 +34,6 @@ use {
ConfigInfo,
PythDataSource,
},
wormhole::{
ParsedVAA,
WormholeQueryMsg,
},
},
byteorder::BigEndian,
cosmwasm_std::{
@ -60,6 +56,10 @@ use {
WasmMsg,
WasmQuery,
},
cw_wormhole::{
msg::QueryMsg as WormholeQueryMsg,
state::ParsedVAA,
},
pyth_sdk::{
Identifier,
UnixTimestamp,
@ -1095,28 +1095,28 @@ mod test {
#[cfg(feature = "osmosis")]
fn check_sufficient_fee(deps: &Deps, data: &[Binary]) {
let mut info = mock_info("123", coins(100, "foo").as_slice());
let result = is_fee_sufficient(&deps, info.clone(), &data);
let result = is_fee_sufficient(deps, info.clone(), data);
assert_eq!(result, Ok(true));
// insufficient fee in base denom -> false
info.funds = coins(50, "foo");
let result = is_fee_sufficient(&deps, info.clone(), &data);
let result = is_fee_sufficient(deps, info.clone(), data);
assert_eq!(result, Ok(false));
// valid denoms are 'uion' or 'ibc/FF3065989E34457F342D4EFB8692406D49D4E2B5C70F725F127862E22CE6BDCD'
// a valid denom other than base denom with sufficient fee
info.funds = coins(100, "uion");
let result = is_fee_sufficient(&deps, info.clone(), &data);
let result = is_fee_sufficient(deps, info.clone(), data);
assert_eq!(result, Ok(true));
// insufficient fee in valid denom -> false
info.funds = coins(50, "uion");
let result = is_fee_sufficient(&deps, info.clone(), &data);
let result = is_fee_sufficient(deps, info.clone(), data);
assert_eq!(result, Ok(false));
// an invalid denom -> Err invalid fee denom
info.funds = coins(100, "invalid_denom");
let result = is_fee_sufficient(&deps, info, &data);
let result = is_fee_sufficient(deps, info, data);
assert_eq!(
result,
Err(PythContractError::InvalidFeeDenom {

View File

@ -5,7 +5,6 @@ pub mod contract;
pub mod governance;
pub mod msg;
pub mod state;
pub mod wormhole;
#[cfg(feature = "injective")]
mod injective;

View File

@ -1,46 +0,0 @@
// These types are copied from the Wormhole contract. See the links with each type to see the original code
// The reason to do so was dependency conflict. Wormhole contracts were using a very old version of a dependency
// which is not compatible with the one used by osmosis-sdk. And since we weren't using anything else from
// the Wormhole contract the types are moved here.
use {
cosmwasm_std::Binary,
schemars::JsonSchema,
serde::{
Deserialize,
Serialize,
},
};
type HumanAddr = String;
// This type is copied from
// https://github.com/wormhole-foundation/wormhole/blob/main/cosmwasm/contracts/wormhole/src/state.rs#L75
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
pub struct ParsedVAA {
pub version: u8,
pub guardian_set_index: u32,
pub timestamp: u32,
pub nonce: u32,
pub len_signers: u8,
pub emitter_chain: u16,
pub emitter_address: Vec<u8>,
pub sequence: u64,
pub consistency_level: u8,
pub payload: Vec<u8>,
pub hash: Vec<u8>,
}
// The type is copied from
// https://github.com/wormhole-foundation/wormhole/blob/main/cosmwasm/contracts/wormhole/src/msg.rs#L37
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum WormholeQueryMsg {
GuardianSetInfo {},
VerifyVAA { vaa: Binary, block_time: u64 },
GetState {},
QueryAddressHex { address: HumanAddr },
}