|
| 1 | + |
| 2 | + |
| 3 | +use alloc::vec::Vec; |
| 4 | +use hex::FromHex; |
| 5 | +use stylus_sdk::alloy_primitives::Address; |
| 6 | + |
| 7 | +pub fn create_upgrade_contract_vaa(_new_implementation: [u8; 32]) -> Vec<u8> { |
| 8 | + let hex_str = "01000000000100b2e15dd5ef41b800ec5ec10f61c6415f706a769f459757f43be78a8fd9f1f6e104e909239fe73b4d8652f7aa1a07825e3230d01a0a7bd6efa0be2e7e72377d71010000000100000000000100000000000000000000000000000000000000000000000000000000000000110000000000000001005054474d01000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; |
| 9 | + Vec::from_hex(hex_str).expect("Invalid hex string") |
| 10 | +} |
| 11 | + |
| 12 | +pub fn create_authorize_governance_data_source_transfer_vaa(_claim_vaa: Vec<u8>) -> Vec<u8> { |
| 13 | + let hex_str = "01000000000100b441e497034be4ee82242a866461d5e6744082654f71301a96f579f629b6bf176cc0c1964cd7d4f792436b7a73fc7024d72b138869b4d81d449740bb08148238000000000100000000000100000000000000000000000000000000000000000000000000000000000000110000000000000001005054474d01010002010000000001009c9dc62e92fefe0806dce30b662a5d319417a62dccc700b5f2678306d39c005f7a5e74d11df287301d85d328a3d000c5d793c57161f3150c7eb1a17668946e6b010000000100000000000100000000000000000000000000000000000000000000000000000000000000110000000000000064005054474d0105000200000000"; |
| 14 | + Vec::from_hex(hex_str).expect("Invalid hex string") |
| 15 | +} |
| 16 | + |
| 17 | +pub fn create_set_data_sources_vaa(sources: Vec<(u16, [u8; 32])>) -> Vec<u8> { |
| 18 | + let expected_source = (1u16, [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11]); |
| 19 | + |
| 20 | + if sources.len() == 1 && sources[0] == expected_source { |
| 21 | + let hex_str = "0100000000010069825ef00344cf745b6e72a41d4f869d4e90de517849360c72bf94efc97681671d826e484747b21a80c8f1e7816021df9f55e458a6e7a717cb2bd2a1e85fd57100499602d200000000000100000000000000000000000000000000000000000000000000000000000000110000000000000001005054474d010200020100010000000000000000000000000000000000000000000000000000000000001111"; |
| 22 | + Vec::from_hex(hex_str).expect("Invalid hex string") |
| 23 | + } else { |
| 24 | + panic!("create_set_data_sources_vaa: Input sources don't match the pre-signed VAA. Expected: {:?}, Got: {:?}", vec![expected_source], sources); |
| 25 | + } |
| 26 | +} |
| 27 | + |
| 28 | +pub fn create_set_fee_vaa(_value: u64, _expo: u64) -> Vec<u8> { |
| 29 | + let hex_str = "0100000000010057940f58a6a44c93606bd721701539e0da93d5ea1583a735fbb13ecbcf9c01fc70240de519ea76869af14d067d68c5f3f2230f565f41b7009f3c3e63749353ed000000000100000000000100000000000000000000000000000000000000000000000000000000000000110000000000000001005054474d0103000200000000000000050000000000000003"; |
| 30 | + Vec::from_hex(hex_str).expect("Invalid hex string") |
| 31 | +} |
| 32 | + |
| 33 | +pub fn create_set_valid_period_vaa(_valid_time_period_seconds: u64) -> Vec<u8> { |
| 34 | + let hex_str = "01000000000100b2e15dd5ef41b800ec5ec10f61c6415f706a769f459757f43be78a8fd9f1f6e104e909239fe73b4d8652f7aa1a07825e3230d01a0a7bd6efa0be2e7e72377d71010000000100000000000100000000000000000000000000000000000000000000000000000000000000110000000000000001005054474d010400020000000000000000"; |
| 35 | + Vec::from_hex(hex_str).expect("Invalid hex string") |
| 36 | +} |
| 37 | + |
| 38 | +pub fn create_request_governance_data_source_transfer_vaa(_governance_data_source_index: u32) -> Vec<u8> { |
| 39 | + let hex_str = "01000000000100b2e15dd5ef41b800ec5ec10f61c6415f706a769f459757f43be78a8fd9f1f6e104e909239fe73b4d8652f7aa1a07825e3230d01a0a7bd6efa0be2e7e72377d71010000000100000000000100000000000000000000000000000000000000000000000000000000000000110000000000000001005054474d010500020000000000000000"; |
| 40 | + Vec::from_hex(hex_str).expect("Invalid hex string") |
| 41 | +} |
| 42 | + |
| 43 | +pub fn create_set_wormhole_address_vaa(_address: Address) -> Vec<u8> { |
| 44 | + let hex_str = "01000000000100b2e15dd5ef41b800ec5ec10f61c6415f706a769f459757f43be78a8fd9f1f6e104e909239fe73b4d8652f7aa1a07825e3230d01a0a7bd6efa0be2e7e72377d71010000000100000000000100000000000000000000000000000000000000000000000000000000000000110000000000000001005054474d01060002000000000000000000000000000000000000000000"; |
| 45 | + Vec::from_hex(hex_str).expect("Invalid hex string") |
| 46 | +} |
| 47 | + |
| 48 | +pub fn create_set_transaction_fee_vaa(_value: u64, _expo: u64) -> Vec<u8> { |
| 49 | + let hex_str = "010000000001001554008232e74cb3ac74acc4527ead8a39637c537ec9b3d1fbb624c1f4f52e341e24ae89d978e033f5345e4af244df0ec61f380d9e33330f439d2b6764850270010000000100000000000100000000000000000000000000000000000000000000000000000000000000110000000000000001005054474d0108000200000000000000640000000000000003"; |
| 50 | + Vec::from_hex(hex_str).expect("Invalid hex string") |
| 51 | +} |
| 52 | + |
| 53 | +pub fn create_withdraw_fee_vaa(_target_address: Address, _value: u64, _expo: u64) -> Vec<u8> { |
| 54 | + let hex_str = "0100000000010030f48904e130d76ee219bc59988f89526e5c9860e89efda3a74e33c3ab53d4e6036d1c67249d2f25a27e8c94d203609785839e3e4817d0a03214ea8bbf6a8415000000000100000000000100000000000000000000000000000000000000000000000000000000000000110000000000000001005054474d0109000270997970c51812dc3a010c7d01b50e0d17dc79c800000000000000640000000000000003"; |
| 55 | + Vec::from_hex(hex_str).expect("Invalid hex string") |
| 56 | +} |
| 57 | + |
| 58 | +#[cfg(test)] |
| 59 | +mod tests { |
| 60 | + use super::*; |
| 61 | + use stylus_sdk::alloy_primitives::address; |
| 62 | + |
| 63 | + #[test] |
| 64 | + fn test_create_set_valid_period_vaa() { |
| 65 | + let vaa = create_set_valid_period_vaa(0); |
| 66 | + assert!(!vaa.is_empty()); |
| 67 | + let hex_str = hex::encode(&vaa); |
| 68 | + assert!(hex_str.contains("5054474d0104")); |
| 69 | + } |
| 70 | + |
| 71 | + #[test] |
| 72 | + fn test_create_set_fee_vaa() { |
| 73 | + let vaa = create_set_fee_vaa(5, 3); |
| 74 | + assert!(!vaa.is_empty()); |
| 75 | + let hex_str = hex::encode(&vaa); |
| 76 | + assert!(hex_str.contains("5054474d0103")); |
| 77 | + } |
| 78 | + |
| 79 | + #[test] |
| 80 | + fn test_create_set_transaction_fee_vaa() { |
| 81 | + let vaa = create_set_transaction_fee_vaa(100, 3); |
| 82 | + assert!(!vaa.is_empty()); |
| 83 | + let hex_str = hex::encode(&vaa); |
| 84 | + assert!(hex_str.contains("5054474d0108")); |
| 85 | + } |
| 86 | + |
| 87 | + #[test] |
| 88 | + fn test_create_set_data_sources_vaa() { |
| 89 | + let sources = vec![(1u16, [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11])]; |
| 90 | + let vaa = create_set_data_sources_vaa(sources); |
| 91 | + assert!(!vaa.is_empty()); |
| 92 | + let hex_str = hex::encode(&vaa); |
| 93 | + assert!(hex_str.contains("5054474d0102")); |
| 94 | + } |
| 95 | + |
| 96 | + #[test] |
| 97 | + fn test_create_authorize_governance_data_source_transfer_vaa() { |
| 98 | + let claim_vaa = vec![0u8; 32]; // Placeholder |
| 99 | + let vaa = create_authorize_governance_data_source_transfer_vaa(claim_vaa); |
| 100 | + assert!(!vaa.is_empty()); |
| 101 | + let hex_str = hex::encode(&vaa); |
| 102 | + assert!(hex_str.contains("5054474d0101")); |
| 103 | + } |
| 104 | + |
| 105 | + #[test] |
| 106 | + fn test_create_withdraw_fee_vaa() { |
| 107 | + let target_address = address!("70997970C51812dc3A010C7d01b50e0d17dc79C8"); |
| 108 | + let vaa = create_withdraw_fee_vaa(target_address, 100, 3); |
| 109 | + assert!(!vaa.is_empty()); |
| 110 | + let hex_str = hex::encode(&vaa); |
| 111 | + assert!(hex_str.contains("5054474d0109")); |
| 112 | + } |
| 113 | +} |
0 commit comments