diff --git a/src/eosjs-api.ts b/src/eosjs-api.ts index 0e2bf48f6..8673c6742 100644 --- a/src/eosjs-api.ts +++ b/src/eosjs-api.ts @@ -115,7 +115,8 @@ export class Api { /** Get abis needed by a transaction */ public async getTransactionAbis(transaction: any, reload = false): Promise { - const accounts: string[] = transaction.actions.map((action: ser.Action): string => action.account); + const actions = (transaction.context_free_actions || []).concat(transaction.actions); + const accounts: string[] = actions.map((action: ser.Action): string => action.account); const uniqueAccounts: Set = new Set(accounts); const actionPromises: Array> = [...uniqueAccounts].map( async (account: string): Promise => ({ @@ -167,7 +168,7 @@ export class Api { /** Serialize context-free data */ public serializeContextFreeData(contextFreeData: Uint8Array[]): Uint8Array { - if (!contextFreeData) { + if (!contextFreeData || !contextFreeData.length) { return null; } const buffer = new ser.SerialBuffer({ textEncoder: this.textEncoder, textDecoder: this.textDecoder }); @@ -209,8 +210,11 @@ export class Api { transaction = ser.hexToUint8Array(transaction); } const deserializedTransaction = this.deserializeTransaction(transaction); + const deserializedCFActions = await this.deserializeActions(deserializedTransaction.context_free_actions); const deserializedActions = await this.deserializeActions(deserializedTransaction.actions); - return { ...deserializedTransaction, actions: deserializedActions }; + return { + ...deserializedTransaction, context_free_actions: deserializedCFActions, actions: deserializedActions + }; } /** @@ -246,7 +250,11 @@ export class Api { } const abis: BinaryAbi[] = await this.getTransactionAbis(transaction); - transaction = { ...transaction, actions: await this.serializeActions(transaction.actions) }; + transaction = { + ...transaction, + context_free_actions: await this.serializeActions(transaction.context_free_actions || []), + actions: await this.serializeActions(transaction.actions) + }; const serializedTransaction = this.serializeTransaction(transaction); const serializedContextFreeData = this.serializeContextFreeData(transaction.context_free_data); let pushTransactionArgs: PushTransactionArgs = {