Jelajahi Sumber

Hashchain functionality ready for integration

control 3 tahun lalu
induk
melakukan
ebe0007071
2 mengubah file dengan 60 tambahan dan 0 penghapusan
  1. 48 0
      app/hasher.py
  2. 12 0
      app/models.py

+ 48 - 0
app/hasher.py

@@ -0,0 +1,48 @@
+import sys
+import hashlib
+
+# Constants
+GENESIS_STR = 'This is the genesis hash'
+
+# Specify buffer size
+BUF_SIZE = 65536 # 64kB chunks!
+
+# Init objects
+sha256 = hashlib.sha256()
+
+def hashfile(filename):
+    with open(filename, 'rb') as f:
+        while True:
+            data = f.read(BUF_SIZE)
+            if not data:
+                break
+            sha256.update(data)
+
+    return sha256.hexdigest
+
+def hashdata(data):
+    sha256 = hashlib.sha256(data.encode())
+
+    return sha1.hexdigest
+
+# Constant!
+GENESIS_HASH = hashdata(GENESIS_STR)
+
+# sample txstring
+txstring = '[13e36dd45bc4115a7ddab608d9ca26fdb951d0ff74631c554f2c3653b58e8a31, datetime, 1, 3, 40304.50]'
+
+def gen_txhash(txstring):
+    # Generates a transaction hash from
+    # transaction data
+
+    # Return new transaction hash
+    return hashdata(txstring)
+
+def append_tx(txhash, pbhash):
+    # Takes transaction hash and
+    # appends to previous block hash
+    inputs = f'[{pbhash}, {txhash}]'
+
+    # Return new block hash
+    return hashdata(inputs)
+

+ 12 - 0
app/models.py

@@ -10,3 +10,15 @@ class User(db.Model, UserMixin): # User Database
    username = db.Column(db.String(150))
    profile_image = db.Column(db.String(150))
 
+class Transaction(db.Model):
+    id = db.Column(db.Integer, primary_key=True)
+    filehash = db.Column(db.String(64)) # sha256 hash
+    datetime = db.Column(db.DateTime(timezone=True), default=func.now())
+    source_id = db.Column(db.Integer)
+    destination_id = db.Column(db.Integer)
+    price = db.Column(db.Float)
+    txhash = db.Column(db.String(64))
+
+class Hashchain(db.Model):
+    id = db.Column(db.Integer, primary_key=True)
+    blockhash = db.Column(db.String(64))