All files / app/hooks use-create-software-contract-call-tx.ts

0% Statements 0/18
0% Branches 0/2
0% Functions 0/3
0% Lines 0/15

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38                                                                           
import {
  ContractCallOptions,
  makeContractCall,
  TransactionSigner,
  createStacksPrivateKey,
} from '@stacks/transactions';
import { RootState } from '@store/index';
import { selectCoreNodeInfo, selectPoxInfo } from '@store/stacking';
import { useCallback } from 'react';
import { useSelector } from 'react-redux';
 
interface UseCreateSoftwareTxArgs {
  txOptions: ContractCallOptions;
  privateKey: string;
}
 
export function useCreateSoftwareContractCallTx() {
  const { poxInfo, coreNodeInfo } = useSelector((state: RootState) => ({
    poxInfo: selectPoxInfo(state),
    coreNodeInfo: selectCoreNodeInfo(state),
  }));
 
  const createSoftwareContractCallTx = useCallback(
    async (args: UseCreateSoftwareTxArgs) => {
      const { txOptions, privateKey } = args;
      Iif (!coreNodeInfo) throw new Error('Stacking requires coreNodeInfo');
      Iif (!poxInfo) throw new Error('`poxInfo` or `blockstackApp` is not defined');
      const tx = await makeContractCall({ ...txOptions, senderKey: privateKey });
      const signer = new TransactionSigner(tx);
      signer.signOrigin(createStacksPrivateKey(privateKey));
      return tx;
    },
    [coreNodeInfo, poxInfo]
  );
 
  return { createSoftwareContractCallTx };
}