@shapeshiftoss/hdwallet-keepkey 1.55.3 → 1.55.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapter.js +148 -93
- package/dist/adapter.js.map +1 -1
- package/dist/binance.js +135 -96
- package/dist/binance.js.map +1 -1
- package/dist/bitcoin.js +323 -257
- package/dist/bitcoin.js.map +1 -1
- package/dist/bnbencoding.js +40 -9
- package/dist/bnbencoding.js.map +1 -1
- package/dist/cosmos.js +206 -158
- package/dist/cosmos.js.map +1 -1
- package/dist/eos.js +152 -108
- package/dist/eos.js.map +1 -1
- package/dist/ethereum.js +242 -189
- package/dist/ethereum.js.map +1 -1
- package/dist/index.js +21 -5
- package/dist/index.js.map +1 -1
- package/dist/keepkey.js +582 -444
- package/dist/keepkey.js.map +1 -1
- package/dist/osmosis.js +259 -211
- package/dist/osmosis.js.map +1 -1
- package/dist/ripple.js +96 -52
- package/dist/ripple.js.map +1 -1
- package/dist/thorchain.js +162 -114
- package/dist/thorchain.js.map +1 -1
- package/dist/transport.js +278 -220
- package/dist/transport.js.map +1 -1
- package/dist/typeRegistry.js +41 -12
- package/dist/typeRegistry.js.map +1 -1
- package/dist/utils.js +37 -7
- package/dist/utils.js.map +1 -1
- package/package.json +3 -3
package/dist/adapter.js
CHANGED
|
@@ -1,14 +1,48 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
35
|
+
exports.Adapter = void 0;
|
|
36
|
+
const core = __importStar(require("@shapeshiftoss/hdwallet-core"));
|
|
37
|
+
const keepkey_1 = require("./keepkey");
|
|
38
|
+
const transport_1 = require("./transport");
|
|
39
|
+
class Adapter {
|
|
7
40
|
constructor(keyring, delegate) {
|
|
41
|
+
var _a, _b;
|
|
8
42
|
this.keyring = keyring;
|
|
9
43
|
this.delegate = delegate;
|
|
10
44
|
try {
|
|
11
|
-
this.delegate.registerCallbacks
|
|
45
|
+
(_b = (_a = this.delegate).registerCallbacks) === null || _b === void 0 ? void 0 : _b.call(_a, this.handleConnect.bind(this), this.handleDisconnect.bind(this));
|
|
12
46
|
}
|
|
13
47
|
catch (e) {
|
|
14
48
|
console.error(e);
|
|
@@ -20,101 +54,122 @@ export class Adapter {
|
|
|
20
54
|
out.useKeyring = fn;
|
|
21
55
|
return out;
|
|
22
56
|
}
|
|
23
|
-
static
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
props.serialNumber
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
57
|
+
static inspectDevice(delegate, device) {
|
|
58
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
59
|
+
var _a, _b;
|
|
60
|
+
const props = (_b = (yield Promise.resolve((_a = delegate.inspectDevice) === null || _a === void 0 ? void 0 : _a.call(delegate, device)))) !== null && _b !== void 0 ? _b : (["object", "function"].includes(typeof device) ? device : {});
|
|
61
|
+
if (!props.serialNumber && typeof device === "string")
|
|
62
|
+
props.serialNumber = device;
|
|
63
|
+
return {
|
|
64
|
+
get productName() {
|
|
65
|
+
const out = props["productName"];
|
|
66
|
+
return typeof out === "string" ? out : "KeepKey";
|
|
67
|
+
},
|
|
68
|
+
get serialNumber() {
|
|
69
|
+
const out = props["serialNumber"];
|
|
70
|
+
if (typeof out !== "string")
|
|
71
|
+
throw new Error("could not get serialNumber from device");
|
|
72
|
+
return out;
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
});
|
|
40
76
|
}
|
|
41
|
-
|
|
42
|
-
return
|
|
77
|
+
inspectDevice(device) {
|
|
78
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
79
|
+
return Adapter.inspectDevice(this.delegate, device);
|
|
80
|
+
});
|
|
43
81
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
82
|
+
handleConnect(device) {
|
|
83
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
84
|
+
try {
|
|
85
|
+
yield this.initialize([device]);
|
|
86
|
+
const { productName, serialNumber } = yield this.inspectDevice(device);
|
|
87
|
+
yield this.keyring.emit([productName, serialNumber, core.Events.CONNECT], serialNumber);
|
|
88
|
+
}
|
|
89
|
+
catch (e) {
|
|
90
|
+
console.error(e);
|
|
91
|
+
}
|
|
92
|
+
});
|
|
53
93
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
94
|
+
handleDisconnect(device) {
|
|
95
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
96
|
+
const { productName, serialNumber } = yield this.inspectDevice(device);
|
|
97
|
+
try {
|
|
98
|
+
yield this.keyring.remove(serialNumber);
|
|
99
|
+
}
|
|
100
|
+
catch (_a) {
|
|
101
|
+
// swallow keyring removal errors
|
|
102
|
+
}
|
|
103
|
+
yield this.keyring.emit([productName, serialNumber, core.Events.DISCONNECT], serialNumber);
|
|
104
|
+
});
|
|
63
105
|
}
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
const
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
106
|
+
initialize(devices, tryDebugLink, autoConnect) {
|
|
107
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
108
|
+
devices = devices !== null && devices !== void 0 ? devices : (yield this.getDevices());
|
|
109
|
+
for (const device of devices) {
|
|
110
|
+
const { serialNumber } = yield this.inspectDevice(device);
|
|
111
|
+
if (this.keyring.wallets[serialNumber])
|
|
112
|
+
yield this.keyring.remove(serialNumber);
|
|
113
|
+
const delegate = yield this.getTransportDelegate(device);
|
|
114
|
+
if (delegate === null)
|
|
115
|
+
continue;
|
|
116
|
+
const transport = yield transport_1.Transport.create(this.keyring, delegate);
|
|
117
|
+
yield transport.connect();
|
|
118
|
+
if (tryDebugLink)
|
|
119
|
+
yield transport.tryConnectDebugLink();
|
|
120
|
+
const wallet = yield keepkey_1.KeepKeyHDWallet.create(transport);
|
|
121
|
+
if (autoConnect)
|
|
122
|
+
yield wallet.initialize();
|
|
123
|
+
this.keyring.add(wallet, serialNumber);
|
|
124
|
+
}
|
|
125
|
+
return Object.keys(this.keyring.wallets).length;
|
|
126
|
+
});
|
|
83
127
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
128
|
+
getDevice(serialNumber) {
|
|
129
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
130
|
+
if (this.delegate.getDevice)
|
|
131
|
+
return yield this.delegate.getDevice(serialNumber);
|
|
132
|
+
if (!serialNumber)
|
|
133
|
+
throw new Error("no default device specified");
|
|
134
|
+
const devices = yield this.getDevices();
|
|
135
|
+
return (yield Promise.all(devices.map((x) => __awaiter(this, void 0, void 0, function* () { return ((yield this.inspectDevice(x)).serialNumber === serialNumber ? x : null); })))).filter((x) => x !== null)[0];
|
|
136
|
+
});
|
|
91
137
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
138
|
+
getDevices() {
|
|
139
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
140
|
+
if (this.delegate.getDevices)
|
|
141
|
+
return yield this.delegate.getDevices();
|
|
142
|
+
let defaultDevice = undefined;
|
|
143
|
+
try {
|
|
144
|
+
defaultDevice = yield this.getDevice();
|
|
145
|
+
}
|
|
146
|
+
catch (_a) {
|
|
147
|
+
// swallow default device fetch errors
|
|
148
|
+
}
|
|
149
|
+
return defaultDevice ? [defaultDevice] : [];
|
|
150
|
+
});
|
|
103
151
|
}
|
|
104
|
-
|
|
105
|
-
return
|
|
152
|
+
getTransportDelegate(device) {
|
|
153
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
154
|
+
return yield this.delegate.getTransportDelegate(device);
|
|
155
|
+
});
|
|
106
156
|
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
157
|
+
pairDevice(serialNumber, tryDebugLink) {
|
|
158
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
159
|
+
const device = yield this.getDevice(serialNumber);
|
|
160
|
+
if (!device)
|
|
161
|
+
throw new Error(serialNumber
|
|
162
|
+
? `could not find device matching serial number '${serialNumber}'`
|
|
163
|
+
: "could not find default device");
|
|
164
|
+
return this.pairRawDevice(device, tryDebugLink);
|
|
165
|
+
});
|
|
114
166
|
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
167
|
+
pairRawDevice(device, tryDebugLink) {
|
|
168
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
169
|
+
yield this.initialize([device], tryDebugLink, true);
|
|
170
|
+
return core.mustBeDefined(this.keyring.get((yield this.inspectDevice(device)).serialNumber));
|
|
171
|
+
});
|
|
118
172
|
}
|
|
119
173
|
}
|
|
174
|
+
exports.Adapter = Adapter;
|
|
120
175
|
//# sourceMappingURL=adapter.js.map
|
package/dist/adapter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
|
package/dist/binance.js
CHANGED
|
@@ -1,107 +1,146 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
35
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
|
+
};
|
|
37
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
+
exports.binanceGetAccountPaths = binanceGetAccountPaths;
|
|
39
|
+
exports.binanceSignTx = binanceSignTx;
|
|
40
|
+
exports.binanceGetAddress = binanceGetAddress;
|
|
41
|
+
const Messages = __importStar(require("@keepkey/device-protocol/lib/messages_pb"));
|
|
42
|
+
const BinanceMessages = __importStar(require("@keepkey/device-protocol/lib/messages-binance_pb"));
|
|
43
|
+
const core = __importStar(require("@shapeshiftoss/hdwallet-core"));
|
|
44
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
45
|
+
const crypto_js_1 = __importDefault(require("crypto-js"));
|
|
46
|
+
const bnbencoding_1 = require("./bnbencoding");
|
|
47
|
+
function binanceGetAccountPaths(msg) {
|
|
8
48
|
return [
|
|
9
49
|
{
|
|
10
50
|
addressNList: [0x80000000 + 44, 0x80000000 + core.slip44ByCoin("Binance"), 0x80000000 + msg.accountIdx, 0, 0],
|
|
11
51
|
},
|
|
12
52
|
];
|
|
13
53
|
}
|
|
14
|
-
|
|
15
|
-
return
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
partialTx.data
|
|
21
|
-
|
|
22
|
-
partialTx.memo
|
|
23
|
-
|
|
24
|
-
partialTx.sequence
|
|
25
|
-
|
|
26
|
-
partialTx.source
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
txid: CryptoJS.SHA256(CryptoJS.enc.Hex.parse(serialized)).toString(),
|
|
93
|
-
};
|
|
94
|
-
return out;
|
|
54
|
+
function binanceSignTx(transport, msg) {
|
|
55
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
56
|
+
return transport.lockDuring(() => __awaiter(this, void 0, void 0, function* () {
|
|
57
|
+
if (msg.testnet)
|
|
58
|
+
throw new Error("testnet not supported");
|
|
59
|
+
const partialTx = Object.assign({}, msg.tx);
|
|
60
|
+
if (!partialTx.data)
|
|
61
|
+
partialTx.data = null;
|
|
62
|
+
if (!partialTx.memo)
|
|
63
|
+
partialTx.memo = "";
|
|
64
|
+
if (!partialTx.sequence)
|
|
65
|
+
partialTx.sequence = "0";
|
|
66
|
+
if (!partialTx.source)
|
|
67
|
+
partialTx.source = "0";
|
|
68
|
+
if (!partialTx.account_number)
|
|
69
|
+
throw new Error("account_number is required");
|
|
70
|
+
if (!partialTx.chain_id)
|
|
71
|
+
throw new Error("chain_id is required");
|
|
72
|
+
const tx = partialTx;
|
|
73
|
+
if (tx.data)
|
|
74
|
+
throw new Error("tx data field not supported");
|
|
75
|
+
const signTx = new BinanceMessages.BinanceSignTx();
|
|
76
|
+
signTx.setAddressNList(msg.addressNList);
|
|
77
|
+
signTx.setAccountNumber(tx.account_number);
|
|
78
|
+
signTx.setChainId(tx.chain_id);
|
|
79
|
+
signTx.setSequence(tx.sequence);
|
|
80
|
+
if (tx.memo)
|
|
81
|
+
signTx.setMemo(tx.memo);
|
|
82
|
+
//verify not a batch tx
|
|
83
|
+
if (msg.tx.msgs.length > 1)
|
|
84
|
+
throw new Error("Binance batch sending not supported!");
|
|
85
|
+
const message = msg.tx.msgs[0];
|
|
86
|
+
//tell device not a batch tx
|
|
87
|
+
signTx.setMsgCount(1);
|
|
88
|
+
//tell device im about to send a tx to sign
|
|
89
|
+
let resp = yield transport.call(Messages.MessageType.MESSAGETYPE_BINANCESIGNTX, signTx, {
|
|
90
|
+
msgTimeout: core.LONG_TIMEOUT,
|
|
91
|
+
omitLock: true,
|
|
92
|
+
});
|
|
93
|
+
const outputAmount = new bignumber_js_1.default(message.outputs[0].coins[0].amount);
|
|
94
|
+
const inputAmount = new bignumber_js_1.default(message.inputs[0].coins[0].amount);
|
|
95
|
+
if (!outputAmount.isInteger())
|
|
96
|
+
throw new Error("Output amount must be an integer");
|
|
97
|
+
if (!inputAmount.isInteger())
|
|
98
|
+
throw new Error("Input amount must be an integer");
|
|
99
|
+
const coinOut = new BinanceMessages.BinanceTransferMsg.BinanceCoin();
|
|
100
|
+
coinOut.setAmount(outputAmount.toString());
|
|
101
|
+
coinOut.setDenom(message.outputs[0].coins[0].denom);
|
|
102
|
+
const outputs = new BinanceMessages.BinanceTransferMsg.BinanceInputOutput();
|
|
103
|
+
outputs.setAddress(message.outputs[0].address);
|
|
104
|
+
outputs.setCoinsList([coinOut]);
|
|
105
|
+
const coinIn = new BinanceMessages.BinanceTransferMsg.BinanceCoin();
|
|
106
|
+
coinIn.setAmount(inputAmount.toString());
|
|
107
|
+
coinIn.setDenom(message.inputs[0].coins[0].denom);
|
|
108
|
+
const inputs = new BinanceMessages.BinanceTransferMsg.BinanceInputOutput();
|
|
109
|
+
inputs.setAddress(message.inputs[0].address);
|
|
110
|
+
inputs.setCoinsList([coinIn]);
|
|
111
|
+
const send = new BinanceMessages.BinanceTransferMsg();
|
|
112
|
+
send.addInputs(inputs);
|
|
113
|
+
send.addOutputs(outputs);
|
|
114
|
+
//sent tx to device
|
|
115
|
+
resp = yield transport.call(Messages.MessageType.MESSAGETYPE_BINANCETRANSFERMSG, send, {
|
|
116
|
+
msgTimeout: core.LONG_TIMEOUT,
|
|
117
|
+
omitLock: true,
|
|
118
|
+
});
|
|
119
|
+
if (resp.message_enum !== Messages.MessageType.MESSAGETYPE_BINANCESIGNEDTX) {
|
|
120
|
+
throw new Error(`binance: unexpected response ${resp.message_type}`);
|
|
121
|
+
}
|
|
122
|
+
const signedTx = new BinanceMessages.BinanceSignedTx();
|
|
123
|
+
signedTx.setSignature(resp.message.signature);
|
|
124
|
+
signedTx.setPublicKey(resp.message.publicKey);
|
|
125
|
+
const serialized = (0, bnbencoding_1.encodeBnbTx)(tx, Buffer.from(signedTx.getPublicKey_asU8()), Buffer.from(signedTx.getSignature_asU8())).toString("hex");
|
|
126
|
+
const out = Object.assign(Object.assign({}, tx), { signatures: {
|
|
127
|
+
pub_key: signedTx.getPublicKey_asB64(),
|
|
128
|
+
signature: signedTx.getSignature_asB64(),
|
|
129
|
+
}, serialized, txid: crypto_js_1.default.SHA256(crypto_js_1.default.enc.Hex.parse(serialized)).toString() });
|
|
130
|
+
return out;
|
|
131
|
+
}));
|
|
95
132
|
});
|
|
96
133
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
134
|
+
function binanceGetAddress(transport, msg) {
|
|
135
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
136
|
+
const getAddr = new BinanceMessages.BinanceGetAddress();
|
|
137
|
+
getAddr.setAddressNList(msg.addressNList);
|
|
138
|
+
getAddr.setShowDisplay(msg.showDisplay !== false);
|
|
139
|
+
const response = yield transport.call(Messages.MessageType.MESSAGETYPE_BINANCEGETADDRESS, getAddr, {
|
|
140
|
+
msgTimeout: core.LONG_TIMEOUT,
|
|
141
|
+
});
|
|
142
|
+
const binanceAddress = response.proto;
|
|
143
|
+
return core.mustBeDefined(binanceAddress.getAddress());
|
|
103
144
|
});
|
|
104
|
-
const binanceAddress = response.proto;
|
|
105
|
-
return core.mustBeDefined(binanceAddress.getAddress());
|
|
106
145
|
}
|
|
107
146
|
//# sourceMappingURL=binance.js.map
|
package/dist/binance.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binance.js","sourceRoot":"","sources":["../src/binance.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"binance.js","sourceRoot":"","sources":["../src/binance.ts"],"names":[],"mappings":"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"}
|