SwiftyEOS是一個用於與EOS交互的開源框架,用Swift編寫。能夠在iOS和macOS上使用。php
特色:java
Libraries
和Sources
文件夾複製到項目中,不須要main.swift
。Sources/Utils/iOS
。Libraries/include
添加到Header搜索路徑中。Libraries/include/Bridging-Header.h
設置爲Objective-C Bridging Header。若是你有本身的bridging header,請複製該文件中的全部導入內容並粘貼到你本身的文件中。SwiftyEOS如今支持secp256k1密鑰對。node
secp256r1密鑰對生成有bug但我沒法弄清楚緣由。從cleos
建立的單元測試建立密鑰--r1
不會經過。你可能不會將secp256r1視爲一個選項,由於cleos wallet
命令也沒法導入這些鍵。python
let (pk, pub) = generateRandomKeyPair(enclave: .Secp256k1)
很容易對吧?android
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!)
帶分隔符和前綴:web
let importedPk = try PrivateKey(keyString: "PVT_K1_5HxrYTdZX89zodtJhTzCk87MfNZAkiBRfFvSX8kacYjtwaDpTkL") let importedPub = PublicKey(privateKey: importedPk!)
EOSRPC.sharedInstance.chainInfo { (chainInfo, error) in if error == nil { print("Success: \(chainInfo!)") } else { print("Error: \(error!.localizedDescription)") } }
目前咱們有一些基本的RPC端點,你能夠在Sources/SwiftyEOS/Network
找到它。mongodb
咱們有SEWallet.swift
iOS版離線錢包管理助手。編程
SEWallet.swift
能夠方便地保存AES加密的密鑰信息到文件系統。默認位置是應用程序的沙盒。json
目前還不支持多個錢包管理。
在Objective-C中:
[SEKeystoreService.sharedInstance newAccountWithPasscode:passcode succeed:^(SELocalAccount *account) { } failed:^(NSError *error) { }];
[SELocalAccount currentAccount];
若是沒有保存錢包,它將返回零。
交易行爲目前還沒有徹底支持,但你仍能夠嘗試使用main.swift
中的示例代碼。
整個功能完成後,將提供相關文件。
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) { }];
咱們添加lock
和timedUnlock
函數到SELocalAccount
。
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