21
21
import tech .pegasys .teku .spec .datastructures .builder .BuilderBid ;
22
22
23
23
/**
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.
27
25
*
28
- * <p>In blinded flow, {@link #builderBidOrFallbackDataFuture} would be present
26
+ * <p>In blinded flow, {@link #builderBidOrFallbackDataFuture} would be present.
29
27
*/
30
28
public class ExecutionPayloadResult {
31
29
32
30
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 ;
35
32
private final Optional <SafeFuture <BuilderBidOrFallbackData >> builderBidOrFallbackDataFuture ;
36
- private final SafeFuture <UInt256 > executionPayloadValueFuture ;
37
33
38
34
private ExecutionPayloadResult (
39
35
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 ) {
44
38
this .executionPayloadContext = executionPayloadContext ;
45
- this .executionPayloadFuture = executionPayloadFuture ;
46
- this .blobsBundleFuture = blobsBundleFuture ;
39
+ this .getPayloadResponseFuture = getPayloadResponseFuture ;
47
40
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 ));
49
55
}
50
56
51
57
public ExecutionPayloadContext getExecutionPayloadContext () {
52
58
return executionPayloadContext ;
53
59
}
54
60
55
61
public Optional <SafeFuture <ExecutionPayload >> getExecutionPayloadFutureFromLocalFlow () {
56
- return executionPayloadFuture ;
62
+ return getPayloadResponseFuture .map (
63
+ getPayloadResponse ->
64
+ getPayloadResponse .thenApply (GetPayloadResponse ::getExecutionPayload ));
57
65
}
58
66
59
67
public Optional <SafeFuture <Optional <BlobsBundle >>> getBlobsBundleFutureFromLocalFlow () {
60
- return blobsBundleFuture ;
68
+ return getPayloadResponseFuture .map (
69
+ getPayloadResponse -> getPayloadResponse .thenApply (GetPayloadResponse ::getBlobsBundle ));
61
70
}
62
71
63
72
public Optional <SafeFuture <BuilderBidOrFallbackData >> getBuilderBidOrFallbackDataFuture () {
@@ -68,31 +77,21 @@ public Optional<SafeFuture<BuilderBidOrFallbackData>> getBuilderBidOrFallbackDat
68
77
* @return the value from the local payload, the builder bid or the local fallback payload
69
78
*/
70
79
public SafeFuture <UInt256 > getExecutionPayloadValueFuture () {
71
- return executionPayloadValueFuture ;
80
+ return getPayloadResponseFuture
81
+ .map (
82
+ getPayloadResponse ->
83
+ getPayloadResponse .thenApply (GetPayloadResponse ::getExecutionPayloadValue ))
84
+ .orElseGet (this ::getExecutionPayloadValueFutureFromBuilderFlow );
72
85
}
73
86
74
87
public boolean isFromLocalFlow () {
75
- return executionPayloadFuture .isPresent ();
88
+ return getPayloadResponseFuture .isPresent ();
76
89
}
77
90
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 (
96
95
builderBidOrFallbackData ->
97
96
builderBidOrFallbackData
98
97
.getBuilderBid ()
@@ -104,12 +103,6 @@ public static ExecutionPayloadResult createForBuilderFlow(
104
103
builderBidOrFallbackData
105
104
.getFallbackDataRequired ()
106
105
.getExecutionPayloadValue ()));
107
- return new ExecutionPayloadResult (
108
- executionPayloadContext ,
109
- Optional .empty (),
110
- Optional .empty (),
111
- Optional .of (builderBidOrFallbackDataFuture ),
112
- executionPayloadValueFuture );
113
106
}
114
107
115
108
@ Override
@@ -122,30 +115,22 @@ public boolean equals(final Object o) {
122
115
}
123
116
final ExecutionPayloadResult that = (ExecutionPayloadResult ) o ;
124
117
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 );
129
120
}
130
121
131
122
@ Override
132
123
public int hashCode () {
133
124
return Objects .hash (
134
- executionPayloadContext ,
135
- executionPayloadFuture ,
136
- blobsBundleFuture ,
137
- builderBidOrFallbackDataFuture ,
138
- executionPayloadValueFuture );
125
+ executionPayloadContext , getPayloadResponseFuture , builderBidOrFallbackDataFuture );
139
126
}
140
127
141
128
@ Override
142
129
public String toString () {
143
130
return MoreObjects .toStringHelper (this )
144
131
.add ("executionPayloadContext" , executionPayloadContext )
145
- .add ("executionPayloadFuture" , executionPayloadFuture )
146
- .add ("blobsBundleFuture" , blobsBundleFuture )
132
+ .add ("getPayloadResponseFuture" , getPayloadResponseFuture )
147
133
.add ("builderBidOrFallbackDataFuture" , builderBidOrFallbackDataFuture )
148
- .add ("executionPayloadValueFuture" , executionPayloadValueFuture )
149
134
.toString ();
150
135
}
151
136
}
0 commit comments