1
1
import { expect } from "chai" ;
2
2
import { ethers } from "hardhat" ;
3
- import { BigNumber } from "ethers" ;
3
+ import { toBigInt , ContractTransactionReceipt , EventLog } from "ethers" ;
4
4
const hre = require ( "hardhat" ) ;
5
+ import { ModeratedEvidenceModule , CentralizedArbitrator , DisputeTemplateRegistry } from "../../typechain-types" ;
5
6
6
7
const Party = {
7
8
None : 0 ,
8
9
Submitter : 1 ,
9
10
Moderator : 2 ,
10
11
} ;
11
12
12
- function getEmittedEvent ( eventName : any , receipt : any ) {
13
- return receipt . events . find ( ( { event } ) => event === eventName ) ;
13
+ function getEmittedEvent ( eventName : any , receipt : ContractTransactionReceipt ) : EventLog {
14
+ const logs = receipt . logs as Array < EventLog > ;
15
+ const event = logs . find ( ( log ) => log . eventName === eventName ) ;
16
+ if ( event === undefined ) process . exit ( ) ;
17
+ return event ;
14
18
}
15
19
16
20
describe ( "Home Evidence contract" , async ( ) => {
@@ -22,10 +26,10 @@ describe("Home Evidence contract", async () => {
22
26
const totalCostMultiplier = 15000 ;
23
27
const initialDepositMultiplier = 625 ;
24
28
const disputeTemplate = '{ "disputeTemplate": "foo"}' ;
25
- const MULTIPLIER_DIVISOR = BigNumber . from ( 10000 ) ;
26
- const totalCost = BigNumber . from ( arbitrationFee ) . mul ( BigNumber . from ( totalCostMultiplier ) ) . div ( MULTIPLIER_DIVISOR ) ;
27
- const minRequiredDeposit = totalCost . mul ( BigNumber . from ( initialDepositMultiplier ) ) . div ( MULTIPLIER_DIVISOR ) ;
28
- const ZERO = BigNumber . from ( 0 ) ;
29
+ const MULTIPLIER_DIVISOR = toBigInt ( 10000 ) ;
30
+ const totalCost = ( toBigInt ( arbitrationFee ) * toBigInt ( toBigInt ( totalCostMultiplier ) ) ) / toBigInt ( MULTIPLIER_DIVISOR ) ;
31
+ const minRequiredDeposit = ( totalCost * toBigInt ( toBigInt ( initialDepositMultiplier ) ) ) / toBigInt ( MULTIPLIER_DIVISOR ) ;
32
+ const ZERO = toBigInt ( 0 ) ;
29
33
30
34
let deployer ;
31
35
let user1 ;
@@ -34,9 +38,9 @@ describe("Home Evidence contract", async () => {
34
38
let user4 ;
35
39
let evidenceID ;
36
40
37
- let arbitrator ;
38
- let evidenceModule ;
39
- let disputeTemplateRegistry ;
41
+ let arbitrator : CentralizedArbitrator ;
42
+ let evidenceModule : ModeratedEvidenceModule ;
43
+ let disputeTemplateRegistry : DisputeTemplateRegistry ;
40
44
41
45
beforeEach ( "Setup contracts" , async ( ) => {
42
46
[ deployer , user1 , user2 , user3 , user4 ] = await ethers . getSigners ( ) ;
@@ -49,9 +53,9 @@ describe("Home Evidence contract", async () => {
49
53
50
54
const EvidenceModule = await ethers . getContractFactory ( "ModeratedEvidenceModule" ) ;
51
55
evidenceModule = await EvidenceModule . deploy (
52
- arbitrator . address ,
56
+ arbitrator . target ,
53
57
deployer . address , // governor
54
- disputeTemplateRegistry . address ,
58
+ disputeTemplateRegistry . target ,
55
59
totalCostMultiplier ,
56
60
initialDepositMultiplier ,
57
61
bondTimeout ,
@@ -82,22 +86,22 @@ describe("Home Evidence contract", async () => {
82
86
let receipt = await tx . wait ( ) ;
83
87
let lastArbitratorIndex = await evidenceModule . getCurrentArbitratorIndex ( ) ;
84
88
let newArbitratorData = await evidenceModule . arbitratorDataList ( lastArbitratorIndex ) ;
85
- let oldArbitratorData = await evidenceModule . arbitratorDataList ( lastArbitratorIndex . sub ( BigNumber . from ( 1 ) ) ) ;
89
+ let oldArbitratorData = await evidenceModule . arbitratorDataList ( lastArbitratorIndex - toBigInt ( toBigInt ( 1 ) ) ) ;
86
90
87
- expect ( newArbitratorData . disputeTemplateId ) . to . equal ( oldArbitratorData . disputeTemplateId . add ( BigNumber . from ( 1 ) ) ) ;
91
+ expect ( newArbitratorData . disputeTemplateId ) . to . equal ( oldArbitratorData . disputeTemplateId + toBigInt ( 1 ) ) ;
88
92
expect ( newArbitratorData . arbitratorExtraData ) . to . equal ( oldArbitratorData . arbitratorExtraData ) ;
89
93
const disputeTemplateEvents = await disputeTemplateRegistry . queryFilter (
90
94
disputeTemplateRegistry . filters . DisputeTemplate ( ) ,
91
- receipt . blockNumber ,
92
- receipt . blockNumber
95
+ receipt ? .blockNumber ,
96
+ receipt ? .blockNumber
93
97
) ;
94
98
const [ _templateId , _ , _templateData ] = disputeTemplateEvents [ 0 ] . args ;
95
99
expect ( _templateData ) . to . equal ( newDisputeTemplate , "Wrong Template Data." ) ;
96
100
expect ( _templateId ) . to . equal ( newArbitratorData . disputeTemplateId , "Wrong Template ID." ) ;
97
101
98
102
const newArbitratorExtraData = "0x86" ;
99
103
await evidenceModule . changeArbitratorExtraData ( newArbitratorExtraData ) ;
100
- newArbitratorData = await evidenceModule . arbitratorDataList ( lastArbitratorIndex . add ( BigNumber . from ( 1 ) ) ) ;
104
+ newArbitratorData = await evidenceModule . arbitratorDataList ( lastArbitratorIndex + toBigInt ( 1 ) ) ;
101
105
expect ( newArbitratorData . arbitratorExtraData ) . to . equal ( newArbitratorExtraData , "Wrong extraData" ) ;
102
106
} ) ;
103
107
@@ -135,17 +139,18 @@ describe("Home Evidence contract", async () => {
135
139
value : minRequiredDeposit ,
136
140
} ) ; // id: 0
137
141
const receipt = await tx . wait ( ) ;
138
- const evidenceID = ethers . utils . solidityKeccak256 ( [ "uint" , "string" ] , [ 1234 , newEvidence ] ) ;
142
+ if ( receipt === null ) return ;
143
+ const evidenceID = ethers . solidityPackedKeccak256 ( [ "uint" , "string" ] , [ 1234 , newEvidence ] ) ;
139
144
140
145
const [ _arbitrator , _externalDisputeID , _party , _evidence ] = getEmittedEvent ( "ModeratedEvidence" , receipt ) . args ;
141
- expect ( _arbitrator ) . to . equal ( arbitrator . address , "Wrong arbitrator." ) ;
146
+ expect ( _arbitrator ) . to . equal ( arbitrator . target , "Wrong arbitrator." ) ;
142
147
expect ( _externalDisputeID ) . to . equal ( 1234 , "Wrong external dispute ID." ) ;
143
148
expect ( _party ) . to . equal ( user1 . address , "Wrong submitter." ) ;
144
149
expect ( _evidence ) . to . equal ( newEvidence , "Wrong evidence message." ) ;
145
150
146
151
let contributions = await evidenceModule . getContributions ( evidenceID , 0 , user1 . address ) ;
147
152
expect ( contributions [ 0 ] ) . to . equal ( ZERO ) ; // it's 1am and to.deep.equal() won't work, can't be bothered
148
- expect ( contributions [ 1 ] ) . to . equal ( BigNumber . from ( "93" ) ) ;
153
+ expect ( contributions [ 1 ] ) . to . equal ( toBigInt ( "93" ) ) ;
149
154
expect ( contributions [ 2 ] ) . to . equal ( ZERO ) ;
150
155
expect ( contributions . length ) . to . equal ( 3 ) ;
151
156
} ) ;
@@ -166,7 +171,7 @@ describe("Home Evidence contract", async () => {
166
171
const newEvidence = "Irrefutable evidence" ;
167
172
await expect (
168
173
evidenceModule . submitEvidence ( 1234 , newEvidence , {
169
- value : minRequiredDeposit . sub ( BigNumber . from ( 1 ) ) ,
174
+ value : minRequiredDeposit - toBigInt ( 1 ) ,
170
175
} )
171
176
) . to . be . revertedWith ( "Insufficient funding." ) ;
172
177
} ) ;
@@ -178,7 +183,7 @@ describe("Home Evidence contract", async () => {
178
183
await evidenceModule . connect ( user1 ) . submitEvidence ( 1234 , newEvidence , {
179
184
value : minRequiredDeposit ,
180
185
} ) ;
181
- evidenceID = ethers . utils . solidityKeccak256 ( [ "uint" , "string" ] , [ 1234 , newEvidence ] ) ;
186
+ evidenceID = ethers . solidityPackedKeccak256 ( [ "uint" , "string" ] , [ 1234 , newEvidence ] ) ;
182
187
} ) ;
183
188
184
189
it ( "Should not allow moderation after bond timeout passed." , async ( ) => {
@@ -205,50 +210,50 @@ describe("Home Evidence contract", async () => {
205
210
206
211
it ( "Should create dispute after moderation escalation is complete." , async ( ) => {
207
212
await evidenceModule . connect ( user2 ) . moderate ( evidenceID , Party . Moderator , {
208
- value : minRequiredDeposit . mul ( 2 ) ,
213
+ value : minRequiredDeposit * toBigInt ( 2 ) ,
209
214
} ) ;
210
215
211
216
let moderationInfo = await evidenceModule . getModerationInfo ( evidenceID , 0 ) ;
212
217
let paidFees = moderationInfo . paidFees ;
213
- let depositRequired = paidFees [ Party . Moderator ] . mul ( 2 ) . sub ( paidFees [ Party . Submitter ] ) ;
218
+ let depositRequired = paidFees [ Party . Moderator ] * toBigInt ( 2 ) - toBigInt ( paidFees [ Party . Submitter ] ) ;
214
219
await evidenceModule . connect ( user4 ) . moderate ( evidenceID , Party . Submitter , {
215
220
value : depositRequired ,
216
221
} ) ;
217
222
218
223
moderationInfo = await evidenceModule . getModerationInfo ( evidenceID , 0 ) ;
219
224
paidFees = moderationInfo . paidFees ;
220
- depositRequired = paidFees [ Party . Submitter ] . mul ( 2 ) . sub ( paidFees [ Party . Moderator ] ) ;
225
+ depositRequired = paidFees [ Party . Submitter ] * toBigInt ( 2 ) - toBigInt ( paidFees [ Party . Moderator ] ) ;
221
226
await evidenceModule . connect ( user2 ) . moderate ( evidenceID , Party . Moderator , {
222
227
value : depositRequired ,
223
228
} ) ;
224
229
225
230
moderationInfo = await evidenceModule . getModerationInfo ( evidenceID , 0 ) ;
226
231
paidFees = moderationInfo . paidFees ;
227
- depositRequired = paidFees [ Party . Moderator ] . mul ( 2 ) . sub ( paidFees [ Party . Submitter ] ) ;
232
+ depositRequired = paidFees [ Party . Moderator ] * toBigInt ( 2 ) - toBigInt ( paidFees [ Party . Submitter ] ) ;
228
233
await evidenceModule . connect ( user4 ) . moderate ( evidenceID , Party . Submitter , {
229
234
value : depositRequired ,
230
235
} ) ;
231
236
232
237
moderationInfo = await evidenceModule . getModerationInfo ( evidenceID , 0 ) ;
233
238
paidFees = moderationInfo . paidFees ;
234
- depositRequired = paidFees [ Party . Submitter ] . mul ( 2 ) . sub ( paidFees [ Party . Moderator ] ) ;
239
+ depositRequired = paidFees [ Party . Submitter ] * toBigInt ( 2 ) - toBigInt ( paidFees [ Party . Moderator ] ) ;
235
240
await evidenceModule . connect ( user2 ) . moderate ( evidenceID , Party . Moderator , {
236
241
value : depositRequired ,
237
242
} ) ;
238
243
239
244
moderationInfo = await evidenceModule . getModerationInfo ( evidenceID , 0 ) ;
240
245
paidFees = moderationInfo . paidFees ;
241
- depositRequired = paidFees [ Party . Moderator ] . mul ( 2 ) . sub ( paidFees [ Party . Submitter ] ) ;
246
+ depositRequired = paidFees [ Party . Moderator ] * toBigInt ( 2 ) - toBigInt ( paidFees [ Party . Submitter ] ) ;
242
247
let tx = await evidenceModule . connect ( user4 ) . moderate ( evidenceID , Party . Submitter , {
243
248
value : depositRequired , // Less is actually needed. Overpaid fees are reimbursed
244
249
} ) ;
245
250
let receipt = await tx . wait ( ) ;
246
-
251
+ if ( receipt === null ) return ;
247
252
let [ _arbitrator , _arbitrableDisputeID , _externalDisputeID , _templateId , _templateUri ] = getEmittedEvent (
248
253
"DisputeRequest" ,
249
254
receipt
250
255
) . args ;
251
- expect ( _arbitrator ) . to . equal ( arbitrator . address , "Wrong arbitrator." ) ;
256
+ expect ( _arbitrator ) . to . equal ( arbitrator . target , "Wrong arbitrator." ) ;
252
257
expect ( _arbitrableDisputeID ) . to . equal ( 0 , "Wrong dispute ID." ) ;
253
258
expect ( _templateId ) . to . equal ( 0 , "Wrong template ID." ) ;
254
259
expect ( _externalDisputeID ) . to . equal ( evidenceID , "Wrong external dispute ID." ) ;
0 commit comments