Skip to content

Commit f317043

Browse files
committed
review comments
Signed-off-by: Danno Ferrin <danno@numisight.com>
1 parent 33bb0b4 commit f317043

File tree

8 files changed

+70
-38
lines changed

8 files changed

+70
-38
lines changed

ethereum/api/src/main/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/methods/EthConfig.java

Lines changed: 39 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,24 @@
1414
*/
1515
package org.hyperledger.besu.ethereum.api.jsonrpc.internal.methods;
1616

17+
import static org.hyperledger.besu.ethereum.mainnet.ParentBeaconBlockRootHelper.BEACON_ROOTS_ADDRESS;
18+
1719
import org.hyperledger.besu.ethereum.api.jsonrpc.RpcMethod;
1820
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.JsonRpcRequestContext;
1921
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.response.JsonRpcResponse;
2022
import org.hyperledger.besu.ethereum.api.jsonrpc.internal.response.JsonRpcSuccessResponse;
2123
import org.hyperledger.besu.ethereum.api.query.BlockchainQueries;
24+
import org.hyperledger.besu.ethereum.core.BlockHeader;
2225
import org.hyperledger.besu.ethereum.mainnet.ProtocolSchedule;
2326
import org.hyperledger.besu.ethereum.mainnet.ProtocolSpec;
27+
import org.hyperledger.besu.ethereum.mainnet.ScheduledProtocolSpec.Hardfork;
2428
import org.hyperledger.besu.ethereum.mainnet.requests.RequestProcessorCoordinator;
29+
import org.hyperledger.besu.evm.EvmSpecVersion;
2530
import org.hyperledger.besu.evm.precompile.PrecompileContractRegistry;
2631

2732
import java.nio.charset.StandardCharsets;
2833
import java.util.Map;
34+
import java.util.Optional;
2935
import java.util.TreeMap;
3036
import java.util.function.Supplier;
3137
import java.util.zip.CRC32;
@@ -54,29 +60,33 @@ public String getName() {
5460

5561
@Override
5662
public JsonRpcResponse response(final JsonRpcRequestContext requestContext) {
57-
var header = blockchain.getBlockchain().getChainHeadHeader();
58-
var current = protocolSchedule.getForNextBlockHeader(header, System.currentTimeMillis() / 1000);
59-
var next = protocolSchedule.getNextProtocolSpec(current);
60-
61-
var currentConfig = generateConfig(current);
62-
var nextConfig = next.map(this::generateConfig).orElse(null);
63+
BlockHeader header = blockchain.getBlockchain().getChainHeadHeader();
64+
ProtocolSpec current =
65+
protocolSchedule.getForNextBlockHeader(header, System.currentTimeMillis() / 1000);
66+
Optional<ProtocolSpec> next = protocolSchedule.getNextProtocolSpec(current);
6367

6468
ObjectNode result = mapperSupplier.get().createObjectNode();
65-
result.put("current", currentConfig);
66-
result.put("currentHash", configHash(currentConfig));
67-
result.put("next", nextConfig);
68-
result.put("nextHash", configHash(nextConfig));
69+
ObjectNode currentNode = result.putObject("current");
70+
generateConfig(currentNode, current);
71+
result.put("currentHash", configHash(currentNode));
72+
if (next.isPresent()) {
73+
ObjectNode nextNode = result.putObject("next");
74+
generateConfig(nextNode, next.get());
75+
result.put("nextHash", configHash(nextNode));
76+
} else {
77+
result.putNull("next");
78+
result.putNull("nextHash");
79+
}
6980

7081
return new JsonRpcSuccessResponse(requestContext.getRequest().getId(), result);
7182
}
7283

73-
JsonNode generateConfig(final ProtocolSpec spec) {
74-
var result = mapperSupplier.get().createObjectNode();
75-
var forkId = protocolSchedule.hardforkFor(x -> x.spec() == spec).orElseThrow();
84+
void generateConfig(final ObjectNode result, final ProtocolSpec spec) {
85+
Hardfork forkId = protocolSchedule.hardforkFor(x -> x.spec() == spec).orElseThrow();
7686

77-
result.put("activation", forkId.milestone());
87+
result.put("activationTime", forkId.milestone());
7888

79-
var blobs = result.putObject("blobs");
89+
ObjectNode blobs = result.putObject("blobSchedule");
8090
blobs.put(
8191
"baseFeeUpdateFraction", spec.getFeeMarket().getBaseFeeUpdateFraction().longValueExact());
8292
blobs.put("max", spec.getGasLimitCalculator().currentBlobGasLimit() / (128 * 1024));
@@ -85,26 +95,27 @@ JsonNode generateConfig(final ProtocolSpec spec) {
8595
result.put(
8696
"chainId", protocolSchedule.getChainId().map(c -> "0x" + c.toString(16)).orElse(null));
8797

88-
var contracts =
98+
PrecompileContractRegistry registry = spec.getPrecompileContractRegistry();
99+
ObjectNode precompiles = result.putObject("precompiles");
100+
registry.getPrecompileAddresses().stream()
101+
.sorted()
102+
.forEach(a -> precompiles.put(a.toHexString(), registry.get(a).getName()));
103+
104+
TreeMap<String, String> systemContracts =
89105
new TreeMap<>(
90106
spec.getRequestProcessorCoordinator()
91107
.map(RequestProcessorCoordinator::getContractConfigs)
92108
.orElse(Map.of()));
93109
spec.getBlockHashProcessor()
94110
.getHistoryContract()
95-
.ifPresent(a -> contracts.put("HISTORY", a.toHexString()));
96-
if (!contracts.isEmpty()) {
97-
var jsonContracts = result.putObject("contracts");
98-
contracts.forEach(jsonContracts::put);
111+
.ifPresent(a -> systemContracts.put("HISTORY_STORAGE_ADDRESS", a.toHexString()));
112+
if (spec.getEvm().getEvmVersion().compareTo(EvmSpecVersion.CANCUN) >= 0) {
113+
systemContracts.put("BEACON_ROOTS_ADDRESS", BEACON_ROOTS_ADDRESS.toHexString());
114+
}
115+
if (!systemContracts.isEmpty()) {
116+
ObjectNode jsonContracts = result.putObject("systemContracts");
117+
systemContracts.forEach(jsonContracts::put);
99118
}
100-
101-
PrecompileContractRegistry registry = spec.getPrecompileContractRegistry();
102-
var precompiles = result.putObject("precompiles");
103-
registry.getPrecompileAddresses().stream()
104-
.sorted()
105-
.forEach(a -> precompiles.put(a.toHexString(), registry.get(a).getName()));
106-
107-
return result;
108119
}
109120

110121
String configHash(final JsonNode node) {

ethereum/api/src/test/resources/org/hyperledger/besu/ethereum/api/jsonrpc/eth/eth_config.json

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
"id": 8,
1111
"result": {
1212
"current": {
13-
"activation": 1444660040,
14-
"blobs": {
13+
"activationTime": 1444660040,
14+
"blobSchedule": {
1515
"baseFeeUpdateFraction": 3338477,
1616
"max": 6,
1717
"target": 3
@@ -22,15 +22,18 @@
2222
"0x0000000000000000000000000000000000000002": "SHA256",
2323
"0x0000000000000000000000000000000000000003": "RIPEMD160",
2424
"0x0000000000000000000000000000000000000004": "ID",
25-
"0x0000000000000000000000000000000000000005": "EXPMOD",
25+
"0x0000000000000000000000000000000000000005": "MODEXP",
2626
"0x0000000000000000000000000000000000000006": "BN256_ADD",
2727
"0x0000000000000000000000000000000000000007": "BN256_MUL",
2828
"0x0000000000000000000000000000000000000008": "BN256_PAIRING",
2929
"0x0000000000000000000000000000000000000009": "BLAKE2F",
3030
"0x000000000000000000000000000000000000000a": "KZG_POINT_EVALUATION"
31+
},
32+
"systemContracts": {
33+
"BEACON_ROOTS_ADDRESS": "0x000f3df6d732807ef1319fb7b8bb8522d0beac02"
3134
}
3235
},
33-
"currentHash": "1b5fbed",
36+
"currentHash": "3025d871",
3437
"next": null,
3538
"nextHash": null
3639
}

ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/requests/DepositRequestProcessor.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,11 @@ private boolean isDepositEvent(final Address depositContractAddress, final Log l
6666
&& log.getTopics().getFirst().equals(DEPOSIT_EVENT_TOPIC);
6767
}
6868

69+
@Override
70+
public Optional<String> getContractName() {
71+
return Optional.of("DEPOSIT_CONTRACT_ADDRESS");
72+
}
73+
6974
@Override
7075
public Optional<Address> getContractAddress() {
7176
return depositContractAddress;

ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/requests/MainnetRequestsProcessor.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,13 @@ public static RequestProcessorCoordinator pragueRequestsProcessors(
2424
.addProcessor(
2525
RequestType.WITHDRAWAL,
2626
new SystemCallRequestProcessor(
27+
"WITHDRAWAL_REQUEST_PREDEPLOY_ADDRESS",
2728
requestContractAddresses.getWithdrawalRequestContractAddress(),
2829
RequestType.WITHDRAWAL))
2930
.addProcessor(
3031
RequestType.CONSOLIDATION,
3132
new SystemCallRequestProcessor(
33+
"CONSOLIDATION_REQUEST_PREDEPLOY_ADDRESS",
3234
requestContractAddresses.getConsolidationRequestContractAddress(),
3335
RequestType.CONSOLIDATION))
3436
.addProcessor(

ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/requests/RequestProcessor.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,7 @@
2222
public interface RequestProcessor {
2323
Request process(final RequestProcessingContext context);
2424

25+
Optional<String> getContractName();
26+
2527
Optional<Address> getContractAddress();
2628
}

ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/requests/RequestProcessorCoordinator.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,12 +65,13 @@ public RequestProcessorCoordinator build() {
6565
}
6666

6767
public Map<String, String> getContractConfigs() {
68-
return processors.entrySet().stream()
68+
return processors.values().stream()
69+
.filter(processor -> processor.getContractAddress().isPresent())
6970
.map(
70-
e ->
71+
processor ->
7172
Map.entry(
72-
e.getKey().toString(),
73-
e.getValue().getContractAddress().map(Address::toHexString).orElse("")))
73+
processor.getContractName().orElse(""),
74+
processor.getContractAddress().map(Address::toHexString).orElse("")))
7475
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
7576
}
7677
}

ethereum/core/src/main/java/org/hyperledger/besu/ethereum/mainnet/requests/SystemCallRequestProcessor.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,13 @@
2828
public class SystemCallRequestProcessor
2929
implements RequestProcessor, BlockContextProcessor<Request, RequestProcessingContext> {
3030

31+
private final String callName;
3132
private final Address callAddress;
3233
private final RequestType requestType;
3334

34-
public SystemCallRequestProcessor(final Address callAddress, final RequestType requestType) {
35+
public SystemCallRequestProcessor(
36+
final String callName, final Address callAddress, final RequestType requestType) {
37+
this.callName = callName;
3538
this.callAddress = callAddress;
3639
this.requestType = requestType;
3740
}
@@ -53,6 +56,11 @@ public Request process(final RequestProcessingContext context) {
5356
return new Request(requestType, systemCallOutput);
5457
}
5558

59+
@Override
60+
public Optional<String> getContractName() {
61+
return Optional.of(callName);
62+
}
63+
5664
@Override
5765
public Optional<Address> getContractAddress() {
5866
return Optional.of(callAddress);

evm/src/main/java/org/hyperledger/besu/evm/precompile/BigIntegerModularExponentiationPrecompiledContract.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public class BigIntegerModularExponentiationPrecompiledContract
5858
* @param gasCalculator the gas calculator
5959
*/
6060
public BigIntegerModularExponentiationPrecompiledContract(final GasCalculator gasCalculator) {
61-
super("EXPMOD", gasCalculator);
61+
super("MODEXP", gasCalculator);
6262
}
6363

6464
/** Disable native Arithmetic libraries. */

0 commit comments

Comments
 (0)