deploy_pyth.rs 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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_addresses};
  6. use pyth_sdk::{
  7. constants::{
  8. BTC_USD_PRICE_FEED_ID, DEFAULT_VALID_TIME_PERIOD, DUMMY_CHAIN_ID, ETH_USD_PRICE_FEED_ID,
  9. USDC_USD_PRICE_FEED_ID,
  10. },
  11. pyth_utils::{update_data_bytes, DataSource, 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 governance_data_source: DataSource = DataSource {
  24. chain_id: 1,
  25. emitter_address: Bits256::from_hex_str(
  26. "5635979a221c34931e32620b9293a463065555ea71fe97cd6237ade875b12e9e",
  27. )
  28. .unwrap(),
  29. };
  30. let wormhole_governance_data_source: DataSource = DataSource {
  31. chain_id: 1,
  32. emitter_address: Bits256([
  33. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  34. 0, 0, 4,
  35. ]),
  36. };
  37. let _ = pyth
  38. .constructor(
  39. governance_data_source,
  40. wormhole_governance_data_source,
  41. DEFAULT_VALID_TIME_PERIOD,
  42. guardian_set_upgrade_4_addresses(),
  43. 4,
  44. DUMMY_CHAIN_ID,
  45. )
  46. .await
  47. .unwrap();
  48. //check GS
  49. let gsi = pyth.current_guardian_set_index().await.unwrap().value;
  50. println!("gsi: {:?}", gsi);
  51. let update_data = update_data_bytes(None).await.unwrap();
  52. let fee = pyth.update_fee(&update_data).await.unwrap().value;
  53. //print fee
  54. println!("fee: {:?}", fee);
  55. let btc_price_feed = Bits256::from_hex_str(BTC_USD_PRICE_FEED_ID).unwrap();
  56. let eth_price_feed = Bits256::from_hex_str(ETH_USD_PRICE_FEED_ID).unwrap();
  57. let usdc_price_feed = Bits256::from_hex_str(USDC_USD_PRICE_FEED_ID).unwrap();
  58. let _ = pyth.update_price_feeds(fee, &update_data).await.unwrap();
  59. println!("Pyth address = 0x{:?}\n", pyth.instance.contract_id().hash);
  60. println!(
  61. "BTC price {:?}",
  62. pyth.price(btc_price_feed).await.unwrap().value
  63. );
  64. println!(
  65. "ETH price {:?}",
  66. pyth.price(eth_price_feed).await.unwrap().value
  67. );
  68. println!(
  69. "USDC price {:?}",
  70. pyth.price(usdc_price_feed).await.unwrap().value
  71. );
  72. }