Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Bytom移动端钱包SDK开发基础

Bytom移动端钱包SDK开发基础

作者头像
比原链Bytom
发布于 2018-09-20 07:29:30
发布于 2018-09-20 07:29:30
1.2K00
代码可运行
举报
文章被收录于专栏:比原链比原链
运行总次数:0
代码可运行

比原项目仓库:

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

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

Bytom-Mobile-Wallet-SDK 是从bytom源码中抽离出的钱包层代码,并且对钱包层代码进行了改造。使用gomobile可以将代码 编译成AndroidiOS平台可用的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平台也需要提供数据存储的路径。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 git clone https://github.com/Bytom-Community/Bytom-Mobile-Wallet-SDK $GOPATH/src/github.com/bytom-community/mobile

Android

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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参数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gomobile bind -target=android -ldflags=-s github.com/bytom-community/mobile/sdk/

执行指令后会在mobile文件夹生成wallet.aar和wallet-sources.jar文件。

iOS

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd $GOPATH/src/github.com/bytom-community/mobile
gomobile bind -target=ios github.com/bytom-community/mobile/sdk/

如果需要减小SDK的体积给gomobile bind指令加上-ldflags=-w参数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ 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文件中添加:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
android {
    repositories {
        flatDir { dirs 'libs' }
    }
}

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

sync project后可以在Android项目中对SDK的API进行调用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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进行调用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#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
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-09-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Bytom 移动端钱包SDK FAQ
比原链移动端钱包SDK项目地址:https://github.com/Bytom-Community/Bytom-Mobile-Wallet-SDK
比原链Bytom
2018/12/12
7470
【前沿技术】使用 Go 进行 iOS 和 Android 编程
虽然 Go 并不是一门新语言,不过最近两年来 Go 还是增加了很多有趣的特性,而且使用这门语言的知名项目的数量也在快速的增长。我写过一篇文章,介绍了 SitePoint 用到的编程语言,其中提到了移动端的支持,所以我觉得需要研究一下可能性。 我很高兴 Android 是支持 Go 语言的,这一方面应该是二者都是 Google 的技术,另一方面恐怕也与开发者希望用 Go 替换 Java 的愿望有关。 开始 你需要安装 Golang 1.5+。 接下来需要安装 GoMobile 工具,用于编译和运行 Andro
程序员互动联盟
2018/03/15
1.6K0
【前沿技术】使用 Go 进行 iOS 和 Android 编程
使用 Go 语言开发 Android 应用的正确姿势探索
因此使用java或是kottin开发Android应用是自然的,是原生的应用且速度也是很快的。
杨永贞
2020/08/04
13.6K0
比原链社区项目一览(持续更新)
后端服务节点:https://github.com/Bytom-Community/Bytom-Server
比原链Bytom
2018/08/27
3800
比原链社区项目一览(持续更新)
Android + GO 工程
Android 之前一直使用JNI 调用C++代码,来做跨平台开发。 最近接触到GO语言,发现其实GO也支持跨平台开发。
艳龙
2021/12/16
9890
Android + GO 工程
Java Chaincode学习交易系统中Hyperledger Fabric帐户钱包模型
这是Hyperledger Fabric Java Chaincode的教程。还有Go和NodeJS Chaincodes,我们将来可能会讨论它们。此外,我采用基于帐户的钱包模型作为示例,我们将使用Hyperledger Fabric构建你的第一个网络(BYFN,build your first network),作为我们的测试环境(v1.4网络)。
笔阁
2019/03/12
2.2K0
Java Chaincode学习交易系统中Hyperledger Fabric帐户钱包模型
Mediapipe框架在Android上的使用
MediaPipe是用于构建跨平台多模态应用ML管道的框架,其包括快速ML推理,经典计算机视觉和媒体内容处理(如视频解码)。下面是用于对象检测与追踪的MediaPipe示例图,它由4个计算节点组成:PacketResampler计算器;先前发布的ObjectDetection子图;围绕上述BoxTrakcing子图的ObjectTracking子图;以及绘制可视化效果的Renderer子图。
夜雨飘零
2020/07/08
10.1K3
Mediapipe框架在Android上的使用
【移动端DL框架】当前主流的移动端深度学习框架一览
大家好,继之前的12大深度学习开源框架之后,我们准备开通新的专栏《移动端DL框架》,这是第一篇文章,先来做一个总体的介绍,更多的细节可以关注以后的文章。
用户1508658
2019/07/27
1.6K0
教你1天搭建自己的“微视”
A simple iOS Application project is shown below to illustrate how to configure SDK in an Xcode project.
腾讯视频云终端团队
2018/06/28
2.5K1
教你1天搭建自己的“微视”
如何引入 SDK
在上期文章中,FinClip的工程师和我们以手把手的形式教学完成了自己如何编写一个 iOS 与 Android 的第三方 SDK,但在实际的研发工作中,纯靠自己手写 SDK 毕竟是少数情况,在常见的大多数时候,还是需要引入第三方 SDK。
金牌打杂仔
2022/01/05
1.4K0
FFmpeg开发笔记(五十三)移动端的国产直播录制工具EasyPusher
​EasyPusher是一款国产的RTSP直播录制推流客户端工具,它支持Windows、Linux、Android、iOS等操作系统。EasyPusher采用RTSP推流协议,其中安卓版EasyPusher的Github托管地址为https://github.com/EasyDarwin/EasyPusher-Android。
aqi00
2024/09/21
2810
FFmpeg开发笔记(五十三)移动端的国产直播录制工具EasyPusher
iOS微信之登录授权(集成官方SDK)
前期准备工作:可以参考这篇博文http://www.jianshu.com/p/839dc30f2250 iOS版本只需要提供Bundle Id即可
专注APP开发
2019/11/07
2.9K0
iOS微信之登录授权(集成官方SDK)
Bytom Java版本离线签名
Gitee地址:https://gitee.com/BytomBlockchain/bytom
比原链Bytom
2018/11/08
5930
Bytom Java版本离线签名
学习笔记TF066 : TensorFlow 移动端应用,iOS、Android系统实践
TensorFlow对Android、iOS、树莓派都提供移动端支持。 移动端应用原理。移动端、嵌入式设备应用深度学习方式,一模型运行在云端服务器,向服务器发送请求,接收服务器响应;二在本地运行模型,
利炳根
2017/11/14
3.3K0
【最新最全】为 iOS 和 Android 的真机和模拟器编译 Luajit 库
编译 Luajit 库,的确是一个挑战。因为官网的教程,在当前版本的 Xcode 和 NDK 环境中,已经不适用了。以前只是编译了适用于真机的 Luajit 库。最近在尝试编译模拟器 Luajit 库,就顺便梳理了下 Luajit 库的编译经验,供以后查阅。网上的讨论也是有一些,但是相当一部分都已经过时。或许等你看到这篇文章的时候,可能也只是能获得一些可能的经验来解决自己的编译问题。所以说,了解一些基本的编译知识,能勉强看懂 Luajit 的 make 文件,还是很有必要的。本篇是关于 Luajit 静态库的,如果你想找的是如何编译适用于移动端的 Luajit 字节码,可以直接看 【最新】LuaJIT 32/64 位字节码,从编译到使用全纪录。
ios122
2018/07/31
2.6K0
如何在基于Bytom开发过程中使用Bigchaindb
上期我们讲了在基于比原开发过程中链外存储可以用分布式存储IPFS,这期我们还给大家介绍另外一种链外存储的解决方案。bigchaindb:https://www.bigchaindb.com,下面我们讲一下集成过程。
比原链Bytom
2019/01/25
4970
如何在基于Bytom开发过程中使用Bigchaindb
Bytom DAPP 开发流程
从目前已经发布的DAPP来看,DAPP架构大致可以分成3种类型:插件钱包模式、全节点钱包模式和兼容模式。
比原链Bytom
2019/07/18
5780
Bytom DAPP 开发流程
微信技术团队的又一力作,WCDB 简单易用的数据库框架
WCDB WCDB是一个高效、完整、易用的移动数据库框架,基于SQLCipher,支持iOS, macOS和Android。 WCDB for iOS/macOS 基本功能 WINQ(WCDB语言集成
非著名程序员
2018/02/09
1.8K0
微信技术团队的又一力作,WCDB 简单易用的数据库框架
iOS和Android比特币开发3个最受欢迎的应用SDK(示例)
如今的比特币不仅是加密货币还是数字支付系统。实际上,由于其独特的功能,比特币已成为投资,储蓄甚至赚取更多钱的真正工具。在本文中,我们想谈谈3个最受欢迎的比特币应用SDK,它可以帮助您开发自己的应用。
笔阁
2018/10/25
3.5K0
如何设计编写一个 SDK
App 的开发更偏向于用户层面,从 UI 展示到业务逻辑处理,全程处理用户的行为。而 SDK 面向的是开发者,开发更偏向于功能方面,注重功能的开发实现。不妨来看看 FinClip 移动端工程师整理的如何编写一个 SDK,还是很有参考价值。
Onegun
2021/12/15
1.4K0
如何设计编写一个 SDK
推荐阅读
相关推荐
Bytom 移动端钱包SDK FAQ
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验