安卓钱包离线签名库开发指南
简介
当开发者需要使用安卓原生客户端进行 生成助记词
、助记词转私钥
、创建地址
、注册地址
、转账
、部署合约
、调用合约
、投票
等操作时,维基链提供安卓的离线签名库供其使用。
源码和库
安卓原生钱包离线签名库基于Golang
语言离线签名库编译而来,源码:
https://github.com/WaykiChain/wicc-wallet-utils-go
安卓原生钱包离线签名库下载地址:
https://github.com/WaykiChain/wicc-wallet-utils-go/releases/download/v2.0.0/android-wiccwallet.aar
使用方法
引入签名库
将and-wiccwallet.aar
放在对应工程的libs
目录下
在对应文件中添加api fileTree(dir: 'libs', include: ['*.jar','*.aar'])
引入库文件
使用说明
-
正式网钱包地址以字母W开头长度34位,主网网络参数为
1
-
测试网钱包地址以字母w开头长度34位,测试网络参数为
2
-
正式网钱包私钥以字母P开头长度34位,主网网络参数为
1
-
测试网钱包私钥以字母Y开头长度34位,测试网络参数为
2
生成助记词
默认生成英文助记词,生成包含12个单词
String mnemonics=Wiccwallet.generateMnemonics();
String[] words=mnemonics.split(" ");
助记词转正式网私钥
String privateKey=Wiccwallet.getPrivateKeyFromMnemonic(mnemonics,1);
维基链正式网地址生成
- 助记词转地址
String address=Wiccwallet.getAddressFromMnemonic(mnemonics,1);
签名时的参数说明
1、setValidHeight:创建签名时的区块高度,与提交广播交易时的高度差必须 <=250 ,推荐直接用BaaS上获取最新链上高度作为入参
2、相同的交易在未被确认前不能重复提交,建议采用添加随机手续费方式解决批量发起交易问题
获得多币种转账签名
支持但不限于WICC、WUSD、WGRT ,新建地址作为from成功发起转账即可激活(获得regid)
DestArr arr=new DestArr();//收款人
boolean rightAddr = Wiccwallet.checkWalletAddress(destAddress, netType);//检查收款地址是否正确
if (!rightAddr) return;
Dest dest=new Dest();
dest.setCoinSymbol("WICC"); //转账币种 WICC WUSD WGRT
dest.setDestAddr(""); //收款地址
dest.setCoinAmount(100000000); //转账金额
arr.add(dest);
UCoinTransferTxParam param = new UCoinTransferTxParam();
param.setDests(arr); //收款者
param.setSrcRegId(regid);//from的regid
param.setValidHeight(10000); //有效高度
param.setFeeSymbol("WICC"); //小费类型 WICC或者WUSD
param.setMemo("test transfer");//转账备注
param.setFees(1000000);//手续费
try {
String pubkey=Wiccwallet.getPubKeyFromPrivateKey(privateKey);//钱包公钥
param.setPubKey(pubkey);
String signHex = Wiccwallet.signUCoinTransferTx(privateKey, param);//获得签名
} catch (Exception e) {
e.printStackTrace();
}
获得多币种合约调用签名
UCoinContractTxParam param = new UCoinContractTxParam();
param.setCoinAmount(10000000);//金额
param.setValidHeight(321456);//有效高度
param.setFees(10000000);//矿工费
param.setSrcRegId("0-1");//钱包regid
param.setAppId("12313-1");//合约regid
param.setFeeSymbol("WICC");//小费类型 WICC&WUSD
param.setCoinSymbol("WICC"); //转账币种 WICC WUSD WGRT
param.setContractHex("f016");//合约调用
try {
String pubkey=Wiccwallet.getPubKeyFromPrivateKey(privateKey);//钱包公钥
param.setPubKey(pubkey);
String signHex = Wiccwallet.signUCoinCallContractTx(privateKey, param);
} catch (Exception e) {
e.printStackTrace();
}