-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathContents.swift
More file actions
70 lines (50 loc) · 1.63 KB
/
Contents.swift
File metadata and controls
70 lines (50 loc) · 1.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import UIKit
// CREATE BLOCK CLASS
class Block {
var hash = String()
var data = String()
var prevHash = String()
var index = Int()
func createHash() -> String {
return NSUUID().uuidString.replacingOccurrences(of: "-", with: "")
}
}
// CREATE BLOCKCHAIN CLASS
class BlockChain {
var chain = [Block]()
func createGenesisBlock(data: String) {
let gBlock = Block()
gBlock.hash = gBlock.createHash()
gBlock.data = data
gBlock.prevHash = "nil - Genesis Block"
gBlock.index = 0
chain.append(gBlock)
}
func addBlock(data: String) {
let newBlock = Block()
newBlock.hash = newBlock.createHash()
newBlock.data = data
newBlock.prevHash = chain[chain.count - 1].hash
newBlock.index = chain.count
chain.append(newBlock)
}
}
// CREATE CHAIN
let KOPCoin = BlockChain()
KOPCoin.createGenesisBlock(data: "From: PA; To: PB; Amount: 10KOP")
KOPCoin.addBlock(data: "From: PB; To: PC; Amount: 10KOP")
KOPCoin.addBlock(data: "From: PC; To: PA; Amount: 10KOP")
KOPCoin.addBlock(data: "From: PD; To: PC; Amount: 10KOP")
KOPCoin.chain[2].data
// PRINT CHAIN DATA
for i in 0...KOPCoin.chain.count-1 {
print("\tBlock: \(KOPCoin.chain[i].index)\n\tHash: \(KOPCoin.chain[i].hash)\n\tPreviousHash: \(KOPCoin.chain[i].prevHash)\n\tData: \(KOPCoin.chain[i].data)\n")
}
// CHECK VALIDITY OF CHAIN
var isChainValid = true
for i in 1...KOPCoin.chain.count-1 {
if KOPCoin.chain[i].prevHash != KOPCoin.chain[i-1].hash {
isChainValid = false
}
}
print("Chain is valid: \(isChainValid)")