package result import ( "encoding/json" "strings" "github.com/nspcc-dev/neo-go/pkg/util" ) // RawNotaryPool represents a result of `getrawnotarypool` RPC call. // The structure consist of `Hashes`. `Hashes` field is a map, where key is // the hash of the main transaction and value is a slice of related fallback // transaction hashes. type RawNotaryPool struct { Hashes map[util.Uint256][]util.Uint256 } // rawNotaryPoolAux is an auxiliary struct for RawNotaryPool JSON marshalling. type rawNotaryPoolAux struct { Hashes map[string][]util.Uint256 `json:"hashes,omitempty"` } // MarshalJSON implements the json.Marshaler interface. func (p RawNotaryPool) MarshalJSON() ([]byte, error) { var aux rawNotaryPoolAux aux.Hashes = make(map[string][]util.Uint256, len(p.Hashes)) for main, fallbacks := range p.Hashes { aux.Hashes["0x"+main.StringLE()] = fallbacks } return json.Marshal(aux) } // UnmarshalJSON implements the json.Unmarshaler interface. func (p *RawNotaryPool) UnmarshalJSON(data []byte) error { var aux rawNotaryPoolAux if err := json.Unmarshal(data, &aux); err != nil { return err } p.Hashes = make(map[util.Uint256][]util.Uint256, len(aux.Hashes)) for main, fallbacks := range aux.Hashes { hashMain, err := util.Uint256DecodeStringLE(strings.TrimPrefix(main, "0x")) if err != nil { return err } p.Hashes[hashMain] = fallbacks } return nil }