Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
whqwjb
go-ethereum
提交
b927c294
G
go-ethereum
项目概览
whqwjb
/
go-ethereum
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
go-ethereum
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
b927c294
编写于
3月 13, 2015
作者:
O
obscuren
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
GetBlockByNumber now properly looks for a number in the database
上级
fee9aecf
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
33 addition
and
28 deletion
+33
-28
core/chain_manager.go
core/chain_manager.go
+33
-28
未找到文件。
core/chain_manager.go
浏览文件 @
b927c294
...
...
@@ -17,6 +17,9 @@ import (
var
(
chainlogger
=
logger
.
NewLogger
(
"CHAIN"
)
jsonlogger
=
logger
.
NewJsonLogger
()
blockHashPre
=
[]
byte
(
"block-hash-"
)
blockNumPre
=
[]
byte
(
"block-num-"
)
)
type
StateQuery
interface
{
...
...
@@ -165,9 +168,8 @@ func (self *ChainManager) setTransState(statedb *state.StateDB) {
func
(
bc
*
ChainManager
)
setLastBlock
()
{
data
,
_
:=
bc
.
blockDb
.
Get
([]
byte
(
"LastBlock"
))
if
len
(
data
)
!=
0
{
var
block
types
.
Block
rlp
.
Decode
(
bytes
.
NewReader
(
data
),
&
block
)
bc
.
currentBlock
=
&
block
block
:=
bc
.
GetBlock
(
data
)
bc
.
currentBlock
=
block
bc
.
lastBlockHash
=
block
.
Hash
()
// Set the last know difficulty (might be 0x0 as initial value, Genesis)
...
...
@@ -220,7 +222,7 @@ func (bc *ChainManager) Reset() {
defer
bc
.
mu
.
Unlock
()
for
block
:=
bc
.
currentBlock
;
block
!=
nil
;
block
=
bc
.
GetBlock
(
block
.
Header
()
.
ParentHash
)
{
bc
.
blockDb
.
Delete
(
block
.
Hash
()
)
bc
.
removeBlock
(
block
)
}
// Prepare the genesis block
...
...
@@ -231,12 +233,16 @@ func (bc *ChainManager) Reset() {
bc
.
setTotalDifficulty
(
ethutil
.
Big
(
"0"
))
}
func
(
bc
*
ChainManager
)
removeBlock
(
block
*
types
.
Block
)
{
bc
.
blockDb
.
Delete
(
append
(
blockHashPre
,
block
.
Hash
()
...
))
}
func
(
bc
*
ChainManager
)
ResetWithGenesisBlock
(
gb
*
types
.
Block
)
{
bc
.
mu
.
Lock
()
defer
bc
.
mu
.
Unlock
()
for
block
:=
bc
.
currentBlock
;
block
!=
nil
;
block
=
bc
.
GetBlock
(
block
.
Header
()
.
ParentHash
)
{
bc
.
blockDb
.
Delete
(
block
.
Hash
()
)
bc
.
removeBlock
(
block
)
}
// Prepare the genesis block
...
...
@@ -261,15 +267,20 @@ func (self *ChainManager) Export() []byte {
}
func
(
bc
*
ChainManager
)
insert
(
block
*
types
.
Block
)
{
encodedBlock
:=
ethutil
.
Encode
(
block
)
bc
.
blockDb
.
Put
([]
byte
(
"LastBlock"
),
encodedBlock
)
//
encodedBlock := ethutil.Encode(block)
bc
.
blockDb
.
Put
([]
byte
(
"LastBlock"
),
block
.
Hash
()
)
bc
.
currentBlock
=
block
bc
.
lastBlockHash
=
block
.
Hash
()
key
:=
append
(
blockNumPre
,
block
.
Number
()
.
Bytes
()
...
)
bc
.
blockDb
.
Put
(
key
,
bc
.
lastBlockHash
)
}
func
(
bc
*
ChainManager
)
write
(
block
*
types
.
Block
)
{
encodedBlock
:=
ethutil
.
Encode
(
block
.
RlpDataForStorage
())
bc
.
blockDb
.
Put
(
block
.
Hash
(),
encodedBlock
)
key
:=
append
(
blockHashPre
,
block
.
Hash
()
...
)
bc
.
blockDb
.
Put
(
key
,
encodedBlock
)
}
// Accessors
...
...
@@ -279,7 +290,7 @@ func (bc *ChainManager) Genesis() *types.Block {
// Block fetching methods
func
(
bc
*
ChainManager
)
HasBlock
(
hash
[]
byte
)
bool
{
data
,
_
:=
bc
.
blockDb
.
Get
(
hash
)
data
,
_
:=
bc
.
blockDb
.
Get
(
append
(
blockHashPre
,
hash
...
)
)
return
len
(
data
)
!=
0
}
...
...
@@ -307,7 +318,7 @@ func (self *ChainManager) GetBlockHashesFromHash(hash []byte, max uint64) (chain
}
func
(
self
*
ChainManager
)
GetBlock
(
hash
[]
byte
)
*
types
.
Block
{
data
,
_
:=
self
.
blockDb
.
Get
(
hash
)
data
,
_
:=
self
.
blockDb
.
Get
(
append
(
blockHashPre
,
hash
...
)
)
if
len
(
data
)
==
0
{
return
nil
}
...
...
@@ -320,6 +331,18 @@ func (self *ChainManager) GetBlock(hash []byte) *types.Block {
return
&
block
}
func
(
self
*
ChainManager
)
GetBlockByNumber
(
num
uint64
)
*
types
.
Block
{
self
.
mu
.
RLock
()
defer
self
.
mu
.
RUnlock
()
key
,
_
:=
self
.
blockDb
.
Get
(
append
(
blockNumPre
,
big
.
NewInt
(
int64
(
num
))
.
Bytes
()
...
))
if
len
(
key
)
==
0
{
return
nil
}
return
self
.
GetBlock
(
key
)
}
func
(
self
*
ChainManager
)
GetUnclesInChain
(
block
*
types
.
Block
,
length
int
)
(
uncles
[]
*
types
.
Header
)
{
for
i
:=
0
;
block
!=
nil
&&
i
<
length
;
i
++
{
uncles
=
append
(
uncles
,
block
.
Uncles
()
...
)
...
...
@@ -342,24 +365,6 @@ func (self *ChainManager) GetAncestors(block *types.Block, length int) (blocks [
return
}
func
(
self
*
ChainManager
)
GetBlockByNumber
(
num
uint64
)
*
types
.
Block
{
self
.
mu
.
RLock
()
defer
self
.
mu
.
RUnlock
()
var
block
*
types
.
Block
if
num
<=
self
.
currentBlock
.
Number
()
.
Uint64
()
{
block
=
self
.
currentBlock
for
;
block
!=
nil
;
block
=
self
.
GetBlock
(
block
.
Header
()
.
ParentHash
)
{
if
block
.
Header
()
.
Number
.
Uint64
()
==
num
{
break
}
}
}
return
block
}
func
(
bc
*
ChainManager
)
setTotalDifficulty
(
td
*
big
.
Int
)
{
bc
.
blockDb
.
Put
([]
byte
(
"LTD"
),
td
.
Bytes
())
bc
.
td
=
td
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录