neo-go/pkg/rpc/response/result/nep5.go

93 lines
2.7 KiB
Go
Raw Normal View History

2020-03-05 11:50:06 +00:00
package result
import (
"encoding/json"
"github.com/nspcc-dev/neo-go/pkg/util"
)
2020-03-05 11:50:06 +00:00
// NEP5Balances is a result for the getnep5balances RPC call.
type NEP5Balances struct {
Balances []NEP5Balance `json:"balance"`
2020-03-05 11:50:06 +00:00
Address string `json:"address"`
}
// NEP5Balance represents balance for the single token contract.
type NEP5Balance struct {
Asset util.Uint160 `json:"asset_hash"`
Amount string `json:"amount"`
LastUpdated uint32 `json:"last_updated_block"`
}
2020-03-05 12:16:03 +00:00
// nep5Balance is an auxilliary struct for proper Asset marshaling.
type nep5Balance struct {
Asset string `json:"asset_hash"`
Amount string `json:"amount"`
LastUpdated uint32 `json:"last_updated_block"`
}
2020-03-05 12:16:03 +00:00
// NEP5Transfers is a result for the getnep5transfers RPC.
type NEP5Transfers struct {
Sent []NEP5Transfer `json:"sent"`
Received []NEP5Transfer `json:"received"`
Address string `json:"address"`
}
// NEP5Transfer represents single NEP5 transfer event.
type NEP5Transfer struct {
Timestamp uint32 `json:"timestamp"`
Asset util.Uint160 `json:"asset_hash"`
Address string `json:"transfer_address,omitempty"`
Amount string `json:"amount"`
Index uint32 `json:"block_index"`
NotifyIndex uint32 `json:"transfer_notify_index"`
TxHash util.Uint256 `json:"tx_hash"`
}
// MarshalJSON implements json.Marshaler interface.
func (b *NEP5Balance) MarshalJSON() ([]byte, error) {
s := &nep5Balance{
Asset: b.Asset.StringLE(),
Amount: b.Amount,
LastUpdated: b.LastUpdated,
}
return json.Marshal(s)
}
// UnmarshalJSON implements json.Unmarshaler interface.
func (b *NEP5Balance) UnmarshalJSON(data []byte) error {
s := new(nep5Balance)
if err := json.Unmarshal(data, s); err != nil {
return err
}
asset, err := util.Uint160DecodeStringLE(s.Asset)
if err != nil {
return err
}
b.Amount = s.Amount
b.Asset = asset
b.LastUpdated = s.LastUpdated
return nil
}
// TransferTx is a type used to represent and element of `getalltransfertx`
// result. It combines transaction's inputs/outputs with NEP5 events.
type TransferTx struct {
TxID util.Uint256 `json:"txid"`
Timestamp uint32 `json:"timestamp"`
Index uint32 `json:"block_index"`
SystemFee int64 `json:"sys_fee"`
NetworkFee int64 `json:"net_fee"`
Elements []TransferTxEvent `json:"elements,omitempty"`
Events []TransferTxEvent `json:"events,omitempty"`
}
// TransferTxEvent is an event used for elements or events of TransferTx, it's
// either a single input/output, or a nep5 transfer.
type TransferTxEvent struct {
Address string `json:"address"`
Type string `json:"type"`
Value string `json:"value"`
Asset string `json:"asset"`
}