Skip to content

Commit

Permalink
Fix signing transactions in tests (#6397)
Browse files Browse the repository at this point in the history
* fix signing test txs

* add regression test

* fix tests

* one more regression test
  • Loading branch information
marcindsobczak authored Dec 20, 2023
1 parent 7f62918 commit 0415bcf
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 10 deletions.
12 changes: 12 additions & 0 deletions src/Nethermind/Nethermind.Core.Test/Crypto/EthereumEcdsaTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,18 @@ public void Signature_test_sepolia(bool eip155)
Assert.That(address, Is.EqualTo(key.Address));
}

[TestCase(true)]
[TestCase(false)]
public void Signature_test_sepolia_1559(bool eip155)
{
EthereumEcdsa ecdsa = new(BlockchainIds.Sepolia, LimboLogs.Instance);
PrivateKey key = Build.A.PrivateKey.TestObject;
Transaction tx = Build.A.Transaction.WithType(TxType.EIP1559).TestObject;
ecdsa.Sign(key, tx, eip155);
Address? address = ecdsa.RecoverAddress(tx);
Assert.That(address, Is.EqualTo(key.Address));
}

[TestCase(true)]
[TestCase(false)]
public void Signature_test_olympic(bool isEip155Enabled)
Expand Down
8 changes: 3 additions & 5 deletions src/Nethermind/Nethermind.Crypto/EthereumEcdsa.cs
Original file line number Diff line number Diff line change
Expand Up @@ -41,16 +41,14 @@ public void Sign(PrivateKey privateKey, Transaction tx, bool isEip155Enabled)
_logger.Debug(
$"Signing transaction {tx.SenderAddress} -> {tx.To} ({tx.Value}) with data of length {tx.Data?.Length}");

//Keccak hash = Keccak.Compute(Bytes.Concat((byte)tx.Type, Rlp.Encode(tx, true, isEip155Enabled, _chainIdValue).Bytes));

Hash256 hash = Keccak.Compute(Rlp.Encode(tx, true, isEip155Enabled, _chainIdValue).Bytes);
tx.Signature = Sign(privateKey, hash);

if (tx.Type != TxType.Legacy)
{
tx.ChainId = _chainIdValue;
}

Hash256 hash = Keccak.Compute(Rlp.Encode(tx, true, isEip155Enabled, _chainIdValue).Bytes);
tx.Signature = Sign(privateKey, hash);

if (tx.Type == TxType.Legacy && isEip155Enabled)
{
tx.Signature.V = tx.Signature.V + 8 + 2 * _chainIdValue;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ public async Task Eth_pending_transactions_1559_tx()
{
using Context ctx = await Context.CreateWithLondonEnabled();
ctx.Test.AddTransactions(Build.A.Transaction.WithMaxPriorityFeePerGas(6.GWei()).WithMaxFeePerGas(11.GWei()).WithType(TxType.EIP1559).SignedAndResolved(TestItem.PrivateKeyC).TestObject);
const string addedTx = "\"hash\":\"0xc668c8940b7416fe06db0dac853210d6d64fb2e9528c439c135a53106517fca6\",\"nonce\":\"0x0\",\"blockHash\":\"0x0000000000000000000000000000000000000000000000000000000000000000\",\"blockNumber\":null,\"transactionIndex\":null,\"from\":\"0x76e68a8696537e4141926f3e528733af9e237d69\",\"to\":\"0x0000000000000000000000000000000000000000\",\"value\":\"0x1\",\"gasPrice\":\"0x28fa6ae00\",\"maxPriorityFeePerGas\":\"0x165a0bc00\",\"maxFeePerGas\":\"0x28fa6ae00\",\"gas\":\"0x5208\",\"input\":\"0x\",\"chainId\":\"0x1\",\"type\":\"0x2\",\"accessList\":[],\"v\":\"0x1\",\"s\":\"0x24e1404423c47d5c5fd9e0b6205811eaa3052f9acdb91a9c08821c2b7a0db1a4\",\"r\":\"0x408e34747109a32b924c61acb879d628505dbd0dcab15a3b1e3a4cfd589b65d2\",\"yParity\":\"0x1\"";
const string addedTx = "\"hash\":\"0x7544f95c68426cb8a8a5a54889c60849ed96ff317835beb63b4d745cbc078cec\",\"nonce\":\"0x0\",\"blockHash\":\"0x0000000000000000000000000000000000000000000000000000000000000000\",\"blockNumber\":null,\"transactionIndex\":null,\"from\":\"0x76e68a8696537e4141926f3e528733af9e237d69\",\"to\":\"0x0000000000000000000000000000000000000000\",\"value\":\"0x1\",\"gasPrice\":\"0x28fa6ae00\",\"maxPriorityFeePerGas\":\"0x165a0bc00\",\"maxFeePerGas\":\"0x28fa6ae00\",\"gas\":\"0x5208\",\"input\":\"0x\",\"chainId\":\"0x1\",\"type\":\"0x2\",\"accessList\":[],\"v\":\"0x0\",\"s\":\"0x606b869eab1c9d01ff462f887826cb8f349ea8f1b59d0635ae77155b3b84ad86\",\"r\":\"0x63b08cc0a06c88fb1dd79f273736b3463af12c6754f9df764aa222d2693a5d43\",\"yParity\":\"0x0\"";
string serialized = await ctx.Test.TestEthRpc("eth_pendingTransactions");
serialized.Contains(addedTx).Should().BeTrue();
}
Expand All @@ -117,7 +117,7 @@ public async Task Eth_pending_transactions_2930_tx()
{
using Context ctx = await Context.CreateWithLondonEnabled();
ctx.Test.AddTransactions(Build.A.Transaction.WithMaxPriorityFeePerGas(6.GWei()).WithMaxFeePerGas(11.GWei()).WithType(TxType.AccessList).SignedAndResolved(TestItem.PrivateKeyC).TestObject);
const string addedTx = "\"hash\":\"0xa296c4cf8ece2d7788e4a71125133dfd8025fc35cc5ffa3e283bc62b027cf512\",\"nonce\":\"0x0\",\"blockHash\":\"0x0000000000000000000000000000000000000000000000000000000000000000\",\"blockNumber\":null,\"transactionIndex\":null,\"from\":\"0x76e68a8696537e4141926f3e528733af9e237d69\",\"to\":\"0x0000000000000000000000000000000000000000\",\"value\":\"0x1\",\"gasPrice\":\"0x165a0bc00\",\"gas\":\"0x5208\",\"input\":\"0x\",\"chainId\":\"0x1\",\"type\":\"0x1\",\"accessList\":[],\"v\":\"0x0\",\"s\":\"0x2b4cbea82cc417cdf510fb5fb0613a2881f2b8a76cd6cce6a5f77872f5124b44\",\"r\":\"0x925ede2e48031b060e6c4a0c7184eb58e37a19b41a3ba15a2d9767c0c41f6d76\",\"yParity\":\"0x0\"";
const string addedTx = "\"hash\":\"0x4eabe360dc515aadc8e35f75b23803bb86e7186ebf2e58412555b3d0c7750dcc\",\"nonce\":\"0x0\",\"blockHash\":\"0x0000000000000000000000000000000000000000000000000000000000000000\",\"blockNumber\":null,\"transactionIndex\":null,\"from\":\"0x76e68a8696537e4141926f3e528733af9e237d69\",\"to\":\"0x0000000000000000000000000000000000000000\",\"value\":\"0x1\",\"gasPrice\":\"0x165a0bc00\",\"gas\":\"0x5208\",\"input\":\"0x\",\"chainId\":\"0x1\",\"type\":\"0x1\",\"accessList\":[],\"v\":\"0x0\",\"s\":\"0x27e3dde7b07d6d6b50e0d11b29085036e9c8adc12dea52f6f07dd7a0551ff22a\",\"r\":\"0x619cb31fd4aa1c38ae36b31c5d8310f74d9f8ddd94389db91a68deb26737f2dc\",\"yParity\":\"0x0\"";
string serialized = await ctx.Test.TestEthRpc("eth_pendingTransactions");
serialized.Contains(addedTx).Should().BeTrue();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -231,7 +231,7 @@ public async Task getPayload_correctlyEncodeTransactions()
result = new ExecutionPayload
{
BaseFeePerGas = 0,
BlockHash = new("0x5fd61518405272d77fd6cdc8a824a109d75343e32024ee4f6769408454b1823d"),
BlockHash = new("0x28012c3a37c85b37f9dc6db2d874f9c92b5d8d4bb784177c5309a0c6d7af6ef4"),
BlockNumber = 0,
ExtraData = Bytes.FromHexString("0x010203"),
FeeRecipient = Address.Zero,
Expand All @@ -250,7 +250,7 @@ public async Task getPayload_correctlyEncodeTransactions()
Bytes.FromHexString(
"0xf85f800182520894475674cb523a0a2736b7f7534390288fce16982c018025a0634db2f18f24d740be29e03dd217eea5757ed7422680429bdd458c582721b6c2a02f0fa83931c9a99d3448a46b922261447d6a41d8a58992b5596089d15d521102"),
Bytes.FromHexString(
"0x02f8620180011482520894475674cb523a0a2736b7f7534390288fce16982c0180c001a0033e85439a128c42f2ba47ca278f1375ef211e61750018ff21bcd9750d1893f2a04ee981fe5261f8853f95c865232ffdab009abcc7858ca051fb624c49744bf18d")
"0x02f8620180011482520894475674cb523a0a2736b7f7534390288fce16982c0180c001a0db002b398e038bc919b316a214154aa6d9d5e404cb201aa8a151efb92f9fdbbda07bee8ea6915ed54bb07af4cd69b201548fe9aac699978e5c444405dc49f55a36")
},
},
id = 67
Expand Down
15 changes: 14 additions & 1 deletion src/Nethermind/Nethermind.TxPool.Test/TxPoolTests.Blobs.cs
Original file line number Diff line number Diff line change
Expand Up @@ -477,7 +477,7 @@ Transaction GetTx(bool isBlob, UInt256 nonce)

[TestCase(0, 97)]
[TestCase(1, 131320)]
[TestCase(2, 262529)]
[TestCase(2, 262530)]
[TestCase(3, 393737)]
[TestCase(4, 524944)]
[TestCase(5, 656152)]
Expand All @@ -490,5 +490,18 @@ public void should_calculate_size_of_blob_tx_correctly(int numberOfBlobs, int ex
.TestObject;
blobTx.GetLength().Should().Be(expectedLength);
}

[Test]
public void RecoverAddress_should_work_correctly()
{
Transaction tx = Build.A.Transaction
.WithShardBlobTxTypeAndFields()
.WithMaxFeePerGas(1.GWei())
.WithMaxPriorityFeePerGas(1.GWei())
.WithNonce(UInt256.Zero)
.SignedAndResolved(_ethereumEcdsa, TestItem.PrivateKeyA).TestObject;

_ethereumEcdsa.RecoverAddress(tx).Should().Be(tx.SenderAddress);
}
}
}

0 comments on commit 0415bcf

Please sign in to comment.