github.com/okex/exchain@v1.8.0/libs/tendermint/state/execution_dds_payload.go (about) 1 package state 2 3 import ( 4 "fmt" 5 6 "github.com/okex/exchain/libs/iavl" 7 "github.com/okex/exchain/libs/tendermint/types" 8 ) 9 10 func unmarshalTreeDeltaMap(input []byte) (interface{}, error) { 11 if len(input) == 0 { 12 return nil, fmt.Errorf("failed unmarshal TreeDeltaMap: empty data") 13 } 14 treeDeltaMap := iavl.TreeDeltaMap{} 15 err := treeDeltaMap.UnmarshalFromAmino(nil, input) 16 return treeDeltaMap, err 17 } 18 19 func marshalTreeDeltaMap(deltaMap interface{}) ([]byte, error) { 20 dm, ok := deltaMap.(iavl.TreeDeltaMap) 21 if !ok { 22 return nil, fmt.Errorf("failed marshal TreeDeltaMap") 23 } 24 return dm.MarshalToAmino(nil) 25 } 26 27 type DeltaInfo struct { 28 from string 29 deltaLen int 30 deltaHeight int64 31 abciResponses *ABCIResponses 32 treeDeltaMap interface{} 33 watchData interface{} 34 wasmWatchData interface{} 35 36 marshalWatchData func() ([]byte, error) 37 wasmMarshalWatchData func() ([]byte, error) 38 } 39 40 // for upload 41 func (info *DeltaInfo) dataInfo2Bytes() (types.DeltaPayload, error) { 42 var err error 43 pl := types.DeltaPayload{} 44 pl.ABCIRsp, err = info.abciResponses.MarshalToAmino(cdc) 45 if err != nil { 46 return pl, err 47 } 48 49 pl.DeltasBytes, err = marshalTreeDeltaMap(info.treeDeltaMap) 50 if err != nil { 51 return pl, err 52 } 53 54 pl.WatchBytes, err = info.marshalWatchData() 55 if err != nil { 56 return pl, err 57 } 58 59 pl.WasmWatchBytes, err = info.wasmMarshalWatchData() 60 if err != nil { 61 return pl, err 62 } 63 64 return pl, err 65 } 66 67 func (info *DeltaInfo) bytes2DeltaInfo(pl *types.DeltaPayload) error { 68 if pl == nil { 69 return fmt.Errorf("Failed bytes to delta info: empty delta payload. ") 70 } 71 var err error 72 ar := &ABCIResponses{} 73 err = ar.UnmarshalFromAmino(nil, pl.ABCIRsp) 74 if err != nil { 75 return err 76 } 77 info.abciResponses = ar 78 79 info.treeDeltaMap, err = unmarshalTreeDeltaMap(pl.DeltasBytes) 80 if err != nil { 81 return err 82 } 83 if types.FastQuery { 84 info.watchData, err = evmWatchDataManager.UnmarshalWatchData(pl.WatchBytes) 85 if err != nil { 86 return err 87 } 88 } 89 info.wasmWatchData, err = wasmWatchDataManager.UnmarshalWatchData(pl.WasmWatchBytes) 90 if err != nil { 91 return err 92 } 93 94 return err 95 }