Skip to content

Instantly share code, notes, and snippets.

View azamsharp's full-sized avatar

Mohammad Azam azamsharp

View GitHub Profile
@azamsharp
azamsharp / .swift
Created December 29, 2017 19:59
Blockchain
class Blockchain : Codable {
var blocks :[Block] = [Block]()
init() {
}
init(_ genesisBlock :Block) {
@azamsharp
azamsharp / .swift
Created December 29, 2017 20:39
BlockchainController
class BlockchainController {
private (set) var drop :Droplet
private (set) var blockchainService :BlockchainService!
init(drop :Droplet) {
self.drop = drop
self.blockchainService = BlockchainService()
@azamsharp
azamsharp / .swift
Created December 29, 2017 21:32
BlockChainService
//
// BlockchainService.swift
// Run
//
// Created by Mohammad Azam on 12/25/17.
//
import Foundation
import Vapor
@azamsharp
azamsharp / .swift
Created December 29, 2017 21:55
Blockchain Node
class BlockchainNode :Codable {
var address :String
init(address :String) {
self.address = address
}
init?(request :Request) {
@azamsharp
azamsharp / .swift
Created December 29, 2017 22:00
register node
self.drop.post("nodes/register") { request in
guard let blockchainNode = BlockchainNode(request :request) else {
return try JSONEncoder().encode(["message":"Error registering node"])
}
self.blockchainService.registerNode(blockchainNode)
return try JSONEncoder().encode(blockchainNode)
}
@azamsharp
azamsharp / .swift
Created December 29, 2017 22:09
registernode and getnodes
func getNodes() -> [BlockchainNode] {
return self.blockchain.nodes
}
func registerNode(_ blockchainNode :BlockchainNode) {
self.blockchain.addNode(blockchainNode)
}
@azamsharp
azamsharp / .swift
Created December 29, 2017 22:29
resolve conflicts
self.drop.get("nodes/resolve") { request in
return try Response.async { portal in
self.blockchainService.resolve { blockchain in
let blockchain = try! JSONEncoder().encode(blockchain)
portal.close(with: blockchain.makeResponse())
}
}
@azamsharp
azamsharp / .swift
Created December 29, 2017 22:33
service resolve
func resolve(completion :@escaping (Blockchain) -> ()) {
// get the nodes
let nodes = self.blockchain.nodes
for node in nodes {
let url = URL(string :"http://\(node.address)/blockchain")!
URLSession.shared.dataTask(with: url) { data, _, _ in
@azamsharp
azamsharp / .swift
Created January 4, 2018 19:36
Block Model
class Block {
var index :Int = 0
var dateCreated :String
var previousHash :String = ""
var hash :String!
var nonce :Int
var key :String {
get {
enum TranslationType : String, Codable {
case international
case domestic
}
class Transaction : Codable {
var from :String
var to :String