-
Notifications
You must be signed in to change notification settings - Fork 1
/
index.js
146 lines (129 loc) · 4.02 KB
/
index.js
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
// Imports
const {
deployIcon,
deployEvm,
isDeployed,
getDeployments,
saveDeployments,
voteYesFromIcon,
getTxResult,
filterCallMessageSentEvent,
parseCallMessageSentEvent,
filterCallMessageEventEvm,
waitEventEVM,
executeCallEvm,
filterCallExecutedEventEvm,
getVotesFromEVM
} = require("./lib");
/*
* Deploy script
*/
async function deploy() {
try {
const contracts = {
primary: null,
secondary: null
};
// deploying EVM contract
const evmContractAddress = await deployEvm();
console.log("\n# deployed EVM contract address:", evmContractAddress);
// deploying ICON contract
const iconContractAddress = await deployIcon(evmContractAddress);
console.log("\n# deployed ICON contract address:", iconContractAddress);
contracts.secondary = evmContractAddress;
contracts.primary = iconContractAddress;
return contracts;
} catch (e) {
console.log("error running deployments", e);
}
}
/*
* Tests
* @param {Object} contracts
* @param {string} contracts.primary - ICON contract address
* @param {string} contracts.secondary - EVM contract address
* @returns {Promise<void>}
*/
async function tests(contracts) {
try {
// vote yes from icon
const voteYesFromIconResult = await voteYesFromIcon(contracts.primary);
console.log("\n# vote yes from icon result:", voteYesFromIconResult);
// get tx result
const txResult = await getTxResult(voteYesFromIconResult);
console.log("\n# tx result for calling voteYes:", txResult.txHash);
// filter call message sent event
const callMessageSentEvent = await filterCallMessageSentEvent(
txResult.eventLogs
);
console.log("\n# call message sent event:", callMessageSentEvent);
// parse call message sent event
const parsedCallMessageSentEvent = await parseCallMessageSentEvent(
callMessageSentEvent
);
console.log(
"\n# parsed call message sent event:",
parsedCallMessageSentEvent
);
// filter call message event evm
const callMessageEventEvmFilters = filterCallMessageEventEvm(
contracts.primary,
contracts.secondary,
parsedCallMessageSentEvent._sn
);
console.log(
"\n# call message event evm filters:",
callMessageEventEvmFilters
);
// wait for call message event evm
const eventsEvm = await waitEventEVM(callMessageEventEvmFilters);
const messageId = eventsEvm[0].args._reqId;
const data = eventsEvm[0].args._data;
console.log("\n# events params:");
console.log(JSON.stringify(eventsEvm[0].args));
// invoke execute call on destination chain
console.log("\n# invoking execute call on destination chain");
const executeCallTxHash = await executeCallEvm(messageId, data);
console.log("\n# execute call tx hash:", executeCallTxHash.transactionHash);
// filter call message event evm
const callExecutedEventEvmFilters = filterCallExecutedEventEvm(messageId);
console.log(
"\n# callExecuted event evm filters:",
callExecutedEventEvmFilters
);
// wait for call executed event evm
const eventsEvm2 = await waitEventEVM(callExecutedEventEvmFilters);
console.log("\n# events params:");
console.log(JSON.stringify(eventsEvm2[0].args));
// check votes from destination chain
const votesFromEVM = await getVotesFromEVM(contracts.secondary);
console.log("\n# votes from EVM:", votesFromEVM);
} catch (e) {
console.log("error running tests", e);
}
}
/*
* Main
* @returns {Promise<void>}
*/
async function main() {
try {
// check if contracts have been deployed already
let contracts = null;
if (isDeployed()) {
console.log("\n# using deployed contracts");
contracts = getDeployments();
} else {
console.log("\n# deploying contracts");
contracts = await deploy();
saveDeployments(contracts);
}
if (contracts !== null) {
console.log("\n# deployed contracts:", contracts);
await tests(contracts);
}
} catch (e) {
console.log("error running main", e);
}
}
main();