• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Swift 和 Vapor 构建区块链服务器

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

最近火热的区块链 小编也不禁追赶一下潮流   无所谓什么开发语言 设计思路大同小异。

下面讨论了如何用 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 (setvar 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
    init(from: String, to: 

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
[Swift]LeetCode229.求众数II|MajorityElementII发布时间:2022-07-14
下一篇:
[Swift]LeetCode1184.公交站间的距离|DistanceBetweenBusStops发布时间:2022-07-14
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap