github.com/status-im/status-go@v1.1.0/services/communitytokens/api_test.go (about)

     1  package communitytokens
     2  
     3  import (
     4  	"math/big"
     5  	"testing"
     6  
     7  	"github.com/stretchr/testify/require"
     8  
     9  	"github.com/ethereum/go-ethereum/common"
    10  
    11  	"github.com/status-im/status-go/services/wallet/bigint"
    12  )
    13  
    14  func TestDeploymentParameters(t *testing.T) {
    15  	var testCases = []struct {
    16  		name       string
    17  		parameters DeploymentParameters
    18  		isError    bool
    19  	}{
    20  		{
    21  			name:       "emptyName",
    22  			parameters: DeploymentParameters{"", "SYMBOL", &bigint.BigInt{Int: big.NewInt(int64(123))}, false, false, false, "", "", "", "", "", nil, "", 0},
    23  			isError:    true,
    24  		},
    25  		{
    26  			name:       "emptySymbol",
    27  			parameters: DeploymentParameters{"NAME", "", &bigint.BigInt{Int: big.NewInt(123)}, false, false, false, "", "", "", "", "", nil, "", 0},
    28  			isError:    true,
    29  		},
    30  		{
    31  			name:       "negativeSupply",
    32  			parameters: DeploymentParameters{"NAME", "SYM", &bigint.BigInt{Int: big.NewInt(-123)}, false, false, false, "", "", "", "", "", nil, "", 0},
    33  			isError:    true,
    34  		},
    35  		{
    36  			name:       "zeroSupply",
    37  			parameters: DeploymentParameters{"NAME", "SYM", &bigint.BigInt{Int: big.NewInt(0)}, false, false, false, "", "", "", "", "", nil, "", 0},
    38  			isError:    false,
    39  		},
    40  		{
    41  			name:       "negativeSupplyAndInfinite",
    42  			parameters: DeploymentParameters{"NAME", "SYM", &bigint.BigInt{Int: big.NewInt(-123)}, true, false, false, "", "", "", "", "", nil, "", 0},
    43  			isError:    false,
    44  		},
    45  		{
    46  			name:       "supplyGreaterThanMax",
    47  			parameters: DeploymentParameters{"NAME", "SYM", &bigint.BigInt{Int: big.NewInt(maxSupply + 1)}, false, false, false, "", "", "", "", "", nil, "", 0},
    48  			isError:    true,
    49  		},
    50  		{
    51  			name:       "supplyIsMax",
    52  			parameters: DeploymentParameters{"NAME", "SYM", &bigint.BigInt{Int: big.NewInt(maxSupply)}, false, false, false, "", "", "", "", "", nil, "", 0},
    53  			isError:    false,
    54  		},
    55  	}
    56  
    57  	for _, tc := range testCases {
    58  		t.Run(tc.name, func(t *testing.T) {
    59  			err := tc.parameters.Validate(false)
    60  			if tc.isError {
    61  				require.Error(t, err)
    62  			} else {
    63  				require.NoError(t, err)
    64  			}
    65  		})
    66  	}
    67  
    68  	notInfiniteSupplyParams := DeploymentParameters{"NAME", "SYM", &bigint.BigInt{Int: big.NewInt(123)}, false, false, false, "", "", "", "", "", nil, "", 0}
    69  	requiredSupply := big.NewInt(123)
    70  	require.Equal(t, notInfiniteSupplyParams.GetSupply(), requiredSupply)
    71  	infiniteSupplyParams := DeploymentParameters{"NAME", "SYM", &bigint.BigInt{Int: big.NewInt(123)}, true, false, false, "", "", "", "", "", nil, "", 0}
    72  	requiredSupply = infiniteSupplyParams.GetInfiniteSupply()
    73  	require.Equal(t, infiniteSupplyParams.GetSupply(), requiredSupply)
    74  }
    75  
    76  func TestTypedDataHash(t *testing.T) {
    77  	sigHash := common.Hex2Bytes("dd91c30357aafeb2792b5f0facbd83995943c1ea113a906ebbeb58bfeb27dfc2")
    78  	domainSep := common.Hex2Bytes("4a672b5a08e88d37f7239165a0c9e03a01196587d52c638c0c99cbee5ba527c8")
    79  	contractAddr := "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC"
    80  	signer := "0x54e3922e97e334905fb489be7c5df1f83cb1ce58"
    81  	deployer := "0x7c8999dC9a822c1f0Df42023113EDB4FDd543266"
    82  	goodHashResult := "0xccbb375343347491706cf4b43796f7b96ccc89c9e191a8b78679daeba1684ec7"
    83  
    84  	typedHash, err := typedStructuredDataHash(domainSep, signer, deployer, contractAddr, 420)
    85  	require.NoError(t, err, "creating typed structured data hash")
    86  	require.Equal(t, goodHashResult, typedHash.String())
    87  
    88  	customTypedHash := customTypedStructuredDataHash(domainSep, sigHash, signer, deployer)
    89  	require.Equal(t, goodHashResult, customTypedHash.String())
    90  }
    91  
    92  func TestCompressedKeyToEthAddress(t *testing.T) {
    93  	ethAddr, err := convert33BytesPubKeyToEthAddress("0x02bcbe39785b55a22383f82ac631ea7500e204627369c4ea01d9296af0ea573f57")
    94  	require.NoError(t, err, "converting pub key to address")
    95  	require.Equal(t, "0x0A1ec0002dDB927B03049F1aD8D589aBEA4Ba4b3", ethAddr.Hex())
    96  }