@@ -1158,37 +1158,53 @@ func TestLogRebirth(t *testing.T) {
1158
1158
blockchain .SubscribeLogsEvent (newLogCh )
1159
1159
blockchain .SubscribeRemovedLogsEvent (rmLogsCh )
1160
1160
1161
- // This chain contains a single log.
1162
- genDb , chain , _ := GenerateChainWithGenesis (gspec , engine , 2 , func (i int , gen * BlockGen ) {
1163
- if i == 1 {
1164
- tx , err := types .SignTx (types .NewContractCreation (gen .TxNonce (addr1 ), new (big.Int ), 1000000 , gen .header .BaseFee , logCode ), signer , key1 )
1165
- if err != nil {
1166
- t .Fatalf ("failed to create tx: %v" , err )
1161
+ // This chain contains 10 logs.
1162
+ genDb , chain , _ := GenerateChainWithGenesis (gspec , engine , 3 , func (i int , gen * BlockGen ) {
1163
+ if i < 2 {
1164
+ for ii := 0 ; ii < 5 ; ii ++ {
1165
+ tx , err := types .SignNewTx (key1 , signer , & types.LegacyTx {
1166
+ Nonce : gen .TxNonce (addr1 ),
1167
+ GasPrice : gen .header .BaseFee ,
1168
+ Gas : uint64 (1000001 ),
1169
+ Data : logCode ,
1170
+ })
1171
+ if err != nil {
1172
+ t .Fatalf ("failed to create tx: %v" , err )
1173
+ }
1174
+ gen .AddTx (tx )
1167
1175
}
1168
- gen .AddTx (tx )
1169
1176
}
1170
1177
})
1171
1178
if _ , err := blockchain .InsertChain (chain ); err != nil {
1172
1179
t .Fatalf ("failed to insert chain: %v" , err )
1173
1180
}
1174
- checkLogEvents (t , newLogCh , rmLogsCh , 1 , 0 )
1181
+ checkLogEvents (t , newLogCh , rmLogsCh , 10 , 0 )
1175
1182
1176
- // Generate long reorg chain containing another log. Inserting the
1177
- // chain removes one log and adds one.
1178
- _ , forkChain , _ := GenerateChainWithGenesis (gspec , engine , 2 , func (i int , gen * BlockGen ) {
1179
- if i == 1 {
1180
- tx , err := types .SignTx (types .NewContractCreation (gen .TxNonce (addr1 ), new (big.Int ), 1000000 , gen .header .BaseFee , logCode ), signer , key1 )
1183
+ // Generate long reorg chain containing more logs. Inserting the
1184
+ // chain removes one log and adds four.
1185
+ _ , forkChain , _ := GenerateChainWithGenesis (gspec , engine , 3 , func (i int , gen * BlockGen ) {
1186
+ if i == 2 {
1187
+ // The last (head) block is not part of the reorg-chain, we can ignore it
1188
+ return
1189
+ }
1190
+ for ii := 0 ; ii < 5 ; ii ++ {
1191
+ tx , err := types .SignNewTx (key1 , signer , & types.LegacyTx {
1192
+ Nonce : gen .TxNonce (addr1 ),
1193
+ GasPrice : gen .header .BaseFee ,
1194
+ Gas : uint64 (1000000 ),
1195
+ Data : logCode ,
1196
+ })
1181
1197
if err != nil {
1182
1198
t .Fatalf ("failed to create tx: %v" , err )
1183
1199
}
1184
1200
gen .AddTx (tx )
1185
- gen .OffsetTime (- 9 ) // higher block difficulty
1186
1201
}
1202
+ gen .OffsetTime (- 9 ) // higher block difficulty
1187
1203
})
1188
1204
if _ , err := blockchain .InsertChain (forkChain ); err != nil {
1189
1205
t .Fatalf ("failed to insert forked chain: %v" , err )
1190
1206
}
1191
- checkLogEvents (t , newLogCh , rmLogsCh , 1 , 1 )
1207
+ checkLogEvents (t , newLogCh , rmLogsCh , 10 , 10 )
1192
1208
1193
1209
// This chain segment is rooted in the original chain, but doesn't contain any logs.
1194
1210
// When inserting it, the canonical chain switches away from forkChain and re-emits
@@ -1197,7 +1213,7 @@ func TestLogRebirth(t *testing.T) {
1197
1213
if _ , err := blockchain .InsertChain (newBlocks ); err != nil {
1198
1214
t .Fatalf ("failed to insert forked chain: %v" , err )
1199
1215
}
1200
- checkLogEvents (t , newLogCh , rmLogsCh , 1 , 1 )
1216
+ checkLogEvents (t , newLogCh , rmLogsCh , 10 , 10 )
1201
1217
}
1202
1218
1203
1219
// This test is a variation of TestLogRebirth. It verifies that log events are emitted
@@ -1252,19 +1268,43 @@ func TestSideLogRebirth(t *testing.T) {
1252
1268
1253
1269
func checkLogEvents (t * testing.T , logsCh <- chan []* types.Log , rmLogsCh <- chan RemovedLogsEvent , wantNew , wantRemoved int ) {
1254
1270
t .Helper ()
1255
-
1256
- if len (logsCh ) != wantNew {
1257
- t .Fatalf ("wrong number of log events: got %d, want %d" , len (logsCh ), wantNew )
1258
- }
1259
- if len (rmLogsCh ) != wantRemoved {
1260
- t .Fatalf ("wrong number of removed log events: got %d, want %d" , len (rmLogsCh ), wantRemoved )
1261
- }
1271
+ var (
1272
+ countNew int
1273
+ countRm int
1274
+ prev int
1275
+ )
1262
1276
// Drain events.
1263
- for i := 0 ; i < len (logsCh ); i ++ {
1264
- <- logsCh
1277
+ for len (logsCh ) > 0 {
1278
+ x := <- logsCh
1279
+ countNew += len (x )
1280
+ for _ , log := range x {
1281
+ // We expect added logs to be in ascending order: 0:0, 0:1, 1:0 ...
1282
+ have := 100 * int (log .BlockNumber ) + int (log .TxIndex )
1283
+ if have < prev {
1284
+ t .Fatalf ("Expected new logs to arrive in ascending order (%d < %d)" , have , prev )
1285
+ }
1286
+ prev = have
1287
+ }
1288
+ }
1289
+ prev = 0
1290
+ for len (rmLogsCh ) > 0 {
1291
+ x := <- rmLogsCh
1292
+ countRm += len (x .Logs )
1293
+ for _ , log := range x .Logs {
1294
+ // We expect removed logs to be in ascending order: 0:0, 0:1, 1:0 ...
1295
+ have := 100 * int (log .BlockNumber ) + int (log .TxIndex )
1296
+ if have < prev {
1297
+ t .Fatalf ("Expected removed logs to arrive in ascending order (%d < %d)" , have , prev )
1298
+ }
1299
+ prev = have
1300
+ }
1301
+ }
1302
+
1303
+ if countNew != wantNew {
1304
+ t .Fatalf ("wrong number of log events: got %d, want %d" , countNew , wantNew )
1265
1305
}
1266
- for i := 0 ; i < len ( rmLogsCh ); i ++ {
1267
- <- rmLogsCh
1306
+ if countRm != wantRemoved {
1307
+ t . Fatalf ( "wrong number of removed log events: got %d, want %d" , countRm , wantRemoved )
1268
1308
}
1269
1309
}
1270
1310
0 commit comments