coinbits.protocol package

Submodules

coinbits.protocol.buffer module

class coinbits.protocol.buffer.ProtocolBuffer[source]

Bases: object

receive_message()[source]

This method will attempt to extract a header and message. It will return a tuple of (header, message) and set whichever can be set so far (None otherwise).

write(data)[source]

coinbits.protocol.exceptions module

exception coinbits.protocol.exceptions.NodeDisconnectException[source]

Bases: exceptions.Exception

This exception is thrown when a client is disconnected.

exception coinbits.protocol.exceptions.UnknownMessageException[source]

Bases: exceptions.Exception

This exception is thrown when trying to (de)serialize an unknown message type

coinbits.protocol.fields module

class coinbits.protocol.fields.BlockLocator[source]

Bases: coinbits.protocol.fields.Field

A block locator type used for getblocks and getheaders

datatype = '<I'
parse(values)[source]
serialize()[source]
class coinbits.protocol.fields.Field[source]

Bases: object

Base class for the Fields. This class only implements the counter to keep the order of the fields on the serializer classes.

counter = 74
deserialize(stream)[source]

This method must read the stream data and then deserialize and return the deserialized content.

Returns:the deserialized content
Parameters:stream – stream of data to read
parse(value)[source]

This method should be implemented to parse the value parameter into the field internal representation.

Parameters:value – value to be parsed
serialize()[source]

Serialize the internal representation and return the serialized data.

Returns:the serialized data
class coinbits.protocol.fields.FixedStringField(length)[source]

Bases: coinbits.protocol.fields.Field

A fixed length string field.

Example of use:

class MessageHeaderSerializer(Serializer):
    model_class = MessageHeader
    magic = fields.UInt32LEField()
    command = fields.FixedStringField(12)
    length = fields.UInt32LEField()
    checksum = fields.UInt32LEField()
deserialize(stream)[source]
parse(value)[source]
serialize()[source]
class coinbits.protocol.fields.Hash[source]

Bases: coinbits.protocol.fields.Field

A hash type field.

datatype = '<I'
deserialize(stream)[source]
parse(value)[source]
serialize()[source]
coinbits.protocol.fields.INVENTORY_TYPE = {'MSG_BLOCK': 2, 'MSG_TX': 1, 'ERROR': 0}

The type of the inventories

class coinbits.protocol.fields.IPv4AddressField[source]

Bases: coinbits.protocol.fields.Field

An IPv4 address field without timestamp and reserved IPv6 space.

deserialize(stream)[source]
parse(value)[source]
reserved = '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff'
serialize()[source]
class coinbits.protocol.fields.Int16LEField[source]

Bases: coinbits.protocol.fields.PrimaryField

16-bit little-endian integer field.

datatype = '<h'
class coinbits.protocol.fields.Int32LEField[source]

Bases: coinbits.protocol.fields.PrimaryField

32-bit little-endian integer field.

datatype = '<i'
class coinbits.protocol.fields.Int64LEField[source]

Bases: coinbits.protocol.fields.PrimaryField

64-bit little-endian integer field.

datatype = '<q'
class coinbits.protocol.fields.ListField(serializer_class)[source]

Bases: coinbits.protocol.fields.Field

A field used to serialize/deserialize a list of serializers.

Example of use:

class TxSerializer(Serializer):
    model_class = Tx
    version = fields.UInt32LEField()
    tx_in = fields.ListField(TxInSerializer)
    tx_out = fields.ListField(TxOutSerializer)
    lock_time = fields.UInt32LEField()
deserialize(stream)[source]
parse(value)[source]
serialize()[source]
coinbits.protocol.fields.MAGIC_VALUES = {'bitcoin_testnet': 3669344250, 'litecoin': 3686187259, 'bitcoin_testnet3': 118034699, 'namecoin': 4273258233, 'bitcoin': 3652501241, 'litecoin_testnet': 3703030268}

The network magic values

class coinbits.protocol.fields.NestedField(serializer_class)[source]

Bases: coinbits.protocol.fields.Field

A field used to nest another serializer.

Example of use:

class TxInSerializer(Serializer):
    model_class = TxIn
    previous_output = fields.NestedField(OutPointSerializer)
    signature_script = fields.VariableStringField()
    sequence = fields.UInt32LEField()
deserialize(stream)[source]
parse(value)[source]
serialize()[source]
coinbits.protocol.fields.PROTOCOL_VERSION = 60002

The protocol version

class coinbits.protocol.fields.PrimaryField[source]

Bases: coinbits.protocol.fields.Field

This is a base class for all fields that has only one value and their value can be represented by a Python struct datatype.

Example of use:

class UInt32LEField(PrimaryField):
    datatype = "<I"
deserialize(stream)[source]

Deserialize the stream using the struct data type specified.

Parameters:stream – the data stream
parse(value)[source]

This method will set the internal value to the specified value.

Parameters:value – the value to be set
serialize()[source]

Serialize the internal data and then return the serialized data.

coinbits.protocol.fields.SERVICES = {'NODE_NETWORK': 1}

The available services

class coinbits.protocol.fields.UInt16BEField[source]

Bases: coinbits.protocol.fields.PrimaryField

16-bit big-endian unsigned integer field.

datatype = '>H'
class coinbits.protocol.fields.UInt16LEField[source]

Bases: coinbits.protocol.fields.PrimaryField

16-bit little-endian unsigned integer field.

datatype = '<H'
class coinbits.protocol.fields.UInt32LEField[source]

Bases: coinbits.protocol.fields.PrimaryField

32-bit little-endian unsigned integer field.

datatype = '<I'
class coinbits.protocol.fields.UInt64LEField[source]

Bases: coinbits.protocol.fields.PrimaryField

64-bit little-endian unsigned integer field.

datatype = '<Q'
class coinbits.protocol.fields.VariableIntegerField[source]

Bases: coinbits.protocol.fields.Field

A variable size integer field.

deserialize(stream)[source]
parse(value)[source]
serialize()[source]
class coinbits.protocol.fields.VariableStringField[source]

Bases: coinbits.protocol.fields.Field

A variable length string field.

deserialize(stream)[source]
parse(value)[source]
serialize()[source]

coinbits.protocol.serializers module

class coinbits.protocol.serializers.AddressVector[source]

Bases: coinbits.protocol.serializers.SerializableMessage

A vector of addresses.

command = 'addr'
class coinbits.protocol.serializers.AddressVectorSerializer[source]

Bases: coinbits.protocol.serializers.Serializer

Serializer for the addresses vector.

model_class

alias of AddressVector

class coinbits.protocol.serializers.Block[source]

Bases: coinbits.protocol.serializers.BlockHeader

The block message. This message contains all the transactions present in the block.

command = 'block'
class coinbits.protocol.serializers.BlockHeader[source]

Bases: coinbits.protocol.serializers.SerializableMessage

The header of the block.

calculate_hash()[source]

This method will calculate the hash of the block.

class coinbits.protocol.serializers.BlockHeaderSerializer[source]

Bases: coinbits.protocol.serializers.Serializer

The serializer for the block header.

model_class

alias of BlockHeader

class coinbits.protocol.serializers.BlockSerializer[source]

Bases: coinbits.protocol.serializers.Serializer

The deserializer for the blocks.

model_class

alias of Block

class coinbits.protocol.serializers.GetAddr[source]

Bases: coinbits.protocol.serializers.SerializableMessage

The getaddr command.

command = 'getaddr'
class coinbits.protocol.serializers.GetAddrSerializer[source]

Bases: coinbits.protocol.serializers.Serializer

The serializer for the getaddr command.

model_class

alias of GetAddr

class coinbits.protocol.serializers.GetBlocks(hashes)[source]

Bases: coinbits.protocol.serializers.SerializableMessage

The getblocks command.

command = 'getblocks'
class coinbits.protocol.serializers.GetBlocksSerializer[source]

Bases: coinbits.protocol.serializers.Serializer

model_class

alias of GetBlocks

class coinbits.protocol.serializers.GetData[source]

Bases: coinbits.protocol.serializers.InventoryVector

GetData message command.

command = 'getdata'
class coinbits.protocol.serializers.GetDataSerializer[source]

Bases: coinbits.protocol.serializers.Serializer

Serializer for the GetData command.

model_class

alias of GetData

class coinbits.protocol.serializers.GetHeaders(hashes)[source]

Bases: coinbits.protocol.serializers.GetBlocks

command = 'getheaders'
class coinbits.protocol.serializers.GetHeadersSerializer[source]

Bases: coinbits.protocol.serializers.GetBlocksSerializer

model_class

alias of GetHeaders

class coinbits.protocol.serializers.HeaderVector[source]

Bases: coinbits.protocol.serializers.SerializableMessage

The header only vector.

command = 'headers'
class coinbits.protocol.serializers.HeaderVectorSerializer[source]

Bases: coinbits.protocol.serializers.Serializer

Serializer for the block header vector.

model_class

alias of HeaderVector

class coinbits.protocol.serializers.IPv4Address[source]

Bases: object

The IPv4 Address (without timestamp).

class coinbits.protocol.serializers.IPv4AddressSerializer[source]

Bases: coinbits.protocol.serializers.Serializer

Serializer for the IPv4Address.

model_class

alias of IPv4Address

class coinbits.protocol.serializers.IPv4AddressTimestamp[source]

Bases: coinbits.protocol.serializers.IPv4Address

The IPv4 Address with timestamp.

class coinbits.protocol.serializers.IPv4AddressTimestampSerializer[source]

Bases: coinbits.protocol.serializers.Serializer

Serializer for the IPv4AddressTimestamp.

model_class

alias of IPv4AddressTimestamp

class coinbits.protocol.serializers.Inventory[source]

Bases: coinbits.protocol.serializers.SerializableMessage

The Inventory representation.

type_to_text()[source]

Converts the inventory type to text representation.

class coinbits.protocol.serializers.InventorySerializer[source]

Bases: coinbits.protocol.serializers.Serializer

The serializer for the Inventory.

model_class

alias of Inventory

class coinbits.protocol.serializers.InventoryVector[source]

Bases: coinbits.protocol.serializers.SerializableMessage

A vector of inventories.

command = 'inv'
class coinbits.protocol.serializers.InventoryVectorSerializer[source]

Bases: coinbits.protocol.serializers.Serializer

The serializer for the vector of inventories.

model_class

alias of InventoryVector

class coinbits.protocol.serializers.MemPool[source]

Bases: coinbits.protocol.serializers.SerializableMessage

The mempool command.

command = 'mempool'
class coinbits.protocol.serializers.MemPoolSerializer[source]

Bases: coinbits.protocol.serializers.Serializer

The serializer for the mempool command.

model_class

alias of MemPool

class coinbits.protocol.serializers.MessageHeader(coin='bitcoin')[source]

Bases: object

The header of all bitcoin messages.

class coinbits.protocol.serializers.MessageHeaderSerializer[source]

Bases: coinbits.protocol.serializers.Serializer

Serializer for the MessageHeader.

static calc_checksum(payload)[source]

Calculate the checksum of the specified payload.

Parameters:payload – The binary data payload.
static calcsize()[source]
model_class

alias of MessageHeader

class coinbits.protocol.serializers.NotFound[source]

Bases: coinbits.protocol.serializers.GetData

NotFound command message.

command = 'notfound'
class coinbits.protocol.serializers.NotFoundSerializer[source]

Bases: coinbits.protocol.serializers.Serializer

Serializer for the NotFound message.

model_class

alias of NotFound

class coinbits.protocol.serializers.OutPoint[source]

Bases: object

The OutPoint representation.

class coinbits.protocol.serializers.OutPointSerializer[source]

Bases: coinbits.protocol.serializers.Serializer

The OutPoint representation serializer.

model_class

alias of OutPoint

class coinbits.protocol.serializers.Ping[source]

Bases: coinbits.protocol.serializers.SerializableMessage

The ping command, which should always be answered with a Pong.

command = 'ping'
class coinbits.protocol.serializers.PingSerializer[source]

Bases: coinbits.protocol.serializers.Serializer

The ping command serializer.

model_class

alias of Ping

class coinbits.protocol.serializers.Pong[source]

Bases: coinbits.protocol.serializers.SerializableMessage

The pong command, usually returned when a ping command arrives.

command = 'pong'
class coinbits.protocol.serializers.PongSerializer[source]

Bases: coinbits.protocol.serializers.Serializer

The pong command serializer.

model_class

alias of Pong

class coinbits.protocol.serializers.Reject[source]

Bases: coinbits.protocol.serializers.SerializableMessage

command = 'reject'
class coinbits.protocol.serializers.RejectSerializer[source]

Bases: coinbits.protocol.serializers.Serializer

model_class

alias of Reject

class coinbits.protocol.serializers.SerializableMessage[source]

Bases: object

get_field_names()[source]
get_message(coin='bitcoin')[source]

Get the binary version of this message, complete with header.

class coinbits.protocol.serializers.Serializer[source]

Bases: coinbits.protocol.serializers.SerializerABC

The main serializer class, inherit from this class to create custom serializers.

Example of use:

class VerAckSerializer(Serializer):
    model_class = VerAck
deserialize(stream)[source]

This method will read the stream and then will deserialize the binary data information present on it.

Parameters:stream – A file-like object (StringIO, file, socket, etc.)
serialize(obj, fields=None)[source]

This method will receive an object and then will serialize it according to the fields declared on the serializer.

Parameters:obj – The object to serializer.
class coinbits.protocol.serializers.SerializerABC[source]

Bases: object

The serializer abstract base class.

class coinbits.protocol.serializers.SerializerMeta[source]

Bases: type

The serializer meta class. This class will create an attribute called ‘_fields’ in each serializer with the ordered dict of fields present on the subclasses.

classmethod get_fields(meta, bases, attrs, field_class)[source]

This method will construct an ordered dict with all the fields present on the serializer classes.

class coinbits.protocol.serializers.Tx[source]

Bases: coinbits.protocol.serializers.SerializableMessage

The main transaction representation, this object will contain all the inputs and outputs of the transaction.

calculate_hash()[source]

This method will calculate the hash of the transaction.

command = 'tx'
class coinbits.protocol.serializers.TxIn[source]

Bases: object

The transaction input representation.

class coinbits.protocol.serializers.TxInSerializer[source]

Bases: coinbits.protocol.serializers.Serializer

The transaction input serializer.

model_class

alias of TxIn

class coinbits.protocol.serializers.TxOut[source]

Bases: object

The transaction output.

get_btc_value()[source]
class coinbits.protocol.serializers.TxOutSerializer[source]

Bases: coinbits.protocol.serializers.Serializer

The transaction output serializer.

model_class

alias of TxOut

class coinbits.protocol.serializers.TxSerializer[source]

Bases: coinbits.protocol.serializers.Serializer

The transaction serializer.

model_class

alias of Tx

class coinbits.protocol.serializers.VerAck[source]

Bases: coinbits.protocol.serializers.SerializableMessage

The version acknowledge (verack) command.

command = 'verack'
class coinbits.protocol.serializers.VerAckSerializer[source]

Bases: coinbits.protocol.serializers.Serializer

The serializer for the verack command.

model_class

alias of VerAck

class coinbits.protocol.serializers.Version[source]

Bases: coinbits.protocol.serializers.SerializableMessage

The version command.

command = 'version'
class coinbits.protocol.serializers.VersionSerializer[source]

Bases: coinbits.protocol.serializers.Serializer

The version command serializer.

model_class

alias of Version

coinbits.protocol.serializers.getSerializer(msgtype)[source]

Return a new serializer of the given msg type.

coinbits.protocol.utils module

coinbits.protocol.utils.nonce()[source]

Return a random int between 0 and (2^32)-1

Module contents