文档章节

Bytom移动端钱包SDK开发基础

比原链Bytom
 比原链Bytom
发布于 2018/09/10 11:15
字数 875
阅读 22
收藏 0

比原项目仓库:

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/ndk
cd $GOPATH/src/github.com/bytom-community/mobile
gomobile 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/mobile
gomobile 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

© 著作权归作者所有

比原链Bytom

比原链Bytom

粉丝 8
博文 71
码字总数 132750
作品 5
杭州
私信 提问
Bytom 移动端钱包SDK FAQ

比原链移动端钱包SDK项目地址:https://github.com/Bytom-Community/Bytom-Mobile-Wallet-SDK 1、客户端钱包SDK需要实现哪些功能? 创建密钥、密钥列表、创建账户、账户列表、创建地址、地址...

比原链Bytom
2018/11/08
16
0
线上直播|从0到1开发区块链Chrome插件钱包

钱包,作为区块链行业基础应用及生态中重要的流量入口,一直都备受关注。 目前,除了主流的移动端的钱包,硬件钱包外,插件钱包也开始大放异彩。随着区块链的应用越来越丰富使得钱包普及速度...

比原链Bytom
01/16
22
0
从0到1开发区块链硬件钱包

直播链接:http://t.cn/E58soEk 直播时间:1月24日20:00-21:00; 嘉宾简介:BEPAL核心开发人员,丰富的区块链项目开发经验,参与过多个区块链、网络安全类项目开发。 分享主题:从0到1开发...

比原链Bytom
01/23
3
0
Derek解读Bytom源码-持久化存储LevelDB

作者:Derek 简介 Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockchain/bytom 本章介绍Derek解读-Bytom源码分析-持久化存储LevelDB 作者使用MacOS操作...

比原链bytom
2018/08/24
0
0
Docker部署Bytom全节点钱包

微服务和容器目前比较流行,相信很多小伙伴都比较熟悉docker, 如果你不是太了解,可以查看文档docker学习手册。那如何用docker搭建比原链(Bytom)的节点呢? 在操作之前,请自行安装docker。然...

比原链Bytom
2018/12/05
40
0

没有更多内容

加载失败,请刷新页面

加载更多

技术分享 | MySQL 8.0:字符集从 utf8 转换成 utf8mb4

作者:胡呈清 整理 MySQL 8.0 文档时发现一个变更:默认字符集由 latin1 变为 utf8mb4。想起以前整理过字符集转换文档,升级到 MySQL 8.0 后大概率会有字符集转换的需求,在此正好分享一下。...

爱可生
17分钟前
4
0
不管单机还是集群的限流实现已经给你准备好了

限流算法 计数器算法 维护一个counter,规定在单位时间内counter的大小不能超过最大值,每隔固定时间就将counter的值置零。如果这个counter大于设定的阈值,那么系统就拒绝请求 漏桶算法 维护...

阿提说说
28分钟前
4
0
文件管理

通过CLI登录进行文件管理 .表示当前目录,..表示父目录,具有隐藏文件。支持缩写与TAB键补全 1、目录操作 pwd#打印工作目录 cd <directory>#改变工作目录 dir [/all][<directory>]#查看目录内...

悠悠子佩
30分钟前
4
0
Netty学习笔记(10)——Netty中的Channel组件

1. Channel的功能 1. 与NIO中的Channel一样,它实现了网络操作的抽象类,聚合了一系列的网络IO功能,包括读写数据、建立连接、关闭连接等功能。通过外观模式,将数据读写、连接建立与断开等操...

江左煤郎
34分钟前
3
0
二叉树的深度

从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 public int TreeDepth(TreeNode root) { return root == null ? 0 : 1 + Math.max(Tree...

Garphy
42分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部