Signature non valide pour la transaction Tezos
2 réponses
- votes
-
- 2020-04-24
Ilexiste deuxpoints de la CE valides qui correspondent à lamême signature,mais certains chaumes deblocage limitent l'utilisation à l'un de ces deuxpoints ECpour éviter lamalléabilité (=ilestfacile de convertir la signature à l'autre valeur de signatureet crée ainsi une secondetransaction valide qui aurait une carte detransaction différente sans avoir accès à la cléprivée).
EDIT: Latransaction valide correspondanteest:
008f1d96e2783258ff663f03dacfe946c026a5d194c73d1987b3da73fadea7d46b01549a0cde570a49b9200680341a6c78e87635480f940adc85a001f44eac02010238244743822921db1661fc7306c3044faac1e373906fdb5582d9454352b3b31c6c01549a0cde570a49b9200680341a6c78e87635480ff00bdd85a0018452ac02e0a712000153957451d3cc83a71e26b65ea2391a1b16713d2d0049ff4a47599e0c65447182eca4c900893a74de3ca24c26708fc9d4bf79891ca384b0d5f98618bc3acec4f0c6bffd002de6fd839a418f47e83404aed285fc0235
Cela a été créé sans re-signeret sans accès à la cléprivée.There are two valid EC points that correspond to the same signature, but some blockchains restrict the usage to one of those two EC points to avoid malleability (= it is easy to convert the signature to the other signature value, and thus create a second valid transaction which would have a different transaction id without haveing access to the private key).
Edit: The corresponding valid transaction is:
008f1d96e2783258ff663f03dacfe946c026a5d194c73d1987b3da73fadea7d46b01549a0cde570a49b9200680341a6c78e87635480f940adc85a001f44eac02010238244743822921db1661fc7306c3044faac1e373906fdb5582d9454352b3b31c6c01549a0cde570a49b9200680341a6c78e87635480ff00bdd85a0018452ac02e0a712000153957451d3cc83a71e26b65ea2391a1b16713d2d0049ff4a47599e0c65447182eca4c900893a74de3ca24c26708fc9d4bf79891ca384b0d5f98618bc3acec4f0c6bffd002de6fd839a418f47e83404aed285fc0235
This was created without re-signing and without access to the private key. -
- 2020-04-19
Assurez-vous de révéler la clépublique une seulefoiset assurez-vous de votre comptoir correctement.
Aussi,jetez un coup d'œil à Netezos ,C # Tezos SDK. Voici unexemple de lamanière deforger,de signeret d'envoyer unetransaction:
var key = Key.FromBase58("edskS9DjUKo8ogBBU8LeU..."); var rpc = new TezosRpc("https://rpc.tzkt.io/carthagenet/"); var head = await rpc.Blocks.Head.Hash.GetAsync<string>(); var counter = await rpc.Blocks.Head.Context.Contracts[key.PubKey.Address].Counter.GetAsync<int>(); var forge = new LocalForge(); var bytes = await forge.ForgeOperationAsync(head, new TransactionContent { Source = key.PubKey.Address, Counter = ++counter, Fee = 10_000, GasLimit = 20_000, StorageLimit = 20_000, Amount = 1_000_000, Destination = "tz1KhnTgw...", }); var sig = key.Sign(new byte[] { 3 }.Concat(bytes).ToArray()); var op = bytes.Concat(sig.ToBytes()).ToArray(); var tx = await rpc.Inject.Operation.PostAsync(Hex.Convert(op));
Si celane fonctionnepasmême avec Netezos,vérifiez si votrenœud RPCest synchroniséet àjour.
Make sure you revealed public key just once and make sure you properly incement counter.
Also, take a look at Netezos, C# Tezos SDK. Here is an example of how to forge, sign and send a transaction:
var key = Key.FromBase58("edskS9DjUKo8ogBBU8LeU..."); var rpc = new TezosRpc("https://rpc.tzkt.io/carthagenet/"); var head = await rpc.Blocks.Head.Hash.GetAsync<string>(); var counter = await rpc.Blocks.Head.Context.Contracts[key.PubKey.Address].Counter.GetAsync<int>(); var forge = new LocalForge(); var bytes = await forge.ForgeOperationAsync(head, new TransactionContent { Source = key.PubKey.Address, Counter = ++counter, Fee = 10_000, GasLimit = 20_000, StorageLimit = 20_000, Amount = 1_000_000, Destination = "tz1KhnTgw...", }); var sig = key.Sign(new byte[] { 3 }.Concat(bytes).ToArray()); var op = bytes.Concat(sig.ToBytes()).ToArray(); var tx = await rpc.Inject.Operation.PostAsync(Hex.Convert(op));
If it doesn't work even with Netezos, check if your RPC node is synced and up to date.
-
Basé sur le JSON dans la question originaleet le statut de l'adresse de l'expéditeur [link] (https://tezos.id/accounts/tz2g2zy3sguh1eqqrx9q62ccpskgclppdt),comptoiret révéler l'air ok?Based on the JSON in the original question and the status of the sender address [link](https://tezos.id/accounts/tz2G2Zy3sgYCuh1EQqrx9Q62CcpSkgcLPPDt), does counter & reveal look ok?
- 0
- 2020-04-20
- Felix Laufenberg
-
Je vous suggère d'utiliser Tzkt Explorer,caril affiche desinformationsplus utiles,y compris les opérations ayant échoué dans MEMPOOL HTTPS://TZKT.IO/TZ2G2ZY3SGYCUH1EQQRX9Q62CPSKGCLPPDT/Operations.Donc,ce queje vois,c'est deux échec dans les opérations demémoire demémoires avec des comptoirs `.72`,`.73` àpartir de `12:01:49 UTC`.Dans votre question,je vois Json avec lesmêmes comptoirs,mais avec la succursale https://tzkt.io/bkixcfn1ztxnnntwsrarrswzvfc6om7radwq5mtqgx6radwq5mtqgx6radwq5mtqgx6ry4p2uhe - de `12:55:12 UTC`.Donc,je suppose que vous avezessayé d'envoyer les opérations avec les comptoirs `..72`,`.73` qui avait déjà été à Mempool.I suggest you use TzKT explorer, because it shows more useful info, including operations failed in mempool https://tzkt.io/tz2G2Zy3sgYCuh1EQqrx9Q62CcpSkgcLPPDt/operations. So, what I see is two failed in mempool operations with counters `..72`, `..73` from `12:01:49 UTC`. In your question I see JSON with the same counters BUT with the branch https://tzkt.io/BKiXcfN1ZTXnNNbTWSRArSWzVFc6om7radWq5mTqGX6rY4P2Uhe - from `12:55:12 UTC`. So, I assume that you tried to send the operations with the counters `..72`, `..73` which had already been in mempool.
- 1
- 2020-04-20
- Groxan
-
Demanièregénérale,votre JSON a l'air d'allerbien,mais lefait qu'il aiteu échoué «clones» dans lamémoire MEMPOOLpeutprovoquer l'erreur que vous avez décrite.Generally speaking, your JSON looks fine, but the fact that there were failed "clones" in the mempool may cause the error you described.
- 0
- 2020-04-20
- Groxan
-
Mercipour la réponse rapide.Latransaction dans lamémoire MEMPOOLest latransaction réussie queje parlais,maiselleestmaintenantinvalide,car la succursaleest obsolète,si cela devaitbloquer lestransactionsfutures,il seraitterminé debloquer le compteet devrait être rendu unbogue critique dans lenœud Tezos,alorsje nepensepas que ce soit la cause de l'erreur.Thanks for the quick response. The transaction in the mempool is the successfull transaction that I was referring to, however it is now invalid because the branch is outdated, if that were to block future transactions it would complete block the account and should be rendered a critical bug in the Tezos node, so I don't think that it should be the cause of the error.
- 0
- 2020-04-20
- Felix Laufenberg
-
Malheureusement,je nepourraipastester la signature avec Netezos depuis queje récupère la signature d'un HSMet jene peuxpas avoir accès à la cléprivée.Unfortunately I won't be able to test signing with Netezos since I retrieve the signature from an HSM and can not get access to the private key.
- 0
- 2020-04-21
- Felix Laufenberg
J'écris un logiciel deportefeuillepersonnalisé completpour Tezosen C #et obtenu latransactionbrute suivante:
signé: 008f1d96e2783258ff663f03dacfe946c026a5d194c73d1987b3da73fadea7d46b01549a0cde570a49b9200680341a6c78e87635480f940adc85a001f44eac02010238244743822921db1661fc7306c3044faac1e373906fdb5582d9454352b3b31c6c01549a0cde570a49b9200680341a6c78e87635480ff00bdd85a0018452ac02e0a712000153957451d3cc83a71e26b65ea2391a1b16713d2d0049ff4a47599e0c65447182eca4c900893a74de3ca24c26708fc9d4bf79891ca384b0d5f98618bc3acec4f0c6bffd002de6fd839a418f47e83404aed285fc0235
Lorsquej'essaie d'injecter latransaction signéebrute ("signée") avec lenœud RPC,je reçois la réponse:
[
{
"genre": "temporaire",
"ID": "échec",
"MSG": "Erreur lors de l'application de l'opération oozxcektufcw8phcrskvuwphih1knz12eohx1mp8akinju9fpys: \nrefused (erreur: \n la signature d'opérationestinvalide \n)"
}
]
Jepeux vérifier la signature (SECP256K1) de latransaction contre des outilstierset vérifie (c'est-----simplement signé la valeur «hachage» correctement). J'ai utilisé lenoeud RPC 'Forge' Endpointpour vérifier la sérialisation correcte avec JSON suivant:
{"branche": "bkixcfn1ztxnnntwsrarrswzvfc6om7radwq5mtqgx6ry4p2uhe",
"Contenu": [{
"genre": "révèle",
"Frais": "1300",
"gas_limit": "10100",
"Storage_Limit": "300",
"Public_key": "SPPK7ZJMVKGUWNJYZKOQEYANHORRR1JXMQGHLJEXSP3UQ98XKCHFIUS",
"Compteur": "2622172",
"Source": "TZ2G2ZY3SGYCUH1EQQRX9Q62CCPSKGCLPPDT"},{
"type": "transaction",
"Frais": "1520",
"gas_limit": "10500",
"Storage_Limit": "300",
"montant": "300000",
"Compteur": "2622173"
"destination": "tz2fwbnxhuxvpaucr1af3ux84z6jelxrdyxd"
"Source": "TZ2G2ZY3SGYCUH1EQQRX9Q62CCPSKGCLPPDT"}]
}
et a également été capable de vérifiernon signé=> hachage avec code Python:
Cela semblepresque être unmauvaismessage d'erreur. Quelqu'unpeut-ilm'aider à comprendre quelest leproblème dematransaction?
P.s. dans une deuxième course avec lemême logiciel quej'aipugénérer unetransactionentièrement valide: 007fc1ecd6a56046aaaeab78bbfa1c889eb8f502b66c720bf1ac3b40ee9ecf6d6b01549a0cde570a49b9200680341a6c78e87635480f940adc85a001f44eac02010238244743822921db1661fc7306c3044faac1e373906fdb5582d9454352b3b31c6c01549a0cde570a49b9200680341a6c78e87635480ff00bdd85a0018452ac02c09a0c000153957451d3cc83a71e26b65ea2391a1b16713d2d00231176ec0cf55e3f04d5de633c33b38a6370ad2c37fd31c4c45e12ec9f1466753c8137f5dee8105bd5cc3d4ce780f51ec01d5adb21893e75eef4b960189818a3
Unetroisième course a denouveau étéjugéeinvalide.