Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
YottaChain
YTBP
提交
8c453896
Y
YTBP
项目概览
YottaChain
/
YTBP
通知
0
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Y
YTBP
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
8c453896
编写于
7月 31, 2018
作者:
B
Bart Wyatt
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Remove the redundant signature recovery and block digest when applying trusted/pre-validated blocks
上级
ce16a4b4
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
13 addition
and
9 deletion
+13
-9
libraries/chain/block_header_state.cpp
libraries/chain/block_header_state.cpp
+3
-4
libraries/chain/controller.cpp
libraries/chain/controller.cpp
+9
-4
libraries/chain/include/eosio/chain/block_header_state.hpp
libraries/chain/include/eosio/chain/block_header_state.hpp
+1
-1
未找到文件。
libraries/chain/block_header_state.cpp
浏览文件 @
8c453896
...
...
@@ -177,6 +177,7 @@ namespace eosio { namespace chain {
result
.
header
.
producer_signature
=
h
.
producer_signature
;
result
.
id
=
result
.
header
.
id
();
// ASSUMPTION FROM controller_impl::apply_block = all untrusted blocks will have their signatures pre-validated here
if
(
!
trust
)
{
EOS_ASSERT
(
result
.
block_signing_key
==
result
.
signee
(),
wrong_signing_key
,
"block not signed by expected key"
,
(
"result.block_signing_key"
,
result
.
block_signing_key
)(
"signee"
,
result
.
signee
()
)
);
...
...
@@ -225,12 +226,10 @@ namespace eosio { namespace chain {
return
digest_type
::
hash
(
std
::
make_pair
(
header_bmroot
,
pending_schedule_hash
)
);
}
void
block_header_state
::
sign
(
const
std
::
function
<
signature_type
(
const
digest_type
&
)
>&
signer
,
bool
trust
)
{
void
block_header_state
::
sign
(
const
std
::
function
<
signature_type
(
const
digest_type
&
)
>&
signer
)
{
auto
d
=
sig_digest
();
header
.
producer_signature
=
signer
(
d
);
if
(
!
trust
)
{
EOS_ASSERT
(
block_signing_key
==
fc
::
crypto
::
public_key
(
header
.
producer_signature
,
d
),
wrong_signing_key
,
"block is signed with unexpected key"
);
}
EOS_ASSERT
(
block_signing_key
==
fc
::
crypto
::
public_key
(
header
.
producer_signature
,
d
),
wrong_signing_key
,
"block is signed with unexpected key"
);
}
public_key_type
block_header_state
::
signee
()
const
{
...
...
libraries/chain/controller.cpp
浏览文件 @
8c453896
...
...
@@ -828,10 +828,10 @@ struct controller_impl {
void
sign_block
(
const
std
::
function
<
signature_type
(
const
digest_type
&
)
>&
signer_callback
,
bool
trust
)
{
void
sign_block
(
const
std
::
function
<
signature_type
(
const
digest_type
&
)
>&
signer_callback
)
{
auto
p
=
pending
->
_pending_block_state
;
p
->
sign
(
signer_callback
,
false
);
//trust
);
p
->
sign
(
signer_callback
);
static_cast
<
signed_block_header
&>
(
*
p
->
block
)
=
p
->
header
;
}
/// sign_block
...
...
@@ -877,7 +877,12 @@ struct controller_impl {
}
finalize_block
();
sign_block
(
[
&
](
const
auto
&
){
return
b
->
producer_signature
;
},
false
);
//trust );
// we can always trust this signature because,
// - prior to apply_block, we call fork_db.add which does a signature check IFF the block is untrusted
// - OTHERWISE the block is trusted and therefore we trust that the signature is valid
// Also, as ::sign_block does not lazily calculate the digest of the block, we can just short-circuit to save cycles
pending
->
_pending_block_state
->
header
.
producer_signature
=
b
->
producer_signature
;
// this is implied by the signature passing
//FC_ASSERT( b->id() == pending->_pending_block_state->block->id(),
...
...
@@ -1274,7 +1279,7 @@ void controller::finalize_block() {
}
void
controller
::
sign_block
(
const
std
::
function
<
signature_type
(
const
digest_type
&
)
>&
signer_callback
)
{
my
->
sign_block
(
signer_callback
,
false
/* don't trust */
);
my
->
sign_block
(
signer_callback
);
}
void
controller
::
commit_block
()
{
...
...
libraries/chain/include/eosio/chain/block_header_state.hpp
浏览文件 @
8c453896
...
...
@@ -49,7 +49,7 @@ struct block_header_state {
producer_key
get_scheduled_producer
(
block_timestamp_type
t
)
const
;
const
block_id_type
&
prev
()
const
{
return
header
.
previous
;
}
digest_type
sig_digest
()
const
;
void
sign
(
const
std
::
function
<
signature_type
(
const
digest_type
&
)
>&
signer
,
bool
trust
=
false
);
void
sign
(
const
std
::
function
<
signature_type
(
const
digest_type
&
)
>&
signer
);
public_key_type
signee
()
const
;
};
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录