Skip to content

Commit a416449

Browse files
Refactor ExecutionPayloadResult (#8702)
1 parent 0067d57 commit a416449

File tree

1 file changed

+39
-54
lines changed

1 file changed

+39
-54
lines changed

ethereum/spec/src/main/java/tech/pegasys/teku/spec/datastructures/execution/ExecutionPayloadResult.java

Lines changed: 39 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -21,43 +21,52 @@
2121
import tech.pegasys.teku.spec.datastructures.builder.BuilderBid;
2222

2323
/**
24-
* In non-blinded flow, both {@link #executionPayloadFuture} and {@link #blobsBundleFuture} would be
25-
* present. The {@link #blobsBundleFuture} will have a value when the future is complete only after
26-
* Deneb, otherwise it will be empty.
24+
* In non-blinded flow, {@link #getPayloadResponseFuture} will be present.
2725
*
28-
* <p>In blinded flow, {@link #builderBidOrFallbackDataFuture} would be present
26+
* <p>In blinded flow, {@link #builderBidOrFallbackDataFuture} would be present.
2927
*/
3028
public class ExecutionPayloadResult {
3129

3230
private final ExecutionPayloadContext executionPayloadContext;
33-
private final Optional<SafeFuture<ExecutionPayload>> executionPayloadFuture;
34-
private final Optional<SafeFuture<Optional<BlobsBundle>>> blobsBundleFuture;
31+
private final Optional<SafeFuture<GetPayloadResponse>> getPayloadResponseFuture;
3532
private final Optional<SafeFuture<BuilderBidOrFallbackData>> builderBidOrFallbackDataFuture;
36-
private final SafeFuture<UInt256> executionPayloadValueFuture;
3733

3834
private ExecutionPayloadResult(
3935
final ExecutionPayloadContext executionPayloadContext,
40-
final Optional<SafeFuture<ExecutionPayload>> executionPayloadFuture,
41-
final Optional<SafeFuture<Optional<BlobsBundle>>> blobsBundleFuture,
42-
final Optional<SafeFuture<BuilderBidOrFallbackData>> builderBidOrFallbackDataFuture,
43-
final SafeFuture<UInt256> executionPayloadValueFuture) {
36+
final Optional<SafeFuture<GetPayloadResponse>> getPayloadResponseFuture,
37+
final Optional<SafeFuture<BuilderBidOrFallbackData>> builderBidOrFallbackDataFuture) {
4438
this.executionPayloadContext = executionPayloadContext;
45-
this.executionPayloadFuture = executionPayloadFuture;
46-
this.blobsBundleFuture = blobsBundleFuture;
39+
this.getPayloadResponseFuture = getPayloadResponseFuture;
4740
this.builderBidOrFallbackDataFuture = builderBidOrFallbackDataFuture;
48-
this.executionPayloadValueFuture = executionPayloadValueFuture;
41+
}
42+
43+
public static ExecutionPayloadResult createForLocalFlow(
44+
final ExecutionPayloadContext executionPayloadContext,
45+
final SafeFuture<GetPayloadResponse> getPayloadResponseFuture) {
46+
return new ExecutionPayloadResult(
47+
executionPayloadContext, Optional.of(getPayloadResponseFuture), Optional.empty());
48+
}
49+
50+
public static ExecutionPayloadResult createForBuilderFlow(
51+
final ExecutionPayloadContext executionPayloadContext,
52+
final SafeFuture<BuilderBidOrFallbackData> builderBidOrFallbackDataFuture) {
53+
return new ExecutionPayloadResult(
54+
executionPayloadContext, Optional.empty(), Optional.of(builderBidOrFallbackDataFuture));
4955
}
5056

5157
public ExecutionPayloadContext getExecutionPayloadContext() {
5258
return executionPayloadContext;
5359
}
5460

5561
public Optional<SafeFuture<ExecutionPayload>> getExecutionPayloadFutureFromLocalFlow() {
56-
return executionPayloadFuture;
62+
return getPayloadResponseFuture.map(
63+
getPayloadResponse ->
64+
getPayloadResponse.thenApply(GetPayloadResponse::getExecutionPayload));
5765
}
5866

5967
public Optional<SafeFuture<Optional<BlobsBundle>>> getBlobsBundleFutureFromLocalFlow() {
60-
return blobsBundleFuture;
68+
return getPayloadResponseFuture.map(
69+
getPayloadResponse -> getPayloadResponse.thenApply(GetPayloadResponse::getBlobsBundle));
6170
}
6271

6372
public Optional<SafeFuture<BuilderBidOrFallbackData>> getBuilderBidOrFallbackDataFuture() {
@@ -68,31 +77,21 @@ public Optional<SafeFuture<BuilderBidOrFallbackData>> getBuilderBidOrFallbackDat
6877
* @return the value from the local payload, the builder bid or the local fallback payload
6978
*/
7079
public SafeFuture<UInt256> getExecutionPayloadValueFuture() {
71-
return executionPayloadValueFuture;
80+
return getPayloadResponseFuture
81+
.map(
82+
getPayloadResponse ->
83+
getPayloadResponse.thenApply(GetPayloadResponse::getExecutionPayloadValue))
84+
.orElseGet(this::getExecutionPayloadValueFutureFromBuilderFlow);
7285
}
7386

7487
public boolean isFromLocalFlow() {
75-
return executionPayloadFuture.isPresent();
88+
return getPayloadResponseFuture.isPresent();
7689
}
7790

78-
public static ExecutionPayloadResult createForLocalFlow(
79-
final ExecutionPayloadContext executionPayloadContext,
80-
final SafeFuture<GetPayloadResponse> getPayloadResponseFuture) {
81-
final SafeFuture<UInt256> executionPayloadValueFuture =
82-
getPayloadResponseFuture.thenApply(GetPayloadResponse::getExecutionPayloadValue);
83-
return new ExecutionPayloadResult(
84-
executionPayloadContext,
85-
Optional.of(getPayloadResponseFuture.thenApply(GetPayloadResponse::getExecutionPayload)),
86-
Optional.of(getPayloadResponseFuture.thenApply(GetPayloadResponse::getBlobsBundle)),
87-
Optional.empty(),
88-
executionPayloadValueFuture);
89-
}
90-
91-
public static ExecutionPayloadResult createForBuilderFlow(
92-
final ExecutionPayloadContext executionPayloadContext,
93-
final SafeFuture<BuilderBidOrFallbackData> builderBidOrFallbackDataFuture) {
94-
final SafeFuture<UInt256> executionPayloadValueFuture =
95-
builderBidOrFallbackDataFuture.thenApply(
91+
private SafeFuture<UInt256> getExecutionPayloadValueFutureFromBuilderFlow() {
92+
return builderBidOrFallbackDataFuture
93+
.orElseThrow()
94+
.thenApply(
9695
builderBidOrFallbackData ->
9796
builderBidOrFallbackData
9897
.getBuilderBid()
@@ -104,12 +103,6 @@ public static ExecutionPayloadResult createForBuilderFlow(
104103
builderBidOrFallbackData
105104
.getFallbackDataRequired()
106105
.getExecutionPayloadValue()));
107-
return new ExecutionPayloadResult(
108-
executionPayloadContext,
109-
Optional.empty(),
110-
Optional.empty(),
111-
Optional.of(builderBidOrFallbackDataFuture),
112-
executionPayloadValueFuture);
113106
}
114107

115108
@Override
@@ -122,30 +115,22 @@ public boolean equals(final Object o) {
122115
}
123116
final ExecutionPayloadResult that = (ExecutionPayloadResult) o;
124117
return Objects.equals(executionPayloadContext, that.executionPayloadContext)
125-
&& Objects.equals(executionPayloadFuture, that.executionPayloadFuture)
126-
&& Objects.equals(blobsBundleFuture, that.blobsBundleFuture)
127-
&& Objects.equals(builderBidOrFallbackDataFuture, that.builderBidOrFallbackDataFuture)
128-
&& Objects.equals(executionPayloadValueFuture, that.executionPayloadValueFuture);
118+
&& Objects.equals(getPayloadResponseFuture, that.getPayloadResponseFuture)
119+
&& Objects.equals(builderBidOrFallbackDataFuture, that.builderBidOrFallbackDataFuture);
129120
}
130121

131122
@Override
132123
public int hashCode() {
133124
return Objects.hash(
134-
executionPayloadContext,
135-
executionPayloadFuture,
136-
blobsBundleFuture,
137-
builderBidOrFallbackDataFuture,
138-
executionPayloadValueFuture);
125+
executionPayloadContext, getPayloadResponseFuture, builderBidOrFallbackDataFuture);
139126
}
140127

141128
@Override
142129
public String toString() {
143130
return MoreObjects.toStringHelper(this)
144131
.add("executionPayloadContext", executionPayloadContext)
145-
.add("executionPayloadFuture", executionPayloadFuture)
146-
.add("blobsBundleFuture", blobsBundleFuture)
132+
.add("getPayloadResponseFuture", getPayloadResponseFuture)
147133
.add("builderBidOrFallbackDataFuture", builderBidOrFallbackDataFuture)
148-
.add("executionPayloadValueFuture", executionPayloadValueFuture)
149134
.toString();
150135
}
151136
}

0 commit comments

Comments
 (0)