1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
use std::path::PathBuf;
use casper_types::{
account::AccountHash, bytesrepr::FromBytes, CLTyped, ContractHash, RuntimeArgs,
};
use crate::{utils::DeploySource, TestEnv};
pub struct TestContract {
env: TestEnv,
name: String,
contract_owner: AccountHash,
}
impl TestContract {
pub fn new(
env: &TestEnv,
wasm: &str,
name: &str,
sender: AccountHash,
mut args: RuntimeArgs,
time: u64,
) -> TestContract {
let session_code = PathBuf::from(wasm);
args.insert("contract_name", name).unwrap();
env.run(sender, DeploySource::Code(session_code), args, time);
TestContract {
env: env.clone(),
name: String::from(name),
contract_owner: sender,
}
}
pub fn query_dictionary<T: CLTyped + FromBytes>(
&self,
dict_name: &str,
key: String,
) -> Option<T> {
self.env
.query_dictionary(self.contract_hash(), dict_name, key)
}
pub fn query_named_key<T: CLTyped + FromBytes>(&self, key: String) -> T {
let contract_name = format!("{}_contract_hash", self.name);
self.env
.query_account_named_key(self.contract_owner, &[contract_name, key])
}
pub fn contract_hash(&self) -> [u8; 32] {
let key = format!("{}_contract_hash_wrapped", self.name);
self.env
.query_account_named_key(self.contract_owner, &[key])
}
pub fn package_hash(&self) -> [u8; 32] {
let key = format!("{}_package_hash_wrapped", self.name);
self.env
.query_account_named_key(self.contract_owner, &[key])
}
pub fn call_contract(
&self,
sender: AccountHash,
entry_point: &str,
session_args: RuntimeArgs,
time: u64,
) {
let session_code = DeploySource::ByContractHash {
hash: ContractHash::new(self.contract_hash()),
method: entry_point.to_string(),
};
self.env.run(sender, session_code, session_args, time);
}
}