Swift编写的EOS开源框架SwiftyEOS

栏目: Swift · 发布时间: 5年前

内容简介:SwiftyEOS是一个用于与EOS交互的开源框架,用Swift编写。可以在iOS和macOS上使用。特点: - EOS密钥对生成 - 私钥导入 - 签名哈希 - 基本的RPC API(链/历史)可查询客户端 - 交易(EOS token 转账) - 帮助类处理iOS上的脱机钱包 - 在iOS上加密/解密导入私钥SwiftyEOS现在支持secp256k1密钥对。

SwiftyEOS是一个用于与EOS交互的开源框架,用Swift编写。可以在iOS和macOS上使用。

特点: - EOS密钥对生成 - 私钥导入 - 签名哈希 - 基本的RPC API(链/历史)可查询客户端 - 交易(EOS token 转账) - 帮助类处理iOS上的脱机钱包 - 在iOS上加密/解密导入私钥

如何使用它

  • 1.将 LibrariesSources 文件夹复制到项目中,不需要 main.swift
  • 2.如果不是针对iOS平台,请删除 Sources/Utils/iOS
  • 3.将 Libraries/include 添加到Header搜索路径中。
  • 4.将 Libraries/include/Bridging-Header.h 设置为Objective-C Bridging Header。如果你有自己的bridging header,请复制该文件中的所有导入内容并粘贴到你自己的文件中。
  • 5.编译然后等结果

密钥对生成

SwiftyEOS现在支持secp256k1密钥对。

secp256r1密钥对生成有bug但我无法弄清楚原因。从 cleos 创建的单元测试创建密钥 --r1 不会通过。你可能不会将secp256r1视为一个选项,因为 cleos wallet 命令也无法导入这些键。

生成随机密钥对:

let (pk, pub) = generateRandomKeyPair(enclave: .Secp256k1)

很容易对吧?

print("private key: \(pk!.wif())")
print("public key : \(pub!.wif())")

// private key: PVT_K1_5HxrYTdZX89zodtJhTzCk87MfNZAkiBRfFvSX8kacYjtwaDpTkL
// public key : PUB_K1_4yDYdmcVcXxAxeNsUWRG7x9FKQE4HbJZdzgZFv1AYxk6oSVcLd

PVT_K1_PUB_K1_ 前缀是标准密钥表示的一部分。但是EOS系统和SwiftyEOS也支持旧方式:

print("private key: \(pk!.rawPrivateKey())")
print("public key : \(pub!.rawPublicKey())")

// private key: 5HxrYTdZX89zodtJhTzCk87MfNZAkiBRfFvSX8kacYjtwaDpTkL
// public key : EOS4yDYdmcVcXxAxeNsUWRG7x9FKQE4HbJZdzgZFv1AYxk6oSVcLd

导入现有密钥:

let importedPk = try PrivateKey(keyString: "5HxrYTdZX89zodtJhTzCk87MfNZAkiBRfFvSX8kacYjtwaDpTkL")
let importedPub = PublicKey(privateKey: importedPk!)

带分隔符和前缀:

let importedPk = try PrivateKey(keyString: "PVT_K1_5HxrYTdZX89zodtJhTzCk87MfNZAkiBRfFvSX8kacYjtwaDpTkL")
let importedPub = PublicKey(privateKey: importedPk!)

RPC API

EOSRPC.sharedInstance.chainInfo { (chainInfo, error) in
    if error == nil {
        print("Success: \(chainInfo!)")
    } else {
        print("Error: \(error!.localizedDescription)")
    }
}

目前我们有一些基本的RPC端点,你可以在 Sources/SwiftyEOS/Network 找到它。

iOS的密钥存储

我们有 SEWallet.swift iOS版离线钱包管理助手。

SEWallet.swift 可以方便地保存AES加密的密钥信息到文件系统。默认位置是应用程序的沙盒。

目前还不支持多个钱包管理。

在iOS上创建新钱包

在Objective-C中:

[SEKeystoreService.sharedInstance newAccountWithPasscode:passcode succeed:^(SELocalAccount *account) {
} failed:^(NSError *error) {
        
}];

检索已保存的钱包

[SELocalAccount currentAccount];

如果没有保存钱包,它将返回零。

交易

交易行为目前尚未完全支持,但你仍可以尝试使用 main.swift 中的示例代码。

整个功能完成后,将提供相关文件。

  • 货币转账(2018.08.15)
  • 提交一般交易(2018.08.16)
  • iOS上的设备上(离线)钱包锁定和解锁(2018.08.17)
  • 押注/取消押注/净值(2018.08.28)
  • 买/卖ram(2018.08.28)
  • 创建账户(2018.10)
  • 用params列表推送交易(2018.11.05)
  • 使用助记符创建/导入密钥对

货币转账

var transfer = Transfer()
transfer.from = "agoodaccount"
transfer.to = "gq3dinztgage"
transfer.quantity = "1.0000 EOS"
transfer.memo = "eureka"

Currency.transferCurrency(transfer: transfer, code: "eosio.token", privateKey: importedPk!, completion: { (result, error) in
    if error != nil {
        if error is RPCErrorResponse {
            print("\((error as! RPCErrorResponse).errorDescription())")
        } else {
            print("other error: \(String(describing: error?.localizedDescription))")
        }
    } else {
        print("done.")
    }
})

提交一般交易

swift:

let account = "raoji"
let asset = "1.0000 EPRA"

let data = "{\"hey\": {\"account\":\"" + account  + "\", \"quantity\":\"" + asset + "\"}}"
let abi = try! AbiJson(code: "prabox1", action: "withdraw", json: data)

TransactionUtil.pushTransaction(abi: abi, account: account, privateKey: importedPk!, completion: { (result, error) in
    if error != nil {
        if (error! as NSError).code == RPCErrorResponse.ErrorCode {
            print("\(((error! as NSError).userInfo[RPCErrorResponse.ErrorKey] as! RPCErrorResponse).errorDescription())")
        } else {
            print("other error: \(String(describing: error?.localizedDescription))")
        }
    } else {
        print("Ok. Txid: \(result!.transactionId)")
    }
})

Objective-C:

AbiJson *your_abi;
[TransactionUtil pushTransactionWithAbi:your_abi
                                account:@"your_account"
                               pkString:@"your_private_key"
                             completion:^(TransactionResult *result, NSError *error) {
        
}];

iOS上的设备上(离线)钱包锁定和解锁

我们添加 locktimedUnlock 函数到 SELocalAccount

Cpu/net/ram 操作

ResourceUtil.swift 文件包括 ResourceUtil 类,包括下面几个方法:

stakeResource
unstakeResource
buyRam
sellRam

Stake resource:

ResourceUtil.stakeResource(account: "raoji", net: 1.0, cpu: 1.0, pkString: "5HsaHvRCPrjU3yhapB5rLRyuKHuFTsziidA13Uw6WnQTeJAG3t4", completion: { (result, error) in
})

助记符

建一个新的密钥对:

let (pk, pub, mn) = generateRandomKeyPair(enclave: .Secp256k1)

导入现有助记符:

let (pk, mn) = PrivateKey(enclave: .Secp256k1, mnemonicString: "your words here")

我们在 SEWallet.swift 中有密钥管理的iOS助手API和助记符。现在可以使用 SEKeystoreService 类创建和导入助记符(如果你自己存储,则可以使用SEKeystore更深入的API):

SEKeystoreService.sharedInstance.newAccountAndMnemonic(passcode: "your pass here", succeed: { (account, mnemonic) in

}) { (error) in

}

我们正在为所有顶级API使用 NSObject 固有类,因此在不提供额外桥接文件的情况下调用Objective-C也是一样的。

SEWallet.swift 文件中也有iOS的帮助方法。

谢谢。

======================================================================

分享一些以太坊、EOS、比特币等区块链相关的交互式在线编程实战教程:

  • EOS教程,本课程帮助你快速入门EOS区块链去中心化应用的开发,内容涵盖EOS工具链、账户与钱包、发行代币、智能合约开发与部署、使用代码与智能合约交互等核心知识点,最后综合运用各知识点完成一个便签DApp的开发。
  • java以太坊开发教程,主要是针对 java 和android程序员进行区块链以太坊开发的web3j详解。
  • python以太坊,主要是针对 python 工程师使用web3.py进行区块链以太坊开发的详解。
  • php以太坊,主要是介绍使用 php 进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和交易等内容。
  • 以太坊入门教程,主要介绍智能合约与dapp应用开发,适合入门。
  • 以太坊开发进阶教程,主要是介绍使用node.js、 mongodb 、区块链、ipfs实现去中心化电商DApp实战,适合进阶。
  • C#以太坊,主要讲解如何使用C#开发基于.Net的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器和交易等。
  • java比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Java代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Java工程师不可多得的比特币开发学习课程。
  • php比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Php代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Php工程师不可多得的比特币开发学习课程。
  • tendermint区块链开发详解 ,本课程适合希望使用tendermint进行区块链开发的工程师,课程内容即包括tendermint应用开发模型中的核心概念,例如ABCI接口、默克尔树、多版本状态库等,也包括代币发行等丰富的实操代码,是 go 语言工程师快速入门区块链开发的最佳选择。

汇智网原创翻译,转载请标明出处。这里是原文 Swift编写的EOS开源框架SwiftyEOS


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Machine Learning in Action

Machine Learning in Action

Peter Harrington / Manning Publications / 2012-4-19 / GBP 29.99

It's been said that data is the new "dirt"—the raw material from which and on which you build the structures of the modern world. And like dirt, data can seem like a limitless, undifferentiated mass. ......一起来看看 《Machine Learning in Action》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

URL 编码/解码
URL 编码/解码

URL 编码/解码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具