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

util: create Address struct for drk address

ghassmo 4 лет назад
Родитель
Сommit
e52edfcf27
2 измененных файлов с 60 добавлено и 1 удалено
  1. 57 0
      src/util/address.rs
  2. 3 1
      src/util/mod.rs

+ 57 - 0
src/util/address.rs

@@ -0,0 +1,57 @@
+use sha2::Digest;
+use group::GroupEncoding;
+
+#[derive(Clone, Debug)]
+pub struct Address {
+    pub raw: jubjub::SubgroupPoint,
+    pub pkh: String
+}
+
+impl Address {
+
+    pub fn new(raw: jubjub::SubgroupPoint) -> Self {
+        
+        let pkh = Self::pkh_address(&raw); 
+
+        Address { raw, pkh }
+    }
+
+    fn get_hash(raw: &jubjub::SubgroupPoint) -> Vec<u8> {
+        // sha256
+        let mut hasher = sha2::Sha256::new();
+        hasher.update(raw.to_bytes());
+        let hash = hasher.finalize();
+
+        // ripemd160 
+        let mut hasher = ripemd160::Ripemd160::new(); 
+        hasher.update(hash.to_vec());
+        let hash = hasher.finalize();
+
+        hash.to_vec()
+    }
+
+    pub fn pkh_address(raw: &jubjub::SubgroupPoint) -> String{
+        let mut hash = Self::get_hash(raw);
+
+        let mut payload = vec![];
+        
+        // add version
+        payload.push(0x00 as u8);
+
+        // add public key hash
+        payload.append(&mut hash);
+
+        // hash the payload + version  
+        let mut hasher = sha2::Sha256::new();
+        hasher.update(payload.clone());
+        let payload_hash = hasher.finalize().to_vec();
+
+        payload.append(&mut payload_hash[0..4].to_vec());
+
+        // base56 encoding
+        let address: String = bs58::encode(payload).into_string();
+
+        address
+    }
+}
+

+ 3 - 1
src/util/mod.rs

@@ -2,8 +2,10 @@ pub mod net_name;
 pub mod parse;
 pub mod path;
 pub mod token_list;
+pub mod address;
 
 pub use net_name::NetworkName;
 pub use parse::{assign_id, decode_base10, encode_base10, generate_id};
-pub use path::{expand_path, join_config_path};
+pub use address::Address;
 pub use token_list::{DrkTokenList, TokenList};
+pub use path::{expand_path, join_config_path};