From 05b548fd0f0f1df10c3d1bcdf337540a6856398f Mon Sep 17 00:00:00 2001 From: Trung-Hai Bui Date: Thu, 12 Oct 2023 16:51:03 +0800 Subject: [PATCH] Add APIs for FE (#10) * Add GetPendingTransactions * Add GetCoinPrice * Add Redis initialization * Add GetMainCoins interface * Fix main coins cache init * Add kafka consumer * change field naming * update kafka topic name * add prefix for endpoints * add redis docker-compose * migration sql for common.main_coins * Add kafka docker compose * update * update kafka config * update docker compose * change cache interval * add logs * add redis healthcheck * update logs * add additional endpoints * update kafka config * add kafka authentication * update coin-price interface * Add debug log * Fix edge case for redis * Fix json unmarshal * Update schema * Update query * Update query * update * Add free gas feature * Reduce logs * Add GetAllTransactions * separate kafka consumer * Add kafka consumer docker-compose * add chain id * bridge block time * claim block time * claim block time 2 * claim block time 3 * block time * 1000 * add headers * CommonGetAllTransactionsResponse * CommonGetAllTransactionsResponse 2 * CommonGetAllTransactionsResponse 3 * CommonGetAllTransactionsResponse 4 * other common response * add hasNext * add hasNext 2 * add hasNext 3 * code review fix * mock price * mock price 1 * mock price 2 * mock price 3 * mock price 3 * chain id change * chain id change 2 * address lower * Change coin price to POST * Change coin-price request schema * add id * add id 2 * add id 3 * Add DB suffix * add id 3 * add smt-proof & index & metadata * add smt-proof & index & metadata 2 * cors * Add Sentinel * Add log * Add log * Add log * Add log * Init flow rules * change name * EstimateTime * Update for code reviews * Update * Update go mod --------- Co-authored-by: trunghai.bui Co-authored-by: yuexiao.fan --- .gitignore | 1 + bridgectrl/pb/query.pb.go | 2537 +++++++++++++++++++++---- bridgectrl/pb/query.pb.gw.go | 1888 ++++++++++++++++-- bridgectrl/pb/query_grpc.pb.go | 263 ++- claimtxman/claimtxman.go | 1 + cmd/main.go | 9 +- cmd/run.go | 85 +- coinmiddleware/config.go | 25 + coinmiddleware/handler.go | 88 + coinmiddleware/kafkaconsumer.go | 88 + coinmiddleware/root-ca-cert | 30 + coinmiddleware/types.go | 37 + config/config.debug.toml | 19 + config/config.go | 16 +- config/config.local.toml | 20 + db/config.go | 3 + db/pgstorage/config.go | 3 + db/pgstorage/migrations/0006.sql | 20 + db/pgstorage/migrations/0007.sql | 29 + db/pgstorage/pgstorage.go | 186 +- db/storage.go | 13 +- docker-compose.yml | 53 +- etherman/config.go | 6 +- etherman/types.go | 3 + go.mod | 34 +- go.sum | 255 ++- localcache/maincoinscache.go | 108 ++ proto/src/proto/bridge/v1/query.proto | 213 ++- redisstorage/config.go | 18 + redisstorage/interfaces.go | 11 + redisstorage/redisstorage.go | 128 ++ sentinel/config.go | 9 + sentinel/config.json | 69 + sentinel/sentinel.go | 53 + server/config.go | 9 +- server/interfaces.go | 4 +- server/server.go | 15 +- server/service.go | 206 +- 38 files changed, 5908 insertions(+), 647 deletions(-) create mode 100644 coinmiddleware/config.go create mode 100644 coinmiddleware/handler.go create mode 100644 coinmiddleware/kafkaconsumer.go create mode 100644 coinmiddleware/root-ca-cert create mode 100644 coinmiddleware/types.go create mode 100644 db/pgstorage/migrations/0006.sql create mode 100644 db/pgstorage/migrations/0007.sql create mode 100644 localcache/maincoinscache.go create mode 100644 redisstorage/config.go create mode 100644 redisstorage/interfaces.go create mode 100644 redisstorage/redisstorage.go create mode 100644 sentinel/config.go create mode 100644 sentinel/config.json create mode 100644 sentinel/sentinel.go diff --git a/.gitignore b/.gitignore index 4efbf96d..1356373b 100644 --- a/.gitignore +++ b/.gitignore @@ -15,6 +15,7 @@ # vendor/ /dist/ .vscode +.idea config/config.mainnet.toml config/config.testnet.toml diff --git a/bridgectrl/pb/query.pb.go b/bridgectrl/pb/query.pb.go index fb6873d5..447bd455 100644 --- a/bridgectrl/pb/query.pb.go +++ b/bridgectrl/pb/query.pb.go @@ -3,8 +3,8 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.0 -// protoc v3.6.1 +// protoc-gen-go v1.31.0 +// protoc v3.13.0 // source: query.proto package pb @@ -432,14 +432,18 @@ func (x *Proof) GetRollupExitRoot() string { return "" } -type CheckAPIRequest struct { +// Symbol info message +type SymbolInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + + ChainId uint64 `protobuf:"varint,1,opt,name=chainId,proto3" json:"chainId,omitempty"` + Address string `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` } -func (x *CheckAPIRequest) Reset() { - *x = CheckAPIRequest{} +func (x *SymbolInfo) Reset() { + *x = SymbolInfo{} if protoimpl.UnsafeEnabled { mi := &file_query_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -447,13 +451,13 @@ func (x *CheckAPIRequest) Reset() { } } -func (x *CheckAPIRequest) String() string { +func (x *SymbolInfo) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CheckAPIRequest) ProtoMessage() {} +func (*SymbolInfo) ProtoMessage() {} -func (x *CheckAPIRequest) ProtoReflect() protoreflect.Message { +func (x *SymbolInfo) ProtoReflect() protoreflect.Message { mi := &file_query_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -465,23 +469,39 @@ func (x *CheckAPIRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use CheckAPIRequest.ProtoReflect.Descriptor instead. -func (*CheckAPIRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use SymbolInfo.ProtoReflect.Descriptor instead. +func (*SymbolInfo) Descriptor() ([]byte, []int) { return file_query_proto_rawDescGZIP(), []int{4} } -type GetBridgesRequest struct { +func (x *SymbolInfo) GetChainId() uint64 { + if x != nil { + return x.ChainId + } + return 0 +} + +func (x *SymbolInfo) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +type SymbolPrice struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - DestAddr string `protobuf:"bytes,1,opt,name=dest_addr,json=destAddr,proto3" json:"dest_addr,omitempty"` - Offset uint64 `protobuf:"varint,2,opt,name=offset,proto3" json:"offset,omitempty"` - Limit uint32 `protobuf:"varint,3,opt,name=limit,proto3" json:"limit,omitempty"` + Symbol string `protobuf:"bytes,1,opt,name=symbol,proto3" json:"symbol,omitempty"` + Price float64 `protobuf:"fixed64,2,opt,name=price,proto3" json:"price,omitempty"` + Time uint64 `protobuf:"varint,3,opt,name=time,proto3" json:"time,omitempty"` + Address string `protobuf:"bytes,4,opt,name=address,proto3" json:"address,omitempty"` + ChainId uint64 `protobuf:"varint,5,opt,name=chainId,proto3" json:"chainId,omitempty"` } -func (x *GetBridgesRequest) Reset() { - *x = GetBridgesRequest{} +func (x *SymbolPrice) Reset() { + *x = SymbolPrice{} if protoimpl.UnsafeEnabled { mi := &file_query_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -489,13 +509,13 @@ func (x *GetBridgesRequest) Reset() { } } -func (x *GetBridgesRequest) String() string { +func (x *SymbolPrice) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetBridgesRequest) ProtoMessage() {} +func (*SymbolPrice) ProtoMessage() {} -func (x *GetBridgesRequest) ProtoReflect() protoreflect.Message { +func (x *SymbolPrice) ProtoReflect() protoreflect.Message { mi := &file_query_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -507,58 +527,1221 @@ func (x *GetBridgesRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetBridgesRequest.ProtoReflect.Descriptor instead. -func (*GetBridgesRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use SymbolPrice.ProtoReflect.Descriptor instead. +func (*SymbolPrice) Descriptor() ([]byte, []int) { return file_query_proto_rawDescGZIP(), []int{5} } -func (x *GetBridgesRequest) GetDestAddr() string { +func (x *SymbolPrice) GetSymbol() string { if x != nil { - return x.DestAddr + return x.Symbol } return "" } -func (x *GetBridgesRequest) GetOffset() uint64 { +func (x *SymbolPrice) GetPrice() float64 { if x != nil { - return x.Offset + return x.Price + } + return 0 +} + +func (x *SymbolPrice) GetTime() uint64 { + if x != nil { + return x.Time + } + return 0 +} + +func (x *SymbolPrice) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +func (x *SymbolPrice) GetChainId() uint64 { + if x != nil { + return x.ChainId + } + return 0 +} + +// Coin info message +type CoinInfo struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Symbol string `protobuf:"bytes,1,opt,name=symbol,proto3" json:"symbol,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Decimals uint64 `protobuf:"varint,3,opt,name=decimals,proto3" json:"decimals,omitempty"` + ChainId uint64 `protobuf:"varint,4,opt,name=chainId,proto3" json:"chainId,omitempty"` + NetworkId uint32 `protobuf:"varint,5,opt,name=networkId,proto3" json:"networkId,omitempty"` + LogoLink string `protobuf:"bytes,6,opt,name=logoLink,proto3" json:"logoLink,omitempty"` + Address string `protobuf:"bytes,7,opt,name=address,proto3" json:"address,omitempty"` +} + +func (x *CoinInfo) Reset() { + *x = CoinInfo{} + if protoimpl.UnsafeEnabled { + mi := &file_query_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CoinInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CoinInfo) ProtoMessage() {} + +func (x *CoinInfo) ProtoReflect() protoreflect.Message { + mi := &file_query_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CoinInfo.ProtoReflect.Descriptor instead. +func (*CoinInfo) Descriptor() ([]byte, []int) { + return file_query_proto_rawDescGZIP(), []int{6} +} + +func (x *CoinInfo) GetSymbol() string { + if x != nil { + return x.Symbol + } + return "" +} + +func (x *CoinInfo) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *CoinInfo) GetDecimals() uint64 { + if x != nil { + return x.Decimals + } + return 0 +} + +func (x *CoinInfo) GetChainId() uint64 { + if x != nil { + return x.ChainId + } + return 0 +} + +func (x *CoinInfo) GetNetworkId() uint32 { + if x != nil { + return x.NetworkId + } + return 0 +} + +func (x *CoinInfo) GetLogoLink() string { + if x != nil { + return x.LogoLink + } + return "" +} + +func (x *CoinInfo) GetAddress() string { + if x != nil { + return x.Address + } + return "" +} + +// Transaction message +type Transaction struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + FromChain uint32 `protobuf:"varint,1,opt,name=fromChain,proto3" json:"fromChain,omitempty"` // 0:L1, 1:L2 + ToChain uint32 `protobuf:"varint,2,opt,name=toChain,proto3" json:"toChain,omitempty"` // 0:L1, 1:L2 + BridgeToken string `protobuf:"bytes,3,opt,name=bridgeToken,proto3" json:"bridgeToken,omitempty"` + TokenAmount string `protobuf:"bytes,4,opt,name=tokenAmount,proto3" json:"tokenAmount,omitempty"` + EstimateTime uint32 `protobuf:"varint,5,opt,name=estimateTime,proto3" json:"estimateTime,omitempty"` + Status uint32 `protobuf:"varint,6,opt,name=status,proto3" json:"status,omitempty"` // 0: cannot claim; 1: pending & not claimed; 2; claimed + Time uint64 `protobuf:"varint,7,opt,name=time,proto3" json:"time,omitempty"` // Deposit's block time + TxHash string `protobuf:"bytes,8,opt,name=txHash,proto3" json:"txHash,omitempty"` // Deposit tx hash + ClaimTxHash string `protobuf:"bytes,9,opt,name=claimTxHash,proto3" json:"claimTxHash,omitempty"` + ClaimTime uint64 `protobuf:"varint,10,opt,name=claimTime,proto3" json:"claimTime,omitempty"` // Claim's block time + FromChainId uint32 `protobuf:"varint,11,opt,name=fromChainId,proto3" json:"fromChainId,omitempty"` + ToChainId uint32 `protobuf:"varint,12,opt,name=toChainId,proto3" json:"toChainId,omitempty"` + Id uint64 `protobuf:"varint,13,opt,name=id,proto3" json:"id,omitempty"` + Index uint64 `protobuf:"varint,14,opt,name=index,proto3" json:"index,omitempty"` + Metadata string `protobuf:"bytes,15,opt,name=metadata,proto3" json:"metadata,omitempty"` +} + +func (x *Transaction) Reset() { + *x = Transaction{} + if protoimpl.UnsafeEnabled { + mi := &file_query_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Transaction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Transaction) ProtoMessage() {} + +func (x *Transaction) ProtoReflect() protoreflect.Message { + mi := &file_query_proto_msgTypes[7] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Transaction.ProtoReflect.Descriptor instead. +func (*Transaction) Descriptor() ([]byte, []int) { + return file_query_proto_rawDescGZIP(), []int{7} +} + +func (x *Transaction) GetFromChain() uint32 { + if x != nil { + return x.FromChain + } + return 0 +} + +func (x *Transaction) GetToChain() uint32 { + if x != nil { + return x.ToChain + } + return 0 +} + +func (x *Transaction) GetBridgeToken() string { + if x != nil { + return x.BridgeToken + } + return "" +} + +func (x *Transaction) GetTokenAmount() string { + if x != nil { + return x.TokenAmount + } + return "" +} + +func (x *Transaction) GetEstimateTime() uint32 { + if x != nil { + return x.EstimateTime + } + return 0 +} + +func (x *Transaction) GetStatus() uint32 { + if x != nil { + return x.Status + } + return 0 +} + +func (x *Transaction) GetTime() uint64 { + if x != nil { + return x.Time + } + return 0 +} + +func (x *Transaction) GetTxHash() string { + if x != nil { + return x.TxHash + } + return "" +} + +func (x *Transaction) GetClaimTxHash() string { + if x != nil { + return x.ClaimTxHash + } + return "" +} + +func (x *Transaction) GetClaimTime() uint64 { + if x != nil { + return x.ClaimTime + } + return 0 +} + +func (x *Transaction) GetFromChainId() uint32 { + if x != nil { + return x.FromChainId + } + return 0 +} + +func (x *Transaction) GetToChainId() uint32 { + if x != nil { + return x.ToChainId + } + return 0 +} + +func (x *Transaction) GetId() uint64 { + if x != nil { + return x.Id } return 0 } -func (x *GetBridgesRequest) GetLimit() uint32 { +func (x *Transaction) GetIndex() uint64 { + if x != nil { + return x.Index + } + return 0 +} + +func (x *Transaction) GetMetadata() string { + if x != nil { + return x.Metadata + } + return "" +} + +type CheckAPIRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *CheckAPIRequest) Reset() { + *x = CheckAPIRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_query_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CheckAPIRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CheckAPIRequest) ProtoMessage() {} + +func (x *CheckAPIRequest) ProtoReflect() protoreflect.Message { + mi := &file_query_proto_msgTypes[8] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CheckAPIRequest.ProtoReflect.Descriptor instead. +func (*CheckAPIRequest) Descriptor() ([]byte, []int) { + return file_query_proto_rawDescGZIP(), []int{8} +} + +type GetBridgesRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DestAddr string `protobuf:"bytes,1,opt,name=dest_addr,json=destAddr,proto3" json:"dest_addr,omitempty"` + Offset uint64 `protobuf:"varint,2,opt,name=offset,proto3" json:"offset,omitempty"` + Limit uint32 `protobuf:"varint,3,opt,name=limit,proto3" json:"limit,omitempty"` +} + +func (x *GetBridgesRequest) Reset() { + *x = GetBridgesRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_query_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetBridgesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetBridgesRequest) ProtoMessage() {} + +func (x *GetBridgesRequest) ProtoReflect() protoreflect.Message { + mi := &file_query_proto_msgTypes[9] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetBridgesRequest.ProtoReflect.Descriptor instead. +func (*GetBridgesRequest) Descriptor() ([]byte, []int) { + return file_query_proto_rawDescGZIP(), []int{9} +} + +func (x *GetBridgesRequest) GetDestAddr() string { + if x != nil { + return x.DestAddr + } + return "" +} + +func (x *GetBridgesRequest) GetOffset() uint64 { + if x != nil { + return x.Offset + } + return 0 +} + +func (x *GetBridgesRequest) GetLimit() uint32 { + if x != nil { + return x.Limit + } + return 0 +} + +type GetProofRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + NetId uint32 `protobuf:"varint,1,opt,name=net_id,json=netId,proto3" json:"net_id,omitempty"` + DepositCnt uint64 `protobuf:"varint,2,opt,name=deposit_cnt,json=depositCnt,proto3" json:"deposit_cnt,omitempty"` +} + +func (x *GetProofRequest) Reset() { + *x = GetProofRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_query_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetProofRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetProofRequest) ProtoMessage() {} + +func (x *GetProofRequest) ProtoReflect() protoreflect.Message { + mi := &file_query_proto_msgTypes[10] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetProofRequest.ProtoReflect.Descriptor instead. +func (*GetProofRequest) Descriptor() ([]byte, []int) { + return file_query_proto_rawDescGZIP(), []int{10} +} + +func (x *GetProofRequest) GetNetId() uint32 { + if x != nil { + return x.NetId + } + return 0 +} + +func (x *GetProofRequest) GetDepositCnt() uint64 { + if x != nil { + return x.DepositCnt + } + return 0 +} + +type GetTokenWrappedRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + OrigTokenAddr string `protobuf:"bytes,1,opt,name=orig_token_addr,json=origTokenAddr,proto3" json:"orig_token_addr,omitempty"` + OrigNet uint32 `protobuf:"varint,2,opt,name=orig_net,json=origNet,proto3" json:"orig_net,omitempty"` +} + +func (x *GetTokenWrappedRequest) Reset() { + *x = GetTokenWrappedRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_query_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetTokenWrappedRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetTokenWrappedRequest) ProtoMessage() {} + +func (x *GetTokenWrappedRequest) ProtoReflect() protoreflect.Message { + mi := &file_query_proto_msgTypes[11] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetTokenWrappedRequest.ProtoReflect.Descriptor instead. +func (*GetTokenWrappedRequest) Descriptor() ([]byte, []int) { + return file_query_proto_rawDescGZIP(), []int{11} +} + +func (x *GetTokenWrappedRequest) GetOrigTokenAddr() string { + if x != nil { + return x.OrigTokenAddr + } + return "" +} + +func (x *GetTokenWrappedRequest) GetOrigNet() uint32 { + if x != nil { + return x.OrigNet + } + return 0 +} + +type GetBridgeRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + NetId uint32 `protobuf:"varint,1,opt,name=net_id,json=netId,proto3" json:"net_id,omitempty"` + DepositCnt uint64 `protobuf:"varint,2,opt,name=deposit_cnt,json=depositCnt,proto3" json:"deposit_cnt,omitempty"` +} + +func (x *GetBridgeRequest) Reset() { + *x = GetBridgeRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_query_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetBridgeRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetBridgeRequest) ProtoMessage() {} + +func (x *GetBridgeRequest) ProtoReflect() protoreflect.Message { + mi := &file_query_proto_msgTypes[12] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetBridgeRequest.ProtoReflect.Descriptor instead. +func (*GetBridgeRequest) Descriptor() ([]byte, []int) { + return file_query_proto_rawDescGZIP(), []int{12} +} + +func (x *GetBridgeRequest) GetNetId() uint32 { + if x != nil { + return x.NetId + } + return 0 +} + +func (x *GetBridgeRequest) GetDepositCnt() uint64 { + if x != nil { + return x.DepositCnt + } + return 0 +} + +type GetClaimsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DestAddr string `protobuf:"bytes,1,opt,name=dest_addr,json=destAddr,proto3" json:"dest_addr,omitempty"` + Offset uint64 `protobuf:"varint,2,opt,name=offset,proto3" json:"offset,omitempty"` + Limit uint32 `protobuf:"varint,3,opt,name=limit,proto3" json:"limit,omitempty"` +} + +func (x *GetClaimsRequest) Reset() { + *x = GetClaimsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_query_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetClaimsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetClaimsRequest) ProtoMessage() {} + +func (x *GetClaimsRequest) ProtoReflect() protoreflect.Message { + mi := &file_query_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetClaimsRequest.ProtoReflect.Descriptor instead. +func (*GetClaimsRequest) Descriptor() ([]byte, []int) { + return file_query_proto_rawDescGZIP(), []int{13} +} + +func (x *GetClaimsRequest) GetDestAddr() string { + if x != nil { + return x.DestAddr + } + return "" +} + +func (x *GetClaimsRequest) GetOffset() uint64 { + if x != nil { + return x.Offset + } + return 0 +} + +func (x *GetClaimsRequest) GetLimit() uint32 { + if x != nil { + return x.Limit + } + return 0 +} + +type GetCoinPriceRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SymbolInfos []*SymbolInfo `protobuf:"bytes,1,rep,name=symbolInfos,proto3" json:"symbolInfos,omitempty"` +} + +func (x *GetCoinPriceRequest) Reset() { + *x = GetCoinPriceRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_query_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetCoinPriceRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetCoinPriceRequest) ProtoMessage() {} + +func (x *GetCoinPriceRequest) ProtoReflect() protoreflect.Message { + mi := &file_query_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetCoinPriceRequest.ProtoReflect.Descriptor instead. +func (*GetCoinPriceRequest) Descriptor() ([]byte, []int) { + return file_query_proto_rawDescGZIP(), []int{14} +} + +func (x *GetCoinPriceRequest) GetSymbolInfos() []*SymbolInfo { + if x != nil { + return x.SymbolInfos + } + return nil +} + +type GetMainCoinsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + NetworkId uint32 `protobuf:"varint,1,opt,name=networkId,proto3" json:"networkId,omitempty"` +} + +func (x *GetMainCoinsRequest) Reset() { + *x = GetMainCoinsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_query_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetMainCoinsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetMainCoinsRequest) ProtoMessage() {} + +func (x *GetMainCoinsRequest) ProtoReflect() protoreflect.Message { + mi := &file_query_proto_msgTypes[15] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetMainCoinsRequest.ProtoReflect.Descriptor instead. +func (*GetMainCoinsRequest) Descriptor() ([]byte, []int) { + return file_query_proto_rawDescGZIP(), []int{15} +} + +func (x *GetMainCoinsRequest) GetNetworkId() uint32 { + if x != nil { + return x.NetworkId + } + return 0 +} + +type GetPendingTransactionsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DestAddr string `protobuf:"bytes,1,opt,name=destAddr,proto3" json:"destAddr,omitempty"` + Offset uint64 `protobuf:"varint,2,opt,name=offset,proto3" json:"offset,omitempty"` + Limit uint32 `protobuf:"varint,3,opt,name=limit,proto3" json:"limit,omitempty"` +} + +func (x *GetPendingTransactionsRequest) Reset() { + *x = GetPendingTransactionsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_query_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetPendingTransactionsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetPendingTransactionsRequest) ProtoMessage() {} + +func (x *GetPendingTransactionsRequest) ProtoReflect() protoreflect.Message { + mi := &file_query_proto_msgTypes[16] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetPendingTransactionsRequest.ProtoReflect.Descriptor instead. +func (*GetPendingTransactionsRequest) Descriptor() ([]byte, []int) { + return file_query_proto_rawDescGZIP(), []int{16} +} + +func (x *GetPendingTransactionsRequest) GetDestAddr() string { + if x != nil { + return x.DestAddr + } + return "" +} + +func (x *GetPendingTransactionsRequest) GetOffset() uint64 { + if x != nil { + return x.Offset + } + return 0 +} + +func (x *GetPendingTransactionsRequest) GetLimit() uint32 { + if x != nil { + return x.Limit + } + return 0 +} + +type GetAllTransactionsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + DestAddr string `protobuf:"bytes,1,opt,name=destAddr,proto3" json:"destAddr,omitempty"` + Offset uint64 `protobuf:"varint,2,opt,name=offset,proto3" json:"offset,omitempty"` + Limit uint32 `protobuf:"varint,3,opt,name=limit,proto3" json:"limit,omitempty"` +} + +func (x *GetAllTransactionsRequest) Reset() { + *x = GetAllTransactionsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_query_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetAllTransactionsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetAllTransactionsRequest) ProtoMessage() {} + +func (x *GetAllTransactionsRequest) ProtoReflect() protoreflect.Message { + mi := &file_query_proto_msgTypes[17] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetAllTransactionsRequest.ProtoReflect.Descriptor instead. +func (*GetAllTransactionsRequest) Descriptor() ([]byte, []int) { + return file_query_proto_rawDescGZIP(), []int{17} +} + +func (x *GetAllTransactionsRequest) GetDestAddr() string { + if x != nil { + return x.DestAddr + } + return "" +} + +func (x *GetAllTransactionsRequest) GetOffset() uint64 { + if x != nil { + return x.Offset + } + return 0 +} + +func (x *GetAllTransactionsRequest) GetLimit() uint32 { + if x != nil { + return x.Limit + } + return 0 +} + +type CheckAPIResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Api string `protobuf:"bytes,1,opt,name=api,proto3" json:"api,omitempty"` +} + +func (x *CheckAPIResponse) Reset() { + *x = CheckAPIResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_query_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CheckAPIResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CheckAPIResponse) ProtoMessage() {} + +func (x *CheckAPIResponse) ProtoReflect() protoreflect.Message { + mi := &file_query_proto_msgTypes[18] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CheckAPIResponse.ProtoReflect.Descriptor instead. +func (*CheckAPIResponse) Descriptor() ([]byte, []int) { + return file_query_proto_rawDescGZIP(), []int{18} +} + +func (x *CheckAPIResponse) GetApi() string { + if x != nil { + return x.Api + } + return "" +} + +type GetBridgesResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Deposits []*Deposit `protobuf:"bytes,1,rep,name=deposits,proto3" json:"deposits,omitempty"` + TotalCnt uint64 `protobuf:"varint,2,opt,name=total_cnt,json=totalCnt,proto3" json:"total_cnt,omitempty"` +} + +func (x *GetBridgesResponse) Reset() { + *x = GetBridgesResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_query_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetBridgesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetBridgesResponse) ProtoMessage() {} + +func (x *GetBridgesResponse) ProtoReflect() protoreflect.Message { + mi := &file_query_proto_msgTypes[19] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetBridgesResponse.ProtoReflect.Descriptor instead. +func (*GetBridgesResponse) Descriptor() ([]byte, []int) { + return file_query_proto_rawDescGZIP(), []int{19} +} + +func (x *GetBridgesResponse) GetDeposits() []*Deposit { + if x != nil { + return x.Deposits + } + return nil +} + +func (x *GetBridgesResponse) GetTotalCnt() uint64 { + if x != nil { + return x.TotalCnt + } + return 0 +} + +type GetProofResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Proof *Proof `protobuf:"bytes,1,opt,name=proof,proto3" json:"proof,omitempty"` +} + +func (x *GetProofResponse) Reset() { + *x = GetProofResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_query_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetProofResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetProofResponse) ProtoMessage() {} + +func (x *GetProofResponse) ProtoReflect() protoreflect.Message { + mi := &file_query_proto_msgTypes[20] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetProofResponse.ProtoReflect.Descriptor instead. +func (*GetProofResponse) Descriptor() ([]byte, []int) { + return file_query_proto_rawDescGZIP(), []int{20} +} + +func (x *GetProofResponse) GetProof() *Proof { + if x != nil { + return x.Proof + } + return nil +} + +type GetTokenWrappedResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Tokenwrapped *TokenWrapped `protobuf:"bytes,1,opt,name=tokenwrapped,proto3" json:"tokenwrapped,omitempty"` +} + +func (x *GetTokenWrappedResponse) Reset() { + *x = GetTokenWrappedResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_query_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetTokenWrappedResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetTokenWrappedResponse) ProtoMessage() {} + +func (x *GetTokenWrappedResponse) ProtoReflect() protoreflect.Message { + mi := &file_query_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetTokenWrappedResponse.ProtoReflect.Descriptor instead. +func (*GetTokenWrappedResponse) Descriptor() ([]byte, []int) { + return file_query_proto_rawDescGZIP(), []int{21} +} + +func (x *GetTokenWrappedResponse) GetTokenwrapped() *TokenWrapped { + if x != nil { + return x.Tokenwrapped + } + return nil +} + +type GetBridgeResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Deposit *Deposit `protobuf:"bytes,1,opt,name=deposit,proto3" json:"deposit,omitempty"` +} + +func (x *GetBridgeResponse) Reset() { + *x = GetBridgeResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_query_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetBridgeResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetBridgeResponse) ProtoMessage() {} + +func (x *GetBridgeResponse) ProtoReflect() protoreflect.Message { + mi := &file_query_proto_msgTypes[22] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetBridgeResponse.ProtoReflect.Descriptor instead. +func (*GetBridgeResponse) Descriptor() ([]byte, []int) { + return file_query_proto_rawDescGZIP(), []int{22} +} + +func (x *GetBridgeResponse) GetDeposit() *Deposit { + if x != nil { + return x.Deposit + } + return nil +} + +type GetClaimsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Claims []*Claim `protobuf:"bytes,1,rep,name=claims,proto3" json:"claims,omitempty"` + TotalCnt uint64 `protobuf:"varint,2,opt,name=total_cnt,json=totalCnt,proto3" json:"total_cnt,omitempty"` +} + +func (x *GetClaimsResponse) Reset() { + *x = GetClaimsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_query_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetClaimsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetClaimsResponse) ProtoMessage() {} + +func (x *GetClaimsResponse) ProtoReflect() protoreflect.Message { + mi := &file_query_proto_msgTypes[23] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetClaimsResponse.ProtoReflect.Descriptor instead. +func (*GetClaimsResponse) Descriptor() ([]byte, []int) { + return file_query_proto_rawDescGZIP(), []int{23} +} + +func (x *GetClaimsResponse) GetClaims() []*Claim { + if x != nil { + return x.Claims + } + return nil +} + +func (x *GetClaimsResponse) GetTotalCnt() uint64 { + if x != nil { + return x.TotalCnt + } + return 0 +} + +type GetCoinPriceResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Prices []*SymbolPrice `protobuf:"bytes,1,rep,name=prices,proto3" json:"prices,omitempty"` +} + +func (x *GetCoinPriceResponse) Reset() { + *x = GetCoinPriceResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_query_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetCoinPriceResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetCoinPriceResponse) ProtoMessage() {} + +func (x *GetCoinPriceResponse) ProtoReflect() protoreflect.Message { + mi := &file_query_proto_msgTypes[24] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetCoinPriceResponse.ProtoReflect.Descriptor instead. +func (*GetCoinPriceResponse) Descriptor() ([]byte, []int) { + return file_query_proto_rawDescGZIP(), []int{24} +} + +func (x *GetCoinPriceResponse) GetPrices() []*SymbolPrice { if x != nil { - return x.Limit + return x.Prices } - return 0 + return nil } -type GetProofRequest struct { +type GetMainCoinsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - NetId uint32 `protobuf:"varint,1,opt,name=net_id,json=netId,proto3" json:"net_id,omitempty"` - DepositCnt uint64 `protobuf:"varint,2,opt,name=deposit_cnt,json=depositCnt,proto3" json:"deposit_cnt,omitempty"` + CoinInfos []*CoinInfo `protobuf:"bytes,1,rep,name=coinInfos,proto3" json:"coinInfos,omitempty"` } -func (x *GetProofRequest) Reset() { - *x = GetProofRequest{} +func (x *GetMainCoinsResponse) Reset() { + *x = GetMainCoinsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_query_proto_msgTypes[6] + mi := &file_query_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *GetProofRequest) String() string { +func (x *GetMainCoinsResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetProofRequest) ProtoMessage() {} +func (*GetMainCoinsResponse) ProtoMessage() {} -func (x *GetProofRequest) ProtoReflect() protoreflect.Message { - mi := &file_query_proto_msgTypes[6] +func (x *GetMainCoinsResponse) ProtoReflect() protoreflect.Message { + mi := &file_query_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -569,51 +1752,43 @@ func (x *GetProofRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetProofRequest.ProtoReflect.Descriptor instead. -func (*GetProofRequest) Descriptor() ([]byte, []int) { - return file_query_proto_rawDescGZIP(), []int{6} -} - -func (x *GetProofRequest) GetNetId() uint32 { - if x != nil { - return x.NetId - } - return 0 +// Deprecated: Use GetMainCoinsResponse.ProtoReflect.Descriptor instead. +func (*GetMainCoinsResponse) Descriptor() ([]byte, []int) { + return file_query_proto_rawDescGZIP(), []int{25} } -func (x *GetProofRequest) GetDepositCnt() uint64 { +func (x *GetMainCoinsResponse) GetCoinInfos() []*CoinInfo { if x != nil { - return x.DepositCnt + return x.CoinInfos } - return 0 + return nil } -type GetTokenWrappedRequest struct { +type GetPendingTransactionsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - OrigTokenAddr string `protobuf:"bytes,1,opt,name=orig_token_addr,json=origTokenAddr,proto3" json:"orig_token_addr,omitempty"` - OrigNet uint32 `protobuf:"varint,2,opt,name=orig_net,json=origNet,proto3" json:"orig_net,omitempty"` + Transactions []*Transaction `protobuf:"bytes,1,rep,name=transactions,proto3" json:"transactions,omitempty"` } -func (x *GetTokenWrappedRequest) Reset() { - *x = GetTokenWrappedRequest{} +func (x *GetPendingTransactionsResponse) Reset() { + *x = GetPendingTransactionsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_query_proto_msgTypes[7] + mi := &file_query_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *GetTokenWrappedRequest) String() string { +func (x *GetPendingTransactionsResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetTokenWrappedRequest) ProtoMessage() {} +func (*GetPendingTransactionsResponse) ProtoMessage() {} -func (x *GetTokenWrappedRequest) ProtoReflect() protoreflect.Message { - mi := &file_query_proto_msgTypes[7] +func (x *GetPendingTransactionsResponse) ProtoReflect() protoreflect.Message { + mi := &file_query_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -624,51 +1799,43 @@ func (x *GetTokenWrappedRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetTokenWrappedRequest.ProtoReflect.Descriptor instead. -func (*GetTokenWrappedRequest) Descriptor() ([]byte, []int) { - return file_query_proto_rawDescGZIP(), []int{7} -} - -func (x *GetTokenWrappedRequest) GetOrigTokenAddr() string { - if x != nil { - return x.OrigTokenAddr - } - return "" +// Deprecated: Use GetPendingTransactionsResponse.ProtoReflect.Descriptor instead. +func (*GetPendingTransactionsResponse) Descriptor() ([]byte, []int) { + return file_query_proto_rawDescGZIP(), []int{26} } -func (x *GetTokenWrappedRequest) GetOrigNet() uint32 { +func (x *GetPendingTransactionsResponse) GetTransactions() []*Transaction { if x != nil { - return x.OrigNet + return x.Transactions } - return 0 + return nil } -type GetBridgeRequest struct { +type GetAllTransactionsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - NetId uint32 `protobuf:"varint,1,opt,name=net_id,json=netId,proto3" json:"net_id,omitempty"` - DepositCnt uint64 `protobuf:"varint,2,opt,name=deposit_cnt,json=depositCnt,proto3" json:"deposit_cnt,omitempty"` + Transactions []*Transaction `protobuf:"bytes,1,rep,name=transactions,proto3" json:"transactions,omitempty"` } -func (x *GetBridgeRequest) Reset() { - *x = GetBridgeRequest{} +func (x *GetAllTransactionsResponse) Reset() { + *x = GetAllTransactionsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_query_proto_msgTypes[8] + mi := &file_query_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *GetBridgeRequest) String() string { +func (x *GetAllTransactionsResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetBridgeRequest) ProtoMessage() {} +func (*GetAllTransactionsResponse) ProtoMessage() {} -func (x *GetBridgeRequest) ProtoReflect() protoreflect.Message { - mi := &file_query_proto_msgTypes[8] +func (x *GetAllTransactionsResponse) ProtoReflect() protoreflect.Message { + mi := &file_query_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -679,52 +1846,48 @@ func (x *GetBridgeRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetBridgeRequest.ProtoReflect.Descriptor instead. -func (*GetBridgeRequest) Descriptor() ([]byte, []int) { - return file_query_proto_rawDescGZIP(), []int{8} -} - -func (x *GetBridgeRequest) GetNetId() uint32 { - if x != nil { - return x.NetId - } - return 0 +// Deprecated: Use GetAllTransactionsResponse.ProtoReflect.Descriptor instead. +func (*GetAllTransactionsResponse) Descriptor() ([]byte, []int) { + return file_query_proto_rawDescGZIP(), []int{27} } -func (x *GetBridgeRequest) GetDepositCnt() uint64 { +func (x *GetAllTransactionsResponse) GetTransactions() []*Transaction { if x != nil { - return x.DepositCnt + return x.Transactions } - return 0 + return nil } -type GetClaimsRequest struct { +type CommonTransactionsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - DestAddr string `protobuf:"bytes,1,opt,name=dest_addr,json=destAddr,proto3" json:"dest_addr,omitempty"` - Offset uint64 `protobuf:"varint,2,opt,name=offset,proto3" json:"offset,omitempty"` - Limit uint32 `protobuf:"varint,3,opt,name=limit,proto3" json:"limit,omitempty"` + Code uint32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` + Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` + ErrorCode string `protobuf:"bytes,3,opt,name=error_code,json=errorCode,proto3" json:"error_code,omitempty"` + ErrorMessage string `protobuf:"bytes,4,opt,name=error_message,json=errorMessage,proto3" json:"error_message,omitempty"` + DetailMsg string `protobuf:"bytes,5,opt,name=detailMsg,proto3" json:"detailMsg,omitempty"` + Data *TransactionDetail `protobuf:"bytes,6,opt,name=data,proto3" json:"data,omitempty"` } -func (x *GetClaimsRequest) Reset() { - *x = GetClaimsRequest{} +func (x *CommonTransactionsResponse) Reset() { + *x = CommonTransactionsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_query_proto_msgTypes[9] + mi := &file_query_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *GetClaimsRequest) String() string { +func (x *CommonTransactionsResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetClaimsRequest) ProtoMessage() {} +func (*CommonTransactionsResponse) ProtoMessage() {} -func (x *GetClaimsRequest) ProtoReflect() protoreflect.Message { - mi := &file_query_proto_msgTypes[9] +func (x *CommonTransactionsResponse) ProtoReflect() protoreflect.Message { + mi := &file_query_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -735,57 +1898,83 @@ func (x *GetClaimsRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetClaimsRequest.ProtoReflect.Descriptor instead. -func (*GetClaimsRequest) Descriptor() ([]byte, []int) { - return file_query_proto_rawDescGZIP(), []int{9} +// Deprecated: Use CommonTransactionsResponse.ProtoReflect.Descriptor instead. +func (*CommonTransactionsResponse) Descriptor() ([]byte, []int) { + return file_query_proto_rawDescGZIP(), []int{28} } -func (x *GetClaimsRequest) GetDestAddr() string { +func (x *CommonTransactionsResponse) GetCode() uint32 { if x != nil { - return x.DestAddr + return x.Code + } + return 0 +} + +func (x *CommonTransactionsResponse) GetMsg() string { + if x != nil { + return x.Msg } return "" } -func (x *GetClaimsRequest) GetOffset() uint64 { +func (x *CommonTransactionsResponse) GetErrorCode() string { if x != nil { - return x.Offset + return x.ErrorCode } - return 0 + return "" } -func (x *GetClaimsRequest) GetLimit() uint32 { +func (x *CommonTransactionsResponse) GetErrorMessage() string { if x != nil { - return x.Limit + return x.ErrorMessage } - return 0 + return "" } -type CheckAPIResponse struct { +func (x *CommonTransactionsResponse) GetDetailMsg() string { + if x != nil { + return x.DetailMsg + } + return "" +} + +func (x *CommonTransactionsResponse) GetData() *TransactionDetail { + if x != nil { + return x.Data + } + return nil +} + +type CommonCoinsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Api string `protobuf:"bytes,1,opt,name=api,proto3" json:"api,omitempty"` + Code uint32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` + Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` + ErrorCode string `protobuf:"bytes,3,opt,name=error_code,json=errorCode,proto3" json:"error_code,omitempty"` + ErrorMessage string `protobuf:"bytes,4,opt,name=error_message,json=errorMessage,proto3" json:"error_message,omitempty"` + DetailMsg string `protobuf:"bytes,5,opt,name=detailMsg,proto3" json:"detailMsg,omitempty"` + Data []*CoinInfo `protobuf:"bytes,6,rep,name=data,proto3" json:"data,omitempty"` } -func (x *CheckAPIResponse) Reset() { - *x = CheckAPIResponse{} +func (x *CommonCoinsResponse) Reset() { + *x = CommonCoinsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_query_proto_msgTypes[10] + mi := &file_query_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *CheckAPIResponse) String() string { +func (x *CommonCoinsResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CheckAPIResponse) ProtoMessage() {} +func (*CommonCoinsResponse) ProtoMessage() {} -func (x *CheckAPIResponse) ProtoReflect() protoreflect.Message { - mi := &file_query_proto_msgTypes[10] +func (x *CommonCoinsResponse) ProtoReflect() protoreflect.Message { + mi := &file_query_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -796,44 +1985,83 @@ func (x *CheckAPIResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use CheckAPIResponse.ProtoReflect.Descriptor instead. -func (*CheckAPIResponse) Descriptor() ([]byte, []int) { - return file_query_proto_rawDescGZIP(), []int{10} +// Deprecated: Use CommonCoinsResponse.ProtoReflect.Descriptor instead. +func (*CommonCoinsResponse) Descriptor() ([]byte, []int) { + return file_query_proto_rawDescGZIP(), []int{29} } -func (x *CheckAPIResponse) GetApi() string { +func (x *CommonCoinsResponse) GetCode() uint32 { if x != nil { - return x.Api + return x.Code + } + return 0 +} + +func (x *CommonCoinsResponse) GetMsg() string { + if x != nil { + return x.Msg } return "" } -type GetBridgesResponse struct { +func (x *CommonCoinsResponse) GetErrorCode() string { + if x != nil { + return x.ErrorCode + } + return "" +} + +func (x *CommonCoinsResponse) GetErrorMessage() string { + if x != nil { + return x.ErrorMessage + } + return "" +} + +func (x *CommonCoinsResponse) GetDetailMsg() string { + if x != nil { + return x.DetailMsg + } + return "" +} + +func (x *CommonCoinsResponse) GetData() []*CoinInfo { + if x != nil { + return x.Data + } + return nil +} + +type CommonCoinPricesResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Deposits []*Deposit `protobuf:"bytes,1,rep,name=deposits,proto3" json:"deposits,omitempty"` - TotalCnt uint64 `protobuf:"varint,2,opt,name=total_cnt,json=totalCnt,proto3" json:"total_cnt,omitempty"` + Code uint32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` + Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` + ErrorCode string `protobuf:"bytes,3,opt,name=error_code,json=errorCode,proto3" json:"error_code,omitempty"` + ErrorMessage string `protobuf:"bytes,4,opt,name=error_message,json=errorMessage,proto3" json:"error_message,omitempty"` + DetailMsg string `protobuf:"bytes,5,opt,name=detailMsg,proto3" json:"detailMsg,omitempty"` + Data []*SymbolPrice `protobuf:"bytes,6,rep,name=data,proto3" json:"data,omitempty"` } -func (x *GetBridgesResponse) Reset() { - *x = GetBridgesResponse{} +func (x *CommonCoinPricesResponse) Reset() { + *x = CommonCoinPricesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_query_proto_msgTypes[11] + mi := &file_query_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *GetBridgesResponse) String() string { +func (x *CommonCoinPricesResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetBridgesResponse) ProtoMessage() {} +func (*CommonCoinPricesResponse) ProtoMessage() {} -func (x *GetBridgesResponse) ProtoReflect() protoreflect.Message { - mi := &file_query_proto_msgTypes[11] +func (x *CommonCoinPricesResponse) ProtoReflect() protoreflect.Message { + mi := &file_query_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -844,50 +2072,79 @@ func (x *GetBridgesResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetBridgesResponse.ProtoReflect.Descriptor instead. -func (*GetBridgesResponse) Descriptor() ([]byte, []int) { - return file_query_proto_rawDescGZIP(), []int{11} +// Deprecated: Use CommonCoinPricesResponse.ProtoReflect.Descriptor instead. +func (*CommonCoinPricesResponse) Descriptor() ([]byte, []int) { + return file_query_proto_rawDescGZIP(), []int{30} } -func (x *GetBridgesResponse) GetDeposits() []*Deposit { +func (x *CommonCoinPricesResponse) GetCode() uint32 { if x != nil { - return x.Deposits + return x.Code } - return nil + return 0 } -func (x *GetBridgesResponse) GetTotalCnt() uint64 { +func (x *CommonCoinPricesResponse) GetMsg() string { if x != nil { - return x.TotalCnt + return x.Msg } - return 0 + return "" } -type GetProofResponse struct { +func (x *CommonCoinPricesResponse) GetErrorCode() string { + if x != nil { + return x.ErrorCode + } + return "" +} + +func (x *CommonCoinPricesResponse) GetErrorMessage() string { + if x != nil { + return x.ErrorMessage + } + return "" +} + +func (x *CommonCoinPricesResponse) GetDetailMsg() string { + if x != nil { + return x.DetailMsg + } + return "" +} + +func (x *CommonCoinPricesResponse) GetData() []*SymbolPrice { + if x != nil { + return x.Data + } + return nil +} + +type TransactionDetail struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Proof *Proof `protobuf:"bytes,1,opt,name=proof,proto3" json:"proof,omitempty"` + HasNext bool `protobuf:"varint,1,opt,name=hasNext,proto3" json:"hasNext,omitempty"` + Transactions []*Transaction `protobuf:"bytes,2,rep,name=transactions,proto3" json:"transactions,omitempty"` } -func (x *GetProofResponse) Reset() { - *x = GetProofResponse{} +func (x *TransactionDetail) Reset() { + *x = TransactionDetail{} if protoimpl.UnsafeEnabled { - mi := &file_query_proto_msgTypes[12] + mi := &file_query_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *GetProofResponse) String() string { +func (x *TransactionDetail) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetProofResponse) ProtoMessage() {} +func (*TransactionDetail) ProtoMessage() {} -func (x *GetProofResponse) ProtoReflect() protoreflect.Message { - mi := &file_query_proto_msgTypes[12] +func (x *TransactionDetail) ProtoReflect() protoreflect.Message { + mi := &file_query_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -898,43 +2155,55 @@ func (x *GetProofResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetProofResponse.ProtoReflect.Descriptor instead. -func (*GetProofResponse) Descriptor() ([]byte, []int) { - return file_query_proto_rawDescGZIP(), []int{12} +// Deprecated: Use TransactionDetail.ProtoReflect.Descriptor instead. +func (*TransactionDetail) Descriptor() ([]byte, []int) { + return file_query_proto_rawDescGZIP(), []int{31} } -func (x *GetProofResponse) GetProof() *Proof { +func (x *TransactionDetail) GetHasNext() bool { if x != nil { - return x.Proof + return x.HasNext + } + return false +} + +func (x *TransactionDetail) GetTransactions() []*Transaction { + if x != nil { + return x.Transactions } return nil } -type GetTokenWrappedResponse struct { +type CommonProofResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Tokenwrapped *TokenWrapped `protobuf:"bytes,1,opt,name=tokenwrapped,proto3" json:"tokenwrapped,omitempty"` + Code uint32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` + Msg string `protobuf:"bytes,2,opt,name=msg,proto3" json:"msg,omitempty"` + ErrorCode string `protobuf:"bytes,3,opt,name=error_code,json=errorCode,proto3" json:"error_code,omitempty"` + ErrorMessage string `protobuf:"bytes,4,opt,name=error_message,json=errorMessage,proto3" json:"error_message,omitempty"` + DetailMsg string `protobuf:"bytes,5,opt,name=detailMsg,proto3" json:"detailMsg,omitempty"` + Data *ProofDetail `protobuf:"bytes,6,opt,name=data,proto3" json:"data,omitempty"` } -func (x *GetTokenWrappedResponse) Reset() { - *x = GetTokenWrappedResponse{} +func (x *CommonProofResponse) Reset() { + *x = CommonProofResponse{} if protoimpl.UnsafeEnabled { - mi := &file_query_proto_msgTypes[13] + mi := &file_query_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *GetTokenWrappedResponse) String() string { +func (x *CommonProofResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetTokenWrappedResponse) ProtoMessage() {} +func (*CommonProofResponse) ProtoMessage() {} -func (x *GetTokenWrappedResponse) ProtoReflect() protoreflect.Message { - mi := &file_query_proto_msgTypes[13] +func (x *CommonProofResponse) ProtoReflect() protoreflect.Message { + mi := &file_query_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -945,43 +2214,80 @@ func (x *GetTokenWrappedResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetTokenWrappedResponse.ProtoReflect.Descriptor instead. -func (*GetTokenWrappedResponse) Descriptor() ([]byte, []int) { - return file_query_proto_rawDescGZIP(), []int{13} +// Deprecated: Use CommonProofResponse.ProtoReflect.Descriptor instead. +func (*CommonProofResponse) Descriptor() ([]byte, []int) { + return file_query_proto_rawDescGZIP(), []int{32} } -func (x *GetTokenWrappedResponse) GetTokenwrapped() *TokenWrapped { +func (x *CommonProofResponse) GetCode() uint32 { if x != nil { - return x.Tokenwrapped + return x.Code + } + return 0 +} + +func (x *CommonProofResponse) GetMsg() string { + if x != nil { + return x.Msg + } + return "" +} + +func (x *CommonProofResponse) GetErrorCode() string { + if x != nil { + return x.ErrorCode + } + return "" +} + +func (x *CommonProofResponse) GetErrorMessage() string { + if x != nil { + return x.ErrorMessage + } + return "" +} + +func (x *CommonProofResponse) GetDetailMsg() string { + if x != nil { + return x.DetailMsg + } + return "" +} + +func (x *CommonProofResponse) GetData() *ProofDetail { + if x != nil { + return x.Data } return nil } -type GetBridgeResponse struct { +type ProofDetail struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Deposit *Deposit `protobuf:"bytes,1,opt,name=deposit,proto3" json:"deposit,omitempty"` + SmtProof []string `protobuf:"bytes,1,rep,name=smtProof,proto3" json:"smtProof,omitempty"` + MainnetExitRoot string `protobuf:"bytes,2,opt,name=mainnetExitRoot,proto3" json:"mainnetExitRoot,omitempty"` + RollupExitRoot string `protobuf:"bytes,3,opt,name=rollupExitRoot,proto3" json:"rollupExitRoot,omitempty"` } -func (x *GetBridgeResponse) Reset() { - *x = GetBridgeResponse{} +func (x *ProofDetail) Reset() { + *x = ProofDetail{} if protoimpl.UnsafeEnabled { - mi := &file_query_proto_msgTypes[14] + mi := &file_query_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *GetBridgeResponse) String() string { +func (x *ProofDetail) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetBridgeResponse) ProtoMessage() {} +func (*ProofDetail) ProtoMessage() {} -func (x *GetBridgeResponse) ProtoReflect() protoreflect.Message { - mi := &file_query_proto_msgTypes[14] +func (x *ProofDetail) ProtoReflect() protoreflect.Message { + mi := &file_query_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -992,44 +2298,58 @@ func (x *GetBridgeResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetBridgeResponse.ProtoReflect.Descriptor instead. -func (*GetBridgeResponse) Descriptor() ([]byte, []int) { - return file_query_proto_rawDescGZIP(), []int{14} +// Deprecated: Use ProofDetail.ProtoReflect.Descriptor instead. +func (*ProofDetail) Descriptor() ([]byte, []int) { + return file_query_proto_rawDescGZIP(), []int{33} } -func (x *GetBridgeResponse) GetDeposit() *Deposit { +func (x *ProofDetail) GetSmtProof() []string { if x != nil { - return x.Deposit + return x.SmtProof } return nil } -type GetClaimsResponse struct { +func (x *ProofDetail) GetMainnetExitRoot() string { + if x != nil { + return x.MainnetExitRoot + } + return "" +} + +func (x *ProofDetail) GetRollupExitRoot() string { + if x != nil { + return x.RollupExitRoot + } + return "" +} + +type GetSmtProofRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Claims []*Claim `protobuf:"bytes,1,rep,name=claims,proto3" json:"claims,omitempty"` - TotalCnt uint64 `protobuf:"varint,2,opt,name=total_cnt,json=totalCnt,proto3" json:"total_cnt,omitempty"` + Index uint32 `protobuf:"varint,1,opt,name=index,proto3" json:"index,omitempty"` + FromChain uint64 `protobuf:"varint,2,opt,name=fromChain,proto3" json:"fromChain,omitempty"` } -func (x *GetClaimsResponse) Reset() { - *x = GetClaimsResponse{} +func (x *GetSmtProofRequest) Reset() { + *x = GetSmtProofRequest{} if protoimpl.UnsafeEnabled { - mi := &file_query_proto_msgTypes[15] + mi := &file_query_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *GetClaimsResponse) String() string { +func (x *GetSmtProofRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GetClaimsResponse) ProtoMessage() {} +func (*GetSmtProofRequest) ProtoMessage() {} -func (x *GetClaimsResponse) ProtoReflect() protoreflect.Message { - mi := &file_query_proto_msgTypes[15] +func (x *GetSmtProofRequest) ProtoReflect() protoreflect.Message { + mi := &file_query_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1040,21 +2360,21 @@ func (x *GetClaimsResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GetClaimsResponse.ProtoReflect.Descriptor instead. -func (*GetClaimsResponse) Descriptor() ([]byte, []int) { - return file_query_proto_rawDescGZIP(), []int{15} +// Deprecated: Use GetSmtProofRequest.ProtoReflect.Descriptor instead. +func (*GetSmtProofRequest) Descriptor() ([]byte, []int) { + return file_query_proto_rawDescGZIP(), []int{34} } -func (x *GetClaimsResponse) GetClaims() []*Claim { +func (x *GetSmtProofRequest) GetIndex() uint32 { if x != nil { - return x.Claims + return x.Index } - return nil + return 0 } -func (x *GetClaimsResponse) GetTotalCnt() uint64 { +func (x *GetSmtProofRequest) GetFromChain() uint64 { if x != nil { - return x.TotalCnt + return x.FromChain } return 0 } @@ -1127,105 +2447,333 @@ var file_query_proto_rawDesc = []byte{ 0x69, 0x6e, 0x45, 0x78, 0x69, 0x74, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x72, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x5f, 0x65, 0x78, 0x69, 0x74, 0x5f, 0x72, 0x6f, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x45, 0x78, 0x69, 0x74, - 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x11, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x41, 0x50, 0x49, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x5e, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x42, 0x72, - 0x69, 0x64, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, - 0x64, 0x65, 0x73, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x64, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, - 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, - 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x49, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x50, 0x72, - 0x6f, 0x6f, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x15, 0x0a, 0x06, 0x6e, 0x65, - 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6e, 0x65, 0x74, 0x49, - 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x63, 0x6e, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, - 0x6e, 0x74, 0x22, 0x5b, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x57, 0x72, - 0x61, 0x70, 0x70, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0f, - 0x6f, 0x72, 0x69, 0x67, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6f, 0x72, 0x69, 0x67, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x41, 0x64, 0x64, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x72, 0x69, 0x67, 0x5f, 0x6e, 0x65, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x6f, 0x72, 0x69, 0x67, 0x4e, 0x65, 0x74, 0x22, - 0x4a, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x15, 0x0a, 0x06, 0x6e, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6e, 0x65, 0x74, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x65, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x0a, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6e, 0x74, 0x22, 0x5d, 0x0a, 0x10, 0x47, - 0x65, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x73, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x64, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x12, 0x16, 0x0a, 0x06, - 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, - 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x24, 0x0a, 0x10, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x41, 0x50, 0x49, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, - 0x0a, 0x03, 0x61, 0x70, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, 0x70, 0x69, - 0x22, 0x61, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x08, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, - 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x52, 0x08, 0x64, 0x65, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, - 0x63, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x43, 0x6e, 0x74, 0x22, 0x3a, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x22, - 0x56, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x57, 0x72, 0x61, 0x70, 0x70, - 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x0c, 0x74, 0x6f, - 0x6b, 0x65, 0x6e, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x17, 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x52, 0x0c, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x22, 0x41, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x42, 0x72, - 0x69, 0x64, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x07, - 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, - 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x52, 0x07, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x22, 0x5a, 0x0a, 0x11, 0x47, 0x65, - 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x28, 0x0a, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x10, 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, - 0x6d, 0x52, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x74, - 0x61, 0x6c, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x74, 0x6f, - 0x74, 0x61, 0x6c, 0x43, 0x6e, 0x74, 0x32, 0xd6, 0x04, 0x0a, 0x0d, 0x42, 0x72, 0x69, 0x64, 0x67, - 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x51, 0x0a, 0x08, 0x43, 0x68, 0x65, 0x63, - 0x6b, 0x41, 0x50, 0x49, 0x12, 0x1a, 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x41, 0x50, 0x49, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1b, 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x41, 0x50, 0x49, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x0c, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x06, 0x12, 0x04, 0x2f, 0x61, 0x70, 0x69, 0x12, 0x67, 0x0a, 0x0a, 0x47, - 0x65, 0x74, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x73, 0x12, 0x1c, 0x2e, 0x62, 0x72, 0x69, 0x64, - 0x67, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, - 0x2f, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x73, 0x74, 0x5f, 0x61, - 0x64, 0x64, 0x72, 0x7d, 0x12, 0x5a, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, - 0x12, 0x1a, 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, - 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x62, - 0x72, 0x69, 0x64, 0x67, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6f, - 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x0f, 0x12, 0x0d, 0x2f, 0x6d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x6f, 0x66, - 0x12, 0x57, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x12, 0x1b, 0x2e, - 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x72, 0x69, - 0x64, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x62, 0x72, 0x69, + 0x52, 0x6f, 0x6f, 0x74, 0x22, 0x40, 0x0a, 0x0a, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x83, 0x01, 0x0a, 0x0b, 0x53, 0x79, 0x6d, 0x62, 0x6f, + 0x6c, 0x50, 0x72, 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x12, 0x14, + 0x0a, 0x05, 0x70, 0x72, 0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x70, + 0x72, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x22, 0xc0, 0x01, 0x0a, + 0x08, 0x43, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x6d, + 0x62, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x79, 0x6d, 0x62, 0x6f, + 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, + 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, + 0x73, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x6f, 0x67, + 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x67, + 0x6f, 0x4c, 0x69, 0x6e, 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, + 0xb3, 0x03, 0x0a, 0x0b, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x1c, 0x0a, 0x09, 0x66, 0x72, 0x6f, 0x6d, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x09, 0x66, 0x72, 0x6f, 0x6d, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x18, 0x0a, + 0x07, 0x74, 0x6f, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, + 0x74, 0x6f, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x62, 0x72, 0x69, 0x64, 0x67, + 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x62, 0x72, + 0x69, 0x64, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x20, 0x0a, 0x0b, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x65, + 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x0c, 0x65, 0x73, 0x74, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, + 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, + 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x74, + 0x78, 0x48, 0x61, 0x73, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x78, 0x48, + 0x61, 0x73, 0x68, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x54, 0x78, 0x48, 0x61, + 0x73, 0x68, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x54, + 0x78, 0x48, 0x61, 0x73, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x54, 0x69, + 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x54, + 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x66, 0x72, 0x6f, 0x6d, 0x43, 0x68, 0x61, 0x69, 0x6e, + 0x49, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x66, 0x72, 0x6f, 0x6d, 0x43, 0x68, + 0x61, 0x69, 0x6e, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x6f, 0x43, 0x68, 0x61, 0x69, 0x6e, + 0x49, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x74, 0x6f, 0x43, 0x68, 0x61, 0x69, + 0x6e, 0x49, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x0e, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x11, 0x0a, 0x0f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x41, 0x50, + 0x49, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x5e, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x42, + 0x72, 0x69, 0x64, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, + 0x09, 0x64, 0x65, 0x73, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x64, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, + 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, + 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x49, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x50, + 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x15, 0x0a, 0x06, 0x6e, + 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6e, 0x65, 0x74, + 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x63, 0x6e, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x43, 0x6e, 0x74, 0x22, 0x5b, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x57, + 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, + 0x0f, 0x6f, 0x72, 0x69, 0x67, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x61, 0x64, 0x64, 0x72, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6f, 0x72, 0x69, 0x67, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x41, 0x64, 0x64, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x72, 0x69, 0x67, 0x5f, 0x6e, 0x65, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x6f, 0x72, 0x69, 0x67, 0x4e, 0x65, 0x74, + 0x22, 0x4a, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x15, 0x0a, 0x06, 0x6e, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6e, 0x65, 0x74, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x64, + 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0a, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6e, 0x74, 0x22, 0x5d, 0x0a, 0x10, + 0x47, 0x65, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x65, 0x73, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x12, 0x16, 0x0a, + 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x4e, 0x0a, 0x13, 0x47, + 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x37, 0x0a, 0x0b, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x49, 0x6e, 0x66, 0x6f, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, + 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x22, 0x33, 0x0a, 0x13, 0x47, + 0x65, 0x74, 0x4d, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x64, + 0x22, 0x69, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x12, 0x16, 0x0a, + 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, + 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x22, 0x65, 0x0a, 0x19, 0x47, + 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x65, 0x73, 0x74, + 0x41, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x65, 0x73, 0x74, + 0x41, 0x64, 0x64, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, + 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6c, 0x69, 0x6d, + 0x69, 0x74, 0x22, 0x24, 0x0a, 0x10, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x41, 0x50, 0x49, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x61, 0x70, 0x69, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x61, 0x70, 0x69, 0x22, 0x61, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x42, + 0x72, 0x69, 0x64, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, + 0x0a, 0x08, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x12, 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x52, 0x08, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x73, 0x12, 0x1b, + 0x0a, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x08, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6e, 0x74, 0x22, 0x3a, 0x0a, 0x10, 0x47, + 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x26, 0x0a, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, + 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6f, 0x66, + 0x52, 0x05, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x22, 0x56, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x0c, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x77, 0x72, 0x61, 0x70, 0x70, + 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, + 0x64, 0x52, 0x0c, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x22, + 0x41, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x07, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2e, 0x76, + 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x52, 0x07, 0x64, 0x65, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x22, 0x5a, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x52, 0x06, 0x63, 0x6c, 0x61, 0x69, 0x6d, + 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x63, 0x6e, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x43, 0x6e, 0x74, 0x22, 0x46, + 0x0a, 0x14, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x06, 0x70, 0x72, 0x69, 0x63, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, 0x06, + 0x70, 0x72, 0x69, 0x63, 0x65, 0x73, 0x22, 0x49, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x4d, 0x61, 0x69, + 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, + 0x0a, 0x09, 0x63, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, + 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x63, 0x6f, 0x69, 0x6e, 0x49, 0x6e, 0x66, 0x6f, + 0x73, 0x22, 0x5c, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x62, 0x72, 0x69, 0x64, + 0x67, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, + 0x58, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, + 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2e, 0x76, 0x31, 0x2e, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xd6, 0x01, 0x0a, 0x1a, 0x43, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, + 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x1d, + 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, + 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x4d, 0x73, 0x67, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x4d, 0x73, 0x67, + 0x12, 0x30, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, + 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x04, 0x64, 0x61, + 0x74, 0x61, 0x22, 0xc6, 0x01, 0x0a, 0x13, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x43, 0x6f, 0x69, + 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, + 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, + 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, + 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, + 0x23, 0x0a, 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x4d, 0x73, + 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x4d, + 0x73, 0x67, 0x12, 0x27, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x13, 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x69, + 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xce, 0x01, 0x0a, 0x18, + 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, + 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x1d, + 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, + 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x4d, 0x73, 0x67, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x4d, 0x73, 0x67, + 0x12, 0x2a, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x79, 0x6d, 0x62, 0x6f, + 0x6c, 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x69, 0x0a, 0x11, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x68, 0x61, 0x73, 0x4e, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x07, 0x68, 0x61, 0x73, 0x4e, 0x65, 0x78, 0x74, 0x12, 0x3a, 0x0a, 0x0c, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xc9, 0x01, 0x0a, 0x13, 0x43, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x63, + 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x63, + 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, + 0x43, 0x6f, 0x64, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x65, 0x74, + 0x61, 0x69, 0x6c, 0x4d, 0x73, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x4d, 0x73, 0x67, 0x12, 0x2a, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2e, 0x76, + 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x52, 0x04, 0x64, + 0x61, 0x74, 0x61, 0x22, 0x7b, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x44, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x6d, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x73, 0x6d, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x28, + 0x0a, 0x0f, 0x6d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, 0x45, 0x78, 0x69, 0x74, 0x52, 0x6f, 0x6f, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6d, 0x61, 0x69, 0x6e, 0x6e, 0x65, 0x74, + 0x45, 0x78, 0x69, 0x74, 0x52, 0x6f, 0x6f, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x72, 0x6f, 0x6c, 0x6c, + 0x75, 0x70, 0x45, 0x78, 0x69, 0x74, 0x52, 0x6f, 0x6f, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0e, 0x72, 0x6f, 0x6c, 0x6c, 0x75, 0x70, 0x45, 0x78, 0x69, 0x74, 0x52, 0x6f, 0x6f, 0x74, + 0x22, 0x48, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x53, 0x6d, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1c, 0x0a, 0x09, + 0x66, 0x72, 0x6f, 0x6d, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x09, 0x66, 0x72, 0x6f, 0x6d, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x32, 0xc7, 0x0c, 0x0a, 0x0d, 0x42, + 0x72, 0x69, 0x64, 0x67, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x6d, 0x0a, 0x08, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x41, 0x50, 0x49, 0x12, 0x1a, 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x41, 0x50, 0x49, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2e, 0x76, 0x31, + 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x41, 0x50, 0x49, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x5a, 0x06, 0x12, 0x04, 0x2f, 0x61, 0x70, + 0x69, 0x12, 0x18, 0x2f, 0x70, 0x72, 0x69, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6f, 0x62, + 0x2f, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x12, 0x93, 0x01, 0x0a, 0x0a, + 0x47, 0x65, 0x74, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x73, 0x12, 0x1c, 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x0f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x09, - 0x12, 0x07, 0x2f, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x12, 0x63, 0x0a, 0x09, 0x47, 0x65, 0x74, - 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x12, 0x1b, 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2e, - 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x12, 0x13, 0x2f, 0x63, 0x6c, 0x61, 0x69, - 0x6d, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x73, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x7d, 0x12, 0x6f, - 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, - 0x64, 0x12, 0x21, 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, - 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x15, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0f, - 0x12, 0x0d, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x42, - 0x3f, 0x5a, 0x3d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x30, 0x78, - 0x50, 0x6f, 0x6c, 0x79, 0x67, 0x6f, 0x6e, 0x48, 0x65, 0x72, 0x6d, 0x65, 0x7a, 0x2f, 0x7a, 0x6b, - 0x65, 0x76, 0x6d, 0x2d, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2d, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x2f, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x74, 0x72, 0x65, 0x65, 0x2f, 0x70, 0x62, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x48, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x42, 0x5a, + 0x16, 0x12, 0x14, 0x2f, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x73, + 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x7d, 0x12, 0x28, 0x2f, 0x70, 0x72, 0x69, 0x61, 0x70, 0x69, + 0x2f, 0x76, 0x31, 0x2f, 0x6f, 0x62, 0x2f, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2f, 0x62, 0x72, + 0x69, 0x64, 0x67, 0x65, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x73, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, + 0x7d, 0x12, 0x7f, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x1a, 0x2e, + 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, + 0x6f, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x62, 0x72, 0x69, 0x64, + 0x67, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x5a, 0x0f, + 0x12, 0x0d, 0x2f, 0x6d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x6f, 0x66, 0x12, + 0x21, 0x2f, 0x70, 0x72, 0x69, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6f, 0x62, 0x2f, 0x62, + 0x72, 0x69, 0x64, 0x67, 0x65, 0x2f, 0x6d, 0x65, 0x72, 0x6b, 0x6c, 0x65, 0x2d, 0x70, 0x72, 0x6f, + 0x6f, 0x66, 0x12, 0x76, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x42, 0x72, 0x69, 0x64, 0x67, 0x65, 0x12, + 0x1b, 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x42, + 0x72, 0x69, 0x64, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x62, + 0x72, 0x69, 0x64, 0x67, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x42, 0x72, 0x69, 0x64, + 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x28, 0x5a, 0x09, 0x12, 0x07, 0x2f, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x12, 0x1b, 0x2f, + 0x70, 0x72, 0x69, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6f, 0x62, 0x2f, 0x62, 0x72, 0x69, + 0x64, 0x67, 0x65, 0x2f, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x12, 0x8e, 0x01, 0x0a, 0x09, 0x47, + 0x65, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x12, 0x1b, 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x46, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x40, 0x5a, 0x15, 0x12, 0x13, 0x2f, + 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x2f, 0x7b, 0x64, 0x65, 0x73, 0x74, 0x5f, 0x61, 0x64, 0x64, + 0x72, 0x7d, 0x12, 0x27, 0x2f, 0x70, 0x72, 0x69, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6f, + 0x62, 0x2f, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2f, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x73, 0x2f, + 0x7b, 0x64, 0x65, 0x73, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x7d, 0x12, 0x94, 0x01, 0x0a, 0x0f, + 0x47, 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x12, + 0x21, 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x5a, 0x0f, + 0x12, 0x0d, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x64, 0x12, + 0x21, 0x2f, 0x70, 0x72, 0x69, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6f, 0x62, 0x2f, 0x62, + 0x72, 0x69, 0x64, 0x67, 0x65, 0x2f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x77, 0x72, 0x61, 0x70, 0x70, + 0x65, 0x64, 0x12, 0x91, 0x01, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x72, + 0x69, 0x63, 0x65, 0x12, 0x1e, 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2e, 0x76, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x50, 0x72, 0x69, 0x63, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, + 0x3a, 0x01, 0x2a, 0x5a, 0x10, 0x3a, 0x01, 0x2a, 0x22, 0x0b, 0x2f, 0x63, 0x6f, 0x69, 0x6e, 0x2d, + 0x70, 0x72, 0x69, 0x63, 0x65, 0x22, 0x1f, 0x2f, 0x70, 0x72, 0x69, 0x61, 0x70, 0x69, 0x2f, 0x76, + 0x31, 0x2f, 0x6f, 0x62, 0x2f, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2f, 0x63, 0x6f, 0x69, 0x6e, + 0x2d, 0x70, 0x72, 0x69, 0x63, 0x65, 0x12, 0x9e, 0x01, 0x0a, 0x0c, 0x47, 0x65, 0x74, 0x4d, 0x61, + 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x12, 0x1e, 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x43, 0x6f, 0x69, 0x6e, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x48, 0x5a, + 0x19, 0x12, 0x17, 0x2f, 0x6d, 0x61, 0x69, 0x6e, 0x2d, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0x2f, 0x7b, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x64, 0x7d, 0x12, 0x2b, 0x2f, 0x70, 0x72, 0x69, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6f, 0x62, 0x2f, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, + 0x2f, 0x6d, 0x61, 0x69, 0x6e, 0x2d, 0x63, 0x6f, 0x69, 0x6e, 0x73, 0x2f, 0x7b, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x64, 0x7d, 0x12, 0xb1, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x50, + 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x28, 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x62, + 0x72, 0x69, 0x64, 0x67, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x54, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x46, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x40, 0x5a, 0x15, 0x12, 0x13, 0x2f, + 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x2f, 0x7b, 0x64, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, + 0x72, 0x7d, 0x12, 0x27, 0x2f, 0x70, 0x72, 0x69, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6f, + 0x62, 0x2f, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2f, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x2f, 0x7b, 0x64, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x7d, 0x12, 0xa1, 0x01, 0x0a, 0x12, + 0x47, 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x12, 0x24, 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, + 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x54, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x3e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x38, 0x5a, 0x11, 0x12, 0x0f, 0x2f, 0x61, 0x6c, 0x6c, 0x2f, + 0x7b, 0x64, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x7d, 0x12, 0x23, 0x2f, 0x70, 0x72, 0x69, + 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6f, 0x62, 0x2f, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, + 0x2f, 0x61, 0x6c, 0x6c, 0x2f, 0x7b, 0x64, 0x65, 0x73, 0x74, 0x41, 0x64, 0x64, 0x72, 0x7d, 0x12, + 0x82, 0x01, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x53, 0x6d, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x12, + 0x1d, 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, + 0x6d, 0x74, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, + 0x2e, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x50, 0x72, 0x6f, 0x6f, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x34, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x5a, 0x0c, 0x12, 0x0a, 0x2f, 0x73, 0x6d, 0x74, 0x2d, 0x70, + 0x72, 0x6f, 0x6f, 0x66, 0x12, 0x1e, 0x2f, 0x70, 0x72, 0x69, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, + 0x2f, 0x6f, 0x62, 0x2f, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2f, 0x73, 0x6d, 0x74, 0x2d, 0x70, + 0x72, 0x6f, 0x6f, 0x66, 0x42, 0x3f, 0x5a, 0x3d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x30, 0x78, 0x50, 0x6f, 0x6c, 0x79, 0x67, 0x6f, 0x6e, 0x48, 0x65, 0x72, 0x6d, + 0x65, 0x7a, 0x2f, 0x7a, 0x6b, 0x65, 0x76, 0x6d, 0x2d, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x2d, + 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x62, 0x72, 0x69, 0x64, 0x67, 0x65, 0x74, 0x72, + 0x65, 0x65, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1240,48 +2788,87 @@ func file_query_proto_rawDescGZIP() []byte { return file_query_proto_rawDescData } -var file_query_proto_msgTypes = make([]protoimpl.MessageInfo, 16) +var file_query_proto_msgTypes = make([]protoimpl.MessageInfo, 35) var file_query_proto_goTypes = []interface{}{ - (*TokenWrapped)(nil), // 0: bridge.v1.TokenWrapped - (*Deposit)(nil), // 1: bridge.v1.Deposit - (*Claim)(nil), // 2: bridge.v1.Claim - (*Proof)(nil), // 3: bridge.v1.Proof - (*CheckAPIRequest)(nil), // 4: bridge.v1.CheckAPIRequest - (*GetBridgesRequest)(nil), // 5: bridge.v1.GetBridgesRequest - (*GetProofRequest)(nil), // 6: bridge.v1.GetProofRequest - (*GetTokenWrappedRequest)(nil), // 7: bridge.v1.GetTokenWrappedRequest - (*GetBridgeRequest)(nil), // 8: bridge.v1.GetBridgeRequest - (*GetClaimsRequest)(nil), // 9: bridge.v1.GetClaimsRequest - (*CheckAPIResponse)(nil), // 10: bridge.v1.CheckAPIResponse - (*GetBridgesResponse)(nil), // 11: bridge.v1.GetBridgesResponse - (*GetProofResponse)(nil), // 12: bridge.v1.GetProofResponse - (*GetTokenWrappedResponse)(nil), // 13: bridge.v1.GetTokenWrappedResponse - (*GetBridgeResponse)(nil), // 14: bridge.v1.GetBridgeResponse - (*GetClaimsResponse)(nil), // 15: bridge.v1.GetClaimsResponse + (*TokenWrapped)(nil), // 0: bridge.v1.TokenWrapped + (*Deposit)(nil), // 1: bridge.v1.Deposit + (*Claim)(nil), // 2: bridge.v1.Claim + (*Proof)(nil), // 3: bridge.v1.Proof + (*SymbolInfo)(nil), // 4: bridge.v1.SymbolInfo + (*SymbolPrice)(nil), // 5: bridge.v1.SymbolPrice + (*CoinInfo)(nil), // 6: bridge.v1.CoinInfo + (*Transaction)(nil), // 7: bridge.v1.Transaction + (*CheckAPIRequest)(nil), // 8: bridge.v1.CheckAPIRequest + (*GetBridgesRequest)(nil), // 9: bridge.v1.GetBridgesRequest + (*GetProofRequest)(nil), // 10: bridge.v1.GetProofRequest + (*GetTokenWrappedRequest)(nil), // 11: bridge.v1.GetTokenWrappedRequest + (*GetBridgeRequest)(nil), // 12: bridge.v1.GetBridgeRequest + (*GetClaimsRequest)(nil), // 13: bridge.v1.GetClaimsRequest + (*GetCoinPriceRequest)(nil), // 14: bridge.v1.GetCoinPriceRequest + (*GetMainCoinsRequest)(nil), // 15: bridge.v1.GetMainCoinsRequest + (*GetPendingTransactionsRequest)(nil), // 16: bridge.v1.GetPendingTransactionsRequest + (*GetAllTransactionsRequest)(nil), // 17: bridge.v1.GetAllTransactionsRequest + (*CheckAPIResponse)(nil), // 18: bridge.v1.CheckAPIResponse + (*GetBridgesResponse)(nil), // 19: bridge.v1.GetBridgesResponse + (*GetProofResponse)(nil), // 20: bridge.v1.GetProofResponse + (*GetTokenWrappedResponse)(nil), // 21: bridge.v1.GetTokenWrappedResponse + (*GetBridgeResponse)(nil), // 22: bridge.v1.GetBridgeResponse + (*GetClaimsResponse)(nil), // 23: bridge.v1.GetClaimsResponse + (*GetCoinPriceResponse)(nil), // 24: bridge.v1.GetCoinPriceResponse + (*GetMainCoinsResponse)(nil), // 25: bridge.v1.GetMainCoinsResponse + (*GetPendingTransactionsResponse)(nil), // 26: bridge.v1.GetPendingTransactionsResponse + (*GetAllTransactionsResponse)(nil), // 27: bridge.v1.GetAllTransactionsResponse + (*CommonTransactionsResponse)(nil), // 28: bridge.v1.CommonTransactionsResponse + (*CommonCoinsResponse)(nil), // 29: bridge.v1.CommonCoinsResponse + (*CommonCoinPricesResponse)(nil), // 30: bridge.v1.CommonCoinPricesResponse + (*TransactionDetail)(nil), // 31: bridge.v1.TransactionDetail + (*CommonProofResponse)(nil), // 32: bridge.v1.CommonProofResponse + (*ProofDetail)(nil), // 33: bridge.v1.ProofDetail + (*GetSmtProofRequest)(nil), // 34: bridge.v1.GetSmtProofRequest } var file_query_proto_depIdxs = []int32{ - 1, // 0: bridge.v1.GetBridgesResponse.deposits:type_name -> bridge.v1.Deposit - 3, // 1: bridge.v1.GetProofResponse.proof:type_name -> bridge.v1.Proof - 0, // 2: bridge.v1.GetTokenWrappedResponse.tokenwrapped:type_name -> bridge.v1.TokenWrapped - 1, // 3: bridge.v1.GetBridgeResponse.deposit:type_name -> bridge.v1.Deposit - 2, // 4: bridge.v1.GetClaimsResponse.claims:type_name -> bridge.v1.Claim - 4, // 5: bridge.v1.BridgeService.CheckAPI:input_type -> bridge.v1.CheckAPIRequest - 5, // 6: bridge.v1.BridgeService.GetBridges:input_type -> bridge.v1.GetBridgesRequest - 6, // 7: bridge.v1.BridgeService.GetProof:input_type -> bridge.v1.GetProofRequest - 8, // 8: bridge.v1.BridgeService.GetBridge:input_type -> bridge.v1.GetBridgeRequest - 9, // 9: bridge.v1.BridgeService.GetClaims:input_type -> bridge.v1.GetClaimsRequest - 7, // 10: bridge.v1.BridgeService.GetTokenWrapped:input_type -> bridge.v1.GetTokenWrappedRequest - 10, // 11: bridge.v1.BridgeService.CheckAPI:output_type -> bridge.v1.CheckAPIResponse - 11, // 12: bridge.v1.BridgeService.GetBridges:output_type -> bridge.v1.GetBridgesResponse - 12, // 13: bridge.v1.BridgeService.GetProof:output_type -> bridge.v1.GetProofResponse - 14, // 14: bridge.v1.BridgeService.GetBridge:output_type -> bridge.v1.GetBridgeResponse - 15, // 15: bridge.v1.BridgeService.GetClaims:output_type -> bridge.v1.GetClaimsResponse - 13, // 16: bridge.v1.BridgeService.GetTokenWrapped:output_type -> bridge.v1.GetTokenWrappedResponse - 11, // [11:17] is the sub-list for method output_type - 5, // [5:11] is the sub-list for method input_type - 5, // [5:5] is the sub-list for extension type_name - 5, // [5:5] is the sub-list for extension extendee - 0, // [0:5] is the sub-list for field type_name + 4, // 0: bridge.v1.GetCoinPriceRequest.symbolInfos:type_name -> bridge.v1.SymbolInfo + 1, // 1: bridge.v1.GetBridgesResponse.deposits:type_name -> bridge.v1.Deposit + 3, // 2: bridge.v1.GetProofResponse.proof:type_name -> bridge.v1.Proof + 0, // 3: bridge.v1.GetTokenWrappedResponse.tokenwrapped:type_name -> bridge.v1.TokenWrapped + 1, // 4: bridge.v1.GetBridgeResponse.deposit:type_name -> bridge.v1.Deposit + 2, // 5: bridge.v1.GetClaimsResponse.claims:type_name -> bridge.v1.Claim + 5, // 6: bridge.v1.GetCoinPriceResponse.prices:type_name -> bridge.v1.SymbolPrice + 6, // 7: bridge.v1.GetMainCoinsResponse.coinInfos:type_name -> bridge.v1.CoinInfo + 7, // 8: bridge.v1.GetPendingTransactionsResponse.transactions:type_name -> bridge.v1.Transaction + 7, // 9: bridge.v1.GetAllTransactionsResponse.transactions:type_name -> bridge.v1.Transaction + 31, // 10: bridge.v1.CommonTransactionsResponse.data:type_name -> bridge.v1.TransactionDetail + 6, // 11: bridge.v1.CommonCoinsResponse.data:type_name -> bridge.v1.CoinInfo + 5, // 12: bridge.v1.CommonCoinPricesResponse.data:type_name -> bridge.v1.SymbolPrice + 7, // 13: bridge.v1.TransactionDetail.transactions:type_name -> bridge.v1.Transaction + 33, // 14: bridge.v1.CommonProofResponse.data:type_name -> bridge.v1.ProofDetail + 8, // 15: bridge.v1.BridgeService.CheckAPI:input_type -> bridge.v1.CheckAPIRequest + 9, // 16: bridge.v1.BridgeService.GetBridges:input_type -> bridge.v1.GetBridgesRequest + 10, // 17: bridge.v1.BridgeService.GetProof:input_type -> bridge.v1.GetProofRequest + 12, // 18: bridge.v1.BridgeService.GetBridge:input_type -> bridge.v1.GetBridgeRequest + 13, // 19: bridge.v1.BridgeService.GetClaims:input_type -> bridge.v1.GetClaimsRequest + 11, // 20: bridge.v1.BridgeService.GetTokenWrapped:input_type -> bridge.v1.GetTokenWrappedRequest + 14, // 21: bridge.v1.BridgeService.GetCoinPrice:input_type -> bridge.v1.GetCoinPriceRequest + 15, // 22: bridge.v1.BridgeService.GetMainCoins:input_type -> bridge.v1.GetMainCoinsRequest + 16, // 23: bridge.v1.BridgeService.GetPendingTransactions:input_type -> bridge.v1.GetPendingTransactionsRequest + 17, // 24: bridge.v1.BridgeService.GetAllTransactions:input_type -> bridge.v1.GetAllTransactionsRequest + 34, // 25: bridge.v1.BridgeService.GetSmtProof:input_type -> bridge.v1.GetSmtProofRequest + 18, // 26: bridge.v1.BridgeService.CheckAPI:output_type -> bridge.v1.CheckAPIResponse + 19, // 27: bridge.v1.BridgeService.GetBridges:output_type -> bridge.v1.GetBridgesResponse + 20, // 28: bridge.v1.BridgeService.GetProof:output_type -> bridge.v1.GetProofResponse + 22, // 29: bridge.v1.BridgeService.GetBridge:output_type -> bridge.v1.GetBridgeResponse + 23, // 30: bridge.v1.BridgeService.GetClaims:output_type -> bridge.v1.GetClaimsResponse + 21, // 31: bridge.v1.BridgeService.GetTokenWrapped:output_type -> bridge.v1.GetTokenWrappedResponse + 30, // 32: bridge.v1.BridgeService.GetCoinPrice:output_type -> bridge.v1.CommonCoinPricesResponse + 29, // 33: bridge.v1.BridgeService.GetMainCoins:output_type -> bridge.v1.CommonCoinsResponse + 28, // 34: bridge.v1.BridgeService.GetPendingTransactions:output_type -> bridge.v1.CommonTransactionsResponse + 28, // 35: bridge.v1.BridgeService.GetAllTransactions:output_type -> bridge.v1.CommonTransactionsResponse + 32, // 36: bridge.v1.BridgeService.GetSmtProof:output_type -> bridge.v1.CommonProofResponse + 26, // [26:37] is the sub-list for method output_type + 15, // [15:26] is the sub-list for method input_type + 15, // [15:15] is the sub-list for extension type_name + 15, // [15:15] is the sub-list for extension extendee + 0, // [0:15] is the sub-list for field type_name } func init() { file_query_proto_init() } @@ -1339,7 +2926,7 @@ func file_query_proto_init() { } } file_query_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CheckAPIRequest); i { + switch v := v.(*SymbolInfo); i { case 0: return &v.state case 1: @@ -1351,7 +2938,7 @@ func file_query_proto_init() { } } file_query_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBridgesRequest); i { + switch v := v.(*SymbolPrice); i { case 0: return &v.state case 1: @@ -1363,7 +2950,7 @@ func file_query_proto_init() { } } file_query_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetProofRequest); i { + switch v := v.(*CoinInfo); i { case 0: return &v.state case 1: @@ -1375,7 +2962,7 @@ func file_query_proto_init() { } } file_query_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTokenWrappedRequest); i { + switch v := v.(*Transaction); i { case 0: return &v.state case 1: @@ -1387,7 +2974,7 @@ func file_query_proto_init() { } } file_query_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBridgeRequest); i { + switch v := v.(*CheckAPIRequest); i { case 0: return &v.state case 1: @@ -1399,7 +2986,7 @@ func file_query_proto_init() { } } file_query_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetClaimsRequest); i { + switch v := v.(*GetBridgesRequest); i { case 0: return &v.state case 1: @@ -1411,7 +2998,7 @@ func file_query_proto_init() { } } file_query_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CheckAPIResponse); i { + switch v := v.(*GetProofRequest); i { case 0: return &v.state case 1: @@ -1423,7 +3010,7 @@ func file_query_proto_init() { } } file_query_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBridgesResponse); i { + switch v := v.(*GetTokenWrappedRequest); i { case 0: return &v.state case 1: @@ -1435,7 +3022,7 @@ func file_query_proto_init() { } } file_query_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetProofResponse); i { + switch v := v.(*GetBridgeRequest); i { case 0: return &v.state case 1: @@ -1447,7 +3034,7 @@ func file_query_proto_init() { } } file_query_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetTokenWrappedResponse); i { + switch v := v.(*GetClaimsRequest); i { case 0: return &v.state case 1: @@ -1459,7 +3046,7 @@ func file_query_proto_init() { } } file_query_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBridgeResponse); i { + switch v := v.(*GetCoinPriceRequest); i { case 0: return &v.state case 1: @@ -1471,6 +3058,102 @@ func file_query_proto_init() { } } file_query_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetMainCoinsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_query_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetPendingTransactionsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_query_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetAllTransactionsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_query_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CheckAPIResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_query_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetBridgesResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_query_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetProofResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_query_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetTokenWrappedResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_query_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetBridgeResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_query_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetClaimsResponse); i { case 0: return &v.state @@ -1482,6 +3165,138 @@ func file_query_proto_init() { return nil } } + file_query_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetCoinPriceResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_query_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetMainCoinsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_query_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetPendingTransactionsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_query_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetAllTransactionsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_query_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CommonTransactionsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_query_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CommonCoinsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_query_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CommonCoinPricesResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_query_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TransactionDetail); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_query_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CommonProofResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_query_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ProofDetail); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_query_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetSmtProofRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -1489,7 +3304,7 @@ func file_query_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_query_proto_rawDesc, NumEnums: 0, - NumMessages: 16, + NumMessages: 35, NumExtensions: 0, NumServices: 1, }, diff --git a/bridgectrl/pb/query.pb.gw.go b/bridgectrl/pb/query.pb.gw.go index 05897c69..bf2cc80f 100644 --- a/bridgectrl/pb/query.pb.gw.go +++ b/bridgectrl/pb/query.pb.gw.go @@ -49,8 +49,26 @@ func local_request_BridgeService_CheckAPI_0(ctx context.Context, marshaler runti } +func request_BridgeService_CheckAPI_1(ctx context.Context, marshaler runtime.Marshaler, client BridgeServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CheckAPIRequest + var metadata runtime.ServerMetadata + + msg, err := client.CheckAPI(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_BridgeService_CheckAPI_1(ctx context.Context, marshaler runtime.Marshaler, server BridgeServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq CheckAPIRequest + var metadata runtime.ServerMetadata + + msg, err := server.CheckAPI(ctx, &protoReq) + return msg, metadata, err + +} + var ( - filter_BridgeService_GetBridges_0 = &utilities.DoubleArray{Encoding: map[string]int{"dest_addr": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} + filter_BridgeService_GetBridges_0 = &utilities.DoubleArray{Encoding: map[string]int{"dest_addr": 0, "destAddr": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} ) func request_BridgeService_GetBridges_0(ctx context.Context, marshaler runtime.Marshaler, client BridgeServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { @@ -119,6 +137,76 @@ func local_request_BridgeService_GetBridges_0(ctx context.Context, marshaler run } +var ( + filter_BridgeService_GetBridges_1 = &utilities.DoubleArray{Encoding: map[string]int{"dest_addr": 0, "destAddr": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} +) + +func request_BridgeService_GetBridges_1(ctx context.Context, marshaler runtime.Marshaler, client BridgeServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetBridgesRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["dest_addr"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "dest_addr") + } + + protoReq.DestAddr, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "dest_addr", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BridgeService_GetBridges_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetBridges(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_BridgeService_GetBridges_1(ctx context.Context, marshaler runtime.Marshaler, server BridgeServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetBridgesRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["dest_addr"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "dest_addr") + } + + protoReq.DestAddr, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "dest_addr", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BridgeService_GetBridges_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.GetBridges(ctx, &protoReq) + return msg, metadata, err + +} + var ( filter_BridgeService_GetProof_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} ) @@ -155,6 +243,42 @@ func local_request_BridgeService_GetProof_0(ctx context.Context, marshaler runti } +var ( + filter_BridgeService_GetProof_1 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_BridgeService_GetProof_1(ctx context.Context, marshaler runtime.Marshaler, client BridgeServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetProofRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BridgeService_GetProof_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetProof(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_BridgeService_GetProof_1(ctx context.Context, marshaler runtime.Marshaler, server BridgeServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetProofRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BridgeService_GetProof_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.GetProof(ctx, &protoReq) + return msg, metadata, err + +} + var ( filter_BridgeService_GetBridge_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} ) @@ -192,7 +316,43 @@ func local_request_BridgeService_GetBridge_0(ctx context.Context, marshaler runt } var ( - filter_BridgeService_GetClaims_0 = &utilities.DoubleArray{Encoding: map[string]int{"dest_addr": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} + filter_BridgeService_GetBridge_1 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_BridgeService_GetBridge_1(ctx context.Context, marshaler runtime.Marshaler, client BridgeServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetBridgeRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BridgeService_GetBridge_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetBridge(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_BridgeService_GetBridge_1(ctx context.Context, marshaler runtime.Marshaler, server BridgeServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetBridgeRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BridgeService_GetBridge_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.GetBridge(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_BridgeService_GetClaims_0 = &utilities.DoubleArray{Encoding: map[string]int{"dest_addr": 0, "destAddr": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} ) func request_BridgeService_GetClaims_0(ctx context.Context, marshaler runtime.Marshaler, client BridgeServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { @@ -259,370 +419,1752 @@ func local_request_BridgeService_GetClaims_0(ctx context.Context, marshaler runt msg, err := server.GetClaims(ctx, &protoReq) return msg, metadata, err -} +} + +var ( + filter_BridgeService_GetClaims_1 = &utilities.DoubleArray{Encoding: map[string]int{"dest_addr": 0, "destAddr": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} +) + +func request_BridgeService_GetClaims_1(ctx context.Context, marshaler runtime.Marshaler, client BridgeServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetClaimsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["dest_addr"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "dest_addr") + } + + protoReq.DestAddr, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "dest_addr", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BridgeService_GetClaims_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetClaims(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_BridgeService_GetClaims_1(ctx context.Context, marshaler runtime.Marshaler, server BridgeServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetClaimsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["dest_addr"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "dest_addr") + } + + protoReq.DestAddr, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "dest_addr", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BridgeService_GetClaims_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.GetClaims(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_BridgeService_GetTokenWrapped_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_BridgeService_GetTokenWrapped_0(ctx context.Context, marshaler runtime.Marshaler, client BridgeServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetTokenWrappedRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BridgeService_GetTokenWrapped_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetTokenWrapped(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_BridgeService_GetTokenWrapped_0(ctx context.Context, marshaler runtime.Marshaler, server BridgeServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetTokenWrappedRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BridgeService_GetTokenWrapped_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.GetTokenWrapped(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_BridgeService_GetTokenWrapped_1 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_BridgeService_GetTokenWrapped_1(ctx context.Context, marshaler runtime.Marshaler, client BridgeServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetTokenWrappedRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BridgeService_GetTokenWrapped_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetTokenWrapped(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_BridgeService_GetTokenWrapped_1(ctx context.Context, marshaler runtime.Marshaler, server BridgeServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetTokenWrappedRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BridgeService_GetTokenWrapped_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.GetTokenWrapped(ctx, &protoReq) + return msg, metadata, err + +} + +func request_BridgeService_GetCoinPrice_0(ctx context.Context, marshaler runtime.Marshaler, client BridgeServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetCoinPriceRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetCoinPrice(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_BridgeService_GetCoinPrice_0(ctx context.Context, marshaler runtime.Marshaler, server BridgeServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetCoinPriceRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.GetCoinPrice(ctx, &protoReq) + return msg, metadata, err + +} + +func request_BridgeService_GetCoinPrice_1(ctx context.Context, marshaler runtime.Marshaler, client BridgeServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetCoinPriceRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetCoinPrice(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_BridgeService_GetCoinPrice_1(ctx context.Context, marshaler runtime.Marshaler, server BridgeServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetCoinPriceRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.GetCoinPrice(ctx, &protoReq) + return msg, metadata, err + +} + +func request_BridgeService_GetMainCoins_0(ctx context.Context, marshaler runtime.Marshaler, client BridgeServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetMainCoinsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["networkId"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "networkId") + } + + protoReq.NetworkId, err = runtime.Uint32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "networkId", err) + } + + msg, err := client.GetMainCoins(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_BridgeService_GetMainCoins_0(ctx context.Context, marshaler runtime.Marshaler, server BridgeServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetMainCoinsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["networkId"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "networkId") + } + + protoReq.NetworkId, err = runtime.Uint32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "networkId", err) + } + + msg, err := server.GetMainCoins(ctx, &protoReq) + return msg, metadata, err + +} + +func request_BridgeService_GetMainCoins_1(ctx context.Context, marshaler runtime.Marshaler, client BridgeServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetMainCoinsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["networkId"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "networkId") + } + + protoReq.NetworkId, err = runtime.Uint32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "networkId", err) + } + + msg, err := client.GetMainCoins(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_BridgeService_GetMainCoins_1(ctx context.Context, marshaler runtime.Marshaler, server BridgeServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetMainCoinsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["networkId"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "networkId") + } + + protoReq.NetworkId, err = runtime.Uint32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "networkId", err) + } + + msg, err := server.GetMainCoins(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_BridgeService_GetPendingTransactions_0 = &utilities.DoubleArray{Encoding: map[string]int{"destAddr": 0}, Base: []int{1, 2, 0, 0}, Check: []int{0, 1, 2, 2}} +) + +func request_BridgeService_GetPendingTransactions_0(ctx context.Context, marshaler runtime.Marshaler, client BridgeServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetPendingTransactionsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["destAddr"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "destAddr") + } + + protoReq.DestAddr, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "destAddr", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BridgeService_GetPendingTransactions_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetPendingTransactions(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_BridgeService_GetPendingTransactions_0(ctx context.Context, marshaler runtime.Marshaler, server BridgeServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetPendingTransactionsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["destAddr"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "destAddr") + } + + protoReq.DestAddr, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "destAddr", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BridgeService_GetPendingTransactions_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.GetPendingTransactions(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_BridgeService_GetPendingTransactions_1 = &utilities.DoubleArray{Encoding: map[string]int{"destAddr": 0}, Base: []int{1, 2, 0, 0}, Check: []int{0, 1, 2, 2}} +) + +func request_BridgeService_GetPendingTransactions_1(ctx context.Context, marshaler runtime.Marshaler, client BridgeServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetPendingTransactionsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["destAddr"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "destAddr") + } + + protoReq.DestAddr, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "destAddr", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BridgeService_GetPendingTransactions_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetPendingTransactions(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_BridgeService_GetPendingTransactions_1(ctx context.Context, marshaler runtime.Marshaler, server BridgeServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetPendingTransactionsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["destAddr"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "destAddr") + } + + protoReq.DestAddr, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "destAddr", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BridgeService_GetPendingTransactions_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.GetPendingTransactions(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_BridgeService_GetAllTransactions_0 = &utilities.DoubleArray{Encoding: map[string]int{"destAddr": 0}, Base: []int{1, 2, 0, 0}, Check: []int{0, 1, 2, 2}} +) + +func request_BridgeService_GetAllTransactions_0(ctx context.Context, marshaler runtime.Marshaler, client BridgeServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetAllTransactionsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["destAddr"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "destAddr") + } + + protoReq.DestAddr, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "destAddr", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BridgeService_GetAllTransactions_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetAllTransactions(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_BridgeService_GetAllTransactions_0(ctx context.Context, marshaler runtime.Marshaler, server BridgeServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetAllTransactionsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["destAddr"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "destAddr") + } + + protoReq.DestAddr, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "destAddr", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BridgeService_GetAllTransactions_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.GetAllTransactions(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_BridgeService_GetAllTransactions_1 = &utilities.DoubleArray{Encoding: map[string]int{"destAddr": 0}, Base: []int{1, 2, 0, 0}, Check: []int{0, 1, 2, 2}} +) + +func request_BridgeService_GetAllTransactions_1(ctx context.Context, marshaler runtime.Marshaler, client BridgeServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetAllTransactionsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["destAddr"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "destAddr") + } + + protoReq.DestAddr, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "destAddr", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BridgeService_GetAllTransactions_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetAllTransactions(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_BridgeService_GetAllTransactions_1(ctx context.Context, marshaler runtime.Marshaler, server BridgeServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetAllTransactionsRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["destAddr"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "destAddr") + } + + protoReq.DestAddr, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "destAddr", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BridgeService_GetAllTransactions_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.GetAllTransactions(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_BridgeService_GetSmtProof_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_BridgeService_GetSmtProof_0(ctx context.Context, marshaler runtime.Marshaler, client BridgeServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetSmtProofRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BridgeService_GetSmtProof_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetSmtProof(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_BridgeService_GetSmtProof_0(ctx context.Context, marshaler runtime.Marshaler, server BridgeServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetSmtProofRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BridgeService_GetSmtProof_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.GetSmtProof(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_BridgeService_GetSmtProof_1 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_BridgeService_GetSmtProof_1(ctx context.Context, marshaler runtime.Marshaler, client BridgeServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetSmtProofRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BridgeService_GetSmtProof_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetSmtProof(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_BridgeService_GetSmtProof_1(ctx context.Context, marshaler runtime.Marshaler, server BridgeServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetSmtProofRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BridgeService_GetSmtProof_1); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.GetSmtProof(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterBridgeServiceHandlerServer registers the http handlers for service BridgeService to "mux". +// UnaryRPC :call BridgeServiceServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterBridgeServiceHandlerFromEndpoint instead. +func RegisterBridgeServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server BridgeServiceServer) error { + + mux.Handle("GET", pattern_BridgeService_CheckAPI_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/bridge.v1.BridgeService/CheckAPI", runtime.WithHTTPPathPattern("/priapi/v1/ob/bridge/api")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_BridgeService_CheckAPI_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_BridgeService_CheckAPI_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_BridgeService_CheckAPI_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/bridge.v1.BridgeService/CheckAPI", runtime.WithHTTPPathPattern("/api")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_BridgeService_CheckAPI_1(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_BridgeService_CheckAPI_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_BridgeService_GetBridges_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/bridge.v1.BridgeService/GetBridges", runtime.WithHTTPPathPattern("/priapi/v1/ob/bridge/bridges/{dest_addr}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_BridgeService_GetBridges_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_BridgeService_GetBridges_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_BridgeService_GetBridges_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/bridge.v1.BridgeService/GetBridges", runtime.WithHTTPPathPattern("/bridges/{dest_addr}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_BridgeService_GetBridges_1(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_BridgeService_GetBridges_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_BridgeService_GetProof_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/bridge.v1.BridgeService/GetProof", runtime.WithHTTPPathPattern("/priapi/v1/ob/bridge/merkle-proof")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_BridgeService_GetProof_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_BridgeService_GetProof_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_BridgeService_GetProof_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/bridge.v1.BridgeService/GetProof", runtime.WithHTTPPathPattern("/merkle-proof")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_BridgeService_GetProof_1(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_BridgeService_GetProof_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_BridgeService_GetBridge_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/bridge.v1.BridgeService/GetBridge", runtime.WithHTTPPathPattern("/priapi/v1/ob/bridge/bridge")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_BridgeService_GetBridge_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_BridgeService_GetBridge_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_BridgeService_GetBridge_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/bridge.v1.BridgeService/GetBridge", runtime.WithHTTPPathPattern("/bridge")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_BridgeService_GetBridge_1(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_BridgeService_GetBridge_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_BridgeService_GetClaims_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/bridge.v1.BridgeService/GetClaims", runtime.WithHTTPPathPattern("/priapi/v1/ob/bridge/claims/{dest_addr}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_BridgeService_GetClaims_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_BridgeService_GetClaims_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_BridgeService_GetClaims_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/bridge.v1.BridgeService/GetClaims", runtime.WithHTTPPathPattern("/claims/{dest_addr}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_BridgeService_GetClaims_1(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_BridgeService_GetClaims_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_BridgeService_GetTokenWrapped_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/bridge.v1.BridgeService/GetTokenWrapped", runtime.WithHTTPPathPattern("/priapi/v1/ob/bridge/tokenwrapped")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_BridgeService_GetTokenWrapped_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_BridgeService_GetTokenWrapped_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_BridgeService_GetTokenWrapped_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/bridge.v1.BridgeService/GetTokenWrapped", runtime.WithHTTPPathPattern("/tokenwrapped")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_BridgeService_GetTokenWrapped_1(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_BridgeService_GetTokenWrapped_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_BridgeService_GetCoinPrice_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/bridge.v1.BridgeService/GetCoinPrice", runtime.WithHTTPPathPattern("/priapi/v1/ob/bridge/coin-price")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_BridgeService_GetCoinPrice_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_BridgeService_GetCoinPrice_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("POST", pattern_BridgeService_GetCoinPrice_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/bridge.v1.BridgeService/GetCoinPrice", runtime.WithHTTPPathPattern("/coin-price")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_BridgeService_GetCoinPrice_1(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_BridgeService_GetCoinPrice_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_BridgeService_GetMainCoins_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/bridge.v1.BridgeService/GetMainCoins", runtime.WithHTTPPathPattern("/priapi/v1/ob/bridge/main-coins/{networkId}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_BridgeService_GetMainCoins_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_BridgeService_GetMainCoins_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_BridgeService_GetMainCoins_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/bridge.v1.BridgeService/GetMainCoins", runtime.WithHTTPPathPattern("/main-coins/{networkId}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_BridgeService_GetMainCoins_1(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_BridgeService_GetMainCoins_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_BridgeService_GetPendingTransactions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/bridge.v1.BridgeService/GetPendingTransactions", runtime.WithHTTPPathPattern("/priapi/v1/ob/bridge/pending/{destAddr}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_BridgeService_GetPendingTransactions_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_BridgeService_GetPendingTransactions_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_BridgeService_GetPendingTransactions_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/bridge.v1.BridgeService/GetPendingTransactions", runtime.WithHTTPPathPattern("/pending/{destAddr}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_BridgeService_GetPendingTransactions_1(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_BridgeService_GetPendingTransactions_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_BridgeService_GetAllTransactions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/bridge.v1.BridgeService/GetAllTransactions", runtime.WithHTTPPathPattern("/priapi/v1/ob/bridge/all/{destAddr}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_BridgeService_GetAllTransactions_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_BridgeService_GetAllTransactions_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_BridgeService_GetAllTransactions_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/bridge.v1.BridgeService/GetAllTransactions", runtime.WithHTTPPathPattern("/all/{destAddr}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_BridgeService_GetAllTransactions_1(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_BridgeService_GetAllTransactions_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_BridgeService_GetSmtProof_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/bridge.v1.BridgeService/GetSmtProof", runtime.WithHTTPPathPattern("/priapi/v1/ob/bridge/smt-proof")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_BridgeService_GetSmtProof_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_BridgeService_GetSmtProof_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_BridgeService_GetSmtProof_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/bridge.v1.BridgeService/GetSmtProof", runtime.WithHTTPPathPattern("/smt-proof")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_BridgeService_GetSmtProof_1(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_BridgeService_GetSmtProof_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterBridgeServiceHandlerFromEndpoint is same as RegisterBridgeServiceHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterBridgeServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.DialContext(ctx, endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterBridgeServiceHandler(ctx, mux, conn) +} + +// RegisterBridgeServiceHandler registers the http handlers for service BridgeService to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterBridgeServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterBridgeServiceHandlerClient(ctx, mux, NewBridgeServiceClient(conn)) +} + +// RegisterBridgeServiceHandlerClient registers the http handlers for service BridgeService +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "BridgeServiceClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "BridgeServiceClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "BridgeServiceClient" to call the correct interceptors. +func RegisterBridgeServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client BridgeServiceClient) error { + + mux.Handle("GET", pattern_BridgeService_CheckAPI_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/bridge.v1.BridgeService/CheckAPI", runtime.WithHTTPPathPattern("/priapi/v1/ob/bridge/api")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_BridgeService_CheckAPI_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_BridgeService_CheckAPI_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_BridgeService_CheckAPI_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/bridge.v1.BridgeService/CheckAPI", runtime.WithHTTPPathPattern("/api")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_BridgeService_CheckAPI_1(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_BridgeService_CheckAPI_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_BridgeService_GetBridges_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/bridge.v1.BridgeService/GetBridges", runtime.WithHTTPPathPattern("/priapi/v1/ob/bridge/bridges/{dest_addr}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_BridgeService_GetBridges_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_BridgeService_GetBridges_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_BridgeService_GetBridges_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/bridge.v1.BridgeService/GetBridges", runtime.WithHTTPPathPattern("/bridges/{dest_addr}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_BridgeService_GetBridges_1(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_BridgeService_GetBridges_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_BridgeService_GetProof_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/bridge.v1.BridgeService/GetProof", runtime.WithHTTPPathPattern("/priapi/v1/ob/bridge/merkle-proof")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_BridgeService_GetProof_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_BridgeService_GetProof_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) -var ( - filter_BridgeService_GetTokenWrapped_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} -) + }) -func request_BridgeService_GetTokenWrapped_0(ctx context.Context, marshaler runtime.Marshaler, client BridgeServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetTokenWrappedRequest - var metadata runtime.ServerMetadata + mux.Handle("GET", pattern_BridgeService_GetProof_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/bridge.v1.BridgeService/GetProof", runtime.WithHTTPPathPattern("/merkle-proof")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_BridgeService_GetProof_1(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BridgeService_GetTokenWrapped_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } + forward_BridgeService_GetProof_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - msg, err := client.GetTokenWrapped(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err + }) -} + mux.Handle("GET", pattern_BridgeService_GetBridge_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/bridge.v1.BridgeService/GetBridge", runtime.WithHTTPPathPattern("/priapi/v1/ob/bridge/bridge")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_BridgeService_GetBridge_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } -func local_request_BridgeService_GetTokenWrapped_0(ctx context.Context, marshaler runtime.Marshaler, server BridgeServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq GetTokenWrappedRequest - var metadata runtime.ServerMetadata + forward_BridgeService_GetBridge_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - if err := req.ParseForm(); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } - if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_BridgeService_GetTokenWrapped_0); err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) - } + }) - msg, err := server.GetTokenWrapped(ctx, &protoReq) - return msg, metadata, err + mux.Handle("GET", pattern_BridgeService_GetBridge_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/bridge.v1.BridgeService/GetBridge", runtime.WithHTTPPathPattern("/bridge")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_BridgeService_GetBridge_1(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } -} + forward_BridgeService_GetBridge_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) -// RegisterBridgeServiceHandlerServer registers the http handlers for service BridgeService to "mux". -// UnaryRPC :call BridgeServiceServer directly. -// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. -// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterBridgeServiceHandlerFromEndpoint instead. -func RegisterBridgeServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server BridgeServiceServer) error { + }) - mux.Handle("GET", pattern_BridgeService_CheckAPI_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_BridgeService_GetClaims_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/bridge.v1.BridgeService/CheckAPI", runtime.WithHTTPPathPattern("/api")) + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/bridge.v1.BridgeService/GetClaims", runtime.WithHTTPPathPattern("/priapi/v1/ob/bridge/claims/{dest_addr}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_BridgeService_CheckAPI_0(annotatedContext, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + resp, md, err := request_BridgeService_GetClaims_0(annotatedContext, inboundMarshaler, client, req, pathParams) annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_BridgeService_CheckAPI_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_BridgeService_GetClaims_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_BridgeService_GetBridges_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_BridgeService_GetClaims_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/bridge.v1.BridgeService/GetBridges", runtime.WithHTTPPathPattern("/bridges/{dest_addr}")) + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/bridge.v1.BridgeService/GetClaims", runtime.WithHTTPPathPattern("/claims/{dest_addr}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_BridgeService_GetBridges_0(annotatedContext, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + resp, md, err := request_BridgeService_GetClaims_1(annotatedContext, inboundMarshaler, client, req, pathParams) annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_BridgeService_GetBridges_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_BridgeService_GetClaims_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_BridgeService_GetProof_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_BridgeService_GetTokenWrapped_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/bridge.v1.BridgeService/GetProof", runtime.WithHTTPPathPattern("/merkle-proof")) + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/bridge.v1.BridgeService/GetTokenWrapped", runtime.WithHTTPPathPattern("/priapi/v1/ob/bridge/tokenwrapped")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_BridgeService_GetProof_0(annotatedContext, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + resp, md, err := request_BridgeService_GetTokenWrapped_0(annotatedContext, inboundMarshaler, client, req, pathParams) annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_BridgeService_GetProof_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_BridgeService_GetTokenWrapped_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_BridgeService_GetBridge_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_BridgeService_GetTokenWrapped_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/bridge.v1.BridgeService/GetBridge", runtime.WithHTTPPathPattern("/bridge")) + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/bridge.v1.BridgeService/GetTokenWrapped", runtime.WithHTTPPathPattern("/tokenwrapped")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_BridgeService_GetBridge_0(annotatedContext, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + resp, md, err := request_BridgeService_GetTokenWrapped_1(annotatedContext, inboundMarshaler, client, req, pathParams) annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_BridgeService_GetBridge_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_BridgeService_GetTokenWrapped_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_BridgeService_GetClaims_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("POST", pattern_BridgeService_GetCoinPrice_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/bridge.v1.BridgeService/GetClaims", runtime.WithHTTPPathPattern("/claims/{dest_addr}")) + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/bridge.v1.BridgeService/GetCoinPrice", runtime.WithHTTPPathPattern("/priapi/v1/ob/bridge/coin-price")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_BridgeService_GetClaims_0(annotatedContext, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + resp, md, err := request_BridgeService_GetCoinPrice_0(annotatedContext, inboundMarshaler, client, req, pathParams) annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_BridgeService_GetClaims_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_BridgeService_GetCoinPrice_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_BridgeService_GetTokenWrapped_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("POST", pattern_BridgeService_GetCoinPrice_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() - var stream runtime.ServerTransportStream - ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/bridge.v1.BridgeService/GetTokenWrapped", runtime.WithHTTPPathPattern("/tokenwrapped")) + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/bridge.v1.BridgeService/GetCoinPrice", runtime.WithHTTPPathPattern("/coin-price")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := local_request_BridgeService_GetTokenWrapped_0(annotatedContext, inboundMarshaler, server, req, pathParams) - md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + resp, md, err := request_BridgeService_GetCoinPrice_1(annotatedContext, inboundMarshaler, client, req, pathParams) annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_BridgeService_GetTokenWrapped_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_BridgeService_GetCoinPrice_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - return nil -} - -// RegisterBridgeServiceHandlerFromEndpoint is same as RegisterBridgeServiceHandler but -// automatically dials to "endpoint" and closes the connection when "ctx" gets done. -func RegisterBridgeServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { - conn, err := grpc.Dial(endpoint, opts...) - if err != nil { - return err - } - defer func() { + mux.Handle("GET", pattern_BridgeService_GetMainCoins_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/bridge.v1.BridgeService/GetMainCoins", runtime.WithHTTPPathPattern("/priapi/v1/ob/bridge/main-coins/{networkId}")) if err != nil { - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_BridgeService_GetMainCoins_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - go func() { - <-ctx.Done() - if cerr := conn.Close(); cerr != nil { - grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) - } - }() - }() - return RegisterBridgeServiceHandler(ctx, mux, conn) -} + forward_BridgeService_GetMainCoins_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) -// RegisterBridgeServiceHandler registers the http handlers for service BridgeService to "mux". -// The handlers forward requests to the grpc endpoint over "conn". -func RegisterBridgeServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { - return RegisterBridgeServiceHandlerClient(ctx, mux, NewBridgeServiceClient(conn)) -} + }) -// RegisterBridgeServiceHandlerClient registers the http handlers for service BridgeService -// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "BridgeServiceClient". -// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "BridgeServiceClient" -// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in -// "BridgeServiceClient" to call the correct interceptors. -func RegisterBridgeServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client BridgeServiceClient) error { + mux.Handle("GET", pattern_BridgeService_GetMainCoins_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/bridge.v1.BridgeService/GetMainCoins", runtime.WithHTTPPathPattern("/main-coins/{networkId}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_BridgeService_GetMainCoins_1(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } - mux.Handle("GET", pattern_BridgeService_CheckAPI_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + forward_BridgeService_GetMainCoins_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_BridgeService_GetPendingTransactions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/bridge.v1.BridgeService/CheckAPI", runtime.WithHTTPPathPattern("/api")) + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/bridge.v1.BridgeService/GetPendingTransactions", runtime.WithHTTPPathPattern("/priapi/v1/ob/bridge/pending/{destAddr}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_BridgeService_CheckAPI_0(annotatedContext, inboundMarshaler, client, req, pathParams) + resp, md, err := request_BridgeService_GetPendingTransactions_0(annotatedContext, inboundMarshaler, client, req, pathParams) annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_BridgeService_CheckAPI_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_BridgeService_GetPendingTransactions_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_BridgeService_GetBridges_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_BridgeService_GetPendingTransactions_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/bridge.v1.BridgeService/GetBridges", runtime.WithHTTPPathPattern("/bridges/{dest_addr}")) + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/bridge.v1.BridgeService/GetPendingTransactions", runtime.WithHTTPPathPattern("/pending/{destAddr}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_BridgeService_GetBridges_0(annotatedContext, inboundMarshaler, client, req, pathParams) + resp, md, err := request_BridgeService_GetPendingTransactions_1(annotatedContext, inboundMarshaler, client, req, pathParams) annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_BridgeService_GetBridges_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_BridgeService_GetPendingTransactions_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_BridgeService_GetProof_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_BridgeService_GetAllTransactions_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/bridge.v1.BridgeService/GetProof", runtime.WithHTTPPathPattern("/merkle-proof")) + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/bridge.v1.BridgeService/GetAllTransactions", runtime.WithHTTPPathPattern("/priapi/v1/ob/bridge/all/{destAddr}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_BridgeService_GetProof_0(annotatedContext, inboundMarshaler, client, req, pathParams) + resp, md, err := request_BridgeService_GetAllTransactions_0(annotatedContext, inboundMarshaler, client, req, pathParams) annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_BridgeService_GetProof_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_BridgeService_GetAllTransactions_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_BridgeService_GetBridge_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_BridgeService_GetAllTransactions_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/bridge.v1.BridgeService/GetBridge", runtime.WithHTTPPathPattern("/bridge")) + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/bridge.v1.BridgeService/GetAllTransactions", runtime.WithHTTPPathPattern("/all/{destAddr}")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_BridgeService_GetBridge_0(annotatedContext, inboundMarshaler, client, req, pathParams) + resp, md, err := request_BridgeService_GetAllTransactions_1(annotatedContext, inboundMarshaler, client, req, pathParams) annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_BridgeService_GetBridge_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_BridgeService_GetAllTransactions_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_BridgeService_GetClaims_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_BridgeService_GetSmtProof_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/bridge.v1.BridgeService/GetClaims", runtime.WithHTTPPathPattern("/claims/{dest_addr}")) + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/bridge.v1.BridgeService/GetSmtProof", runtime.WithHTTPPathPattern("/priapi/v1/ob/bridge/smt-proof")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_BridgeService_GetClaims_0(annotatedContext, inboundMarshaler, client, req, pathParams) + resp, md, err := request_BridgeService_GetSmtProof_0(annotatedContext, inboundMarshaler, client, req, pathParams) annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_BridgeService_GetClaims_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_BridgeService_GetSmtProof_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) - mux.Handle("GET", pattern_BridgeService_GetTokenWrapped_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_BridgeService_GetSmtProof_1, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) var err error var annotatedContext context.Context - annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/bridge.v1.BridgeService/GetTokenWrapped", runtime.WithHTTPPathPattern("/tokenwrapped")) + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/bridge.v1.BridgeService/GetSmtProof", runtime.WithHTTPPathPattern("/smt-proof")) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_BridgeService_GetTokenWrapped_0(annotatedContext, inboundMarshaler, client, req, pathParams) + resp, md, err := request_BridgeService_GetSmtProof_1(annotatedContext, inboundMarshaler, client, req, pathParams) annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) if err != nil { runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) return } - forward_BridgeService_GetTokenWrapped_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_BridgeService_GetSmtProof_1(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) @@ -630,29 +2172,93 @@ func RegisterBridgeServiceHandlerClient(ctx context.Context, mux *runtime.ServeM } var ( - pattern_BridgeService_CheckAPI_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"api"}, "")) + pattern_BridgeService_CheckAPI_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"priapi", "v1", "ob", "bridge", "api"}, "")) - pattern_BridgeService_GetBridges_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"bridges", "dest_addr"}, "")) + pattern_BridgeService_CheckAPI_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"api"}, "")) - pattern_BridgeService_GetProof_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"merkle-proof"}, "")) + pattern_BridgeService_GetBridges_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"priapi", "v1", "ob", "bridge", "bridges", "dest_addr"}, "")) - pattern_BridgeService_GetBridge_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"bridge"}, "")) + pattern_BridgeService_GetBridges_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"bridges", "dest_addr"}, "")) - pattern_BridgeService_GetClaims_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"claims", "dest_addr"}, "")) + pattern_BridgeService_GetProof_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"priapi", "v1", "ob", "bridge", "merkle-proof"}, "")) - pattern_BridgeService_GetTokenWrapped_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"tokenwrapped"}, "")) + pattern_BridgeService_GetProof_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"merkle-proof"}, "")) + + pattern_BridgeService_GetBridge_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 3}, []string{"priapi", "v1", "ob", "bridge"}, "")) + + pattern_BridgeService_GetBridge_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"bridge"}, "")) + + pattern_BridgeService_GetClaims_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"priapi", "v1", "ob", "bridge", "claims", "dest_addr"}, "")) + + pattern_BridgeService_GetClaims_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"claims", "dest_addr"}, "")) + + pattern_BridgeService_GetTokenWrapped_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"priapi", "v1", "ob", "bridge", "tokenwrapped"}, "")) + + pattern_BridgeService_GetTokenWrapped_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"tokenwrapped"}, "")) + + pattern_BridgeService_GetCoinPrice_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"priapi", "v1", "ob", "bridge", "coin-price"}, "")) + + pattern_BridgeService_GetCoinPrice_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"coin-price"}, "")) + + pattern_BridgeService_GetMainCoins_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"priapi", "v1", "ob", "bridge", "main-coins", "networkId"}, "")) + + pattern_BridgeService_GetMainCoins_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"main-coins", "networkId"}, "")) + + pattern_BridgeService_GetPendingTransactions_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"priapi", "v1", "ob", "bridge", "pending", "destAddr"}, "")) + + pattern_BridgeService_GetPendingTransactions_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"pending", "destAddr"}, "")) + + pattern_BridgeService_GetAllTransactions_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"priapi", "v1", "ob", "bridge", "all", "destAddr"}, "")) + + pattern_BridgeService_GetAllTransactions_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 1, 0, 4, 1, 5, 1}, []string{"all", "destAddr"}, "")) + + pattern_BridgeService_GetSmtProof_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"priapi", "v1", "ob", "bridge", "smt-proof"}, "")) + + pattern_BridgeService_GetSmtProof_1 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0}, []string{"smt-proof"}, "")) ) var ( forward_BridgeService_CheckAPI_0 = runtime.ForwardResponseMessage + forward_BridgeService_CheckAPI_1 = runtime.ForwardResponseMessage + forward_BridgeService_GetBridges_0 = runtime.ForwardResponseMessage + forward_BridgeService_GetBridges_1 = runtime.ForwardResponseMessage + forward_BridgeService_GetProof_0 = runtime.ForwardResponseMessage + forward_BridgeService_GetProof_1 = runtime.ForwardResponseMessage + forward_BridgeService_GetBridge_0 = runtime.ForwardResponseMessage + forward_BridgeService_GetBridge_1 = runtime.ForwardResponseMessage + forward_BridgeService_GetClaims_0 = runtime.ForwardResponseMessage + forward_BridgeService_GetClaims_1 = runtime.ForwardResponseMessage + forward_BridgeService_GetTokenWrapped_0 = runtime.ForwardResponseMessage + + forward_BridgeService_GetTokenWrapped_1 = runtime.ForwardResponseMessage + + forward_BridgeService_GetCoinPrice_0 = runtime.ForwardResponseMessage + + forward_BridgeService_GetCoinPrice_1 = runtime.ForwardResponseMessage + + forward_BridgeService_GetMainCoins_0 = runtime.ForwardResponseMessage + + forward_BridgeService_GetMainCoins_1 = runtime.ForwardResponseMessage + + forward_BridgeService_GetPendingTransactions_0 = runtime.ForwardResponseMessage + + forward_BridgeService_GetPendingTransactions_1 = runtime.ForwardResponseMessage + + forward_BridgeService_GetAllTransactions_0 = runtime.ForwardResponseMessage + + forward_BridgeService_GetAllTransactions_1 = runtime.ForwardResponseMessage + + forward_BridgeService_GetSmtProof_0 = runtime.ForwardResponseMessage + + forward_BridgeService_GetSmtProof_1 = runtime.ForwardResponseMessage ) diff --git a/bridgectrl/pb/query_grpc.pb.go b/bridgectrl/pb/query_grpc.pb.go index 5088caa2..1bf8f2cd 100644 --- a/bridgectrl/pb/query_grpc.pb.go +++ b/bridgectrl/pb/query_grpc.pb.go @@ -1,7 +1,10 @@ +//* +// Bridge service. + // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.2.0 -// - protoc v3.6.1 +// - protoc-gen-go-grpc v1.3.0 +// - protoc v3.13.0 // source: query.proto package pb @@ -18,23 +21,46 @@ import ( // Requires gRPC-Go v1.32.0 or later. const _ = grpc.SupportPackageIsVersion7 +const ( + BridgeService_CheckAPI_FullMethodName = "/bridge.v1.BridgeService/CheckAPI" + BridgeService_GetBridges_FullMethodName = "/bridge.v1.BridgeService/GetBridges" + BridgeService_GetProof_FullMethodName = "/bridge.v1.BridgeService/GetProof" + BridgeService_GetBridge_FullMethodName = "/bridge.v1.BridgeService/GetBridge" + BridgeService_GetClaims_FullMethodName = "/bridge.v1.BridgeService/GetClaims" + BridgeService_GetTokenWrapped_FullMethodName = "/bridge.v1.BridgeService/GetTokenWrapped" + BridgeService_GetCoinPrice_FullMethodName = "/bridge.v1.BridgeService/GetCoinPrice" + BridgeService_GetMainCoins_FullMethodName = "/bridge.v1.BridgeService/GetMainCoins" + BridgeService_GetPendingTransactions_FullMethodName = "/bridge.v1.BridgeService/GetPendingTransactions" + BridgeService_GetAllTransactions_FullMethodName = "/bridge.v1.BridgeService/GetAllTransactions" + BridgeService_GetSmtProof_FullMethodName = "/bridge.v1.BridgeService/GetSmtProof" +) + // BridgeServiceClient is the client API for BridgeService service. // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. type BridgeServiceClient interface { // Getters - /// Get api version + // / Get api version CheckAPI(ctx context.Context, in *CheckAPIRequest, opts ...grpc.CallOption) (*CheckAPIResponse, error) - /// Get bridges for the destination address both in L1 and L2 + // / Get bridges for the destination address both in L1 and L2 GetBridges(ctx context.Context, in *GetBridgesRequest, opts ...grpc.CallOption) (*GetBridgesResponse, error) - /// Get the merkle proof for the specific deposit + // / Get the merkle proof for the specific deposit GetProof(ctx context.Context, in *GetProofRequest, opts ...grpc.CallOption) (*GetProofResponse, error) - /// Get the specific deposit + // / Get the specific deposit GetBridge(ctx context.Context, in *GetBridgeRequest, opts ...grpc.CallOption) (*GetBridgeResponse, error) - /// Get claims for the specific smart contract address both in L1 and L2 + // / Get claims for the specific smart contract address both in L1 and L2 GetClaims(ctx context.Context, in *GetClaimsRequest, opts ...grpc.CallOption) (*GetClaimsResponse, error) - /// Get token wrapped for the specific smart contract address both in L1 and L2 + // / Get token wrapped for the specific smart contract address both in L1 and L2 GetTokenWrapped(ctx context.Context, in *GetTokenWrappedRequest, opts ...grpc.CallOption) (*GetTokenWrappedResponse, error) + // / Get the latest price of the specified coins + GetCoinPrice(ctx context.Context, in *GetCoinPriceRequest, opts ...grpc.CallOption) (*CommonCoinPricesResponse, error) + // / Get the list of all the main coins of a specified network + GetMainCoins(ctx context.Context, in *GetMainCoinsRequest, opts ...grpc.CallOption) (*CommonCoinsResponse, error) + // / Get the pending (not claimed) transactions of an account + GetPendingTransactions(ctx context.Context, in *GetPendingTransactionsRequest, opts ...grpc.CallOption) (*CommonTransactionsResponse, error) + // / Get all the transactions of an account. Similar to GetBridges but the field names are changed + GetAllTransactions(ctx context.Context, in *GetAllTransactionsRequest, opts ...grpc.CallOption) (*CommonTransactionsResponse, error) + GetSmtProof(ctx context.Context, in *GetSmtProofRequest, opts ...grpc.CallOption) (*CommonProofResponse, error) } type bridgeServiceClient struct { @@ -47,7 +73,7 @@ func NewBridgeServiceClient(cc grpc.ClientConnInterface) BridgeServiceClient { func (c *bridgeServiceClient) CheckAPI(ctx context.Context, in *CheckAPIRequest, opts ...grpc.CallOption) (*CheckAPIResponse, error) { out := new(CheckAPIResponse) - err := c.cc.Invoke(ctx, "/bridge.v1.BridgeService/CheckAPI", in, out, opts...) + err := c.cc.Invoke(ctx, BridgeService_CheckAPI_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -56,7 +82,7 @@ func (c *bridgeServiceClient) CheckAPI(ctx context.Context, in *CheckAPIRequest, func (c *bridgeServiceClient) GetBridges(ctx context.Context, in *GetBridgesRequest, opts ...grpc.CallOption) (*GetBridgesResponse, error) { out := new(GetBridgesResponse) - err := c.cc.Invoke(ctx, "/bridge.v1.BridgeService/GetBridges", in, out, opts...) + err := c.cc.Invoke(ctx, BridgeService_GetBridges_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -65,7 +91,7 @@ func (c *bridgeServiceClient) GetBridges(ctx context.Context, in *GetBridgesRequ func (c *bridgeServiceClient) GetProof(ctx context.Context, in *GetProofRequest, opts ...grpc.CallOption) (*GetProofResponse, error) { out := new(GetProofResponse) - err := c.cc.Invoke(ctx, "/bridge.v1.BridgeService/GetProof", in, out, opts...) + err := c.cc.Invoke(ctx, BridgeService_GetProof_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -74,7 +100,7 @@ func (c *bridgeServiceClient) GetProof(ctx context.Context, in *GetProofRequest, func (c *bridgeServiceClient) GetBridge(ctx context.Context, in *GetBridgeRequest, opts ...grpc.CallOption) (*GetBridgeResponse, error) { out := new(GetBridgeResponse) - err := c.cc.Invoke(ctx, "/bridge.v1.BridgeService/GetBridge", in, out, opts...) + err := c.cc.Invoke(ctx, BridgeService_GetBridge_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -83,7 +109,7 @@ func (c *bridgeServiceClient) GetBridge(ctx context.Context, in *GetBridgeReques func (c *bridgeServiceClient) GetClaims(ctx context.Context, in *GetClaimsRequest, opts ...grpc.CallOption) (*GetClaimsResponse, error) { out := new(GetClaimsResponse) - err := c.cc.Invoke(ctx, "/bridge.v1.BridgeService/GetClaims", in, out, opts...) + err := c.cc.Invoke(ctx, BridgeService_GetClaims_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -92,7 +118,52 @@ func (c *bridgeServiceClient) GetClaims(ctx context.Context, in *GetClaimsReques func (c *bridgeServiceClient) GetTokenWrapped(ctx context.Context, in *GetTokenWrappedRequest, opts ...grpc.CallOption) (*GetTokenWrappedResponse, error) { out := new(GetTokenWrappedResponse) - err := c.cc.Invoke(ctx, "/bridge.v1.BridgeService/GetTokenWrapped", in, out, opts...) + err := c.cc.Invoke(ctx, BridgeService_GetTokenWrapped_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bridgeServiceClient) GetCoinPrice(ctx context.Context, in *GetCoinPriceRequest, opts ...grpc.CallOption) (*CommonCoinPricesResponse, error) { + out := new(CommonCoinPricesResponse) + err := c.cc.Invoke(ctx, BridgeService_GetCoinPrice_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bridgeServiceClient) GetMainCoins(ctx context.Context, in *GetMainCoinsRequest, opts ...grpc.CallOption) (*CommonCoinsResponse, error) { + out := new(CommonCoinsResponse) + err := c.cc.Invoke(ctx, BridgeService_GetMainCoins_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bridgeServiceClient) GetPendingTransactions(ctx context.Context, in *GetPendingTransactionsRequest, opts ...grpc.CallOption) (*CommonTransactionsResponse, error) { + out := new(CommonTransactionsResponse) + err := c.cc.Invoke(ctx, BridgeService_GetPendingTransactions_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bridgeServiceClient) GetAllTransactions(ctx context.Context, in *GetAllTransactionsRequest, opts ...grpc.CallOption) (*CommonTransactionsResponse, error) { + out := new(CommonTransactionsResponse) + err := c.cc.Invoke(ctx, BridgeService_GetAllTransactions_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *bridgeServiceClient) GetSmtProof(ctx context.Context, in *GetSmtProofRequest, opts ...grpc.CallOption) (*CommonProofResponse, error) { + out := new(CommonProofResponse) + err := c.cc.Invoke(ctx, BridgeService_GetSmtProof_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -100,26 +171,34 @@ func (c *bridgeServiceClient) GetTokenWrapped(ctx context.Context, in *GetTokenW } // BridgeServiceServer is the server API for BridgeService service. -// All implementations must embed UnimplementedBridgeServiceServer +// All implementations should embed UnimplementedBridgeServiceServer // for forward compatibility type BridgeServiceServer interface { // Getters - /// Get api version + // / Get api version CheckAPI(context.Context, *CheckAPIRequest) (*CheckAPIResponse, error) - /// Get bridges for the destination address both in L1 and L2 + // / Get bridges for the destination address both in L1 and L2 GetBridges(context.Context, *GetBridgesRequest) (*GetBridgesResponse, error) - /// Get the merkle proof for the specific deposit + // / Get the merkle proof for the specific deposit GetProof(context.Context, *GetProofRequest) (*GetProofResponse, error) - /// Get the specific deposit + // / Get the specific deposit GetBridge(context.Context, *GetBridgeRequest) (*GetBridgeResponse, error) - /// Get claims for the specific smart contract address both in L1 and L2 + // / Get claims for the specific smart contract address both in L1 and L2 GetClaims(context.Context, *GetClaimsRequest) (*GetClaimsResponse, error) - /// Get token wrapped for the specific smart contract address both in L1 and L2 + // / Get token wrapped for the specific smart contract address both in L1 and L2 GetTokenWrapped(context.Context, *GetTokenWrappedRequest) (*GetTokenWrappedResponse, error) - mustEmbedUnimplementedBridgeServiceServer() + // / Get the latest price of the specified coins + GetCoinPrice(context.Context, *GetCoinPriceRequest) (*CommonCoinPricesResponse, error) + // / Get the list of all the main coins of a specified network + GetMainCoins(context.Context, *GetMainCoinsRequest) (*CommonCoinsResponse, error) + // / Get the pending (not claimed) transactions of an account + GetPendingTransactions(context.Context, *GetPendingTransactionsRequest) (*CommonTransactionsResponse, error) + // / Get all the transactions of an account. Similar to GetBridges but the field names are changed + GetAllTransactions(context.Context, *GetAllTransactionsRequest) (*CommonTransactionsResponse, error) + GetSmtProof(context.Context, *GetSmtProofRequest) (*CommonProofResponse, error) } -// UnimplementedBridgeServiceServer must be embedded to have forward compatible implementations. +// UnimplementedBridgeServiceServer should be embedded to have forward compatible implementations. type UnimplementedBridgeServiceServer struct { } @@ -141,7 +220,21 @@ func (UnimplementedBridgeServiceServer) GetClaims(context.Context, *GetClaimsReq func (UnimplementedBridgeServiceServer) GetTokenWrapped(context.Context, *GetTokenWrappedRequest) (*GetTokenWrappedResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method GetTokenWrapped not implemented") } -func (UnimplementedBridgeServiceServer) mustEmbedUnimplementedBridgeServiceServer() {} +func (UnimplementedBridgeServiceServer) GetCoinPrice(context.Context, *GetCoinPriceRequest) (*CommonCoinPricesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetCoinPrice not implemented") +} +func (UnimplementedBridgeServiceServer) GetMainCoins(context.Context, *GetMainCoinsRequest) (*CommonCoinsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetMainCoins not implemented") +} +func (UnimplementedBridgeServiceServer) GetPendingTransactions(context.Context, *GetPendingTransactionsRequest) (*CommonTransactionsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetPendingTransactions not implemented") +} +func (UnimplementedBridgeServiceServer) GetAllTransactions(context.Context, *GetAllTransactionsRequest) (*CommonTransactionsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetAllTransactions not implemented") +} +func (UnimplementedBridgeServiceServer) GetSmtProof(context.Context, *GetSmtProofRequest) (*CommonProofResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetSmtProof not implemented") +} // UnsafeBridgeServiceServer may be embedded to opt out of forward compatibility for this service. // Use of this interface is not recommended, as added methods to BridgeServiceServer will @@ -164,7 +257,7 @@ func _BridgeService_CheckAPI_Handler(srv interface{}, ctx context.Context, dec f } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/bridge.v1.BridgeService/CheckAPI", + FullMethod: BridgeService_CheckAPI_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(BridgeServiceServer).CheckAPI(ctx, req.(*CheckAPIRequest)) @@ -182,7 +275,7 @@ func _BridgeService_GetBridges_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/bridge.v1.BridgeService/GetBridges", + FullMethod: BridgeService_GetBridges_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(BridgeServiceServer).GetBridges(ctx, req.(*GetBridgesRequest)) @@ -200,7 +293,7 @@ func _BridgeService_GetProof_Handler(srv interface{}, ctx context.Context, dec f } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/bridge.v1.BridgeService/GetProof", + FullMethod: BridgeService_GetProof_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(BridgeServiceServer).GetProof(ctx, req.(*GetProofRequest)) @@ -218,7 +311,7 @@ func _BridgeService_GetBridge_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/bridge.v1.BridgeService/GetBridge", + FullMethod: BridgeService_GetBridge_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(BridgeServiceServer).GetBridge(ctx, req.(*GetBridgeRequest)) @@ -236,7 +329,7 @@ func _BridgeService_GetClaims_Handler(srv interface{}, ctx context.Context, dec } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/bridge.v1.BridgeService/GetClaims", + FullMethod: BridgeService_GetClaims_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(BridgeServiceServer).GetClaims(ctx, req.(*GetClaimsRequest)) @@ -254,7 +347,7 @@ func _BridgeService_GetTokenWrapped_Handler(srv interface{}, ctx context.Context } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: "/bridge.v1.BridgeService/GetTokenWrapped", + FullMethod: BridgeService_GetTokenWrapped_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { return srv.(BridgeServiceServer).GetTokenWrapped(ctx, req.(*GetTokenWrappedRequest)) @@ -262,6 +355,96 @@ func _BridgeService_GetTokenWrapped_Handler(srv interface{}, ctx context.Context return interceptor(ctx, in, info, handler) } +func _BridgeService_GetCoinPrice_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetCoinPriceRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BridgeServiceServer).GetCoinPrice(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: BridgeService_GetCoinPrice_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BridgeServiceServer).GetCoinPrice(ctx, req.(*GetCoinPriceRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BridgeService_GetMainCoins_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetMainCoinsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BridgeServiceServer).GetMainCoins(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: BridgeService_GetMainCoins_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BridgeServiceServer).GetMainCoins(ctx, req.(*GetMainCoinsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BridgeService_GetPendingTransactions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetPendingTransactionsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BridgeServiceServer).GetPendingTransactions(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: BridgeService_GetPendingTransactions_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BridgeServiceServer).GetPendingTransactions(ctx, req.(*GetPendingTransactionsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BridgeService_GetAllTransactions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetAllTransactionsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BridgeServiceServer).GetAllTransactions(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: BridgeService_GetAllTransactions_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BridgeServiceServer).GetAllTransactions(ctx, req.(*GetAllTransactionsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _BridgeService_GetSmtProof_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetSmtProofRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(BridgeServiceServer).GetSmtProof(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: BridgeService_GetSmtProof_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(BridgeServiceServer).GetSmtProof(ctx, req.(*GetSmtProofRequest)) + } + return interceptor(ctx, in, info, handler) +} + // BridgeService_ServiceDesc is the grpc.ServiceDesc for BridgeService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -293,6 +476,26 @@ var BridgeService_ServiceDesc = grpc.ServiceDesc{ MethodName: "GetTokenWrapped", Handler: _BridgeService_GetTokenWrapped_Handler, }, + { + MethodName: "GetCoinPrice", + Handler: _BridgeService_GetCoinPrice_Handler, + }, + { + MethodName: "GetMainCoins", + Handler: _BridgeService_GetMainCoins_Handler, + }, + { + MethodName: "GetPendingTransactions", + Handler: _BridgeService_GetPendingTransactions_Handler, + }, + { + MethodName: "GetAllTransactions", + Handler: _BridgeService_GetAllTransactions_Handler, + }, + { + MethodName: "GetSmtProof", + Handler: _BridgeService_GetSmtProof_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "query.proto", diff --git a/claimtxman/claimtxman.go b/claimtxman/claimtxman.go index d051af9b..41b2b741 100644 --- a/claimtxman/claimtxman.go +++ b/claimtxman/claimtxman.go @@ -365,6 +365,7 @@ func (tm *ClaimTxManager) monitorTxs(ctx context.Context) error { continue } } + //Multiply gasPrice by 10 to increase the efficiency of the tx in the sequence mTx.GasPrice = big.NewInt(0).Mul(gasPrice, big.NewInt(10)) //nolint:gomnd log.Infof("Using gasPrice: %s. The gasPrice suggested by the network is %s", mTx.GasPrice.String(), gasPrice.String()) diff --git a/cmd/main.go b/cmd/main.go index 4432ca0b..f78eab16 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -48,7 +48,14 @@ func main() { Name: "run", Aliases: []string{}, Usage: "Run the zkevm bridge", - Action: start, + Action: startServer, + Flags: flags, + }, + { + Name: "runKafkaConsumer", + Aliases: []string{}, + Usage: "Run the coin middleware kafka consumer", + Action: startKafkaConsumer, Flags: flags, }, } diff --git a/cmd/run.go b/cmd/run.go index 0d050168..6ded9c8e 100644 --- a/cmd/run.go +++ b/cmd/run.go @@ -1,6 +1,10 @@ package main import ( + "github.com/0xPolygonHermez/zkevm-bridge-service/coinmiddleware" + "github.com/0xPolygonHermez/zkevm-bridge-service/localcache" + "github.com/0xPolygonHermez/zkevm-bridge-service/redisstorage" + "github.com/0xPolygonHermez/zkevm-bridge-service/sentinel" "os" "os/signal" @@ -17,21 +21,28 @@ import ( "github.com/urfave/cli/v2" ) -func start(ctx *cli.Context) error { - configFilePath := ctx.String(flagCfg) - network := ctx.String(flagNetwork) - - c, err := config.Load(configFilePath, network) +func startServer(ctx *cli.Context) error { + c, err := initCommon(ctx) if err != nil { return err } - setupLog(c.Log) + + // Init sentinel + err = sentinel.InitFileDataSource(c.BridgeServer.SentinelConfigFilePath) + if err != nil { + log.Infof("init sentinel error[%v]; ignored and proceed with no sentinel config", err) + } + err = db.RunMigrations(c.SyncDB) if err != nil { log.Error(err) return err } + l1ChainId := c.Etherman.L1ChainId + l2ChainIds := c.Etherman.L2ChainIds + var chainIDs = []uint{l1ChainId} + chainIDs = append(chainIDs, l2ChainIds...) l1Etherman, l2Ethermans, err := newEthermans(c) if err != nil { log.Error(err) @@ -80,7 +91,19 @@ func start(ctx *cli.Context) error { log.Error(err) return err } - bridgeService := server.NewBridgeService(c.BridgeServer, c.BridgeController.Height, networkIDs, apiStorage) + + redisStorage, err := redisstorage.NewRedisStorage(c.BridgeServer.Redis) + if err != nil { + log.Error(err) + return err + } + + mainCoinsCache, err := localcache.NewMainCoinsCache(apiStorage) + if err != nil { + log.Error(err) + return err + } + bridgeService := server.NewBridgeService(c.BridgeServer, c.BridgeController.Height, networkIDs, chainIDs, apiStorage, redisStorage, mainCoinsCache) err = server.RunServer(c.BridgeServer, bridgeService) if err != nil { log.Error(err) @@ -128,6 +151,54 @@ func start(ctx *cli.Context) error { return nil } +func startKafkaConsumer(ctx *cli.Context) error { + c, err := initCommon(ctx) + if err != nil { + return err + } + + redisStorage, err := redisstorage.NewRedisStorage(c.BridgeServer.Redis) + if err != nil { + log.Error(err) + return err + } + + // Start the coin middleware kafka consumer + log.Debugf("start initializing kafka consumer...") + coinKafkaConsumer, err := coinmiddleware.NewKafkaConsumer(c.CoinKafkaConsumer, redisStorage) + if err != nil { + log.Error(err) + return err + } + log.Debugf("finish initializing kafka consumer") + go coinKafkaConsumer.Start(ctx.Context) + defer func() { + err := coinKafkaConsumer.Close() + if err != nil { + log.Errorf("close kafka consumer error: %v", err) + } + }() + + // Wait for an in interrupt. + ch := make(chan os.Signal, 1) + signal.Notify(ch, os.Interrupt) + <-ch + + return nil +} + +func initCommon(ctx *cli.Context) (*config.Config, error) { + configFilePath := ctx.String(flagCfg) + network := ctx.String(flagNetwork) + + c, err := config.Load(configFilePath, network) + if err != nil { + return nil, err + } + setupLog(c.Log) + return c, nil +} + func setupLog(c log.Config) { log.Init(c) } diff --git a/coinmiddleware/config.go b/coinmiddleware/config.go new file mode 100644 index 00000000..fe4260ba --- /dev/null +++ b/coinmiddleware/config.go @@ -0,0 +1,25 @@ +package coinmiddleware + +// Config handles the kafka consumer config +type Config struct { + // Brokers is the list of address of the kafka brokers + Brokers []string `mapstructure:"Brokers"` + + // Topics is the topic names to be consumed from + Topics []string `mapstructure:"Topics"` + + // ConsumerGroupID is the name of the consumer group + ConsumerGroupID string `mapstructure:"ConsumerGroupID"` + + // InitialOffset is the offset to use if there's no previously committed offset + // -1: Newest + // -2: Oldest + InitialOffset int64 `mapstructure:"InitialOffset"` + + // Username and Password are used for SASL_SSL authentication + Username string `mapstructure:"Username"` + Password string `mapstructure:"Password"` + + // RootCAPath points to the CA cert used for authentication + RootCAPath string `mapstructure:"RootCAPath"` +} diff --git a/coinmiddleware/handler.go b/coinmiddleware/handler.go new file mode 100644 index 00000000..ff8c0d8d --- /dev/null +++ b/coinmiddleware/handler.go @@ -0,0 +1,88 @@ +package coinmiddleware + +import ( + "context" + "encoding/json" + "github.com/0xPolygonHermez/zkevm-bridge-service/bridgectrl/pb" + "github.com/0xPolygonHermez/zkevm-bridge-service/redisstorage" + "github.com/0xPolygonHermez/zkevm-node/log" + "github.com/IBM/sarama" + "github.com/pkg/errors" + "time" +) + +const ( + maxRetries = 5 + retryBackoff = 3 * time.Second +) + +// MessageHandler implements sarama.ConsumerGroupHandler, handles the messages from kafka and populate the Redis storage +type MessageHandler struct { + storage redisstorage.RedisStorage +} + +func NewMessageHandler(redisStorage redisstorage.RedisStorage) sarama.ConsumerGroupHandler { + return &MessageHandler{storage: redisStorage} +} + +func (h *MessageHandler) Setup(sarama.ConsumerGroupSession) error { + return nil +} + +func (h *MessageHandler) Cleanup(sarama.ConsumerGroupSession) error { + return nil +} + +func (h *MessageHandler) ConsumeClaim(session sarama.ConsumerGroupSession, claim sarama.ConsumerGroupClaim) error { + for { + select { + case message, ok := <-claim.Messages(): + if !ok { + log.Info("message channel was closed") + return nil + } + log.Infof("message received topic[%v] partition[%v] offset[%v]", message.Topic, message.Partition, message.Offset) + + // Retry for 5 times, if still fails, ignore this message + for i := 0; i < maxRetries; i++ { + err := h.handleMessage(message) + if err == nil { + break + } + log.Errorf("handle kafka message error[%v] retryCnt[%v] message[%+v]", err, i, message) + time.Sleep(retryBackoff) + } + session.MarkMessage(message, "") + case <-session.Context().Done(): + return nil + } + } +} + +func (h *MessageHandler) handleMessage(message *sarama.ConsumerMessage) error { + body := &MessageBody{} + err := json.Unmarshal(message.Value, body) + if err != nil { + return errors.Wrap(err, "unmarshal message body error") + } + + if body.Data == nil { + return errors.New("message data is nil") + } + pbPriceList := h.convertToPbPriceList(body.Data.PriceList) + return h.storage.SetCoinPrice(context.Background(), pbPriceList) +} + +func (h *MessageHandler) convertToPbPriceList(priceList []*PriceInfo) []*pb.SymbolPrice { + var result []*pb.SymbolPrice + for _, price := range priceList { + result = append(result, &pb.SymbolPrice{ + Symbol: price.Symbol, + Price: price.Price, + Time: uint64(price.Timestamp), + Address: price.TokenAddress, + ChainId: uint64(price.ChainID), + }) + } + return result +} diff --git a/coinmiddleware/kafkaconsumer.go b/coinmiddleware/kafkaconsumer.go new file mode 100644 index 00000000..1bd66aad --- /dev/null +++ b/coinmiddleware/kafkaconsumer.go @@ -0,0 +1,88 @@ +package coinmiddleware + +import ( + "context" + "crypto/tls" + "crypto/x509" + "github.com/0xPolygonHermez/zkevm-bridge-service/redisstorage" + "github.com/0xPolygonHermez/zkevm-node/log" + "github.com/IBM/sarama" + "github.com/pkg/errors" + "os" +) + +// KafkaConsumer provides the interface to consume from coin middleware kafka +type KafkaConsumer interface { + Start(ctx context.Context) error + Close() error +} + +type kafkaConsumerImpl struct { + topics []string + client sarama.ConsumerGroup + handler sarama.ConsumerGroupHandler +} + +func NewKafkaConsumer(cfg Config, redisStorage redisstorage.RedisStorage) (KafkaConsumer, error) { + config := sarama.NewConfig() + config.Consumer.Offsets.Initial = cfg.InitialOffset + + // Enable SASL authentication + if cfg.Username != "" && cfg.Password != "" && cfg.RootCAPath != "" { + config.Net.SASL.Enable = true + config.Net.SASL.User = cfg.Username + config.Net.SASL.Password = cfg.Password + + // Read the CA cert from file + rootCA, err := os.ReadFile(cfg.RootCAPath) + if err != nil { + return nil, errors.Wrap(err, "Kafka consumer: read root CA cert fail") + } + + caCertPool := x509.NewCertPool() + if ok := caCertPool.AppendCertsFromPEM([]byte(rootCA)); !ok { + return nil, errors.New("NewKafkaConsumer caCertPool.AppendCertsFromPEM") + } + + config.Net.TLS.Enable = true + config.Net.TLS.Config = &tls.Config{RootCAs: caCertPool, InsecureSkipVerify: true} + } + + client, err := sarama.NewConsumerGroup(cfg.Brokers, cfg.ConsumerGroupID, config) + if err != nil { + return nil, errors.Wrap(err, "kafka consumer group init error") + } + + return &kafkaConsumerImpl{ + topics: cfg.Topics, + client: client, + handler: NewMessageHandler(redisStorage), + }, nil +} + +func (c *kafkaConsumerImpl) Start(ctx context.Context) error { + log.Debug("starting kafka consumer") + ctx, cancel := context.WithCancel(ctx) + defer cancel() + + for { + log.Debugf("start consume") + err := c.client.Consume(ctx, c.topics, c.handler) + if err != nil { + log.Errorf("kafka consumer error: %v", err) + if errors.Is(err, sarama.ErrClosedConsumerGroup) { + err = nil + } + return errors.Wrap(err, "kafka consumer error") + } + if err = ctx.Err(); err != nil { + log.Errorf("kafka consumer ctx error: %v", err) + return errors.Wrap(err, "kafka consumer ctx error") + } + } +} + +func (c *kafkaConsumerImpl) Close() error { + log.Debug("closing kafka consumer...") + return c.client.Close() +} diff --git a/coinmiddleware/root-ca-cert b/coinmiddleware/root-ca-cert new file mode 100644 index 00000000..1ec4f0ca --- /dev/null +++ b/coinmiddleware/root-ca-cert @@ -0,0 +1,30 @@ +-----BEGIN CERTIFICATE----- +MIIFKjCCAxICCQCdkV+iL/cBTzANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJD +TjEQMA4GA1UECAwHQmVpamluZzEQMA4GA1UEBwwHQmVpamluZzEQMA4GA1UECgwH +QWxpYmFiYTERMA8GA1UEAwwIQWxpS2Fma2EwIBcNMjIwNTExMTAzOTMxWhgPMjEy +MjA0MTcxMDM5MzFaMFYxCzAJBgNVBAYTAkNOMRAwDgYDVQQIDAdCZWlqaW5nMRAw +DgYDVQQHDAdCZWlqaW5nMRAwDgYDVQQKDAdBbGliYWJhMREwDwYDVQQDDAhBbGlL +YWZrYTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL315apERcpAkDAB +SY4A2bGrRZO4CXj4nvqbwEZ50f1HlwABjzUMKXES7lWrOwrnqZjSIgm5woqu+Pr4 +sWhKFHN19SSnjeKilQoL8SzMk0p22QJK2sqKRMuHtoBtL6uOT+ykV16IEg0fY2Uu +/oX/sF2LAVCIl1IGc2HVKUr56c0/mM6V6Ur5Sum7ctKk2dm6YS5gwDOXcqAaZhwd +jVzqLEW8hmsMS7n+d2/NIJMqXvTHDRQ74xhR9tN2w92keEBGOQoMG/Qw0RvS1aQi +RKpNpvCE7z543istYuFbFji646u6kRCr7I2i4RwV0qXVM1djcS+PysUsIX4mEjdP +Kq0Fptzsii3aeTFuNswOlo5GieE3psVoymIP2HWd6xmlmFaX3Z8Nd4PxA6h0uRIY +tRbLkHw8WfOAl4dXxWQFkbvNYNLRB5xZUYjm3CA+ZhYfJRtNlPa2247Psnbup6CH +k3DP+aExdLmbtyugZO/lNqi9WMZ0qLFGXZDz8astgJPGKiCjihccpP1cdzGlCzGu +iE6S25JEBuXPl4wg4GXNuCg6tcEKL2qinvbrCimrilWuFajBh7hRH0dgkhezw6xU ++3++ZCebEJOXZ8byn3v/gmyx2PDnKlBPcXCy23nadbiX/zpNvNvCqAewajm9AlWY +fXbCl5TkUnyMPsh0rwWeeRYR2kM3AgMBAAEwDQYJKoZIhvcNAQELBQADggIBADxW +YJoWh9DVtwFGp8TOrlbZ7kwflKFv8Hew4SX00K5GwKgmnn3fjdR0F8rZ2ar/BqdD +zR63sv9LGjMci9NWAqPqN5MyKB97KrFV6nHzcYLRmT+ltolqcfp5MeGCqka7ZTEL +t658xxaSXNEY9HGHYskIu7mWd41KAj0RLRJnEEOrCSZzfpzG4LdD6J0u7wpyJSYL +jGxi2xswt5C0x790LS/JmFq65c/vzfATjbmu6XSO3UvtsADpj0pH3FJFhLzoT67o +NrUeFEHrzsMc7JenYmPIYmEb4xXlfctjCzLaiNG3u8uKwXGBk/oagAwXCsI8I0pR +wtW/QedXxlFtUfATRZnI/eLqvJ5cQ6aXg/GyJtAv+ccFf004K1ER00ECe738WNXm ++6NNkhN5gPhwsfoDhq+a7Zmvj9+x/XDjSRqZ8j+XIMi9ZQjTwUAg9JmnhyR4eJXn +oQAxGc3ii98YoAspKZGRX6LoRfYbNE3TXJsSzGw73+PqS1y74xNNmMx2XX6IV/53 +Is5mA8fli6BIEKkAgE6Pn0t6v5EP6haVF84vJazYRIlYflR2mi8p8dU6kohiC79C +e4seRTTZgyXU+5dgFIXqagub2A79tRtPAr+4Xi84jzY84ceUwqX2fxRwkfaUUJb8 +Hh2q+P+VJeK50B83DZ4ui+WNJbAaAbcLMsn/idX3 +-----END CERTIFICATE----- \ No newline at end of file diff --git a/coinmiddleware/types.go b/coinmiddleware/types.go new file mode 100644 index 00000000..4e7bc789 --- /dev/null +++ b/coinmiddleware/types.go @@ -0,0 +1,37 @@ +package coinmiddleware + +type MessageBody struct { + Data *MessageData `json:"data"` + Topic string `json:"topic"` +} + +type MessageData struct { + ID string `json:"id"` + PriceList []*PriceInfo `json:"priceList"` +} + +type PriceInfo struct { + CoinID int64 `json:"coinId"` + ChainID int64 `json:"chainId"` + Symbol string `json:"symbol"` + FullName string `json:"fullName"` + Chain string `json:"chain"` + TokenAddress string `json:"tokenAddress"` + Price float64 `json:"price"` + PriceStatus int `json:"priceStatus"` + MaxPrice24H float64 `json:"maxPrice24H"` + MinPrice24H float64 `json:"minPrice24H"` + MarketCap float64 `json:"marketCap"` + Timestamp int64 `json:"timestamp"` + Vol24H float64 `json:"vol24h"` + CirculatingSupply float64 `json:"circulatingSupply"` + MaxSupply float64 `json:"maxSupply"` + TotalSupply float64 `json:"totalSupply"` + PriceChange24H float64 `json:"priceChange24H"` + PriceChangeRate24H float64 `json:"priceChangeRate24H"` + DexVol24H float64 `json:"dexVol24H"` + DexLiquidity float64 `json:"dexLiquidity"` + DexReserve float64 `json:"dexReserve"` + IsDexSource bool `json:"isDexSource"` + QuoteLiquidity float64 `json:"quoteLiquidity"` +} diff --git a/config/config.debug.toml b/config/config.debug.toml index 953a7a2f..0aa4ca07 100644 --- a/config/config.debug.toml +++ b/config/config.debug.toml @@ -10,6 +10,7 @@ Name = "test_db" Host = "localhost" Port = "5435" MaxConns = 20 +TableSuffix = "" [ClaimTxManager] Enabled = true @@ -22,6 +23,8 @@ FreeGas = true [Etherman] L1URL = "http://localhost:8545" L2URLs = ["http://localhost:8123"] +L1ChainId = 5 +L2ChainIds = [1001] [Synchronizer] SyncInterval = "1s" @@ -46,6 +49,22 @@ BridgeVersion = "v1" Host = "localhost" Port = "5435" MaxConns = 20 + TableSuffix = "" + [BridgeServer.Redis] + Addr = "localhost:6379" + Username = "" + Password = "" + DB = 0 + MockPrice = true + +[CoinKafkaConsumer] +Brokers = ["localhost:9092"] +Topics = ["explorer_chainAddressPrice_push"] +ConsumerGroupID = "zkevm-bridge-service" +InitialOffset = -1 +Username = "" +Password = "" +RootCAPath = "/app/root-ca-cert" [NetworkConfig] GenBlockNumber = 1 diff --git a/config/config.go b/config/config.go index 21d5fdc0..d23b5f02 100644 --- a/config/config.go +++ b/config/config.go @@ -4,6 +4,7 @@ import ( "bytes" "encoding/json" "errors" + "github.com/0xPolygonHermez/zkevm-bridge-service/coinmiddleware" "path/filepath" "strings" @@ -20,13 +21,14 @@ import ( // Config struct type Config struct { - Log log.Config - SyncDB db.Config - ClaimTxManager claimtxman.Config - Etherman etherman.Config - Synchronizer synchronizer.Config - BridgeController bridgectrl.Config - BridgeServer server.Config + Log log.Config + SyncDB db.Config + ClaimTxManager claimtxman.Config + Etherman etherman.Config + Synchronizer synchronizer.Config + BridgeController bridgectrl.Config + BridgeServer server.Config + CoinKafkaConsumer coinmiddleware.Config NetworkConfig } diff --git a/config/config.local.toml b/config/config.local.toml index a67cbab0..9d36fe7a 100644 --- a/config/config.local.toml +++ b/config/config.local.toml @@ -10,6 +10,7 @@ Name = "test_db" Host = "zkevm-bridge-db" Port = "5432" MaxConns = 20 +TableSuffix = "" [ClaimTxManager] Enabled = true @@ -22,6 +23,8 @@ FreeGas = true [Etherman] L1URL = "http://zkevm-mock-l1-network:8545" L2URLs = ["http://zkevm-node:8123"] +L1ChainId = 5 +L2ChainIds = [1001] [Synchronizer] SyncInterval = "1s" @@ -38,6 +41,7 @@ CacheSize = 100000 DefaultPageLimit = 25 MaxPageLimit = 100 BridgeVersion = "v1" +SentinelConfigFilePath = "/app/sentinel_config.json" [BridgeServer.DB] Database = "postgres" User = "test_user" @@ -46,6 +50,22 @@ BridgeVersion = "v1" Host = "zkevm-bridge-db" Port = "5432" MaxConns = 20 + TableSuffix = "" + [BridgeServer.Redis] + Addr = "zkevm-bridge-redis:6379" + Username = "" + Password = "" + DB = 0 + MockPrice = true + +[CoinKafkaConsumer] +Brokers = ["zkevm-bridge-coin-kafka:9092"] +Topics = ["explorer_chainAddressPrice_push"] +ConsumerGroupID = "zkevm-bridge-service" +InitialOffset = -1 +Username = "" +Password = "" +RootCAPath = "/app/root-ca-cert" [NetworkConfig] GenBlockNumber = 1 diff --git a/db/config.go b/db/config.go index 371da18c..2c37cb52 100644 --- a/db/config.go +++ b/db/config.go @@ -22,4 +22,7 @@ type Config struct { // MaxConns is the maximum number of connections in the pool. MaxConns int `mapstructure:"MaxConns"` + + // TableSuffix will be added to all table names, e.g. sync.root -> sync.root_test + TableSuffix string `mapstructure:"TableSuffix"` } diff --git a/db/pgstorage/config.go b/db/pgstorage/config.go index 5f966914..8c5655d8 100644 --- a/db/pgstorage/config.go +++ b/db/pgstorage/config.go @@ -19,4 +19,7 @@ type Config struct { // MaxConns is the maximum number of connections in the pool. MaxConns int `mapstructure:"MaxConns"` + + // TableSuffix will be added to all table names, e.g. sync.root -> sync.root_test + TableSuffix string `mapstructure:"TableSuffix"` } diff --git a/db/pgstorage/migrations/0006.sql b/db/pgstorage/migrations/0006.sql new file mode 100644 index 00000000..3a1aa3da --- /dev/null +++ b/db/pgstorage/migrations/0006.sql @@ -0,0 +1,20 @@ +-- +migrate Down +DROP SCHEMA IF EXISTS common; + +-- +migrate Up +CREATE SCHEMA IF NOT EXISTS common; +CREATE TABLE IF NOT EXISTS common.main_coins +( + id SERIAL PRIMARY KEY, + symbol TEXT NOT NULL, + name TEXT NOT NULL, + decimals INTEGER NOT NULL DEFAULT 0, + address BYTEA NOT NULL, + chain_id INTEGER NOT NULL, + network_id INTEGER NOT NULL, + logo_link TEXT NOT NULL DEFAULT '', + is_deleted BOOLEAN NOT NULL DEFAULT FALSE, + display_order INTEGER NOT NULL DEFAULT 0, + create_time TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(), + modify_time TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW() +); \ No newline at end of file diff --git a/db/pgstorage/migrations/0007.sql b/db/pgstorage/migrations/0007.sql new file mode 100644 index 00000000..392d8558 --- /dev/null +++ b/db/pgstorage/migrations/0007.sql @@ -0,0 +1,29 @@ +-- +migrate Down +DROP TABLE IF EXISTS sync.block_test CASCADE; +DROP TABLE IF EXISTS sync.exit_root_test CASCADE; +DROP TABLE IF EXISTS sync.deposit_test CASCADE; +DROP TABLE IF EXISTS sync.claim_test CASCADE; +DROP TABLE IF EXISTS sync.token_wrapped_test CASCADE; +DROP TABLE IF EXISTS sync.monitored_txs_test CASCADE; +DROP TABLE IF EXISTS mt.rht_test CASCADE; +DROP TABLE IF EXISTS mt.root_test CASCADE; +DROP TABLE IF EXISTS common.main_coins_test CASCADE; + +-- +migrate Up +CREATE TABLE IF NOT EXISTS sync.block_test (LIKE sync.block INCLUDING ALL); +CREATE TABLE IF NOT EXISTS sync.exit_root_test (LIKE sync.exit_root INCLUDING ALL); +CREATE TABLE IF NOT EXISTS sync.deposit_test (LIKE sync.deposit INCLUDING ALL); +CREATE TABLE IF NOT EXISTS sync.claim_test (LIKE sync.claim INCLUDING ALL); +CREATE TABLE IF NOT EXISTS sync.token_wrapped_test (LIKE sync.token_wrapped INCLUDING ALL); +CREATE TABLE IF NOT EXISTS sync.monitored_txs_test (LIKE sync.monitored_txs INCLUDING ALL); +CREATE TABLE IF NOT EXISTS mt.rht_test (LIKE mt.rht INCLUDING ALL); +CREATE TABLE IF NOT EXISTS mt.root_test (LIKE mt.root INCLUDING ALL); +CREATE TABLE IF NOT EXISTS common.main_coins_test (LIKE common.main_coins INCLUDING ALL); + +ALTER TABLE sync.exit_root_test ADD CONSTRAINT exit_root_block_id_fkey FOREIGN KEY (block_id) REFERENCES sync.block_test (id) ON DELETE CASCADE; +ALTER TABLE sync.deposit_test ADD CONSTRAINT deposit_block_id_fkey FOREIGN KEY (block_id) REFERENCES sync.block_test (id) ON DELETE CASCADE; +ALTER TABLE sync.claim_test ADD CONSTRAINT claim_block_id_fkey FOREIGN KEY (block_id) REFERENCES sync.block_test (id) ON DELETE CASCADE; +ALTER TABLE sync.token_wrapped_test ADD CONSTRAINT claim_block_id_fkey FOREIGN KEY (block_id) REFERENCES sync.block_test (id) ON DELETE CASCADE; +ALTER TABLE sync.monitored_txs_test ADD CONSTRAINT monitored_txs_block_id_fkey FOREIGN KEY (block_id) REFERENCES sync.block_test (id) ON DELETE CASCADE; +ALTER TABLE mt.rht_test ADD CONSTRAINT rht_deposit_id_fkey FOREIGN KEY (deposit_id) REFERENCES sync.deposit_test (id) ON DELETE CASCADE; +ALTER TABLE mt.root_test ADD CONSTRAINT root_deposit_id_fkey FOREIGN KEY (deposit_id) REFERENCES sync.deposit_test (id) ON DELETE CASCADE; \ No newline at end of file diff --git a/db/pgstorage/pgstorage.go b/db/pgstorage/pgstorage.go index 321f5540..c21c995c 100644 --- a/db/pgstorage/pgstorage.go +++ b/db/pgstorage/pgstorage.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "github.com/0xPolygonHermez/zkevm-bridge-service/bridgectrl/pb" "math/big" "time" @@ -20,6 +21,7 @@ import ( // PostgresStorage implements the Storage interface. type PostgresStorage struct { *pgxpool.Pool + tableSuffix string } // getExecQuerier determines which execQuerier to use, dbTx or the main pgxpool @@ -43,7 +45,7 @@ func NewPostgresStorage(cfg Config) (*PostgresStorage, error) { log.Errorf("Unable to connect to database: %v\n", err) return nil, err } - return &PostgresStorage{db}, nil + return &PostgresStorage{Pool: db, tableSuffix: cfg.TableSuffix}, nil } // Rollback rollbacks a db transaction. @@ -71,7 +73,7 @@ func (p *PostgresStorage) BeginDBTransaction(ctx context.Context) (pgx.Tx, error // GetLastBlock gets the last block. func (p *PostgresStorage) GetLastBlock(ctx context.Context, networkID uint, dbTx pgx.Tx) (*etherman.Block, error) { var block etherman.Block - const getLastBlockSQL = "SELECT id, block_num, block_hash, parent_hash, network_id, received_at FROM sync.block where network_id = $1 ORDER BY block_num DESC LIMIT 1" + getLastBlockSQL := fmt.Sprintf("SELECT id, block_num, block_hash, parent_hash, network_id, received_at FROM sync.block%[1]v where network_id = $1 ORDER BY block_num DESC LIMIT 1", p.tableSuffix) e := p.getExecQuerier(dbTx) err := e.QueryRow(ctx, getLastBlockSQL, networkID).Scan(&block.ID, &block.BlockNumber, &block.BlockHash, &block.ParentHash, &block.NetworkID, &block.ReceivedAt) @@ -86,12 +88,12 @@ func (p *PostgresStorage) GetLastBlock(ctx context.Context, networkID uint, dbTx // AddBlock adds a new block to the storage. func (p *PostgresStorage) AddBlock(ctx context.Context, block *etherman.Block, dbTx pgx.Tx) (uint64, error) { var blockID uint64 - const addBlockSQL = `WITH block_id AS - (INSERT INTO sync.block (block_num, block_hash, parent_hash, network_id, received_at) + addBlockSQL := fmt.Sprintf(`WITH block_id AS + (INSERT INTO sync.block%[1]v (block_num, block_hash, parent_hash, network_id, received_at) VALUES ($1, $2, $3, $4, $5) ON CONFLICT (block_hash) DO NOTHING RETURNING id) SELECT * from block_id UNION ALL - SELECT id FROM sync.block WHERE block_hash = $2;` + SELECT id FROM sync.block%[1]v WHERE block_hash = $2;`, p.tableSuffix) e := p.getExecQuerier(dbTx) err := e.QueryRow(ctx, addBlockSQL, block.BlockNumber, block.BlockHash, block.ParentHash, block.NetworkID, block.ReceivedAt).Scan(&blockID) @@ -104,7 +106,7 @@ func (p *PostgresStorage) AddBlock(ctx context.Context, block *etherman.Block, d // AddGlobalExitRoot adds a new ExitRoot to the db. func (p *PostgresStorage) AddGlobalExitRoot(ctx context.Context, exitRoot *etherman.GlobalExitRoot, dbTx pgx.Tx) error { - const addExitRootSQL = "INSERT INTO sync.exit_root (block_id, global_exit_root, exit_roots) VALUES ($1, $2, $3)" + addExitRootSQL := fmt.Sprintf("INSERT INTO sync.exit_root%[1]v (block_id, global_exit_root, exit_roots) VALUES ($1, $2, $3)", p.tableSuffix) e := p.getExecQuerier(dbTx) _, err := e.Exec(ctx, addExitRootSQL, exitRoot.BlockID, exitRoot.GlobalExitRoot, pq.Array([][]byte{exitRoot.ExitRoots[0][:], exitRoot.ExitRoots[1][:]})) return err @@ -112,16 +114,19 @@ func (p *PostgresStorage) AddGlobalExitRoot(ctx context.Context, exitRoot *ether // AddDeposit adds new deposit to the storage. func (p *PostgresStorage) AddDeposit(ctx context.Context, deposit *etherman.Deposit, dbTx pgx.Tx) (uint64, error) { - const addDepositSQL = "INSERT INTO sync.deposit (leaf_type, network_id, orig_net, orig_addr, amount, dest_net, dest_addr, block_id, deposit_cnt, tx_hash, metadata) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11) RETURNING id" + addDepositSQL := fmt.Sprintf(` + INSERT INTO sync.deposit%[1]v (leaf_type, network_id, orig_net, orig_addr, amount, dest_net, dest_addr, block_id, deposit_cnt, tx_hash, metadata) + VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11) RETURNING id`, p.tableSuffix) e := p.getExecQuerier(dbTx) var depositID uint64 - err := e.QueryRow(ctx, addDepositSQL, deposit.LeafType, deposit.NetworkID, deposit.OriginalNetwork, deposit.OriginalAddress, deposit.Amount.String(), deposit.DestinationNetwork, deposit.DestinationAddress, deposit.BlockID, deposit.DepositCount, deposit.TxHash, deposit.Metadata).Scan(&depositID) + err := e.QueryRow(ctx, addDepositSQL, deposit.LeafType, deposit.NetworkID, deposit.OriginalNetwork, deposit.OriginalAddress, deposit.Amount.String(), + deposit.DestinationNetwork, deposit.DestinationAddress, deposit.BlockID, deposit.DepositCount, deposit.TxHash, deposit.Metadata).Scan(&depositID) return depositID, err } // AddClaim adds new claim to the storage. func (p *PostgresStorage) AddClaim(ctx context.Context, claim *etherman.Claim, dbTx pgx.Tx) error { - const addClaimSQL = "INSERT INTO sync.claim (network_id, index, orig_net, orig_addr, amount, dest_addr, block_id, tx_hash) VALUES ($1, $2, $3, $4, $5, $6, $7, $8)" + addClaimSQL := fmt.Sprintf("INSERT INTO sync.claim%[1]v (network_id, index, orig_net, orig_addr, amount, dest_addr, block_id, tx_hash) VALUES ($1, $2, $3, $4, $5, $6, $7, $8)", p.tableSuffix) e := p.getExecQuerier(dbTx) _, err := e.Exec(ctx, addClaimSQL, claim.NetworkID, claim.Index, claim.OriginalNetwork, claim.OriginalAddress, claim.Amount.String(), claim.DestinationAddress, claim.BlockID, claim.TxHash) return err @@ -130,7 +135,7 @@ func (p *PostgresStorage) AddClaim(ctx context.Context, claim *etherman.Claim, d // GetTokenMetadata gets the metadata of the dedicated token. func (p *PostgresStorage) GetTokenMetadata(ctx context.Context, networkID, destNet uint, originalTokenAddr common.Address, dbTx pgx.Tx) ([]byte, error) { var metadata []byte - const getMetadataSQL = "SELECT metadata from sync.deposit WHERE network_id = $1 AND orig_addr = $2 AND dest_net = $3 AND metadata IS NOT NULL LIMIT 1" + getMetadataSQL := fmt.Sprintf("SELECT metadata from sync.deposit%[1]v WHERE network_id = $1 AND orig_addr = $2 AND dest_net = $3 AND metadata IS NOT NULL LIMIT 1", p.tableSuffix) e := p.getExecQuerier(dbTx) err := e.QueryRow(ctx, getMetadataSQL, networkID, originalTokenAddr, destNet).Scan(&metadata) return metadata, err @@ -154,15 +159,18 @@ func (p *PostgresStorage) AddTokenWrapped(ctx context.Context, tokenWrapped *eth } } - const addTokenWrappedSQL = "INSERT INTO sync.token_wrapped (network_id, orig_net, orig_token_addr, wrapped_token_addr, block_id, name, symbol, decimals) VALUES ($1, $2, $3, $4, $5, $6, $7, $8)" + addTokenWrappedSQL := fmt.Sprintf(` + INSERT INTO sync.token_wrapped%[1]v (network_id, orig_net, orig_token_addr, wrapped_token_addr, block_id, name, symbol, decimals) + VALUES ($1, $2, $3, $4, $5, $6, $7, $8)`, p.tableSuffix) e := p.getExecQuerier(dbTx) - _, err = e.Exec(ctx, addTokenWrappedSQL, tokenWrapped.NetworkID, tokenWrapped.OriginalNetwork, tokenWrapped.OriginalTokenAddress, tokenWrapped.WrappedTokenAddress, tokenWrapped.BlockID, tokenMetadata.Name, tokenMetadata.Symbol, tokenMetadata.Decimals) + _, err = e.Exec(ctx, addTokenWrappedSQL, tokenWrapped.NetworkID, tokenWrapped.OriginalNetwork, tokenWrapped.OriginalTokenAddress, + tokenWrapped.WrappedTokenAddress, tokenWrapped.BlockID, tokenMetadata.Name, tokenMetadata.Symbol, tokenMetadata.Decimals) return err } // Reset resets the state to a block for the given DB tx. func (p *PostgresStorage) Reset(ctx context.Context, blockNumber uint64, networkID uint, dbTx pgx.Tx) error { - const resetSQL = "DELETE FROM sync.block WHERE block_num > $1 AND network_id = $2" + resetSQL := fmt.Sprintf("DELETE FROM sync.block%[1]v WHERE block_num > $1 AND network_id = $2", p.tableSuffix) e := p.getExecQuerier(dbTx) _, err := e.Exec(ctx, resetSQL, blockNumber, networkID) return err @@ -171,7 +179,7 @@ func (p *PostgresStorage) Reset(ctx context.Context, blockNumber uint64, network // GetPreviousBlock gets the offset previous L1 block respect to latest. func (p *PostgresStorage) GetPreviousBlock(ctx context.Context, networkID uint, offset uint64, dbTx pgx.Tx) (*etherman.Block, error) { var block etherman.Block - const getPreviousBlockSQL = "SELECT block_num, block_hash, parent_hash, network_id, received_at FROM sync.block WHERE network_id = $1 ORDER BY block_num DESC LIMIT 1 OFFSET $2" + getPreviousBlockSQL := fmt.Sprintf("SELECT block_num, block_hash, parent_hash, network_id, received_at FROM sync.block%[1]v WHERE network_id = $1 ORDER BY block_num DESC LIMIT 1 OFFSET $2", p.tableSuffix) e := p.getExecQuerier(dbTx) err := e.QueryRow(ctx, getPreviousBlockSQL, networkID, offset).Scan(&block.BlockNumber, &block.BlockHash, &block.ParentHash, &block.NetworkID, &block.ReceivedAt) if errors.Is(err, pgx.ErrNoRows) { @@ -183,17 +191,17 @@ func (p *PostgresStorage) GetPreviousBlock(ctx context.Context, networkID uint, // GetNumberDeposits gets the number of deposits. func (p *PostgresStorage) GetNumberDeposits(ctx context.Context, networkID uint, blockNumber uint64, dbTx pgx.Tx) (uint64, error) { var nDeposits int64 - const getNumDepositsSQL = "SELECT coalesce(MAX(deposit_cnt), -1) FROM sync.deposit as d INNER JOIN sync.block as b ON d.network_id = b.network_id AND d.block_id = b.id WHERE d.network_id = $1 AND b.block_num <= $2" + getNumDepositsSQL := fmt.Sprintf("SELECT coalesce(MAX(deposit_cnt), -1) FROM sync.deposit%[1]v as d INNER JOIN sync.block%[1]v as b ON d.network_id = b.network_id AND d.block_id = b.id WHERE d.network_id = $1 AND b.block_num <= $2", p.tableSuffix) err := p.getExecQuerier(dbTx).QueryRow(ctx, getNumDepositsSQL, networkID, blockNumber).Scan(&nDeposits) return uint64(nDeposits + 1), err } // AddTrustedGlobalExitRoot adds new global exit root which comes from the trusted sequencer. func (p *PostgresStorage) AddTrustedGlobalExitRoot(ctx context.Context, trustedExitRoot *etherman.GlobalExitRoot, dbTx pgx.Tx) (bool, error) { - const addTrustedGerSQL = ` - INSERT INTO sync.exit_root (block_id, global_exit_root, exit_roots) + addTrustedGerSQL := fmt.Sprintf(` + INSERT INTO sync.exit_root%[1]v (block_id, global_exit_root, exit_roots) VALUES (0, $1, $2) - ON CONFLICT ON CONSTRAINT UC DO NOTHING;` + ON CONFLICT ON CONSTRAINT UC DO NOTHING;`, p.tableSuffix) res, err := p.getExecQuerier(dbTx).Exec(ctx, addTrustedGerSQL, trustedExitRoot.GlobalExitRoot, pq.Array([][]byte{trustedExitRoot.ExitRoots[0][:], trustedExitRoot.ExitRoots[1][:]})) return res.RowsAffected() > 0, err } @@ -204,8 +212,11 @@ func (p *PostgresStorage) GetClaim(ctx context.Context, depositCount, networkID claim etherman.Claim amount string ) - const getClaimSQL = "SELECT index, orig_net, orig_addr, amount, dest_addr, block_id, network_id, tx_hash FROM sync.claim WHERE index = $1 AND network_id = $2" - err := p.getExecQuerier(dbTx).QueryRow(ctx, getClaimSQL, depositCount, networkID).Scan(&claim.Index, &claim.OriginalNetwork, &claim.OriginalAddress, &amount, &claim.DestinationAddress, &claim.BlockID, &claim.NetworkID, &claim.TxHash) + getClaimSQL := fmt.Sprintf(` + SELECT index, orig_net, orig_addr, amount, dest_addr, block_id, c.network_id, tx_hash, b.received_at + FROM sync.claim%[1]v as c INNER JOIN sync.block%[1]v as b ON c.network_id = b.network_id AND c.block_id = b.id + WHERE index = $1 AND c.network_id = $2`, p.tableSuffix) + err := p.getExecQuerier(dbTx).QueryRow(ctx, getClaimSQL, depositCount, networkID).Scan(&claim.Index, &claim.OriginalNetwork, &claim.OriginalAddress, &amount, &claim.DestinationAddress, &claim.BlockID, &claim.NetworkID, &claim.TxHash, &claim.Time) if errors.Is(err, pgx.ErrNoRows) { return nil, gerror.ErrStorageNotFound } @@ -219,8 +230,13 @@ func (p *PostgresStorage) GetDeposit(ctx context.Context, depositCounterUser uin deposit etherman.Deposit amount string ) - const getDepositSQL = "SELECT leaf_type, orig_net, orig_addr, amount, dest_net, dest_addr, deposit_cnt, block_id, b.block_num, d.network_id, tx_hash, metadata, ready_for_claim FROM sync.deposit as d INNER JOIN sync.block as b ON d.network_id = b.network_id AND d.block_id = b.id WHERE d.network_id = $1 AND deposit_cnt = $2" - err := p.getExecQuerier(dbTx).QueryRow(ctx, getDepositSQL, networkID, depositCounterUser).Scan(&deposit.LeafType, &deposit.OriginalNetwork, &deposit.OriginalAddress, &amount, &deposit.DestinationNetwork, &deposit.DestinationAddress, &deposit.DepositCount, &deposit.BlockID, &deposit.BlockNumber, &deposit.NetworkID, &deposit.TxHash, &deposit.Metadata, &deposit.ReadyForClaim) + getDepositSQL := fmt.Sprintf(` + SELECT leaf_type, orig_net, orig_addr, amount, dest_net, dest_addr, deposit_cnt, block_id, b.block_num, d.network_id, tx_hash, metadata, ready_for_claim + FROM sync.deposit%[1]v as d INNER JOIN sync.block%[1]v as b ON d.network_id = b.network_id AND d.block_id = b.id + WHERE d.network_id = $1 AND deposit_cnt = $2`, p.tableSuffix) + err := p.getExecQuerier(dbTx).QueryRow(ctx, getDepositSQL, networkID, depositCounterUser).Scan( + &deposit.LeafType, &deposit.OriginalNetwork, &deposit.OriginalAddress, &amount, &deposit.DestinationNetwork, &deposit.DestinationAddress, + &deposit.DepositCount, &deposit.BlockID, &deposit.BlockNumber, &deposit.NetworkID, &deposit.TxHash, &deposit.Metadata, &deposit.ReadyForClaim) if errors.Is(err, pgx.ErrNoRows) { return nil, gerror.ErrStorageNotFound } @@ -244,7 +260,7 @@ func (p *PostgresStorage) GetLatestL1SyncedExitRoot(ctx context.Context, dbTx pg ger etherman.GlobalExitRoot exitRoots [][]byte ) - const getLatestL1SyncedExitRootSQL = "SELECT block_id, global_exit_root, exit_roots FROM sync.exit_root WHERE block_id > 0 ORDER BY id DESC LIMIT 1" + getLatestL1SyncedExitRootSQL := fmt.Sprintf("SELECT block_id, global_exit_root, exit_roots FROM sync.exit_root%[1]v WHERE block_id > 0 ORDER BY id DESC LIMIT 1", p.tableSuffix) err := p.getExecQuerier(dbTx).QueryRow(ctx, getLatestL1SyncedExitRootSQL).Scan(&ger.BlockID, &ger.GlobalExitRoot, pq.Array(&exitRoots)) if err != nil { if errors.Is(err, pgx.ErrNoRows) { @@ -262,7 +278,7 @@ func (p *PostgresStorage) GetLatestTrustedExitRoot(ctx context.Context, dbTx pgx ger etherman.GlobalExitRoot exitRoots [][]byte ) - const getLatestTrustedExitRootSQL = "SELECT global_exit_root, exit_roots FROM sync.exit_root WHERE block_id = 0 ORDER BY id DESC LIMIT 1" + getLatestTrustedExitRootSQL := fmt.Sprintf("SELECT global_exit_root, exit_roots FROM sync.exit_root%[1]v WHERE block_id = 0 ORDER BY id DESC LIMIT 1", p.tableSuffix) err := p.getExecQuerier(dbTx).QueryRow(ctx, getLatestTrustedExitRootSQL).Scan(&ger.GlobalExitRoot, pq.Array(&exitRoots)) if err != nil { if errors.Is(err, pgx.ErrNoRows) { @@ -276,10 +292,11 @@ func (p *PostgresStorage) GetLatestTrustedExitRoot(ctx context.Context, dbTx pgx // GetTokenWrapped gets a specific wrapped token. func (p *PostgresStorage) GetTokenWrapped(ctx context.Context, originalNetwork uint, originalTokenAddress common.Address, dbTx pgx.Tx) (*etherman.TokenWrapped, error) { - const getWrappedTokenSQL = "SELECT network_id, orig_net, orig_token_addr, wrapped_token_addr, block_id, name, symbol, decimals FROM sync.token_wrapped WHERE orig_net = $1 AND orig_token_addr = $2" + getWrappedTokenSQL := fmt.Sprintf("SELECT network_id, orig_net, orig_token_addr, wrapped_token_addr, block_id, name, symbol, decimals FROM sync.token_wrapped%[1]v WHERE orig_net = $1 AND orig_token_addr = $2", p.tableSuffix) var token etherman.TokenWrapped - err := p.getExecQuerier(dbTx).QueryRow(ctx, getWrappedTokenSQL, originalNetwork, originalTokenAddress).Scan(&token.NetworkID, &token.OriginalNetwork, &token.OriginalTokenAddress, &token.WrappedTokenAddress, &token.BlockID, &token.Name, &token.Symbol, &token.Decimals) + err := p.getExecQuerier(dbTx).QueryRow(ctx, getWrappedTokenSQL, originalNetwork, originalTokenAddress).Scan(&token.NetworkID, &token.OriginalNetwork, + &token.OriginalTokenAddress, &token.WrappedTokenAddress, &token.BlockID, &token.Name, &token.Symbol, &token.Decimals) if errors.Is(err, pgx.ErrNoRows) { return nil, gerror.ErrStorageNotFound } @@ -298,7 +315,7 @@ func (p *PostgresStorage) GetTokenWrapped(ctx context.Context, originalNetwork u if err != nil { return nil, err } - updateWrappedTokenSQL := "UPDATE sync.token_wrapped SET name = $3, symbol = $4, decimals = $5 WHERE orig_net = $1 AND orig_token_addr = $2" //nolint: gosec + updateWrappedTokenSQL := fmt.Sprintf("UPDATE sync.token_wrapped%[1]v SET name = $3, symbol = $4, decimals = $5 WHERE orig_net = $1 AND orig_token_addr = $2", p.tableSuffix) //nolint: gosec _, err = p.getExecQuerier(dbTx).Exec(ctx, updateWrappedTokenSQL, originalNetwork, originalTokenAddress, tokenMetadata.Name, tokenMetadata.Symbol, tokenMetadata.Decimals) if err != nil { return nil, err @@ -312,7 +329,7 @@ func (p *PostgresStorage) GetTokenWrapped(ctx context.Context, originalNetwork u // GetDepositCountByRoot gets the deposit count by the root. func (p *PostgresStorage) GetDepositCountByRoot(ctx context.Context, root []byte, network uint8, dbTx pgx.Tx) (uint, error) { var depositCount uint - const getDepositCountByRootSQL = "SELECT deposit_cnt FROM mt.root WHERE root = $1 AND network = $2" + getDepositCountByRootSQL := fmt.Sprintf("SELECT deposit_cnt FROM mt.root%[1]v WHERE root = $1 AND network = $2", p.tableSuffix) err := p.getExecQuerier(dbTx).QueryRow(ctx, getDepositCountByRootSQL, root, network).Scan(&depositCount) if errors.Is(err, pgx.ErrNoRows) { return 0, gerror.ErrStorageNotFound @@ -323,7 +340,7 @@ func (p *PostgresStorage) GetDepositCountByRoot(ctx context.Context, root []byte // GetRoot gets root by the deposit count from the merkle tree. func (p *PostgresStorage) GetRoot(ctx context.Context, depositCnt uint, network uint, dbTx pgx.Tx) ([]byte, error) { var root []byte - const getRootByDepositCntSQL = "SELECT root FROM mt.root WHERE deposit_cnt = $1 AND network = $2" + getRootByDepositCntSQL := fmt.Sprintf("SELECT root FROM mt.root%[1]v WHERE deposit_cnt = $1 AND network = $2", p.tableSuffix) err := p.getExecQuerier(dbTx).QueryRow(ctx, getRootByDepositCntSQL, depositCnt, network).Scan(&root) if errors.Is(err, pgx.ErrNoRows) { return nil, gerror.ErrStorageNotFound @@ -333,14 +350,14 @@ func (p *PostgresStorage) GetRoot(ctx context.Context, depositCnt uint, network // SetRoot store the root with deposit count to the storage. func (p *PostgresStorage) SetRoot(ctx context.Context, root []byte, depositID uint64, depositCnt uint, network uint, dbTx pgx.Tx) error { - const setRootSQL = "INSERT INTO mt.root (root, deposit_id, deposit_cnt, network) VALUES ($1, $2, $3, $4);" + setRootSQL := fmt.Sprintf("INSERT INTO mt.root%[1]v (root, deposit_id, deposit_cnt, network) VALUES ($1, $2, $3, $4);", p.tableSuffix) _, err := p.getExecQuerier(dbTx).Exec(ctx, setRootSQL, root, depositID, depositCnt, network) return err } // Get gets value of key from the merkle tree. func (p *PostgresStorage) Get(ctx context.Context, key []byte, dbTx pgx.Tx) ([][]byte, error) { - const getValueByKeySQL = "SELECT value FROM mt.rht WHERE key = $1" + getValueByKeySQL := fmt.Sprintf("SELECT value FROM mt.rht%[1]v WHERE key = $1", p.tableSuffix) var data [][]byte err := p.getExecQuerier(dbTx).QueryRow(ctx, getValueByKeySQL, key).Scan(pq.Array(&data)) if errors.Is(err, pgx.ErrNoRows) { @@ -353,21 +370,21 @@ func (p *PostgresStorage) Get(ctx context.Context, key []byte, dbTx pgx.Tx) ([][ // If record with such a key already exists its assumed that the value is correct, // because it's a reverse hash table, and the key is a hash of the value func (p *PostgresStorage) Set(ctx context.Context, key []byte, value [][]byte, depositID uint64, dbTx pgx.Tx) error { - const setNodeSQL = "INSERT INTO mt.rht (deposit_id, key, value) VALUES ($1, $2, $3)" + setNodeSQL := fmt.Sprintf("INSERT INTO mt.rht%[1]v (deposit_id, key, value) VALUES ($1, $2, $3)", p.tableSuffix) _, err := p.getExecQuerier(dbTx).Exec(ctx, setNodeSQL, depositID, key, pq.Array(value)) return err } // BulkSet is similar to Set, but it inserts multiple key-value pairs into the db. func (p *PostgresStorage) BulkSet(ctx context.Context, rows [][]interface{}, dbTx pgx.Tx) error { - _, err := p.getExecQuerier(dbTx).CopyFrom(ctx, pgx.Identifier{"mt", "rht"}, []string{"key", "value", "deposit_id"}, pgx.CopyFromRows(rows)) + _, err := p.getExecQuerier(dbTx).CopyFrom(ctx, pgx.Identifier{"mt", "rht" + p.tableSuffix}, []string{"key", "value", "deposit_id"}, pgx.CopyFromRows(rows)) return err } // GetLastDepositCount gets the last deposit count from the merkle tree. func (p *PostgresStorage) GetLastDepositCount(ctx context.Context, network uint, dbTx pgx.Tx) (uint, error) { var depositCnt int64 - const getLastDepositCountSQL = "SELECT coalesce(MAX(deposit_cnt), -1) FROM mt.root WHERE network = $1" + getLastDepositCountSQL := fmt.Sprintf("SELECT coalesce(MAX(deposit_cnt), -1) FROM mt.root%[1]v WHERE network = $1", p.tableSuffix) err := p.getExecQuerier(dbTx).QueryRow(ctx, getLastDepositCountSQL, network).Scan(&depositCnt) if err != nil { return 0, nil @@ -380,7 +397,7 @@ func (p *PostgresStorage) GetLastDepositCount(ctx context.Context, network uint, // GetClaimCount gets the claim count for the destination address. func (p *PostgresStorage) GetClaimCount(ctx context.Context, destAddr string, dbTx pgx.Tx) (uint64, error) { - const getClaimCountSQL = "SELECT COUNT(*) FROM sync.claim WHERE dest_addr = $1" + getClaimCountSQL := fmt.Sprintf("SELECT COUNT(*) FROM sync.claim%[1]v WHERE dest_addr = $1", p.tableSuffix) var claimCount uint64 err := p.getExecQuerier(dbTx).QueryRow(ctx, getClaimCountSQL, common.FromHex(destAddr)).Scan(&claimCount) if errors.Is(err, pgx.ErrNoRows) { @@ -391,7 +408,7 @@ func (p *PostgresStorage) GetClaimCount(ctx context.Context, destAddr string, db // GetClaims gets the claim list which be smaller than index. func (p *PostgresStorage) GetClaims(ctx context.Context, destAddr string, limit uint, offset uint, dbTx pgx.Tx) ([]*etherman.Claim, error) { - const getClaimsSQL = "SELECT index, orig_net, orig_addr, amount, dest_addr, block_id, network_id, tx_hash FROM sync.claim WHERE dest_addr = $1 ORDER BY block_id DESC LIMIT $2 OFFSET $3" + getClaimsSQL := fmt.Sprintf("SELECT index, orig_net, orig_addr, amount, dest_addr, block_id, network_id, tx_hash FROM sync.claim%[1]v WHERE dest_addr = $1 ORDER BY block_id DESC LIMIT $2 OFFSET $3", p.tableSuffix) rows, err := p.getExecQuerier(dbTx).Query(ctx, getClaimsSQL, common.FromHex(destAddr), limit, offset) if err != nil { return nil, err @@ -415,7 +432,11 @@ func (p *PostgresStorage) GetClaims(ctx context.Context, destAddr string, limit // GetDeposits gets the deposit list which be smaller than depositCount. func (p *PostgresStorage) GetDeposits(ctx context.Context, destAddr string, limit uint, offset uint, dbTx pgx.Tx) ([]*etherman.Deposit, error) { - const getDepositsSQL = "SELECT leaf_type, orig_net, orig_addr, amount, dest_net, dest_addr, deposit_cnt, block_id, b.block_num, d.network_id, tx_hash, metadata, ready_for_claim FROM sync.deposit as d INNER JOIN sync.block as b ON d.network_id = b.network_id AND d.block_id = b.id WHERE dest_addr = $1 ORDER BY d.block_id DESC, d.deposit_cnt DESC LIMIT $2 OFFSET $3" + getDepositsSQL := fmt.Sprintf(` + SELECT d.id, leaf_type, orig_net, orig_addr, amount, dest_net, dest_addr, deposit_cnt, block_id, b.block_num, d.network_id, tx_hash, metadata, ready_for_claim, b.received_at + FROM sync.deposit%[1]v as d INNER JOIN sync.block%[1]v as b ON d.network_id = b.network_id AND d.block_id = b.id + WHERE dest_addr = $1 + ORDER BY d.block_id DESC, d.deposit_cnt DESC LIMIT $2 OFFSET $3`, p.tableSuffix) rows, err := p.getExecQuerier(dbTx).Query(ctx, getDepositsSQL, common.FromHex(destAddr), limit, offset) if err != nil { return nil, err @@ -428,7 +449,40 @@ func (p *PostgresStorage) GetDeposits(ctx context.Context, destAddr string, limi deposit etherman.Deposit amount string ) - err = rows.Scan(&deposit.LeafType, &deposit.OriginalNetwork, &deposit.OriginalAddress, &amount, &deposit.DestinationNetwork, &deposit.DestinationAddress, &deposit.DepositCount, &deposit.BlockID, &deposit.BlockNumber, &deposit.NetworkID, &deposit.TxHash, &deposit.Metadata, &deposit.ReadyForClaim) + err = rows.Scan(&deposit.Id, &deposit.LeafType, &deposit.OriginalNetwork, &deposit.OriginalAddress, &amount, &deposit.DestinationNetwork, &deposit.DestinationAddress, + &deposit.DepositCount, &deposit.BlockID, &deposit.BlockNumber, &deposit.NetworkID, &deposit.TxHash, &deposit.Metadata, &deposit.ReadyForClaim, &deposit.Time) + if err != nil { + return nil, err + } + deposit.Amount, _ = new(big.Int).SetString(amount, 10) //nolint:gomnd + deposits = append(deposits, &deposit) + } + + return deposits, nil +} + +// GetPendingTransactions gets all the deposit transactions of a user that have not been claimed +func (p *PostgresStorage) GetPendingTransactions(ctx context.Context, destAddr string, limit uint, offset uint, dbTx pgx.Tx) ([]*etherman.Deposit, error) { + getDepositsSQL := fmt.Sprintf(`SELECT d.id, leaf_type, orig_net, orig_addr, amount, dest_net, dest_addr, deposit_cnt, block_id, b.block_num, d.network_id, tx_hash, metadata, ready_for_claim, b.received_at + FROM sync.deposit%[1]v as d INNER JOIN sync.block%[1]v as b ON d.network_id = b.network_id AND d.block_id = b.id + WHERE dest_addr = $1 AND NOT EXISTS + (SELECT 1 FROM sync.claim%[1]v as c WHERE c.index = d.deposit_cnt AND c.network_id = d.dest_net) + ORDER BY d.block_id DESC, d.deposit_cnt DESC LIMIT $2 OFFSET $3`, p.tableSuffix) + + rows, err := p.getExecQuerier(dbTx).Query(ctx, getDepositsSQL, common.FromHex(destAddr), limit, offset) + if err != nil { + return nil, err + } + + deposits := make([]*etherman.Deposit, 0, len(rows.RawValues())) + + for rows.Next() { + var ( + deposit etherman.Deposit + amount string + ) + err = rows.Scan(&deposit.Id, &deposit.LeafType, &deposit.OriginalNetwork, &deposit.OriginalAddress, &amount, &deposit.DestinationNetwork, &deposit.DestinationAddress, + &deposit.DepositCount, &deposit.BlockID, &deposit.BlockNumber, &deposit.NetworkID, &deposit.TxHash, &deposit.Metadata, &deposit.ReadyForClaim, &deposit.Time) if err != nil { return nil, err } @@ -441,7 +495,7 @@ func (p *PostgresStorage) GetDeposits(ctx context.Context, destAddr string, limi // GetDepositCount gets the deposit count for the destination address. func (p *PostgresStorage) GetDepositCount(ctx context.Context, destAddr string, dbTx pgx.Tx) (uint64, error) { - const getDepositCountSQL = "SELECT COUNT(*) FROM sync.deposit WHERE dest_addr = $1" + getDepositCountSQL := fmt.Sprintf("SELECT COUNT(*) FROM sync.deposit%[1]v WHERE dest_addr = $1", p.tableSuffix) var depositCount uint64 err := p.getExecQuerier(dbTx).QueryRow(ctx, getDepositCountSQL, common.FromHex(destAddr)).Scan(&depositCount) return depositCount, err @@ -449,18 +503,18 @@ func (p *PostgresStorage) GetDepositCount(ctx context.Context, destAddr string, // UpdateBlocksForTesting updates the hash of blocks. func (p *PostgresStorage) UpdateBlocksForTesting(ctx context.Context, networkID uint, blockNum uint64, dbTx pgx.Tx) error { - const updateBlocksSQL = "UPDATE sync.block SET block_hash = SUBSTRING(block_hash FROM 1 FOR LENGTH(block_hash)-1) || '\x61' WHERE network_id = $1 AND block_num >= $2" + updateBlocksSQL := fmt.Sprintf("UPDATE sync.block%[1]v SET block_hash = SUBSTRING(block_hash FROM 1 FOR LENGTH(block_hash)-1) || '\x61' WHERE network_id = $1 AND block_num >= $2", p.tableSuffix) _, err := p.getExecQuerier(dbTx).Exec(ctx, updateBlocksSQL, networkID, blockNum) return err } // UpdateL1DepositsStatus updates the ready_for_claim status of L1 deposits. func (p *PostgresStorage) UpdateL1DepositsStatus(ctx context.Context, exitRoot []byte, dbTx pgx.Tx) ([]*etherman.Deposit, error) { - const updateDepositsStatusSQL = `UPDATE sync.deposit SET ready_for_claim = true + updateDepositsStatusSQL := fmt.Sprintf(`UPDATE sync.deposit%[1]v SET ready_for_claim = true WHERE deposit_cnt <= - (SELECT deposit_cnt FROM mt.root WHERE root = $1 AND network = 0) + (SELECT deposit_cnt FROM mt.root%[1]v WHERE root = $1 AND network = 0) AND network_id = 0 AND ready_for_claim = false - RETURNING leaf_type, orig_net, orig_addr, amount, dest_net, dest_addr, deposit_cnt, block_id, network_id, tx_hash, metadata, ready_for_claim;` + RETURNING leaf_type, orig_net, orig_addr, amount, dest_net, dest_addr, deposit_cnt, block_id, network_id, tx_hash, metadata, ready_for_claim;`, p.tableSuffix) rows, err := p.getExecQuerier(dbTx).Query(ctx, updateDepositsStatusSQL, exitRoot) if err != nil { return nil, err @@ -472,7 +526,8 @@ func (p *PostgresStorage) UpdateL1DepositsStatus(ctx context.Context, exitRoot [ deposit etherman.Deposit amount string ) - err = rows.Scan(&deposit.LeafType, &deposit.OriginalNetwork, &deposit.OriginalAddress, &amount, &deposit.DestinationNetwork, &deposit.DestinationAddress, &deposit.DepositCount, &deposit.BlockID, &deposit.NetworkID, &deposit.TxHash, &deposit.Metadata, &deposit.ReadyForClaim) + err = rows.Scan(&deposit.LeafType, &deposit.OriginalNetwork, &deposit.OriginalAddress, &amount, &deposit.DestinationNetwork, &deposit.DestinationAddress, + &deposit.DepositCount, &deposit.BlockID, &deposit.NetworkID, &deposit.TxHash, &deposit.Metadata, &deposit.ReadyForClaim) if err != nil { return nil, err } @@ -484,26 +539,26 @@ func (p *PostgresStorage) UpdateL1DepositsStatus(ctx context.Context, exitRoot [ // UpdateL2DepositsStatus updates the ready_for_claim status of L2 deposits. func (p *PostgresStorage) UpdateL2DepositsStatus(ctx context.Context, exitRoot []byte, networkID uint, dbTx pgx.Tx) error { - const updateDepositsStatusSQL = `UPDATE sync.deposit SET ready_for_claim = true + updateDepositsStatusSQL := fmt.Sprintf(`UPDATE sync.deposit%[1]v SET ready_for_claim = true WHERE deposit_cnt <= - (SELECT deposit_cnt FROM mt.root WHERE root = $1 AND network = $2) - AND network_id = $2 AND ready_for_claim = false;` + (SELECT deposit_cnt FROM mt.root%[1]v WHERE root = $1 AND network = $2) + AND network_id = $2 AND ready_for_claim = false;`, p.tableSuffix) _, err := p.getExecQuerier(dbTx).Exec(ctx, updateDepositsStatusSQL, exitRoot, networkID) return err } // AddClaimTx adds a claim monitored transaction to the storage. func (p *PostgresStorage) AddClaimTx(ctx context.Context, mTx ctmtypes.MonitoredTx, dbTx pgx.Tx) error { - const addMonitoredTxSQL = `INSERT INTO sync.monitored_txs + addMonitoredTxSQL := fmt.Sprintf(`INSERT INTO sync.monitored_txs%[1]v (id, block_id, from_addr, to_addr, nonce, value, data, gas, status, history, created_at, updated_at) - VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12)` + VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12)`, p.tableSuffix) _, err := p.getExecQuerier(dbTx).Exec(ctx, addMonitoredTxSQL, mTx.ID, mTx.BlockID, mTx.From, mTx.To, mTx.Nonce, mTx.Value.String(), mTx.Data, mTx.Gas, mTx.Status, pq.Array(mTx.HistoryHashSlice()), time.Now().UTC(), time.Now().UTC()) return err } // UpdateClaimTx updates a claim monitored transaction in the storage. func (p *PostgresStorage) UpdateClaimTx(ctx context.Context, mTx ctmtypes.MonitoredTx, dbTx pgx.Tx) error { - const updateMonitoredTxSQL = `UPDATE sync.monitored_txs + updateMonitoredTxSQL := fmt.Sprintf(`UPDATE sync.monitored_txs%[1]v SET block_id = $2 , from_addr = $3 , to_addr = $4 @@ -514,14 +569,14 @@ func (p *PostgresStorage) UpdateClaimTx(ctx context.Context, mTx ctmtypes.Monito , status = $9 , history = $10 , updated_at = $11 - WHERE id = $1` + WHERE id = $1`, p.tableSuffix) _, err := p.getExecQuerier(dbTx).Exec(ctx, updateMonitoredTxSQL, mTx.ID, mTx.BlockID, mTx.From, mTx.To, mTx.Nonce, mTx.Value.String(), mTx.Data, mTx.Gas, mTx.Status, pq.Array(mTx.HistoryHashSlice()), time.Now().UTC()) return err } // GetClaimTxsByStatus gets the monitored transactions by status. func (p *PostgresStorage) GetClaimTxsByStatus(ctx context.Context, statuses []ctmtypes.MonitoredTxStatus, dbTx pgx.Tx) ([]ctmtypes.MonitoredTx, error) { - const getMonitoredTxsSQL = "SELECT * FROM sync.monitored_txs WHERE status = ANY($1) ORDER BY created_at ASC" + getMonitoredTxsSQL := fmt.Sprintf("SELECT * FROM sync.monitored_txs%[1]v WHERE status = ANY($1) ORDER BY created_at ASC", p.tableSuffix) rows, err := p.getExecQuerier(dbTx).Query(ctx, getMonitoredTxsSQL, pq.Array(statuses)) if errors.Is(err, pgx.ErrNoRows) { return []ctmtypes.MonitoredTx{}, nil @@ -553,7 +608,32 @@ func (p *PostgresStorage) GetClaimTxsByStatus(ctx context.Context, statuses []ct // UpdateDepositsStatusForTesting updates the ready_for_claim status of all deposits for testing. func (p *PostgresStorage) UpdateDepositsStatusForTesting(ctx context.Context, dbTx pgx.Tx) error { - const updateDepositsStatusSQL = "UPDATE sync.deposit SET ready_for_claim = true;" + updateDepositsStatusSQL := fmt.Sprintf("UPDATE sync.deposit%[1]v SET ready_for_claim = true;", p.tableSuffix) _, err := p.getExecQuerier(dbTx).Exec(ctx, updateDepositsStatusSQL) return err } + +// GetAllMainCoins returns all the coin info from the main_coins table +func (p *PostgresStorage) GetAllMainCoins(ctx context.Context, limit uint, offset uint, dbTx pgx.Tx) ([]*pb.CoinInfo, error) { + getCoinsSQL := fmt.Sprintf(`SELECT symbol, name, decimals, encode(address, 'hex'), chain_id, network_id, logo_link + FROM common.main_coins%[1]v WHERE is_deleted = false ORDER BY id LIMIT $1 OFFSET $2`, p.tableSuffix) + rows, err := p.getExecQuerier(dbTx).Query(ctx, getCoinsSQL, limit, offset) + if err != nil { + return nil, err + } + + var result []*pb.CoinInfo + for rows.Next() { + coin := &pb.CoinInfo{} + err = rows.Scan(&coin.Symbol, &coin.Name, &coin.Decimals, &coin.Address, &coin.ChainId, &coin.NetworkId, &coin.LogoLink) + if err != nil { + log.Errorf("GetAllMainCoins scan row error[%v]", err) + return nil, err + } + if coin.Address != "" { + coin.Address = "0x" + coin.Address + } + result = append(result, coin) + } + return result, nil +} diff --git a/db/storage.go b/db/storage.go index afd4ffc4..2488ab63 100644 --- a/db/storage.go +++ b/db/storage.go @@ -12,12 +12,13 @@ type Storage interface{} func NewStorage(cfg Config) (Storage, error) { if cfg.Database == "postgres" { pg, err := pgstorage.NewPostgresStorage(pgstorage.Config{ - Name: cfg.Name, - User: cfg.User, - Password: cfg.Password, - Host: cfg.Host, - Port: cfg.Port, - MaxConns: cfg.MaxConns, + Name: cfg.Name, + User: cfg.User, + Password: cfg.Password, + Host: cfg.Host, + Port: cfg.Port, + MaxConns: cfg.MaxConns, + TableSuffix: cfg.TableSuffix, }) return pg, err } diff --git a/docker-compose.yml b/docker-compose.yml index 0adac9d2..aa5d32f2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -55,6 +55,45 @@ services: - POSTGRES_DB=test_db command: ["postgres", "-N", "500"] + zkevm-bridge-redis: + container_name: zkevm-bridge-redis + image: redis + deploy: + resources: + limits: + memory: 2G + reservations: + memory: 1G + expose: + - 6379 + ports: + - 6379:6379 + environment: + - REDIS_PASSWORD=my_password + - REDIS_PORT=6379 + - REDIS_DATABASES=8 + + kafka-zookeeper: + image: wurstmeister/zookeeper + container_name: kafka-zookeeper + ports: + - "2181:2181" + expose: + - 2181 + + zkevm-bridge-coin-kafka: + image: wurstmeister/kafka + container_name: zkevm-bridge-coin-kafka + expose: + - 9092 + environment: + KAFKA_ADVERTISED_LISTENERS: INSIDE://:9092,OUTSIDE://localhost:9123 + KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT + KAFKA_LISTENERS: INSIDE://0.0.0.0:9092,OUTSIDE://0.0.0.0:9123 + KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE + KAFKA_ZOOKEEPER_CONNECT: kafka-zookeeper:2181 + KAFKA_CREATE_TOPICS: "explorer_chainAddressPrice_push:1:1" + zkevm-node: container_name: zkevm-node image: hermeznetwork/zkevm-node:v0.0.7 @@ -111,7 +150,19 @@ services: volumes: - ./test/test.keystore.claimtx:/pk/keystore.claimtxmanager - ./config/config.local.toml:/app/config.toml + - ./sentinel/config.json:/app/sentinel_config.json + command: + - "/bin/sh" + - "-c" + - "/app/zkevm-bridge run --cfg /app/config.toml" + + zkevm-bridge-kafka-consumer: + container_name: zkevm-bridge-kafka-consumer + image: zkevm-bridge-service + volumes: + - ./config/config.local.toml:/app/config.toml + - ./coinmiddleware/root-ca-cert:/app/root-ca-cert command: - "/bin/sh" - "-c" - - "/app/zkevm-bridge run --cfg /app/config.toml" \ No newline at end of file + - "/app/zkevm-bridge runKafkaConsumer --cfg /app/config.toml" \ No newline at end of file diff --git a/etherman/config.go b/etherman/config.go index 7edf6b49..2094191e 100644 --- a/etherman/config.go +++ b/etherman/config.go @@ -2,6 +2,8 @@ package etherman // Config represents the configuration of the etherman type Config struct { - L1URL string `mapstructure:"L1URL"` - L2URLs []string `mapstructure:"L2URLs"` + L1URL string `mapstructure:"L1URL"` + L2URLs []string `mapstructure:"L2URLs"` + L1ChainId uint `mapstructure:"L1ChainId"` + L2ChainIds []uint `mapstructure:"L2ChainIds"` } diff --git a/etherman/types.go b/etherman/types.go index 61852412..998928d2 100644 --- a/etherman/types.go +++ b/etherman/types.go @@ -45,6 +45,8 @@ type Deposit struct { Metadata []byte // it is only used for the bridge service ReadyForClaim bool + Time time.Time + Id uint64 } // Claim struct @@ -58,6 +60,7 @@ type Claim struct { BlockNumber uint64 NetworkID uint TxHash common.Hash + Time time.Time } // TokenWrapped struct diff --git a/go.mod b/go.mod index e5969ac1..bcb0e434 100644 --- a/go.mod +++ b/go.mod @@ -4,6 +4,9 @@ go 1.19 require ( github.com/0xPolygonHermez/zkevm-node v0.1.3 + github.com/IBM/sarama v1.41.2 + github.com/alibaba/sentinel-golang v1.0.4 + github.com/alibaba/sentinel-golang/pkg/adapters/grpc v0.0.0-20230626085943-08071855bc67 github.com/ethereum/go-ethereum v1.12.0 github.com/gobuffalo/packr/v2 v2.8.3 github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 @@ -13,11 +16,13 @@ require ( github.com/jackc/pgx/v4 v4.18.1 github.com/lib/pq v1.10.9 github.com/mitchellh/mapstructure v1.5.0 + github.com/pkg/errors v0.9.1 + github.com/redis/go-redis/v9 v9.1.0 github.com/rubenv/sql-migrate v1.5.2 github.com/spf13/viper v1.16.0 github.com/stretchr/testify v1.8.4 github.com/urfave/cli/v2 v2.25.7 - golang.org/x/crypto v0.11.0 + golang.org/x/crypto v0.13.0 google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc google.golang.org/grpc v1.57.0 google.golang.org/protobuf v1.31.0 @@ -45,8 +50,12 @@ require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/deckarep/golang-set/v2 v2.1.0 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect + github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect github.com/dlclark/regexp2 v1.7.0 // indirect github.com/dop251/goja v0.0.0-20230122112309-96b1610dd4f7 // indirect + github.com/eapache/go-resiliency v1.4.0 // indirect + github.com/eapache/go-xerial-snappy v0.0.0-20230731223053-c322873962e3 // indirect + github.com/eapache/queue v1.1.0 // indirect github.com/emirpasic/gods v1.18.1 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/gballet/go-libpcsclite v0.0.0-20191108122812-4678299bea08 // indirect @@ -68,6 +77,9 @@ require ( github.com/google/gofuzz v1.2.0 // indirect github.com/google/uuid v1.3.0 // indirect github.com/gorilla/websocket v1.5.0 // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/hashicorp/go-uuid v1.0.3 // indirect github.com/hashicorp/hcl v1.0.1-0.20180906183839-65a6292f0157 // indirect github.com/hermeznetwork/tracerr v0.3.2 // indirect github.com/holiman/bloomfilter/v2 v2.0.3 // indirect @@ -84,9 +96,14 @@ require ( github.com/jackc/puddle v1.3.0 // indirect github.com/jackpal/go-nat-pmp v1.0.2 // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect + github.com/jcmturner/aescts/v2 v2.0.0 // indirect + github.com/jcmturner/dnsutils/v2 v2.0.0 // indirect + github.com/jcmturner/gofork v1.7.6 // indirect + github.com/jcmturner/gokrb5/v8 v8.4.4 // indirect + github.com/jcmturner/rpc/v2 v2.0.3 // indirect github.com/karrick/godirwalk v1.17.0 // indirect github.com/kevinburke/ssh_config v1.2.0 // indirect - github.com/klauspost/compress v1.15.15 // indirect + github.com/klauspost/compress v1.16.7 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/logrusorgru/aurora v2.0.3+incompatible // indirect @@ -98,17 +115,19 @@ require ( github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/olekukonko/tablewriter v0.0.5 // indirect github.com/pelletier/go-toml/v2 v2.0.8 // indirect + github.com/pierrec/lz4/v4 v4.1.18 // indirect github.com/pjbgf/sha1cd v0.3.0 // indirect - github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_golang v1.16.0 // indirect github.com/prometheus/client_model v0.4.0 // indirect github.com/prometheus/common v0.44.0 // indirect github.com/prometheus/procfs v0.10.1 // indirect + github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect github.com/rogpeppe/go-internal v1.10.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/sergi/go-diff v1.2.0 // indirect github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible // indirect + github.com/shirou/gopsutil/v3 v3.21.6 // indirect github.com/sirupsen/logrus v1.9.0 // indirect github.com/skeema/knownhosts v1.2.0 // indirect github.com/spf13/afero v1.9.5 // indirect @@ -132,17 +151,18 @@ require ( go.uber.org/zap v1.24.0 // indirect golang.org/x/exp v0.0.0-20230206171751-46f607a40771 // indirect golang.org/x/mod v0.9.0 // indirect - golang.org/x/net v0.12.0 // indirect + golang.org/x/net v0.15.0 // indirect golang.org/x/sync v0.3.0 // indirect - golang.org/x/sys v0.10.0 // indirect - golang.org/x/term v0.10.0 // indirect - golang.org/x/text v0.11.0 // indirect + golang.org/x/sys v0.12.0 // indirect + golang.org/x/term v0.12.0 // indirect + golang.org/x/text v0.13.0 // indirect golang.org/x/tools v0.7.0 // indirect google.golang.org/genproto v0.0.0-20230526203410-71b5a4ffd15e // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect gopkg.in/warnings.v0 v0.1.2 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 94d3bafb..45c24afc 100644 --- a/go.sum +++ b/go.sum @@ -50,7 +50,10 @@ github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3 github.com/CloudyKit/jet/v3 v3.0.0/go.mod h1:HKQPgSJmdK8hdoAbKUUWajkHyHo4RaU5rMdUywE7VMo= github.com/DataDog/zstd v1.5.2 h1:vUG4lAyuPCXO0TLbXvPv7EB7cNK1QV/luu55UHLrrn8= github.com/DataDog/zstd v1.5.2/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= +github.com/IBM/sarama v1.41.2 h1:ZDBZfGPHAD4uuAtSv4U22fRZBgst0eEwGFzLj0fb85c= +github.com/IBM/sarama v1.41.2/go.mod h1:xdpu7sd6OE1uxNdjYTSKUfY8FaKkJES9/+EyjSgiGQk= github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY= +github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= github.com/Masterminds/semver/v3 v3.2.0 h1:3MEsd0SM6jqZojhjLWWeBY+Kcjy9i6MQAeY7YgDP83g= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= @@ -60,35 +63,61 @@ github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEV github.com/ProtonMail/go-crypto v0.0.0-20230717121422-5aa5874ade95 h1:KLq8BE0KwCL+mmXnjLWEAOYO+2l2AE4YMmqG1ZpZHBs= github.com/ProtonMail/go-crypto v0.0.0-20230717121422-5aa5874ade95/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0= +github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= +github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d h1:G0m3OIz70MZUWq3EgK3CesDbo8upS2Vm9/P3FtgI+Jk= github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/VictoriaMetrics/fastcache v1.6.0 h1:C/3Oi3EiBCqufydp1neRZkqcwmEiuRT9c3fqvvgKm5o= github.com/VictoriaMetrics/fastcache v1.6.0/go.mod h1:0qHz5QP0GMX4pfmMA/zt5RgfNuXJrTP0zS7DqpHGGTw= +github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/acomagu/bufpipe v1.0.4 h1:e3H4WUzM3npvo5uv95QuJM3cQspFNtFBzvJ2oNjKIDQ= github.com/acomagu/bufpipe v1.0.4/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= +github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/alibaba/sentinel-golang v1.0.2/go.mod h1:QsB99f/z35D2AiMrAWwgWE85kDTkBUIkcmPrRt+61NI= +github.com/alibaba/sentinel-golang v1.0.4 h1:i0wtMvNVdy7vM4DdzYrlC4r/Mpk1OKUUBurKKkWhEo8= +github.com/alibaba/sentinel-golang v1.0.4/go.mod h1:Lag5rIYyJiPOylK8Kku2P+a23gdKMMqzQS7wTnjWEpk= +github.com/alibaba/sentinel-golang/pkg/adapters/grpc v0.0.0-20230626085943-08071855bc67 h1:uYvcJLVrSv32swzqVRMvurEiYq40iOSvUFUfV67qRdw= +github.com/alibaba/sentinel-golang/pkg/adapters/grpc v0.0.0-20230626085943-08071855bc67/go.mod h1:wOJbMtkzLxlDKDB0LnJKXLfGNqd3/GGBk4x2LNWmjRs= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/allegro/bigcache v1.2.1 h1:hg1sY1raCwic3Vnsvje6TT7/pnZba83LeFck5NrFKSc= github.com/allegro/bigcache v1.2.1/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= +github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= +github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= +github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= github.com/aymerick/raymond v2.0.3-0.20180322193309-b565731e1464+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM= +github.com/bsm/ginkgo/v2 v2.9.5 h1:rtVBYPs3+TC5iLUVOis1B9tjLTup7Cj5IfzosKtvTJ0= +github.com/bsm/gomega v1.26.0 h1:LhQm+AFcgV2M0WyKroMASzAzCAJVpAxQXv4SaI9a69Y= github.com/btcsuite/btcd v0.22.1 h1:CnwP9LM/M9xuRrGSCGeMVs9iv09uMqwsVX7EeIpgV2c= github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= +github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= +github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/cp v1.1.1 h1:nCb6ZLdB7NRaqsm91JtQTAme2SKJzXVsdPIPkyJr1MU= github.com/cespare/cp v1.1.1/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= @@ -98,6 +127,7 @@ github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cloudflare/circl v1.3.3 h1:fE/Qz0QdIGqeWfnwq0RE0R7MI51s0M2E4Ga9kq5AEMs= github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= @@ -106,6 +136,7 @@ github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnht github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I= github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= +github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/cockroachdb/datadriven v1.0.2 h1:H9MtNqVoVhvd9nCBwOyDjUEdZCREqbIdCJD93PBm/jA= github.com/cockroachdb/datadriven v1.0.2/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= github.com/cockroachdb/errors v1.9.1 h1:yFVvsI0VxmRShfawbt/laCIDy/mtTqqnvoNgiy5bEV8= @@ -117,16 +148,20 @@ github.com/cockroachdb/pebble v0.0.0-20230209160836-829675f94811 h1:ytcWPaNPhNoG github.com/cockroachdb/pebble v0.0.0-20230209160836-829675f94811/go.mod h1:Nb5lgvnQ2+oGlE/EyZy4+2/CxRh9KfvCXnag1vtpxVM= github.com/cockroachdb/redact v1.1.3 h1:AKZds10rFSIj7qADf0g46UixK8NNLwWTNdCIGS5wfSQ= github.com/cockroachdb/redact v1.1.3/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/codegangsta/inject v0.0.0-20150114235600-33e0aa1cb7c0/go.mod h1:4Zcjuz89kmFXt9morQgcfYZAYZ5n8WHjt81YYWIwtTM= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= @@ -141,7 +176,10 @@ github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0/go.mod h1:DZGJHZMqrU4JJqFAWUS2UO1+lbSKsdiOoYi9Zzey7Fc= github.com/dgraph-io/badger v1.6.0/go.mod h1:zwt7syl517jmP8s94KqSxTlM6IMsdhYy6psNgSztDR4= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= +github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= github.com/dlclark/regexp2 v1.7.0 h1:7lJfhqlPssTb1WQx4yvTHN0uElPEv52sbaECrAQxjAo= github.com/dlclark/regexp2 v1.7.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= @@ -152,11 +190,22 @@ github.com/dop251/goja v0.0.0-20230122112309-96b1610dd4f7 h1:kgvzE5wLsLa7XKfV85V github.com/dop251/goja v0.0.0-20230122112309-96b1610dd4f7/go.mod h1:yRkwfj0CBpOGre+TwBsqPV0IH0Pk73e4PXJOeNDboGs= github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA7c8pLvoGndExHudxTDKZ84Pyvv+90pbBjbTz0Y= github.com/dop251/goja_nodejs v0.0.0-20211022123610-8dd9abb0616d/go.mod h1:DngW8aVqWbuLRMHItjPUyqdj+HWPvnQe8V8y1nDpIbM= +github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= +github.com/eapache/go-resiliency v1.4.0 h1:3OK9bWpPk5q6pbFAaYSEwD9CLUSHG8bnZuqX2yMt3B0= +github.com/eapache/go-resiliency v1.4.0/go.mod h1:5yPzW0MIvSe0JDsv0v+DvcjEv2FyD6iZYSs1ZI+iQho= +github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= +github.com/eapache/go-xerial-snappy v0.0.0-20230731223053-c322873962e3 h1:Oy0F4ALJ04o5Qqpdz8XLIpNA3WM/iSIXqxtqo7UGVws= +github.com/eapache/go-xerial-snappy v0.0.0-20230731223053-c322873962e3/go.mod h1:YvSRo5mw33fLEx1+DlK6L2VV43tJt5Eyel9n9XBcR+0= +github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc= +github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= +github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM= github.com/elazarl/goproxy v0.0.0-20221015165544-a0805db90819 h1:RIB4cRk+lBqKK3Oy0r2gRX4ui7tuhiZq2SuTtTCi0/0= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= +github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -171,6 +220,9 @@ github.com/fasthttp-contrib/websocket v0.0.0-20160511215533-1f3b11f56072/go.mod github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5 h1:FtmdgXiUlNeRsoNMFlKLDt+S+6hbjVMEW6RGQ7aUf7c= +github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= +github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= +github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= @@ -202,13 +254,21 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2 github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gorp/gorp/v3 v3.1.0 h1:ItKF/Vbuj31dmV4jxA1qblpSwkl9g1typ24xoe70IGs= github.com/go-gorp/gorp/v3 v3.1.0/go.mod h1:dLEjIyyRNiXvNZ8PSmzpt1GsWAUK8kjVhEpjH8TixEw= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= github.com/go-martini/martini v0.0.0-20170121215854-22fa46961aab/go.mod h1:/P9AEU963A2AYjv4d1V5eVL1CQbEJq6aCNHDDjibzu8= +github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM= +github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-sourcemap/sourcemap v2.1.3+incompatible h1:W1iEw64niKVGogNgBN3ePyLFfuisuzeidWPMPWmECqU= github.com/go-sourcemap/sourcemap v2.1.3+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= +github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= @@ -231,8 +291,11 @@ github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14j github.com/gofrs/uuid v4.0.0+incompatible h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw= github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/googleapis v0.0.0-20180223154316-0cd9801be74a/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= +github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/gogo/status v1.1.0/go.mod h1:BFv9nrluPLmrS0EmGVvLaPNmRosr9KapBYd5/hpY1WM= @@ -241,6 +304,7 @@ github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzq github.com/golang-jwt/jwt/v4 v4.3.0 h1:kHL1vqdqWNfATmA0FNMdmZNMyZI1U6O31X4rlIPoBog= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE= +github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -273,6 +337,7 @@ github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= @@ -313,6 +378,8 @@ github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -320,25 +387,43 @@ github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+ github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= +github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= +github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 h1:YBftPWNWd4WwGqtY2yeZL2ef8rHAxPBD8KFhJpmcqms= github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0/go.mod h1:YN5jB8ie0yfIUg6VvR9Kz84aCaG7AsGZnLjhHbUqwPg= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= +github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-bexpr v0.1.10 h1:9kuI5PFotCboP3dkDYFr/wi0gg0QVbSNz5oFRpxn4uE= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8= +github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= @@ -359,6 +444,7 @@ github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iU github.com/holiman/uint256 v1.2.3 h1:K8UWO1HUJpRMXBxbmaY1Y8IAMZC/RsKB+ArEnnK4l5o= github.com/holiman/uint256 v1.2.3/go.mod h1:SC8Ryt4n+UBbPbIBKaG9zbbDlp4jOru9xFZmPzLUTxw= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= github.com/huin/goupnp v1.0.3 h1:N8No57ls+MnjlB+JPiCVSOyy/ot7MJTqlo7rn+NYSqQ= github.com/huin/goupnp v1.0.3/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y= github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= @@ -371,6 +457,7 @@ github.com/iden3/go-iden3-crypto v0.0.15 h1:4MJYlrot1l31Fzlo2sF56u7EVFeHHJkxGXXZ github.com/iden3/go-iden3-crypto v0.0.15/go.mod h1:dLpM4vEPJ3nDHzhWFXDjzkn1qHoBeOT/3UEhXsEsP3E= github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/invopop/jsonschema v0.7.0 h1:2vgQcBz1n256N+FpX3Jq7Y17AjYt46Ig3zIWyy770So= github.com/invopop/jsonschema v0.7.0/go.mod h1:O9uiLokuu0+MGFlyiaqtWxwqJm41/+8Nj0lD7A36YH0= github.com/iris-contrib/blackfriday v2.0.0+incompatible/go.mod h1:UzZ2bDEoaSGPbkg6SAB4att1aAwTmVIx/5gCVqeyUdI= @@ -432,12 +519,32 @@ github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7Bd github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= +github.com/jcmturner/aescts/v2 v2.0.0 h1:9YKLH6ey7H4eDBXW8khjYslgyqG2xZikXP0EQFKrle8= +github.com/jcmturner/aescts/v2 v2.0.0/go.mod h1:AiaICIRyfYg35RUkr8yESTqvSy7csK90qZ5xfvvsoNs= +github.com/jcmturner/dnsutils/v2 v2.0.0 h1:lltnkeZGL0wILNvrNiVCR6Ro5PGU/SeBvVO/8c/iPbo= +github.com/jcmturner/dnsutils/v2 v2.0.0/go.mod h1:b0TnjGOvI/n42bZa+hmXL+kFJZsFT7G4t3HTlQ184QM= +github.com/jcmturner/gofork v1.7.6 h1:QH0l3hzAU1tfT3rZCnW5zXl+orbkNMMRGJfdJjHVETg= +github.com/jcmturner/gofork v1.7.6/go.mod h1:1622LH6i/EZqLloHfE7IeZ0uEJwMSUyQ/nDd82IeqRo= +github.com/jcmturner/goidentity/v6 v6.0.1 h1:VKnZd2oEIMorCTsFBnJWbExfNN7yZr3EhJAxwOkZg6o= +github.com/jcmturner/goidentity/v6 v6.0.1/go.mod h1:X1YW3bgtvwAXju7V3LCIMpY0Gbxyjn/mY9zx4tFonSg= +github.com/jcmturner/gokrb5/v8 v8.4.4 h1:x1Sv4HaTpepFkXbt2IkL29DXRf8sOfZXo8eRKh687T8= +github.com/jcmturner/gokrb5/v8 v8.4.4/go.mod h1:1btQEpgT6k+unzCwX1KdWMEwPPkkgBtP+F6aCACiMrs= +github.com/jcmturner/rpc/v2 v2.0.3 h1:7FXXj8Ti1IaVFpSAziCZWNzbNuZmnvw/i6CqLNdWfZY= +github.com/jcmturner/rpc/v2 v2.0.3/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJki3ELg/Hc= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= github.com/karrick/godirwalk v1.16.1/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk= github.com/karrick/godirwalk v1.17.0 h1:b4kY7nqDdioR/6qnbHQyDvmA17u5G1cZ6J+CZXwSWoI= @@ -449,16 +556,19 @@ github.com/kataras/pio v0.0.2/go.mod h1:hAoW0t9UmXi4R5Oyq5Z4irTbaTsOemSrDGUtaTl7 github.com/kataras/sitemap v0.0.5/go.mod h1:KY2eugMKiPwsJgx7+U103YZehfvNGOXURubcGyk0Bz8= github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.9.7/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.15.15 h1:EF27CXIuDsYJ6mmvtBRlEuB2UVOqHG1tAXgZ7yIO+lw= -github.com/klauspost/compress v1.15.15/go.mod h1:ZcK2JAFqKOpnBlxcLsJzYfrS9X1akm9fHZNnD9+Vo/4= +github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= +github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= @@ -479,9 +589,12 @@ github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= +github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= github.com/logrusorgru/aurora v2.0.3+incompatible h1:tOpm7WcpBTn4fjmVfgpQq0EfczGlG91VSDkswnjF5A8= github.com/logrusorgru/aurora v2.0.3+incompatible/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= +github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= @@ -502,6 +615,7 @@ github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= @@ -509,10 +623,12 @@ github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2y github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= +github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-sqlite3 v1.14.15 h1:vfoHhTN1af61xCRSWzFIWzx2YskyMTwHLrExkBOjvxI= github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/mediocregopher/radix/v3 v3.4.2/go.mod h1:8FL3F6UQRXHXIBSPUs5h0RybMF8i4n7wVopoX3x7Bv8= @@ -535,62 +651,118 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= +github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= +github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= +github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/okx/zkevm-node v0.2.6-RC3.0.20230913020545-e9ab3d2f93f9 h1:1gXgqDVVRt2nxdSr8DSYFKs30OmxZj2ZDfUeGTJ+1cA= github.com/okx/zkevm-node v0.2.6-RC3.0.20230913020545-e9ab3d2f93f9/go.mod h1:ljRDdlzY63MU3cJ0d52V59C57UYLIg+HWM5AQpvaXt4= +github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= +github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/onsi/gomega v1.19.0 h1:4ieX6qQjPP/BfC3mpsAtIGGlxTWPeA3Inl/7DtXw1tw= github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= +github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM= github.com/opencontainers/runc v1.1.5 h1:L44KXEpKmfWDcS02aeGm8QNTFXTo2D+8MYGDIJ/GDEs= +github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= +github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= +github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= +github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= +github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= +github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ= github.com/pelletier/go-toml/v2 v2.0.8/go.mod h1:vuYfssBdrU2XDZ9bYydBu6t+6a6PYNcZljzZR9VXg+4= +github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= +github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= +github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= +github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/poy/onpar v1.1.2 h1:QaNrNiZx0+Nar5dLgTVp5mXkyoVFIbepjyEoGSnhbAY= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= +github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= +github.com/prometheus/client_golang v1.9.0/go.mod h1:FqZLKOZnGdFAhOK4nqGHa7D66IdsO+O441Eve7ptJDU= github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8= github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY= github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= +github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= +github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= +github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY= github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= +github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.10.1 h1:kYK1Va/YMlutzCGazswoHKo//tZVlFpKYh+PymziUAg= github.com/prometheus/procfs v0.10.1/go.mod h1:nwNm2aOCAYw8uTR/9bWRREkZFxAUcWzPHWJq+XBB/FM= +github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= +github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/redis/go-redis/v9 v9.1.0 h1:137FnGdk+EQdCbye1FW+qOEcY5S+SpY9T0NiuqvtfMY= +github.com/redis/go-redis/v9 v9.1.0/go.mod h1:urWj3He21Dj5k4TK1y59xH8Uj6ATueP8AH1cY3lZl4c= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= @@ -611,20 +783,26 @@ github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/schollz/closestmatch v2.1.0+incompatible/go.mod h1:RtP1ddjLong6gTkbtmuhtR2uUrrJOpYzYRvbcPAid+g= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/shirou/gopsutil v3.20.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU= github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shirou/gopsutil/v3 v3.21.6 h1:vU7jrp1Ic/2sHB7w6UNs7MIkn7ebVtTb5D9j45o9VYE= +github.com/shirou/gopsutil/v3 v3.21.6/go.mod h1:JfVbDpIBLVzT8oKbvMg9P3wEIMDDpVn+LwHTKj0ST88= github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= @@ -633,6 +811,8 @@ github.com/skeema/knownhosts v1.2.0 h1:h9r9cf0+u7wSE+M183ZtMGgOJKiL96brpaz5ekfJC github.com/skeema/knownhosts v1.2.0/go.mod h1:g4fPeYpque7P0xefxtGzV81ihjC8sX2IqpAoNkjxbMo= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM= @@ -641,11 +821,13 @@ github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkU github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= +github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= +github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= @@ -655,6 +837,9 @@ github.com/spf13/viper v1.16.0 h1:rGGH0XDZhdUOryiDWjmIvUSWpbNqisK8Wk0Vyefw8hc= github.com/spf13/viper v1.16.0/go.mod h1:yg78JgCJcbrQOvV9YLXgkLaZqUidkY9K+Dd1FofRzQg= github.com/status-im/keycard-go v0.2.0 h1:QDLFswOQu1r5jsycloeQh3bVU8n/NatHHaZobtDnDzA= github.com/status-im/keycard-go v0.2.0/go.mod h1:wlp8ZLbsmrF6g6WjugPAx+IzoLrkdf9+mHxBEeo3Hbg= +github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= @@ -680,10 +865,13 @@ github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8 github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a h1:1ur3QoCqvE5fl+nylMaIr9PVV1w343YRDtsy+Rwu7XI= github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= +github.com/tklauser/go-sysconf v0.3.6/go.mod h1:MkWzOF4RMCshBAMXuhXJs64Rte09mITnppBXY/rYEFI= github.com/tklauser/go-sysconf v0.3.10 h1:IJ1AZGZRWbY8T5Vfk04D9WOA5WSejdflXxP03OUqALw= github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk= +github.com/tklauser/numcpus v0.2.2/go.mod h1:x3qojaO3uyYt0i56EW/VUYs7uBvdl2fkfZFu0T9wgjM= github.com/tklauser/numcpus v0.4.0 h1:E53Dm1HjH1/R2/aoCtXtPgzmElmn51aOkhCFSuZq//o= github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= +github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8= github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= @@ -694,6 +882,8 @@ github.com/umbracle/ethgo v0.1.4-0.20230712173909-df37dddf16f0 h1:wE2g4ydxJk8kdR github.com/umbracle/ethgo v0.1.4-0.20230712173909-df37dddf16f0/go.mod h1:J+OZNfRCtbaYW3AEc0m47GhwAzlNJjcr9vO86nzOr6E= github.com/umbracle/fastrlp v0.0.0-20220527094140-59d5dd30e722 h1:10Nbw6cACsnQm7r34zlpJky+IzxVLRk6MKTS2d3Vp0E= github.com/umbracle/fastrlp v0.0.0-20220527094140-59d5dd30e722/go.mod h1:c8J0h9aULj2i3umrfyestM6jCq0LK0U6ly6bWy96nd4= +github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli/v2 v2.25.7 h1:VAzn5oq403l5pHjc4OhD54+XGO9cdKVL/7lDjF+iKUs= github.com/urfave/cli/v2 v2.25.7/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ= github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= @@ -709,6 +899,7 @@ github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= @@ -724,9 +915,13 @@ github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1 github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= +go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= +go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= +go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -755,6 +950,7 @@ go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -778,8 +974,8 @@ golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= -golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= +golang.org/x/crypto v0.13.0 h1:mvySKfSWJ+UKUii46M40LOvyWfN0s2U+46/jDd0e6Ck= +golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -825,9 +1021,11 @@ golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190327091125-710a502c58a2/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -835,6 +1033,7 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -873,9 +1072,10 @@ golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= -golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50= -golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= +golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8= +golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -908,6 +1108,9 @@ golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -922,6 +1125,7 @@ golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -929,7 +1133,9 @@ golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -943,11 +1149,14 @@ golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -956,6 +1165,7 @@ golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -980,8 +1190,8 @@ golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= -golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -989,8 +1199,8 @@ golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuX golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.10.0 h1:3R7pNqamzBraeqj/Tj8qt1aQ2HpmlC+Cx/qL/7hn4/c= -golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= +golang.org/x/term v0.12.0 h1:/ZfYdc3zq+q02Rv9vGqTeSItdzZTSNDmfTi0mBAuidU= +golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1003,13 +1213,16 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4= -golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.1.0 h1:xYY+Bajn2a7VBmTM5GikTmnK8ZuX8YgnQCqZpbBNtmA= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181221001348-537d06c36207/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -1083,6 +1296,7 @@ golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= @@ -1106,6 +1320,7 @@ google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBz google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= @@ -1118,6 +1333,7 @@ google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRn google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= @@ -1164,10 +1380,15 @@ google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc/go. google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc h1:XSJ8Vk1SWuNr8S18z1NZSziL0CPIXLCCMDOEFtHBOFc= google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= google.golang.org/grpc v1.12.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= @@ -1200,13 +1421,16 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y= gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= @@ -1218,13 +1442,17 @@ gopkg.in/mgo.v2 v2.0.0-20180705113604-9856a29383ce/go.mod h1:yeKp02qBN3iKW1OzL3M gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= @@ -1234,6 +1462,7 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1244,3 +1473,5 @@ honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9 rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= +sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= diff --git a/localcache/maincoinscache.go b/localcache/maincoinscache.go new file mode 100644 index 00000000..dabe3652 --- /dev/null +++ b/localcache/maincoinscache.go @@ -0,0 +1,108 @@ +package localcache + +import ( + "context" + "github.com/0xPolygonHermez/zkevm-bridge-service/bridgectrl/pb" + "github.com/0xPolygonHermez/zkevm-node/log" + "github.com/jackc/pgx/v4" + "github.com/pkg/errors" + "sync" + "time" +) + +const ( + cacheRefreshInterval = 5 * time.Minute + queryLimit = 100 + maxRetries = 5 +) + +type MainCoinsCache interface { + Refresh(ctx context.Context) + GetMainCoinsByNetwork(ctx context.Context, networkID uint32) ([]*pb.CoinInfo, error) +} + +type MainCoinsDBStorage interface { + GetAllMainCoins(ctx context.Context, limit uint, offset uint, dbTx pgx.Tx) ([]*pb.CoinInfo, error) +} + +// mainCoinsCacheImpl implements the MainCoinsCache interface +type mainCoinsCacheImpl struct { + lock sync.RWMutex + data map[uint32][]*pb.CoinInfo // networkID -> list of coins + storage MainCoinsDBStorage +} + +func NewMainCoinsCache(storage interface{}) (MainCoinsCache, error) { + if storage == nil { + return nil, errors.New("NewMainCoinsCache storage is nil") + } + cache := &mainCoinsCacheImpl{ + data: make(map[uint32][]*pb.CoinInfo), + storage: storage.(MainCoinsDBStorage), + } + err := cache.doRefresh(context.Background()) + if err != nil { + log.Errorf("init main coins cache err[%v]", err) + return nil, err + } + go cache.Refresh(context.Background()) + return cache, nil +} + +// Refresh loops indefinitely and refresh the cache data every 5 minutes +func (c *mainCoinsCacheImpl) Refresh(ctx context.Context) { + ctx, cancel := context.WithCancel(ctx) + defer cancel() + + ticker := time.NewTicker(cacheRefreshInterval) + for range ticker.C { + log.Info("start refreshing main coins cache") + err := c.doRefresh(ctx) + if err != nil { + log.Errorf("refresh main coins cache error[%v]", err) + } + log.Infof("finish refreshing main coins cache") + } +} + +// doRefresh reads all the main coins data from DB and populate the local cache +// If fail to read the DB, will retry for up to 5 times +func (c *mainCoinsCacheImpl) doRefresh(ctx context.Context) error { + newData := make(map[uint32][]*pb.CoinInfo) + + offset := uint(0) + retryCnt := 0 + for { + coins, err := c.storage.GetAllMainCoins(ctx, queryLimit, offset, nil) + if err != nil { + // If exceeds max number of retries, returns without updating the cache + if retryCnt >= maxRetries { + return err + } + retryCnt++ + continue + } + retryCnt = 0 + for _, coin := range coins { + newData[coin.NetworkId] = append(newData[coin.NetworkId], coin) + } + + // Reaching the last batch of data + if len(coins) < queryLimit { + break + } + } + + // Need to lock the map before updating + c.lock.Lock() + c.data = newData + c.lock.Unlock() + return nil +} + +func (c *mainCoinsCacheImpl) GetMainCoinsByNetwork(ctx context.Context, networkID uint32) ([]*pb.CoinInfo, error) { + c.lock.RLock() + defer c.lock.RUnlock() + + return c.data[networkID], nil +} diff --git a/proto/src/proto/bridge/v1/query.proto b/proto/src/proto/bridge/v1/query.proto index 30b233b0..0329700d 100644 --- a/proto/src/proto/bridge/v1/query.proto +++ b/proto/src/proto/bridge/v1/query.proto @@ -14,42 +14,111 @@ service BridgeService { /// Get api version rpc CheckAPI(CheckAPIRequest) returns (CheckAPIResponse) { option (google.api.http) = { - get: "/api" + get: "/priapi/v1/ob/bridge/api", + additional_bindings: { + get: "/api" + } }; } /// Get bridges for the destination address both in L1 and L2 rpc GetBridges(GetBridgesRequest) returns (GetBridgesResponse) { option (google.api.http) = { - get: "/bridges/{dest_addr}" + get: "/priapi/v1/ob/bridge/bridges/{dest_addr}", + additional_bindings: { + get: "/bridges/{dest_addr}" + } }; } /// Get the merkle proof for the specific deposit rpc GetProof(GetProofRequest) returns (GetProofResponse) { option (google.api.http) = { - get: "/merkle-proof" + get: "/priapi/v1/ob/bridge/merkle-proof", + additional_bindings: { + get: "/merkle-proof" + } }; } /// Get the specific deposit rpc GetBridge(GetBridgeRequest) returns (GetBridgeResponse) { option (google.api.http) = { - get: "/bridge" + get: "/priapi/v1/ob/bridge/bridge", + additional_bindings: { + get: "/bridge" + } }; } /// Get claims for the specific smart contract address both in L1 and L2 rpc GetClaims(GetClaimsRequest) returns (GetClaimsResponse) { option (google.api.http) = { - get: "/claims/{dest_addr}" + get: "/priapi/v1/ob/bridge/claims/{dest_addr}", + additional_bindings: { + get: "/claims/{dest_addr}" + } }; } /// Get token wrapped for the specific smart contract address both in L1 and L2 rpc GetTokenWrapped(GetTokenWrappedRequest) returns (GetTokenWrappedResponse) { option (google.api.http) = { - get: "/tokenwrapped" + get: "/priapi/v1/ob/bridge/tokenwrapped", + additional_bindings: { + get: "/tokenwrapped" + } + }; + } + + /// Get the latest price of the specified coins + rpc GetCoinPrice(GetCoinPriceRequest) returns (CommonCoinPricesResponse) { + option (google.api.http) = { + post: "/priapi/v1/ob/bridge/coin-price", + additional_bindings: { + post: "/coin-price", + body: "*", + }, + body: "*", + }; + } + + /// Get the list of all the main coins of a specified network + rpc GetMainCoins(GetMainCoinsRequest) returns (CommonCoinsResponse) { + option (google.api.http) = { + get: "/priapi/v1/ob/bridge/main-coins/{networkId}", + additional_bindings: { + get: "/main-coins/{networkId}" + } + }; + } + + /// Get the pending (not claimed) transactions of an account + rpc GetPendingTransactions(GetPendingTransactionsRequest) returns (CommonTransactionsResponse) { + option (google.api.http) = { + get: "/priapi/v1/ob/bridge/pending/{destAddr}", + additional_bindings: { + get: "/pending/{destAddr}" + } + }; + } + + /// Get all the transactions of an account. Similar to GetBridges but the field names are changed + rpc GetAllTransactions(GetAllTransactionsRequest) returns (CommonTransactionsResponse) { + option (google.api.http) = { + get: "/priapi/v1/ob/bridge/all/{destAddr}", + additional_bindings: { + get: "/all/{destAddr}" + } + }; + } + + rpc GetSmtProof(GetSmtProofRequest) returns (CommonProofResponse) { + option (google.api.http) = { + get: "/priapi/v1/ob/bridge/smt-proof", + additional_bindings: { + get: "/smt-proof" + } }; } } @@ -101,6 +170,50 @@ message Proof { string rollup_exit_root = 3; } +// Symbol info message +message SymbolInfo { + uint64 chainId = 1; + string address = 2; +} + +message SymbolPrice { + string symbol = 1; + double price = 2; + uint64 time = 3; + string address = 4; + uint64 chainId = 5; +} + +// Coin info message +message CoinInfo { + string symbol = 1; + string name = 2; + uint64 decimals = 3; + uint64 chainId = 4; + uint32 networkId = 5; + string logoLink = 6; + string address = 7; +} + +// Transaction message +message Transaction { + uint32 fromChain = 1; // 0:L1, 1:L2 + uint32 toChain = 2; // 0:L1, 1:L2 + string bridgeToken = 3; + string tokenAmount = 4; + uint32 estimateTime = 5; + uint32 status = 6; // 0: cannot claim; 1: pending & not claimed; 2; claimed + uint64 time = 7; // Deposit's block time + string txHash = 8; // Deposit tx hash + string claimTxHash = 9; + uint64 claimTime = 10; // Claim's block time + uint32 fromChainId = 11; + uint32 toChainId = 12; + uint64 id = 13; + uint64 index = 14; + string metadata = 15; +} + // Get requests message CheckAPIRequest {} @@ -132,6 +245,26 @@ message GetClaimsRequest { uint32 limit = 3; } +message GetCoinPriceRequest { + repeated SymbolInfo symbolInfos = 1; +} + +message GetMainCoinsRequest { + uint32 networkId = 1; +} + +message GetPendingTransactionsRequest { + string destAddr = 1; + uint64 offset = 2; + uint32 limit = 3; +} + +message GetAllTransactionsRequest { + string destAddr = 1; + uint64 offset = 2; + uint32 limit = 3; +} + // Get responses message CheckAPIResponse { @@ -159,3 +292,71 @@ message GetClaimsResponse { repeated Claim claims = 1; uint64 total_cnt = 2; } + +message GetCoinPriceResponse { + repeated SymbolPrice prices = 1; +} + +message GetMainCoinsResponse { + repeated CoinInfo coinInfos = 1; +} + +message GetPendingTransactionsResponse { + repeated Transaction transactions = 1; +} + +message GetAllTransactionsResponse { + repeated Transaction transactions = 1; +} + +message CommonTransactionsResponse { + uint32 code = 1; + string msg = 2; + string error_code = 3; + string error_message = 4; + string detailMsg = 5; + TransactionDetail data = 6; +} + +message CommonCoinsResponse { + uint32 code = 1; + string msg = 2; + string error_code = 3; + string error_message = 4; + string detailMsg = 5; + repeated CoinInfo data = 6; +} + +message CommonCoinPricesResponse { + uint32 code = 1; + string msg = 2; + string error_code = 3; + string error_message = 4; + string detailMsg = 5; + repeated SymbolPrice data = 6; +} + +message TransactionDetail { + bool hasNext = 1; + repeated Transaction transactions = 2; +} + +message CommonProofResponse { + uint32 code = 1; + string msg = 2; + string error_code = 3; + string error_message = 4; + string detailMsg = 5; + ProofDetail data = 6; +} + +message ProofDetail { + repeated string smtProof = 1; + string mainnetExitRoot = 2; + string rollupExitRoot = 3; +} + +message GetSmtProofRequest { + uint32 index = 1; + uint64 fromChain = 2; +} \ No newline at end of file diff --git a/redisstorage/config.go b/redisstorage/config.go new file mode 100644 index 00000000..4b25338d --- /dev/null +++ b/redisstorage/config.go @@ -0,0 +1,18 @@ +package redisstorage + +// Config stores the redis connection configs +type Config struct { + // Host:Port address + Addr string `mapstructure:"Addr"` + + // Username for ACL + Username string `mapstructure:"Username"` + + // Password for ACL + Password string `mapstructure:"Password"` + + // DB index + DB int `mapstructure:"DB"` + + MockPrice bool `mapstructure:"MockPrice"` +} diff --git a/redisstorage/interfaces.go b/redisstorage/interfaces.go new file mode 100644 index 00000000..e4ddf13d --- /dev/null +++ b/redisstorage/interfaces.go @@ -0,0 +1,11 @@ +package redisstorage + +import ( + "context" + "github.com/0xPolygonHermez/zkevm-bridge-service/bridgectrl/pb" +) + +type RedisStorage interface { + SetCoinPrice(ctx context.Context, prices []*pb.SymbolPrice) error + GetCoinPrice(ctx context.Context, symbols []*pb.SymbolInfo) ([]*pb.SymbolPrice, error) +} diff --git a/redisstorage/redisstorage.go b/redisstorage/redisstorage.go new file mode 100644 index 00000000..8a210bda --- /dev/null +++ b/redisstorage/redisstorage.go @@ -0,0 +1,128 @@ +package redisstorage + +import ( + "context" + "github.com/0xPolygonHermez/zkevm-bridge-service/bridgectrl/pb" + "github.com/0xPolygonHermez/zkevm-node/log" + "github.com/pkg/errors" + "github.com/redis/go-redis/v9" + "google.golang.org/protobuf/encoding/protojson" + "math/rand" + "strconv" + "strings" + "time" +) + +const ( + coinPriceHashKey = "bridge_coin_prices" +) + +// redisStorageImpl implements RedisStorage interface +type redisStorageImpl struct { + client *redis.Client + mockPrice bool +} + +func NewRedisStorage(cfg Config) (RedisStorage, error) { + if cfg.Addr == "" { + return nil, errors.New("redis address is empty") + } + client := redis.NewClient(&redis.Options{ + Addr: cfg.Addr, + Username: cfg.Username, + Password: cfg.Password, + DB: cfg.DB, + }) + res, err := client.Ping(context.Background()).Result() + if err != nil { + return nil, errors.Wrap(err, "cannot connect to redis server") + } + log.Debugf("redis health check done, result: %v", res) + return &redisStorageImpl{client: client, mockPrice: cfg.MockPrice}, nil +} + +func (s *redisStorageImpl) SetCoinPrice(ctx context.Context, prices []*pb.SymbolPrice) error { + log.Debugf("SetCoinPrice size[%v]", len(prices)) + if s == nil || s.client == nil { + return errors.New("redis client is nil") + } + + var valueList []interface{} + for _, price := range prices { + if price == nil { + // Nothing to set, ignored + continue + } + + priceKey := getCoinPriceKey(price.ChainId, price.Address) + priceVal, err := protojson.Marshal(price) + if err != nil { + return errors.Wrap(err, "marshal price error") + } + valueList = append(valueList, priceKey, priceVal) + } + err := s.client.HSet(ctx, coinPriceHashKey, valueList...).Err() + if err != nil { + return errors.Wrap(err, "SetCoinPrice redis HSet error") + } + + return nil +} + +func (s *redisStorageImpl) GetCoinPrice(ctx context.Context, symbols []*pb.SymbolInfo) ([]*pb.SymbolPrice, error) { + log.Debugf("GetCoinPrice size[%v]", len(symbols)) + if len(symbols) == 0 { + return nil, nil + } + if s == nil || s.client == nil { + return nil, errors.New("redis client is nil") + } + + var keyList []string + for _, symbol := range symbols { + if symbol == nil { + // This means there can be a chance that request size and response size are different + // But by right the symbols array should not have nil values + continue + } + priceKey := getCoinPriceKey(symbol.ChainId, symbol.Address) + keyList = append(keyList, priceKey) + } + + redisResult, err := s.client.HMGet(ctx, coinPriceHashKey, keyList...).Result() + if err != nil { + return nil, errors.Wrap(err, "GetCoinPrice redis HMGet error") + } + + var priceList []*pb.SymbolPrice + for i, res := range redisResult { + if res == nil { + log.Infof("GetCoinPrice price not found chainId[%v] address[%v]", symbols[i].ChainId, symbols[i].Address) + priceList = append(priceList, &pb.SymbolPrice{ChainId: symbols[i].ChainId, Address: symbols[i].Address}) + continue + } + price := &pb.SymbolPrice{} + err := protojson.Unmarshal([]byte(res.(string)), price) + if err != nil { + log.Infof("cannot unmarshal price object[%v] error[%v]", res, err) + priceList = append(priceList, &pb.SymbolPrice{ChainId: symbols[i].ChainId, Address: symbols[i].Address}) + } else { + priceList = append(priceList, price) + } + } + + if s.mockPrice { + for _, price := range priceList { + price.Price = rand.Float64() + price.Time = uint64(time.Now().UnixMilli()) + } + } + return priceList, nil +} + +func getCoinPriceKey(chainID uint64, tokenAddr string) string { + if tokenAddr == "" { + tokenAddr = "null" + } + return strings.ToLower(strconv.FormatUint(chainID, 10) + "_" + tokenAddr) +} diff --git a/sentinel/config.go b/sentinel/config.go new file mode 100644 index 00000000..67158e17 --- /dev/null +++ b/sentinel/config.go @@ -0,0 +1,9 @@ +package sentinel + +import ( + "github.com/alibaba/sentinel-golang/core/flow" +) + +type Config struct { + FlowRules []*flow.Rule `json:"flowRules"` +} diff --git a/sentinel/config.json b/sentinel/config.json new file mode 100644 index 00000000..3f56e40a --- /dev/null +++ b/sentinel/config.json @@ -0,0 +1,69 @@ +{ + "flowRules": [ + { + "resource": "/bridge.v1.BridgeService/CheckAPI", + "controlBehavior": 0, + "threshold": 10 + }, + { + "resource": "/bridge.v1.BridgeService/GetBridges", + "controlBehavior": 1, + "threshold": 50, + "maxQueueingTimeMs": 3000 + }, + { + "resource": "/bridge.v1.BridgeService/GetProof", + "controlBehavior": 1, + "threshold": 50, + "maxQueueingTimeMs": 3000 + }, + { + "resource": "/bridge.v1.BridgeService/GetBridge", + "controlBehavior": 1, + "threshold": 50, + "maxQueueingTimeMs": 3000 + }, + { + "resource": "/bridge.v1.BridgeService/GetClaims", + "controlBehavior": 1, + "threshold": 50, + "maxQueueingTimeMs": 3000 + }, + { + "resource": "/bridge.v1.BridgeService/GetTokenWrapped", + "controlBehavior": 1, + "threshold": 50, + "maxQueueingTimeMs": 3000 + }, + { + "resource": "/bridge.v1.BridgeService/GetCoinPrice", + "controlBehavior": 1, + "threshold": 50, + "maxQueueingTimeMs": 3000 + }, + { + "resource": "/bridge.v1.BridgeService/GetMainCoins", + "controlBehavior": 1, + "threshold": 50, + "maxQueueingTimeMs": 3000 + }, + { + "resource": "/bridge.v1.BridgeService/GetPendingTransactions", + "controlBehavior": 1, + "threshold": 50, + "maxQueueingTimeMs": 3000 + }, + { + "resource": "/bridge.v1.BridgeService/GetAllTransactions", + "controlBehavior": 1, + "threshold": 50, + "maxQueueingTimeMs": 3000 + }, + { + "resource": "/bridge.v1.BridgeService/GetSmtProof", + "controlBehavior": 1, + "threshold": 50, + "maxQueueingTimeMs": 3000 + } + ] +} \ No newline at end of file diff --git a/sentinel/sentinel.go b/sentinel/sentinel.go new file mode 100644 index 00000000..cc4ebcc2 --- /dev/null +++ b/sentinel/sentinel.go @@ -0,0 +1,53 @@ +package sentinel + +import ( + "encoding/json" + "github.com/0xPolygonHermez/zkevm-node/log" + "github.com/alibaba/sentinel-golang/core/flow" + "github.com/alibaba/sentinel-golang/ext/datasource" + "github.com/alibaba/sentinel-golang/ext/datasource/file" + "github.com/pkg/errors" +) + +func InitFileDataSource(filePath string) error { + if filePath == "" { + log.Info("No sentinel config file name, ignored") + return nil + } + + // Handler to handle the config update + propertyHandler := datasource.NewDefaultPropertyHandler( + func(src []byte) (interface{}, error) { + log.Debugf("sentinel raw config received: %v", string(src)) + cfg := &Config{FlowRules: make([]*flow.Rule, 0)} + err := json.Unmarshal(src, cfg) + if err != nil { + log.Errorf("fail to unmarshal sentinel config[%v] err[%v]", src, err) + return nil, err + } + + return cfg, nil + }, + func(data interface{}) error { + cfg, ok := data.(*Config) + if !ok { + log.Errorf("invalid sentinel config data [%v]", data) + return errors.New("invalid config") + } + // Load flow rules + _, err := flow.LoadRules(cfg.FlowRules) + if err != nil { + log.Errorf("sentinel load flow rules[%v] err[%v]", cfg.FlowRules, err) + return err + } + return nil + }) + + // Initialize the file data source + source := file.NewFileDataSource(filePath, propertyHandler) + err := source.Initialize() + if err != nil { + return errors.Wrap(err, "init sentinel data source err") + } + return nil +} diff --git a/server/config.go b/server/config.go index 01a7931b..c69509ef 100644 --- a/server/config.go +++ b/server/config.go @@ -1,6 +1,9 @@ package server -import "github.com/0xPolygonHermez/zkevm-bridge-service/db" +import ( + "github.com/0xPolygonHermez/zkevm-bridge-service/db" + "github.com/0xPolygonHermez/zkevm-bridge-service/redisstorage" +) // Config struct type Config struct { @@ -18,4 +21,8 @@ type Config struct { BridgeVersion string `mapstructure:"BridgeVersion"` // DB is the database config DB db.Config `mapstructure:"DB"` + // Redis is the redis connection config + Redis redisstorage.Config `mapstructure:"Redis"` + // SentinelConfigFilePath is the file path to store the sentinel config + SentinelConfigFilePath string `mapstructure:"SentinelConfigFilePath"` } diff --git a/server/interfaces.go b/server/interfaces.go index 0966d535..04060c84 100644 --- a/server/interfaces.go +++ b/server/interfaces.go @@ -2,13 +2,12 @@ package server import ( "context" - "github.com/0xPolygonHermez/zkevm-bridge-service/etherman" "github.com/ethereum/go-ethereum/common" "github.com/jackc/pgx/v4" ) -type bridgeServiceStorage interface { +type BridgeServiceStorage interface { Get(ctx context.Context, key []byte, dbTx pgx.Tx) ([][]byte, error) GetRoot(ctx context.Context, depositCnt uint, network uint, dbTx pgx.Tx) ([]byte, error) GetDepositCountByRoot(ctx context.Context, root []byte, network uint8, dbTx pgx.Tx) (uint, error) @@ -20,4 +19,5 @@ type bridgeServiceStorage interface { GetDeposits(ctx context.Context, destAddr string, limit uint, offset uint, dbTx pgx.Tx) ([]*etherman.Deposit, error) GetDepositCount(ctx context.Context, destAddr string, dbTx pgx.Tx) (uint64, error) GetTokenWrapped(ctx context.Context, originalNetwork uint, originalTokenAddress common.Address, dbTx pgx.Tx) (*etherman.TokenWrapped, error) + GetPendingTransactions(ctx context.Context, destAddr string, limit uint, offset uint, dbTx pgx.Tx) ([]*etherman.Deposit, error) } diff --git a/server/server.go b/server/server.go index 6c841de3..d9112cec 100644 --- a/server/server.go +++ b/server/server.go @@ -3,20 +3,20 @@ package server import ( "context" "fmt" + "google.golang.org/protobuf/encoding/protojson" "net" "net/http" "os" "os/signal" - "strings" "time" "github.com/0xPolygonHermez/zkevm-bridge-service/bridgectrl/pb" "github.com/0xPolygonHermez/zkevm-node/log" + sentinelGrpc "github.com/alibaba/sentinel-golang/pkg/adapters/grpc" "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" "google.golang.org/grpc/health/grpc_health_v1" - "google.golang.org/protobuf/encoding/protojson" ) // RunServer runs gRPC server and HTTP gateway @@ -75,7 +75,7 @@ func runGRPCServer(ctx context.Context, bridgeServer pb.BridgeServiceServer, por return err } - server := grpc.NewServer() + server := grpc.NewServer(grpc.UnaryInterceptor(sentinelGrpc.NewUnaryServerInterceptor())) pb.RegisterBridgeServiceServer(server, bridgeServer) healthService := newHealthChecker() @@ -95,10 +95,11 @@ func runGRPCServer(ctx context.Context, bridgeServer pb.BridgeServiceServer, por } func preflightHandler(w http.ResponseWriter, r *http.Request) { - headers := []string{"Content-Type", "Accept"} - w.Header().Set("Access-Control-Allow-Headers", strings.Join(headers, ",")) - methods := []string{"GET", "HEAD", "POST", "PUT", "DELETE"} - w.Header().Set("Access-Control-Allow-Methods", strings.Join(methods, ",")) + //headers := []string{"Content-Type", "Accept", "X-Locale", "X-Utc", "X-Zkdex-Env", "App-Type", "Referer", "User-Agent", "Devid"} + w.Header().Set("Access-Control-Allow-Headers", "*") + //methods := []string{"GET", "HEAD", "POST", "PUT", "DELETE"} + w.Header().Set("Access-Control-Allow-Methods", "*") + w.Header().Set("Access-Control-Allow-Origin", "*") } // allowCORS allows Cross Origin Resource Sharing from any origin. diff --git a/server/service.go b/server/service.go index 8a758229..5e116599 100644 --- a/server/service.go +++ b/server/service.go @@ -4,6 +4,9 @@ import ( "context" "encoding/hex" "fmt" + "github.com/0xPolygonHermez/zkevm-bridge-service/localcache" + "github.com/0xPolygonHermez/zkevm-bridge-service/redisstorage" + "github.com/pkg/errors" "github.com/0xPolygonHermez/zkevm-bridge-service/bridgectrl" "github.com/0xPolygonHermez/zkevm-bridge-service/bridgectrl/pb" @@ -14,9 +17,19 @@ import ( "github.com/jackc/pgx/v4" ) +const ( + defaultL2TxEstimateTime = 15 + defaultL1TxEstimateTime = 10 + defaultErrorCode = 1 + defaultSuccessCode = 0 +) + type bridgeService struct { - storage bridgeServiceStorage + storage BridgeServiceStorage + redisStorage redisstorage.RedisStorage + mainCoinsCache localcache.MainCoinsCache networkIDs map[uint]uint8 + chainIDs map[uint]uint16 height uint8 defaultPageLimit uint32 maxPageLimit uint32 @@ -26,19 +39,24 @@ type bridgeService struct { } // NewBridgeService creates new bridge service. -func NewBridgeService(cfg Config, height uint8, networks []uint, storage interface{}) *bridgeService { +func NewBridgeService(cfg Config, height uint8, networks []uint, chainIds []uint, storage interface{}, redisStorage redisstorage.RedisStorage, mainCoinsCache localcache.MainCoinsCache) *bridgeService { var networkIDs = make(map[uint]uint8) + var chainIDs = make(map[uint]uint16) for i, network := range networks { networkIDs[network] = uint8(i) + chainIDs[network] = uint16(chainIds[i]) } cache, err := lru.New[string, [][]byte](cfg.CacheSize) if err != nil { panic(err) } return &bridgeService{ - storage: storage.(bridgeServiceStorage), + storage: storage.(BridgeServiceStorage), + redisStorage: redisStorage, + mainCoinsCache: mainCoinsCache, height: height, networkIDs: networkIDs, + chainIDs: chainIDs, defaultPageLimit: cfg.DefaultPageLimit, maxPageLimit: cfg.MaxPageLimit, version: cfg.BridgeVersion, @@ -289,6 +307,29 @@ func (s *bridgeService) GetProof(ctx context.Context, req *pb.GetProofRequest) ( }, nil } +func (s *bridgeService) GetSmtProof(ctx context.Context, req *pb.GetSmtProofRequest) (*pb.CommonProofResponse, error) { + globalExitRoot, merkleProof, err := s.GetClaimProof(uint(req.Index), uint(req.FromChain), nil) + if err != nil { + return &pb.CommonProofResponse{ + Code: defaultErrorCode, + Data: nil, + }, nil + } + var proof []string + for i := 0; i < len(merkleProof); i++ { + proof = append(proof, "0x"+hex.EncodeToString(merkleProof[i][:])) + } + + return &pb.CommonProofResponse{ + Code: defaultSuccessCode, + Data: &pb.ProofDetail{ + SmtProof: proof, + MainnetExitRoot: globalExitRoot.ExitRoots[0].Hex(), + RollupExitRoot: globalExitRoot.ExitRoots[1].Hex(), + }, + }, nil +} + // GetBridge returns the bridge with status whether it is able to send a claim transaction or not. // Bridge rest API endpoint func (s *bridgeService) GetBridge(ctx context.Context, req *pb.GetBridgeRequest) (*pb.GetBridgeResponse, error) { @@ -340,3 +381,162 @@ func (s *bridgeService) GetTokenWrapped(ctx context.Context, req *pb.GetTokenWra }, }, nil } + +// GetCoinPrice returns the price for each coin symbol in the request +// Bridge rest API endpoint +func (s *bridgeService) GetCoinPrice(ctx context.Context, req *pb.GetCoinPriceRequest) (*pb.CommonCoinPricesResponse, error) { + priceList, err := s.redisStorage.GetCoinPrice(ctx, req.SymbolInfos) + if err != nil { + return &pb.CommonCoinPricesResponse{ + Code: defaultErrorCode, + Data: nil, + }, nil + } + return &pb.CommonCoinPricesResponse{ + Code: defaultSuccessCode, + Data: priceList, + }, nil +} + +// GetMainCoins returns the info of the main coins in a network +// Bridge rest API endpoint +func (s *bridgeService) GetMainCoins(ctx context.Context, req *pb.GetMainCoinsRequest) (*pb.CommonCoinsResponse, error) { + coins, err := s.mainCoinsCache.GetMainCoinsByNetwork(ctx, req.NetworkId) + if err != nil { + return &pb.CommonCoinsResponse{ + Code: defaultErrorCode, + Data: nil, + }, nil + } + return &pb.CommonCoinsResponse{ + Code: defaultSuccessCode, + Data: coins, + }, nil +} + +// GetPendingTransactions returns the pending transactions of an account +// Bridge rest API endpoint +func (s *bridgeService) GetPendingTransactions(ctx context.Context, req *pb.GetPendingTransactionsRequest) (*pb.CommonTransactionsResponse, error) { + limit := req.Limit + if limit == 0 { + limit = s.defaultPageLimit + } + if limit > s.maxPageLimit { + limit = s.maxPageLimit + } + + deposits, err := s.storage.GetPendingTransactions(ctx, req.DestAddr, uint(limit+1), uint(req.Offset), nil) + if err != nil { + return &pb.CommonTransactionsResponse{ + Code: defaultErrorCode, + Data: nil, + }, nil + } + + hasNext := len(deposits) > int(limit) + if hasNext { + deposits = deposits[:limit] + } + + var pbTransactions []*pb.Transaction + for _, deposit := range deposits { + defaultTxEstimateTime := defaultL1TxEstimateTime + if deposit.NetworkID == 1 { + defaultTxEstimateTime = defaultL2TxEstimateTime + } + transaction := &pb.Transaction{ + FromChain: uint32(deposit.NetworkID), + ToChain: uint32(deposit.DestinationNetwork), + BridgeToken: deposit.OriginalAddress.Hex(), + TokenAmount: deposit.Amount.String(), + EstimateTime: uint32(defaultTxEstimateTime), + Time: uint64(deposit.Time.UnixMilli()), + TxHash: deposit.TxHash.String(), + FromChainId: uint32(s.chainIDs[deposit.NetworkID]), + ToChainId: uint32(s.chainIDs[deposit.DestinationNetwork]), + Id: deposit.Id, + Index: uint64(deposit.DepositCount), + Metadata: "0x" + hex.EncodeToString(deposit.Metadata), + } + transaction.Status = 0 + if deposit.ReadyForClaim { + transaction.Status = 1 + } + pbTransactions = append(pbTransactions, transaction) + } + return &pb.CommonTransactionsResponse{ + Code: defaultSuccessCode, + Data: &pb.TransactionDetail{HasNext: hasNext, Transactions: pbTransactions}, + }, nil +} + +// GetAllTransactions returns all the transactions of an account, similar to GetBridges +// Bridge rest API endpoint +func (s *bridgeService) GetAllTransactions(ctx context.Context, req *pb.GetAllTransactionsRequest) (*pb.CommonTransactionsResponse, error) { + limit := req.Limit + if limit == 0 { + limit = s.defaultPageLimit + } + if limit > s.maxPageLimit { + limit = s.maxPageLimit + } + + deposits, err := s.storage.GetDeposits(ctx, req.DestAddr, uint(limit+1), uint(req.Offset), nil) + if err != nil { + return &pb.CommonTransactionsResponse{ + Code: defaultErrorCode, + Data: nil, + }, nil + } + + hasNext := len(deposits) > int(limit) + if hasNext { + deposits = deposits[0:limit] + } + + var pbTransactions []*pb.Transaction + for _, deposit := range deposits { + defaultTxEstimateTime := defaultL1TxEstimateTime + if deposit.NetworkID == 1 { + defaultTxEstimateTime = defaultL2TxEstimateTime + } + transaction := &pb.Transaction{ + FromChain: uint32(deposit.NetworkID), + ToChain: uint32(deposit.DestinationNetwork), + BridgeToken: deposit.OriginalAddress.Hex(), + TokenAmount: deposit.Amount.String(), + EstimateTime: uint32(defaultTxEstimateTime), + Time: uint64(deposit.Time.UnixMilli()), + TxHash: deposit.TxHash.String(), + FromChainId: uint32(s.chainIDs[deposit.NetworkID]), + ToChainId: uint32(s.chainIDs[deposit.DestinationNetwork]), + Id: deposit.Id, + Index: uint64(deposit.DepositCount), + Metadata: "0x" + hex.EncodeToString(deposit.Metadata), + } + transaction.Status = 0 // Not ready for claim + if deposit.ReadyForClaim { + // Check whether it has been claimed or not + claim, err := s.storage.GetClaim(ctx, deposit.DepositCount, deposit.DestinationNetwork, nil) + transaction.Status = 1 // Ready but not claimed + if err != nil { + if !errors.Is(err, gerror.ErrStorageNotFound) { + return &pb.CommonTransactionsResponse{ + Code: defaultErrorCode, + Data: nil, + }, nil + } + } else { + transaction.Status = 2 // Claimed + transaction.ClaimTxHash = claim.TxHash.String() + transaction.ClaimTime = uint64(claim.Time.UnixMilli()) + } + } + pbTransactions = append(pbTransactions, transaction) + } + + return &pb.CommonTransactionsResponse{ + Code: defaultSuccessCode, + Data: &pb.TransactionDetail{HasNext: hasNext, Transactions: pbTransactions}, + }, nil +}