deploy_pyth.rs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. use fuels::{
  2. prelude::{Address, Provider, WalletUnlocked},
  3. types::Bits256,
  4. };
  5. use pyth_sdk::{constants::BETA_5_URL, pyth_utils::guardian_set_upgrade_4_vaa};
  6. use pyth_sdk::{
  7. constants::{
  8. BTC_USD_PRICE_FEED_ID, DEFAULT_VALID_TIME_PERIOD, ETH_USD_PRICE_FEED_ID,
  9. USDC_USD_PRICE_FEED_ID,
  10. },
  11. pyth_utils::{update_data_bytes, Pyth},
  12. };
  13. #[tokio::main]
  14. async fn main() {
  15. dotenv::dotenv().ok();
  16. println!("🔮 Testnet Pyth deploy action");
  17. let provider = Provider::connect(BETA_5_URL).await.unwrap();
  18. let admin_pk = std::env::var("ADMIN").expect("ADMIN environment variable missing");
  19. let admin =
  20. WalletUnlocked::new_from_private_key(admin_pk.parse().unwrap(), Some(provider.clone()));
  21. println!("Admin address = 0x{}\n", Address::from(admin.address()));
  22. let pyth = Pyth::deploy(admin).await.unwrap();
  23. let _ = pyth
  24. .constructor(DEFAULT_VALID_TIME_PERIOD, guardian_set_upgrade_4_vaa())
  25. .await
  26. .unwrap();
  27. //check GS
  28. let gsi = pyth.current_guardian_set_index().await.unwrap().value;
  29. println!("gsi: {:?}", gsi);
  30. let update_data = update_data_bytes(None).await.unwrap();
  31. let fee = pyth.update_fee(&update_data).await.unwrap().value;
  32. //print fee
  33. println!("fee: {:?}", fee);
  34. let btc_price_feed = Bits256::from_hex_str(BTC_USD_PRICE_FEED_ID).unwrap();
  35. let eth_price_feed = Bits256::from_hex_str(ETH_USD_PRICE_FEED_ID).unwrap();
  36. let usdc_price_feed = Bits256::from_hex_str(USDC_USD_PRICE_FEED_ID).unwrap();
  37. let _ = pyth.update_price_feeds(fee, &update_data).await.unwrap();
  38. println!("Pyth address = 0x{:?}\n", pyth.instance.contract_id().hash);
  39. println!(
  40. "BTC price {:?}",
  41. pyth.price(btc_price_feed).await.unwrap().value
  42. );
  43. println!(
  44. "ETH price {:?}",
  45. pyth.price(eth_price_feed).await.unwrap().value
  46. );
  47. println!(
  48. "USDC price {:?}",
  49. pyth.price(usdc_price_feed).await.unwrap().value
  50. );
  51. }