xssnick / tonutils-go

TON SDK Library in pure Golang for interacting with The Open Network ecosystem using native protocols, such as ADNL, RLDP and etc.
Apache License 2.0
496 stars 99 forks source link

How get stateUpdate by accountBlock? #238

Open fishTsai20 opened 3 weeks ago

fishTsai20 commented 3 weeks ago

var ab tlb.AccountBlock if err = tlb.LoadFromCell(&ab, slc); err != nil { return fmt.Errorf("faled to parse account block: %w", err) } addr := address.NewAddress(0, byte(0), ab.Addr) log.Info("account block's ", zap.Any("address", addr)) //state_update:^(HASH_UPDATE Account) update := ab.StateUpdate.BeginParse() var stateUpdate tlb.HashUpdate err = tlb.LoadFromCell(&stateUpdate, update) if err != nil { log.Error("failed to get stateUpdate of account", zap.Any("address", addr), zap.Error(err)) return err }

failed to get stateUpdate of account {"address": "EQAzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM7SN", "error": "magic is not correct for tlb.HashUpdate, want #72"}

xssnick commented 3 weeks ago

Hi, it looks like a different data inside ab.StateUpdate, you can do println(ab.StateUpdate.Dump()) to check, maybe it is pruned (collapsed part of merkle proof)

fishTsai20 commented 2 weeks ago

9[500_] -> { 700[7333333333333333333333333333333333333333333333333333333333333333300002C285E7463C1848974E46DC8A97C4504891082FC0CA7C3BAACF53246573BA115992C293DEE8400002C285E65218266C31A96000140_] -> { 2[0_], 520[72EEA4BB9B1F6083C49D08F503E9DCBFF278E79253AF02972D54674716F85D8ADAD2CB747F6C5D680946ADE5E14E054E1140F676ACADF3051F98BE0AA11520861D], 21[203020] -> { 640[43281010B0760000000000000000009600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000], 365[C00000000000000000000000012D452DA449E50B8CF7DD27861F146122AFE1B546BB8B70FC8216F0C614139F8E00] } } } Didn't see any Pruned Branch Cell. Isn't your type definition consistent with TON's? https://github.com/ton-blockchain/ton/blob/24dc184a2ea67f9c47042b4104bbb4d82289fac1/crypto/block/block.tlb#L231-L233 How do I parse this StateUpdate ?