upgrade_contract.rs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. mod helpers;
  2. use cosmwasm_schema::cw_serde;
  3. use cosmwasm_std::{
  4. to_binary, Binary, Deps, DepsMut, Empty, Env, Event, MessageInfo, Response, StdResult,
  5. };
  6. use cw_multi_test::ContractWrapper;
  7. use global_accountant::msg::Upgrade;
  8. use helpers::*;
  9. use wormhole_bindings::WormholeQuery;
  10. pub fn instantiate(
  11. _deps: DepsMut,
  12. _env: Env,
  13. _info: MessageInfo,
  14. _msg: Empty,
  15. ) -> StdResult<Response> {
  16. Ok(Response::default())
  17. }
  18. pub fn migrate(_deps: DepsMut<WormholeQuery>, _env: Env, _msg: Empty) -> StdResult<Response> {
  19. Ok(Response::default().add_event(Event::new("migrate-success")))
  20. }
  21. pub fn execute(_deps: DepsMut, _env: Env, _info: MessageInfo, _msg: Empty) -> StdResult<Response> {
  22. Ok(Response::default())
  23. }
  24. #[cw_serde]
  25. struct NewContract;
  26. pub fn query(_deps: Deps, _env: Env, _msg: Empty) -> StdResult<Binary> {
  27. to_binary(&NewContract)
  28. }
  29. #[test]
  30. fn upgrade() {
  31. let (wh, mut contract) = proper_instantiate();
  32. let new_code_id = contract.app_mut().store_code(Box::new(
  33. ContractWrapper::new_with_empty(execute, instantiate, query).with_migrate_empty(migrate),
  34. ));
  35. let mut new_addr = [0u8; 32];
  36. new_addr[24..].copy_from_slice(&new_code_id.to_be_bytes());
  37. let upgrade = to_binary(&Upgrade { new_addr }).unwrap();
  38. let signatures = wh.sign(&upgrade);
  39. let resp = contract
  40. .upgrade_contract(upgrade, wh.guardian_set_index(), signatures)
  41. .unwrap();
  42. resp.assert_event(&Event::new("wasm-migrate-success"));
  43. contract
  44. .app()
  45. .wrap()
  46. .query_wasm_smart::<NewContract>(contract.addr(), &Empty {})
  47. .unwrap();
  48. }