Quellcode durchsuchen

Make p2w-sdk js use p2w-sdk rust wasm bindings (#65)

* Make p2w-sdk js use p2w-sdk rust wasm bindings (instead of solana contract bindings)
- Removes `wasm.rs` in solana contract too.
Ali Behjati vor 3 Jahren
Ursprung
Commit
643ab162d1

+ 6 - 5
Dockerfile.wasm

@@ -14,6 +14,7 @@ ENV EMITTER_ADDRESS="11111111111111111111111111111115"
 ENV BRIDGE_ADDRESS="Bridge1p5gheXUvJ6jGWGeCsgPKgnE3YgdGKRVCMY9o"
 
 COPY solana solana
+COPY third_party third_party
 
 # wasm-bindgen 0.2.74 generates JavaScript bindings for SystemInstruction exported from solana-program 1.9.4.
 # The generated JavaScript references a non-existent function (wasm.__wbg_systeminstruction_free) that leads
@@ -65,13 +66,13 @@ RUN --mount=type=cache,target=/root/.cache \
 
 # Compile pyth2wormhole
 RUN --mount=type=cache,target=/root/.cache \
-	--mount=type=cache,target=solana/pyth2wormhole/target \
-    cd solana/pyth2wormhole/program \
+	--mount=type=cache,target=third_party/pyth/p2w-sdk/rust/target \
+    cd third_party/pyth/p2w-sdk/rust \
     && /usr/local/cargo/bin/wasm-pack build --target bundler -d bundler -- --features wasm --locked
 
 RUN --mount=type=cache,target=/root/.cache \
-	--mount=type=cache,target=solana/pyth2wormhole/target \
-    cd solana/pyth2wormhole/program \
+	--mount=type=cache,target=third_party/pyth/p2w-sdk/rust/target \
+    cd third_party/pyth/p2w-sdk/rust \
     && /usr/local/cargo/bin/wasm-pack build --target nodejs -d nodejs -- --features wasm --locked
 
 FROM scratch AS export
@@ -81,7 +82,7 @@ COPY --from=build /usr/src/bridge/solana/modules/token_bridge/program/bundler sd
 COPY --from=build /usr/src/bridge/solana/migration/bundler sdk/js/src/solana/migration
 COPY --from=build /usr/src/bridge/solana/modules/nft_bridge/program/bundler sdk/js/src/solana/nft
 
-COPY --from=build /usr/src/bridge/solana/pyth2wormhole/program/bundler third_party/pyth/p2w-sdk/js/src/solana/p2w-core
+COPY --from=build /usr/src/bridge/third_party/pyth/p2w-sdk/rust/bundler third_party/pyth/p2w-sdk/js/src/solana/p2w-core
 COPY --from=build /usr/src/bridge/solana/bridge/program/bundler third_party/pyth/p2w-sdk/js/src/solana/wormhole-core
 
 COPY --from=build /usr/src/bridge/solana/bridge/program/nodejs sdk/js/src/solana/core-node

+ 0 - 3
solana/pyth2wormhole/Cargo.lock

@@ -1772,7 +1772,6 @@ dependencies = [
  "solana-program",
  "solitaire",
  "solitaire-client",
- "wasm-bindgen",
  "wormhole-bridge-solana",
 ]
 
@@ -3390,8 +3389,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "632f73e236b219150ea279196e54e610f5dbafa5d61786303d4da54f84e47fce"
 dependencies = [
  "cfg-if",
- "serde",
- "serde_json",
  "wasm-bindgen-macro",
 ]
 

+ 0 - 3
solana/pyth2wormhole/program/Cargo.toml

@@ -13,7 +13,6 @@ default = ["wormhole-bridge-solana/no-entrypoint"]
 client = ["solitaire/client", "solitaire-client", "no-entrypoint"]
 trace = ["solitaire/trace", "wormhole-bridge-solana/trace"]
 no-entrypoint = []
-wasm = ["no-entrypoint", "wasm-bindgen", "serde", "serde_derive", "serde_json"]
 
 [dependencies]
 wormhole-bridge-solana = {path = "../../bridge/program"}
@@ -23,8 +22,6 @@ rocksalt = { path = "../../solitaire/rocksalt" }
 solana-program = "=1.9.4"
 borsh = "=0.9.1"
 pyth-client = "0.2.2"
-# Crates needed for easier wasm data passing
-wasm-bindgen = { version = "0.2.74", features = ["serde-serialize"], optional = true}
 serde = { version = "1", optional = true}
 serde_derive = { version = "1", optional = true}
 serde_json = { version = "1", optional = true}

+ 0 - 32
solana/pyth2wormhole/program/src/wasm.rs

@@ -1,32 +0,0 @@
-use solana_program::pubkey::Pubkey;
-use solitaire::Seeded;
-use wasm_bindgen::prelude::*;
-
-use std::str::FromStr;
-
-use crate::{
-    attest::P2WEmitter,
-    types,
-};
-
-#[wasm_bindgen]
-pub fn get_emitter_address(program_id: String) -> Vec<u8> {
-    let program_id = Pubkey::from_str(program_id.as_str()).unwrap();
-    let emitter = P2WEmitter::key(None, &program_id);
-
-    emitter.to_bytes().to_vec()
-}
-
-#[wasm_bindgen]
-pub fn parse_attestation(bytes: Vec<u8>) -> JsValue {
-    let a = types::PriceAttestation::deserialize(bytes.as_slice()).unwrap();
-
-    JsValue::from_serde(&a).unwrap()
-}
-
-#[wasm_bindgen]
-pub fn parse_batch_attestation(bytes: Vec<u8>) -> JsValue {
-    let a = types::batch_deserialize(bytes.as_slice()).unwrap();
-
-    JsValue::from_serde(&a).unwrap()
-}

+ 1 - 1
third_party/pyth/p2w-relay/src/index.ts

@@ -146,7 +146,7 @@ async function readinessProbeRoutine(port: number) {
 
 	    let parsedAttestations = await parseBatchAttestation(parsedVaa.payload);
 
-	    console.log(`[seqno ${poolEntry}] Parsed ${parsedAttestations.length} price attestations:\n`, parsedAttestations);
+	    console.log(`[seqno ${poolEntry}] Parsed ${parsedAttestations.price_attestations.length} price attestations:\n`, parsedAttestations);
 
 	    // try {
 	    // 	let tx = await p2w_eth.attestPrice(vaaResponse.vaaBytes, {gasLimit: 1000000});

+ 1 - 1
third_party/pyth/p2w-sdk/js/src/index.ts

@@ -8,7 +8,7 @@ var P2W_INSTANCE: any = undefined;
 export async function p2w_core(): Promise<any> {
     // Only import once if P2W wasm is needed
     if (!P2W_INSTANCE) {
-	P2W_INSTANCE = await import("./solana/p2w-core/pyth2wormhole");
+	P2W_INSTANCE = await import("./solana/p2w-core/p2w_sdk");
     }
     return P2W_INSTANCE;
 }