@shapeshiftoss/hdwallet-native 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 +61 -22
- package/dist/adapter.js.map +1 -1
- package/dist/arkeo.js +123 -54
- package/dist/arkeo.js.map +1 -1
- package/dist/binance.js +194 -123
- package/dist/binance.js.map +1 -1
- package/dist/bitcoin.js +284 -219
- package/dist/bitcoin.js.map +1 -1
- package/dist/cosmos.js +123 -54
- package/dist/cosmos.js.map +1 -1
- package/dist/crypto/CryptoHelper.js +172 -106
- package/dist/crypto/CryptoHelper.js.map +1 -1
- package/dist/crypto/EncryptedWallet.js +123 -64
- package/dist/crypto/EncryptedWallet.js.map +1 -1
- package/dist/crypto/classes/cipherString.js +19 -18
- 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 +5 -2
- package/dist/crypto/classes/encryptionType.js.map +1 -1
- package/dist/crypto/classes/index.js +11 -4
- package/dist/crypto/classes/index.js.map +1 -1
- package/dist/crypto/classes/symmetricCryptoKey.js +11 -13
- package/dist/crypto/classes/symmetricCryptoKey.js.map +1 -1
- package/dist/crypto/engines/index.js +18 -2
- package/dist/crypto/engines/index.js.map +1 -1
- package/dist/crypto/engines/types.js +5 -2
- package/dist/crypto/engines/types.js.map +1 -1
- package/dist/crypto/engines/web-crypto.js +84 -39
- package/dist/crypto/engines/web-crypto.js.map +1 -1
- package/dist/crypto/index.js +32 -3
- package/dist/crypto/index.js.map +1 -1
- package/dist/crypto/isolation/adapters/binance.js +51 -12
- package/dist/crypto/isolation/adapters/binance.js.map +1 -1
- package/dist/crypto/isolation/adapters/bip32.js +108 -65
- package/dist/crypto/isolation/adapters/bip32.js.map +1 -1
- package/dist/crypto/isolation/adapters/bitcoin.js +84 -41
- package/dist/crypto/isolation/adapters/bitcoin.js.map +1 -1
- package/dist/crypto/isolation/adapters/cosmos.js +24 -9
- package/dist/crypto/isolation/adapters/cosmos.js.map +1 -1
- package/dist/crypto/isolation/adapters/cosmosDirect.js +77 -35
- package/dist/crypto/isolation/adapters/cosmosDirect.js.map +1 -1
- package/dist/crypto/isolation/adapters/ethereum.js +90 -49
- package/dist/crypto/isolation/adapters/ethereum.js.map +1 -1
- package/dist/crypto/isolation/adapters/fio.js +67 -24
- package/dist/crypto/isolation/adapters/fio.js.map +1 -1
- package/dist/crypto/isolation/adapters/index.js +20 -7
- package/dist/crypto/isolation/adapters/index.js.map +1 -1
- package/dist/crypto/isolation/core/bip32/index.js +50 -22
- package/dist/crypto/isolation/core/bip32/index.js.map +1 -1
- package/dist/crypto/isolation/core/bip32/interfaces.js +28 -2
- package/dist/crypto/isolation/core/bip32/interfaces.js.map +1 -1
- package/dist/crypto/isolation/core/bip32/types.js +8 -5
- package/dist/crypto/isolation/core/bip32/types.js.map +1 -1
- package/dist/crypto/isolation/core/bip39/index.js +17 -1
- package/dist/crypto/isolation/core/bip39/index.js.map +1 -1
- package/dist/crypto/isolation/core/bip39/interfaces.js +2 -1
- package/dist/crypto/isolation/core/digest/algorithms.js +32 -23
- package/dist/crypto/isolation/core/digest/algorithms.js.map +1 -1
- package/dist/crypto/isolation/core/digest/index.js +18 -2
- package/dist/crypto/isolation/core/digest/index.js.map +1 -1
- package/dist/crypto/isolation/core/digest/types.js +26 -23
- package/dist/crypto/isolation/core/digest/types.js.map +1 -1
- package/dist/crypto/isolation/core/index.js +32 -5
- package/dist/crypto/isolation/core/index.js.map +1 -1
- package/dist/crypto/isolation/core/secp256k1/index.js +18 -2
- package/dist/crypto/isolation/core/secp256k1/index.js.map +1 -1
- package/dist/crypto/isolation/core/secp256k1/interfaces.js +2 -1
- package/dist/crypto/isolation/core/secp256k1/types.js +157 -119
- package/dist/crypto/isolation/core/secp256k1/types.js.map +1 -1
- package/dist/crypto/isolation/engines/default/bip32.js +176 -102
- package/dist/crypto/isolation/engines/default/bip32.js.map +1 -1
- package/dist/crypto/isolation/engines/default/bip39.js +68 -24
- package/dist/crypto/isolation/engines/default/bip39.js.map +1 -1
- package/dist/crypto/isolation/engines/default/index.js +32 -3
- package/dist/crypto/isolation/engines/default/index.js.map +1 -1
- package/dist/crypto/isolation/engines/default/revocable.js +51 -30
- package/dist/crypto/isolation/engines/default/revocable.js.map +1 -1
- package/dist/crypto/isolation/engines/dummy/bip32.js +121 -63
- package/dist/crypto/isolation/engines/dummy/bip32.js.map +1 -1
- package/dist/crypto/isolation/engines/dummy/bip39.js +97 -55
- package/dist/crypto/isolation/engines/dummy/bip39.js.map +1 -1
- package/dist/crypto/isolation/engines/dummy/index.js +30 -3
- package/dist/crypto/isolation/engines/dummy/index.js.map +1 -1
- package/dist/crypto/isolation/engines/dummy/types.js +5 -1
- package/dist/crypto/isolation/engines/dummy/types.js.map +1 -1
- package/dist/crypto/isolation/engines/index.js +28 -2
- package/dist/crypto/isolation/engines/index.js.map +1 -1
- package/dist/crypto/isolation/index.js +29 -3
- package/dist/crypto/isolation/index.js.map +1 -1
- package/dist/crypto/isolation/types.js +49 -43
- package/dist/crypto/isolation/types.js.map +1 -1
- package/dist/crypto/utils.js +13 -7
- package/dist/crypto/utils.js.map +1 -1
- package/dist/ethereum.js +160 -92
- package/dist/ethereum.js.map +1 -1
- package/dist/fio.js +282 -204
- package/dist/fio.js.map +1 -1
- package/dist/index.js +32 -3
- package/dist/index.js.map +1 -1
- package/dist/kava.js +119 -50
- package/dist/kava.js.map +1 -1
- package/dist/native.js +304 -176
- package/dist/native.js.map +1 -1
- package/dist/networks.js +33 -16
- package/dist/networks.js.map +1 -1
- package/dist/osmosis.js +123 -54
- package/dist/osmosis.js.map +1 -1
- package/dist/secret.js +119 -50
- package/dist/secret.js.map +1 -1
- package/dist/terra.js +119 -50
- package/dist/terra.js.map +1 -1
- package/dist/thorchain.js +123 -54
- package/dist/thorchain.js.map +1 -1
- package/dist/util.js +54 -16
- package/dist/util.js.map +1 -1
- package/package.json +3 -3
package/dist/binance.js
CHANGED
|
@@ -1,20 +1,77 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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 __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.MixinNativeBinanceWalletInfo = MixinNativeBinanceWalletInfo;
|
|
50
|
+
exports.MixinNativeBinanceWallet = MixinNativeBinanceWallet;
|
|
51
|
+
const core = __importStar(require("@shapeshiftoss/hdwallet-core"));
|
|
52
|
+
const bech32 = __importStar(require("bech32"));
|
|
53
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
54
|
+
const crypto_js_1 = __importDefault(require("crypto-js"));
|
|
55
|
+
const p_lazy_1 = __importDefault(require("p-lazy"));
|
|
56
|
+
const Isolation = __importStar(require("./crypto/isolation"));
|
|
57
|
+
const util = __importStar(require("./util"));
|
|
58
|
+
const bnbSdk = p_lazy_1.default.from(() => Promise.resolve().then(() => __importStar(require("bnb-javascript-sdk-nobroadcast"))));
|
|
59
|
+
function MixinNativeBinanceWalletInfo(Base) {
|
|
10
60
|
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
11
61
|
return class MixinNativeBinanceWalletInfo extends Base {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
62
|
+
constructor() {
|
|
63
|
+
super(...arguments);
|
|
64
|
+
this._supportsBinanceInfo = true;
|
|
15
65
|
}
|
|
16
|
-
|
|
17
|
-
return
|
|
66
|
+
binanceSupportsNetwork() {
|
|
67
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
68
|
+
return true;
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
binanceSupportsSecureTransfer() {
|
|
72
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
73
|
+
return false;
|
|
74
|
+
});
|
|
18
75
|
}
|
|
19
76
|
binanceSupportsNativeShapeShift() {
|
|
20
77
|
return false;
|
|
@@ -34,116 +91,130 @@ export function MixinNativeBinanceWalletInfo(Base) {
|
|
|
34
91
|
}
|
|
35
92
|
};
|
|
36
93
|
}
|
|
37
|
-
|
|
94
|
+
function MixinNativeBinanceWallet(Base) {
|
|
95
|
+
var _MixinNativeBinanceWallet_masterKey, _a;
|
|
38
96
|
// eslint-disable-next-line @typescript-eslint/no-shadow
|
|
39
|
-
return class MixinNativeBinanceWallet extends Base {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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(),
|
|
97
|
+
return _a = class MixinNativeBinanceWallet extends Base {
|
|
98
|
+
constructor() {
|
|
99
|
+
super(...arguments);
|
|
100
|
+
this._supportsBinance = true;
|
|
101
|
+
_MixinNativeBinanceWallet_masterKey.set(this, void 0);
|
|
102
|
+
}
|
|
103
|
+
binanceInitializeWallet(masterKey) {
|
|
104
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
105
|
+
__classPrivateFieldSet(this, _MixinNativeBinanceWallet_masterKey, masterKey, "f");
|
|
144
106
|
});
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
|
|
107
|
+
}
|
|
108
|
+
binanceWipe() {
|
|
109
|
+
__classPrivateFieldSet(this, _MixinNativeBinanceWallet_masterKey, undefined, "f");
|
|
110
|
+
}
|
|
111
|
+
binanceBech32ify(address, prefix) {
|
|
112
|
+
const words = bech32.toWords(address);
|
|
113
|
+
return bech32.encode(prefix, words);
|
|
114
|
+
}
|
|
115
|
+
createBinanceAddress(publicKey, testnet) {
|
|
116
|
+
const message = crypto_js_1.default.SHA256(crypto_js_1.default.enc.Hex.parse(publicKey));
|
|
117
|
+
const hash = crypto_js_1.default.RIPEMD160(message).toString();
|
|
118
|
+
const address = Buffer.from(hash, `hex`);
|
|
119
|
+
return this.binanceBech32ify(address, `${testnet ? "t" : ""}bnb`);
|
|
120
|
+
}
|
|
121
|
+
binanceGetAddress(msg) {
|
|
122
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
123
|
+
return this.needsMnemonic(!!__classPrivateFieldGet(this, _MixinNativeBinanceWallet_masterKey, "f"), () => __awaiter(this, void 0, void 0, function* () {
|
|
124
|
+
var _b;
|
|
125
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
126
|
+
const keyPair = yield util.getKeyPair(__classPrivateFieldGet(this, _MixinNativeBinanceWallet_masterKey, "f"), msg.addressNList, "binance");
|
|
127
|
+
return this.createBinanceAddress(keyPair.publicKey.toString("hex"), (_b = msg.testnet) !== null && _b !== void 0 ? _b : false);
|
|
128
|
+
}));
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
binanceSignTx(msg) {
|
|
132
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
133
|
+
return this.needsMnemonic(!!__classPrivateFieldGet(this, _MixinNativeBinanceWallet_masterKey, "f"), () => __awaiter(this, void 0, void 0, function* () {
|
|
134
|
+
var _b, _c, _d, _e, _f, _g;
|
|
135
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
136
|
+
const keyPair = yield util.getKeyPair(__classPrivateFieldGet(this, _MixinNativeBinanceWallet_masterKey, "f"), msg.addressNList, "binance");
|
|
137
|
+
const tx = Object.assign({}, msg.tx);
|
|
138
|
+
if (!tx.data)
|
|
139
|
+
tx.data = null;
|
|
140
|
+
if (!tx.memo)
|
|
141
|
+
tx.memo = "";
|
|
142
|
+
if (!tx.sequence)
|
|
143
|
+
tx.sequence = "0";
|
|
144
|
+
if (!tx.source)
|
|
145
|
+
tx.source = "0";
|
|
146
|
+
const client = new (yield bnbSdk).BncClient(msg.testnet ? "https://testnet-dex.binance.org" : "https://dex.binance.org"); // broadcast not used but available
|
|
147
|
+
yield client.chooseNetwork(msg.testnet ? "testnet" : "mainnet");
|
|
148
|
+
const haveAccountNumber = !!msg.tx.account_number && Number.isInteger(Number(msg.tx.account_number));
|
|
149
|
+
if (haveAccountNumber)
|
|
150
|
+
yield client.setAccountNumber(Number(msg.tx.account_number));
|
|
151
|
+
client.setSigningDelegate(yield Isolation.Adapters.Binance.create(keyPair.node));
|
|
152
|
+
yield client.initChain();
|
|
153
|
+
if (!tx.chain_id) {
|
|
154
|
+
const { chainId } = client;
|
|
155
|
+
if (!chainId)
|
|
156
|
+
throw new Error("unable to load chain id");
|
|
157
|
+
tx.chain_id = chainId;
|
|
158
|
+
}
|
|
159
|
+
if (!tx.account_number) {
|
|
160
|
+
const { account_number } = client;
|
|
161
|
+
if (account_number)
|
|
162
|
+
tx.account_number = account_number.toString();
|
|
163
|
+
}
|
|
164
|
+
if (((_b = tx.msgs) === null || _b === void 0 ? void 0 : _b.length) !== 1 ||
|
|
165
|
+
((_c = tx.msgs[0].inputs) === null || _c === void 0 ? void 0 : _c.length) !== 1 ||
|
|
166
|
+
((_d = tx.msgs[0].inputs[0].coins) === null || _d === void 0 ? void 0 : _d.length) !== 1 ||
|
|
167
|
+
((_e = tx.msgs[0].outputs) === null || _e === void 0 ? void 0 : _e.length) !== 1 ||
|
|
168
|
+
((_f = tx.msgs[0].outputs[0].coins) === null || _f === void 0 ? void 0 : _f.length) !== 1)
|
|
169
|
+
throw new Error("malformed or unsupported tx message");
|
|
170
|
+
const addressTo = tx.msgs[0].outputs[0].address;
|
|
171
|
+
const addressFrom = tx.msgs[0].inputs[0].address;
|
|
172
|
+
const addressFromVerify = this.createBinanceAddress(keyPair.publicKey.toString("hex"), !!msg.testnet);
|
|
173
|
+
if (addressFrom !== addressFromVerify)
|
|
174
|
+
throw Error("Invalid permissions to sign for address");
|
|
175
|
+
if (!tx.account_number) {
|
|
176
|
+
const { result, status } = core.mustBeDefined(yield client.getAccount(addressFrom));
|
|
177
|
+
if (!(status === 200 && "account_number" in result && typeof result.account_number === "number"))
|
|
178
|
+
throw new Error("unable to load account number");
|
|
179
|
+
tx.account_number = result.account_number.toString();
|
|
180
|
+
}
|
|
181
|
+
// The Binance SDK takes amounts as decimal strings.
|
|
182
|
+
const amount = new bignumber_js_1.default(tx.msgs[0].inputs[0].coins[0].amount);
|
|
183
|
+
if (!amount.isInteger())
|
|
184
|
+
throw new Error("amount must be an integer");
|
|
185
|
+
if (!amount.isEqualTo(tx.msgs[0].outputs[0].coins[0].amount))
|
|
186
|
+
throw new Error("amount in input and output must be equal");
|
|
187
|
+
const asset = tx.msgs[0].inputs[0].coins[0].denom;
|
|
188
|
+
if (asset !== tx.msgs[0].outputs[0].coins[0].denom)
|
|
189
|
+
throw new Error("denomination in input and output must be the same");
|
|
190
|
+
const result = (yield client.transfer(addressFrom, addressTo, amount.shiftedBy(-8).toString(), asset, tx.memo, (_g = Number(tx.sequence)) !== null && _g !== void 0 ? _g : null));
|
|
191
|
+
const serialized = result.serialize();
|
|
192
|
+
const aminoPubKey = result.signatures[0].pub_key;
|
|
193
|
+
const signature = Buffer.from(result.signatures[0].signature, "base64").toString("base64");
|
|
194
|
+
// The BNB SDK returns public keys serialized in its own format. The first four bytes are a type
|
|
195
|
+
// tag, and the fifth is the length of the rest of the data, which is always exactly 33 bytes.
|
|
196
|
+
if (aminoPubKey.length !== 38 ||
|
|
197
|
+
aminoPubKey.readUInt32BE(0) !== 0xeb5ae987 ||
|
|
198
|
+
aminoPubKey.readUInt8(4) !== 33) {
|
|
199
|
+
throw new Error("Binance SDK returned public key in an incorrect format");
|
|
200
|
+
}
|
|
201
|
+
const pub_key = aminoPubKey.slice(5).toString("base64");
|
|
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
|
+
}));
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
},
|
|
217
|
+
_MixinNativeBinanceWallet_masterKey = new WeakMap(),
|
|
218
|
+
_a;
|
|
148
219
|
}
|
|
149
220
|
//# 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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"}
|