github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/evm/client/utils/utils_test.go (about)

     1  package utils
     2  
     3  import (
     4  	"os"
     5  	"testing"
     6  
     7  	fbchain "github.com/fibonacci-chain/fbc/app/types"
     8  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
     9  	"github.com/fibonacci-chain/fbc/x/evm/types"
    10  	"github.com/stretchr/testify/require"
    11  )
    12  
    13  const (
    14  	expectedManageContractDeploymentWhitelistProposalJSON = `{
    15    "title": "default title",
    16    "description": "default description",
    17    "distributor_addresses": [
    18      "fb1suh2tdzzphg7x7c9hvadntqc00ar9xgjpj9snw",
    19      "fb1lz3l5hnchv4wrl759kjvl33dpfr66f7x5fp68c"
    20    ],
    21    "is_added": true,
    22    "deposit": [
    23      {
    24        "denom": "fibo",
    25        "amount": "100.000000000000000000"
    26      }
    27    ]
    28  }`
    29  	expectedManageContractBlockedListProposalJSON = `{
    30    "title": "default title",
    31    "description": "default description",
    32    "contract_addresses": [
    33      "fb1suh2tdzzphg7x7c9hvadntqc00ar9xgjpj9snw",
    34      "fb1lz3l5hnchv4wrl759kjvl33dpfr66f7x5fp68c"
    35    ],
    36    "is_added": true,
    37    "deposit": [
    38      {
    39        "denom": "fibo",
    40        "amount": "100.000000000000000000"
    41      }
    42    ]
    43  }`
    44  	expectedManageContractMethodBlockedListProposalJSON = `{
    45    "title": "default title",
    46    "description": "default description",
    47    "contract_addresses":[
    48          {
    49              "address": "fb1suh2tdzzphg7x7c9hvadntqc00ar9xgjpj9snw",
    50              "block_methods": [
    51                  {
    52                      "sign": "0x371303c0",
    53                      "extra": "inc()"
    54                  },
    55                  {
    56                      "sign": "0x579be378",
    57                      "extra": "onc()"
    58                  }
    59              ]
    60          },
    61  		{
    62              "address": "fb1lz3l5hnchv4wrl759kjvl33dpfr66f7x5fp68c",
    63              "block_methods": [
    64                  {
    65                      "sign": "0x371303c0",
    66                      "extra": "inc()"
    67                  },
    68                  {
    69                      "sign": "0x579be378",
    70                      "extra": "onc()"
    71                  }
    72              ]
    73          }
    74    ],
    75    "is_added": true,
    76    "deposit": [
    77      {
    78        "denom": "fibo",
    79        "amount": "100.000000000000000000"
    80      }
    81    ]
    82  }`
    83  	fileName                 = "./proposal.json"
    84  	expectedTitle            = "default title"
    85  	expectedDescription      = "default description"
    86  	expectedDistributorAddr1 = "fb1suh2tdzzphg7x7c9hvadntqc00ar9xgjpj9snw"
    87  	expectedDistributorAddr2 = "fb1lz3l5hnchv4wrl759kjvl33dpfr66f7x5fp68c"
    88  	expectedMethodSign1      = "0x371303c0"
    89  	expectedMethodExtra1     = "inc()"
    90  	expectedMethodSign2      = "0x579be378"
    91  	expectedMethodExtra2     = "onc()"
    92  )
    93  
    94  func init() {
    95  	config := sdk.GetConfig()
    96  	fbchain.SetBech32Prefixes(config)
    97  }
    98  
    99  func TestParseManageContractDeploymentWhitelistProposalJSON(t *testing.T) {
   100  	// create JSON file
   101  	f, err := os.OpenFile(fileName, os.O_RDWR|os.O_CREATE, 0666)
   102  	require.NoError(t, err)
   103  	_, err = f.WriteString(expectedManageContractDeploymentWhitelistProposalJSON)
   104  	require.NoError(t, err)
   105  	require.NoError(t, f.Close())
   106  
   107  	// remove the temporary JSON file
   108  	defer os.Remove(fileName)
   109  
   110  	proposal, err := ParseManageContractDeploymentWhitelistProposalJSON(types.ModuleCdc, fileName)
   111  	require.NoError(t, err)
   112  	require.Equal(t, expectedTitle, proposal.Title)
   113  	require.Equal(t, expectedDescription, proposal.Description)
   114  	require.True(t, proposal.IsAdded)
   115  	require.Equal(t, 1, len(proposal.Deposit))
   116  	require.Equal(t, sdk.DefaultBondDenom, proposal.Deposit[0].Denom)
   117  	require.True(t, sdk.NewDec(100).Equal(proposal.Deposit[0].Amount))
   118  	require.Equal(t, 2, len(proposal.DistributorAddrs))
   119  	require.Equal(t, expectedDistributorAddr1, proposal.DistributorAddrs[0].String())
   120  	require.Equal(t, expectedDistributorAddr2, proposal.DistributorAddrs[1].String())
   121  }
   122  
   123  func TestParseManageContractBlockedListProposalJSON(t *testing.T) {
   124  	// create JSON file
   125  	f, err := os.OpenFile(fileName, os.O_RDWR|os.O_CREATE, 0666)
   126  	require.NoError(t, err)
   127  	_, err = f.WriteString(expectedManageContractBlockedListProposalJSON)
   128  	require.NoError(t, err)
   129  	require.NoError(t, f.Close())
   130  
   131  	// remove the temporary JSON file
   132  	defer os.Remove(fileName)
   133  
   134  	proposal, err := ParseManageContractBlockedListProposalJSON(types.ModuleCdc, fileName)
   135  	require.NoError(t, err)
   136  	require.Equal(t, expectedTitle, proposal.Title)
   137  	require.Equal(t, expectedDescription, proposal.Description)
   138  	require.True(t, proposal.IsAdded)
   139  	require.Equal(t, 1, len(proposal.Deposit))
   140  	require.Equal(t, sdk.DefaultBondDenom, proposal.Deposit[0].Denom)
   141  	require.True(t, sdk.NewDec(100).Equal(proposal.Deposit[0].Amount))
   142  	require.Equal(t, 2, len(proposal.ContractAddrs))
   143  	require.Equal(t, expectedDistributorAddr1, proposal.ContractAddrs[0].String())
   144  	require.Equal(t, expectedDistributorAddr2, proposal.ContractAddrs[1].String())
   145  }
   146  func TestParseManageContractMethodBlockedListProposalJSON(t *testing.T) {
   147  	// create JSON file
   148  	f, err := os.OpenFile(fileName, os.O_RDWR|os.O_CREATE, 0666)
   149  	require.NoError(t, err)
   150  	_, err = f.WriteString(expectedManageContractMethodBlockedListProposalJSON)
   151  	require.NoError(t, err)
   152  	require.NoError(t, f.Close())
   153  
   154  	// remove the temporary JSON file
   155  	defer os.Remove(fileName)
   156  
   157  	proposal, err := ParseManageContractMethodBlockedListProposalJSON(types.ModuleCdc, fileName)
   158  	require.NoError(t, err)
   159  	require.Equal(t, expectedTitle, proposal.Title)
   160  	require.Equal(t, expectedDescription, proposal.Description)
   161  	require.True(t, proposal.IsAdded)
   162  	require.Equal(t, 1, len(proposal.Deposit))
   163  	require.Equal(t, sdk.DefaultBondDenom, proposal.Deposit[0].Denom)
   164  	require.True(t, sdk.NewDec(100).Equal(proposal.Deposit[0].Amount))
   165  	require.Equal(t, 2, len(proposal.ContractList))
   166  
   167  	methods := types.ContractMethods{
   168  		types.ContractMethod{
   169  			Sign:  expectedMethodSign1,
   170  			Extra: expectedMethodExtra1,
   171  		},
   172  		types.ContractMethod{
   173  			Sign:  expectedMethodSign2,
   174  			Extra: expectedMethodExtra2,
   175  		},
   176  	}
   177  	addr1, err := sdk.AccAddressFromBech32(expectedDistributorAddr1)
   178  	require.NoError(t, err)
   179  	addr2, err := sdk.AccAddressFromBech32(expectedDistributorAddr2)
   180  	require.NoError(t, err)
   181  	expectBc1 := types.NewBlockContract(addr1, methods)
   182  	expectBc2 := types.NewBlockContract(addr2, methods)
   183  	ok := types.BlockedContractListIsEqual(t, proposal.ContractList, types.BlockedContractList{*expectBc1, *expectBc2})
   184  	require.True(t, ok)
   185  }
   186  
   187  func TestParseManageSysContractAddressProposalJSON(t *testing.T) {
   188  	defaultSysContractAddressProposalJSON := `{
   189    "title":"default title",
   190    "description":"default description",
   191    "contract_address": "0xA4FFCda536CC8fF1eeFe32D32EE943b9B4e70414",
   192    "is_added":true,
   193    "deposit": [
   194      {
   195        "denom": "fibo",
   196        "amount": "100.000000000000000000"
   197      }
   198    ]
   199  }`
   200  	// create JSON file
   201  	filePathName := "./defaultSysContractAddressProposalJSON.json"
   202  	f, err := os.OpenFile(filePathName, os.O_RDWR|os.O_CREATE, 0666)
   203  	require.NoError(t, err)
   204  	_, err = f.WriteString(defaultSysContractAddressProposalJSON)
   205  	require.NoError(t, err)
   206  	require.NoError(t, f.Close())
   207  
   208  	// remove the temporary JSON file
   209  	defer os.Remove(filePathName)
   210  
   211  	proposal, err := ParseManageSysContractAddressProposalJSON(types.ModuleCdc, filePathName)
   212  	require.NoError(t, err)
   213  	require.Equal(t, expectedTitle, proposal.Title)
   214  	require.Equal(t, expectedDescription, proposal.Description)
   215  	require.True(t, proposal.IsAdded)
   216  	require.Equal(t, 1, len(proposal.Deposit))
   217  	require.Equal(t, sdk.DefaultBondDenom, proposal.Deposit[0].Denom)
   218  	require.True(t, sdk.NewDec(100).Equal(proposal.Deposit[0].Amount))
   219  }