StellarKit

一个用于与 Stellar 区块链网络交互的框架。StellarKit 与 Horizon 节点通信。

概念

账户

Stellar 将账户表示为 ED25519 密钥对。公钥代表网络上的账户,而私钥仅用于签署交易。

公钥的文本表示使用以下格式

G<密钥的 base32 表示 + 2 字节 CRC>

示例: GCDXVSRN7TORSWS6N3FEHV3KUKGK4F74ZJDRENEAKVDWXIEFR5BOKMGK

资产

资产代表可转移的单位。Stellar 使用一种原生单位,称为 Lumen,用于支付交易费用和账户维护。该网络还支持非原生或用户定义的资产,这些资产通过代码和发行者进行标识。

资产发行者是被信任可以发行资产的账户。

信任

为了接收非原生资产,账户必须信任发行者。这允许多个具有相同代码的资产共存。

设计

StellarKit 公开了 Stellar,这是一个无状态的结构体,带有静态方法。除了特定于方法参数外,每个方法都接受一个名为 node 的参数,其类型为 Stellar.Node

Stellar.Node
struct Node {
    let baseURL: URL
    let networkId: NetworkId
}
NetworkId
enum NetworkId {
    case test
    case main
    case custom(String)
}

Stellar 通过预定义的字符串标识网络。Stellar 发展基金会运行着两个公共网络。一个是主网,另一个用于测试。开发者可以使用自己的标识符建立私有网络。

账户
public protocol Account {
    var publicKey: String? { get }

    var sign: (([UInt8]) throws -> [UInt8])? { get }
}

StellarKit 不包含账户概念的实现。相反,它依赖于 Account 协议来提供所需的功能。

这种设计允许 StellarKit 在加密实现和账户存储机制方面保持不可知。它也避免了第三方依赖,因为 iOS(和 macOS)没有 ED25519 算法的原生实现。

Promises

大多数 Stellar 方法返回一个 Promise,它是对异步过程的抽象,允许链式操作。StellarKit 使用 KinUtil 提供的最小实现,以避免第三方依赖。

功能

目前,StellarKit 支持以下操作

内联文档描述了如何使用每个方法。

入门指南

Stellar 网络是为使用非原生资产而设计的。本节介绍如何准备一个账户来发送和接收此类资产。

  1. 在网络上创建账户

    此操作需要一个资金账户,该账户有足够的 Lumen 以提供必要的储备金。通常的做法是提供额外的资金,以允许账户支付交易费用。此操作通常由服务执行,并且超出本框架的范围。

  2. 信任资产.

    此操作由 Stellar.trust(...) 执行。

    public static func trust(asset: Asset,
                             account: Account,
                             configuration: Configuration) -> Promise<String>