2020-06-04 08:09:07 +00:00
|
|
|
package result
|
|
|
|
|
2020-06-04 08:59:22 +00:00
|
|
|
import (
|
|
|
|
"encoding/hex"
|
|
|
|
"encoding/json"
|
|
|
|
|
|
|
|
"github.com/nspcc-dev/neo-go/pkg/io"
|
|
|
|
)
|
|
|
|
|
2020-06-04 08:09:07 +00:00
|
|
|
// StateHeight is a result of getstateheight RPC.
|
|
|
|
type StateHeight struct {
|
|
|
|
BlockHeight uint32 `json:"blockHeight"`
|
|
|
|
StateHeight uint32 `json:"stateHeight"`
|
|
|
|
}
|
2020-06-04 08:59:22 +00:00
|
|
|
|
|
|
|
// ProofWithKey represens key-proof pair.
|
|
|
|
type ProofWithKey struct {
|
|
|
|
Key []byte
|
|
|
|
Proof [][]byte
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetProof is a result of getproof RPC.
|
|
|
|
type GetProof struct {
|
|
|
|
Result ProofWithKey `json:"proof"`
|
|
|
|
Success bool `json:"success"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// MarshalJSON implements json.Marshaler.
|
|
|
|
func (p *ProofWithKey) MarshalJSON() ([]byte, error) {
|
|
|
|
w := io.NewBufBinWriter()
|
|
|
|
p.EncodeBinary(w.BinWriter)
|
|
|
|
if w.Err != nil {
|
|
|
|
return nil, w.Err
|
|
|
|
}
|
|
|
|
return []byte(`"` + hex.EncodeToString(w.Bytes()) + `"`), nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// EncodeBinary implements io.Serializable.
|
|
|
|
func (p *ProofWithKey) EncodeBinary(w *io.BinWriter) {
|
|
|
|
w.WriteVarBytes(p.Key)
|
|
|
|
w.WriteVarUint(uint64(len(p.Proof)))
|
|
|
|
for i := range p.Proof {
|
|
|
|
w.WriteVarBytes(p.Proof[i])
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// DecodeBinary implements io.Serializable.
|
|
|
|
func (p *ProofWithKey) DecodeBinary(r *io.BinReader) {
|
|
|
|
p.Key = r.ReadVarBytes()
|
|
|
|
sz := r.ReadVarUint()
|
|
|
|
for i := uint64(0); i < sz; i++ {
|
|
|
|
p.Proof = append(p.Proof, r.ReadVarBytes())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// UnmarshalJSON implements json.Unmarshaler.
|
|
|
|
func (p *ProofWithKey) UnmarshalJSON(data []byte) error {
|
|
|
|
var s string
|
|
|
|
if err := json.Unmarshal(data, &s); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
return p.FromString(s)
|
|
|
|
}
|
|
|
|
|
|
|
|
// String implements fmt.Stringer.
|
|
|
|
func (p *ProofWithKey) String() string {
|
|
|
|
w := io.NewBufBinWriter()
|
|
|
|
p.EncodeBinary(w.BinWriter)
|
|
|
|
return hex.EncodeToString(w.Bytes())
|
|
|
|
}
|
|
|
|
|
|
|
|
// FromString decodes p from hex-encoded string.
|
|
|
|
func (p *ProofWithKey) FromString(s string) error {
|
|
|
|
rawProof, err := hex.DecodeString(s)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
r := io.NewBinReaderFromBuf(rawProof)
|
|
|
|
p.DecodeBinary(r)
|
|
|
|
return r.Err
|
|
|
|
}
|