diff --git a/services/wallet/thirdparty/fourbyte/client.go b/services/wallet/thirdparty/fourbyte/client.go index ad8d166c1..32fa44df8 100644 --- a/services/wallet/thirdparty/fourbyte/client.go +++ b/services/wallet/thirdparty/fourbyte/client.go @@ -53,7 +53,6 @@ func (c *Client) Run(data string) (*thirdparty.DataParsed, error) { return nil, errors.New("input is badly formatted") } methodSigData := data[2:10] - fmt.Println(methodSigData) url := fmt.Sprintf("https://www.4byte.directory/api/v1/signatures/?hex_signature=%s", methodSigData) resp, err := c.DoQuery(url) if err != nil { @@ -70,7 +69,6 @@ func (c *Client) Run(data string) (*thirdparty.DataParsed, error) { if err != nil { return nil, err } - if signatures.Count == 0 { return nil, err } @@ -83,7 +81,11 @@ func (c *Client) Run(data string) (*thirdparty.DataParsed, error) { rs := rgx.FindStringSubmatch(signature.Text) inputs := make([]string, 0) - for index, typ := range strings.Split(rs[1], ",") { + rawInputs := strings.Split(rs[1], ",") + for index, typ := range rawInputs { + if index == len(rawInputs)-1 && typ == "bytes" { + continue + } inputs = append(inputs, fmt.Sprintf("{\"name\":\"%d\",\"type\":\"%s\"}", index, typ)) } @@ -95,6 +97,7 @@ func (c *Client) Run(data string) (*thirdparty.DataParsed, error) { method := contractABI.Methods[name] inputsMap := make(map[string]interface{}) if err := method.Inputs.UnpackIntoMap(inputsMap, []byte(data[10:])); err != nil { + fmt.Println(err) continue } inputsMapString := make(map[string]string) diff --git a/services/wallet/thirdparty/fourbyte/client_test.go b/services/wallet/thirdparty/fourbyte/client_test.go index 89fa3d9e7..32a2d97b2 100644 --- a/services/wallet/thirdparty/fourbyte/client_test.go +++ b/services/wallet/thirdparty/fourbyte/client_test.go @@ -18,9 +18,14 @@ func TestRun(t *testing.T) { "1": "44417128579249187980157595307322491418158007948522794164811090501355597543782", }) - _, err = client.Run("0x70a08231000") - require.NotNil(t, err) - - _, err = client.Run("0x70a082310") - require.NotNil(t, err) + res, err = client.Run("0xb88d4fde000000000000000000000000af1857535160973f42c34cb20f5ed7cd29099ad9000000000000000000000000baa4b7858c3277da9cb9cdadf405f2017afea19a00000000000000000000000000000000000000000000000000000000000000cb00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000360c6ebe") + require.Nil(t, err) + require.Equal(t, res.Signature, "safeTransferFrom(address,address,uint256,bytes)") + require.Equal(t, res.Name, "safeTransferFrom") + require.Equal(t, res.ID, "0x73e0") + require.Equal(t, res.Inputs, map[string]string{ + "0": "0x3030303030303030303030306166313835373533", + "1": "0x3463623230663565643763643239303939616439", + "2": "21796157974083048550319244236929488537086114760591164995666220774418197985333", + }) }