mirror of
https://github.com/aljazceru/ark.git
synced 2025-12-17 12:14:21 +01:00
Drop PendingChange field (#331)
* Drop pending_change * Fixes * Polish * Fallback to psbt string
This commit is contained in:
committed by
GitHub
parent
2be78b0115
commit
b15c0868b2
@@ -1002,9 +1002,6 @@
|
|||||||
"amount": {
|
"amount": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"format": "uint64"
|
"format": "uint64"
|
||||||
},
|
|
||||||
"pendingChange": {
|
|
||||||
"type": "boolean"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -289,7 +289,6 @@ message Vtxo {
|
|||||||
bool pending = 8;
|
bool pending = 8;
|
||||||
PendingPayment pending_data = 9;
|
PendingPayment pending_data = 9;
|
||||||
uint64 amount = 10;
|
uint64 amount = 10;
|
||||||
bool pending_change = 11;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
message PendingPayment {
|
message PendingPayment {
|
||||||
|
|||||||
@@ -2216,17 +2216,16 @@ type Vtxo struct {
|
|||||||
sizeCache protoimpl.SizeCache
|
sizeCache protoimpl.SizeCache
|
||||||
unknownFields protoimpl.UnknownFields
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
Outpoint *Outpoint `protobuf:"bytes,1,opt,name=outpoint,proto3" json:"outpoint,omitempty"`
|
Outpoint *Outpoint `protobuf:"bytes,1,opt,name=outpoint,proto3" json:"outpoint,omitempty"`
|
||||||
Descriptor_ string `protobuf:"bytes,2,opt,name=descriptor,proto3" json:"descriptor,omitempty"`
|
Descriptor_ string `protobuf:"bytes,2,opt,name=descriptor,proto3" json:"descriptor,omitempty"`
|
||||||
Spent bool `protobuf:"varint,3,opt,name=spent,proto3" json:"spent,omitempty"`
|
Spent bool `protobuf:"varint,3,opt,name=spent,proto3" json:"spent,omitempty"`
|
||||||
PoolTxid string `protobuf:"bytes,4,opt,name=pool_txid,json=poolTxid,proto3" json:"pool_txid,omitempty"`
|
PoolTxid string `protobuf:"bytes,4,opt,name=pool_txid,json=poolTxid,proto3" json:"pool_txid,omitempty"`
|
||||||
SpentBy string `protobuf:"bytes,5,opt,name=spent_by,json=spentBy,proto3" json:"spent_by,omitempty"`
|
SpentBy string `protobuf:"bytes,5,opt,name=spent_by,json=spentBy,proto3" json:"spent_by,omitempty"`
|
||||||
ExpireAt int64 `protobuf:"varint,6,opt,name=expire_at,json=expireAt,proto3" json:"expire_at,omitempty"`
|
ExpireAt int64 `protobuf:"varint,6,opt,name=expire_at,json=expireAt,proto3" json:"expire_at,omitempty"`
|
||||||
Swept bool `protobuf:"varint,7,opt,name=swept,proto3" json:"swept,omitempty"`
|
Swept bool `protobuf:"varint,7,opt,name=swept,proto3" json:"swept,omitempty"`
|
||||||
Pending bool `protobuf:"varint,8,opt,name=pending,proto3" json:"pending,omitempty"`
|
Pending bool `protobuf:"varint,8,opt,name=pending,proto3" json:"pending,omitempty"`
|
||||||
PendingData *PendingPayment `protobuf:"bytes,9,opt,name=pending_data,json=pendingData,proto3" json:"pending_data,omitempty"`
|
PendingData *PendingPayment `protobuf:"bytes,9,opt,name=pending_data,json=pendingData,proto3" json:"pending_data,omitempty"`
|
||||||
Amount uint64 `protobuf:"varint,10,opt,name=amount,proto3" json:"amount,omitempty"`
|
Amount uint64 `protobuf:"varint,10,opt,name=amount,proto3" json:"amount,omitempty"`
|
||||||
PendingChange bool `protobuf:"varint,11,opt,name=pending_change,json=pendingChange,proto3" json:"pending_change,omitempty"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *Vtxo) Reset() {
|
func (x *Vtxo) Reset() {
|
||||||
@@ -2331,13 +2330,6 @@ func (x *Vtxo) GetAmount() uint64 {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *Vtxo) GetPendingChange() bool {
|
|
||||||
if x != nil {
|
|
||||||
return x.PendingChange
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
type PendingPayment struct {
|
type PendingPayment struct {
|
||||||
state protoimpl.MessageState
|
state protoimpl.MessageState
|
||||||
sizeCache protoimpl.SizeCache
|
sizeCache protoimpl.SizeCache
|
||||||
@@ -2845,7 +2837,7 @@ var file_ark_v1_service_proto_rawDesc = []byte{
|
|||||||
0x69, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02,
|
0x69, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02,
|
||||||
0x74, 0x78, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x78, 0x69,
|
0x74, 0x78, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x78, 0x69,
|
||||||
0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x54,
|
0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x54,
|
||||||
0x78, 0x69, 0x64, 0x22, 0xe9, 0x02, 0x0a, 0x04, 0x56, 0x74, 0x78, 0x6f, 0x12, 0x2c, 0x0a, 0x08,
|
0x78, 0x69, 0x64, 0x22, 0xc2, 0x02, 0x0a, 0x04, 0x56, 0x74, 0x78, 0x6f, 0x12, 0x2c, 0x0a, 0x08,
|
||||||
0x6f, 0x75, 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10,
|
0x6f, 0x75, 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10,
|
||||||
0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74,
|
0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x75, 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74,
|
||||||
0x52, 0x08, 0x6f, 0x75, 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65,
|
0x52, 0x08, 0x6f, 0x75, 0x74, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65,
|
||||||
@@ -2865,148 +2857,145 @@ var file_ark_v1_service_proto_rawDesc = []byte{
|
|||||||
0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x79, 0x6d,
|
0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x79, 0x6d,
|
||||||
0x65, 0x6e, 0x74, 0x52, 0x0b, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x61, 0x74, 0x61,
|
0x65, 0x6e, 0x74, 0x52, 0x0b, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x44, 0x61, 0x74, 0x61,
|
||||||
0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04,
|
0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04,
|
||||||
0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x65, 0x6e, 0x64,
|
0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x69, 0x0a, 0x0e, 0x50, 0x65, 0x6e, 0x64,
|
||||||
0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08,
|
0x69, 0x6e, 0x67, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65,
|
||||||
0x52, 0x0d, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x22,
|
0x64, 0x65, 0x65, 0x6d, 0x5f, 0x74, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72,
|
||||||
0x69, 0x0a, 0x0e, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e,
|
0x65, 0x64, 0x65, 0x65, 0x6d, 0x54, 0x78, 0x12, 0x3a, 0x0a, 0x19, 0x75, 0x6e, 0x63, 0x6f, 0x6e,
|
||||||
0x74, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x64, 0x65, 0x65, 0x6d, 0x5f, 0x74, 0x78, 0x18, 0x01,
|
0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x66, 0x6f, 0x72, 0x66, 0x65, 0x69, 0x74,
|
||||||
0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x64, 0x65, 0x65, 0x6d, 0x54, 0x78, 0x12, 0x3a,
|
0x5f, 0x74, 0x78, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, 0x75, 0x6e, 0x63, 0x6f,
|
||||||
0x0a, 0x19, 0x75, 0x6e, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f,
|
0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x46, 0x6f, 0x72, 0x66, 0x65, 0x69, 0x74,
|
||||||
0x66, 0x6f, 0x72, 0x66, 0x65, 0x69, 0x74, 0x5f, 0x74, 0x78, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28,
|
0x54, 0x78, 0x73, 0x22, 0x72, 0x0a, 0x15, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x72, 0x65, 0x65, 0x4e,
|
||||||
0x09, 0x52, 0x17, 0x75, 0x6e, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c,
|
0x6f, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08,
|
||||||
0x46, 0x6f, 0x72, 0x66, 0x65, 0x69, 0x74, 0x54, 0x78, 0x73, 0x22, 0x72, 0x0a, 0x15, 0x53, 0x65,
|
0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07,
|
||||||
0x6e, 0x64, 0x54, 0x72, 0x65, 0x65, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75,
|
0x72, 0x6f, 0x75, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69,
|
||||||
0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18,
|
0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x75, 0x62,
|
||||||
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x1d,
|
0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x72, 0x65, 0x65, 0x5f, 0x6e,
|
||||||
0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01,
|
0x6f, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x72, 0x65,
|
||||||
0x28, 0x09, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x1f, 0x0a,
|
0x65, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x22, 0x18, 0x0a, 0x16, 0x53, 0x65, 0x6e, 0x64, 0x54,
|
||||||
0x0b, 0x74, 0x72, 0x65, 0x65, 0x5f, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01,
|
0x72, 0x65, 0x65, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
|
||||||
0x28, 0x09, 0x52, 0x0a, 0x74, 0x72, 0x65, 0x65, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x22, 0x18,
|
0x65, 0x22, 0x7e, 0x0a, 0x19, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x72, 0x65, 0x65, 0x53, 0x69, 0x67,
|
||||||
0x0a, 0x16, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x72, 0x65, 0x65, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x73,
|
0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19,
|
||||||
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x7e, 0x0a, 0x19, 0x53, 0x65, 0x6e, 0x64,
|
0x0a, 0x08, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
|
||||||
0x54, 0x72, 0x65, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65,
|
0x52, 0x07, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x75, 0x62,
|
||||||
0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x69,
|
0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70,
|
||||||
0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x49, 0x64,
|
0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x27, 0x0a, 0x0f, 0x74, 0x72, 0x65, 0x65,
|
||||||
0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02,
|
0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28,
|
||||||
0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12,
|
0x09, 0x52, 0x0e, 0x74, 0x72, 0x65, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65,
|
||||||
0x27, 0x0a, 0x0f, 0x74, 0x72, 0x65, 0x65, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72,
|
0x73, 0x22, 0x1c, 0x0a, 0x1a, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x72, 0x65, 0x65, 0x53, 0x69, 0x67,
|
||||||
0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x74, 0x72, 0x65, 0x65, 0x53, 0x69,
|
0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a,
|
||||||
0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x22, 0x1c, 0x0a, 0x1a, 0x53, 0x65, 0x6e, 0x64,
|
0x98, 0x01, 0x0a, 0x0a, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x53, 0x74, 0x61, 0x67, 0x65, 0x12, 0x1b,
|
||||||
0x54, 0x72, 0x65, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65,
|
0x0a, 0x17, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x47, 0x45, 0x5f, 0x55, 0x4e,
|
||||||
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x98, 0x01, 0x0a, 0x0a, 0x52, 0x6f, 0x75, 0x6e, 0x64,
|
0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x52,
|
||||||
0x53, 0x74, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x17, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x53,
|
0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x47, 0x45, 0x5f, 0x52, 0x45, 0x47, 0x49, 0x53,
|
||||||
0x54, 0x41, 0x47, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44,
|
0x54, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x1c, 0x0a, 0x18, 0x52, 0x4f, 0x55,
|
||||||
0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x47,
|
0x4e, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x47, 0x45, 0x5f, 0x46, 0x49, 0x4e, 0x41, 0x4c, 0x49, 0x5a,
|
||||||
0x45, 0x5f, 0x52, 0x45, 0x47, 0x49, 0x53, 0x54, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01,
|
0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x02, 0x12, 0x19, 0x0a, 0x15, 0x52, 0x4f, 0x55, 0x4e, 0x44,
|
||||||
0x12, 0x1c, 0x0a, 0x18, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x47, 0x45, 0x5f,
|
0x5f, 0x53, 0x54, 0x41, 0x47, 0x45, 0x5f, 0x46, 0x49, 0x4e, 0x41, 0x4c, 0x49, 0x5a, 0x45, 0x44,
|
||||||
0x46, 0x49, 0x4e, 0x41, 0x4c, 0x49, 0x5a, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x02, 0x12, 0x19,
|
0x10, 0x03, 0x12, 0x16, 0x0a, 0x12, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x47,
|
||||||
0x0a, 0x15, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x47, 0x45, 0x5f, 0x46, 0x49,
|
0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x04, 0x32, 0xd0, 0x0b, 0x0a, 0x0a, 0x41,
|
||||||
0x4e, 0x41, 0x4c, 0x49, 0x5a, 0x45, 0x44, 0x10, 0x03, 0x12, 0x16, 0x0a, 0x12, 0x52, 0x4f, 0x55,
|
0x72, 0x6b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x73, 0x0a, 0x0f, 0x52, 0x65, 0x67,
|
||||||
0x4e, 0x44, 0x5f, 0x53, 0x54, 0x41, 0x47, 0x45, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10,
|
0x69, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1e, 0x2e, 0x61,
|
||||||
0x04, 0x32, 0xd0, 0x0b, 0x0a, 0x0a, 0x41, 0x72, 0x6b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
|
0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61,
|
||||||
0x12, 0x73, 0x0a, 0x0f, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x79, 0x6d,
|
|
||||||
0x65, 0x6e, 0x74, 0x12, 0x1e, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x67,
|
|
||||||
0x69, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75,
|
|
||||||
0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x67,
|
|
||||||
0x69, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70,
|
|
||||||
0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x3a, 0x01, 0x2a, 0x22,
|
|
||||||
0x14, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x72, 0x65, 0x67,
|
|
||||||
0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x67, 0x0a, 0x0c, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x61,
|
|
||||||
0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1b, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x43,
|
|
||||||
0x6c, 0x61, 0x69, 0x6d, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65,
|
|
||||||
0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69,
|
|
||||||
0x6d, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
|
|
||||||
0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x3a, 0x01, 0x2a, 0x22, 0x11, 0x2f, 0x76, 0x31,
|
|
||||||
0x2f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x73,
|
|
||||||
0x0a, 0x0e, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x72, 0x65, 0x65, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x73,
|
|
||||||
0x12, 0x1d, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x72,
|
|
||||||
0x65, 0x65, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
|
|
||||||
0x1e, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x72, 0x65,
|
|
||||||
0x65, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
|
|
||||||
0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x3a, 0x01, 0x2a, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f,
|
|
||||||
0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x74, 0x72, 0x65, 0x65, 0x2f, 0x6e, 0x6f, 0x6e,
|
|
||||||
0x63, 0x65, 0x73, 0x12, 0x83, 0x01, 0x0a, 0x12, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x72, 0x65, 0x65,
|
|
||||||
0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x21, 0x2e, 0x61, 0x72, 0x6b,
|
|
||||||
0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x72, 0x65, 0x65, 0x53, 0x69, 0x67, 0x6e,
|
|
||||||
0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e,
|
|
||||||
0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x72, 0x65, 0x65, 0x53,
|
|
||||||
0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
|
|
||||||
0x65, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x3a, 0x01, 0x2a, 0x22, 0x1b, 0x2f, 0x76,
|
|
||||||
0x31, 0x2f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x74, 0x72, 0x65, 0x65, 0x2f, 0x73,
|
|
||||||
0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x73, 0x0a, 0x0f, 0x46, 0x69, 0x6e,
|
|
||||||
0x61, 0x6c, 0x69, 0x7a, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1e, 0x2e, 0x61,
|
|
||||||
0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x50, 0x61,
|
|
||||||
0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61,
|
0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61,
|
||||||
0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x50, 0x61,
|
0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x50, 0x61,
|
||||||
0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82,
|
0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82,
|
||||||
0xd3, 0xe4, 0x93, 0x02, 0x19, 0x3a, 0x01, 0x2a, 0x22, 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61,
|
0xd3, 0xe4, 0x93, 0x02, 0x19, 0x3a, 0x01, 0x2a, 0x22, 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61,
|
||||||
0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x12, 0x57,
|
0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x67,
|
||||||
0x0a, 0x08, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x12, 0x17, 0x2e, 0x61, 0x72, 0x6b,
|
0x0a, 0x0c, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1b,
|
||||||
0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75,
|
0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x61, 0x79,
|
||||||
0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74,
|
0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x61, 0x72,
|
||||||
0x52, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x18, 0x82,
|
0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e,
|
||||||
0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x75, 0x6e, 0x64,
|
0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02,
|
||||||
0x2f, 0x7b, 0x74, 0x78, 0x69, 0x64, 0x7d, 0x12, 0x64, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x52, 0x6f,
|
0x16, 0x3a, 0x01, 0x2a, 0x22, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e,
|
||||||
0x75, 0x6e, 0x64, 0x42, 0x79, 0x49, 0x64, 0x12, 0x1b, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31,
|
0x74, 0x2f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x73, 0x0a, 0x0e, 0x53, 0x65, 0x6e, 0x64, 0x54,
|
||||||
0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x71,
|
0x72, 0x65, 0x65, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x1d, 0x2e, 0x61, 0x72, 0x6b, 0x2e,
|
||||||
0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65,
|
0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x72, 0x65, 0x65, 0x4e, 0x6f, 0x6e, 0x63, 0x65,
|
||||||
0x74, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
|
0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76,
|
||||||
0x73, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x31, 0x2f,
|
0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x72, 0x65, 0x65, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x73,
|
||||||
0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2f, 0x69, 0x64, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x65, 0x0a,
|
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c,
|
||||||
0x0e, 0x47, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12,
|
0x3a, 0x01, 0x2a, 0x22, 0x17, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74,
|
||||||
0x1d, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e,
|
0x2f, 0x74, 0x72, 0x65, 0x65, 0x2f, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x83, 0x01, 0x0a,
|
||||||
0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e,
|
0x12, 0x53, 0x65, 0x6e, 0x64, 0x54, 0x72, 0x65, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75,
|
||||||
0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74,
|
0x72, 0x65, 0x73, 0x12, 0x21, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e,
|
||||||
0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x12,
|
0x64, 0x54, 0x72, 0x65, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x52,
|
||||||
0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x12, 0x0a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x76, 0x65, 0x6e,
|
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e,
|
||||||
0x74, 0x73, 0x30, 0x01, 0x12, 0x50, 0x0a, 0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x13, 0x2e, 0x61,
|
0x53, 0x65, 0x6e, 0x64, 0x54, 0x72, 0x65, 0x65, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72,
|
||||||
0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93,
|
||||||
0x74, 0x1a, 0x14, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52,
|
0x02, 0x20, 0x3a, 0x01, 0x2a, 0x22, 0x1b, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x79, 0x6d, 0x65,
|
||||||
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12,
|
0x6e, 0x74, 0x2f, 0x74, 0x72, 0x65, 0x65, 0x2f, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72,
|
||||||
0x15, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x70, 0x61, 0x79, 0x6d, 0x65,
|
0x65, 0x73, 0x12, 0x73, 0x0a, 0x0f, 0x46, 0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x50, 0x61,
|
||||||
0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x5d, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x74,
|
0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1e, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x46,
|
||||||
0x78, 0x6f, 0x73, 0x12, 0x18, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73,
|
0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65,
|
||||||
0x74, 0x56, 0x74, 0x78, 0x6f, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e,
|
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x46,
|
||||||
0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x74, 0x78, 0x6f, 0x73,
|
0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65,
|
||||||
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15,
|
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x3a, 0x01,
|
||||||
0x12, 0x13, 0x2f, 0x76, 0x31, 0x2f, 0x76, 0x74, 0x78, 0x6f, 0x73, 0x2f, 0x7b, 0x61, 0x64, 0x64,
|
0x2a, 0x22, 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x66,
|
||||||
0x72, 0x65, 0x73, 0x73, 0x7d, 0x12, 0x4c, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f,
|
0x69, 0x6e, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x12, 0x57, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x52, 0x6f,
|
||||||
0x12, 0x16, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66,
|
0x75, 0x6e, 0x64, 0x12, 0x17, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74,
|
||||||
0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76,
|
0x52, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x61,
|
||||||
0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
|
0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x52, 0x65,
|
||||||
0x65, 0x22, 0x10, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0a, 0x12, 0x08, 0x2f, 0x76, 0x31, 0x2f, 0x69,
|
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x18, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x12, 0x10,
|
||||||
0x6e, 0x66, 0x6f, 0x12, 0x74, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x69,
|
0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2f, 0x7b, 0x74, 0x78, 0x69, 0x64, 0x7d,
|
||||||
0x6e, 0x67, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x21, 0x2e, 0x61, 0x72, 0x6b, 0x2e,
|
0x12, 0x64, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x42, 0x79, 0x49, 0x64,
|
||||||
0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x41, 0x64,
|
0x12, 0x1b, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x75,
|
||||||
0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x61,
|
0x6e, 0x64, 0x42, 0x79, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e,
|
||||||
0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x69, 0x6e,
|
0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x42,
|
||||||
0x67, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
|
0x79, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4,
|
||||||
0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x3a, 0x01, 0x2a, 0x22, 0x0c, 0x2f, 0x76, 0x31,
|
0x93, 0x02, 0x13, 0x12, 0x11, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x2f, 0x69,
|
||||||
0x2f, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x64, 0x0a, 0x0d, 0x43, 0x72, 0x65,
|
0x64, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x65, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x45, 0x76, 0x65,
|
||||||
0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1c, 0x2e, 0x61, 0x72, 0x6b,
|
0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x1d, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76,
|
||||||
0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e,
|
0x31, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d,
|
||||||
0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76,
|
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31,
|
||||||
0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52,
|
0x2e, 0x47, 0x65, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52,
|
||||||
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x3a,
|
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x12, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0c, 0x12,
|
||||||
0x01, 0x2a, 0x22, 0x0b, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12,
|
0x0a, 0x2f, 0x76, 0x31, 0x2f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x30, 0x01, 0x12, 0x50, 0x0a,
|
||||||
0x73, 0x0a, 0x0f, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65,
|
0x04, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x13, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x50,
|
||||||
0x6e, 0x74, 0x12, 0x1e, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70,
|
0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x61, 0x72, 0x6b,
|
||||||
0x6c, 0x65, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65,
|
0x2e, 0x76, 0x31, 0x2e, 0x50, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
|
||||||
0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70,
|
0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x12, 0x15, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x69,
|
||||||
0x6c, 0x65, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f,
|
0x6e, 0x67, 0x2f, 0x7b, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x7d, 0x12,
|
||||||
0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x3a, 0x01, 0x2a, 0x22, 0x14,
|
0x5d, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x74, 0x78, 0x6f, 0x73, 0x12, 0x18, 0x2e, 0x61,
|
||||||
0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x63, 0x6f, 0x6d, 0x70,
|
0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x74, 0x78, 0x6f, 0x73, 0x52,
|
||||||
0x6c, 0x65, 0x74, 0x65, 0x42, 0x92, 0x01, 0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x72, 0x6b,
|
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e,
|
||||||
0x2e, 0x76, 0x31, 0x42, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74,
|
0x4c, 0x69, 0x73, 0x74, 0x56, 0x74, 0x78, 0x6f, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
|
||||||
0x6f, 0x50, 0x01, 0x5a, 0x3d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f,
|
0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x76, 0x31, 0x2f, 0x76,
|
||||||
0x61, 0x72, 0x6b, 0x2d, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x72, 0x6b, 0x2f,
|
0x74, 0x78, 0x6f, 0x73, 0x2f, 0x7b, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x12, 0x4c,
|
||||||
0x61, 0x70, 0x69, 0x2d, 0x73, 0x70, 0x65, 0x63, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
|
0x0a, 0x07, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x2e, 0x61, 0x72, 0x6b, 0x2e,
|
||||||
0x66, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x61, 0x72, 0x6b, 0x2f, 0x76, 0x31, 0x3b, 0x61, 0x72, 0x6b,
|
0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
||||||
0x76, 0x31, 0xa2, 0x02, 0x03, 0x41, 0x58, 0x58, 0xaa, 0x02, 0x06, 0x41, 0x72, 0x6b, 0x2e, 0x56,
|
0x74, 0x1a, 0x17, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e,
|
||||||
0x31, 0xca, 0x02, 0x06, 0x41, 0x72, 0x6b, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x12, 0x41, 0x72, 0x6b,
|
0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x10, 0x82, 0xd3, 0xe4, 0x93,
|
||||||
0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea,
|
0x02, 0x0a, 0x12, 0x08, 0x2f, 0x76, 0x31, 0x2f, 0x69, 0x6e, 0x66, 0x6f, 0x12, 0x74, 0x0a, 0x12,
|
||||||
0x02, 0x07, 0x41, 0x72, 0x6b, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
0x47, 0x65, 0x74, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x41, 0x64, 0x64, 0x72, 0x65,
|
||||||
0x33,
|
0x73, 0x73, 0x12, 0x21, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x42,
|
||||||
|
0x6f, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65,
|
||||||
|
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x47,
|
||||||
|
0x65, 0x74, 0x42, 0x6f, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x67, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73,
|
||||||
|
0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02,
|
||||||
|
0x11, 0x3a, 0x01, 0x2a, 0x22, 0x0c, 0x2f, 0x76, 0x31, 0x2f, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x69,
|
||||||
|
0x6e, 0x67, 0x12, 0x64, 0x0a, 0x0d, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d,
|
||||||
|
0x65, 0x6e, 0x74, 0x12, 0x1c, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65,
|
||||||
|
0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
||||||
|
0x74, 0x1a, 0x1d, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74,
|
||||||
|
0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
|
||||||
|
0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x3a, 0x01, 0x2a, 0x22, 0x0b, 0x2f, 0x76, 0x31,
|
||||||
|
0x2f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x73, 0x0a, 0x0f, 0x43, 0x6f, 0x6d, 0x70,
|
||||||
|
0x6c, 0x65, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x1e, 0x2e, 0x61, 0x72,
|
||||||
|
0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x61, 0x79,
|
||||||
|
0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x61, 0x72,
|
||||||
|
0x6b, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x50, 0x61, 0x79,
|
||||||
|
0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3,
|
||||||
|
0xe4, 0x93, 0x02, 0x19, 0x3a, 0x01, 0x2a, 0x22, 0x14, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x61, 0x79,
|
||||||
|
0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x92, 0x01,
|
||||||
|
0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x2e, 0x61, 0x72, 0x6b, 0x2e, 0x76, 0x31, 0x42, 0x0c, 0x53, 0x65,
|
||||||
|
0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3d, 0x67, 0x69,
|
||||||
|
0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x72, 0x6b, 0x2d, 0x6e, 0x65, 0x74,
|
||||||
|
0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x72, 0x6b, 0x2f, 0x61, 0x70, 0x69, 0x2d, 0x73, 0x70, 0x65,
|
||||||
|
0x63, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x61,
|
||||||
|
0x72, 0x6b, 0x2f, 0x76, 0x31, 0x3b, 0x61, 0x72, 0x6b, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x41, 0x58,
|
||||||
|
0x58, 0xaa, 0x02, 0x06, 0x41, 0x72, 0x6b, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x06, 0x41, 0x72, 0x6b,
|
||||||
|
0x5c, 0x56, 0x31, 0xe2, 0x02, 0x12, 0x41, 0x72, 0x6b, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42,
|
||||||
|
0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x07, 0x41, 0x72, 0x6b, 0x3a, 0x3a,
|
||||||
|
0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|||||||
@@ -3,13 +3,25 @@ module github.com/ark-network/ark/client
|
|||||||
go 1.23.1
|
go 1.23.1
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
github.com/btcsuite/btcd/btcutil/psbt v1.1.9
|
||||||
github.com/urfave/cli/v2 v2.27.4
|
github.com/urfave/cli/v2 v2.27.4
|
||||||
golang.org/x/term v0.23.0
|
golang.org/x/term v0.23.0
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
github.com/btcsuite/btcd v0.24.2 // indirect
|
||||||
|
github.com/btcsuite/btcd/btcec/v2 v2.3.4 // indirect
|
||||||
|
github.com/btcsuite/btcd/btcutil v1.1.5 // indirect
|
||||||
|
github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 // indirect
|
||||||
|
github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f // indirect
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.4 // indirect
|
github.com/cpuguy83/go-md2man/v2 v2.0.4 // indirect
|
||||||
|
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
|
||||||
|
github.com/decred/dcrd/crypto/blake256 v1.0.1 // indirect
|
||||||
|
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 // indirect
|
||||||
|
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
|
||||||
github.com/russross/blackfriday/v2 v2.1.0 // indirect
|
github.com/russross/blackfriday/v2 v2.1.0 // indirect
|
||||||
|
github.com/stretchr/testify v1.9.0 // indirect
|
||||||
github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect
|
github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect
|
||||||
|
golang.org/x/crypto v0.26.0 // indirect
|
||||||
golang.org/x/sys v0.24.0 // indirect
|
golang.org/x/sys v0.24.0 // indirect
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,6 +1,23 @@
|
|||||||
|
github.com/btcsuite/btcd v0.24.2 h1:aLmxPguqxza+4ag8R1I2nnJjSu2iFn/kqtHTIImswcY=
|
||||||
|
github.com/btcsuite/btcd/btcec/v2 v2.1.0/go.mod h1:2VzYrv4Gm4apmbVVsSq5bqf1Ec8v56E48Vt0Y/umPgA=
|
||||||
|
github.com/btcsuite/btcd/btcec/v2 v2.1.3/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE=
|
||||||
|
github.com/btcsuite/btcd/btcec/v2 v2.3.4 h1:3EJjcN70HCu/mwqlUsGK8GcNVyLVxFDlWurTXGPFfiQ=
|
||||||
|
github.com/btcsuite/btcd/btcec/v2 v2.3.4/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04=
|
||||||
|
github.com/btcsuite/btcd/btcutil v1.1.5 h1:+wER79R5670vs/ZusMTF1yTcRYE5GUsFbdjdisflzM8=
|
||||||
|
github.com/btcsuite/btcd/btcutil/psbt v1.1.9 h1:UmfOIiWMZcVMOLaN+lxbbLSuoINGS1WmK1TZNI0b4yk=
|
||||||
|
github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc=
|
||||||
|
github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 h1:59Kx4K6lzOW5w6nFlA0v5+lk/6sjybR934QNHSJZPTQ=
|
||||||
|
github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f h1:bAs4lUbRJpnnkd9VhRV3jjAVU7DJVjMaK+IsvSeZvFo=
|
||||||
github.com/cpuguy83/go-md2man/v2 v2.0.4 h1:wfIWP927BUkWJb2NmU/kNDYIBTh/ziUX91+lVfRxZq4=
|
github.com/cpuguy83/go-md2man/v2 v2.0.4 h1:wfIWP927BUkWJb2NmU/kNDYIBTh/ziUX91+lVfRxZq4=
|
||||||
|
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
|
||||||
|
github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y=
|
||||||
|
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 h1:rpfIENRNNilwHwZeG5+P150SMrnNEcHYvcCuK6dPZSg=
|
||||||
|
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
|
||||||
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
|
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
|
||||||
|
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
|
||||||
github.com/urfave/cli/v2 v2.27.4 h1:o1owoI+02Eb+K107p27wEX9Bb8eqIoZCfLXloLUSWJ8=
|
github.com/urfave/cli/v2 v2.27.4 h1:o1owoI+02Eb+K107p27wEX9Bb8eqIoZCfLXloLUSWJ8=
|
||||||
github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4=
|
github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4=
|
||||||
|
golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw=
|
||||||
golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg=
|
golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg=
|
||||||
golang.org/x/term v0.23.0 h1:F6D4vR+EHoL9/sWAWgAR1H2DcHr4PareCbAaCo1RpuU=
|
golang.org/x/term v0.23.0 h1:F6D4vR+EHoL9/sWAWgAR1H2DcHr4PareCbAaCo1RpuU=
|
||||||
|
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import (
|
|||||||
arksdk "github.com/ark-network/ark/pkg/client-sdk"
|
arksdk "github.com/ark-network/ark/pkg/client-sdk"
|
||||||
"github.com/ark-network/ark/pkg/client-sdk/store"
|
"github.com/ark-network/ark/pkg/client-sdk/store"
|
||||||
filestore "github.com/ark-network/ark/pkg/client-sdk/store/file"
|
filestore "github.com/ark-network/ark/pkg/client-sdk/store/file"
|
||||||
|
"github.com/btcsuite/btcd/btcutil/psbt"
|
||||||
"github.com/urfave/cli/v2"
|
"github.com/urfave/cli/v2"
|
||||||
"golang.org/x/term"
|
"golang.org/x/term"
|
||||||
)
|
)
|
||||||
@@ -460,13 +461,18 @@ func parseReceivers(receveirsJSON string, isBitcoin bool) ([]arksdk.Receiver, er
|
|||||||
|
|
||||||
func sendCovenantLess(ctx *cli.Context, receivers []arksdk.Receiver) error {
|
func sendCovenantLess(ctx *cli.Context, receivers []arksdk.Receiver) error {
|
||||||
computeExpiration := ctx.Bool(enableExpiryCoinselectFlag.Name)
|
computeExpiration := ctx.Bool(enableExpiryCoinselectFlag.Name)
|
||||||
txID, err := arkSdkClient.SendAsync(
|
redeemTx, err := arkSdkClient.SendAsync(
|
||||||
ctx.Context, computeExpiration, receivers,
|
ctx.Context, computeExpiration, receivers,
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return printJSON(map[string]interface{}{"txid": txID})
|
ptx, err := psbt.NewFromRawBytes(strings.NewReader(redeemTx), true)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("WARN: failed to parse the redeem tx, returning the full psbt")
|
||||||
|
return printJSON(map[string]string{"redeem_tx": redeemTx})
|
||||||
|
}
|
||||||
|
return printJSON(map[string]string{"txid": ptx.UnsignedTx.TxHash().String()})
|
||||||
}
|
}
|
||||||
|
|
||||||
func sendCovenant(ctx context.Context, receivers []arksdk.Receiver) error {
|
func sendCovenant(ctx context.Context, receivers []arksdk.Receiver) error {
|
||||||
|
|||||||
@@ -88,7 +88,6 @@ type Vtxo struct {
|
|||||||
RedeemTx string
|
RedeemTx string
|
||||||
UnconditionalForfeitTxs []string
|
UnconditionalForfeitTxs []string
|
||||||
Pending bool
|
Pending bool
|
||||||
PendingChange bool
|
|
||||||
SpentBy string
|
SpentBy string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -462,7 +462,6 @@ func (v vtxo) toVtxo() client.Vtxo {
|
|||||||
RoundTxid: v.GetPoolTxid(),
|
RoundTxid: v.GetPoolTxid(),
|
||||||
ExpiresAt: expiresAt,
|
ExpiresAt: expiresAt,
|
||||||
Pending: v.GetPending(),
|
Pending: v.GetPending(),
|
||||||
PendingChange: v.GetPendingChange(),
|
|
||||||
RedeemTx: redeemTx,
|
RedeemTx: redeemTx,
|
||||||
UnconditionalForfeitTxs: uncondForfeitTxs,
|
UnconditionalForfeitTxs: uncondForfeitTxs,
|
||||||
SpentBy: v.GetSpentBy(),
|
SpentBy: v.GetSpentBy(),
|
||||||
|
|||||||
@@ -177,7 +177,6 @@ func (a *restClient) ListVtxos(
|
|||||||
RoundTxid: v.PoolTxid,
|
RoundTxid: v.PoolTxid,
|
||||||
ExpiresAt: expiresAt,
|
ExpiresAt: expiresAt,
|
||||||
Pending: v.Pending,
|
Pending: v.Pending,
|
||||||
PendingChange: v.PendingChange,
|
|
||||||
RedeemTx: redeemTx,
|
RedeemTx: redeemTx,
|
||||||
UnconditionalForfeitTxs: uncondForfeitTxs,
|
UnconditionalForfeitTxs: uncondForfeitTxs,
|
||||||
SpentBy: v.SpentBy,
|
SpentBy: v.SpentBy,
|
||||||
|
|||||||
@@ -33,9 +33,6 @@ type V1Vtxo struct {
|
|||||||
// pending
|
// pending
|
||||||
Pending bool `json:"pending,omitempty"`
|
Pending bool `json:"pending,omitempty"`
|
||||||
|
|
||||||
// pending change
|
|
||||||
PendingChange bool `json:"pendingChange,omitempty"`
|
|
||||||
|
|
||||||
// pending data
|
// pending data
|
||||||
PendingData *V1PendingPayment `json:"pendingData,omitempty"`
|
PendingData *V1PendingPayment `json:"pendingData,omitempty"`
|
||||||
|
|
||||||
|
|||||||
@@ -20,32 +20,17 @@ func TestVtxosToTxs(t *testing.T) {
|
|||||||
{
|
{
|
||||||
name: "Alice Before Sending Async",
|
name: "Alice Before Sending Async",
|
||||||
fixture: aliceBeforeSendingAsync,
|
fixture: aliceBeforeSendingAsync,
|
||||||
want: []Transaction{
|
want: []Transaction{},
|
||||||
{
|
|
||||||
RoundTxid: "377fa2fbd27c82bdbc095478384c88b6c75432c0ef464189e49c965194446cdf",
|
|
||||||
Amount: 20000,
|
|
||||||
Type: TxReceived,
|
|
||||||
IsPending: false,
|
|
||||||
CreatedAt: time.Unix(1726054898, 0),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Alice After Sending Async",
|
name: "Alice After Sending Async",
|
||||||
fixture: aliceAfterSendingAsync,
|
fixture: aliceAfterSendingAsync,
|
||||||
want: []Transaction{
|
want: []Transaction{
|
||||||
{
|
|
||||||
RoundTxid: "377fa2fbd27c82bdbc095478384c88b6c75432c0ef464189e49c965194446cdf",
|
|
||||||
Amount: 20000,
|
|
||||||
Type: TxReceived,
|
|
||||||
IsPending: false,
|
|
||||||
CreatedAt: time.Unix(1726054898, 0),
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
RedeemTxid: "94fa598302f17f00c8881e742ec0ce2f8c8d16f3d54fe6ba0fb7d13a493d84ad",
|
RedeemTxid: "94fa598302f17f00c8881e742ec0ce2f8c8d16f3d54fe6ba0fb7d13a493d84ad",
|
||||||
Amount: 1000,
|
Amount: 1000,
|
||||||
Type: TxSent,
|
Type: TxSent,
|
||||||
IsPending: true,
|
IsPending: false,
|
||||||
CreatedAt: time.Unix(1726054898, 0),
|
CreatedAt: time.Unix(1726054898, 0),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -54,13 +39,6 @@ func TestVtxosToTxs(t *testing.T) {
|
|||||||
name: "Bob Before Claiming Async",
|
name: "Bob Before Claiming Async",
|
||||||
fixture: bobBeforeClaimingAsync,
|
fixture: bobBeforeClaimingAsync,
|
||||||
want: []Transaction{
|
want: []Transaction{
|
||||||
{
|
|
||||||
RedeemTxid: "766fc46ba5c2da41cd4c4bc0566e0f4e0f24c184c41acd3bead5cd7b11120367",
|
|
||||||
Amount: 2000,
|
|
||||||
Type: TxReceived,
|
|
||||||
IsPending: true,
|
|
||||||
CreatedAt: time.Unix(1726486359, 0),
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
RedeemTxid: "94fa598302f17f00c8881e742ec0ce2f8c8d16f3d54fe6ba0fb7d13a493d84ad",
|
RedeemTxid: "94fa598302f17f00c8881e742ec0ce2f8c8d16f3d54fe6ba0fb7d13a493d84ad",
|
||||||
Amount: 1000,
|
Amount: 1000,
|
||||||
@@ -68,19 +46,19 @@ func TestVtxosToTxs(t *testing.T) {
|
|||||||
IsPending: true,
|
IsPending: true,
|
||||||
CreatedAt: time.Unix(1726054898, 0),
|
CreatedAt: time.Unix(1726054898, 0),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
RedeemTxid: "766fc46ba5c2da41cd4c4bc0566e0f4e0f24c184c41acd3bead5cd7b11120367",
|
||||||
|
Amount: 2000,
|
||||||
|
Type: TxReceived,
|
||||||
|
IsPending: true,
|
||||||
|
CreatedAt: time.Unix(1726486359, 0),
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Bob After Claiming Async",
|
name: "Bob After Claiming Async",
|
||||||
fixture: bobAfterClaimingAsync,
|
fixture: bobAfterClaimingAsync,
|
||||||
want: []Transaction{
|
want: []Transaction{
|
||||||
{
|
|
||||||
RedeemTxid: "766fc46ba5c2da41cd4c4bc0566e0f4e0f24c184c41acd3bead5cd7b11120367",
|
|
||||||
Amount: 2000,
|
|
||||||
Type: TxReceived,
|
|
||||||
IsPending: false,
|
|
||||||
CreatedAt: time.Unix(1726486359, 0),
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
RedeemTxid: "94fa598302f17f00c8881e742ec0ce2f8c8d16f3d54fe6ba0fb7d13a493d84ad",
|
RedeemTxid: "94fa598302f17f00c8881e742ec0ce2f8c8d16f3d54fe6ba0fb7d13a493d84ad",
|
||||||
Amount: 1000,
|
Amount: 1000,
|
||||||
@@ -88,6 +66,13 @@ func TestVtxosToTxs(t *testing.T) {
|
|||||||
IsPending: false,
|
IsPending: false,
|
||||||
CreatedAt: time.Unix(1726054898, 0),
|
CreatedAt: time.Unix(1726054898, 0),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
RedeemTxid: "766fc46ba5c2da41cd4c4bc0566e0f4e0f24c184c41acd3bead5cd7b11120367",
|
||||||
|
Amount: 2000,
|
||||||
|
Type: TxReceived,
|
||||||
|
IsPending: false,
|
||||||
|
CreatedAt: time.Unix(1726486359, 0),
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -95,11 +80,11 @@ func TestVtxosToTxs(t *testing.T) {
|
|||||||
fixture: bobAfterSendingAsync,
|
fixture: bobAfterSendingAsync,
|
||||||
want: []Transaction{
|
want: []Transaction{
|
||||||
{
|
{
|
||||||
RedeemTxid: "23c3a885f0ea05f7bdf83f3bf7f8ac9dc3f791ad292f4e63a6f53fa5e4935ab0",
|
RedeemTxid: "94fa598302f17f00c8881e742ec0ce2f8c8d16f3d54fe6ba0fb7d13a493d84ad",
|
||||||
Amount: 2100,
|
Amount: 1000,
|
||||||
Type: TxSent,
|
Type: TxReceived,
|
||||||
IsPending: true,
|
IsPending: false,
|
||||||
CreatedAt: time.Unix(1726503865, 0),
|
CreatedAt: time.Unix(1726054898, 0),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
RedeemTxid: "766fc46ba5c2da41cd4c4bc0566e0f4e0f24c184c41acd3bead5cd7b11120367",
|
RedeemTxid: "766fc46ba5c2da41cd4c4bc0566e0f4e0f24c184c41acd3bead5cd7b11120367",
|
||||||
@@ -109,11 +94,11 @@ func TestVtxosToTxs(t *testing.T) {
|
|||||||
CreatedAt: time.Unix(1726486359, 0),
|
CreatedAt: time.Unix(1726486359, 0),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
RedeemTxid: "94fa598302f17f00c8881e742ec0ce2f8c8d16f3d54fe6ba0fb7d13a493d84ad",
|
RedeemTxid: "23c3a885f0ea05f7bdf83f3bf7f8ac9dc3f791ad292f4e63a6f53fa5e4935ab0",
|
||||||
Amount: 1000,
|
Amount: 2100,
|
||||||
Type: TxReceived,
|
Type: TxSent,
|
||||||
IsPending: false,
|
IsPending: false,
|
||||||
CreatedAt: time.Unix(1726054898, 0),
|
CreatedAt: time.Unix(1726503865, 0),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -121,11 +106,11 @@ func TestVtxosToTxs(t *testing.T) {
|
|||||||
|
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
vtxos, boardingTxs, err := loadFixtures(tt.fixture)
|
vtxos, ignoreTxs, err := loadFixtures(tt.fixture)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("failed to load fixture: %s", err)
|
t.Fatalf("failed to load fixture: %s", err)
|
||||||
}
|
}
|
||||||
got, err := vtxosToTxsCovenantless(30, vtxos.spendable, vtxos.spent, boardingTxs)
|
got, err := vtxosToTxsCovenantless(30, vtxos.spendable, vtxos.spent, ignoreTxs)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Len(t, got, len(tt.want))
|
require.Len(t, got, len(tt.want))
|
||||||
|
|
||||||
@@ -147,17 +132,9 @@ type vtxos struct {
|
|||||||
spent []client.Vtxo
|
spent []client.Vtxo
|
||||||
}
|
}
|
||||||
|
|
||||||
func loadFixtures(jsonStr string) (vtxos, []Transaction, error) {
|
func loadFixtures(jsonStr string) (vtxos, map[string]struct{}, error) {
|
||||||
var data struct {
|
var data struct {
|
||||||
BoardingTxs []struct {
|
IgnoreTxs []string `json:"ignoreTxs"`
|
||||||
BoardingTxid string `json:"boardingTxid"`
|
|
||||||
RoundTxid string `json:"roundTxid"`
|
|
||||||
Amount uint64 `json:"amount"`
|
|
||||||
Type TxType `json:"txType"`
|
|
||||||
Pending bool `json:"pending"`
|
|
||||||
Claimed bool `json:"claimed"`
|
|
||||||
CreatedAt string `json:"createdAt"`
|
|
||||||
} `json:"boardingTxs"`
|
|
||||||
SpendableVtxos []struct {
|
SpendableVtxos []struct {
|
||||||
Outpoint struct {
|
Outpoint struct {
|
||||||
Txid string `json:"txid"`
|
Txid string `json:"txid"`
|
||||||
@@ -254,28 +231,17 @@ func loadFixtures(jsonStr string) (vtxos, []Transaction, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
boardingTxs := make([]Transaction, len(data.BoardingTxs))
|
|
||||||
for i, tx := range data.BoardingTxs {
|
|
||||||
createdAt, err := parseTimestamp(tx.CreatedAt)
|
|
||||||
if err != nil {
|
|
||||||
return vtxos{}, nil, err
|
|
||||||
}
|
|
||||||
boardingTxs[i] = Transaction{
|
|
||||||
BoardingTxid: tx.BoardingTxid,
|
|
||||||
RoundTxid: tx.RoundTxid,
|
|
||||||
Amount: tx.Amount,
|
|
||||||
Type: TxReceived,
|
|
||||||
IsPending: tx.Pending,
|
|
||||||
CreatedAt: createdAt,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
vtxos := vtxos{
|
vtxos := vtxos{
|
||||||
spendable: spendable,
|
spendable: spendable,
|
||||||
spent: spent,
|
spent: spent,
|
||||||
}
|
}
|
||||||
|
|
||||||
return vtxos, boardingTxs, nil
|
ignoreTxs := make(map[string]struct{})
|
||||||
|
for _, tx := range data.IgnoreTxs {
|
||||||
|
ignoreTxs[tx] = struct{}{}
|
||||||
|
}
|
||||||
|
|
||||||
|
return vtxos, ignoreTxs, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseAmount(amountStr string) (uint64, error) {
|
func parseAmount(amountStr string) (uint64, error) {
|
||||||
@@ -303,15 +269,8 @@ func parseTimestamp(timestamp string) (time.Time, error) {
|
|||||||
var (
|
var (
|
||||||
aliceBeforeSendingAsync = `
|
aliceBeforeSendingAsync = `
|
||||||
{
|
{
|
||||||
"boardingTxs": [
|
"ignoreTxs": [
|
||||||
{
|
"377fa2fbd27c82bdbc095478384c88b6c75432c0ef464189e49c965194446cdf"
|
||||||
"boardingTxid": "69ccb6520e0b91ac1cbaa459b16ec1e3ff5f6349990b0d149dd8e6c6485d316c",
|
|
||||||
"roundTxid": "377fa2fbd27c82bdbc095478384c88b6c75432c0ef464189e49c965194446cdf",
|
|
||||||
"amount": 20000,
|
|
||||||
"pending": false,
|
|
||||||
"claimed": true,
|
|
||||||
"createdAt": "1726503865"
|
|
||||||
}
|
|
||||||
],
|
],
|
||||||
"spendableVtxos": [
|
"spendableVtxos": [
|
||||||
{
|
{
|
||||||
@@ -337,15 +296,8 @@ var (
|
|||||||
|
|
||||||
aliceAfterSendingAsync = `
|
aliceAfterSendingAsync = `
|
||||||
{
|
{
|
||||||
"boardingTxs": [
|
"ignoreTxs": [
|
||||||
{
|
"377fa2fbd27c82bdbc095478384c88b6c75432c0ef464189e49c965194446cdf"
|
||||||
"boardingTxid": "69ccb6520e0b91ac1cbaa459b16ec1e3ff5f6349990b0d149dd8e6c6485d316c",
|
|
||||||
"roundTxid": "377fa2fbd27c82bdbc095478384c88b6c75432c0ef464189e49c965194446cdf",
|
|
||||||
"amount": 20000,
|
|
||||||
"pending": false,
|
|
||||||
"claimed": true,
|
|
||||||
"createdAt": "1726503865"
|
|
||||||
}
|
|
||||||
],
|
],
|
||||||
"spendableVtxos": [
|
"spendableVtxos": [
|
||||||
{
|
{
|
||||||
@@ -362,7 +314,7 @@ var (
|
|||||||
"spentBy": "",
|
"spentBy": "",
|
||||||
"expireAt": "1726054928",
|
"expireAt": "1726054928",
|
||||||
"swept": false,
|
"swept": false,
|
||||||
"pending": true,
|
"pending": false,
|
||||||
"pendingData": {
|
"pendingData": {
|
||||||
"redeemTx": "cHNidP8BAIkCAAAAAWwxXUjG5tidFA0LmUljX//jwW6xWaS6HKyRCw5StsxpAAAAAAD/////AugDAAAAAAAAIlEgt2eR8LtqTP7yUcQtSydeGrRiHnVmHHnZwYjdC23G7MZwSQAAAAAAACJRIKfUzf/o9h+r0v9y4nmyOt9qO8EkDumQPQZGTbEv8fSFAAAAAAABASsgTgAAAAAAACJRIKfUzf/o9h+r0v9y4nmyOt9qO8EkDumQPQZGTbEv8fSFIgYDp9sz9Cto7FhF+C929Y/jJw1zkRWxq6NURd9kX05mShcYAAAAAFYAAIAAAACAAQAAgAAAAAAAAAAAQRSvBIBey3T0IV353FkuGLMmMJFpqHTrliIsJwJsfJkzq7J0B8bQ0j9842h5lUfOWcbj2TeoFx6OCpgoHIqWIBhHQAFqkBLiRmP3AZ8MS77s1QIWZswMV3L72D9gN0f0MbD6XHkmzZeC1clF3uzxr+13wsF0vcFe29Zl3e2gAhMNGYVCFcFQkpt0waBJVLeLS2A16XpeB4paDyjsltVHv+6azoA6wKRtST8P7teUpSF4DAEbfJj5OIXITx5QGbZns/AtxqGyRSCn2zP0K2jsWEX4L3b1j+MnDXORFbGro1RF32RfTmZKF60grwSAXst09CFd+dxZLhizJjCRaah065YiLCcCbHyZM6uswCEWp9sz9Cto7FhF+C929Y/jJw1zkRWxq6NURd9kX05mShc5AbJ0B8bQ0j9842h5lUfOWcbj2TeoFx6OCpgoHIqWIBhHAAAAAFYAAIAAAACAAQAAgAAAAAAAAAAAARcgUJKbdMGgSVS3i0tgNel6XgeKWg8o7JbVR7/ums6AOsAAAAA=",
|
"redeemTx": "cHNidP8BAIkCAAAAAWwxXUjG5tidFA0LmUljX//jwW6xWaS6HKyRCw5StsxpAAAAAAD/////AugDAAAAAAAAIlEgt2eR8LtqTP7yUcQtSydeGrRiHnVmHHnZwYjdC23G7MZwSQAAAAAAACJRIKfUzf/o9h+r0v9y4nmyOt9qO8EkDumQPQZGTbEv8fSFAAAAAAABASsgTgAAAAAAACJRIKfUzf/o9h+r0v9y4nmyOt9qO8EkDumQPQZGTbEv8fSFIgYDp9sz9Cto7FhF+C929Y/jJw1zkRWxq6NURd9kX05mShcYAAAAAFYAAIAAAACAAQAAgAAAAAAAAAAAQRSvBIBey3T0IV353FkuGLMmMJFpqHTrliIsJwJsfJkzq7J0B8bQ0j9842h5lUfOWcbj2TeoFx6OCpgoHIqWIBhHQAFqkBLiRmP3AZ8MS77s1QIWZswMV3L72D9gN0f0MbD6XHkmzZeC1clF3uzxr+13wsF0vcFe29Zl3e2gAhMNGYVCFcFQkpt0waBJVLeLS2A16XpeB4paDyjsltVHv+6azoA6wKRtST8P7teUpSF4DAEbfJj5OIXITx5QGbZns/AtxqGyRSCn2zP0K2jsWEX4L3b1j+MnDXORFbGro1RF32RfTmZKF60grwSAXst09CFd+dxZLhizJjCRaah065YiLCcCbHyZM6uswCEWp9sz9Cto7FhF+C929Y/jJw1zkRWxq6NURd9kX05mShc5AbJ0B8bQ0j9842h5lUfOWcbj2TeoFx6OCpgoHIqWIBhHAAAAAFYAAIAAAACAAQAAgAAAAAAAAAAAARcgUJKbdMGgSVS3i0tgNel6XgeKWg8o7JbVR7/ums6AOsAAAAA=",
|
||||||
"unconditionalForfeitTxs": [
|
"unconditionalForfeitTxs": [
|
||||||
@@ -527,7 +479,7 @@ var (
|
|||||||
"spentBy": "",
|
"spentBy": "",
|
||||||
"expireAt": "1726503895",
|
"expireAt": "1726503895",
|
||||||
"swept": false,
|
"swept": false,
|
||||||
"pending": true,
|
"pending": false,
|
||||||
"pendingData": {
|
"pendingData": {
|
||||||
"redeemTx": "cHNidP8BAIkCAAAAAdOK9YzYw1ceJznqJxtRXGe0KeHj6CLcLtqLVwcbMCivAAAAAAD/////ArgLAAAAAAAAIlEgC39Vxhw3dIa4heHgFS6X4XwDl1mBggsKLVTBwF1h3qEgegEAAAAAACJRIMkktfIFxFNTtAmy3K0p+7JqVn2kcA0P6y2vJ1QX2zysAAAAAAABASughgEAAAAAACJRIMkktfIFxFNTtAmy3K0p+7JqVn2kcA0P6y2vJ1QX2zysIgYDjGeMfnNwCrU45iB3iRqiFdWTADaiJ968+w3ruFuq1F0YAAAAAFYAAIAAAACAAQAAgAAAAAAAAAAAQRTYEOuHJ0hyLBGzY8nSHpD2F1nby5/XQ5Sh2Je+cQ5Wsx0ZucLmB/LLspxMRN9JcJn3Q2KJRMhhg7415cCg1d0gQNSvgaBk/1WLYqQxCKxCfv8ViVJ7vjBxvNO5tc2FEDy27V9cIrfL1jPJoVrhgPZT0GwY7dkVZS7saIKI03CbipBCFcBQkpt0waBJVLeLS2A16XpeB4paDyjsltVHv+6azoA6wPKiQ0JM6aw2kcUByijEbOydM3gTIVCGN/69q+dmyxcqRSCMZ4x+c3AKtTjmIHeJGqIV1ZMANqIn3rz7Deu4W6rUXa0g2BDrhydIciwRs2PJ0h6Q9hdZ28uf10OUodiXvnEOVrOswCEWjGeMfnNwCrU45iB3iRqiFdWTADaiJ968+w3ruFuq1F05AR0ZucLmB/LLspxMRN9JcJn3Q2KJRMhhg7415cCg1d0gAAAAAFYAAIAAAACAAQAAgAAAAAAAAAAAARcgUJKbdMGgSVS3i0tgNel6XgeKWg8o7JbVR7/ums6AOsAAAAA=",
|
"redeemTx": "cHNidP8BAIkCAAAAAdOK9YzYw1ceJznqJxtRXGe0KeHj6CLcLtqLVwcbMCivAAAAAAD/////ArgLAAAAAAAAIlEgC39Vxhw3dIa4heHgFS6X4XwDl1mBggsKLVTBwF1h3qEgegEAAAAAACJRIMkktfIFxFNTtAmy3K0p+7JqVn2kcA0P6y2vJ1QX2zysAAAAAAABASughgEAAAAAACJRIMkktfIFxFNTtAmy3K0p+7JqVn2kcA0P6y2vJ1QX2zysIgYDjGeMfnNwCrU45iB3iRqiFdWTADaiJ968+w3ruFuq1F0YAAAAAFYAAIAAAACAAQAAgAAAAAAAAAAAQRTYEOuHJ0hyLBGzY8nSHpD2F1nby5/XQ5Sh2Je+cQ5Wsx0ZucLmB/LLspxMRN9JcJn3Q2KJRMhhg7415cCg1d0gQNSvgaBk/1WLYqQxCKxCfv8ViVJ7vjBxvNO5tc2FEDy27V9cIrfL1jPJoVrhgPZT0GwY7dkVZS7saIKI03CbipBCFcBQkpt0waBJVLeLS2A16XpeB4paDyjsltVHv+6azoA6wPKiQ0JM6aw2kcUByijEbOydM3gTIVCGN/69q+dmyxcqRSCMZ4x+c3AKtTjmIHeJGqIV1ZMANqIn3rz7Deu4W6rUXa0g2BDrhydIciwRs2PJ0h6Q9hdZ28uf10OUodiXvnEOVrOswCEWjGeMfnNwCrU45iB3iRqiFdWTADaiJ968+w3ruFuq1F05AR0ZucLmB/LLspxMRN9JcJn3Q2KJRMhhg7415cCg1d0gAAAAAFYAAIAAAACAAQAAgAAAAAAAAAAAARcgUJKbdMGgSVS3i0tgNel6XgeKWg8o7JbVR7/ums6AOsAAAAA=",
|
||||||
"unconditionalForfeitTxs": [
|
"unconditionalForfeitTxs": [
|
||||||
|
|||||||
@@ -727,19 +727,39 @@ func (a *covenantlessArkClient) Claim(ctx context.Context) (string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (a *covenantlessArkClient) GetTransactionHistory(ctx context.Context) ([]Transaction, error) {
|
func (a *covenantlessArkClient) GetTransactionHistory(ctx context.Context) ([]Transaction, error) {
|
||||||
|
if a.StoreData == nil {
|
||||||
|
return nil, fmt.Errorf("client not initialized")
|
||||||
|
}
|
||||||
|
|
||||||
spendableVtxos, spentVtxos, err := a.ListVtxos(ctx)
|
spendableVtxos, spentVtxos, err := a.ListVtxos(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
config, err := a.store.GetData(ctx)
|
boardingTxs, ignoreVtxos, err := a.getBoardingTxs(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
boardingTxs := a.getBoardingTxs(ctx)
|
offchainTxs, err := vtxosToTxsCovenantless(
|
||||||
|
a.StoreData.RoundLifetime, spendableVtxos, spentVtxos, ignoreVtxos,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
return vtxosToTxsCovenantless(config.RoundLifetime, spendableVtxos, spentVtxos, boardingTxs)
|
txs := append(boardingTxs, offchainTxs...)
|
||||||
|
// Sort the slice by age
|
||||||
|
sort.Slice(txs, func(i, j int) bool {
|
||||||
|
txi := txs[i]
|
||||||
|
txj := txs[j]
|
||||||
|
if txi.CreatedAt.Equal(txj.CreatedAt) {
|
||||||
|
return txi.Type > txj.Type
|
||||||
|
}
|
||||||
|
return txi.CreatedAt.Before(txj.CreatedAt)
|
||||||
|
})
|
||||||
|
|
||||||
|
return txs, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *covenantlessArkClient) sendOnchain(
|
func (a *covenantlessArkClient) sendOnchain(
|
||||||
@@ -1746,6 +1766,12 @@ func (a *covenantlessArkClient) getRedeemBranches(
|
|||||||
|
|
||||||
for i := range vtxos {
|
for i := range vtxos {
|
||||||
vtxo := vtxos[i]
|
vtxo := vtxos[i]
|
||||||
|
|
||||||
|
// TODO: handle exit for pending changes
|
||||||
|
if vtxo.RedeemTx != "" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
if _, ok := congestionTrees[vtxo.RoundTxid]; !ok {
|
if _, ok := congestionTrees[vtxo.RoundTxid]; !ok {
|
||||||
round, err := a.client.GetRound(ctx, vtxo.RoundTxid)
|
round, err := a.client.GetRound(ctx, vtxo.RoundTxid)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -1798,21 +1824,31 @@ func (a *covenantlessArkClient) getOffchainBalance(
|
|||||||
return balance, amountByExpiration, nil
|
return balance, amountByExpiration, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *covenantlessArkClient) getAllBoardingUtxos(ctx context.Context) ([]explorer.Utxo, error) {
|
func (a *covenantlessArkClient) getAllBoardingUtxos(
|
||||||
|
ctx context.Context,
|
||||||
|
) ([]explorer.Utxo, map[string]struct{}, error) {
|
||||||
_, boardingAddrs, _, err := a.wallet.GetAddresses(ctx)
|
_, boardingAddrs, _, err := a.wallet.GetAddresses(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
utxos := []explorer.Utxo{}
|
utxos := []explorer.Utxo{}
|
||||||
|
ignoreVtxos := make(map[string]struct{}, 0)
|
||||||
for _, addr := range boardingAddrs {
|
for _, addr := range boardingAddrs {
|
||||||
txs, err := a.explorer.GetTxs(addr)
|
txs, err := a.explorer.GetTxs(addr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
continue
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
for _, tx := range txs {
|
for _, tx := range txs {
|
||||||
for i, vout := range tx.Vout {
|
for i, vout := range tx.Vout {
|
||||||
if vout.Address == addr {
|
if vout.Address == addr {
|
||||||
|
spentStatuses, err := a.explorer.GetTxOutspends(tx.Txid)
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
if s := spentStatuses[i]; s.Spent {
|
||||||
|
ignoreVtxos[s.SpentBy] = struct{}{}
|
||||||
|
}
|
||||||
createdAt := time.Time{}
|
createdAt := time.Time{}
|
||||||
if tx.Status.Confirmed {
|
if tx.Status.Confirmed {
|
||||||
createdAt = time.Unix(tx.Status.Blocktime, 0)
|
createdAt = time.Unix(tx.Status.Blocktime, 0)
|
||||||
@@ -1828,7 +1864,7 @@ func (a *covenantlessArkClient) getAllBoardingUtxos(ctx context.Context) ([]expl
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return utxos, nil
|
return utxos, ignoreVtxos, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *covenantlessArkClient) getClaimableBoardingUtxos(ctx context.Context) ([]explorer.Utxo, error) {
|
func (a *covenantlessArkClient) getClaimableBoardingUtxos(ctx context.Context) ([]explorer.Utxo, error) {
|
||||||
@@ -1892,7 +1928,7 @@ func (a *covenantlessArkClient) getVtxos(
|
|||||||
|
|
||||||
pendingVtxos := make([]client.Vtxo, 0)
|
pendingVtxos := make([]client.Vtxo, 0)
|
||||||
for _, vtxo := range spendableVtxos {
|
for _, vtxo := range spendableVtxos {
|
||||||
if vtxo.Pending {
|
if vtxo.RedeemTx != "" {
|
||||||
pendingVtxos = append(pendingVtxos, vtxo)
|
pendingVtxos = append(pendingVtxos, vtxo)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2017,10 +2053,19 @@ func (a *covenantlessArkClient) offchainAddressToDefaultVtxoDescriptor(addr stri
|
|||||||
return vtxoScript.ToDescriptor(), nil
|
return vtxoScript.ToDescriptor(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *covenantlessArkClient) getBoardingTxs(ctx context.Context) (transactions []Transaction) {
|
// getBoardingTxs builds the boarding tx history from onchain utxos:
|
||||||
|
// - unspent utxo => pending boarding tx
|
||||||
|
// - spent utxo => claimed boarding tx
|
||||||
|
//
|
||||||
|
// The tx spending an onchain utxo is an ark round, therefore an indexed list
|
||||||
|
// of round txids is returned to specify the vtxos to be ignored to build the
|
||||||
|
// offchain tx history and prevent duplicates.
|
||||||
|
func (a *covenantlessArkClient) getBoardingTxs(
|
||||||
|
ctx context.Context,
|
||||||
|
) ([]Transaction, map[string]struct{}, error) {
|
||||||
utxos, err := a.getClaimableBoardingUtxos(ctx)
|
utxos, err := a.getClaimableBoardingUtxos(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
isPending := make(map[string]bool)
|
isPending := make(map[string]bool)
|
||||||
@@ -2028,25 +2073,37 @@ func (a *covenantlessArkClient) getBoardingTxs(ctx context.Context) (transaction
|
|||||||
isPending[u.Txid] = true
|
isPending[u.Txid] = true
|
||||||
}
|
}
|
||||||
|
|
||||||
allUtxos, err := a.getAllBoardingUtxos(ctx)
|
allUtxos, ignoreVtxos, err := a.getAllBoardingUtxos(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unconfirmedTxs := make([]Transaction, 0)
|
||||||
|
confirmedTxs := make([]Transaction, 0)
|
||||||
for _, u := range allUtxos {
|
for _, u := range allUtxos {
|
||||||
pending := false
|
pending := false
|
||||||
if isPending[u.Txid] {
|
if isPending[u.Txid] {
|
||||||
pending = true
|
pending = true
|
||||||
}
|
}
|
||||||
transactions = append(transactions, Transaction{
|
|
||||||
|
tx := Transaction{
|
||||||
BoardingTxid: u.Txid,
|
BoardingTxid: u.Txid,
|
||||||
Amount: u.Amount,
|
Amount: u.Amount,
|
||||||
Type: TxReceived,
|
Type: TxReceived,
|
||||||
IsPending: pending,
|
IsPending: pending,
|
||||||
CreatedAt: u.CreatedAt,
|
CreatedAt: u.CreatedAt,
|
||||||
})
|
}
|
||||||
|
|
||||||
|
emptyTime := time.Time{}
|
||||||
|
if u.CreatedAt == emptyTime {
|
||||||
|
unconfirmedTxs = append(unconfirmedTxs, tx)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
confirmedTxs = append(confirmedTxs, tx)
|
||||||
}
|
}
|
||||||
return
|
|
||||||
|
txs := append(unconfirmedTxs, confirmedTxs...)
|
||||||
|
return txs, ignoreVtxos, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func findVtxosBySpentBy(allVtxos []client.Vtxo, txid string) (vtxos []client.Vtxo) {
|
func findVtxosBySpentBy(allVtxos []client.Vtxo, txid string) (vtxos []client.Vtxo) {
|
||||||
@@ -2059,79 +2116,98 @@ func findVtxosBySpentBy(allVtxos []client.Vtxo, txid string) (vtxos []client.Vtx
|
|||||||
}
|
}
|
||||||
|
|
||||||
func vtxosToTxsCovenantless(
|
func vtxosToTxsCovenantless(
|
||||||
roundLifetime int64, spendable, spent []client.Vtxo, boardingTxs []Transaction,
|
roundLifetime int64, spendable, spent []client.Vtxo, ignoreVtxos map[string]struct{},
|
||||||
) ([]Transaction, error) {
|
) ([]Transaction, error) {
|
||||||
transactions := make([]Transaction, 0)
|
transactions := make([]Transaction, 0)
|
||||||
unconfirmedBoardingTxs := make([]Transaction, 0)
|
|
||||||
for _, tx := range boardingTxs {
|
indexedTxs := make(map[string]Transaction)
|
||||||
emptyTime := time.Time{}
|
for _, v := range spent {
|
||||||
if tx.CreatedAt == emptyTime {
|
// If the vtxo was pending and is spent => it's been claimed.
|
||||||
unconfirmedBoardingTxs = append(unconfirmedBoardingTxs, tx)
|
if v.Pending {
|
||||||
|
transactions = append(transactions, Transaction{
|
||||||
|
RedeemTxid: v.Txid,
|
||||||
|
Amount: v.Amount,
|
||||||
|
Type: TxReceived,
|
||||||
|
IsPending: false,
|
||||||
|
CreatedAt: getCreatedAtFromExpiry(roundLifetime, *v.ExpiresAt),
|
||||||
|
})
|
||||||
|
// Delete any duplicate in the indexed list.
|
||||||
|
delete(indexedTxs, v.SpentBy)
|
||||||
|
// Ignore the spendable vtxo created by the claim.
|
||||||
|
ignoreVtxos[v.SpentBy] = struct{}{}
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If this vtxo spent another one => subtract the amount to find the sent amount.
|
||||||
|
if tx, ok := indexedTxs[v.Txid]; ok {
|
||||||
|
tx.Amount -= v.Amount
|
||||||
|
if v.RedeemTx == "" {
|
||||||
|
tx.RedeemTxid = ""
|
||||||
|
} else {
|
||||||
|
tx.RoundTxid = ""
|
||||||
|
}
|
||||||
|
indexedTxs[v.Txid] = tx
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add a transaction to the indexed list if not existing, it will be deleted if it's a duplicate.
|
||||||
|
tx, ok := indexedTxs[v.SpentBy]
|
||||||
|
if !ok {
|
||||||
|
indexedTxs[v.SpentBy] = Transaction{
|
||||||
|
RedeemTxid: v.SpentBy,
|
||||||
|
RoundTxid: v.SpentBy,
|
||||||
|
Amount: v.Amount,
|
||||||
|
Type: TxSent,
|
||||||
|
IsPending: false,
|
||||||
|
CreatedAt: getCreatedAtFromExpiry(roundLifetime, *v.ExpiresAt),
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// Otherwise add the amount of this vtxo to the one of the tx in the indexed list.
|
||||||
|
tx.Amount += v.Amount
|
||||||
|
indexedTxs[v.SpentBy] = tx
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, v := range spendable {
|
||||||
|
_, ok1 := ignoreVtxos[v.Txid]
|
||||||
|
_, ok2 := ignoreVtxos[v.RoundTxid]
|
||||||
|
if ok1 || ok2 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
txid := v.RoundTxid
|
||||||
|
if txid == "" {
|
||||||
|
txid = v.Txid
|
||||||
|
}
|
||||||
|
|
||||||
|
tx, ok := indexedTxs[txid]
|
||||||
|
if !ok {
|
||||||
|
redeemTxid := ""
|
||||||
|
if v.RoundTxid == "" {
|
||||||
|
redeemTxid = v.Txid
|
||||||
|
}
|
||||||
|
transactions = append(transactions, Transaction{
|
||||||
|
RedeemTxid: redeemTxid,
|
||||||
|
RoundTxid: v.RoundTxid,
|
||||||
|
Amount: v.Amount,
|
||||||
|
Type: TxReceived,
|
||||||
|
IsPending: v.Pending,
|
||||||
|
CreatedAt: getCreatedAtFromExpiry(roundLifetime, *v.ExpiresAt),
|
||||||
|
})
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
tx.Amount -= v.Amount
|
||||||
|
if v.RedeemTx == "" {
|
||||||
|
tx.RedeemTxid = ""
|
||||||
|
} else {
|
||||||
|
tx.RoundTxid = ""
|
||||||
|
}
|
||||||
|
indexedTxs[txid] = tx
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tx := range indexedTxs {
|
||||||
transactions = append(transactions, tx)
|
transactions = append(transactions, tx)
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, v := range append(spendable, spent...) {
|
return transactions, nil
|
||||||
// get vtxo amount
|
|
||||||
amount := int(v.Amount)
|
|
||||||
// ignore not pending
|
|
||||||
if !v.Pending {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
// find other spent vtxos that spent this one
|
|
||||||
relatedVtxos := findVtxosBySpentBy(spent, v.Txid)
|
|
||||||
for _, r := range relatedVtxos {
|
|
||||||
if r.Amount < math.MaxInt64 {
|
|
||||||
rAmount := int(r.Amount)
|
|
||||||
amount -= rAmount
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// what kind of tx was this? send or receive?
|
|
||||||
txType := TxReceived
|
|
||||||
if amount < 0 {
|
|
||||||
txType = TxSent
|
|
||||||
}
|
|
||||||
|
|
||||||
// get redeem txid
|
|
||||||
redeemTxid := ""
|
|
||||||
if len(v.RedeemTx) > 0 {
|
|
||||||
txid, err := getRedeemTxidCovenantless(v.RedeemTx)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
redeemTxid = txid
|
|
||||||
}
|
|
||||||
// add transaction
|
|
||||||
transactions = append(transactions, Transaction{
|
|
||||||
RoundTxid: v.RoundTxid,
|
|
||||||
RedeemTxid: redeemTxid,
|
|
||||||
Amount: uint64(math.Abs(float64(amount))),
|
|
||||||
Type: txType,
|
|
||||||
IsPending: (v.Pending && len(v.SpentBy) == 0),
|
|
||||||
IsPendingChange: v.PendingChange,
|
|
||||||
CreatedAt: getCreatedAtFromExpiry(roundLifetime, *v.ExpiresAt),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sort the slice by age
|
|
||||||
sort.Slice(transactions, func(i, j int) bool {
|
|
||||||
txi := transactions[i]
|
|
||||||
txj := transactions[j]
|
|
||||||
if txi.CreatedAt.Equal(txj.CreatedAt) {
|
|
||||||
return txi.Type > txj.Type
|
|
||||||
}
|
|
||||||
return txi.CreatedAt.After(txj.CreatedAt)
|
|
||||||
})
|
|
||||||
|
|
||||||
return append(unconfirmedBoardingTxs, transactions...), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func getRedeemTxidCovenantless(redeemTx string) (string, error) {
|
|
||||||
redeemPtx, err := psbt.NewFromRawBytes(strings.NewReader(redeemTx), true)
|
|
||||||
if err != nil {
|
|
||||||
return "", fmt.Errorf("failed to parse redeem tx: %s", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return redeemPtx.UnsignedTx.TxID(), nil
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -80,6 +80,11 @@ type ExplorerUtxo struct {
|
|||||||
} `json:"status"`
|
} `json:"status"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type SpentStatus struct {
|
||||||
|
Spent bool `json:"spent"`
|
||||||
|
SpentBy string `json:"txid,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
func (e ExplorerUtxo) ToUtxo(delay uint) Utxo {
|
func (e ExplorerUtxo) ToUtxo(delay uint) Utxo {
|
||||||
return newUtxo(e, delay)
|
return newUtxo(e, delay)
|
||||||
}
|
}
|
||||||
@@ -88,6 +93,7 @@ type Explorer interface {
|
|||||||
GetTxHex(txid string) (string, error)
|
GetTxHex(txid string) (string, error)
|
||||||
Broadcast(txHex string) (string, error)
|
Broadcast(txHex string) (string, error)
|
||||||
GetTxs(addr string) ([]ExplorerTx, error)
|
GetTxs(addr string) ([]ExplorerTx, error)
|
||||||
|
GetTxOutspends(tx string) ([]SpentStatus, error)
|
||||||
GetUtxos(addr string) ([]ExplorerUtxo, error)
|
GetUtxos(addr string) ([]ExplorerUtxo, error)
|
||||||
GetBalance(addr string) (uint64, error)
|
GetBalance(addr string) (uint64, error)
|
||||||
GetRedeemedVtxosBalance(
|
GetRedeemedVtxosBalance(
|
||||||
@@ -215,6 +221,28 @@ func (e *explorerSvc) GetTxs(addr string) ([]ExplorerTx, error) {
|
|||||||
return payload, nil
|
return payload, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (e *explorerSvc) GetTxOutspends(txid string) ([]SpentStatus, error) {
|
||||||
|
resp, err := http.Get(fmt.Sprintf("%s/tx/%s/outspends", e.baseUrl, txid))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
defer resp.Body.Close()
|
||||||
|
body, err := io.ReadAll(resp.Body)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if resp.StatusCode != http.StatusOK {
|
||||||
|
return nil, fmt.Errorf("failed to get txs: %s", string(body))
|
||||||
|
}
|
||||||
|
|
||||||
|
spentStatuses := make([]SpentStatus, 0)
|
||||||
|
if err := json.Unmarshal(body, &spentStatuses); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return spentStatuses, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (e *explorerSvc) GetUtxos(addr string) ([]ExplorerUtxo, error) {
|
func (e *explorerSvc) GetUtxos(addr string) ([]ExplorerUtxo, error) {
|
||||||
resp, err := http.Get(fmt.Sprintf("%s/address/%s/utxo", e.baseUrl, addr))
|
resp, err := http.Get(fmt.Sprintf("%s/address/%s/utxo", e.baseUrl, addr))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -131,12 +131,11 @@ const (
|
|||||||
type TxType string
|
type TxType string
|
||||||
|
|
||||||
type Transaction struct {
|
type Transaction struct {
|
||||||
BoardingTxid string
|
BoardingTxid string
|
||||||
RoundTxid string
|
RoundTxid string
|
||||||
RedeemTxid string
|
RedeemTxid string
|
||||||
Amount uint64
|
Amount uint64
|
||||||
Type TxType
|
Type TxType
|
||||||
IsPending bool
|
IsPending bool
|
||||||
IsPendingChange bool
|
CreatedAt time.Time
|
||||||
CreatedAt time.Time
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -265,7 +265,7 @@ func (s *covenantlessService) CompleteAsyncPayment(
|
|||||||
for outIndex, out := range redeemPtx.UnsignedTx.TxOut {
|
for outIndex, out := range redeemPtx.UnsignedTx.TxOut {
|
||||||
desc := asyncPayData.receivers[outIndex].Descriptor
|
desc := asyncPayData.receivers[outIndex].Descriptor
|
||||||
_, _, _, _, err := descriptor.ParseReversibleVtxoDescriptor(desc)
|
_, _, _, _, err := descriptor.ParseReversibleVtxoDescriptor(desc)
|
||||||
isChange := err != nil
|
isPending := err == nil
|
||||||
|
|
||||||
vtxos = append(vtxos, domain.Vtxo{
|
vtxos = append(vtxos, domain.Vtxo{
|
||||||
VtxoKey: domain.VtxoKey{
|
VtxoKey: domain.VtxoKey{
|
||||||
@@ -281,7 +281,7 @@ func (s *covenantlessService) CompleteAsyncPayment(
|
|||||||
RedeemTx: redeemTx,
|
RedeemTx: redeemTx,
|
||||||
UnconditionalForfeitTxs: unconditionalForfeitTxs,
|
UnconditionalForfeitTxs: unconditionalForfeitTxs,
|
||||||
},
|
},
|
||||||
PendingChange: isChange,
|
Pending: isPending,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -337,7 +337,7 @@ func (s *covenantlessService) CreateAsyncPayment(
|
|||||||
if vtxo.Swept {
|
if vtxo.Swept {
|
||||||
return "", nil, fmt.Errorf("all vtxos must be swept")
|
return "", nil, fmt.Errorf("all vtxos must be swept")
|
||||||
}
|
}
|
||||||
if vtxo.AsyncPayment != nil && !vtxo.PendingChange {
|
if vtxo.Pending {
|
||||||
return "", nil, fmt.Errorf("all vtxos must be claimed")
|
return "", nil, fmt.Errorf("all vtxos must be claimed")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -108,14 +108,14 @@ func (r Receiver) IsOnchain() bool {
|
|||||||
type Vtxo struct {
|
type Vtxo struct {
|
||||||
VtxoKey
|
VtxoKey
|
||||||
Receiver
|
Receiver
|
||||||
PoolTx string
|
PoolTx string
|
||||||
SpentBy string // round txid or async redeem txid
|
SpentBy string // round txid or async redeem txid
|
||||||
Spent bool
|
Spent bool
|
||||||
Redeemed bool
|
Redeemed bool
|
||||||
Swept bool
|
Swept bool
|
||||||
ExpireAt int64
|
ExpireAt int64
|
||||||
AsyncPayment *AsyncPaymentTxs // nil if not async vtxo
|
AsyncPayment *AsyncPaymentTxs // nil if not async vtxo
|
||||||
PendingChange bool
|
Pending bool
|
||||||
}
|
}
|
||||||
|
|
||||||
type AsyncPaymentTxs struct {
|
type AsyncPaymentTxs struct {
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
ALTER TABLE vtxo DROP COLUMN pending_change;
|
ALTER TABLE vtxo DROP COLUMN pending;
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
ALTER TABLE vtxo ADD COLUMN pending_change BOOLEAN;
|
ALTER TABLE vtxo ADD COLUMN pending BOOLEAN NOT NULL;
|
||||||
|
|
||||||
DROP VIEW payment_vtxo_vw;
|
DROP VIEW payment_vtxo_vw;
|
||||||
DROP VIEW payment_receiver_vw;
|
DROP VIEW payment_receiver_vw;
|
||||||
|
|||||||
@@ -21,19 +21,19 @@ type PaymentReceiverVw struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type PaymentVtxoVw struct {
|
type PaymentVtxoVw struct {
|
||||||
Txid sql.NullString
|
Txid sql.NullString
|
||||||
Vout sql.NullInt64
|
Vout sql.NullInt64
|
||||||
Amount sql.NullInt64
|
Amount sql.NullInt64
|
||||||
PoolTx sql.NullString
|
PoolTx sql.NullString
|
||||||
SpentBy sql.NullString
|
SpentBy sql.NullString
|
||||||
Spent sql.NullBool
|
Spent sql.NullBool
|
||||||
Redeemed sql.NullBool
|
Redeemed sql.NullBool
|
||||||
Swept sql.NullBool
|
Swept sql.NullBool
|
||||||
ExpireAt sql.NullInt64
|
ExpireAt sql.NullInt64
|
||||||
PaymentID sql.NullString
|
PaymentID sql.NullString
|
||||||
RedeemTx sql.NullString
|
RedeemTx sql.NullString
|
||||||
Descriptor sql.NullString
|
Descriptor sql.NullString
|
||||||
PendingChange sql.NullBool
|
Pending sql.NullBool
|
||||||
}
|
}
|
||||||
|
|
||||||
type Receiver struct {
|
type Receiver struct {
|
||||||
@@ -104,17 +104,17 @@ type UncondForfeitTxVw struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type Vtxo struct {
|
type Vtxo struct {
|
||||||
Txid string
|
Txid string
|
||||||
Vout int64
|
Vout int64
|
||||||
Amount int64
|
Amount int64
|
||||||
PoolTx string
|
PoolTx string
|
||||||
SpentBy string
|
SpentBy string
|
||||||
Spent bool
|
Spent bool
|
||||||
Redeemed bool
|
Redeemed bool
|
||||||
Swept bool
|
Swept bool
|
||||||
ExpireAt int64
|
ExpireAt int64
|
||||||
PaymentID sql.NullString
|
PaymentID sql.NullString
|
||||||
RedeemTx sql.NullString
|
RedeemTx sql.NullString
|
||||||
Descriptor sql.NullString
|
Descriptor sql.NullString
|
||||||
PendingChange sql.NullBool
|
Pending bool
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ func (q *Queries) MarkVtxoAsSwept(ctx context.Context, arg MarkVtxoAsSweptParams
|
|||||||
}
|
}
|
||||||
|
|
||||||
const selectNotRedeemedVtxos = `-- name: SelectNotRedeemedVtxos :many
|
const selectNotRedeemedVtxos = `-- name: SelectNotRedeemedVtxos :many
|
||||||
SELECT vtxo.txid, vtxo.vout, vtxo.amount, vtxo.pool_tx, vtxo.spent_by, vtxo.spent, vtxo.redeemed, vtxo.swept, vtxo.expire_at, vtxo.payment_id, vtxo.redeem_tx, vtxo.descriptor, vtxo.pending_change,
|
SELECT vtxo.txid, vtxo.vout, vtxo.amount, vtxo.pool_tx, vtxo.spent_by, vtxo.spent, vtxo.redeemed, vtxo.swept, vtxo.expire_at, vtxo.payment_id, vtxo.redeem_tx, vtxo.descriptor, vtxo.pending,
|
||||||
uncond_forfeit_tx_vw.id, uncond_forfeit_tx_vw.tx, uncond_forfeit_tx_vw.vtxo_txid, uncond_forfeit_tx_vw.vtxo_vout, uncond_forfeit_tx_vw.position
|
uncond_forfeit_tx_vw.id, uncond_forfeit_tx_vw.tx, uncond_forfeit_tx_vw.vtxo_txid, uncond_forfeit_tx_vw.vtxo_vout, uncond_forfeit_tx_vw.position
|
||||||
FROM vtxo
|
FROM vtxo
|
||||||
LEFT OUTER JOIN uncond_forfeit_tx_vw ON vtxo.txid=uncond_forfeit_tx_vw.vtxo_txid AND vtxo.vout=uncond_forfeit_tx_vw.vtxo_vout
|
LEFT OUTER JOIN uncond_forfeit_tx_vw ON vtxo.txid=uncond_forfeit_tx_vw.vtxo_txid AND vtxo.vout=uncond_forfeit_tx_vw.vtxo_vout
|
||||||
@@ -88,7 +88,7 @@ func (q *Queries) SelectNotRedeemedVtxos(ctx context.Context) ([]SelectNotRedeem
|
|||||||
&i.Vtxo.PaymentID,
|
&i.Vtxo.PaymentID,
|
||||||
&i.Vtxo.RedeemTx,
|
&i.Vtxo.RedeemTx,
|
||||||
&i.Vtxo.Descriptor,
|
&i.Vtxo.Descriptor,
|
||||||
&i.Vtxo.PendingChange,
|
&i.Vtxo.Pending,
|
||||||
&i.UncondForfeitTxVw.ID,
|
&i.UncondForfeitTxVw.ID,
|
||||||
&i.UncondForfeitTxVw.Tx,
|
&i.UncondForfeitTxVw.Tx,
|
||||||
&i.UncondForfeitTxVw.VtxoTxid,
|
&i.UncondForfeitTxVw.VtxoTxid,
|
||||||
@@ -109,7 +109,7 @@ func (q *Queries) SelectNotRedeemedVtxos(ctx context.Context) ([]SelectNotRedeem
|
|||||||
}
|
}
|
||||||
|
|
||||||
const selectNotRedeemedVtxosWithPubkey = `-- name: SelectNotRedeemedVtxosWithPubkey :many
|
const selectNotRedeemedVtxosWithPubkey = `-- name: SelectNotRedeemedVtxosWithPubkey :many
|
||||||
SELECT vtxo.txid, vtxo.vout, vtxo.amount, vtxo.pool_tx, vtxo.spent_by, vtxo.spent, vtxo.redeemed, vtxo.swept, vtxo.expire_at, vtxo.payment_id, vtxo.redeem_tx, vtxo.descriptor, vtxo.pending_change,
|
SELECT vtxo.txid, vtxo.vout, vtxo.amount, vtxo.pool_tx, vtxo.spent_by, vtxo.spent, vtxo.redeemed, vtxo.swept, vtxo.expire_at, vtxo.payment_id, vtxo.redeem_tx, vtxo.descriptor, vtxo.pending,
|
||||||
uncond_forfeit_tx_vw.id, uncond_forfeit_tx_vw.tx, uncond_forfeit_tx_vw.vtxo_txid, uncond_forfeit_tx_vw.vtxo_vout, uncond_forfeit_tx_vw.position
|
uncond_forfeit_tx_vw.id, uncond_forfeit_tx_vw.tx, uncond_forfeit_tx_vw.vtxo_txid, uncond_forfeit_tx_vw.vtxo_vout, uncond_forfeit_tx_vw.position
|
||||||
FROM vtxo
|
FROM vtxo
|
||||||
LEFT OUTER JOIN uncond_forfeit_tx_vw ON vtxo.txid=uncond_forfeit_tx_vw.vtxo_txid AND vtxo.vout=uncond_forfeit_tx_vw.vtxo_vout
|
LEFT OUTER JOIN uncond_forfeit_tx_vw ON vtxo.txid=uncond_forfeit_tx_vw.vtxo_txid AND vtxo.vout=uncond_forfeit_tx_vw.vtxo_vout
|
||||||
@@ -143,7 +143,7 @@ func (q *Queries) SelectNotRedeemedVtxosWithPubkey(ctx context.Context, instr st
|
|||||||
&i.Vtxo.PaymentID,
|
&i.Vtxo.PaymentID,
|
||||||
&i.Vtxo.RedeemTx,
|
&i.Vtxo.RedeemTx,
|
||||||
&i.Vtxo.Descriptor,
|
&i.Vtxo.Descriptor,
|
||||||
&i.Vtxo.PendingChange,
|
&i.Vtxo.Pending,
|
||||||
&i.UncondForfeitTxVw.ID,
|
&i.UncondForfeitTxVw.ID,
|
||||||
&i.UncondForfeitTxVw.Tx,
|
&i.UncondForfeitTxVw.Tx,
|
||||||
&i.UncondForfeitTxVw.VtxoTxid,
|
&i.UncondForfeitTxVw.VtxoTxid,
|
||||||
@@ -227,7 +227,7 @@ SELECT round.id, round.starting_timestamp, round.ending_timestamp, round.ended,
|
|||||||
round_payment_vw.id, round_payment_vw.round_id,
|
round_payment_vw.id, round_payment_vw.round_id,
|
||||||
round_tx_vw.id, round_tx_vw.tx, round_tx_vw.round_id, round_tx_vw.type, round_tx_vw.position, round_tx_vw.txid, round_tx_vw.tree_level, round_tx_vw.parent_txid, round_tx_vw.is_leaf,
|
round_tx_vw.id, round_tx_vw.tx, round_tx_vw.round_id, round_tx_vw.type, round_tx_vw.position, round_tx_vw.txid, round_tx_vw.tree_level, round_tx_vw.parent_txid, round_tx_vw.is_leaf,
|
||||||
payment_receiver_vw.payment_id, payment_receiver_vw.descriptor, payment_receiver_vw.amount, payment_receiver_vw.onchain_address,
|
payment_receiver_vw.payment_id, payment_receiver_vw.descriptor, payment_receiver_vw.amount, payment_receiver_vw.onchain_address,
|
||||||
payment_vtxo_vw.txid, payment_vtxo_vw.vout, payment_vtxo_vw.amount, payment_vtxo_vw.pool_tx, payment_vtxo_vw.spent_by, payment_vtxo_vw.spent, payment_vtxo_vw.redeemed, payment_vtxo_vw.swept, payment_vtxo_vw.expire_at, payment_vtxo_vw.payment_id, payment_vtxo_vw.redeem_tx, payment_vtxo_vw.descriptor, payment_vtxo_vw.pending_change
|
payment_vtxo_vw.txid, payment_vtxo_vw.vout, payment_vtxo_vw.amount, payment_vtxo_vw.pool_tx, payment_vtxo_vw.spent_by, payment_vtxo_vw.spent, payment_vtxo_vw.redeemed, payment_vtxo_vw.swept, payment_vtxo_vw.expire_at, payment_vtxo_vw.payment_id, payment_vtxo_vw.redeem_tx, payment_vtxo_vw.descriptor, payment_vtxo_vw.pending
|
||||||
FROM round
|
FROM round
|
||||||
LEFT OUTER JOIN round_payment_vw ON round.id=round_payment_vw.round_id
|
LEFT OUTER JOIN round_payment_vw ON round.id=round_payment_vw.round_id
|
||||||
LEFT OUTER JOIN round_tx_vw ON round.id=round_tx_vw.round_id
|
LEFT OUTER JOIN round_tx_vw ON round.id=round_tx_vw.round_id
|
||||||
@@ -293,7 +293,7 @@ func (q *Queries) SelectRoundWithRoundId(ctx context.Context, id string) ([]Sele
|
|||||||
&i.PaymentVtxoVw.PaymentID,
|
&i.PaymentVtxoVw.PaymentID,
|
||||||
&i.PaymentVtxoVw.RedeemTx,
|
&i.PaymentVtxoVw.RedeemTx,
|
||||||
&i.PaymentVtxoVw.Descriptor,
|
&i.PaymentVtxoVw.Descriptor,
|
||||||
&i.PaymentVtxoVw.PendingChange,
|
&i.PaymentVtxoVw.Pending,
|
||||||
); err != nil {
|
); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -313,7 +313,7 @@ SELECT round.id, round.starting_timestamp, round.ending_timestamp, round.ended,
|
|||||||
round_payment_vw.id, round_payment_vw.round_id,
|
round_payment_vw.id, round_payment_vw.round_id,
|
||||||
round_tx_vw.id, round_tx_vw.tx, round_tx_vw.round_id, round_tx_vw.type, round_tx_vw.position, round_tx_vw.txid, round_tx_vw.tree_level, round_tx_vw.parent_txid, round_tx_vw.is_leaf,
|
round_tx_vw.id, round_tx_vw.tx, round_tx_vw.round_id, round_tx_vw.type, round_tx_vw.position, round_tx_vw.txid, round_tx_vw.tree_level, round_tx_vw.parent_txid, round_tx_vw.is_leaf,
|
||||||
payment_receiver_vw.payment_id, payment_receiver_vw.descriptor, payment_receiver_vw.amount, payment_receiver_vw.onchain_address,
|
payment_receiver_vw.payment_id, payment_receiver_vw.descriptor, payment_receiver_vw.amount, payment_receiver_vw.onchain_address,
|
||||||
payment_vtxo_vw.txid, payment_vtxo_vw.vout, payment_vtxo_vw.amount, payment_vtxo_vw.pool_tx, payment_vtxo_vw.spent_by, payment_vtxo_vw.spent, payment_vtxo_vw.redeemed, payment_vtxo_vw.swept, payment_vtxo_vw.expire_at, payment_vtxo_vw.payment_id, payment_vtxo_vw.redeem_tx, payment_vtxo_vw.descriptor, payment_vtxo_vw.pending_change
|
payment_vtxo_vw.txid, payment_vtxo_vw.vout, payment_vtxo_vw.amount, payment_vtxo_vw.pool_tx, payment_vtxo_vw.spent_by, payment_vtxo_vw.spent, payment_vtxo_vw.redeemed, payment_vtxo_vw.swept, payment_vtxo_vw.expire_at, payment_vtxo_vw.payment_id, payment_vtxo_vw.redeem_tx, payment_vtxo_vw.descriptor, payment_vtxo_vw.pending
|
||||||
FROM round
|
FROM round
|
||||||
LEFT OUTER JOIN round_payment_vw ON round.id=round_payment_vw.round_id
|
LEFT OUTER JOIN round_payment_vw ON round.id=round_payment_vw.round_id
|
||||||
LEFT OUTER JOIN round_tx_vw ON round.id=round_tx_vw.round_id
|
LEFT OUTER JOIN round_tx_vw ON round.id=round_tx_vw.round_id
|
||||||
@@ -379,7 +379,7 @@ func (q *Queries) SelectRoundWithRoundTxId(ctx context.Context, txid string) ([]
|
|||||||
&i.PaymentVtxoVw.PaymentID,
|
&i.PaymentVtxoVw.PaymentID,
|
||||||
&i.PaymentVtxoVw.RedeemTx,
|
&i.PaymentVtxoVw.RedeemTx,
|
||||||
&i.PaymentVtxoVw.Descriptor,
|
&i.PaymentVtxoVw.Descriptor,
|
||||||
&i.PaymentVtxoVw.PendingChange,
|
&i.PaymentVtxoVw.Pending,
|
||||||
); err != nil {
|
); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -399,7 +399,7 @@ SELECT round.id, round.starting_timestamp, round.ending_timestamp, round.ended,
|
|||||||
round_payment_vw.id, round_payment_vw.round_id,
|
round_payment_vw.id, round_payment_vw.round_id,
|
||||||
round_tx_vw.id, round_tx_vw.tx, round_tx_vw.round_id, round_tx_vw.type, round_tx_vw.position, round_tx_vw.txid, round_tx_vw.tree_level, round_tx_vw.parent_txid, round_tx_vw.is_leaf,
|
round_tx_vw.id, round_tx_vw.tx, round_tx_vw.round_id, round_tx_vw.type, round_tx_vw.position, round_tx_vw.txid, round_tx_vw.tree_level, round_tx_vw.parent_txid, round_tx_vw.is_leaf,
|
||||||
payment_receiver_vw.payment_id, payment_receiver_vw.descriptor, payment_receiver_vw.amount, payment_receiver_vw.onchain_address,
|
payment_receiver_vw.payment_id, payment_receiver_vw.descriptor, payment_receiver_vw.amount, payment_receiver_vw.onchain_address,
|
||||||
payment_vtxo_vw.txid, payment_vtxo_vw.vout, payment_vtxo_vw.amount, payment_vtxo_vw.pool_tx, payment_vtxo_vw.spent_by, payment_vtxo_vw.spent, payment_vtxo_vw.redeemed, payment_vtxo_vw.swept, payment_vtxo_vw.expire_at, payment_vtxo_vw.payment_id, payment_vtxo_vw.redeem_tx, payment_vtxo_vw.descriptor, payment_vtxo_vw.pending_change
|
payment_vtxo_vw.txid, payment_vtxo_vw.vout, payment_vtxo_vw.amount, payment_vtxo_vw.pool_tx, payment_vtxo_vw.spent_by, payment_vtxo_vw.spent, payment_vtxo_vw.redeemed, payment_vtxo_vw.swept, payment_vtxo_vw.expire_at, payment_vtxo_vw.payment_id, payment_vtxo_vw.redeem_tx, payment_vtxo_vw.descriptor, payment_vtxo_vw.pending
|
||||||
FROM round
|
FROM round
|
||||||
LEFT OUTER JOIN round_payment_vw ON round.id=round_payment_vw.round_id
|
LEFT OUTER JOIN round_payment_vw ON round.id=round_payment_vw.round_id
|
||||||
LEFT OUTER JOIN round_tx_vw ON round.id=round_tx_vw.round_id
|
LEFT OUTER JOIN round_tx_vw ON round.id=round_tx_vw.round_id
|
||||||
@@ -465,7 +465,7 @@ func (q *Queries) SelectSweepableRounds(ctx context.Context) ([]SelectSweepableR
|
|||||||
&i.PaymentVtxoVw.PaymentID,
|
&i.PaymentVtxoVw.PaymentID,
|
||||||
&i.PaymentVtxoVw.RedeemTx,
|
&i.PaymentVtxoVw.RedeemTx,
|
||||||
&i.PaymentVtxoVw.Descriptor,
|
&i.PaymentVtxoVw.Descriptor,
|
||||||
&i.PaymentVtxoVw.PendingChange,
|
&i.PaymentVtxoVw.Pending,
|
||||||
); err != nil {
|
); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -481,7 +481,7 @@ func (q *Queries) SelectSweepableRounds(ctx context.Context) ([]SelectSweepableR
|
|||||||
}
|
}
|
||||||
|
|
||||||
const selectSweepableVtxos = `-- name: SelectSweepableVtxos :many
|
const selectSweepableVtxos = `-- name: SelectSweepableVtxos :many
|
||||||
SELECT vtxo.txid, vtxo.vout, vtxo.amount, vtxo.pool_tx, vtxo.spent_by, vtxo.spent, vtxo.redeemed, vtxo.swept, vtxo.expire_at, vtxo.payment_id, vtxo.redeem_tx, vtxo.descriptor, vtxo.pending_change,
|
SELECT vtxo.txid, vtxo.vout, vtxo.amount, vtxo.pool_tx, vtxo.spent_by, vtxo.spent, vtxo.redeemed, vtxo.swept, vtxo.expire_at, vtxo.payment_id, vtxo.redeem_tx, vtxo.descriptor, vtxo.pending,
|
||||||
uncond_forfeit_tx_vw.id, uncond_forfeit_tx_vw.tx, uncond_forfeit_tx_vw.vtxo_txid, uncond_forfeit_tx_vw.vtxo_vout, uncond_forfeit_tx_vw.position
|
uncond_forfeit_tx_vw.id, uncond_forfeit_tx_vw.tx, uncond_forfeit_tx_vw.vtxo_txid, uncond_forfeit_tx_vw.vtxo_vout, uncond_forfeit_tx_vw.position
|
||||||
FROM vtxo
|
FROM vtxo
|
||||||
LEFT OUTER JOIN uncond_forfeit_tx_vw ON vtxo.txid=uncond_forfeit_tx_vw.vtxo_txid AND vtxo.vout=uncond_forfeit_tx_vw.vtxo_vout
|
LEFT OUTER JOIN uncond_forfeit_tx_vw ON vtxo.txid=uncond_forfeit_tx_vw.vtxo_txid AND vtxo.vout=uncond_forfeit_tx_vw.vtxo_vout
|
||||||
@@ -515,7 +515,7 @@ func (q *Queries) SelectSweepableVtxos(ctx context.Context) ([]SelectSweepableVt
|
|||||||
&i.Vtxo.PaymentID,
|
&i.Vtxo.PaymentID,
|
||||||
&i.Vtxo.RedeemTx,
|
&i.Vtxo.RedeemTx,
|
||||||
&i.Vtxo.Descriptor,
|
&i.Vtxo.Descriptor,
|
||||||
&i.Vtxo.PendingChange,
|
&i.Vtxo.Pending,
|
||||||
&i.UncondForfeitTxVw.ID,
|
&i.UncondForfeitTxVw.ID,
|
||||||
&i.UncondForfeitTxVw.Tx,
|
&i.UncondForfeitTxVw.Tx,
|
||||||
&i.UncondForfeitTxVw.VtxoTxid,
|
&i.UncondForfeitTxVw.VtxoTxid,
|
||||||
@@ -540,7 +540,7 @@ SELECT round.id, round.starting_timestamp, round.ending_timestamp, round.ended,
|
|||||||
round_payment_vw.id, round_payment_vw.round_id,
|
round_payment_vw.id, round_payment_vw.round_id,
|
||||||
round_tx_vw.id, round_tx_vw.tx, round_tx_vw.round_id, round_tx_vw.type, round_tx_vw.position, round_tx_vw.txid, round_tx_vw.tree_level, round_tx_vw.parent_txid, round_tx_vw.is_leaf,
|
round_tx_vw.id, round_tx_vw.tx, round_tx_vw.round_id, round_tx_vw.type, round_tx_vw.position, round_tx_vw.txid, round_tx_vw.tree_level, round_tx_vw.parent_txid, round_tx_vw.is_leaf,
|
||||||
payment_receiver_vw.payment_id, payment_receiver_vw.descriptor, payment_receiver_vw.amount, payment_receiver_vw.onchain_address,
|
payment_receiver_vw.payment_id, payment_receiver_vw.descriptor, payment_receiver_vw.amount, payment_receiver_vw.onchain_address,
|
||||||
payment_vtxo_vw.txid, payment_vtxo_vw.vout, payment_vtxo_vw.amount, payment_vtxo_vw.pool_tx, payment_vtxo_vw.spent_by, payment_vtxo_vw.spent, payment_vtxo_vw.redeemed, payment_vtxo_vw.swept, payment_vtxo_vw.expire_at, payment_vtxo_vw.payment_id, payment_vtxo_vw.redeem_tx, payment_vtxo_vw.descriptor, payment_vtxo_vw.pending_change
|
payment_vtxo_vw.txid, payment_vtxo_vw.vout, payment_vtxo_vw.amount, payment_vtxo_vw.pool_tx, payment_vtxo_vw.spent_by, payment_vtxo_vw.spent, payment_vtxo_vw.redeemed, payment_vtxo_vw.swept, payment_vtxo_vw.expire_at, payment_vtxo_vw.payment_id, payment_vtxo_vw.redeem_tx, payment_vtxo_vw.descriptor, payment_vtxo_vw.pending
|
||||||
FROM round
|
FROM round
|
||||||
LEFT OUTER JOIN round_payment_vw ON round.id=round_payment_vw.round_id
|
LEFT OUTER JOIN round_payment_vw ON round.id=round_payment_vw.round_id
|
||||||
LEFT OUTER JOIN round_tx_vw ON round.id=round_tx_vw.round_id
|
LEFT OUTER JOIN round_tx_vw ON round.id=round_tx_vw.round_id
|
||||||
@@ -606,7 +606,7 @@ func (q *Queries) SelectSweptRounds(ctx context.Context) ([]SelectSweptRoundsRow
|
|||||||
&i.PaymentVtxoVw.PaymentID,
|
&i.PaymentVtxoVw.PaymentID,
|
||||||
&i.PaymentVtxoVw.RedeemTx,
|
&i.PaymentVtxoVw.RedeemTx,
|
||||||
&i.PaymentVtxoVw.Descriptor,
|
&i.PaymentVtxoVw.Descriptor,
|
||||||
&i.PaymentVtxoVw.PendingChange,
|
&i.PaymentVtxoVw.Pending,
|
||||||
); err != nil {
|
); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -622,7 +622,7 @@ func (q *Queries) SelectSweptRounds(ctx context.Context) ([]SelectSweptRoundsRow
|
|||||||
}
|
}
|
||||||
|
|
||||||
const selectVtxoByOutpoint = `-- name: SelectVtxoByOutpoint :one
|
const selectVtxoByOutpoint = `-- name: SelectVtxoByOutpoint :one
|
||||||
SELECT vtxo.txid, vtxo.vout, vtxo.amount, vtxo.pool_tx, vtxo.spent_by, vtxo.spent, vtxo.redeemed, vtxo.swept, vtxo.expire_at, vtxo.payment_id, vtxo.redeem_tx, vtxo.descriptor, vtxo.pending_change,
|
SELECT vtxo.txid, vtxo.vout, vtxo.amount, vtxo.pool_tx, vtxo.spent_by, vtxo.spent, vtxo.redeemed, vtxo.swept, vtxo.expire_at, vtxo.payment_id, vtxo.redeem_tx, vtxo.descriptor, vtxo.pending,
|
||||||
uncond_forfeit_tx_vw.id, uncond_forfeit_tx_vw.tx, uncond_forfeit_tx_vw.vtxo_txid, uncond_forfeit_tx_vw.vtxo_vout, uncond_forfeit_tx_vw.position
|
uncond_forfeit_tx_vw.id, uncond_forfeit_tx_vw.tx, uncond_forfeit_tx_vw.vtxo_txid, uncond_forfeit_tx_vw.vtxo_vout, uncond_forfeit_tx_vw.position
|
||||||
FROM vtxo
|
FROM vtxo
|
||||||
LEFT OUTER JOIN uncond_forfeit_tx_vw ON vtxo.txid=uncond_forfeit_tx_vw.vtxo_txid AND vtxo.vout=uncond_forfeit_tx_vw.vtxo_vout
|
LEFT OUTER JOIN uncond_forfeit_tx_vw ON vtxo.txid=uncond_forfeit_tx_vw.vtxo_txid AND vtxo.vout=uncond_forfeit_tx_vw.vtxo_vout
|
||||||
@@ -655,7 +655,7 @@ func (q *Queries) SelectVtxoByOutpoint(ctx context.Context, arg SelectVtxoByOutp
|
|||||||
&i.Vtxo.PaymentID,
|
&i.Vtxo.PaymentID,
|
||||||
&i.Vtxo.RedeemTx,
|
&i.Vtxo.RedeemTx,
|
||||||
&i.Vtxo.Descriptor,
|
&i.Vtxo.Descriptor,
|
||||||
&i.Vtxo.PendingChange,
|
&i.Vtxo.Pending,
|
||||||
&i.UncondForfeitTxVw.ID,
|
&i.UncondForfeitTxVw.ID,
|
||||||
&i.UncondForfeitTxVw.Tx,
|
&i.UncondForfeitTxVw.Tx,
|
||||||
&i.UncondForfeitTxVw.VtxoTxid,
|
&i.UncondForfeitTxVw.VtxoTxid,
|
||||||
@@ -666,7 +666,7 @@ func (q *Queries) SelectVtxoByOutpoint(ctx context.Context, arg SelectVtxoByOutp
|
|||||||
}
|
}
|
||||||
|
|
||||||
const selectVtxosByPoolTxid = `-- name: SelectVtxosByPoolTxid :many
|
const selectVtxosByPoolTxid = `-- name: SelectVtxosByPoolTxid :many
|
||||||
SELECT vtxo.txid, vtxo.vout, vtxo.amount, vtxo.pool_tx, vtxo.spent_by, vtxo.spent, vtxo.redeemed, vtxo.swept, vtxo.expire_at, vtxo.payment_id, vtxo.redeem_tx, vtxo.descriptor, vtxo.pending_change,
|
SELECT vtxo.txid, vtxo.vout, vtxo.amount, vtxo.pool_tx, vtxo.spent_by, vtxo.spent, vtxo.redeemed, vtxo.swept, vtxo.expire_at, vtxo.payment_id, vtxo.redeem_tx, vtxo.descriptor, vtxo.pending,
|
||||||
uncond_forfeit_tx_vw.id, uncond_forfeit_tx_vw.tx, uncond_forfeit_tx_vw.vtxo_txid, uncond_forfeit_tx_vw.vtxo_vout, uncond_forfeit_tx_vw.position
|
uncond_forfeit_tx_vw.id, uncond_forfeit_tx_vw.tx, uncond_forfeit_tx_vw.vtxo_txid, uncond_forfeit_tx_vw.vtxo_vout, uncond_forfeit_tx_vw.position
|
||||||
FROM vtxo
|
FROM vtxo
|
||||||
LEFT OUTER JOIN uncond_forfeit_tx_vw ON vtxo.txid=uncond_forfeit_tx_vw.vtxo_txid AND vtxo.vout=uncond_forfeit_tx_vw.vtxo_vout
|
LEFT OUTER JOIN uncond_forfeit_tx_vw ON vtxo.txid=uncond_forfeit_tx_vw.vtxo_txid AND vtxo.vout=uncond_forfeit_tx_vw.vtxo_vout
|
||||||
@@ -700,7 +700,7 @@ func (q *Queries) SelectVtxosByPoolTxid(ctx context.Context, poolTx string) ([]S
|
|||||||
&i.Vtxo.PaymentID,
|
&i.Vtxo.PaymentID,
|
||||||
&i.Vtxo.RedeemTx,
|
&i.Vtxo.RedeemTx,
|
||||||
&i.Vtxo.Descriptor,
|
&i.Vtxo.Descriptor,
|
||||||
&i.Vtxo.PendingChange,
|
&i.Vtxo.Pending,
|
||||||
&i.UncondForfeitTxVw.ID,
|
&i.UncondForfeitTxVw.ID,
|
||||||
&i.UncondForfeitTxVw.Tx,
|
&i.UncondForfeitTxVw.Tx,
|
||||||
&i.UncondForfeitTxVw.VtxoTxid,
|
&i.UncondForfeitTxVw.VtxoTxid,
|
||||||
@@ -918,7 +918,7 @@ func (q *Queries) UpsertUnconditionalForfeitTx(ctx context.Context, arg UpsertUn
|
|||||||
}
|
}
|
||||||
|
|
||||||
const upsertVtxo = `-- name: UpsertVtxo :exec
|
const upsertVtxo = `-- name: UpsertVtxo :exec
|
||||||
INSERT INTO vtxo (txid, vout, descriptor, amount, pool_tx, spent_by, spent, redeemed, swept, expire_at, redeem_tx, pending_change)
|
INSERT INTO vtxo (txid, vout, descriptor, amount, pool_tx, spent_by, spent, redeemed, swept, expire_at, redeem_tx, pending)
|
||||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT(txid, vout) DO UPDATE SET
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT(txid, vout) DO UPDATE SET
|
||||||
descriptor = EXCLUDED.descriptor,
|
descriptor = EXCLUDED.descriptor,
|
||||||
amount = EXCLUDED.amount,
|
amount = EXCLUDED.amount,
|
||||||
@@ -929,22 +929,22 @@ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT(txid, vout) DO UPDATE SE
|
|||||||
swept = EXCLUDED.swept,
|
swept = EXCLUDED.swept,
|
||||||
expire_at = EXCLUDED.expire_at,
|
expire_at = EXCLUDED.expire_at,
|
||||||
redeem_tx = EXCLUDED.redeem_tx,
|
redeem_tx = EXCLUDED.redeem_tx,
|
||||||
pending_change = EXCLUDED.pending_change
|
pending = EXCLUDED.pending
|
||||||
`
|
`
|
||||||
|
|
||||||
type UpsertVtxoParams struct {
|
type UpsertVtxoParams struct {
|
||||||
Txid string
|
Txid string
|
||||||
Vout int64
|
Vout int64
|
||||||
Descriptor sql.NullString
|
Descriptor sql.NullString
|
||||||
Amount int64
|
Amount int64
|
||||||
PoolTx string
|
PoolTx string
|
||||||
SpentBy string
|
SpentBy string
|
||||||
Spent bool
|
Spent bool
|
||||||
Redeemed bool
|
Redeemed bool
|
||||||
Swept bool
|
Swept bool
|
||||||
ExpireAt int64
|
ExpireAt int64
|
||||||
RedeemTx sql.NullString
|
RedeemTx sql.NullString
|
||||||
PendingChange sql.NullBool
|
Pending bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (q *Queries) UpsertVtxo(ctx context.Context, arg UpsertVtxoParams) error {
|
func (q *Queries) UpsertVtxo(ctx context.Context, arg UpsertVtxoParams) error {
|
||||||
@@ -960,7 +960,7 @@ func (q *Queries) UpsertVtxo(ctx context.Context, arg UpsertVtxoParams) error {
|
|||||||
arg.Swept,
|
arg.Swept,
|
||||||
arg.ExpireAt,
|
arg.ExpireAt,
|
||||||
arg.RedeemTx,
|
arg.RedeemTx,
|
||||||
arg.PendingChange,
|
arg.Pending,
|
||||||
)
|
)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -120,7 +120,7 @@ VALUES (?, ?, ?, ?) ON CONFLICT(id) DO UPDATE SET
|
|||||||
position = EXCLUDED.position;
|
position = EXCLUDED.position;
|
||||||
|
|
||||||
-- name: UpsertVtxo :exec
|
-- name: UpsertVtxo :exec
|
||||||
INSERT INTO vtxo (txid, vout, descriptor, amount, pool_tx, spent_by, spent, redeemed, swept, expire_at, redeem_tx, pending_change)
|
INSERT INTO vtxo (txid, vout, descriptor, amount, pool_tx, spent_by, spent, redeemed, swept, expire_at, redeem_tx, pending)
|
||||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT(txid, vout) DO UPDATE SET
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT(txid, vout) DO UPDATE SET
|
||||||
descriptor = EXCLUDED.descriptor,
|
descriptor = EXCLUDED.descriptor,
|
||||||
amount = EXCLUDED.amount,
|
amount = EXCLUDED.amount,
|
||||||
@@ -131,7 +131,7 @@ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT(txid, vout) DO UPDATE SE
|
|||||||
swept = EXCLUDED.swept,
|
swept = EXCLUDED.swept,
|
||||||
expire_at = EXCLUDED.expire_at,
|
expire_at = EXCLUDED.expire_at,
|
||||||
redeem_tx = EXCLUDED.redeem_tx,
|
redeem_tx = EXCLUDED.redeem_tx,
|
||||||
pending_change = EXCLUDED.pending_change;
|
pending = EXCLUDED.pending;
|
||||||
|
|
||||||
-- name: SelectSweepableVtxos :many
|
-- name: SelectSweepableVtxos :many
|
||||||
SELECT sqlc.embed(vtxo),
|
SELECT sqlc.embed(vtxo),
|
||||||
|
|||||||
@@ -43,18 +43,18 @@ func (v *vxtoRepository) AddVtxos(ctx context.Context, vtxos []domain.Vtxo) erro
|
|||||||
}
|
}
|
||||||
if err := querierWithTx.UpsertVtxo(
|
if err := querierWithTx.UpsertVtxo(
|
||||||
ctx, queries.UpsertVtxoParams{
|
ctx, queries.UpsertVtxoParams{
|
||||||
Txid: vtxo.Txid,
|
Txid: vtxo.Txid,
|
||||||
Vout: int64(vtxo.VOut),
|
Vout: int64(vtxo.VOut),
|
||||||
Descriptor: sql.NullString{String: vtxo.Descriptor, Valid: true},
|
Descriptor: sql.NullString{String: vtxo.Descriptor, Valid: true},
|
||||||
Amount: int64(vtxo.Amount),
|
Amount: int64(vtxo.Amount),
|
||||||
PoolTx: vtxo.PoolTx,
|
PoolTx: vtxo.PoolTx,
|
||||||
SpentBy: vtxo.SpentBy,
|
SpentBy: vtxo.SpentBy,
|
||||||
Spent: vtxo.Spent,
|
Spent: vtxo.Spent,
|
||||||
Redeemed: vtxo.Redeemed,
|
Redeemed: vtxo.Redeemed,
|
||||||
Swept: vtxo.Swept,
|
Swept: vtxo.Swept,
|
||||||
ExpireAt: vtxo.ExpireAt,
|
ExpireAt: vtxo.ExpireAt,
|
||||||
RedeemTx: sql.NullString{String: redeemTx, Valid: true},
|
RedeemTx: sql.NullString{String: redeemTx, Valid: true},
|
||||||
PendingChange: sql.NullBool{Bool: vtxo.PendingChange, Valid: true},
|
Pending: vtxo.Pending,
|
||||||
},
|
},
|
||||||
); err != nil {
|
); err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -302,14 +302,14 @@ func rowToVtxo(row queries.Vtxo, uncondForfeitTxs []queries.UncondForfeitTxVw) d
|
|||||||
Descriptor: row.Descriptor.String,
|
Descriptor: row.Descriptor.String,
|
||||||
Amount: uint64(row.Amount),
|
Amount: uint64(row.Amount),
|
||||||
},
|
},
|
||||||
PoolTx: row.PoolTx,
|
PoolTx: row.PoolTx,
|
||||||
SpentBy: row.SpentBy,
|
SpentBy: row.SpentBy,
|
||||||
Spent: row.Spent,
|
Spent: row.Spent,
|
||||||
Redeemed: row.Redeemed,
|
Redeemed: row.Redeemed,
|
||||||
Swept: row.Swept,
|
Swept: row.Swept,
|
||||||
ExpireAt: row.ExpireAt,
|
ExpireAt: row.ExpireAt,
|
||||||
AsyncPayment: asyncPayment,
|
AsyncPayment: asyncPayment,
|
||||||
PendingChange: row.PendingChange.Bool,
|
Pending: row.Pending,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -77,16 +77,15 @@ func (v vtxoList) toProto() []*arkv1.Vtxo {
|
|||||||
Txid: vv.Txid,
|
Txid: vv.Txid,
|
||||||
Vout: vv.VOut,
|
Vout: vv.VOut,
|
||||||
},
|
},
|
||||||
Descriptor_: vv.Descriptor,
|
Descriptor_: vv.Descriptor,
|
||||||
Amount: vv.Amount,
|
Amount: vv.Amount,
|
||||||
PoolTxid: vv.PoolTx,
|
PoolTxid: vv.PoolTx,
|
||||||
Spent: vv.Spent,
|
Spent: vv.Spent,
|
||||||
ExpireAt: vv.ExpireAt,
|
ExpireAt: vv.ExpireAt,
|
||||||
SpentBy: vv.SpentBy,
|
SpentBy: vv.SpentBy,
|
||||||
Swept: vv.Swept,
|
Swept: vv.Swept,
|
||||||
PendingData: pendingData,
|
PendingData: pendingData,
|
||||||
Pending: pendingData != nil,
|
Pending: vv.Pending,
|
||||||
PendingChange: vv.PendingChange,
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user