@@ -36,6 +36,7 @@ import {
36
36
GetLogs ,
37
37
FULL_DECIMALS ,
38
38
FeeType ,
39
+ ErrorCode ,
39
40
} from '../../types' ;
40
41
import {
41
42
bigNumberToDate ,
@@ -560,7 +561,7 @@ export default class SecurityTokenRegistryWrapper extends ContractWrapper {
560
561
*/
561
562
public changeFeesAmountAndCurrency = async ( params : ChangeFeesAmountAndCurrencyParams ) => {
562
563
const isOldFeesInPoly = await this . getIsFeeInPoly ( ) ;
563
- assert . assert ( isOldFeesInPoly !== params . isFeeInPoly , 'Currency unchanged' ) ;
564
+ assert . assert ( isOldFeesInPoly !== params . isFeeInPoly , ErrorCode . PreconditionRequired , 'Currency unchanged' ) ;
564
565
return ( await this . contract ) . changeFeesAmountAndCurrency . sendTransactionAsync (
565
566
valueToWei ( params . tickerRegFee , FULL_DECIMALS ) ,
566
567
valueToWei ( params . stLaunchFee , FULL_DECIMALS ) ,
@@ -576,17 +577,17 @@ export default class SecurityTokenRegistryWrapper extends ContractWrapper {
576
577
*/
577
578
public refreshSecurityToken = async ( params : RefreshSecurityTokenParams ) => {
578
579
await this . checkWhenNotPausedOrOwner ( ) ;
579
- assert . assert ( params . name . length > 0 , 'Name cannot be an empty string' ) ;
580
- assert . assert ( params . ticker . length > 0 , 'Ticker cannot be an empty string' ) ;
580
+ assert . assert ( params . name . length > 0 , ErrorCode . InvalidData , 'Name cannot be an empty string' ) ;
581
+ assert . assert ( params . ticker . length > 0 , ErrorCode . InvalidData , 'Ticker cannot be an empty string' ) ;
581
582
assert . isNonZeroETHAddressHex ( 'treasuryWallet' , params . treasuryWallet ) ;
582
583
const tickerDetails = await this . getTickerDetails ( {
583
584
ticker : params . ticker ,
584
585
} ) ;
585
- assert . assert ( tickerDetails . status , 'Not deployed' ) ;
586
+ assert . assert ( tickerDetails . status , ErrorCode . NotFound , 'Not deployed' ) ;
586
587
const isFrozen = await ( await this . securityTokenContract (
587
588
await this . getSecurityTokenAddress ( { ticker : params . ticker } ) ,
588
589
) ) . transfersFrozen . callAsync ( ) ;
589
- assert . assert ( isFrozen , 'Transfers not frozen' ) ;
590
+ assert . assert ( isFrozen , ErrorCode . PreconditionRequired , 'Transfers not frozen' ) ;
590
591
return ( await this . contract ) . refreshSecurityToken . sendTransactionAsync (
591
592
params . name ,
592
593
params . ticker ,
@@ -610,7 +611,11 @@ export default class SecurityTokenRegistryWrapper extends ContractWrapper {
610
611
const minor = new BigNumber ( splitVersion [ 1 ] ) ;
611
612
const patch = new BigNumber ( splitVersion [ 2 ] ) ;
612
613
const VERSION = [ major , minor , patch ] ;
613
- assert . assert ( JSON . stringify ( LATEST_VERSION ) === JSON . stringify ( VERSION ) , 'Cannot remove latestVersion' ) ;
614
+ assert . assert (
615
+ JSON . stringify ( LATEST_VERSION ) === JSON . stringify ( VERSION ) ,
616
+ ErrorCode . PreconditionRequired ,
617
+ 'Cannot remove latestVersion' ,
618
+ ) ;
614
619
return ( await this . contract ) . removeProtocolFactory . sendTransactionAsync (
615
620
major ,
616
621
minor ,
@@ -651,17 +656,25 @@ export default class SecurityTokenRegistryWrapper extends ContractWrapper {
651
656
} ;
652
657
653
658
public generateNewSecurityToken = async ( params : NewSecurityTokenParams ) => {
654
- assert . assert ( params . ticker . length > 0 , 'Ticker cannot be an empty string' ) ;
655
- assert . assert ( params . name . length > 0 , 'Name cannot be an empty string' ) ;
659
+ assert . assert ( params . ticker . length > 0 , ErrorCode . InvalidData , 'Ticker cannot be an empty string' ) ;
660
+ assert . assert ( params . name . length > 0 , ErrorCode . InvalidData , 'Name cannot be an empty string' ) ;
656
661
assert . isNonZeroETHAddressHex ( 'treasuryWallet' , params . treasuryWallet ) ;
657
662
await this . checkWhenNotPausedOrOwner ( ) ;
658
663
const tickerDetails = await this . getTickerDetails ( {
659
664
ticker : params . ticker ,
660
665
} ) ;
661
- assert . assert ( ! tickerDetails . status , 'Ticker already deployed' ) ;
666
+ assert . assert ( ! tickerDetails . status , ErrorCode . AlreadyExists , 'Ticker already deployed' ) ;
662
667
const address = ( await this . web3Wrapper . getAvailableAddressesAsync ( ) ) [ 0 ] ;
663
- assert . assert ( functionsUtils . checksumAddressComparision ( address , tickerDetails . owner ) , 'Not authorised' ) ;
664
- assert . assert ( tickerDetails . expiryDate . getTime ( ) >= Date . now ( ) , 'Ticker reservation is expired' ) ;
668
+ assert . assert (
669
+ functionsUtils . checksumAddressComparision ( address , tickerDetails . owner ) ,
670
+ ErrorCode . Unauthorized ,
671
+ 'Not authorised' ,
672
+ ) ;
673
+ assert . assert (
674
+ tickerDetails . expiryDate . getTime ( ) >= Date . now ( ) ,
675
+ ErrorCode . TickerExpired ,
676
+ 'Ticker reservation is expired' ,
677
+ ) ;
665
678
666
679
// Check PolyToken allowance
667
680
const securityTokenLaunchFee = await this . getSecurityTokenLaunchFee ( ) ;
@@ -670,7 +683,11 @@ export default class SecurityTokenRegistryWrapper extends ContractWrapper {
670
683
await ( await this . polyTokenContract ( ) ) . balanceOf . callAsync ( address ) ,
671
684
FULL_DECIMALS ,
672
685
) ;
673
- assert . assert ( polyBalance . isGreaterThanOrEqualTo ( securityTokenLaunchFee ) , 'Insufficient poly token balance' ) ;
686
+ assert . assert (
687
+ polyBalance . isGreaterThanOrEqualTo ( securityTokenLaunchFee ) ,
688
+ ErrorCode . InsufficientBalance ,
689
+ 'Insufficient poly token balance' ,
690
+ ) ;
674
691
}
675
692
676
693
const version = params . protocolVersion ;
@@ -715,9 +732,13 @@ export default class SecurityTokenRegistryWrapper extends ContractWrapper {
715
732
*/
716
733
public modifyExistingTicker = async ( params : ModifyExistingTickerParams ) => {
717
734
await this . checkOnlyOwner ( ) ;
718
- assert . assert ( params . ticker . length > 0 && params . ticker . length <= 10 , 'Bad ticker' ) ;
719
- assert . assert ( params . expiryDate . getTime ( ) > new Date ( 0 ) . getTime ( ) , 'Bad expiry date' ) ;
720
- assert . assert ( params . registrationDate . getTime ( ) > new Date ( 0 ) . getTime ( ) , 'Bad registration date' ) ;
735
+ assert . assert ( params . ticker . length > 0 && params . ticker . length <= 10 , ErrorCode . InvalidData , 'Bad ticker' ) ;
736
+ assert . assert ( params . expiryDate . getTime ( ) > new Date ( 0 ) . getTime ( ) , ErrorCode . TooEarly , 'Bad expiry date' ) ;
737
+ assert . assert (
738
+ params . registrationDate . getTime ( ) > new Date ( 0 ) . getTime ( ) ,
739
+ ErrorCode . TooEarly ,
740
+ 'Bad registration date' ,
741
+ ) ;
721
742
assert . isNonZeroETHAddressHex ( 'owner' , params . owner ) ;
722
743
if ( params . status ) {
723
744
const address = await this . getSecurityTokenAddress ( { ticker : params . ticker } ) ;
@@ -792,12 +813,20 @@ export default class SecurityTokenRegistryWrapper extends ContractWrapper {
792
813
ticker : params . ticker ,
793
814
} ) ;
794
815
const address = await this . getCallerAddress ( params . txData ) ;
795
- assert . assert ( functionsUtils . checksumAddressComparision ( address , tickerDetails . owner ) , 'Not authorised' ) ;
816
+ assert . assert (
817
+ functionsUtils . checksumAddressComparision ( address , tickerDetails . owner ) ,
818
+ ErrorCode . Unauthorized ,
819
+ 'Not authorised' ,
820
+ ) ;
796
821
if ( tickerDetails . status ) {
797
822
const securityTokenOwner = await ( await this . securityTokenContract (
798
823
await this . getSecurityTokenAddress ( { ticker : params . ticker } ) ,
799
824
) ) . owner . callAsync ( ) ;
800
- assert . assert ( securityTokenOwner === params . newOwner , 'New owner does not match token owner' ) ;
825
+ assert . assert (
826
+ securityTokenOwner === params . newOwner ,
827
+ ErrorCode . PreconditionRequired ,
828
+ 'New owner does not match token owner' ,
829
+ ) ;
801
830
}
802
831
return ( await this . contract ) . transferTickerOwnership . sendTransactionAsync (
803
832
params . newOwner ,
@@ -811,16 +840,20 @@ export default class SecurityTokenRegistryWrapper extends ContractWrapper {
811
840
* Deploys an instance of a new Security Token and records it to the registry
812
841
*/
813
842
public generateSecurityToken = async ( params : GenerateSecurityTokenParams ) => {
814
- assert . assert ( params . ticker . length > 0 , 'Ticker cannot be an empty string' ) ;
815
- assert . assert ( params . name . length > 0 , 'Name cannot be an empty string' ) ;
843
+ assert . assert ( params . ticker . length > 0 , ErrorCode . InvalidData , 'Ticker cannot be an empty string' ) ;
844
+ assert . assert ( params . name . length > 0 , ErrorCode . InvalidData , 'Name cannot be an empty string' ) ;
816
845
await this . checkWhenNotPausedOrOwner ( ) ;
817
846
const tickerDetails = await this . getTickerDetails ( {
818
847
ticker : params . ticker ,
819
848
} ) ;
820
- assert . assert ( ! tickerDetails . status , 'Ticker already deployed' ) ;
849
+ assert . assert ( ! tickerDetails . status , ErrorCode . AlreadyExists , 'Ticker already deployed' ) ;
821
850
const address = ( await this . web3Wrapper . getAvailableAddressesAsync ( ) ) [ 0 ] ;
822
- assert . assert ( functionsUtils . checksumAddressComparision ( address , tickerDetails . owner ) , 'Not authorised' ) ;
823
- assert . assert ( tickerDetails . expiryDate . getTime ( ) >= Date . now ( ) , 'Ticker gets expired' ) ;
851
+ assert . assert (
852
+ functionsUtils . checksumAddressComparision ( address , tickerDetails . owner ) ,
853
+ ErrorCode . Unauthorized ,
854
+ 'Not authorised' ,
855
+ ) ;
856
+ assert . assert ( tickerDetails . expiryDate . getTime ( ) >= Date . now ( ) , ErrorCode . TooEarly , 'Ticker gets expired' ) ;
824
857
825
858
// Check PolyToken allowance
826
859
const securityTokenLaunchFee = await this . getSecurityTokenLaunchFee ( ) ;
@@ -829,7 +862,11 @@ export default class SecurityTokenRegistryWrapper extends ContractWrapper {
829
862
await ( await this . polyTokenContract ( ) ) . balanceOf . callAsync ( address ) ,
830
863
FULL_DECIMALS ,
831
864
) ;
832
- assert . assert ( polyBalance . isGreaterThanOrEqualTo ( securityTokenLaunchFee ) , 'Insufficient Poly token allowance' ) ;
865
+ assert . assert (
866
+ polyBalance . isGreaterThanOrEqualTo ( securityTokenLaunchFee ) ,
867
+ ErrorCode . InsufficientBalance ,
868
+ 'Insufficient Poly token allowance' ,
869
+ ) ;
833
870
}
834
871
835
872
return ( await this . contract ) . generateSecurityToken . sendTransactionAsync (
@@ -891,11 +928,12 @@ export default class SecurityTokenRegistryWrapper extends ContractWrapper {
891
928
* Modifies the ticker details. Only Polymath has the ability to do so.
892
929
*/
893
930
public modifyTicker = async ( params : ModifyTickerParams ) => {
894
- assert . assert ( params . ticker . length > 0 , 'Ticker cannot be an empty string' ) ;
895
- assert . assert ( params . ticker . length <= 10 , 'Ticker length can not be greater than 10' ) ;
931
+ assert . assert ( params . ticker . length > 0 , ErrorCode . InvalidData , 'Ticker cannot be an empty string' ) ;
932
+ assert . assert ( params . ticker . length <= 10 , ErrorCode . InvalidData , 'Ticker length can not be greater than 10' ) ;
896
933
await this . checkOnlyOwner ( ) ;
897
934
assert . assert (
898
935
params . registrationDate . getTime ( ) <= params . expiryDate . getTime ( ) ,
936
+ ErrorCode . TooLate ,
899
937
'Registration date should < expiry date' ,
900
938
) ;
901
939
assert . isETHAddressHex ( 'owner' , params . owner ) ;
@@ -932,7 +970,7 @@ export default class SecurityTokenRegistryWrapper extends ContractWrapper {
932
970
*/
933
971
public changeExpiryLimit = async ( params : ChangeExpiryLimitParams ) => {
934
972
await this . checkOnlyOwner ( ) ;
935
- assert . assert ( params . newExpiry . toNumber ( ) >= 86400 , 'Expiry should >= 1 day' ) ;
973
+ assert . assert ( params . newExpiry . toNumber ( ) >= 86400 , ErrorCode . TooEarly , 'Expiry should >= 1 day' ) ;
936
974
return ( await this . contract ) . changeExpiryLimit . sendTransactionAsync (
937
975
params . newExpiry ,
938
976
params . txData ,
@@ -982,7 +1020,7 @@ export default class SecurityTokenRegistryWrapper extends ContractWrapper {
982
1020
* Called by the owner to pause, triggers stopped state
983
1021
*/
984
1022
public pause = async ( params : TxParams ) => {
985
- assert . assert ( ! ( await this . isPaused ( ) ) , 'Contract is paused' ) ;
1023
+ assert . assert ( ! ( await this . isPaused ( ) ) , ErrorCode . ContractPaused , 'Contract is paused' ) ;
986
1024
await this . checkOnlyOwner ( ) ;
987
1025
return ( await this . contract ) . pause . sendTransactionAsync ( params . txData , params . safetyFactor ) ;
988
1026
} ;
@@ -991,7 +1029,7 @@ export default class SecurityTokenRegistryWrapper extends ContractWrapper {
991
1029
* Called by the owner to unpause, returns to normal state
992
1030
*/
993
1031
public unpause = async ( params : TxParams ) => {
994
- assert . assert ( await this . isPaused ( ) , 'Contract is already not paused' ) ;
1032
+ assert . assert ( await this . isPaused ( ) , ErrorCode . PreconditionRequired , 'Contract is already not paused' ) ;
995
1033
await this . checkOnlyOwner ( ) ;
996
1034
return ( await this . contract ) . unpause . sendTransactionAsync ( params . txData , params . safetyFactor ) ;
997
1035
} ;
@@ -1002,7 +1040,7 @@ export default class SecurityTokenRegistryWrapper extends ContractWrapper {
1002
1040
public changeTickerRegistrationFee = async ( params : ChangeFeeParams ) => {
1003
1041
await this . checkOnlyOwner ( ) ;
1004
1042
const actualFee = await this . getTickerRegistrationFee ( ) ;
1005
- assert . assert ( ! actualFee . eq ( params . newFee ) , 'Fee not changed' ) ;
1043
+ assert . assert ( ! actualFee . eq ( params . newFee ) , ErrorCode . PreconditionRequired , 'Fee not changed' ) ;
1006
1044
return ( await this . contract ) . changeTickerRegistrationFee . sendTransactionAsync (
1007
1045
valueToWei ( params . newFee , FULL_DECIMALS ) ,
1008
1046
params . txData ,
@@ -1016,7 +1054,7 @@ export default class SecurityTokenRegistryWrapper extends ContractWrapper {
1016
1054
public changeSecurityLaunchFee = async ( params : ChangeFeeParams ) => {
1017
1055
await this . checkOnlyOwner ( ) ;
1018
1056
const actualFee = await this . getSecurityTokenLaunchFee ( ) ;
1019
- assert . assert ( ! actualFee . eq ( params . newFee ) , 'Fee not changed' ) ;
1057
+ assert . assert ( ! actualFee . eq ( params . newFee ) , ErrorCode . PreconditionRequired , 'Fee not changed' ) ;
1020
1058
return ( await this . contract ) . changeSecurityLaunchFee . sendTransactionAsync (
1021
1059
valueToWei ( params . newFee , FULL_DECIMALS ) ,
1022
1060
params . txData ,
@@ -1144,7 +1182,7 @@ export default class SecurityTokenRegistryWrapper extends ContractWrapper {
1144
1182
break ;
1145
1183
}
1146
1184
default : {
1147
- assert . assert ( false , 'Missing fee type' ) ;
1185
+ assert . assert ( false , ErrorCode . InvalidData , 'Missing fee type' ) ;
1148
1186
break ;
1149
1187
}
1150
1188
}
@@ -1229,7 +1267,11 @@ export default class SecurityTokenRegistryWrapper extends ContractWrapper {
1229
1267
( await this . web3Wrapper . getAvailableAddressesAsync ( ) ) [ 0 ] ,
1230
1268
)
1231
1269
) {
1232
- assert . assert ( ! ( await this . isPaused ( ) ) , 'Msg sender is not owner and the contract is paused' ) ;
1270
+ assert . assert (
1271
+ ! ( await this . isPaused ( ) ) ,
1272
+ ErrorCode . Unauthorized ,
1273
+ 'Msg sender is not owner and the contract is paused' ,
1274
+ ) ;
1233
1275
}
1234
1276
} ;
1235
1277
@@ -1239,32 +1281,42 @@ export default class SecurityTokenRegistryWrapper extends ContractWrapper {
1239
1281
await this . owner ( ) ,
1240
1282
( await this . web3Wrapper . getAvailableAddressesAsync ( ) ) [ 0 ] ,
1241
1283
) ,
1284
+ ErrorCode . Unauthorized ,
1242
1285
'Msg sender must be owner' ,
1243
1286
) ;
1244
1287
} ;
1245
1288
1246
1289
private checkRegisterTickerRequirements = async ( ticker : string , owner : string ) => {
1247
1290
assert . isETHAddressHex ( 'owner' , owner ) ;
1248
- assert . assert ( ticker . length > 0 && ticker . length <= 10 , 'Bad ticker, must be 1 to 10 characters' ) ;
1291
+ assert . assert (
1292
+ ticker . length > 0 && ticker . length <= 10 ,
1293
+ ErrorCode . InvalidData ,
1294
+ 'Bad ticker, must be 1 to 10 characters' ,
1295
+ ) ;
1249
1296
assert . assert (
1250
1297
await this . tickerAvailable ( {
1251
1298
ticker,
1252
1299
} ) ,
1300
+ ErrorCode . AlreadyExists ,
1253
1301
'Ticker is not available' ,
1254
1302
) ;
1255
1303
1256
1304
// Check poly token allowance
1257
1305
const tickerRegistrationFee = await this . getTickerRegistrationFee ( ) ;
1258
1306
if ( tickerRegistrationFee . isGreaterThan ( BIG_NUMBER_ZERO ) ) {
1259
1307
const polyBalance = weiToValue ( await ( await this . polyTokenContract ( ) ) . balanceOf . callAsync ( owner ) , FULL_DECIMALS ) ;
1260
- assert . assert ( polyBalance . isGreaterThanOrEqualTo ( tickerRegistrationFee ) , 'Insufficient poly token balance' ) ;
1308
+ assert . assert (
1309
+ polyBalance . isGreaterThanOrEqualTo ( tickerRegistrationFee ) ,
1310
+ ErrorCode . InsufficientBalance ,
1311
+ 'Insufficient poly token balance' ,
1312
+ ) ;
1261
1313
}
1262
1314
} ;
1263
1315
1264
1316
private checkModifyST = async ( ticker : string , deployedAt : Date , owner : string , securityToken : string ) => {
1265
1317
await this . checkOnlyOwner ( ) ;
1266
- assert . assert ( ticker . length > 0 && ticker . length <= 10 , 'Bad ticker' ) ;
1267
- assert . assert ( deployedAt . getTime ( ) > new Date ( 0 ) . getTime ( ) , 'Bad deployed date' ) ;
1318
+ assert . assert ( ticker . length > 0 && ticker . length <= 10 , ErrorCode . InvalidData , 'Bad ticker' ) ;
1319
+ assert . assert ( deployedAt . getTime ( ) > new Date ( 0 ) . getTime ( ) , ErrorCode . TooEarly , 'Bad deployed date' ) ;
1268
1320
assert . isNonZeroETHAddressHex ( 'owner' , owner ) ;
1269
1321
assert . isNonZeroETHAddressHex ( 'securityToken' , securityToken ) ;
1270
1322
assert . isNonZeroETHAddressHex (
0 commit comments