Skip to content

Commit 611f533

Browse files
committed
# update hardwallet
1 parent 01e29cb commit 611f533

File tree

8 files changed

+92
-44
lines changed

8 files changed

+92
-44
lines changed

clientwallet/wallet.go

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ type CreateAccount struct {
66
Language string // 成功必定包含地址
77
Password string // 公钥
88
}
9+
910
type WalletAccount struct {
1011
Res int // 0 失败 1 成功
1112
Address string // 成功必定包含地址

clientwallet/walletmanager.go

+2-19
Original file line numberDiff line numberDiff line change
@@ -13,27 +13,10 @@ func GenerateMnWallet(account *CreateAccount) bool {
1313

1414
}
1515
func SignRawTransaction(signIn *SignInput) *SignResult {
16-
1716
json := signInputToJson(signIn)
1817
fmt.Println(json)
19-
// acc, err := hdwallet.SignRawTransaction(signInput, coinType)
20-
// if err != nil {
21-
// return &SignResult{
22-
// Res: 0,
23-
// Coin: signIn.Coin,
24-
// Symbol: signIn.Symbol,
25-
// ErrMsg: err.Error(),
26-
// }
27-
// }
28-
// return &SignResult{
29-
// Res: acc.Res,
30-
// Coin: signIn.Coin,
31-
// Symbol: signIn.Symbol,
32-
// RawTX: acc.RawTX,
33-
// ErrMsg: acc.ErrMsg,
34-
// Params: acc.Params,
35-
// }
36-
return &SignResult{}
18+
acc := device.BLESignRawTransaction(json)
19+
return jsonToSignResult(acc)
3720
}
3821
func jsonToSignResult(jsonString string) *SignResult {
3922
var signResult *SignResult

example/wallet_test.go

+33
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package example
22

33
import (
4+
"encoding/json"
45
"fmt"
56
"hardwallet/clientwallet"
67
"testing"
@@ -19,4 +20,36 @@ func Test_GenerateMnWallet(t *testing.T) {
1920

2021
func Test_SignRawTransation(t *testing.T) {
2122

23+
item1 := clientwallet.OutPutItem{
24+
25+
TxHash: "fe6c982c3b8bcf50139a364a698395dbfa12093eb59c981ed11749d04f21aa1b",
26+
Value: 25000000,
27+
Vout: 1,
28+
Pkscript: "76a914ce3208cbad0926f4110a1b9b3db444c269b90ca088ac",
29+
}
30+
31+
outputs := []clientwallet.OutPutItem{item1}
32+
// fmt.Println("ltc outputs: ", outputs)
33+
34+
jsonInputs, err := json.Marshal(outputs)
35+
if err != nil {
36+
//log.Fatal("Cannot encode to JSON ", err)
37+
fmt.Println("outputs err: ", err.Error())
38+
39+
}
40+
41+
signIn := &clientwallet.SignInput{
42+
Coin: "btc",
43+
Symbol: "btc",
44+
Amount: 10000,
45+
Change: 25000000 - 10000 - 10000,
46+
Fee: 10000,
47+
SrcAddr: "",
48+
DestAddr: "",
49+
Net: "testnet",
50+
Password: "123456",
51+
Inputs: jsonInputs,
52+
}
53+
signResult := clientwallet.SignRawTransaction(signIn)
54+
fmt.Println(signResult)
2255
}

hardwallet/keystore.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"crypto":{"cipher":"aes-128-ctr","ciphertext":"bf03a19fd0214df3287a721edd2790a496602525d736bad682f109a61ae3e2b350580db4c6f6b5d9f8eb3ff0978a00637a929c80fb39b85d5f965c72d3d2d74a1be1cbb3884fae5178","cipherparams":{"iv":"15d46bbe942f96ecf8452432327d993b"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":2048,"p":1,"r":8,"salt":"17d2913688c31a585af4c83919490f7a5b2269101f8a4810ed052355531b7694"},"mac":"7ed2e9460ddad7996ed21a48c62baa785d3e5166aa6b6ba3fd39e73be482d803"},"version":3}
1+
{"crypto":{"cipher":"aes-128-ctr","ciphertext":"f2e1fbe629eae961d1792f3bcdb6fd9d37fe2fdd3acc6a5cc0fd2f666320962d7763ff2ccc502f234baad19345eb1c38f6d8c719964623713c074237e0045715bf7e41ccb0e599f8ef0b502b921d865c","cipherparams":{"iv":"51aa0de349cfc315498bb8f2e0e44ccf"},"kdf":"scrypt","kdfparams":{"dklen":32,"n":2048,"p":1,"r":8,"salt":"a37844bff78a6c701235931d11be2af4e933bbea9ded5fc8d8c133237a7378c4"},"mac":"766093507f503fb585355916da4f6f76cf57557fb496098e28b64cfa5f98f70a"},"version":3}

hardwallet/option.go

+7-7
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,13 @@ func newOptions(opts ...Option) *Options {
6767
return opt
6868
}
6969

70+
// Mnemonic set to options
71+
func Mnemonic(m string) Option {
72+
return func(o *Options) {
73+
o.Mnemonic = m
74+
}
75+
}
76+
7077
// GetPath return path in bip44 style
7178
func (o *Options) GetPath() []uint32 {
7279
return []uint32{
@@ -77,13 +84,6 @@ func (o *Options) GetPath() []uint32 {
7784
o.AddressIndex,
7885
}
7986
}
80-
func (o *Options) GetQTUMPath() []uint32 {
81-
return []uint32{
82-
o.CoinType,
83-
DefaultAccount,
84-
DefaultAccount,
85-
}
86-
}
8787

8888
// Params set to options
8989
func Params(p *chaincfg.Params) Option {

hardwallet/wallet.go

+11-12
Original file line numberDiff line numberDiff line change
@@ -42,18 +42,17 @@ type OutPutItem struct {
4242
}
4343

4444
type SignInput struct {
45-
PrivateKey string //私钥
46-
Coin string // 主链币
47-
Symbol string // symbol
48-
Amount int64 //转账数量
49-
Change int64 //找零数量
50-
Fee int64 //交易费用
51-
SrcAddr string //转账地址
52-
DestAddr string //接受地址
53-
Net string
54-
Inputs []byte //Vin构造
55-
Params []byte //预留字段
56-
Password string // 密码
45+
Coin string // 主链币
46+
Symbol string // symbol
47+
Amount int64 //转账数量
48+
Change int64 //找零数量
49+
Fee int64 //交易费用
50+
SrcAddr string //转账地址
51+
DestAddr string //接受地址
52+
Net string
53+
Inputs []byte //Vin构造
54+
Params []byte //预留字段
55+
Password string // 密码
5756

5857
// GasLimit int64 // gas数量
5958
// GasPrice int64 // gas价格

hardwallet/wallet_btc.go

+4-3
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,9 @@ func (c *btc) SignRawTransaction(signIn *SignInput) (*SignResult, error) {
6161
if signIn.Net == "testnet" {
6262
net = &chaincfg.TestNet3Params
6363
}
64+
c.key.opt.Params = net
65+
signIn.SrcAddr, _ = c.GetAddress()
66+
fmt.Println("SrcAddr = ", signIn.SrcAddr)
6467
///////////////
6568
dest_addr, err := btcutil.DecodeAddress(signIn.DestAddr, net)
6669
if err != nil {
@@ -111,15 +114,13 @@ func (c *btc) SignRawTransaction(signIn *SignInput) (*SignResult, error) {
111114
}
112115
mtx.AddTxOut(output)
113116
}
114-
a, err := btcutil.DecodeWIF(signIn.PrivateKey)
115-
116117
for i, input := range vouts {
117118
pk, _ := hex.DecodeString(input.Pkscript)
118119
if err != nil {
119120
return nil, err
120121
}
121122
//sigScript, err := txscript.SignatureScript(mtx, i, input.Value, pk, txscript.SigHashAll, a.PrivKey, true)
122-
sigScript, err := txscript.SignatureScript(mtx, i, pk, txscript.SigHashAll, a.PrivKey, true)
123+
sigScript, err := txscript.SignatureScript(mtx, i, pk, txscript.SigHashAll, c.GetKey().Private, true)
123124
fmt.Println(hex.EncodeToString(sigScript))
124125
if err != nil {
125126
return nil, err

hardwallet/walletmanager.go

+33-2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,16 @@ import (
66
"hardwallet/datazip"
77
"hardwallet/keystore"
88
"io/ioutil"
9+
"strings"
10+
)
11+
12+
var (
13+
// mnemonic = "boy video model trap novel debris clip father art era edit salute"
14+
// ## 已经支持的 BTC ETH ONT BCH LTC QTUM Libra EOS HC
15+
// ## 暂未支持的 *TRX
16+
coinMap = map[string]uint32{
17+
"btc": BTC,
18+
}
919
)
1020

1121
func GenerateMnWallet(acczip string) bool {
@@ -19,7 +29,7 @@ func GenerateMnWallet(acczip string) bool {
1929
if err != nil {
2030
return false
2131
}
22-
fmt.Println("mnemonic = ", mnemonic)
32+
//fmt.Println("mnemonic = ", mnemonic)
2333
keystoreJson, err := keystore.EncryptKey(mnemonic, acc.Password, "")
2434
if err != nil {
2535
return false
@@ -32,10 +42,31 @@ func GenerateMnWallet(acczip string) bool {
3242
return true
3343
}
3444
func HDSignRawTransaction(zip string) string {
35-
//var signIn *SignInput
3645
result := datazip.BLEDeviceDataUnzip(zip)
3746
signIn := JsonToSignInput(result)
3847
fmt.Println(signIn)
48+
if coinType, ok := coinMap[strings.ToLower(signIn.Coin)]; ok {
49+
switch coinType {
50+
case BTC:
51+
break
52+
default:
53+
break
54+
}
55+
signResult := &SignResult{
56+
Res: 0,
57+
}
58+
keystoreJson, _ := readKeyStoreFile("../hardwallet/keystore.txt")
59+
mnemonic, _ := keystore.DecryptKey(keystoreJson, signIn.Password, "")
60+
master, _ := NewKey(
61+
Mnemonic(mnemonic), CoinType(coinType),
62+
)
63+
master.Net = signIn.Net
64+
wallet, _ := master.GetImportWallet(coinType)
65+
fmt.Println(wallet)
66+
67+
return datazip.BLEDeviceDataZip(SignResultToJson(signResult))
68+
}
69+
3970
signResult := &SignResult{
4071
Res: 0,
4172
}

0 commit comments

Comments
 (0)