Esempio n. 1
0
def wasm_contract():
    return utils.compile_rust_contract('''
const N: u32 = 100;

metadata! {
    #[near_bindgen]
    #[derive(Default, BorshSerialize, BorshDeserialize)]
    pub struct LoadContract {}
}

#[near_bindgen]
impl LoadContract {
    pub fn do_work(&self) {
        // Do some pointless work.
        // In this case we bubble sort a reversed list.
        // Thus, this is O(N) in space and O(N^2) in time.
        let xs: Vec<u32> = (0..N).rev().collect();
        let _ = Self::bubble_sort(xs);
        env::log(b"Done.");
    }

    fn bubble_sort(mut xs: Vec<u32>) -> Vec<u32> {
        let n = xs.len();
        for i in 0..n {
            for j in 1..(n - i) {
                if xs[j - 1] > xs[j] {
                    let tmp = xs[j - 1];
                    xs[j - 1] = xs[j];
                    xs[j] = tmp;
                }
            }
        }
        xs
    }
}''')
status2 = nodes[1].get_status()
hash_2 = status2['sync_info']['latest_block_hash']
hash_2 = base58.b58decode(hash_2.encode('utf8'))
tx2 = sign_function_call_tx(nodes[0].signer_key,
                            nodes[0].signer_key.account_id, 'log_something',
                            [], 100000000000, 100000000000, 20, hash_2)
res = nodes[1].send_tx_and_wait(tx2, 20)
assert res['result']['receipts_outcome'][0]['outcome']['logs'][0] == 'hello'

wasm_file = compile_rust_contract('''
metadata! {
  #[near_bindgen]
  #[derive(Default, BorshDeserialize, BorshSerialize)]
  pub struct StatusMessage {}
}

#[near_bindgen]
impl StatusMessage {
  pub fn log_world(&self) {
    env::log(b"world");
  }
}
''')

status3 = nodes[2].get_status()
hash_3 = status3['sync_info']['latest_block_hash']
hash_3 = base58.b58decode(hash_3.encode('utf8'))
tx3 = sign_deploy_contract_tx(nodes[2].signer_key, load_binary_file(wasm_file),
                              10, hash_3)
res = nodes[3].send_tx(tx3)
time.sleep(3)