forked from Zilliqa/zilliqa-js
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathqueryState.js
More file actions
87 lines (73 loc) · 2.96 KB
/
queryState.js
File metadata and controls
87 lines (73 loc) · 2.96 KB
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
75
76
77
78
79
80
81
82
83
84
85
86
87
// Copyright (C) 2018 Zilliqa
//
// This file is part of Zilliqa-Javascript-Library.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
/**
* Demo Query State : Short example to illustrate how to get contract state from
* a deployed token.
*/
const { Zilliqa } = require('@zilliqa-js/zilliqa');
const zilliqa = new Zilliqa('https://dev-api.zilliqa.com');
// Standard fungible token deployed on devnet
const tokenContract = '5938fc8af82250ad6cf1da3bb92f4aa005cb2717';
async function test() {
/**
* initialising contract class. Contract class is a convenient way for you to use
* repeatedly call contracts and make queries from.
*
* There's two types of "data" in scilla. Mutable fields (available through getState)
* and immutable fields (cannot be changed once deployed, available through getInit)
*/
const contract = zilliqa.contracts.at(tokenContract);
const allState = await contract.getState();
console.log(`Getting the entire contract state`);
console.log(allState);
const initState = await contract.getInit();
console.log(`Getting the contract init (immutable variables)`);
console.log(initState);
console.log(`\n\nGetting a particular field in the contract`);
const state2 = await contract.getSubState('_balance');
console.log(state2);
console.log(`\n\nGetting a particular entry in a map`);
const state3 = await contract.getSubState('balances', [
'0x381f4008505e940ad7681ec3468a719060caf796',
]);
console.log(state3);
/**
* Don't want to initialise a class as you are just making an adhoc query? Try this.
*/
console.log(
`\n\nYou can also get state / substate directly without using the Contract class.`,
);
const state4 = await zilliqa.blockchain.getSmartContractSubState(
'0x5938fc8af82250ad6cf1da3bb92f4aa005cb2717',
'balances',
['0x381f4008505e940ad7681ec3468a719060caf796'],
);
console.log(state4.result);
console.log(
`\n\nGet substate using batch api.`,
);
const req1 = ["5938fc8af82250ad6cf1da3bb92f4aa005cb2717","balances",['0x381f4008505e940ad7681ec3468a719060caf796']]
const req2 = ["5938fc8af82250ad6cf1da3bb92f4aa005cb2717","balances",['0xa476fcedc061797fa2a6f80bd9e020a056904298']]
const state5 = await zilliqa.blockchain.getSmartContractSubStateBatch(
[
req1,req2
]
);
const batchResult = JSON.stringify(state5.batch_result);
console.log(batchResult);
}
test();