Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Blockchain : Codable {
- var blocks :[Block] = [Block]()
- init(genesisBlock :Block) {
- addBlock(genesisBlock)
- }
- func addBlock(_ block :Block) {
- if self.blocks.isEmpty {
- block.previousHash = "0000000000000000"
- block.hash = generateHash(for :block)
- }
- self.blocks.append(block)
- }
- func getNextBlock(transactions :[Transaction]) -> Block {
- let block = Block()
- transactions.forEach { transaction in
- block.addTransaction(transaction: transaction)
- }
- let previousBlock = getPreviousBlock()
- block.index = self.blocks.count
- block.previousHash = previousBlock.hash
- block.hash = generateHash(for: block)
- return block
- }
- private func getPreviousBlock() -> Block {
- return self.blocks[self.blocks.count - 1]
- }
- func generateHash(for block :Block) -> String {
- var hash = block.key.sha1Hash()
- while(!hash.hasPrefix("00")) {
- block.nonce += 1
- hash = block.key.sha1Hash()
- print(hash)
- }
- return hash
- }
- }
Add Comment
Please, Sign In to add comment