11
5

More than 5 years have passed since last update.

nem-swiftを作っている

Last updated at Posted at 2017-12-24

NEMの魅力はAPIで 比較的気軽にNEMのブロックチェーンにアクセスできることで、参照系のAPIであればブラウザでアクセスすることも可能です。

例) アカウントの情報を取得する
http://alice2.nem.ninja:7890/account/get/forwarded?address=NC2ZQKEFQIL3JZEOB2OZPWXWPOR6LKYHIROCR7PK

しかし、トランザクションを発生させるAPIは秘密鍵を扱うため、ローカル内で叩くか、トランザクションのデータをバイト配列にして署名して送信する必要があります。
また、アカウントの生成するAPIもありますが、こちらも秘密鍵が平文で渡ってきてしまうAPIのためローカルで叩く以外は推奨されておらず、基本的にローカルで計算して生成する必要があります。

これらは、セキュリティを確保する上で重要なことではありますが、実装にはある程度の知識と手間がかかるため、アカウントの生成やトランザクションの発生させるAPIを実行するのは参照系に比べると敷居が高くなってしまします。

そのハードルを軽減するために、公式でNEM libraryを出したり、有志で各言語のラッパーを作っています。

nem-swiftも、主にiOSアプリ開発者が気軽にNEMのブロックチェーンに気軽にアクセスすることを目指して作っています。
本当は、リリースして紹介したかったのですが、色々忙しくなってまだリリースできていないのですが、アカウントの生成や送金トランザクションの生成はできるようになっているので、その紹介をしたいと思います。

アカウントを生成する

// アカウントの生成を行う. 引数のnetworkはメインネットかテストネットを入れる
let account = Account.generteAccount(network: .mainnet)
// 生成したアカウントのアドレス
account.address.value
// 生成したアカウントの秘密鍵
account.keyPair.privateKeyHexString()
// 生成したアカウントの公開鍵
account.keyPair.publicKeyHexString()

// 既存の秘密鍵から取り込む 引数として秘密鍵とネットワークの種別を取る
 Account.repairAccount(account.keyPair.importKey(), network: .testnet)

モザイク送信トランザクションを発生させる

// 送信するモザイクを定義する
let mosaic = TransferMosaic(namespace: "daoka", mosaic: "daokasweep", quantity: 1)
let mosaics = [mosaic]

// リクエストアナウンスリクセスとを生成する
let announce = TransferTransactionHelper.

// 引数
// publicKey: 送信元の公開鍵
// network: アドレスが属しているネットワーク上のアドレス
// recepientAddress: 受取先アドレス
// mosics: 送信するモザイクの定義
// messageType: メッセージが暗号化されいるか確認するツール
generateMosaicTransferRequestAnnounce(publicKey: account.keyPair.publicKey,
             network: .testnet,
    recepientAddress: account.address.value,
             mosaics: mosaics,
         messageType: .Plain,
             message: "mosaic transfer test")

// モザイク送金トランザクションを実行するための準備を行う        
let requestAnnounce = RequestAnnounce.generateRequestAnnounce(requestAnnounce: announce,
     keyPair: account.keyPair)

 // モザイク送金トランザクションを実行する
Session.send(NISAPI.TransactionAnnounce(data: requestAnnounce.data, signature: requestAnnounce.signature)) { result in
    switch result {
    case .success(let response):
         print(response)
    case .failure(let error):

    switch error {
        case .responseError(let e as NISError):
             print(e)
        default:
             print(error)
         }
    }
}

肝となる部分はある程度実装できたのですが、テスト、検証、ドキュメントの生成が追いついていない状況です。

上記の機能が使えるソースコードは、https://github.com/daoka/nem-swift/tree/develop からクローンすることが可能です。、気になった点などあればフィードバックください。

なるべく早く公開できるようがんばります。。

11
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
5