内容简介: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.将
Libraries
和Sources
文件夹复制到项目中,不需要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上的设备上(离线)钱包锁定和解锁
我们添加 lock
和 timedUnlock
函数到 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
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 开源 | Hippy:腾讯开源的跨端开发框架
- WeGeek | WePY 开源框架
- 开源 | vnpy:基于 Python 的开源量化交易平台开发框架
- 优秀开源框架的扩展机制实现
- 开源Botnet框架Byob分析
- 滴滴开源小程序框架 Mpx
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
C++程序设计语言
Bjarne Stroustrup / 裘宗燕 / 机械工业出版社 / 2010-3-1 / 99.00元
本书是在C++语言和程序设计领域具有深远影响、畅销不衰的著作,由C++语言的设计者编写,对C++语言进行了最全面、最权威的论述,覆盖标准C++以及由C++所支持的关键性编程技术和设计技术。本书英文原版一经面世,即引起业内人士的高度评价和热烈欢迎,先后被翻译成德、希、匈、西、荷、法、日、俄、中、韩等近20种语言,数以百万计的程序员从中获益,是无可取代的C++经典力作。 在本书英文原版面世10年......一起来看看 《C++程序设计语言》 这本书的介绍吧!