@shapeshiftoss/hdwallet-native 1.55.2 → 1.55.4-alpha.1
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 +22 -61
- package/dist/adapter.js.map +1 -1
- package/dist/arkeo.d.ts +1 -1
- package/dist/arkeo.d.ts.map +1 -1
- package/dist/arkeo.js +54 -124
- package/dist/arkeo.js.map +1 -1
- package/dist/binance.d.ts +1 -1
- package/dist/binance.d.ts.map +1 -1
- package/dist/binance.js +123 -195
- package/dist/binance.js.map +1 -1
- package/dist/bitcoin.d.ts +1 -2
- package/dist/bitcoin.d.ts.map +1 -1
- package/dist/bitcoin.js +219 -285
- package/dist/bitcoin.js.map +1 -1
- package/dist/cosmos.d.ts +1 -1
- package/dist/cosmos.d.ts.map +1 -1
- package/dist/cosmos.js +54 -124
- package/dist/cosmos.js.map +1 -1
- package/dist/crypto/CryptoHelper.js +106 -172
- package/dist/crypto/CryptoHelper.js.map +1 -1
- package/dist/crypto/EncryptedWallet.js +64 -123
- package/dist/crypto/EncryptedWallet.js.map +1 -1
- package/dist/crypto/classes/cipherString.js +18 -19
- package/dist/crypto/classes/cipherString.js.map +1 -1
- package/dist/crypto/classes/encryptedObject.js +7 -7
- package/dist/crypto/classes/encryptedObject.js.map +1 -1
- package/dist/crypto/classes/encryptionType.js +2 -5
- package/dist/crypto/classes/encryptionType.js.map +1 -1
- package/dist/crypto/classes/index.js +4 -11
- package/dist/crypto/classes/index.js.map +1 -1
- package/dist/crypto/classes/symmetricCryptoKey.js +13 -11
- package/dist/crypto/classes/symmetricCryptoKey.js.map +1 -1
- package/dist/crypto/engines/index.js +2 -18
- package/dist/crypto/engines/index.js.map +1 -1
- package/dist/crypto/engines/types.js +2 -5
- package/dist/crypto/engines/types.js.map +1 -1
- package/dist/crypto/engines/web-crypto.js +39 -84
- package/dist/crypto/engines/web-crypto.js.map +1 -1
- package/dist/crypto/index.js +3 -32
- package/dist/crypto/index.js.map +1 -1
- package/dist/crypto/isolation/adapters/binance.d.ts.map +1 -1
- package/dist/crypto/isolation/adapters/binance.js +12 -51
- package/dist/crypto/isolation/adapters/binance.js.map +1 -1
- package/dist/crypto/isolation/adapters/bip32.d.ts +2 -9
- package/dist/crypto/isolation/adapters/bip32.d.ts.map +1 -1
- package/dist/crypto/isolation/adapters/bip32.js +65 -108
- package/dist/crypto/isolation/adapters/bip32.js.map +1 -1
- package/dist/crypto/isolation/adapters/bitcoin.d.ts +4 -13
- package/dist/crypto/isolation/adapters/bitcoin.d.ts.map +1 -1
- package/dist/crypto/isolation/adapters/bitcoin.js +41 -84
- package/dist/crypto/isolation/adapters/bitcoin.js.map +1 -1
- package/dist/crypto/isolation/adapters/cosmos.d.ts +0 -1
- package/dist/crypto/isolation/adapters/cosmos.d.ts.map +1 -1
- package/dist/crypto/isolation/adapters/cosmos.js +9 -24
- package/dist/crypto/isolation/adapters/cosmos.js.map +1 -1
- package/dist/crypto/isolation/adapters/cosmosDirect.js +35 -77
- package/dist/crypto/isolation/adapters/cosmosDirect.js.map +1 -1
- package/dist/crypto/isolation/adapters/ethereum.js +49 -90
- package/dist/crypto/isolation/adapters/ethereum.js.map +1 -1
- package/dist/crypto/isolation/adapters/fio.d.ts +0 -1
- package/dist/crypto/isolation/adapters/fio.d.ts.map +1 -1
- package/dist/crypto/isolation/adapters/fio.js +24 -67
- package/dist/crypto/isolation/adapters/fio.js.map +1 -1
- package/dist/crypto/isolation/adapters/index.js +7 -20
- package/dist/crypto/isolation/adapters/index.js.map +1 -1
- package/dist/crypto/isolation/core/bip32/index.js +22 -51
- package/dist/crypto/isolation/core/bip32/index.js.map +1 -1
- package/dist/crypto/isolation/core/bip32/interfaces.js +2 -29
- package/dist/crypto/isolation/core/bip32/interfaces.js.map +1 -1
- package/dist/crypto/isolation/core/bip32/types.d.ts +2 -2
- package/dist/crypto/isolation/core/bip32/types.js +5 -8
- package/dist/crypto/isolation/core/bip32/types.js.map +1 -1
- package/dist/crypto/isolation/core/bip39/index.js +1 -17
- package/dist/crypto/isolation/core/bip39/index.js.map +1 -1
- package/dist/crypto/isolation/core/bip39/interfaces.js +1 -2
- package/dist/crypto/isolation/core/digest/algorithms.d.ts.map +1 -1
- package/dist/crypto/isolation/core/digest/algorithms.js +17 -26
- package/dist/crypto/isolation/core/digest/algorithms.js.map +1 -1
- package/dist/crypto/isolation/core/digest/index.js +2 -18
- package/dist/crypto/isolation/core/digest/index.js.map +1 -1
- package/dist/crypto/isolation/core/digest/types.d.ts +20 -20
- package/dist/crypto/isolation/core/digest/types.d.ts.map +1 -1
- package/dist/crypto/isolation/core/digest/types.js +23 -26
- package/dist/crypto/isolation/core/digest/types.js.map +1 -1
- package/dist/crypto/isolation/core/index.js +5 -32
- package/dist/crypto/isolation/core/index.js.map +1 -1
- package/dist/crypto/isolation/core/secp256k1/index.js +2 -18
- package/dist/crypto/isolation/core/secp256k1/index.js.map +1 -1
- package/dist/crypto/isolation/core/secp256k1/interfaces.js +1 -2
- package/dist/crypto/isolation/core/secp256k1/types.d.ts +81 -81
- package/dist/crypto/isolation/core/secp256k1/types.d.ts.map +1 -1
- package/dist/crypto/isolation/core/secp256k1/types.js +119 -157
- package/dist/crypto/isolation/core/secp256k1/types.js.map +1 -1
- package/dist/crypto/isolation/engines/default/bip32.d.ts +0 -1
- package/dist/crypto/isolation/engines/default/bip32.d.ts.map +1 -1
- package/dist/crypto/isolation/engines/default/bip32.js +102 -176
- package/dist/crypto/isolation/engines/default/bip32.js.map +1 -1
- package/dist/crypto/isolation/engines/default/bip39.js +24 -68
- package/dist/crypto/isolation/engines/default/bip39.js.map +1 -1
- package/dist/crypto/isolation/engines/default/index.js +3 -32
- package/dist/crypto/isolation/engines/default/index.js.map +1 -1
- package/dist/crypto/isolation/engines/default/revocable.d.ts +1 -1
- package/dist/crypto/isolation/engines/default/revocable.d.ts.map +1 -1
- package/dist/crypto/isolation/engines/default/revocable.js +30 -51
- package/dist/crypto/isolation/engines/default/revocable.js.map +1 -1
- package/dist/crypto/isolation/engines/dummy/bip32.js +63 -121
- package/dist/crypto/isolation/engines/dummy/bip32.js.map +1 -1
- package/dist/crypto/isolation/engines/dummy/bip39.js +55 -97
- package/dist/crypto/isolation/engines/dummy/bip39.js.map +1 -1
- package/dist/crypto/isolation/engines/dummy/index.js +3 -30
- package/dist/crypto/isolation/engines/dummy/index.js.map +1 -1
- package/dist/crypto/isolation/engines/dummy/types.js +1 -5
- package/dist/crypto/isolation/engines/dummy/types.js.map +1 -1
- package/dist/crypto/isolation/engines/index.js +2 -28
- package/dist/crypto/isolation/engines/index.js.map +1 -1
- package/dist/crypto/isolation/index.js +3 -29
- package/dist/crypto/isolation/index.js.map +1 -1
- package/dist/crypto/isolation/types.d.ts +1 -2
- package/dist/crypto/isolation/types.d.ts.map +1 -1
- package/dist/crypto/isolation/types.js +43 -49
- package/dist/crypto/isolation/types.js.map +1 -1
- package/dist/crypto/utils.js +7 -14
- package/dist/crypto/utils.js.map +1 -1
- package/dist/ethereum.d.ts +1 -1
- package/dist/ethereum.d.ts.map +1 -1
- package/dist/ethereum.js +92 -161
- package/dist/ethereum.js.map +1 -1
- package/dist/fio.d.ts +3 -3
- package/dist/fio.d.ts.map +1 -1
- package/dist/fio.js +204 -283
- package/dist/fio.js.map +1 -1
- package/dist/index.js +3 -32
- package/dist/index.js.map +1 -1
- package/dist/kava.d.ts +1 -1
- package/dist/kava.d.ts.map +1 -1
- package/dist/kava.js +50 -120
- package/dist/kava.js.map +1 -1
- package/dist/native.d.ts +40 -41
- package/dist/native.d.ts.map +1 -1
- package/dist/native.js +176 -304
- package/dist/native.js.map +1 -1
- package/dist/networks.js +16 -34
- package/dist/networks.js.map +1 -1
- package/dist/osmosis.d.ts +1 -1
- package/dist/osmosis.d.ts.map +1 -1
- package/dist/osmosis.js +54 -124
- package/dist/osmosis.js.map +1 -1
- package/dist/secret.d.ts +1 -1
- package/dist/secret.d.ts.map +1 -1
- package/dist/secret.js +50 -120
- package/dist/secret.js.map +1 -1
- package/dist/terra.d.ts +1 -1
- package/dist/terra.d.ts.map +1 -1
- package/dist/terra.js +50 -120
- package/dist/terra.js.map +1 -1
- package/dist/thorchain.d.ts +1 -1
- package/dist/thorchain.d.ts.map +1 -1
- package/dist/thorchain.js +54 -124
- package/dist/thorchain.js.map +1 -1
- package/dist/util.js +16 -55
- package/dist/util.js.map +1 -1
- package/package.json +3 -3
package/dist/binance.js
CHANGED
|
@@ -1,76 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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 __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
35
|
-
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
36
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
37
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
38
|
-
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
39
|
-
};
|
|
40
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
41
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
42
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
43
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
44
|
-
};
|
|
45
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
46
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
47
|
-
};
|
|
48
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
49
|
-
exports.MixinNativeBinanceWallet = exports.MixinNativeBinanceWalletInfo = void 0;
|
|
50
|
-
const core = __importStar(require("@shapeshiftoss/hdwallet-core"));
|
|
51
|
-
const bech32 = __importStar(require("bech32"));
|
|
52
|
-
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
53
|
-
const crypto_js_1 = __importDefault(require("crypto-js"));
|
|
54
|
-
const p_lazy_1 = __importDefault(require("p-lazy"));
|
|
55
|
-
const Isolation = __importStar(require("./crypto/isolation"));
|
|
56
|
-
const util = __importStar(require("./util"));
|
|
57
|
-
const bnbSdk = p_lazy_1.default.from(() => Promise.resolve().then(() => __importStar(require("bnb-javascript-sdk-nobroadcast"))));
|
|
58
|
-
function MixinNativeBinanceWalletInfo(Base) {
|
|
1
|
+
import * as core from "@shapeshiftoss/hdwallet-core";
|
|
2
|
+
import * as bech32 from "bech32";
|
|
3
|
+
import BigNumber from "bignumber.js";
|
|
4
|
+
import CryptoJS from "crypto-js";
|
|
5
|
+
import PLazy from "p-lazy";
|
|
6
|
+
import * as Isolation from "./crypto/isolation";
|
|
7
|
+
import * as util from "./util";
|
|
8
|
+
const bnbSdk = PLazy.from(() => import("bnb-javascript-sdk-nobroadcast"));
|
|
9
|
+
export function MixinNativeBinanceWalletInfo(Base) {
|
|
59
10
|
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
60
11
|
return class MixinNativeBinanceWalletInfo extends Base {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
12
|
+
_supportsBinanceInfo = true;
|
|
13
|
+
async binanceSupportsNetwork() {
|
|
14
|
+
return true;
|
|
64
15
|
}
|
|
65
|
-
|
|
66
|
-
return
|
|
67
|
-
return true;
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
binanceSupportsSecureTransfer() {
|
|
71
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
72
|
-
return false;
|
|
73
|
-
});
|
|
16
|
+
async binanceSupportsSecureTransfer() {
|
|
17
|
+
return false;
|
|
74
18
|
}
|
|
75
19
|
binanceSupportsNativeShapeShift() {
|
|
76
20
|
return false;
|
|
@@ -90,132 +34,116 @@ function MixinNativeBinanceWalletInfo(Base) {
|
|
|
90
34
|
}
|
|
91
35
|
};
|
|
92
36
|
}
|
|
93
|
-
|
|
94
|
-
function MixinNativeBinanceWallet(Base) {
|
|
95
|
-
var _MixinNativeBinanceWallet_masterKey, _a;
|
|
37
|
+
export function MixinNativeBinanceWallet(Base) {
|
|
96
38
|
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
97
|
-
return
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
return Object.assign({
|
|
203
|
-
account_number: result.accountNumber,
|
|
204
|
-
}, tx, {
|
|
205
|
-
// msgs: result.msgs,
|
|
206
|
-
signatures: {
|
|
207
|
-
pub_key,
|
|
208
|
-
signature,
|
|
209
|
-
},
|
|
210
|
-
serialized,
|
|
211
|
-
txid: crypto_js_1.default.SHA256(crypto_js_1.default.enc.Hex.parse(serialized)).toString(),
|
|
212
|
-
});
|
|
213
|
-
}));
|
|
39
|
+
return class MixinNativeBinanceWallet extends Base {
|
|
40
|
+
_supportsBinance = true;
|
|
41
|
+
#masterKey;
|
|
42
|
+
async binanceInitializeWallet(masterKey) {
|
|
43
|
+
this.#masterKey = masterKey;
|
|
44
|
+
}
|
|
45
|
+
binanceWipe() {
|
|
46
|
+
this.#masterKey = undefined;
|
|
47
|
+
}
|
|
48
|
+
binanceBech32ify(address, prefix) {
|
|
49
|
+
const words = bech32.toWords(address);
|
|
50
|
+
return bech32.encode(prefix, words);
|
|
51
|
+
}
|
|
52
|
+
createBinanceAddress(publicKey, testnet) {
|
|
53
|
+
const message = CryptoJS.SHA256(CryptoJS.enc.Hex.parse(publicKey));
|
|
54
|
+
const hash = CryptoJS.RIPEMD160(message).toString();
|
|
55
|
+
const address = Buffer.from(hash, `hex`);
|
|
56
|
+
return this.binanceBech32ify(address, `${testnet ? "t" : ""}bnb`);
|
|
57
|
+
}
|
|
58
|
+
async binanceGetAddress(msg) {
|
|
59
|
+
return this.needsMnemonic(!!this.#masterKey, async () => {
|
|
60
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
61
|
+
const keyPair = await util.getKeyPair(this.#masterKey, msg.addressNList, "binance");
|
|
62
|
+
return this.createBinanceAddress(keyPair.publicKey.toString("hex"), msg.testnet ?? false);
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
async binanceSignTx(msg) {
|
|
66
|
+
return this.needsMnemonic(!!this.#masterKey, async () => {
|
|
67
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
68
|
+
const keyPair = await util.getKeyPair(this.#masterKey, msg.addressNList, "binance");
|
|
69
|
+
const tx = Object.assign({}, msg.tx);
|
|
70
|
+
if (!tx.data)
|
|
71
|
+
tx.data = null;
|
|
72
|
+
if (!tx.memo)
|
|
73
|
+
tx.memo = "";
|
|
74
|
+
if (!tx.sequence)
|
|
75
|
+
tx.sequence = "0";
|
|
76
|
+
if (!tx.source)
|
|
77
|
+
tx.source = "0";
|
|
78
|
+
const client = new (await bnbSdk).BncClient(msg.testnet ? "https://testnet-dex.binance.org" : "https://dex.binance.org"); // broadcast not used but available
|
|
79
|
+
await client.chooseNetwork(msg.testnet ? "testnet" : "mainnet");
|
|
80
|
+
const haveAccountNumber = !!msg.tx.account_number && Number.isInteger(Number(msg.tx.account_number));
|
|
81
|
+
if (haveAccountNumber)
|
|
82
|
+
await client.setAccountNumber(Number(msg.tx.account_number));
|
|
83
|
+
client.setSigningDelegate(await Isolation.Adapters.Binance.create(keyPair.node));
|
|
84
|
+
await client.initChain();
|
|
85
|
+
if (!tx.chain_id) {
|
|
86
|
+
const { chainId } = client;
|
|
87
|
+
if (!chainId)
|
|
88
|
+
throw new Error("unable to load chain id");
|
|
89
|
+
tx.chain_id = chainId;
|
|
90
|
+
}
|
|
91
|
+
if (!tx.account_number) {
|
|
92
|
+
const { account_number } = client;
|
|
93
|
+
if (account_number)
|
|
94
|
+
tx.account_number = account_number.toString();
|
|
95
|
+
}
|
|
96
|
+
if (tx.msgs?.length !== 1 ||
|
|
97
|
+
tx.msgs[0].inputs?.length !== 1 ||
|
|
98
|
+
tx.msgs[0].inputs[0].coins?.length !== 1 ||
|
|
99
|
+
tx.msgs[0].outputs?.length !== 1 ||
|
|
100
|
+
tx.msgs[0].outputs[0].coins?.length !== 1)
|
|
101
|
+
throw new Error("malformed or unsupported tx message");
|
|
102
|
+
const addressTo = tx.msgs[0].outputs[0].address;
|
|
103
|
+
const addressFrom = tx.msgs[0].inputs[0].address;
|
|
104
|
+
const addressFromVerify = this.createBinanceAddress(keyPair.publicKey.toString("hex"), !!msg.testnet);
|
|
105
|
+
if (addressFrom !== addressFromVerify)
|
|
106
|
+
throw Error("Invalid permissions to sign for address");
|
|
107
|
+
if (!tx.account_number) {
|
|
108
|
+
const { result, status } = core.mustBeDefined(await client.getAccount(addressFrom));
|
|
109
|
+
if (!(status === 200 && "account_number" in result && typeof result.account_number === "number"))
|
|
110
|
+
throw new Error("unable to load account number");
|
|
111
|
+
tx.account_number = result.account_number.toString();
|
|
112
|
+
}
|
|
113
|
+
// The Binance SDK takes amounts as decimal strings.
|
|
114
|
+
const amount = new BigNumber(tx.msgs[0].inputs[0].coins[0].amount);
|
|
115
|
+
if (!amount.isInteger())
|
|
116
|
+
throw new Error("amount must be an integer");
|
|
117
|
+
if (!amount.isEqualTo(tx.msgs[0].outputs[0].coins[0].amount))
|
|
118
|
+
throw new Error("amount in input and output must be equal");
|
|
119
|
+
const asset = tx.msgs[0].inputs[0].coins[0].denom;
|
|
120
|
+
if (asset !== tx.msgs[0].outputs[0].coins[0].denom)
|
|
121
|
+
throw new Error("denomination in input and output must be the same");
|
|
122
|
+
const result = (await client.transfer(addressFrom, addressTo, amount.shiftedBy(-8).toString(), asset, tx.memo, Number(tx.sequence) ?? null));
|
|
123
|
+
const serialized = result.serialize();
|
|
124
|
+
const aminoPubKey = result.signatures[0].pub_key;
|
|
125
|
+
const signature = Buffer.from(result.signatures[0].signature, "base64").toString("base64");
|
|
126
|
+
// The BNB SDK returns public keys serialized in its own format. The first four bytes are a type
|
|
127
|
+
// tag, and the fifth is the length of the rest of the data, which is always exactly 33 bytes.
|
|
128
|
+
if (aminoPubKey.length !== 38 ||
|
|
129
|
+
aminoPubKey.readUInt32BE(0) !== 0xeb5ae987 ||
|
|
130
|
+
aminoPubKey.readUInt8(4) !== 33) {
|
|
131
|
+
throw new Error("Binance SDK returned public key in an incorrect format");
|
|
132
|
+
}
|
|
133
|
+
const pub_key = aminoPubKey.slice(5).toString("base64");
|
|
134
|
+
return Object.assign({
|
|
135
|
+
account_number: result.accountNumber,
|
|
136
|
+
}, tx, {
|
|
137
|
+
// msgs: result.msgs,
|
|
138
|
+
signatures: {
|
|
139
|
+
pub_key,
|
|
140
|
+
signature,
|
|
141
|
+
},
|
|
142
|
+
serialized,
|
|
143
|
+
txid: CryptoJS.SHA256(CryptoJS.enc.Hex.parse(serialized)).toString(),
|
|
214
144
|
});
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
_a;
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
};
|
|
219
148
|
}
|
|
220
|
-
exports.MixinNativeBinanceWallet = MixinNativeBinanceWallet;
|
|
221
149
|
//# 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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"}
|
package/dist/bitcoin.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
1
|
import * as bitcoin from "@shapeshiftoss/bitcoinjs-lib";
|
|
3
2
|
import * as core from "@shapeshiftoss/hdwallet-core";
|
|
4
3
|
import * as Isolation from "./crypto/isolation";
|
|
@@ -35,7 +34,7 @@ export declare function MixinNativeBTCWalletInfo<TBase extends core.Constructor<
|
|
|
35
34
|
hasOnDevicePassphrase(): boolean;
|
|
36
35
|
hasOnDeviceDisplay(): boolean;
|
|
37
36
|
hasOnDeviceRecovery(): boolean;
|
|
38
|
-
hasNativeShapeShift(srcCoin:
|
|
37
|
+
hasNativeShapeShift(srcCoin: core.Coin, dstCoin: core.Coin): boolean;
|
|
39
38
|
supportsBip44Accounts(): boolean;
|
|
40
39
|
supportsOfflineSigning(): boolean;
|
|
41
40
|
supportsBroadcast(): boolean;
|
package/dist/bitcoin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bitcoin.d.ts","sourceRoot":"","sources":["../src/bitcoin.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bitcoin.d.ts","sourceRoot":"","sources":["../src/bitcoin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,8BAA8B,CAAC;AACxD,OAAO,KAAK,IAAI,MAAM,8BAA8B,CAAC;AAGrD,OAAO,KAAK,SAAS,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAQ9C,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,CAAC;AAE/E,KAAK,cAAc,GAAG,MAAM,CAAC;AAE7B,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,KAAK,QAAQ,GAAG,cAAc,GAAG,WAAW,CAAC;AAE7C,KAAK,UAAU,GAAG;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,KAAK,YAAY,GAAG;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,KAAK,SAAS,GAAG,QAAQ,GAAG,UAAU,GAAG,YAAY,CAAC;AAEtD,wBAAgB,wBAAwB,CAAC,KAAK,SAAS,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,KAAK;;;kCAKzE,IAAI,CAAC,IAAI,GAAG,OAAO;8BAIjB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;wCAIxB,IAAI,CAAC,IAAI,eAAe,IAAI,CAAC,kBAAkB,GAAG,OAAO;oCAevD,IAAI,CAAC,IAAI,cAAc,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;qCAIhE,OAAO,CAAC,OAAO,CAAC;uCAIpB,OAAO;gCAId,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;8BA6BtD,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,OAAO;gCAKlC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,GAAG,SAAS;;;;;;;;;;;;UAwBhF;AAED,wBAAgB,oBAAoB,CAAC,KAAK,SAAS,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,KAAK;;;4BAKpF,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,SAAS;uCAEZ,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;mBAInE,IAAI;8BAIO,MAAM,eAAe,aAAa,YAAY,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO;kCAuB3E,IAAI,CAAC,eAAe,MAAM,OAAO,CAAC,WAAW,GAAG,OAAO;yBA+C1D,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;2BA6CrE,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;uBAW/C,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;4BAsGlD,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC;8BAKlD,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;;;;;;;;;;;;;0BAjTlD,KAAM,YAAY,GAAE,KAAO,eAAc;;UAqT9D"}
|