登录 当即注册
金钱:

Code4App-188bet注册-iOS 开源代码库-188bet官网实例查找-iOS特效示例-188bet官网比如下载-Code4App.com

iOS怎么完成区域链 [仿制链接]

2019-6-1 22:38
2899926939 阅览:191 谈论:1 赞:0
Tag:  

更多精彩尽在原文地址

188bet注册之家

188bet注册之家

区块链(Blockchain)是比特币等盛行的加密钱银背面的技能。区块链的首要概念是去中心化,供给分布式账本。本文会为你展现怎么在 iOS/macOS 中运用 Swift 言语创立最基本的区块链。

留意:本文不触及节点(nodes/peers)、验证和奖赏等。

我会用 macOS Playground 来演示,快且便利,还有一些有用的函数能够用来生成 SHA 哈希值。

完成区块类

第一步是完成区块(Block)类,用来表明区块链中的一个区块。完成如下:

class Block {
    var index: Int = 0
    var dateCreated: String
    var previousHash: String!
    var hash: String!
    var nonce: Int
    var data: String

    var key: String {
        get {
            return String(self.index) + self.dateCreated + self.previousHash + self.data + String(self.nonce)
        }
    }

    init(data: String) {
        self.dateCreated = Date().toString()
        self.nonce = 0
        self.data = data
    }
}

区块类详解:

index——区块坐落区块链中的方位。index 为 0 则表明该区块是区块链中的第一个区块。index 为 1 则表明区块链中的第二个区块……以此类推!

dateCreated——区块创立的日期

previousHash——前一个区块的哈希值

hash——当时区块的哈希值

nonce——递加的数字,对生成哈希值很要害

data——恣意有价值的信息。能够是金钱、医疗信息和房地产信息等等

key——核算特点,供给给发生哈希值的函数

完成区块链类

区块链(Blockchain)类需求用一个区块的实例来初始化自己。这个区块也被称为创世区块(genesis block),正因为它是区块链的第一个区块。区块链类完成如下:

class Blockchain {
    private (set) var blocks = [Block]()

    init(_ genesisBlock: Block) {
       addBlock(genesisBlock)
    }

    func addBlock(_ block: Block) {
        if blocks.isEmpty {
            // 添加创世区块
            // 第一个区块没有 previous hash
            block.previousHash = "0"
            block.hash = generateHash(for: block)
        } else {
            let previousBlock = getPreviousBlock()
            block.previousHash = previousBlock.hash
            block.index = blocks.count
            block.hash = generateHash(for: block)
        }

        blocks.append(block)
        displayBlock(block)
    }

    private func getPreviousBlock() -> Block {
        return blocks[blocks.count - 1]
    }

    private func displayBlock(_ block: Block) {
        print("------ 第 (block.index) 个区块 --------")
print("创立日期:(block.dateCreated)")
print("数据:(block.data)")
print("Nonce:(block.nonce)")
print("前一个区块的哈希值:(block.previousHash!)")
print("哈希值:(block.hash!)")
    }

    private func generateHash(for block: Block) -> String {
        var hash = block.key.sha1Hash()
        while !hash.hasPrefix("00") {
            block.nonce += 1
            hash = block.key.sha1Hash()
        }
        return hash
    }
}

addBlock 函数用于给区块链添加区块。下一个区块则根据前一个区块的哈希值以及其它特点来核算 key。

generateHash 函数担任生成仅有的哈希值并赋值给区块。但并不运用彻底随机的哈希,而是需求以“00”最初的特定哈希。这个概念叫做“工作量证明体系”(https://en.wikipedia.org/wiki/Proof-of-work_system)。在实践中工作量证明体系的解法会更杂乱,处理的人也会取得奖赏(可能是额定的比特币)。

假如你仍然在编程的国际里苍茫,不知道自己的未来规划,小编给咱们引荐一个iOS高档沟通群:458839238 里边能够与大神一同沟通并走出苍茫。小白可进群免费收取学习材料,看看长辈们是怎么在编程的国际里凛然前行!
群内供给数据结构与算法、底层进阶、swift、逆向、整合面试题等免费材料
附上一份搜集的各大厂面试题(附答案) ! 群文件直接获取
各大厂面试题

188bet注册之家

引荐文章

【重磅来袭】史上最全iOS面试题及答案

共享到:
我来说两句
facelist
您需求登录后才干够谈论 登录 | 当即注册
一切谈论(1)
上官天悦 2019-6-2 18:36
你好 我需求ios/MJB 能做加我Q50811239  要求简略 价钱可观
回复
封闭

每日头条

经过邮件订阅最新 Code4App 信息
上一条 /4 下一条
联络咱们
封闭
协作电话:
13802416937
Email:
[email protected]
商务商场协作/投稿
问题反应及协助
联络咱们

广告投进| 广东互联网违法和不良信息告发中心|我国互联网告发中心|Github|请求友链|手机版|Code4App ( 粤ICP备15117877号-1 )

回来顶部