Преглед на файлове

feat: publisher-caps-program (#1812)

* feat/publisher-caps-program

* add to vec

* fix ci

* Change create accumulator message

* cargo lock
guibescos преди 1 година
родител
ревизия
02d0adc460

+ 5 - 0
.github/workflows/ci-pre-commit.yml

@@ -32,6 +32,11 @@ jobs:
           profile: minimal
           toolchain: nightly-2024-03-26
           components: rustfmt, clippy
+      - uses: actions-rs/toolchain@v1
+        with:
+          profile: minimal
+          toolchain: nightly-2024-08-04
+          components: rustfmt, clippy
       - name: Install protoc
         uses: arduino/setup-protoc@v3
       - uses: actions/checkout@v4

+ 2 - 2
.pre-commit-config.yaml

@@ -83,13 +83,13 @@ repos:
       - id: cargo-fmt-pythnet-sdk
         name: Cargo format for pythnet SDK
         language: "rust"
-        entry: cargo +nightly-2024-03-26 fmt --manifest-path ./pythnet/pythnet_sdk/Cargo.toml --all -- --config-path rustfmt.toml
+        entry: cargo +nightly-2024-08-04 fmt --manifest-path ./pythnet/pythnet_sdk/Cargo.toml --all -- --config-path rustfmt.toml
         pass_filenames: false
         files: pythnet/pythnet_sdk
       - id: cargo-clippy-pythnet-sdk
         name: Cargo clippy for pythnet SDK
         language: "rust"
-        entry: cargo +nightly-2024-03-26 clippy --manifest-path ./pythnet/pythnet_sdk/Cargo.toml --tests --fix --allow-dirty --allow-staged -- -D warnings
+        entry: cargo +nightly-2024-08-04 clippy --manifest-path ./pythnet/pythnet_sdk/Cargo.toml --tests --fix --allow-dirty --allow-staged -- -D warnings
         pass_filenames: false
         files: pythnet/pythnet_sdk
       # Hooks for solana receiver contract

+ 2 - 3
pythnet/pythnet_sdk/Cargo.toml

@@ -1,6 +1,6 @@
 [package]
 name = "pythnet-sdk"
-version = "2.2.0"
+version = "2.3.0"
 description = "Pyth Runtime for Solana"
 authors = ["Pyth Data Association"]
 repository = "https://github.com/pyth-network/pythnet"
@@ -13,7 +13,7 @@ name = "pythnet_sdk"
 
 [features]
 test-utils = ["dep:wormhole-vaas-serde", "dep:serde_wormhole", "dep:libsecp256k1", "dep:rand"]
-solana-program = ["dep:solana-program", "dep:anchor-lang", "dep:proc-macro2"]
+solana-program = ["dep:solana-program", "dep:anchor-lang"]
 
 [dependencies]
 bincode = "1.3.1"
@@ -34,7 +34,6 @@ libsecp256k1 = {version ="0.7.1", optional = true}
 rand = {version = "0.8.5", optional = true}
 solana-program = {version = ">=1.13.6", optional = true}
 anchor-lang  = {version = ">=0.28.0", optional = true}
-proc-macro2 = {version = "=1.0.79", optional = true} # pinned to 1.0.79 to compilation errors with newer versions, remove this if it compiles fine without
 
 [dev-dependencies]
 base64 = "0.21.0"

+ 4 - 0
pythnet/pythnet_sdk/src/accumulators/merkle.rs

@@ -111,6 +111,10 @@ impl<H: Hasher> MerklePath<H> {
             .flat_map(|hash| hash.as_ref().to_vec())
             .collect()
     }
+
+    pub fn to_vec(&self) -> Vec<H::Hash> {
+        self.0.clone()
+    }
 }
 
 /// Presents an Accumulator friendly interface for MerkleTree.

+ 4 - 2
pythnet/pythnet_sdk/src/test_utils/mod.rs

@@ -157,6 +157,7 @@ pub fn create_accumulator_message(
     updates: &[&Message],
     corrupt_wormhole_message: bool,
     corrupt_messages: bool,
+    data_source_override: Option<DataSource>,
 ) -> Vec<u8> {
     let mut all_feeds_bytes: Vec<_> = all_feeds
         .iter()
@@ -196,12 +197,13 @@ pub fn create_accumulator_message(
             proof,
         });
     }
+    let data_source = data_source_override.unwrap_or(DEFAULT_DATA_SOURCE);
     create_accumulator_message_from_updates(
         price_updates,
         tree,
         corrupt_wormhole_message,
-        DEFAULT_DATA_SOURCE.address,
-        DEFAULT_DATA_SOURCE.chain,
+        data_source.address,
+        data_source.chain,
     )
 }
 

+ 1 - 1
target_chains/cosmwasm/Cargo.lock

@@ -1640,7 +1640,7 @@ dependencies = [
 
 [[package]]
 name = "pythnet-sdk"
-version = "2.1.0"
+version = "2.3.0"
 dependencies = [
  "bincode",
  "borsh 0.10.3",

+ 35 - 13
target_chains/cosmwasm/contracts/pyth/src/contract.rs

@@ -1155,7 +1155,8 @@ mod test {
         let feed1 = create_dummy_price_feed_message(100);
         let feed2 = create_dummy_price_feed_message(200);
         let feed3 = create_dummy_price_feed_message(300);
-        let data = create_accumulator_message(&[&feed1, &feed2, &feed3], &[&feed1], false, false);
+        let data =
+            create_accumulator_message(&[&feed1, &feed2, &feed3], &[&feed1], false, false, None);
         check_sufficient_fee(&deps.as_ref(), &[data.into()])
     }
 
@@ -1246,14 +1247,20 @@ mod test {
         let feed2 = create_dummy_price_feed_message(200);
         let feed3 = create_dummy_price_feed_message(300);
 
-        let msg =
-            create_accumulator_message(&[&feed1, &feed2, &feed3], &[&feed1, &feed3], false, false);
+        let msg = create_accumulator_message(
+            &[&feed1, &feed2, &feed3],
+            &[&feed1, &feed3],
+            false,
+            false,
+            None,
+        );
         assert_eq!(
             get_update_fee_amount(&deps.as_ref(), &[msg.into()]).unwrap(),
             200
         );
 
-        let msg = create_accumulator_message(&[&feed1, &feed2, &feed3], &[&feed1], false, false);
+        let msg =
+            create_accumulator_message(&[&feed1, &feed2, &feed3], &[&feed1], false, false, None);
         assert_eq!(
             get_update_fee_amount(&deps.as_ref(), &[msg.into()]).unwrap(),
             100
@@ -1264,6 +1271,7 @@ mod test {
             &[&feed1, &feed2, &feed3, &feed1, &feed3],
             false,
             false,
+            None,
         );
         assert_eq!(
             get_update_fee_amount(&deps.as_ref(), &[msg.into()]).unwrap(),
@@ -1277,6 +1285,7 @@ mod test {
             &[&feed1, &feed2, &feed3],
             false,
             false,
+            None,
         );
         assert_eq!(
             get_update_fee_amount(&deps.as_ref(), &[msg.into(), batch_msg]).unwrap(),
@@ -1294,7 +1303,7 @@ mod test {
 
         let feed1 = create_dummy_price_feed_message(100);
         let feed2 = create_dummy_price_feed_message(200);
-        let msg = create_accumulator_message(&[&feed1, &feed2], &[&feed1], false, false);
+        let msg = create_accumulator_message(&[&feed1, &feed2], &[&feed1], false, false, None);
         let info = mock_info("123", &[]);
         let result = update_price_feeds(deps.as_mut(), env, info, &[msg.into()]);
         assert!(result.is_ok());
@@ -1312,7 +1321,7 @@ mod test {
             all_feeds.push(create_dummy_price_feed_message(i));
         }
         let all_feeds: Vec<&Message> = all_feeds.iter().collect();
-        let msg = create_accumulator_message(&all_feeds, &all_feeds[100..110], false, false);
+        let msg = create_accumulator_message(&all_feeds, &all_feeds[100..110], false, false, None);
         let info = mock_info("123", &[]);
         let result = update_price_feeds(deps.as_mut(), env, info, &[msg.into()]);
         assert!(result.is_ok());
@@ -1344,6 +1353,7 @@ mod test {
             &[&feed1, &feed2, &feed3],
             false,
             false,
+            None,
         );
         as_mut_price_feed(&mut feed1).publish_time += 1;
         as_mut_price_feed(&mut feed2).publish_time += 1;
@@ -1356,6 +1366,7 @@ mod test {
             &[&feed1, &feed2, &feed3],
             false,
             false,
+            None,
         );
         let info = mock_info("123", &[]);
         let result = update_price_feeds(deps.as_mut(), env, info, &[msg.into(), msg2.into()]);
@@ -1382,6 +1393,7 @@ mod test {
             &[&feed1, &feed2, &feed3],
             false,
             false,
+            None,
         );
         let info = mock_info("123", &[]);
         let result = update_price_feeds(deps.as_mut(), env, info, &[msg.into()]);
@@ -1402,11 +1414,21 @@ mod test {
         let feed3 = create_dummy_price_feed_message(300);
         as_mut_price_feed(&mut feed2).publish_time -= 1;
         as_mut_price_feed(&mut feed2).price *= 2;
-        let msg =
-            create_accumulator_message(&[&feed1, &feed2, &feed3], &[&feed1, &feed3], false, false);
+        let msg = create_accumulator_message(
+            &[&feed1, &feed2, &feed3],
+            &[&feed1, &feed3],
+            false,
+            false,
+            None,
+        );
 
-        let msg2 =
-            create_accumulator_message(&[&feed1, &feed2, &feed3], &[&feed2, &feed3], false, false);
+        let msg2 = create_accumulator_message(
+            &[&feed1, &feed2, &feed3],
+            &[&feed2, &feed3],
+            false,
+            false,
+            None,
+        );
         let info = mock_info("123", &[]);
         let result = update_price_feeds(deps.as_mut(), env, info, &[msg.into(), msg2.into()]);
 
@@ -1423,7 +1445,7 @@ mod test {
             .unwrap();
 
         let feed1 = create_dummy_price_feed_message(100);
-        let mut msg = create_accumulator_message(&[&feed1], &[&feed1], false, false);
+        let mut msg = create_accumulator_message(&[&feed1], &[&feed1], false, false, None);
         msg[4] = 3; // major version
         let info = mock_info("123", &[]);
         let result = update_price_feeds(deps.as_mut(), env, info, &[msg.into()]);
@@ -1442,7 +1464,7 @@ mod test {
             .unwrap();
 
         let feed1 = create_dummy_price_feed_message(100);
-        let msg = create_accumulator_message(&[&feed1], &[&feed1], true, false);
+        let msg = create_accumulator_message(&[&feed1], &[&feed1], true, false, None);
         let info = mock_info("123", &[]);
         let result = update_price_feeds(deps.as_mut(), env, info, &[msg.into()]);
         assert!(result.is_err());
@@ -1470,7 +1492,7 @@ mod test {
             prev_publish_time: 0,
             publish_slot:      0,
         });
-        let msg = create_accumulator_message(&[&feed1], &[&feed1], false, false);
+        let msg = create_accumulator_message(&[&feed1], &[&feed1], false, false, None);
         let info = mock_info("123", &[]);
         let result = update_price_feeds(deps.as_mut(), env, info, &[msg.into()]);
         assert!(result.is_err());

+ 1 - 1
target_chains/near/receiver/tests/workspaces.rs

@@ -910,7 +910,7 @@ async fn test_accumulator_updates() {
     // Create a couple of test feeds.
     let feed_1 = create_dummy_price_feed_message(100);
     let feed_2 = create_dummy_price_feed_message(200);
-    let message = create_accumulator_message(&[&feed_1, &feed_2], &[&feed_1], false, false);
+    let message = create_accumulator_message(&[&feed_1, &feed_2], &[&feed_1], false, false, None);
     let message = hex::encode(message);
 
     // Call the usual UpdatePriceFeed function.

+ 1 - 2
target_chains/solana/Cargo.lock

@@ -3117,7 +3117,7 @@ dependencies = [
 
 [[package]]
 name = "pythnet-sdk"
-version = "2.1.0"
+version = "2.3.0"
 dependencies = [
  "anchor-lang",
  "bincode",
@@ -3127,7 +3127,6 @@ dependencies = [
  "fast-math",
  "hex",
  "libsecp256k1 0.7.1",
- "proc-macro2 1.0.79",
  "rand 0.8.5",
  "rustc_version",
  "serde",

+ 1 - 0
target_chains/solana/programs/pyth-push-oracle/tests/test_update_price_feed.rs

@@ -51,6 +51,7 @@ async fn test_update_price_feed() {
         &[&feed_1_old, &feed_1_recent, &feed_2],
         false,
         false,
+        None,
     );
     let (vaa, merkle_price_updates) = deserialize_accumulator_update_data(message).unwrap();
 

+ 6 - 3
target_chains/solana/programs/pyth-solana-receiver/tests/test_post_price_update_from_vaa.rs

@@ -55,7 +55,8 @@ async fn test_invalid_wormhole_message() {
     let feed_1 = create_dummy_price_feed_message(100);
     let feed_2 = create_dummy_price_feed_message(200);
 
-    let message = create_accumulator_message(&[&feed_1, &feed_2], &[&feed_1, &feed_2], true, false);
+    let message =
+        create_accumulator_message(&[&feed_1, &feed_2], &[&feed_1, &feed_2], true, false, None);
     let (vaa, merkle_price_updates) = deserialize_accumulator_update_data(message).unwrap();
 
     let ProgramTestFixtures {
@@ -100,7 +101,8 @@ async fn test_invalid_update_message() {
     let feed_1 = create_dummy_price_feed_message(100);
     let feed_2 = create_dummy_price_feed_message(200);
 
-    let message = create_accumulator_message(&[&feed_1, &feed_2], &[&feed_1, &feed_2], false, true);
+    let message =
+        create_accumulator_message(&[&feed_1, &feed_2], &[&feed_1, &feed_2], false, true, None);
     let (vaa, merkle_price_updates) = deserialize_accumulator_update_data(message).unwrap();
 
 
@@ -154,11 +156,12 @@ async fn test_post_price_update_from_vaa() {
         &[&feed_1, &feed_2, &twap_1],
         false,
         false,
+        None,
     );
 
     let (vaa, merkle_price_updates) = deserialize_accumulator_update_data(message).unwrap();
 
-    let message2 = create_accumulator_message(&[&feed_2, &feed_3], &[&feed_3], false, false);
+    let message2 = create_accumulator_message(&[&feed_2, &feed_3], &[&feed_3], false, false, None);
     let (_, merkle_price_updates2) = deserialize_accumulator_update_data(message2).unwrap();
 
     let ProgramTestFixtures {

+ 3 - 3
target_chains/solana/programs/pyth-solana-receiver/tests/test_post_updates.rs

@@ -43,7 +43,7 @@ async fn test_post_update() {
     let feed_1 = create_dummy_price_feed_message(100);
     let feed_2 = create_dummy_price_feed_message(200);
     let message =
-        create_accumulator_message(&[&feed_1, &feed_2], &[&feed_1, &feed_2], false, false);
+        create_accumulator_message(&[&feed_1, &feed_2], &[&feed_1, &feed_2], false, false, None);
     let (vaa, merkle_price_updates) = deserialize_accumulator_update_data(message).unwrap();
 
 
@@ -187,7 +187,7 @@ async fn test_post_update_wrong_encoded_vaa_owner() {
     let feed_1 = create_dummy_price_feed_message(100);
     let feed_2 = create_dummy_price_feed_message(200);
     let message =
-        create_accumulator_message(&[&feed_1, &feed_2], &[&feed_1, &feed_2], false, false);
+        create_accumulator_message(&[&feed_1, &feed_2], &[&feed_1, &feed_2], false, false, None);
     let (vaa, merkle_price_updates) = deserialize_accumulator_update_data(message).unwrap();
 
     let ProgramTestFixtures {
@@ -229,7 +229,7 @@ async fn test_post_update_wrong_setup() {
     let feed_1 = create_dummy_price_feed_message(100);
     let feed_2 = create_dummy_price_feed_message(200);
     let message =
-        create_accumulator_message(&[&feed_1, &feed_2], &[&feed_1, &feed_2], false, false);
+        create_accumulator_message(&[&feed_1, &feed_2], &[&feed_1, &feed_2], false, false, None);
     let (vaa, merkle_price_updates) = deserialize_accumulator_update_data(message).unwrap();
 
     let ProgramTestFixtures {

+ 3 - 3
target_chains/solana/programs/pyth-solana-receiver/tests/test_post_updates_atomic.rs

@@ -45,7 +45,7 @@ async fn test_post_update_atomic() {
     let feed_1 = create_dummy_price_feed_message(100);
     let feed_2 = create_dummy_price_feed_message(200);
     let message =
-        create_accumulator_message(&[&feed_1, &feed_2], &[&feed_1, &feed_2], false, false);
+        create_accumulator_message(&[&feed_1, &feed_2], &[&feed_1, &feed_2], false, false, None);
     let (vaa, merkle_price_updates) = deserialize_accumulator_update_data(message).unwrap();
     let vaa = serde_wormhole::to_vec(&trim_vaa_signatures(
         serde_wormhole::from_slice(&vaa).unwrap(),
@@ -211,7 +211,7 @@ async fn test_post_update_atomic_wrong_vaa() {
     let feed_1 = create_dummy_price_feed_message(100);
     let feed_2 = create_dummy_price_feed_message(200);
     let message =
-        create_accumulator_message(&[&feed_1, &feed_2], &[&feed_1, &feed_2], false, false);
+        create_accumulator_message(&[&feed_1, &feed_2], &[&feed_1, &feed_2], false, false, None);
     let (vaa, merkle_price_updates) = deserialize_accumulator_update_data(message).unwrap();
 
     let ProgramTestFixtures {
@@ -461,7 +461,7 @@ async fn test_post_update_atomic_wrong_setup() {
     let feed_1 = create_dummy_price_feed_message(100);
     let feed_2 = create_dummy_price_feed_message(200);
     let message =
-        create_accumulator_message(&[&feed_1, &feed_2], &[&feed_1, &feed_2], false, false);
+        create_accumulator_message(&[&feed_1, &feed_2], &[&feed_1, &feed_2], false, false, None);
     let (vaa, merkle_price_updates) = deserialize_accumulator_update_data(message).unwrap();
     let price_update_keypair = Keypair::new();