@xyo-network/gas-price-plugin 5.3.1 → 5.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,10 +4,10 @@ import { EthereumGasSchema as EthereumGasSchema2 } from "@xyo-network/gas-price-
4
4
 
5
5
  // src/lib/divineGas.ts
6
6
  import { EthereumGasSchema } from "@xyo-network/gas-price-payload-plugin";
7
- import { PayloadBuilder } from "@xyo-network/payload-builder";
7
+ import { PayloadBuilder } from "@xyo-network/sdk-js";
8
8
 
9
9
  // src/lib/average.ts
10
- import { exists } from "@xylabs/exists";
10
+ import { exists } from "@xylabs/sdk-js";
11
11
  var listAverage = (x) => x?.length ? x.reduce((a, b) => a + b) / x.length : void 0;
12
12
  var averageProperty = (data, propertyExpression) => {
13
13
  return listAverage(data.map(propertyExpression).filter(exists));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/Diviner.ts","../../src/lib/divineGas.ts","../../src/lib/average.ts","../../src/lib/identities/isEthereumGasBlocknativePayload.ts","../../src/lib/identities/isEthereumGasEtherchainV2Payload.ts","../../src/lib/identities/isEthereumGasEtherscanPayload.ts","../../src/lib/identities/isEthereumGasEthersPayload.ts","../../src/lib/identities/isEthereumGasEthgasstationPayload.ts","../../src/lib/transforms/transformGasFromBlocknative.ts","../../src/lib/transforms/transformGasFromEtherchainV2.ts","../../src/lib/transforms/transformGasFromEthers.ts","../../src/lib/transforms/transformGasFromEtherscan.ts","../../src/lib/transforms/transformGasFromEthgasstation.ts","../../src/Schema.ts","../../src/Plugin.ts"],"sourcesContent":["import { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport type {\n DivinerConfig, DivinerModule, DivinerParams,\n} from '@xyo-network/diviner-model'\nimport { EthereumGasSchema } from '@xyo-network/gas-price-payload-plugin'\nimport type { AnyConfigSchema } from '@xyo-network/module-model'\nimport type { Payload, Schema } from '@xyo-network/payload-model'\n\nimport { divineGas } from './lib/index.ts'\nimport { EthereumGasDivinerConfigSchema } from './Schema.ts'\n\nexport type EthereumGasDivinerConfig = DivinerConfig<{ schema: EthereumGasDivinerConfigSchema }>\nexport type EthereumGasDivinerParams = DivinerParams<AnyConfigSchema<EthereumGasDivinerConfig>>\n\nexport class EthereumGasDiviner<TParams extends EthereumGasDivinerParams = EthereumGasDivinerParams>\n extends AbstractDiviner<TParams>\n implements DivinerModule {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, EthereumGasDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = EthereumGasDivinerConfigSchema\n static override readonly targetSchema: Schema = EthereumGasSchema\n\n protected override divineHandler(payloads?: Payload[]): Payload[] {\n const cost = divineGas(payloads ?? [])\n return [cost]\n }\n}\n","import type { EthereumGasPayload, FeeData } from '@xyo-network/gas-price-payload-plugin'\nimport { EthereumGasSchema } from '@xyo-network/gas-price-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\n\nimport { average } from './average.ts'\nimport {\n isEthereumGasBlocknativePayload,\n isEthereumGasEtherchainV2Payload,\n isEthereumGasEtherscanPayload,\n isEthereumGasEthersPayload,\n isEthereumGasEthgasstationPayload,\n} from './identities/index.ts'\nimport {\n transformGasFromBlocknative,\n transformGasFromEtherchainV2,\n transformGasFromEthers,\n transformGasFromEtherscan,\n transformGasFromEthgasstation,\n} from './transforms/index.ts'\n\nexport const divineGas = (payloads: Payload[]): EthereumGasPayload => {\n const blocknative = payloads.filter(isEthereumGasBlocknativePayload).map(transformGasFromBlocknative)\n const etherchainV2 = payloads.filter(isEthereumGasEtherchainV2Payload).map(transformGasFromEtherchainV2)\n const ethers = payloads.filter(isEthereumGasEthersPayload).map(transformGasFromEthers)\n const etherscan = payloads.filter(isEthereumGasEtherscanPayload).map(transformGasFromEtherscan)\n const ethgasstation = payloads.filter(isEthereumGasEthgasstationPayload).map(transformGasFromEthgasstation)\n const transactionCosts: FeeData[] = [...blocknative, ...etherchainV2, ...ethers, ...etherscan, ...ethgasstation]\n const avg = average(transactionCosts)\n const timestamp = Date.now()\n const payload = new PayloadBuilder<EthereumGasPayload>({ schema: EthereumGasSchema }).fields({ ...avg, timestamp }).build()\n return payload\n}\n","import { exists } from '@xylabs/exists'\nimport type { FeeData } from '@xyo-network/gas-price-payload-plugin'\n\n/**\n * Averages an array of numbers\n * @param x Averages an array of numbers\n * @returns The average of the array of numbers or undefined if the\n * array is empty or undefined\n */\n\nconst listAverage = (x?: number[]) => (x?.length ? x.reduce((a, b) => a + b) / x.length : undefined)\n\n/**\n * Averages the property indicates by the supplied property\n * expression across the array of FeeData\n * @param data The array of data to average\n * @param propertyExpression The expression for the property to\n * average\n * @returns The average of the supplied property across the array\n */\nconst averageProperty = (data: FeeData[], propertyExpression: (x: FeeData) => number | undefined) => {\n return listAverage(data.map(propertyExpression).filter(exists))\n}\n\n/**\n * Averages the supplied FeeData\n * @param input An array of FeeData or undefined\n * @returns The average of the supplied FeeData\n */\nexport const average = (input?: (FeeData | undefined)[]): FeeData => {\n const data = input?.filter(exists) || []\n const averaged: FeeData = {\n baseFee: averageProperty(data, x => x.baseFee),\n feePerGas: {\n high: averageProperty(data, x => x.feePerGas.high),\n low: averageProperty(data, x => x.feePerGas.low),\n medium: averageProperty(data, x => x.feePerGas.medium),\n veryHigh: averageProperty(data, x => x.feePerGas.veryHigh),\n },\n priorityFeePerGas: {\n high: averageProperty(data, x => x.priorityFeePerGas.high),\n low: averageProperty(data, x => x.priorityFeePerGas.low),\n medium: averageProperty(data, x => x.priorityFeePerGas.medium),\n veryHigh: averageProperty(data, x => x.priorityFeePerGas.veryHigh),\n },\n }\n return averaged\n}\n","import type { EthereumGasBlocknativePayload } from '@xyo-network/blocknative-ethereum-gas-payload-plugin'\nimport { EthereumGasBlocknativeSchema } from '@xyo-network/blocknative-ethereum-gas-payload-plugin'\nimport type { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasBlocknativePayload = (payload?: Payload | null): payload is EthereumGasBlocknativePayload => {\n return payload?.schema === EthereumGasBlocknativeSchema\n}\n","import type { EthereumGasEtherchainV2Payload } from '@xyo-network/etherchain-gas-ethereum-blockchain-payload-plugins'\nimport { EthereumGasEtherchainV2Schema } from '@xyo-network/etherchain-gas-ethereum-blockchain-payload-plugins'\nimport type { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEtherchainV2Payload = (payload?: Payload | null): payload is EthereumGasEtherchainV2Payload => {\n return payload?.schema === EthereumGasEtherchainV2Schema\n}\n","import type { EthereumGasEtherscanPayload } from '@xyo-network/etherscan-ethereum-gas-payload-plugin'\nimport { EthereumGasEtherscanSchema } from '@xyo-network/etherscan-ethereum-gas-payload-plugin'\nimport type { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEtherscanPayload = (payload?: Payload | null): payload is EthereumGasEtherscanPayload => {\n return payload?.schema === EthereumGasEtherscanSchema\n}\n","import type { EthereumGasEthersPayload } from '@xyo-network/ethers-ethereum-gas-payload-plugin'\nimport { EthereumGasEthersSchema } from '@xyo-network/ethers-ethereum-gas-payload-plugin'\nimport type { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEthersPayload = (payload?: Payload | null): payload is EthereumGasEthersPayload => {\n return payload?.schema === EthereumGasEthersSchema\n}\n","import type { EthereumGasEthgasstationPayload } from '@xyo-network/ethgasstation-ethereum-gas-payload-plugin'\nimport { EthereumGasEthgasstationSchema } from '@xyo-network/ethgasstation-ethereum-gas-payload-plugin'\nimport type { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEthgasstationPayload = (payload?: Payload | null): payload is EthereumGasEthgasstationPayload => {\n return payload?.schema === EthereumGasEthgasstationSchema\n}\n","import type { EthereumGasBlocknativePayload } from '@xyo-network/blocknative-ethereum-gas-payload-plugin'\nimport type {\n FeeData, FeePerGas, PriorityFeePerGas,\n} from '@xyo-network/gas-price-payload-plugin'\nimport regression from 'regression'\n\nconst getBaseFee = (payload: EthereumGasBlocknativePayload): number | undefined => {\n return payload?.blockPrices?.[0]?.baseFeePerGas\n}\n\nconst getFeePerGas = (payload: EthereumGasBlocknativePayload): Partial<FeePerGas> => {\n const sorted = payload.blockPrices?.[0].estimatedPrices?.toSorted((a, b) => a.confidence - b.confidence)\n const trend = regression.linear([\n [0, sorted?.[0].price],\n [1, sorted?.[1].price],\n [2, sorted?.[2].price],\n [3, sorted?.[3].price],\n [4, sorted?.[4].price],\n ])\n const feePerGas: FeePerGas = {\n low: trend.predict(0.5)[1],\n medium: trend.predict(1.5)[1],\n high: trend.predict(2.5)[1],\n veryHigh: trend.predict(3.5)[1],\n }\n return feePerGas\n}\n\nconst getPriorityFeePerGas = (payload: EthereumGasBlocknativePayload): Partial<PriorityFeePerGas> => {\n const sorted = payload.blockPrices?.[0].estimatedPrices?.toSorted((a, b) => a.confidence - b.confidence)\n const trend = regression.linear([\n [0, sorted?.[0].maxPriorityFeePerGas],\n [1, sorted?.[1].maxPriorityFeePerGas],\n [2, sorted?.[2].maxPriorityFeePerGas],\n [3, sorted?.[3].maxPriorityFeePerGas],\n [4, sorted?.[4].maxPriorityFeePerGas],\n ])\n const priorityFeePerGas: PriorityFeePerGas = {\n low: trend.predict(0.5)[1],\n medium: trend.predict(1.5)[1],\n high: trend.predict(2.5)[1],\n veryHigh: trend.predict(3.5)[1],\n }\n return priorityFeePerGas\n}\n\nexport const transformGasFromBlocknative = (payload: EthereumGasBlocknativePayload): FeeData => {\n const baseFee = getBaseFee(payload)\n const feePerGas = getFeePerGas(payload)\n const priorityFeePerGas = getPriorityFeePerGas(payload)\n return {\n baseFee, feePerGas, priorityFeePerGas,\n }\n}\n","import type { EthereumGasEtherchainV2Payload } from '@xyo-network/etherchain-gas-ethereum-blockchain-payload-plugins'\nimport type { FeeData, FeePerGas } from '@xyo-network/gas-price-payload-plugin'\n\nconst getFeePerGas = (payload: EthereumGasEtherchainV2Payload): Partial<FeePerGas> => {\n const {\n slow, standard, fast, rapid,\n } = payload.data\n const low = slow / 1_000_000_000\n const medium = standard / 1_000_000_000\n const high = fast / 1_000_000_000\n const veryHigh = rapid / 1_000_000_000\n return {\n high, low, medium, veryHigh,\n }\n}\n\nexport const transformGasFromEtherchainV2 = (payload: EthereumGasEtherchainV2Payload): FeeData => {\n const baseFee = undefined\n const feePerGas = getFeePerGas(payload)\n const priorityFeePerGas = {}\n return {\n baseFee, feePerGas, priorityFeePerGas,\n }\n}\n","import type { EthereumGasEthersPayload } from '@xyo-network/ethers-ethereum-gas-payload-plugin'\nimport type {\n FeeData, FeePerGas, PriorityFeePerGas,\n} from '@xyo-network/gas-price-payload-plugin'\n\nconst getBaseFee = (payload: EthereumGasEthersPayload): number | undefined => {\n const { gasPrice } = payload\n return gasPrice ? gasPrice / 1_000_000_000 : undefined\n}\n\nconst getFeePerGas = (payload: EthereumGasEthersPayload): Partial<FeePerGas> => {\n const { maxFeePerGas } = payload\n const high = maxFeePerGas ? maxFeePerGas / 1_000_000_000 : undefined\n return { high }\n}\n\nconst getPriorityFeePerGas = (payload: EthereumGasEthersPayload): Partial<PriorityFeePerGas> => {\n const { maxPriorityFeePerGas } = payload\n const high = maxPriorityFeePerGas ? maxPriorityFeePerGas / 1_000_000_000 : undefined\n return { high }\n}\n\nexport const transformGasFromEthers = (payload: EthereumGasEthersPayload): FeeData => {\n const baseFee = getBaseFee(payload)\n const feePerGas = getFeePerGas(payload)\n const priorityFeePerGas = getPriorityFeePerGas(payload)\n return {\n baseFee, feePerGas, priorityFeePerGas,\n }\n}\n","import type { EthereumGasEtherscanPayload } from '@xyo-network/etherscan-ethereum-gas-payload-plugin'\nimport type { FeeData, FeePerGas } from '@xyo-network/gas-price-payload-plugin'\nimport regression from 'regression'\n\nconst getBaseFee = (payload: EthereumGasEtherscanPayload): number | undefined => {\n const { suggestBaseFee } = payload.result\n return Number.parseFloat(suggestBaseFee)\n}\n\nconst getFeePerGas = (payload: EthereumGasEtherscanPayload): Partial<FeePerGas> => {\n const {\n FastGasPrice, ProposeGasPrice, SafeGasPrice,\n } = payload.result\n const low = Number.parseFloat(SafeGasPrice)\n const medium = Number.parseFloat(ProposeGasPrice)\n const high = Number.parseFloat(FastGasPrice)\n const veryHigh = regression.linear([\n [0, low],\n [1, medium],\n [2, high],\n ]).predict(3)[1]\n return {\n high, low, medium, veryHigh,\n }\n}\n\nexport const transformGasFromEtherscan = (payload: EthereumGasEtherscanPayload): FeeData => {\n const baseFee = getBaseFee(payload)\n const feePerGas = getFeePerGas(payload)\n const priorityFeePerGas = {}\n return {\n baseFee, feePerGas, priorityFeePerGas,\n }\n}\n","import type { EthereumGasEthgasstationPayload } from '@xyo-network/ethgasstation-ethereum-gas-payload-plugin'\nimport type {\n FeeData, FeePerGas, PriorityFeePerGas,\n} from '@xyo-network/gas-price-payload-plugin'\nimport regression from 'regression'\n\nconst getBaseFee = (payload: EthereumGasEthgasstationPayload): number | undefined => {\n const { baseFee } = payload\n return baseFee\n}\n\nconst getFeePerGas = (payload: EthereumGasEthgasstationPayload): Partial<FeePerGas> => {\n const {\n standard: medium, fast: high, instant: veryHigh,\n } = payload.gasPrice\n const trend = regression.linear([\n [1, medium],\n [2, high],\n [3, veryHigh],\n ])\n const low = trend.predict(0)[1]\n return {\n low, medium, high, veryHigh,\n }\n}\n\nconst getPriorityFeePerGas = (payload: EthereumGasEthgasstationPayload): Partial<PriorityFeePerGas> => {\n const {\n standard: medium, fast: high, instant: veryHigh,\n } = payload.priorityFee\n const trend = regression.linear([\n [1, medium],\n [2, high],\n [3, veryHigh],\n ])\n const low = trend.predict(0)[1]\n return {\n low, medium, high, veryHigh,\n }\n}\n\nexport const transformGasFromEthgasstation = (payload: EthereumGasEthgasstationPayload): FeeData => {\n const baseFee = getBaseFee(payload)\n const feePerGas = getFeePerGas(payload)\n const priorityFeePerGas = getPriorityFeePerGas(payload)\n return {\n baseFee, feePerGas, priorityFeePerGas,\n }\n}\n","import { asSchema } from '@xyo-network/payload-model'\n\nexport type EthereumGasDivinerQuerySchema = typeof EthereumGasDivinerQuerySchema\nexport const EthereumGasDivinerQuerySchema = asSchema('network.xyo.blockchain.ethereum.gas.diviner.query', true)\n\nexport type EthereumGasDivinerConfigSchema = typeof EthereumGasDivinerConfigSchema\nexport const EthereumGasDivinerConfigSchema = asSchema('network.xyo.blockchain.ethereum.gas.diviner.config', true)\n","import { EthereumGasSchema } from '@xyo-network/gas-price-payload-plugin'\nimport { PayloadSetSchema } from '@xyo-network/payload-model'\nimport { createPayloadSetDivinerPlugin } from '@xyo-network/payloadset-plugin'\n\nimport { EthereumGasDiviner } from './Diviner.ts'\n\nexport const EthereumGasPlugin = () =>\n createPayloadSetDivinerPlugin<EthereumGasDiviner>(\n { required: { [EthereumGasSchema]: 1 }, schema: PayloadSetSchema },\n {\n diviner: async (params) => {\n return (await EthereumGasDiviner.create(params)) as EthereumGasDiviner\n },\n },\n )\n"],"mappings":"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","names":["EthereumGasSchema","getFeePerGas","getBaseFee","getFeePerGas","getPriorityFeePerGas","regression","getBaseFee","getFeePerGas","regression","getBaseFee","getFeePerGas","getPriorityFeePerGas","EthereumGasSchema","EthereumGasSchema","EthereumGasSchema"]}
1
+ {"version":3,"sources":["../../src/Diviner.ts","../../src/lib/divineGas.ts","../../src/lib/average.ts","../../src/lib/identities/isEthereumGasBlocknativePayload.ts","../../src/lib/identities/isEthereumGasEtherchainV2Payload.ts","../../src/lib/identities/isEthereumGasEtherscanPayload.ts","../../src/lib/identities/isEthereumGasEthersPayload.ts","../../src/lib/identities/isEthereumGasEthgasstationPayload.ts","../../src/lib/transforms/transformGasFromBlocknative.ts","../../src/lib/transforms/transformGasFromEtherchainV2.ts","../../src/lib/transforms/transformGasFromEthers.ts","../../src/lib/transforms/transformGasFromEtherscan.ts","../../src/lib/transforms/transformGasFromEthgasstation.ts","../../src/Schema.ts","../../src/Plugin.ts"],"sourcesContent":["import { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport type {\n DivinerConfig, DivinerModule, DivinerParams,\n} from '@xyo-network/diviner-model'\nimport { EthereumGasSchema } from '@xyo-network/gas-price-payload-plugin'\nimport type { AnyConfigSchema } from '@xyo-network/module-model'\nimport type { Payload, Schema } from '@xyo-network/payload-model'\n\nimport { divineGas } from './lib/index.ts'\nimport { EthereumGasDivinerConfigSchema } from './Schema.ts'\n\nexport type EthereumGasDivinerConfig = DivinerConfig<{ schema: EthereumGasDivinerConfigSchema }>\nexport type EthereumGasDivinerParams = DivinerParams<AnyConfigSchema<EthereumGasDivinerConfig>>\n\nexport class EthereumGasDiviner<TParams extends EthereumGasDivinerParams = EthereumGasDivinerParams>\n extends AbstractDiviner<TParams>\n implements DivinerModule {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, EthereumGasDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = EthereumGasDivinerConfigSchema\n static override readonly targetSchema: Schema = EthereumGasSchema\n\n protected override divineHandler(payloads?: Payload[]): Payload[] {\n const cost = divineGas(payloads ?? [])\n return [cost]\n }\n}\n","import type { EthereumGasPayload, FeeData } from '@xyo-network/gas-price-payload-plugin'\nimport { EthereumGasSchema } from '@xyo-network/gas-price-payload-plugin'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { PayloadBuilder } from '@xyo-network/sdk-js'\n\nimport { average } from './average.ts'\nimport {\n isEthereumGasBlocknativePayload,\n isEthereumGasEtherchainV2Payload,\n isEthereumGasEtherscanPayload,\n isEthereumGasEthersPayload,\n isEthereumGasEthgasstationPayload,\n} from './identities/index.ts'\nimport {\n transformGasFromBlocknative,\n transformGasFromEtherchainV2,\n transformGasFromEthers,\n transformGasFromEtherscan,\n transformGasFromEthgasstation,\n} from './transforms/index.ts'\n\nexport const divineGas = (payloads: Payload[]): EthereumGasPayload => {\n const blocknative = payloads.filter(isEthereumGasBlocknativePayload).map(transformGasFromBlocknative)\n const etherchainV2 = payloads.filter(isEthereumGasEtherchainV2Payload).map(transformGasFromEtherchainV2)\n const ethers = payloads.filter(isEthereumGasEthersPayload).map(transformGasFromEthers)\n const etherscan = payloads.filter(isEthereumGasEtherscanPayload).map(transformGasFromEtherscan)\n const ethgasstation = payloads.filter(isEthereumGasEthgasstationPayload).map(transformGasFromEthgasstation)\n const transactionCosts: FeeData[] = [...blocknative, ...etherchainV2, ...ethers, ...etherscan, ...ethgasstation]\n const avg = average(transactionCosts)\n const timestamp = Date.now()\n const payload = new PayloadBuilder<EthereumGasPayload>({ schema: EthereumGasSchema }).fields({ ...avg, timestamp }).build()\n return payload\n}\n","import { exists } from '@xylabs/sdk-js'\nimport type { FeeData } from '@xyo-network/gas-price-payload-plugin'\n\n/**\n * Averages an array of numbers\n * @param x Averages an array of numbers\n * @returns The average of the array of numbers or undefined if the\n * array is empty or undefined\n */\n\nconst listAverage = (x?: number[]) => (x?.length ? x.reduce((a, b) => a + b) / x.length : undefined)\n\n/**\n * Averages the property indicates by the supplied property\n * expression across the array of FeeData\n * @param data The array of data to average\n * @param propertyExpression The expression for the property to\n * average\n * @returns The average of the supplied property across the array\n */\nconst averageProperty = (data: FeeData[], propertyExpression: (x: FeeData) => number | undefined) => {\n return listAverage(data.map(propertyExpression).filter(exists))\n}\n\n/**\n * Averages the supplied FeeData\n * @param input An array of FeeData or undefined\n * @returns The average of the supplied FeeData\n */\nexport const average = (input?: (FeeData | undefined)[]): FeeData => {\n const data = input?.filter(exists) || []\n const averaged: FeeData = {\n baseFee: averageProperty(data, x => x.baseFee),\n feePerGas: {\n high: averageProperty(data, x => x.feePerGas.high),\n low: averageProperty(data, x => x.feePerGas.low),\n medium: averageProperty(data, x => x.feePerGas.medium),\n veryHigh: averageProperty(data, x => x.feePerGas.veryHigh),\n },\n priorityFeePerGas: {\n high: averageProperty(data, x => x.priorityFeePerGas.high),\n low: averageProperty(data, x => x.priorityFeePerGas.low),\n medium: averageProperty(data, x => x.priorityFeePerGas.medium),\n veryHigh: averageProperty(data, x => x.priorityFeePerGas.veryHigh),\n },\n }\n return averaged\n}\n","import type { EthereumGasBlocknativePayload } from '@xyo-network/blocknative-ethereum-gas-payload-plugin'\nimport { EthereumGasBlocknativeSchema } from '@xyo-network/blocknative-ethereum-gas-payload-plugin'\nimport type { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasBlocknativePayload = (payload?: Payload | null): payload is EthereumGasBlocknativePayload => {\n return payload?.schema === EthereumGasBlocknativeSchema\n}\n","import type { EthereumGasEtherchainV2Payload } from '@xyo-network/etherchain-gas-ethereum-blockchain-payload-plugins'\nimport { EthereumGasEtherchainV2Schema } from '@xyo-network/etherchain-gas-ethereum-blockchain-payload-plugins'\nimport type { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEtherchainV2Payload = (payload?: Payload | null): payload is EthereumGasEtherchainV2Payload => {\n return payload?.schema === EthereumGasEtherchainV2Schema\n}\n","import type { EthereumGasEtherscanPayload } from '@xyo-network/etherscan-ethereum-gas-payload-plugin'\nimport { EthereumGasEtherscanSchema } from '@xyo-network/etherscan-ethereum-gas-payload-plugin'\nimport type { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEtherscanPayload = (payload?: Payload | null): payload is EthereumGasEtherscanPayload => {\n return payload?.schema === EthereumGasEtherscanSchema\n}\n","import type { EthereumGasEthersPayload } from '@xyo-network/ethers-ethereum-gas-payload-plugin'\nimport { EthereumGasEthersSchema } from '@xyo-network/ethers-ethereum-gas-payload-plugin'\nimport type { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEthersPayload = (payload?: Payload | null): payload is EthereumGasEthersPayload => {\n return payload?.schema === EthereumGasEthersSchema\n}\n","import type { EthereumGasEthgasstationPayload } from '@xyo-network/ethgasstation-ethereum-gas-payload-plugin'\nimport { EthereumGasEthgasstationSchema } from '@xyo-network/ethgasstation-ethereum-gas-payload-plugin'\nimport type { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEthgasstationPayload = (payload?: Payload | null): payload is EthereumGasEthgasstationPayload => {\n return payload?.schema === EthereumGasEthgasstationSchema\n}\n","import type { EthereumGasBlocknativePayload } from '@xyo-network/blocknative-ethereum-gas-payload-plugin'\nimport type {\n FeeData, FeePerGas, PriorityFeePerGas,\n} from '@xyo-network/gas-price-payload-plugin'\nimport regression from 'regression'\n\nconst getBaseFee = (payload: EthereumGasBlocknativePayload): number | undefined => {\n return payload?.blockPrices?.[0]?.baseFeePerGas\n}\n\nconst getFeePerGas = (payload: EthereumGasBlocknativePayload): Partial<FeePerGas> => {\n const sorted = payload.blockPrices?.[0].estimatedPrices?.toSorted((a, b) => a.confidence - b.confidence)\n const trend = regression.linear([\n [0, sorted?.[0].price],\n [1, sorted?.[1].price],\n [2, sorted?.[2].price],\n [3, sorted?.[3].price],\n [4, sorted?.[4].price],\n ])\n const feePerGas: FeePerGas = {\n low: trend.predict(0.5)[1],\n medium: trend.predict(1.5)[1],\n high: trend.predict(2.5)[1],\n veryHigh: trend.predict(3.5)[1],\n }\n return feePerGas\n}\n\nconst getPriorityFeePerGas = (payload: EthereumGasBlocknativePayload): Partial<PriorityFeePerGas> => {\n const sorted = payload.blockPrices?.[0].estimatedPrices?.toSorted((a, b) => a.confidence - b.confidence)\n const trend = regression.linear([\n [0, sorted?.[0].maxPriorityFeePerGas],\n [1, sorted?.[1].maxPriorityFeePerGas],\n [2, sorted?.[2].maxPriorityFeePerGas],\n [3, sorted?.[3].maxPriorityFeePerGas],\n [4, sorted?.[4].maxPriorityFeePerGas],\n ])\n const priorityFeePerGas: PriorityFeePerGas = {\n low: trend.predict(0.5)[1],\n medium: trend.predict(1.5)[1],\n high: trend.predict(2.5)[1],\n veryHigh: trend.predict(3.5)[1],\n }\n return priorityFeePerGas\n}\n\nexport const transformGasFromBlocknative = (payload: EthereumGasBlocknativePayload): FeeData => {\n const baseFee = getBaseFee(payload)\n const feePerGas = getFeePerGas(payload)\n const priorityFeePerGas = getPriorityFeePerGas(payload)\n return {\n baseFee, feePerGas, priorityFeePerGas,\n }\n}\n","import type { EthereumGasEtherchainV2Payload } from '@xyo-network/etherchain-gas-ethereum-blockchain-payload-plugins'\nimport type { FeeData, FeePerGas } from '@xyo-network/gas-price-payload-plugin'\n\nconst getFeePerGas = (payload: EthereumGasEtherchainV2Payload): Partial<FeePerGas> => {\n const {\n slow, standard, fast, rapid,\n } = payload.data\n const low = slow / 1_000_000_000\n const medium = standard / 1_000_000_000\n const high = fast / 1_000_000_000\n const veryHigh = rapid / 1_000_000_000\n return {\n high, low, medium, veryHigh,\n }\n}\n\nexport const transformGasFromEtherchainV2 = (payload: EthereumGasEtherchainV2Payload): FeeData => {\n const baseFee = undefined\n const feePerGas = getFeePerGas(payload)\n const priorityFeePerGas = {}\n return {\n baseFee, feePerGas, priorityFeePerGas,\n }\n}\n","import type { EthereumGasEthersPayload } from '@xyo-network/ethers-ethereum-gas-payload-plugin'\nimport type {\n FeeData, FeePerGas, PriorityFeePerGas,\n} from '@xyo-network/gas-price-payload-plugin'\n\nconst getBaseFee = (payload: EthereumGasEthersPayload): number | undefined => {\n const { gasPrice } = payload\n return gasPrice ? gasPrice / 1_000_000_000 : undefined\n}\n\nconst getFeePerGas = (payload: EthereumGasEthersPayload): Partial<FeePerGas> => {\n const { maxFeePerGas } = payload\n const high = maxFeePerGas ? maxFeePerGas / 1_000_000_000 : undefined\n return { high }\n}\n\nconst getPriorityFeePerGas = (payload: EthereumGasEthersPayload): Partial<PriorityFeePerGas> => {\n const { maxPriorityFeePerGas } = payload\n const high = maxPriorityFeePerGas ? maxPriorityFeePerGas / 1_000_000_000 : undefined\n return { high }\n}\n\nexport const transformGasFromEthers = (payload: EthereumGasEthersPayload): FeeData => {\n const baseFee = getBaseFee(payload)\n const feePerGas = getFeePerGas(payload)\n const priorityFeePerGas = getPriorityFeePerGas(payload)\n return {\n baseFee, feePerGas, priorityFeePerGas,\n }\n}\n","import type { EthereumGasEtherscanPayload } from '@xyo-network/etherscan-ethereum-gas-payload-plugin'\nimport type { FeeData, FeePerGas } from '@xyo-network/gas-price-payload-plugin'\nimport regression from 'regression'\n\nconst getBaseFee = (payload: EthereumGasEtherscanPayload): number | undefined => {\n const { suggestBaseFee } = payload.result\n return Number.parseFloat(suggestBaseFee)\n}\n\nconst getFeePerGas = (payload: EthereumGasEtherscanPayload): Partial<FeePerGas> => {\n const {\n FastGasPrice, ProposeGasPrice, SafeGasPrice,\n } = payload.result\n const low = Number.parseFloat(SafeGasPrice)\n const medium = Number.parseFloat(ProposeGasPrice)\n const high = Number.parseFloat(FastGasPrice)\n const veryHigh = regression.linear([\n [0, low],\n [1, medium],\n [2, high],\n ]).predict(3)[1]\n return {\n high, low, medium, veryHigh,\n }\n}\n\nexport const transformGasFromEtherscan = (payload: EthereumGasEtherscanPayload): FeeData => {\n const baseFee = getBaseFee(payload)\n const feePerGas = getFeePerGas(payload)\n const priorityFeePerGas = {}\n return {\n baseFee, feePerGas, priorityFeePerGas,\n }\n}\n","import type { EthereumGasEthgasstationPayload } from '@xyo-network/ethgasstation-ethereum-gas-payload-plugin'\nimport type {\n FeeData, FeePerGas, PriorityFeePerGas,\n} from '@xyo-network/gas-price-payload-plugin'\nimport regression from 'regression'\n\nconst getBaseFee = (payload: EthereumGasEthgasstationPayload): number | undefined => {\n const { baseFee } = payload\n return baseFee\n}\n\nconst getFeePerGas = (payload: EthereumGasEthgasstationPayload): Partial<FeePerGas> => {\n const {\n standard: medium, fast: high, instant: veryHigh,\n } = payload.gasPrice\n const trend = regression.linear([\n [1, medium],\n [2, high],\n [3, veryHigh],\n ])\n const low = trend.predict(0)[1]\n return {\n low, medium, high, veryHigh,\n }\n}\n\nconst getPriorityFeePerGas = (payload: EthereumGasEthgasstationPayload): Partial<PriorityFeePerGas> => {\n const {\n standard: medium, fast: high, instant: veryHigh,\n } = payload.priorityFee\n const trend = regression.linear([\n [1, medium],\n [2, high],\n [3, veryHigh],\n ])\n const low = trend.predict(0)[1]\n return {\n low, medium, high, veryHigh,\n }\n}\n\nexport const transformGasFromEthgasstation = (payload: EthereumGasEthgasstationPayload): FeeData => {\n const baseFee = getBaseFee(payload)\n const feePerGas = getFeePerGas(payload)\n const priorityFeePerGas = getPriorityFeePerGas(payload)\n return {\n baseFee, feePerGas, priorityFeePerGas,\n }\n}\n","import { asSchema } from '@xyo-network/payload-model'\n\nexport type EthereumGasDivinerQuerySchema = typeof EthereumGasDivinerQuerySchema\nexport const EthereumGasDivinerQuerySchema = asSchema('network.xyo.blockchain.ethereum.gas.diviner.query', true)\n\nexport type EthereumGasDivinerConfigSchema = typeof EthereumGasDivinerConfigSchema\nexport const EthereumGasDivinerConfigSchema = asSchema('network.xyo.blockchain.ethereum.gas.diviner.config', true)\n","import { EthereumGasSchema } from '@xyo-network/gas-price-payload-plugin'\nimport { PayloadSetSchema } from '@xyo-network/payload-model'\nimport { createPayloadSetDivinerPlugin } from '@xyo-network/payloadset-plugin'\n\nimport { EthereumGasDiviner } from './Diviner.ts'\n\nexport const EthereumGasPlugin = () =>\n createPayloadSetDivinerPlugin<EthereumGasDiviner>(\n { required: { [EthereumGasSchema]: 1 }, schema: PayloadSetSchema },\n {\n diviner: async (params) => {\n return (await EthereumGasDiviner.create(params)) as EthereumGasDiviner\n },\n },\n )\n"],"mappings":"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","names":["EthereumGasSchema","getFeePerGas","getBaseFee","getFeePerGas","getPriorityFeePerGas","regression","getBaseFee","getFeePerGas","regression","getBaseFee","getFeePerGas","getPriorityFeePerGas","EthereumGasSchema","EthereumGasSchema","EthereumGasSchema"]}
@@ -1 +1 @@
1
- {"version":3,"file":"divineGas.d.ts","sourceRoot":"","sources":["../../../src/lib/divineGas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAW,MAAM,uCAAuC,CAAA;AAGxF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAkBzD,eAAO,MAAM,SAAS,GAAI,UAAU,OAAO,EAAE,KAAG,kBAW/C,CAAA"}
1
+ {"version":3,"file":"divineGas.d.ts","sourceRoot":"","sources":["../../../src/lib/divineGas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAW,MAAM,uCAAuC,CAAA;AAExF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAmBzD,eAAO,MAAM,SAAS,GAAI,UAAU,OAAO,EAAE,KAAG,kBAW/C,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyo-network/gas-price-plugin",
3
- "version": "5.3.1",
3
+ "version": "5.3.3",
4
4
  "description": "Typescript/Javascript Plugins for XYO Platform",
5
5
  "homepage": "https://xyo.network",
6
6
  "bugs": {
@@ -30,39 +30,50 @@
30
30
  "types": "dist/neutral/index.d.ts",
31
31
  "files": [
32
32
  "dist",
33
- "src",
34
- "!**/*.bench.*",
35
- "!**/*.spec.*",
36
- "!**/*.test.*"
33
+ "README.md"
37
34
  ],
38
35
  "dependencies": {
39
- "@xylabs/exists": "~5.0.64",
40
- "@xyo-network/blocknative-ethereum-gas-payload-plugin": "5.3.1",
41
- "@xyo-network/diviner-abstract": "~5.3.2",
42
- "@xyo-network/diviner-model": "~5.3.2",
43
- "@xyo-network/etherchain-gas-ethereum-blockchain-payload-plugins": "5.3.1",
44
- "@xyo-network/ethers-ethereum-gas-payload-plugin": "5.3.1",
45
- "@xyo-network/etherscan-ethereum-gas-payload-plugin": "5.3.1",
46
- "@xyo-network/ethgasstation-ethereum-gas-payload-plugin": "5.3.1",
47
- "@xyo-network/gas-price-payload-plugin": "5.3.1",
48
- "@xyo-network/module-model": "~5.3.2",
49
- "@xyo-network/payload-builder": "~5.3.2",
50
- "@xyo-network/payload-model": "~5.3.2",
51
- "@xyo-network/payloadset-plugin": "~5.3.2",
52
- "regression": "~2.0.1"
36
+ "@xyo-network/blocknative-ethereum-gas-payload-plugin": "workspace:^",
37
+ "@xyo-network/etherchain-gas-ethereum-blockchain-payload-plugins": "workspace:^",
38
+ "@xyo-network/ethers-ethereum-gas-payload-plugin": "workspace:^",
39
+ "@xyo-network/etherscan-ethereum-gas-payload-plugin": "workspace:^",
40
+ "@xyo-network/ethgasstation-ethereum-gas-payload-plugin": "workspace:^",
41
+ "@xyo-network/gas-price-payload-plugin": "workspace:^"
53
42
  },
54
43
  "devDependencies": {
55
44
  "@types/regression": "~2.0.6",
56
- "@xylabs/ts-scripts-yarn3": "~7.3.2",
57
- "@xylabs/tsconfig": "~7.3.2",
58
- "@xylabs/vitest-extended": "~5.0.64",
59
- "@xyo-network/blocknative-ethereum-gas-plugin": "5.3.1",
60
- "@xyo-network/etherchain-gas-ethereum-blockchain-plugins": "5.3.1",
61
- "@xyo-network/ethers-ethereum-gas-plugin": "5.3.1",
62
- "@xyo-network/etherscan-ethereum-gas-plugin": "5.3.1",
63
- "@xyo-network/witness-blockchain-abstract": "~5.3.2",
45
+ "@xylabs/sdk-js": "^5.0.90",
46
+ "@xylabs/ts-scripts-common": "~7.5.10",
47
+ "@xylabs/ts-scripts-yarn3": "~7.5.10",
48
+ "@xylabs/tsconfig": "~7.5.10",
49
+ "@xylabs/vitest-extended": "~5.0.90",
50
+ "@xyo-network/blocknative-ethereum-gas-plugin": "5.3.3",
51
+ "@xyo-network/diviner-abstract": "~5.3.5",
52
+ "@xyo-network/diviner-model": "~5.3.5",
53
+ "@xyo-network/etherchain-gas-ethereum-blockchain-plugins": "5.3.3",
54
+ "@xyo-network/ethers-ethereum-gas-plugin": "5.3.3",
55
+ "@xyo-network/etherscan-ethereum-gas-plugin": "5.3.3",
56
+ "@xyo-network/module-model": "~5.3.5",
57
+ "@xyo-network/payload-model": "~5.3.5",
58
+ "@xyo-network/payloadset-plugin": "~5.3.5",
59
+ "@xyo-network/sdk-js": "~5.3.5",
60
+ "@xyo-network/witness-blockchain-abstract": "~5.3.5",
61
+ "ethers": "^6",
62
+ "regression": "~2.0.1",
64
63
  "typescript": "~5.9.3",
65
- "vitest": "~4.0.18"
64
+ "vitest": "~4.1.2",
65
+ "zod": "^4.3.6"
66
+ },
67
+ "peerDependencies": {
68
+ "@xylabs/sdk-js": "^5",
69
+ "@xyo-network/diviner-abstract": "^5",
70
+ "@xyo-network/diviner-model": "^5",
71
+ "@xyo-network/module-model": "^5",
72
+ "@xyo-network/payload-model": "^5",
73
+ "@xyo-network/payloadset-plugin": "^5",
74
+ "@xyo-network/sdk-js": "^5",
75
+ "regression": "^2",
76
+ "zod": "^4"
66
77
  },
67
78
  "publishConfig": {
68
79
  "access": "public"
package/src/Diviner.ts DELETED
@@ -1,26 +0,0 @@
1
- import { AbstractDiviner } from '@xyo-network/diviner-abstract'
2
- import type {
3
- DivinerConfig, DivinerModule, DivinerParams,
4
- } from '@xyo-network/diviner-model'
5
- import { EthereumGasSchema } from '@xyo-network/gas-price-payload-plugin'
6
- import type { AnyConfigSchema } from '@xyo-network/module-model'
7
- import type { Payload, Schema } from '@xyo-network/payload-model'
8
-
9
- import { divineGas } from './lib/index.ts'
10
- import { EthereumGasDivinerConfigSchema } from './Schema.ts'
11
-
12
- export type EthereumGasDivinerConfig = DivinerConfig<{ schema: EthereumGasDivinerConfigSchema }>
13
- export type EthereumGasDivinerParams = DivinerParams<AnyConfigSchema<EthereumGasDivinerConfig>>
14
-
15
- export class EthereumGasDiviner<TParams extends EthereumGasDivinerParams = EthereumGasDivinerParams>
16
- extends AbstractDiviner<TParams>
17
- implements DivinerModule {
18
- static override readonly configSchemas: Schema[] = [...super.configSchemas, EthereumGasDivinerConfigSchema]
19
- static override readonly defaultConfigSchema: Schema = EthereumGasDivinerConfigSchema
20
- static override readonly targetSchema: Schema = EthereumGasSchema
21
-
22
- protected override divineHandler(payloads?: Payload[]): Payload[] {
23
- const cost = divineGas(payloads ?? [])
24
- return [cost]
25
- }
26
- }
package/src/Plugin.ts DELETED
@@ -1,15 +0,0 @@
1
- import { EthereumGasSchema } from '@xyo-network/gas-price-payload-plugin'
2
- import { PayloadSetSchema } from '@xyo-network/payload-model'
3
- import { createPayloadSetDivinerPlugin } from '@xyo-network/payloadset-plugin'
4
-
5
- import { EthereumGasDiviner } from './Diviner.ts'
6
-
7
- export const EthereumGasPlugin = () =>
8
- createPayloadSetDivinerPlugin<EthereumGasDiviner>(
9
- { required: { [EthereumGasSchema]: 1 }, schema: PayloadSetSchema },
10
- {
11
- diviner: async (params) => {
12
- return (await EthereumGasDiviner.create(params)) as EthereumGasDiviner
13
- },
14
- },
15
- )
package/src/Schema.ts DELETED
@@ -1,7 +0,0 @@
1
- import { asSchema } from '@xyo-network/payload-model'
2
-
3
- export type EthereumGasDivinerQuerySchema = typeof EthereumGasDivinerQuerySchema
4
- export const EthereumGasDivinerQuerySchema = asSchema('network.xyo.blockchain.ethereum.gas.diviner.query', true)
5
-
6
- export type EthereumGasDivinerConfigSchema = typeof EthereumGasDivinerConfigSchema
7
- export const EthereumGasDivinerConfigSchema = asSchema('network.xyo.blockchain.ethereum.gas.diviner.config', true)
package/src/index.ts DELETED
@@ -1,3 +0,0 @@
1
- export * from './Diviner.ts'
2
- export { EthereumGasPlugin as default, EthereumGasPlugin } from './Plugin.ts'
3
- export * from './Schema.ts'
@@ -1,48 +0,0 @@
1
- import { exists } from '@xylabs/exists'
2
- import type { FeeData } from '@xyo-network/gas-price-payload-plugin'
3
-
4
- /**
5
- * Averages an array of numbers
6
- * @param x Averages an array of numbers
7
- * @returns The average of the array of numbers or undefined if the
8
- * array is empty or undefined
9
- */
10
-
11
- const listAverage = (x?: number[]) => (x?.length ? x.reduce((a, b) => a + b) / x.length : undefined)
12
-
13
- /**
14
- * Averages the property indicates by the supplied property
15
- * expression across the array of FeeData
16
- * @param data The array of data to average
17
- * @param propertyExpression The expression for the property to
18
- * average
19
- * @returns The average of the supplied property across the array
20
- */
21
- const averageProperty = (data: FeeData[], propertyExpression: (x: FeeData) => number | undefined) => {
22
- return listAverage(data.map(propertyExpression).filter(exists))
23
- }
24
-
25
- /**
26
- * Averages the supplied FeeData
27
- * @param input An array of FeeData or undefined
28
- * @returns The average of the supplied FeeData
29
- */
30
- export const average = (input?: (FeeData | undefined)[]): FeeData => {
31
- const data = input?.filter(exists) || []
32
- const averaged: FeeData = {
33
- baseFee: averageProperty(data, x => x.baseFee),
34
- feePerGas: {
35
- high: averageProperty(data, x => x.feePerGas.high),
36
- low: averageProperty(data, x => x.feePerGas.low),
37
- medium: averageProperty(data, x => x.feePerGas.medium),
38
- veryHigh: averageProperty(data, x => x.feePerGas.veryHigh),
39
- },
40
- priorityFeePerGas: {
41
- high: averageProperty(data, x => x.priorityFeePerGas.high),
42
- low: averageProperty(data, x => x.priorityFeePerGas.low),
43
- medium: averageProperty(data, x => x.priorityFeePerGas.medium),
44
- veryHigh: averageProperty(data, x => x.priorityFeePerGas.veryHigh),
45
- },
46
- }
47
- return averaged
48
- }
@@ -1,33 +0,0 @@
1
- import type { EthereumGasPayload, FeeData } from '@xyo-network/gas-price-payload-plugin'
2
- import { EthereumGasSchema } from '@xyo-network/gas-price-payload-plugin'
3
- import { PayloadBuilder } from '@xyo-network/payload-builder'
4
- import type { Payload } from '@xyo-network/payload-model'
5
-
6
- import { average } from './average.ts'
7
- import {
8
- isEthereumGasBlocknativePayload,
9
- isEthereumGasEtherchainV2Payload,
10
- isEthereumGasEtherscanPayload,
11
- isEthereumGasEthersPayload,
12
- isEthereumGasEthgasstationPayload,
13
- } from './identities/index.ts'
14
- import {
15
- transformGasFromBlocknative,
16
- transformGasFromEtherchainV2,
17
- transformGasFromEthers,
18
- transformGasFromEtherscan,
19
- transformGasFromEthgasstation,
20
- } from './transforms/index.ts'
21
-
22
- export const divineGas = (payloads: Payload[]): EthereumGasPayload => {
23
- const blocknative = payloads.filter(isEthereumGasBlocknativePayload).map(transformGasFromBlocknative)
24
- const etherchainV2 = payloads.filter(isEthereumGasEtherchainV2Payload).map(transformGasFromEtherchainV2)
25
- const ethers = payloads.filter(isEthereumGasEthersPayload).map(transformGasFromEthers)
26
- const etherscan = payloads.filter(isEthereumGasEtherscanPayload).map(transformGasFromEtherscan)
27
- const ethgasstation = payloads.filter(isEthereumGasEthgasstationPayload).map(transformGasFromEthgasstation)
28
- const transactionCosts: FeeData[] = [...blocknative, ...etherchainV2, ...ethers, ...etherscan, ...ethgasstation]
29
- const avg = average(transactionCosts)
30
- const timestamp = Date.now()
31
- const payload = new PayloadBuilder<EthereumGasPayload>({ schema: EthereumGasSchema }).fields({ ...avg, timestamp }).build()
32
- return payload
33
- }
@@ -1,5 +0,0 @@
1
- export * from './isEthereumGasBlocknativePayload.ts'
2
- export * from './isEthereumGasEtherchainV2Payload.ts'
3
- export * from './isEthereumGasEtherscanPayload.ts'
4
- export * from './isEthereumGasEthersPayload.ts'
5
- export * from './isEthereumGasEthgasstationPayload.ts'
@@ -1,7 +0,0 @@
1
- import type { EthereumGasBlocknativePayload } from '@xyo-network/blocknative-ethereum-gas-payload-plugin'
2
- import { EthereumGasBlocknativeSchema } from '@xyo-network/blocknative-ethereum-gas-payload-plugin'
3
- import type { Payload } from '@xyo-network/payload-model'
4
-
5
- export const isEthereumGasBlocknativePayload = (payload?: Payload | null): payload is EthereumGasBlocknativePayload => {
6
- return payload?.schema === EthereumGasBlocknativeSchema
7
- }
@@ -1,7 +0,0 @@
1
- import type { EthereumGasEtherchainV2Payload } from '@xyo-network/etherchain-gas-ethereum-blockchain-payload-plugins'
2
- import { EthereumGasEtherchainV2Schema } from '@xyo-network/etherchain-gas-ethereum-blockchain-payload-plugins'
3
- import type { Payload } from '@xyo-network/payload-model'
4
-
5
- export const isEthereumGasEtherchainV2Payload = (payload?: Payload | null): payload is EthereumGasEtherchainV2Payload => {
6
- return payload?.schema === EthereumGasEtherchainV2Schema
7
- }
@@ -1,7 +0,0 @@
1
- import type { EthereumGasEthersPayload } from '@xyo-network/ethers-ethereum-gas-payload-plugin'
2
- import { EthereumGasEthersSchema } from '@xyo-network/ethers-ethereum-gas-payload-plugin'
3
- import type { Payload } from '@xyo-network/payload-model'
4
-
5
- export const isEthereumGasEthersPayload = (payload?: Payload | null): payload is EthereumGasEthersPayload => {
6
- return payload?.schema === EthereumGasEthersSchema
7
- }
@@ -1,7 +0,0 @@
1
- import type { EthereumGasEtherscanPayload } from '@xyo-network/etherscan-ethereum-gas-payload-plugin'
2
- import { EthereumGasEtherscanSchema } from '@xyo-network/etherscan-ethereum-gas-payload-plugin'
3
- import type { Payload } from '@xyo-network/payload-model'
4
-
5
- export const isEthereumGasEtherscanPayload = (payload?: Payload | null): payload is EthereumGasEtherscanPayload => {
6
- return payload?.schema === EthereumGasEtherscanSchema
7
- }
@@ -1,7 +0,0 @@
1
- import type { EthereumGasEthgasstationPayload } from '@xyo-network/ethgasstation-ethereum-gas-payload-plugin'
2
- import { EthereumGasEthgasstationSchema } from '@xyo-network/ethgasstation-ethereum-gas-payload-plugin'
3
- import type { Payload } from '@xyo-network/payload-model'
4
-
5
- export const isEthereumGasEthgasstationPayload = (payload?: Payload | null): payload is EthereumGasEthgasstationPayload => {
6
- return payload?.schema === EthereumGasEthgasstationSchema
7
- }
package/src/lib/index.ts DELETED
@@ -1 +0,0 @@
1
- export * from './divineGas.ts'
@@ -1,5 +0,0 @@
1
- export * from './transformGasFromBlocknative.ts'
2
- export * from './transformGasFromEtherchainV2.ts'
3
- export * from './transformGasFromEthers.ts'
4
- export * from './transformGasFromEtherscan.ts'
5
- export * from './transformGasFromEthgasstation.ts'
@@ -1,54 +0,0 @@
1
- import type { EthereumGasBlocknativePayload } from '@xyo-network/blocknative-ethereum-gas-payload-plugin'
2
- import type {
3
- FeeData, FeePerGas, PriorityFeePerGas,
4
- } from '@xyo-network/gas-price-payload-plugin'
5
- import regression from 'regression'
6
-
7
- const getBaseFee = (payload: EthereumGasBlocknativePayload): number | undefined => {
8
- return payload?.blockPrices?.[0]?.baseFeePerGas
9
- }
10
-
11
- const getFeePerGas = (payload: EthereumGasBlocknativePayload): Partial<FeePerGas> => {
12
- const sorted = payload.blockPrices?.[0].estimatedPrices?.toSorted((a, b) => a.confidence - b.confidence)
13
- const trend = regression.linear([
14
- [0, sorted?.[0].price],
15
- [1, sorted?.[1].price],
16
- [2, sorted?.[2].price],
17
- [3, sorted?.[3].price],
18
- [4, sorted?.[4].price],
19
- ])
20
- const feePerGas: FeePerGas = {
21
- low: trend.predict(0.5)[1],
22
- medium: trend.predict(1.5)[1],
23
- high: trend.predict(2.5)[1],
24
- veryHigh: trend.predict(3.5)[1],
25
- }
26
- return feePerGas
27
- }
28
-
29
- const getPriorityFeePerGas = (payload: EthereumGasBlocknativePayload): Partial<PriorityFeePerGas> => {
30
- const sorted = payload.blockPrices?.[0].estimatedPrices?.toSorted((a, b) => a.confidence - b.confidence)
31
- const trend = regression.linear([
32
- [0, sorted?.[0].maxPriorityFeePerGas],
33
- [1, sorted?.[1].maxPriorityFeePerGas],
34
- [2, sorted?.[2].maxPriorityFeePerGas],
35
- [3, sorted?.[3].maxPriorityFeePerGas],
36
- [4, sorted?.[4].maxPriorityFeePerGas],
37
- ])
38
- const priorityFeePerGas: PriorityFeePerGas = {
39
- low: trend.predict(0.5)[1],
40
- medium: trend.predict(1.5)[1],
41
- high: trend.predict(2.5)[1],
42
- veryHigh: trend.predict(3.5)[1],
43
- }
44
- return priorityFeePerGas
45
- }
46
-
47
- export const transformGasFromBlocknative = (payload: EthereumGasBlocknativePayload): FeeData => {
48
- const baseFee = getBaseFee(payload)
49
- const feePerGas = getFeePerGas(payload)
50
- const priorityFeePerGas = getPriorityFeePerGas(payload)
51
- return {
52
- baseFee, feePerGas, priorityFeePerGas,
53
- }
54
- }
@@ -1,24 +0,0 @@
1
- import type { EthereumGasEtherchainV2Payload } from '@xyo-network/etherchain-gas-ethereum-blockchain-payload-plugins'
2
- import type { FeeData, FeePerGas } from '@xyo-network/gas-price-payload-plugin'
3
-
4
- const getFeePerGas = (payload: EthereumGasEtherchainV2Payload): Partial<FeePerGas> => {
5
- const {
6
- slow, standard, fast, rapid,
7
- } = payload.data
8
- const low = slow / 1_000_000_000
9
- const medium = standard / 1_000_000_000
10
- const high = fast / 1_000_000_000
11
- const veryHigh = rapid / 1_000_000_000
12
- return {
13
- high, low, medium, veryHigh,
14
- }
15
- }
16
-
17
- export const transformGasFromEtherchainV2 = (payload: EthereumGasEtherchainV2Payload): FeeData => {
18
- const baseFee = undefined
19
- const feePerGas = getFeePerGas(payload)
20
- const priorityFeePerGas = {}
21
- return {
22
- baseFee, feePerGas, priorityFeePerGas,
23
- }
24
- }
@@ -1,30 +0,0 @@
1
- import type { EthereumGasEthersPayload } from '@xyo-network/ethers-ethereum-gas-payload-plugin'
2
- import type {
3
- FeeData, FeePerGas, PriorityFeePerGas,
4
- } from '@xyo-network/gas-price-payload-plugin'
5
-
6
- const getBaseFee = (payload: EthereumGasEthersPayload): number | undefined => {
7
- const { gasPrice } = payload
8
- return gasPrice ? gasPrice / 1_000_000_000 : undefined
9
- }
10
-
11
- const getFeePerGas = (payload: EthereumGasEthersPayload): Partial<FeePerGas> => {
12
- const { maxFeePerGas } = payload
13
- const high = maxFeePerGas ? maxFeePerGas / 1_000_000_000 : undefined
14
- return { high }
15
- }
16
-
17
- const getPriorityFeePerGas = (payload: EthereumGasEthersPayload): Partial<PriorityFeePerGas> => {
18
- const { maxPriorityFeePerGas } = payload
19
- const high = maxPriorityFeePerGas ? maxPriorityFeePerGas / 1_000_000_000 : undefined
20
- return { high }
21
- }
22
-
23
- export const transformGasFromEthers = (payload: EthereumGasEthersPayload): FeeData => {
24
- const baseFee = getBaseFee(payload)
25
- const feePerGas = getFeePerGas(payload)
26
- const priorityFeePerGas = getPriorityFeePerGas(payload)
27
- return {
28
- baseFee, feePerGas, priorityFeePerGas,
29
- }
30
- }
@@ -1,34 +0,0 @@
1
- import type { EthereumGasEtherscanPayload } from '@xyo-network/etherscan-ethereum-gas-payload-plugin'
2
- import type { FeeData, FeePerGas } from '@xyo-network/gas-price-payload-plugin'
3
- import regression from 'regression'
4
-
5
- const getBaseFee = (payload: EthereumGasEtherscanPayload): number | undefined => {
6
- const { suggestBaseFee } = payload.result
7
- return Number.parseFloat(suggestBaseFee)
8
- }
9
-
10
- const getFeePerGas = (payload: EthereumGasEtherscanPayload): Partial<FeePerGas> => {
11
- const {
12
- FastGasPrice, ProposeGasPrice, SafeGasPrice,
13
- } = payload.result
14
- const low = Number.parseFloat(SafeGasPrice)
15
- const medium = Number.parseFloat(ProposeGasPrice)
16
- const high = Number.parseFloat(FastGasPrice)
17
- const veryHigh = regression.linear([
18
- [0, low],
19
- [1, medium],
20
- [2, high],
21
- ]).predict(3)[1]
22
- return {
23
- high, low, medium, veryHigh,
24
- }
25
- }
26
-
27
- export const transformGasFromEtherscan = (payload: EthereumGasEtherscanPayload): FeeData => {
28
- const baseFee = getBaseFee(payload)
29
- const feePerGas = getFeePerGas(payload)
30
- const priorityFeePerGas = {}
31
- return {
32
- baseFee, feePerGas, priorityFeePerGas,
33
- }
34
- }
@@ -1,49 +0,0 @@
1
- import type { EthereumGasEthgasstationPayload } from '@xyo-network/ethgasstation-ethereum-gas-payload-plugin'
2
- import type {
3
- FeeData, FeePerGas, PriorityFeePerGas,
4
- } from '@xyo-network/gas-price-payload-plugin'
5
- import regression from 'regression'
6
-
7
- const getBaseFee = (payload: EthereumGasEthgasstationPayload): number | undefined => {
8
- const { baseFee } = payload
9
- return baseFee
10
- }
11
-
12
- const getFeePerGas = (payload: EthereumGasEthgasstationPayload): Partial<FeePerGas> => {
13
- const {
14
- standard: medium, fast: high, instant: veryHigh,
15
- } = payload.gasPrice
16
- const trend = regression.linear([
17
- [1, medium],
18
- [2, high],
19
- [3, veryHigh],
20
- ])
21
- const low = trend.predict(0)[1]
22
- return {
23
- low, medium, high, veryHigh,
24
- }
25
- }
26
-
27
- const getPriorityFeePerGas = (payload: EthereumGasEthgasstationPayload): Partial<PriorityFeePerGas> => {
28
- const {
29
- standard: medium, fast: high, instant: veryHigh,
30
- } = payload.priorityFee
31
- const trend = regression.linear([
32
- [1, medium],
33
- [2, high],
34
- [3, veryHigh],
35
- ])
36
- const low = trend.predict(0)[1]
37
- return {
38
- low, medium, high, veryHigh,
39
- }
40
- }
41
-
42
- export const transformGasFromEthgasstation = (payload: EthereumGasEthgasstationPayload): FeeData => {
43
- const baseFee = getBaseFee(payload)
44
- const feePerGas = getFeePerGas(payload)
45
- const priorityFeePerGas = getPriorityFeePerGas(payload)
46
- return {
47
- baseFee, feePerGas, priorityFeePerGas,
48
- }
49
- }
package/src/test/index.ts DELETED
@@ -1,5 +0,0 @@
1
- export * from './sampleBlocknativeGas.ts'
2
- export * from './sampleEtherchainGasV2.ts'
3
- export * from './sampleEtherscanGas.ts'
4
- export * from './sampleEthersGas.ts'
5
- export * from './sampleEthgasstationGas.ts'
@@ -1,94 +0,0 @@
1
- import type { EstimatedBaseFee, EthereumGasBlocknativePayload } from '@xyo-network/blocknative-ethereum-gas-payload-plugin'
2
- import { EthereumGasBlocknativeSchema } from '@xyo-network/blocknative-ethereum-gas-payload-plugin'
3
-
4
- export const sampleBlocknativeGas: EthereumGasBlocknativePayload = {
5
- blockPrices: [
6
- {
7
- baseFeePerGas: 13.691_764_456,
8
- blockNumber: 16_028_191,
9
- estimatedPrices: [
10
- {
11
- confidence: 99,
12
- maxFeePerGas: 22.04,
13
- maxPriorityFeePerGas: 1.09,
14
- price: 14,
15
- },
16
- {
17
- confidence: 95,
18
- maxFeePerGas: 21.58,
19
- maxPriorityFeePerGas: 0.63,
20
- price: 14,
21
- },
22
- {
23
- confidence: 90,
24
- maxFeePerGas: 21.25,
25
- maxPriorityFeePerGas: 0.3,
26
- price: 13,
27
- },
28
- {
29
- confidence: 80,
30
- maxFeePerGas: 21.16,
31
- maxPriorityFeePerGas: 0.21,
32
- price: 13,
33
- },
34
- {
35
- confidence: 70,
36
- maxFeePerGas: 21.12,
37
- maxPriorityFeePerGas: 0.17,
38
- price: 13,
39
- },
40
- ],
41
- estimatedTransactionCount: 69,
42
- },
43
- ],
44
- currentBlockNumber: 16_028_190,
45
- estimatedBaseFees: [
46
- {
47
- 'pending+1': [
48
- {
49
- baseFee: 15.41,
50
- confidence: 99,
51
- },
52
- ],
53
- },
54
- {
55
- 'pending+2': [
56
- {
57
- baseFee: 17.32,
58
- confidence: 99,
59
- },
60
- ],
61
- },
62
- {
63
- 'pending+3': [
64
- {
65
- baseFee: 19.17,
66
- confidence: 99,
67
- },
68
- ],
69
- },
70
- {
71
- 'pending+4': [
72
- {
73
- baseFee: 20.12,
74
- confidence: 99,
75
- },
76
- ],
77
- },
78
- {
79
- 'pending+5': [
80
- {
81
- baseFee: 20.95,
82
- confidence: 99,
83
- },
84
- ],
85
- },
86
- ] as unknown as EstimatedBaseFee[],
87
- maxPrice: 36,
88
- msSinceLastBlock: 3643,
89
- network: 'main',
90
- schema: EthereumGasBlocknativeSchema,
91
- system: 'ethereum',
92
- timestamp: 1_668_697_958_837,
93
- unit: 'gwei',
94
- }
@@ -1,16 +0,0 @@
1
- import type { EthereumGasEtherchainV2Payload } from '@xyo-network/etherchain-gas-ethereum-blockchain-payload-plugins'
2
- import { EthereumGasEtherchainV2Schema } from '@xyo-network/etherchain-gas-ethereum-blockchain-payload-plugins'
3
-
4
- export const sampleEtherchainGasV2: EthereumGasEtherchainV2Payload = {
5
- code: 200,
6
- data: {
7
- fast: 19_803_047_330,
8
- priceUSD: 1195.77,
9
- rapid: 29_714_286_170,
10
- slow: 11_200_000_000,
11
- standard: 12_000_000_000,
12
- timestamp: 1_668_621_234_096,
13
- },
14
- schema: EthereumGasEtherchainV2Schema,
15
- timestamp: 1_668_621_240_790,
16
- }
@@ -1,10 +0,0 @@
1
- import type { EthereumGasEthersPayload } from '@xyo-network/ethers-ethereum-gas-payload-plugin'
2
- import { EthereumGasEthersSchema } from '@xyo-network/ethers-ethereum-gas-payload-plugin'
3
-
4
- export const sampleEthersGas: EthereumGasEthersPayload = {
5
- gasPrice: 13_547_863_640,
6
- maxFeePerGas: 28_395_724_162,
7
- maxPriorityFeePerGas: 1_500_000_000,
8
- schema: EthereumGasEthersSchema,
9
- timestamp: 1_668_697_958_837,
10
- }
@@ -1,17 +0,0 @@
1
- import type { EthereumGasEtherscanPayload } from '@xyo-network/etherscan-ethereum-gas-payload-plugin'
2
- import { EthereumGasEtherscanSchema } from '@xyo-network/etherscan-ethereum-gas-payload-plugin'
3
-
4
- export const sampleEtherscanGas: EthereumGasEtherscanPayload = {
5
- message: 'OK',
6
- result: {
7
- FastGasPrice: '30',
8
- LastBlock: '15990556',
9
- ProposeGasPrice: '29',
10
- SafeGasPrice: '28',
11
- gasUsedRatio: '0.416266666666667,0.5672862,0.540979033333333,0.342410966666667,0.389071233333333',
12
- suggestBaseFee: '27.616709247',
13
- },
14
- schema: EthereumGasEtherscanSchema,
15
- status: '1',
16
- timestamp: 1_668_697_958_837,
17
- }
@@ -1,21 +0,0 @@
1
- import type { EthereumGasEthgasstationPayload } from '@xyo-network/ethgasstation-ethereum-gas-payload-plugin'
2
- import { EthereumGasEthgasstationSchema } from '@xyo-network/ethgasstation-ethereum-gas-payload-plugin'
3
-
4
- export const sampleEthgasstationGas: EthereumGasEthgasstationPayload = {
5
- baseFee: 10,
6
- blockNumber: 16_028_883,
7
- blockTime: 11.88,
8
- gasPrice: {
9
- fast: 12,
10
- instant: 13,
11
- standard: 12,
12
- },
13
- nextBaseFee: 10,
14
- priorityFee: {
15
- fast: 2,
16
- instant: 2,
17
- standard: 2,
18
- },
19
- schema: EthereumGasEthgasstationSchema,
20
- timestamp: 1_668_697_958_837,
21
- }