Untitled
unknown
rust
18 days ago
2.0 kB
5
Indexable
pub fn get_commitment_hash( outpoint: Outpoint, scriptcode: &[u8], value: u32, outputs: Vec<Utxo>, ) -> Result<Vec<u8>,SpendError> { // Version let version: u32 = 1; let sequence: u32 = 0xFFFFFFFF; let locktime: u32 = 0; let sighash: u32 = 1 ; let mut hasher = Sha256::new(); let mut prevout_data = Vec::new(); prevout_data.extend_from_slice(&outpoint.txid); prevout_data.extend_from_slice(&outpoint.index.to_le_bytes()); let prevout_hash = { let first_hash = Sha256::digest(&prevout_data); Sha256::digest(&first_hash).to_vec() }; let mut sequence_data = Vec::new(); sequence_data.extend_from_slice(&sequence.to_le_bytes()); let hash_sequence = { let first_hash = Sha256::digest(&sequence_data); Sha256::digest(&first_hash).to_vec() }; let mut output_data = Vec::new(); for output in &outputs { output_data.extend_from_slice(&output.amount.to_le_bytes()); output_data.extend_from_slice(&encode_varint(output.script_pubkey.len() as u64)); output_data.extend_from_slice(&output.script_pubkey); } let hash_output = { let first_hash = Sha256::digest(&output_data); Sha256::digest(&first_hash).to_vec() }; let mut pre_image = Vec::new(); pre_image.extend_from_slice(&version.to_le_bytes()); pre_image.extend_from_slice(&prevout_hash); pre_image.extend_from_slice(&hash_sequence); pre_image.extend_from_slice(&outpoint.txid); pre_image.extend_from_slice(&outpoint.index.to_le_bytes()); pre_image.extend_from_slice(&scriptcode); pre_image.extend_from_slice(&(value as u64).to_le_bytes()); pre_image.extend_from_slice(&sequence.to_le_bytes()); pre_image.extend_from_slice(&hash_output); pre_image.extend_from_slice(&locktime.to_le_bytes()); pre_image.extend_from_slice(&sighash.to_le_bytes()); let hash1 = Sha256::digest(&pre_image); return Ok(Sha256::digest(&hash1).to_vec()); }
Editor is loading...
Leave a Comment