good morning!!!!
Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
E
Erigon
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package registry
Container registry
Harbor Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
a
Erigon
Commits
ad598652
Unverified
Commit
ad598652
authored
May 1, 2021
by
Alex Sharov
Committed by
GitHub
May 1, 2021
Browse files
Options
Downloads
Patches
Plain Diff
less blockchain object in tests (#1848)
parent
34c1fdac
Branches
Branches containing commit
Tags
Tags containing commit
No related merge requests found
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
core/blockchain.go
+9
-69
9 additions, 69 deletions
core/blockchain.go
core/headerchain.go
+3
-27
3 additions, 27 deletions
core/headerchain.go
turbo/stages/blockchain_test.go
+8
-64
8 additions, 64 deletions
turbo/stages/blockchain_test.go
with
20 additions
and
160 deletions
core/blockchain.go
+
9
−
69
View file @
ad598652
...
...
@@ -21,7 +21,6 @@ import (
"context"
"encoding/json"
"fmt"
"math/big"
"os"
"sync"
"sync/atomic"
...
...
@@ -195,7 +194,7 @@ func NewBlockChain(db ethdb.Database, cacheConfig *CacheConfig, chainConfig *par
if
err
!=
nil
{
return
nil
,
err
}
bc
.
genesisBlock
=
bc
.
Get
BlockByNumber
(
0
)
bc
.
genesisBlock
,
_
=
rawdb
.
Read
BlockByNumber
(
db
,
0
)
if
bc
.
genesisBlock
==
nil
{
return
nil
,
ErrNoGenesis
}
...
...
@@ -286,55 +285,14 @@ func (bc *BlockChain) Genesis() *types.Block {
// GetBlock retrieves a block from the database by hash and number,
// caching it if found.
func
(
bc
*
BlockChain
)
GetBlock
(
hash
common
.
Hash
,
number
uint64
)
*
types
.
Block
{
//
func (bc *BlockChain) GetBlock(hash common.Hash, number uint64) *types.Block {
// Short circuit if the block's already in the cache, retrieve otherwise
block
:=
rawdb
.
ReadBlock
(
bc
.
db
,
hash
,
number
)
if
block
==
nil
{
return
nil
}
return
block
}
// GetBlockByHash retrieves a block from the database by hash, caching it if found.
func
(
bc
*
BlockChain
)
GetBlockByHash
(
hash
common
.
Hash
)
*
types
.
Block
{
number
:=
bc
.
hc
.
GetBlockNumber
(
bc
.
db
,
hash
)
if
number
==
nil
{
return
nil
}
return
bc
.
GetBlock
(
hash
,
*
number
)
}
// GetBlockByNumber retrieves a block from the database by number, caching it
// (associated with its hash) if found.
func
(
bc
*
BlockChain
)
GetBlockByNumber
(
number
uint64
)
*
types
.
Block
{
hash
,
err
:=
rawdb
.
ReadCanonicalHash
(
bc
.
db
,
number
)
if
err
!=
nil
{
log
.
Warn
(
"ReadCanonicalHash failed"
,
"err"
,
err
)
return
nil
}
if
hash
==
(
common
.
Hash
{})
{
return
nil
}
return
bc
.
GetBlock
(
hash
,
number
)
}
// GetReceiptsByHash retrieves the receipts for all transactions in a given block.
func
(
bc
*
BlockChain
)
GetReceiptsByHash
(
hash
common
.
Hash
)
types
.
Receipts
{
if
receipts
,
ok
:=
bc
.
receiptsCache
.
Get
(
hash
);
ok
{
return
receipts
.
(
types
.
Receipts
)
}
number
:=
rawdb
.
ReadHeaderNumber
(
bc
.
db
,
hash
)
if
number
==
nil
{
return
nil
}
receipts
:=
rawdb
.
ReadReceipts
(
bc
.
db
,
hash
,
*
number
)
if
receipts
==
nil
{
return
nil
}
bc
.
receiptsCache
.
Add
(
hash
,
receipts
)
return
receipts
}
//block := rawdb.ReadBlock(bc.db, hash, number)
//if block == nil {
// return nil
//}
//return block
//}
// Stop stops the blockchain service. If any imports are currently in progress
// it will abort them using the procInterrupt.
...
...
@@ -440,18 +398,6 @@ func (bc *BlockChain) CurrentHeader() *types.Header {
return
bc
.
hc
.
CurrentHeader
()
}
// GetTd retrieves a block's total difficulty in the canonical chain from the
// database by hash and number, caching it if found.
func
(
bc
*
BlockChain
)
GetTd
(
hash
common
.
Hash
,
number
uint64
)
*
big
.
Int
{
return
bc
.
hc
.
GetTd
(
bc
.
db
,
hash
,
number
)
}
// GetTdByHash retrieves a block's total difficulty in the canonical chain from the
// database by hash, caching it if found.
func
(
bc
*
BlockChain
)
GetTdByHash
(
hash
common
.
Hash
)
*
big
.
Int
{
return
bc
.
hc
.
GetTdByHash
(
hash
)
}
// GetHeader retrieves a block header from the database by hash and number,
// caching it if found.
func
(
bc
*
BlockChain
)
GetHeader
(
hash
common
.
Hash
,
number
uint64
)
*
types
.
Header
{
...
...
@@ -464,12 +410,6 @@ func (bc *BlockChain) GetHeaderByHash(hash common.Hash) *types.Header {
return
bc
.
hc
.
GetHeaderByHash
(
hash
)
}
// HasHeader checks if a block header is present in the database or not, caching
// it if present.
func
(
bc
*
BlockChain
)
HasHeader
(
hash
common
.
Hash
,
number
uint64
)
bool
{
return
bc
.
hc
.
HasHeader
(
hash
,
number
)
}
// GetCanonicalHash returns the canonical hash for a given block number
func
(
bc
*
BlockChain
)
GetCanonicalHash
(
number
uint64
)
common
.
Hash
{
return
bc
.
hc
.
GetCanonicalHash
(
number
)
...
...
This diff is collapsed.
Click to expand it.
core/headerchain.go
+
3
−
27
View file @
ad598652
...
...
@@ -73,18 +73,18 @@ func NewHeaderChain(chainDb ethdb.Database, config *params.ChainConfig, engine c
engine
:
engine
,
}
hc
.
genesisHeader
=
hc
.
Get
HeaderByNumber
(
0
)
hc
.
genesisHeader
=
rawdb
.
Read
HeaderByNumber
(
chainDb
,
0
)
if
hc
.
genesisHeader
==
nil
{
return
nil
,
ErrNoGenesis
}
hc
.
currentHeader
.
Store
(
hc
.
genesisHeader
)
if
head
:=
rawdb
.
ReadHeadBlockHash
(
chainDb
);
head
!=
(
common
.
Hash
{})
{
if
chead
:=
hc
.
Get
HeaderByHash
(
head
);
chead
!=
nil
{
if
chead
,
_
:=
rawdb
.
Read
HeaderByHash
(
chainDb
,
head
);
chead
!=
nil
{
hc
.
currentHeader
.
Store
(
chead
)
}
}
hc
.
currentHeaderHash
=
hc
.
CurrentHeader
()
.
Hash
()
hc
.
currentHeaderHash
=
rawdb
.
Read
CurrentHeader
(
chainDb
)
.
Hash
()
//headHeaderGauge.Update(hc.CurrentHeader().Number.Int64())
return
hc
,
nil
...
...
@@ -120,23 +120,6 @@ func (hc *HeaderChain) GetBlockHashesFromHash(hash common.Hash, max uint64) []co
return
chain
}
// GetTd retrieves a block's total difficulty in the canonical chain from the
// database by hash and number, caching it if found.
func
(
hc
*
HeaderChain
)
GetTd
(
dbr
ethdb
.
Getter
,
hash
common
.
Hash
,
number
uint64
)
*
big
.
Int
{
td
,
_
:=
rawdb
.
ReadTd
(
dbr
,
hash
,
number
)
return
td
}
// GetTdByHash retrieves a block's total difficulty in the canonical chain from the
// database by hash, caching it if found.
func
(
hc
*
HeaderChain
)
GetTdByHash
(
hash
common
.
Hash
)
*
big
.
Int
{
number
:=
hc
.
GetBlockNumber
(
hc
.
chainDb
,
hash
)
if
number
==
nil
{
return
nil
}
return
hc
.
GetTd
(
hc
.
chainDb
,
hash
,
*
number
)
}
// GetHeader retrieves a block header from the database by hash and number,
// caching it if found.
func
(
hc
*
HeaderChain
)
GetHeader
(
hash
common
.
Hash
,
number
uint64
)
*
types
.
Header
{
...
...
@@ -157,13 +140,6 @@ func (hc *HeaderChain) GetHeaderByHash(hash common.Hash) *types.Header {
return
hc
.
GetHeader
(
hash
,
*
number
)
}
// HasHeader checks if a block header is present in the database or not.
// In theory, if header is present in the database, all relative components
// like td and hash->number should be present too.
func
(
hc
*
HeaderChain
)
HasHeader
(
hash
common
.
Hash
,
number
uint64
)
bool
{
return
rawdb
.
HasHeader
(
hc
.
chainDb
,
hash
,
number
)
}
// GetHeaderByNumber retrieves a block header from the database by number,
// caching it (associated with its hash) if found.
func
(
hc
*
HeaderChain
)
GetHeaderByNumber
(
number
uint64
)
*
types
.
Header
{
...
...
This diff is collapsed.
Click to expand it.
turbo/stages/blockchain_test.go
+
8
−
64
View file @
ad598652
...
...
@@ -693,17 +693,7 @@ func TestLogReorgs(t *testing.T) {
signer
=
types
.
LatestSigner
(
gspec
.
Config
)
)
cacheConfig
:=
&
core
.
CacheConfig
{
NoHistory
:
false
,
Pruning
:
false
,
}
txCacher
:=
core
.
NewTxSenderCacher
(
1
)
blockchain
,
_
:=
core
.
NewBlockChain
(
db
,
cacheConfig
,
gspec
.
Config
,
ethash
.
NewFaker
(),
vm
.
Config
{},
nil
,
txCacher
)
blockchain
.
EnableReceipts
(
true
)
defer
blockchain
.
Stop
()
rmLogsCh
:=
make
(
chan
core
.
RemovedLogsEvent
,
10
)
blockchain
.
SubscribeRemovedLogsEvent
(
rmLogsCh
)
chain
,
_
,
err
:=
core
.
GenerateChain
(
params
.
TestChainConfig
,
genesis
,
ethash
.
NewFaker
(),
db
,
2
,
func
(
i
int
,
gen
*
core
.
BlockGen
)
{
if
i
==
1
{
tx
,
err
:=
types
.
SignTx
(
types
.
NewContractCreation
(
gen
.
TxNonce
(
addr1
),
new
(
uint256
.
Int
),
1000000
,
new
(
uint256
.
Int
),
code
),
*
signer
,
key1
)
...
...
@@ -756,7 +746,6 @@ var logCode = common.Hex2Bytes("60606040525b7f24ec1d3ff24c2f6ff210738839dbc339cd
func
TestLogRebirth
(
t
*
testing
.
T
)
{
db
:=
ethdb
.
NewMemDatabase
()
defer
db
.
Close
()
txCacher
:=
core
.
NewTxSenderCacher
(
1
)
var
(
key1
,
_
=
crypto
.
HexToECDSA
(
"b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291"
)
addr1
=
crypto
.
PubkeyToAddress
(
key1
.
PublicKey
)
...
...
@@ -764,16 +753,11 @@ func TestLogRebirth(t *testing.T) {
genesis
=
gspec
.
MustCommit
(
db
)
signer
=
types
.
LatestSigner
(
gspec
.
Config
)
engine
=
ethash
.
NewFaker
()
blockchain
,
_
=
core
.
NewBlockChain
(
db
,
nil
,
gspec
.
Config
,
engine
,
vm
.
Config
{},
nil
,
txCacher
)
)
blockchain
.
EnableReceipts
(
true
)
defer
blockchain
.
Stop
()
// The event channels.
newLogCh
:=
make
(
chan
[]
*
types
.
Log
,
10
)
rmLogsCh
:=
make
(
chan
core
.
RemovedLogsEvent
,
10
)
blockchain
.
SubscribeLogsEvent
(
newLogCh
)
blockchain
.
SubscribeRemovedLogsEvent
(
rmLogsCh
)
// This chain contains a single log.
chain
,
_
,
chainErr
:=
core
.
GenerateChain
(
params
.
TestChainConfig
,
genesis
,
engine
,
db
,
2
,
func
(
i
int
,
gen
*
core
.
BlockGen
)
{
...
...
@@ -849,15 +833,8 @@ func TestSideLogRebirth(t *testing.T) {
signer
=
types
.
LatestSigner
(
gspec
.
Config
)
)
txCacher
:=
core
.
NewTxSenderCacher
(
1
)
blockchain
,
_
:=
core
.
NewBlockChain
(
db
,
nil
,
gspec
.
Config
,
ethash
.
NewFaker
(),
vm
.
Config
{},
nil
,
txCacher
)
defer
blockchain
.
Stop
()
newLogCh
:=
make
(
chan
[]
*
types
.
Log
,
10
)
rmLogsCh
:=
make
(
chan
core
.
RemovedLogsEvent
,
10
)
blockchain
.
SubscribeLogsEvent
(
newLogCh
)
blockchain
.
SubscribeRemovedLogsEvent
(
rmLogsCh
)
// Generate main chain
chain
,
_
,
err
:=
core
.
GenerateChain
(
params
.
TestChainConfig
,
genesis
,
ethash
.
NewFaker
(),
db
,
2
,
func
(
i
int
,
gen
*
core
.
BlockGen
)
{
if
i
==
1
{
...
...
@@ -973,10 +950,6 @@ func TestEIP155Transition(t *testing.T) {
genesis
=
gspec
.
MustCommit
(
db
)
)
txCacher
:=
core
.
NewTxSenderCacher
(
1
)
blockchain
,
_
:=
core
.
NewBlockChain
(
db
,
nil
,
gspec
.
Config
,
ethash
.
NewFaker
(),
vm
.
Config
{},
nil
,
txCacher
)
defer
blockchain
.
Stop
()
blocks
,
_
,
chainErr
:=
core
.
GenerateChain
(
gspec
.
Config
,
genesis
,
ethash
.
NewFaker
(),
db
,
4
,
func
(
i
int
,
block
*
core
.
BlockGen
)
{
var
(
tx
types
.
Transaction
...
...
@@ -1025,12 +998,12 @@ func TestEIP155Transition(t *testing.T) {
if
_
,
chainErr
=
stagedsync
.
InsertBlocksInStages
(
db
,
ethdb
.
DefaultStorageMode
,
gspec
.
Config
,
&
vm
.
Config
{},
ethash
.
NewFaker
(),
blocks
,
true
/* checkRoot */
);
chainErr
!=
nil
{
t
.
Fatal
(
chainErr
)
}
block
:=
blockchain
.
Get
BlockByNumber
(
1
)
block
,
_
:=
rawdb
.
Read
BlockByNumber
(
db
,
1
)
if
block
.
Transactions
()[
0
]
.
Protected
()
{
t
.
Error
(
"Expected block[0].txs[0] to not be replay protected"
)
}
block
=
blockchain
.
Get
BlockByNumber
(
3
)
block
,
_
=
rawdb
.
Read
BlockByNumber
(
db
,
3
)
if
block
.
Transactions
()[
0
]
.
Protected
()
{
t
.
Error
(
"Expected block[3].txs[0] to not be replay protected"
)
}
...
...
@@ -1090,20 +1063,6 @@ func doModesTest(history, preimages, receipts, txlookup bool) error {
genesis
,
_
,
_
=
gspec
.
Commit
(
db
,
history
)
)
cacheConfig
:=
&
core
.
CacheConfig
{
Pruning
:
false
,
BlocksBeforePruning
:
1024
,
DownloadOnly
:
false
,
NoHistory
:
!
history
,
}
txCacher
:=
core
.
NewTxSenderCacher
(
1
)
blockchain
,
_
:=
core
.
NewBlockChain
(
db
,
cacheConfig
,
gspec
.
Config
,
ethash
.
NewFaker
(),
vm
.
Config
{},
nil
,
txCacher
)
blockchain
.
EnableReceipts
(
receipts
)
blockchain
.
EnablePreimages
(
preimages
)
blockchain
.
EnableTxLookupIndex
(
txlookup
)
defer
blockchain
.
Stop
()
blocks
,
_
,
err
:=
core
.
GenerateChain
(
gspec
.
Config
,
genesis
,
ethash
.
NewFaker
(),
db
,
4
,
func
(
i
int
,
block
*
core
.
BlockGen
)
{
var
(
tx
types
.
Transaction
...
...
@@ -1313,10 +1272,6 @@ func TestDoubleAccountRemoval(t *testing.T) {
genesis
=
gspec
.
MustCommit
(
db
)
)
txCacher
:=
core
.
NewTxSenderCacher
(
1
)
blockchain
,
_
:=
core
.
NewBlockChain
(
db
,
nil
,
gspec
.
Config
,
ethash
.
NewFaker
(),
vm
.
Config
{},
nil
,
txCacher
)
defer
blockchain
.
Stop
()
var
theAddr
common
.
Address
blocks
,
_
,
err
:=
core
.
GenerateChain
(
gspec
.
Config
,
genesis
,
ethash
.
NewFaker
(),
db
,
3
,
func
(
i
int
,
block
*
core
.
BlockGen
)
{
...
...
@@ -1440,17 +1395,6 @@ func TestLargeReorgTrieGC(t *testing.T) {
diskdb
:=
ethdb
.
NewMemDatabase
()
defer
diskdb
.
Close
()
(
&
core
.
Genesis
{
Config
:
params
.
TestChainConfig
})
.
MustCommit
(
diskdb
)
cacheConfig
:=
&
core
.
CacheConfig
{
NoHistory
:
false
,
Pruning
:
false
,
}
txCacher
:=
core
.
NewTxSenderCacher
(
1
)
chain
,
err
:=
core
.
NewBlockChain
(
diskdb
,
cacheConfig
,
params
.
TestChainConfig
,
engine
,
vm
.
Config
{},
nil
,
txCacher
)
if
err
!=
nil
{
t
.
Fatalf
(
"failed to create tester chain: %v"
,
err
)
}
defer
chain
.
Stop
()
db
:=
ethdb
.
NewMemDatabase
()
defer
db
.
Close
()
genesis
:=
(
&
core
.
Genesis
{
Config
:
params
.
TestChainConfig
})
.
MustCommit
(
db
)
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment