@bitgo-beta/sdk-coin-xtz 1.4.3-alpha.401 → 1.4.3-alpha.403
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/src/index.d.ts +5 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +44 -0
- package/dist/src/lib/address.d.ts +8 -0
- package/dist/src/lib/address.d.ts.map +1 -0
- package/dist/src/lib/address.js +10 -0
- package/dist/src/lib/iface.d.ts +148 -0
- package/dist/src/lib/iface.d.ts.map +1 -0
- package/dist/src/lib/iface.js +3 -0
- package/dist/src/lib/index.d.ts +10 -0
- package/dist/src/lib/index.d.ts.map +1 -0
- package/dist/src/lib/index.js +51 -0
- package/dist/src/lib/keyPair.d.ts +40 -0
- package/dist/src/lib/keyPair.d.ts.map +1 -0
- package/dist/src/lib/keyPair.js +149 -0
- package/dist/src/lib/multisigUtils.d.ts +134 -0
- package/dist/src/lib/multisigUtils.d.ts.map +1 -0
- package/dist/src/lib/multisigUtils.js +1193 -0
- package/dist/src/lib/transaction.d.ts +119 -0
- package/dist/src/lib/transaction.d.ts.map +1 -0
- package/dist/src/lib/transaction.js +329 -0
- package/dist/src/lib/transactionBuilder.d.ts +171 -0
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
- package/dist/src/lib/transactionBuilder.js +453 -0
- package/dist/src/lib/transferBuilder.d.ts +24 -0
- package/dist/src/lib/transferBuilder.d.ts.map +1 -0
- package/dist/src/lib/transferBuilder.js +64 -0
- package/dist/src/lib/utils.d.ts +280 -0
- package/dist/src/lib/utils.d.ts.map +1 -0
- package/dist/src/lib/utils.js +492 -0
- package/dist/src/register.d.ts +3 -0
- package/dist/src/register.d.ts.map +1 -0
- package/dist/src/register.js +11 -0
- package/dist/src/txtz.d.ts +13 -0
- package/dist/src/txtz.d.ts.map +1 -0
- package/dist/src/txtz.js +14 -0
- package/dist/src/xtz.d.ts +125 -0
- package/dist/src/xtz.d.ts.map +1 -0
- package/dist/src/xtz.js +409 -0
- package/dist/test/fixtures.d.ts +571 -0
- package/dist/test/fixtures.d.ts.map +1 -0
- package/dist/test/fixtures.js +656 -0
- package/dist/test/resources.d.ts +451 -0
- package/dist/test/resources.d.ts.map +1 -0
- package/dist/test/resources.js +349 -0
- package/dist/test/unit/keyPair.d.ts +2 -0
- package/dist/test/unit/keyPair.d.ts.map +1 -0
- package/dist/test/unit/keyPair.js +142 -0
- package/dist/test/unit/offlineTransactionBuilder.d.ts +2 -0
- package/dist/test/unit/offlineTransactionBuilder.d.ts.map +1 -0
- package/dist/test/unit/offlineTransactionBuilder.js +291 -0
- package/dist/test/unit/transaction.d.ts +2 -0
- package/dist/test/unit/transaction.d.ts.map +1 -0
- package/dist/test/unit/transaction.js +98 -0
- package/dist/test/unit/transactionBuilder.d.ts +2 -0
- package/dist/test/unit/transactionBuilder.d.ts.map +1 -0
- package/dist/test/unit/transactionBuilder.js +656 -0
- package/dist/test/unit/transferBuilder.d.ts +2 -0
- package/dist/test/unit/transferBuilder.d.ts.map +1 -0
- package/dist/test/unit/transferBuilder.js +82 -0
- package/dist/test/unit/util.d.ts +2 -0
- package/dist/test/unit/util.d.ts.map +1 -0
- package/dist/test/unit/util.js +198 -0
- package/dist/test/unit/xtz.d.ts +2 -0
- package/dist/test/unit/xtz.d.ts.map +1 -0
- package/dist/test/unit/xtz.js +192 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +10 -7
- package/.eslintignore +0 -5
- package/.mocharc.yml +0 -8
- package/CHANGELOG.md +0 -784
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { BaseKey, BaseTransaction } from '@bitgo-beta/sdk-core';
|
|
2
|
+
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
3
|
+
import { IndexedSignature, ParsedTransaction } from './iface';
|
|
4
|
+
import { KeyPair } from './keyPair';
|
|
5
|
+
/**
|
|
6
|
+
* Tezos transaction model.
|
|
7
|
+
*/
|
|
8
|
+
export declare class Transaction extends BaseTransaction {
|
|
9
|
+
private _parsedTransaction?;
|
|
10
|
+
private _encodedTransaction?;
|
|
11
|
+
private _source;
|
|
12
|
+
private _delegate?;
|
|
13
|
+
private _forwarderDestination?;
|
|
14
|
+
private _publicKeyToReveal?;
|
|
15
|
+
private _owners;
|
|
16
|
+
/**
|
|
17
|
+
* Public constructor.
|
|
18
|
+
*
|
|
19
|
+
* @param {Readonly<CoinConfig>} coinConfig
|
|
20
|
+
*/
|
|
21
|
+
constructor(coinConfig: Readonly<CoinConfig>);
|
|
22
|
+
/**
|
|
23
|
+
* Initialize the transaction fields based on another serialized transaction.
|
|
24
|
+
*
|
|
25
|
+
* @param serializedTransaction Transaction in broadcast format.
|
|
26
|
+
*/
|
|
27
|
+
initFromSerializedTransaction(serializedTransaction: string): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Initialize the transaction fields based on another parsed transaction.
|
|
30
|
+
*
|
|
31
|
+
* @param {ParsedTransaction} parsedTransaction A Tezos transaction object
|
|
32
|
+
* @param {string} transactionId The transaction id of the parsedTransaction if it is signed
|
|
33
|
+
*/
|
|
34
|
+
initFromParsedTransaction(parsedTransaction: ParsedTransaction, transactionId?: string): Promise<void>;
|
|
35
|
+
/**
|
|
36
|
+
* Record the most important fields from an origination operation.
|
|
37
|
+
*
|
|
38
|
+
* @param {Operation} operation An operation object from a Tezos transaction
|
|
39
|
+
* @param {number} index The origination operation index in the transaction. Used to calculate the
|
|
40
|
+
* originated address
|
|
41
|
+
*/
|
|
42
|
+
private recordOriginationOpFields;
|
|
43
|
+
/**
|
|
44
|
+
* Record the most important fields from a reveal operation.
|
|
45
|
+
*
|
|
46
|
+
* @param {RevealOp} operation A reveal operation object from a Tezos transaction
|
|
47
|
+
*/
|
|
48
|
+
private recordRevealOpFields;
|
|
49
|
+
/**
|
|
50
|
+
* Record the most important fields for a Transaction operation.
|
|
51
|
+
*
|
|
52
|
+
* @param {TransactionOp} operation A transaction object from a Tezos operation
|
|
53
|
+
*/
|
|
54
|
+
private recordTransactionOpFields;
|
|
55
|
+
/**
|
|
56
|
+
* Sign the transaction with the provided key. It does not check if the signer is allowed to sign
|
|
57
|
+
* it or not.
|
|
58
|
+
*
|
|
59
|
+
* @param {KeyPair} keyPair The key to sign the transaction with
|
|
60
|
+
*/
|
|
61
|
+
sign(keyPair: KeyPair): Promise<void>;
|
|
62
|
+
/**
|
|
63
|
+
* Update the list of signatures for a multisig transaction operation.
|
|
64
|
+
*
|
|
65
|
+
* @param {IndexedSignature[]} signatures List of signatures and the index they should be put on
|
|
66
|
+
* in the multisig transfer
|
|
67
|
+
* @param {number} index The transfer index to add the signatures to
|
|
68
|
+
*/
|
|
69
|
+
addTransferSignature(signatures: IndexedSignature[], index: number): Promise<void>;
|
|
70
|
+
/** @inheritdoc */
|
|
71
|
+
canSign(key: BaseKey): boolean;
|
|
72
|
+
/** @inheritdoc */
|
|
73
|
+
toJson(): ParsedTransaction;
|
|
74
|
+
/** @inheritdoc */
|
|
75
|
+
toBroadcastFormat(): string;
|
|
76
|
+
/**
|
|
77
|
+
* Get the transaction source if it is available.
|
|
78
|
+
*
|
|
79
|
+
* @returns {string} Source of the transaction
|
|
80
|
+
*/
|
|
81
|
+
get source(): string;
|
|
82
|
+
/**
|
|
83
|
+
* Get the transaction delegation address if it is available.
|
|
84
|
+
*
|
|
85
|
+
* @returns {string} transaction delegation address
|
|
86
|
+
*/
|
|
87
|
+
get delegate(): string | undefined;
|
|
88
|
+
/**
|
|
89
|
+
* Get the public key revealed by the transaction if it exists
|
|
90
|
+
*
|
|
91
|
+
* @returns {string} public key
|
|
92
|
+
*/
|
|
93
|
+
get publicKeyToReveal(): string | undefined;
|
|
94
|
+
/**
|
|
95
|
+
* Get the destination of an address initialization transaction if it exists
|
|
96
|
+
*
|
|
97
|
+
* @returns {string} forwarder destination
|
|
98
|
+
*/
|
|
99
|
+
get forwarderDestination(): string | undefined;
|
|
100
|
+
get owners(): string[];
|
|
101
|
+
/**
|
|
102
|
+
* Get the signatures for the given multisig transfer,
|
|
103
|
+
*
|
|
104
|
+
* @param {number} transferIndex The transfer script index in the Tezos transaction
|
|
105
|
+
* @returns {IndexedSignature[]} A list of signatures with their index inside the multisig transfer
|
|
106
|
+
* script
|
|
107
|
+
*/
|
|
108
|
+
getTransferSignatures(transferIndex?: number): IndexedSignature[];
|
|
109
|
+
/**
|
|
110
|
+
* Get the list of index per tezos transaction type. This is useful to locate specific operations
|
|
111
|
+
* within the transaction and verify or sign them.
|
|
112
|
+
*
|
|
113
|
+
* @returns {{[p: string]: number[]}} List of indexes where the key is the transaction kind
|
|
114
|
+
*/
|
|
115
|
+
getIndexesByTransactionType(): {
|
|
116
|
+
[kind: string]: number[];
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=transaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../src/lib/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,eAAe,EAIhB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAG7D,OAAO,EAAE,gBAAgB,EAAiB,iBAAiB,EAA2B,MAAM,SAAS,CAAC;AACtG,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC;;GAEG;AACH,qBAAa,WAAY,SAAQ,eAAe;IAC9C,OAAO,CAAC,kBAAkB,CAAC,CAAoB;IAC/C,OAAO,CAAC,mBAAmB,CAAC,CAAS;IACrC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,qBAAqB,CAAC,CAAS;IACvC,OAAO,CAAC,kBAAkB,CAAC,CAAS;IACpC,OAAO,CAAC,OAAO,CAAW;IAE1B;;;;OAIG;gBACS,UAAU,EAAE,QAAQ,CAAC,UAAU,CAAC;IAK5C;;;;OAIG;IACG,6BAA6B,CAAC,qBAAqB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBjF;;;;;OAKG;IACG,yBAAyB,CAAC,iBAAiB,EAAE,iBAAiB,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwC5G;;;;;;OAMG;YACW,yBAAyB;IAwBvC;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAU5B;;;;OAIG;IACH,OAAO,CAAC,yBAAyB;IA6BjC;;;;;OAKG;IACG,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB3C;;;;;;OAMG;IACG,oBAAoB,CAAC,UAAU,EAAE,gBAAgB,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQxF,kBAAkB;IAClB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO;IAK9B,kBAAkB;IAClB,MAAM,IAAI,iBAAiB;IAO3B,kBAAkB;IAClB,iBAAiB,IAAI,MAAM;IAO3B;;;;OAIG;IACH,IAAI,MAAM,IAAI,MAAM,CAKnB;IAED;;;;OAIG;IACH,IAAI,QAAQ,IAAI,MAAM,GAAG,SAAS,CAEjC;IAED;;;;OAIG;IACH,IAAI,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAE1C;IAED;;;;OAIG;IACH,IAAI,oBAAoB,IAAI,MAAM,GAAG,SAAS,CAE7C;IAED,IAAI,MAAM,IAAI,MAAM,EAAE,CAErB;IAED;;;;;;OAMG;IACH,qBAAqB,CAAC,aAAa,SAAI,GAAG,gBAAgB,EAAE;IAO5D;;;;;OAKG;IACH,2BAA2B,IAAI;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;KAAE;CAW5D"}
|
|
@@ -0,0 +1,329 @@
|
|
|
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 () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.Transaction = void 0;
|
|
40
|
+
const sdk_core_1 = require("@bitgo-beta/sdk-core");
|
|
41
|
+
const local_forging_1 = require("@taquito/local-forging");
|
|
42
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
43
|
+
const multisigUtils_1 = require("./multisigUtils");
|
|
44
|
+
const Utils = __importStar(require("./utils"));
|
|
45
|
+
/**
|
|
46
|
+
* Tezos transaction model.
|
|
47
|
+
*/
|
|
48
|
+
class Transaction extends sdk_core_1.BaseTransaction {
|
|
49
|
+
/**
|
|
50
|
+
* Public constructor.
|
|
51
|
+
*
|
|
52
|
+
* @param {Readonly<CoinConfig>} coinConfig
|
|
53
|
+
*/
|
|
54
|
+
constructor(coinConfig) {
|
|
55
|
+
super(coinConfig);
|
|
56
|
+
this._owners = [];
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Initialize the transaction fields based on another serialized transaction.
|
|
60
|
+
*
|
|
61
|
+
* @param serializedTransaction Transaction in broadcast format.
|
|
62
|
+
*/
|
|
63
|
+
async initFromSerializedTransaction(serializedTransaction) {
|
|
64
|
+
this._encodedTransaction = serializedTransaction;
|
|
65
|
+
try {
|
|
66
|
+
const parsedTransaction = await local_forging_1.localForger.parse(serializedTransaction);
|
|
67
|
+
await this.initFromParsedTransaction(parsedTransaction);
|
|
68
|
+
}
|
|
69
|
+
catch (e) {
|
|
70
|
+
// If it throws, it is possible the serialized transaction is signed, which is not supported
|
|
71
|
+
// by local-forging. Try extracting the last 64 bytes and parse it again.
|
|
72
|
+
const unsignedSerializedTransaction = serializedTransaction.slice(0, -128);
|
|
73
|
+
const signature = serializedTransaction.slice(-128);
|
|
74
|
+
if (Utils.isValidSignature(signature)) {
|
|
75
|
+
throw new sdk_core_1.ParseTransactionError('Invalid transaction');
|
|
76
|
+
}
|
|
77
|
+
// TODO: encode the signature and save it in _signature
|
|
78
|
+
const parsedTransaction = await local_forging_1.localForger.parse(unsignedSerializedTransaction);
|
|
79
|
+
const transactionId = await Utils.calculateTransactionId(serializedTransaction);
|
|
80
|
+
await this.initFromParsedTransaction(parsedTransaction, transactionId);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Initialize the transaction fields based on another parsed transaction.
|
|
85
|
+
*
|
|
86
|
+
* @param {ParsedTransaction} parsedTransaction A Tezos transaction object
|
|
87
|
+
* @param {string} transactionId The transaction id of the parsedTransaction if it is signed
|
|
88
|
+
*/
|
|
89
|
+
async initFromParsedTransaction(parsedTransaction, transactionId) {
|
|
90
|
+
if (!this._encodedTransaction) {
|
|
91
|
+
this._encodedTransaction = await local_forging_1.localForger.forge(parsedTransaction);
|
|
92
|
+
}
|
|
93
|
+
if (transactionId) {
|
|
94
|
+
// If the transaction id is passed, save it and clean up the entries since they will be
|
|
95
|
+
// recalculated
|
|
96
|
+
this._id = transactionId;
|
|
97
|
+
this._inputs = [];
|
|
98
|
+
this._outputs = [];
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
this._id = '';
|
|
102
|
+
}
|
|
103
|
+
this._parsedTransaction = parsedTransaction;
|
|
104
|
+
let operationIndex = 0;
|
|
105
|
+
for (const operation of parsedTransaction.contents) {
|
|
106
|
+
if (this._source && this._source !== operation.source) {
|
|
107
|
+
throw new sdk_core_1.InvalidTransactionError('Source must be the same for every operation but it changed from ' + this._source + ' to ' + operation.source);
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
this._source = operation.source;
|
|
111
|
+
}
|
|
112
|
+
switch (operation.kind) {
|
|
113
|
+
case local_forging_1.CODEC.OP_ORIGINATION:
|
|
114
|
+
await this.recordOriginationOpFields(operation, operationIndex);
|
|
115
|
+
operationIndex++;
|
|
116
|
+
break;
|
|
117
|
+
case local_forging_1.CODEC.OP_REVEAL:
|
|
118
|
+
this.recordRevealOpFields(operation);
|
|
119
|
+
break;
|
|
120
|
+
case local_forging_1.CODEC.OP_TRANSACTION:
|
|
121
|
+
this.recordTransactionOpFields(operation);
|
|
122
|
+
break;
|
|
123
|
+
default:
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Record the most important fields from an origination operation.
|
|
130
|
+
*
|
|
131
|
+
* @param {Operation} operation An operation object from a Tezos transaction
|
|
132
|
+
* @param {number} index The origination operation index in the transaction. Used to calculate the
|
|
133
|
+
* originated address
|
|
134
|
+
*/
|
|
135
|
+
async recordOriginationOpFields(operation, index) {
|
|
136
|
+
const originationData = (0, multisigUtils_1.getOriginationDataFromOperation)(operation);
|
|
137
|
+
if (originationData.forwarderDestination) {
|
|
138
|
+
this._type = sdk_core_1.TransactionType.AddressInitialization;
|
|
139
|
+
this._forwarderDestination = originationData.forwarderDestination;
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
this._type = sdk_core_1.TransactionType.WalletInitialization;
|
|
143
|
+
this._owners = (0, multisigUtils_1.getOwnersPublicKeys)(operation);
|
|
144
|
+
}
|
|
145
|
+
this._delegate = operation.delegate;
|
|
146
|
+
this._outputs.push({
|
|
147
|
+
// Kt addresses can only be calculated for signed transactions with an id
|
|
148
|
+
address: this._id ? await Utils.calculateOriginatedAddress(this._id, index) : '',
|
|
149
|
+
// Balance
|
|
150
|
+
value: operation.balance,
|
|
151
|
+
});
|
|
152
|
+
this._inputs.push({
|
|
153
|
+
address: operation.source,
|
|
154
|
+
// Balance + fees + max gas + max storage are paid by the source account
|
|
155
|
+
value: new bignumber_js_1.default(operation.balance).plus(operation.fee).toString(),
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Record the most important fields from a reveal operation.
|
|
160
|
+
*
|
|
161
|
+
* @param {RevealOp} operation A reveal operation object from a Tezos transaction
|
|
162
|
+
*/
|
|
163
|
+
recordRevealOpFields(operation) {
|
|
164
|
+
this._type = sdk_core_1.TransactionType.AccountUpdate;
|
|
165
|
+
this._publicKeyToReveal = operation.public_key;
|
|
166
|
+
this._inputs.push({
|
|
167
|
+
address: operation.source,
|
|
168
|
+
// Balance + fees + max gas + max storage are paid by the source account
|
|
169
|
+
value: operation.fee,
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Record the most important fields for a Transaction operation.
|
|
174
|
+
*
|
|
175
|
+
* @param {TransactionOp} operation A transaction object from a Tezos operation
|
|
176
|
+
*/
|
|
177
|
+
recordTransactionOpFields(operation) {
|
|
178
|
+
if (operation.parameters) {
|
|
179
|
+
this._type = sdk_core_1.TransactionType.Send;
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
this._type = sdk_core_1.TransactionType.SingleSigSend;
|
|
183
|
+
}
|
|
184
|
+
const transferData = (0, multisigUtils_1.getMultisigTransferDataFromOperation)(operation);
|
|
185
|
+
// Fees are paid by the source account, along with the amount in the transaction
|
|
186
|
+
this._inputs.push({
|
|
187
|
+
address: operation.source,
|
|
188
|
+
value: new bignumber_js_1.default(transferData.fee.fee).toFixed(0),
|
|
189
|
+
});
|
|
190
|
+
if (transferData.coin === 'mutez') {
|
|
191
|
+
this._outputs.push({
|
|
192
|
+
// Kt addresses can only be calculated for signed transactions with an id
|
|
193
|
+
address: transferData.to,
|
|
194
|
+
// Balance
|
|
195
|
+
value: transferData.amount,
|
|
196
|
+
});
|
|
197
|
+
// The funds being transferred from the wallet
|
|
198
|
+
this._inputs.push({
|
|
199
|
+
address: transferData.from,
|
|
200
|
+
// Balance + fees + max gas + max storage are paid by the source account
|
|
201
|
+
value: transferData.amount,
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Sign the transaction with the provided key. It does not check if the signer is allowed to sign
|
|
207
|
+
* it or not.
|
|
208
|
+
*
|
|
209
|
+
* @param {KeyPair} keyPair The key to sign the transaction with
|
|
210
|
+
*/
|
|
211
|
+
async sign(keyPair) {
|
|
212
|
+
// TODO: fail if the transaction is already signed
|
|
213
|
+
// Check if there is a transaction to sign
|
|
214
|
+
if (!this._parsedTransaction) {
|
|
215
|
+
throw new sdk_core_1.InvalidTransactionError('Empty transaction');
|
|
216
|
+
}
|
|
217
|
+
// Get the transaction body to sign
|
|
218
|
+
const encodedTransaction = await local_forging_1.localForger.forge(this._parsedTransaction);
|
|
219
|
+
const signedTransaction = await Utils.sign(keyPair, encodedTransaction);
|
|
220
|
+
this._encodedTransaction = signedTransaction.sbytes;
|
|
221
|
+
// The transaction id can only be calculated for signed transactions
|
|
222
|
+
this._id = await Utils.calculateTransactionId(this._encodedTransaction);
|
|
223
|
+
await this.initFromParsedTransaction(this._parsedTransaction, this._id);
|
|
224
|
+
this._signatures.push(signedTransaction.sig);
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Update the list of signatures for a multisig transaction operation.
|
|
228
|
+
*
|
|
229
|
+
* @param {IndexedSignature[]} signatures List of signatures and the index they should be put on
|
|
230
|
+
* in the multisig transfer
|
|
231
|
+
* @param {number} index The transfer index to add the signatures to
|
|
232
|
+
*/
|
|
233
|
+
async addTransferSignature(signatures, index) {
|
|
234
|
+
if (!this._parsedTransaction) {
|
|
235
|
+
throw new sdk_core_1.InvalidTransactionError('Empty transaction');
|
|
236
|
+
}
|
|
237
|
+
(0, multisigUtils_1.updateMultisigTransferSignatures)(this._parsedTransaction.contents[index], signatures);
|
|
238
|
+
this._encodedTransaction = await local_forging_1.localForger.forge(this._parsedTransaction);
|
|
239
|
+
}
|
|
240
|
+
/** @inheritdoc */
|
|
241
|
+
canSign(key) {
|
|
242
|
+
// TODO: check the key belongs to the _source account in _parsedTransaction
|
|
243
|
+
return true;
|
|
244
|
+
}
|
|
245
|
+
/** @inheritdoc */
|
|
246
|
+
toJson() {
|
|
247
|
+
if (!this._parsedTransaction) {
|
|
248
|
+
throw new sdk_core_1.InvalidTransactionError('Empty transaction');
|
|
249
|
+
}
|
|
250
|
+
return this._parsedTransaction;
|
|
251
|
+
}
|
|
252
|
+
/** @inheritdoc */
|
|
253
|
+
toBroadcastFormat() {
|
|
254
|
+
if (!this._encodedTransaction) {
|
|
255
|
+
throw new sdk_core_1.InvalidTransactionError('Missing encoded transaction');
|
|
256
|
+
}
|
|
257
|
+
return this._encodedTransaction;
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Get the transaction source if it is available.
|
|
261
|
+
*
|
|
262
|
+
* @returns {string} Source of the transaction
|
|
263
|
+
*/
|
|
264
|
+
get source() {
|
|
265
|
+
if (!this._source) {
|
|
266
|
+
throw new sdk_core_1.InvalidTransactionError('Transaction not initialized');
|
|
267
|
+
}
|
|
268
|
+
return this._source;
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Get the transaction delegation address if it is available.
|
|
272
|
+
*
|
|
273
|
+
* @returns {string} transaction delegation address
|
|
274
|
+
*/
|
|
275
|
+
get delegate() {
|
|
276
|
+
return this._delegate;
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Get the public key revealed by the transaction if it exists
|
|
280
|
+
*
|
|
281
|
+
* @returns {string} public key
|
|
282
|
+
*/
|
|
283
|
+
get publicKeyToReveal() {
|
|
284
|
+
return this._publicKeyToReveal;
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Get the destination of an address initialization transaction if it exists
|
|
288
|
+
*
|
|
289
|
+
* @returns {string} forwarder destination
|
|
290
|
+
*/
|
|
291
|
+
get forwarderDestination() {
|
|
292
|
+
return this._forwarderDestination;
|
|
293
|
+
}
|
|
294
|
+
get owners() {
|
|
295
|
+
return this._owners;
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Get the signatures for the given multisig transfer,
|
|
299
|
+
*
|
|
300
|
+
* @param {number} transferIndex The transfer script index in the Tezos transaction
|
|
301
|
+
* @returns {IndexedSignature[]} A list of signatures with their index inside the multisig transfer
|
|
302
|
+
* script
|
|
303
|
+
*/
|
|
304
|
+
getTransferSignatures(transferIndex = 0) {
|
|
305
|
+
if (!this._parsedTransaction) {
|
|
306
|
+
return [];
|
|
307
|
+
}
|
|
308
|
+
return (0, multisigUtils_1.getMultisigTransferSignatures)(this._parsedTransaction.contents[transferIndex]);
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Get the list of index per tezos transaction type. This is useful to locate specific operations
|
|
312
|
+
* within the transaction and verify or sign them.
|
|
313
|
+
*
|
|
314
|
+
* @returns {{[p: string]: number[]}} List of indexes where the key is the transaction kind
|
|
315
|
+
*/
|
|
316
|
+
getIndexesByTransactionType() {
|
|
317
|
+
if (!this._parsedTransaction) {
|
|
318
|
+
return {};
|
|
319
|
+
}
|
|
320
|
+
const indexes = {};
|
|
321
|
+
for (let i = 0; i < this._parsedTransaction.contents.length; i++) {
|
|
322
|
+
const kind = this._parsedTransaction.contents[i].kind;
|
|
323
|
+
indexes[kind] = indexes[kind] ? indexes[kind].concat([i]) : [i];
|
|
324
|
+
}
|
|
325
|
+
return indexes;
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
exports.Transaction = Transaction;
|
|
329
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3RyYW5zYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG1EQU04QjtBQUU5QiwwREFBNEQ7QUFDNUQsZ0VBQXFDO0FBR3JDLG1EQU15QjtBQUN6QiwrQ0FBaUM7QUFFakM7O0dBRUc7QUFDSCxNQUFhLFdBQVksU0FBUSwwQkFBZTtJQVM5Qzs7OztPQUlHO0lBQ0gsWUFBWSxVQUFnQztRQUMxQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDbEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsNkJBQTZCLENBQUMscUJBQTZCO1FBQy9ELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxxQkFBcUIsQ0FBQztRQUNqRCxJQUFJLENBQUM7WUFDSCxNQUFNLGlCQUFpQixHQUFHLE1BQU0sMkJBQVcsQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUN6RSxNQUFNLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzFELENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsNEZBQTRGO1lBQzVGLHlFQUF5RTtZQUN6RSxNQUFNLDZCQUE2QixHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMzRSxNQUFNLFNBQVMsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwRCxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO2dCQUN0QyxNQUFNLElBQUksZ0NBQXFCLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUN6RCxDQUFDO1lB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QztRQUNaLENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDbkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDakUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDdEQsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEUsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7Q0FDRjtBQWxURCxrQ0FrVEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBCYXNlS2V5LFxuICBCYXNlVHJhbnNhY3Rpb24sXG4gIEludmFsaWRUcmFuc2FjdGlvbkVycm9yLFxuICBQYXJzZVRyYW5zYWN0aW9uRXJyb3IsXG4gIFRyYW5zYWN0aW9uVHlwZSxcbn0gZnJvbSAnQGJpdGdvLWJldGEvc2RrLWNvcmUnO1xuaW1wb3J0IHsgQmFzZUNvaW4gYXMgQ29pbkNvbmZpZyB9IGZyb20gJ0BiaXRnby1iZXRhL3N0YXRpY3MnO1xuaW1wb3J0IHsgQ09ERUMsIGxvY2FsRm9yZ2VyIH0gZnJvbSAnQHRhcXVpdG8vbG9jYWwtZm9yZ2luZyc7XG5pbXBvcnQgQmlnTnVtYmVyIGZyb20gJ2JpZ251bWJlci5qcyc7XG5pbXBvcnQgeyBJbmRleGVkU2lnbmF0dXJlLCBPcmlnaW5hdGlvbk9wLCBQYXJzZWRUcmFuc2FjdGlvbiwgUmV2ZWFsT3AsIFRyYW5zYWN0aW9uT3AgfSBmcm9tICcuL2lmYWNlJztcbmltcG9ydCB7IEtleVBhaXIgfSBmcm9tICcuL2tleVBhaXInO1xuaW1wb3J0IHtcbiAgZ2V0TXVsdGlzaWdUcmFuc2ZlckRhdGFGcm9tT3BlcmF0aW9uLFxuICBnZXRNdWx0aXNpZ1RyYW5zZmVyU2lnbmF0dXJlcyxcbiAgZ2V0T3JpZ2luYXRpb25EYXRhRnJvbU9wZXJhdGlvbixcbiAgZ2V0T3duZXJzUHVibGljS2V5cyxcbiAgdXBkYXRlTXVsdGlzaWdUcmFuc2ZlclNpZ25hdHVyZXMsXG59IGZyb20gJy4vbXVsdGlzaWdVdGlscyc7XG5pbXBvcnQgKiBhcyBVdGlscyBmcm9tICcuL3V0aWxzJztcblxuLyoqXG4gKiBUZXpvcyB0cmFuc2FjdGlvbiBtb2RlbC5cbiAqL1xuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uIGV4dGVuZHMgQmFzZVRyYW5zYWN0aW9uIHtcbiAgcHJpdmF0ZSBfcGFyc2VkVHJhbnNhY3Rpb24/OiBQYXJzZWRUcmFuc2FjdGlvbjsgLy8gdHJhbnNhY3Rpb24gaW4gSlNPTiBmb3JtYXRcbiAgcHJpdmF0ZSBfZW5jb2RlZFRyYW5zYWN0aW9uPzogc3RyaW5nOyAvLyB0cmFuc2FjdGlvbiBpbiBoZXggZm9ybWF0XG4gIHByaXZhdGUgX3NvdXJjZTogc3RyaW5nO1xuICBwcml2YXRlIF9kZWxlZ2F0ZT86IHN0cmluZztcbiAgcHJpdmF0ZSBfZm9yd2FyZGVyRGVzdGluYXRpb24/OiBzdHJpbmc7XG4gIHByaXZhdGUgX3B1YmxpY0tleVRvUmV2ZWFsPzogc3RyaW5nO1xuICBwcml2YXRlIF9vd25lcnM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBQdWJsaWMgY29uc3RydWN0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhZG9ubHk8Q29pbkNvbmZpZz59IGNvaW5Db25maWdcbiAgICovXG4gIGNvbnN0cnVjdG9yKGNvaW5Db25maWc6IFJlYWRvbmx5PENvaW5Db25maWc+KSB7XG4gICAgc3VwZXIoY29pbkNvbmZpZyk7XG4gICAgdGhpcy5fb3duZXJzID0gW107XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgdHJhbnNhY3Rpb24gZmllbGRzIGJhc2VkIG9uIGFub3RoZXIgc2VyaWFsaXplZCB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHNlcmlhbGl6ZWRUcmFuc2FjdGlvbiBUcmFuc2FjdGlvbiBpbiBicm9hZGNhc3QgZm9ybWF0LlxuICAgKi9cbiAgYXN5bmMgaW5pdEZyb21TZXJpYWxpemVkVHJhbnNhY3Rpb24oc2VyaWFsaXplZFRyYW5zYWN0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLl9lbmNvZGVkVHJhbnNhY3Rpb24gPSBzZXJpYWxpemVkVHJhbnNhY3Rpb247XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhcnNlZFRyYW5zYWN0aW9uID0gYXdhaXQgbG9jYWxGb3JnZXIucGFyc2Uoc2VyaWFsaXplZFRyYW5zYWN0aW9uKTtcbiAgICAgIGF3YWl0IHRoaXMuaW5pdEZyb21QYXJzZWRUcmFuc2FjdGlvbihwYXJzZWRUcmFuc2FjdGlvbik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gSWYgaXQgdGhyb3dzLCBpdCBpcyBwb3NzaWJsZSB0aGUgc2VyaWFsaXplZCB0cmFuc2FjdGlvbiBpcyBzaWduZWQsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWRcbiAgICAgIC8vIGJ5IGxvY2FsLWZvcmdpbmcuIFRyeSBleHRyYWN0aW5nIHRoZSBsYXN0IDY0IGJ5dGVzIGFuZCBwYXJzZSBpdCBhZ2Fpbi5cbiAgICAgIGNvbnN0IHVuc2lnbmVkU2VyaWFsaXplZFRyYW5zYWN0aW9uID0gc2VyaWFsaXplZFRyYW5zYWN0aW9uLnNsaWNlKDAsIC0xMjgpO1xuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gc2VyaWFsaXplZFRyYW5zYWN0aW9uLnNsaWNlKC0xMjgpO1xuICAgICAgaWYgKFV0aWxzLmlzVmFsaWRTaWduYXR1cmUoc2lnbmF0dXJlKSkge1xuICAgICAgICB0aHJvdyBuZXcgUGFyc2VUcmFuc2FjdGlvbkVycm9yKCdJbnZhbGlkIHRyYW5zYWN0aW9uJyk7XG4gICAgICB9XG4gICAgICAvLyBUT0RPOiBlbmNvZGUgdGhlIHNpZ25hdHVyZSBhbmQgc2F2ZSBpdCBpbiBfc2lnbmF0dXJlXG4gICAgICBjb25zdCBwYXJzZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGxvY2FsRm9yZ2VyLnBhcnNlKHVuc2lnbmVkU2VyaWFsaXplZFRyYW5zYWN0aW9uKTtcbiAgICAgIGNvbnN0IHRyYW5zYWN0aW9uSWQgPSBhd2FpdCBVdGlscy5jYWxjdWxhdGVUcmFuc2FjdGlvbklkKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbik7XG4gICAgICBhd2FpdCB0aGlzLmluaXRGcm9tUGFyc2VkVHJhbnNhY3Rpb24ocGFyc2VkVHJhbnNhY3Rpb24sIHRyYW5zYWN0aW9uSWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSB0cmFuc2FjdGlvbiBmaWVsZHMgYmFzZWQgb24gYW5vdGhlciBwYXJzZWQgdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7UGFyc2VkVHJhbnNhY3Rpb259IHBhcnNlZFRyYW5zYWN0aW9uIEEgVGV6b3MgdHJhbnNhY3Rpb24gb2JqZWN0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0cmFuc2FjdGlvbklkIFRoZSB0cmFuc2FjdGlvbiBpZCBvZiB0aGUgcGFyc2VkVHJhbnNhY3Rpb24gaWYgaXQgaXMgc2lnbmVkXG4gICAqL1xuICBhc3luYyBpbml0RnJvbVBhcnNlZFRyYW5zYWN0aW9uKHBhcnNlZFRyYW5zYWN0aW9uOiBQYXJzZWRUcmFuc2FjdGlvbiwgdHJhbnNhY3Rpb25JZD86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5fZW5jb2RlZFRyYW5zYWN0aW9uKSB7XG4gICAgICB0aGlzLl9lbmNvZGVkVHJhbnNhY3Rpb24gPSBhd2FpdCBsb2NhbEZvcmdlci5mb3JnZShwYXJzZWRUcmFuc2FjdGlvbik7XG4gICAgfVxuICAgIGlmICh0cmFuc2FjdGlvbklkKSB7XG4gICAgICAvLyBJZiB0aGUgdHJhbnNhY3Rpb24gaWQgaXMgcGFzc2VkLCBzYXZlIGl0IGFuZCBjbGVhbiB1cCB0aGUgZW50cmllcyBzaW5jZSB0aGV5IHdpbGwgYmVcbiAgICAgIC8vIHJlY2FsY3VsYXRlZFxuICAgICAgdGhpcy5faWQgPSB0cmFuc2FjdGlvbklkO1xuICAgICAgdGhpcy5faW5wdXRzID0gW107XG4gICAgICB0aGlzLl9vdXRwdXRzID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2lkID0gJyc7XG4gICAgfVxuICAgIHRoaXMuX3BhcnNlZFRyYW5zYWN0aW9uID0gcGFyc2VkVHJhbnNhY3Rpb247XG4gICAgbGV0IG9wZXJhdGlvbkluZGV4ID0gMDtcbiAgICBmb3IgKGNvbnN0IG9wZXJhdGlvbiBvZiBwYXJzZWRUcmFuc2FjdGlvbi5jb250ZW50cykge1xuICAgICAgaWYgKHRoaXMuX3NvdXJjZSAmJiB0aGlzLl9zb3VyY2UgIT09IG9wZXJhdGlvbi5zb3VyY2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKFxuICAgICAgICAgICdTb3VyY2UgbXVzdCBiZSB0aGUgc2FtZSBmb3IgZXZlcnkgb3BlcmF0aW9uIGJ1dCBpdCBjaGFuZ2VkIGZyb20gJyArIHRoaXMuX3NvdXJjZSArICcgdG8gJyArIG9wZXJhdGlvbi5zb3VyY2VcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3NvdXJjZSA9IG9wZXJhdGlvbi5zb3VyY2U7XG4gICAgICB9XG4gICAgICBzd2l0Y2ggKG9wZXJhdGlvbi5raW5kKSB7XG4gICAgICAgIGNhc2UgQ09ERUMuT1BfT1JJR0lOQVRJT046XG4gICAgICAgICAgYXdhaXQgdGhpcy5yZWNvcmRPcmlnaW5hdGlvbk9wRmllbGRzKG9wZXJhdGlvbiBhcyBPcmlnaW5hdGlvbk9wLCBvcGVyYXRpb25JbmRleCk7XG4gICAgICAgICAgb3BlcmF0aW9uSW5kZXgrKztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBDT0RFQy5PUF9SRVZFQUw6XG4gICAgICAgICAgdGhpcy5yZWNvcmRSZXZlYWxPcEZpZWxkcyhvcGVyYXRpb24gYXMgUmV2ZWFsT3ApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIENPREVDLk9QX1RSQU5TQUNUSU9OOlxuICAgICAgICAgIHRoaXMucmVjb3JkVHJhbnNhY3Rpb25PcEZpZWxkcyhvcGVyYXRpb24gYXMgVHJhbnNhY3Rpb25PcCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlY29yZCB0aGUgbW9zdCBpbXBvcnRhbnQgZmllbGRzIGZyb20gYW4gb3JpZ2luYXRpb24gb3BlcmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge09wZXJhdGlvbn0gb3BlcmF0aW9uIEFuIG9wZXJhdGlvbiBvYmplY3QgZnJvbSBhIFRlem9zIHRyYW5zYWN0aW9uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBUaGUgb3JpZ2luYXRpb24gb3BlcmF0aW9uIGluZGV4IGluIHRoZSB0cmFuc2FjdGlvbi4gVXNlZCB0byBjYWxjdWxhdGUgdGhlXG4gICAqICAgICAgb3JpZ2luYXRlZCBhZGRyZXNzXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJlY29yZE9yaWdpbmF0aW9uT3BGaWVsZHMob3BlcmF0aW9uOiBPcmlnaW5hdGlvbk9wLCBpbmRleDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgb3JpZ2luYXRpb25EYXRhID0gZ2V0T3JpZ2luYXRpb25EYXRhRnJvbU9wZXJhdGlvbihvcGVyYXRpb24pO1xuICAgIGlmIChvcmlnaW5hdGlvbkRhdGEuZm9yd2FyZGVyRGVzdGluYXRpb24pIHtcbiAgICAgIHRoaXMuX3R5cGUgPSBUcmFuc2FjdGlvblR5cGUuQWRkcmVzc0luaXRpYWxpemF0aW9uO1xuICAgICAgdGhpcy5fZm9yd2FyZGVyRGVzdGluYXRpb24gPSBvcmlnaW5hdGlvbkRhdGEuZm9yd2FyZGVyRGVzdGluYXRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3R5cGUgPSBUcmFuc2FjdGlvblR5cGUuV2FsbGV0SW5pdGlhbGl6YXRpb247XG4gICAgICB0aGlzLl9vd25lcnMgPSBnZXRPd25lcnNQdWJsaWNLZXlzKG9wZXJhdGlvbik7XG4gICAgfVxuXG4gICAgdGhpcy5fZGVsZWdhdGUgPSBvcGVyYXRpb24uZGVsZWdhdGU7XG4gICAgdGhpcy5fb3V0cHV0cy5wdXNoKHtcbiAgICAgIC8vIEt0IGFkZHJlc3NlcyBjYW4gb25seSBiZSBjYWxjdWxhdGVkIGZvciBzaWduZWQgdHJhbnNhY3Rpb25zIHdpdGggYW4gaWRcbiAgICAgIGFkZHJlc3M6IHRoaXMuX2lkID8gYXdhaXQgVXRpbHMuY2FsY3VsYXRlT3JpZ2luYXRlZEFkZHJlc3ModGhpcy5faWQsIGluZGV4KSA6ICcnLFxuICAgICAgLy8gQmFsYW5jZVxuICAgICAgdmFsdWU6IG9wZXJhdGlvbi5iYWxhbmNlLFxuICAgIH0pO1xuICAgIHRoaXMuX2lucHV0cy5wdXNoKHtcbiAgICAgIGFkZHJlc3M6IG9wZXJhdGlvbi5zb3VyY2UsXG4gICAgICAvLyBCYWxhbmNlICsgZmVlcyArIG1heCBnYXMgKyBtYXggc3RvcmFnZSBhcmUgcGFpZCBieSB0aGUgc291cmNlIGFjY291bnRcbiAgICAgIHZhbHVlOiBuZXcgQmlnTnVtYmVyKG9wZXJhdGlvbi5iYWxhbmNlKS5wbHVzKG9wZXJhdGlvbi5mZWUpLnRvU3RyaW5nKCksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVjb3JkIHRoZSBtb3N0IGltcG9ydGFudCBmaWVsZHMgZnJvbSBhIHJldmVhbCBvcGVyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7UmV2ZWFsT3B9IG9wZXJhdGlvbiBBIHJldmVhbCBvcGVyYXRpb24gb2JqZWN0IGZyb20gYSBUZXpvcyB0cmFuc2FjdGlvblxuICAgKi9cbiAgcHJpdmF0ZSByZWNvcmRSZXZlYWxPcEZpZWxkcyhvcGVyYXRpb246IFJldmVhbE9wKTogdm9pZCB7XG4gICAgdGhpcy5fdHlwZSA9IFRyYW5zYWN0aW9uVHlwZS5BY2NvdW50VXBkYXRlO1xuICAgIHRoaXMuX3B1YmxpY0tleVRvUmV2ZWFsID0gb3BlcmF0aW9uLnB1YmxpY19rZXk7XG4gICAgdGhpcy5faW5wdXRzLnB1c2goe1xuICAgICAgYWRkcmVzczogb3BlcmF0aW9uLnNvdXJjZSxcbiAgICAgIC8vIEJhbGFuY2UgKyBmZWVzICsgbWF4IGdhcyArIG1heCBzdG9yYWdlIGFyZSBwYWlkIGJ5IHRoZSBzb3VyY2UgYWNjb3VudFxuICAgICAgdmFsdWU6IG9wZXJhdGlvbi5mZWUsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVjb3JkIHRoZSBtb3N0IGltcG9ydGFudCBmaWVsZHMgZm9yIGEgVHJhbnNhY3Rpb24gb3BlcmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge1RyYW5zYWN0aW9uT3B9IG9wZXJhdGlvbiBBIHRyYW5zYWN0aW9uIG9iamVjdCBmcm9tIGEgVGV6b3Mgb3BlcmF0aW9uXG4gICAqL1xuICBwcml2YXRlIHJlY29yZFRyYW5zYWN0aW9uT3BGaWVsZHMob3BlcmF0aW9uOiBUcmFuc2FjdGlvbk9wKTogdm9pZCB7XG4gICAgaWYgKG9wZXJhdGlvbi5wYXJhbWV0ZXJzKSB7XG4gICAgICB0aGlzLl90eXBlID0gVHJhbnNhY3Rpb25UeXBlLlNlbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3R5cGUgPSBUcmFuc2FjdGlvblR5cGUuU2luZ2xlU2lnU2VuZDtcbiAgICB9XG4gICAgY29uc3QgdHJhbnNmZXJEYXRhID0gZ2V0TXVsdGlzaWdUcmFuc2ZlckRhdGFGcm9tT3BlcmF0aW9uKG9wZXJhdGlvbik7XG4gICAgLy8gRmVlcyBhcmUgcGFpZCBieSB0aGUgc291cmNlIGFjY291bnQsIGFsb25nIHdpdGggdGhlIGFtb3VudCBpbiB0aGUgdHJhbnNhY3Rpb25cbiAgICB0aGlzLl9pbnB1dHMucHVzaCh7XG4gICAgICBhZGRyZXNzOiBvcGVyYXRpb24uc291cmNlLFxuICAgICAgdmFsdWU6IG5ldyBCaWdOdW1iZXIodHJhbnNmZXJEYXRhLmZlZS5mZWUpLnRvRml4ZWQoMCksXG4gICAgfSk7XG5cbiAgICBpZiAodHJhbnNmZXJEYXRhLmNvaW4gPT09ICdtdXRleicpIHtcbiAgICAgIHRoaXMuX291dHB1dHMucHVzaCh7XG4gICAgICAgIC8vIEt0IGFkZHJlc3NlcyBjYW4gb25seSBiZSBjYWxjdWxhdGVkIGZvciBzaWduZWQgdHJhbnNhY3Rpb25zIHdpdGggYW4gaWRcbiAgICAgICAgYWRkcmVzczogdHJhbnNmZXJEYXRhLnRvLFxuICAgICAgICAvLyBCYWxhbmNlXG4gICAgICAgIHZhbHVlOiB0cmFuc2ZlckRhdGEuYW1vdW50LFxuICAgICAgfSk7XG4gICAgICAvLyBUaGUgZnVuZHMgYmVpbmcgdHJhbnNmZXJyZWQgZnJvbSB0aGUgd2FsbGV0XG4gICAgICB0aGlzLl9pbnB1dHMucHVzaCh7XG4gICAgICAgIGFkZHJlc3M6IHRyYW5zZmVyRGF0YS5mcm9tLFxuICAgICAgICAvLyBCYWxhbmNlICsgZmVlcyArIG1heCBnYXMgKyBtYXggc3RvcmFnZSBhcmUgcGFpZCBieSB0aGUgc291cmNlIGFjY291bnRcbiAgICAgICAgdmFsdWU6IHRyYW5zZmVyRGF0YS5hbW91bnQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2lnbiB0aGUgdHJhbnNhY3Rpb24gd2l0aCB0aGUgcHJvdmlkZWQga2V5LiBJdCBkb2VzIG5vdCBjaGVjayBpZiB0aGUgc2lnbmVyIGlzIGFsbG93ZWQgdG8gc2lnblxuICAgKiBpdCBvciBub3QuXG4gICAqXG4gICAqIEBwYXJhbSB7S2V5UGFpcn0ga2V5UGFpciBUaGUga2V5IHRvIHNpZ24gdGhlIHRyYW5zYWN0aW9uIHdpdGhcbiAgICovXG4gIGFzeW5jIHNpZ24oa2V5UGFpcjogS2V5UGFpcik6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFRPRE86IGZhaWwgaWYgdGhlIHRyYW5zYWN0aW9uIGlzIGFscmVhZHkgc2lnbmVkXG4gICAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgYSB0cmFuc2FjdGlvbiB0byBzaWduXG4gICAgaWYgKCF0aGlzLl9wYXJzZWRUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICAvLyBHZXQgdGhlIHRyYW5zYWN0aW9uIGJvZHkgdG8gc2lnblxuICAgIGNvbnN0IGVuY29kZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGxvY2FsRm9yZ2VyLmZvcmdlKHRoaXMuX3BhcnNlZFRyYW5zYWN0aW9uKTtcblxuICAgIGNvbnN0IHNpZ25lZFRyYW5zYWN0aW9uID0gYXdhaXQgVXRpbHMuc2lnbihrZXlQYWlyLCBlbmNvZGVkVHJhbnNhY3Rpb24pO1xuICAgIHRoaXMuX2VuY29kZWRUcmFuc2FjdGlvbiA9IHNpZ25lZFRyYW5zYWN0aW9uLnNieXRlcztcblxuICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBpZCBjYW4gb25seSBiZSBjYWxjdWxhdGVkIGZvciBzaWduZWQgdHJhbnNhY3Rpb25zXG4gICAgdGhpcy5faWQgPSBhd2FpdCBVdGlscy5jYWxjdWxhdGVUcmFuc2FjdGlvbklkKHRoaXMuX2VuY29kZWRUcmFuc2FjdGlvbik7XG4gICAgYXdhaXQgdGhpcy5pbml0RnJvbVBhcnNlZFRyYW5zYWN0aW9uKHRoaXMuX3BhcnNlZFRyYW5zYWN0aW9uLCB0aGlzLl9pZCk7XG5cbiAgICB0aGlzLl9zaWduYXR1cmVzLnB1c2goc2lnbmVkVHJhbnNhY3Rpb24uc2lnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIGxpc3Qgb2Ygc2lnbmF0dXJlcyBmb3IgYSBtdWx0aXNpZyB0cmFuc2FjdGlvbiBvcGVyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7SW5kZXhlZFNpZ25hdHVyZVtdfSBzaWduYXR1cmVzIExpc3Qgb2Ygc2lnbmF0dXJlcyBhbmQgdGhlIGluZGV4IHRoZXkgc2hvdWxkIGJlIHB1dCBvblxuICAgKiAgICBpbiB0aGUgbXVsdGlzaWcgdHJhbnNmZXJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IFRoZSB0cmFuc2ZlciBpbmRleCB0byBhZGQgdGhlIHNpZ25hdHVyZXMgdG9cbiAgICovXG4gIGFzeW5jIGFkZFRyYW5zZmVyU2lnbmF0dXJlKHNpZ25hdHVyZXM6IEluZGV4ZWRTaWduYXR1cmVbXSwgaW5kZXg6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5fcGFyc2VkVHJhbnNhY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVHJhbnNhY3Rpb25FcnJvcignRW1wdHkgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgdXBkYXRlTXVsdGlzaWdUcmFuc2ZlclNpZ25hdHVyZXModGhpcy5fcGFyc2VkVHJhbnNhY3Rpb24uY29udGVudHNbaW5kZXhdIGFzIFRyYW5zYWN0aW9uT3AsIHNpZ25hdHVyZXMpO1xuICAgIHRoaXMuX2VuY29kZWRUcmFuc2FjdGlvbiA9IGF3YWl0IGxvY2FsRm9yZ2VyLmZvcmdlKHRoaXMuX3BhcnNlZFRyYW5zYWN0aW9uKTtcbiAgfVxuXG4gIC8qKiBAaW5oZXJpdGRvYyAqL1xuICBjYW5TaWduKGtleTogQmFzZUtleSk6IGJvb2xlYW4ge1xuICAgIC8vIFRPRE86IGNoZWNrIHRoZSBrZXkgYmVsb25ncyB0byB0aGUgX3NvdXJjZSBhY2NvdW50IGluIF9wYXJzZWRUcmFuc2FjdGlvblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqIEBpbmhlcml0ZG9jICovXG4gIHRvSnNvbigpOiBQYXJzZWRUcmFuc2FjdGlvbiB7XG4gICAgaWYgKCF0aGlzLl9wYXJzZWRUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdFbXB0eSB0cmFuc2FjdGlvbicpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcGFyc2VkVHJhbnNhY3Rpb247XG4gIH1cblxuICAvKiogQGluaGVyaXRkb2MgKi9cbiAgdG9Ccm9hZGNhc3RGb3JtYXQoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuX2VuY29kZWRUcmFuc2FjdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdNaXNzaW5nIGVuY29kZWQgdHJhbnNhY3Rpb24nKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2VuY29kZWRUcmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHRyYW5zYWN0aW9uIHNvdXJjZSBpZiBpdCBpcyBhdmFpbGFibGUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFNvdXJjZSBvZiB0aGUgdHJhbnNhY3Rpb25cbiAgICovXG4gIGdldCBzb3VyY2UoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuX3NvdXJjZSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRUcmFuc2FjdGlvbkVycm9yKCdUcmFuc2FjdGlvbiBub3QgaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3NvdXJjZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHRyYW5zYWN0aW9uIGRlbGVnYXRpb24gYWRkcmVzcyBpZiBpdCBpcyBhdmFpbGFibGUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IHRyYW5zYWN0aW9uIGRlbGVnYXRpb24gYWRkcmVzc1xuICAgKi9cbiAgZ2V0IGRlbGVnYXRlKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2RlbGVnYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcHVibGljIGtleSByZXZlYWxlZCBieSB0aGUgdHJhbnNhY3Rpb24gaWYgaXQgZXhpc3RzXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IHB1YmxpYyBrZXlcbiAgICovXG4gIGdldCBwdWJsaWNLZXlUb1JldmVhbCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9wdWJsaWNLZXlUb1JldmVhbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlc3RpbmF0aW9uIG9mIGFuIGFkZHJlc3MgaW5pdGlhbGl6YXRpb24gdHJhbnNhY3Rpb24gaWYgaXQgZXhpc3RzXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IGZvcndhcmRlciBkZXN0aW5hdGlvblxuICAgKi9cbiAgZ2V0IGZvcndhcmRlckRlc3RpbmF0aW9uKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZvcndhcmRlckRlc3RpbmF0aW9uO1xuICB9XG5cbiAgZ2V0IG93bmVycygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX293bmVycztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHNpZ25hdHVyZXMgZm9yIHRoZSBnaXZlbiBtdWx0aXNpZyB0cmFuc2ZlcixcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRyYW5zZmVySW5kZXggVGhlIHRyYW5zZmVyIHNjcmlwdCBpbmRleCBpbiB0aGUgVGV6b3MgdHJhbnNhY3Rpb25cbiAgICogQHJldHVybnMge0luZGV4ZWRTaWduYXR1cmVbXX0gQSBsaXN0IG9mIHNpZ25hdHVyZXMgd2l0aCB0aGVpciBpbmRleCBpbnNpZGUgdGhlIG11bHRpc2lnIHRyYW5zZmVyXG4gICAqICAgICAgc2NyaXB0XG4gICAqL1xuICBnZXRUcmFuc2ZlclNpZ25hdHVyZXModHJhbnNmZXJJbmRleCA9IDApOiBJbmRleGVkU2lnbmF0dXJlW10ge1xuICAgIGlmICghdGhpcy5fcGFyc2VkVHJhbnNhY3Rpb24pIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgcmV0dXJuIGdldE11bHRpc2lnVHJhbnNmZXJTaWduYXR1cmVzKHRoaXMuX3BhcnNlZFRyYW5zYWN0aW9uLmNvbnRlbnRzW3RyYW5zZmVySW5kZXhdIGFzIFRyYW5zYWN0aW9uT3ApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbGlzdCBvZiBpbmRleCBwZXIgdGV6b3MgdHJhbnNhY3Rpb24gdHlwZS4gVGhpcyBpcyB1c2VmdWwgdG8gbG9jYXRlIHNwZWNpZmljIG9wZXJhdGlvbnNcbiAgICogd2l0aGluIHRoZSB0cmFuc2FjdGlvbiBhbmQgdmVyaWZ5IG9yIHNpZ24gdGhlbS5cbiAgICpcbiAgICogQHJldHVybnMge3tbcDogc3RyaW5nXTogbnVtYmVyW119fSBMaXN0IG9mIGluZGV4ZXMgd2hlcmUgdGhlIGtleSBpcyB0aGUgdHJhbnNhY3Rpb24ga2luZFxuICAgKi9cbiAgZ2V0SW5kZXhlc0J5VHJhbnNhY3Rpb25UeXBlKCk6IHsgW2tpbmQ6IHN0cmluZ106IG51bWJlcltdIH0ge1xuICAgIGlmICghdGhpcy5fcGFyc2VkVHJhbnNhY3Rpb24pIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgaW5kZXhlcyA9IHt9O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fcGFyc2VkVHJhbnNhY3Rpb24uY29udGVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGtpbmQgPSB0aGlzLl9wYXJzZWRUcmFuc2FjdGlvbi5jb250ZW50c1tpXS5raW5kO1xuICAgICAgaW5kZXhlc1traW5kXSA9IGluZGV4ZXNba2luZF0gPyBpbmRleGVzW2tpbmRdLmNvbmNhdChbaV0pIDogW2ldO1xuICAgIH1cbiAgICByZXR1cm4gaW5kZXhlcztcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { BaseKey, BaseTransactionBuilder, TransactionType } from '@bitgo-beta/sdk-core';
|
|
2
|
+
import { BaseCoin as CoinConfig } from '@bitgo-beta/statics';
|
|
3
|
+
import BigNumber from 'bignumber.js';
|
|
4
|
+
import { Address } from './address';
|
|
5
|
+
import { Fee, IndexedData, Key } from './iface';
|
|
6
|
+
import { Transaction } from './transaction';
|
|
7
|
+
import { TransferBuilder } from './transferBuilder';
|
|
8
|
+
interface DataToSignOverride extends IndexedData {
|
|
9
|
+
dataToSign: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Tezos transaction builder.
|
|
13
|
+
*/
|
|
14
|
+
export declare class TransactionBuilder extends BaseTransactionBuilder {
|
|
15
|
+
private _serializedTransaction;
|
|
16
|
+
private _transaction;
|
|
17
|
+
private _type;
|
|
18
|
+
private _blockHeader;
|
|
19
|
+
private _counter;
|
|
20
|
+
private _fee;
|
|
21
|
+
private _sourceAddress;
|
|
22
|
+
private _sourceKeyPair?;
|
|
23
|
+
private _publicKeyToReveal;
|
|
24
|
+
private _initialBalance;
|
|
25
|
+
private _initialDelegate;
|
|
26
|
+
private _walletOwnerPublicKeys;
|
|
27
|
+
private _multisigSignerKeyPairs;
|
|
28
|
+
private _dataToSignOverride;
|
|
29
|
+
private _transfers;
|
|
30
|
+
private _forwarderDestination;
|
|
31
|
+
/**
|
|
32
|
+
* Public constructor.
|
|
33
|
+
*
|
|
34
|
+
* @param {CoinConfig} _coinConfig - coin configuration
|
|
35
|
+
*/
|
|
36
|
+
constructor(_coinConfig: Readonly<CoinConfig>);
|
|
37
|
+
/** @inheritdoc */
|
|
38
|
+
protected fromImplementation(rawTransaction: string): Transaction;
|
|
39
|
+
/** @inheritdoc */
|
|
40
|
+
protected signImplementation(key: Key): Transaction;
|
|
41
|
+
/** @inheritdoc */
|
|
42
|
+
protected buildImplementation(): Promise<Transaction>;
|
|
43
|
+
/**
|
|
44
|
+
* Set the transaction branch id.
|
|
45
|
+
*
|
|
46
|
+
* @param {string} blockId A block hash to use as branch reference
|
|
47
|
+
*/
|
|
48
|
+
branch(blockId: string): void;
|
|
49
|
+
/**
|
|
50
|
+
* The type of transaction being built.
|
|
51
|
+
*
|
|
52
|
+
* @param {TransactionType} type - type of the transaction
|
|
53
|
+
*/
|
|
54
|
+
type(type: TransactionType): void;
|
|
55
|
+
/**
|
|
56
|
+
* Set the transaction fees. Low fees may get a transaction rejected or never picked up by bakers.
|
|
57
|
+
*
|
|
58
|
+
* @param {Fee} fee Baker fees. May also include the maximum gas and storage fees to pay
|
|
59
|
+
*/
|
|
60
|
+
fee(fee: Fee): void;
|
|
61
|
+
/**
|
|
62
|
+
* Set the transaction initiator. This account will pay for the transaction fees, but it will not
|
|
63
|
+
* be added as an owner of a wallet in a init transaction, unless manually set as one of the
|
|
64
|
+
* owners.
|
|
65
|
+
*
|
|
66
|
+
* @param {string} source A Tezos address
|
|
67
|
+
*/
|
|
68
|
+
source(source: string): void;
|
|
69
|
+
/**
|
|
70
|
+
* Set an amount of mutez to transfer in this transaction this transaction. This is different than
|
|
71
|
+
* the amount to transfer from a multisig wallet.
|
|
72
|
+
*
|
|
73
|
+
* @param {string} amount Amount in mutez (1/1000000 Tezies)
|
|
74
|
+
*/
|
|
75
|
+
initialBalance(amount: string): void;
|
|
76
|
+
/**
|
|
77
|
+
* Set the transaction counter to prevent submitting repeated transactions.
|
|
78
|
+
*
|
|
79
|
+
* @param {string} counter The counter to use
|
|
80
|
+
*/
|
|
81
|
+
counter(counter: string): void;
|
|
82
|
+
/**
|
|
83
|
+
* Set the destination address of a forwarder contract
|
|
84
|
+
* Used in forwarder contract deployment as destination address
|
|
85
|
+
*
|
|
86
|
+
* @param {string} contractAddress - contract address to use
|
|
87
|
+
*/
|
|
88
|
+
forwarderDestination(contractAddress: string): void;
|
|
89
|
+
/**
|
|
90
|
+
* The public key to reveal.
|
|
91
|
+
*
|
|
92
|
+
* @param {string} publicKey A Tezos public key
|
|
93
|
+
*/
|
|
94
|
+
publicKeyToReveal(publicKey: string): void;
|
|
95
|
+
/**
|
|
96
|
+
* Build a reveal operation for the source account with default fees.
|
|
97
|
+
*
|
|
98
|
+
* @returns {RevealOp} A Tezos reveal operation
|
|
99
|
+
*/
|
|
100
|
+
private buildPublicKeyRevelationOperation;
|
|
101
|
+
/**
|
|
102
|
+
* Set one of the owners of the multisig wallet.
|
|
103
|
+
*
|
|
104
|
+
* @param {string} publicKey A Tezos public key
|
|
105
|
+
*/
|
|
106
|
+
owner(publicKey: string): void;
|
|
107
|
+
/**
|
|
108
|
+
* Set an initial delegate to initialize this wallet to. This is different than the delegation to
|
|
109
|
+
* set while doing a separate delegation transaction.
|
|
110
|
+
*
|
|
111
|
+
* @param {string} delegate The address to delegate the funds to
|
|
112
|
+
*/
|
|
113
|
+
initialDelegate(delegate: string): void;
|
|
114
|
+
/**
|
|
115
|
+
* Build an origination operation for a generic multisig contract.
|
|
116
|
+
*
|
|
117
|
+
* @returns {Operation} A Tezos origination operation
|
|
118
|
+
*/
|
|
119
|
+
private buildWalletInitializationOperations;
|
|
120
|
+
/**
|
|
121
|
+
* Initialize a new TransferBuilder to for a singlesig or multisig transaction.
|
|
122
|
+
*
|
|
123
|
+
* @param {string} amount Amount in mutez to be transferred
|
|
124
|
+
* @returns {TransferBuilder} A transfer builder
|
|
125
|
+
*/
|
|
126
|
+
transfer(amount: string): TransferBuilder;
|
|
127
|
+
/**
|
|
128
|
+
* Calculate the signatures for the multisig transaction.
|
|
129
|
+
*
|
|
130
|
+
* @param {string} packedData The string in hexadecimal to sign
|
|
131
|
+
* @returns {Promise<string[]>} List of signatures for packedData
|
|
132
|
+
*/
|
|
133
|
+
private getSignatures;
|
|
134
|
+
/**
|
|
135
|
+
* Override the data to sign for a specific transfer. Used for offline signing to pass the
|
|
136
|
+
* respective dataToSign for transfer at a particular index.
|
|
137
|
+
*
|
|
138
|
+
* @param {DataToSignOverride} data - data to override
|
|
139
|
+
*/
|
|
140
|
+
overrideDataToSign(data: DataToSignOverride): void;
|
|
141
|
+
/**
|
|
142
|
+
* Build a transaction operation for a generic multisig contract.
|
|
143
|
+
*
|
|
144
|
+
* @returns {Promise<TransactionOp[]>} A Tezos transaction operation
|
|
145
|
+
*/
|
|
146
|
+
private buildSendTransactionContent;
|
|
147
|
+
/**
|
|
148
|
+
* Build a transaction operation for a forwarder contract
|
|
149
|
+
*
|
|
150
|
+
* @returns {OriginationOp} a Tezos transaction operation
|
|
151
|
+
*/
|
|
152
|
+
private buildForwarderDeploymentContent;
|
|
153
|
+
/** @inheritdoc */
|
|
154
|
+
validateValue(value: BigNumber): void;
|
|
155
|
+
/** @inheritdoc */
|
|
156
|
+
validateAddress(address: Address): void;
|
|
157
|
+
/** @inheritdoc */
|
|
158
|
+
validateKey(key: BaseKey): void;
|
|
159
|
+
/** @inheritdoc */
|
|
160
|
+
validateRawTransaction(rawTransaction: any): void;
|
|
161
|
+
/** @inheritdoc */
|
|
162
|
+
validateTransaction(transaction: Transaction): void;
|
|
163
|
+
/** @inheritdoc */
|
|
164
|
+
displayName(): string;
|
|
165
|
+
/** @inheritdoc */
|
|
166
|
+
protected get transaction(): Transaction;
|
|
167
|
+
/** @inheritdoc */
|
|
168
|
+
protected set transaction(transaction: Transaction);
|
|
169
|
+
}
|
|
170
|
+
export {};
|
|
171
|
+
//# sourceMappingURL=transactionBuilder.d.ts.map
|