git.delta.rocks / unique-network / refs/commits / 10c5b4f031f0

difftreelog

source

tests/src/substrate/substrate-api.ts2.8 KiBsourcehistory
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 type { AccountId, Address, ApplyExtrinsicResult, DispatchError, DispatchInfo, EventRecord, Extrinsic, ExtrinsicStatus, Hash, RuntimeDispatchInfo } from '@polkadot/types/interfaces';8import { IKeyringPair } from "@polkadot/types/types";910import config from "../config";11import promisifySubstrate from "./promisify-substrate";12import { ApiOptions, SubmittableExtrinsic, ApiTypes } from "@polkadot/api/types";13import rtt from "../../../runtime_types.json";1415function defaultApiOptions(): ApiOptions {16  const wsProvider = new WsProvider(config.substrateUrl);17  return { provider: wsProvider, types: rtt };18}1920export default async function usingApi(action: (api: ApiPromise) => Promise<void>, settings: ApiOptions | undefined = undefined): Promise<void> {21  settings = settings || defaultApiOptions();22  let api: ApiPromise = new ApiPromise(settings);2324  try {25    await promisifySubstrate(api, async () => {26      if(api) {27        await api.isReadyOrError;28        await action(api);29      }30    })();31  } finally {32    await api.disconnect();33  }34}3536export function submitTransactionAsync(sender: IKeyringPair, transaction: SubmittableExtrinsic<ApiTypes>): Promise<EventRecord[]> {37  return new Promise(async function(resolve, reject) {38    try {39      await transaction.signAndSend(sender, ({ events = [], status }) => {40        if (status.isReady) {41          // nothing to do42          // console.log(`Current tx status is Ready`);43        } else if (status.isBroadcast) {44          // nothing to do45          // console.log(`Current tx status is Broadcast`);46        } else if (status.isInBlock || status.isFinalized) {47          resolve(events);48        } else {49          console.log(`Something went wrong with transaction. Status: ${status}`);50          reject("Transaction failed");51        }52      });53    } catch (e) {54      console.log("Error: ", e);55      reject(e);56    }57  });58}5960export function submitTransactionExpectFailAsync(sender: IKeyringPair, transaction: SubmittableExtrinsic<ApiTypes>): Promise<EventRecord[]> {61  return new Promise(async function(resolve, reject) {62    try {63      await transaction.signAndSend(sender, ({ events = [], status }) => {64        if (status.isReady) {65          // nothing to do66          // console.log(`Current tx status is Ready`);67        } else if (status.isBroadcast) {68          // nothing to do69          // console.log(`Current tx status is Broadcast`);70        } else if (status.isInBlock || status.isFinalized) {71          resolve(events);72        } else {73          reject("Transaction failed");74        }75      });76    } catch (e) {77      reject(e);78    }79  });80}