/** * Build a 'getblocks' message * * @param peer Destination peer * @param blockList Block hash list * @param stopBlock Stop block hash (Sha256Hash.ZERO_HASH to get all blocks) * @return 'getblocks' message */ public static Message buildGetBlocksMessage( Peer peer, List<Sha256Hash> blockList, Sha256Hash stopBlock) { // // Build the message payload // // The protocol version will be set to the lesser of our version and the peer version // SerializedBuffer msgBuffer = new SerializedBuffer(blockList.size() * 32 + 40); msgBuffer .putInt(Math.min(peer.getVersion(), NetParams.PROTOCOL_VERSION)) .putVarInt(blockList.size()); for (Sha256Hash hash : blockList) { msgBuffer.putBytes(Helper.reverseBytes(hash.getBytes())); } msgBuffer.putBytes(Helper.reverseBytes(stopBlock.getBytes())); // // Build the message // ByteBuffer buffer = MessageHeader.buildMessage("getblocks", msgBuffer); return new Message(buffer, peer, MessageHeader.MessageCommand.GETBLOCKS); }
/** * Serialize the transaction * * @param outBuffer Output buffer * @return Output buffer */ @Override public final SerializedBuffer getBytes(SerializedBuffer outBuffer) { if (txData != null) { outBuffer.putBytes(txData); } else { outBuffer .putInt(txVersion) .putVarInt(txInputs.size()) .putBytes(txInputs) .putVarInt(txOutputs.size()) .putBytes(txOutputs) .putUnsignedInt(txLockTime); } return outBuffer; }