git.delta.rocks / unique-network / refs/commits / aa9447bcfd3f

difftreelog

test define ContractHelpers signed extension

Yaroslav Bolyukin2021-07-02parent: #2072cd7.patch.diff
in: master

1 file changed

modifiedtests/src/substrate/substrate-api.tsdiffbeforeafterboth
before · tests/src/substrate/substrate-api.ts
1//2// This file is subject to the terms and conditions defined in3// file 'LICENSE', which is part of this source code package.4//56import { WsProvider, ApiPromise } from '@polkadot/api';7import { EventRecord } from '@polkadot/types/interfaces/system/types';8import { ExtrinsicStatus } from '@polkadot/types/interfaces/author/types';9import { IKeyringPair } from '@polkadot/types/types';1011import config from '../config';12import promisifySubstrate from './promisify-substrate';13import { ApiOptions, SubmittableExtrinsic, ApiTypes } from '@polkadot/api/types';14import rtt from '../../../runtime_types.json';1516function defaultApiOptions(): ApiOptions {17  const wsProvider = new WsProvider(config.substrateUrl);18  return { provider: wsProvider, types: rtt };19}2021export default async function usingApi<T = void>(action: (api: ApiPromise) => Promise<T>, settings: ApiOptions | undefined = undefined): Promise<T> {22  settings = settings || defaultApiOptions();23  const api: ApiPromise = new ApiPromise(settings);24  let result: T = null as unknown as T;2526  // TODO: Remove, this is temporary: Filter unneeded API output 27  // (Jaco promised it will be removed in the next version)28  const consoleErr = console.error;29  console.error = (message: string) => {30    if (!message.includes('StorageChangeSet:: WebSocket is not connected') || message.includes('2021-'))31      consoleErr(message);32  };3334  try {35    await promisifySubstrate(api, async () => {36      if (api) {37        await api.isReadyOrError;38        result = await action(api);39      }40    })();41  } finally {42    await api.disconnect();43    console.error = consoleErr;44  }45  return result as T;46}4748enum TransactionStatus {49  Success,50  Fail,51  NotReady52}5354function getTransactionStatus(events: EventRecord[], status: ExtrinsicStatus): TransactionStatus {55  if (status.isReady) {56    return TransactionStatus.NotReady;57  }58  if (status.isBroadcast) {59    return TransactionStatus.NotReady;60  } 61  if (status.isInBlock || status.isFinalized) {62    if(events.filter(e => e.event.data.method === 'ExtrinsicFailed').length > 0) {63      return TransactionStatus.Fail;64    }65    if(events.filter(e => e.event.data.method === 'ExtrinsicSuccess').length > 0) {66      return TransactionStatus.Success;67    }68  }6970  return TransactionStatus.Fail;71}7273export function74submitTransactionAsync(sender: IKeyringPair, transaction: SubmittableExtrinsic<ApiTypes>): Promise<EventRecord[]> {75  /* eslint no-async-promise-executor: "off" */76  return new Promise(async (resolve, reject) => {77    try {78      await transaction.signAndSend(sender, ({ events = [], status }) => {79        const transactionStatus = getTransactionStatus(events, status);8081        if (transactionStatus === TransactionStatus.Success) {82          resolve(events);83        } else if (transactionStatus === TransactionStatus.Fail) {84          console.log(`Something went wrong with transaction. Status: ${status}`);85          reject(events);86        }87      });88    } catch (e) {89      console.log('Error: ', e);90      reject(e);91    }92  });93}9495export function submitTransactionExpectFailAsync(sender: IKeyringPair, transaction: SubmittableExtrinsic<ApiTypes>): Promise<EventRecord[]> {96  const consoleError = console.error;97  const consoleLog = console.log;98  console.error = () => {};99  console.log = () => {};100101  /* eslint no-async-promise-executor: "off" */102  return new Promise<EventRecord[]>(async function(res, rej) {103    const resolve = (rec: EventRecord[]) => {104      setTimeout(() => {105        res(rec);106        console.error = consoleError;107        console.log = consoleLog;108      });109    };110    const reject = (errror: any) => {111      setTimeout(() => {112        rej(errror);113        console.error = consoleError;114        console.log = consoleLog;115      });116    };117    try {118      await transaction.signAndSend(sender, ({ events = [], status }) => {119        const transactionStatus = getTransactionStatus(events, status);120121        // console.log('transactionStatus', transactionStatus, 'events', events);122123        if (transactionStatus === TransactionStatus.Success) {124          resolve(events);125        } else if (transactionStatus === TransactionStatus.Fail) {126          reject(events);127        }128      });129    } catch (e) {130      reject(e);131    }132  });133}
after · tests/src/substrate/substrate-api.ts
1//2// This file is subject to the terms and conditions defined in3// file 'LICENSE', which is part of this source code package.4//56import { WsProvider, ApiPromise } from '@polkadot/api';7import { EventRecord } from '@polkadot/types/interfaces/system/types';8import { ExtrinsicStatus } from '@polkadot/types/interfaces/author/types';9import { IKeyringPair } from '@polkadot/types/types';1011import config from '../config';12import promisifySubstrate from './promisify-substrate';13import { ApiOptions, SubmittableExtrinsic, ApiTypes } from '@polkadot/api/types';14import rtt from '../../../runtime_types.json';1516function defaultApiOptions(): ApiOptions {17  const wsProvider = new WsProvider(config.substrateUrl);18  return {19    provider: wsProvider, types: rtt, signedExtensions: {20      ContractHelpers: {21        extrinsic: {},22        payload: {},23      },24    },25  };26}2728export default async function usingApi<T = void>(action: (api: ApiPromise) => Promise<T>, settings: ApiOptions | undefined = undefined): Promise<T> {29  settings = settings || defaultApiOptions();30  const api: ApiPromise = new ApiPromise(settings);31  let result: T = null as unknown as T;3233  // TODO: Remove, this is temporary: Filter unneeded API output 34  // (Jaco promised it will be removed in the next version)35  const consoleErr = console.error;36  console.error = (message: string) => {37    if (!message.includes('StorageChangeSet:: WebSocket is not connected') || message.includes('2021-'))38      consoleErr(message);39  };4041  try {42    await promisifySubstrate(api, async () => {43      if (api) {44        await api.isReadyOrError;45        result = await action(api);46      }47    })();48  } finally {49    await api.disconnect();50    console.error = consoleErr;51  }52  return result as T;53}5455enum TransactionStatus {56  Success,57  Fail,58  NotReady59}6061function getTransactionStatus(events: EventRecord[], status: ExtrinsicStatus): TransactionStatus {62  if (status.isReady) {63    return TransactionStatus.NotReady;64  }65  if (status.isBroadcast) {66    return TransactionStatus.NotReady;67  } 68  if (status.isInBlock || status.isFinalized) {69    if(events.filter(e => e.event.data.method === 'ExtrinsicFailed').length > 0) {70      return TransactionStatus.Fail;71    }72    if(events.filter(e => e.event.data.method === 'ExtrinsicSuccess').length > 0) {73      return TransactionStatus.Success;74    }75  }7677  return TransactionStatus.Fail;78}7980export function81submitTransactionAsync(sender: IKeyringPair, transaction: SubmittableExtrinsic<ApiTypes>): Promise<EventRecord[]> {82  /* eslint no-async-promise-executor: "off" */83  return new Promise(async (resolve, reject) => {84    try {85      await transaction.signAndSend(sender, ({ events = [], status }) => {86        const transactionStatus = getTransactionStatus(events, status);8788        if (transactionStatus === TransactionStatus.Success) {89          resolve(events);90        } else if (transactionStatus === TransactionStatus.Fail) {91          console.log(`Something went wrong with transaction. Status: ${status}`);92          reject(events);93        }94      });95    } catch (e) {96      console.log('Error: ', e);97      reject(e);98    }99  });100}101102export function submitTransactionExpectFailAsync(sender: IKeyringPair, transaction: SubmittableExtrinsic<ApiTypes>): Promise<EventRecord[]> {103  const consoleError = console.error;104  const consoleLog = console.log;105  console.error = () => {};106  console.log = () => {};107108  /* eslint no-async-promise-executor: "off" */109  return new Promise<EventRecord[]>(async function(res, rej) {110    const resolve = (rec: EventRecord[]) => {111      setTimeout(() => {112        res(rec);113        console.error = consoleError;114        console.log = consoleLog;115      });116    };117    const reject = (errror: any) => {118      setTimeout(() => {119        rej(errror);120        console.error = consoleError;121        console.log = consoleLog;122      });123    };124    try {125      await transaction.signAndSend(sender, ({ events = [], status }) => {126        const transactionStatus = getTransactionStatus(events, status);127128        // console.log('transactionStatus', transactionStatus, 'events', events);129130        if (transactionStatus === TransactionStatus.Success) {131          resolve(events);132        } else if (transactionStatus === TransactionStatus.Fail) {133          reject(events);134        }135      });136    } catch (e) {137      reject(e);138    }139  });140}