Skip to content
This repository has been archived by the owner on Aug 2, 2022. It is now read-only.

Commit

Permalink
Merge pull request #536 from EOSIO/context-free-actions
Browse files Browse the repository at this point in the history
Support context-free actions
  • Loading branch information
tbfleming authored Apr 22, 2019
2 parents 8ca3a69 + 3f2d241 commit e34c16e
Showing 1 changed file with 12 additions and 4 deletions.
16 changes: 12 additions & 4 deletions src/eosjs-api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,8 @@ export class Api {

/** Get abis needed by a transaction */
public async getTransactionAbis(transaction: any, reload = false): Promise<BinaryAbi[]> {
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<string> = new Set(accounts);
const actionPromises: Array<Promise<BinaryAbi>> = [...uniqueAccounts].map(
async (account: string): Promise<BinaryAbi> => ({
Expand Down Expand Up @@ -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 });
Expand Down Expand Up @@ -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
};
}

/**
Expand Down Expand Up @@ -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 = {
Expand Down

0 comments on commit e34c16e

Please sign in to comment.