Add 5 new prefixes/tables (TrendingNotifications..HashXMempoolStatus).
This commit is contained in:
parent
9d1992e95f
commit
d7f52bd51e
2 changed files with 305 additions and 0 deletions
|
@ -448,6 +448,47 @@ var tableRegistry = map[byte]tableMeta{
|
||||||
return BlockTxsValueUnpack(buf)
|
return BlockTxsValueUnpack(buf)
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
TrendingNotifications: {
|
||||||
|
newKey: func() interface{} {
|
||||||
|
return &TrendingNotificationKey{Prefix: []byte{TrendingNotifications}}
|
||||||
|
},
|
||||||
|
newValue: func() interface{} {
|
||||||
|
return &TrendingNotificationValue{}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
MempoolTx: {
|
||||||
|
newKey: func() interface{} {
|
||||||
|
return &MempoolTxKey{Prefix: []byte{MempoolTx}}
|
||||||
|
},
|
||||||
|
newValue: func() interface{} {
|
||||||
|
return &MempoolTxValue{}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
TouchedHashX: {
|
||||||
|
newKey: func() interface{} {
|
||||||
|
return &TouchedHashXKey{Prefix: []byte{TouchedHashX}}
|
||||||
|
},
|
||||||
|
newValue: func() interface{} {
|
||||||
|
return &TouchedHashXValue{}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
HashXStatus: {
|
||||||
|
newKey: func() interface{} {
|
||||||
|
return &HashXStatusKey{Prefix: []byte{HashXStatus}}
|
||||||
|
},
|
||||||
|
newValue: func() interface{} {
|
||||||
|
return &HashXStatusValue{}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
HashXMempoolStatus: {
|
||||||
|
newKey: func() interface{} {
|
||||||
|
return &HashXMempoolStatusKey{Prefix: []byte{HashXMempoolStatus}}
|
||||||
|
},
|
||||||
|
newValue: func() interface{} {
|
||||||
|
return &HashXMempoolStatusValue{}
|
||||||
|
},
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
func genericNew(prefix []byte, key bool) (interface{}, error) {
|
func genericNew(prefix []byte, key bool) (interface{}, error) {
|
||||||
|
|
|
@ -60,6 +60,12 @@ const (
|
||||||
SupportAmount = 'a'
|
SupportAmount = 'a'
|
||||||
BlockTXs = 'b'
|
BlockTXs = 'b'
|
||||||
|
|
||||||
|
TrendingNotifications = 'c'
|
||||||
|
MempoolTx = 'd'
|
||||||
|
TouchedHashX = 'e'
|
||||||
|
HashXStatus = 'f'
|
||||||
|
HashXMempoolStatus = 'g'
|
||||||
|
|
||||||
ActivateClaimTXOType = 1
|
ActivateClaimTXOType = 1
|
||||||
ActivatedSupportTXOType = 2
|
ActivatedSupportTXOType = 2
|
||||||
|
|
||||||
|
@ -100,6 +106,11 @@ func GetPrefixes() [][]byte {
|
||||||
{ChannelCount},
|
{ChannelCount},
|
||||||
{SupportAmount},
|
{SupportAmount},
|
||||||
{BlockTXs},
|
{BlockTXs},
|
||||||
|
{TrendingNotifications},
|
||||||
|
{MempoolTx},
|
||||||
|
{TouchedHashX},
|
||||||
|
{HashXStatus},
|
||||||
|
{HashXMempoolStatus},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3223,6 +3234,243 @@ func UTXOValueUnpack(value []byte) *UTXOValue {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type TrendingNotificationKey struct {
|
||||||
|
Prefix []byte `struct:"[1]byte" json:"prefix"`
|
||||||
|
Height uint32 `struct:"uint32" json:"height"`
|
||||||
|
ClaimHash []byte `struct:"[20]byte" json:"claim_hash"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type TrendingNotificationValue struct {
|
||||||
|
PreviousAmount uint64 `struct:"uint64" json:"previous_amount"`
|
||||||
|
NewAmount uint64 `struct:"uint64" json:"new_amount"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (kv *TrendingNotificationKey) NumFields() int {
|
||||||
|
return 2
|
||||||
|
}
|
||||||
|
|
||||||
|
func (kv *TrendingNotificationKey) PartialPack(fields int) []byte {
|
||||||
|
// b'>L20s'
|
||||||
|
n := len(kv.Prefix) + 4 + 20
|
||||||
|
buf := make([]byte, n)
|
||||||
|
offset := 0
|
||||||
|
offset += copy(buf, kv.Prefix[offset:])
|
||||||
|
if fields <= 0 {
|
||||||
|
return buf[:offset]
|
||||||
|
}
|
||||||
|
binary.BigEndian.PutUint32(buf[offset:], kv.Height)
|
||||||
|
offset += 4
|
||||||
|
if fields -= 1; fields <= 0 {
|
||||||
|
return buf[:offset]
|
||||||
|
}
|
||||||
|
offset += copy(buf[offset:], kv.ClaimHash[:20])
|
||||||
|
return buf[:offset]
|
||||||
|
}
|
||||||
|
|
||||||
|
func (kv *TrendingNotificationKey) PackKey() []byte {
|
||||||
|
return kv.PartialPack(kv.NumFields())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (kv *TrendingNotificationKey) UnpackKey(buf []byte) {
|
||||||
|
// b'>L20s'
|
||||||
|
offset := 0
|
||||||
|
kv.Prefix = buf[offset:1]
|
||||||
|
offset += 1
|
||||||
|
kv.Height = binary.BigEndian.Uint32(buf[offset:])
|
||||||
|
offset += 4
|
||||||
|
kv.ClaimHash = buf[offset:20]
|
||||||
|
offset += 20
|
||||||
|
}
|
||||||
|
|
||||||
|
func (kv *TrendingNotificationValue) PackValue() []byte {
|
||||||
|
// b'>QQ'
|
||||||
|
n := 8 + 8
|
||||||
|
buf := make([]byte, n)
|
||||||
|
offset := 0
|
||||||
|
binary.BigEndian.PutUint64(buf[offset:], kv.PreviousAmount)
|
||||||
|
offset += 8
|
||||||
|
binary.BigEndian.PutUint64(buf[offset:], kv.NewAmount)
|
||||||
|
offset += 8
|
||||||
|
return buf
|
||||||
|
}
|
||||||
|
|
||||||
|
func (kv *TrendingNotificationValue) UnpackValue(buf []byte) {
|
||||||
|
// b'>QQ'
|
||||||
|
offset := 0
|
||||||
|
kv.PreviousAmount = binary.BigEndian.Uint64(buf[offset:])
|
||||||
|
offset += 8
|
||||||
|
kv.NewAmount = binary.BigEndian.Uint64(buf[offset:])
|
||||||
|
offset += 8
|
||||||
|
}
|
||||||
|
|
||||||
|
type MempoolTxKey struct {
|
||||||
|
Prefix []byte `struct:"[1]byte" json:"prefix"`
|
||||||
|
TxHash []byte `struct:"[32]byte" json:"tx_hash"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type MempoolTxValue struct {
|
||||||
|
RawTx []byte `struct-while:"!_eof" json:"raw_tx"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (kv *MempoolTxKey) NumFields() int {
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
func (kv *MempoolTxKey) Pack(fields int) []byte {
|
||||||
|
// b'>32s'
|
||||||
|
n := len(kv.Prefix) + 32
|
||||||
|
buf := make([]byte, n)
|
||||||
|
offset := 0
|
||||||
|
offset += copy(buf[offset:], kv.Prefix[:1])
|
||||||
|
if fields <= 0 {
|
||||||
|
return buf[:offset]
|
||||||
|
}
|
||||||
|
offset += copy(buf[offset:], kv.TxHash[:32])
|
||||||
|
return buf[:offset]
|
||||||
|
}
|
||||||
|
|
||||||
|
func (kv *MempoolTxKey) UnpackKey(buf []byte) {
|
||||||
|
// b'>32s'
|
||||||
|
offset := 0
|
||||||
|
kv.Prefix = buf[offset:1]
|
||||||
|
offset += 1
|
||||||
|
kv.TxHash = buf[offset:32]
|
||||||
|
offset += 32
|
||||||
|
}
|
||||||
|
|
||||||
|
func (kv *MempoolTxValue) PackValue() []byte {
|
||||||
|
// variable length bytes
|
||||||
|
n := len(kv.RawTx)
|
||||||
|
buf := make([]byte, n)
|
||||||
|
offset := 0
|
||||||
|
offset += copy(buf, kv.RawTx)
|
||||||
|
return buf
|
||||||
|
}
|
||||||
|
|
||||||
|
func (kv *MempoolTxValue) UnpackValue(buf []byte) {
|
||||||
|
// variable length bytes
|
||||||
|
offset := 0
|
||||||
|
kv.RawTx = buf[:]
|
||||||
|
offset += len(buf)
|
||||||
|
}
|
||||||
|
|
||||||
|
type TouchedHashXKey struct {
|
||||||
|
Prefix []byte `struct:"[1]byte" json:"prefix"`
|
||||||
|
Height uint32 `struct:"uint32" json:"height"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type TouchedHashXValue struct {
|
||||||
|
TouchedHashXs [][]byte `struct:"[][11]byte" struct-while:"!_eof" json:"touched_hashXs"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (kv *TouchedHashXKey) NumFields() int {
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
func (kv *TouchedHashXKey) PartialPack(fields int) []byte {
|
||||||
|
// b'>L'
|
||||||
|
n := len(kv.Prefix) + 4
|
||||||
|
buf := make([]byte, n)
|
||||||
|
offset := 0
|
||||||
|
offset += copy(buf[offset:], kv.Prefix[:1])
|
||||||
|
if fields <= 0 {
|
||||||
|
return buf[:offset]
|
||||||
|
}
|
||||||
|
binary.BigEndian.PutUint32(buf[offset:], kv.Height)
|
||||||
|
offset += 4
|
||||||
|
return buf[:offset]
|
||||||
|
}
|
||||||
|
|
||||||
|
func (kv *TouchedHashXKey) PackKey() []byte {
|
||||||
|
return kv.PartialPack(kv.NumFields())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (kv *TouchedHashXKey) UnpackKey(buf []byte) {
|
||||||
|
// b'>L'
|
||||||
|
offset := 0
|
||||||
|
kv.Prefix = buf[offset:1]
|
||||||
|
offset += 1
|
||||||
|
kv.Height = binary.BigEndian.Uint32(buf[offset:])
|
||||||
|
offset += 4
|
||||||
|
}
|
||||||
|
|
||||||
|
func (kv *TouchedHashXValue) PackValue() []byte {
|
||||||
|
// variable length bytes
|
||||||
|
n := len(kv.TouchedHashXs) * 11
|
||||||
|
buf := make([]byte, n)
|
||||||
|
offset := 0
|
||||||
|
for i := range kv.TouchedHashXs {
|
||||||
|
offset += copy(buf[offset:], kv.TouchedHashXs[i][:11])
|
||||||
|
}
|
||||||
|
return buf
|
||||||
|
}
|
||||||
|
|
||||||
|
func (kv *TouchedHashXValue) UnpackValue(buf []byte) {
|
||||||
|
// variable length bytes
|
||||||
|
n := len(buf)
|
||||||
|
for i, offset := 0, 0; offset+11 <= n; i, offset = i+1, offset+11 {
|
||||||
|
kv.TouchedHashXs[i] = buf[offset:11]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type HashXStatusKey struct {
|
||||||
|
Prefix []byte `struct:"[1]byte" json:"prefix"`
|
||||||
|
HashX []byte `struct:"[20]byte" json:"hashX"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type HashXStatusValue struct {
|
||||||
|
Status []byte `struct:"[32]byte" json:"status"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (kv *HashXStatusKey) NumFields() int {
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
func (kv *HashXStatusKey) PartialPack(fields int) []byte {
|
||||||
|
// b'>20s'
|
||||||
|
n := len(kv.Prefix) + 20
|
||||||
|
buf := make([]byte, n)
|
||||||
|
offset := 0
|
||||||
|
offset += copy(buf[offset:], kv.Prefix[:1])
|
||||||
|
if fields <= 0 {
|
||||||
|
return buf[:offset]
|
||||||
|
}
|
||||||
|
offset += copy(buf[offset:], kv.HashX[:20])
|
||||||
|
return buf[:offset]
|
||||||
|
}
|
||||||
|
|
||||||
|
func (kv *HashXStatusKey) PackKey() []byte {
|
||||||
|
return kv.PartialPack(kv.NumFields())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (kv *HashXStatusKey) UnpackKey(buf []byte) {
|
||||||
|
// b'>20s'
|
||||||
|
offset := 0
|
||||||
|
kv.Prefix = buf[offset:1]
|
||||||
|
offset += 1
|
||||||
|
kv.HashX = buf[offset:20]
|
||||||
|
offset += 20
|
||||||
|
}
|
||||||
|
|
||||||
|
func (kv *HashXStatusValue) PackValue() []byte {
|
||||||
|
// b'32s'
|
||||||
|
n := 32
|
||||||
|
buf := make([]byte, n)
|
||||||
|
offset := 0
|
||||||
|
offset += copy(buf[offset:], kv.Status[:32])
|
||||||
|
return buf
|
||||||
|
}
|
||||||
|
|
||||||
|
func (kv *HashXStatusValue) UnpackValue(buf []byte) {
|
||||||
|
// b'32s'
|
||||||
|
offset := 0
|
||||||
|
kv.Status = buf[offset:32]
|
||||||
|
offset += 32
|
||||||
|
}
|
||||||
|
|
||||||
|
type HashXMempoolStatusKey = HashXStatusKey
|
||||||
|
type HashXMempoolStatusValue = HashXStatusValue
|
||||||
|
|
||||||
func UnpackGenericKey(key []byte) (BaseKey, error) {
|
func UnpackGenericKey(key []byte) (BaseKey, error) {
|
||||||
if len(key) == 0 {
|
if len(key) == 0 {
|
||||||
return nil, fmt.Errorf("key length zero")
|
return nil, fmt.Errorf("key length zero")
|
||||||
|
@ -3236,6 +3484,14 @@ func UnpackGenericKey(key []byte) (BaseKey, error) {
|
||||||
if t.newKeyUnpack != nil {
|
if t.newKeyUnpack != nil {
|
||||||
return t.newKeyUnpack(key).(BaseKey), nil
|
return t.newKeyUnpack(key).(BaseKey), nil
|
||||||
}
|
}
|
||||||
|
if t.newKey != nil {
|
||||||
|
k := t.newKey()
|
||||||
|
unpacker, ok := k.(KeyUnpacker)
|
||||||
|
if ok {
|
||||||
|
unpacker.UnpackKey(key)
|
||||||
|
return unpacker.(BaseKey), nil
|
||||||
|
}
|
||||||
|
}
|
||||||
return nil, fmt.Errorf("unpack key function for %v not implemented", key[0])
|
return nil, fmt.Errorf("unpack key function for %v not implemented", key[0])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3255,6 +3511,14 @@ func UnpackGenericValue(key []byte, value []byte) (BaseValue, error) {
|
||||||
if t.newValueUnpack != nil {
|
if t.newValueUnpack != nil {
|
||||||
return t.newValueUnpack(value).(BaseValue), nil
|
return t.newValueUnpack(value).(BaseValue), nil
|
||||||
}
|
}
|
||||||
|
if t.newValue != nil {
|
||||||
|
k := t.newValue()
|
||||||
|
unpacker, ok := k.(ValueUnpacker)
|
||||||
|
if ok {
|
||||||
|
unpacker.UnpackValue(value)
|
||||||
|
return unpacker.(BaseValue), nil
|
||||||
|
}
|
||||||
|
}
|
||||||
return nil, fmt.Errorf("unpack key function for %v not implemented", key[0])
|
return nil, fmt.Errorf("unpack key function for %v not implemented", key[0])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue