syntax = "proto3"; package protowire; option go_package = "github.com/kaspanet/kaspad/protowire"; message KaspadMessage { oneof payload { AddressesMessage addresses = 1; BlockMessage block = 2; TransactionMessage transaction = 3; RequestBlockLocatorMessage requestBlockLocator = 4; BlockLocatorMessage blockLocator = 5; RequestAddressesMessage requestAddresses = 6; RequestIBDBlocksMessage requestIBDBlocks = 7; RequestNextIBDBlocksMessage requestNextIBDBlocks = 8; DoneIBDBlocksMessage DoneIBDBlocks = 9; RequestRelayBlocksMessage requestRelayBlocks = 10; RequestSelectedTipMessage requestSelectedTip = 11; RequestTransactionsMessage requestTransactions = 12; BlockMessage ibdBlock = 13; InvRelayBlockMessage invRelayBlock = 14; InvTransactionsMessage invTransactions = 15; PingMessage ping = 16; PongMessage pong = 17; SelectedTipMessage selectedTip = 18; VerackMessage verack = 19; VersionMessage version = 20; TransactionNotFoundMessage transactionNotFound = 21; RejectMessage reject = 22; } } // AddressesMessage start message AddressesMessage{ bool includeAllSubnetworks = 1; SubnetworkID subnetworkID = 2; repeated NetAddress addressList = 3; } message NetAddress{ int64 timestamp = 1; uint64 services = 2; bytes ip = 3; uint32 port = 4; } message SubnetworkID{ bytes bytes = 1; } // AddressesMessage end // GetAddressesMessage start message RequestAddressesMessage{ bool includeAllSubnetworks = 1; SubnetworkID subnetworkID = 2; } // GetAddressesMessage end // TransactionMessage start message TransactionMessage{ int32 version = 1; repeated TransactionInput inputs = 2; repeated TransactionOutput outputs = 3; uint64 lockTime = 4; SubnetworkID subnetworkID = 5; uint64 gas = 6; Hash payloadHash = 7; bytes Payload = 8; } message TransactionInput{ Outpoint PreviousOutpoint = 1; bytes SignatureScript = 2; uint64 Sequence = 3; } message Outpoint{ TransactionID transactionID = 1; uint32 index = 2; } message TransactionID{ bytes bytes = 1; } message TransactionOutput{ uint64 value = 1; bytes ScriptPubKey = 2; } // TransactionMessage end // BlockMessage start message BlockMessage{ BlockHeader header = 1; repeated TransactionMessage transactions = 2; } message BlockHeader{ int32 version = 1; repeated Hash parentHashes = 2; Hash hashMerkleRoot = 3; Hash acceptedIDMerkleRoot = 4; Hash utxoCommitment = 5; int64 timestamp = 6; uint32 bits = 7; uint64 nonce = 8; } message Hash{ bytes bytes = 1; } // BlockMessage end // GetBlockLocatorMessage start message RequestBlockLocatorMessage{ Hash lowHash = 1; Hash highHash = 2; } // GetBlockLocatorMessage end // BlockLocatorMessage start message BlockLocatorMessage{ repeated Hash hashes = 1; } // BlockLocatorMessage end // GetBlocksMessage start message RequestIBDBlocksMessage{ Hash lowHash = 1; Hash highHash = 2; } // GetBlocksMessage end // RequestNextIBDBlocksMessage start message RequestNextIBDBlocksMessage{ } // RequestNextIBDBlocksMessage end // DoneIBDBlocksMessage start message DoneIBDBlocksMessage{ } // DoneIBDBlocksMessage end // GetRelayBlocksMessage start message RequestRelayBlocksMessage{ repeated Hash hashes = 1; } // GetRelayBlocksMessage end // GetSelectedTipMessage start message RequestSelectedTipMessage{ } // GetSelectedTipMessage end // RequestTransactionsMessage start message RequestTransactionsMessage { repeated TransactionID ids = 1; } // GetTransactionsMessage end // TransactionNotFoundMessage start message TransactionNotFoundMessage{ TransactionID id = 1; } // TransactionsNotFoundMessage end // InvRelayBlockMessage start message InvRelayBlockMessage{ Hash hash = 1; } // InvRelayBlockMessage end // InvTransactionMessage start message InvTransactionsMessage{ repeated TransactionID ids = 1; } // InvTransactionMessage end // PingMessage start message PingMessage{ uint64 nonce = 1; } // PingMessage end // PongMessage start message PongMessage{ uint64 nonce = 1; } // PongMessage end // SelectedTipMessage start message SelectedTipMessage{ Hash selectedTipHash = 1; } // SelectedTipMessage end // VerackMessage start message VerackMessage{ } // VerackMessage end // VersionMessage start message VersionMessage{ uint32 protocolVersion = 1; uint64 services = 2; int64 timestamp = 3; NetAddress address = 4; bytes id = 5; string userAgent = 6; Hash selectedTipHash = 7; bool disableRelayTx = 8; SubnetworkID subnetworkID = 9; string network = 10; } // VersionMessage end // RejectMessage start message RejectMessage{ string reason = 1; } // RejectMessage end service P2P { rpc MessageStream (stream KaspadMessage) returns (stream KaspadMessage) {} }