Comment savoir 58 coder l'identifiant de la chaîne à l'aide de Python?
3 réponses
- votes
-
- 2019-02-17
Votre MagicByte semble avoirtort.Si vousprenez les valeurs d'octets décimales àpartir de l'original,convertissez-lesen hexagonale,puistapez-la avec un zéro direct,vous obtenez
>>> struct.unpack('>L', b'\x00\x57\x52\x00')[0] 5722624
Cette valeur devraitproduire le résultat attendu:
>>> 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'
-
Ouais 5722624est lebonmagicbyte:Yeah 5722624 is the right magicbyte:
- 1
- 2019-02-17
- Stephen Andrews
-
- 2019-02-16
On dirait que vousne saisissez que 2 octets de données (4 caractères hex).J'ai vérifié celaen décodant le résultat que vous avez reçu,et celane renvoie que deux octets de donnéespour l'octetmagique donné.
Essayez defaire le changement suivant:
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)
-
Merci,celafaitpartie duproblème -j'aibesoin de saisir 8 caractères (4 octets hexagonaux) ou `self.payload [2:10]`.Surzeronet,uneapparencede charge utiled'approbationcomme ceci:``023bb717ee882891d7be5b881cefa98946800e3d67b5d01b4237b3618709defb51ec37c3e100000518ae`,où3bb717ee`est l'identifiantde la chaîne,maisqui setransforme`Net1BPz7FKbUqsY`etil devrait être`NetXSzLHKwSumh7`surzeronet. J'ai édité la question ci-dessus unpeu.Merciencorepour votre aide.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
Tout d'abord,mercibeaucoup!Vousm'avez aidé à résoudre lemystère de signature debloc :) Vouspouvez utiliser PYTEZOS.CODING 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')
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')
Lorsque Tezos abesoin de signer une opération utile de cuisson ou d'endossement,l'octet 0 sera un 0x01pour une opération de cuisson ou 0x02pour une opération d'approbation. Bytes 1-5 Dans la charge utile de l'opération contienne l'ID de chaîne (autrement appelé réseau),quipeut être codé dansbase58en utilisant Cette spécification :
L'ID de chaîne résultant sera une chaîne comme
NetXdQprcVkpaWU
(ID de chaîne Mainnet actuellement actif au 16février 2019).Comment convertir le champ 4 octetsen octets 1-5 dans leformat Net codé debase58 (15) à l'aide dumodule PybitcooTools de Vitalik?
J'aiessayé d'utiliser le script dans
scripts/b58_prefix.py
pour déterminer le Magicbyte appropriépourpasser à lafonctionbitcoin.bin_to_b58check
fonction,maisje ne reçoispas le résultat approprié:Voicimon code:
sur zeronet,une charge utile d'endossement ressemble à ceci:
023bb717ee882891d7be5b881cefa98946800e3d67b5d01b4237b3618709defb51ec37c3e100000518ae
,où3bb717ee
est l'identifiant de la chaîne,mais qui convertit surNet1BPz7FKbUqsY
et il devrait êtreNetXSzLHKwSumh7
sur Zeronet.