neo-go/pkg/rpc/response/result/nep5.go
Roman Khimov 23719f7e72 rpc/server: add new getalltransfertx API
It unifies UTXO and NEP5 transfers for a given address and presents it with
transaction-level grouping (and additional metadata).
2020-09-15 12:46:39 +03:00

92 lines
2.7 KiB
Go

package result
import (
"encoding/json"
"github.com/nspcc-dev/neo-go/pkg/util"
)
// NEP5Balances is a result for the getnep5balances RPC call.
type NEP5Balances struct {
Balances []NEP5Balance `json:"balance"`
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"`
}
// 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"`
}
// 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"`
}