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

contract/consensus: use vector instead of array for VRF input creation

aggstam 3 лет назад
Родитель
Сommit
1035ca4ce5

+ 3 - 3
src/contract/consensus/src/client/proposal_v1.rs

@@ -280,9 +280,9 @@ pub fn create_proposal_proof(
     let seed = poseidon_hash([SEED_PREFIX, input.note.serial]);
     // NOTE: slot checkpoint eta to be renamed to previous_eta,
     //       corresponding to previous block eta.
-    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 mut vrf_input = Vec::with_capacity(32 + 32);
+    vrf_input.extend_from_slice(&slot_checkpoint.eta.to_repr());
+    vrf_input.extend_from_slice(&slot_pallas.to_repr());
     let vrf_proof = VrfProof::prove(input.secret, &vrf_input, &mut OsRng);
     let mut eta = [0u8; 64];
     eta[..blake3::OUT_LEN].copy_from_slice(vrf_proof.hash_output().as_bytes());

+ 3 - 3
src/contract/consensus/src/entrypoint/proposal_v1.rs

@@ -99,9 +99,9 @@ pub(crate) fn consensus_proposal_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 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 mut vrf_input = Vec::with_capacity(32 + 32);
+    vrf_input.extend_from_slice(&slot_checkpoint.eta.to_repr());
+    vrf_input.extend_from_slice(&slot_pallas.to_repr());
     let vrf_proof = &params.vrf_proof;
     if !vrf_proof.verify(params.input.signature_public, &vrf_input) {
         msg!("[ConsensusProposalV1] Error: eta VRF proof couldn't be verified");