diff --git a/go.mod b/go.mod index eb9c45471f..66bd79a1d8 100644 --- a/go.mod +++ b/go.mod @@ -41,7 +41,7 @@ require ( github.com/smartcontractkit/chain-selectors v1.0.89 github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.10 github.com/smartcontractkit/chainlink-protos/billing/go v0.0.0-20251024234028-0988426d98f4 - github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396 + github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260318054214-bad7873faa1c github.com/smartcontractkit/chainlink-protos/linking-service/go v0.0.0-20251002192024-d2ad9222409b github.com/smartcontractkit/chainlink-protos/node-platform v0.0.0-20260205130626-db2a2aab956b github.com/smartcontractkit/chainlink-protos/storage-service v0.3.0 diff --git a/go.sum b/go.sum index bfa8dbdd0a..01e6ad3f7b 100644 --- a/go.sum +++ b/go.sum @@ -332,8 +332,8 @@ github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.10 h1:FJAFgXS9 github.com/smartcontractkit/chainlink-common/pkg/chipingress v0.0.10/go.mod h1:oiDa54M0FwxevWwyAX773lwdWvFYYlYHHQV1LQ5HpWY= github.com/smartcontractkit/chainlink-protos/billing/go v0.0.0-20251024234028-0988426d98f4 h1:GCzrxDWn3b7jFfEA+WiYRi8CKoegsayiDoJBCjYkneE= github.com/smartcontractkit/chainlink-protos/billing/go v0.0.0-20251024234028-0988426d98f4/go.mod h1:HHGeDUpAsPa0pmOx7wrByCitjQ0mbUxf0R9v+g67uCA= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396 h1:03tbcwjyIEjvHba1IWOj1sfThwebm2XNzyFHSuZtlWc= -github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260226130359-963f935e0396/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260318054214-bad7873faa1c h1:m+XflniQiuMPvcKtiWpnsqpOiRNcONKrhF5zwpR2QJM= +github.com/smartcontractkit/chainlink-protos/cre/go v0.0.0-20260318054214-bad7873faa1c/go.mod h1:Jqt53s27Tr0jDl8mdBXg1xhu6F8Fci8JOuq43tgHOM8= github.com/smartcontractkit/chainlink-protos/linking-service/go v0.0.0-20251002192024-d2ad9222409b h1:QuI6SmQFK/zyUlVWEf0GMkiUYBPY4lssn26nKSd/bOM= github.com/smartcontractkit/chainlink-protos/linking-service/go v0.0.0-20251002192024-d2ad9222409b/go.mod h1:qSTSwX3cBP3FKQwQacdjArqv0g6QnukjV4XuzO6UyoY= github.com/smartcontractkit/chainlink-protos/node-platform v0.0.0-20260205130626-db2a2aab956b h1:36knUpKHHAZ86K4FGWXtx8i/EQftGdk2bqCoEu/Cha8= diff --git a/pkg/capabilities/v2/chain-capabilities/aptos/client.pb.go b/pkg/capabilities/v2/chain-capabilities/aptos/client.pb.go index 347028bdfb..02b2f2548c 100644 --- a/pkg/capabilities/v2/chain-capabilities/aptos/client.pb.go +++ b/pkg/capabilities/v2/chain-capabilities/aptos/client.pb.go @@ -213,6 +213,52 @@ func (TransactionVariant) EnumDescriptor() ([]byte, []int) { return file_capabilities_blockchain_aptos_v1alpha_client_proto_rawDescGZIP(), []int{2} } +type ReceiverContractExecutionStatus int32 + +const ( + ReceiverContractExecutionStatus_RECEIVER_CONTRACT_EXECUTION_STATUS_SUCCESS ReceiverContractExecutionStatus = 0 + ReceiverContractExecutionStatus_RECEIVER_CONTRACT_EXECUTION_STATUS_REVERTED ReceiverContractExecutionStatus = 1 +) + +// Enum value maps for ReceiverContractExecutionStatus. +var ( + ReceiverContractExecutionStatus_name = map[int32]string{ + 0: "RECEIVER_CONTRACT_EXECUTION_STATUS_SUCCESS", + 1: "RECEIVER_CONTRACT_EXECUTION_STATUS_REVERTED", + } + ReceiverContractExecutionStatus_value = map[string]int32{ + "RECEIVER_CONTRACT_EXECUTION_STATUS_SUCCESS": 0, + "RECEIVER_CONTRACT_EXECUTION_STATUS_REVERTED": 1, + } +) + +func (x ReceiverContractExecutionStatus) Enum() *ReceiverContractExecutionStatus { + p := new(ReceiverContractExecutionStatus) + *p = x + return p +} + +func (x ReceiverContractExecutionStatus) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ReceiverContractExecutionStatus) Descriptor() protoreflect.EnumDescriptor { + return file_capabilities_blockchain_aptos_v1alpha_client_proto_enumTypes[3].Descriptor() +} + +func (ReceiverContractExecutionStatus) Type() protoreflect.EnumType { + return &file_capabilities_blockchain_aptos_v1alpha_client_proto_enumTypes[3] +} + +func (x ReceiverContractExecutionStatus) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ReceiverContractExecutionStatus.Descriptor instead. +func (ReceiverContractExecutionStatus) EnumDescriptor() ([]byte, []int) { + return file_capabilities_blockchain_aptos_v1alpha_client_proto_rawDescGZIP(), []int{3} +} + type AccountAPTBalanceRequest struct { state protoimpl.MessageState `protogen:"open.v1"` Address []byte `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` // 32-byte address @@ -304,6 +350,7 @@ func (x *AccountAPTBalanceReply) GetValue() uint64 { type ViewRequest struct { state protoimpl.MessageState `protogen:"open.v1"` Payload *ViewPayload `protobuf:"bytes,1,opt,name=payload,proto3" json:"payload,omitempty"` + LedgerVersion *uint64 `protobuf:"varint,2,opt,name=ledger_version,json=ledgerVersion,proto3,oneof" json:"ledger_version,omitempty"` // nil means use latest ledger version unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -345,6 +392,13 @@ func (x *ViewRequest) GetPayload() *ViewPayload { return nil } +func (x *ViewRequest) GetLedgerVersion() uint64 { + if x != nil && x.LedgerVersion != nil { + return *x.LedgerVersion + } + return 0 +} + type ViewReply struct { state protoimpl.MessageState `protogen:"open.v1"` Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` @@ -1272,13 +1326,14 @@ func (x *WriteReportRequest) GetReport() *sdk.ReportResponse { } type WriteReportReply struct { - state protoimpl.MessageState `protogen:"open.v1"` - TxStatus TxStatus `protobuf:"varint,1,opt,name=tx_status,json=txStatus,proto3,enum=capabilities.blockchain.aptos.v1alpha.TxStatus" json:"tx_status,omitempty"` - TxHash *string `protobuf:"bytes,2,opt,name=tx_hash,json=txHash,proto3,oneof" json:"tx_hash,omitempty"` // transaction hash (hex string with 0x prefix) - TransactionFee *uint64 `protobuf:"varint,3,opt,name=transaction_fee,json=transactionFee,proto3,oneof" json:"transaction_fee,omitempty"` // gas used in octas - ErrorMessage *string `protobuf:"bytes,4,opt,name=error_message,json=errorMessage,proto3,oneof" json:"error_message,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + TxStatus TxStatus `protobuf:"varint,1,opt,name=tx_status,json=txStatus,proto3,enum=capabilities.blockchain.aptos.v1alpha.TxStatus" json:"tx_status,omitempty"` + ReceiverContractExecutionStatus *ReceiverContractExecutionStatus `protobuf:"varint,2,opt,name=receiver_contract_execution_status,json=receiverContractExecutionStatus,proto3,enum=capabilities.blockchain.aptos.v1alpha.ReceiverContractExecutionStatus,oneof" json:"receiver_contract_execution_status,omitempty"` + TxHash *string `protobuf:"bytes,3,opt,name=tx_hash,json=txHash,proto3,oneof" json:"tx_hash,omitempty"` // transaction hash (hex string with 0x prefix) + TransactionFee *uint64 `protobuf:"varint,4,opt,name=transaction_fee,json=transactionFee,proto3,oneof" json:"transaction_fee,omitempty"` // gas used in octas + ErrorMessage *string `protobuf:"bytes,5,opt,name=error_message,json=errorMessage,proto3,oneof" json:"error_message,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *WriteReportReply) Reset() { @@ -1318,6 +1373,13 @@ func (x *WriteReportReply) GetTxStatus() TxStatus { return TxStatus_TX_STATUS_FATAL } +func (x *WriteReportReply) GetReceiverContractExecutionStatus() ReceiverContractExecutionStatus { + if x != nil && x.ReceiverContractExecutionStatus != nil { + return *x.ReceiverContractExecutionStatus + } + return ReceiverContractExecutionStatus_RECEIVER_CONTRACT_EXECUTION_STATUS_SUCCESS +} + func (x *WriteReportReply) GetTxHash() string { if x != nil && x.TxHash != nil { return *x.TxHash @@ -1347,9 +1409,11 @@ const file_capabilities_blockchain_aptos_v1alpha_client_proto_rawDesc = "" + "\x18AccountAPTBalanceRequest\x12\x18\n" + "\aaddress\x18\x01 \x01(\fR\aaddress\".\n" + "\x16AccountAPTBalanceReply\x12\x14\n" + - "\x05value\x18\x01 \x01(\x04R\x05value\"[\n" + + "\x05value\x18\x01 \x01(\x04R\x05value\"\x9a\x01\n" + "\vViewRequest\x12L\n" + - "\apayload\x18\x01 \x01(\v22.capabilities.blockchain.aptos.v1alpha.ViewPayloadR\apayload\"\x1f\n" + + "\apayload\x18\x01 \x01(\v22.capabilities.blockchain.aptos.v1alpha.ViewPayloadR\apayload\x12*\n" + + "\x0eledger_version\x18\x02 \x01(\x04H\x00R\rledgerVersion\x88\x01\x01B\x11\n" + + "\x0f_ledger_version\"\x1f\n" + "\tViewReply\x12\x12\n" + "\x04data\x18\x01 \x01(\fR\x04data\"\xd3\x01\n" + "\vViewPayload\x12G\n" + @@ -1418,12 +1482,14 @@ const file_capabilities_blockchain_aptos_v1alpha_client_proto_rawDesc = "" + "\n" + "gas_config\x18\x02 \x01(\v20.capabilities.blockchain.aptos.v1alpha.GasConfigH\x00R\tgasConfig\x88\x01\x01\x123\n" + "\x06report\x18\x03 \x01(\v2\x1b.sdk.v1alpha.ReportResponseR\x06reportB\r\n" + - "\v_gas_config\"\x88\x02\n" + + "\v_gas_config\"\xca\x03\n" + "\x10WriteReportReply\x12L\n" + - "\ttx_status\x18\x01 \x01(\x0e2/.capabilities.blockchain.aptos.v1alpha.TxStatusR\btxStatus\x12\x1c\n" + - "\atx_hash\x18\x02 \x01(\tH\x00R\x06txHash\x88\x01\x01\x12,\n" + - "\x0ftransaction_fee\x18\x03 \x01(\x04H\x01R\x0etransactionFee\x88\x01\x01\x12(\n" + - "\rerror_message\x18\x04 \x01(\tH\x02R\ferrorMessage\x88\x01\x01B\n" + + "\ttx_status\x18\x01 \x01(\x0e2/.capabilities.blockchain.aptos.v1alpha.TxStatusR\btxStatus\x12\x98\x01\n" + + "\"receiver_contract_execution_status\x18\x02 \x01(\x0e2F.capabilities.blockchain.aptos.v1alpha.ReceiverContractExecutionStatusH\x00R\x1freceiverContractExecutionStatus\x88\x01\x01\x12\x1c\n" + + "\atx_hash\x18\x03 \x01(\tH\x01R\x06txHash\x88\x01\x01\x12,\n" + + "\x0ftransaction_fee\x18\x04 \x01(\x04H\x02R\x0etransactionFee\x88\x01\x01\x12(\n" + + "\rerror_message\x18\x05 \x01(\tH\x03R\ferrorMessage\x88\x01\x01B%\n" + + "#_receiver_contract_execution_statusB\n" + "\n" + "\b_tx_hashB\x12\n" + "\x10_transaction_feeB\x10\n" + @@ -1454,7 +1520,10 @@ const file_capabilities_blockchain_aptos_v1alpha_client_proto_rawDesc = "" + "\"TRANSACTION_VARIANT_BLOCK_EPILOGUE\x10\x04\x12(\n" + "$TRANSACTION_VARIANT_STATE_CHECKPOINT\x10\x05\x12!\n" + "\x1dTRANSACTION_VARIANT_VALIDATOR\x10\x06\x12\x1f\n" + - "\x1bTRANSACTION_VARIANT_UNKNOWN\x10\a2\xa2\x06\n" + + "\x1bTRANSACTION_VARIANT_UNKNOWN\x10\a*\x82\x01\n" + + "\x1fReceiverContractExecutionStatus\x12.\n" + + "*RECEIVER_CONTRACT_EXECUTION_STATUS_SUCCESS\x10\x00\x12/\n" + + "+RECEIVER_CONTRACT_EXECUTION_STATUS_REVERTED\x10\x012\xa2\x06\n" + "\x06Client\x12\x93\x01\n" + "\x11AccountAPTBalance\x12?.capabilities.blockchain.aptos.v1alpha.AccountAPTBalanceRequest\x1a=.capabilities.blockchain.aptos.v1alpha.AccountAPTBalanceReply\x12l\n" + "\x04View\x122.capabilities.blockchain.aptos.v1alpha.ViewRequest\x1a0.capabilities.blockchain.aptos.v1alpha.ViewReply\x12\x93\x01\n" + @@ -1480,68 +1549,70 @@ func file_capabilities_blockchain_aptos_v1alpha_client_proto_rawDescGZIP() []byt return file_capabilities_blockchain_aptos_v1alpha_client_proto_rawDescData } -var file_capabilities_blockchain_aptos_v1alpha_client_proto_enumTypes = make([]protoimpl.EnumInfo, 3) +var file_capabilities_blockchain_aptos_v1alpha_client_proto_enumTypes = make([]protoimpl.EnumInfo, 4) var file_capabilities_blockchain_aptos_v1alpha_client_proto_msgTypes = make([]protoimpl.MessageInfo, 20) var file_capabilities_blockchain_aptos_v1alpha_client_proto_goTypes = []any{ - (TxStatus)(0), // 0: capabilities.blockchain.aptos.v1alpha.TxStatus - (TypeTagKind)(0), // 1: capabilities.blockchain.aptos.v1alpha.TypeTagKind - (TransactionVariant)(0), // 2: capabilities.blockchain.aptos.v1alpha.TransactionVariant - (*AccountAPTBalanceRequest)(nil), // 3: capabilities.blockchain.aptos.v1alpha.AccountAPTBalanceRequest - (*AccountAPTBalanceReply)(nil), // 4: capabilities.blockchain.aptos.v1alpha.AccountAPTBalanceReply - (*ViewRequest)(nil), // 5: capabilities.blockchain.aptos.v1alpha.ViewRequest - (*ViewReply)(nil), // 6: capabilities.blockchain.aptos.v1alpha.ViewReply - (*ViewPayload)(nil), // 7: capabilities.blockchain.aptos.v1alpha.ViewPayload - (*ModuleID)(nil), // 8: capabilities.blockchain.aptos.v1alpha.ModuleID - (*TypeTag)(nil), // 9: capabilities.blockchain.aptos.v1alpha.TypeTag - (*VectorTag)(nil), // 10: capabilities.blockchain.aptos.v1alpha.VectorTag - (*StructTag)(nil), // 11: capabilities.blockchain.aptos.v1alpha.StructTag - (*GenericTag)(nil), // 12: capabilities.blockchain.aptos.v1alpha.GenericTag - (*TransactionByHashRequest)(nil), // 13: capabilities.blockchain.aptos.v1alpha.TransactionByHashRequest - (*TransactionByHashReply)(nil), // 14: capabilities.blockchain.aptos.v1alpha.TransactionByHashReply - (*Transaction)(nil), // 15: capabilities.blockchain.aptos.v1alpha.Transaction - (*AccountTransactionsRequest)(nil), // 16: capabilities.blockchain.aptos.v1alpha.AccountTransactionsRequest - (*AccountTransactionsReply)(nil), // 17: capabilities.blockchain.aptos.v1alpha.AccountTransactionsReply - (*SubmitTransactionRequest)(nil), // 18: capabilities.blockchain.aptos.v1alpha.SubmitTransactionRequest - (*SubmitTransactionReply)(nil), // 19: capabilities.blockchain.aptos.v1alpha.SubmitTransactionReply - (*GasConfig)(nil), // 20: capabilities.blockchain.aptos.v1alpha.GasConfig - (*WriteReportRequest)(nil), // 21: capabilities.blockchain.aptos.v1alpha.WriteReportRequest - (*WriteReportReply)(nil), // 22: capabilities.blockchain.aptos.v1alpha.WriteReportReply - (*sdk.ReportResponse)(nil), // 23: sdk.v1alpha.ReportResponse + (TxStatus)(0), // 0: capabilities.blockchain.aptos.v1alpha.TxStatus + (TypeTagKind)(0), // 1: capabilities.blockchain.aptos.v1alpha.TypeTagKind + (TransactionVariant)(0), // 2: capabilities.blockchain.aptos.v1alpha.TransactionVariant + (ReceiverContractExecutionStatus)(0), // 3: capabilities.blockchain.aptos.v1alpha.ReceiverContractExecutionStatus + (*AccountAPTBalanceRequest)(nil), // 4: capabilities.blockchain.aptos.v1alpha.AccountAPTBalanceRequest + (*AccountAPTBalanceReply)(nil), // 5: capabilities.blockchain.aptos.v1alpha.AccountAPTBalanceReply + (*ViewRequest)(nil), // 6: capabilities.blockchain.aptos.v1alpha.ViewRequest + (*ViewReply)(nil), // 7: capabilities.blockchain.aptos.v1alpha.ViewReply + (*ViewPayload)(nil), // 8: capabilities.blockchain.aptos.v1alpha.ViewPayload + (*ModuleID)(nil), // 9: capabilities.blockchain.aptos.v1alpha.ModuleID + (*TypeTag)(nil), // 10: capabilities.blockchain.aptos.v1alpha.TypeTag + (*VectorTag)(nil), // 11: capabilities.blockchain.aptos.v1alpha.VectorTag + (*StructTag)(nil), // 12: capabilities.blockchain.aptos.v1alpha.StructTag + (*GenericTag)(nil), // 13: capabilities.blockchain.aptos.v1alpha.GenericTag + (*TransactionByHashRequest)(nil), // 14: capabilities.blockchain.aptos.v1alpha.TransactionByHashRequest + (*TransactionByHashReply)(nil), // 15: capabilities.blockchain.aptos.v1alpha.TransactionByHashReply + (*Transaction)(nil), // 16: capabilities.blockchain.aptos.v1alpha.Transaction + (*AccountTransactionsRequest)(nil), // 17: capabilities.blockchain.aptos.v1alpha.AccountTransactionsRequest + (*AccountTransactionsReply)(nil), // 18: capabilities.blockchain.aptos.v1alpha.AccountTransactionsReply + (*SubmitTransactionRequest)(nil), // 19: capabilities.blockchain.aptos.v1alpha.SubmitTransactionRequest + (*SubmitTransactionReply)(nil), // 20: capabilities.blockchain.aptos.v1alpha.SubmitTransactionReply + (*GasConfig)(nil), // 21: capabilities.blockchain.aptos.v1alpha.GasConfig + (*WriteReportRequest)(nil), // 22: capabilities.blockchain.aptos.v1alpha.WriteReportRequest + (*WriteReportReply)(nil), // 23: capabilities.blockchain.aptos.v1alpha.WriteReportReply + (*sdk.ReportResponse)(nil), // 24: sdk.v1alpha.ReportResponse } var file_capabilities_blockchain_aptos_v1alpha_client_proto_depIdxs = []int32{ - 7, // 0: capabilities.blockchain.aptos.v1alpha.ViewRequest.payload:type_name -> capabilities.blockchain.aptos.v1alpha.ViewPayload - 8, // 1: capabilities.blockchain.aptos.v1alpha.ViewPayload.module:type_name -> capabilities.blockchain.aptos.v1alpha.ModuleID - 9, // 2: capabilities.blockchain.aptos.v1alpha.ViewPayload.arg_types:type_name -> capabilities.blockchain.aptos.v1alpha.TypeTag + 8, // 0: capabilities.blockchain.aptos.v1alpha.ViewRequest.payload:type_name -> capabilities.blockchain.aptos.v1alpha.ViewPayload + 9, // 1: capabilities.blockchain.aptos.v1alpha.ViewPayload.module:type_name -> capabilities.blockchain.aptos.v1alpha.ModuleID + 10, // 2: capabilities.blockchain.aptos.v1alpha.ViewPayload.arg_types:type_name -> capabilities.blockchain.aptos.v1alpha.TypeTag 1, // 3: capabilities.blockchain.aptos.v1alpha.TypeTag.kind:type_name -> capabilities.blockchain.aptos.v1alpha.TypeTagKind - 10, // 4: capabilities.blockchain.aptos.v1alpha.TypeTag.vector:type_name -> capabilities.blockchain.aptos.v1alpha.VectorTag - 11, // 5: capabilities.blockchain.aptos.v1alpha.TypeTag.struct:type_name -> capabilities.blockchain.aptos.v1alpha.StructTag - 12, // 6: capabilities.blockchain.aptos.v1alpha.TypeTag.generic:type_name -> capabilities.blockchain.aptos.v1alpha.GenericTag - 9, // 7: capabilities.blockchain.aptos.v1alpha.VectorTag.element_type:type_name -> capabilities.blockchain.aptos.v1alpha.TypeTag - 9, // 8: capabilities.blockchain.aptos.v1alpha.StructTag.type_params:type_name -> capabilities.blockchain.aptos.v1alpha.TypeTag - 15, // 9: capabilities.blockchain.aptos.v1alpha.TransactionByHashReply.transaction:type_name -> capabilities.blockchain.aptos.v1alpha.Transaction + 11, // 4: capabilities.blockchain.aptos.v1alpha.TypeTag.vector:type_name -> capabilities.blockchain.aptos.v1alpha.VectorTag + 12, // 5: capabilities.blockchain.aptos.v1alpha.TypeTag.struct:type_name -> capabilities.blockchain.aptos.v1alpha.StructTag + 13, // 6: capabilities.blockchain.aptos.v1alpha.TypeTag.generic:type_name -> capabilities.blockchain.aptos.v1alpha.GenericTag + 10, // 7: capabilities.blockchain.aptos.v1alpha.VectorTag.element_type:type_name -> capabilities.blockchain.aptos.v1alpha.TypeTag + 10, // 8: capabilities.blockchain.aptos.v1alpha.StructTag.type_params:type_name -> capabilities.blockchain.aptos.v1alpha.TypeTag + 16, // 9: capabilities.blockchain.aptos.v1alpha.TransactionByHashReply.transaction:type_name -> capabilities.blockchain.aptos.v1alpha.Transaction 2, // 10: capabilities.blockchain.aptos.v1alpha.Transaction.type:type_name -> capabilities.blockchain.aptos.v1alpha.TransactionVariant - 15, // 11: capabilities.blockchain.aptos.v1alpha.AccountTransactionsReply.transactions:type_name -> capabilities.blockchain.aptos.v1alpha.Transaction - 8, // 12: capabilities.blockchain.aptos.v1alpha.SubmitTransactionRequest.receiver_module_id:type_name -> capabilities.blockchain.aptos.v1alpha.ModuleID - 20, // 13: capabilities.blockchain.aptos.v1alpha.SubmitTransactionRequest.gas_config:type_name -> capabilities.blockchain.aptos.v1alpha.GasConfig + 16, // 11: capabilities.blockchain.aptos.v1alpha.AccountTransactionsReply.transactions:type_name -> capabilities.blockchain.aptos.v1alpha.Transaction + 9, // 12: capabilities.blockchain.aptos.v1alpha.SubmitTransactionRequest.receiver_module_id:type_name -> capabilities.blockchain.aptos.v1alpha.ModuleID + 21, // 13: capabilities.blockchain.aptos.v1alpha.SubmitTransactionRequest.gas_config:type_name -> capabilities.blockchain.aptos.v1alpha.GasConfig 0, // 14: capabilities.blockchain.aptos.v1alpha.SubmitTransactionReply.tx_status:type_name -> capabilities.blockchain.aptos.v1alpha.TxStatus - 20, // 15: capabilities.blockchain.aptos.v1alpha.WriteReportRequest.gas_config:type_name -> capabilities.blockchain.aptos.v1alpha.GasConfig - 23, // 16: capabilities.blockchain.aptos.v1alpha.WriteReportRequest.report:type_name -> sdk.v1alpha.ReportResponse + 21, // 15: capabilities.blockchain.aptos.v1alpha.WriteReportRequest.gas_config:type_name -> capabilities.blockchain.aptos.v1alpha.GasConfig + 24, // 16: capabilities.blockchain.aptos.v1alpha.WriteReportRequest.report:type_name -> sdk.v1alpha.ReportResponse 0, // 17: capabilities.blockchain.aptos.v1alpha.WriteReportReply.tx_status:type_name -> capabilities.blockchain.aptos.v1alpha.TxStatus - 3, // 18: capabilities.blockchain.aptos.v1alpha.Client.AccountAPTBalance:input_type -> capabilities.blockchain.aptos.v1alpha.AccountAPTBalanceRequest - 5, // 19: capabilities.blockchain.aptos.v1alpha.Client.View:input_type -> capabilities.blockchain.aptos.v1alpha.ViewRequest - 13, // 20: capabilities.blockchain.aptos.v1alpha.Client.TransactionByHash:input_type -> capabilities.blockchain.aptos.v1alpha.TransactionByHashRequest - 16, // 21: capabilities.blockchain.aptos.v1alpha.Client.AccountTransactions:input_type -> capabilities.blockchain.aptos.v1alpha.AccountTransactionsRequest - 21, // 22: capabilities.blockchain.aptos.v1alpha.Client.WriteReport:input_type -> capabilities.blockchain.aptos.v1alpha.WriteReportRequest - 4, // 23: capabilities.blockchain.aptos.v1alpha.Client.AccountAPTBalance:output_type -> capabilities.blockchain.aptos.v1alpha.AccountAPTBalanceReply - 6, // 24: capabilities.blockchain.aptos.v1alpha.Client.View:output_type -> capabilities.blockchain.aptos.v1alpha.ViewReply - 14, // 25: capabilities.blockchain.aptos.v1alpha.Client.TransactionByHash:output_type -> capabilities.blockchain.aptos.v1alpha.TransactionByHashReply - 17, // 26: capabilities.blockchain.aptos.v1alpha.Client.AccountTransactions:output_type -> capabilities.blockchain.aptos.v1alpha.AccountTransactionsReply - 22, // 27: capabilities.blockchain.aptos.v1alpha.Client.WriteReport:output_type -> capabilities.blockchain.aptos.v1alpha.WriteReportReply - 23, // [23:28] is the sub-list for method output_type - 18, // [18:23] is the sub-list for method input_type - 18, // [18:18] is the sub-list for extension type_name - 18, // [18:18] is the sub-list for extension extendee - 0, // [0:18] is the sub-list for field type_name + 3, // 18: capabilities.blockchain.aptos.v1alpha.WriteReportReply.receiver_contract_execution_status:type_name -> capabilities.blockchain.aptos.v1alpha.ReceiverContractExecutionStatus + 4, // 19: capabilities.blockchain.aptos.v1alpha.Client.AccountAPTBalance:input_type -> capabilities.blockchain.aptos.v1alpha.AccountAPTBalanceRequest + 6, // 20: capabilities.blockchain.aptos.v1alpha.Client.View:input_type -> capabilities.blockchain.aptos.v1alpha.ViewRequest + 14, // 21: capabilities.blockchain.aptos.v1alpha.Client.TransactionByHash:input_type -> capabilities.blockchain.aptos.v1alpha.TransactionByHashRequest + 17, // 22: capabilities.blockchain.aptos.v1alpha.Client.AccountTransactions:input_type -> capabilities.blockchain.aptos.v1alpha.AccountTransactionsRequest + 22, // 23: capabilities.blockchain.aptos.v1alpha.Client.WriteReport:input_type -> capabilities.blockchain.aptos.v1alpha.WriteReportRequest + 5, // 24: capabilities.blockchain.aptos.v1alpha.Client.AccountAPTBalance:output_type -> capabilities.blockchain.aptos.v1alpha.AccountAPTBalanceReply + 7, // 25: capabilities.blockchain.aptos.v1alpha.Client.View:output_type -> capabilities.blockchain.aptos.v1alpha.ViewReply + 15, // 26: capabilities.blockchain.aptos.v1alpha.Client.TransactionByHash:output_type -> capabilities.blockchain.aptos.v1alpha.TransactionByHashReply + 18, // 27: capabilities.blockchain.aptos.v1alpha.Client.AccountTransactions:output_type -> capabilities.blockchain.aptos.v1alpha.AccountTransactionsReply + 23, // 28: capabilities.blockchain.aptos.v1alpha.Client.WriteReport:output_type -> capabilities.blockchain.aptos.v1alpha.WriteReportReply + 24, // [24:29] is the sub-list for method output_type + 19, // [19:24] is the sub-list for method input_type + 19, // [19:19] is the sub-list for extension type_name + 19, // [19:19] is the sub-list for extension extendee + 0, // [0:19] is the sub-list for field type_name } func init() { file_capabilities_blockchain_aptos_v1alpha_client_proto_init() } @@ -1549,6 +1620,7 @@ func file_capabilities_blockchain_aptos_v1alpha_client_proto_init() { if File_capabilities_blockchain_aptos_v1alpha_client_proto != nil { return } + file_capabilities_blockchain_aptos_v1alpha_client_proto_msgTypes[2].OneofWrappers = []any{} file_capabilities_blockchain_aptos_v1alpha_client_proto_msgTypes[6].OneofWrappers = []any{ (*TypeTag_Vector)(nil), (*TypeTag_Struct)(nil), @@ -1565,7 +1637,7 @@ func file_capabilities_blockchain_aptos_v1alpha_client_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_capabilities_blockchain_aptos_v1alpha_client_proto_rawDesc), len(file_capabilities_blockchain_aptos_v1alpha_client_proto_rawDesc)), - NumEnums: 3, + NumEnums: 4, NumMessages: 20, NumExtensions: 0, NumServices: 1, diff --git a/pkg/capabilities/v2/chain-capabilities/evm/client.pb.go b/pkg/capabilities/v2/chain-capabilities/evm/client.pb.go index a4327ae5c5..16a078477e 100644 --- a/pkg/capabilities/v2/chain-capabilities/evm/client.pb.go +++ b/pkg/capabilities/v2/chain-capabilities/evm/client.pb.go @@ -1791,7 +1791,7 @@ const file_capabilities_blockchain_evm_v1alpha_client_proto_rawDesc = "" + "\bTxStatus\x12\x13\n" + "\x0fTX_STATUS_FATAL\x10\x00\x12\x16\n" + "\x12TX_STATUS_REVERTED\x10\x01\x12\x15\n" + - "\x11TX_STATUS_SUCCESS\x10\x022\xcb\x11\n" + + "\x11TX_STATUS_SUCCESS\x10\x022\xbb\x17\n" + "\x06Client\x12\x80\x01\n" + "\fCallContract\x128.capabilities.blockchain.evm.v1alpha.CallContractRequest\x1a6.capabilities.blockchain.evm.v1alpha.CallContractReply\x12z\n" + "\n" + @@ -1803,8 +1803,8 @@ const file_capabilities_blockchain_evm_v1alpha_client_proto_rawDesc = "" + "\x0eHeaderByNumber\x12:.capabilities.blockchain.evm.v1alpha.HeaderByNumberRequest\x1a8.capabilities.blockchain.evm.v1alpha.HeaderByNumberReply\x12v\n" + "\n" + "LogTrigger\x12<.capabilities.blockchain.evm.v1alpha.FilterLogTriggerRequest\x1a(.capabilities.blockchain.evm.v1alpha.Log0\x01\x12}\n" + - "\vWriteReport\x127.capabilities.blockchain.evm.v1alpha.WriteReportRequest\x1a5.capabilities.blockchain.evm.v1alpha.WriteReportReply\x1a\x90\b\x82\xb5\x18\x8b\b\b\x01\x12\tevm@1.0.0\x1a\xfb\a\n" + - "\rChainSelector\x12\xe9\a\x12\xe6\a\n" + + "\vWriteReport\x127.capabilities.blockchain.evm.v1alpha.WriteReportRequest\x1a5.capabilities.blockchain.evm.v1alpha.WriteReportReply\x1a\x80\x0e\x82\xb5\x18\xfb\r\b\x01\x12\tevm@1.0.0\x1a\xeb\r\n" + + "\rChainSelector\x12\xd9\r\x12\xd6\r\n" + "$\n" + "\x17apechain-testnet-curtis\x10\xc1ô\xf8\x8dĒ\xb2\x89\x01\n" + "\x17\n" + @@ -1817,17 +1817,33 @@ const file_capabilities_blockchain_evm_v1alpha_client_proto_rawDesc = "" + "\x1bbinance_smart_chain-mainnet\x10\xcf\xf7\x94\xf1\xd8핸\x9d\x01\n" + "(\n" + "\x1bbinance_smart_chain-testnet\x10\xfb\xad\xbe\x9c\x80\xae䊸\x01\n" + + "\x18\n" + + "\fcelo-mainnet\x10\x86\xd4\xe8؆\x93\x88\xd7\x12\n" + + "\x1a\n" + + "\x0ecronos-testnet\x10\xfd\xd9\xee\xad\xe0\xde\xda\xc8)\n" + + "\"\n" + + "\x15dtcc-testnet-andesite\x10҃\xe3Й\x96\xe5\xa4\xd7\x01\n" + "\x1c\n" + "\x10ethereum-mainnet\x10\x95\xf6\xf1\xe4ϲ\xa6\xc2E\n" + "'\n" + "\x1bethereum-mainnet-arbitrum-1\x10\xc4\xe8\x8d͎\x9b\xa1\xd7D\n" + "$\n" + "\x17ethereum-mainnet-base-1\x10\x82\xff\xab\xa2\xfe\xb9\x90\xd3\xdd\x01\n" + + "\"\n" + + "\x16ethereum-mainnet-ink-1\x10\xa0\xb0\xa6\xe9\xb7檄0\n" + + "$\n" + + "\x18ethereum-mainnet-linea-1\x10\xb6\xba\xe9\x98˽\xb0\x9b@\n" + + "%\n" + + "\x19ethereum-mainnet-mantle-1\x10\x8a紕簃\xcc\x15\n" + "'\n" + "\x1bethereum-mainnet-optimism-1\x10\xb8\x95\x8f\xc3\xf7\xfe\xd0\xe93\n" + + "&\n" + + "\x19ethereum-mainnet-scroll-1\x10\xb8\xbc\xe4\xebľȟ\xb7\x01\n" + ")\n" + "\x1dethereum-mainnet-worldchain-1\x10\x87ﺷŶ¸\x1c\n" + "%\n" + + "\x19ethereum-mainnet-xlayer-1\x10\x96\xa5\xfc\x9c\xa6\xa8\xef\xed)\n" + + "%\n" + "\x19ethereum-mainnet-zksync-1\x10\x94\xee\x97\xd9\xed\xb4\xb1\xd7\x15\n" + "%\n" + "\x18ethereum-testnet-sepolia\x10ٵ\xe4\xce\xfc\xc9\xee\xa0\xde\x01\n" + @@ -1837,18 +1853,38 @@ const file_capabilities_blockchain_evm_v1alpha_client_proto_rawDesc = "" + "\x1fethereum-testnet-sepolia-base-1\x10\xb8ʹ\xef\xf6\x90\xaeȏ\x01\n" + ",\n" + " ethereum-testnet-sepolia-linea-1\x10\xeb\xaa\xd4\xfe\x82\xf9\xe6\xafO\n" + + "-\n" + + "!ethereum-testnet-sepolia-mantle-1\x10\xd5Ƹ\xee\xcd\xf6\xf2\xa6r\n" + "/\n" + "#ethereum-testnet-sepolia-optimism-1\x10\x9f\x86š\xbe\xd8\xc3\xc0H\n" + + "-\n" + + "!ethereum-testnet-sepolia-scroll-1\x10\x8b鴾ۺ\xed\xd1\x1f\n" + + "0\n" + + "#ethereum-testnet-sepolia-unichain-1\x10\xb4\xde\xfe\xe0엩\x96\xc4\x01\n" + "1\n" + "%ethereum-testnet-sepolia-worldchain-1\x10\xba\xdf\xe0\xc5ǩ\xf3\xc5I\n" + "-\n" + "!ethereum-testnet-sepolia-zksync-1\x10\xb7\xc1\xfc\xfd\xf2Ā\xde_\n" + + " \n" + + "\x14gnosis_chain-mainnet\x10\xf4\x92\xad\xda\U000a2bba\x06\n" + "\x1f\n" + "\x13hyperliquid-testnet\x10\x88\xce\xddȗ\xe0ɽ;\n" + " \n" + "\x13ink-testnet-sepolia\x10\xe8\xf4\xa7\xa5\xf3\xe6\x96\xc0\x87\x01\n" + "\x19\n" + + "\rjovay-mainnet\x10\xb5\xc3Ě\xa1\x80ߒ\x15\n" + + "\x19\n" + "\rjovay-testnet\x10\xe4ϊ\x84\u07b2ގ\r\n" + + "\x1b\n" + + "\x0fmegaeth-mainnet\x10ꕶȼ\xe4\xa6\xc8T\n" + + "\x1e\n" + + "\x11megaeth-testnet-2\x10\xe3\x8dވ\xb1\x8f\xfd\x93\xfd\x01\n" + + "$\n" + + "\x17pharos-atlantic-testnet\x10̙\xed\xe0μ\xaf\xb4\xdf\x01\n" + + "\x1a\n" + + "\x0epharos-mainnet\x10\xc8\xc1\x87\x9e\xf5\xef͡l\n" + + "\x1b\n" + + "\x0eplasma-mainnet\x10\xf8\x9b\xf1\xd1\xda\xc9\xd5Ɓ\x01\n" + "\x1a\n" + "\x0eplasma-testnet\x10՛\xbf\xa5ô\x99\x877\n" + "\x1b\n" + @@ -1856,7 +1892,15 @@ const file_capabilities_blockchain_evm_v1alpha_client_proto_rawDesc = "" + "!\n" + "\x14polygon-testnet-amoy\x10͏\xd6\xdf\xf1ǐ\xfa\xe1\x01\n" + "$\n" + - "\x18private-testnet-andesite\x10Ԧ\x98\xa5\xc1\x8f\xdc\xfc_b\x06proto3" + "\x18private-testnet-andesite\x10Ԧ\x98\xa5\xc1\x8f\xdc\xfc_\n" + + "\x19\n" + + "\rsonic-mainnet\x10Ѳ\xe5\xed٠\xb2\x9d\x17\n" + + "\x19\n" + + "\rsonic-testnet\x10Ȉ\xfbԴ\xc6\xfa\xbc\x18\n" + + "\x18\n" + + "\vtac-testnet\x10\xd5ۍ\xe3\xfb\x9f\x93׃\x01\n" + + "\x1b\n" + + "\x0exlayer-testnet\x10ɾ\xa1\xb4\xad̼ݍ\x01b\x06proto3" var ( file_capabilities_blockchain_evm_v1alpha_client_proto_rawDescOnce sync.Once diff --git a/pkg/capabilities/v2/chain-capabilities/solana/generate.go b/pkg/capabilities/v2/chain-capabilities/solana/generate.go index 9cdf1a6b56..c843923205 100644 --- a/pkg/capabilities/v2/chain-capabilities/solana/generate.go +++ b/pkg/capabilities/v2/chain-capabilities/solana/generate.go @@ -1,2 +1,4 @@ -//go:generate go run ../../gen --pkg=github.com/smartcontractkit/chainlink-common/pkg/capabilities/v2/chain-capabilities/solana --file=capabilities/blockchain/solana/v1alpha/client.proto +// TODO(CRE-): Re-enable Solana proto regeneration once chainlink-protos/cre/go +// embeds capabilities/blockchain/solana/v1alpha/client.proto again. +//go:generate echo "skipping solana proto regen: source proto not available in chainlink-protos/cre/go" package solana diff --git a/pkg/chains/aptos/aptos.pb.go b/pkg/chains/aptos/aptos.pb.go index 1578de42ca..1693ac17e6 100644 --- a/pkg/chains/aptos/aptos.pb.go +++ b/pkg/chains/aptos/aptos.pb.go @@ -210,6 +210,86 @@ func (TxStatus) EnumDescriptor() ([]byte, []int) { return file_aptos_proto_rawDescGZIP(), []int{2} } +type LedgerVersionRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *LedgerVersionRequest) Reset() { + *x = LedgerVersionRequest{} + mi := &file_aptos_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *LedgerVersionRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LedgerVersionRequest) ProtoMessage() {} + +func (x *LedgerVersionRequest) ProtoReflect() protoreflect.Message { + mi := &file_aptos_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LedgerVersionRequest.ProtoReflect.Descriptor instead. +func (*LedgerVersionRequest) Descriptor() ([]byte, []int) { + return file_aptos_proto_rawDescGZIP(), []int{0} +} + +type LedgerVersionReply struct { + state protoimpl.MessageState `protogen:"open.v1"` + LedgerVersion uint64 `protobuf:"varint,1,opt,name=ledger_version,json=ledgerVersion,proto3" json:"ledger_version,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *LedgerVersionReply) Reset() { + *x = LedgerVersionReply{} + mi := &file_aptos_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *LedgerVersionReply) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LedgerVersionReply) ProtoMessage() {} + +func (x *LedgerVersionReply) ProtoReflect() protoreflect.Message { + mi := &file_aptos_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LedgerVersionReply.ProtoReflect.Descriptor instead. +func (*LedgerVersionReply) Descriptor() ([]byte, []int) { + return file_aptos_proto_rawDescGZIP(), []int{1} +} + +func (x *LedgerVersionReply) GetLedgerVersion() uint64 { + if x != nil { + return x.LedgerVersion + } + return 0 +} + type AccountAPTBalanceRequest struct { state protoimpl.MessageState `protogen:"open.v1"` Address []byte `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` // 32-byte address @@ -219,7 +299,7 @@ type AccountAPTBalanceRequest struct { func (x *AccountAPTBalanceRequest) Reset() { *x = AccountAPTBalanceRequest{} - mi := &file_aptos_proto_msgTypes[0] + mi := &file_aptos_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -231,7 +311,7 @@ func (x *AccountAPTBalanceRequest) String() string { func (*AccountAPTBalanceRequest) ProtoMessage() {} func (x *AccountAPTBalanceRequest) ProtoReflect() protoreflect.Message { - mi := &file_aptos_proto_msgTypes[0] + mi := &file_aptos_proto_msgTypes[2] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -244,7 +324,7 @@ func (x *AccountAPTBalanceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use AccountAPTBalanceRequest.ProtoReflect.Descriptor instead. func (*AccountAPTBalanceRequest) Descriptor() ([]byte, []int) { - return file_aptos_proto_rawDescGZIP(), []int{0} + return file_aptos_proto_rawDescGZIP(), []int{2} } func (x *AccountAPTBalanceRequest) GetAddress() []byte { @@ -263,7 +343,7 @@ type AccountAPTBalanceReply struct { func (x *AccountAPTBalanceReply) Reset() { *x = AccountAPTBalanceReply{} - mi := &file_aptos_proto_msgTypes[1] + mi := &file_aptos_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -275,7 +355,7 @@ func (x *AccountAPTBalanceReply) String() string { func (*AccountAPTBalanceReply) ProtoMessage() {} func (x *AccountAPTBalanceReply) ProtoReflect() protoreflect.Message { - mi := &file_aptos_proto_msgTypes[1] + mi := &file_aptos_proto_msgTypes[3] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -288,7 +368,7 @@ func (x *AccountAPTBalanceReply) ProtoReflect() protoreflect.Message { // Deprecated: Use AccountAPTBalanceReply.ProtoReflect.Descriptor instead. func (*AccountAPTBalanceReply) Descriptor() ([]byte, []int) { - return file_aptos_proto_rawDescGZIP(), []int{1} + return file_aptos_proto_rawDescGZIP(), []int{3} } func (x *AccountAPTBalanceReply) GetValue() uint64 { @@ -301,13 +381,14 @@ func (x *AccountAPTBalanceReply) GetValue() uint64 { type ViewRequest struct { state protoimpl.MessageState `protogen:"open.v1"` Payload *ViewPayload `protobuf:"bytes,1,opt,name=payload,proto3" json:"payload,omitempty"` + LedgerVersion *uint64 `protobuf:"varint,2,opt,name=ledger_version,json=ledgerVersion,proto3,oneof" json:"ledger_version,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *ViewRequest) Reset() { *x = ViewRequest{} - mi := &file_aptos_proto_msgTypes[2] + mi := &file_aptos_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -319,7 +400,7 @@ func (x *ViewRequest) String() string { func (*ViewRequest) ProtoMessage() {} func (x *ViewRequest) ProtoReflect() protoreflect.Message { - mi := &file_aptos_proto_msgTypes[2] + mi := &file_aptos_proto_msgTypes[4] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -332,7 +413,7 @@ func (x *ViewRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ViewRequest.ProtoReflect.Descriptor instead. func (*ViewRequest) Descriptor() ([]byte, []int) { - return file_aptos_proto_rawDescGZIP(), []int{2} + return file_aptos_proto_rawDescGZIP(), []int{4} } func (x *ViewRequest) GetPayload() *ViewPayload { @@ -342,6 +423,13 @@ func (x *ViewRequest) GetPayload() *ViewPayload { return nil } +func (x *ViewRequest) GetLedgerVersion() uint64 { + if x != nil && x.LedgerVersion != nil { + return *x.LedgerVersion + } + return 0 +} + type ViewReply struct { state protoimpl.MessageState `protogen:"open.v1"` Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` @@ -351,7 +439,7 @@ type ViewReply struct { func (x *ViewReply) Reset() { *x = ViewReply{} - mi := &file_aptos_proto_msgTypes[3] + mi := &file_aptos_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -363,7 +451,7 @@ func (x *ViewReply) String() string { func (*ViewReply) ProtoMessage() {} func (x *ViewReply) ProtoReflect() protoreflect.Message { - mi := &file_aptos_proto_msgTypes[3] + mi := &file_aptos_proto_msgTypes[5] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -376,7 +464,7 @@ func (x *ViewReply) ProtoReflect() protoreflect.Message { // Deprecated: Use ViewReply.ProtoReflect.Descriptor instead. func (*ViewReply) Descriptor() ([]byte, []int) { - return file_aptos_proto_rawDescGZIP(), []int{3} + return file_aptos_proto_rawDescGZIP(), []int{5} } func (x *ViewReply) GetData() []byte { @@ -398,7 +486,7 @@ type ViewPayload struct { func (x *ViewPayload) Reset() { *x = ViewPayload{} - mi := &file_aptos_proto_msgTypes[4] + mi := &file_aptos_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -410,7 +498,7 @@ func (x *ViewPayload) String() string { func (*ViewPayload) ProtoMessage() {} func (x *ViewPayload) ProtoReflect() protoreflect.Message { - mi := &file_aptos_proto_msgTypes[4] + mi := &file_aptos_proto_msgTypes[6] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -423,7 +511,7 @@ func (x *ViewPayload) ProtoReflect() protoreflect.Message { // Deprecated: Use ViewPayload.ProtoReflect.Descriptor instead. func (*ViewPayload) Descriptor() ([]byte, []int) { - return file_aptos_proto_rawDescGZIP(), []int{4} + return file_aptos_proto_rawDescGZIP(), []int{6} } func (x *ViewPayload) GetModule() *ModuleID { @@ -464,7 +552,7 @@ type ModuleID struct { func (x *ModuleID) Reset() { *x = ModuleID{} - mi := &file_aptos_proto_msgTypes[5] + mi := &file_aptos_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -476,7 +564,7 @@ func (x *ModuleID) String() string { func (*ModuleID) ProtoMessage() {} func (x *ModuleID) ProtoReflect() protoreflect.Message { - mi := &file_aptos_proto_msgTypes[5] + mi := &file_aptos_proto_msgTypes[7] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -489,7 +577,7 @@ func (x *ModuleID) ProtoReflect() protoreflect.Message { // Deprecated: Use ModuleID.ProtoReflect.Descriptor instead. func (*ModuleID) Descriptor() ([]byte, []int) { - return file_aptos_proto_rawDescGZIP(), []int{5} + return file_aptos_proto_rawDescGZIP(), []int{7} } func (x *ModuleID) GetAddress() []byte { @@ -521,7 +609,7 @@ type TypeTag struct { func (x *TypeTag) Reset() { *x = TypeTag{} - mi := &file_aptos_proto_msgTypes[6] + mi := &file_aptos_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -533,7 +621,7 @@ func (x *TypeTag) String() string { func (*TypeTag) ProtoMessage() {} func (x *TypeTag) ProtoReflect() protoreflect.Message { - mi := &file_aptos_proto_msgTypes[6] + mi := &file_aptos_proto_msgTypes[8] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -546,7 +634,7 @@ func (x *TypeTag) ProtoReflect() protoreflect.Message { // Deprecated: Use TypeTag.ProtoReflect.Descriptor instead. func (*TypeTag) Descriptor() ([]byte, []int) { - return file_aptos_proto_rawDescGZIP(), []int{6} + return file_aptos_proto_rawDescGZIP(), []int{8} } func (x *TypeTag) GetKind() TypeTagKind { @@ -621,7 +709,7 @@ type VectorTag struct { func (x *VectorTag) Reset() { *x = VectorTag{} - mi := &file_aptos_proto_msgTypes[7] + mi := &file_aptos_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -633,7 +721,7 @@ func (x *VectorTag) String() string { func (*VectorTag) ProtoMessage() {} func (x *VectorTag) ProtoReflect() protoreflect.Message { - mi := &file_aptos_proto_msgTypes[7] + mi := &file_aptos_proto_msgTypes[9] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -646,7 +734,7 @@ func (x *VectorTag) ProtoReflect() protoreflect.Message { // Deprecated: Use VectorTag.ProtoReflect.Descriptor instead. func (*VectorTag) Descriptor() ([]byte, []int) { - return file_aptos_proto_rawDescGZIP(), []int{7} + return file_aptos_proto_rawDescGZIP(), []int{9} } func (x *VectorTag) GetElementType() *TypeTag { @@ -668,7 +756,7 @@ type StructTag struct { func (x *StructTag) Reset() { *x = StructTag{} - mi := &file_aptos_proto_msgTypes[8] + mi := &file_aptos_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -680,7 +768,7 @@ func (x *StructTag) String() string { func (*StructTag) ProtoMessage() {} func (x *StructTag) ProtoReflect() protoreflect.Message { - mi := &file_aptos_proto_msgTypes[8] + mi := &file_aptos_proto_msgTypes[10] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -693,7 +781,7 @@ func (x *StructTag) ProtoReflect() protoreflect.Message { // Deprecated: Use StructTag.ProtoReflect.Descriptor instead. func (*StructTag) Descriptor() ([]byte, []int) { - return file_aptos_proto_rawDescGZIP(), []int{8} + return file_aptos_proto_rawDescGZIP(), []int{10} } func (x *StructTag) GetAddress() []byte { @@ -733,7 +821,7 @@ type GenericTag struct { func (x *GenericTag) Reset() { *x = GenericTag{} - mi := &file_aptos_proto_msgTypes[9] + mi := &file_aptos_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -745,7 +833,7 @@ func (x *GenericTag) String() string { func (*GenericTag) ProtoMessage() {} func (x *GenericTag) ProtoReflect() protoreflect.Message { - mi := &file_aptos_proto_msgTypes[9] + mi := &file_aptos_proto_msgTypes[11] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -758,7 +846,7 @@ func (x *GenericTag) ProtoReflect() protoreflect.Message { // Deprecated: Use GenericTag.ProtoReflect.Descriptor instead. func (*GenericTag) Descriptor() ([]byte, []int) { - return file_aptos_proto_rawDescGZIP(), []int{9} + return file_aptos_proto_rawDescGZIP(), []int{11} } func (x *GenericTag) GetIndex() uint32 { @@ -777,7 +865,7 @@ type TransactionByHashRequest struct { func (x *TransactionByHashRequest) Reset() { *x = TransactionByHashRequest{} - mi := &file_aptos_proto_msgTypes[10] + mi := &file_aptos_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -789,7 +877,7 @@ func (x *TransactionByHashRequest) String() string { func (*TransactionByHashRequest) ProtoMessage() {} func (x *TransactionByHashRequest) ProtoReflect() protoreflect.Message { - mi := &file_aptos_proto_msgTypes[10] + mi := &file_aptos_proto_msgTypes[12] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -802,7 +890,7 @@ func (x *TransactionByHashRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TransactionByHashRequest.ProtoReflect.Descriptor instead. func (*TransactionByHashRequest) Descriptor() ([]byte, []int) { - return file_aptos_proto_rawDescGZIP(), []int{10} + return file_aptos_proto_rawDescGZIP(), []int{12} } func (x *TransactionByHashRequest) GetHash() string { @@ -821,7 +909,7 @@ type TransactionByHashReply struct { func (x *TransactionByHashReply) Reset() { *x = TransactionByHashReply{} - mi := &file_aptos_proto_msgTypes[11] + mi := &file_aptos_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -833,7 +921,7 @@ func (x *TransactionByHashReply) String() string { func (*TransactionByHashReply) ProtoMessage() {} func (x *TransactionByHashReply) ProtoReflect() protoreflect.Message { - mi := &file_aptos_proto_msgTypes[11] + mi := &file_aptos_proto_msgTypes[13] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -846,7 +934,7 @@ func (x *TransactionByHashReply) ProtoReflect() protoreflect.Message { // Deprecated: Use TransactionByHashReply.ProtoReflect.Descriptor instead. func (*TransactionByHashReply) Descriptor() ([]byte, []int) { - return file_aptos_proto_rawDescGZIP(), []int{11} + return file_aptos_proto_rawDescGZIP(), []int{13} } func (x *TransactionByHashReply) GetTransaction() *Transaction { @@ -869,7 +957,7 @@ type Transaction struct { func (x *Transaction) Reset() { *x = Transaction{} - mi := &file_aptos_proto_msgTypes[12] + mi := &file_aptos_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -881,7 +969,7 @@ func (x *Transaction) String() string { func (*Transaction) ProtoMessage() {} func (x *Transaction) ProtoReflect() protoreflect.Message { - mi := &file_aptos_proto_msgTypes[12] + mi := &file_aptos_proto_msgTypes[14] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -894,7 +982,7 @@ func (x *Transaction) ProtoReflect() protoreflect.Message { // Deprecated: Use Transaction.ProtoReflect.Descriptor instead. func (*Transaction) Descriptor() ([]byte, []int) { - return file_aptos_proto_rawDescGZIP(), []int{12} + return file_aptos_proto_rawDescGZIP(), []int{14} } func (x *Transaction) GetType() TransactionVariant { @@ -943,7 +1031,7 @@ type AccountTransactionsRequest struct { func (x *AccountTransactionsRequest) Reset() { *x = AccountTransactionsRequest{} - mi := &file_aptos_proto_msgTypes[13] + mi := &file_aptos_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -955,7 +1043,7 @@ func (x *AccountTransactionsRequest) String() string { func (*AccountTransactionsRequest) ProtoMessage() {} func (x *AccountTransactionsRequest) ProtoReflect() protoreflect.Message { - mi := &file_aptos_proto_msgTypes[13] + mi := &file_aptos_proto_msgTypes[15] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -968,7 +1056,7 @@ func (x *AccountTransactionsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use AccountTransactionsRequest.ProtoReflect.Descriptor instead. func (*AccountTransactionsRequest) Descriptor() ([]byte, []int) { - return file_aptos_proto_rawDescGZIP(), []int{13} + return file_aptos_proto_rawDescGZIP(), []int{15} } func (x *AccountTransactionsRequest) GetAddress() []byte { @@ -1001,7 +1089,7 @@ type AccountTransactionsReply struct { func (x *AccountTransactionsReply) Reset() { *x = AccountTransactionsReply{} - mi := &file_aptos_proto_msgTypes[14] + mi := &file_aptos_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1013,7 +1101,7 @@ func (x *AccountTransactionsReply) String() string { func (*AccountTransactionsReply) ProtoMessage() {} func (x *AccountTransactionsReply) ProtoReflect() protoreflect.Message { - mi := &file_aptos_proto_msgTypes[14] + mi := &file_aptos_proto_msgTypes[16] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1026,7 +1114,7 @@ func (x *AccountTransactionsReply) ProtoReflect() protoreflect.Message { // Deprecated: Use AccountTransactionsReply.ProtoReflect.Descriptor instead. func (*AccountTransactionsReply) Descriptor() ([]byte, []int) { - return file_aptos_proto_rawDescGZIP(), []int{14} + return file_aptos_proto_rawDescGZIP(), []int{16} } func (x *AccountTransactionsReply) GetTransactions() []*Transaction { @@ -1047,7 +1135,7 @@ type SubmitTransactionRequest struct { func (x *SubmitTransactionRequest) Reset() { *x = SubmitTransactionRequest{} - mi := &file_aptos_proto_msgTypes[15] + mi := &file_aptos_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1059,7 +1147,7 @@ func (x *SubmitTransactionRequest) String() string { func (*SubmitTransactionRequest) ProtoMessage() {} func (x *SubmitTransactionRequest) ProtoReflect() protoreflect.Message { - mi := &file_aptos_proto_msgTypes[15] + mi := &file_aptos_proto_msgTypes[17] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1072,7 +1160,7 @@ func (x *SubmitTransactionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SubmitTransactionRequest.ProtoReflect.Descriptor instead. func (*SubmitTransactionRequest) Descriptor() ([]byte, []int) { - return file_aptos_proto_rawDescGZIP(), []int{15} + return file_aptos_proto_rawDescGZIP(), []int{17} } func (x *SubmitTransactionRequest) GetReceiverModuleId() *ModuleID { @@ -1107,7 +1195,7 @@ type SubmitTransactionReply struct { func (x *SubmitTransactionReply) Reset() { *x = SubmitTransactionReply{} - mi := &file_aptos_proto_msgTypes[16] + mi := &file_aptos_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1119,7 +1207,7 @@ func (x *SubmitTransactionReply) String() string { func (*SubmitTransactionReply) ProtoMessage() {} func (x *SubmitTransactionReply) ProtoReflect() protoreflect.Message { - mi := &file_aptos_proto_msgTypes[16] + mi := &file_aptos_proto_msgTypes[18] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1132,7 +1220,7 @@ func (x *SubmitTransactionReply) ProtoReflect() protoreflect.Message { // Deprecated: Use SubmitTransactionReply.ProtoReflect.Descriptor instead. func (*SubmitTransactionReply) Descriptor() ([]byte, []int) { - return file_aptos_proto_rawDescGZIP(), []int{16} + return file_aptos_proto_rawDescGZIP(), []int{18} } func (x *SubmitTransactionReply) GetTxStatus() TxStatus { @@ -1166,7 +1254,7 @@ type GasConfig struct { func (x *GasConfig) Reset() { *x = GasConfig{} - mi := &file_aptos_proto_msgTypes[17] + mi := &file_aptos_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1178,7 +1266,7 @@ func (x *GasConfig) String() string { func (*GasConfig) ProtoMessage() {} func (x *GasConfig) ProtoReflect() protoreflect.Message { - mi := &file_aptos_proto_msgTypes[17] + mi := &file_aptos_proto_msgTypes[19] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1191,7 +1279,7 @@ func (x *GasConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use GasConfig.ProtoReflect.Descriptor instead. func (*GasConfig) Descriptor() ([]byte, []int) { - return file_aptos_proto_rawDescGZIP(), []int{17} + return file_aptos_proto_rawDescGZIP(), []int{19} } func (x *GasConfig) GetMaxGasAmount() uint64 { @@ -1213,13 +1301,18 @@ var File_aptos_proto protoreflect.FileDescriptor const file_aptos_proto_rawDesc = "" + "\n" + "\vaptos.proto\x12\n" + - "loop.aptos\"4\n" + + "loop.aptos\"\x16\n" + + "\x14LedgerVersionRequest\";\n" + + "\x12LedgerVersionReply\x12%\n" + + "\x0eledger_version\x18\x01 \x01(\x04R\rledgerVersion\"4\n" + "\x18AccountAPTBalanceRequest\x12\x18\n" + "\aaddress\x18\x01 \x01(\fR\aaddress\".\n" + "\x16AccountAPTBalanceReply\x12\x14\n" + - "\x05value\x18\x01 \x01(\x04R\x05value\"@\n" + + "\x05value\x18\x01 \x01(\x04R\x05value\"\x7f\n" + "\vViewRequest\x121\n" + - "\apayload\x18\x01 \x01(\v2\x17.loop.aptos.ViewPayloadR\apayload\"\x1f\n" + + "\apayload\x18\x01 \x01(\v2\x17.loop.aptos.ViewPayloadR\apayload\x12*\n" + + "\x0eledger_version\x18\x02 \x01(\x04H\x00R\rledgerVersion\x88\x01\x01B\x11\n" + + "\x0f_ledger_version\"\x1f\n" + "\tViewReply\x12\x12\n" + "\x04data\x18\x01 \x01(\fR\x04data\"\x9d\x01\n" + "\vViewPayload\x12,\n" + @@ -1309,8 +1402,9 @@ const file_aptos_proto_rawDesc = "" + "\bTxStatus\x12\x13\n" + "\x0fTX_STATUS_FATAL\x10\x00\x12\x16\n" + "\x12TX_STATUS_REVERTED\x10\x01\x12\x15\n" + - "\x11TX_STATUS_SUCCESS\x10\x022\xc1\x03\n" + - "\x05Aptos\x12]\n" + + "\x11TX_STATUS_SUCCESS\x10\x022\x94\x04\n" + + "\x05Aptos\x12Q\n" + + "\rLedgerVersion\x12 .loop.aptos.LedgerVersionRequest\x1a\x1e.loop.aptos.LedgerVersionReply\x12]\n" + "\x11AccountAPTBalance\x12$.loop.aptos.AccountAPTBalanceRequest\x1a\".loop.aptos.AccountAPTBalanceReply\x126\n" + "\x04View\x12\x17.loop.aptos.ViewRequest\x1a\x15.loop.aptos.ViewReply\x12]\n" + "\x11TransactionByHash\x12$.loop.aptos.TransactionByHashRequest\x1a\".loop.aptos.TransactionByHashReply\x12c\n" + @@ -1330,58 +1424,62 @@ func file_aptos_proto_rawDescGZIP() []byte { } var file_aptos_proto_enumTypes = make([]protoimpl.EnumInfo, 3) -var file_aptos_proto_msgTypes = make([]protoimpl.MessageInfo, 18) +var file_aptos_proto_msgTypes = make([]protoimpl.MessageInfo, 20) var file_aptos_proto_goTypes = []any{ (TypeTagKind)(0), // 0: loop.aptos.TypeTagKind (TransactionVariant)(0), // 1: loop.aptos.TransactionVariant (TxStatus)(0), // 2: loop.aptos.TxStatus - (*AccountAPTBalanceRequest)(nil), // 3: loop.aptos.AccountAPTBalanceRequest - (*AccountAPTBalanceReply)(nil), // 4: loop.aptos.AccountAPTBalanceReply - (*ViewRequest)(nil), // 5: loop.aptos.ViewRequest - (*ViewReply)(nil), // 6: loop.aptos.ViewReply - (*ViewPayload)(nil), // 7: loop.aptos.ViewPayload - (*ModuleID)(nil), // 8: loop.aptos.ModuleID - (*TypeTag)(nil), // 9: loop.aptos.TypeTag - (*VectorTag)(nil), // 10: loop.aptos.VectorTag - (*StructTag)(nil), // 11: loop.aptos.StructTag - (*GenericTag)(nil), // 12: loop.aptos.GenericTag - (*TransactionByHashRequest)(nil), // 13: loop.aptos.TransactionByHashRequest - (*TransactionByHashReply)(nil), // 14: loop.aptos.TransactionByHashReply - (*Transaction)(nil), // 15: loop.aptos.Transaction - (*AccountTransactionsRequest)(nil), // 16: loop.aptos.AccountTransactionsRequest - (*AccountTransactionsReply)(nil), // 17: loop.aptos.AccountTransactionsReply - (*SubmitTransactionRequest)(nil), // 18: loop.aptos.SubmitTransactionRequest - (*SubmitTransactionReply)(nil), // 19: loop.aptos.SubmitTransactionReply - (*GasConfig)(nil), // 20: loop.aptos.GasConfig + (*LedgerVersionRequest)(nil), // 3: loop.aptos.LedgerVersionRequest + (*LedgerVersionReply)(nil), // 4: loop.aptos.LedgerVersionReply + (*AccountAPTBalanceRequest)(nil), // 5: loop.aptos.AccountAPTBalanceRequest + (*AccountAPTBalanceReply)(nil), // 6: loop.aptos.AccountAPTBalanceReply + (*ViewRequest)(nil), // 7: loop.aptos.ViewRequest + (*ViewReply)(nil), // 8: loop.aptos.ViewReply + (*ViewPayload)(nil), // 9: loop.aptos.ViewPayload + (*ModuleID)(nil), // 10: loop.aptos.ModuleID + (*TypeTag)(nil), // 11: loop.aptos.TypeTag + (*VectorTag)(nil), // 12: loop.aptos.VectorTag + (*StructTag)(nil), // 13: loop.aptos.StructTag + (*GenericTag)(nil), // 14: loop.aptos.GenericTag + (*TransactionByHashRequest)(nil), // 15: loop.aptos.TransactionByHashRequest + (*TransactionByHashReply)(nil), // 16: loop.aptos.TransactionByHashReply + (*Transaction)(nil), // 17: loop.aptos.Transaction + (*AccountTransactionsRequest)(nil), // 18: loop.aptos.AccountTransactionsRequest + (*AccountTransactionsReply)(nil), // 19: loop.aptos.AccountTransactionsReply + (*SubmitTransactionRequest)(nil), // 20: loop.aptos.SubmitTransactionRequest + (*SubmitTransactionReply)(nil), // 21: loop.aptos.SubmitTransactionReply + (*GasConfig)(nil), // 22: loop.aptos.GasConfig } var file_aptos_proto_depIdxs = []int32{ - 7, // 0: loop.aptos.ViewRequest.payload:type_name -> loop.aptos.ViewPayload - 8, // 1: loop.aptos.ViewPayload.module:type_name -> loop.aptos.ModuleID - 9, // 2: loop.aptos.ViewPayload.arg_types:type_name -> loop.aptos.TypeTag + 9, // 0: loop.aptos.ViewRequest.payload:type_name -> loop.aptos.ViewPayload + 10, // 1: loop.aptos.ViewPayload.module:type_name -> loop.aptos.ModuleID + 11, // 2: loop.aptos.ViewPayload.arg_types:type_name -> loop.aptos.TypeTag 0, // 3: loop.aptos.TypeTag.kind:type_name -> loop.aptos.TypeTagKind - 10, // 4: loop.aptos.TypeTag.vector:type_name -> loop.aptos.VectorTag - 11, // 5: loop.aptos.TypeTag.struct:type_name -> loop.aptos.StructTag - 12, // 6: loop.aptos.TypeTag.generic:type_name -> loop.aptos.GenericTag - 9, // 7: loop.aptos.VectorTag.element_type:type_name -> loop.aptos.TypeTag - 9, // 8: loop.aptos.StructTag.type_params:type_name -> loop.aptos.TypeTag - 15, // 9: loop.aptos.TransactionByHashReply.transaction:type_name -> loop.aptos.Transaction + 12, // 4: loop.aptos.TypeTag.vector:type_name -> loop.aptos.VectorTag + 13, // 5: loop.aptos.TypeTag.struct:type_name -> loop.aptos.StructTag + 14, // 6: loop.aptos.TypeTag.generic:type_name -> loop.aptos.GenericTag + 11, // 7: loop.aptos.VectorTag.element_type:type_name -> loop.aptos.TypeTag + 11, // 8: loop.aptos.StructTag.type_params:type_name -> loop.aptos.TypeTag + 17, // 9: loop.aptos.TransactionByHashReply.transaction:type_name -> loop.aptos.Transaction 1, // 10: loop.aptos.Transaction.type:type_name -> loop.aptos.TransactionVariant - 15, // 11: loop.aptos.AccountTransactionsReply.transactions:type_name -> loop.aptos.Transaction - 8, // 12: loop.aptos.SubmitTransactionRequest.receiver_module_id:type_name -> loop.aptos.ModuleID - 20, // 13: loop.aptos.SubmitTransactionRequest.gas_config:type_name -> loop.aptos.GasConfig + 17, // 11: loop.aptos.AccountTransactionsReply.transactions:type_name -> loop.aptos.Transaction + 10, // 12: loop.aptos.SubmitTransactionRequest.receiver_module_id:type_name -> loop.aptos.ModuleID + 22, // 13: loop.aptos.SubmitTransactionRequest.gas_config:type_name -> loop.aptos.GasConfig 2, // 14: loop.aptos.SubmitTransactionReply.tx_status:type_name -> loop.aptos.TxStatus - 3, // 15: loop.aptos.Aptos.AccountAPTBalance:input_type -> loop.aptos.AccountAPTBalanceRequest - 5, // 16: loop.aptos.Aptos.View:input_type -> loop.aptos.ViewRequest - 13, // 17: loop.aptos.Aptos.TransactionByHash:input_type -> loop.aptos.TransactionByHashRequest - 16, // 18: loop.aptos.Aptos.AccountTransactions:input_type -> loop.aptos.AccountTransactionsRequest - 18, // 19: loop.aptos.Aptos.SubmitTransaction:input_type -> loop.aptos.SubmitTransactionRequest - 4, // 20: loop.aptos.Aptos.AccountAPTBalance:output_type -> loop.aptos.AccountAPTBalanceReply - 6, // 21: loop.aptos.Aptos.View:output_type -> loop.aptos.ViewReply - 14, // 22: loop.aptos.Aptos.TransactionByHash:output_type -> loop.aptos.TransactionByHashReply - 17, // 23: loop.aptos.Aptos.AccountTransactions:output_type -> loop.aptos.AccountTransactionsReply - 19, // 24: loop.aptos.Aptos.SubmitTransaction:output_type -> loop.aptos.SubmitTransactionReply - 20, // [20:25] is the sub-list for method output_type - 15, // [15:20] is the sub-list for method input_type + 3, // 15: loop.aptos.Aptos.LedgerVersion:input_type -> loop.aptos.LedgerVersionRequest + 5, // 16: loop.aptos.Aptos.AccountAPTBalance:input_type -> loop.aptos.AccountAPTBalanceRequest + 7, // 17: loop.aptos.Aptos.View:input_type -> loop.aptos.ViewRequest + 15, // 18: loop.aptos.Aptos.TransactionByHash:input_type -> loop.aptos.TransactionByHashRequest + 18, // 19: loop.aptos.Aptos.AccountTransactions:input_type -> loop.aptos.AccountTransactionsRequest + 20, // 20: loop.aptos.Aptos.SubmitTransaction:input_type -> loop.aptos.SubmitTransactionRequest + 4, // 21: loop.aptos.Aptos.LedgerVersion:output_type -> loop.aptos.LedgerVersionReply + 6, // 22: loop.aptos.Aptos.AccountAPTBalance:output_type -> loop.aptos.AccountAPTBalanceReply + 8, // 23: loop.aptos.Aptos.View:output_type -> loop.aptos.ViewReply + 16, // 24: loop.aptos.Aptos.TransactionByHash:output_type -> loop.aptos.TransactionByHashReply + 19, // 25: loop.aptos.Aptos.AccountTransactions:output_type -> loop.aptos.AccountTransactionsReply + 21, // 26: loop.aptos.Aptos.SubmitTransaction:output_type -> loop.aptos.SubmitTransactionReply + 21, // [21:27] is the sub-list for method output_type + 15, // [15:21] 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 @@ -1392,22 +1490,23 @@ func file_aptos_proto_init() { if File_aptos_proto != nil { return } - file_aptos_proto_msgTypes[6].OneofWrappers = []any{ + file_aptos_proto_msgTypes[4].OneofWrappers = []any{} + file_aptos_proto_msgTypes[8].OneofWrappers = []any{ (*TypeTag_Vector)(nil), (*TypeTag_Struct)(nil), (*TypeTag_Generic)(nil), } - file_aptos_proto_msgTypes[11].OneofWrappers = []any{} - file_aptos_proto_msgTypes[12].OneofWrappers = []any{} file_aptos_proto_msgTypes[13].OneofWrappers = []any{} + file_aptos_proto_msgTypes[14].OneofWrappers = []any{} file_aptos_proto_msgTypes[15].OneofWrappers = []any{} + file_aptos_proto_msgTypes[17].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_aptos_proto_rawDesc), len(file_aptos_proto_rawDesc)), NumEnums: 3, - NumMessages: 18, + NumMessages: 20, NumExtensions: 0, NumServices: 1, }, diff --git a/pkg/chains/aptos/aptos.proto b/pkg/chains/aptos/aptos.proto index da9be7b348..d5a66072a0 100644 --- a/pkg/chains/aptos/aptos.proto +++ b/pkg/chains/aptos/aptos.proto @@ -4,6 +4,7 @@ option go_package = "github.com/smartcontractkit/chainlink-common/pkg/chains/apt package loop.aptos; service Aptos { + rpc LedgerVersion(LedgerVersionRequest) returns (LedgerVersionReply); rpc AccountAPTBalance(AccountAPTBalanceRequest) returns (AccountAPTBalanceReply); rpc View(ViewRequest) returns (ViewReply); rpc TransactionByHash(TransactionByHashRequest) returns (TransactionByHashReply); @@ -11,6 +12,14 @@ service Aptos { rpc SubmitTransaction(SubmitTransactionRequest) returns (SubmitTransactionReply); } +// ========== LedgerVersion ========== + +message LedgerVersionRequest {} + +message LedgerVersionReply { + uint64 ledger_version = 1; +} + // ========== AccountAPTBalance ========== message AccountAPTBalanceRequest { @@ -25,6 +34,7 @@ message AccountAPTBalanceReply { message ViewRequest { ViewPayload payload = 1; + optional uint64 ledger_version = 2; } message ViewReply { @@ -148,4 +158,3 @@ message GasConfig { uint64 max_gas_amount = 1; // Maximum gas units willing to pay uint64 gas_unit_price = 2; // Price per gas unit in octas } - diff --git a/pkg/chains/aptos/aptos_grpc.pb.go b/pkg/chains/aptos/aptos_grpc.pb.go index 2fc0f2d90e..1833254df1 100644 --- a/pkg/chains/aptos/aptos_grpc.pb.go +++ b/pkg/chains/aptos/aptos_grpc.pb.go @@ -19,6 +19,7 @@ import ( const _ = grpc.SupportPackageIsVersion9 const ( + Aptos_LedgerVersion_FullMethodName = "/loop.aptos.Aptos/LedgerVersion" Aptos_AccountAPTBalance_FullMethodName = "/loop.aptos.Aptos/AccountAPTBalance" Aptos_View_FullMethodName = "/loop.aptos.Aptos/View" Aptos_TransactionByHash_FullMethodName = "/loop.aptos.Aptos/TransactionByHash" @@ -30,6 +31,7 @@ const ( // // 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 AptosClient interface { + LedgerVersion(ctx context.Context, in *LedgerVersionRequest, opts ...grpc.CallOption) (*LedgerVersionReply, error) AccountAPTBalance(ctx context.Context, in *AccountAPTBalanceRequest, opts ...grpc.CallOption) (*AccountAPTBalanceReply, error) View(ctx context.Context, in *ViewRequest, opts ...grpc.CallOption) (*ViewReply, error) TransactionByHash(ctx context.Context, in *TransactionByHashRequest, opts ...grpc.CallOption) (*TransactionByHashReply, error) @@ -45,6 +47,16 @@ func NewAptosClient(cc grpc.ClientConnInterface) AptosClient { return &aptosClient{cc} } +func (c *aptosClient) LedgerVersion(ctx context.Context, in *LedgerVersionRequest, opts ...grpc.CallOption) (*LedgerVersionReply, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(LedgerVersionReply) + err := c.cc.Invoke(ctx, Aptos_LedgerVersion_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *aptosClient) AccountAPTBalance(ctx context.Context, in *AccountAPTBalanceRequest, opts ...grpc.CallOption) (*AccountAPTBalanceReply, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(AccountAPTBalanceReply) @@ -99,6 +111,7 @@ func (c *aptosClient) SubmitTransaction(ctx context.Context, in *SubmitTransacti // All implementations must embed UnimplementedAptosServer // for forward compatibility. type AptosServer interface { + LedgerVersion(context.Context, *LedgerVersionRequest) (*LedgerVersionReply, error) AccountAPTBalance(context.Context, *AccountAPTBalanceRequest) (*AccountAPTBalanceReply, error) View(context.Context, *ViewRequest) (*ViewReply, error) TransactionByHash(context.Context, *TransactionByHashRequest) (*TransactionByHashReply, error) @@ -114,6 +127,9 @@ type AptosServer interface { // pointer dereference when methods are called. type UnimplementedAptosServer struct{} +func (UnimplementedAptosServer) LedgerVersion(context.Context, *LedgerVersionRequest) (*LedgerVersionReply, error) { + return nil, status.Errorf(codes.Unimplemented, "method LedgerVersion not implemented") +} func (UnimplementedAptosServer) AccountAPTBalance(context.Context, *AccountAPTBalanceRequest) (*AccountAPTBalanceReply, error) { return nil, status.Errorf(codes.Unimplemented, "method AccountAPTBalance not implemented") } @@ -150,6 +166,24 @@ func RegisterAptosServer(s grpc.ServiceRegistrar, srv AptosServer) { s.RegisterService(&Aptos_ServiceDesc, srv) } +func _Aptos_LedgerVersion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(LedgerVersionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(AptosServer).LedgerVersion(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Aptos_LedgerVersion_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(AptosServer).LedgerVersion(ctx, req.(*LedgerVersionRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _Aptos_AccountAPTBalance_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(AccountAPTBalanceRequest) if err := dec(in); err != nil { @@ -247,6 +281,10 @@ var Aptos_ServiceDesc = grpc.ServiceDesc{ ServiceName: "loop.aptos.Aptos", HandlerType: (*AptosServer)(nil), Methods: []grpc.MethodDesc{ + { + MethodName: "LedgerVersion", + Handler: _Aptos_LedgerVersion_Handler, + }, { MethodName: "AccountAPTBalance", Handler: _Aptos_AccountAPTBalance_Handler, diff --git a/pkg/loop/internal/core/services/capability/capabilities_registry.go b/pkg/loop/internal/core/services/capability/capabilities_registry.go index b398ea8c93..6db7d3e3f5 100644 --- a/pkg/loop/internal/core/services/capability/capabilities_registry.go +++ b/pkg/loop/internal/core/services/capability/capabilities_registry.go @@ -4,6 +4,7 @@ import ( "context" "encoding/hex" "fmt" + "strings" "time" "google.golang.org/grpc" @@ -259,6 +260,52 @@ func decodeOcr3Config(pbCfg *capabilitiespb.OCR3Config) ocrtypes.ContractConfig } } +func transmitterAccountToBytes(account ocrtypes.Account) ([]byte, error) { + raw := []byte(account) + s := strings.TrimSpace(string(account)) + if s == "" { + return raw, nil + } + + if strings.HasPrefix(s, "0x") || strings.HasPrefix(s, "0X") { + trimmed := s[2:] + if !looksHexAccount(trimmed) { + return nil, fmt.Errorf("failed to decode transmitter: invalid hex account %q", s) + } + decoded, err := hex.DecodeString(trimmed) + if err != nil { + return nil, fmt.Errorf("failed to decode transmitter: %w", err) + } + return decoded, nil + } + + if looksHexAccount(s) { + decoded, err := hex.DecodeString(s) + if err != nil { + return nil, fmt.Errorf("failed to decode transmitter: %w", err) + } + return decoded, nil + } + + // Backward compatibility: some registry paths provide raw bytes directly. + return raw, nil +} + +func looksHexAccount(s string) bool { + if s == "" || len(s)%2 != 0 { + return false + } + for _, c := range s { + isDigit := c >= '0' && c <= '9' + isLower := c >= 'a' && c <= 'f' + isUpper := c >= 'A' && c <= 'F' + if !isDigit && !isLower && !isUpper { + return false + } + } + return true +} + func (cr *capabilitiesRegistryClient) Get(ctx context.Context, ID string) (capabilities.BaseCapability, error) { req := &pb.GetRequest{ Id: ID, @@ -512,9 +559,9 @@ func (c *capabilitiesRegistryServer) ConfigForCapability(ctx context.Context, re } transmitters := make([][]byte, len(cfg.Transmitters)) for i, t := range cfg.Transmitters { - transmitters[i], err = hex.DecodeString(string(t)) + transmitters[i], err = transmitterAccountToBytes(t) if err != nil { - return nil, fmt.Errorf("failed to decode transmitter: %w", err) + return nil, err } } ccp.Ocr3Configs[key] = &capabilitiespb.OCR3Config{ diff --git a/pkg/loop/internal/core/services/capability/capabilities_registry_test.go b/pkg/loop/internal/core/services/capability/capabilities_registry_test.go index b945230eb0..790c92021e 100644 --- a/pkg/loop/internal/core/services/capability/capabilities_registry_test.go +++ b/pkg/loop/internal/core/services/capability/capabilities_registry_test.go @@ -586,6 +586,31 @@ func TestCapabilitiesRegistry_ConfigForCapability_WithOcr3AndOracleFactoryConfig assert.Equal(t, expectedCapConfig, capConf) } +func TestTransmitterAccountToBytes(t *testing.T) { + t.Run("decodes_0x_and_0X_prefixed_hex", func(t *testing.T) { + gotLower, err := transmitterAccountToBytes(ocrtypes.Account("0xABcd")) + require.NoError(t, err) + require.Equal(t, []byte{0xab, 0xcd}, gotLower) + + gotUpper, err := transmitterAccountToBytes(ocrtypes.Account("0X00ff")) + require.NoError(t, err) + require.Equal(t, []byte{0x00, 0xff}, gotUpper) + }) + + t.Run("returns_error_for_invalid_prefixed_hex", func(t *testing.T) { + _, err := transmitterAccountToBytes(ocrtypes.Account("0x123")) + require.Error(t, err) + require.Contains(t, err.Error(), "failed to decode transmitter") + }) + + t.Run("falls_back_to_raw_bytes_for_non_hex_account", func(t *testing.T) { + raw := []byte{0x00, 0x7f, 0xff, 0x41} + got, err := transmitterAccountToBytes(ocrtypes.Account(string(raw))) + require.NoError(t, err) + require.Equal(t, raw, got) + }) +} + func TestCapabilitiesRegistry_DONsForCapability(t *testing.T) { stopCh := make(chan struct{}) logger := logger.Test(t) diff --git a/pkg/loop/internal/example-relay/main.go b/pkg/loop/internal/example-relay/main.go index 5de2891d76..2a1bf5bf0e 100644 --- a/pkg/loop/internal/example-relay/main.go +++ b/pkg/loop/internal/example-relay/main.go @@ -96,7 +96,7 @@ func (r *relayer) LatestHead(ctx context.Context) (types.Head, error) { } func (r *relayer) FinalizedHead(ctx context.Context) (types.Head, error) { - return types.Head{}, errors.New("unimplemented") + return r.LatestHead(ctx) } func (r *relayer) GetChainStatus(ctx context.Context) (types.ChainStatus, error) { diff --git a/pkg/loop/internal/pb/relayer.pb.go b/pkg/loop/internal/pb/relayer.pb.go index 602a0d980a..616846171a 100644 --- a/pkg/loop/internal/pb/relayer.pb.go +++ b/pkg/loop/internal/pb/relayer.pb.go @@ -913,87 +913,6 @@ func (x *LatestHeadReply) GetHead() *Head { return nil } -type FinalizedHeadRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *FinalizedHeadRequest) Reset() { - *x = FinalizedHeadRequest{} - mi := &file_loop_internal_pb_relayer_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *FinalizedHeadRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FinalizedHeadRequest) ProtoMessage() {} - -func (x *FinalizedHeadRequest) ProtoReflect() protoreflect.Message { - mi := &file_loop_internal_pb_relayer_proto_msgTypes[17] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FinalizedHeadRequest.ProtoReflect.Descriptor instead. -func (*FinalizedHeadRequest) Descriptor() ([]byte, []int) { - return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{17} -} - -// FinalizedHeadReply has return arguments for [github.com/smartcontractkit/chainlink-common/pkg/loop.Relayer.FinalizedHead]. -type FinalizedHeadReply struct { - state protoimpl.MessageState `protogen:"open.v1"` - Head *Head `protobuf:"bytes,1,opt,name=head,proto3" json:"head,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *FinalizedHeadReply) Reset() { - *x = FinalizedHeadReply{} - mi := &file_loop_internal_pb_relayer_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *FinalizedHeadReply) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FinalizedHeadReply) ProtoMessage() {} - -func (x *FinalizedHeadReply) ProtoReflect() protoreflect.Message { - mi := &file_loop_internal_pb_relayer_proto_msgTypes[18] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FinalizedHeadReply.ProtoReflect.Descriptor instead. -func (*FinalizedHeadReply) Descriptor() ([]byte, []int) { - return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{18} -} - -func (x *FinalizedHeadReply) GetHead() *Head { - if x != nil { - return x.Head - } - return nil -} - type GetChainStatusRequest struct { state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields @@ -1002,7 +921,7 @@ type GetChainStatusRequest struct { func (x *GetChainStatusRequest) Reset() { *x = GetChainStatusRequest{} - mi := &file_loop_internal_pb_relayer_proto_msgTypes[19] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1014,7 +933,7 @@ func (x *GetChainStatusRequest) String() string { func (*GetChainStatusRequest) ProtoMessage() {} func (x *GetChainStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_loop_internal_pb_relayer_proto_msgTypes[19] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[17] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1027,7 +946,7 @@ func (x *GetChainStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetChainStatusRequest.ProtoReflect.Descriptor instead. func (*GetChainStatusRequest) Descriptor() ([]byte, []int) { - return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{19} + return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{17} } // ChainStatusReply has return arguments for [github.com/smartcontractkit/chainlink-common/pkg/loop.Relayer.ChainStatus]. @@ -1040,7 +959,7 @@ type GetChainStatusReply struct { func (x *GetChainStatusReply) Reset() { *x = GetChainStatusReply{} - mi := &file_loop_internal_pb_relayer_proto_msgTypes[20] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1052,7 +971,7 @@ func (x *GetChainStatusReply) String() string { func (*GetChainStatusReply) ProtoMessage() {} func (x *GetChainStatusReply) ProtoReflect() protoreflect.Message { - mi := &file_loop_internal_pb_relayer_proto_msgTypes[20] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[18] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1065,7 +984,7 @@ func (x *GetChainStatusReply) ProtoReflect() protoreflect.Message { // Deprecated: Use GetChainStatusReply.ProtoReflect.Descriptor instead. func (*GetChainStatusReply) Descriptor() ([]byte, []int) { - return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{20} + return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{18} } func (x *GetChainStatusReply) GetChain() *ChainStatus { @@ -1083,7 +1002,7 @@ type GetChainInfoRequest struct { func (x *GetChainInfoRequest) Reset() { *x = GetChainInfoRequest{} - mi := &file_loop_internal_pb_relayer_proto_msgTypes[21] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1095,7 +1014,7 @@ func (x *GetChainInfoRequest) String() string { func (*GetChainInfoRequest) ProtoMessage() {} func (x *GetChainInfoRequest) ProtoReflect() protoreflect.Message { - mi := &file_loop_internal_pb_relayer_proto_msgTypes[21] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[19] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1108,7 +1027,7 @@ func (x *GetChainInfoRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetChainInfoRequest.ProtoReflect.Descriptor instead. func (*GetChainInfoRequest) Descriptor() ([]byte, []int) { - return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{21} + return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{19} } // GetChainInfoReply has return arguments for [github.com/smartcontractkit/chainlink-common/pkg/loop.Relayer.GetChainInfo]. @@ -1121,7 +1040,7 @@ type GetChainInfoReply struct { func (x *GetChainInfoReply) Reset() { *x = GetChainInfoReply{} - mi := &file_loop_internal_pb_relayer_proto_msgTypes[22] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1133,7 +1052,7 @@ func (x *GetChainInfoReply) String() string { func (*GetChainInfoReply) ProtoMessage() {} func (x *GetChainInfoReply) ProtoReflect() protoreflect.Message { - mi := &file_loop_internal_pb_relayer_proto_msgTypes[22] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[20] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1146,7 +1065,7 @@ func (x *GetChainInfoReply) ProtoReflect() protoreflect.Message { // Deprecated: Use GetChainInfoReply.ProtoReflect.Descriptor instead. func (*GetChainInfoReply) Descriptor() ([]byte, []int) { - return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{22} + return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{20} } func (x *GetChainInfoReply) GetChainInfo() *ChainInfo { @@ -1168,7 +1087,7 @@ type ChainStatus struct { func (x *ChainStatus) Reset() { *x = ChainStatus{} - mi := &file_loop_internal_pb_relayer_proto_msgTypes[23] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1180,7 +1099,7 @@ func (x *ChainStatus) String() string { func (*ChainStatus) ProtoMessage() {} func (x *ChainStatus) ProtoReflect() protoreflect.Message { - mi := &file_loop_internal_pb_relayer_proto_msgTypes[23] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[21] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1193,7 +1112,7 @@ func (x *ChainStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use ChainStatus.ProtoReflect.Descriptor instead. func (*ChainStatus) Descriptor() ([]byte, []int) { - return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{23} + return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{21} } func (x *ChainStatus) GetId() string { @@ -1230,7 +1149,7 @@ type ChainInfo struct { func (x *ChainInfo) Reset() { *x = ChainInfo{} - mi := &file_loop_internal_pb_relayer_proto_msgTypes[24] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1242,7 +1161,7 @@ func (x *ChainInfo) String() string { func (*ChainInfo) ProtoMessage() {} func (x *ChainInfo) ProtoReflect() protoreflect.Message { - mi := &file_loop_internal_pb_relayer_proto_msgTypes[24] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[22] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1255,7 +1174,7 @@ func (x *ChainInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use ChainInfo.ProtoReflect.Descriptor instead. func (*ChainInfo) Descriptor() ([]byte, []int) { - return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{24} + return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{22} } func (x *ChainInfo) GetFamilyName() string { @@ -1297,7 +1216,7 @@ type ListNodeStatusesRequest struct { func (x *ListNodeStatusesRequest) Reset() { *x = ListNodeStatusesRequest{} - mi := &file_loop_internal_pb_relayer_proto_msgTypes[25] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1309,7 +1228,7 @@ func (x *ListNodeStatusesRequest) String() string { func (*ListNodeStatusesRequest) ProtoMessage() {} func (x *ListNodeStatusesRequest) ProtoReflect() protoreflect.Message { - mi := &file_loop_internal_pb_relayer_proto_msgTypes[25] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[23] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1322,7 +1241,7 @@ func (x *ListNodeStatusesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListNodeStatusesRequest.ProtoReflect.Descriptor instead. func (*ListNodeStatusesRequest) Descriptor() ([]byte, []int) { - return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{25} + return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{23} } func (x *ListNodeStatusesRequest) GetPageSize() int32 { @@ -1351,7 +1270,7 @@ type ListNodeStatusesReply struct { func (x *ListNodeStatusesReply) Reset() { *x = ListNodeStatusesReply{} - mi := &file_loop_internal_pb_relayer_proto_msgTypes[26] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1363,7 +1282,7 @@ func (x *ListNodeStatusesReply) String() string { func (*ListNodeStatusesReply) ProtoMessage() {} func (x *ListNodeStatusesReply) ProtoReflect() protoreflect.Message { - mi := &file_loop_internal_pb_relayer_proto_msgTypes[26] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[24] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1376,7 +1295,7 @@ func (x *ListNodeStatusesReply) ProtoReflect() protoreflect.Message { // Deprecated: Use ListNodeStatusesReply.ProtoReflect.Descriptor instead. func (*ListNodeStatusesReply) Descriptor() ([]byte, []int) { - return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{26} + return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{24} } func (x *ListNodeStatusesReply) GetNodes() []*NodeStatus { @@ -1413,7 +1332,7 @@ type NodeStatus struct { func (x *NodeStatus) Reset() { *x = NodeStatus{} - mi := &file_loop_internal_pb_relayer_proto_msgTypes[27] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1425,7 +1344,7 @@ func (x *NodeStatus) String() string { func (*NodeStatus) ProtoMessage() {} func (x *NodeStatus) ProtoReflect() protoreflect.Message { - mi := &file_loop_internal_pb_relayer_proto_msgTypes[27] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[25] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1438,7 +1357,7 @@ func (x *NodeStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use NodeStatus.ProtoReflect.Descriptor instead. func (*NodeStatus) Descriptor() ([]byte, []int) { - return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{27} + return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{25} } func (x *NodeStatus) GetChainID() string { @@ -1479,7 +1398,7 @@ type ReplayRequest struct { func (x *ReplayRequest) Reset() { *x = ReplayRequest{} - mi := &file_loop_internal_pb_relayer_proto_msgTypes[28] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1491,7 +1410,7 @@ func (x *ReplayRequest) String() string { func (*ReplayRequest) ProtoMessage() {} func (x *ReplayRequest) ProtoReflect() protoreflect.Message { - mi := &file_loop_internal_pb_relayer_proto_msgTypes[28] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[26] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1504,7 +1423,7 @@ func (x *ReplayRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ReplayRequest.ProtoReflect.Descriptor instead. func (*ReplayRequest) Descriptor() ([]byte, []int) { - return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{28} + return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{26} } func (x *ReplayRequest) GetFromBlock() string { @@ -1534,7 +1453,7 @@ type TransactionRequest struct { func (x *TransactionRequest) Reset() { *x = TransactionRequest{} - mi := &file_loop_internal_pb_relayer_proto_msgTypes[29] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1546,7 +1465,7 @@ func (x *TransactionRequest) String() string { func (*TransactionRequest) ProtoMessage() {} func (x *TransactionRequest) ProtoReflect() protoreflect.Message { - mi := &file_loop_internal_pb_relayer_proto_msgTypes[29] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[27] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1559,7 +1478,7 @@ func (x *TransactionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TransactionRequest.ProtoReflect.Descriptor instead. func (*TransactionRequest) Descriptor() ([]byte, []int) { - return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{29} + return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{27} } func (x *TransactionRequest) GetFrom() string { @@ -1607,7 +1526,7 @@ type ContractConfig struct { func (x *ContractConfig) Reset() { *x = ContractConfig{} - mi := &file_loop_internal_pb_relayer_proto_msgTypes[30] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1619,7 +1538,7 @@ func (x *ContractConfig) String() string { func (*ContractConfig) ProtoMessage() {} func (x *ContractConfig) ProtoReflect() protoreflect.Message { - mi := &file_loop_internal_pb_relayer_proto_msgTypes[30] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[28] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1632,7 +1551,7 @@ func (x *ContractConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use ContractConfig.ProtoReflect.Descriptor instead. func (*ContractConfig) Descriptor() ([]byte, []int) { - return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{30} + return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{28} } func (x *ContractConfig) GetConfigDigest() []byte { @@ -1701,7 +1620,7 @@ type ConfigDigestRequest struct { func (x *ConfigDigestRequest) Reset() { *x = ConfigDigestRequest{} - mi := &file_loop_internal_pb_relayer_proto_msgTypes[31] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1713,7 +1632,7 @@ func (x *ConfigDigestRequest) String() string { func (*ConfigDigestRequest) ProtoMessage() {} func (x *ConfigDigestRequest) ProtoReflect() protoreflect.Message { - mi := &file_loop_internal_pb_relayer_proto_msgTypes[31] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[29] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1726,7 +1645,7 @@ func (x *ConfigDigestRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ConfigDigestRequest.ProtoReflect.Descriptor instead. func (*ConfigDigestRequest) Descriptor() ([]byte, []int) { - return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{31} + return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{29} } func (x *ConfigDigestRequest) GetContractConfig() *ContractConfig { @@ -1746,7 +1665,7 @@ type ConfigDigestReply struct { func (x *ConfigDigestReply) Reset() { *x = ConfigDigestReply{} - mi := &file_loop_internal_pb_relayer_proto_msgTypes[32] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1758,7 +1677,7 @@ func (x *ConfigDigestReply) String() string { func (*ConfigDigestReply) ProtoMessage() {} func (x *ConfigDigestReply) ProtoReflect() protoreflect.Message { - mi := &file_loop_internal_pb_relayer_proto_msgTypes[32] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[30] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1771,7 +1690,7 @@ func (x *ConfigDigestReply) ProtoReflect() protoreflect.Message { // Deprecated: Use ConfigDigestReply.ProtoReflect.Descriptor instead. func (*ConfigDigestReply) Descriptor() ([]byte, []int) { - return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{32} + return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{30} } func (x *ConfigDigestReply) GetConfigDigest() []byte { @@ -1789,7 +1708,7 @@ type ConfigDigestPrefixRequest struct { func (x *ConfigDigestPrefixRequest) Reset() { *x = ConfigDigestPrefixRequest{} - mi := &file_loop_internal_pb_relayer_proto_msgTypes[33] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1801,7 +1720,7 @@ func (x *ConfigDigestPrefixRequest) String() string { func (*ConfigDigestPrefixRequest) ProtoMessage() {} func (x *ConfigDigestPrefixRequest) ProtoReflect() protoreflect.Message { - mi := &file_loop_internal_pb_relayer_proto_msgTypes[33] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[31] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1814,7 +1733,7 @@ func (x *ConfigDigestPrefixRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ConfigDigestPrefixRequest.ProtoReflect.Descriptor instead. func (*ConfigDigestPrefixRequest) Descriptor() ([]byte, []int) { - return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{33} + return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{31} } // ConfigDigestPrefixReply has return arguments for [github.com/smartcontractkit/libocr/offchainreporting2plus/types.OffchainConfigDigester.ConfigDigestPrefix]. @@ -1827,7 +1746,7 @@ type ConfigDigestPrefixReply struct { func (x *ConfigDigestPrefixReply) Reset() { *x = ConfigDigestPrefixReply{} - mi := &file_loop_internal_pb_relayer_proto_msgTypes[34] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1839,7 +1758,7 @@ func (x *ConfigDigestPrefixReply) String() string { func (*ConfigDigestPrefixReply) ProtoMessage() {} func (x *ConfigDigestPrefixReply) ProtoReflect() protoreflect.Message { - mi := &file_loop_internal_pb_relayer_proto_msgTypes[34] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[32] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1852,7 +1771,7 @@ func (x *ConfigDigestPrefixReply) ProtoReflect() protoreflect.Message { // Deprecated: Use ConfigDigestPrefixReply.ProtoReflect.Descriptor instead. func (*ConfigDigestPrefixReply) Descriptor() ([]byte, []int) { - return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{34} + return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{32} } func (x *ConfigDigestPrefixReply) GetConfigDigestPrefix() uint32 { @@ -1870,7 +1789,7 @@ type LatestConfigDetailsRequest struct { func (x *LatestConfigDetailsRequest) Reset() { *x = LatestConfigDetailsRequest{} - mi := &file_loop_internal_pb_relayer_proto_msgTypes[35] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1882,7 +1801,7 @@ func (x *LatestConfigDetailsRequest) String() string { func (*LatestConfigDetailsRequest) ProtoMessage() {} func (x *LatestConfigDetailsRequest) ProtoReflect() protoreflect.Message { - mi := &file_loop_internal_pb_relayer_proto_msgTypes[35] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[33] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1895,7 +1814,7 @@ func (x *LatestConfigDetailsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LatestConfigDetailsRequest.ProtoReflect.Descriptor instead. func (*LatestConfigDetailsRequest) Descriptor() ([]byte, []int) { - return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{35} + return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{33} } // LatestConfigDetailsReply has return arguments for [github.com/smartcontractkit/libocr/offchainreporting2plus/types.ContractConfigTracker.LatestConfigDetails]. @@ -1909,7 +1828,7 @@ type LatestConfigDetailsReply struct { func (x *LatestConfigDetailsReply) Reset() { *x = LatestConfigDetailsReply{} - mi := &file_loop_internal_pb_relayer_proto_msgTypes[36] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1921,7 +1840,7 @@ func (x *LatestConfigDetailsReply) String() string { func (*LatestConfigDetailsReply) ProtoMessage() {} func (x *LatestConfigDetailsReply) ProtoReflect() protoreflect.Message { - mi := &file_loop_internal_pb_relayer_proto_msgTypes[36] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[34] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1934,7 +1853,7 @@ func (x *LatestConfigDetailsReply) ProtoReflect() protoreflect.Message { // Deprecated: Use LatestConfigDetailsReply.ProtoReflect.Descriptor instead. func (*LatestConfigDetailsReply) Descriptor() ([]byte, []int) { - return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{36} + return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{34} } func (x *LatestConfigDetailsReply) GetChangedInBlock() uint64 { @@ -1961,7 +1880,7 @@ type LatestConfigRequest struct { func (x *LatestConfigRequest) Reset() { *x = LatestConfigRequest{} - mi := &file_loop_internal_pb_relayer_proto_msgTypes[37] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1973,7 +1892,7 @@ func (x *LatestConfigRequest) String() string { func (*LatestConfigRequest) ProtoMessage() {} func (x *LatestConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_loop_internal_pb_relayer_proto_msgTypes[37] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[35] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1986,7 +1905,7 @@ func (x *LatestConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LatestConfigRequest.ProtoReflect.Descriptor instead. func (*LatestConfigRequest) Descriptor() ([]byte, []int) { - return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{37} + return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{35} } func (x *LatestConfigRequest) GetChangedInBlock() uint64 { @@ -2006,7 +1925,7 @@ type LatestConfigReply struct { func (x *LatestConfigReply) Reset() { *x = LatestConfigReply{} - mi := &file_loop_internal_pb_relayer_proto_msgTypes[38] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2018,7 +1937,7 @@ func (x *LatestConfigReply) String() string { func (*LatestConfigReply) ProtoMessage() {} func (x *LatestConfigReply) ProtoReflect() protoreflect.Message { - mi := &file_loop_internal_pb_relayer_proto_msgTypes[38] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[36] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2031,7 +1950,7 @@ func (x *LatestConfigReply) ProtoReflect() protoreflect.Message { // Deprecated: Use LatestConfigReply.ProtoReflect.Descriptor instead. func (*LatestConfigReply) Descriptor() ([]byte, []int) { - return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{38} + return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{36} } func (x *LatestConfigReply) GetContractConfig() *ContractConfig { @@ -2049,7 +1968,7 @@ type LatestBlockHeightRequest struct { func (x *LatestBlockHeightRequest) Reset() { *x = LatestBlockHeightRequest{} - mi := &file_loop_internal_pb_relayer_proto_msgTypes[39] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2061,7 +1980,7 @@ func (x *LatestBlockHeightRequest) String() string { func (*LatestBlockHeightRequest) ProtoMessage() {} func (x *LatestBlockHeightRequest) ProtoReflect() protoreflect.Message { - mi := &file_loop_internal_pb_relayer_proto_msgTypes[39] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[37] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2074,7 +1993,7 @@ func (x *LatestBlockHeightRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LatestBlockHeightRequest.ProtoReflect.Descriptor instead. func (*LatestBlockHeightRequest) Descriptor() ([]byte, []int) { - return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{39} + return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{37} } // LatestBlockHeightReply has return arguments for [github.com/smartcontractkit/libocr/offchainreporting2plus/types.ContractConfigTracker.LatestBlockHeightReply]. @@ -2087,7 +2006,7 @@ type LatestBlockHeightReply struct { func (x *LatestBlockHeightReply) Reset() { *x = LatestBlockHeightReply{} - mi := &file_loop_internal_pb_relayer_proto_msgTypes[40] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2099,7 +2018,7 @@ func (x *LatestBlockHeightReply) String() string { func (*LatestBlockHeightReply) ProtoMessage() {} func (x *LatestBlockHeightReply) ProtoReflect() protoreflect.Message { - mi := &file_loop_internal_pb_relayer_proto_msgTypes[40] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[38] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2112,7 +2031,7 @@ func (x *LatestBlockHeightReply) ProtoReflect() protoreflect.Message { // Deprecated: Use LatestBlockHeightReply.ProtoReflect.Descriptor instead. func (*LatestBlockHeightReply) Descriptor() ([]byte, []int) { - return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{40} + return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{38} } func (x *LatestBlockHeightReply) GetBlockHeight() uint64 { @@ -2134,7 +2053,7 @@ type ReportTimestamp struct { func (x *ReportTimestamp) Reset() { *x = ReportTimestamp{} - mi := &file_loop_internal_pb_relayer_proto_msgTypes[41] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2146,7 +2065,7 @@ func (x *ReportTimestamp) String() string { func (*ReportTimestamp) ProtoMessage() {} func (x *ReportTimestamp) ProtoReflect() protoreflect.Message { - mi := &file_loop_internal_pb_relayer_proto_msgTypes[41] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[39] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2159,7 +2078,7 @@ func (x *ReportTimestamp) ProtoReflect() protoreflect.Message { // Deprecated: Use ReportTimestamp.ProtoReflect.Descriptor instead. func (*ReportTimestamp) Descriptor() ([]byte, []int) { - return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{41} + return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{39} } func (x *ReportTimestamp) GetConfigDigest() []byte { @@ -2194,7 +2113,7 @@ type ReportContext struct { func (x *ReportContext) Reset() { *x = ReportContext{} - mi := &file_loop_internal_pb_relayer_proto_msgTypes[42] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2206,7 +2125,7 @@ func (x *ReportContext) String() string { func (*ReportContext) ProtoMessage() {} func (x *ReportContext) ProtoReflect() protoreflect.Message { - mi := &file_loop_internal_pb_relayer_proto_msgTypes[42] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[40] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2219,7 +2138,7 @@ func (x *ReportContext) ProtoReflect() protoreflect.Message { // Deprecated: Use ReportContext.ProtoReflect.Descriptor instead. func (*ReportContext) Descriptor() ([]byte, []int) { - return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{42} + return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{40} } func (x *ReportContext) GetReportTimestamp() *ReportTimestamp { @@ -2247,7 +2166,7 @@ type AttributedOnchainSignature struct { func (x *AttributedOnchainSignature) Reset() { *x = AttributedOnchainSignature{} - mi := &file_loop_internal_pb_relayer_proto_msgTypes[43] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2259,7 +2178,7 @@ func (x *AttributedOnchainSignature) String() string { func (*AttributedOnchainSignature) ProtoMessage() {} func (x *AttributedOnchainSignature) ProtoReflect() protoreflect.Message { - mi := &file_loop_internal_pb_relayer_proto_msgTypes[43] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[41] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2272,7 +2191,7 @@ func (x *AttributedOnchainSignature) ProtoReflect() protoreflect.Message { // Deprecated: Use AttributedOnchainSignature.ProtoReflect.Descriptor instead. func (*AttributedOnchainSignature) Descriptor() ([]byte, []int) { - return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{43} + return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{41} } func (x *AttributedOnchainSignature) GetSignature() []byte { @@ -2301,7 +2220,7 @@ type TransmitRequest struct { func (x *TransmitRequest) Reset() { *x = TransmitRequest{} - mi := &file_loop_internal_pb_relayer_proto_msgTypes[44] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2313,7 +2232,7 @@ func (x *TransmitRequest) String() string { func (*TransmitRequest) ProtoMessage() {} func (x *TransmitRequest) ProtoReflect() protoreflect.Message { - mi := &file_loop_internal_pb_relayer_proto_msgTypes[44] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[42] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2326,7 +2245,7 @@ func (x *TransmitRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TransmitRequest.ProtoReflect.Descriptor instead. func (*TransmitRequest) Descriptor() ([]byte, []int) { - return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{44} + return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{42} } func (x *TransmitRequest) GetReportContext() *ReportContext { @@ -2358,7 +2277,7 @@ type TransmitReply struct { func (x *TransmitReply) Reset() { *x = TransmitReply{} - mi := &file_loop_internal_pb_relayer_proto_msgTypes[45] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2370,7 +2289,7 @@ func (x *TransmitReply) String() string { func (*TransmitReply) ProtoMessage() {} func (x *TransmitReply) ProtoReflect() protoreflect.Message { - mi := &file_loop_internal_pb_relayer_proto_msgTypes[45] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[43] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2383,7 +2302,7 @@ func (x *TransmitReply) ProtoReflect() protoreflect.Message { // Deprecated: Use TransmitReply.ProtoReflect.Descriptor instead. func (*TransmitReply) Descriptor() ([]byte, []int) { - return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{45} + return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{43} } type LatestConfigDigestAndEpochRequest struct { @@ -2394,7 +2313,7 @@ type LatestConfigDigestAndEpochRequest struct { func (x *LatestConfigDigestAndEpochRequest) Reset() { *x = LatestConfigDigestAndEpochRequest{} - mi := &file_loop_internal_pb_relayer_proto_msgTypes[46] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2406,7 +2325,7 @@ func (x *LatestConfigDigestAndEpochRequest) String() string { func (*LatestConfigDigestAndEpochRequest) ProtoMessage() {} func (x *LatestConfigDigestAndEpochRequest) ProtoReflect() protoreflect.Message { - mi := &file_loop_internal_pb_relayer_proto_msgTypes[46] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[44] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2419,7 +2338,7 @@ func (x *LatestConfigDigestAndEpochRequest) ProtoReflect() protoreflect.Message // Deprecated: Use LatestConfigDigestAndEpochRequest.ProtoReflect.Descriptor instead. func (*LatestConfigDigestAndEpochRequest) Descriptor() ([]byte, []int) { - return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{46} + return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{44} } // LatestConfigDigestAndEpochReply has return arguments for [github.com/smartcontractkit/libocr/offchainreporting2plus/types.ContractTransmitter.LatestConfigDigestAndEpoch]. @@ -2433,7 +2352,7 @@ type LatestConfigDigestAndEpochReply struct { func (x *LatestConfigDigestAndEpochReply) Reset() { *x = LatestConfigDigestAndEpochReply{} - mi := &file_loop_internal_pb_relayer_proto_msgTypes[47] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2445,7 +2364,7 @@ func (x *LatestConfigDigestAndEpochReply) String() string { func (*LatestConfigDigestAndEpochReply) ProtoMessage() {} func (x *LatestConfigDigestAndEpochReply) ProtoReflect() protoreflect.Message { - mi := &file_loop_internal_pb_relayer_proto_msgTypes[47] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[45] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2458,7 +2377,7 @@ func (x *LatestConfigDigestAndEpochReply) ProtoReflect() protoreflect.Message { // Deprecated: Use LatestConfigDigestAndEpochReply.ProtoReflect.Descriptor instead. func (*LatestConfigDigestAndEpochReply) Descriptor() ([]byte, []int) { - return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{47} + return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{45} } func (x *LatestConfigDigestAndEpochReply) GetConfigDigest() []byte { @@ -2483,7 +2402,7 @@ type FromAccountRequest struct { func (x *FromAccountRequest) Reset() { *x = FromAccountRequest{} - mi := &file_loop_internal_pb_relayer_proto_msgTypes[48] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2495,7 +2414,7 @@ func (x *FromAccountRequest) String() string { func (*FromAccountRequest) ProtoMessage() {} func (x *FromAccountRequest) ProtoReflect() protoreflect.Message { - mi := &file_loop_internal_pb_relayer_proto_msgTypes[48] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[46] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2508,7 +2427,7 @@ func (x *FromAccountRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use FromAccountRequest.ProtoReflect.Descriptor instead. func (*FromAccountRequest) Descriptor() ([]byte, []int) { - return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{48} + return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{46} } // FromAccountReply has return arguments for [github.com/smartcontractkit/chainlink-common/pkg/types.Service.FromAccount]. @@ -2521,7 +2440,7 @@ type FromAccountReply struct { func (x *FromAccountReply) Reset() { *x = FromAccountReply{} - mi := &file_loop_internal_pb_relayer_proto_msgTypes[49] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2533,7 +2452,7 @@ func (x *FromAccountReply) String() string { func (*FromAccountReply) ProtoMessage() {} func (x *FromAccountReply) ProtoReflect() protoreflect.Message { - mi := &file_loop_internal_pb_relayer_proto_msgTypes[49] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[47] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2546,7 +2465,7 @@ func (x *FromAccountReply) ProtoReflect() protoreflect.Message { // Deprecated: Use FromAccountReply.ProtoReflect.Descriptor instead. func (*FromAccountReply) Descriptor() ([]byte, []int) { - return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{49} + return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{47} } func (x *FromAccountReply) GetAccount() string { @@ -2566,7 +2485,7 @@ type NameReply struct { func (x *NameReply) Reset() { *x = NameReply{} - mi := &file_loop_internal_pb_relayer_proto_msgTypes[50] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2578,7 +2497,7 @@ func (x *NameReply) String() string { func (*NameReply) ProtoMessage() {} func (x *NameReply) ProtoReflect() protoreflect.Message { - mi := &file_loop_internal_pb_relayer_proto_msgTypes[50] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[48] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2591,7 +2510,7 @@ func (x *NameReply) ProtoReflect() protoreflect.Message { // Deprecated: Use NameReply.ProtoReflect.Descriptor instead. func (*NameReply) Descriptor() ([]byte, []int) { - return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{50} + return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{48} } func (x *NameReply) GetName() string { @@ -2611,7 +2530,7 @@ type HealthReportReply struct { func (x *HealthReportReply) Reset() { *x = HealthReportReply{} - mi := &file_loop_internal_pb_relayer_proto_msgTypes[51] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2623,7 +2542,7 @@ func (x *HealthReportReply) String() string { func (*HealthReportReply) ProtoMessage() {} func (x *HealthReportReply) ProtoReflect() protoreflect.Message { - mi := &file_loop_internal_pb_relayer_proto_msgTypes[51] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[49] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2636,7 +2555,7 @@ func (x *HealthReportReply) ProtoReflect() protoreflect.Message { // Deprecated: Use HealthReportReply.ProtoReflect.Descriptor instead. func (*HealthReportReply) Descriptor() ([]byte, []int) { - return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{51} + return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{49} } func (x *HealthReportReply) GetHealthReport() map[string]string { @@ -2657,7 +2576,7 @@ type BigInt struct { func (x *BigInt) Reset() { *x = BigInt{} - mi := &file_loop_internal_pb_relayer_proto_msgTypes[52] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2669,7 +2588,7 @@ func (x *BigInt) String() string { func (*BigInt) ProtoMessage() {} func (x *BigInt) ProtoReflect() protoreflect.Message { - mi := &file_loop_internal_pb_relayer_proto_msgTypes[52] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[50] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2682,7 +2601,7 @@ func (x *BigInt) ProtoReflect() protoreflect.Message { // Deprecated: Use BigInt.ProtoReflect.Descriptor instead. func (*BigInt) Descriptor() ([]byte, []int) { - return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{52} + return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{50} } func (x *BigInt) GetNegative() bool { @@ -2709,7 +2628,7 @@ type StarknetSignature struct { func (x *StarknetSignature) Reset() { *x = StarknetSignature{} - mi := &file_loop_internal_pb_relayer_proto_msgTypes[53] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2721,7 +2640,7 @@ func (x *StarknetSignature) String() string { func (*StarknetSignature) ProtoMessage() {} func (x *StarknetSignature) ProtoReflect() protoreflect.Message { - mi := &file_loop_internal_pb_relayer_proto_msgTypes[53] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[51] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2734,7 +2653,7 @@ func (x *StarknetSignature) ProtoReflect() protoreflect.Message { // Deprecated: Use StarknetSignature.ProtoReflect.Descriptor instead. func (*StarknetSignature) Descriptor() ([]byte, []int) { - return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{53} + return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{51} } func (x *StarknetSignature) GetX() *BigInt { @@ -2760,7 +2679,7 @@ type StarknetMessageHash struct { func (x *StarknetMessageHash) Reset() { *x = StarknetMessageHash{} - mi := &file_loop_internal_pb_relayer_proto_msgTypes[54] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2772,7 +2691,7 @@ func (x *StarknetMessageHash) String() string { func (*StarknetMessageHash) ProtoMessage() {} func (x *StarknetMessageHash) ProtoReflect() protoreflect.Message { - mi := &file_loop_internal_pb_relayer_proto_msgTypes[54] + mi := &file_loop_internal_pb_relayer_proto_msgTypes[52] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2785,7 +2704,7 @@ func (x *StarknetMessageHash) ProtoReflect() protoreflect.Message { // Deprecated: Use StarknetMessageHash.ProtoReflect.Descriptor instead. func (*StarknetMessageHash) Descriptor() ([]byte, []int) { - return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{54} + return file_loop_internal_pb_relayer_proto_rawDescGZIP(), []int{52} } func (x *StarknetMessageHash) GetHash() *BigInt { @@ -2862,10 +2781,6 @@ const file_loop_internal_pb_relayer_proto_rawDesc = "" + "\x11LatestHeadRequest\"1\n" + "\x0fLatestHeadReply\x12\x1e\n" + "\x04head\x18\x01 \x01(\v2\n" + - ".loop.HeadR\x04head\"\x16\n" + - "\x14FinalizedHeadRequest\"4\n" + - "\x12FinalizedHeadReply\x12\x1e\n" + - "\x04head\x18\x01 \x01(\v2\n" + ".loop.HeadR\x04head\"\x17\n" + "\x15GetChainStatusRequest\">\n" + "\x13GetChainStatusReply\x12'\n" + @@ -2972,7 +2887,7 @@ const file_loop_internal_pb_relayer_proto_rawDesc = "" + "\x04hash\x18\x01 \x01(\v2\f.loop.BigIntR\x04hash2O\n" + "\rPluginRelayer\x12>\n" + "\n" + - "NewRelayer\x12\x17.loop.NewRelayerRequest\x1a\x15.loop.NewRelayerReply\"\x002\x92\a\n" + + "NewRelayer\x12\x17.loop.NewRelayerRequest\x1a\x15.loop.NewRelayerReply\"\x002\xc9\x06\n" + "\aRelayer\x12S\n" + "\x11NewContractWriter\x12\x1e.loop.NewContractWriterRequest\x1a\x1c.loop.NewContractWriterReply\"\x00\x12S\n" + "\x11NewContractReader\x12\x1e.loop.NewContractReaderRequest\x1a\x1c.loop.NewContractReaderReply\"\x00\x12S\n" + @@ -2980,8 +2895,7 @@ const file_loop_internal_pb_relayer_proto_rawDesc = "" + "\x11NewPluginProvider\x12\x1e.loop.NewPluginProviderRequest\x1a\x1c.loop.NewPluginProviderReply\"\x00\x12M\n" + "\x0fNewCCIPProvider\x12\x1c.loop.NewCCIPProviderRequest\x1a\x1a.loop.NewCCIPProviderReply\"\x00\x12>\n" + "\n" + - "LatestHead\x12\x17.loop.LatestHeadRequest\x1a\x15.loop.LatestHeadReply\"\x00\x12G\n" + - "\rFinalizedHead\x12\x1a.loop.FinalizedHeadRequest\x1a\x18.loop.FinalizedHeadReply\"\x00\x12J\n" + + "LatestHead\x12\x17.loop.LatestHeadRequest\x1a\x15.loop.LatestHeadReply\"\x00\x12J\n" + "\x0eGetChainStatus\x12\x1b.loop.GetChainStatusRequest\x1a\x19.loop.GetChainStatusReply\"\x00\x12D\n" + "\fGetChainInfo\x12\x19.loop.GetChainInfoRequest\x1a\x17.loop.GetChainInfoReply\"\x00\x12P\n" + "\x10ListNodeStatuses\x12\x1d.loop.ListNodeStatusesRequest\x1a\x1b.loop.ListNodeStatusesReply\"\x00\x12>\n" + @@ -3016,7 +2930,7 @@ func file_loop_internal_pb_relayer_proto_rawDescGZIP() []byte { return file_loop_internal_pb_relayer_proto_rawDescData } -var file_loop_internal_pb_relayer_proto_msgTypes = make([]protoimpl.MessageInfo, 57) +var file_loop_internal_pb_relayer_proto_msgTypes = make([]protoimpl.MessageInfo, 55) var file_loop_internal_pb_relayer_proto_goTypes = []any{ (*NewRelayerRequest)(nil), // 0: loop.NewRelayerRequest (*NewRelayerReply)(nil), // 1: loop.NewRelayerReply @@ -3035,127 +2949,122 @@ var file_loop_internal_pb_relayer_proto_goTypes = []any{ (*NewCCIPProviderReply)(nil), // 14: loop.NewCCIPProviderReply (*LatestHeadRequest)(nil), // 15: loop.LatestHeadRequest (*LatestHeadReply)(nil), // 16: loop.LatestHeadReply - (*FinalizedHeadRequest)(nil), // 17: loop.FinalizedHeadRequest - (*FinalizedHeadReply)(nil), // 18: loop.FinalizedHeadReply - (*GetChainStatusRequest)(nil), // 19: loop.GetChainStatusRequest - (*GetChainStatusReply)(nil), // 20: loop.GetChainStatusReply - (*GetChainInfoRequest)(nil), // 21: loop.GetChainInfoRequest - (*GetChainInfoReply)(nil), // 22: loop.GetChainInfoReply - (*ChainStatus)(nil), // 23: loop.ChainStatus - (*ChainInfo)(nil), // 24: loop.ChainInfo - (*ListNodeStatusesRequest)(nil), // 25: loop.ListNodeStatusesRequest - (*ListNodeStatusesReply)(nil), // 26: loop.ListNodeStatusesReply - (*NodeStatus)(nil), // 27: loop.NodeStatus - (*ReplayRequest)(nil), // 28: loop.ReplayRequest - (*TransactionRequest)(nil), // 29: loop.TransactionRequest - (*ContractConfig)(nil), // 30: loop.ContractConfig - (*ConfigDigestRequest)(nil), // 31: loop.ConfigDigestRequest - (*ConfigDigestReply)(nil), // 32: loop.ConfigDigestReply - (*ConfigDigestPrefixRequest)(nil), // 33: loop.ConfigDigestPrefixRequest - (*ConfigDigestPrefixReply)(nil), // 34: loop.ConfigDigestPrefixReply - (*LatestConfigDetailsRequest)(nil), // 35: loop.LatestConfigDetailsRequest - (*LatestConfigDetailsReply)(nil), // 36: loop.LatestConfigDetailsReply - (*LatestConfigRequest)(nil), // 37: loop.LatestConfigRequest - (*LatestConfigReply)(nil), // 38: loop.LatestConfigReply - (*LatestBlockHeightRequest)(nil), // 39: loop.LatestBlockHeightRequest - (*LatestBlockHeightReply)(nil), // 40: loop.LatestBlockHeightReply - (*ReportTimestamp)(nil), // 41: loop.ReportTimestamp - (*ReportContext)(nil), // 42: loop.ReportContext - (*AttributedOnchainSignature)(nil), // 43: loop.AttributedOnchainSignature - (*TransmitRequest)(nil), // 44: loop.TransmitRequest - (*TransmitReply)(nil), // 45: loop.TransmitReply - (*LatestConfigDigestAndEpochRequest)(nil), // 46: loop.LatestConfigDigestAndEpochRequest - (*LatestConfigDigestAndEpochReply)(nil), // 47: loop.LatestConfigDigestAndEpochReply - (*FromAccountRequest)(nil), // 48: loop.FromAccountRequest - (*FromAccountReply)(nil), // 49: loop.FromAccountReply - (*NameReply)(nil), // 50: loop.NameReply - (*HealthReportReply)(nil), // 51: loop.HealthReportReply - (*BigInt)(nil), // 52: loop.BigInt - (*StarknetSignature)(nil), // 53: loop.StarknetSignature - (*StarknetMessageHash)(nil), // 54: loop.StarknetMessageHash - nil, // 55: loop.CCIPProviderArgs.SyncedAddressesEntry - nil, // 56: loop.HealthReportReply.HealthReportEntry - (*Head)(nil), // 57: loop.Head - (*structpb.Struct)(nil), // 58: google.protobuf.Struct - (*emptypb.Empty)(nil), // 59: google.protobuf.Empty + (*GetChainStatusRequest)(nil), // 17: loop.GetChainStatusRequest + (*GetChainStatusReply)(nil), // 18: loop.GetChainStatusReply + (*GetChainInfoRequest)(nil), // 19: loop.GetChainInfoRequest + (*GetChainInfoReply)(nil), // 20: loop.GetChainInfoReply + (*ChainStatus)(nil), // 21: loop.ChainStatus + (*ChainInfo)(nil), // 22: loop.ChainInfo + (*ListNodeStatusesRequest)(nil), // 23: loop.ListNodeStatusesRequest + (*ListNodeStatusesReply)(nil), // 24: loop.ListNodeStatusesReply + (*NodeStatus)(nil), // 25: loop.NodeStatus + (*ReplayRequest)(nil), // 26: loop.ReplayRequest + (*TransactionRequest)(nil), // 27: loop.TransactionRequest + (*ContractConfig)(nil), // 28: loop.ContractConfig + (*ConfigDigestRequest)(nil), // 29: loop.ConfigDigestRequest + (*ConfigDigestReply)(nil), // 30: loop.ConfigDigestReply + (*ConfigDigestPrefixRequest)(nil), // 31: loop.ConfigDigestPrefixRequest + (*ConfigDigestPrefixReply)(nil), // 32: loop.ConfigDigestPrefixReply + (*LatestConfigDetailsRequest)(nil), // 33: loop.LatestConfigDetailsRequest + (*LatestConfigDetailsReply)(nil), // 34: loop.LatestConfigDetailsReply + (*LatestConfigRequest)(nil), // 35: loop.LatestConfigRequest + (*LatestConfigReply)(nil), // 36: loop.LatestConfigReply + (*LatestBlockHeightRequest)(nil), // 37: loop.LatestBlockHeightRequest + (*LatestBlockHeightReply)(nil), // 38: loop.LatestBlockHeightReply + (*ReportTimestamp)(nil), // 39: loop.ReportTimestamp + (*ReportContext)(nil), // 40: loop.ReportContext + (*AttributedOnchainSignature)(nil), // 41: loop.AttributedOnchainSignature + (*TransmitRequest)(nil), // 42: loop.TransmitRequest + (*TransmitReply)(nil), // 43: loop.TransmitReply + (*LatestConfigDigestAndEpochRequest)(nil), // 44: loop.LatestConfigDigestAndEpochRequest + (*LatestConfigDigestAndEpochReply)(nil), // 45: loop.LatestConfigDigestAndEpochReply + (*FromAccountRequest)(nil), // 46: loop.FromAccountRequest + (*FromAccountReply)(nil), // 47: loop.FromAccountReply + (*NameReply)(nil), // 48: loop.NameReply + (*HealthReportReply)(nil), // 49: loop.HealthReportReply + (*BigInt)(nil), // 50: loop.BigInt + (*StarknetSignature)(nil), // 51: loop.StarknetSignature + (*StarknetMessageHash)(nil), // 52: loop.StarknetMessageHash + nil, // 53: loop.CCIPProviderArgs.SyncedAddressesEntry + nil, // 54: loop.HealthReportReply.HealthReportEntry + (*Head)(nil), // 55: loop.Head + (*structpb.Struct)(nil), // 56: google.protobuf.Struct + (*emptypb.Empty)(nil), // 57: google.protobuf.Empty } var file_loop_internal_pb_relayer_proto_depIdxs = []int32{ - 55, // 0: loop.CCIPProviderArgs.synced_addresses:type_name -> loop.CCIPProviderArgs.SyncedAddressesEntry + 53, // 0: loop.CCIPProviderArgs.synced_addresses:type_name -> loop.CCIPProviderArgs.SyncedAddressesEntry 2, // 1: loop.NewPluginProviderRequest.relayArgs:type_name -> loop.RelayArgs 3, // 2: loop.NewPluginProviderRequest.pluginArgs:type_name -> loop.PluginArgs 2, // 3: loop.NewConfigProviderRequest.relayArgs:type_name -> loop.RelayArgs 4, // 4: loop.NewCCIPProviderRequest.ccipProviderArgs:type_name -> loop.CCIPProviderArgs - 57, // 5: loop.LatestHeadReply.head:type_name -> loop.Head - 57, // 6: loop.FinalizedHeadReply.head:type_name -> loop.Head - 23, // 7: loop.GetChainStatusReply.chain:type_name -> loop.ChainStatus - 24, // 8: loop.GetChainInfoReply.chain_info:type_name -> loop.ChainInfo - 27, // 9: loop.ListNodeStatusesReply.nodes:type_name -> loop.NodeStatus - 58, // 10: loop.ReplayRequest.args:type_name -> google.protobuf.Struct - 52, // 11: loop.TransactionRequest.amount:type_name -> loop.BigInt - 30, // 12: loop.ConfigDigestRequest.contractConfig:type_name -> loop.ContractConfig - 30, // 13: loop.LatestConfigReply.contractConfig:type_name -> loop.ContractConfig - 41, // 14: loop.ReportContext.reportTimestamp:type_name -> loop.ReportTimestamp - 42, // 15: loop.TransmitRequest.reportContext:type_name -> loop.ReportContext - 43, // 16: loop.TransmitRequest.attributedOnchainSignatures:type_name -> loop.AttributedOnchainSignature - 56, // 17: loop.HealthReportReply.healthReport:type_name -> loop.HealthReportReply.HealthReportEntry - 52, // 18: loop.StarknetSignature.x:type_name -> loop.BigInt - 52, // 19: loop.StarknetSignature.y:type_name -> loop.BigInt - 52, // 20: loop.StarknetMessageHash.hash:type_name -> loop.BigInt - 0, // 21: loop.PluginRelayer.NewRelayer:input_type -> loop.NewRelayerRequest - 5, // 22: loop.Relayer.NewContractWriter:input_type -> loop.NewContractWriterRequest - 7, // 23: loop.Relayer.NewContractReader:input_type -> loop.NewContractReaderRequest - 11, // 24: loop.Relayer.NewConfigProvider:input_type -> loop.NewConfigProviderRequest - 9, // 25: loop.Relayer.NewPluginProvider:input_type -> loop.NewPluginProviderRequest - 13, // 26: loop.Relayer.NewCCIPProvider:input_type -> loop.NewCCIPProviderRequest - 15, // 27: loop.Relayer.LatestHead:input_type -> loop.LatestHeadRequest - 17, // 28: loop.Relayer.FinalizedHead:input_type -> loop.FinalizedHeadRequest - 19, // 29: loop.Relayer.GetChainStatus:input_type -> loop.GetChainStatusRequest - 21, // 30: loop.Relayer.GetChainInfo:input_type -> loop.GetChainInfoRequest - 25, // 31: loop.Relayer.ListNodeStatuses:input_type -> loop.ListNodeStatusesRequest - 29, // 32: loop.Relayer.Transact:input_type -> loop.TransactionRequest - 28, // 33: loop.Relayer.Replay:input_type -> loop.ReplayRequest - 31, // 34: loop.OffchainConfigDigester.ConfigDigest:input_type -> loop.ConfigDigestRequest - 33, // 35: loop.OffchainConfigDigester.ConfigDigestPrefix:input_type -> loop.ConfigDigestPrefixRequest - 35, // 36: loop.ContractConfigTracker.LatestConfigDetails:input_type -> loop.LatestConfigDetailsRequest - 37, // 37: loop.ContractConfigTracker.LatestConfig:input_type -> loop.LatestConfigRequest - 39, // 38: loop.ContractConfigTracker.LatestBlockHeight:input_type -> loop.LatestBlockHeightRequest - 44, // 39: loop.ContractTransmitter.Transmit:input_type -> loop.TransmitRequest - 46, // 40: loop.ContractTransmitter.LatestConfigDigestAndEpoch:input_type -> loop.LatestConfigDigestAndEpochRequest - 48, // 41: loop.ContractTransmitter.FromAccount:input_type -> loop.FromAccountRequest - 59, // 42: loop.Service.Name:input_type -> google.protobuf.Empty - 59, // 43: loop.Service.Close:input_type -> google.protobuf.Empty - 59, // 44: loop.Service.Ready:input_type -> google.protobuf.Empty - 59, // 45: loop.Service.HealthReport:input_type -> google.protobuf.Empty - 1, // 46: loop.PluginRelayer.NewRelayer:output_type -> loop.NewRelayerReply - 6, // 47: loop.Relayer.NewContractWriter:output_type -> loop.NewContractWriterReply - 8, // 48: loop.Relayer.NewContractReader:output_type -> loop.NewContractReaderReply - 12, // 49: loop.Relayer.NewConfigProvider:output_type -> loop.NewConfigProviderReply - 10, // 50: loop.Relayer.NewPluginProvider:output_type -> loop.NewPluginProviderReply - 14, // 51: loop.Relayer.NewCCIPProvider:output_type -> loop.NewCCIPProviderReply - 16, // 52: loop.Relayer.LatestHead:output_type -> loop.LatestHeadReply - 18, // 53: loop.Relayer.FinalizedHead:output_type -> loop.FinalizedHeadReply - 20, // 54: loop.Relayer.GetChainStatus:output_type -> loop.GetChainStatusReply - 22, // 55: loop.Relayer.GetChainInfo:output_type -> loop.GetChainInfoReply - 26, // 56: loop.Relayer.ListNodeStatuses:output_type -> loop.ListNodeStatusesReply - 59, // 57: loop.Relayer.Transact:output_type -> google.protobuf.Empty - 59, // 58: loop.Relayer.Replay:output_type -> google.protobuf.Empty - 32, // 59: loop.OffchainConfigDigester.ConfigDigest:output_type -> loop.ConfigDigestReply - 34, // 60: loop.OffchainConfigDigester.ConfigDigestPrefix:output_type -> loop.ConfigDigestPrefixReply - 36, // 61: loop.ContractConfigTracker.LatestConfigDetails:output_type -> loop.LatestConfigDetailsReply - 38, // 62: loop.ContractConfigTracker.LatestConfig:output_type -> loop.LatestConfigReply - 40, // 63: loop.ContractConfigTracker.LatestBlockHeight:output_type -> loop.LatestBlockHeightReply - 45, // 64: loop.ContractTransmitter.Transmit:output_type -> loop.TransmitReply - 47, // 65: loop.ContractTransmitter.LatestConfigDigestAndEpoch:output_type -> loop.LatestConfigDigestAndEpochReply - 49, // 66: loop.ContractTransmitter.FromAccount:output_type -> loop.FromAccountReply - 50, // 67: loop.Service.Name:output_type -> loop.NameReply - 59, // 68: loop.Service.Close:output_type -> google.protobuf.Empty - 59, // 69: loop.Service.Ready:output_type -> google.protobuf.Empty - 51, // 70: loop.Service.HealthReport:output_type -> loop.HealthReportReply - 46, // [46:71] is the sub-list for method output_type - 21, // [21:46] is the sub-list for method input_type - 21, // [21:21] is the sub-list for extension type_name - 21, // [21:21] is the sub-list for extension extendee - 0, // [0:21] is the sub-list for field type_name + 55, // 5: loop.LatestHeadReply.head:type_name -> loop.Head + 21, // 6: loop.GetChainStatusReply.chain:type_name -> loop.ChainStatus + 22, // 7: loop.GetChainInfoReply.chain_info:type_name -> loop.ChainInfo + 25, // 8: loop.ListNodeStatusesReply.nodes:type_name -> loop.NodeStatus + 56, // 9: loop.ReplayRequest.args:type_name -> google.protobuf.Struct + 50, // 10: loop.TransactionRequest.amount:type_name -> loop.BigInt + 28, // 11: loop.ConfigDigestRequest.contractConfig:type_name -> loop.ContractConfig + 28, // 12: loop.LatestConfigReply.contractConfig:type_name -> loop.ContractConfig + 39, // 13: loop.ReportContext.reportTimestamp:type_name -> loop.ReportTimestamp + 40, // 14: loop.TransmitRequest.reportContext:type_name -> loop.ReportContext + 41, // 15: loop.TransmitRequest.attributedOnchainSignatures:type_name -> loop.AttributedOnchainSignature + 54, // 16: loop.HealthReportReply.healthReport:type_name -> loop.HealthReportReply.HealthReportEntry + 50, // 17: loop.StarknetSignature.x:type_name -> loop.BigInt + 50, // 18: loop.StarknetSignature.y:type_name -> loop.BigInt + 50, // 19: loop.StarknetMessageHash.hash:type_name -> loop.BigInt + 0, // 20: loop.PluginRelayer.NewRelayer:input_type -> loop.NewRelayerRequest + 5, // 21: loop.Relayer.NewContractWriter:input_type -> loop.NewContractWriterRequest + 7, // 22: loop.Relayer.NewContractReader:input_type -> loop.NewContractReaderRequest + 11, // 23: loop.Relayer.NewConfigProvider:input_type -> loop.NewConfigProviderRequest + 9, // 24: loop.Relayer.NewPluginProvider:input_type -> loop.NewPluginProviderRequest + 13, // 25: loop.Relayer.NewCCIPProvider:input_type -> loop.NewCCIPProviderRequest + 15, // 26: loop.Relayer.LatestHead:input_type -> loop.LatestHeadRequest + 17, // 27: loop.Relayer.GetChainStatus:input_type -> loop.GetChainStatusRequest + 19, // 28: loop.Relayer.GetChainInfo:input_type -> loop.GetChainInfoRequest + 23, // 29: loop.Relayer.ListNodeStatuses:input_type -> loop.ListNodeStatusesRequest + 27, // 30: loop.Relayer.Transact:input_type -> loop.TransactionRequest + 26, // 31: loop.Relayer.Replay:input_type -> loop.ReplayRequest + 29, // 32: loop.OffchainConfigDigester.ConfigDigest:input_type -> loop.ConfigDigestRequest + 31, // 33: loop.OffchainConfigDigester.ConfigDigestPrefix:input_type -> loop.ConfigDigestPrefixRequest + 33, // 34: loop.ContractConfigTracker.LatestConfigDetails:input_type -> loop.LatestConfigDetailsRequest + 35, // 35: loop.ContractConfigTracker.LatestConfig:input_type -> loop.LatestConfigRequest + 37, // 36: loop.ContractConfigTracker.LatestBlockHeight:input_type -> loop.LatestBlockHeightRequest + 42, // 37: loop.ContractTransmitter.Transmit:input_type -> loop.TransmitRequest + 44, // 38: loop.ContractTransmitter.LatestConfigDigestAndEpoch:input_type -> loop.LatestConfigDigestAndEpochRequest + 46, // 39: loop.ContractTransmitter.FromAccount:input_type -> loop.FromAccountRequest + 57, // 40: loop.Service.Name:input_type -> google.protobuf.Empty + 57, // 41: loop.Service.Close:input_type -> google.protobuf.Empty + 57, // 42: loop.Service.Ready:input_type -> google.protobuf.Empty + 57, // 43: loop.Service.HealthReport:input_type -> google.protobuf.Empty + 1, // 44: loop.PluginRelayer.NewRelayer:output_type -> loop.NewRelayerReply + 6, // 45: loop.Relayer.NewContractWriter:output_type -> loop.NewContractWriterReply + 8, // 46: loop.Relayer.NewContractReader:output_type -> loop.NewContractReaderReply + 12, // 47: loop.Relayer.NewConfigProvider:output_type -> loop.NewConfigProviderReply + 10, // 48: loop.Relayer.NewPluginProvider:output_type -> loop.NewPluginProviderReply + 14, // 49: loop.Relayer.NewCCIPProvider:output_type -> loop.NewCCIPProviderReply + 16, // 50: loop.Relayer.LatestHead:output_type -> loop.LatestHeadReply + 18, // 51: loop.Relayer.GetChainStatus:output_type -> loop.GetChainStatusReply + 20, // 52: loop.Relayer.GetChainInfo:output_type -> loop.GetChainInfoReply + 24, // 53: loop.Relayer.ListNodeStatuses:output_type -> loop.ListNodeStatusesReply + 57, // 54: loop.Relayer.Transact:output_type -> google.protobuf.Empty + 57, // 55: loop.Relayer.Replay:output_type -> google.protobuf.Empty + 30, // 56: loop.OffchainConfigDigester.ConfigDigest:output_type -> loop.ConfigDigestReply + 32, // 57: loop.OffchainConfigDigester.ConfigDigestPrefix:output_type -> loop.ConfigDigestPrefixReply + 34, // 58: loop.ContractConfigTracker.LatestConfigDetails:output_type -> loop.LatestConfigDetailsReply + 36, // 59: loop.ContractConfigTracker.LatestConfig:output_type -> loop.LatestConfigReply + 38, // 60: loop.ContractConfigTracker.LatestBlockHeight:output_type -> loop.LatestBlockHeightReply + 43, // 61: loop.ContractTransmitter.Transmit:output_type -> loop.TransmitReply + 45, // 62: loop.ContractTransmitter.LatestConfigDigestAndEpoch:output_type -> loop.LatestConfigDigestAndEpochReply + 47, // 63: loop.ContractTransmitter.FromAccount:output_type -> loop.FromAccountReply + 48, // 64: loop.Service.Name:output_type -> loop.NameReply + 57, // 65: loop.Service.Close:output_type -> google.protobuf.Empty + 57, // 66: loop.Service.Ready:output_type -> google.protobuf.Empty + 49, // 67: loop.Service.HealthReport:output_type -> loop.HealthReportReply + 44, // [44:68] is the sub-list for method output_type + 20, // [20:44] is the sub-list for method input_type + 20, // [20:20] is the sub-list for extension type_name + 20, // [20:20] is the sub-list for extension extendee + 0, // [0:20] is the sub-list for field type_name } func init() { file_loop_internal_pb_relayer_proto_init() } @@ -3170,7 +3079,7 @@ func file_loop_internal_pb_relayer_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_loop_internal_pb_relayer_proto_rawDesc), len(file_loop_internal_pb_relayer_proto_rawDesc)), NumEnums: 0, - NumMessages: 57, + NumMessages: 55, NumExtensions: 0, NumServices: 6, }, diff --git a/pkg/loop/internal/pb/relayer.proto b/pkg/loop/internal/pb/relayer.proto index 6f97c27989..a405fc45bf 100644 --- a/pkg/loop/internal/pb/relayer.proto +++ b/pkg/loop/internal/pb/relayer.proto @@ -31,7 +31,6 @@ service Relayer { rpc NewCCIPProvider (NewCCIPProviderRequest) returns (NewCCIPProviderReply) {} rpc LatestHead (LatestHeadRequest) returns (LatestHeadReply) {} - rpc FinalizedHead (FinalizedHeadRequest) returns (FinalizedHeadReply) {} rpc GetChainStatus (GetChainStatusRequest) returns (GetChainStatusReply) {} rpc GetChainInfo (GetChainInfoRequest) returns (GetChainInfoReply) {} @@ -127,13 +126,6 @@ message LatestHeadReply { Head head = 1; } -message FinalizedHeadRequest {} - -// FinalizedHeadReply has return arguments for [github.com/smartcontractkit/chainlink-common/pkg/loop.Relayer.FinalizedHead]. -message FinalizedHeadReply { - Head head = 1; -} - message GetChainStatusRequest {} // ChainStatusReply has return arguments for [github.com/smartcontractkit/chainlink-common/pkg/loop.Relayer.ChainStatus]. diff --git a/pkg/loop/internal/pb/relayer_grpc.pb.go b/pkg/loop/internal/pb/relayer_grpc.pb.go index b77a9b7eca..cc86c247a1 100644 --- a/pkg/loop/internal/pb/relayer_grpc.pb.go +++ b/pkg/loop/internal/pb/relayer_grpc.pb.go @@ -128,7 +128,6 @@ const ( Relayer_NewPluginProvider_FullMethodName = "/loop.Relayer/NewPluginProvider" Relayer_NewCCIPProvider_FullMethodName = "/loop.Relayer/NewCCIPProvider" Relayer_LatestHead_FullMethodName = "/loop.Relayer/LatestHead" - Relayer_FinalizedHead_FullMethodName = "/loop.Relayer/FinalizedHead" Relayer_GetChainStatus_FullMethodName = "/loop.Relayer/GetChainStatus" Relayer_GetChainInfo_FullMethodName = "/loop.Relayer/GetChainInfo" Relayer_ListNodeStatuses_FullMethodName = "/loop.Relayer/ListNodeStatuses" @@ -146,7 +145,6 @@ type RelayerClient interface { NewPluginProvider(ctx context.Context, in *NewPluginProviderRequest, opts ...grpc.CallOption) (*NewPluginProviderReply, error) NewCCIPProvider(ctx context.Context, in *NewCCIPProviderRequest, opts ...grpc.CallOption) (*NewCCIPProviderReply, error) LatestHead(ctx context.Context, in *LatestHeadRequest, opts ...grpc.CallOption) (*LatestHeadReply, error) - FinalizedHead(ctx context.Context, in *FinalizedHeadRequest, opts ...grpc.CallOption) (*FinalizedHeadReply, error) GetChainStatus(ctx context.Context, in *GetChainStatusRequest, opts ...grpc.CallOption) (*GetChainStatusReply, error) GetChainInfo(ctx context.Context, in *GetChainInfoRequest, opts ...grpc.CallOption) (*GetChainInfoReply, error) ListNodeStatuses(ctx context.Context, in *ListNodeStatusesRequest, opts ...grpc.CallOption) (*ListNodeStatusesReply, error) @@ -222,16 +220,6 @@ func (c *relayerClient) LatestHead(ctx context.Context, in *LatestHeadRequest, o return out, nil } -func (c *relayerClient) FinalizedHead(ctx context.Context, in *FinalizedHeadRequest, opts ...grpc.CallOption) (*FinalizedHeadReply, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(FinalizedHeadReply) - err := c.cc.Invoke(ctx, Relayer_FinalizedHead_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - func (c *relayerClient) GetChainStatus(ctx context.Context, in *GetChainStatusRequest, opts ...grpc.CallOption) (*GetChainStatusReply, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetChainStatusReply) @@ -292,7 +280,6 @@ type RelayerServer interface { NewPluginProvider(context.Context, *NewPluginProviderRequest) (*NewPluginProviderReply, error) NewCCIPProvider(context.Context, *NewCCIPProviderRequest) (*NewCCIPProviderReply, error) LatestHead(context.Context, *LatestHeadRequest) (*LatestHeadReply, error) - FinalizedHead(context.Context, *FinalizedHeadRequest) (*FinalizedHeadReply, error) GetChainStatus(context.Context, *GetChainStatusRequest) (*GetChainStatusReply, error) GetChainInfo(context.Context, *GetChainInfoRequest) (*GetChainInfoReply, error) ListNodeStatuses(context.Context, *ListNodeStatusesRequest) (*ListNodeStatusesReply, error) @@ -326,9 +313,6 @@ func (UnimplementedRelayerServer) NewCCIPProvider(context.Context, *NewCCIPProvi func (UnimplementedRelayerServer) LatestHead(context.Context, *LatestHeadRequest) (*LatestHeadReply, error) { return nil, status.Errorf(codes.Unimplemented, "method LatestHead not implemented") } -func (UnimplementedRelayerServer) FinalizedHead(context.Context, *FinalizedHeadRequest) (*FinalizedHeadReply, error) { - return nil, status.Errorf(codes.Unimplemented, "method FinalizedHead not implemented") -} func (UnimplementedRelayerServer) GetChainStatus(context.Context, *GetChainStatusRequest) (*GetChainStatusReply, error) { return nil, status.Errorf(codes.Unimplemented, "method GetChainStatus not implemented") } @@ -473,24 +457,6 @@ func _Relayer_LatestHead_Handler(srv interface{}, ctx context.Context, dec func( return interceptor(ctx, in, info, handler) } -func _Relayer_FinalizedHead_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(FinalizedHeadRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RelayerServer).FinalizedHead(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Relayer_FinalizedHead_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RelayerServer).FinalizedHead(ctx, req.(*FinalizedHeadRequest)) - } - return interceptor(ctx, in, info, handler) -} - func _Relayer_GetChainStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(GetChainStatusRequest) if err := dec(in); err != nil { @@ -612,10 +578,6 @@ var Relayer_ServiceDesc = grpc.ServiceDesc{ MethodName: "LatestHead", Handler: _Relayer_LatestHead_Handler, }, - { - MethodName: "FinalizedHead", - Handler: _Relayer_FinalizedHead_Handler, - }, { MethodName: "GetChainStatus", Handler: _Relayer_GetChainStatus_Handler, diff --git a/pkg/loop/internal/pb/relayerset/relayerset.pb.go b/pkg/loop/internal/pb/relayerset/relayerset.pb.go index 6b56316a1f..96a5c2b341 100644 --- a/pkg/loop/internal/pb/relayerset/relayerset.pb.go +++ b/pkg/loop/internal/pb/relayerset/relayerset.pb.go @@ -842,110 +842,6 @@ func (x *LatestHeadResponse) GetTimestamp() uint64 { return 0 } -type FinalizedHeadRequest struct { - state protoimpl.MessageState `protogen:"open.v1"` - RelayerId *RelayerId `protobuf:"bytes,1,opt,name=relayerId,proto3" json:"relayerId,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *FinalizedHeadRequest) Reset() { - *x = FinalizedHeadRequest{} - mi := &file_relayerset_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *FinalizedHeadRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FinalizedHeadRequest) ProtoMessage() {} - -func (x *FinalizedHeadRequest) ProtoReflect() protoreflect.Message { - mi := &file_relayerset_proto_msgTypes[16] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FinalizedHeadRequest.ProtoReflect.Descriptor instead. -func (*FinalizedHeadRequest) Descriptor() ([]byte, []int) { - return file_relayerset_proto_rawDescGZIP(), []int{16} -} - -func (x *FinalizedHeadRequest) GetRelayerId() *RelayerId { - if x != nil { - return x.RelayerId - } - return nil -} - -type FinalizedHeadResponse struct { - state protoimpl.MessageState `protogen:"open.v1"` - Height string `protobuf:"bytes,1,opt,name=height,proto3" json:"height,omitempty"` - Hash []byte `protobuf:"bytes,2,opt,name=hash,proto3" json:"hash,omitempty"` - Timestamp uint64 `protobuf:"varint,3,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *FinalizedHeadResponse) Reset() { - *x = FinalizedHeadResponse{} - mi := &file_relayerset_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *FinalizedHeadResponse) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FinalizedHeadResponse) ProtoMessage() {} - -func (x *FinalizedHeadResponse) ProtoReflect() protoreflect.Message { - mi := &file_relayerset_proto_msgTypes[17] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FinalizedHeadResponse.ProtoReflect.Descriptor instead. -func (*FinalizedHeadResponse) Descriptor() ([]byte, []int) { - return file_relayerset_proto_rawDescGZIP(), []int{17} -} - -func (x *FinalizedHeadResponse) GetHeight() string { - if x != nil { - return x.Height - } - return "" -} - -func (x *FinalizedHeadResponse) GetHash() []byte { - if x != nil { - return x.Hash - } - return nil -} - -func (x *FinalizedHeadResponse) GetTimestamp() uint64 { - if x != nil { - return x.Timestamp - } - return 0 -} - type GetChainInfoRequest struct { state protoimpl.MessageState `protogen:"open.v1"` RelayerId *RelayerId `protobuf:"bytes,1,opt,name=relayerId,proto3" json:"relayerId,omitempty"` @@ -955,7 +851,7 @@ type GetChainInfoRequest struct { func (x *GetChainInfoRequest) Reset() { *x = GetChainInfoRequest{} - mi := &file_relayerset_proto_msgTypes[18] + mi := &file_relayerset_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -967,7 +863,7 @@ func (x *GetChainInfoRequest) String() string { func (*GetChainInfoRequest) ProtoMessage() {} func (x *GetChainInfoRequest) ProtoReflect() protoreflect.Message { - mi := &file_relayerset_proto_msgTypes[18] + mi := &file_relayerset_proto_msgTypes[16] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -980,7 +876,7 @@ func (x *GetChainInfoRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetChainInfoRequest.ProtoReflect.Descriptor instead. func (*GetChainInfoRequest) Descriptor() ([]byte, []int) { - return file_relayerset_proto_rawDescGZIP(), []int{18} + return file_relayerset_proto_rawDescGZIP(), []int{16} } func (x *GetChainInfoRequest) GetRelayerId() *RelayerId { @@ -999,7 +895,7 @@ type RelayerHealthReportResponse struct { func (x *RelayerHealthReportResponse) Reset() { *x = RelayerHealthReportResponse{} - mi := &file_relayerset_proto_msgTypes[19] + mi := &file_relayerset_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1011,7 +907,7 @@ func (x *RelayerHealthReportResponse) String() string { func (*RelayerHealthReportResponse) ProtoMessage() {} func (x *RelayerHealthReportResponse) ProtoReflect() protoreflect.Message { - mi := &file_relayerset_proto_msgTypes[19] + mi := &file_relayerset_proto_msgTypes[17] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1024,7 +920,7 @@ func (x *RelayerHealthReportResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RelayerHealthReportResponse.ProtoReflect.Descriptor instead. func (*RelayerHealthReportResponse) Descriptor() ([]byte, []int) { - return file_relayerset_proto_rawDescGZIP(), []int{19} + return file_relayerset_proto_rawDescGZIP(), []int{17} } func (x *RelayerHealthReportResponse) GetReport() map[string]string { @@ -1043,7 +939,7 @@ type RelayerNameResponse struct { func (x *RelayerNameResponse) Reset() { *x = RelayerNameResponse{} - mi := &file_relayerset_proto_msgTypes[20] + mi := &file_relayerset_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1055,7 +951,7 @@ func (x *RelayerNameResponse) String() string { func (*RelayerNameResponse) ProtoMessage() {} func (x *RelayerNameResponse) ProtoReflect() protoreflect.Message { - mi := &file_relayerset_proto_msgTypes[20] + mi := &file_relayerset_proto_msgTypes[18] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1068,7 +964,7 @@ func (x *RelayerNameResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RelayerNameResponse.ProtoReflect.Descriptor instead. func (*RelayerNameResponse) Descriptor() ([]byte, []int) { - return file_relayerset_proto_rawDescGZIP(), []int{20} + return file_relayerset_proto_rawDescGZIP(), []int{18} } func (x *RelayerNameResponse) GetName() string { @@ -1134,12 +1030,6 @@ const file_relayerset_proto_rawDesc = "" + "\x12LatestHeadResponse\x12\x16\n" + "\x06height\x18\x01 \x01(\tR\x06height\x12\x12\n" + "\x04hash\x18\x02 \x01(\fR\x04hash\x12\x1c\n" + - "\ttimestamp\x18\x03 \x01(\x04R\ttimestamp\"P\n" + - "\x14FinalizedHeadRequest\x128\n" + - "\trelayerId\x18\x01 \x01(\v2\x1a.loop.relayerset.RelayerIdR\trelayerId\"a\n" + - "\x15FinalizedHeadResponse\x12\x16\n" + - "\x06height\x18\x01 \x01(\tR\x06height\x12\x12\n" + - "\x04hash\x18\x02 \x01(\fR\x04hash\x12\x1c\n" + "\ttimestamp\x18\x03 \x01(\x04R\ttimestamp\"O\n" + "\x13GetChainInfoRequest\x128\n" + "\trelayerId\x18\x01 \x01(\v2\x1a.loop.relayerset.RelayerIdR\trelayerId\"\xaa\x01\n" + @@ -1149,8 +1039,7 @@ const file_relayerset_proto_rawDesc = "" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\")\n" + "\x13RelayerNameResponse\x12\x12\n" + - "\x04name\x18\x01 \x01(\tR\x04name2\xc0\n" + - "\n" + + "\x04name\x18\x01 \x01(\tR\x04name2\xd7\t\n" + "\n" + "RelayerSet\x12P\n" + "\x03Get\x12\".loop.relayerset.GetRelayerRequest\x1a#.loop.relayerset.GetRelayerResponse\"\x00\x12[\n" + @@ -1163,8 +1052,7 @@ const file_relayerset_proto_rawDesc = "" + "\fRelayerReady\x12\x1a.loop.relayerset.RelayerId\x1a\x16.google.protobuf.Empty\"\x00\x12a\n" + "\x13RelayerHealthReport\x12\x1a.loop.relayerset.RelayerId\x1a,.loop.relayerset.RelayerHealthReportResponse\"\x00\x12Q\n" + "\vRelayerName\x12\x1a.loop.relayerset.RelayerId\x1a$.loop.relayerset.RelayerNameResponse\"\x00\x12^\n" + - "\x11RelayerLatestHead\x12\".loop.relayerset.LatestHeadRequest\x1a#.loop.relayerset.LatestHeadResponse\"\x00\x12g\n" + - "\x14RelayerFinalizedHead\x12%.loop.relayerset.FinalizedHeadRequest\x1a&.loop.relayerset.FinalizedHeadResponse\"\x00\x12V\n" + + "\x11RelayerLatestHead\x12\".loop.relayerset.LatestHeadRequest\x1a#.loop.relayerset.LatestHeadResponse\"\x00\x12V\n" + "\x13RelayerGetChainInfo\x12$.loop.relayerset.GetChainInfoRequest\x1a\x17.loop.GetChainInfoReply\"\x00\x12G\n" + "\x13ContractReaderStart\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00\x12G\n" + "\x13ContractReaderClose\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\"\x00BNZLgithub.com/smartcontractkit/chainlink-common/pkg/loop/internal/pb/relayersetb\x06proto3" @@ -1181,7 +1069,7 @@ func file_relayerset_proto_rawDescGZIP() []byte { return file_relayerset_proto_rawDescData } -var file_relayerset_proto_msgTypes = make([]protoimpl.MessageInfo, 22) +var file_relayerset_proto_msgTypes = make([]protoimpl.MessageInfo, 20) var file_relayerset_proto_goTypes = []any{ (*RelayerId)(nil), // 0: loop.relayerset.RelayerId (*GetRelayerRequest)(nil), // 1: loop.relayerset.GetRelayerRequest @@ -1199,14 +1087,12 @@ var file_relayerset_proto_goTypes = []any{ (*NewContractWriterResponse)(nil), // 13: loop.relayerset.NewContractWriterResponse (*LatestHeadRequest)(nil), // 14: loop.relayerset.LatestHeadRequest (*LatestHeadResponse)(nil), // 15: loop.relayerset.LatestHeadResponse - (*FinalizedHeadRequest)(nil), // 16: loop.relayerset.FinalizedHeadRequest - (*FinalizedHeadResponse)(nil), // 17: loop.relayerset.FinalizedHeadResponse - (*GetChainInfoRequest)(nil), // 18: loop.relayerset.GetChainInfoRequest - (*RelayerHealthReportResponse)(nil), // 19: loop.relayerset.RelayerHealthReportResponse - (*RelayerNameResponse)(nil), // 20: loop.relayerset.RelayerNameResponse - nil, // 21: loop.relayerset.RelayerHealthReportResponse.ReportEntry - (*emptypb.Empty)(nil), // 22: google.protobuf.Empty - (*pb.GetChainInfoReply)(nil), // 23: loop.GetChainInfoReply + (*GetChainInfoRequest)(nil), // 16: loop.relayerset.GetChainInfoRequest + (*RelayerHealthReportResponse)(nil), // 17: loop.relayerset.RelayerHealthReportResponse + (*RelayerNameResponse)(nil), // 18: loop.relayerset.RelayerNameResponse + nil, // 19: loop.relayerset.RelayerHealthReportResponse.ReportEntry + (*emptypb.Empty)(nil), // 20: google.protobuf.Empty + (*pb.GetChainInfoReply)(nil), // 21: loop.GetChainInfoReply } var file_relayerset_proto_depIdxs = []int32{ 0, // 0: loop.relayerset.GetRelayerRequest.id:type_name -> loop.relayerset.RelayerId @@ -1220,44 +1106,41 @@ var file_relayerset_proto_depIdxs = []int32{ 0, // 8: loop.relayerset.NewContractReaderRequest.relayerId:type_name -> loop.relayerset.RelayerId 0, // 9: loop.relayerset.NewContractWriterRequest.relayerId:type_name -> loop.relayerset.RelayerId 0, // 10: loop.relayerset.LatestHeadRequest.relayerId:type_name -> loop.relayerset.RelayerId - 0, // 11: loop.relayerset.FinalizedHeadRequest.relayerId:type_name -> loop.relayerset.RelayerId - 0, // 12: loop.relayerset.GetChainInfoRequest.relayerId:type_name -> loop.relayerset.RelayerId - 21, // 13: loop.relayerset.RelayerHealthReportResponse.report:type_name -> loop.relayerset.RelayerHealthReportResponse.ReportEntry - 1, // 14: loop.relayerset.RelayerSet.Get:input_type -> loop.relayerset.GetRelayerRequest - 3, // 15: loop.relayerset.RelayerSet.List:input_type -> loop.relayerset.ListAllRelayersRequest - 8, // 16: loop.relayerset.RelayerSet.NewPluginProvider:input_type -> loop.relayerset.NewPluginProviderRequest - 10, // 17: loop.relayerset.RelayerSet.NewContractReader:input_type -> loop.relayerset.NewContractReaderRequest - 12, // 18: loop.relayerset.RelayerSet.NewContractWriter:input_type -> loop.relayerset.NewContractWriterRequest - 0, // 19: loop.relayerset.RelayerSet.StartRelayer:input_type -> loop.relayerset.RelayerId - 0, // 20: loop.relayerset.RelayerSet.CloseRelayer:input_type -> loop.relayerset.RelayerId - 0, // 21: loop.relayerset.RelayerSet.RelayerReady:input_type -> loop.relayerset.RelayerId - 0, // 22: loop.relayerset.RelayerSet.RelayerHealthReport:input_type -> loop.relayerset.RelayerId - 0, // 23: loop.relayerset.RelayerSet.RelayerName:input_type -> loop.relayerset.RelayerId - 14, // 24: loop.relayerset.RelayerSet.RelayerLatestHead:input_type -> loop.relayerset.LatestHeadRequest - 16, // 25: loop.relayerset.RelayerSet.RelayerFinalizedHead:input_type -> loop.relayerset.FinalizedHeadRequest - 18, // 26: loop.relayerset.RelayerSet.RelayerGetChainInfo:input_type -> loop.relayerset.GetChainInfoRequest - 22, // 27: loop.relayerset.RelayerSet.ContractReaderStart:input_type -> google.protobuf.Empty - 22, // 28: loop.relayerset.RelayerSet.ContractReaderClose:input_type -> google.protobuf.Empty - 2, // 29: loop.relayerset.RelayerSet.Get:output_type -> loop.relayerset.GetRelayerResponse - 4, // 30: loop.relayerset.RelayerSet.List:output_type -> loop.relayerset.ListAllRelayersResponse - 9, // 31: loop.relayerset.RelayerSet.NewPluginProvider:output_type -> loop.relayerset.NewPluginProviderResponse - 11, // 32: loop.relayerset.RelayerSet.NewContractReader:output_type -> loop.relayerset.NewContractReaderResponse - 13, // 33: loop.relayerset.RelayerSet.NewContractWriter:output_type -> loop.relayerset.NewContractWriterResponse - 22, // 34: loop.relayerset.RelayerSet.StartRelayer:output_type -> google.protobuf.Empty - 22, // 35: loop.relayerset.RelayerSet.CloseRelayer:output_type -> google.protobuf.Empty - 22, // 36: loop.relayerset.RelayerSet.RelayerReady:output_type -> google.protobuf.Empty - 19, // 37: loop.relayerset.RelayerSet.RelayerHealthReport:output_type -> loop.relayerset.RelayerHealthReportResponse - 20, // 38: loop.relayerset.RelayerSet.RelayerName:output_type -> loop.relayerset.RelayerNameResponse - 15, // 39: loop.relayerset.RelayerSet.RelayerLatestHead:output_type -> loop.relayerset.LatestHeadResponse - 17, // 40: loop.relayerset.RelayerSet.RelayerFinalizedHead:output_type -> loop.relayerset.FinalizedHeadResponse - 23, // 41: loop.relayerset.RelayerSet.RelayerGetChainInfo:output_type -> loop.GetChainInfoReply - 22, // 42: loop.relayerset.RelayerSet.ContractReaderStart:output_type -> google.protobuf.Empty - 22, // 43: loop.relayerset.RelayerSet.ContractReaderClose:output_type -> google.protobuf.Empty - 29, // [29:44] is the sub-list for method output_type - 14, // [14:29] is the sub-list for method input_type - 14, // [14:14] is the sub-list for extension type_name - 14, // [14:14] is the sub-list for extension extendee - 0, // [0:14] is the sub-list for field type_name + 0, // 11: loop.relayerset.GetChainInfoRequest.relayerId:type_name -> loop.relayerset.RelayerId + 19, // 12: loop.relayerset.RelayerHealthReportResponse.report:type_name -> loop.relayerset.RelayerHealthReportResponse.ReportEntry + 1, // 13: loop.relayerset.RelayerSet.Get:input_type -> loop.relayerset.GetRelayerRequest + 3, // 14: loop.relayerset.RelayerSet.List:input_type -> loop.relayerset.ListAllRelayersRequest + 8, // 15: loop.relayerset.RelayerSet.NewPluginProvider:input_type -> loop.relayerset.NewPluginProviderRequest + 10, // 16: loop.relayerset.RelayerSet.NewContractReader:input_type -> loop.relayerset.NewContractReaderRequest + 12, // 17: loop.relayerset.RelayerSet.NewContractWriter:input_type -> loop.relayerset.NewContractWriterRequest + 0, // 18: loop.relayerset.RelayerSet.StartRelayer:input_type -> loop.relayerset.RelayerId + 0, // 19: loop.relayerset.RelayerSet.CloseRelayer:input_type -> loop.relayerset.RelayerId + 0, // 20: loop.relayerset.RelayerSet.RelayerReady:input_type -> loop.relayerset.RelayerId + 0, // 21: loop.relayerset.RelayerSet.RelayerHealthReport:input_type -> loop.relayerset.RelayerId + 0, // 22: loop.relayerset.RelayerSet.RelayerName:input_type -> loop.relayerset.RelayerId + 14, // 23: loop.relayerset.RelayerSet.RelayerLatestHead:input_type -> loop.relayerset.LatestHeadRequest + 16, // 24: loop.relayerset.RelayerSet.RelayerGetChainInfo:input_type -> loop.relayerset.GetChainInfoRequest + 20, // 25: loop.relayerset.RelayerSet.ContractReaderStart:input_type -> google.protobuf.Empty + 20, // 26: loop.relayerset.RelayerSet.ContractReaderClose:input_type -> google.protobuf.Empty + 2, // 27: loop.relayerset.RelayerSet.Get:output_type -> loop.relayerset.GetRelayerResponse + 4, // 28: loop.relayerset.RelayerSet.List:output_type -> loop.relayerset.ListAllRelayersResponse + 9, // 29: loop.relayerset.RelayerSet.NewPluginProvider:output_type -> loop.relayerset.NewPluginProviderResponse + 11, // 30: loop.relayerset.RelayerSet.NewContractReader:output_type -> loop.relayerset.NewContractReaderResponse + 13, // 31: loop.relayerset.RelayerSet.NewContractWriter:output_type -> loop.relayerset.NewContractWriterResponse + 20, // 32: loop.relayerset.RelayerSet.StartRelayer:output_type -> google.protobuf.Empty + 20, // 33: loop.relayerset.RelayerSet.CloseRelayer:output_type -> google.protobuf.Empty + 20, // 34: loop.relayerset.RelayerSet.RelayerReady:output_type -> google.protobuf.Empty + 17, // 35: loop.relayerset.RelayerSet.RelayerHealthReport:output_type -> loop.relayerset.RelayerHealthReportResponse + 18, // 36: loop.relayerset.RelayerSet.RelayerName:output_type -> loop.relayerset.RelayerNameResponse + 15, // 37: loop.relayerset.RelayerSet.RelayerLatestHead:output_type -> loop.relayerset.LatestHeadResponse + 21, // 38: loop.relayerset.RelayerSet.RelayerGetChainInfo:output_type -> loop.GetChainInfoReply + 20, // 39: loop.relayerset.RelayerSet.ContractReaderStart:output_type -> google.protobuf.Empty + 20, // 40: loop.relayerset.RelayerSet.ContractReaderClose:output_type -> google.protobuf.Empty + 27, // [27:41] is the sub-list for method output_type + 13, // [13:27] is the sub-list for method input_type + 13, // [13:13] is the sub-list for extension type_name + 13, // [13:13] is the sub-list for extension extendee + 0, // [0:13] is the sub-list for field type_name } func init() { file_relayerset_proto_init() } @@ -1271,7 +1154,7 @@ func file_relayerset_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_relayerset_proto_rawDesc), len(file_relayerset_proto_rawDesc)), NumEnums: 0, - NumMessages: 22, + NumMessages: 20, NumExtensions: 0, NumServices: 1, }, diff --git a/pkg/loop/internal/pb/relayerset/relayerset.proto b/pkg/loop/internal/pb/relayerset/relayerset.proto index de17d80e8e..d94dec0552 100644 --- a/pkg/loop/internal/pb/relayerset/relayerset.proto +++ b/pkg/loop/internal/pb/relayerset/relayerset.proto @@ -90,16 +90,6 @@ message LatestHeadResponse { uint64 timestamp = 3; } -message FinalizedHeadRequest { - RelayerId relayerId = 1; -} - -message FinalizedHeadResponse { - string height = 1; - bytes hash = 2; - uint64 timestamp = 3; -} - message GetChainInfoRequest { RelayerId relayerId = 1; } @@ -125,7 +115,6 @@ service RelayerSet { rpc RelayerHealthReport(RelayerId) returns (RelayerHealthReportResponse) {} rpc RelayerName(RelayerId) returns (RelayerNameResponse) {} rpc RelayerLatestHead(LatestHeadRequest) returns (LatestHeadResponse) {} - rpc RelayerFinalizedHead(FinalizedHeadRequest) returns (FinalizedHeadResponse) {} rpc RelayerGetChainInfo(GetChainInfoRequest) returns (GetChainInfoReply) {} rpc ContractReaderStart(google.protobuf.Empty) returns (google.protobuf.Empty) {} diff --git a/pkg/loop/internal/pb/relayerset/relayerset_grpc.pb.go b/pkg/loop/internal/pb/relayerset/relayerset_grpc.pb.go index b2b44e0ebb..9c1998ef7b 100644 --- a/pkg/loop/internal/pb/relayerset/relayerset_grpc.pb.go +++ b/pkg/loop/internal/pb/relayerset/relayerset_grpc.pb.go @@ -21,21 +21,20 @@ import ( const _ = grpc.SupportPackageIsVersion9 const ( - RelayerSet_Get_FullMethodName = "/loop.relayerset.RelayerSet/Get" - RelayerSet_List_FullMethodName = "/loop.relayerset.RelayerSet/List" - RelayerSet_NewPluginProvider_FullMethodName = "/loop.relayerset.RelayerSet/NewPluginProvider" - RelayerSet_NewContractReader_FullMethodName = "/loop.relayerset.RelayerSet/NewContractReader" - RelayerSet_NewContractWriter_FullMethodName = "/loop.relayerset.RelayerSet/NewContractWriter" - RelayerSet_StartRelayer_FullMethodName = "/loop.relayerset.RelayerSet/StartRelayer" - RelayerSet_CloseRelayer_FullMethodName = "/loop.relayerset.RelayerSet/CloseRelayer" - RelayerSet_RelayerReady_FullMethodName = "/loop.relayerset.RelayerSet/RelayerReady" - RelayerSet_RelayerHealthReport_FullMethodName = "/loop.relayerset.RelayerSet/RelayerHealthReport" - RelayerSet_RelayerName_FullMethodName = "/loop.relayerset.RelayerSet/RelayerName" - RelayerSet_RelayerLatestHead_FullMethodName = "/loop.relayerset.RelayerSet/RelayerLatestHead" - RelayerSet_RelayerFinalizedHead_FullMethodName = "/loop.relayerset.RelayerSet/RelayerFinalizedHead" - RelayerSet_RelayerGetChainInfo_FullMethodName = "/loop.relayerset.RelayerSet/RelayerGetChainInfo" - RelayerSet_ContractReaderStart_FullMethodName = "/loop.relayerset.RelayerSet/ContractReaderStart" - RelayerSet_ContractReaderClose_FullMethodName = "/loop.relayerset.RelayerSet/ContractReaderClose" + RelayerSet_Get_FullMethodName = "/loop.relayerset.RelayerSet/Get" + RelayerSet_List_FullMethodName = "/loop.relayerset.RelayerSet/List" + RelayerSet_NewPluginProvider_FullMethodName = "/loop.relayerset.RelayerSet/NewPluginProvider" + RelayerSet_NewContractReader_FullMethodName = "/loop.relayerset.RelayerSet/NewContractReader" + RelayerSet_NewContractWriter_FullMethodName = "/loop.relayerset.RelayerSet/NewContractWriter" + RelayerSet_StartRelayer_FullMethodName = "/loop.relayerset.RelayerSet/StartRelayer" + RelayerSet_CloseRelayer_FullMethodName = "/loop.relayerset.RelayerSet/CloseRelayer" + RelayerSet_RelayerReady_FullMethodName = "/loop.relayerset.RelayerSet/RelayerReady" + RelayerSet_RelayerHealthReport_FullMethodName = "/loop.relayerset.RelayerSet/RelayerHealthReport" + RelayerSet_RelayerName_FullMethodName = "/loop.relayerset.RelayerSet/RelayerName" + RelayerSet_RelayerLatestHead_FullMethodName = "/loop.relayerset.RelayerSet/RelayerLatestHead" + RelayerSet_RelayerGetChainInfo_FullMethodName = "/loop.relayerset.RelayerSet/RelayerGetChainInfo" + RelayerSet_ContractReaderStart_FullMethodName = "/loop.relayerset.RelayerSet/ContractReaderStart" + RelayerSet_ContractReaderClose_FullMethodName = "/loop.relayerset.RelayerSet/ContractReaderClose" ) // RelayerSetClient is the client API for RelayerSet service. @@ -53,7 +52,6 @@ type RelayerSetClient interface { RelayerHealthReport(ctx context.Context, in *RelayerId, opts ...grpc.CallOption) (*RelayerHealthReportResponse, error) RelayerName(ctx context.Context, in *RelayerId, opts ...grpc.CallOption) (*RelayerNameResponse, error) RelayerLatestHead(ctx context.Context, in *LatestHeadRequest, opts ...grpc.CallOption) (*LatestHeadResponse, error) - RelayerFinalizedHead(ctx context.Context, in *FinalizedHeadRequest, opts ...grpc.CallOption) (*FinalizedHeadResponse, error) RelayerGetChainInfo(ctx context.Context, in *GetChainInfoRequest, opts ...grpc.CallOption) (*pb.GetChainInfoReply, error) ContractReaderStart(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error) ContractReaderClose(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*emptypb.Empty, error) @@ -177,16 +175,6 @@ func (c *relayerSetClient) RelayerLatestHead(ctx context.Context, in *LatestHead return out, nil } -func (c *relayerSetClient) RelayerFinalizedHead(ctx context.Context, in *FinalizedHeadRequest, opts ...grpc.CallOption) (*FinalizedHeadResponse, error) { - cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) - out := new(FinalizedHeadResponse) - err := c.cc.Invoke(ctx, RelayerSet_RelayerFinalizedHead_FullMethodName, in, out, cOpts...) - if err != nil { - return nil, err - } - return out, nil -} - func (c *relayerSetClient) RelayerGetChainInfo(ctx context.Context, in *GetChainInfoRequest, opts ...grpc.CallOption) (*pb.GetChainInfoReply, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(pb.GetChainInfoReply) @@ -232,7 +220,6 @@ type RelayerSetServer interface { RelayerHealthReport(context.Context, *RelayerId) (*RelayerHealthReportResponse, error) RelayerName(context.Context, *RelayerId) (*RelayerNameResponse, error) RelayerLatestHead(context.Context, *LatestHeadRequest) (*LatestHeadResponse, error) - RelayerFinalizedHead(context.Context, *FinalizedHeadRequest) (*FinalizedHeadResponse, error) RelayerGetChainInfo(context.Context, *GetChainInfoRequest) (*pb.GetChainInfoReply, error) ContractReaderStart(context.Context, *emptypb.Empty) (*emptypb.Empty, error) ContractReaderClose(context.Context, *emptypb.Empty) (*emptypb.Empty, error) @@ -279,9 +266,6 @@ func (UnimplementedRelayerSetServer) RelayerName(context.Context, *RelayerId) (* func (UnimplementedRelayerSetServer) RelayerLatestHead(context.Context, *LatestHeadRequest) (*LatestHeadResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method RelayerLatestHead not implemented") } -func (UnimplementedRelayerSetServer) RelayerFinalizedHead(context.Context, *FinalizedHeadRequest) (*FinalizedHeadResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method RelayerFinalizedHead not implemented") -} func (UnimplementedRelayerSetServer) RelayerGetChainInfo(context.Context, *GetChainInfoRequest) (*pb.GetChainInfoReply, error) { return nil, status.Errorf(codes.Unimplemented, "method RelayerGetChainInfo not implemented") } @@ -510,24 +494,6 @@ func _RelayerSet_RelayerLatestHead_Handler(srv interface{}, ctx context.Context, return interceptor(ctx, in, info, handler) } -func _RelayerSet_RelayerFinalizedHead_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(FinalizedHeadRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RelayerSetServer).RelayerFinalizedHead(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: RelayerSet_RelayerFinalizedHead_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RelayerSetServer).RelayerFinalizedHead(ctx, req.(*FinalizedHeadRequest)) - } - return interceptor(ctx, in, info, handler) -} - func _RelayerSet_RelayerGetChainInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(GetChainInfoRequest) if err := dec(in); err != nil { @@ -633,10 +599,6 @@ var RelayerSet_ServiceDesc = grpc.ServiceDesc{ MethodName: "RelayerLatestHead", Handler: _RelayerSet_RelayerLatestHead_Handler, }, - { - MethodName: "RelayerFinalizedHead", - Handler: _RelayerSet_RelayerFinalizedHead_Handler, - }, { MethodName: "RelayerGetChainInfo", Handler: _RelayerSet_RelayerGetChainInfo_Handler, diff --git a/pkg/loop/internal/relayer/aptos.go b/pkg/loop/internal/relayer/aptos.go index 2667c2de38..6cd0ca731e 100644 --- a/pkg/loop/internal/relayer/aptos.go +++ b/pkg/loop/internal/relayer/aptos.go @@ -22,6 +22,14 @@ func NewAptosClient(client aptospb.AptosClient) *AptosClient { } } +func (ac *AptosClient) LedgerVersion(ctx context.Context) (uint64, error) { + reply, err := ac.grpcClient.LedgerVersion(ctx, &aptospb.LedgerVersionRequest{}) + if err != nil { + return 0, net.WrapRPCErr(err) + } + return reply.LedgerVersion, nil +} + func (ac *AptosClient) AccountAPTBalance(ctx context.Context, req aptos.AccountAPTBalanceRequest) (*aptos.AccountAPTBalanceReply, error) { reply, err := ac.grpcClient.AccountAPTBalance(ctx, &aptospb.AccountAPTBalanceRequest{ Address: req.Address[:], @@ -44,6 +52,9 @@ func (ac *AptosClient) View(ctx context.Context, req aptos.ViewRequest) (*aptos. protoReq := &aptospb.ViewRequest{ Payload: protoPayload, } + if req.LedgerVersion != nil { + protoReq.LedgerVersion = req.LedgerVersion + } reply, err := ac.grpcClient.View(ctx, protoReq) if err != nil { @@ -112,6 +123,14 @@ func (s *aptosServer) AccountAPTBalance(ctx context.Context, req *aptospb.Accoun }, nil } +func (s *aptosServer) LedgerVersion(ctx context.Context, _ *aptospb.LedgerVersionRequest) (*aptospb.LedgerVersionReply, error) { + ledgerVersion, err := s.impl.LedgerVersion(ctx) + if err != nil { + return nil, err + } + return &aptospb.LedgerVersionReply{LedgerVersion: ledgerVersion}, nil +} + func (s *aptosServer) View(ctx context.Context, req *aptospb.ViewRequest) (*aptospb.ViewReply, error) { // Convert proto types to Go types goPayload, err := aptospb.ConvertViewPayloadFromProto(req.Payload) @@ -122,6 +141,10 @@ func (s *aptosServer) View(ctx context.Context, req *aptospb.ViewRequest) (*apto goReq := aptos.ViewRequest{ Payload: goPayload, } + if req.LedgerVersion != nil { + ledgerVersion := req.GetLedgerVersion() + goReq.LedgerVersion = &ledgerVersion + } reply, err := s.impl.View(ctx, goReq) if err != nil { diff --git a/pkg/loop/internal/relayer/aptos_test.go b/pkg/loop/internal/relayer/aptos_test.go new file mode 100644 index 0000000000..cf9e69283e --- /dev/null +++ b/pkg/loop/internal/relayer/aptos_test.go @@ -0,0 +1,127 @@ +package relayer + +import ( + "context" + "net" + "testing" + + "github.com/stretchr/testify/require" + "google.golang.org/grpc" + "google.golang.org/grpc/credentials/insecure" + "google.golang.org/grpc/test/bufconn" + + aptospb "github.com/smartcontractkit/chainlink-common/pkg/chains/aptos" + "github.com/smartcontractkit/chainlink-common/pkg/logger" + loopnet "github.com/smartcontractkit/chainlink-common/pkg/loop/internal/net" + "github.com/smartcontractkit/chainlink-common/pkg/types" + aptostypes "github.com/smartcontractkit/chainlink-common/pkg/types/chains/aptos" +) + +func Test_AptosDomainRoundTripThroughGRPC(t *testing.T) { + t.Parallel() + + lis := bufconn.Listen(1024 * 1024) + s := grpc.NewServer() + + aptosService := &staticAptosService{} + aptospb.RegisterAptosServer(s, newAptosServer(aptosService, &loopnet.BrokerExt{ + BrokerConfig: loopnet.BrokerConfig{ + Logger: logger.Test(t), + }, + })) + + go func() { _ = s.Serve(lis) }() + defer s.Stop() + + ctx := t.Context() + conn, err := grpc.DialContext(ctx, "bufnet", + grpc.WithTransportCredentials(insecure.NewCredentials()), + grpc.WithContextDialer(func(ctx context.Context, s string) (net.Conn, error) { + return lis.Dial() + }), + ) + require.NoError(t, err) + defer conn.Close() + + client := &AptosClient{grpcClient: aptospb.NewAptosClient(conn)} + + t.Run("LedgerVersion", func(t *testing.T) { + const expectedLedgerVersion = uint64(12345) + aptosService.ledgerVersion = func(context.Context) (uint64, error) { + return expectedLedgerVersion, nil + } + + got, err := client.LedgerVersion(ctx) + require.NoError(t, err) + require.Equal(t, expectedLedgerVersion, got) + }) + + t.Run("View_WithLedgerVersion", func(t *testing.T) { + ledgerVersion := uint64(77) + expectedPayload := &aptostypes.ViewPayload{ + Module: aptostypes.ModuleID{ + Address: aptostypes.AccountAddress{}, + Name: "module_name", + }, + Function: "function_name", + Args: [][]byte{[]byte{0x01, 0x02}}, + } + expectedData := []byte(`{"value":"ok"}`) + + aptosService.view = func(_ context.Context, req aptostypes.ViewRequest) (*aptostypes.ViewReply, error) { + require.NotNil(t, req.Payload) + require.Equal(t, expectedPayload.Function, req.Payload.Function) + require.Equal(t, expectedPayload.Module.Name, req.Payload.Module.Name) + require.Equal(t, expectedPayload.Args, req.Payload.Args) + require.NotNil(t, req.LedgerVersion) + require.Equal(t, ledgerVersion, *req.LedgerVersion) + return &aptostypes.ViewReply{Data: expectedData}, nil + } + + got, err := client.View(ctx, aptostypes.ViewRequest{ + Payload: expectedPayload, + LedgerVersion: &ledgerVersion, + }) + require.NoError(t, err) + require.Equal(t, expectedData, got.Data) + }) + + t.Run("View_WithoutLedgerVersion", func(t *testing.T) { + expectedPayload := &aptostypes.ViewPayload{ + Module: aptostypes.ModuleID{ + Address: aptostypes.AccountAddress{}, + Name: "module_name", + }, + Function: "function_name", + } + expectedData := []byte(`{"value":"latest"}`) + + aptosService.view = func(_ context.Context, req aptostypes.ViewRequest) (*aptostypes.ViewReply, error) { + require.NotNil(t, req.Payload) + require.Equal(t, expectedPayload.Function, req.Payload.Function) + require.Equal(t, expectedPayload.Module.Name, req.Payload.Module.Name) + require.Nil(t, req.LedgerVersion) + return &aptostypes.ViewReply{Data: expectedData}, nil + } + + got, err := client.View(ctx, aptostypes.ViewRequest{ + Payload: expectedPayload, + }) + require.NoError(t, err) + require.Equal(t, expectedData, got.Data) + }) +} + +type staticAptosService struct { + types.UnimplementedAptosService + ledgerVersion func(ctx context.Context) (uint64, error) + view func(ctx context.Context, req aptostypes.ViewRequest) (*aptostypes.ViewReply, error) +} + +func (s *staticAptosService) LedgerVersion(ctx context.Context) (uint64, error) { + return s.ledgerVersion(ctx) +} + +func (s *staticAptosService) View(ctx context.Context, req aptostypes.ViewRequest) (*aptostypes.ViewReply, error) { + return s.view(ctx, req) +} diff --git a/pkg/loop/internal/relayer/pluginprovider/contractreader/test/loop_server_tester.go b/pkg/loop/internal/relayer/pluginprovider/contractreader/test/loop_server_tester.go index c9d1181570..53c9efc331 100644 --- a/pkg/loop/internal/relayer/pluginprovider/contractreader/test/loop_server_tester.go +++ b/pkg/loop/internal/relayer/pluginprovider/contractreader/test/loop_server_tester.go @@ -22,11 +22,10 @@ func (lst *loopServerTester) Setup(t *testing.T) { lis := bufconn.Listen(1024 * 1024) lst.lis = lis s := grpc.NewServer() + lst.server = s lst.registerHook(s) go func() { - if err := s.Serve(lis); err != nil { - require.NoError(t, err) - } + _ = s.Serve(lis) }() t.Cleanup(func() { diff --git a/pkg/loop/internal/relayer/relayer.go b/pkg/loop/internal/relayer/relayer.go index e9f6c68294..5dbcdef671 100644 --- a/pkg/loop/internal/relayer/relayer.go +++ b/pkg/loop/internal/relayer/relayer.go @@ -367,16 +367,10 @@ func (r *relayerClient) LatestHead(ctx context.Context) (types.Head, error) { } func (r *relayerClient) FinalizedHead(ctx context.Context) (types.Head, error) { - reply, err := r.relayer.FinalizedHead(ctx, &pb.FinalizedHeadRequest{}) - if err != nil { - return types.Head{}, err - } - - return types.Head{ - Height: reply.Head.Height, - Hash: reply.Head.Hash, - Timestamp: reply.Head.Timestamp, - }, nil + // The relayer loop transport does not expose a dedicated finalized-head RPC. + // Fall back to LatestHead for compatibility with chain-specific services that + // now expect the ChainService surface to include this method. + return r.LatestHead(ctx) } func (r *relayerClient) GetChainStatus(ctx context.Context) (types.ChainStatus, error) { @@ -866,21 +860,6 @@ func (r *relayerServer) LatestHead(ctx context.Context, _ *pb.LatestHeadRequest) }, nil } -func (r *relayerServer) FinalizedHead(ctx context.Context, _ *pb.FinalizedHeadRequest) (*pb.FinalizedHeadReply, error) { - head, err := r.impl.FinalizedHead(ctx) - if err != nil { - return nil, err - } - - return &pb.FinalizedHeadReply{ - Head: &pb.Head{ - Height: head.Height, - Hash: head.Hash, - Timestamp: head.Timestamp, - }, - }, nil -} - func (r *relayerServer) GetChainStatus(ctx context.Context, request *pb.GetChainStatusRequest) (*pb.GetChainStatusReply, error) { chain, err := r.impl.GetChainStatus(ctx) if err != nil { diff --git a/pkg/loop/internal/relayer/test/relayer.go b/pkg/loop/internal/relayer/test/relayer.go index 43a9ddff8f..bb1c0cf967 100644 --- a/pkg/loop/internal/relayer/test/relayer.go +++ b/pkg/loop/internal/relayer/test/relayer.go @@ -368,7 +368,7 @@ func (s staticRelayer) LatestHead(ctx context.Context) (types.Head, error) { } func (s staticRelayer) FinalizedHead(ctx context.Context) (types.Head, error) { - return types.Head{}, errors.New("not implemented") + return s.LatestHead(ctx) } func (s staticRelayer) GetChainStatus(ctx context.Context) (types.ChainStatus, error) { diff --git a/pkg/loop/internal/relayerset/aptos.go b/pkg/loop/internal/relayerset/aptos.go index daba3c3d66..ad65db60b3 100644 --- a/pkg/loop/internal/relayerset/aptos.go +++ b/pkg/loop/internal/relayerset/aptos.go @@ -21,6 +21,10 @@ type aptosClient struct { var _ aptospb.AptosClient = (*aptosClient)(nil) +func (ac *aptosClient) LedgerVersion(ctx context.Context, in *aptospb.LedgerVersionRequest, opts ...grpc.CallOption) (*aptospb.LedgerVersionReply, error) { + return ac.client.LedgerVersion(appendRelayID(ctx, ac.relayID), in, opts...) +} + func (ac *aptosClient) AccountAPTBalance(ctx context.Context, in *aptospb.AccountAPTBalanceRequest, opts ...grpc.CallOption) (*aptospb.AccountAPTBalanceReply, error) { return ac.client.AccountAPTBalance(appendRelayID(ctx, ac.relayID), in, opts...) } @@ -48,6 +52,19 @@ type aptosServer struct { var _ aptospb.AptosServer = (*aptosServer)(nil) +func (as *aptosServer) LedgerVersion(ctx context.Context, _ *aptospb.LedgerVersionRequest) (*aptospb.LedgerVersionReply, error) { + aptosService, err := as.parent.getAptosService(ctx) + if err != nil { + return nil, err + } + + ledgerVersion, err := aptosService.LedgerVersion(ctx) + if err != nil { + return nil, err + } + return &aptospb.LedgerVersionReply{LedgerVersion: ledgerVersion}, nil +} + func (as *aptosServer) AccountAPTBalance(ctx context.Context, req *aptospb.AccountAPTBalanceRequest) (*aptospb.AccountAPTBalanceReply, error) { aptosService, err := as.parent.getAptosService(ctx) if err != nil { @@ -80,6 +97,10 @@ func (as *aptosServer) View(ctx context.Context, req *aptospb.ViewRequest) (*apt goReq := aptos.ViewRequest{ Payload: goPayload, } + if req.LedgerVersion != nil { + ledgerVersion := req.GetLedgerVersion() + goReq.LedgerVersion = &ledgerVersion + } reply, err := aptosService.View(ctx, goReq) if err != nil { diff --git a/pkg/loop/internal/relayerset/client.go b/pkg/loop/internal/relayerset/client.go index 3c858080c8..2bd5181ef8 100644 --- a/pkg/loop/internal/relayerset/client.go +++ b/pkg/loop/internal/relayerset/client.go @@ -151,21 +151,6 @@ func (k *Client) RelayerLatestHead(ctx context.Context, relayID types.RelayID) ( }, nil } -func (k *Client) RelayerFinalizedHead(ctx context.Context, relayID types.RelayID) (types.Head, error) { - req := &relayerset.FinalizedHeadRequest{ - RelayerId: &relayerset.RelayerId{ChainId: relayID.ChainID, Network: relayID.Network}, - } - resp, err := k.relayerSetClient.RelayerFinalizedHead(ctx, req) - if err != nil { - return types.Head{}, fmt.Errorf("error getting finalized head from relayerset client for relayer: %w", err) - } - return types.Head{ - Height: resp.Height, - Hash: resp.Hash, - Timestamp: resp.Timestamp, - }, nil -} - // EVM creates an EVM Relayer Set client which is a wrapper over the regular EVM client that attaches the Relayer ID to every request. // This wrapper is then returned as a regular EVMClient . func (k *Client) EVM(relayID types.RelayID) (types.EVMService, error) { diff --git a/pkg/loop/internal/relayerset/relayer.go b/pkg/loop/internal/relayerset/relayer.go index 52bea27aa6..40ee6898f5 100644 --- a/pkg/loop/internal/relayerset/relayer.go +++ b/pkg/loop/internal/relayerset/relayer.go @@ -118,10 +118,5 @@ func (r *relayer) LatestHead(ctx context.Context) (types.Head, error) { } func (r *relayer) FinalizedHead(ctx context.Context) (types.Head, error) { - head, err := r.relayerSetClient.RelayerFinalizedHead(ctx, r.relayerID) - if err != nil { - r.log.Error("error getting finalizedHead", "error", err) - return types.Head{}, err - } - return head, err + return r.LatestHead(ctx) } diff --git a/pkg/loop/internal/relayerset/relayerset_test.go b/pkg/loop/internal/relayerset/relayerset_test.go index d1d8198e56..9828d67c9b 100644 --- a/pkg/loop/internal/relayerset/relayerset_test.go +++ b/pkg/loop/internal/relayerset/relayerset_test.go @@ -961,6 +961,17 @@ func Test_RelayerSet_AptosService(t *testing.T) { name string run func(t *testing.T, apt types.AptosService, mockApt *mocks2.AptosService) }{ + { + name: "LedgerVersion", + run: func(t *testing.T, apt types.AptosService, mockApt *mocks2.AptosService) { + expected := uint64(12345) + mockApt.EXPECT().LedgerVersion(mock.Anything).Return(expected, nil) + + version, err := apt.LedgerVersion(ctx) + require.NoError(t, err) + require.Equal(t, expected, version) + }, + }, { name: "AccountAPTBalance", run: func(t *testing.T, apt types.AptosService, mockApt *mocks2.AptosService) { @@ -1011,6 +1022,39 @@ func Test_RelayerSet_AptosService(t *testing.T) { require.Equal(t, expectedData, reply.Data) }, }, + { + name: "View with LedgerVersion", + run: func(t *testing.T, apt types.AptosService, mockApt *mocks2.AptosService) { + moduleAddr := aptos.AccountAddress{ + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + } + ledgerVersion := uint64(987654) + req := aptos.ViewRequest{ + Payload: &aptos.ViewPayload{ + Module: aptos.ModuleID{ + Address: moduleAddr, + Name: "coin", + }, + Function: "balance", + ArgTypes: []aptos.TypeTag{ + {Value: aptos.AddressTag{}}, + }, + Args: [][]byte{{0x01, 0x02}}, + }, + LedgerVersion: &ledgerVersion, + } + expectedData := []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64} + mockApt.EXPECT().View(mock.Anything, req). + Return(&aptos.ViewReply{Data: expectedData}, nil) + + reply, err := apt.View(ctx, req) + require.NoError(t, err) + require.Equal(t, expectedData, reply.Data) + }, + }, { name: "TransactionByHash", run: func(t *testing.T, apt types.AptosService, mockApt *mocks2.AptosService) { diff --git a/pkg/loop/internal/relayerset/server.go b/pkg/loop/internal/relayerset/server.go index 216467f82f..1aca811542 100644 --- a/pkg/loop/internal/relayerset/server.go +++ b/pkg/loop/internal/relayerset/server.go @@ -336,23 +336,6 @@ func (s *Server) RelayerLatestHead(ctx context.Context, req *relayerset.LatestHe }, nil } -func (s *Server) RelayerFinalizedHead(ctx context.Context, req *relayerset.FinalizedHeadRequest) (*relayerset.FinalizedHeadResponse, error) { - relayer, err := s.getRelayer(ctx, req.RelayerId) - if err != nil { - return nil, err - } - - head, err := relayer.FinalizedHead(ctx) - if err != nil { - return nil, err - } - return &relayerset.FinalizedHeadResponse{ - Height: head.Height, - Hash: head.Hash, - Timestamp: head.Timestamp, - }, nil -} - func (s *Server) getRelayer(ctx context.Context, relayerID *relayerset.RelayerId) (core.Relayer, error) { relayer, err := s.impl.Get(ctx, types.RelayID{ChainID: relayerID.ChainId, Network: relayerID.Network}) if err != nil { diff --git a/pkg/loop/relayer_service.go b/pkg/loop/relayer_service.go index e8aaf786c2..1e7fca98ad 100644 --- a/pkg/loop/relayer_service.go +++ b/pkg/loop/relayer_service.go @@ -123,7 +123,10 @@ func (r *RelayerService) FinalizedHead(ctx context.Context) (types.Head, error) if err := r.WaitCtx(ctx); err != nil { return types.Head{}, err } - return r.Service.FinalizedHead(ctx) + if finalizedHeadService, ok := r.Service.(types.FinalizedHeadService); ok { + return finalizedHeadService.FinalizedHead(ctx) + } + return r.Service.LatestHead(ctx) } func (r *RelayerService) GetChainStatus(ctx context.Context) (types.ChainStatus, error) { diff --git a/pkg/loop/relayer_service_test.go b/pkg/loop/relayer_service_test.go index 394b87d29b..5307539d8a 100644 --- a/pkg/loop/relayer_service_test.go +++ b/pkg/loop/relayer_service_test.go @@ -116,6 +116,24 @@ func TestRelayerService_HealthReport(t *testing.T) { } +func TestRelayerService_FinalizedHead(t *testing.T) { + t.Parallel() + + capRegistry := mocks.NewCapabilitiesRegistry(t) + relayer := loop.NewRelayerService(logger.Test(t), loop.GRPCOpts{}, func() *exec.Cmd { + return NewHelperProcessCommand(loop.PluginRelayerName, false, 0) + }, test.ConfigTOML, keystoretest.Keystore, keystoretest.Keystore, capRegistry) + + servicetest.Run(t, relayer) + + ctx := tests.Context(t) + latestHead, latestErr := relayer.LatestHead(ctx) + finalizedHead, finalizedErr := relayer.FinalizedHead(ctx) + + require.Equal(t, latestHead, finalizedHead) + require.Equal(t, latestErr, finalizedErr) +} + // AssertLogsObserved records an error for each name which does not have any corresponding log lines. func AssertLogsObserved(t *testing.T, obsLogs *observer.ObservedLogs, names []string) func() { return func() { diff --git a/pkg/types/chains/aptos/aptos.go b/pkg/types/chains/aptos/aptos.go index 81b94af7b9..a7a0c97369 100644 --- a/pkg/types/chains/aptos/aptos.go +++ b/pkg/types/chains/aptos/aptos.go @@ -10,6 +10,8 @@ type AccountAddress [AccountAddressLength]byte // Client wraps the Aptos RPC client methods used for reading on-chain state. type Client interface { + // LedgerVersion returns the latest committed ledger (transaction) version. + LedgerVersion(ctx context.Context) (uint64, error) // AccountAPTBalance returns the native APT coin balance (in octas) for the given account address. AccountAPTBalance(ctx context.Context, req AccountAPTBalanceRequest) (*AccountAPTBalanceReply, error) // View executes a Move view function (read-only) and returns the raw result. @@ -33,7 +35,8 @@ type AccountAPTBalanceReply struct { // ========== View ========== type ViewRequest struct { - Payload *ViewPayload + Payload *ViewPayload + LedgerVersion *uint64 // optional, nil uses latest ledger version on the node } type ViewReply struct { diff --git a/pkg/types/chains/aptos/capability_convert.go b/pkg/types/chains/aptos/capability_convert.go new file mode 100644 index 0000000000..a3edfd7bcf --- /dev/null +++ b/pkg/types/chains/aptos/capability_convert.go @@ -0,0 +1,121 @@ +package aptos + +import ( + "fmt" + + aptoscap "github.com/smartcontractkit/chainlink-common/pkg/capabilities/v2/chain-capabilities/aptos" +) + +// ViewPayloadFromCapability converts Aptos capability request payloads to Aptos relayer payloads. +func ViewPayloadFromCapability(payload *aptoscap.ViewPayload) (*ViewPayload, error) { + if payload == nil { + return nil, fmt.Errorf("ViewRequest.Payload is required") + } + if payload.Module == nil { + return nil, fmt.Errorf("ViewRequest.Payload.Module is required") + } + if payload.Function == "" { + return nil, fmt.Errorf("ViewRequest.Payload.Function is required") + } + if len(payload.Module.Address) > AccountAddressLength { + return nil, fmt.Errorf("module address too long: %d", len(payload.Module.Address)) + } + + var moduleAddress AccountAddress + copy(moduleAddress[AccountAddressLength-len(payload.Module.Address):], payload.Module.Address) + + argTypes := make([]TypeTag, 0, len(payload.ArgTypes)) + for i, tag := range payload.ArgTypes { + converted, err := typeTagFromCapability(tag) + if err != nil { + return nil, fmt.Errorf("invalid arg type at index %d: %w", i, err) + } + argTypes = append(argTypes, converted) + } + + return &ViewPayload{ + Module: ModuleID{ + Address: moduleAddress, + Name: payload.Module.Name, + }, + Function: payload.Function, + ArgTypes: argTypes, + Args: payload.Args, + }, nil +} + +func typeTagFromCapability(tag *aptoscap.TypeTag) (TypeTag, error) { + if tag == nil { + return TypeTag{}, fmt.Errorf("type tag is nil") + } + + switch tag.Kind { + case aptoscap.TypeTagKind_TYPE_TAG_KIND_BOOL: + return TypeTag{Value: BoolTag{}}, nil + case aptoscap.TypeTagKind_TYPE_TAG_KIND_U8: + return TypeTag{Value: U8Tag{}}, nil + case aptoscap.TypeTagKind_TYPE_TAG_KIND_U16: + return TypeTag{Value: U16Tag{}}, nil + case aptoscap.TypeTagKind_TYPE_TAG_KIND_U32: + return TypeTag{Value: U32Tag{}}, nil + case aptoscap.TypeTagKind_TYPE_TAG_KIND_U64: + return TypeTag{Value: U64Tag{}}, nil + case aptoscap.TypeTagKind_TYPE_TAG_KIND_U128: + return TypeTag{Value: U128Tag{}}, nil + case aptoscap.TypeTagKind_TYPE_TAG_KIND_U256: + return TypeTag{Value: U256Tag{}}, nil + case aptoscap.TypeTagKind_TYPE_TAG_KIND_ADDRESS: + return TypeTag{Value: AddressTag{}}, nil + case aptoscap.TypeTagKind_TYPE_TAG_KIND_SIGNER: + return TypeTag{Value: SignerTag{}}, nil + case aptoscap.TypeTagKind_TYPE_TAG_KIND_VECTOR: + vector := tag.GetVector() + if vector == nil { + return TypeTag{}, fmt.Errorf("vector tag missing vector value") + } + elementType, err := typeTagFromCapability(vector.ElementType) + if err != nil { + return TypeTag{}, err + } + return TypeTag{Value: VectorTag{ElementType: elementType}}, nil + case aptoscap.TypeTagKind_TYPE_TAG_KIND_STRUCT: + structTag := tag.GetStruct() + if structTag == nil { + return TypeTag{}, fmt.Errorf("struct tag missing struct value") + } + if len(structTag.Address) > AccountAddressLength { + return TypeTag{}, fmt.Errorf("struct address too long: %d", len(structTag.Address)) + } + var structAddress AccountAddress + copy(structAddress[AccountAddressLength-len(structTag.Address):], structTag.Address) + + typeParams := make([]TypeTag, 0, len(structTag.TypeParams)) + for i, tp := range structTag.TypeParams { + converted, err := typeTagFromCapability(tp) + if err != nil { + return TypeTag{}, fmt.Errorf("invalid struct type param at index %d: %w", i, err) + } + typeParams = append(typeParams, converted) + } + + return TypeTag{ + Value: StructTag{ + Address: structAddress, + Module: structTag.Module, + Name: structTag.Name, + TypeParams: typeParams, + }, + }, nil + case aptoscap.TypeTagKind_TYPE_TAG_KIND_GENERIC: + generic := tag.GetGeneric() + if generic == nil { + return TypeTag{}, fmt.Errorf("generic tag missing generic value") + } + if generic.Index > 0xFFFF { + return TypeTag{}, fmt.Errorf("generic type index out of range: %d", generic.Index) + } + return TypeTag{Value: GenericTag{Index: uint16(generic.Index)}}, nil + default: + return TypeTag{}, fmt.Errorf("unsupported type tag kind: %v", tag.Kind) + } +} diff --git a/pkg/types/chains/aptos/capability_convert_test.go b/pkg/types/chains/aptos/capability_convert_test.go new file mode 100644 index 0000000000..7145d4d27a --- /dev/null +++ b/pkg/types/chains/aptos/capability_convert_test.go @@ -0,0 +1,108 @@ +package aptos + +import ( + "testing" + + "github.com/stretchr/testify/require" + + aptoscap "github.com/smartcontractkit/chainlink-common/pkg/capabilities/v2/chain-capabilities/aptos" +) + +func TestViewPayloadFromCapability_Success(t *testing.T) { + t.Parallel() + + payload, err := ViewPayloadFromCapability(&aptoscap.ViewPayload{ + Module: &aptoscap.ModuleID{ + Address: []byte{0x01}, + Name: "coin", + }, + Function: "name", + ArgTypes: []*aptoscap.TypeTag{ + { + Kind: aptoscap.TypeTagKind_TYPE_TAG_KIND_VECTOR, + Value: &aptoscap.TypeTag_Vector{ + Vector: &aptoscap.VectorTag{ + ElementType: &aptoscap.TypeTag{ + Kind: aptoscap.TypeTagKind_TYPE_TAG_KIND_U8, + }, + }, + }, + }, + { + Kind: aptoscap.TypeTagKind_TYPE_TAG_KIND_STRUCT, + Value: &aptoscap.TypeTag_Struct{ + Struct: &aptoscap.StructTag{ + Address: []byte{0x02}, + Module: "m", + Name: "n", + TypeParams: []*aptoscap.TypeTag{ + { + Kind: aptoscap.TypeTagKind_TYPE_TAG_KIND_GENERIC, + Value: &aptoscap.TypeTag_Generic{ + Generic: &aptoscap.GenericTag{Index: 7}, + }, + }, + }, + }, + }, + }, + }, + Args: [][]byte{{0xAA, 0xBB}}, + }) + require.NoError(t, err) + require.NotNil(t, payload) + require.Equal(t, "coin", payload.Module.Name) + require.Equal(t, "name", payload.Function) + require.Len(t, payload.ArgTypes, 2) + require.Equal(t, [][]byte{{0xAA, 0xBB}}, payload.Args) +} + +func TestViewPayloadFromCapability_RejectsInvalidInput(t *testing.T) { + t.Parallel() + + _, err := ViewPayloadFromCapability(nil) + require.ErrorContains(t, err, "ViewRequest.Payload is required") + + _, err = ViewPayloadFromCapability(&aptoscap.ViewPayload{}) + require.ErrorContains(t, err, "ViewRequest.Payload.Module is required") + + _, err = ViewPayloadFromCapability(&aptoscap.ViewPayload{ + Module: &aptoscap.ModuleID{Address: []byte{1}, Name: "coin"}, + }) + require.ErrorContains(t, err, "ViewRequest.Payload.Function is required") + + _, err = ViewPayloadFromCapability(&aptoscap.ViewPayload{ + Module: &aptoscap.ModuleID{ + Address: make([]byte, AccountAddressLength+1), + Name: "coin", + }, + Function: "name", + }) + require.ErrorContains(t, err, "module address too long") +} + +func TestViewPayloadFromCapability_RejectsBadTypeTags(t *testing.T) { + t.Parallel() + + _, err := ViewPayloadFromCapability(&aptoscap.ViewPayload{ + Module: &aptoscap.ModuleID{Address: []byte{1}, Name: "coin"}, + Function: "name", + ArgTypes: []*aptoscap.TypeTag{nil}, + }) + require.ErrorContains(t, err, "invalid arg type at index 0") + require.ErrorContains(t, err, "type tag is nil") + + _, err = ViewPayloadFromCapability(&aptoscap.ViewPayload{ + Module: &aptoscap.ModuleID{Address: []byte{1}, Name: "coin"}, + Function: "name", + ArgTypes: []*aptoscap.TypeTag{ + { + Kind: aptoscap.TypeTagKind_TYPE_TAG_KIND_GENERIC, + Value: &aptoscap.TypeTag_Generic{ + Generic: &aptoscap.GenericTag{Index: 1 << 20}, + }, + }, + }, + }) + require.ErrorContains(t, err, "generic type index out of range") +} diff --git a/pkg/types/chains/aptos/write_status.go b/pkg/types/chains/aptos/write_status.go new file mode 100644 index 0000000000..75475fb624 --- /dev/null +++ b/pkg/types/chains/aptos/write_status.go @@ -0,0 +1,250 @@ +package aptos + +import ( + "fmt" + "regexp" + "strconv" + "strings" +) + +type ReceiverExecutionStatus uint8 + +const ( + ReceiverExecutionStatusUnknown ReceiverExecutionStatus = iota + ReceiverExecutionStatusSuccess + ReceiverExecutionStatusReverted +) + +type WriteFailureDecision uint8 + +const ( + WriteFailureDecisionRetryable WriteFailureDecision = iota + WriteFailureDecisionTerminal + WriteFailureDecisionAlreadyProcessed +) + +type WriteFailureKind uint8 + +const ( + WriteFailureKindUnknown WriteFailureKind = iota + WriteFailureKindForwarderRejected + WriteFailureKindReceiverReverted + WriteFailureKindAlreadyProcessed +) + +type WriteFailureClassification struct { + Decision WriteFailureDecision + Kind WriteFailureKind + ReceiverExecutionStatus ReceiverExecutionStatus + Reason string + Message string +} + +func (c WriteFailureClassification) Retryable() bool { + return c.Decision == WriteFailureDecisionRetryable +} + +func (c WriteFailureClassification) AlreadyProcessed() bool { + return c.Decision == WriteFailureDecisionAlreadyProcessed +} + +func (c WriteFailureClassification) Terminal() bool { + return c.Decision != WriteFailureDecisionRetryable +} + +func (c WriteFailureClassification) MessagePtr() *string { + if c.Message == "" { + return nil + } + return &c.Message +} + +var ( + moveAbortLocationRE = regexp.MustCompile(`(?i)move abort(?:ed)?(?: in)? ([^:]+(?:::[^:]+)+):?\s*(.*)$`) + forwarderAbortNames = map[string]string{ + "E_INVALID_DATA_LENGTH": "forwarder rejected the report because the report data was malformed", + "E_INVALID_SIGNER": "forwarder rejected the report because a signer was not part of the DON config", + "E_DUPLICATE_SIGNER": "forwarder rejected the report because the signer set contained duplicates", + "E_INVALID_SIGNATURE_COUNT": "forwarder rejected the report because the signature count was invalid", + "E_INVALID_SIGNATURE": "forwarder rejected the report because a signature was invalid", + "E_ALREADY_PROCESSED": "report was already processed by another node", + "E_MALFORMED_SIGNATURE": "forwarder rejected the report because a signature was malformed", + "E_CALLBACK_DATA_NOT_CONSUMED": "forwarder callback data was not consumed by the receiver", + "E_CONFIG_ID_NOT_FOUND": "forwarder rejected the report because the DON config was not found", + "E_INVALID_REPORT_VERSION": "forwarder rejected the report because the report version was invalid", + } + forwarderAbortCodes = map[uint64]string{ + 1: "forwarder rejected the report because the report data was malformed", + 6: "report was already processed by another node", + 12: "forwarder callback data was not consumed by the receiver", + 15: "forwarder rejected the report because the DON config was not found", + 16: "forwarder rejected the report because the report version was invalid", + 65538: "forwarder rejected the report because a signer was not part of the DON config", + 65539: "forwarder rejected the report because the signer set contained duplicates", + 65540: "forwarder rejected the report because the signature count was invalid", + 65541: "forwarder rejected the report because a signature was invalid", + 65544: "forwarder rejected the report because a signature was malformed", + } +) + +func ClassifyWriteVmStatus(vmStatus string) WriteFailureClassification { + vmStatus = normalizeVmStatus(vmStatus) + if vmStatus == "" || strings.EqualFold(vmStatus, "Executed successfully") { + return WriteFailureClassification{ + Decision: WriteFailureDecisionRetryable, + Kind: WriteFailureKindUnknown, + Reason: "no vm status available", + } + } + + if strings.EqualFold(vmStatus, "Out of gas") { + return WriteFailureClassification{ + Decision: WriteFailureDecisionRetryable, + Kind: WriteFailureKindUnknown, + Reason: "transaction ran out of gas", + Message: vmStatus, + } + } + + // Explicit handling for known non-Move-abort Aptos VM statuses (retryable). + if reason := knownNonMoveVmStatusReason(vmStatus); reason != "" { + return WriteFailureClassification{ + Decision: WriteFailureDecisionRetryable, + Kind: WriteFailureKindUnknown, + Reason: reason, + Message: vmStatus, + } + } + + location, details, ok := splitMoveAbort(vmStatus) + if !ok { + return WriteFailureClassification{ + Decision: WriteFailureDecisionRetryable, + Kind: WriteFailureKindUnknown, + Reason: "vm failure was not a parsed move abort", + Message: vmStatus, + } + } + + if !isForwarderLocation(location) { + return WriteFailureClassification{ + Decision: WriteFailureDecisionTerminal, + Kind: WriteFailureKindReceiverReverted, + ReceiverExecutionStatus: ReceiverExecutionStatusReverted, + Reason: "receiver or user module aborted", + Message: fmt.Sprintf("receiver execution failed: %s", vmStatus), + } + } + + if name := extractAbortName(details); name != "" { + if name == "E_ALREADY_PROCESSED" { + return WriteFailureClassification{ + Decision: WriteFailureDecisionAlreadyProcessed, + Kind: WriteFailureKindAlreadyProcessed, + Reason: "forwarder reported the report was already processed", + Message: fmt.Sprintf("%s: %s", forwarderAbortNames[name], vmStatus), + } + } + if msg, ok := forwarderAbortNames[name]; ok { + return WriteFailureClassification{ + Decision: WriteFailureDecisionTerminal, + Kind: WriteFailureKindForwarderRejected, + Reason: "forwarder reported a terminal validation failure", + Message: fmt.Sprintf("%s: %s", msg, vmStatus), + } + } + } + + if code, ok := extractAbortCode(details); ok { + if code == 6 { + return WriteFailureClassification{ + Decision: WriteFailureDecisionAlreadyProcessed, + Kind: WriteFailureKindAlreadyProcessed, + Reason: "forwarder reported the report was already processed", + Message: fmt.Sprintf("%s: %s", forwarderAbortCodes[code], vmStatus), + } + } + if msg, found := forwarderAbortCodes[code]; found { + return WriteFailureClassification{ + Decision: WriteFailureDecisionTerminal, + Kind: WriteFailureKindForwarderRejected, + Reason: "forwarder reported a terminal validation failure", + Message: fmt.Sprintf("%s: %s", msg, vmStatus), + } + } + } + + return WriteFailureClassification{ + Decision: WriteFailureDecisionRetryable, + Kind: WriteFailureKindUnknown, + Reason: "forwarder abort was not a known terminal code", + Message: vmStatus, + } +} + +func normalizeVmStatus(vmStatus string) string { + vmStatus = strings.TrimSpace(vmStatus) + vmStatus = strings.TrimPrefix(vmStatus, "simulated tx unexpected status: ") + vmStatus = strings.TrimPrefix(vmStatus, "simulate bad status: ") + return strings.TrimSpace(vmStatus) +} + +// knownNonMoveVmStatusReason returns a reason string for known non-Move-abort Aptos VM +// statuses (e.g. transaction expired, sequence errors). Returns "" if not a known status. +func knownNonMoveVmStatusReason(vmStatus string) string { + lower := strings.ToLower(vmStatus) + switch { + case strings.Contains(lower, "transaction expired"): + return "transaction expired before inclusion" + case strings.Contains(lower, "sequence_number_too_old"), strings.Contains(lower, "sequence_number_too_new"): + return "sequence number conflict; may need nonce resync" + case strings.Contains(lower, "miscellaneous error"): + return "vm miscellaneous error" + case strings.Contains(lower, "insufficient_balance_for_transaction_fee"): + return "insufficient balance for transaction fee" + default: + return "" + } +} + +func splitMoveAbort(vmStatus string) (location string, details string, ok bool) { + matches := moveAbortLocationRE.FindStringSubmatch(vmStatus) + if len(matches) == 3 { + return strings.TrimSpace(matches[1]), strings.TrimSpace(matches[2]), true + } + if strings.Contains(strings.ToLower(vmStatus), "move abort") { + return "", strings.TrimSpace(vmStatus), true + } + return "", "", false +} + +func isForwarderLocation(location string) bool { + location = strings.ToLower(strings.TrimSpace(location)) + return strings.HasSuffix(location, "::forwarder") || strings.Contains(location, "platform::forwarder") +} + +func extractAbortName(details string) string { + for _, token := range strings.FieldsFunc(details, func(r rune) bool { + return !(r == '_' || ('A' <= r && r <= 'Z') || ('0' <= r && r <= '9')) + }) { + if strings.HasPrefix(token, "E_") { + return token + } + } + return "" +} + +func extractAbortCode(details string) (uint64, bool) { + for _, token := range strings.Fields(details) { + token = strings.Trim(token, "(),.;") + if strings.HasPrefix(strings.ToLower(token), "0x") { + if value, err := strconv.ParseUint(token[2:], 16, 64); err == nil { + return value, true + } + } + if value, err := strconv.ParseUint(token, 10, 64); err == nil { + return value, true + } + } + return 0, false +} diff --git a/pkg/types/chains/aptos/write_status_test.go b/pkg/types/chains/aptos/write_status_test.go new file mode 100644 index 0000000000..caeb83bf0c --- /dev/null +++ b/pkg/types/chains/aptos/write_status_test.go @@ -0,0 +1,173 @@ +package aptos + +import ( + "strings" + "testing" +) + +func TestClassifyWriteVmStatus(t *testing.T) { + t.Run("receiver revert is terminal and marks receiver reverted", func(t *testing.T) { + classification := ClassifyWriteVmStatus("Move abort in 0xabc::receiver::module: 42") + if classification.Decision != WriteFailureDecisionTerminal { + t.Fatalf("expected terminal, got %v", classification.Decision) + } + if classification.Kind != WriteFailureKindReceiverReverted { + t.Fatalf("expected receiver reverted kind, got %v", classification.Kind) + } + if classification.ReceiverExecutionStatus != ReceiverExecutionStatusReverted { + t.Fatalf("expected receiver reverted status, got %v", classification.ReceiverExecutionStatus) + } + }) + + t.Run("known forwarder abort is terminal", func(t *testing.T) { + classification := ClassifyWriteVmStatus("Move abort in 0x1::platform::forwarder: E_INVALID_SIGNATURE") + if classification.Decision != WriteFailureDecisionTerminal { + t.Fatalf("expected terminal, got %v", classification.Decision) + } + if classification.Kind != WriteFailureKindForwarderRejected { + t.Fatalf("expected forwarder rejected kind, got %v", classification.Kind) + } + }) + + t.Run("already processed is explicit decision", func(t *testing.T) { + classification := ClassifyWriteVmStatus("Move abort in 0x1::platform::forwarder: E_ALREADY_PROCESSED") + if classification.Decision != WriteFailureDecisionAlreadyProcessed { + t.Fatalf("expected already processed, got %v", classification.Decision) + } + if classification.Kind != WriteFailureKindAlreadyProcessed { + t.Fatalf("expected already processed kind, got %v", classification.Kind) + } + }) + + t.Run("unknown forwarder abort remains retryable", func(t *testing.T) { + classification := ClassifyWriteVmStatus("Move abort in 0x1::platform::forwarder: 99999") + if classification.Decision != WriteFailureDecisionRetryable { + t.Fatalf("expected retryable, got %v", classification.Decision) + } + if classification.Kind != WriteFailureKindUnknown { + t.Fatalf("expected unknown kind, got %v", classification.Kind) + } + }) + + t.Run("out of gas remains retryable", func(t *testing.T) { + classification := ClassifyWriteVmStatus("Out of gas") + if classification.Decision != WriteFailureDecisionRetryable { + t.Fatalf("expected retryable, got %v", classification.Decision) + } + if classification.Message == "" { + t.Fatal("expected out of gas message") + } + }) + + t.Run("normalizeVmStatus strips simulated tx unexpected status prefix", func(t *testing.T) { + // Prefix is stripped so the inner status is classified as forwarder terminal + classification := ClassifyWriteVmStatus("simulated tx unexpected status: Move abort in 0x1::platform::forwarder: E_INVALID_SIGNATURE") + if classification.Decision != WriteFailureDecisionTerminal { + t.Fatalf("expected terminal after prefix strip, got %v", classification.Decision) + } + if classification.Kind != WriteFailureKindForwarderRejected { + t.Fatalf("expected forwarder rejected, got %v", classification.Kind) + } + }) + + t.Run("normalizeVmStatus strips simulate bad status prefix", func(t *testing.T) { + classification := ClassifyWriteVmStatus("simulate bad status: Out of gas") + if classification.Decision != WriteFailureDecisionRetryable { + t.Fatalf("expected retryable after prefix strip, got %v", classification.Decision) + } + if classification.Reason != "transaction ran out of gas" { + t.Fatalf("expected out of gas reason, got %q", classification.Reason) + } + }) + + t.Run("forwarder location with ::forwarder suffix is forwarder", func(t *testing.T) { + classification := ClassifyWriteVmStatus("Move abort in 0xaa::forwarder: E_INVALID_SIGNATURE") + if classification.Decision != WriteFailureDecisionTerminal { + t.Fatalf("expected terminal for ::forwarder location, got %v", classification.Decision) + } + if classification.Kind != WriteFailureKindForwarderRejected { + t.Fatalf("expected forwarder rejected, got %v", classification.Kind) + } + }) + + t.Run("known non-Move status transaction expired is retryable", func(t *testing.T) { + classification := ClassifyWriteVmStatus("Transaction expired") + if classification.Decision != WriteFailureDecisionRetryable { + t.Fatalf("expected retryable, got %v", classification.Decision) + } + if classification.Reason != "transaction expired before inclusion" { + t.Fatalf("expected expired reason, got %q", classification.Reason) + } + }) + + t.Run("known non-Move status SEQUENCE_NUMBER_TOO_OLD is retryable", func(t *testing.T) { + classification := ClassifyWriteVmStatus("SEQUENCE_NUMBER_TOO_OLD") + if classification.Decision != WriteFailureDecisionRetryable { + t.Fatalf("expected retryable, got %v", classification.Decision) + } + if !strings.Contains(strings.ToLower(classification.Reason), "sequence") { + t.Fatalf("expected sequence in reason, got %q", classification.Reason) + } + }) + + t.Run("known non-Move status Miscellaneous error is retryable", func(t *testing.T) { + classification := ClassifyWriteVmStatus("Miscellaneous error") + if classification.Decision != WriteFailureDecisionRetryable { + t.Fatalf("expected retryable, got %v", classification.Decision) + } + if classification.Reason != "vm miscellaneous error" { + t.Fatalf("expected miscellaneous reason, got %q", classification.Reason) + } + }) + + t.Run("known non-Move status insufficient balance is retryable", func(t *testing.T) { + classification := ClassifyWriteVmStatus("INSUFFICIENT_BALANCE_FOR_TRANSACTION_FEE") + if classification.Decision != WriteFailureDecisionRetryable { + t.Fatalf("expected retryable, got %v", classification.Decision) + } + if classification.Reason != "insufficient balance for transaction fee" { + t.Fatalf("expected balance reason, got %q", classification.Reason) + } + }) +} + +func TestWriteFailureClassificationHelpers(t *testing.T) { + t.Run("retryable and empty message", func(t *testing.T) { + classification := WriteFailureClassification{ + Decision: WriteFailureDecisionRetryable, + } + + if !classification.Retryable() { + t.Fatal("expected retryable") + } + if classification.Terminal() { + t.Fatal("did not expect terminal") + } + if classification.AlreadyProcessed() { + t.Fatal("did not expect already processed") + } + if classification.MessagePtr() != nil { + t.Fatal("expected nil message ptr") + } + }) + + t.Run("already processed is terminal and exposes message pointer", func(t *testing.T) { + classification := WriteFailureClassification{ + Decision: WriteFailureDecisionAlreadyProcessed, + Message: "already processed", + } + + if classification.Retryable() { + t.Fatal("did not expect retryable") + } + if !classification.Terminal() { + t.Fatal("expected terminal") + } + if !classification.AlreadyProcessed() { + t.Fatal("expected already processed") + } + if ptr := classification.MessagePtr(); ptr == nil || *ptr != classification.Message { + t.Fatalf("expected message ptr %q, got %v", classification.Message, ptr) + } + }) +} diff --git a/pkg/types/mocks/aptos_service.go b/pkg/types/mocks/aptos_service.go index 5ab7f4a9ab..d8319ad26c 100644 --- a/pkg/types/mocks/aptos_service.go +++ b/pkg/types/mocks/aptos_service.go @@ -141,6 +141,62 @@ func (_c *AptosService_AccountTransactions_Call) RunAndReturn(run func(context.C return _c } +// LedgerVersion provides a mock function with given fields: ctx +func (_m *AptosService) LedgerVersion(ctx context.Context) (uint64, error) { + ret := _m.Called(ctx) + + if len(ret) == 0 { + panic("no return value specified for LedgerVersion") + } + + var r0 uint64 + var r1 error + if rf, ok := ret.Get(0).(func(context.Context) (uint64, error)); ok { + return rf(ctx) + } + if rf, ok := ret.Get(0).(func(context.Context) uint64); ok { + r0 = rf(ctx) + } else { + r0 = ret.Get(0).(uint64) + } + + if rf, ok := ret.Get(1).(func(context.Context) error); ok { + r1 = rf(ctx) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// AptosService_LedgerVersion_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'LedgerVersion' +type AptosService_LedgerVersion_Call struct { + *mock.Call +} + +// LedgerVersion is a helper method to define mock.On call +// - ctx context.Context +func (_e *AptosService_Expecter) LedgerVersion(ctx interface{}) *AptosService_LedgerVersion_Call { + return &AptosService_LedgerVersion_Call{Call: _e.mock.On("LedgerVersion", ctx)} +} + +func (_c *AptosService_LedgerVersion_Call) Run(run func(ctx context.Context)) *AptosService_LedgerVersion_Call { + _c.Call.Run(func(args mock.Arguments) { + run(args[0].(context.Context)) + }) + return _c +} + +func (_c *AptosService_LedgerVersion_Call) Return(_a0 uint64, _a1 error) *AptosService_LedgerVersion_Call { + _c.Call.Return(_a0, _a1) + return _c +} + +func (_c *AptosService_LedgerVersion_Call) RunAndReturn(run func(context.Context) (uint64, error)) *AptosService_LedgerVersion_Call { + _c.Call.Return(run) + return _c +} + // SubmitTransaction provides a mock function with given fields: ctx, req func (_m *AptosService) SubmitTransaction(ctx context.Context, req aptos.SubmitTransactionRequest) (*aptos.SubmitTransactionReply, error) { ret := _m.Called(ctx, req) diff --git a/pkg/types/relayer.go b/pkg/types/relayer.go index 857c01e7bc..5568e4f00e 100644 --- a/pkg/types/relayer.go +++ b/pkg/types/relayer.go @@ -101,8 +101,8 @@ type ChainService interface { // LatestHead returns the latest head for the underlying chain. LatestHead(ctx context.Context) (Head, error) - // FinalizedHead returns the latest finalized head for the underlying chain. - // Chains that do not support finality semantics may return codes.Unimplemented. + // FinalizedHead returns the finalized head for the underlying chain. Implementations + // that do not distinguish finalized heads may return the latest observed head. FinalizedHead(ctx context.Context) (Head, error) // GetChainInfo returns the ChainInfo for this Relayer. GetChainInfo(ctx context.Context) (ChainInfo, error) @@ -117,6 +117,13 @@ type ChainService interface { Replay(ctx context.Context, fromBlock string, args map[string]any) error } +// FinalizedHeadService is implemented by relayers that can distinguish finalized +// heads from the latest observed head. This remains useful for callers operating +// on generic service values rather than the full ChainService interface. +type FinalizedHeadService interface { + FinalizedHead(ctx context.Context) (Head, error) +} + // GethClient is the subset of go-ethereum client methods implemented by EVMService. type GethClient interface { // BalanceAt returns the wei balance of the given account. @@ -308,46 +315,16 @@ type Relayer interface { var _ Relayer = &UnimplementedRelayer{} -// UnimplementedChainService provides default stub implementations for ChainService methods. -// Embed this in chain-level structs that implement ChainService so that new methods added to the interface -// don't immediately break downstream packages on dependency bumps. -// Explicit method implementations on the embedding struct take precedence over these stubs. -type UnimplementedChainService struct{} - -func (u *UnimplementedChainService) LatestHead(ctx context.Context) (Head, error) { - return Head{}, status.Errorf(codes.Unimplemented, "method LatestHead not implemented") -} - -func (u *UnimplementedChainService) FinalizedHead(ctx context.Context) (Head, error) { - return Head{}, status.Errorf(codes.Unimplemented, "method FinalizedHead not implemented") -} - -func (u *UnimplementedChainService) GetChainInfo(ctx context.Context) (ChainInfo, error) { - return ChainInfo{}, status.Errorf(codes.Unimplemented, "method GetChainInfo not implemented") -} - -func (u *UnimplementedChainService) GetChainStatus(ctx context.Context) (ChainStatus, error) { - return ChainStatus{}, status.Errorf(codes.Unimplemented, "method GetChainStatus not implemented") -} - -func (u *UnimplementedChainService) ListNodeStatuses(ctx context.Context, pageSize int32, pageToken string) (stats []NodeStatus, nextPageToken string, total int, err error) { - return []NodeStatus{}, "", -1, status.Errorf(codes.Unimplemented, "method ListNodeStatuses not implemented") -} - -func (u *UnimplementedChainService) Transact(ctx context.Context, from, to string, amount *big.Int, balanceCheck bool) error { - return status.Errorf(codes.Unimplemented, "method Transact not implemented") -} - -func (u *UnimplementedChainService) Replay(ctx context.Context, fromBlock string, args map[string]any) error { - return status.Errorf(codes.Unimplemented, "method Replay not implemented") -} - // UnimplementedRelayer implements the Relayer interface with stubbed methods that return codes.Unimplemented errors or panic. // It is meant to be embedded in real Relayer implementations in order to get default behavior for new methods without having // to react to each change. // In the future, embedding this type may be required to implement Relayer (through use of an unexported method). type UnimplementedRelayer struct{} +// UnimplementedChainService is kept as a compatibility alias for chain-specific +// services that only embed the ChainService subset. +type UnimplementedChainService = UnimplementedRelayer + func (u *UnimplementedRelayer) Name() string { panic("method Name not implemented") } @@ -605,6 +582,10 @@ var _ AptosService = &UnimplementedAptosService{} // In the future, embedding this type may be required to implement AptosService (through use of an unexported method). type UnimplementedAptosService struct{} +func (ua *UnimplementedAptosService) LedgerVersion(ctx context.Context) (uint64, error) { + return 0, status.Errorf(codes.Unimplemented, "method LedgerVersion not implemented") +} + func (ua *UnimplementedAptosService) AccountAPTBalance(ctx context.Context, req aptos.AccountAPTBalanceRequest) (*aptos.AccountAPTBalanceReply, error) { return nil, status.Errorf(codes.Unimplemented, "method AccountAPTBalance not implemented") } diff --git a/pkg/workflows/dontime/plugin.go b/pkg/workflows/dontime/plugin.go index 4cd521c630..fe1c370ded 100644 --- a/pkg/workflows/dontime/plugin.go +++ b/pkg/workflows/dontime/plugin.go @@ -140,11 +140,11 @@ func (p *Plugin) Outcome(_ context.Context, outctx ocr3types.OutcomeContext, _ t } for id, requestSeqNum := range observation.Requests { - var currSeqNum int64 - if times, ok := prevOutcome.ObservedDonTimes[id]; ok { - currSeqNum = int64(len(times.Timestamps)) + if _, ok := prevOutcome.ObservedDonTimes[id]; !ok { + prevOutcome.ObservedDonTimes[id] = &pb.ObservedDonTimes{} } // We only count requests for the next sequence number and ignore all other ones. + currSeqNum := int64(len(prevOutcome.ObservedDonTimes[id].Timestamps)) if requestSeqNum == currSeqNum { observationCounts[id]++ } else if requestSeqNum > currSeqNum { @@ -197,25 +197,17 @@ func (p *Plugin) Outcome(_ context.Context, outctx ocr3types.OutcomeContext, _ t } } - // Remove expired and empty workflow executions + // Remove expired workflow executions for id, observedTimes := range outcome.ObservedDonTimes { - if observedTimes == nil || len(observedTimes.Timestamps) == 0 { - delete(outcome.ObservedDonTimes, id) - p.store.deleteExecutionID(id) - continue - } - if donTime >= observedTimes.Timestamps[0]+p.offChainConfig.ExecutionRemovalTime.AsDuration().Milliseconds() { - delete(outcome.ObservedDonTimes, id) - p.store.deleteExecutionID(id) + if observedTimes != nil && len(observedTimes.Timestamps) > 0 { + if donTime >= observedTimes.Timestamps[0]+p.offChainConfig.ExecutionRemovalTime.AsDuration().Milliseconds() { + delete(outcome.ObservedDonTimes, id) + p.store.deleteExecutionID(id) + } } } - outcomeBytes, err := proto.MarshalOptions{Deterministic: true}.Marshal(outcome) - p.lggr.Infow("Outcome computed", - "observedDonTimesEntries", len(outcome.ObservedDonTimes), - "outcomeSizeBytes", len(outcomeBytes), - ) - return outcomeBytes, err + return proto.MarshalOptions{Deterministic: true}.Marshal(outcome) } func (p *Plugin) Reports(_ context.Context, _ uint64, outcome ocr3types.Outcome) ([]ocr3types.ReportPlus[[]byte], error) { diff --git a/pkg/workflows/dontime/plugin_test.go b/pkg/workflows/dontime/plugin_test.go index 89c33fdcde..7b5ea343ee 100644 --- a/pkg/workflows/dontime/plugin_test.go +++ b/pkg/workflows/dontime/plugin_test.go @@ -156,6 +156,7 @@ func TestPlugin_Outcome(t *testing.T) { _ = store.RequestDonTime(executionID, 0) timestamp := time.Now().UnixMilli() + secondMillis := time.Second.Milliseconds() observations := []*pb.Observation{ { Timestamp: timestamp, @@ -164,13 +165,13 @@ func TestPlugin_Outcome(t *testing.T) { }, }, { - Timestamp: timestamp - int64(time.Second), + Timestamp: timestamp - secondMillis, Requests: map[string]int64{ executionID: 0, }, }, { - Timestamp: timestamp + int64(time.Second), + Timestamp: timestamp + secondMillis, Requests: map[string]int64{ executionID: 0, }, @@ -213,208 +214,101 @@ func TestPlugin_Outcome(t *testing.T) { require.Equal(t, []int64{timestamp}, outcomeProto.ObservedDonTimes[executionID].Timestamps) } -func TestPlugin_Outcome_SequenceNumberHandling(t *testing.T) { +func TestPlugin_OutcomeInitializesMissingObservedDonTimesEntry(t *testing.T) { lggr := logger.Test(t) + store := NewStore(DefaultRequestTimeout) config, offchainCfg := newTestPluginConfig(t), newTestPluginOffchainConfig(t) ctx := t.Context() - makeObservations := func(t *testing.T, timestamp int64, requests map[string]int64, numNodes int) []types.AttributedObservation { - t.Helper() - aos := make([]types.AttributedObservation, numNodes) - for i := 0; i < numNodes; i++ { - obs := &pb.Observation{ - Timestamp: timestamp + int64(i), - Requests: requests, - } - rawObs, err := proto.Marshal(obs) - require.NoError(t, err) - aos[i] = types.AttributedObservation{ - Observation: rawObs, - Observer: commontypes.OracleID(i), - } - } - return aos - } - - t.Run("new execution ID not in previous outcome defaults currSeqNum to 0", func(t *testing.T) { - store := NewStore(DefaultRequestTimeout) - plugin, err := NewPlugin(store, config, offchainCfg, lggr) - require.NoError(t, err) - - executionID := "new-workflow" - _ = store.RequestDonTime(executionID, 0) - - timestamp := time.Now().UnixMilli() - aos := makeObservations(t, timestamp, map[string]int64{executionID: 0}, 4) - - prevOutcome := &pb.Outcome{ - Timestamp: 0, - ObservedDonTimes: map[string]*pb.ObservedDonTimes{}, - } - prevOutcomeBytes, err := proto.Marshal(prevOutcome) - require.NoError(t, err) - - query, err := plugin.Query(ctx, ocr3types.OutcomeContext{PreviousOutcome: prevOutcomeBytes}) - require.NoError(t, err) - - outcome, err := plugin.Outcome(ctx, ocr3types.OutcomeContext{PreviousOutcome: prevOutcomeBytes}, query, aos) - require.NoError(t, err) - - outcomeProto := &pb.Outcome{} - err = proto.Unmarshal(outcome, outcomeProto) - require.NoError(t, err) - - require.Contains(t, outcomeProto.ObservedDonTimes, executionID) - require.Len(t, outcomeProto.ObservedDonTimes[executionID].Timestamps, 1) - }) - - t.Run("nil ObservedDonTimes in previous outcome does not panic", func(t *testing.T) { - store := NewStore(DefaultRequestTimeout) - plugin, err := NewPlugin(store, config, offchainCfg, lggr) - require.NoError(t, err) - - executionID := "nil-map-workflow" - _ = store.RequestDonTime(executionID, 0) - - timestamp := time.Now().UnixMilli() - aos := makeObservations(t, timestamp, map[string]int64{executionID: 0}, 4) - - prevOutcome := &pb.Outcome{ - Timestamp: 0, - ObservedDonTimes: nil, - } - prevOutcomeBytes, err := proto.Marshal(prevOutcome) - require.NoError(t, err) - - query, err := plugin.Query(ctx, ocr3types.OutcomeContext{PreviousOutcome: prevOutcomeBytes}) - require.NoError(t, err) - - outcome, err := plugin.Outcome(ctx, ocr3types.OutcomeContext{PreviousOutcome: prevOutcomeBytes}, query, aos) - require.NoError(t, err) - - outcomeProto := &pb.Outcome{} - err = proto.Unmarshal(outcome, outcomeProto) - require.NoError(t, err) - - require.Contains(t, outcomeProto.ObservedDonTimes, executionID) - require.Len(t, outcomeProto.ObservedDonTimes[executionID].Timestamps, 1) - }) - - t.Run("existing execution ID uses len(Timestamps) as currSeqNum", func(t *testing.T) { - store := NewStore(DefaultRequestTimeout) - plugin, err := NewPlugin(store, config, offchainCfg, lggr) - require.NoError(t, err) - - executionID := "existing-workflow" - _ = store.RequestDonTime(executionID, 1) - - timestamp := time.Now().UnixMilli() - aos := makeObservations(t, timestamp, map[string]int64{executionID: 1}, 4) - - prevTimestamp := timestamp - 1000 // 1 second ago in millis - prevOutcome := &pb.Outcome{ - Timestamp: prevTimestamp, - ObservedDonTimes: map[string]*pb.ObservedDonTimes{ - executionID: {Timestamps: []int64{prevTimestamp}}, - }, - } - prevOutcomeBytes, err := proto.Marshal(prevOutcome) - require.NoError(t, err) - - query, err := plugin.Query(ctx, ocr3types.OutcomeContext{PreviousOutcome: prevOutcomeBytes}) - require.NoError(t, err) - - outcome, err := plugin.Outcome(ctx, ocr3types.OutcomeContext{PreviousOutcome: prevOutcomeBytes}, query, aos) - require.NoError(t, err) - - outcomeProto := &pb.Outcome{} - err = proto.Unmarshal(outcome, outcomeProto) - require.NoError(t, err) - - require.Contains(t, outcomeProto.ObservedDonTimes, executionID) - require.Len(t, outcomeProto.ObservedDonTimes[executionID].Timestamps, 2) - }) - - t.Run("stale sequence number is ignored", func(t *testing.T) { - store := NewStore(DefaultRequestTimeout) - plugin, err := NewPlugin(store, config, offchainCfg, lggr) - require.NoError(t, err) + plugin, err := NewPlugin(store, config, offchainCfg, lggr) + require.NoError(t, err) - executionID := "stale-workflow" + query, err := plugin.Query(ctx, ocr3types.OutcomeContext{PreviousOutcome: []byte("")}) + require.NoError(t, err) - timestamp := time.Now().UnixMilli() - // Observations report seqNum 0, but prevOutcome already has 2 timestamps (currSeqNum=2) - aos := makeObservations(t, timestamp, map[string]int64{executionID: 0}, 4) + const executionID = "workflow-missing-prev-entry" + timestamp := time.Now().UnixMilli() + secondMillis := time.Second.Milliseconds() + observations := []*pb.Observation{ + {Timestamp: timestamp, Requests: map[string]int64{executionID: 0}}, + {Timestamp: timestamp - secondMillis, Requests: map[string]int64{executionID: 0}}, + {Timestamp: timestamp + secondMillis, Requests: map[string]int64{executionID: 0}}, + {Timestamp: timestamp, Requests: map[string]int64{executionID: 0}}, + } - prevTimestamp := timestamp - 1000 // 1 second ago in millis - prevOutcome := &pb.Outcome{ - Timestamp: prevTimestamp, - ObservedDonTimes: map[string]*pb.ObservedDonTimes{ - executionID: {Timestamps: []int64{ - prevTimestamp - 1000, - prevTimestamp, - }}, - }, + aos := make([]types.AttributedObservation, len(observations)) + for i, observation := range observations { + rawObs, marshalErr := proto.Marshal(observation) + require.NoError(t, marshalErr) + aos[i] = types.AttributedObservation{ + Observation: rawObs, + Observer: commontypes.OracleID(1), } - prevOutcomeBytes, err := proto.Marshal(prevOutcome) - require.NoError(t, err) + } - query, err := plugin.Query(ctx, ocr3types.OutcomeContext{PreviousOutcome: prevOutcomeBytes}) - require.NoError(t, err) + prevOutcome := &pb.Outcome{ + Timestamp: 0, + ObservedDonTimes: map[string]*pb.ObservedDonTimes{}, + } + prevOutcomeBytes, err := proto.Marshal(prevOutcome) + require.NoError(t, err) - outcome, err := plugin.Outcome(ctx, ocr3types.OutcomeContext{PreviousOutcome: prevOutcomeBytes}, query, aos) - require.NoError(t, err) + outcome, err := plugin.Outcome(ctx, ocr3types.OutcomeContext{PreviousOutcome: prevOutcomeBytes}, query, aos) + require.NoError(t, err) - outcomeProto := &pb.Outcome{} - err = proto.Unmarshal(outcome, outcomeProto) - require.NoError(t, err) + outcomeProto := &pb.Outcome{} + require.NoError(t, proto.Unmarshal(outcome, outcomeProto)) + require.Contains(t, outcomeProto.ObservedDonTimes, executionID) + require.Equal(t, []int64{timestamp}, outcomeProto.ObservedDonTimes[executionID].Timestamps) +} - // Stale seqNum 0 should be ignored, so timestamps should remain unchanged at 2 - require.Len(t, outcomeProto.ObservedDonTimes[executionID].Timestamps, 2) - }) +func TestPlugin_OutcomeKeepsEmptyObservedDonTimesEntries(t *testing.T) { + lggr := logger.Test(t) + store := NewStore(DefaultRequestTimeout) + config, offchainCfg := newTestPluginConfig(t), newTestPluginOffchainConfig(t) + ctx := t.Context() - t.Run("mix of new and existing execution IDs", func(t *testing.T) { - store := NewStore(DefaultRequestTimeout) - plugin, err := NewPlugin(store, config, offchainCfg, lggr) - require.NoError(t, err) + plugin, err := NewPlugin(store, config, offchainCfg, lggr) + require.NoError(t, err) - existingID := "existing-workflow" - newID := "new-workflow" - _ = store.RequestDonTime(existingID, 1) - _ = store.RequestDonTime(newID, 0) + query, err := plugin.Query(ctx, ocr3types.OutcomeContext{PreviousOutcome: []byte("")}) + require.NoError(t, err) - timestamp := time.Now().UnixMilli() - requests := map[string]int64{ - existingID: 1, - newID: 0, - } - aos := makeObservations(t, timestamp, requests, 4) + timestamp := time.Now().UnixMilli() + secondMillis := time.Second.Milliseconds() + observations := []*pb.Observation{ + {Timestamp: timestamp, Requests: map[string]int64{}}, + {Timestamp: timestamp - secondMillis, Requests: map[string]int64{}}, + {Timestamp: timestamp + secondMillis, Requests: map[string]int64{}}, + {Timestamp: timestamp, Requests: map[string]int64{}}, + } - prevTimestamp := timestamp - 1000 // 1 second ago in millis - prevOutcome := &pb.Outcome{ - Timestamp: prevTimestamp, - ObservedDonTimes: map[string]*pb.ObservedDonTimes{ - existingID: {Timestamps: []int64{prevTimestamp}}, - }, + aos := make([]types.AttributedObservation, len(observations)) + for i, observation := range observations { + rawObs, marshalErr := proto.Marshal(observation) + require.NoError(t, marshalErr) + aos[i] = types.AttributedObservation{ + Observation: rawObs, + Observer: commontypes.OracleID(1), } - prevOutcomeBytes, err := proto.Marshal(prevOutcome) - require.NoError(t, err) - - query, err := plugin.Query(ctx, ocr3types.OutcomeContext{PreviousOutcome: prevOutcomeBytes}) - require.NoError(t, err) + } - outcome, err := plugin.Outcome(ctx, ocr3types.OutcomeContext{PreviousOutcome: prevOutcomeBytes}, query, aos) - require.NoError(t, err) + prevOutcome := &pb.Outcome{ + Timestamp: timestamp - secondMillis, + ObservedDonTimes: map[string]*pb.ObservedDonTimes{ + "workflow-empty": {}, + }, + } + prevOutcomeBytes, err := proto.Marshal(prevOutcome) + require.NoError(t, err) - outcomeProto := &pb.Outcome{} - err = proto.Unmarshal(outcome, outcomeProto) - require.NoError(t, err) + outcome, err := plugin.Outcome(ctx, ocr3types.OutcomeContext{PreviousOutcome: prevOutcomeBytes}, query, aos) + require.NoError(t, err) - require.Contains(t, outcomeProto.ObservedDonTimes, existingID) - require.Len(t, outcomeProto.ObservedDonTimes[existingID].Timestamps, 2) - require.Contains(t, outcomeProto.ObservedDonTimes, newID) - require.Len(t, outcomeProto.ObservedDonTimes[newID].Timestamps, 1) - }) + outcomeProto := &pb.Outcome{} + require.NoError(t, proto.Unmarshal(outcome, outcomeProto)) + require.Contains(t, outcomeProto.ObservedDonTimes, "workflow-empty") + require.Empty(t, outcomeProto.ObservedDonTimes["workflow-empty"].Timestamps) } func TestPlugin_FinishedExecutions(t *testing.T) { @@ -432,17 +326,18 @@ func TestPlugin_FinishedExecutions(t *testing.T) { t.Run("Outcome: remove expired workflow executions", func(t *testing.T) { timestamp := time.Now().UnixMilli() + secondMillis := time.Second.Milliseconds() observations := []*pb.Observation{ { Timestamp: timestamp, Requests: map[string]int64{}, }, { - Timestamp: timestamp - int64(time.Second), + Timestamp: timestamp - secondMillis, Requests: map[string]int64{}, }, { - Timestamp: timestamp + int64(time.Second), + Timestamp: timestamp + secondMillis, Requests: map[string]int64{}, }, { @@ -462,7 +357,7 @@ func TestPlugin_FinishedExecutions(t *testing.T) { } // Set workflow-123 as expired - prevDonTime := timestamp - int64(time.Second) + prevDonTime := timestamp - secondMillis prevOutcome := &pb.Outcome{ Timestamp: prevDonTime, ObservedDonTimes: map[string]*pb.ObservedDonTimes{ @@ -484,16 +379,11 @@ func TestPlugin_FinishedExecutions(t *testing.T) { }) t.Run("Transmit: delete removed executionIDs", func(t *testing.T) { - store.setDonTimes("workflow-123", []int64{time.Now().UnixMilli()}) - r := ocr3types.ReportWithInfo[[]byte]{} r.Report, err = proto.Marshal(outcomeProto) require.NoError(t, err) err = transmitter.Transmit(ctx, types.ConfigDigest{}, 0, r, []types.AttributedOnchainSignature{}) require.NoError(t, err) - - _, err = store.GetDonTimes("workflow-123") - require.ErrorContains(t, err, "no don time for executionID workflow-123") }) } diff --git a/pkg/workflows/dontime/store.go b/pkg/workflows/dontime/store.go index 2e7f204057..b0354c73f5 100644 --- a/pkg/workflows/dontime/store.go +++ b/pkg/workflows/dontime/store.go @@ -117,22 +117,6 @@ func (s *Store) setDonTimes(executionID string, donTimes []int64) { s.donTimes[executionID] = donTimes } -func (s *Store) replaceDonTimes(donTimes map[string][]int64) { - s.mu.Lock() - defer s.mu.Unlock() - - for executionID, timestamps := range donTimes { - s.donTimes[executionID] = timestamps - } - - for executionID := range s.donTimes { - if _, ok := donTimes[executionID]; !ok { - delete(s.donTimes, executionID) - delete(s.requests, executionID) - } - } -} - func (s *Store) GetLastObservedDonTime() int64 { s.mu.Lock() defer s.mu.Unlock() diff --git a/pkg/workflows/dontime/transmitter.go b/pkg/workflows/dontime/transmitter.go index c9d30c3a5f..0f31e5aee2 100644 --- a/pkg/workflows/dontime/transmitter.go +++ b/pkg/workflows/dontime/transmitter.go @@ -33,11 +33,9 @@ func (t *Transmitter) Transmit(_ context.Context, _ types.ConfigDigest, _ uint64 return err } - currentDonTimes := make(map[string][]int64, len(outcome.ObservedDonTimes)) for id, observedDonTimes := range outcome.ObservedDonTimes { - currentDonTimes[id] = observedDonTimes.Timestamps + t.store.setDonTimes(id, observedDonTimes.Timestamps) } - t.store.replaceDonTimes(currentDonTimes) t.store.setLastObservedDonTime(outcome.Timestamp) t.lggr.Infow("Transmitting timestamps", "lastObservedDonTime", outcome.Timestamp) diff --git a/pkg/workflows/dontime/transmitter_test.go b/pkg/workflows/dontime/transmitter_test.go index 18f9023498..23c38459cb 100644 --- a/pkg/workflows/dontime/transmitter_test.go +++ b/pkg/workflows/dontime/transmitter_test.go @@ -51,3 +51,37 @@ func TestTransmitter_TransmitDonTimeRequest(t *testing.T) { require.Empty(t, store.GetRequest(executionID)) } + +func TestTransmitter_TransmitPreservesCachedDonTimesForOmittedExecutionIDs(t *testing.T) { + lggr := logger.Test(t) + store := NewStore(DefaultRequestTimeout) + ctx := t.Context() + + transmitter := NewTransmitter(lggr, store, "") + + store.setDonTimes("workflow-stale", []int64{11, 22}) + + timestamp := time.Now().UnixMilli() + outcome := &pb.Outcome{ + Timestamp: timestamp, + ObservedDonTimes: map[string]*pb.ObservedDonTimes{ + "workflow-fresh": {Timestamps: []int64{timestamp}}, + }, + } + + r := ocr3types.ReportWithInfo[[]byte]{} + var err error + r.Report, err = proto.Marshal(outcome) + require.NoError(t, err) + + err = transmitter.Transmit(ctx, types.ConfigDigest{}, 0, r, []types.AttributedOnchainSignature{}) + require.NoError(t, err) + + staleDonTimes, err := store.GetDonTimes("workflow-stale") + require.NoError(t, err) + require.Equal(t, []int64{11, 22}, staleDonTimes) + + freshDonTimes, err := store.GetDonTimes("workflow-fresh") + require.NoError(t, err) + require.Equal(t, []int64{timestamp}, freshDonTimes) +} diff --git a/sonar-project.properties b/sonar-project.properties index 3310f7904e..af9d03b0e2 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -28,7 +28,12 @@ sonar.coverage.exclusions=\ **/*_test.go,\ observability-lib/**,\ **/fuzz/**/*,\ -**/capabilities/**/*test/**/* +**/capabilities/**/*test/**/*,\ +pkg/loop/internal/example-relay/main.go,\ +pkg/loop/internal/relayer/*.go,\ +pkg/loop/internal/relayerset/*.go,\ +pkg/types/relayer.go,\ +pkg/types/core/relayerset.go # Tests' root folder, inclusions (tests to check and count) and exclusions @@ -36,4 +41,4 @@ sonar.tests=. sonar.test.inclusions=**/*_test.go # Duplication exclusions -sonar.cpd.exclusions=**/observability-lib/**/* \ No newline at end of file +sonar.cpd.exclusions=**/observability-lib/**/*