set_data_sources.move 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. module pyth::set_data_sources {
  2. use wormhole::cursor;
  3. use pyth::deserialize;
  4. use wormhole::external_address::{Self};
  5. use pyth::data_source::{Self, DataSource};
  6. use pyth::state;
  7. use std::vector;
  8. friend pyth::governance;
  9. struct SetDataSources {
  10. sources: vector<DataSource>,
  11. }
  12. public(friend) fun execute(payload: vector<u8>) {
  13. let SetDataSources { sources } = from_byte_vec(payload);
  14. state::set_data_sources(sources);
  15. }
  16. fun from_byte_vec(bytes: vector<u8>): SetDataSources {
  17. let cursor = cursor::init(bytes);
  18. let data_sources_count = deserialize::deserialize_u8(&mut cursor);
  19. let sources = vector::empty();
  20. let i = 0;
  21. while (i < data_sources_count) {
  22. let emitter_chain_id = deserialize::deserialize_u16(&mut cursor);
  23. let emitter_address = external_address::from_bytes(deserialize::deserialize_vector(&mut cursor, 32));
  24. vector::push_back(&mut sources, data_source::new(emitter_chain_id, emitter_address));
  25. i = i + 1;
  26. };
  27. cursor::destroy_empty(cursor);
  28. SetDataSources {
  29. sources
  30. }
  31. }
  32. }