@bitgo-beta/abstract-cosmos 1.0.1-beta.9 → 1.0.1-beta.91
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/CHANGELOG.md +108 -0
- package/dist/src/cosmosCoin.d.ts +87 -6
- package/dist/src/cosmosCoin.d.ts.map +1 -1
- package/dist/src/cosmosCoin.js +373 -105
- package/dist/src/lib/ContractCallBuilder.d.ts +13 -0
- package/dist/src/lib/ContractCallBuilder.d.ts.map +1 -0
- package/dist/src/lib/ContractCallBuilder.js +28 -0
- package/dist/src/lib/StakingActivateBuilder.d.ts +13 -0
- package/dist/src/lib/StakingActivateBuilder.d.ts.map +1 -0
- package/dist/src/lib/StakingActivateBuilder.js +28 -0
- package/dist/src/lib/StakingDeactivateBuilder.d.ts +13 -0
- package/dist/src/lib/StakingDeactivateBuilder.d.ts.map +1 -0
- package/dist/src/lib/StakingDeactivateBuilder.js +28 -0
- package/dist/src/lib/StakingWithdrawRewardsBuilder.d.ts +13 -0
- package/dist/src/lib/StakingWithdrawRewardsBuilder.d.ts.map +1 -0
- package/dist/src/lib/StakingWithdrawRewardsBuilder.js +28 -0
- package/dist/src/lib/constants.d.ts +2 -0
- package/dist/src/lib/constants.d.ts.map +1 -1
- package/dist/src/lib/constants.js +4 -2
- package/dist/src/lib/iface.d.ts +26 -4
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +1 -1
- package/dist/src/lib/index.d.ts +6 -1
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +13 -3
- package/dist/src/lib/transaction.d.ts +13 -1
- package/dist/src/lib/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction.js +60 -6
- package/dist/src/lib/transactionBuilder.d.ts +31 -5
- package/dist/src/lib/transactionBuilder.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilder.js +100 -4
- package/dist/src/lib/transferBuilder.d.ts +13 -0
- package/dist/src/lib/transferBuilder.d.ts.map +1 -0
- package/dist/src/lib/transferBuilder.js +28 -0
- package/dist/src/lib/utils.d.ts +137 -11
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +314 -18
- package/dist/tsconfig.tsbuildinfo +1 -10814
- package/package.json +10 -8
package/dist/src/lib/utils.d.ts
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
1
2
|
import { BaseUtils, TransactionType } from '@bitgo-beta/sdk-core';
|
|
2
3
|
import { DecodedTxRaw } from '@cosmjs/proto-signing';
|
|
4
|
+
import { Coin } from '@cosmjs/stargate';
|
|
3
5
|
import { SignDoc, TxRaw } from 'cosmjs-types/cosmos/tx/v1beta1/tx';
|
|
4
|
-
import { CosmosLikeTransaction, FeeData, MessageData } from './iface';
|
|
5
|
-
export declare class
|
|
6
|
+
import { CosmosLikeTransaction, DelegateOrUndelegeteMessage, ExecuteContractMessage, FeeData, MessageData, SendMessage, WithdrawDelegatorRewardsMessage } from './iface';
|
|
7
|
+
export declare class CosmosUtils implements BaseUtils {
|
|
6
8
|
private registry;
|
|
9
|
+
constructor();
|
|
7
10
|
/** @inheritdoc */
|
|
8
11
|
isValidBlockId(hash: string): boolean;
|
|
9
12
|
/** @inheritdoc */
|
|
@@ -43,6 +46,10 @@ export declare class CosmosLikeUtils implements BaseUtils {
|
|
|
43
46
|
* @returns {EncodeObject[]} messages along with type url
|
|
44
47
|
*/
|
|
45
48
|
private getEncodedMessagesFromDecodedTx;
|
|
49
|
+
/**
|
|
50
|
+
* Checks the txn sequence is valid or not
|
|
51
|
+
* @param {number} sequence
|
|
52
|
+
*/
|
|
46
53
|
validateSequence(sequence: number): void;
|
|
47
54
|
/**
|
|
48
55
|
* Pulls the sequence number from a DecodedTxRaw AuthInfo property
|
|
@@ -53,7 +60,7 @@ export declare class CosmosLikeUtils implements BaseUtils {
|
|
|
53
60
|
/**
|
|
54
61
|
* Pulls the typeUrl from the encoded message of a DecodedTxRaw
|
|
55
62
|
* @param {DecodedTxRaw} decodedTx
|
|
56
|
-
* @returns {string}
|
|
63
|
+
* @returns {string} cosmos proto type url
|
|
57
64
|
*/
|
|
58
65
|
getTypeUrlFromDecodedTx(decodedTx: DecodedTxRaw): string;
|
|
59
66
|
/**
|
|
@@ -93,7 +100,13 @@ export declare class CosmosLikeUtils implements BaseUtils {
|
|
|
93
100
|
*/
|
|
94
101
|
getWithdrawDelegatorRewardsMessageDataFromDecodedTx(decodedTx: DecodedTxRaw): MessageData[];
|
|
95
102
|
/**
|
|
96
|
-
*
|
|
103
|
+
* Returns the array of MessageData[] from the decoded transaction
|
|
104
|
+
* @param {DecodedTxRaw} decodedTx
|
|
105
|
+
* @returns {MessageData[]} Execute contract transaction message data
|
|
106
|
+
*/
|
|
107
|
+
getExecuteContractMessageDataFromDecodedTx(decodedTx: DecodedTxRaw): MessageData[];
|
|
108
|
+
/**
|
|
109
|
+
* Determines bitgo transaction type based on cosmos proto type url
|
|
97
110
|
* @param {string} typeUrl
|
|
98
111
|
* @returns {TransactionType | undefined} TransactionType if url is supported else undefined
|
|
99
112
|
*/
|
|
@@ -122,14 +135,11 @@ export declare class CosmosLikeUtils implements BaseUtils {
|
|
|
122
135
|
* @returns {boolean} true if transaction is signed else false
|
|
123
136
|
*/
|
|
124
137
|
isSignedRawTx(rawTransaction: string): boolean;
|
|
125
|
-
validatePublicKey(publicKey: string | undefined): void;
|
|
126
138
|
/**
|
|
127
|
-
*
|
|
128
|
-
*
|
|
129
|
-
* @param {string} address
|
|
130
|
-
* @returns {boolean} - the validation result
|
|
139
|
+
* Returns whether or not the string is a valid protocol public key
|
|
140
|
+
* @param {string | undefined} publicKey - the public key to be validated
|
|
131
141
|
*/
|
|
132
|
-
|
|
142
|
+
validatePublicKey(publicKey: string | undefined): void;
|
|
133
143
|
/**
|
|
134
144
|
* Creates a sign doc from an cosmos like transaction @see CosmosLikeTransaction
|
|
135
145
|
* @Precondition cosmosLikeTransaction.accountNumber and cosmosLikeTransaction.chainId must be defined
|
|
@@ -137,8 +147,124 @@ export declare class CosmosLikeUtils implements BaseUtils {
|
|
|
137
147
|
* @returns {SignDoc} sign doc
|
|
138
148
|
*/
|
|
139
149
|
createSignDoc(cosmosLikeTransaction: CosmosLikeTransaction, accountNumber: number | undefined, chainId: string | undefined): SignDoc;
|
|
150
|
+
/**
|
|
151
|
+
* Returns whether or not the string is a valid hex
|
|
152
|
+
* @param hexString - hex string format
|
|
153
|
+
* @returns {boolean} true if string is hex else false
|
|
154
|
+
*/
|
|
140
155
|
isValidHexString(hexString: string): boolean;
|
|
156
|
+
/**
|
|
157
|
+
* Validates the WithdrawDelegatorRewardsMessage
|
|
158
|
+
* @param {WithdrawDelegatorRewardsMessage} withdrawRewardsMessage - The WithdrawDelegatorRewardsMessage to validate.
|
|
159
|
+
* @throws {InvalidTransactionError} Throws an error if the validatorAddress or delegatorAddress is invalid or missing.
|
|
160
|
+
*/
|
|
161
|
+
validateWithdrawRewardsMessage(withdrawRewardsMessage: WithdrawDelegatorRewardsMessage): void;
|
|
162
|
+
/**
|
|
163
|
+
* Helper method to check if the specified properties in an object are missing or null.
|
|
164
|
+
* @param {Object} obj - The object to check.
|
|
165
|
+
* @param {string[]} keys - An array of property keys to check.
|
|
166
|
+
* @throws {Error} Throws an error if any of the specified properties are missing or null.
|
|
167
|
+
*/
|
|
168
|
+
isObjPropertyNull(obj: {
|
|
169
|
+
[key: string]: any;
|
|
170
|
+
}, keys: Array<string>): void;
|
|
171
|
+
/**
|
|
172
|
+
* Validates the DelegateOrUndelegeteMessage
|
|
173
|
+
* @param {DelegateOrUndelegeteMessage} delegateMessage - The DelegateOrUndelegeteMessage to validate.
|
|
174
|
+
* @throws {InvalidTransactionError} Throws an error if the validatorAddress, delegatorAddress, or amount is invalid or missing.
|
|
175
|
+
*/
|
|
176
|
+
validateDelegateOrUndelegateMessage(delegateMessage: DelegateOrUndelegeteMessage): void;
|
|
177
|
+
/**
|
|
178
|
+
* Validates the MessageData
|
|
179
|
+
* @param {MessageData} messageData - The MessageData to validate.
|
|
180
|
+
* @throws {InvalidTransactionError} Throws an error if the messageData is invalid or missing required fields.
|
|
181
|
+
*/
|
|
182
|
+
validateMessageData(messageData: MessageData): void;
|
|
183
|
+
/**
|
|
184
|
+
* Validates the Cosmos-like transaction.
|
|
185
|
+
* @param {CosmosLikeTransaction} tx - The transaction to validate.
|
|
186
|
+
* @throws {InvalidTransactionError} Throws an error if the transaction is invalid or missing required fields.
|
|
187
|
+
*/
|
|
188
|
+
validateTransaction(tx: CosmosLikeTransaction): void;
|
|
189
|
+
/**
|
|
190
|
+
* Creates a Cosmos-like transaction.
|
|
191
|
+
* @param {number} sequence - The sender address sequence number for the transaction.
|
|
192
|
+
* @param {MessageData[]} messages - The array of message data for the transaction.
|
|
193
|
+
* @param {FeeData} gasBudget - The fee data for the transaction.
|
|
194
|
+
* @param {string} [publicKey] - The public key associated with the sender.
|
|
195
|
+
* @param {string} [memo] - The memo for the transaction.
|
|
196
|
+
* @returns {CosmosLikeTransaction} Returns the created Cosmos-like transaction.
|
|
197
|
+
* @throws {InvalidTransactionError} Throws an error if the created transaction is invalid.
|
|
198
|
+
*/
|
|
199
|
+
createTransaction(sequence: number, messages: MessageData[], gasBudget: FeeData, publicKey?: string, memo?: string): CosmosLikeTransaction;
|
|
200
|
+
/**
|
|
201
|
+
* Creates a Cosmos-like transaction with a hash.
|
|
202
|
+
* @param {number} sequence - The sender address sequence number for the transaction.
|
|
203
|
+
* @param {MessageData[]} messages - The array of message data for the transaction.
|
|
204
|
+
* @param {FeeData} gasBudget - The fee data for the transaction.
|
|
205
|
+
* @param {string} [publicKey] - The public key associated with the transaction.
|
|
206
|
+
* @param {Buffer} [signature] - The signature for the transaction.
|
|
207
|
+
* @param {string} [memo] - The memo for the transaction.
|
|
208
|
+
* @returns {CosmosLikeTransaction} Returns the created Cosmos-like transaction with the hash and signature if provided.
|
|
209
|
+
*/
|
|
210
|
+
createTransactionWithHash(sequence: number, messages: MessageData[], gasBudget: FeeData, publicKey?: string, signature?: Buffer, memo?: string): CosmosLikeTransaction;
|
|
211
|
+
/**
|
|
212
|
+
* Deserializes base64 enocded raw transaction string into @see CosmosLikeTransaction
|
|
213
|
+
* @param {string} rawTx base64 enocded raw transaction string
|
|
214
|
+
* @returns {CosmosLikeTransaction} Deserialized cosmosLikeTransaction
|
|
215
|
+
*/
|
|
216
|
+
deserializeTransaction(rawTx: string): CosmosLikeTransaction;
|
|
217
|
+
/**
|
|
218
|
+
* Validates an array of coin amounts.
|
|
219
|
+
* @param {Coin[]} amountArray - The array of coin amounts to validate.
|
|
220
|
+
* @param {TransactionType} transactionType - optional field for transaction type
|
|
221
|
+
*/
|
|
222
|
+
validateAmountData(amountArray: Coin[], transactionType?: TransactionType): void;
|
|
223
|
+
/**
|
|
224
|
+
* Validates the gas limit and gas amount for a transaction.
|
|
225
|
+
* @param {FeeData} gasBudget - The gas budget to validate.
|
|
226
|
+
* @throws {InvalidTransactionError} Throws an error if the gas budget is invalid.
|
|
227
|
+
*/
|
|
228
|
+
validateGasBudget(gasBudget: FeeData): void;
|
|
229
|
+
/**
|
|
230
|
+
* Validates a send message for a transaction.
|
|
231
|
+
* @param {SendMessage} sendMessage - The send message to validate.
|
|
232
|
+
* @throws {InvalidTransactionError} Throws an error if the send message is invalid.
|
|
233
|
+
*/
|
|
234
|
+
validateSendMessage(sendMessage: SendMessage): void;
|
|
235
|
+
/**
|
|
236
|
+
* Validates a coin amount.
|
|
237
|
+
* @param {Coin} amount - The coin amount to validate.
|
|
238
|
+
* @param {TransactionType} transactionType - optional field for transaction type
|
|
239
|
+
* @throws {InvalidTransactionError} Throws an error if the coin amount is invalid.
|
|
240
|
+
*/
|
|
241
|
+
validateAmount(amount: Coin, transactionType?: TransactionType): void;
|
|
242
|
+
/**
|
|
243
|
+
* Validates if the address matches with regex @see accountAddressRegex
|
|
244
|
+
* @param {string} address
|
|
245
|
+
* @returns {boolean} - the validation result
|
|
246
|
+
*/
|
|
247
|
+
isValidValidatorAddress(address: string): boolean;
|
|
248
|
+
/**
|
|
249
|
+
* Validates if the address matches with regex @see accountAddressRegex
|
|
250
|
+
* @param {string} address
|
|
251
|
+
* @returns {boolean} - the validation result
|
|
252
|
+
*/
|
|
253
|
+
isValidAddress(address: string): boolean;
|
|
254
|
+
/**
|
|
255
|
+
* Validates if the address matches with regex @see contractAddressRegex
|
|
256
|
+
* @param {string} address
|
|
257
|
+
* @returns {boolean} - the validation result
|
|
258
|
+
*/
|
|
259
|
+
isValidContractAddress(address: string): boolean;
|
|
260
|
+
/**
|
|
261
|
+
* Validates a execute contract message
|
|
262
|
+
* @param {ExecuteContractMessage} message - The execute contract message to validate
|
|
263
|
+
* @param {TransactionType} transactionType - optional field for transaction type
|
|
264
|
+
* @throws {InvalidTransactionError} Throws an error if the message is invalid
|
|
265
|
+
*/
|
|
266
|
+
validateExecuteContractMessage(message: ExecuteContractMessage, transactionType?: TransactionType): void;
|
|
141
267
|
}
|
|
142
|
-
declare const utils:
|
|
268
|
+
declare const utils: CosmosUtils;
|
|
143
269
|
export default utils;
|
|
144
270
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EAIT,eAAe,EAChB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,YAAY,EAQb,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"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"}
|