@bitgo-beta/sdk-coin-avaxp 2.0.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.
- package/.eslintignore +5 -0
- package/.eslintrc.json +7 -0
- package/.mocharc.yml +8 -0
- package/CHANGELOG.md +168 -0
- package/LICENSE +191 -0
- package/README.md +39 -0
- package/dist/src/avaxp.d.ts +69 -0
- package/dist/src/avaxp.d.ts.map +1 -0
- package/dist/src/avaxp.js +248 -0
- package/dist/src/iface.d.ts +43 -0
- package/dist/src/iface.d.ts.map +1 -0
- package/dist/src/iface.js +3 -0
- package/dist/src/index.d.ts +5 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +30 -0
- package/dist/src/lib/atomicTransactionBuilder.d.ts +33 -0
- package/dist/src/lib/atomicTransactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/atomicTransactionBuilder.js +122 -0
- package/dist/src/lib/delegatorTxBuilder.d.ts +96 -0
- package/dist/src/lib/delegatorTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/delegatorTxBuilder.js +287 -0
- package/dist/src/lib/errors.d.ts +8 -0
- package/dist/src/lib/errors.d.ts.map +1 -0
- package/dist/src/lib/errors.js +19 -0
- package/dist/src/lib/exportTxBuilder.d.ts +34 -0
- package/dist/src/lib/exportTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/exportTxBuilder.js +88 -0
- package/dist/src/lib/iface.d.ts +58 -0
- package/dist/src/lib/iface.d.ts.map +1 -0
- package/dist/src/lib/iface.js +18 -0
- package/dist/src/lib/importInCTxBuilder.d.ts +48 -0
- package/dist/src/lib/importInCTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/importInCTxBuilder.js +152 -0
- package/dist/src/lib/importTxBuilder.d.ts +18 -0
- package/dist/src/lib/importTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/importTxBuilder.js +67 -0
- package/dist/src/lib/index.d.ts +9 -0
- package/dist/src/lib/index.d.ts.map +1 -0
- package/dist/src/lib/index.js +29 -0
- package/dist/src/lib/keyPair.d.ts +59 -0
- package/dist/src/lib/keyPair.d.ts.map +1 -0
- package/dist/src/lib/keyPair.js +151 -0
- package/dist/src/lib/transaction.d.ts +81 -0
- package/dist/src/lib/transaction.d.ts.map +1 -0
- package/dist/src/lib/transaction.js +277 -0
- package/dist/src/lib/transactionBuilder.d.ts +122 -0
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder.js +224 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts +42 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilderFactory.js +107 -0
- package/dist/src/lib/transferBuilder.d.ts +18 -0
- package/dist/src/lib/transferBuilder.d.ts.map +1 -0
- package/dist/src/lib/transferBuilder.js +31 -0
- package/dist/src/lib/utils.d.ts +152 -0
- package/dist/src/lib/utils.d.ts.map +1 -0
- package/dist/src/lib/utils.js +300 -0
- package/dist/src/lib/utxoEngine.d.ts +45 -0
- package/dist/src/lib/utxoEngine.d.ts.map +1 -0
- package/dist/src/lib/utxoEngine.js +89 -0
- package/dist/src/lib/validatorTxBuilder.d.ts +37 -0
- package/dist/src/lib/validatorTxBuilder.d.ts.map +1 -0
- package/dist/src/lib/validatorTxBuilder.js +69 -0
- package/dist/src/tavaxp.d.ts +9 -0
- package/dist/src/tavaxp.d.ts.map +1 -0
- package/dist/src/tavaxp.js +14 -0
- package/dist/test/resources/avaxp.d.ts +178 -0
- package/dist/test/resources/avaxp.d.ts.map +1 -0
- package/dist/test/resources/avaxp.js +953 -0
- package/dist/test/resources/errors.d.ts +18 -0
- package/dist/test/resources/errors.d.ts.map +1 -0
- package/dist/test/resources/errors.js +21 -0
- package/dist/test/resources/keychains.d.ts +18 -0
- package/dist/test/resources/keychains.d.ts.map +1 -0
- package/dist/test/resources/keychains.js +30 -0
- package/dist/test/resources/tx/importC.d.ts +29 -0
- package/dist/test/resources/tx/importC.d.ts.map +1 -0
- package/dist/test/resources/tx/importC.js +42 -0
- package/dist/test/resources/tx/importP.d.ts +29 -0
- package/dist/test/resources/tx/importP.d.ts.map +1 -0
- package/dist/test/resources/tx/importP.js +42 -0
- package/dist/test/unit/avaxp.d.ts +2 -0
- package/dist/test/unit/avaxp.d.ts.map +1 -0
- package/dist/test/unit/avaxp.js +553 -0
- package/dist/test/unit/lib/exportP2CTxBuilder.d.ts +2 -0
- package/dist/test/unit/lib/exportP2CTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/lib/exportP2CTxBuilder.js +173 -0
- package/dist/test/unit/lib/importC2PTxBuilder.d.ts +2 -0
- package/dist/test/unit/lib/importC2PTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/lib/importC2PTxBuilder.js +85 -0
- package/dist/test/unit/lib/importP2CTxBuilder.d.ts +2 -0
- package/dist/test/unit/lib/importP2CTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/lib/importP2CTxBuilder.js +125 -0
- package/dist/test/unit/lib/keyPair.d.ts +2 -0
- package/dist/test/unit/lib/keyPair.d.ts.map +1 -0
- package/dist/test/unit/lib/keyPair.js +172 -0
- package/dist/test/unit/lib/signFlowTestSuit.d.ts +20 -0
- package/dist/test/unit/lib/signFlowTestSuit.d.ts.map +1 -0
- package/dist/test/unit/lib/signFlowTestSuit.js +80 -0
- package/dist/test/unit/lib/transactionBuilderFactory.d.ts +2 -0
- package/dist/test/unit/lib/transactionBuilderFactory.d.ts.map +1 -0
- package/dist/test/unit/lib/transactionBuilderFactory.js +114 -0
- package/dist/test/unit/lib/utils.d.ts +2 -0
- package/dist/test/unit/lib/utils.d.ts.map +1 -0
- package/dist/test/unit/lib/utils.js +69 -0
- package/dist/test/unit/lib/utxoEngine.d.ts +2 -0
- package/dist/test/unit/lib/utxoEngine.d.ts.map +1 -0
- package/dist/test/unit/lib/utxoEngine.js +168 -0
- package/dist/test/unit/lib/validateTxBuilder.d.ts +2 -0
- package/dist/test/unit/lib/validateTxBuilder.d.ts.map +1 -0
- package/dist/test/unit/lib/validateTxBuilder.js +318 -0
- package/dist/tsconfig.tsbuildinfo +10238 -0
- package/package.json +62 -0
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { Entry, TransactionExplanation as BaseTransactionExplanation, TransactionType } from '@bitgo-beta/sdk-core';
|
|
2
|
+
import { BaseTx as PMVBaseTx, TransferableOutput, Tx as PMVTx } from 'avalanche/dist/apis/platformvm';
|
|
3
|
+
import { EVMBaseTx, EVMOutput, Tx as EMVTx } from 'avalanche/dist/apis/evm';
|
|
4
|
+
export interface TransactionExplanation extends BaseTransactionExplanation {
|
|
5
|
+
type: TransactionType;
|
|
6
|
+
rewardAddresses: string[];
|
|
7
|
+
inputs: Entry[];
|
|
8
|
+
memo?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Method names for the transaction method. Names change based on the type of transaction e.g 'bond' for the staking transaction
|
|
12
|
+
*/
|
|
13
|
+
export declare enum MethodNames {
|
|
14
|
+
addDelegator = 0,
|
|
15
|
+
addValidator = 1
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* The transaction data returned from the toJson() function of a transaction
|
|
19
|
+
*/
|
|
20
|
+
export interface TxData {
|
|
21
|
+
id: string;
|
|
22
|
+
inputs: Entry[];
|
|
23
|
+
type: TransactionType;
|
|
24
|
+
fromAddresses: string[];
|
|
25
|
+
threshold: number;
|
|
26
|
+
locktime: string;
|
|
27
|
+
memo?: string;
|
|
28
|
+
signatures: string[];
|
|
29
|
+
outputs: Entry[];
|
|
30
|
+
changeOutputs: Entry[];
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Decoded UTXO object. This is for a single utxo
|
|
34
|
+
*
|
|
35
|
+
* @param {number} outputID
|
|
36
|
+
* @param {string} amount Amount as a Big Number string
|
|
37
|
+
* @param {string} txid Transaction ID encoded as cb58
|
|
38
|
+
* @param {string} outputidx Output index as a string
|
|
39
|
+
*/
|
|
40
|
+
export declare type DecodedUtxoObj = {
|
|
41
|
+
outputID: number;
|
|
42
|
+
amount: string;
|
|
43
|
+
txid: string;
|
|
44
|
+
outputidx: string;
|
|
45
|
+
threshold: number;
|
|
46
|
+
addresses: string[];
|
|
47
|
+
addressesIndex?: number[];
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* TypeId value for SECP256K1 Transfer Output
|
|
51
|
+
*
|
|
52
|
+
* {@link https://docs.avax.network/specs/platform-transaction-serialization#secp256k1-transfer-output-example }
|
|
53
|
+
*/
|
|
54
|
+
export declare const SECP256K1_Transfer_Output = 7;
|
|
55
|
+
export declare type Tx = PMVTx | EMVTx;
|
|
56
|
+
export declare type BaseTx = PMVBaseTx | EVMBaseTx;
|
|
57
|
+
export declare type Output = TransferableOutput | EVMOutput;
|
|
58
|
+
//# sourceMappingURL=iface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iface.d.ts","sourceRoot":"","sources":["../../../src/lib/iface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,sBAAsB,IAAI,0BAA0B,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACpH,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE,kBAAkB,EAAE,EAAE,IAAI,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACtG,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,IAAI,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAE5E,MAAM,WAAW,sBAAuB,SAAQ,0BAA0B;IACxE,IAAI,EAAE,eAAe,CAAC;IACtB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,oBAAY,WAAW;IACrB,YAAY,IAAA;IACZ,YAAY,IAAA;CACb;AAED;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,IAAI,EAAE,eAAe,CAAC;IACtB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,KAAK,EAAE,CAAC;IACjB,aAAa,EAAE,KAAK,EAAE,CAAC;CACxB;AAED;;;;;;;GAOG;AACH,oBAAY,cAAc,GAAG;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAE3C,oBAAY,EAAE,GAAG,KAAK,GAAG,KAAK,CAAC;AAC/B,oBAAY,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;AAC3C,oBAAY,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SECP256K1_Transfer_Output = exports.MethodNames = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Method names for the transaction method. Names change based on the type of transaction e.g 'bond' for the staking transaction
|
|
6
|
+
*/
|
|
7
|
+
var MethodNames;
|
|
8
|
+
(function (MethodNames) {
|
|
9
|
+
MethodNames[MethodNames["addDelegator"] = 0] = "addDelegator";
|
|
10
|
+
MethodNames[MethodNames["addValidator"] = 1] = "addValidator";
|
|
11
|
+
})(MethodNames = exports.MethodNames || (exports.MethodNames = {}));
|
|
12
|
+
/**
|
|
13
|
+
* TypeId value for SECP256K1 Transfer Output
|
|
14
|
+
*
|
|
15
|
+
* {@link https://docs.avax.network/specs/platform-transaction-serialization#secp256k1-transfer-output-example }
|
|
16
|
+
*/
|
|
17
|
+
exports.SECP256K1_Transfer_Output = 7;
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2lmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVdBOztHQUVHO0FBQ0gsSUFBWSxXQUdYO0FBSEQsV0FBWSxXQUFXO0lBQ3JCLDZEQUFZLENBQUE7SUFDWiw2REFBWSxDQUFBO0FBQ2QsQ0FBQyxFQUhXLFdBQVcsR0FBWCxtQkFBVyxLQUFYLG1CQUFXLFFBR3RCO0FBb0NEOzs7O0dBSUc7QUFDVSxRQUFBLHlCQUF5QixHQUFHLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudHJ5LCBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIGFzIEJhc2VUcmFuc2FjdGlvbkV4cGxhbmF0aW9uLCBUcmFuc2FjdGlvblR5cGUgfSBmcm9tICdAYml0Z28tYmV0YS9zZGstY29yZSc7XG5pbXBvcnQgeyBCYXNlVHggYXMgUE1WQmFzZVR4LCBUcmFuc2ZlcmFibGVPdXRwdXQsIFR4IGFzIFBNVlR4IH0gZnJvbSAnYXZhbGFuY2hlL2Rpc3QvYXBpcy9wbGF0Zm9ybXZtJztcbmltcG9ydCB7IEVWTUJhc2VUeCwgRVZNT3V0cHV0LCBUeCBhcyBFTVZUeCB9IGZyb20gJ2F2YWxhbmNoZS9kaXN0L2FwaXMvZXZtJztcblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2FjdGlvbkV4cGxhbmF0aW9uIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uRXhwbGFuYXRpb24ge1xuICB0eXBlOiBUcmFuc2FjdGlvblR5cGU7XG4gIHJld2FyZEFkZHJlc3Nlczogc3RyaW5nW107XG4gIGlucHV0czogRW50cnlbXTtcbiAgbWVtbz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBNZXRob2QgbmFtZXMgZm9yIHRoZSB0cmFuc2FjdGlvbiBtZXRob2QuIE5hbWVzIGNoYW5nZSBiYXNlZCBvbiB0aGUgdHlwZSBvZiB0cmFuc2FjdGlvbiBlLmcgJ2JvbmQnIGZvciB0aGUgc3Rha2luZyB0cmFuc2FjdGlvblxuICovXG5leHBvcnQgZW51bSBNZXRob2ROYW1lcyB7XG4gIGFkZERlbGVnYXRvcixcbiAgYWRkVmFsaWRhdG9yLFxufVxuXG4vKipcbiAqIFRoZSB0cmFuc2FjdGlvbiBkYXRhIHJldHVybmVkIGZyb20gdGhlIHRvSnNvbigpIGZ1bmN0aW9uIG9mIGEgdHJhbnNhY3Rpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUeERhdGEge1xuICBpZDogc3RyaW5nO1xuICBpbnB1dHM6IEVudHJ5W107XG4gIHR5cGU6IFRyYW5zYWN0aW9uVHlwZTtcbiAgZnJvbUFkZHJlc3Nlczogc3RyaW5nW107XG4gIHRocmVzaG9sZDogbnVtYmVyO1xuICBsb2NrdGltZTogc3RyaW5nO1xuICBtZW1vPzogc3RyaW5nO1xuICBzaWduYXR1cmVzOiBzdHJpbmdbXTtcbiAgb3V0cHV0czogRW50cnlbXTtcbiAgY2hhbmdlT3V0cHV0czogRW50cnlbXTtcbn1cblxuLyoqXG4gKiBEZWNvZGVkIFVUWE8gb2JqZWN0LiBUaGlzIGlzIGZvciBhIHNpbmdsZSB1dHhvXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IG91dHB1dElEXG4gKiBAcGFyYW0ge3N0cmluZ30gYW1vdW50IEFtb3VudCBhcyBhIEJpZyBOdW1iZXIgc3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gdHhpZCBUcmFuc2FjdGlvbiBJRCBlbmNvZGVkIGFzIGNiNThcbiAqIEBwYXJhbSB7c3RyaW5nfSBvdXRwdXRpZHggT3V0cHV0IGluZGV4IGFzIGEgc3RyaW5nXG4gKi9cbmV4cG9ydCB0eXBlIERlY29kZWRVdHhvT2JqID0ge1xuICBvdXRwdXRJRDogbnVtYmVyO1xuICBhbW91bnQ6IHN0cmluZztcbiAgdHhpZDogc3RyaW5nO1xuICBvdXRwdXRpZHg6IHN0cmluZztcbiAgdGhyZXNob2xkOiBudW1iZXI7XG4gIGFkZHJlc3Nlczogc3RyaW5nW107XG4gIGFkZHJlc3Nlc0luZGV4PzogbnVtYmVyW107XG59O1xuXG4vKipcbiAqIFR5cGVJZCB2YWx1ZSBmb3IgU0VDUDI1NksxIFRyYW5zZmVyIE91dHB1dFxuICpcbiAqIHtAbGluayBodHRwczovL2RvY3MuYXZheC5uZXR3b3JrL3NwZWNzL3BsYXRmb3JtLXRyYW5zYWN0aW9uLXNlcmlhbGl6YXRpb24jc2VjcDI1NmsxLXRyYW5zZmVyLW91dHB1dC1leGFtcGxlIH1cbiAqL1xuZXhwb3J0IGNvbnN0IFNFQ1AyNTZLMV9UcmFuc2Zlcl9PdXRwdXQgPSA3O1xuXG5leHBvcnQgdHlwZSBUeCA9IFBNVlR4IHwgRU1WVHg7XG5leHBvcnQgdHlwZSBCYXNlVHggPSBQTVZCYXNlVHggfCBFVk1CYXNlVHg7XG5leHBvcnQgdHlwZSBPdXRwdXQgPSBUcmFuc2ZlcmFibGVPdXRwdXQgfCBFVk1PdXRwdXQ7XG4iXX0=
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/// <reference types="bn.js" />
|
|
2
|
+
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
3
|
+
import { TransactionType } from '@bitgo-beta/sdk-core';
|
|
4
|
+
import { ImportTx, TransferableInput } from 'avalanche/dist/apis/evm';
|
|
5
|
+
import { BN } from 'avalanche';
|
|
6
|
+
import { Credential } from 'avalanche/dist/common';
|
|
7
|
+
import { Transaction } from './transaction';
|
|
8
|
+
import { AtomicTransactionBuilder } from './atomicTransactionBuilder';
|
|
9
|
+
import { BaseTx, Tx } from './iface';
|
|
10
|
+
export declare class ImportInCTxBuilder extends AtomicTransactionBuilder {
|
|
11
|
+
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
12
|
+
feeRate(value: string | number): this;
|
|
13
|
+
to(cAddress: string): this;
|
|
14
|
+
protected get transactionType(): TransactionType;
|
|
15
|
+
initBuilder(tx: Tx): this;
|
|
16
|
+
static verifyTxType(baseTx: BaseTx): baseTx is ImportTx;
|
|
17
|
+
verifyTxType(baseTx: BaseTx): baseTx is ImportTx;
|
|
18
|
+
/**
|
|
19
|
+
*
|
|
20
|
+
* @protected
|
|
21
|
+
*/
|
|
22
|
+
protected buildAvaxpTransaction(): void;
|
|
23
|
+
/** @inheritdoc */
|
|
24
|
+
protected fromImplementation(rawTransaction: string): Transaction;
|
|
25
|
+
/**
|
|
26
|
+
* Create inputs by mapping {@see utxoEngine.utxoToInput} result.
|
|
27
|
+
* Reorder sender to handle recover signer.
|
|
28
|
+
* TransferableInput is a EVM Tx.
|
|
29
|
+
* @return {
|
|
30
|
+
* inputs: TransferableInput[];
|
|
31
|
+
* credentials: Credential[];
|
|
32
|
+
* amount: BN;
|
|
33
|
+
* } where amount is the sum of inputs amount and credentials has signer address to be replaced with correct signature.
|
|
34
|
+
* @protected
|
|
35
|
+
*
|
|
36
|
+
*/
|
|
37
|
+
protected createInputs(): {
|
|
38
|
+
inputs: TransferableInput[];
|
|
39
|
+
credentials: Credential[];
|
|
40
|
+
amount: BN;
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Check that fee is grater than 0.
|
|
44
|
+
* @param {BN} fee
|
|
45
|
+
*/
|
|
46
|
+
validateFee(fee: BN): void;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=importInCTxBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"importInCTxBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/importInCTxBuilder.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAuC,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5F,OAAO,EAGL,QAAQ,EAIR,iBAAiB,EAGlB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,EAAE,EAAwB,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAErC,qBAAa,kBAAmB,SAAQ,wBAAwB;gBAClD,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAQ7C,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAOrC,EAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAM1B,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI;IA6CzB,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,IAAI,QAAQ;IAIvD,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,IAAI,QAAQ;IAIhD;;;OAGG;IACH,SAAS,CAAC,qBAAqB,IAAI,IAAI;IAuCvC,kBAAkB;IAClB,SAAS,CAAC,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW;IAOjE;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,YAAY,IAAI;QACxB,MAAM,EAAE,iBAAiB,EAAE,CAAC;QAC5B,WAAW,EAAE,UAAU,EAAE,CAAC;QAC1B,MAAM,EAAE,EAAE,CAAC;KACZ;IA+BD;;;OAGG;IACH,WAAW,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI;CAK3B"}
|
|
@@ -0,0 +1,152 @@
|
|
|
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
|
+
exports.ImportInCTxBuilder = void 0;
|
|
7
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
8
|
+
const evm_1 = require("avalanche/dist/apis/evm");
|
|
9
|
+
const utils_1 = require("avalanche/dist/utils");
|
|
10
|
+
const utils_2 = __importDefault(require("./utils"));
|
|
11
|
+
const avalanche_1 = require("avalanche");
|
|
12
|
+
const atomicTransactionBuilder_1 = require("./atomicTransactionBuilder");
|
|
13
|
+
const utxoEngine_1 = require("./utxoEngine");
|
|
14
|
+
class ImportInCTxBuilder extends atomicTransactionBuilder_1.AtomicTransactionBuilder {
|
|
15
|
+
constructor(_coinConfig) {
|
|
16
|
+
super(_coinConfig);
|
|
17
|
+
// external chain id is P
|
|
18
|
+
this._externalChainId = utils_2.default.cb58Decode(this.transaction._network.blockchainID);
|
|
19
|
+
// chain id is C
|
|
20
|
+
this.transaction._blockchainID = utils_2.default.cb58Decode(this.transaction._network.cChainBlockchainID);
|
|
21
|
+
}
|
|
22
|
+
feeRate(value) {
|
|
23
|
+
const bnValue = new avalanche_1.BN(value);
|
|
24
|
+
this.validateFee(bnValue);
|
|
25
|
+
this.transaction._fee.feeRate = bnValue.toNumber();
|
|
26
|
+
return this;
|
|
27
|
+
}
|
|
28
|
+
to(cAddress) {
|
|
29
|
+
const toAddress = avalanche_1.Buffer.from(cAddress.slice(2), 'hex');
|
|
30
|
+
this.transaction._to = [toAddress];
|
|
31
|
+
return this;
|
|
32
|
+
}
|
|
33
|
+
get transactionType() {
|
|
34
|
+
return sdk_core_1.TransactionType.Import;
|
|
35
|
+
}
|
|
36
|
+
initBuilder(tx) {
|
|
37
|
+
const baseTx = tx.getUnsignedTx().getTransaction();
|
|
38
|
+
if (baseTx.getNetworkID() !== this.transaction._networkID ||
|
|
39
|
+
!baseTx.getBlockchainID().equals(this.transaction._blockchainID)) {
|
|
40
|
+
throw new Error('Network or blockchain is not equals');
|
|
41
|
+
}
|
|
42
|
+
if (!this.verifyTxType(baseTx)) {
|
|
43
|
+
throw new sdk_core_1.NotSupported('Transaction cannot be parsed or has an unsupported transaction type');
|
|
44
|
+
}
|
|
45
|
+
// The outputs is a signler C-Chain address result.
|
|
46
|
+
// It's expected to have only one outputs to the destination C-Chain address.
|
|
47
|
+
const outputs = baseTx.getOuts();
|
|
48
|
+
if (outputs.length != 1) {
|
|
49
|
+
throw new sdk_core_1.BuildTransactionError('Transaction can have one output');
|
|
50
|
+
}
|
|
51
|
+
const output = outputs[0];
|
|
52
|
+
if (!output.getAssetID().equals(this.transaction._assetId)) {
|
|
53
|
+
throw new Error('AssetID are not equals');
|
|
54
|
+
}
|
|
55
|
+
this.transaction._to = [output.getAddress()];
|
|
56
|
+
const input = baseTx.getImportInputs();
|
|
57
|
+
this.transaction._utxos = utxoEngine_1.recoverUtxos(input);
|
|
58
|
+
const totalInputAmount = input.reduce((t, i) => t.add(i.getInput().getAmount()), new avalanche_1.BN(0));
|
|
59
|
+
// it should be (output as AmountOutput).getAmount(), but it's not working.
|
|
60
|
+
const totalOutputAmount = new avalanche_1.BN(output.amount);
|
|
61
|
+
const feeSize = utils_1.costImportTx(tx.getUnsignedTx());
|
|
62
|
+
const fee = totalInputAmount.sub(totalOutputAmount);
|
|
63
|
+
const feeRate = fee.divn(feeSize);
|
|
64
|
+
this.transaction._fee = {
|
|
65
|
+
fee: fee.toString(),
|
|
66
|
+
feeRate: feeRate.toNumber(),
|
|
67
|
+
size: feeSize,
|
|
68
|
+
};
|
|
69
|
+
this.transaction.setTransaction(tx);
|
|
70
|
+
return this;
|
|
71
|
+
}
|
|
72
|
+
static verifyTxType(baseTx) {
|
|
73
|
+
return baseTx.getTypeID() === evm_1.EVMConstants.IMPORTTX;
|
|
74
|
+
}
|
|
75
|
+
verifyTxType(baseTx) {
|
|
76
|
+
return ImportInCTxBuilder.verifyTxType(baseTx);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
*
|
|
80
|
+
* @protected
|
|
81
|
+
*/
|
|
82
|
+
buildAvaxpTransaction() {
|
|
83
|
+
// if tx has credentials, tx shouldn't change
|
|
84
|
+
if (this.transaction.hasCredentials)
|
|
85
|
+
return;
|
|
86
|
+
if (this.transaction._to.length !== 1) {
|
|
87
|
+
throw new Error('to is required');
|
|
88
|
+
}
|
|
89
|
+
if (!this.transaction._fee.feeRate) {
|
|
90
|
+
throw new Error('fee rate is required');
|
|
91
|
+
}
|
|
92
|
+
const { inputs, amount, credentials } = this.createInputs();
|
|
93
|
+
const feeRate = new avalanche_1.BN(this.transaction._fee.feeRate);
|
|
94
|
+
const feeSize = utils_1.costImportTx(new evm_1.UnsignedTx(new evm_1.ImportTx(this.transaction._networkID, this.transaction._blockchainID, this._externalChainId, inputs, [
|
|
95
|
+
new evm_1.EVMOutput(this.transaction._to[0], amount, this.transaction._assetId),
|
|
96
|
+
])));
|
|
97
|
+
const fee = feeRate.muln(feeSize);
|
|
98
|
+
this.transaction._fee.fee = fee.toString();
|
|
99
|
+
this.transaction._fee.size = feeSize;
|
|
100
|
+
this.transaction.setTransaction(new evm_1.Tx(new evm_1.UnsignedTx(new evm_1.ImportTx(this.transaction._networkID, this.transaction._blockchainID, this._externalChainId, inputs, [new evm_1.EVMOutput(this.transaction._to[0], amount.sub(fee), this.transaction._assetId)], fee)), credentials));
|
|
101
|
+
}
|
|
102
|
+
/** @inheritdoc */
|
|
103
|
+
fromImplementation(rawTransaction) {
|
|
104
|
+
const tx = new evm_1.Tx();
|
|
105
|
+
tx.fromBuffer(avalanche_1.Buffer.from(rawTransaction, 'hex'));
|
|
106
|
+
this.initBuilder(tx);
|
|
107
|
+
return this.transaction;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Create inputs by mapping {@see utxoEngine.utxoToInput} result.
|
|
111
|
+
* Reorder sender to handle recover signer.
|
|
112
|
+
* TransferableInput is a EVM Tx.
|
|
113
|
+
* @return {
|
|
114
|
+
* inputs: TransferableInput[];
|
|
115
|
+
* credentials: Credential[];
|
|
116
|
+
* amount: BN;
|
|
117
|
+
* } where amount is the sum of inputs amount and credentials has signer address to be replaced with correct signature.
|
|
118
|
+
* @protected
|
|
119
|
+
*
|
|
120
|
+
*/
|
|
121
|
+
createInputs() {
|
|
122
|
+
const sender = this.transaction._fromAddresses.slice();
|
|
123
|
+
if (this.recoverSigner) {
|
|
124
|
+
// switch first and last signer.
|
|
125
|
+
const tmp = sender.pop();
|
|
126
|
+
sender.push(sender[0]);
|
|
127
|
+
if (tmp) {
|
|
128
|
+
sender[0] = tmp;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
const { inputs, amount } = utxoEngine_1.utxoToInput(this.transaction._utxos, sender);
|
|
132
|
+
const result = { inputs: [], credentials: [] };
|
|
133
|
+
inputs.forEach((input) => {
|
|
134
|
+
const secpTransferInput = new evm_1.SECPTransferInput(input.amount);
|
|
135
|
+
input.signaturesIdx.forEach((signatureIdx, arrayIndex) => secpTransferInput.addSignatureIdx(signatureIdx, sender[arrayIndex]));
|
|
136
|
+
result.inputs.push(new evm_1.TransferableInput(input.txidBuf, input.outputIdx, this.transaction._assetId, secpTransferInput));
|
|
137
|
+
result.credentials.push(evm_1.SelectCredentialClass(secpTransferInput.getCredentialID(), input.signatures));
|
|
138
|
+
});
|
|
139
|
+
return { ...result, amount };
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Check that fee is grater than 0.
|
|
143
|
+
* @param {BN} fee
|
|
144
|
+
*/
|
|
145
|
+
validateFee(fee) {
|
|
146
|
+
if (fee.lten(0)) {
|
|
147
|
+
throw new sdk_core_1.BuildTransactionError('Fee must be greater than 0');
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
exports.ImportInCTxBuilder = ImportInCTxBuilder;
|
|
152
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0SW5DVHhCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9pbXBvcnRJbkNUeEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsbURBQTRGO0FBQzVGLGlEQVVpQztBQUNqQyxnREFBb0Q7QUFDcEQsb0RBQTRCO0FBQzVCLHlDQUFxRDtBQUdyRCx5RUFBc0U7QUFDdEUsNkNBQXlEO0FBR3pELE1BQWEsa0JBQW1CLFNBQVEsbURBQXdCO0lBQzlELFlBQVksV0FBaUM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25CLHlCQUF5QjtRQUN6QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZUFBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNqRixnQkFBZ0I7UUFDaEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEdBQUcsZUFBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ2xHLENBQUM7SUFFRCxPQUFPLENBQUMsS0FBc0I7UUFDNUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxjQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ25ELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELEVBQUUsQ0FBQyxRQUFnQjtRQUNqQixNQUFNLFNBQVMsR0FBRyxrQkFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxXQUFXLENBQUMsR0FB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LEVBQUU7WUFDZixNQUFNLElBQUksZ0NBQXFCLENBQUMsNEJBQTRCLENBQUMsQ0FBQztTQUMvRDtJQUNILENBQUM7Q0FDRjtBQTFMRCxnREEwTEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsIE5vdFN1cHBvcnRlZCwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHtcbiAgRVZNQ29uc3RhbnRzLFxuICBUeCBhcyBFVk1UeCxcbiAgSW1wb3J0VHgsXG4gIFVuc2lnbmVkVHgsXG4gIFNFQ1BUcmFuc2ZlcklucHV0LFxuICBTZWxlY3RDcmVkZW50aWFsQ2xhc3MsXG4gIFRyYW5zZmVyYWJsZUlucHV0LFxuICBFVk1PdXRwdXQsXG4gIEFtb3VudElucHV0LFxufSBmcm9tICdhdmFsYW5jaGUvZGlzdC9hcGlzL2V2bSc7XG5pbXBvcnQgeyBjb3N0SW1wb3J0VHggfSBmcm9tICdhdmFsYW5jaGUvZGlzdC91dGlscyc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBCTiwgQnVmZmVyIGFzIEJ1ZmZlckF2YXggfSBmcm9tICdhdmFsYW5jaGUnO1xuaW1wb3J0IHsgQ3JlZGVudGlhbCB9IGZyb20gJ2F2YWxhbmNoZS9kaXN0L2NvbW1vbic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgQXRvbWljVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi9hdG9taWNUcmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgcmVjb3ZlclV0eG9zLCB1dHhvVG9JbnB1dCB9IGZyb20gJy4vdXR4b0VuZ2luZSc7XG5pbXBvcnQgeyBCYXNlVHgsIFR4IH0gZnJvbSAnLi9pZmFjZSc7XG5cbmV4cG9ydCBjbGFzcyBJbXBvcnRJbkNUeEJ1aWxkZXIgZXh0ZW5kcyBBdG9taWNUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gICAgLy8gZXh0ZXJuYWwgY2hhaW4gaWQgaXMgUFxuICAgIHRoaXMuX2V4dGVybmFsQ2hhaW5JZCA9IHV0aWxzLmNiNThEZWNvZGUodGhpcy50cmFuc2FjdGlvbi5fbmV0d29yay5ibG9ja2NoYWluSUQpO1xuICAgIC8vIGNoYWluIGlkIGlzIENcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9ibG9ja2NoYWluSUQgPSB1dGlscy5jYjU4RGVjb2RlKHRoaXMudHJhbnNhY3Rpb24uX25ldHdvcmsuY0NoYWluQmxvY2tjaGFpbklEKTtcbiAgfVxuXG4gIGZlZVJhdGUodmFsdWU6IHN0cmluZyB8IG51bWJlcik6IHRoaXMge1xuICAgIGNvbnN0IGJuVmFsdWUgPSBuZXcgQk4odmFsdWUpO1xuICAgIHRoaXMudmFsaWRhdGVGZWUoYm5WYWx1ZSk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fZmVlLmZlZVJhdGUgPSBiblZhbHVlLnRvTnVtYmVyKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB0byhjQWRkcmVzczogc3RyaW5nKTogdGhpcyB7XG4gICAgY29uc3QgdG9BZGRyZXNzID0gQnVmZmVyQXZheC5mcm9tKGNBZGRyZXNzLnNsaWNlKDIpLCAnaGV4Jyk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fdG8gPSBbdG9BZGRyZXNzXTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgdHJhbnNhY3Rpb25UeXBlKCk6IFRyYW5zYWN0aW9uVHlwZSB7XG4gICAgcmV0dXJuIFRyYW5zYWN0aW9uVHlwZS5JbXBvcnQ7XG4gIH1cblxuICBpbml0QnVpbGRlcih0eDogVHgpOiB0aGlzIHtcbiAgICBjb25zdCBiYXNlVHg6IEJhc2VUeCA9IHR4LmdldFVuc2lnbmVkVHgoKS5nZXRUcmFuc2FjdGlvbigpO1xuICAgIGlmIChcbiAgICAgIGJhc2VUeC5nZXROZXR3b3JrSUQoKSAhPT0gdGhpcy50cmFuc2FjdGlvbi5fbmV0d29ya0lEIHx8XG4gICAgICAhYmFzZVR4LmdldEJsb2NrY2hhaW5JRCgpLmVxdWFscyh0aGlzLnRyYW5zYWN0aW9uLl9ibG9ja2NoYWluSUQpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05ldHdvcmsgb3IgYmxvY2tjaGFpbiBpcyBub3QgZXF1YWxzJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnZlcmlmeVR4VHlwZShiYXNlVHgpKSB7XG4gICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkKCdUcmFuc2FjdGlvbiBjYW5ub3QgYmUgcGFyc2VkIG9yIGhhcyBhbiB1bnN1cHBvcnRlZCB0cmFuc2FjdGlvbiB0eXBlJyk7XG4gICAgfVxuXG4gICAgLy8gVGhlIG91dHB1dHMgaXMgYSBzaWdubGVyIEMtQ2hhaW4gYWRkcmVzcyByZXN1bHQuXG4gICAgLy8gSXQncyBleHBlY3RlZCB0byBoYXZlIG9ubHkgb25lIG91dHB1dHMgdG8gdGhlIGRlc3RpbmF0aW9uIEMtQ2hhaW4gYWRkcmVzcy5cbiAgICBjb25zdCBvdXRwdXRzID0gYmFzZVR4LmdldE91dHMoKTtcbiAgICBpZiAob3V0cHV0cy5sZW5ndGggIT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVHJhbnNhY3Rpb24gY2FuIGhhdmUgb25lIG91dHB1dCcpO1xuICAgIH1cbiAgICBjb25zdCBvdXRwdXQgPSBvdXRwdXRzWzBdO1xuXG4gICAgaWYgKCFvdXRwdXQuZ2V0QXNzZXRJRCgpLmVxdWFscyh0aGlzLnRyYW5zYWN0aW9uLl9hc3NldElkKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBc3NldElEIGFyZSBub3QgZXF1YWxzJyk7XG4gICAgfVxuICAgIHRoaXMudHJhbnNhY3Rpb24uX3RvID0gW291dHB1dC5nZXRBZGRyZXNzKCldO1xuXG4gICAgY29uc3QgaW5wdXQgPSBiYXNlVHguZ2V0SW1wb3J0SW5wdXRzKCk7XG5cbiAgICB0aGlzLnRyYW5zYWN0aW9uLl91dHhvcyA9IHJlY292ZXJVdHhvcyhpbnB1dCk7XG5cbiAgICBjb25zdCB0b3RhbElucHV0QW1vdW50ID0gaW5wdXQucmVkdWNlKCh0LCBpKSA9PiB0LmFkZCgoaS5nZXRJbnB1dCgpIGFzIEFtb3VudElucHV0KS5nZXRBbW91bnQoKSksIG5ldyBCTigwKSk7XG4gICAgLy8gaXQgc2hvdWxkIGJlIChvdXRwdXQgYXMgQW1vdW50T3V0cHV0KS5nZXRBbW91bnQoKSwgYnV0IGl0J3Mgbm90IHdvcmtpbmcuXG4gICAgY29uc3QgdG90YWxPdXRwdXRBbW91bnQgPSBuZXcgQk4oKG91dHB1dCBhcyBhbnkpLmFtb3VudCk7XG4gICAgY29uc3QgZmVlU2l6ZSA9IGNvc3RJbXBvcnRUeCh0eC5nZXRVbnNpZ25lZFR4KCkgYXMgVW5zaWduZWRUeCk7XG4gICAgY29uc3QgZmVlID0gdG90YWxJbnB1dEFtb3VudC5zdWIodG90YWxPdXRwdXRBbW91bnQpO1xuICAgIGNvbnN0IGZlZVJhdGUgPSBmZWUuZGl2bihmZWVTaXplKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9mZWUgPSB7XG4gICAgICBmZWU6IGZlZS50b1N0cmluZygpLFxuICAgICAgZmVlUmF0ZTogZmVlUmF0ZS50b051bWJlcigpLFxuICAgICAgc2l6ZTogZmVlU2l6ZSxcbiAgICB9O1xuICAgIHRoaXMudHJhbnNhY3Rpb24uc2V0VHJhbnNhY3Rpb24odHgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc3RhdGljIHZlcmlmeVR4VHlwZShiYXNlVHg6IEJhc2VUeCk6IGJhc2VUeCBpcyBJbXBvcnRUeCB7XG4gICAgcmV0dXJuIGJhc2VUeC5nZXRUeXBlSUQoKSA9PT0gRVZNQ29uc3RhbnRzLklNUE9SVFRYO1xuICB9XG5cbiAgdmVyaWZ5VHhUeXBlKGJhc2VUeDogQmFzZVR4KTogYmFzZVR4IGlzIEltcG9ydFR4IHtcbiAgICByZXR1cm4gSW1wb3J0SW5DVHhCdWlsZGVyLnZlcmlmeVR4VHlwZShiYXNlVHgpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG4gIHByb3RlY3RlZCBidWlsZEF2YXhwVHJhbnNhY3Rpb24oKTogdm9pZCB7XG4gICAgLy8gaWYgdHggaGFzIGNyZWRlbnRpYWxzLCB0eCBzaG91bGRuJ3QgY2hhbmdlXG4gICAgaWYgKHRoaXMudHJhbnNhY3Rpb24uaGFzQ3JlZGVudGlhbHMpIHJldHVybjtcbiAgICBpZiAodGhpcy50cmFuc2FjdGlvbi5fdG8ubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3RvIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICAgIGlmICghdGhpcy50cmFuc2FjdGlvbi5fZmVlLmZlZVJhdGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZmVlIHJhdGUgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgY29uc3QgeyBpbnB1dHMsIGFtb3VudCwgY3JlZGVudGlhbHMgfSA9IHRoaXMuY3JlYXRlSW5wdXRzKCk7XG5cbiAgICBjb25zdCBmZWVSYXRlID0gbmV3IEJOKHRoaXMudHJhbnNhY3Rpb24uX2ZlZS5mZWVSYXRlKTtcbiAgICBjb25zdCBmZWVTaXplID0gY29zdEltcG9ydFR4KFxuICAgICAgbmV3IFVuc2lnbmVkVHgoXG4gICAgICAgIG5ldyBJbXBvcnRUeCh0aGlzLnRyYW5zYWN0aW9uLl9uZXR3b3JrSUQsIHRoaXMudHJhbnNhY3Rpb24uX2Jsb2NrY2hhaW5JRCwgdGhpcy5fZXh0ZXJuYWxDaGFpbklkLCBpbnB1dHMsIFtcbiAgICAgICAgICBuZXcgRVZNT3V0cHV0KHRoaXMudHJhbnNhY3Rpb24uX3RvWzBdLCBhbW91bnQsIHRoaXMudHJhbnNhY3Rpb24uX2Fzc2V0SWQpLFxuICAgICAgICBdKVxuICAgICAgKVxuICAgICk7XG4gICAgY29uc3QgZmVlID0gZmVlUmF0ZS5tdWxuKGZlZVNpemUpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX2ZlZS5mZWUgPSBmZWUudG9TdHJpbmcoKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uLl9mZWUuc2l6ZSA9IGZlZVNpemU7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5zZXRUcmFuc2FjdGlvbihcbiAgICAgIG5ldyBFVk1UeChcbiAgICAgICAgbmV3IFVuc2lnbmVkVHgoXG4gICAgICAgICAgbmV3IEltcG9ydFR4KFxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbi5fbmV0d29ya0lELFxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbi5fYmxvY2tjaGFpbklELFxuICAgICAgICAgICAgdGhpcy5fZXh0ZXJuYWxDaGFpbklkLFxuICAgICAgICAgICAgaW5wdXRzLFxuICAgICAgICAgICAgW25ldyBFVk1PdXRwdXQodGhpcy50cmFuc2FjdGlvbi5fdG9bMF0sIGFtb3VudC5zdWIoZmVlKSwgdGhpcy50cmFuc2FjdGlvbi5fYXNzZXRJZCldLFxuICAgICAgICAgICAgZmVlXG4gICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgICBjcmVkZW50aWFsc1xuICAgICAgKVxuICAgICk7XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgcHJvdGVjdGVkIGZyb21JbXBsZW1lbnRhdGlvbihyYXdUcmFuc2FjdGlvbjogc3RyaW5nKTogVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IHR4ID0gbmV3IEVWTVR4KCk7XG4gICAgdHguZnJvbUJ1ZmZlcihCdWZmZXJBdmF4LmZyb20ocmF3VHJhbnNhY3Rpb24sICdoZXgnKSk7XG4gICAgdGhpcy5pbml0QnVpbGRlcih0eCk7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNhY3Rpb247XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGlucHV0cyBieSBtYXBwaW5nIHtAc2VlIHV0eG9FbmdpbmUudXR4b1RvSW5wdXR9IHJlc3VsdC5cbiAgICogUmVvcmRlciBzZW5kZXIgdG8gaGFuZGxlIHJlY292ZXIgc2lnbmVyLlxuICAgKiBUcmFuc2ZlcmFibGVJbnB1dCBpcyBhIEVWTSBUeC5cbiAgICogQHJldHVybiB7XG4gICAqICAgICBpbnB1dHM6IFRyYW5zZmVyYWJsZUlucHV0W107XG4gICAqICAgICBjcmVkZW50aWFsczogQ3JlZGVudGlhbFtdO1xuICAgKiAgICAgYW1vdW50OiBCTjtcbiAgICogICB9IHdoZXJlIGFtb3VudCBpcyB0aGUgc3VtIG9mIGlucHV0cyBhbW91bnQgYW5kIGNyZWRlbnRpYWxzIGhhcyBzaWduZXIgYWRkcmVzcyB0byBiZSByZXBsYWNlZCB3aXRoIGNvcnJlY3Qgc2lnbmF0dXJlLlxuICAgKiBAcHJvdGVjdGVkXG4gICAqXG4gICAqL1xuICBwcm90ZWN0ZWQgY3JlYXRlSW5wdXRzKCk6IHtcbiAgICBpbnB1dHM6IFRyYW5zZmVyYWJsZUlucHV0W107XG4gICAgY3JlZGVudGlhbHM6IENyZWRlbnRpYWxbXTtcbiAgICBhbW91bnQ6IEJOO1xuICB9IHtcbiAgICBjb25zdCBzZW5kZXIgPSB0aGlzLnRyYW5zYWN0aW9uLl9mcm9tQWRkcmVzc2VzLnNsaWNlKCk7XG4gICAgaWYgKHRoaXMucmVjb3ZlclNpZ25lcikge1xuICAgICAgLy8gc3dpdGNoIGZpcnN0IGFuZCBsYXN0IHNpZ25lci5cbiAgICAgIGNvbnN0IHRtcCA9IHNlbmRlci5wb3AoKTtcbiAgICAgIHNlbmRlci5wdXNoKHNlbmRlclswXSk7XG4gICAgICBpZiAodG1wKSB7XG4gICAgICAgIHNlbmRlclswXSA9IHRtcDtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgeyBpbnB1dHMsIGFtb3VudCB9ID0gdXR4b1RvSW5wdXQodGhpcy50cmFuc2FjdGlvbi5fdXR4b3MsIHNlbmRlcik7XG4gICAgY29uc3QgcmVzdWx0OiB7XG4gICAgICBpbnB1dHM6IFRyYW5zZmVyYWJsZUlucHV0W107XG4gICAgICBjcmVkZW50aWFsczogQ3JlZGVudGlhbFtdO1xuICAgIH0gPSB7IGlucHV0czogW10sIGNyZWRlbnRpYWxzOiBbXSB9O1xuXG4gICAgaW5wdXRzLmZvckVhY2goKGlucHV0KSA9PiB7XG4gICAgICBjb25zdCBzZWNwVHJhbnNmZXJJbnB1dCA9IG5ldyBTRUNQVHJhbnNmZXJJbnB1dChpbnB1dC5hbW91bnQpO1xuICAgICAgaW5wdXQuc2lnbmF0dXJlc0lkeC5mb3JFYWNoKChzaWduYXR1cmVJZHgsIGFycmF5SW5kZXgpID0+XG4gICAgICAgIHNlY3BUcmFuc2ZlcklucHV0LmFkZFNpZ25hdHVyZUlkeChzaWduYXR1cmVJZHgsIHNlbmRlclthcnJheUluZGV4XSlcbiAgICAgICk7XG4gICAgICByZXN1bHQuaW5wdXRzLnB1c2goXG4gICAgICAgIG5ldyBUcmFuc2ZlcmFibGVJbnB1dChpbnB1dC50eGlkQnVmLCBpbnB1dC5vdXRwdXRJZHgsIHRoaXMudHJhbnNhY3Rpb24uX2Fzc2V0SWQsIHNlY3BUcmFuc2ZlcklucHV0KVxuICAgICAgKTtcblxuICAgICAgcmVzdWx0LmNyZWRlbnRpYWxzLnB1c2goU2VsZWN0Q3JlZGVudGlhbENsYXNzKHNlY3BUcmFuc2ZlcklucHV0LmdldENyZWRlbnRpYWxJRCgpLCBpbnB1dC5zaWduYXR1cmVzKSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4geyAuLi5yZXN1bHQsIGFtb3VudCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoYXQgZmVlIGlzIGdyYXRlciB0aGFuIDAuXG4gICAqIEBwYXJhbSB7Qk59IGZlZVxuICAgKi9cbiAgdmFsaWRhdGVGZWUoZmVlOiBCTik6IHZvaWQge1xuICAgIGlmIChmZWUubHRlbigwKSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignRmVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAnKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
2
|
+
import { TransactionType } from '@bitgo-beta/sdk-core';
|
|
3
|
+
import { AtomicTransactionBuilder } from './atomicTransactionBuilder';
|
|
4
|
+
import { ImportTx } from 'avalanche/dist/apis/platformvm';
|
|
5
|
+
import { Tx, BaseTx } from './iface';
|
|
6
|
+
export declare class ImportTxBuilder extends AtomicTransactionBuilder {
|
|
7
|
+
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
8
|
+
protected get transactionType(): TransactionType;
|
|
9
|
+
initBuilder(tx: Tx): this;
|
|
10
|
+
static verifyTxType(baseTx: BaseTx): baseTx is ImportTx;
|
|
11
|
+
verifyTxType(baseTx: BaseTx): baseTx is ImportTx;
|
|
12
|
+
/**
|
|
13
|
+
* Build the import transaction
|
|
14
|
+
* @protected
|
|
15
|
+
*/
|
|
16
|
+
protected buildAvaxpTransaction(): void;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=importTxBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"importTxBuilder.d.ts","sourceRoot":"","sources":["../../../src/lib/importTxBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAuC,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5F,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAgD,MAAM,gCAAgC,CAAC;AAIxG,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAErC,qBAAa,eAAgB,SAAQ,wBAAwB;gBAC/C,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC;IAK7C,SAAS,KAAK,eAAe,IAAI,eAAe,CAE/C;IAED,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI;IA4BzB,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,IAAI,QAAQ;IAIvD,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,IAAI,QAAQ;IAIhD;;;OAGG;IACH,SAAS,CAAC,qBAAqB,IAAI,IAAI;CAqBxC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
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
|
+
exports.ImportTxBuilder = void 0;
|
|
7
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
8
|
+
const atomicTransactionBuilder_1 = require("./atomicTransactionBuilder");
|
|
9
|
+
const platformvm_1 = require("avalanche/dist/apis/platformvm");
|
|
10
|
+
const utils_1 = __importDefault(require("./utils"));
|
|
11
|
+
const avalanche_1 = require("avalanche");
|
|
12
|
+
const utxoEngine_1 = require("./utxoEngine");
|
|
13
|
+
class ImportTxBuilder extends atomicTransactionBuilder_1.AtomicTransactionBuilder {
|
|
14
|
+
constructor(_coinConfig) {
|
|
15
|
+
super(_coinConfig);
|
|
16
|
+
this._externalChainId = utils_1.default.cb58Decode(this.transaction._network.cChainBlockchainID);
|
|
17
|
+
}
|
|
18
|
+
get transactionType() {
|
|
19
|
+
return sdk_core_1.TransactionType.Import;
|
|
20
|
+
}
|
|
21
|
+
initBuilder(tx) {
|
|
22
|
+
super.initBuilder(tx);
|
|
23
|
+
const baseTx = tx.getUnsignedTx().getTransaction();
|
|
24
|
+
if (!this.verifyTxType(baseTx)) {
|
|
25
|
+
throw new sdk_core_1.NotSupported('Transaction cannot be parsed or has an unsupported transaction type');
|
|
26
|
+
}
|
|
27
|
+
// The regular change output is the tx output in Import tx.
|
|
28
|
+
// {@link createInputOutput} result a single item array.
|
|
29
|
+
// It's expected to have only one outputs with the addresses of the sender.
|
|
30
|
+
const outputs = baseTx.getOuts();
|
|
31
|
+
if (outputs.length !== 1) {
|
|
32
|
+
throw new sdk_core_1.BuildTransactionError('Transaction can have one external output');
|
|
33
|
+
}
|
|
34
|
+
const output = outputs[0];
|
|
35
|
+
if (!output.getAssetID().equals(this.transaction._assetId)) {
|
|
36
|
+
throw new Error('The Asset ID of the output does not match the transaction');
|
|
37
|
+
}
|
|
38
|
+
const secpOut = output.getOutput();
|
|
39
|
+
this.transaction._locktime = secpOut.getLocktime();
|
|
40
|
+
this.transaction._threshold = secpOut.getThreshold();
|
|
41
|
+
// output addresses are the sender addresses
|
|
42
|
+
this.transaction._fromAddresses = secpOut.getAddresses();
|
|
43
|
+
this._externalChainId = baseTx.getSourceChain();
|
|
44
|
+
this.transaction._utxos = utxoEngine_1.recoverUtxos(baseTx.getImportInputs());
|
|
45
|
+
return this;
|
|
46
|
+
}
|
|
47
|
+
static verifyTxType(baseTx) {
|
|
48
|
+
return baseTx.getTypeID() === platformvm_1.PlatformVMConstants.IMPORTTX;
|
|
49
|
+
}
|
|
50
|
+
verifyTxType(baseTx) {
|
|
51
|
+
return ImportTxBuilder.verifyTxType(baseTx);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Build the import transaction
|
|
55
|
+
* @protected
|
|
56
|
+
*/
|
|
57
|
+
buildAvaxpTransaction() {
|
|
58
|
+
// if tx has credentials, tx shouldn't change
|
|
59
|
+
if (this.transaction.hasCredentials)
|
|
60
|
+
return;
|
|
61
|
+
const { inputs, outputs, credentials } = this.createInputOutput(new avalanche_1.BN(this.transaction.fee.fee));
|
|
62
|
+
this.transaction.setTransaction(new platformvm_1.Tx(new platformvm_1.UnsignedTx(new platformvm_1.ImportTx(this.transaction._networkID, this.transaction._blockchainID, outputs, [], // P-Chain input
|
|
63
|
+
this.transaction._memo, this._externalChainId, inputs)), credentials));
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
exports.ImportTxBuilder = ImportTxBuilder;
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0VHhCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9pbXBvcnRUeEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsbURBQTRGO0FBQzVGLHlFQUFzRTtBQUN0RSwrREFBd0c7QUFDeEcsb0RBQTRCO0FBQzVCLHlDQUErQjtBQUMvQiw2Q0FBNEM7QUFHNUMsTUFBYSxlQUFnQixTQUFRLG1EQUF3QjtJQUMzRCxZQUFZLFdBQWlDO1FBQzNDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZUFBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7SUFFRCxJQUFjLGVBQWU7UUFDM0IsT0FBTywwQkFBZSxDQUFDLE1BQU0sQ0FBQztJQUNoQyxDQUFDO0lBRUQsV0FBVyxDQUFDLEVBQU07UUFDaEIsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0QixNQUFNLE1BQU0sR0FBVyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDM0QsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDOUIsTUFBTSxJQUFJLHVCQUFZLENBQUMscUVBQXFFLENBQUMsQ0FBQztTQUMvRjtRQUVELDJEQUEyRDtRQUMzRCx3REFBd0Q7UUFDeEQsMkVBQTJFO1FBQzNFLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNqQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3hCLE1BQU0sSUFBSSxnQ0FBcUIsQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO1NBQzdFO1FBQ0QsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDMUQsTUFBTSxJQUFJLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFDO1NBQzlFO1FBQ0QsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuRCxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDckQsNENBQTRDO1FBQzVDLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN6RCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ2hELElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLHlCQUFZLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7UUFDakUsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFjO1FBQ2hDLE9BQU8sTUFBTSxDQUFDLFNBQVMsRUFBRSxLQUFLLGdDQUFtQixDQUFDLFFBQVEsQ0FBQztJQUM3RCxDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQWM7UUFDekIsT0FBTyxlQUFlLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRDs7O09BR0c7SUFDTyxxQkFBcUI7UUFDN0IsNkNBQTZDO1FBQzdDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjO1lBQUUsT0FBTztRQUM1QyxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxjQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNsRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FDN0IsSUFBSSxlQUFLLENBQ1AsSUFBSSx1QkFBVSxDQUNaLElBQUkscUJBQVEsQ0FDVixJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFDM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQzlCLE9BQU8sRUFDUCxFQUFFLEVBQUUsZ0JBQWdCO1FBQ3BCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUN0QixJQUFJLENBQUMsZ0JBQWdCLEVBQ3JCLE1BQU0sQ0FDUCxDQUNGLEVBQ0QsV0FBVyxDQUNaLENBQ0YsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQXZFRCwwQ0F1RUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQ29pbiBhcyBDb2luQ29uZmlnIH0gZnJvbSAnQGJpdGdvLWJldGEvc3RhdGljcyc7XG5pbXBvcnQgeyBCdWlsZFRyYW5zYWN0aW9uRXJyb3IsIE5vdFN1cHBvcnRlZCwgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQXRvbWljVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi9hdG9taWNUcmFuc2FjdGlvbkJ1aWxkZXInO1xuaW1wb3J0IHsgSW1wb3J0VHgsIFBsYXRmb3JtVk1Db25zdGFudHMsIFR4IGFzIFBWTVR4LCBVbnNpZ25lZFR4IH0gZnJvbSAnYXZhbGFuY2hlL2Rpc3QvYXBpcy9wbGF0Zm9ybXZtJztcbmltcG9ydCB1dGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IEJOIH0gZnJvbSAnYXZhbGFuY2hlJztcbmltcG9ydCB7IHJlY292ZXJVdHhvcyB9IGZyb20gJy4vdXR4b0VuZ2luZSc7XG5pbXBvcnQgeyBUeCwgQmFzZVR4IH0gZnJvbSAnLi9pZmFjZSc7XG5cbmV4cG9ydCBjbGFzcyBJbXBvcnRUeEJ1aWxkZXIgZXh0ZW5kcyBBdG9taWNUcmFuc2FjdGlvbkJ1aWxkZXIge1xuICBjb25zdHJ1Y3RvcihfY29pbkNvbmZpZzogUmVhZG9ubHk8Q29pbkNvbmZpZz4pIHtcbiAgICBzdXBlcihfY29pbkNvbmZpZyk7XG4gICAgdGhpcy5fZXh0ZXJuYWxDaGFpbklkID0gdXRpbHMuY2I1OERlY29kZSh0aGlzLnRyYW5zYWN0aW9uLl9uZXR3b3JrLmNDaGFpbkJsb2NrY2hhaW5JRCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IHRyYW5zYWN0aW9uVHlwZSgpOiBUcmFuc2FjdGlvblR5cGUge1xuICAgIHJldHVybiBUcmFuc2FjdGlvblR5cGUuSW1wb3J0O1xuICB9XG5cbiAgaW5pdEJ1aWxkZXIodHg6IFR4KTogdGhpcyB7XG4gICAgc3VwZXIuaW5pdEJ1aWxkZXIodHgpO1xuICAgIGNvbnN0IGJhc2VUeDogQmFzZVR4ID0gdHguZ2V0VW5zaWduZWRUeCgpLmdldFRyYW5zYWN0aW9uKCk7XG4gICAgaWYgKCF0aGlzLnZlcmlmeVR4VHlwZShiYXNlVHgpKSB7XG4gICAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkKCdUcmFuc2FjdGlvbiBjYW5ub3QgYmUgcGFyc2VkIG9yIGhhcyBhbiB1bnN1cHBvcnRlZCB0cmFuc2FjdGlvbiB0eXBlJyk7XG4gICAgfVxuXG4gICAgLy8gVGhlIHJlZ3VsYXIgY2hhbmdlIG91dHB1dCBpcyB0aGUgdHggb3V0cHV0IGluIEltcG9ydCB0eC5cbiAgICAvLyB7QGxpbmsgY3JlYXRlSW5wdXRPdXRwdXR9IHJlc3VsdCBhIHNpbmdsZSBpdGVtIGFycmF5LlxuICAgIC8vIEl0J3MgZXhwZWN0ZWQgdG8gaGF2ZSBvbmx5IG9uZSBvdXRwdXRzIHdpdGggdGhlIGFkZHJlc3NlcyBvZiB0aGUgc2VuZGVyLlxuICAgIGNvbnN0IG91dHB1dHMgPSBiYXNlVHguZ2V0T3V0cygpO1xuICAgIGlmIChvdXRwdXRzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEJ1aWxkVHJhbnNhY3Rpb25FcnJvcignVHJhbnNhY3Rpb24gY2FuIGhhdmUgb25lIGV4dGVybmFsIG91dHB1dCcpO1xuICAgIH1cbiAgICBjb25zdCBvdXRwdXQgPSBvdXRwdXRzWzBdO1xuICAgIGlmICghb3V0cHV0LmdldEFzc2V0SUQoKS5lcXVhbHModGhpcy50cmFuc2FjdGlvbi5fYXNzZXRJZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIEFzc2V0IElEIG9mIHRoZSBvdXRwdXQgZG9lcyBub3QgbWF0Y2ggdGhlIHRyYW5zYWN0aW9uJyk7XG4gICAgfVxuICAgIGNvbnN0IHNlY3BPdXQgPSBvdXRwdXQuZ2V0T3V0cHV0KCk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fbG9ja3RpbWUgPSBzZWNwT3V0LmdldExvY2t0aW1lKCk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5fdGhyZXNob2xkID0gc2VjcE91dC5nZXRUaHJlc2hvbGQoKTtcbiAgICAvLyBvdXRwdXQgYWRkcmVzc2VzIGFyZSB0aGUgc2VuZGVyIGFkZHJlc3Nlc1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX2Zyb21BZGRyZXNzZXMgPSBzZWNwT3V0LmdldEFkZHJlc3NlcygpO1xuICAgIHRoaXMuX2V4dGVybmFsQ2hhaW5JZCA9IGJhc2VUeC5nZXRTb3VyY2VDaGFpbigpO1xuICAgIHRoaXMudHJhbnNhY3Rpb24uX3V0eG9zID0gcmVjb3ZlclV0eG9zKGJhc2VUeC5nZXRJbXBvcnRJbnB1dHMoKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzdGF0aWMgdmVyaWZ5VHhUeXBlKGJhc2VUeDogQmFzZVR4KTogYmFzZVR4IGlzIEltcG9ydFR4IHtcbiAgICByZXR1cm4gYmFzZVR4LmdldFR5cGVJRCgpID09PSBQbGF0Zm9ybVZNQ29uc3RhbnRzLklNUE9SVFRYO1xuICB9XG5cbiAgdmVyaWZ5VHhUeXBlKGJhc2VUeDogQmFzZVR4KTogYmFzZVR4IGlzIEltcG9ydFR4IHtcbiAgICByZXR1cm4gSW1wb3J0VHhCdWlsZGVyLnZlcmlmeVR4VHlwZShiYXNlVHgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSBpbXBvcnQgdHJhbnNhY3Rpb25cbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIGJ1aWxkQXZheHBUcmFuc2FjdGlvbigpOiB2b2lkIHtcbiAgICAvLyBpZiB0eCBoYXMgY3JlZGVudGlhbHMsIHR4IHNob3VsZG4ndCBjaGFuZ2VcbiAgICBpZiAodGhpcy50cmFuc2FjdGlvbi5oYXNDcmVkZW50aWFscykgcmV0dXJuO1xuICAgIGNvbnN0IHsgaW5wdXRzLCBvdXRwdXRzLCBjcmVkZW50aWFscyB9ID0gdGhpcy5jcmVhdGVJbnB1dE91dHB1dChuZXcgQk4odGhpcy50cmFuc2FjdGlvbi5mZWUuZmVlKSk7XG4gICAgdGhpcy50cmFuc2FjdGlvbi5zZXRUcmFuc2FjdGlvbihcbiAgICAgIG5ldyBQVk1UeChcbiAgICAgICAgbmV3IFVuc2lnbmVkVHgoXG4gICAgICAgICAgbmV3IEltcG9ydFR4KFxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbi5fbmV0d29ya0lELFxuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbi5fYmxvY2tjaGFpbklELFxuICAgICAgICAgICAgb3V0cHV0cyxcbiAgICAgICAgICAgIFtdLCAvLyBQLUNoYWluIGlucHV0XG4gICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uLl9tZW1vLFxuICAgICAgICAgICAgdGhpcy5fZXh0ZXJuYWxDaGFpbklkLFxuICAgICAgICAgICAgaW5wdXRzXG4gICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgICBjcmVkZW50aWFsc1xuICAgICAgKVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import Utils from './utils';
|
|
2
|
+
export * from './iface';
|
|
3
|
+
export { KeyPair } from './keyPair';
|
|
4
|
+
export { Transaction } from './transaction';
|
|
5
|
+
export { TransactionBuilder } from './transactionBuilder';
|
|
6
|
+
export { TransactionBuilderFactory } from './transactionBuilderFactory';
|
|
7
|
+
export * from './iface';
|
|
8
|
+
export { Utils };
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,SAAS,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
10
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
11
|
+
};
|
|
12
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
13
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
14
|
+
};
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.Utils = exports.TransactionBuilderFactory = exports.TransactionBuilder = exports.Transaction = exports.KeyPair = void 0;
|
|
17
|
+
const utils_1 = __importDefault(require("./utils"));
|
|
18
|
+
exports.Utils = utils_1.default;
|
|
19
|
+
__exportStar(require("./iface"), exports);
|
|
20
|
+
var keyPair_1 = require("./keyPair");
|
|
21
|
+
Object.defineProperty(exports, "KeyPair", { enumerable: true, get: function () { return keyPair_1.KeyPair; } });
|
|
22
|
+
var transaction_1 = require("./transaction");
|
|
23
|
+
Object.defineProperty(exports, "Transaction", { enumerable: true, get: function () { return transaction_1.Transaction; } });
|
|
24
|
+
var transactionBuilder_1 = require("./transactionBuilder");
|
|
25
|
+
Object.defineProperty(exports, "TransactionBuilder", { enumerable: true, get: function () { return transactionBuilder_1.TransactionBuilder; } });
|
|
26
|
+
var transactionBuilderFactory_1 = require("./transactionBuilderFactory");
|
|
27
|
+
Object.defineProperty(exports, "TransactionBuilderFactory", { enumerable: true, get: function () { return transactionBuilderFactory_1.TransactionBuilderFactory; } });
|
|
28
|
+
__exportStar(require("./iface"), exports);
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxvREFBNEI7QUFPbkIsZ0JBUEYsZUFBSyxDQU9FO0FBTmQsMENBQXdCO0FBQ3hCLHFDQUFvQztBQUEzQixrR0FBQSxPQUFPLE9BQUE7QUFDaEIsNkNBQTRDO0FBQW5DLDBHQUFBLFdBQVcsT0FBQTtBQUNwQiwyREFBMEQ7QUFBakQsd0hBQUEsa0JBQWtCLE9BQUE7QUFDM0IseUVBQXdFO0FBQS9ELHNJQUFBLHlCQUF5QixPQUFBO0FBQ2xDLDBDQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBVdGlscyBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vaWZhY2UnO1xuZXhwb3J0IHsgS2V5UGFpciB9IGZyb20gJy4va2V5UGFpcic7XG5leHBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuZXhwb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyIH0gZnJvbSAnLi90cmFuc2FjdGlvbkJ1aWxkZXInO1xuZXhwb3J0IHsgVHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSB9IGZyb20gJy4vdHJhbnNhY3Rpb25CdWlsZGVyRmFjdG9yeSc7XG5leHBvcnQgKiBmcm9tICcuL2lmYWNlJztcbmV4cG9ydCB7IFV0aWxzIH07XG4iXX0=
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { DefaultKeys, KeyPairOptions, Secp256k1ExtendedKeyPair } from '@bitgo-beta/sdk-core';
|
|
3
|
+
export declare enum addressFormat {
|
|
4
|
+
testnet = "fuji",
|
|
5
|
+
mainnet = "avax"
|
|
6
|
+
}
|
|
7
|
+
export declare class KeyPair extends Secp256k1ExtendedKeyPair {
|
|
8
|
+
/**
|
|
9
|
+
* Public constructor. By default, creates a key pair with a random master seed.
|
|
10
|
+
*
|
|
11
|
+
* @param { KeyPairOptions } source Either a master seed, a private key, or a public key
|
|
12
|
+
*/
|
|
13
|
+
constructor(source?: KeyPairOptions);
|
|
14
|
+
/**
|
|
15
|
+
* Build a keypair from a protocol private key or extended private key.
|
|
16
|
+
*
|
|
17
|
+
* @param {string} prv A raw private key
|
|
18
|
+
*/
|
|
19
|
+
recordKeysFromPrivateKey(prv: string): void;
|
|
20
|
+
/**
|
|
21
|
+
* Build an ECPair from a protocol public key or extended public key.
|
|
22
|
+
*
|
|
23
|
+
* @param {string} pub A raw public key
|
|
24
|
+
*/
|
|
25
|
+
recordKeysFromPublicKey(pub: string): void;
|
|
26
|
+
/**
|
|
27
|
+
* Default keys format is a pair of Uint8Array keys
|
|
28
|
+
*
|
|
29
|
+
* @returns { DefaultKeys } The keys in the defined format
|
|
30
|
+
*/
|
|
31
|
+
getKeys(): DefaultKeys;
|
|
32
|
+
/**
|
|
33
|
+
* Get an Avalanche P-Chain public mainnet address
|
|
34
|
+
*
|
|
35
|
+
* @param {string} format - avalanche hrp - select Mainnet(avax) or Testnet(fuji) for the address
|
|
36
|
+
* @returns {string} The mainnet address derived from the public key
|
|
37
|
+
*/
|
|
38
|
+
getAddress(format?: string): string;
|
|
39
|
+
/**
|
|
40
|
+
* Get a public address of public key.
|
|
41
|
+
*
|
|
42
|
+
* @param {string} hrp - select Mainnet(avax) or Testnet(fuji) for the address
|
|
43
|
+
* @returns {string} The address derived from the public key and hrp
|
|
44
|
+
*/
|
|
45
|
+
getAvaxPAddress(hrp: string): string;
|
|
46
|
+
/**
|
|
47
|
+
* Get an Avalanche P-Chain public mainnet address
|
|
48
|
+
*
|
|
49
|
+
* @returns {Buffer} The address buffer derived from the public key
|
|
50
|
+
*/
|
|
51
|
+
getAddressBuffer(): Buffer;
|
|
52
|
+
/**
|
|
53
|
+
* Use the safe Buffer instead of the regular buffer to derive the address buffer. Used in the OVC.
|
|
54
|
+
*
|
|
55
|
+
* @returns {Buffer}
|
|
56
|
+
*/
|
|
57
|
+
getAddressSafeBuffer(): Buffer;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=keyPair.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyPair.d.ts","sourceRoot":"","sources":["../../../src/lib/keyPair.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,WAAW,EAMX,cAAc,EACd,wBAAwB,EACzB,MAAM,sBAAsB,CAAC;AAU9B,oBAAY,aAAa;IACvB,OAAO,SAAS;IAChB,OAAO,SAAS;CACjB;AAED,qBAAa,OAAQ,SAAQ,wBAAwB;IACnD;;;;OAIG;gBACS,MAAM,CAAC,EAAE,cAAc;IAoBnC;;;;OAIG;IACH,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAe3C;;;;OAIG;IACH,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAkB1C;;;;OAIG;IACH,OAAO,IAAI,WAAW;IAOtB;;;;;OAKG;IACH,UAAU,CAAC,MAAM,SAAY,GAAG,MAAM;IAGtC;;;;;OAKG;IACH,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAKpC;;;;OAIG;IACH,gBAAgB,IAAI,MAAM;IAS1B;;;;OAIG;IACH,oBAAoB,IAAI,MAAM;CAK/B"}
|