@@ -14,12 +14,18 @@ namespace stellar
14
14
{
15
15
LedgerCloseMetaFrame::LedgerCloseMetaFrame (uint32_t protocolVersion)
16
16
{
17
- // The LedgerCloseMeta v() switch can be in 2 positions, 0 and 1 . We
17
+ // The LedgerCloseMeta v() switch can be in 3 positions, 0, 1, and 2 . We
18
18
// currently support all of these cases, depending on both compile time
19
19
// and runtime conditions.
20
20
mVersion = 0 ;
21
21
22
- if (protocolVersionStartsFrom (protocolVersion, SOROBAN_PROTOCOL_VERSION))
22
+ if (protocolVersionStartsFrom (protocolVersion,
23
+ PARALLEL_SOROBAN_PHASE_PROTOCOL_VERSION))
24
+ {
25
+ mVersion = 2 ;
26
+ }
27
+ else if (protocolVersionStartsFrom (protocolVersion,
28
+ SOROBAN_PROTOCOL_VERSION))
23
29
{
24
30
mVersion = 1 ;
25
31
}
@@ -35,6 +41,8 @@ LedgerCloseMetaFrame::ledgerHeader()
35
41
return mLedgerCloseMeta .v0 ().ledgerHeader ;
36
42
case 1 :
37
43
return mLedgerCloseMeta .v1 ().ledgerHeader ;
44
+ case 2 :
45
+ return mLedgerCloseMeta .v2 ().ledgerHeader ;
38
46
default :
39
47
releaseAssert (false );
40
48
}
@@ -51,6 +59,9 @@ LedgerCloseMetaFrame::reserveTxProcessing(size_t n)
51
59
case 1 :
52
60
mLedgerCloseMeta .v1 ().txProcessing .reserve (n);
53
61
break ;
62
+ case 2 :
63
+ mLedgerCloseMeta .v2 ().txProcessing .reserve (n);
64
+ break ;
54
65
default :
55
66
releaseAssert (false );
56
67
}
@@ -67,6 +78,9 @@ LedgerCloseMetaFrame::pushTxProcessingEntry()
67
78
case 1 :
68
79
mLedgerCloseMeta .v1 ().txProcessing .emplace_back ();
69
80
break ;
81
+ case 2 :
82
+ mLedgerCloseMeta .v2 ().txProcessing .emplace_back ();
83
+ break ;
70
84
default :
71
85
releaseAssert (false );
72
86
}
@@ -84,6 +98,9 @@ LedgerCloseMetaFrame::setLastTxProcessingFeeProcessingChanges(
84
98
case 1 :
85
99
mLedgerCloseMeta .v1 ().txProcessing .back ().feeProcessing = changes;
86
100
break ;
101
+ case 2 :
102
+ mLedgerCloseMeta .v2 ().txProcessing .back ().feeProcessing = changes;
103
+ break ;
87
104
default :
88
105
releaseAssert (false );
89
106
}
@@ -109,11 +126,27 @@ LedgerCloseMetaFrame::setTxProcessingMetaAndResultPair(
109
126
txp.result = std::move (rp);
110
127
}
111
128
break ;
129
+ case 2 :
130
+ {
131
+ auto & txp = mLedgerCloseMeta .v2 ().txProcessing .at (index );
132
+ txp.txApplyProcessing = tm ;
133
+ txp.result = std::move (rp);
134
+ }
135
+ break ;
112
136
default :
113
137
releaseAssert (false );
114
138
}
115
139
}
116
140
141
+ void
142
+ LedgerCloseMetaFrame::setPostTxApplyFeeProcessingChanges (
143
+ LedgerEntryChanges const & changes, int index)
144
+ {
145
+ releaseAssert (mVersion == 2 );
146
+ mLedgerCloseMeta .v2 ().txProcessing .at (index ).postTxApplyFeeProcessing =
147
+ changes;
148
+ }
149
+
117
150
xdr::xvector<UpgradeEntryMeta>&
118
151
LedgerCloseMetaFrame::upgradesProcessing ()
119
152
{
@@ -123,6 +156,8 @@ LedgerCloseMetaFrame::upgradesProcessing()
123
156
return mLedgerCloseMeta .v0 ().upgradesProcessing ;
124
157
case 1 :
125
158
return mLedgerCloseMeta .v1 ().upgradesProcessing ;
159
+ case 2 :
160
+ return mLedgerCloseMeta .v2 ().upgradesProcessing ;
126
161
default :
127
162
releaseAssert (false );
128
163
}
@@ -139,6 +174,9 @@ LedgerCloseMetaFrame::populateTxSet(TxSetXDRFrame const& txSet)
139
174
case 1 :
140
175
txSet.toXDR (mLedgerCloseMeta .v1 ().txSet );
141
176
break ;
177
+ case 2 :
178
+ txSet.toXDR (mLedgerCloseMeta .v2 ().txSet );
179
+ break ;
142
180
default :
143
181
releaseAssert (false );
144
182
}
@@ -148,35 +186,60 @@ void
148
186
LedgerCloseMetaFrame::populateEvictedEntries (
149
187
EvictedStateVectors const & evictedState)
150
188
{
151
- releaseAssert (mVersion == 1 );
189
+ releaseAssert (mVersion == 1 || mVersion == 2 );
190
+ auto & evictedTemporaryLedgerKeys =
191
+ mVersion == 1 ? mLedgerCloseMeta .v1 ().evictedTemporaryLedgerKeys
192
+ : mLedgerCloseMeta .v2 ().evictedTemporaryLedgerKeys ;
152
193
for (auto const & key : evictedState.deletedKeys )
153
194
{
154
195
releaseAssertOrThrow (isTemporaryEntry (key) || key.type () == TTL);
155
- mLedgerCloseMeta . v1 (). evictedTemporaryLedgerKeys .emplace_back (key);
196
+ evictedTemporaryLedgerKeys.emplace_back (key);
156
197
}
157
198
for (auto const & entry : evictedState.archivedEntries )
158
199
{
159
200
releaseAssertOrThrow (isPersistentEntry (entry.data ));
160
201
// Unfortunately, for legacy purposes, evictedTemporaryLedgerKeys is
161
202
// misnamed and stores all evicted keys, both temp and persistent.
162
- mLedgerCloseMeta .v1 ().evictedTemporaryLedgerKeys .emplace_back (
163
- LedgerEntryKey (entry));
203
+ evictedTemporaryLedgerKeys.emplace_back (LedgerEntryKey (entry));
164
204
}
165
205
}
166
206
167
207
void
168
208
LedgerCloseMetaFrame::setNetworkConfiguration (
169
209
SorobanNetworkConfig const & networkConfig, bool emitExtV1)
170
210
{
171
- releaseAssert (mVersion == 1 );
172
- mLedgerCloseMeta .v1 ().totalByteSizeOfBucketList =
173
- networkConfig.getAverageBucketListSize ();
211
+ releaseAssert (mVersion == 1 || mVersion == 2 );
174
212
175
- if (emitExtV1)
213
+ switch (mVersion )
214
+ {
215
+ case 1 :
176
216
{
177
- mLedgerCloseMeta .v1 ().ext .v (1 );
178
- auto & ext = mLedgerCloseMeta .v1 ().ext .v1 ();
179
- ext.sorobanFeeWrite1KB = networkConfig.feeWrite1KB ();
217
+ mLedgerCloseMeta .v1 ().totalByteSizeOfBucketList =
218
+ networkConfig.getAverageBucketListSize ();
219
+
220
+ if (emitExtV1)
221
+ {
222
+ mLedgerCloseMeta .v1 ().ext .v (1 );
223
+ auto & ext = mLedgerCloseMeta .v1 ().ext .v1 ();
224
+ ext.sorobanFeeWrite1KB = networkConfig.feeWrite1KB ();
225
+ }
226
+ break ;
227
+ }
228
+ case 2 :
229
+ {
230
+ mLedgerCloseMeta .v2 ().totalByteSizeOfBucketList =
231
+ networkConfig.getAverageBucketListSize ();
232
+
233
+ if (emitExtV1)
234
+ {
235
+ mLedgerCloseMeta .v2 ().ext .v (1 );
236
+ auto & ext = mLedgerCloseMeta .v1 ().ext .v1 ();
237
+ ext.sorobanFeeWrite1KB = networkConfig.feeWrite1KB ();
238
+ }
239
+ break ;
240
+ }
241
+ default :
242
+ releaseAssert (false );
180
243
}
181
244
}
182
245
0 commit comments