冷钱包-kotlin

源码和库

Kotlin

https://github.com/WaykiChain/wicc-wallet-utils-kotlin

使用方法

详见github仓库test示例代码以及说明。或参考以下


拉取代码

// 命令行语句拉取
git clone https://github.com:WaykiChain/wicc-wallet-utils-kotlin.git

//直接到网页下载
https://github.com/WaykiChain/wicc-wallet-utils-kotlin

编译

IntelliJ IDEA

使用命令行, 查看本地jdk版本号

java -version

如果本地jdk版本号为8,则不做修改,若为14,则将gradle:wrapper目录下的 gradle-wrapper.properties文件中distributionUrl设置为

distributionUrl=https\://services.gradle.org/distributions/gradle-4.8.1-bin.zip

创建私钥(钱包地址、公钥)

详细请参考信息: src/test/kotlin/com/waykichain/wallet/TestWallet.kt

1、生成助记词

// Resquest:
 var words = MnemonicUtil.randomMnemonicCodes()
logger.info(words.toString())

//Respond
信息: [vote, image, poverty, list, book, siren, dentist, cave, north, right, suit, liberty]

2、生成钱包

// Request
val words = "vote, image, poverty, list, book, siren, dentist, cave, north, right, suit, liberty"
val networkParameters = WaykiTestNetParams.instance //generate Testnet Address From Mnemonic
//val networkParameters = WaykiMainNetParams.instance //generate Mainnet Address From Mnemonic
val wallet= BIP44Util.generateWaykiWallet(words, networkParameters)
logger.info("\nmnemonic: $words\naddress:   ${wallet.address} \n Private key: ${wallet.privateKey} \nPublic Key: ${wallet.pubKey}")
// Respond
信息: 
mnemonic: vote, image, poverty, list, book, siren, dentist, cave, north, right, suit, liberty
address:   waMDJew9pm5e6fT7aCaWG1yBwcPx1mW7B2 
Private key: Y9wDyMys64KVhqwAVxbAB4aYDNVQ4HpRhQ7FLWFC3MhNNXz4JHot 
Public Key: 02a89bd7e93f119c37a02c3397ca153c22c9631677acd1fa9cd77ea5c20f4e8f6d

3、导入私钥

// Resquest
val params = WaykiTestNetParams.instance //测试链
val privKeyWiF = “Y9wDyMys64KVhqwAVxbAB4aYDNVQ4HpRhQ7FLWFC3MhNNXz4JHot”
val key = DumpedPrivateKey.fromBase58(params, privKeyWiF).key
logger.info(Utils.HEX.encode(key.pubKeyHash))

// Respond
信息: 94ed078235cdfdb52e35c2fdf4cee77e286361fa

交易签名

使用私钥对交易进行签名,您可以通过Bass服务提交离线签名rawtx交易。

BassNetwork ApiAddr
TestNetwork https://baas-test.wiccdev.org/v2/api/swagger-ui.html#!/
ProdNetwork https://baas.wiccdev.org/v2/api/swagger-ui.html#!/

提交交易 Submit raw string:
Mainnet https://baas.wiccdev.org/v2/api/swagger-ui.html#!/transaction-controller/offlinTransactionUsingPOST ,
TestNet https://baas-test.wiccdev.org/v2/api/swagger-ui.html#!/transaction-controller/offlinTransactionUsingPOST
获得区块高度 Get block height:
MainNethttps://baas.wiccdev.org/v2/api/swagger-ui.html#!/block-controller/getBlockCountUsingPOST,
TestNet https://baas-test.wiccdev.org/v2/api/swagger-ui.html#!/block-controller/getBlockCountUsingPOST

交易转账

详细请参考信息: src/test/kotlin/com/waykichain/wallet/TestTransaction.kt

1、钱包注册交易

钱包注册交易已不是必须的,你可以在其他交易通过公钥参数激活你的钱包。

// Resquest
val wallet = LegacyWallet()
val netParams = WaykiTestNetParams.instance
val privKeyWiF = "Y9XMqNzseQFSK32SvMDNF9J7xz1CQmHRsmY1hMYiqZyTck8pYae3"
val key = DumpedPrivateKey.fromBase58(netParams, privKeyWiF).key
val txParams = WaykiRegisterAccountTxParams(key.publicKeyAsHex, null, 429821, 10000, CoinType.WICC.type)
txParams.signTx(key)
val tx = wallet.createRegisterTransactionRaw(txParams)
logger.info("${tx.length} - $tx")

// Respond
信息: 230 - 0201999c7d2102a722a3a94fb41d92bcf9d54cd76ea40c8b0c223d6f0570389b775120c5e487640083e1ac0046304402205304902f6ae8470e7c294b8abe7fdd5a9847d8980914234c9ddb9b6098e473d002200ad2d0238292285394447905cb20b7275cd2daf3a68d1237a1200982b99172bc

2、钱包转账交易

// Resquest
val wallet = LegacyWallet()
val netParams = WaykiTestNetParams.instance
val srcPrivKeyWiF = "Y6J4aK6Wcs4A3Ex4HXdfjJ6ZsHpNZfjaS4B9w7xqEnmFEYMqQd13"
val srcKey = DumpedPrivateKey.fromBase58(netParams, srcPrivKeyWiF).key
val pubKey = srcKey.publicKeyAsHex  //user public key 
val destAddr = "wWTStcDL4gma6kPziyHhFGAP6xUzKpA5if"
val memo="test transfer"
val txParams = WaykiCommonTxParams(WaykiNetworkType.TEST_NET, 34550, pubKey,10000,1100000000000, "0-1", destAddr,memo)
txParams.signTx(srcKey)
val tx = wallet.createCommonTransactionRaw(txParams)

WaykiCommonTxParams 函数解析

WaykiCommonTxParams(networkType: WaykiNetworkType, nValidHeight: Long,pubKey:String, fees: Long, val value: Long, val srcRegId: String, destAddr: String,val memo: String)
param func
networkType 网络连接方式 :
测试网:WaykiNetworkType.TEST_NET
主网:WaykiNetworkType.MAIN_NET
nValidHeight 有效高度
pubKey 公钥
fees 矿工费用
value 转账费用
srcRegId 转账发起方regid
destAddr 接收方
memo 备注

编译打包

执行命令

gradle jar -PwiccBuildJar

输出

build/libs/wicc-wallet-utils-2.0.0.jar

参考三方项目

https://bitcoinj.github.io/
https://github.com/bitcoin/secp256k1