Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
whqwjb
go-ethereum
提交
4e6f53ac
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,体验更适合开发者的 AI 搜索 >>
提交
4e6f53ac
编写于
12月 12, 2018
作者:
J
Javier Peletier
提交者:
Anton Evangelatov
12月 12, 2018
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
swarm/storage: simplify ChunkValidator interface (#18285)
上级
ebbf3dfa
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
20 addition
and
18 deletion
+20
-18
swarm/storage/feed/handler.go
swarm/storage/feed/handler.go
+5
-6
swarm/storage/feed/handler_test.go
swarm/storage/feed/handler_test.go
+2
-2
swarm/storage/feed/request.go
swarm/storage/feed/request.go
+4
-2
swarm/storage/feed/request_test.go
swarm/storage/feed/request_test.go
+3
-3
swarm/storage/localstore.go
swarm/storage/localstore.go
+1
-1
swarm/storage/localstore_test.go
swarm/storage/localstore_test.go
+1
-1
swarm/storage/types.go
swarm/storage/types.go
+4
-3
未找到文件。
swarm/storage/feed/handler.go
浏览文件 @
4e6f53ac
...
...
@@ -82,9 +82,8 @@ func (h *Handler) SetStore(store *storage.NetStore) {
// Validate is a chunk validation method
// If it looks like a feed update, the chunk address is checked against the userAddr of the update's signature
// It implements the storage.ChunkValidator interface
func
(
h
*
Handler
)
Validate
(
chunkAddr
storage
.
Address
,
data
[]
byte
)
bool
{
dataLength
:=
len
(
data
)
if
dataLength
<
minimumSignedUpdateLength
{
func
(
h
*
Handler
)
Validate
(
chunk
storage
.
Chunk
)
bool
{
if
len
(
chunk
.
Data
())
<
minimumSignedUpdateLength
{
return
false
}
...
...
@@ -94,8 +93,8 @@ func (h *Handler) Validate(chunkAddr storage.Address, data []byte) bool {
// First, deserialize the chunk
var
r
Request
if
err
:=
r
.
fromChunk
(
chunk
Addr
,
data
);
err
!=
nil
{
log
.
Debug
(
"Invalid feed update chunk"
,
"addr"
,
chunk
Addr
.
Hex
(),
"err"
,
err
.
Error
()
)
if
err
:=
r
.
fromChunk
(
chunk
);
err
!=
nil
{
log
.
Debug
(
"Invalid feed update chunk"
,
"addr"
,
chunk
.
Address
(),
"err"
,
err
)
return
false
}
...
...
@@ -198,7 +197,7 @@ func (h *Handler) Lookup(ctx context.Context, query *Query) (*cacheEntry, error)
}
var
request
Request
if
err
:=
request
.
fromChunk
(
chunk
.
Address
(),
chunk
.
Data
()
);
err
!=
nil
{
if
err
:=
request
.
fromChunk
(
chunk
);
err
!=
nil
{
return
nil
,
nil
}
if
request
.
Time
<=
timeLimit
{
...
...
swarm/storage/feed/handler_test.go
浏览文件 @
4e6f53ac
...
...
@@ -366,7 +366,7 @@ func TestValidator(t *testing.T) {
if
err
!=
nil
{
t
.
Fatal
(
err
)
}
if
!
rh
.
Validate
(
chunk
.
Address
(),
chunk
.
Data
()
)
{
if
!
rh
.
Validate
(
chunk
)
{
t
.
Fatal
(
"Chunk validator fail on update chunk"
)
}
...
...
@@ -375,7 +375,7 @@ func TestValidator(t *testing.T) {
address
[
0
]
=
11
address
[
15
]
=
99
if
rh
.
Validate
(
address
,
chunk
.
Data
(
))
{
if
rh
.
Validate
(
storage
.
NewChunk
(
address
,
chunk
.
Data
()
))
{
t
.
Fatal
(
"Expected Validate to fail with false chunk address"
)
}
}
...
...
swarm/storage/feed/request.go
浏览文件 @
4e6f53ac
...
...
@@ -171,9 +171,11 @@ func (r *Request) toChunk() (storage.Chunk, error) {
}
// fromChunk populates this structure from chunk data. It does not verify the signature is valid.
func
(
r
*
Request
)
fromChunk
(
updateAddr
storage
.
Address
,
chunkdata
[]
byte
)
error
{
func
(
r
*
Request
)
fromChunk
(
chunk
storage
.
Chunk
)
error
{
// for update chunk layout see Request definition
chunkdata
:=
chunk
.
Data
()
//deserialize the feed update portion
if
err
:=
r
.
Update
.
binaryGet
(
chunkdata
[
:
len
(
chunkdata
)
-
signatureLength
]);
err
!=
nil
{
return
err
...
...
@@ -189,7 +191,7 @@ func (r *Request) fromChunk(updateAddr storage.Address, chunkdata []byte) error
}
r
.
Signature
=
signature
r
.
idAddr
=
updateAddr
r
.
idAddr
=
chunk
.
Address
()
r
.
binaryData
=
chunkdata
return
nil
...
...
swarm/storage/feed/request_test.go
浏览文件 @
4e6f53ac
...
...
@@ -197,7 +197,7 @@ func TestUpdateChunkSerializationErrorChecking(t *testing.T) {
// Test that parseUpdate fails if the chunk is too small
var
r
Request
if
err
:=
r
.
fromChunk
(
storage
.
ZeroAddr
,
make
([]
byte
,
minimumUpdateDataLength
-
1
+
signatureLength
));
err
==
nil
{
if
err
:=
r
.
fromChunk
(
storage
.
NewChunk
(
storage
.
ZeroAddr
,
make
([]
byte
,
minimumUpdateDataLength
-
1
+
signatureLength
)
));
err
==
nil
{
t
.
Fatalf
(
"Expected request.fromChunk to fail when chunkData contains less than %d bytes"
,
minimumUpdateDataLength
)
}
...
...
@@ -226,7 +226,7 @@ func TestUpdateChunkSerializationErrorChecking(t *testing.T) {
compareByteSliceToExpectedHex
(
t
,
"chunk"
,
chunk
.
Data
(),
"0x0000000000000000776f726c64206e657773207265706f72742c20657665727920686f7572000000876a8936a7cd0b79ef0735ad0896c1afe278781ce803000000000019416c206269656e206861636572206a616dc3a173206c652066616c7461207072656d696f5a0ffe0bc27f207cd5b00944c8b9cee93e08b89b5ada777f123ac535189333f174a6a4ca2f43a92c4a477a49d774813c36ce8288552c58e6205b0ac35d0507eb00"
)
var
recovered
Request
recovered
.
fromChunk
(
chunk
.
Address
(),
chunk
.
Data
()
)
recovered
.
fromChunk
(
chunk
)
if
!
reflect
.
DeepEqual
(
recovered
,
r
)
{
t
.
Fatal
(
"Expected recovered feed update request to equal the original one"
)
}
...
...
@@ -282,7 +282,7 @@ func TestReverse(t *testing.T) {
// check that we can recover the owner account from the update chunk's signature
var
checkUpdate
Request
if
err
:=
checkUpdate
.
fromChunk
(
chunk
.
Address
(),
chunk
.
Data
()
);
err
!=
nil
{
if
err
:=
checkUpdate
.
fromChunk
(
chunk
);
err
!=
nil
{
t
.
Fatal
(
err
)
}
checkdigest
,
err
:=
checkUpdate
.
GetDigest
()
...
...
swarm/storage/localstore.go
浏览文件 @
4e6f53ac
...
...
@@ -92,7 +92,7 @@ func (ls *LocalStore) isValid(chunk Chunk) bool {
// ls.Validators contains a list of one validator per chunk type.
// if one validator succeeds, then the chunk is valid
for
_
,
v
:=
range
ls
.
Validators
{
if
valid
=
v
.
Validate
(
chunk
.
Address
(),
chunk
.
Data
()
);
valid
{
if
valid
=
v
.
Validate
(
chunk
);
valid
{
break
}
}
...
...
swarm/storage/localstore_test.go
浏览文件 @
4e6f53ac
...
...
@@ -118,7 +118,7 @@ func TestValidator(t *testing.T) {
type
boolTestValidator
bool
func
(
self
boolTestValidator
)
Validate
(
addr
Address
,
data
[]
byte
)
bool
{
func
(
self
boolTestValidator
)
Validate
(
chunk
Chunk
)
bool
{
return
bool
(
self
)
}
...
...
swarm/storage/types.go
浏览文件 @
4e6f53ac
...
...
@@ -327,7 +327,7 @@ func (c ChunkData) Data() []byte {
}
type
ChunkValidator
interface
{
Validate
(
addr
Address
,
data
[]
byte
)
bool
Validate
(
chunk
Chunk
)
bool
}
// Provides method for validation of content address in chunks
...
...
@@ -344,7 +344,8 @@ func NewContentAddressValidator(hasher SwarmHasher) *ContentAddressValidator {
}
// Validate that the given key is a valid content address for the given data
func
(
v
*
ContentAddressValidator
)
Validate
(
addr
Address
,
data
[]
byte
)
bool
{
func
(
v
*
ContentAddressValidator
)
Validate
(
chunk
Chunk
)
bool
{
data
:=
chunk
.
Data
()
if
l
:=
len
(
data
);
l
<
9
||
l
>
ch
.
DefaultSize
+
8
{
// log.Error("invalid chunk size", "chunk", addr.Hex(), "size", l)
return
false
...
...
@@ -355,7 +356,7 @@ func (v *ContentAddressValidator) Validate(addr Address, data []byte) bool {
hasher
.
Write
(
data
[
8
:
])
hash
:=
hasher
.
Sum
(
nil
)
return
bytes
.
Equal
(
hash
,
addr
[
:
]
)
return
bytes
.
Equal
(
hash
,
chunk
.
Address
()
)
}
type
ChunkStore
interface
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录