diff --git a/src/types/address.rs b/src/types/address.rs
index df3a94e49a7d4303adf09e298e57b1844892ba4f..c0dd032b9dde3ffa57fb4b8884574781665f9f1d 100644
--- a/src/types/address.rs
+++ b/src/types/address.rs
@@ -1,11 +1,5 @@
-extern crate data_encoding;
-extern crate ring;
 use serde::{Serialize, Deserialize};
-
-use ring::digest::{Context, SHA256};
-
-use data_encoding::HEXLOWER;
-
+use ring::digest;
 
 // 20-byte address
 #[derive(Eq, PartialEq, Serialize, Deserialize, Clone, Hash, Default, Copy)]
@@ -55,13 +49,17 @@ impl std::fmt::Debug for Address {
 
 impl Address {
     pub fn from_public_key_bytes(bytes: &[u8]) -> Address {
-        let mut context = Context::new(&SHA256);
-        context.update(&bytes[..]);
-        let result =  context.finish();
-        let mut a:[u8; 20] = [0u8;20];
-        a.copy_from_slice(&(result.as_ref()[12..32]));
-        Address(a)
-        //unimplemented!()
+        let digest_result = digest::digest(&digest::SHA256, bytes);
+        let public_key_hash = digest_result.as_ref();
+        // let result = &public_key_hash[public_key_hash.len()-20..];
+        let mut result = [0u8;20];
+        let mut i = 0;
+        let prefix = public_key_hash.len() -  20;
+        while i<20{
+            result[i] = public_key_hash[prefix + i];
+            i+=1;
+        }
+        Address::from(result)
     }
 }
 // DO NOT CHANGE THIS COMMENT, IT IS FOR AUTOGRADER. BEFORE TEST
@@ -75,8 +73,6 @@ mod test {
         let test_key = hex!("0a0b0c0d0e0f0e0d0a0b0c0d0e0f0e0d0a0b0c0d0e0f0e0d0a0b0c0d0e0f0e0d");
         let addr = Address::from_public_key_bytes(&test_key);
         let correct_addr: Address = hex!("1851a0eae0060a132cf0f64a0ffaea248de6cba0").into();
-        println!("addr:{}",addr);
-        println!("correct_addr:{}",correct_addr);
         assert_eq!(addr, correct_addr);
         // "b69566be6e1720872f73651d1851a0eae0060a132cf0f64a0ffaea248de6cba0" is the hash of
         // "0a0b0c0d0e0f0e0d0a0b0c0d0e0f0e0d0a0b0c0d0e0f0e0d0a0b0c0d0e0f0e0d"