1. 引言
前序博客有:
- Mina中的VRF
module Block_data = struct
type t =
{ stake_proof : Stake_proof.t
; global_slot : Mina_numbers.Global_slot.t
; global_slot_since_genesis : Mina_numbers.Global_slot.t
; vrf_result : Random_oracle.Digest.t
}
(* Stake_proof结构为: *)
type t =
{ delegator : Account.Index.Stable.V1.t
; delegator_pk : Public_key.Compressed.Stable.V1.t
; coinbase_receiver_pk : Public_key.Compressed.Stable.V1.t
; ledger : Mina_ledger.Sparse_ledger.Stable.V2.t
; producer_private_key : Private_key.Stable.V1.t
; producer_public_key : Public_key.Stable.V1.t
}
(* block_producer.ml中的block_data来源:*)
let data =
Consensus.Hooks.get_block_data ~slot_won
~ledger_snapshot
~coinbase_receiver:!coinbase_receiver
let get_block_data ~(slot_won : Slot_won.t) ~ledger_snapshot
~coinbase_receiver =
let delegator_pk, delegator_idx = slot_won.delegator in
let producer_public_key = slot_won.producer.public_key in
let producer_private_key = slot_won.producer.private_key in
let producer_pk = Public_key.compress producer_public_key in
{ Block_data.stake_proof =
{ producer_private_key
; producer_public_key
; delegator = delegator_idx
; delegator_pk
; coinbase_receiver_pk =
Coinbase_receiver.resolve ~self:producer_pk coinbase_receiver
; ledger =
Local_state.Snapshot.Ledger_snapshot.ledger_subset
[ Mina_base.(Account_id.create producer_pk Token_id.default)
; Mina_base.(Account_id.create delegator_pk Token_id.default)
]
ledger_snapshot
}
; global_slot = slot_won.global_slot
; global_slot_since_genesis = slot_won.global_slot_since_genesis
; vrf_result = slot_won.vrf_result
}
会调用is_satisfied
函数确认产块者的质押量和其vrf结果是否符合要求:
(* Check if
vrf_output / 2^256
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?