@@ -1158,37 +1158,53 @@ func TestLogRebirth(t *testing.T) {
11581158 blockchain .SubscribeLogsEvent (newLogCh )
11591159 blockchain .SubscribeRemovedLogsEvent (rmLogsCh )
11601160
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 )
11671175 }
1168- gen .AddTx (tx )
11691176 }
11701177 })
11711178 if _ , err := blockchain .InsertChain (chain ); err != nil {
11721179 t .Fatalf ("failed to insert chain: %v" , err )
11731180 }
1174- checkLogEvents (t , newLogCh , rmLogsCh , 1 , 0 )
1181+ checkLogEvents (t , newLogCh , rmLogsCh , 10 , 0 )
11751182
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+ })
11811197 if err != nil {
11821198 t .Fatalf ("failed to create tx: %v" , err )
11831199 }
11841200 gen .AddTx (tx )
1185- gen .OffsetTime (- 9 ) // higher block difficulty
11861201 }
1202+ gen .OffsetTime (- 9 ) // higher block difficulty
11871203 })
11881204 if _ , err := blockchain .InsertChain (forkChain ); err != nil {
11891205 t .Fatalf ("failed to insert forked chain: %v" , err )
11901206 }
1191- checkLogEvents (t , newLogCh , rmLogsCh , 1 , 1 )
1207+ checkLogEvents (t , newLogCh , rmLogsCh , 10 , 10 )
11921208
11931209 // This chain segment is rooted in the original chain, but doesn't contain any logs.
11941210 // When inserting it, the canonical chain switches away from forkChain and re-emits
@@ -1197,7 +1213,7 @@ func TestLogRebirth(t *testing.T) {
11971213 if _ , err := blockchain .InsertChain (newBlocks ); err != nil {
11981214 t .Fatalf ("failed to insert forked chain: %v" , err )
11991215 }
1200- checkLogEvents (t , newLogCh , rmLogsCh , 1 , 1 )
1216+ checkLogEvents (t , newLogCh , rmLogsCh , 10 , 10 )
12011217}
12021218
12031219// This test is a variation of TestLogRebirth. It verifies that log events are emitted
@@ -1252,19 +1268,43 @@ func TestSideLogRebirth(t *testing.T) {
12521268
12531269func checkLogEvents (t * testing.T , logsCh <- chan []* types.Log , rmLogsCh <- chan RemovedLogsEvent , wantNew , wantRemoved int ) {
12541270 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+ )
12621276 // 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 )
12651305 }
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 )
12681308 }
12691309}
12701310
0 commit comments