Просмотр исходного кода

contract/consensus: Concatenate bytes for VRF input

parazyd 3 лет назад
Родитель
Сommit
a1501e427a

+ 4 - 2
src/contract/consensus/src/client/proposal_v1.rs

@@ -352,8 +352,10 @@ pub fn create_proposal_reward_proof(
     let seed = poseidon_hash([SEED_PREFIX, serial, ZERO]);
     // NOTE: slot checkpoint eta to be renamed to previous_eta,
     //       corresponding to previous block eta.
-    let vrf_input = slot_checkpoint.eta + slot_pallas;
-    let vrf_proof = VrfProof::prove(secret_key.into(), &vrf_input.to_repr(), &mut OsRng);
+    let mut vrf_input = [0u8; 64];
+    vrf_input[..32].copy_from_slice(&slot_checkpoint.eta.to_repr());
+    vrf_input[32..].copy_from_slice(&slot_pallas.to_repr());
+    let vrf_proof = VrfProof::prove(secret_key.into(), &vrf_input, &mut OsRng);
     let mut eta = [0u8; 64];
     eta[..blake3::OUT_LEN].copy_from_slice(vrf_proof.hash_output().as_bytes());
     let eta = pallas::Base::from_uniform_bytes(&eta);

+ 4 - 2
src/contract/consensus/src/entrypoint/proposal_reward_v1.rs

@@ -85,9 +85,11 @@ pub(crate) fn consensus_proposal_reward_get_metadata_v1(
     let slot_pallas = pallas::Base::from(slot_checkpoint.slot);
     // NOTE: slot checkpoint eta to be renamed to previous_eta,
     //       corresponding to previous block eta.
-    let vrf_input = slot_checkpoint.eta + slot_pallas;
+    let mut vrf_input = [0u8; 64];
+    vrf_input[..32].copy_from_slice(&slot_checkpoint.eta.to_repr());
+    vrf_input[32..].copy_from_slice(&slot_pallas.to_repr());
     let vrf_proof = &params.vrf_proof;
-    if !vrf_proof.verify(params.burnt_public_key, &vrf_input.to_repr()) {
+    if !vrf_proof.verify(params.burnt_public_key, &vrf_input) {
         msg!("[ConsensusProposalRewardV1] Error: eta VRF proof couldn't be verified");
         return Err(ConsensusError::ProposalErroneousVrfProof.into())
     }