difftreelog
test define ContractHelpers signed extension
in: master
1 file changed
tests/src/substrate/substrate-api.tsdiffbeforeafterboth1//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}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}