near_self_update/
lib.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
use near_workspaces::types::NearToken;
use nitka::{json, ContractCall};

pub trait HasContract {
    fn contract(&self) -> &near_workspaces::Contract;
}

pub trait UpdateApiIntegration: HasContract {
    fn update_contract(&self, code: Vec<u8>, callback: Option<String>) -> ContractCall<()> {
        ContractCall::new("update_contract", self.contract().clone())
            .args_json(json!({
                "code": code,
                "callback": callback
            }))
            .unwrap()
            .deposit(NearToken::from_yoctonear(1))
    }

    fn contract_version(&self) -> ContractCall<String> {
        ContractCall::new("contract_version", self.contract().clone())
    }
}

impl<T: HasContract> UpdateApiIntegration for T {}