¿Cómo codifico en base58 el ID de la cadena usando Python?
3 respuestas
- votos
-
- 2019-02-17
Tumagicbytepareceestarequivocado.Sitoma los valores debytes decimales del original,conviértalos a hexadecimal y luego rellene con un cero a laizquierda,obtendrá
>>> struct.unpack('>L', b'\x00\x57\x52\x00')[0] 5722624
Este valor deberíaproducirel resultadoesperado:
>>> payload = '023bb717ee882891d7be5b881cefa98946800e3d67b5d01b4237b3618709defb51ec37c3e100000518ae' >>> mb = struct.unpack('>L', b'\x00\x57\x52\x00')[0] >>> chainid = bytes.fromhex(payload[2:10]) >>> bitcoin.bin_to_b58check(chainid, magicbyte=mb) 'NetXSzLHKwSumh7'
Your magicbyte seems to be wrong. If you take the decimal byte values from the original, convert them to hex, then pad it with a leading zero, you get
>>> struct.unpack('>L', b'\x00\x57\x52\x00')[0] 5722624
This value should produce the expected result:
>>> payload = '023bb717ee882891d7be5b881cefa98946800e3d67b5d01b4237b3618709defb51ec37c3e100000518ae' >>> mb = struct.unpack('>L', b'\x00\x57\x52\x00')[0] >>> chainid = bytes.fromhex(payload[2:10]) >>> bitcoin.bin_to_b58check(chainid, magicbyte=mb) 'NetXSzLHKwSumh7'
-
Sí,5722624eselmagicbyte correcto:Yeah 5722624 is the right magicbyte:
- 1
- 2019-02-17
- Stephen Andrews
-
- 2019-02-16
Parece queen realidad soloestá obteniendo 2bytes de datos (4 caracteres hexadecimales).Verifiquéesto decodificandoel resultado que obtuviste,y solo devolvió dosbytes de datosparaelbytemágico dado.
Intente realizarel siguiente cambio:
def get_chain_id(self): chainid = bytes.fromhex(self.payload[2:10]) return bitcoin.bin_to_b58check(chainid, magicbyte=5722583)
It looks like you are only actually grabbing 2 bytes of data (4 hex chars). I verified this by decoding the result you got, and it only returning two bytes of data for the given magic byte.
Try making the following change:
def get_chain_id(self): chainid = bytes.fromhex(self.payload[2:10]) return bitcoin.bin_to_b58check(chainid, magicbyte=5722583)
-
Gracias,estoesparte delproblema -necesitotomar 8 caracteres (4bytes hexadecimales),o "self.payload [2:10]".En zeronet,una carga útil deendoso se ve así: `023bb717ee882891d7be5b881cefa98946800e3d67b5d01b4237b3618709defb51ec37c3e100000518ae`,donde` 3bb717ee`eselidentificador de la cadena,pero que se convierteen `NetFK` y debe ser. Edité unpoco lapregunta anterior.Gracias,denuevo,portoda su ayuda.Thanks, this is part of the problem - I need to grab 8 characters (4 hex bytes), or `self.payload[2:10]`. On zeronet, an endorsement payload looks like this: `023bb717ee882891d7be5b881cefa98946800e3d67b5d01b4237b3618709defb51ec37c3e100000518ae`, where `3bb717ee` is the chain id, but that converts to `Net1BPz7FKbUqsY` and it should be `NetXSzLHKwSumh7` on zeronet. I edited the question above a bit. Thanks again for all your help.
- 1
- 2019-02-17
- Luke Youngblood
-
- 2019-02-26
Enprimer lugar,¡muchasgracias!Me has ayudado a resolverelmisterio de lafirma delbloque :) Puede utilizarelpaquete pytezos.encoding :
from pytezos.encoding import base58_encode def get_chain_id(self): chainid = bytes.fromhex(self.payload[2:10]) return base58_encode(chain_id, b'Net')
First of all, many thanks! You've helped me with solving the block signature mystery :) You can use pytezos.encoding package:
from pytezos.encoding import base58_encode def get_chain_id(self): chainid = bytes.fromhex(self.payload[2:10]) return base58_encode(chain_id, b'Net')
Cuando Tezosnecesitafirmar una carga útil de operación de horneado oendoso,elbyte 0 será un 0x01para una operación de horneado o 0x02para una operación deendoso. Losbytes 1-5en la carga útil de la operación contienenel ID de cadena (también conocido como Red),que sepuede codificaren base58 usando estaespecificación :
El ID de cadena resultante será una cadena como
NetXdQprcVkpaWU
(el ID de cadena demainnet actualmente activo al 16 defebrero de 2019).¿Cómo conviertoel campo de 4bytesen losbytes 1-5 alformato Net (15) codificadoen base58 usandoelmódulopybitcointools de Vitalik?
Intenté usarel scripten
scripts/b58_prefix.py
para determinarelmagicbyte apropiadoparapasar a lafunciónbitcoin.bin_to_b58check
,perono obtengoel resultado apropiado:Aquíestámi código:
En zeronet,una carga útil de respaldo se ve así:
023bb717ee882891d7be5b881cefa98946800e3d67b5d01b4237b3618709defb51ec37c3e100000518ae
,donde3bb717ee882891d7be5b881cefa98946800e3d67b5d01b4237b3618709defb51ec37c3e100000518ae
,donde3bb717ee882891d7be5b881cefa98946800e3d67b5d01b4237b3618709defb51ec37c3e100000518ae
,donde3bb717ee882891d7be5b881cefa98946800e3d67b5d01b4237b3618709defb51ec37c3e100000518ae
,donde3bb717ee debe ser
NetXSzLHKwSumh7
en zeronet.