This commit is contained in:
Guillermo Bescos 2024-01-25 18:05:31 +00:00
parent a2dabb97cf
commit 40d7b6d679
3 changed files with 111 additions and 91 deletions

View File

@ -109,8 +109,8 @@ pub fn create_accumulator_message(
price_updates,
tree,
corrupt_wormhole_message,
DEFAULT_DATA_SOURCE.address.0,
DEFAULT_DATA_SOURCE.chain.into(),
DEFAULT_DATA_SOURCE.address,
DEFAULT_DATA_SOURCE.chain,
)
}
@ -118,8 +118,8 @@ pub fn create_accumulator_message_from_updates(
price_updates: Vec<MerklePriceUpdate>,
tree: MerkleTree<Keccak160>,
corrupt_wormhole_message: bool,
emitter_address: [u8; 32],
emitter_chain: u16,
emitter_address: Address,
emitter_chain: Chain,
) -> Vec<u8> {
let mut root_hash = [0u8; 20];
root_hash.copy_from_slice(&to_vec::<_, BigEndian>(&tree.root).unwrap()[..20]);
@ -151,13 +151,13 @@ pub fn create_accumulator_message_from_updates(
pub fn create_vaa_from_payload(
payload: &[u8],
emitter_address: [u8; 32],
emitter_chain: u16,
emitter_address: Address,
emitter_chain: Chain,
sequence: u64,
) -> Vaa<Box<RawMessage>> {
let vaa: Vaa<Box<RawMessage>> = Vaa {
emitter_chain: Chain::from(emitter_chain),
emitter_address: Address(emitter_address),
emitter_chain: emitter_chain,
emitter_address: emitter_address,
sequence,
payload: <Box<RawMessage>>::from(payload.to_vec()),
..Default::default()

View File

@ -856,7 +856,11 @@ mod test {
},
serde_wormhole::RawMessage,
std::time::Duration,
wormhole_sdk::Vaa,
wormhole_sdk::{
Address,
Chain,
Vaa,
},
};
/// Default valid time period for testing purposes.
@ -926,8 +930,8 @@ mod test {
}
fn create_batch_price_update_msg(
emitter_address: [u8; 32],
emitter_chain: u16,
emitter_address: Address,
emitter_chain: Chain,
attestations: Vec<PriceAttestation>,
) -> Binary {
let batch_attestation = BatchPriceAttestation {
@ -947,8 +951,8 @@ mod test {
attestations: Vec<PriceAttestation>,
) -> Binary {
create_batch_price_update_msg(
DEFAULT_DATA_SOURCE.address.0,
DEFAULT_DATA_SOURCE.chain.into(),
DEFAULT_DATA_SOURCE.address,
DEFAULT_DATA_SOURCE.chain,
attestations,
)
}
@ -1003,8 +1007,8 @@ mod test {
fn apply_price_update(
config_info: &ConfigInfo,
emitter_address: [u8; 32],
emitter_chain: u16,
emitter_address: Address,
emitter_chain: Chain,
attestations: Vec<PriceAttestation>,
) -> StdResult<(usize, Vec<PriceFeed>)> {
let (mut deps, env) = setup_test();
@ -1159,8 +1163,8 @@ mod test {
fn test_parse_batch_attestation_empty_array() {
let (num_attestations, new_attestations) = apply_price_update(
&default_config_info(),
DEFAULT_DATA_SOURCE.address.0,
DEFAULT_DATA_SOURCE.chain.into(),
DEFAULT_DATA_SOURCE.address,
DEFAULT_DATA_SOURCE.chain,
vec![],
)
.unwrap();
@ -1191,7 +1195,7 @@ mod test {
};
}
fn test_accumulator_wrong_source(emitter_address: [u8; 32], emitter_chain: u16) {
fn test_accumulator_wrong_source(emitter_address: Address, emitter_chain: Chain) {
let (mut deps, env) = setup_test();
config(&mut deps.storage)
.save(&default_config_info())
@ -1221,12 +1225,12 @@ mod test {
#[test]
fn test_accumulator_verify_vaa_sender_fail_wrong_emitter_address() {
test_accumulator_wrong_source(WRONG_SOURCE.address.0, DEFAULT_DATA_SOURCE.chain.into());
test_accumulator_wrong_source(WRONG_SOURCE.address, DEFAULT_DATA_SOURCE.chain);
}
#[test]
fn test_accumulator_verify_vaa_sender_fail_wrong_emitter_chain() {
test_accumulator_wrong_source(DEFAULT_DATA_SOURCE.address.0, WRONG_SOURCE.chain.into());
test_accumulator_wrong_source(DEFAULT_DATA_SOURCE.address, WRONG_SOURCE.chain);
}
#[test]
@ -1476,8 +1480,8 @@ mod test {
price_updates,
tree,
false,
DEFAULT_DATA_SOURCE.address.0,
DEFAULT_DATA_SOURCE.chain.into(),
DEFAULT_DATA_SOURCE.address,
DEFAULT_DATA_SOURCE.chain,
);
let info = mock_info("123", &[]);
let result = update_price_feeds(deps.as_mut(), env, info, &[msg.into()]);
@ -1510,8 +1514,8 @@ mod test {
price_updates,
tree,
false,
DEFAULT_DATA_SOURCE.address.0,
DEFAULT_DATA_SOURCE.chain.into(),
DEFAULT_DATA_SOURCE.address,
DEFAULT_DATA_SOURCE.chain,
);
let info = mock_info("123", &[]);
let result = update_price_feeds(deps.as_mut(), env, info, &[msg.into()]);
@ -1695,8 +1699,8 @@ mod test {
fn test_verify_vaa_sender_ok() {
let result = apply_price_update(
&default_config_info(),
DEFAULT_DATA_SOURCE.address.0,
DEFAULT_DATA_SOURCE.chain.into(),
DEFAULT_DATA_SOURCE.address,
DEFAULT_DATA_SOURCE.chain,
vec![PriceAttestation::default()],
);
assert!(result.is_ok());
@ -1706,8 +1710,8 @@ mod test {
fn test_verify_vaa_sender_fail_wrong_emitter_address() {
let result = apply_price_update(
&default_config_info(),
WRONG_SOURCE.address.0,
DEFAULT_DATA_SOURCE.chain.into(),
WRONG_SOURCE.address,
DEFAULT_DATA_SOURCE.chain,
vec![PriceAttestation::default()],
);
assert_eq!(result, Err(PythContractError::InvalidUpdateEmitter.into()));
@ -1717,8 +1721,8 @@ mod test {
fn test_verify_vaa_sender_fail_wrong_emitter_chain() {
let result = apply_price_update(
&default_config_info(),
DEFAULT_DATA_SOURCE.address.0,
WRONG_SOURCE.chain.into(),
DEFAULT_DATA_SOURCE.address,
WRONG_SOURCE.chain,
vec![PriceAttestation::default()],
);
assert_eq!(result, Err(PythContractError::InvalidUpdateEmitter.into()));
@ -2039,8 +2043,8 @@ mod test {
fn governance_vaa(instruction: &GovernanceInstruction) -> Vaa<Box<RawMessage>> {
create_vaa_from_payload(
&instruction.serialize().unwrap(),
DEFAULT_GOVERNANCE_SOURCE.address.0,
DEFAULT_GOVERNANCE_SOURCE.chain.into(),
DEFAULT_GOVERNANCE_SOURCE.address,
DEFAULT_GOVERNANCE_SOURCE.chain,
7,
)
}
@ -2128,8 +2132,8 @@ mod test {
}
.serialize()
.unwrap(),
SECONDARY_GOVERNANCE_SOURCE.address.0,
SECONDARY_GOVERNANCE_SOURCE.chain.into(),
SECONDARY_GOVERNANCE_SOURCE.address,
SECONDARY_GOVERNANCE_SOURCE.chain,
12,
);
@ -2163,8 +2167,8 @@ mod test {
}
.serialize()
.unwrap(),
SECONDARY_GOVERNANCE_SOURCE.address.0,
SECONDARY_GOVERNANCE_SOURCE.chain.into(),
SECONDARY_GOVERNANCE_SOURCE.address,
SECONDARY_GOVERNANCE_SOURCE.chain,
12,
);
@ -2197,8 +2201,8 @@ mod test {
}
.serialize()
.unwrap(),
SECONDARY_GOVERNANCE_SOURCE.address.0,
SECONDARY_GOVERNANCE_SOURCE.chain.into(),
SECONDARY_GOVERNANCE_SOURCE.address,
SECONDARY_GOVERNANCE_SOURCE.chain,
12,
);

View File

@ -20,9 +20,7 @@ use {
PriceStatus,
},
pythnet_sdk::test_utils::{
create_accumulator_message,
create_dummy_price_feed_message,
create_vaa_from_payload,
create_accumulator_message, create_dummy_price_feed_message, create_vaa_from_payload, DEFAULT_DATA_SOURCE, DEFAULT_GOVERNANCE_SOURCE, DEFAULT_VALID_TIME_PERIOD, SECONDARY_DATA_SOURCE, SECONDARY_GOVERNANCE_SOURCE
},
serde_json::json,
wormhole_sdk::Chain as WormholeChain,
@ -69,10 +67,16 @@ async fn initialize_chain() -> (
.args_json(&json!({
"wormhole": wormhole.id(),
"codehash": codehash,
"initial_source": Source::default(),
"gov_source": Source::default(),
"initial_source": Source {
emitter: DEFAULT_DATA_SOURCE.address.0,
chain: DEFAULT_DATA_SOURCE.chain.into(),
},
"gov_source": Source {
emitter: DEFAULT_GOVERNANCE_SOURCE.address.0,
chain: DEFAULT_GOVERNANCE_SOURCE.chain.into(),
},
"update_fee": U128::from(1u128),
"stale_threshold": 32,
"stale_threshold": DEFAULT_VALID_TIME_PERIOD,
}))
.gas(300_000_000_000_000)
.transact_async()
@ -95,18 +99,21 @@ async fn test_set_sources() {
module: GovernanceModule::Target,
action: GovernanceAction::SetDataSources {
data_sources: vec![
Source::default(),
Source {
emitter: [1; 32],
chain: Chain::from(WormholeChain::Solana),
emitter: DEFAULT_DATA_SOURCE.address.0,
chain: DEFAULT_DATA_SOURCE.chain.into(),
},
Source {
emitter: SECONDARY_DATA_SOURCE.address.0,
chain: SECONDARY_DATA_SOURCE.chain.into(),
},
],
},
}
.serialize()
.unwrap(),
[0; 32],
WormholeChain::Any.into(),
DEFAULT_GOVERNANCE_SOURCE.address,
DEFAULT_GOVERNANCE_SOURCE.chain,
1,
);
let vaa = hex::encode(serde_wormhole::to_vec(&vaa).unwrap());
@ -131,10 +138,13 @@ async fn test_set_sources() {
serde_json::from_slice::<Vec<Source>>(&contract.view("get_sources").await.unwrap().result)
.unwrap(),
&[
Source::default(),
Source {
emitter: [1; 32],
chain: Chain::from(WormholeChain::Solana),
emitter: DEFAULT_DATA_SOURCE.address.0,
chain: DEFAULT_DATA_SOURCE.chain.into(),
},
Source {
emitter: SECONDARY_DATA_SOURCE.address.0,
chain: SECONDARY_DATA_SOURCE.chain.into(),
},
]
);
@ -156,8 +166,8 @@ async fn test_set_governance_source() {
}
.serialize()
.unwrap(),
[1; 32],
WormholeChain::Solana.into(),
SECONDARY_GOVERNANCE_SOURCE.address,
SECONDARY_GOVERNANCE_SOURCE.chain,
1,
);
@ -172,8 +182,8 @@ async fn test_set_governance_source() {
}
.serialize()
.unwrap(),
[0; 32],
WormholeChain::Any.into(),
DEFAULT_GOVERNANCE_SOURCE.address,
DEFAULT_GOVERNANCE_SOURCE.chain,
2,
);
let vaa = hex::encode(serde_wormhole::to_vec(&vaa).unwrap());
@ -199,18 +209,21 @@ async fn test_set_governance_source() {
module: GovernanceModule::Target,
action: GovernanceAction::SetDataSources {
data_sources: vec![
Source::default(),
Source {
emitter: [2; 32],
chain: Chain::from(WormholeChain::Solana),
emitter: DEFAULT_DATA_SOURCE.address.0,
chain: DEFAULT_DATA_SOURCE.chain.into(),
},
Source {
emitter: SECONDARY_DATA_SOURCE.address.0,
chain: SECONDARY_DATA_SOURCE.chain.into(),
},
],
},
}
.serialize()
.unwrap(),
[1; 32],
WormholeChain::Solana.into(),
SECONDARY_GOVERNANCE_SOURCE.address,
SECONDARY_GOVERNANCE_SOURCE.chain,
2,
);
let vaa = hex::encode(serde_wormhole::to_vec(&vaa).unwrap());
@ -239,16 +252,20 @@ async fn test_set_governance_source() {
data_sources: vec![
Source::default(),
Source {
emitter: [2; 32],
chain: Chain::from(WormholeChain::Solana),
emitter: DEFAULT_DATA_SOURCE.address.0,
chain: DEFAULT_DATA_SOURCE.chain.into(),
},
Source {
emitter: SECONDARY_DATA_SOURCE.address.0,
chain: SECONDARY_DATA_SOURCE.chain.into(),
},
],
},
}
.serialize()
.unwrap(),
[0; 32],
WormholeChain::Any.into(),
DEFAULT_GOVERNANCE_SOURCE.address,
DEFAULT_GOVERNANCE_SOURCE.chain,
4,
);
let vaa = hex::encode(serde_wormhole::to_vec(&vaa).unwrap());
@ -280,7 +297,7 @@ async fn test_stale_threshold() {
.duration_since(std::time::UNIX_EPOCH)
.expect("Failed to get UNIX timestamp")
.as_secs()
- 60;
- DEFAULT_VALID_TIME_PERIOD;
// Submit a Price Attestation to the contract.
let vaa = create_vaa_from_payload(
@ -306,8 +323,8 @@ async fn test_stale_threshold() {
}
.serialize()
.unwrap(),
[0; 32],
WormholeChain::Any.into(),
DEFAULT_DATA_SOURCE.address,
DEFAULT_DATA_SOURCE.chain,
1,
);
let vaa = hex::encode(serde_wormhole::to_vec(&vaa).unwrap());
@ -380,8 +397,8 @@ async fn test_stale_threshold() {
}
.serialize()
.unwrap(),
[0; 32],
WormholeChain::Any.into(),
DEFAULT_DATA_SOURCE.address,
DEFAULT_DATA_SOURCE.chain,
2,
);
let vaa = hex::encode(serde_wormhole::to_vec(&vaa).unwrap());
@ -431,8 +448,8 @@ async fn test_stale_threshold() {
}
.serialize()
.unwrap(),
[0; 32],
WormholeChain::Any.into(),
DEFAULT_GOVERNANCE_SOURCE.address,
DEFAULT_GOVERNANCE_SOURCE.chain,
3,
);
let vaa = hex::encode(serde_wormhole::to_vec(&vaa).unwrap());
@ -491,8 +508,8 @@ async fn test_contract_fees() {
}
.serialize()
.unwrap(),
[0; 32],
WormholeChain::Any.into(),
DEFAULT_GOVERNANCE_SOURCE.address,
DEFAULT_GOVERNANCE_SOURCE.chain,
1,
);
let vaa = hex::encode(serde_wormhole::to_vec(&vaa).unwrap());
@ -568,8 +585,8 @@ async fn test_contract_fees() {
}
.serialize()
.unwrap(),
[0; 32],
WormholeChain::Any.into(),
DEFAULT_DATA_SOURCE.address,
DEFAULT_DATA_SOURCE.chain,
2,
);
let vaa = hex::encode(serde_wormhole::to_vec(&vaa).unwrap());
@ -619,8 +636,8 @@ async fn test_same_governance_sequence_fails() {
}
.serialize()
.unwrap(),
[0; 32],
WormholeChain::Any.into(),
DEFAULT_GOVERNANCE_SOURCE.address,
DEFAULT_GOVERNANCE_SOURCE.chain,
1,
);
let vaa = hex::encode(serde_wormhole::to_vec(&vaa).unwrap());
@ -674,8 +691,8 @@ async fn test_out_of_order_sequences_fail() {
}
.serialize()
.unwrap(),
[0; 32],
WormholeChain::Any.into(),
DEFAULT_GOVERNANCE_SOURCE.address,
DEFAULT_GOVERNANCE_SOURCE.chain,
1,
);
let vaa = hex::encode(serde_wormhole::to_vec(&vaa).unwrap());
@ -705,8 +722,8 @@ async fn test_out_of_order_sequences_fail() {
}
.serialize()
.unwrap(),
[0; 32],
WormholeChain::Any.into(),
DEFAULT_GOVERNANCE_SOURCE.address,
DEFAULT_GOVERNANCE_SOURCE.chain,
3,
);
let vaa = hex::encode(serde_wormhole::to_vec(&vaa).unwrap());
@ -736,8 +753,8 @@ async fn test_out_of_order_sequences_fail() {
}
.serialize()
.unwrap(),
[0; 32],
WormholeChain::Any.into(),
DEFAULT_GOVERNANCE_SOURCE.address,
DEFAULT_GOVERNANCE_SOURCE.chain,
2,
);
let vaa = hex::encode(serde_wormhole::to_vec(&vaa).unwrap());
@ -772,8 +789,8 @@ async fn test_governance_target_fails_if_not_near() {
}
.serialize()
.unwrap(),
[0; 32],
WormholeChain::Any.into(),
DEFAULT_GOVERNANCE_SOURCE.address,
DEFAULT_GOVERNANCE_SOURCE.chain,
1,
);
let vaa = hex::encode(serde_wormhole::to_vec(&vaa).unwrap());
@ -808,18 +825,17 @@ async fn test_accumulator_updates() {
module: GovernanceModule::Target,
action: GovernanceAction::SetDataSources {
data_sources: vec![
Source::default(),
Source {
emitter: [1; 32],
chain: Chain::from(WormholeChain::Any),
emitter: DEFAULT_DATA_SOURCE.address.0,
chain: DEFAULT_DATA_SOURCE.chain.into(),
},
],
},
}
.serialize()
.unwrap(),
[0; 32],
WormholeChain::Any.into(),
DEFAULT_GOVERNANCE_SOURCE.address,
DEFAULT_GOVERNANCE_SOURCE.chain,
1,
);
let vaa = hex::encode(serde_wormhole::to_vec(&vaa).unwrap());