@bitgo/sdk-coin-bsc 22.12.46 → 22.13.0

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.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=bscUnsignedSweepTss.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bscUnsignedSweepTss.d.ts","sourceRoot":"","sources":["../../../test/unit/bscUnsignedSweepTss.ts"],"names":[],"mappings":""}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const should_1 = __importDefault(require("should"));
7
+ const sinon_1 = __importDefault(require("sinon"));
8
+ const bn_js_1 = __importDefault(require("bn.js"));
9
+ const sdk_test_1 = require("@bitgo/sdk-test");
10
+ const sdk_api_1 = require("@bitgo/sdk-api");
11
+ const abstract_eth_1 = require("@bitgo/abstract-eth");
12
+ const sdk_core_1 = require("@bitgo/sdk-core");
13
+ const src_1 = require("../../src");
14
+ /**
15
+ * BSC declares CoinFeature.MPCV2 but never overrode `buildUnsignedSweepTxnTSS`, so it inherited
16
+ * the MPCv1 body, which fed the 130-char common keychain straight into `new KeyPair({ pub })` and
17
+ * threw `Unsupported public key` — an unsigned TSS sweep was impossible on this coin.
18
+ *
19
+ * The base class now dispatches MPCV2 coins to `buildUnsignedSweepTxnMPCv2`. These tests pin that
20
+ * dispatch for one of the four coins (bsc, arbeth, opeth, bera) that gained it, so the fix cannot
21
+ * silently regress.
22
+ */
23
+ describe('BSC unsigned TSS sweep (MPCv2 dispatch)', function () {
24
+ let bitgo;
25
+ let basecoin;
26
+ const sandbox = sinon_1.default.createSandbox();
27
+ // a real MPCv2 common keychain (33-byte pubkey + 32-byte chaincode, hex)
28
+ const commonKeyChain = '0234eb39b22fed523ece7c78da29ba1f1de5b64a6e48013e0914de793bc1df0570' +
29
+ 'e779de04758732734d97e54b782c8b336283811af6a2c57bd81438798e1c2446';
30
+ const recoveryDestination = '0xd5ADdE17feD8baed3F32b84AF05B8F2816f7b560';
31
+ let baseAddress;
32
+ before(function () {
33
+ bitgo = sdk_test_1.TestBitGo.decorate(sdk_api_1.BitGoAPI, { env: 'test' });
34
+ bitgo.safeRegister('tbsc', src_1.Tbsc.createInstance);
35
+ bitgo.initializeTestVars();
36
+ basecoin = bitgo.coin('tbsc');
37
+ const pub = new sdk_core_1.Ecdsa().deriveUnhardened(commonKeyChain, 'm/0').slice(0, 66);
38
+ baseAddress = new abstract_eth_1.KeyPair({ pub }).getAddress();
39
+ });
40
+ beforeEach(function () {
41
+ sandbox.stub(basecoin, 'queryAddressBalance').resolves(new bn_js_1.default('100000000000000000'));
42
+ sandbox.stub(basecoin, 'getAddressNonce').resolves(0);
43
+ });
44
+ afterEach(function () {
45
+ sandbox.restore();
46
+ });
47
+ function recover(walletContractAddress) {
48
+ return basecoin.recover({
49
+ userKey: commonKeyChain,
50
+ backupKey: commonKeyChain,
51
+ isTss: true,
52
+ walletContractAddress,
53
+ recoveryDestination,
54
+ gasLimit: 200000,
55
+ gasPrice: 20000000000,
56
+ // tbsc is not EIP-1559, so a legacy hardfork is required here
57
+ replayProtectionOptions: { chain: 97, hardfork: 'petersburg' },
58
+ });
59
+ }
60
+ it('derives the base address from the common keychain instead of rejecting it', async function () {
61
+ const sweep = (await recover(baseAddress));
62
+ // The MPCv2 payload shape, not the MPCv1 OfflineVaultTxInfo the broken path would have built.
63
+ sweep.txRequests.should.have.length(1);
64
+ const unsignedTx = sweep.txRequests[0].transactions[0].unsignedTx;
65
+ unsignedTx.derivationPath.should.equal('m/0');
66
+ should_1.default.exist(unsignedTx.signableHex);
67
+ });
68
+ it('fails closed when the wallet address is not the one the keychain derives', async function () {
69
+ await recover('0xe740412ab65efdbdbe2a5e4c6e01d7bbc54a38a9').should.be.rejectedWith(sdk_core_1.RecoveryKeyMismatchError);
70
+ });
71
+ });
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnNjVW5zaWduZWRTd2VlcFRzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Rlc3QvdW5pdC9ic2NVbnNpZ25lZFN3ZWVwVHNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsb0RBQTRCO0FBQzVCLGtEQUEwQjtBQUMxQixrREFBdUI7QUFDdkIsOENBQTBEO0FBQzFELDRDQUEwQztBQUMxQyxzREFBMkc7QUFDM0csOENBQWtFO0FBQ2xFLG1DQUFpQztBQUVqQzs7Ozs7Ozs7R0FRRztBQUNILFFBQVEsQ0FBQyx5Q0FBeUMsRUFBRTtJQUNsRCxJQUFJLEtBQW1CLENBQUM7SUFDeEIsSUFBSSxRQUFpQyxDQUFDO0lBQ3RDLE1BQU0sT0FBTyxHQUFHLGVBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUV0Qyx5RUFBeUU7SUFDekUsTUFBTSxjQUFjLEdBQ2xCLG9FQUFvRTtRQUNwRSxrRUFBa0UsQ0FBQztJQUNyRSxNQUFNLG1CQUFtQixHQUFHLDRDQUE0QyxDQUFDO0lBQ3pFLElBQUksV0FBbUIsQ0FBQztJQUV4QixNQUFNLENBQUM7UUFDTCxLQUFLLEdBQUcsb0JBQVMsQ0FBQyxRQUFRLENBQUMsa0JBQVEsRUFBRSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFVBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNoRCxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMzQixRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQXVDLENBQUM7UUFFcEUsTUFBTSxHQUFHLEdBQUcsSUFBSSxnQkFBSyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDN0UsV0FBVyxHQUFHLElBQUksc0JBQVUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDckQsQ0FBQyxDQUFDLENBQUM7SUFFSCxVQUFVLENBQUM7UUFDVCxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLGVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7UUFDckYsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQyxDQUFDLENBQUM7SUFFSCxTQUFTLENBQUM7UUFDUixPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDcEIsQ0FBQyxDQUFDLENBQUM7SUFFSCxTQUFTLE9BQU8sQ0FBQyxxQkFBNkI7UUFDNUMsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDO1lBQ3RCLE9BQU8sRUFBRSxjQUFjO1lBQ3ZCLFNBQVMsRUFBRSxjQUFjO1lBQ3pCLEtBQUssRUFBRSxJQUFJO1lBQ1gscUJBQXFCO1lBQ3JCLG1CQUFtQjtZQUNuQixRQUFRLEVBQUUsTUFBTTtZQUNoQixRQUFRLEVBQUUsV0FBVztZQUNyQiw4REFBOEQ7WUFDOUQsdUJBQXVCLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUU7U0FDL0QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEVBQUUsQ0FBQywyRUFBMkUsRUFBRSxLQUFLO1FBQ25GLE1BQU0sS0FBSyxHQUFHLENBQUMsTUFBTSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQXlCLENBQUM7UUFFbkUsOEZBQThGO1FBQzlGLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkMsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO1FBQ2xFLFVBQVUsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDdkMsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsMEVBQTBFLEVBQUUsS0FBSztRQUNsRixNQUFNLE9BQU8sQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLG1DQUF3QixDQUFDLENBQUM7SUFDL0csQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcbmltcG9ydCBzaW5vbiBmcm9tICdzaW5vbic7XG5pbXBvcnQgQk4gZnJvbSAnYm4uanMnO1xuaW1wb3J0IHsgVGVzdEJpdEdvLCBUZXN0Qml0R29BUEkgfSBmcm9tICdAYml0Z28vc2RrLXRlc3QnO1xuaW1wb3J0IHsgQml0R29BUEkgfSBmcm9tICdAYml0Z28vc2RrLWFwaSc7XG5pbXBvcnQgeyBBYnN0cmFjdEV0aExpa2VOZXdDb2lucywgS2V5UGFpciBhcyBFdGhLZXlQYWlyLCBVbnNpZ25lZFN3ZWVwVHhNUEN2MiB9IGZyb20gJ0BiaXRnby9hYnN0cmFjdC1ldGgnO1xuaW1wb3J0IHsgRWNkc2EsIFJlY292ZXJ5S2V5TWlzbWF0Y2hFcnJvciB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5pbXBvcnQgeyBUYnNjIH0gZnJvbSAnLi4vLi4vc3JjJztcblxuLyoqXG4gKiBCU0MgZGVjbGFyZXMgQ29pbkZlYXR1cmUuTVBDVjIgYnV0IG5ldmVyIG92ZXJyb2RlIGBidWlsZFVuc2lnbmVkU3dlZXBUeG5UU1NgLCBzbyBpdCBpbmhlcml0ZWRcbiAqIHRoZSBNUEN2MSBib2R5LCB3aGljaCBmZWQgdGhlIDEzMC1jaGFyIGNvbW1vbiBrZXljaGFpbiBzdHJhaWdodCBpbnRvIGBuZXcgS2V5UGFpcih7IHB1YiB9KWAgYW5kXG4gKiB0aHJldyBgVW5zdXBwb3J0ZWQgcHVibGljIGtleWAg4oCUIGFuIHVuc2lnbmVkIFRTUyBzd2VlcCB3YXMgaW1wb3NzaWJsZSBvbiB0aGlzIGNvaW4uXG4gKlxuICogVGhlIGJhc2UgY2xhc3Mgbm93IGRpc3BhdGNoZXMgTVBDVjIgY29pbnMgdG8gYGJ1aWxkVW5zaWduZWRTd2VlcFR4bk1QQ3YyYC4gVGhlc2UgdGVzdHMgcGluIHRoYXRcbiAqIGRpc3BhdGNoIGZvciBvbmUgb2YgdGhlIGZvdXIgY29pbnMgKGJzYywgYXJiZXRoLCBvcGV0aCwgYmVyYSkgdGhhdCBnYWluZWQgaXQsIHNvIHRoZSBmaXggY2Fubm90XG4gKiBzaWxlbnRseSByZWdyZXNzLlxuICovXG5kZXNjcmliZSgnQlNDIHVuc2lnbmVkIFRTUyBzd2VlcCAoTVBDdjIgZGlzcGF0Y2gpJywgZnVuY3Rpb24gKCkge1xuICBsZXQgYml0Z286IFRlc3RCaXRHb0FQSTtcbiAgbGV0IGJhc2Vjb2luOiBBYnN0cmFjdEV0aExpa2VOZXdDb2lucztcbiAgY29uc3Qgc2FuZGJveCA9IHNpbm9uLmNyZWF0ZVNhbmRib3goKTtcblxuICAvLyBhIHJlYWwgTVBDdjIgY29tbW9uIGtleWNoYWluICgzMy1ieXRlIHB1YmtleSArIDMyLWJ5dGUgY2hhaW5jb2RlLCBoZXgpXG4gIGNvbnN0IGNvbW1vbktleUNoYWluID1cbiAgICAnMDIzNGViMzliMjJmZWQ1MjNlY2U3Yzc4ZGEyOWJhMWYxZGU1YjY0YTZlNDgwMTNlMDkxNGRlNzkzYmMxZGYwNTcwJyArXG4gICAgJ2U3NzlkZTA0NzU4NzMyNzM0ZDk3ZTU0Yjc4MmM4YjMzNjI4MzgxMWFmNmEyYzU3YmQ4MTQzODc5OGUxYzI0NDYnO1xuICBjb25zdCByZWNvdmVyeURlc3RpbmF0aW9uID0gJzB4ZDVBRGRFMTdmZUQ4YmFlZDNGMzJiODRBRjA1QjhGMjgxNmY3YjU2MCc7XG4gIGxldCBiYXNlQWRkcmVzczogc3RyaW5nO1xuXG4gIGJlZm9yZShmdW5jdGlvbiAoKSB7XG4gICAgYml0Z28gPSBUZXN0Qml0R28uZGVjb3JhdGUoQml0R29BUEksIHsgZW52OiAndGVzdCcgfSk7XG4gICAgYml0Z28uc2FmZVJlZ2lzdGVyKCd0YnNjJywgVGJzYy5jcmVhdGVJbnN0YW5jZSk7XG4gICAgYml0Z28uaW5pdGlhbGl6ZVRlc3RWYXJzKCk7XG4gICAgYmFzZWNvaW4gPSBiaXRnby5jb2luKCd0YnNjJykgYXMgdW5rbm93biBhcyBBYnN0cmFjdEV0aExpa2VOZXdDb2lucztcblxuICAgIGNvbnN0IHB1YiA9IG5ldyBFY2RzYSgpLmRlcml2ZVVuaGFyZGVuZWQoY29tbW9uS2V5Q2hhaW4sICdtLzAnKS5zbGljZSgwLCA2Nik7XG4gICAgYmFzZUFkZHJlc3MgPSBuZXcgRXRoS2V5UGFpcih7IHB1YiB9KS5nZXRBZGRyZXNzKCk7XG4gIH0pO1xuXG4gIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgIHNhbmRib3guc3R1YihiYXNlY29pbiwgJ3F1ZXJ5QWRkcmVzc0JhbGFuY2UnKS5yZXNvbHZlcyhuZXcgQk4oJzEwMDAwMDAwMDAwMDAwMDAwMCcpKTtcbiAgICBzYW5kYm94LnN0dWIoYmFzZWNvaW4sICdnZXRBZGRyZXNzTm9uY2UnKS5yZXNvbHZlcygwKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKGZ1bmN0aW9uICgpIHtcbiAgICBzYW5kYm94LnJlc3RvcmUoKTtcbiAgfSk7XG5cbiAgZnVuY3Rpb24gcmVjb3Zlcih3YWxsZXRDb250cmFjdEFkZHJlc3M6IHN0cmluZykge1xuICAgIHJldHVybiBiYXNlY29pbi5yZWNvdmVyKHtcbiAgICAgIHVzZXJLZXk6IGNvbW1vbktleUNoYWluLFxuICAgICAgYmFja3VwS2V5OiBjb21tb25LZXlDaGFpbixcbiAgICAgIGlzVHNzOiB0cnVlLFxuICAgICAgd2FsbGV0Q29udHJhY3RBZGRyZXNzLFxuICAgICAgcmVjb3ZlcnlEZXN0aW5hdGlvbixcbiAgICAgIGdhc0xpbWl0OiAyMDAwMDAsXG4gICAgICBnYXNQcmljZTogMjAwMDAwMDAwMDAsXG4gICAgICAvLyB0YnNjIGlzIG5vdCBFSVAtMTU1OSwgc28gYSBsZWdhY3kgaGFyZGZvcmsgaXMgcmVxdWlyZWQgaGVyZVxuICAgICAgcmVwbGF5UHJvdGVjdGlvbk9wdGlvbnM6IHsgY2hhaW46IDk3LCBoYXJkZm9yazogJ3BldGVyc2J1cmcnIH0sXG4gICAgfSk7XG4gIH1cblxuICBpdCgnZGVyaXZlcyB0aGUgYmFzZSBhZGRyZXNzIGZyb20gdGhlIGNvbW1vbiBrZXljaGFpbiBpbnN0ZWFkIG9mIHJlamVjdGluZyBpdCcsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBzd2VlcCA9IChhd2FpdCByZWNvdmVyKGJhc2VBZGRyZXNzKSkgYXMgVW5zaWduZWRTd2VlcFR4TVBDdjI7XG5cbiAgICAvLyBUaGUgTVBDdjIgcGF5bG9hZCBzaGFwZSwgbm90IHRoZSBNUEN2MSBPZmZsaW5lVmF1bHRUeEluZm8gdGhlIGJyb2tlbiBwYXRoIHdvdWxkIGhhdmUgYnVpbHQuXG4gICAgc3dlZXAudHhSZXF1ZXN0cy5zaG91bGQuaGF2ZS5sZW5ndGgoMSk7XG4gICAgY29uc3QgdW5zaWduZWRUeCA9IHN3ZWVwLnR4UmVxdWVzdHNbMF0udHJhbnNhY3Rpb25zWzBdLnVuc2lnbmVkVHg7XG4gICAgdW5zaWduZWRUeC5kZXJpdmF0aW9uUGF0aC5zaG91bGQuZXF1YWwoJ20vMCcpO1xuICAgIHNob3VsZC5leGlzdCh1bnNpZ25lZFR4LnNpZ25hYmxlSGV4KTtcbiAgfSk7XG5cbiAgaXQoJ2ZhaWxzIGNsb3NlZCB3aGVuIHRoZSB3YWxsZXQgYWRkcmVzcyBpcyBub3QgdGhlIG9uZSB0aGUga2V5Y2hhaW4gZGVyaXZlcycsIGFzeW5jIGZ1bmN0aW9uICgpIHtcbiAgICBhd2FpdCByZWNvdmVyKCcweGU3NDA0MTJhYjY1ZWZkYmRiZTJhNWU0YzZlMDFkN2JiYzU0YTM4YTknKS5zaG91bGQuYmUucmVqZWN0ZWRXaXRoKFJlY292ZXJ5S2V5TWlzbWF0Y2hFcnJvcik7XG4gIH0pO1xufSk7XG4iXX0=