安卓钱包离线签名库开发指南

简介

当开发者需要使用安卓原生客户端进行 生成助记词助记词转私钥创建地址注册地址转账部署合约调用合约投票等操作时,维基链提供安卓的离线签名库供其使用。

源码和库

安卓原生钱包离线签名库基于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();
      }