firefly-ethconnect icon indicating copy to clipboard operation
firefly-ethconnect copied to clipboard

"value" cannot be passed as a hex string on a SendTransaction request

Open nguyer opened this issue 2 years ago • 3 comments

If I have a smart contract function that is payable I need to set a value field in the JSON object of the request body for a SendTransaction request.

Today if I set this to a string like this:

{
  "value": "0x01"
}

I get the following result in the FireFly explorer:

{
	"id": "default:25a46a6d-961a-47e2-a7e0-5e3aaeb431f3",
	"message": "json: invalid number literal, trying to unmarshal \"\\\"0x01\\\"\" into Number",
	"success": false
}

I think some of the backslash escaping craziness there is actually just added by the UI.

Ethconnect logs the following:

[2022-06-15T12:57:33.507Z]  WARN Failed to process message MsgContext[SendTransaction/default:25a46a6d-961a-47e2-a7e0-5e3aaeb431f3]: json: invalid number literal, trying to unmarshal "\"0x01\"" into Number

nguyer avatar Jun 15 '22 13:06 nguyer

That’s certainly the behaviour as designed today. That those inputs a base 10. The new FFTM connector toolkit is more permissive, using the utility helper FFBigInt from firefly-common.

A PR for an enhancement to also support base16 numbers in ethconnect would be cool.

peterbroadhurst avatar Jun 15 '22 13:06 peterbroadhurst

It does let me pass value as a string though, as long as it is base 10, so I can still express large numbers which is good.

nguyer avatar Jun 15 '22 13:06 nguyer

Yep - I think it uses the “json.Number” string type today

peterbroadhurst avatar Jun 15 '22 13:06 peterbroadhurst