最近火热的区块链 小编也不禁追赶一下潮流 无所谓什么开发语言 设计思路大同小异。
下面讨论了如何用 Swift 语言实现基本的区块链。在这篇文章里会使用服务器端 Swift 框架 Vapor 在云端实现区块链。通过 HTTP 协议来构建区块链 Web API,使用不同的路由来提供必要的功能。阅读本文需要在电脑上安装 Vapor 框架(这个框架很牛逼 国外服务器不是用这个就是Python),还需要对 Swift 语言有基本的了解。
实现模型
第一步是为区块链 Web API 创建必要的模型,如下所示。
Block :Block(区块)类表示一个区块,包含交易的输入和输出。
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
class
Block: Codable {
var
index: Int =
0
var
dateCreated:
String
var
previousHash:
String
!
var
hash:
String
!
var
nonce: Int
var
message:
String
=
""
private
(
set
)
var
transactions: [Transaction] = [Transaction]()
var
key:
String
{
get
{
let transactionsData =
try
! JSONEncoder().encode(self.transactions)
let transactionsJSONString =
String
(data: transactionsData, encoding: .utf8)
return
String
(self.index) + self.dateCreated + self.previousHash + transactionsJSONString! +
String
(self.nonce)
}
}
func addTransaction(transaction: Transaction) {
self.transactions.append(transaction)
}
init() {
self.dateCreated =
Date
().toString()
self.nonce =
0
self.message =
"挖出新的区块"
}
init(transaction: Transaction) {
self.dateCreated =
Date
().toString()
self.nonce =
0
self.addTransaction(transaction: transaction)
}
}
Block 类的属性解释如下:
index ——区块位于区块链中的位置。index 为 0 则表示该区块是区块链中的第一个区块。index 为 1 则表示区块链中的第二个区块……以此类推!
dateCreated ——区块创建的日期
previousHash ——前一个区块的哈希值
hash ——当前区块的散列值
message ——每个区块的备忘说明。只是为了例子使用
nonce ——递增的数字,对生成哈希值很关键
transactions ——一系列交易。每笔交易都代表货物/价值的转移
key ——计算属性,提供给产生哈希值的函数
Transaction :Transaction(交易)由 sender(发送者)、recipient(接收者)和被转移的 amount(金额)组成。实现如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class
Transaction: Codable {
var
from:
String
var
to:
String
var
amount: Double
请发表评论