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