From 6c553de2c9f793b1908cbf10b8e51d2824e701a4 Mon Sep 17 00:00:00 2001 From: Manuel Rocha Date: Wed, 12 Jan 2022 22:42:00 +0000 Subject: [PATCH] #368 - add vbfi bitcoin_confirmation field to getblock --- .../cli/commands/rpc/TransactionCommands.kt | 19 ++++++++++++ .../nodecore/cli/contracts/AdminService.kt | 3 ++ .../cli/services/AdminServiceClient.kt | 4 +++ nodecore-grpc/src/main/proto/veriblock.proto | 31 +++++++++++++++++++ 4 files changed, 57 insertions(+) diff --git a/nodecore-cli/src/main/java/nodecore/cli/commands/rpc/TransactionCommands.kt b/nodecore-cli/src/main/java/nodecore/cli/commands/rpc/TransactionCommands.kt index a905b8860..15e8c44d5 100644 --- a/nodecore-cli/src/main/java/nodecore/cli/commands/rpc/TransactionCommands.kt +++ b/nodecore-cli/src/main/java/nodecore/cli/commands/rpc/TransactionCommands.kt @@ -4,6 +4,7 @@ import com.google.protobuf.ByteString import nodecore.api.grpc.RpcAbandonAddressTransactionsRequest import nodecore.api.grpc.RpcAbandonTransactionRequest import nodecore.api.grpc.RpcAddressIndexPair +import nodecore.api.grpc.RpcGetLastBitcoinFinalizedBlockRequest import nodecore.api.grpc.RpcGetPendingTransactionsRequest import nodecore.api.grpc.RpcGetTransactionsRequest import nodecore.api.grpc.RpcMakeUnsignedMultisigTxRequest @@ -182,6 +183,24 @@ fun CommandFactory.transactionCommands() { } } + rpcCommand( + name = "Get last BTC finalized block", + form = "getlastbtcfinalizedblock", + description = "Gets information regarding last BTC finalized block by bitcoint confirmation number", + parameters = listOf( + CommandParameter(name = "bitcoinConfirmations", mapper = CommandParameterMappers.INTEGER, required = true) + ) + ) { + val bitcoinConfirmations: Int = getParameter("bitcoinConfirmations") + val request = RpcGetLastBitcoinFinalizedBlockRequest.newBuilder().setBitcoinConfirmations(bitcoinConfirmations) + + val result = cliShell.adminService.getLastBitcoinFinalizedBlock(request.build()) + + prepareResult(result.success, result.resultsList) { + result.lastBtcFinalizedBlock + } + } + rpcCommand( name = "Send", form = "send|sendtoaddress|sendtoaddr", diff --git a/nodecore-cli/src/main/java/nodecore/cli/contracts/AdminService.kt b/nodecore-cli/src/main/java/nodecore/cli/contracts/AdminService.kt index e4bc04038..97501a786 100644 --- a/nodecore-cli/src/main/java/nodecore/cli/contracts/AdminService.kt +++ b/nodecore-cli/src/main/java/nodecore/cli/contracts/AdminService.kt @@ -41,6 +41,8 @@ import nodecore.api.grpc.RpcGetInfoReply import nodecore.api.grpc.RpcGetInfoRequest import nodecore.api.grpc.RpcGetLastBitcoinBlockReply import nodecore.api.grpc.RpcGetLastBitcoinBlockRequest +import nodecore.api.grpc.RpcGetLastBitcoinFinalizedBlockReply +import nodecore.api.grpc.RpcGetLastBitcoinFinalizedBlockRequest import nodecore.api.grpc.RpcGetNewAddressReply import nodecore.api.grpc.RpcGetNewAddressRequest import nodecore.api.grpc.RpcGetPeerInfoReply @@ -149,6 +151,7 @@ interface AdminService { fun getSignatureIndex(request: RpcGetSignatureIndexRequest): RpcGetSignatureIndexReply fun setDefaultAddress(request: RpcSetDefaultAddressRequest): RpcSetDefaultAddressReply fun getLastBitcoinBlock(request: RpcGetLastBitcoinBlockRequest): RpcGetLastBitcoinBlockReply + fun getLastBitcoinFinalizedBlock(request: RpcGetLastBitcoinFinalizedBlockRequest): RpcGetLastBitcoinFinalizedBlockReply fun getProtectedChildren(request: RpcGetProtectedChildrenRequest): RpcGetProtectedChildrenReply fun getProtectingParents(request: RpcGetProtectingParentsRequest): RpcGetProtectingParentsReply fun restartPoolWebServer(request: RpcRestartPoolWebServerRequest): RpcRestartPoolWebServerReply diff --git a/nodecore-cli/src/main/java/nodecore/cli/services/AdminServiceClient.kt b/nodecore-cli/src/main/java/nodecore/cli/services/AdminServiceClient.kt index 9210758ce..d7746ca8e 100644 --- a/nodecore-cli/src/main/java/nodecore/cli/services/AdminServiceClient.kt +++ b/nodecore-cli/src/main/java/nodecore/cli/services/AdminServiceClient.kt @@ -43,6 +43,8 @@ import nodecore.api.grpc.RpcGetInfoReply import nodecore.api.grpc.RpcGetInfoRequest import nodecore.api.grpc.RpcGetLastBitcoinBlockReply import nodecore.api.grpc.RpcGetLastBitcoinBlockRequest +import nodecore.api.grpc.RpcGetLastBitcoinFinalizedBlockReply +import nodecore.api.grpc.RpcGetLastBitcoinFinalizedBlockRequest import nodecore.api.grpc.RpcGetNewAddressReply import nodecore.api.grpc.RpcGetNewAddressRequest import nodecore.api.grpc.RpcGetPeerInfoReply @@ -226,6 +228,8 @@ class AdminServiceClient( override fun getLastBitcoinBlock(request: RpcGetLastBitcoinBlockRequest): RpcGetLastBitcoinBlockReply = blockingStub.getLastBitcoinBlock(request) + override fun getLastBitcoinFinalizedBlock(request: RpcGetLastBitcoinFinalizedBlockRequest): RpcGetLastBitcoinFinalizedBlockReply = blockingStub.getLastBitcoinFinalizedBlock(request) + override fun getPendingTransactions(request: RpcGetPendingTransactionsRequest): RpcGetPendingTransactionsReply = blockingStub.getPendingTransactions(request) override fun getStateInfo(request: RpcGetStateInfoRequest): RpcGetStateInfoReply = blockingStub.getStateInfo(request) diff --git a/nodecore-grpc/src/main/proto/veriblock.proto b/nodecore-grpc/src/main/proto/veriblock.proto index 8598d74b9..664f7ab63 100644 --- a/nodecore-grpc/src/main/proto/veriblock.proto +++ b/nodecore-grpc/src/main/proto/veriblock.proto @@ -770,6 +770,8 @@ message RpcEvent { RpcGetStateInfoReply state_info_reply = 36; RpcGetVtbsForBtcBlocksRequest vtb_for_btc_request = 37; RpcGetVtbsForBtcBlocksReply vtb_for_btc_reply = 38; + RpcGetLastBitcoinFinalizedBlockRequest last_btc_finalized_block_request = 39; + RpcGetLastBitcoinFinalizedBlockReply last_btc_finalized_block_reply = 40; } string id = 11; bool acknowledge = 12; @@ -1035,6 +1037,28 @@ message RpcGetTransactionReply { RpcTransactionInfo transaction = 3; } +message RpcGetLastBitcoinFinalizedBlockRequest { + int32 bitcoinConfirmations = 1; +} + +message RpcGetLastBitcoinFinalizedBlockReply { + bool success = 1; + repeated RpcResult results = 2; + RpcGetLastBitcoinFinalizedBlockInfo last_btc_finalized_block = 3; +} + +message RpcGetLastBitcoinFinalizedBlockInfo { + int32 height = 1; + bytes hash = 2 [(hex_encoded)=true]; + bool known = 3; + bool pop_verified = 4; + RpcVerifiedOrEndorsedInInfo verified_in = 5; + RpcVerifiedOrEndorsedInInfo endorsed_in = 6; + int32 sp_finality = 7; + int32 bitcoin_finality = 8; + bool is_attack_in_progress = 9; +} + message RpcTransactionInfo { int32 confirmations = 1; RpcTransaction transaction = 2; @@ -1048,6 +1072,11 @@ message RpcTransactionInfo { string merkle_path = 10; } +message RpcVerifiedOrEndorsedInInfo { + int32 height = 1; + bytes hash = 2 [(hex_encoded)=true]; +} + message RpcGetTransactionsReply { bool success = 1; repeated RpcResult results = 2; @@ -1728,6 +1757,8 @@ service Admin { rpc GetTransactions(RpcGetTransactionsRequest) returns (RpcGetTransactionsReply) {} + rpc GetLastBitcoinFinalizedBlock(RpcGetLastBitcoinFinalizedBlockRequest) returns (RpcGetLastBitcoinFinalizedBlockReply) {} + rpc ValidateAddress(RpcValidateAddressRequest) returns (RpcValidateAddressReply) {} rpc GenerateMultisigAddress(RpcGenerateMultisigAddressRequest) returns (RpcGenerateMultisigAddressReply) {}