BugFix: Src map type assert fix#370
Conversation
|
Why are you unmarshaling to a map[string]interface{} instead of a structured object? |
| @@ -22,7 +22,12 @@ func DecodeSourceMap(ism map[string]interface{}) (SourceMap, error) { | |||
| sm := SourceMap{} | |||
There was a problem hiding this comment.
Alternative:
buf:=json.Encode(ism)
json.Decode(buf,&sm)
There was a problem hiding this comment.
Can you help me understand why this is better?
There was a problem hiding this comment.
The only reason I bring it up, is that it's easy to get things wrong with reflection. So if there's a way to avoid using it the code would be easier to reason about and less likely that there is an error. So basically, I'm asking if these are simpler alternatives.
Why are you unmarshaling to a map[string]interface{} instead of a structured object?
What I mean is you could use Unmarshal into a real type instead of map[string]interface{}, that way Unmarshal would handle all of this logic. Looking a bit closer just now, I wonder if this is even better:
func DecodeSourceMap(ism map[string]interface{}) (SourceMap, error) {
buf := json.Encode(ism)
var sourcemap SourceMap
return json.Decode(buf, sourcemap)
}
There was a problem hiding this comment.
I can do that to begin with to set the fields specified but I still need to do some post-processing to decode the VLQ values. Is it worth it?
There was a problem hiding this comment.
I think it is, but not enough to block your PR so I'll leave it up to you.
There was a problem hiding this comment.
I'm going to merge this and post a follow up with the above since I think this is tripping folks up right now
You mean why does this method accept a |
* Github-Actions: Adding pr title and label checks (#336) * Dev Tools: Source map decoder (#335) * Updated CHANGELOG.md * AVM: Consolidate TEAL and AVM versions (#345) * Testing: Use Dev mode network for cucumber tests (#349) * AVM: Use avm-abi repo (#352) * Updated CHANGELOG.md * Enhancement: Use Sandbox for Testing (#360) Co-authored-by: Michael Diamant <michaeldiamant@users.noreply.github.com> * Bug-Fix: passthru verbosity (#371) * Enhancement: Deprecating use of langspec (#366) Co-authored-by: Michael Diamant <michaeldiamant@users.noreply.github.com> * StateProof: State proof support (#374) * Regenerate client. * Update txn and block objects, cucumber tests passing. * Enable cucumber tests. * Update types/stateproof.go * Add transactions-root-256 * Remove unused code. * Remove unused file * Add txn commitments blockheader fields * Rename signature, add allocbound definitions * Add txn commitment to header * PR comments * Remove unused file Co-authored-by: Will Winder <wwinder.unh@gmail.com> * State Proofs: Use generic type for StateProof txn field. (#378) * Use generic type for StateProof txn field. * Add missing type. * Remove GenericDigest. * fix type assertion on source map version (#370) * let the json package figure out how to decode the elements of the incoming map (#380) * StateProof: State Proof Verification additions (#377) * Regenerate client. * Remove unused file * moved files from stateproof verification repo * now using updated go-stateproof-verification * fixed go mod * moved consts near their usage * added working state proof verifier test * added unit test and resources * now using go 1.15 supported function * changes to avoid dependency of stateproof verification on SDK * added needed types to stateproof.go for message hashing * reverted packages, now using up to date go-stateproof-verification * CR: renamed verification functions * hashing sp message is now in crypto * removed hashing of light block header * CR: now allocating space upfront in hashing state proof message * attempting to use embedded files * CR: using GenericDigest in block.go * CR: Renamed package to match directory * Removed go 1.15 from CI * improved embed usage * CR: removed stateproof verification logic * tidied go mod file Co-authored-by: Will Winder <wwinder.unh@gmail.com> Co-authored-by: Eric Warehime <eric.warehime@gmail.com> * State Proofs: added compute leaf function for light block header to sdk (#382) * added compute leaf function for light block header to sdk * renamed blockheader256 * changed passed type to pointer * reverted back to copying * renamed light block header hash func (#383) * Enable stpf cucumber unit tests (#386) Co-authored-by: Jack <87339414+algojack@users.noreply.github.com> Co-authored-by: Ben Guidarelli <ben.guidarelli@gmail.com> Co-authored-by: Jack Smith <jack.smith@algorand.com> Co-authored-by: Michael Diamant <michaeldiamant@users.noreply.github.com> Co-authored-by: algochoi <86622919+algochoi@users.noreply.github.com> Co-authored-by: Jason Paulos <jasonpaulos@users.noreply.github.com> Co-authored-by: Barbara Poon <barbara.poon@algorand.com> Co-authored-by: Zeph Grunschlag <tzaffi@users.noreply.github.com> Co-authored-by: Eric Warehime <eric.warehime@gmail.com> Co-authored-by: Will Winder <wwinder.unh@gmail.com> Co-authored-by: Almog Tal <107349997+almog-t@users.noreply.github.com>
It turns out reading json from disk and unmarshalling it produces a float whereas the result from the API returns a uint64.