Skip to content

Commit 763d1de

Browse files
committed
Test that transaction type is correct if authorizations present in call param
Signed-off-by: Miroslav Kovar <miroslavkovar@protonmail.com>
1 parent d304185 commit 763d1de

File tree

2 files changed

+46
-4
lines changed

2 files changed

+46
-4
lines changed

ethereum/core/src/test/java/org/hyperledger/besu/ethereum/transaction/CallParameterTest.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -152,13 +152,11 @@ public void deserializesAuthorizationList() throws JsonProcessingException {
152152
assertThat(auth.r())
153153
.isEqualTo(
154154
new BigInteger(
155-
"462a70678128d9dd8f5b8010aaecddda1ba9ad767f0807c341f38d4dcb7eb893",
156-
16));
155+
"462a70678128d9dd8f5b8010aaecddda1ba9ad767f0807c341f38d4dcb7eb893", 16));
157156
assertThat(auth.s())
158157
.isEqualTo(
159158
new BigInteger(
160-
"645f7afd51a86bafe8939c8498fc89769918a38213859843ad7b19ffd4273a48",
161-
16));
159+
"645f7afd51a86bafe8939c8498fc89769918a38213859843ad7b19ffd4273a48", 16));
162160
});
163161
}
164162
}

ethereum/core/src/test/java/org/hyperledger/besu/ethereum/transaction/TransactionSimulatorTest.java

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import org.hyperledger.besu.ethereum.core.BlockHeader;
4141
import org.hyperledger.besu.ethereum.core.BlockHeaderFunctions;
4242
import org.hyperledger.besu.ethereum.core.BlockHeaderTestFixture;
43+
import org.hyperledger.besu.ethereum.core.CodeDelegation;
4344
import org.hyperledger.besu.ethereum.core.Difficulty;
4445
import org.hyperledger.besu.ethereum.core.MiningConfiguration;
4546
import org.hyperledger.besu.ethereum.core.MutableWorldState;
@@ -59,9 +60,11 @@
5960
import org.hyperledger.besu.evm.account.Account;
6061
import org.hyperledger.besu.evm.account.MutableAccount;
6162
import org.hyperledger.besu.evm.gascalculator.FrontierGasCalculator;
63+
import org.hyperledger.besu.evm.tracing.OperationTracer;
6264
import org.hyperledger.besu.evm.worldstate.WorldUpdater;
6365

6466
import java.math.BigInteger;
67+
import java.util.List;
6568
import java.util.Map;
6669
import java.util.Optional;
6770
import java.util.OptionalLong;
@@ -923,6 +926,47 @@ public void shouldSimulateLegacyTransactionWhenBaseFeeNotZero() {
923926
assertThat(result.get().isSuccessful()).isTrue();
924927
}
925928

929+
@Test
930+
public void shouldGuessDelegateCodeTransactionTypeWhenAuthorizationsPresent() {
931+
final CodeDelegation delegation =
932+
new CodeDelegation(BigInteger.ONE, Address.fromHexString("0x1"), 42L, FAKE_SIGNATURE);
933+
934+
final CallParameter callParameter =
935+
legacyTransactionCallParameterBuilder()
936+
.codeDelegationAuthorizations(List.of(delegation))
937+
.build();
938+
939+
final BlockHeader blockHeader = mockBlockchainAndWorldState(callParameter);
940+
941+
mockProtocolSpecForProcessWithWorldUpdater();
942+
943+
final Transaction expectedTx =
944+
Transaction.builder()
945+
.chainId(BigInteger.ONE)
946+
.nonce(1L)
947+
.gasLimit(blockHeader.getGasLimit())
948+
.sender(callParameter.getSender().orElseThrow())
949+
.to(callParameter.getTo().orElseThrow())
950+
.value(callParameter.getValue().orElseThrow())
951+
.payload(callParameter.getPayload().orElseThrow())
952+
.signature(FAKE_SIGNATURE)
953+
.codeDelegations(List.of(delegation))
954+
.guessType()
955+
.build();
956+
957+
mockProcessorStatusForTransaction(expectedTx, Status.SUCCESSFUL);
958+
959+
final Optional<TransactionSimulatorResult> result =
960+
uncappedTransactionSimulator.process(
961+
callParameter,
962+
TransactionValidationParams.transactionSimulator(),
963+
OperationTracer.NO_TRACING,
964+
blockHeader);
965+
966+
assertThat(result).isPresent();
967+
assertThat(result.get().transaction().getType()).isEqualTo(TransactionType.DELEGATE_CODE);
968+
}
969+
926970
private BlockHeader mockBlockchainAndWorldState(final CallParameter callParameter) {
927971
final BlockHeader blockHeader =
928972
mockBlockHeader(Hash.ZERO, 1L, Wei.ONE, DEFAULT_BLOCK_GAS_LIMIT);

0 commit comments

Comments
 (0)