createSignedTx.ts 921 B
Newer Older
Amaury Martiny's avatar
Amaury Martiny committed
import { createType, Metadata, TypeRegistry } from '@polkadot/types';

import { UnsignedTransaction } from './balanceTransfer';

/**
Amaury Martiny's avatar
Amaury Martiny committed
 * Serialize a signed transaction in a format that can be submitted over the
 * Node RPC Interface from the signing payload and signature produced by the
 * remote signer

 *
 * @param unsigned - The JSON representing the unsigned transaction
Amaury Martiny's avatar
Amaury Martiny committed
 * @param signature - Signature of the signing payload produced by the remote
 * signer
 */
export function createSignedTx(
  unsigned: UnsignedTransaction,
Amaury Martiny's avatar
Amaury Martiny committed
  signature: string,
  metadataRpc: string
): string {
  const registry = new TypeRegistry();
Amaury Martiny's avatar
Amaury Martiny committed
  registry.setMetadata(new Metadata(registry, metadataRpc));

  const extrinsic = createType(
    registry,
    'Extrinsic',
    { method: unsigned.method },
    { version: unsigned.version }
  );

  extrinsic.addSignature(unsigned.address, signature, unsigned);

  return extrinsic.toHex();
}