eos-swift
专为 iOS 开发设计,为 Swift 提供的 EOS 库。
使用 CocoaPods 安装
使用 pod --version: 1.5.3 测试
use_frameworks!
target 'YOUR_TARGET_NAME' do
pod 'eosswift', '1.5'
end
替换 YOUR_TARGET_NAME,然后在 Podfile 目录中输入:
pod install
入门教程
eosswiftTests
目录包含了一套完整的集成测试,探索这些测试以快速判断 SDK 提供的功能。
eos-chain-actions
测试最高级别的抽象;推送由操作组成的事务。eos-http-rpc
测试与 nodeos HTTP RPC api 的交互。eos-abi-writer
测试本地 abi 字节的建设。
eos-core
核心模块包含与 EOS 网络交互所需的必需核心构建块。
密钥对
EOS密钥对使用micro-ecc库生成。
创建一个新的密钥对
// new key pair
let eosPrivateKey = try! EOSPrivateKey()
let eosPublicKey = eosPrivateKey.publicKey
// private key from encoded string
let privKey1 = try! EOSPrivateKey(base58: "5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3")
// private key from bytes
let privKey2 = try! EOSPrivateKey(ecKeyPrivateKey: ECPrivateKey(privKeyData: eosPrivateKey.bytes()))
使用私钥签名字节数据
当交易推送到EOS网络时,必须使用EOS私钥对打包的交易字节进行签名。
let bytesToSign = imaginaryAbi.toData()
let privateKey = try! EOSPrivateKey()
let signature = PrivateKeySigning().sign(digest: bytesToSign, eosPrivateKey: privateKey)
块ID详情
从块ID中提取块号和前缀。
let blockIdDetails = BlockIdDetails(blockId: "0000000ac7619ca01df1e0b4964921020e772ceb7343ec51f65537cdbce192d3")
let blockNum = blockIdDetails.blockNum
let blockPrefix = blockIdDetails.blockPrefix
eos-abi-writer
abi_json_to_bin的本地替代方案,使用反射并通过Encodable
协议将结构值写入字节数组。
模型
字节写入模型是采用Encodable
协议的结构体,成员变量的类型用于确定数据如何写入字节数组。对于更复杂的数据类型,可以使用AbiTypeWriter
的衍生,如AssetWriterValue
、AccountNameWriter
或PublicKeyWriter
。
struct TransactionAbi : Encodable {
let expiration: TimestampWriterValue
let ref_block_num: BlockNumWriterValue
let ref_block_prefix: BlockPrefixWriterValue
let max_net_usage_words: UInt64
let max_cpu_usage_ms: UInt64
let delay_sec: UInt64
let context_free_actions: [ActionAbi]
let actions: [ActionAbi]
let transaction_extensions: StringCollectionWriterValue
}
写入字节
《Encodable》协议有两个扩展函数,分别叫《toHex》和《toData》。《toData》函数会把结构体值写入字节数组。《toHex》函数会把结构体值写入字节数组并将字节编码成十六进制字符串,换句话说,就是《abi_bin》。
示例
查看《eos-swiftTests/eos-chain-actions/abihex》测试包以获取abi字节写入示例。
eos-http-rpc
一个用于向nodeos RPC HTTP API发起请求的HTTP客户端。
工厂
可以用《ChainApiFactory》和《HistoryApiFactory》来创建HTTP客户端接口。
let chainApi = ChainApiFactory.create(rootUrl: Config.CHAIN_API_BASE_URL)
ChainApi
《ChainApi》接口包含对《chain/》资源的所有网络请求。例如:chain/get_info
chainApi.getInfo().subscribe(onSuccess: { response in
let info: Info = response.body!
}, onError: { error in
let httpErrorResponse = error as! HttpErrorResponse<ChainError>
print(httpErrorResponse.bodyString)
})
《HistoryApi》接口包含对《history/》资源的所有网络请求。例如:history/get_transaction
historyApi.getTransaction(body: GetTransaction(id: action.action_trace.trx_id)).subscribe(onSuccess: { response in
let historicTransaction: HistoricTransaction = response.body!
}, onError: { error in
let httpErrorResponse = error as! HttpErrorResponse<ChainError>
print(httpErrorResponse.bodyString)
})
鸣谢
为memtripblock投票
如果您觉得这个SDK很有用,请为memtripblock作为区块生产者投票。我们致力于开源所开发的全部软件,让我们一起共同构建EOS的未来,在手机端实现这一目标!