Ver Fonte

init_pyth.ts, registry.ts, create_price_feed.ts

optke3 há 2 anos atrás
pai
commit
74de7c6beb

+ 1 - 0
.gitignore

@@ -17,3 +17,4 @@ tsconfig.tsbuildinfo
 *~
 *mnemonic*
 .envrc
+*/*.sui.log*

+ 21 - 13
target_chains/sui/scripts/create_price_feed.ts

@@ -13,25 +13,29 @@ import {
   Connection,
 } from "@mysten/sui.js";
 
+dotenv.config({"path":"~/.env"})
+
 import {REGISTRY, NETWORK} from "./registry"
 
-const registry = REGISTRY["DEVNET"]
+let network = NETWORK.DEVNET
+const registry = REGISTRY[network]
 const provider = new JsonRpcProvider(new Connection({ fullnode: registry["RPC_URL"] }))
-dotenv.config({"path":"~/.env"})
+const walletPrivateKey = process.env.SUI_DEVNET;
 
 async function main() {
-    const walletPrivateKey = process.env.SUI_DEVNET;
     if (walletPrivateKey === undefined) {
       throw new Error("SUI_DEVNET unset in environment");
     }
-
     const wallet = new RawSigner(
         Ed25519Keypair.fromSecretKey(
-         Buffer.from(walletPrivateKey, "base64").subarray(1)
+            network == "MAINNET" ?
+            Buffer.from(walletPrivateKey, "hex")
+                :
+            Buffer.from(walletPrivateKey, "base64").subarray(1)
         ),
-     provider
+        provider
     );
-
+    console.log(wallet.getAddress())
     const vaa_bytes = "AQAAAAABAMN885gNTVEako6fczJq22AOFSRWdUsUOxPQVHSnxhj3ecU2gJVDBlAcY6G9FWmGCcGcdZ/5iVXQCm+0loHvfqwAZE/kXQAAAAAAGqJ4OdZBsHdDwMtfaMUfjNMdLAdivsANxvzSVDPvGrW2AAAAAADugxEBUDJXSAADAAEAAQIABQCdWnl7akEQMaEEfYaw/fhuJFW+jn/vFq7yPbIJcj2vlB9hIm05vuoZ0zTxfC/rzifhJkbYRnWSTrsCuc2upocn4wAAAABBxD4gAAAAAAAJ2WD////4AAAAAEIrzm4AAAAAAAn/ewEAAAABAAAAAgAAAABkT+RdAAAAAGRP5F0AAAAAZE/kXAAAAABBxC0/AAAAAAAJi/EAAAAAZE/kXLWIXWbTUV6YNI7DMlk7XRbg/bhT77Ye1dzAvPgOkWCB11ZqO6f3KG7VT0rn6YP0QgrgseDziS4R+cSrEHu617kAAAAAZCplIAAAAAAAEu4I////+AAAAABkvzOKAAAAAAAQZDgBAAAAAQAAAAIAAAAAZE/kXQAAAABkT+RdAAAAAGRP5FwAAAAAZCplIAAAAAAAFIotAAAAAGRP5Fw3+21L/xkSgKfP+Av17aeofBUakdmoW6So+OLPlX5BjbMn2c8OzXk6F1+nCsjS3BCdRGJ1jlVpYsSoewLsTz8VAAAAAC1gXb0AAAAAAAdkLv////gAAAAALZa00gAAAAAABpwgAQAAAAEAAAACAAAAAGRP5F0AAAAAZE/kXQAAAABkT+RcAAAAAC1gXb0AAAAAAAdkLgAAAABkT+RcHNsaXh40VtKXfuDT1wdlI58IpChVuVCP1HnhXG3E0f7s9VN3DZsQll+Ptkdx6T9WkKGC7cMr5KMjbgyqpuBYGgAAAAewLri2AAAAAAEnq0n////4AAAAB7uEHmgAAAAAAV8hnAEAAAABAAAAAgAAAABkT+RdAAAAAGRP5F0AAAAAZE/kXAAAAAewBz2PAAAAAAE4kisAAAAAZE/kXGogZxwOP4yyGc4/RuWuCWpPL9+TbSvU2okl9wCH1R3YMAKUeVmHlykONjihcSwpveI2fQ7KeU93iyW1pHLxkt4AAAACtJQuKQAAAAAAn4lX////+AAAAAK3aIHUAAAAAACmrg4BAAAAAQAAAAIAAAAAZE/kXQAAAABkT+RdAAAAAGRP5FwAAAACtJOhZQAAAAAAnAlPAAAAAGRP5Fw=";
     create_price_feeds(wallet, registry, vaa_bytes)
 }
@@ -45,17 +49,21 @@ async function create_price_feeds(
 ) {
     const tx = new TransactionBlock();
 
-    let PYTH_PACKAGE = registry["PYTH_PACKAGE"]
-    let PYTH_STATE = registry["PYTH_STATE"]
-    let WORM_PACKAGE = registry["WORM_PACKAGE"]
-    let WORM_STATE = registry["WORM_STATE"]
+    let PYTH_PACKAGE = registry["PYTH_PACKAGE_ID"]
+    let PYTH_STATE = registry["PYTH_STATE_ID"]
+    let WORM_PACKAGE = registry["WORMHOLE_PACKAGE_ID"]
+    let WORM_STATE = registry["WORMHOLE_STATE_ID"]
+    console.log("PYTH_PACKAGE: ", PYTH_PACKAGE)
+    console.log("PYTH_STATE: ", PYTH_STATE)
+    console.log("WORM_PACKAGE: ", WORM_PACKAGE)
+    console.log("WORM_STATE: ", WORM_STATE)
 
     let [verified_vaa] = tx.moveCall({
         target: `${WORM_PACKAGE}::vaa::parse_and_verify`,
         arguments: [
           tx.object(WORM_STATE),
-          tx.pure(vaa_bytes),
-          tx.object(SUI_CLOCK_OBJECT_ID), // the clock
+          tx.pure([...Buffer.from(vaa_bytes, "hex")]),
+          tx.object(SUI_CLOCK_OBJECT_ID),
         ],
     });
 

+ 2 - 1
target_chains/sui/scripts/get_price_feed_vaas.ts

@@ -1,3 +1,5 @@
+/// Fetch price feed VAAs of interest from the Pyth
+/// price feed service.
 import { PriceServiceConnection } from '@pythnetwork/price-service-client';
 import { Buffer } from 'buffer';
 async function main(){
@@ -23,4 +25,3 @@ async function main(){
 }
 
 main();
-

+ 20 - 15
target_chains/sui/scripts/init_pyth.ts

@@ -12,28 +12,34 @@ import {
   Connection,
 } from "@mysten/sui.js";
 
-const provider = new JsonRpcProvider(new Connection({ fullnode: "http://0.0.0.0:9000" }))
+import {REGISTRY, NETWORK, INITIAL_DATA_SOURCES} from "./registry"
 dotenv.config({"path":"~/.env"})
 
+let network = NETWORK.DEVNET
+const registry = REGISTRY[network]
+const initial_data_sources = INITIAL_DATA_SOURCES[network]
+const provider = new JsonRpcProvider(new Connection({ fullnode: registry["RPC_URL"]}))
+let walletPrivateKey = process.env.SUI_DEVNET; // <= Update this with the right private key
+
 async function main() {
-    const walletPrivateKey = process.env.SUI_DEVNET;
     if (walletPrivateKey === undefined) {
       throw new Error("SUI_DEVNET unset in environment");
     }
 
     const wallet = new RawSigner(
         Ed25519Keypair.fromSecretKey(
-         Buffer.from(walletPrivateKey, "base64").subarray(1)
+          Buffer.from(walletPrivateKey, "base64").subarray(1)
         ),
      provider
     );
 
-    // Note: set these before calling init_pyth
-    const pythPackage = "0xb94d0d4a7ce7934e6bae2e430d5d7d5ba58c25d229aa1338ad543f0445bdfc7f"
-    const deployerCap = "0x80bbb9430366fcd6d8b22769988612e202055f12787cc2abdafed5e51f78f756"
-    const upgradeCap = "0xffdc98c07d8cd0d5327209153bd01fedb0b15862da99eb3a837931a44202d48b"
+    const PYTH_PACKAGE = registry["PYTH_PACKAGE_ID"]
+
+    // Note: Set these before calling init_pyth
+    const upgradeCap = "0x83d655518f83d791b9617d6ec5bd62c4ef369d08e0cfd737902b4ca8f2a4695d"
+    const deployerCap = "0x272d403533abb081e0fd1fd53c5a9c1526bb10e75f7f2b6154953bee7ebe5f55"
 
-    init_pyth(wallet, pythPackage, deployerCap, upgradeCap)
+    init_pyth(wallet, PYTH_PACKAGE, deployerCap, upgradeCap)
 }
 
 main();
@@ -48,18 +54,17 @@ async function init_pyth(
 ) {
 
     const tx = new TransactionBlock();
-
     tx.moveCall({
       target: `${pythPackage}::pyth::init_pyth`,
       arguments: [
         tx.object(deployerCap),
         tx.object(upgradeCap),
-        tx.pure(1000), // stale price threshold
-        tx.pure(121), // governance emitter chain id
-        tx.pure("3"), // governance emitter chain address
-        tx.pure([121]), // data source emitter chain ids
-        tx.pure(["3"]), // data source addresses
-        tx.pure(0), // base update fee
+        tx.pure(60), // stale price threshold
+        tx.pure(initial_data_sources["GOVERNANCE_CHAIN"]), // governance emitter chain id
+        tx.pure([...Buffer.from(initial_data_sources["GOVERNANCE_ADDRESS"], "hex")]), // governance emitter chain address
+        tx.pure(initial_data_sources["DATA_SOURCE_CHAINS"]), // data source emitter chain ids
+        tx.pure(initial_data_sources["DATA_SOURCE_ADDRESSES"].map( x => [...Buffer.from(x, "hex")])), // data source addresses
+        tx.pure(1), // base update fee
       ],
     });
 

+ 30 - 8
target_chains/sui/scripts/registry.ts

@@ -1,10 +1,16 @@
+export enum NETWORK {
+    DEVNET = "DEVNET",
+    TESTNET = "TESTNET",
+    MAINNET = "MAINNET",
+}
+
 export const REGISTRY =
 {
     DEVNET: {
-        "PYTH_PACKAGE_ID": "0x0",
-        "PYTH_STATE_ID": "0x0",
-        "WORMHOLE_PACKAGE_ID": "0x07aa529a7ab00007b9081f47728537d47d7fe0f3d7fded2c01fa34340ac7a71c",
-        "WORMHOLE_STATE_ID": "0x14cbf165349ad2934c8819f307e973c03d08ffe3a40548068298aeffa8a93bbf",
+        "PYTH_PACKAGE_ID": "0x65ff3e76bb70c3b081de7ebdbb8bc55f2072cdd1a9609a5406171f21c4f56e94",
+        "PYTH_STATE_ID": "0xcb00472afd998fe551d4a4e3d492ebdaf6bbb3d6aa083f46d40c48d15871b80f",
+        "WORMHOLE_PACKAGE_ID": "0x600c5bb1a273e44303f5853f83255ac3ca37f40c5696dde8584f1fd7f0449eb4",
+        "WORMHOLE_STATE_ID": "0x01e2adee6591782ff86d0594d1971561a9c5a9a77fab6b27f3f25d1be4f27f07",
         "RPC_URL": "http://0.0.0.0:9000"
     },
     TESTNET: {
@@ -23,8 +29,24 @@ export const REGISTRY =
     }
 }
 
-export enum NETWORK {
-    DEVNET = "DEVNET",
-    TESTNET = "TESTNET",
-    MAINNET = "MAINNET",
+export const INITIAL_DATA_SOURCES = {
+        // Devnet params are same as testnet.
+        DEVNET: {
+            GOVERNANCE_ADDRESS: "63278d271099bfd491951b3e648f08b1c71631e4a53674ad43e8f9f98068c385",
+            GOVERNANCE_CHAIN: 1,
+            DATA_SOURCE_ADDRESSES: ["f346195ac02f37d60d4db8ffa6ef74cb1be3550047543a4a9ee9acf4d78697b0", "a27839d641b07743c0cb5f68c51f8cd31d2c0762bec00dc6fcd25433ef1ab5b6"],
+            DATA_SOURCE_CHAINS: [1, 26]
+        },
+        TESTNET: {
+            GOVERNANCE_ADDRESS: "0x63278d271099bfd491951b3e648f08b1c71631e4a53674ad43e8f9f98068c385",
+            GOVERNANCE_CHAIN: 1,
+            DATA_SOURCE_ADDRESSES: ["0xf346195ac02f37d60d4db8ffa6ef74cb1be3550047543a4a9ee9acf4d78697b0", "0xa27839d641b07743c0cb5f68c51f8cd31d2c0762bec00dc6fcd25433ef1ab5b6"],
+            DATA_SOURCE_CHAINS: [1, 26]
+        },
+        MAINNET: {
+            GOVERNANCE_ADDRESS: "0x5635979a221c34931e32620b9293a463065555ea71fe97cd6237ade875b12e9e",
+            GOVERNANCE_CHAIN: 1,
+            DATA_SOURCE_ADDRESSES: ["0x6bb14509a612f01fbbc4cffeebd4bbfb492a86df717ebe92eb6df432a3f00a25", "0xf8cd23c2ab91237730770bbea08d61005cdda0984348f3f6eecb559638c0bba0"],
+            DATA_SOURCE_CHAINS: [1, 26]
+        }
 }