Swift

Mobile

Crypto

BlockChain

Jak stworzyć własną kryptowalutę w Swift?

Szymon Wnuk
Jan 31, 2025
Swift
Mobile
Crypto
BlockChain

Jak stworzyć własną kryptowalutę w Swift?

Szymon Wnuk
Jan 31, 2025

Swift

Mobile

Crypto

BlockChain

Jak stworzyć własną kryptowalutę w Swift?

Szymon Wnuk
Jan 31, 2025

Spis treści

Spis treści

Spis treści

Title
Title
Title
Title

Tworzenie własnej kryptowaluty może brzmieć jak zadanie dla zaawansowanych programistów blockchain, ale dzięki nowoczesnym narzędziom i technologiom jest to bardziej dostępne, niż się wydaje. Swift, choć nie jest pierwszym wyborem do tego celu, daje programistom możliwość eksperymentowania i budowania podstawowych systemów kryptowalutowych dzięki wsparciu dla kryptografii oraz frameworkom, takim jak CryptoKit.

W tym artykule pokażemy, jak stworzyć prostą wersję kryptowaluty w Swift. Oczywiście nie będzie to w pełni funkcjonalny system na miarę Bitcoina, ale taki, który pokaże zasady działania blockchainu i tokenów.


Czym jest kryptowaluta?

Kryptowaluta to cyfrowy środek wymiany, który wykorzystuje technologię blockchain, aby zapewnić bezpieczeństwo, przejrzystość i decentralizację. Główne cechy kryptowaluty to:

  • Decentralizacja – brak centralnego zarządzania.

  • Bezpieczeństwo – każda transakcja jest kryptograficznie zabezpieczona.

  • Niezmienność – zapis w blockchainie nie może zostać zmodyfikowany.

Podstawowe komponenty kryptowaluty

Tworząc kryptowalutę w Swift, musimy zaimplementować trzy kluczowe elementy:

  1. Blockchain – łańcuch bloków, w którym zapisane są transakcje.

  2. Transakcje – zapis transferu wartości pomiędzy użytkownikami.

  3. Tokeny – reprezentacja wartości w systemie.

Jak stworzyć prosty blockchain w Swift

Na potrzeby tego projektu blockchain będzie prostą strukturą, która przechowuje bloki zawierające dane transakcji. Każdy blok ma unikalny identyfikator (hash) oraz odniesienie do poprzedniego bloku.

import Foundation  
import CryptoKit  

struct Block {  
    let index: Int  
    let timestamp: Date  
    let previousHash: String  
    let data: String  
    let hash: String  

    init(index: Int, timestamp: Date, previousHash: String, data: String) {  
        self.index = index  
        self.timestamp = timestamp  
        self.previousHash = previousHash  
        self.data = data  
        self.hash = Block.generateHash(index: index, timestamp: timestamp, previousHash: previousHash, data: data)  
    }  

    static func generateHash(index: Int, timestamp: Date, previousHash: String, data: String) -> String {  
        let input = "\(index)\(timestamp)\(previousHash)\(data)"  
        let hash = SHA256.hash(data: Data(input.utf8))  
        return hash.compactMap { String(format: "%02x", $0) }.joined()  
    }  
}  

// Blockchain jako tablica bloków  
var blockchain: [Block] = [Block(index: 0, timestamp: Date(), previousHash: "0", data: "Genesis Block")]  

// Dodawanie nowego bloku  
func addBlock(data: String) {  
    let lastBlock = blockchain.last!  
    let newBlock = Block(index: lastBlock.index + 1, timestamp: Date(), previousHash: lastBlock.hash, data: data)  
    blockchain.append(newBlock)  
}  

addBlock(data: "Pierwsza transakcja")  
addBlock(data: "Druga transakcja")  

for block in blockchain {  
    print("Index: \(block.index), Hash: \(block.hash)")  
}

Dodanie funkcji transakcji

W blockchainie transakcje są podstawą każdej kryptowaluty. Możemy zdefiniować prostą strukturę transakcji:

struct Transaction {  
    let sender: String  
    let receiver: String  
    let amount: Double  
}  

struct BlockWithTransactions {  
    let index: Int  
    let timestamp: Date  
    let previousHash: String  
    let transactions: [Transaction]  
    let hash: String  

    init(index: Int, timestamp: Date, previousHash: String, transactions: [Transaction]) {  
        self.index = index  
        self.timestamp = timestamp  
        self.previousHash = previousHash  
        self.transactions = transactions  
        self.hash = BlockWithTransactions.generateHash(index: index, timestamp: timestamp, previousHash: previousHash, transactions: transactions)  
    }  

    static func generateHash(index: Int, timestamp: Date, previousHash: String, transactions: [Transaction]) -> String {  
        let transactionsData = transactions.map { "\($0.sender)\($0.receiver)\($0.amount)" }.joined()  
        let input = "\(index)\(timestamp)\(previousHash)\(transactionsData)"  
        let hash = SHA256.hash(data: Data(input.utf8))  
        return hash.compactMap { String(format: "%02x", $0) }.joined()  
    }  
}

Wykorzystanie kryptografii do podpisów

Aby transakcje były bezpieczne i możliwe do zweryfikowania, dodamy podpisy cyfrowe za pomocą CryptoKit:

import CryptoKit  

struct SignedTransaction {  
    let sender: P256.Signing.PublicKey  
    let receiver: P256.Signing.PublicKey  
    let amount: Double  
    let signature: Data  

    func isValid() -> Bool {  
        let data = "\(sender)\(receiver)\(amount)".data(using: .utf8)!  
        return sender.isValidSignature(signature, for: data)  
    }  
}  

// Generowanie kluczy  
let senderPrivateKey = P256.Signing.PrivateKey()  
let receiverPrivateKey = P256.Signing.PrivateKey()  

let senderPublicKey = senderPrivateKey.publicKey  
let receiverPublicKey = receiverPrivateKey.publicKey  

// Tworzenie i podpisywanie transakcji  
let amount = 100.0  
let data = "\(senderPublicKey)\(receiverPublicKey)\(amount)".data(using: .utf8)!  
let signature = try! senderPrivateKey.signature(for: data)  

let transaction = SignedTransaction(sender: senderPublicKey, receiver: receiverPublicKey, amount: amount, signature: signature)  
print("Czy transakcja jest prawidłowa? \(transaction.isValid())")

Co dalej?

Ten prosty przykład pokazuje podstawy tworzenia kryptowaluty w Swift. Oczywiście, aby stworzyć w pełni funkcjonalny system, należałoby zaimplementować:

  • Mechanizm konsensusu (np. Proof of Work lub Proof of Stake),

  • Zarządzanie portfelami i saldami użytkowników,

  • Komunikację sieciową między węzłami blockchaina,

  • Mechanizmy ochrony przed atakami (np. Double Spend).

Tworzenie kryptowaluty to ambitne wyzwanie, ale też doskonały sposób na naukę blockchainu, kryptografii i programowania systemów rozproszonych. Dzięki Swift i CryptoKit masz solidne podstawy, by zacząć swoją przygodę z tym fascynującym tematem!

Be on top of your industry

© 2025 Bereyziat Development, All rights reserved.

Be on top of your industry

© 2025 Bereyziat Development, All rights reserved.

Be on top of your industry

© 2025 Bereyziat Development, All rights reserved.