@@ -240,8 +240,7 @@ async function manageExistingDividend(dividendIndex) {
240
240
let dividendTokenSymbol = 'ETH' ;
241
241
if ( dividendsType === 'ERC20' ) {
242
242
dividendTokenAddress = await currentDividendsModule . methods . dividendTokens ( dividendIndex ) . call ( ) ;
243
- let erc20token = new web3 . eth . Contract ( abis . erc20 ( ) , dividendTokenAddress ) ;
244
- dividendTokenSymbol = await erc20token . methods . symbol ( ) . call ( ) ;
243
+ dividendTokenSymbol = await getERC20TokenSymbol ( dividendTokenAddress ) ;
245
244
}
246
245
let progress = await currentDividendsModule . methods . getDividendProgress ( dividendIndex ) . call ( ) ;
247
246
let investorArray = progress [ 0 ] ;
@@ -387,10 +386,11 @@ async function createDividends() {
387
386
limitMessage : "Must be a valid ERC20 address" ,
388
387
defaultInput : polyToken . options . address
389
388
} ) ;
390
- token = new web3 . eth . Contract ( abis . erc20 ( ) , dividendToken ) ;
391
- try {
392
- dividendSymbol = await token . methods . symbol ( ) . call ( ) ;
393
- } catch ( err ) {
389
+ let erc20Symbol = await getERC20TokenSymbol ( dividendToken ) ;
390
+ if ( erc20Symbol != null ) {
391
+ token = new web3 . eth . Contract ( abis . erc20 ( ) , dividendToken ) ;
392
+ dividendSymbol = erc20Symbol ;
393
+ } else {
394
394
console . log ( chalk . red ( `${ dividendToken } is not a valid ERC20 token address!!` ) ) ;
395
395
}
396
396
} while ( dividendSymbol === 'ETH' ) ;
@@ -738,8 +738,7 @@ async function getDividends() {
738
738
let tokenSymbol = 'ETH' ;
739
739
if ( dividendsType === 'ERC20' ) {
740
740
let tokenAddress = await currentDividendsModule . methods . dividendTokens ( i ) . call ( ) ;
741
- let erc20token = new web3 . eth . Contract ( abis . erc20 ( ) , tokenAddress ) ;
742
- tokenSymbol = await erc20token . methods . symbol ( ) . call ( ) ;
741
+ tokenSymbol = await getERC20TokenSymbol ( tokenAddress ) ;
743
742
}
744
743
dividends . push (
745
744
new DividendData (
@@ -885,6 +884,22 @@ async function selectToken() {
885
884
return result ;
886
885
}
887
886
887
+ async function getERC20TokenSymbol ( tokenAddress ) {
888
+ let tokenSymbol = null ;
889
+ try {
890
+ let erc20token = new web3 . eth . Contract ( abis . erc20 ( ) , tokenAddress ) ;
891
+ tokenSymbol = await erc20token . methods . symbol ( ) . call ( ) ;
892
+ } catch ( err ) {
893
+ try {
894
+ // Some ERC20 tokens use bytes32 for symbol instead of string
895
+ let erc20token = new web3 . eth . Contract ( abis . alternativeErc20 ( ) , tokenAddress ) ;
896
+ tokenSymbol = web3 . utils . hexToUtf8 ( await erc20token . methods . symbol ( ) . call ( ) ) ;
897
+ } catch ( err ) {
898
+ }
899
+ }
900
+ return tokenSymbol ;
901
+ }
902
+
888
903
module . exports = {
889
904
executeApp : async function ( _tokenSymbol ) {
890
905
await initialize ( _tokenSymbol ) ;
0 commit comments