-
Notifications
You must be signed in to change notification settings - Fork 302
Expand file tree
/
Copy pathContractCallBuilder.ts
More file actions
43 lines (35 loc) · 1.58 KB
/
ContractCallBuilder.ts
File metadata and controls
43 lines (35 loc) · 1.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import { TransactionType } from '@bitgo/sdk-core';
import { BaseCoin as CoinConfig } from '@bitgo/statics';
import * as constants from './constants';
import { CosmosTransactionMessage, ExecuteContractMessage, MessageData } from './iface';
import { CosmosTransactionBuilder } from './transactionBuilder';
import { CosmosUtils } from './utils';
export class ContractCallBuilder<CustomMessage = never> extends CosmosTransactionBuilder<CustomMessage> {
protected _utils: CosmosUtils<CustomMessage>;
constructor(_coinConfig: Readonly<CoinConfig>, utils: CosmosUtils<CustomMessage>) {
super(_coinConfig, utils);
this._utils = utils;
}
protected get transactionType(): TransactionType {
return TransactionType.ContractCall;
}
/** @inheritdoc */
messages(messages: (CosmosTransactionMessage<CustomMessage> | Partial<MessageData<CustomMessage>>)[]): this {
this._messages = messages.map((message) => {
const executeContractMessage = message as ExecuteContractMessage;
if (!executeContractMessage.msg) {
// Pre-encoded message from deserialization round-trip
return message as MessageData<CustomMessage>;
}
if (CosmosUtils.isGroupProposal(executeContractMessage)) {
return {
typeUrl: constants.groupProposalMsgTypeUrl,
value: executeContractMessage.msg,
} as MessageData<CustomMessage>;
}
this._utils.validateExecuteContractMessage(executeContractMessage, this.transactionType);
return { typeUrl: constants.executeContractMsgTypeUrl, value: executeContractMessage };
});
return this;
}
}