Implement novacoin mining support
[stratum-mining.git] / lib / halfnode.py
index d46ff75..2ef5fff 100644 (file)
@@ -128,12 +128,14 @@ class CTxOut(object):
 class CTransaction(object):
     def __init__(self):
         self.nVersion = 1
+        self.nTime = 0
         self.vin = []
         self.vout = []
         self.nLockTime = 0
         self.sha256 = None
     def deserialize(self, f):
         self.nVersion = struct.unpack("<i", f.read(4))[0]
+        self.nTime = struct.unpack("<i", f.read(4))[0]
         self.vin = deser_vector(f, CTxIn)
         self.vout = deser_vector(f, CTxOut)
         self.nLockTime = struct.unpack("<I", f.read(4))[0]
@@ -141,6 +143,7 @@ class CTransaction(object):
     def serialize(self):
         r = ""
         r += struct.pack("<i", self.nVersion)
+        r += struct.pack("<i", self.nTime)
         r += ser_vector(self.vin)
         r += ser_vector(self.vout)
         r += struct.pack("<I", self.nLockTime)
@@ -162,7 +165,7 @@ class CTransaction(object):
 
 class CBlock(object):
     def __init__(self):
-        self.nVersion = 1
+        self.nVersion = 6
         self.hashPrevBlock = 0
         self.hashMerkleRoot = 0
         self.nTime = 0
@@ -170,6 +173,7 @@ class CBlock(object):
         self.nNonce = 0
         self.vtx = []
         self.sha256 = None
+        self.signature = b""
     def deserialize(self, f):
         self.nVersion = struct.unpack("<i", f.read(4))[0]
         self.hashPrevBlock = deser_uint256(f)
@@ -178,6 +182,7 @@ class CBlock(object):
         self.nBits = struct.unpack("<I", f.read(4))[0]
         self.nNonce = struct.unpack("<I", f.read(4))[0]
         self.vtx = deser_vector(f, CTransaction)
+        self.signature = deser_string(f)
     def serialize(self):
         r = []
         r.append(struct.pack("<i", self.nVersion))
@@ -187,6 +192,7 @@ class CBlock(object):
         r.append(struct.pack("<I", self.nBits))
         r.append(struct.pack("<I", self.nNonce))
         r.append(ser_vector(self.vtx))
+        r.append(ser_string(self.signature))
         return ''.join(r)
     def calc_sha256(self):
         if self.sha256 is None:
@@ -197,7 +203,7 @@ class CBlock(object):
             r.append(struct.pack("<I", self.nTime))
             r.append(struct.pack("<I", self.nBits))
             r.append(struct.pack("<I", self.nNonce))
-            self.sha256 = uint256_from_str(SHA256.new(SHA256.new(''.join(r)).digest()).digest())
+            self.sha256 = uint256_from_str(scrypt(''.join(r)))
         return self.sha256
 
     def is_valid(self):