@@ -8,6 +8,7 @@ const ERC20Mock = artifacts.require("./ERC20Mock.sol");
8
8
const ActionMock = artifacts . require ( "./ActionMock.sol" ) ;
9
9
const DxDaoSchemeConstraints = artifacts . require ( "./DxDaoSchemeConstraints.sol" ) ;
10
10
const SimpleSchemeConstraints = artifacts . require ( "./SimpleSchemeConstraints.sol" ) ;
11
+ const Redeemer = artifacts . require ( "./Redeemer.sol" ) ;
11
12
12
13
class GenericSchemeParams {
13
14
constructor ( ) {
@@ -291,6 +292,76 @@ contract('GenericSchemeMultiCall', function(accounts) {
291
292
} ) ;
292
293
} ) ;
293
294
295
+ it ( "redeemer should fail if not executed from votingMachine" , async function ( ) {
296
+ var actionMock = await ActionMock . new ( ) ;
297
+ var standardTokenMock = await ERC20Mock . new ( accounts [ 0 ] , 1000 ) ;
298
+ var testSetup = await setup ( accounts , [ actionMock . address ] , 0 , true , standardTokenMock . address ) ;
299
+ const encodeABI = await new web3 . eth . Contract ( actionMock . abi ) . methods . withoutReturnValue ( testSetup . org . avatar . address ) . encodeABI ( ) ;
300
+ var tx = await testSetup . genericSchemeMultiCall . proposeCalls ( [ actionMock . address ] , [ encodeABI ] , [ 0 ] , helpers . NULL_HASH ) ;
301
+ var proposalId = await helpers . getValueFromLogs ( tx , '_proposalId' ) ;
302
+ var redeemer = await Redeemer . new ( ) ;
303
+ var redeemRewards = await redeemer . redeemGenericSchemeMultiCall . call (
304
+ testSetup . genericSchemeMultiCall . address ,
305
+ testSetup . genericSchemeParams . votingMachine . genesisProtocol . address ,
306
+ proposalId ,
307
+ accounts [ 0 ] ) ;
308
+ assert . equal ( redeemRewards [ 0 ] [ 1 ] , 0 ) ; //redeemRewards[0] gpRewards
309
+ assert . equal ( redeemRewards [ 0 ] [ 2 ] , 0 ) ;
310
+ assert . equal ( redeemRewards . executed , false ) ;
311
+ assert . equal ( redeemRewards . winningVote , 0 ) ; // Cannot redeem, so will not get the winning vote
312
+ tx = await redeemer . redeemGenericSchemeMultiCall (
313
+ testSetup . genericSchemeMultiCall . address ,
314
+ testSetup . genericSchemeParams . votingMachine . genesisProtocol . address ,
315
+ proposalId ,
316
+ accounts [ 0 ] ) ;
317
+ await testSetup . genericSchemeMultiCall . getPastEvents ( 'ProposalExecuted' , {
318
+ fromBlock : tx . blockNumber ,
319
+ toBlock : 'latest'
320
+ } )
321
+ . then ( function ( events ) {
322
+ assert . equal ( events . length , 0 ) ;
323
+ } ) ;
324
+ } ) ;
325
+
326
+ it ( "execute proposeVote -positive decision - execute with redeemer" , async function ( ) {
327
+ var actionMock = await ActionMock . new ( ) ;
328
+ var standardTokenMock = await ERC20Mock . new ( accounts [ 0 ] , 1000 ) ;
329
+ var testSetup = await setup ( accounts , [ actionMock . address ] , 0 , true , standardTokenMock . address ) ;
330
+ var value = 50000 ;
331
+ var callData = await createCallToActionMock ( testSetup . org . avatar . address , actionMock ) ;
332
+ var tx = await testSetup . genericSchemeMultiCall . proposeCalls ( [ actionMock . address , actionMock . address ] , [ callData , callData ] , [ value , value ] , helpers . NULL_HASH ) ;
333
+ var proposalId = await helpers . getValueFromLogs ( tx , '_proposalId' ) ;
334
+ //transfer some eth to avatar
335
+ await web3 . eth . sendTransaction ( { from :accounts [ 0 ] , to :testSetup . org . avatar . address , value : web3 . utils . toWei ( '1' , "ether" ) } ) ;
336
+ assert . equal ( await web3 . eth . getBalance ( actionMock . address ) , 0 ) ;
337
+ await testSetup . genericSchemeParams . votingMachine . genesisProtocol . vote ( proposalId , 1 , 0 , helpers . NULL_ADDRESS , { from :accounts [ 2 ] } ) ;
338
+ var redeemer = await Redeemer . new ( ) ;
339
+ var redeemRewards = await redeemer . redeemGenericSchemeMultiCall . call (
340
+ testSetup . genericSchemeMultiCall . address ,
341
+ testSetup . genericSchemeParams . votingMachine . genesisProtocol . address ,
342
+ proposalId ,
343
+ accounts [ 0 ] ) ;
344
+ assert . equal ( redeemRewards [ 0 ] [ 1 ] , 0 ) ; //redeemRewards[0] gpRewards
345
+ assert . equal ( redeemRewards [ 0 ] [ 2 ] , 60 ) ;
346
+ assert . equal ( redeemRewards . executed , false ) ; // GP already executed by vote
347
+ assert . equal ( redeemRewards . winningVote , 1 ) ;
348
+ tx = await redeemer . redeemGenericSchemeMultiCall (
349
+ testSetup . genericSchemeMultiCall . address ,
350
+ testSetup . genericSchemeParams . votingMachine . genesisProtocol . address ,
351
+ proposalId ,
352
+ accounts [ 0 ] ) ;
353
+ await testSetup . genericSchemeMultiCall . getPastEvents ( 'ProposalExecuted' , {
354
+ fromBlock : tx . blockNumber ,
355
+ toBlock : 'latest'
356
+ } )
357
+ . then ( function ( events ) {
358
+ assert . equal ( events [ 0 ] . event , "ProposalExecuted" ) ;
359
+ assert . equal ( events [ 0 ] . args . _proposalId , proposalId ) ;
360
+ } ) ;
361
+ assert . equal ( await web3 . eth . getBalance ( actionMock . address ) , value * 2 ) ;
362
+ } ) ;
363
+
364
+
294
365
it ( "schemeconstrains eth value exceed limit" , async function ( ) {
295
366
var actionMock = await ActionMock . new ( ) ;
296
367
var standardTokenMock = await ERC20Mock . new ( accounts [ 0 ] , 1000 ) ;
0 commit comments