Firma non valida per la transazione Tezos
2 risposta
- voti
-
- 2020-04-24
Esistono duepunti EC validi che corrispondono alla stessafirma,ma alcuniblockchain limitano l'utilizzo a uno di questi duepunti ECperevitare lamalleabilità (=èfacile convertire lafirmanell'altro valore dellafirma,e quindi creare una secondatransazione valida che avrebbe un ID ditransazione diverso senza avere accesso alla chiaveprivata).
Modifica: Latransazione valida corrispondente è:
008f1d96e2783258ff663f03dacfe946c026a5d194c73d1987b3da73fadea7d46b01549a0cde570a49b9200680341a6c78e87635480f940adc85a001f44eac02010238244743822921db1661fc7306c3044faac1e373906fdb5582d9454352b3b31c6c01549a0cde570a49b9200680341a6c78e87635480ff00bdd85a0018452ac02e0a712000153957451d3cc83a71e26b65ea2391a1b16713d2d0049ff4a47599e0c65447182eca4c900893a74de3ca24c26708fc9d4bf79891ca384b0d5f98618bc3acec4f0c6bffd002de6fd839a418f47e83404aed285fc0235
È stato creato senzafirmarenuovamentee senza accesso alla chiaveprivata.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
Assicurati di aver rivelato la chiavepubblica solo una voltae assicurati di aver correttamenteincement counter.
Inoltre,dai un'occhiata a Netezos ,C # Tezos SDK. Ecco unesempio di comefalsificare,firmaree inviare unatransazione:
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));
Senonfunzionanemmeno con Netezos,controlla seiltuonodo RPC è sincronizzatoe aggiornato.
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.
-
Inbase al JSONnella domanda originalee allo stato dell'indirizzo delmittente [link] (https://tezos.id/accounts/tz2G2Zy3sgYCuh1EQqrx9Q62CcpSkgcLPPDt),il contatoree il rivelatore sembrano aposto?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
-
Ti suggerisco di utilizzare TzKTexplorer,perchémostrainformazionipiù utili,comprese le operazioninon riuscitein mempool https://tzkt.io/tz2G2Zy3sgYCuh1EQqrx9Q62CcpSkgcLPPDt/operations.Quindi,quello che vedo sono duefallitinelle operazioni dimempool con contatori `..72`,` ..73` da `12:01:49 UTC`.Nellatua domanda vedo JSON congli stessi contatori MA conil ramo https://tzkt.io/BKiXcfN1ZTXnNNbTWSRArSWzVFc6om7radWq5mTqGX6rY4P2Uhe - da `12:55:12 UTC`.Quindi,presumo chetu abbiaprovato ainviare le operazioni coni contatori `..72`,` ..73` cheeranogià statiin 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
-
Ingenerale,iltuo JSON sembra aposto,mailfatto che ci siano stati "cloni"non riuscitiin mempoolpotrebbe causare l'errore che hai descritto.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
-
Grazieper la risposta rapida.Latransazionenelmempool è latransazione riuscita a cuimi riferivo,tuttavia oranon è validaperchéil ramo è obsoleto,se ciò dovessebloccare letransazionifuture,completerebbeilblocco dell'accounte dovrebbeessere reso unbug criticonelnodo Tezos,quindinonpenso che dovrebbeessere la causa dell'errore.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
-
Sfortunatamentenonpotròtestare lafirma con Netezospoiché recupero lafirma da un HSMe non riesco ad accedere alla chiaveprivata.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
Sto scrivendo un software diportafogliopersonalizzato completoper Tezosin C #e ho ottenuto la seguentetransazionenonelaborata:
UnsignedHex: 008f1d96e2783258ff663f03dacfe946c026a5d194c73d1987b3da73fadea7d46b01549a0cde570a49b9200680341a6c78e87635480f940adc85a001f44eac02010238244743822921db1661fc7306c3044faac1e373906fdb5582d9454352b3b31c6c01549a0cde570a49b9200680341a6c78e87635480ff00bdd85a0018452ac02e0a712000153957451d3cc83a71e26b65ea2391a1b16713d2d00
HashPreimage: 03008f1d96e2783258ff663f03dacfe946c026a5d194c73d1987b3da73fadea7d46b01549a0cde570a49b9200680341a6c78e87635480f940adc85a001f44eac02010238244743822921db1661fc7306c3044faac1e373906fdb5582d9454352b3b31c6c01549a0cde570a49b9200680341a6c78e87635480ff00bdd85a0018452ac02e0a712000153957451d3cc83a71e26b65ea2391a1b16713d2d00
Hash: 8541434de6c77aaa3e6a4d4e341717a5c96b14e990183fd33e8157ef53f38579
Firmato: 008f1d96e2783258ff663f03dacfe946c026a5d194c73d1987b3da73fadea7d46b01549a0cde570a49b9200680341a6c78e87635480f940adc85a001f44eac02010238244743822921db1661fc7306c3044faac1e373906fdb5582d9454352b3b31c6c01549a0cde570a49b9200680341a6c78e87635480ff00bdd85a0018452ac02e0a712000153957451d3cc83a71e26b65ea2391a1b16713d2d0049ff4a47599e0c65447182eca4c900893a74de3ca24c26708fc9d4bf79891ca384b0d5f98618bc3acec4f0c6bffd002de6fd839a418f47e83404aed285fc0235
Quandoprovo ainserire latransazionefirmatanonelaborata ("Signed") conilnodo rpc ottengo la risposta:
[
{
"kind": "temporaneo",
"id": "fallimento",
"msg": "Errore durante l'applicazione dell'operazione oozXCEKTUFcw8PHcrskvuWphiH1kNz12eohX1mp8AKinJU9fPYS: \nrefused (Errore: \n Lafirma dell'operazionenon è valida \n)"
}
]
Posso verificare lafirma (secp256k1) dellatransazione con strumenti diterzepartie verifica (che èpuramente cheil valore "Hash" siafirmato correttamente). Ho utilizzato l'endpoint "Forge" delnodo rpcper verificare la corretta serializzazione conil seguente JSON:
{"branch": "BKiXcfN1ZTXnNNbTWSRArSWzVFc6om7radWq5mTqGX6rY4P2Uhe",
"contenuti": [{
"kind": "rivela",
"tariffa": "1300",
"gas_limit": "10100",
"storage_limit": "300",
"public_key": "sppk7ZjMvKgUwnjYZKoQEYaNhorr1NJxmqgHLjExsP3uq98XKChFius",
"counter": "2622172",
"source": "tz2G2Zy3sgYCuh1EQqrx9Q62CcpSkgcLPPDt"},{
"kind": "transazione",
"fee": "1520",
"gas_limit": "10500",
"storage_limit": "300",
"amount": "300000",
"counter": "2622173",
"destinazione": "tz2FwBnXhuXvPAUcr1aF3uX84Z6JELxrdYxD",
"source": "tz2G2Zy3sgYCuh1EQqrx9Q62CcpSkgcLPPDt"}]
}
Ed è stato anchein grado di verificare UnsignedRaw=> Hash con codice Python:
Sembra quasi un cattivomessaggio dierrore. Qualcunopuò aiutarmi a capire qual èilproblema con lamiatransazione?
P.s.in una seconda corsa con lo stesso software che è statoin grado digenerare unatransazionepienamente valida: 007fc1ecd6a56046aaaeab78bbfa1c889eb8f502b66c720bf1ac3b40ee9ecf6d6b01549a0cde570a49b9200680341a6c78e87635480f940adc85a001f44eac02010238244743822921db1661fc7306c3044faac1e373906fdb5582d9454352b3b31c6c01549a0cde570a49b9200680341a6c78e87635480ff00bdd85a0018452ac02c09a0c000153957451d3cc83a71e26b65ea2391a1b16713d2d00231176ec0cf55e3f04d5de633c33b38a6370ad2c37fd31c4c45e12ec9f1466753c8137f5dee8105bd5cc3d4ce780f51ec01d5adb21893e75eef4b960189818a3
Unaterzaesecuzione è statanuovamente consideratanon valida.