github.com/intfoundation/intchain@v0.0.0-20220727031208-4316ad31ca73/internal/intapi/api_test.go (about)

     1  package intapi
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"github.com/intfoundation/intchain/common"
     7  	"github.com/intfoundation/intchain/common/hexutil"
     8  	"github.com/intfoundation/intchain/common/math"
     9  	"github.com/intfoundation/intchain/crypto"
    10  	intAbi "github.com/intfoundation/intchain/intabi/abi"
    11  	"testing"
    12  	"time"
    13  )
    14  
    15  type MethoadParams struct {
    16  	Input   string
    17  	Args    interface{}
    18  	FunType intAbi.FunctionType
    19  }
    20  
    21  var inputHex = "0x91e8537e000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000044c696b6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001068747470733a2f2f6c696b652e636f6d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000104531353733453236384138313835303300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c4d792076616c696461746f720000000000000000000000000000000000000000"
    22  
    23  var inputArray = []*MethoadParams{
    24  	{
    25  		Input:   "0x49339f0f00000000000000000000000026ee0906f135303a0ab66b3196efabd0853c481b",
    26  		Args:    intAbi.DelegateArgs{},
    27  		FunType: intAbi.Delegate,
    28  	},
    29  	{
    30  		Input:   "0x91e8537e000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000044c696b6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001068747470733a2f2f6c696b652e636f6d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000104531353733453236384138313835303300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c4d792076616c696461746f720000000000000000000000000000000000000000",
    31  		Args:    intAbi.EditValidatorArgs{},
    32  		FunType: intAbi.EditValidator,
    33  	},
    34  }
    35  
    36  func TestMethodId(t *testing.T) {
    37  	method := intAbi.ChainABI.Methods[intAbi.Delegate.String()]
    38  	methdid := method.ID()
    39  
    40  	fmt.Printf("method id, %v", hexutil.Encode(methdid))
    41  }
    42  
    43  func TestABI_UnpackMethodInputs(t *testing.T) {
    44  
    45  	//inputByte, err := hexutil.Decode(inputHex)
    46  	//if err != nil {
    47  	//	t.Error(err)
    48  	//}
    49  	//
    50  	//function, err := intAbi.FunctionTypeFromId(inputByte[:4])
    51  	//if err != nil {
    52  	//	t.Error(err)
    53  	//}
    54  	//fmt.Printf("function=%v\n", function)
    55  	//
    56  	////var args intAbi.CandidateArgs
    57  	//var args intAbi.DelegateArgs
    58  	////var args intAbi.EditValidatorArgs
    59  	//
    60  	//err = intAbi.ChainABI.UnpackMethodInputs(&args, function.String(), inputByte[4:])
    61  	//if err != nil {
    62  	//	t.Error(err)
    63  	//}
    64  	//fmt.Printf("unpack method %v\n", args.Moniker)
    65  	//fmt.Printf("unpack website %v\n", args.Website)
    66  	//fmt.Printf("unpack identify %v\n", args.Identity)
    67  	//fmt.Printf("unpack details %v\n", args.Details)
    68  
    69  	for _, v := range inputArray {
    70  		inputByte, err := hexutil.Decode(v.Input)
    71  		if err != nil {
    72  			t.Error(err)
    73  		}
    74  
    75  		err = checkFunType(inputByte, v.FunType)
    76  		if err != nil {
    77  			t.Error(err)
    78  		}
    79  
    80  		unpackArgs, err := unpackMethod(inputByte, v.FunType)
    81  		if err != nil {
    82  			t.Error(err)
    83  		} else {
    84  			t.Logf("unpack %v success,  args %v", v.FunType.String(), unpackArgs.Candidate.String())
    85  		}
    86  
    87  	}
    88  }
    89  
    90  func checkFunType(input []byte, funType intAbi.FunctionType) error {
    91  	function, err := intAbi.FunctionTypeFromId(input[:4])
    92  
    93  	if err != nil {
    94  		return err
    95  	}
    96  
    97  	if !bytes.Equal([]byte(function.String()), []byte(funType.String())) {
    98  		return fmt.Errorf("method mismatch want %v, but %v", funType.String(), function.String())
    99  	}
   100  
   101  	return nil
   102  }
   103  
   104  func unpackMethod(input []byte, funType intAbi.FunctionType) (unpackArgs intAbi.DelegateArgs, err error) {
   105  	var args intAbi.DelegateArgs
   106  
   107  	err = intAbi.ChainABI.UnpackMethodInputs(&args, funType.String(), input[4:])
   108  	if err != nil {
   109  		return unpackArgs, err
   110  	}
   111  
   112  	return args, nil
   113  
   114  }
   115  
   116  var FromAddr = "INT3MccCA7EtMzijJa2zjxoiSYzbNLE4"
   117  var PubKey = "0x618CEAF6AD449B826E2521222A94426B82800202332251F0929EC47B36A647C65E00D2EA34C07A8EF7953C2E1555D8321449423CCFB0B64BB13090E7A433114D68F1C1891BAA20101E5CC8E2B10E207F5D21D1A1116547E1EED5E92FDFE4F5E58119C5267B82AE06BBA5016827396B74E1ECDCC3801746242CA24C7749EB2F88"
   118  var Amount = "0x152d02c7e14af68000000"
   119  var Salt = "like"
   120  var VoteHash1 = "0xc6335e23dd8ba330b2d3c34acdeb2dfd0b07d30dfc2d5f9ca1b0d62e147788f0" // false
   121  var VoteHash2 = "0xa431ab9cb5d2750faeed74945d10c69372b938c2470d5b140de29f4d4aa22025" // true
   122  var VoteHash3 = "0xb2aa67b3cf56dcb41097d72024962c03d4fba2a9892cc37e348243b85bf58c27" // false
   123  
   124  func TestVoteHash(t *testing.T) {
   125  	pubKey, err := hexutil.Decode(PubKey)
   126  	if err != nil {
   127  		t.Fatal(err)
   128  	}
   129  	byteData := [][]byte{
   130  		[]byte(FromAddr),
   131  		pubKey,
   132  		common.LeftPadBytes(math.MustParseBig256("1600000000000000000000000").Bytes(), 1),
   133  		[]byte(Salt),
   134  	}
   135  
   136  	hash := crypto.Keccak256Hash(concatCopyPreAllocate(byteData))
   137  	fmt.Printf("vote hash %v\n", hash.String())
   138  
   139  }
   140  
   141  func TestGoTime(t *testing.T) {
   142  	nowTime := time.Now().Unix()
   143  	fmt.Printf("now %v\n", nowTime)
   144  
   145  	d := 24 * time.Hour
   146  	fmt.Printf("duration %v\n", d)
   147  	fmt.Printf("duration string %v\n", d.String())
   148  	fmt.Printf("duration seconds %v\n", d.Seconds())
   149  }