flow-go-sdk icon indicating copy to clipboard operation
flow-go-sdk copied to clipboard

Transaction ID Mismatch: Encoding Issue

Open h0rs3fa11 opened this issue 1 year ago • 2 comments

Instructions

Problem

I encountered an issue with transaction encoding, where the transaction ID returned by calling the ID() function does not match the transaction ID found on the blockchain. After further review, I think this is caused by payloadCanonicalForm(), which was added as a temporary solution for issue #286 since version 0.26.4. https://github.com/onflow/flow-go-sdk/blob/master/transaction.go#L373

Steps to Reproduce

I used several transactions to test this

txID := flow.HexToID(TXID_FROM_BLOCKCHAIN_EXPLORER)
tx, _ := flowClient.GetTransaction(ctx, txID)
fmt.Printf("\nTx ID: %s, \nTx ID from SDK: %s\n", txID.Hex(), tx.ID().Hex())

the results are as follows:

Tx ID: 2e16e084fa64aaa5a7d886ba4c5f1646daa297b9b4e4efa6a006b606573671d3, 
Tx ID from SDK: c42aad97d7d6815c7a11d84f413a4846286bd051d657bef299ad730b20f964a5, 

Tx ID: 35d8dce0c5fd0357af05aa98ff133386c39ecf277c2c745d89125eebf88e33bb, 
Tx ID from SDK: be2147e6dd88e0ebaf289c9bd9e020d02d940d49f99ee399601de3045f8dd096, 

Tx ID: 4aabde51d996ef6f1d3ddb5a68e87fa016b122502d4cd1a7a67a196c4c360ee6, 
Tx ID from SDK: 97563ff30e917834737655c38b1a9d3e3ba8c06c3f297070c0c92110be956bfd, 

Tx ID: 159a6e313ada5feb109033e4d744c746e7f9af4c4ad482bce176f0a6d55913df, 
Tx ID from SDK: 80eca1c33e7df980326cffb6fa81d92a7968f2f49b35b24f5db2b98b850cd5c3, 

Tx ID: 5c31bde864d4bab7861129e9167dc87ddecc11411b4ebd4525a8b288a0cc44b9, 
Tx ID from SDK: eca84a892715ac3b403ed67c0b176f8aba2ffb37d9c732dbbf11dd01fe59cc02, 

Tx ID: 5e5ce254cfae3a85e5bf060b54c5c165c4d0a0a53fb38a73987c79af6d7d20a1, 
Tx ID from SDK: 5ae2c3906ae12a584ec86c1897f0ae0c906fef906d12ba40197750b0607e3010, 

Tx ID: 6a257b002f39742217358220fd2227954d7c5826329940ed8fa37d5fc97ae15e, 
Tx ID from SDK: 7ff38861d0c32f3450e2d5d6fb2ad0b5572ad372e236ce922e5f0a7a7f2ed6ea, 

Tx ID: 7ebc61d0e3b4f67af4127351c45756ec4c2d17e05bc5bfe4550ccf3dd960a406, 
Tx ID from SDK: 59c6ac6850f80d4e551c93d9492081988ef6c5ba0520f6ea66f7ca3dccd94193, 

Tx ID: 818432ec83530c143765ad402f50d6940d5182d4a7f82863528669e5b7cabec2, 
Tx ID from SDK: 9ad6bfd7f4ffbf3048bafd687aa2b80440f091381293d57d27590ee25093fc22, 

Tx ID: 81b2897ace93b4b26a70e22920d60f052870fda747abc311345cfd09d94a1e8d, 
Tx ID from SDK: d8b3d90e04c4b1f0c3299179e5a7367698e838da977c60a370e87d9b829ff09c, 

h0rs3fa11 avatar Apr 11 '23 04:04 h0rs3fa11

ref: https://github.com/onflow/flow-go/issues/4030

bluesign avatar Apr 11 '23 08:04 bluesign

@h0rs3fa11 thank you for reporting. The problem is we didn't define a canonical format, and thus, JS SDK builds a different ID which the PR mentioned fixed, since JSON marshaller in GO adds an extra new line. Not sure what a good workaround would be, but for sure final solution is for the format to be defined, which is the work that's already in progress I believe. Will gather more context and provide another comment.

devbugging avatar Apr 11 '23 10:04 devbugging