Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix signing transactions in tests #6397

Merged
merged 4 commits into from
Dec 20, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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);
}
}
}
Loading