Skip to content

Instantly share code, notes, and snippets.

View cx0der's full-sized avatar

Shivakumar Thanikachalam cx0der

View GitHub Profile
@cx0der
cx0der / block.py
Created August 12, 2018 12:21
Simple block in python
class Block:
def __init__(self, index, nonce, prev_hash, timestamp, data, hash):
self.index = index
self.nonce = nonce
self.prev_hash = prev_hash
self.data = data
self.timestamp = timestamp
self.hash = hash
@cx0der
cx0der / hash.py
Created August 12, 2018 12:31
Pychain calcuate hash
import hashlib
def calculate_hash(index, nonce, timestamp, data, prev_hash):
block_val = str(index) + str(nonce) + prev_hash + str(timestamp) + data
return hashlib.sha256(block_val.encode("utf-8")).hexdigest()
@cx0der
cx0der / mine_pychain.py
Created August 12, 2018 14:24
Mining PyChain
import hashlib
difficulty = 4
pattern = '0000'
def calculate_hash(data_to_hash):
return hashlib.sha256(data_to_hash.encode("utf-8")).hexdigest()
def mine_block(index, prev_hash, timestamp, data):
for nonce in range(1, maxNonce):
@cx0der
cx0der / add_block.py
Created August 12, 2018 14:37
Adding a new block
def add_block (data):
prev_block = get_last_block()
timestamp = time.time()
new_block = mine_block(prev_block.index + 1, prev_block.hash, timestamp, data)
return new_block
@cx0der
cx0der / mine_genesis_block.py
Created August 12, 2018 14:41
Genesis Block
def mine_genesis_block ():
timestamp = time.time()
return mine_block(0, "0", timestamp, "Genisis Block")
@cx0der
cx0der / init_pychain.py
Created August 12, 2018 14:58
Initialize Pychain
def mine_genesis_block ():
timestamp = time.time()
return mine_block(0, "0", timestamp, "Genisis Block")
chain = [mine_genesis_block()]
@cx0der
cx0der / validate_block.py
Created August 12, 2018 15:23
Authenticate the Block
def is_block_valid(next_block, last_block):
if last_block.index + 1 != int(new_block["index"]):
return False
if last_block.hash != new_block["prev_hash"]:
return False
block_val = str(new_block["index"]) + str(new_block["nonce"]) + new_block["prev_hash"] + \
str(new_block["timestamp"]) + new_block["data"]
if calculate_hash(block_val) != new_block["hash"]:
return False
@cx0der
cx0der / pychain_http.py
Created August 13, 2018 14:12
Pychain HTTP server
class HttpHandler(BaseHTTPRequestHandler):
def do_GET(self):
if self.path == '/blocks':
self.set_response_headers(200)
self.wfile.write(bytes(json.dumps(chain, default=jdefault), "utf8"))
elif self.path == '/peers':
self.set_response_headers(200)
self.wfile.write(bytes(json.dumps(peers), "utf8"))
else:
self.set_response_headers(400, "plain/text")
@cx0der
cx0der / vueselect.html
Last active October 27, 2018 12:48
Basic structure of a select component
<div> <!-- Container -->
<span></span> <!-- Selected value -->
<ul>
<li></li> <!-- Options -->
<li></li>
<li></li>
</ul>
</div>
@cx0der
cx0der / vueselect.scss
Last active October 28, 2018 09:26
Base styling for vue select
<style lang="scss" scoped>
$background-color: #fff;
$border-color: #101010;
$border-inactive-color: #606060;
$border-radius: 5px;
$item-hover-color: #f5f5f5;
$item-selected-color: rgba(0, 0, 0, .25);
*,
*:before,