hyperledger/iroha-ios

Name: iroha-ios

Owner: Hyperledger

Description: iOS Swift library for Iroha, a simple distributed ledger

Created: 2016-09-17 15:12:44.0

Updated: 2018-05-24 09:26:07.0

Pushed: 2018-05-12 20:53:09.0

Homepage: http://iroha.tech

Size: 82102

Language: C++

GitHub Committers

UserMost Recent Commit# Commits

Other Committers

UserEmailMost Recent Commit# Commits

README

Hyperledger Iroha iOS library

This library was implemented in order to provide key generation and signing logic for queries and transactions passed to Hyperledger Iroha

For establishing connection with Hyperledger Iroha by this library you need to import the following modules into your swift project:

How to start with example project

In this repository you can find an example project called SwiftyIrohaExample.xcodeproj. This project can help you to see how to establish connection with Hyperledger Iroha by using this library

Preparing example project

Before starting you need to install the following software on you mac:

Instruction:
  1. Go into folder you want to download example project:
    path/to/your/folder/for/example/iroha-ios/project/
    
  2. Clone iroha-ios repository:
     clone https://github.com/hyperledger/iroha-ios.git
    
  3. Go inside project folder:
    iroha-ios
    
  4. Install all dependencies:
     install
    
  5. Open project in Xcode:
     SwiftyIroha.xcworkspace
    
  6. Run target SwiftyIrohaExample
Preparing Hyperledger Iroha instance launched in Docker

Before starting you need to install the following software on you mac:

Instruction:
  1. Launch Hyperledger Iroha instance according to this instruction:
  2. Launching Hyperledger Iroha
How to import this library into your project
Install manually
Please import generated framework form this project (SwiftyIroha targer) into your project
or start modyfying this project (SwiftyIrohaExample target) it is already working with library
Install via Carthage
Currently not available, please inport framework manually
Install via CocoaPods
Currently not available, please inport framework manually
How to use this library
Keypair
Generating new keypair
modelCrypto = IrohaModelCrypto()

enerating new keypair object
newKeypair = modelCrypto.generateKeypair()
Generating new keypair from existing one
etting keypair
publicKey = IrohaPublicKey(value: "407e57f50ca48969b08ba948171bb2435e035d82cec417e18e4a38f5fb113f83")
privateKey = IrohaPrivateKey(value: "1d7e0a32ee0affeb4d22acd73c2c6fb6bd58e266c8c2ce4fa0ffe3dd6a253ffb")

nitializing keypair object
existingKeypair = IrohaKeypair(publicKey: publicKey,
                               privateKey: privateKey)

modelCrypto = IrohaModelCrypto()

enerating keypair object from excisting keypair object
newKeypair = modelCrypto.generateNewKeypair(from: existingKeypair)
Transactions
Creating transaction object
irohaTransactionBuilder = IrohaTransactionBuilder()

reating transaction object for Iroha
unsignedTransaction = try irohaTransactionBuilder
                                .creatorAccountId("admin@test")
                                .createdTime(Date())
                                .transactionCounter(1)
                                .createDomain(withDomainId: "ru", withDefaultRole: "user")
                                .createAssets(withAssetName: "dollar", domainId: "ru", percision: 0.1)
                                .build()
Signing transaction object
reating helper class for signing unsigned transaction object
irohaTransactionPreparation = IrohaTransactionPreparation()

igning transaction and getting object which is ready for converting to GRPC object
irohaSignedTransactionReadyForConvertingToGRPC = 
    irohaTransactionPreparation.sign(unsignedTransaction, with: keypair)
Creating GRPC transaction object
reating GRPC transaction object from signed transaction
irohaGRPCTransaction = Iroha_Protocol_Transaction()


try irohaGRPCTransaction.merge(serializedData: irohaSignedTransactionReadyForConvertingToGRPC)

// Checking that transaction is excactly transaction that was created
print("Transaction to Iroha: \n")
print("\(try irohaGRPCTransaction.payload.jsonString()) \n")
tch {
let nsError = error as NSError
print("\(nsError.localizedDescription) \n")

Sending transaction object to Hyperledger Iroha
serviceForSendingTransaction = Iroha_Protocol_CommandServiceService(address: "127.0.0.1:50051")


try serviceForSendingTransaction.torii(irohaGRPCTransaction)
tch {
let nsError = error as NSError
print("\(nsError.localizedDescription) \n")

Queries
Creating query object
reating unsigned query object
queryBuilder = IrohaQueryBuilder()

unsignedQuery = try queryBuilder
                        .creatorAccountId("admin@test")
                        .createdTime(Date())
                        .queryCounter(1)
                        .getAssetInfo(byAssetsId: "dollar#ru")
                        .build()
Signing query object
reating helper class for signing unsigned query
irohaQueryPreparation = IrohaQueryPreparation()

irohaSignedQueryReadyForConvertingToGRPC = irohaQueryPreparation.sign(unsignedQuery, with: keypair)
Creating GRPC query object
irohaGRPCQuery = Iroha_Protocol_Query()


try irohaGRPCQuery.merge(serializedData: irohaSignedQueryReadyForConvertingToGRPC)

// Checking that query is excactly query that was created
print("Query to Iroha: \n")
print("\(try irohaGRPCQuery.payload.jsonString()) \n")
tch {
let nsError = error as NSError
print("\(nsError.localizedDescription) \n")

Sending query object to Hyperledger Iroha
serviceForSendingQuery = Iroha_Protocol_QueryServiceService(address: "127.0.0.1:50051")


let result = try serviceForSendingQuery.find(irohaGRPCQuery)
tch {
let nsError = error as NSError
print("\(nsError.localizedDescription) \n")

Author

AlexeyMukhin

License

Copyright 2018 Soramitsu Co., Ltd.

Licensed under the Apache License, Version 2.0 (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.


This work is supported by the National Institutes of Health's National Center for Advancing Translational Sciences, Grant Number U24TR002306. This work is solely the responsibility of the creators and does not necessarily represent the official views of the National Institutes of Health.