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 }