11const { expect } = require ( 'chai' ) ;
22const { BigNumber } = require ( 'ethers' ) ;
3- const { ethers } = require ( 'hardhat' ) ;
3+ const { ethers, network } = require ( 'hardhat' ) ;
44
55const { NATIVE_TOKEN_ADDRESS , registry, ZERO_ADDRESS } = require ( '../helpers/Constants' ) ;
66const Contracts = require ( '../../components/Contracts' ) . default ;
@@ -14,6 +14,8 @@ const STANDARD_CONVERTER_WEIGHTS = [500_000, 500_000];
1414const TOTAL_SUPPLY = BigNumber . from ( 1_000_000_000 ) . mul ( TKN ) ;
1515
1616let contractRegistry ;
17+ let prevBurner ;
18+ let networkV3 ;
1719let bancorNetwork ;
1820let networkToken ;
1921let govToken ;
@@ -44,6 +46,9 @@ describe('VortexBurner', () => {
4446
4547 networkSettings = await Contracts . NetworkSettings . deploy ( owner . address , BigNumber . from ( 0 ) ) ;
4648 await contractRegistry . registerAddress ( registry . NETWORK_SETTINGS , networkSettings . address ) ;
49+
50+ prevBurner = await Contracts . MockVortexBurner . deploy ( ) ;
51+ networkV3 = await Contracts . TestBancorNetworkV3 . deploy ( contractRegistry . address ) ;
4752 } ) ;
4853
4954 beforeEach ( async ( ) => {
@@ -65,6 +70,7 @@ describe('VortexBurner', () => {
6570
6671 govToken = await Contracts . DSToken . deploy ( 'vBNT' , 'vBNT' , 18 ) ;
6772 await govToken . issue ( owner . address , TOTAL_SUPPLY ) ;
73+ await govToken . transfer ( networkV3 . address , TOTAL_SUPPLY . div ( 10 ) ) ;
6874
6975 govTokenGovernance = await Contracts . TestTokenGovernance . deploy ( govToken . address ) ;
7076 await govToken . transferOwnership ( govTokenGovernance . address ) ;
@@ -75,7 +81,9 @@ describe('VortexBurner', () => {
7581 vortex = await Contracts . VortexBurner . deploy (
7682 networkToken . address ,
7783 govTokenGovernance . address ,
78- contractRegistry . address
84+ contractRegistry . address ,
85+ ZERO_ADDRESS ,
86+ networkV3 . address
7987 ) ;
8088
8189 await networkFeeWallet . transferOwnership ( vortex . address ) ;
@@ -93,21 +101,59 @@ describe('VortexBurner', () => {
93101 expect ( await vortex . totalBurnedAmount ( ) ) . to . equal ( BigNumber . from ( 0 ) ) ;
94102 } ) ;
95103
104+ it ( 'should allow initializing with a previous burner address' , async ( ) => {
105+ vortex = await Contracts . VortexBurner . deploy (
106+ networkToken . address ,
107+ govTokenGovernance . address ,
108+ contractRegistry . address ,
109+ prevBurner . address ,
110+ networkV3 . address
111+ ) ;
112+
113+ expect ( await vortex . totalBurnedAmount ( ) ) . to . equal ( BigNumber . from ( 1000 ) ) ;
114+ } ) ;
115+
96116 it ( 'should revert if initialized with an invalid network token address' , async ( ) => {
97117 await expect (
98- Contracts . VortexBurner . deploy ( ZERO_ADDRESS , govTokenGovernance . address , contractRegistry . address )
118+ Contracts . VortexBurner . deploy (
119+ ZERO_ADDRESS ,
120+ govTokenGovernance . address ,
121+ contractRegistry . address ,
122+ prevBurner . address ,
123+ networkV3 . address )
99124 ) . to . be . revertedWith ( 'ERR_INVALID_ADDRESS' ) ;
100125 } ) ;
101126
102127 it ( 'should revert if initialized with an invalid governance token governance address' , async ( ) => {
103128 await expect (
104- Contracts . VortexBurner . deploy ( networkToken . address , ZERO_ADDRESS , contractRegistry . address )
129+ Contracts . VortexBurner . deploy (
130+ networkToken . address ,
131+ ZERO_ADDRESS ,
132+ contractRegistry . address ,
133+ prevBurner . address ,
134+ networkV3 . address )
105135 ) . to . be . revertedWith ( 'ERR_INVALID_ADDRESS' ) ;
106136 } ) ;
107137
108138 it ( 'should revert if initialized with an invalid contract registry address' , async ( ) => {
109139 await expect (
110- Contracts . VortexBurner . deploy ( networkToken . address , govTokenGovernance . address , ZERO_ADDRESS )
140+ Contracts . VortexBurner . deploy (
141+ networkToken . address ,
142+ govTokenGovernance . address ,
143+ ZERO_ADDRESS ,
144+ prevBurner . address ,
145+ networkV3 . address )
146+ ) . to . be . revertedWith ( 'ERR_INVALID_ADDRESS' ) ;
147+ } ) ;
148+
149+ it ( 'should revert if initialized with an invalid contract network v3 address' , async ( ) => {
150+ await expect (
151+ Contracts . VortexBurner . deploy (
152+ networkToken . address ,
153+ govTokenGovernance . address ,
154+ contractRegistry . address ,
155+ prevBurner . address ,
156+ ZERO_ADDRESS )
111157 ) . to . be . revertedWith ( 'ERR_INVALID_ADDRESS' ) ;
112158 } ) ;
113159 } ) ;
@@ -139,7 +185,9 @@ describe('VortexBurner', () => {
139185 const newVortex = await Contracts . VortexBurner . deploy (
140186 networkToken . address ,
141187 govTokenGovernance . address ,
142- contractRegistry . address
188+ contractRegistry . address ,
189+ ZERO_ADDRESS ,
190+ networkV3 . address
143191 ) ;
144192
145193 await vortex . transferNetworkFeeWalletOwnership ( newVortex . address ) ;
@@ -392,19 +440,9 @@ describe('VortexBurner', () => {
392440 netNetworkTokenConversionAmount . sub ( burnRewardAmount ) ;
393441 }
394442
395- // take into account that if one of the source tokens is the governance token -
396- // we won't be able to use rateByPath explicitly, since it wouldn't take into
397- // account a previous conversion.
398- totalBurnedAmount = totalBurnedAmount . add (
399- await bancorNetwork . rateByPath (
400- [
401- networkToken . address ,
402- data . GOV . poolToken . address ,
403- govToken . address
404- ] ,
405- netNetworkTokenConversionAmount
406- )
407- ) ;
443+ // assuming the BNT -> vBNT trade on Bancor v3 returns double the source amount,
444+ // since a mock network is used
445+ totalBurnedAmount = totalBurnedAmount . add ( netNetworkTokenConversionAmount . mul ( 2 ) ) ;
408446
409447 return {
410448 convertibleTokens,
0 commit comments