Esempio n. 1
0
 def serializar(self):
     '''Serializa este mensaje para enviarlo a la red'''
     # versión es 4 bytes little endian
     res = int_a_little_endian(self.versión, 4)
     # servicios tiene 8 bytes little endian
     res += int_a_little_endian(self.servicios, 8)
     # timestamp es 8 bytes little endian
     res += int_a_little_endian(self.timestamp, 8)
     # servicios receptor son 8 bytes little endian
     res += int_a_little_endian(self.servicios_receptor, 8)
     # IPV4 es 10 00 bytes y 2 ff bytes después ip receptor
     res += b'\x00' * 10 + b'\xff\xff' + self.ip_receptor
     # puerto receptor son 2 bytes, little endian debería ser 0
     res += int_a_little_endian(self.puerto_receptor, 2)
     # servicios emisor son 8 bytes little endian
     res += int_a_little_endian(self.servicios_emisor, 8)
     # IPV4 son los bytes 10 00 y 2 ff bytes luego ip emisor
     res += b'\x00' * 10 + b'\xff\xff' + self.ip_emisor
     # puerto emisor son 2 bytes, little endian debería ser 0
     res += int_a_little_endian(self.puerto_emisor, 2)
     # nonce deberían ser 8 bytes
     res += self.nonce
     # agente usuario es una cadena variable, así que varint primero
     res += codificar_varint(len(self.agente_usuario))
     res += self.agente_usuario
     # el último bloque son 4 bytes little endian
     res += int_a_little_endian(self.último_bloque, 4)
     # retransmisión es 00 si es falso, 01 si es verdadero
     if self.retransmisión:
         res += b'\x01'
     else:
         res += b'\x00'
     return res
Esempio n. 2
0
 def serializar(self):
     # comienza con el número de cosas como un varint
     res = codificar_varint(len(self.data))
     for tipo_datos, identificador in self.data:
         # tipo de datos es 4 bytes little endian
         res += int_a_little_endian(tipo_datos, 4)
         # identificador necesita estar en little endian
         res += identificador[::-1]
     return res
Esempio n. 3
0
 def serializar(self):
     '''Devuelve la serialización en bytes de la transacción'''
     # serializa versión (4 bytes, little endian)
     res = int_a_little_endian(self.versión, 4)
     # codificar_varint en el número de inputs
     res += codificar_varint(len(self.tx_ins))
     # itera los inputs
     for tx_in in self.tx_ins:
         # serializa cada input
         res += tx_in.serializar()
     # codificar_varint sobre el número de outputs
     res += codificar_varint(len(self.tx_outs))
     # itera outputs
     for tx_out in self.tx_outs:
         # serializa cada output
         res += tx_out.serializar()
     # serializa locktime (4 bytes, little endian)
     res += int_a_little_endian(self.locktime, 4)
     return res
Esempio n. 4
0
 def serializar(self):
     '''Serializa este mensaje para enviarlo a la red'''
     # la versión del protocolo es 4 bytes little-endian
     res = int_a_little_endian(self.versión, 4)
     # el número de hashes es un varint
     res += codificar_varint(self.num_hashes)
     # el bloque inicial es en little-endian
     res += self.bloque_inicial[::-1]
     # el bloque final es también en little-endian
     res += self.bloque_final[::-1]
     return res
Esempio n. 5
0
 def filtrocarga(self, flag=1):
     '''Devuelve la carga que va en un mensaje filtrocarga'''
     # comienza con el tamaño del filtro en bytes
     carga = codificar_varint(self.tamaño)
     # luego súmale el filtro a bytes
     carga += self.filtro_bytes()
     # la función contador es 4 bytes little endian
     carga += int_a_little_endian(self.función_contador, 4)
     # ajuste is 4 bytes little endian
     carga += int_a_little_endian(self.ajuste, 4)
     # flag es 1 byte little endian
     carga += int_a_little_endian(flag, 1)
     return carga
Esempio n. 6
0
 def serializar(self):
     # inicializa lo que enviaremos de vuelta
     res = b''
     # ve a través de cada cosa
     for cosa in self.cosas:
         # si la cosa es un entero, es un op code
         if type(cosa) == int:
             # convierte la cosa en un único byte entero usando int_a_little_endian
             res += int_a_little_endian(cosa, 1)
         else:
             # en otro caso, esto es un elemento
             # obtén la longitud en bytes
             longitud = len(cosa)
             # convierte la longitud en un único byte entero usando int_a_little_endian
             prefijo = int_a_little_endian(longitud, 1)
             # añade al resultado tanto la longitud como la cosa
             res += prefijo + cosa
     # obtén la longitud de todo
     total = len(res)
     # codificar_varint la longitud total de res y anteponlo
     return codificar_varint(total) + res