All files / src/contracts/prices sample-run.ts

9.52% Statements 2/21
0% Branches 0/2
0% Functions 0/4
9.52% Lines 2/21

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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 573x               3x                                                                                                
import { BigNumber, BigNumberish } from "ethers";
import { ContractParamsProvider } from "../ContractParamsProvider";
import { IContractConnector } from "../IContractConnector";
import { IPriceFeedContractAdapter } from "./IPriceFeedContractAdapter";
import { IPricesContractAdapter } from "./IPricesContractAdapter";
 
/* eslint-disable @typescript-eslint/restrict-template-expressions */
 
export async function sampleRun(
  paramsProvider: ContractParamsProvider,
  pricesConnector: IContractConnector<IPricesContractAdapter>,
  ethFeedConnector?: IContractConnector<IPriceFeedContractAdapter>,
  refreshStateCallback = async () => {}
) {
  const pricesAdapter = await pricesConnector.getAdapter();
  const coreValues = await pricesAdapter.getPricesFromPayload(paramsProvider);
  console.log(`Core values: ${coreValues.map(convertValue)}`);
 
  const deployHash = (await pricesAdapter.writePricesFromPayloadToContract(
    paramsProvider
  )) as string;
 
  await pricesConnector.waitForTransaction(deployHash);
  console.log(`Values written to contract with ${deployHash}`);
 
  await refreshStateCallback();
  console.log(`Block number: ${await pricesConnector.getBlockNumber()}`);
 
  const values = await pricesAdapter.readPricesFromContract(paramsProvider);
 
  console.log(`Values read from contract: ${values.map(convertValue)}`);
  const readTimestamp = await pricesAdapter.readTimestampFromContract();
  console.log(
    `Timestamp read from contract: ${readTimestamp} (${describeTimestamp(readTimestamp)})`
  );
 
  Iif (!ethFeedConnector) {
    return;
  }
 
  const feedAdapter = await ethFeedConnector.getAdapter();
 
  const { value, timestamp } = await feedAdapter.getPriceAndTimestamp();
 
  console.log(
    `ETH price: $${convertValue(value)} (${describeTimestamp(timestamp)})`
  );
}
 
function convertValue(v: BigNumberish) {
  return BigNumber.from(v).toNumber() / 10 ** 8;
}
 
function describeTimestamp(timestamp: number) {
  return `${(Date.now() - timestamp) / 1000} sec. ago`;
}