Bytom 移動端錢包 SDK 開發基礎

來源:互聯網
上載者:User

比原項目倉庫:

Github地址:https://github.com/Bytom/bytom

Gitee地址:https://gitee.com/BytomBlockchain/bytom

Bytom-Mobile-Wallet-SDK 是從bytom源碼中抽離出的錢包層代碼,並且對錢包層代碼進行了改造。使用gomobile可以將代碼 編譯成Android和iOS平台可用的SDK,使用編譯後的Android和iOS錢包SDK可以在移動端實現建立bytom密鑰、賬戶、地址和交易簽名功能。

Bytom-Mobile-Wallet-SDK源碼簡介

SDK源碼放在項目的sdk檔案夾中,android和ios檔案夾是使用SDK的demo項目,bind.go 中首字母大寫可以外部調用的函數會作為提供給Android和iOS調用的API。bytom建立的金鑰組會儲存在磁碟單獨的檔案中,而且對私密金鑰進行了加密,賬戶地址資料是儲存在go實現的leveldb中,所以Android和iOS平台也需要提供資料存放區的路徑。

func InitWallet(storagePath string) {    hsm := pseudohsm.New(storagePath)    walletDB := db.NewDB("wallet", "leveldb", storagePath)    accounts := account.NewManager(walletDB)    assets := asset.NewRegistry(walletDB)    wallet := aWallet.NewWallet(walletDB, accounts, assets, hsm)    api = aApi.API{Wallet: wallet}}

Android和iOS平台叫用其他錢包API的之前需要先調用InitWallet這個API,參數是磁碟上的絕對路徑,InitWallet會對整個錢包進行一個初始化, 其中最重要是初始化leveldb的儲存。其他的CreateKey、CreateAccount、CreateAccountReceiver是建立密鑰、賬戶、地址等API,RestoreWallet API能夠對錢包所有賬戶地址資產進行備份匯出json格式的資料。

Bytom-Mobile-Wallet-SDK的編譯

SDK代碼的編譯首先需要正確的安裝golang和gomobile,golang需要1.7以上版本。
Android平台需要安裝JDK、Android SDK、Android NDK,並且需要將Android SDK的platform-tools、ndk-bundle 添加到PATH系統內容變數中。iOS平台編譯環境配置相對比較簡單只需要安裝Xcode就可以了。
Clone項目到本地$GOPATH/src下:

 git clone https://github.com/Bytom-Community/Bytom-Mobile-Wallet-SDK $GOPATH/src/github.com/bytom-community/mobile

Android

gomobile init -ndk ~/path/to/your/ndkcd $GOPATH/src/github.com/bytom-community/mobilegomobile bind -target=android github.com/bytom-community/mobile/sdk/

如果需要減小SDK的體積給gomobile bind指令加上-ldflags=-s參數:

gomobile bind -target=android -ldflags=-s github.com/bytom-community/mobile/sdk/

執行指令後會在mobile檔案夾產生wallet.aar和wallet-sources.jar檔案。

iOS

cd $GOPATH/src/github.com/bytom-community/mobilegomobile bind -target=ios github.com/bytom-community/mobile/sdk/

如果需要減小SDK的體積給gomobile bind指令加上-ldflags=-w參數:

$ gomobile bind -target=ios -ldflags=-w github.com/bytom-community/mobile/sdk/

執行指令後會在mobile檔案夾產生wallet.framework檔案。
由於gomobile現在沒有支援bitcode,所以產生的iOS SDK也不支援bitcode。

Bytom-Mobile-Wallet-SDK的使用

Android

拷貝wallet.aar和wallet-sources.ja到Android項目的app的libs檔案夾下,並在app module中的build.gradle檔案中添加:

android {    repositories {        flatDir { dirs 'libs' }    }}dependencies {    implementation fileTree(include: ['*.jar'], dir: 'libs')    implementation(name: 'wallet', ext: 'aar')}

sync project後可以在Android項目中對SDK的API進行調用:

package io.bytom.community;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.widget.TextView;import wallet.Wallet;public class MainActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        TextView keyTextView = (TextView) findViewById(R.id.key_textview);        String storagePath = getFilesDir().toString();        Log.d("storagePath", storagePath);        Wallet.initWallet(storagePath);        String keyResult = Wallet.createKey("Marshall", "123456");        Log.d("keyResult", keyResult);        keyTextView.setText(keyResult);    }}

iOS

通過項目target的Linked frameworks and libraries把wallet.framework添加到項目,可以在iOS項目中對SDK的API進行調用:

#import "ViewController.h"#import "Wallet/Wallet.h"  // Gomobile bind generated framework@interface ViewController ()@end@implementation ViewController@synthesize textLabel;- (void)loadView {    [super loadView];    NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];    WalletInitWallet(docPath);    textLabel.text = WalletCreateKey(@"kevin",@"123456");}@end
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.