@@ -699,6 +699,48 @@ contract("USDTieredSTO", async (accounts) => {
699699 assert . equal ( tokens [ 0 ] , I_DaiToken . address , "USD Tokens should match" ) ;
700700 } ) ;
701701
702+ it ( "Should successfully attach the sixth STO module to the security token" , async ( ) => {
703+ let stoId = 5 ; // Non-divisible token with invalid tier
704+
705+ _startTime . push ( new BN ( currentTime ) . add ( new BN ( duration . days ( 2 ) ) ) ) ;
706+ _endTime . push ( new BN ( _startTime [ stoId ] ) . add ( new BN ( currentTime ) . add ( new BN ( duration . days ( 100 ) ) ) ) ) ;
707+ _ratePerTier . push ( [ new BN ( 1 ) . mul ( e18 ) , new BN ( 1 ) . mul ( e18 ) ] ) ; // [ 1 USD/Token, 1 USD/Token ]
708+ _ratePerTierDiscountPoly . push ( [ new BN ( 1 ) . mul ( e18 ) , new BN ( 1 ) . mul ( e18 ) ] ) ; // [ 1 USD/Token, 1 USD/Token ]
709+ _tokensPerTierTotal . push ( [ new BN ( 10010 ) . mul ( e16 ) , new BN ( 50 ) . mul ( e18 ) ] ) ; // [ 100.1 Token, 50 Token ]
710+ _tokensPerTierDiscountPoly . push ( [ new BN ( 0 ) , new BN ( 0 ) ] ) ; // [ 0 Token, 0 Token ]
711+ _nonAccreditedLimitUSD . push ( new BN ( 25 ) . mul ( e18 ) ) ; // [ 25 USD ]
712+ _minimumInvestmentUSD . push ( new BN ( 5 ) ) ;
713+ _fundRaiseTypes . push ( [ 0 , 1 , 2 ] ) ;
714+ _wallet . push ( WALLET ) ;
715+ _treasuryWallet . push ( TREASURYWALLET ) ;
716+ _usdToken . push ( [ I_DaiToken . address ] ) ;
717+
718+ let config = [
719+ _startTime [ stoId ] ,
720+ _endTime [ stoId ] ,
721+ _ratePerTier [ stoId ] ,
722+ _ratePerTierDiscountPoly [ stoId ] ,
723+ _tokensPerTierTotal [ stoId ] ,
724+ _tokensPerTierDiscountPoly [ stoId ] ,
725+ _nonAccreditedLimitUSD [ stoId ] ,
726+ _minimumInvestmentUSD [ stoId ] ,
727+ _fundRaiseTypes [ stoId ] ,
728+ _wallet [ stoId ] ,
729+ _treasuryWallet [ stoId ] ,
730+ _usdToken [ stoId ]
731+ ] ;
732+
733+ let bytesSTO = web3 . eth . abi . encodeFunctionCall ( functionSignature , config ) ;
734+ let tx = await I_SecurityToken . addModule ( I_USDTieredSTOFactory . address , bytesSTO , 0 , 0 , { from : ISSUER , gasPrice : GAS_PRICE } ) ;
735+ console . log ( " Gas addModule: " . grey + tx . receipt . gasUsed . toString ( ) . grey ) ;
736+ assert . equal ( tx . logs [ 2 ] . args . _types [ 0 ] , STOKEY , "USDTieredSTO doesn't get deployed" ) ;
737+ assert . equal ( web3 . utils . hexToString ( tx . logs [ 2 ] . args . _name ) , "USDTieredSTO" , "USDTieredSTOFactory module was not added" ) ;
738+ I_USDTieredSTO_Array . push ( await USDTieredSTO . at ( tx . logs [ 2 ] . args . _module ) ) ;
739+ // console.log(I_USDTieredSTO_Array[I_USDTieredSTO_Array.length - 1]);
740+ let tokens = await I_USDTieredSTO_Array [ I_USDTieredSTO_Array . length - 1 ] . getUsdTokens . call ( ) ;
741+ assert . equal ( tokens [ 0 ] , I_DaiToken . address , "USD Tokens should match" ) ;
742+ } ) ;
743+
702744 it ( "Should fail because rates and tier array of different length" , async ( ) => {
703745 let stoId = 0 ;
704746
@@ -1236,7 +1278,8 @@ contract("USDTieredSTO", async (accounts) => {
12361278 await I_USDTieredSTO_Array [ stoId ] . buyWithUSD ( NONACCREDITED1 , investment_DAI , I_DaiToken . address , { from : NONACCREDITED1 } ) ;
12371279
12381280 // Change Stable coin address
1239- await I_USDTieredSTO_Array [ stoId ] . modifyAddresses ( WALLET , TREASURYWALLET , [ I_PolyToken . address ] , { from : ISSUER } ) ;
1281+ let I_DaiToken2 = await PolyTokenFaucet . new ( ) ;
1282+ await I_USDTieredSTO_Array [ stoId ] . modifyAddresses ( WALLET , TREASURYWALLET , [ I_DaiToken2 . address ] , { from : ISSUER } ) ;
12401283
12411284 // NONACCREDITED DAI
12421285 await catchRevert ( I_USDTieredSTO_Array [ stoId ] . buyWithUSD ( NONACCREDITED1 , investment_DAI , I_DaiToken . address , { from : NONACCREDITED1 } ) ) ;
@@ -3894,6 +3937,114 @@ contract("USDTieredSTO", async (accounts) => {
38943937 await I_SecurityToken . changeGranularity ( 1 , { from : ISSUER } ) ;
38953938 } ) ;
38963939
3940+ it ( "should successfully buy a granular amount when buying indivisible token with illegal tier limits" , async ( ) => {
3941+ await I_SecurityToken . changeGranularity ( e18 , { from : ISSUER } ) ;
3942+ let stoId = 5 ;
3943+ let tierId = 0 ;
3944+ let investment_Tokens = new BN ( 110 ) . mul ( e18 ) ;
3945+ let investment_POLY = await convert ( stoId , tierId , false , "TOKEN" , "POLY" , investment_Tokens ) ;
3946+
3947+ let refund_Tokens = new BN ( 0 ) ;
3948+ let refund_POLY = await convert ( stoId , tierId , false , "TOKEN" , "POLY" , refund_Tokens ) ;
3949+
3950+ await I_PolyToken . getTokens ( investment_POLY , ACCREDITED1 ) ;
3951+ await I_PolyToken . approve ( I_USDTieredSTO_Array [ stoId ] . address , investment_POLY , { from : ACCREDITED1 } ) ;
3952+
3953+ let init_TokenSupply = await I_SecurityToken . totalSupply ( ) ;
3954+ let init_InvestorTokenBal = await I_SecurityToken . balanceOf ( ACCREDITED1 ) ;
3955+ let init_InvestorETHBal = new BN ( await web3 . eth . getBalance ( ACCREDITED1 ) ) ;
3956+ let init_InvestorPOLYBal = await I_PolyToken . balanceOf ( ACCREDITED1 ) ;
3957+ let init_STOTokenSold = await I_USDTieredSTO_Array [ stoId ] . getTokensSold ( ) ;
3958+ let init_STOETHBal = new BN ( await web3 . eth . getBalance ( I_USDTieredSTO_Array [ stoId ] . address ) ) ;
3959+ let init_STOPOLYBal = await I_PolyToken . balanceOf ( I_USDTieredSTO_Array [ stoId ] . address ) ;
3960+ let init_RaisedETH = await I_USDTieredSTO_Array [ stoId ] . fundsRaised . call ( ETH ) ;
3961+ let init_RaisedPOLY = await I_USDTieredSTO_Array [ stoId ] . fundsRaised . call ( POLY ) ;
3962+ let init_WalletETHBal = new BN ( await web3 . eth . getBalance ( WALLET ) ) ;
3963+ let init_WalletPOLYBal = await I_PolyToken . balanceOf ( WALLET ) ;
3964+
3965+ let tokensToMint = ( await I_USDTieredSTO_Array [ stoId ] . buyWithPOLY . call ( ACCREDITED1 , investment_POLY , { from : ACCREDITED1 } ) ) [ 2 ] ;
3966+
3967+ // Buy With POLY
3968+ let tx2 = await I_USDTieredSTO_Array [ stoId ] . buyWithPOLY ( ACCREDITED1 , investment_POLY , {
3969+ from : ACCREDITED1 ,
3970+ gasPrice : GAS_PRICE
3971+ } ) ;
3972+ let gasCost2 = new BN ( GAS_PRICE ) . mul ( new BN ( tx2 . receipt . gasUsed ) ) ;
3973+ console . log ( " Gas buyWithPOLY: " . grey + new BN ( tx2 . receipt . gasUsed ) . toString ( ) . grey ) ;
3974+
3975+ let final_TokenSupply = await I_SecurityToken . totalSupply ( ) ;
3976+ let final_InvestorTokenBal = await I_SecurityToken . balanceOf ( ACCREDITED1 ) ;
3977+ let final_InvestorETHBal = new BN ( await web3 . eth . getBalance ( ACCREDITED1 ) ) ;
3978+ let final_InvestorPOLYBal = await I_PolyToken . balanceOf ( ACCREDITED1 ) ;
3979+ let final_STOTokenSold = await I_USDTieredSTO_Array [ stoId ] . getTokensSold ( ) ;
3980+ let final_STOETHBal = new BN ( await web3 . eth . getBalance ( I_USDTieredSTO_Array [ stoId ] . address ) ) ;
3981+ let final_STOPOLYBal = await I_PolyToken . balanceOf ( I_USDTieredSTO_Array [ stoId ] . address ) ;
3982+ let final_RaisedETH = await I_USDTieredSTO_Array [ stoId ] . fundsRaised . call ( ETH ) ;
3983+ let final_RaisedPOLY = await I_USDTieredSTO_Array [ stoId ] . fundsRaised . call ( POLY ) ;
3984+ let final_WalletETHBal = new BN ( await web3 . eth . getBalance ( WALLET ) ) ;
3985+ let final_WalletPOLYBal = await I_PolyToken . balanceOf ( WALLET ) ;
3986+
3987+ assert . equal (
3988+ final_TokenSupply . toString ( ) ,
3989+ init_TokenSupply
3990+ . add ( investment_Tokens )
3991+ . sub ( refund_Tokens )
3992+ . toString ( ) ,
3993+ "Token Supply not changed as expected"
3994+ ) ;
3995+ assert . equal ( tokensToMint . toString ( ) , investment_Tokens . sub ( refund_Tokens ) . toString ( ) , "View function returned incorrect data" ) ;
3996+ assert . equal (
3997+ final_InvestorTokenBal . toString ( ) ,
3998+ init_InvestorTokenBal
3999+ . add ( investment_Tokens )
4000+ . sub ( refund_Tokens )
4001+ . toString ( ) ,
4002+ "Investor Token Balance not changed as expected"
4003+ ) ;
4004+ assert . equal (
4005+ final_InvestorETHBal . toString ( ) ,
4006+ init_InvestorETHBal . sub ( gasCost2 ) . toString ( ) ,
4007+ "Investor ETH Balance not changed as expected"
4008+ ) ;
4009+ assert . equal (
4010+ final_InvestorPOLYBal . toString ( ) ,
4011+ init_InvestorPOLYBal
4012+ . sub ( investment_POLY )
4013+ . add ( refund_POLY )
4014+ . toString ( ) ,
4015+ "Investor POLY Balance not changed as expected"
4016+ ) ;
4017+ assert . equal (
4018+ final_STOTokenSold . toString ( ) ,
4019+ init_STOTokenSold
4020+ . add ( investment_Tokens )
4021+ . sub ( refund_Tokens )
4022+ . toString ( ) ,
4023+ "STO Token Sold not changed as expected"
4024+ ) ;
4025+ assert . equal ( final_STOETHBal . toString ( ) , init_STOETHBal . toString ( ) , "STO ETH Balance not changed as expected" ) ;
4026+ assert . equal ( final_STOPOLYBal . toString ( ) , init_STOPOLYBal . toString ( ) , "STO POLY Balance not changed as expected" ) ;
4027+ assert . equal ( final_RaisedETH . toString ( ) , init_RaisedETH . toString ( ) , "Raised ETH not changed as expected" ) ;
4028+ assert . equal (
4029+ final_RaisedPOLY . toString ( ) ,
4030+ init_RaisedPOLY
4031+ . add ( investment_POLY )
4032+ . sub ( refund_POLY )
4033+ . toString ( ) ,
4034+ "Raised POLY not changed as expected"
4035+ ) ;
4036+ assert . equal ( final_WalletETHBal . toString ( ) , init_WalletETHBal . toString ( ) , "Wallet ETH Balance not changed as expected" ) ;
4037+ assert . equal (
4038+ final_WalletPOLYBal . toString ( ) ,
4039+ init_WalletPOLYBal
4040+ . add ( investment_POLY )
4041+ . sub ( refund_POLY )
4042+ . toString ( ) ,
4043+ "Wallet POLY Balance not changed as expected"
4044+ ) ;
4045+ await I_SecurityToken . changeGranularity ( 1 , { from : ISSUER } ) ;
4046+ } ) ;
4047+
38974048 it ( "should successfully buy a granular amount and refund balance when buying indivisible token with ETH" , async ( ) => {
38984049 await I_SecurityToken . changeGranularity ( e18 , { from : ISSUER } ) ;
38994050 let stoId = 4 ;
0 commit comments