Skip to content

Swift ו-iOS

ה- Swift SDK שנשלח על ידי חלל העבודה העליון הוא החבילה IrohaSwift Swift תחת IrohaSwift/. מוניפסט החבילה שלו מגדיר שלושה מוצרי ספריה IrohaSwift, IrohaSwiftMobileTransports, ו IrohaSwiftTransferUI, ומטרת ל- iOS 15+ ו- macOS 12+ עם כלים של Swift 5.9.

החבילה תלויה במטרה השתינית המקומית NoritoBridge. החלטת החבילה מאשרת ../dist/NoritoBridge.xcframework לפני בניית, וטיולים של טרנזקציה או קונקט קריפטו זורקים טעויות שאינן זמינות כשסמלים מקומיים אינם מותאמים.

Swift מנהל חבילה

כאשר מתפתחים נגד חלל עבודה שנבדק, ציינו SwiftPM בתיאוריה המקומית של החבילה IrohaSwift/. זהות החבילה המשמשת על ידי Package.swift היא IrohaSwift:

swift
dependencies: [
    .package(name: "IrohaSwift", path: "/path/to/iroha/IrohaSwift")
],
targets: [
    .target(
        name: "YourApp",
        dependencies: [
            .product(name: "IrohaSwift", package: "IrohaSwift")
        ]
    )
]

תקן את הנתיב עבור האפליקציה שלך. אל תישכף את הנתיba הנוכחית examples/ios/ConnectMinimalApp כפי שהיא; המוניסטר הזה פותר ../../IrohaSwift ל examples/IrohaSwift.

לפני פתרון החבילה, ודא שהגשר קיים בשורש חלל העבודה:

bash
cd /path/to/iroha
make bridge-xcframework

זה מייצר dist/NoritoBridge.xcframework; IrohaSwift/Package.swift מתייחס אליו כ ../dist/NoritoBridge.xcframework.

CocoaPods

בסיס הקוד כולל גם IrohaSwift/IrohaSwift.podspec. הוא מכריז על IrohaSwift קופסה, Swift 5.9, ו-iOS 15. הפודספיק מושך Swift מקורות מהמוסד הראשי; הגשר המקומי עדיין חייב להיות נוכח וקשור לקוד העסקאות, חתימה לא-Ed25519, וConnect crypto.

התחלה מהירה

swift
import Foundation
import IrohaSwift

let torii = ToriiClient(baseURL: URL(string: "http://127.0.0.1:8080")!)
let sdk = IrohaSDK(toriiClient: torii)

let keypair = try Keypair.generate()
let accountId = try keypair.accountId()

if #available(iOS 15.0, macOS 12.0, *) {
    let balances = try await torii.getAssets(accountId: accountId)
    print("balances:", balances)
}

נסה Taira לקרוא בלבד

התחל עם סונדה פשוטה HTTP כדי לאשר כי המכשיר או הסימולטור יכולים להגיע לנקודה הסופית Taira הציבורית:

swift
import Foundation

if #available(iOS 15.0, macOS 12.0, *) {
    let url = URL(string: "https://taira.sora.org/status")!
    let (data, response) = try await URLSession.shared.data(from: url)

    if let http = response as? HTTPURLResponse {
        print("status:", http.statusCode)
    }
    print(String(decoding: data, as: UTF8.self))
}

השתמש באותו צ'ק URLSession עבור https://taira.sora.org/v1/assets/definitions?limit=5 בזמן שאתה בונה UI ולנסות מחדש את התנהגותך. לעבור ל IrohaSDK לשלוח עוזרים רק לאחר שהתطبيق משאיר חומר חתימה מאחסון בטוח והחשבונך מיומן על Taira.

כדי לבנות ולשלוח עסקאות, השתמשו בעוזרי IrohaSDK. הם קוראים לקודר העסקות המקומי בעלת תמיכה בשר:

swift
let transfer = TransferRequest(
    chainId: "00000000-0000-0000-0000-000000000000",
    authority: accountId,
    assetDefinitionId: "66owaQmAQMuHxPzxUN3bqZ6FJfDa",
    quantity: "1",
    destination: accountId,
    description: "demo",
    feePayment: .authority(chargeLimits: [], gasLimit: nil)
)

if #available(iOS 15.0, macOS 12.0, *) {
    let status = try await sdk.submitAndWait(
        transfer: transfer,
        keypair: keypair
    )
    print(status.content.status.kind)
}

TransferRequest, MintRequest, BurnRequest, ShieldRequest ו UnshieldRequest מסכימים את החשבון הקנוני IDs והגדרת נכס Base58 הלא מקובלת קנונית IDs לפני חתימה.

משכנתא מקומי

Swift בונה הוראות שוק ושל אבטחה אנונימית כצריכים מועילים של Norito JSON באמצעות NativeEscrowInstructionBuilders או עוזרים הוותיקים IrohaSDK.build*Escrow*. ראה אבטחת נכסים מקומיים לדוגמאות, שדות הוכחה אנונימיים, ואת סימן רשות פתרון מחלוקת.

חתימה

Keypair הוא הנוחות של Ed25519 API. עבור אלגוריתמים אחרים, תבנה IrohaSDK עם defaultSigningAlgorithm ותשתמש ב generateSigningKey() או signingKey(fromSeed:):

swift
let pqSdk = IrohaSDK(
    baseURL: torii.baseURL,
    defaultSigningAlgorithm: .mlDsa
)
let signingKey = try pqSdk.generateSigningKey()

ה- SigningAlgorithm enum כולל כיום את Ed25519, secp256k1, BLS גרסאות נורמליות וקטנות, ML-DSA, GOST R 34.10-2012 קבוצות פרמטרים, ו SM2. תמיכה גשר מקומית נדרשת מחוץ למסלול הנוחות של Ed25519.

חיבור

לקלינט Connect מתבצע במקור Swift, עם קודקים קריפטו ומסגרת תומכים ב- NoritoBridge:

swift
let sessionID = Data(repeating: 0, count: 32) // replace with the session bytes
let sid = "<session-id-from-/v1/connect/session>"
let request = try ConnectClient.makeWebSocketRequest(
    baseURL: URL(string: "https://node.example")!,
    sid: sid,
    role: .app,
    token: "<token>"
)

let client = ConnectClient(request: request)
await client.start()

let session = ConnectSession(sessionID: sessionID, client: client)
let keyPair = try ConnectCrypto.generateKeyPair()

ConnectSession מטפל בפיקוחים פתוחים וסגורים, קריאת קספת מוצפנת, מפתחות כיוון, בקרת זרימה, זרמי אירועים, זרמים של איזון, וכתבי דיאגנוסטיקה.

הכיסוי הנוכחי

מקור Swift כולל כיום:

  • ToriiClient HTTP עוזרים לחשבונות, נכסים, שם כינוי, דפים של חוקר, RWA, חוזים, מלטסיג, ממשל, מחברות, זמינות נתונים, נכסים סודיים, מצב הערך/זמן הפעלה, בריאות, מדידות, וזרמים SSE
  • IrohaSDK בונים עסקאות ועוזרים להגיש/הצבעה עבור העברה, מנטה, שריפה, כיסוי, ללא כיסוי. ZK העברה, ZK רישום נכסים, מטא-מנתונים, דרישות מזהה, רישום רב סיג, הוראות לניהול.
  • תמיכה בשורה של עסקאות בהמתנה דרך PendingTransactionQueue ו FilePendingTransactionQueue
  • כתובת חשבון ועוזרי I105 באמצעות AccountAddress ו AccountId
  • גבי חתימה Ed25519, secp256k1, ML-DSA, BLS, GOST ו SM2, עם תמיכה בישר מקומית, כאשר זה נחוץ.
  • הוראות אבטחה מקומית לבניית מטען מועיל לשוק ואבטחה אנונימית
  • חיבור WebSocket, מסגרת, קריפטו, ישיבה, בתור, חזרה, ועוזרי דיאגנסטיקה
  • הכנות של Kagemusha, תוספת וחיסוי טייפ, מצב הפעולה, פתק, חבילת עמיתים, קבלה ומודלים של זרם QR
  • SoraFS, סיועי זמינות הנתונים וחיבורת ראיות

API דוגמא

השתמש IrohaSwift/Sources/IrohaSwift ליישום ציבורי ו IrohaSwift/Tests/IrohaSwiftTests לדוגמאות השימוש שנבדקו מאותו תיקון מקורות.

מקורות ראיות

  • IrohaSwift/Package.swift
  • IrohaSwift/IrohaSwift.podspec
  • IrohaSwift/Sources/IrohaSwift/ToriiClient.swift
  • IrohaSwift/Sources/IrohaSwift/TxBuilder.swift
  • IrohaSwift/Sources/IrohaSwift/TransactionEncoder.swift
  • IrohaSwift/Sources/IrohaSwift/ConnectClient.swift
  • IrohaSwift/Sources/IrohaSwift/ConnectSession.swift