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

difftreelog

source

tests/src/substrate/substrate-api.ts1.9 KiBsourcehistory
1import { WsProvider, ApiPromise } from "@polkadot/api";2import type { AccountId, Address, ApplyExtrinsicResult, DispatchError, DispatchInfo, EventRecord, Extrinsic, ExtrinsicStatus, Hash, RuntimeDispatchInfo } from '@polkadot/types/interfaces';3import { IKeyringPair } from "@polkadot/types/types";45import config from "../config";6import promisifySubstrate from "./promisify-substrate";7import { ApiOptions, SubmittableExtrinsic, ApiTypes } from "@polkadot/api/types";8import rtt from "../../../runtime_types.json";910function defaultApiOptions(): ApiOptions {11  const wsProvider = new WsProvider(config.substrateUrl);12  return { provider: wsProvider, types: rtt };13}1415export default async function usingApi(action: (api: ApiPromise) => Promise<void>, settings: ApiOptions | undefined = undefined): Promise<void> {16  settings = settings || defaultApiOptions();17  let api: ApiPromise = new ApiPromise(settings);1819  try {20    await promisifySubstrate(api, async () => {21      if(api) {22        await api.isReadyOrError;23        await action(api);24      }25    })();26  } finally {27    await api.disconnect();28  }29}3031export function submitTransactionAsync(sender: IKeyringPair, transaction: SubmittableExtrinsic<ApiTypes>): Promise<EventRecord[]> {32  return new Promise(async function(resolve, reject) {33    try {34      await transaction.signAndSend(sender, ({ events = [], status }) => {35        if (status.isReady) {36          // nothing to do37          // console.log(`Current tx status is Ready`);38        } else if (status.isBroadcast) {39          // nothing to do40          // console.log(`Current tx status is Broadcast`);41        } else if (status.isInBlock || status.isFinalized) {42          resolve(events);43        } else {44          console.log(`Something went wrong with transaction. Status: ${status}`);45          reject("Transaction failed");46        }47      });48    } catch (e) {49      console.log("Error: ", e);50      reject(e);51    }52  });53}