@xyo-network/gas-price-plugin 2.80.4 → 2.81.0-rc.1
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.
- package/dist/browser/index.cjs +2 -2
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +2 -2
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/test/sampleEthersGas.d.cts.map +1 -1
- package/dist/browser/test/sampleEthersGas.d.mts.map +1 -1
- package/dist/browser/test/sampleEthersGas.d.ts.map +1 -1
- package/dist/node/index.js +2 -2
- package/dist/node/index.js.map +1 -1
- package/dist/node/index.mjs +2 -2
- package/dist/node/index.mjs.map +1 -1
- package/dist/node/test/sampleEthersGas.d.cts.map +1 -1
- package/dist/node/test/sampleEthersGas.d.mts.map +1 -1
- package/dist/node/test/sampleEthersGas.d.ts.map +1 -1
- package/package.json +23 -30
- package/src/lib/transforms/transformGasFromEthers.ts +2 -2
- package/src/test/sampleEthersGas.ts +0 -1
package/dist/browser/index.cjs
CHANGED
|
@@ -161,8 +161,8 @@ var transformGasFromEtherchainV2 = (payload) => {
|
|
|
161
161
|
|
|
162
162
|
// src/lib/transforms/transformGasFromEthers.ts
|
|
163
163
|
var getBaseFee2 = (payload) => {
|
|
164
|
-
const {
|
|
165
|
-
return
|
|
164
|
+
const { gasPrice } = payload;
|
|
165
|
+
return gasPrice ? gasPrice / 1e9 : void 0;
|
|
166
166
|
};
|
|
167
167
|
var getFeePerGas3 = (payload) => {
|
|
168
168
|
const { maxFeePerGas } = payload;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/Plugin.ts","../../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"],"sourcesContent":["import { EthereumGasPlugin } from './Plugin'\n\nexport * from './Diviner'\nexport * from './Schema'\n\nexport { EthereumGasPlugin }\n\n// eslint-disable-next-line import/no-default-export\nexport default EthereumGasPlugin\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'\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","import { Promisable } from '@xylabs/promise'\nimport { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport { DivinerConfig, DivinerModule, DivinerParams } from '@xyo-network/diviner'\nimport { EthereumGasSchema } from '@xyo-network/gas-price-payload-plugin'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\n\nimport { divineGas } from './lib'\nimport { EthereumGasDivinerConfigSchema } from './Schema'\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{\n static override readonly configSchemas: string[] = [EthereumGasDivinerConfigSchema]\n static override targetSchema: string = EthereumGasSchema\n\n protected override divineHandler(payloads?: Payload[]): Promisable<Payload[]> {\n const cost = divineGas(payloads ?? [])\n return [cost]\n }\n}\n","import { EthereumGasPayload, EthereumGasSchema, FeeData } from '@xyo-network/gas-price-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\n\nimport { average } from './average'\nimport {\n isEthereumGasBlocknativePayload,\n isEthereumGasEtherchainV2Payload,\n isEthereumGasEtherscanPayload,\n isEthereumGasEthersPayload,\n isEthereumGasEthgasstationPayload,\n} from './identities'\nimport {\n transformGasFromBlocknative,\n transformGasFromEtherchainV2,\n transformGasFromEthers,\n transformGasFromEtherscan,\n transformGasFromEthgasstation,\n} from './transforms'\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 { 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 */\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 { EthereumGasBlocknativePayload, EthereumGasBlocknativeSchema } from '@xyo-network/blocknative-ethereum-gas-payload-plugin'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasBlocknativePayload = (payload?: Payload | null): payload is EthereumGasBlocknativePayload => {\n return payload?.schema === EthereumGasBlocknativeSchema\n}\n","import { EthereumGasEtherchainV2Payload, EthereumGasEtherchainV2Schema } from '@xyo-network/etherchain-gas-ethereum-blockchain-payload-plugins'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEtherchainV2Payload = (payload?: Payload | null): payload is EthereumGasEtherchainV2Payload => {\n return payload?.schema === EthereumGasEtherchainV2Schema\n}\n","import { EthereumGasEtherscanPayload, EthereumGasEtherscanSchema } from '@xyo-network/etherscan-ethereum-gas-payload-plugin'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEtherscanPayload = (payload?: Payload | null): payload is EthereumGasEtherscanPayload => {\n return payload?.schema === EthereumGasEtherscanSchema\n}\n","import { EthereumGasEthersPayload, EthereumGasEthersSchema } from '@xyo-network/ethers-ethereum-gas-payload-plugin'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEthersPayload = (payload?: Payload | null): payload is EthereumGasEthersPayload => {\n return payload?.schema === EthereumGasEthersSchema\n}\n","import { EthereumGasEthgasstationPayload, EthereumGasEthgasstationSchema } from '@xyo-network/ethgasstation-ethereum-gas-payload-plugin'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEthgasstationPayload = (payload?: Payload | null): payload is EthereumGasEthgasstationPayload => {\n return payload?.schema === EthereumGasEthgasstationSchema\n}\n","/* eslint-disable sort-keys-fix/sort-keys-fix */\nimport { EthereumGasBlocknativePayload } from '@xyo-network/blocknative-ethereum-gas-payload-plugin'\nimport { FeeData, FeePerGas, PriorityFeePerGas } from '@xyo-network/gas-price-payload-plugin'\nimport { linear } 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?.sort((a, b) => a.confidence - b.confidence)\n const trend = 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?.sort((a, b) => a.confidence - b.confidence)\n const trend = 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 { baseFee, feePerGas, priorityFeePerGas }\n}\n","import { EthereumGasEtherchainV2Payload } from '@xyo-network/etherchain-gas-ethereum-blockchain-payload-plugins'\nimport { FeeData, FeePerGas } from '@xyo-network/gas-price-payload-plugin'\n\nconst getFeePerGas = (payload: EthereumGasEtherchainV2Payload): Partial<FeePerGas> => {\n const { slow, standard, fast, rapid } = 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 { high, low, medium, veryHigh }\n}\n\nexport const transformGasFromEtherchainV2 = (payload: EthereumGasEtherchainV2Payload): FeeData => {\n const baseFee = undefined\n const feePerGas = getFeePerGas(payload)\n const priorityFeePerGas = {}\n return { baseFee, feePerGas, priorityFeePerGas }\n}\n","import { EthereumGasEthersPayload } from '@xyo-network/ethers-ethereum-gas-payload-plugin'\nimport { FeeData, FeePerGas, PriorityFeePerGas } from '@xyo-network/gas-price-payload-plugin'\n\nconst getBaseFee = (payload: EthereumGasEthersPayload): number | undefined => {\n const { lastBaseFeePerGas } = payload\n return lastBaseFeePerGas ? lastBaseFeePerGas / 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 { baseFee, feePerGas, priorityFeePerGas }\n}\n","import { EthereumGasEtherscanPayload } from '@xyo-network/etherscan-ethereum-gas-payload-plugin'\nimport { FeeData, FeePerGas } from '@xyo-network/gas-price-payload-plugin'\nimport { linear } from 'regression'\n\nconst getBaseFee = (payload: EthereumGasEtherscanPayload): number | undefined => {\n const { suggestBaseFee } = payload.result\n return parseFloat(suggestBaseFee)\n}\n\nconst getFeePerGas = (payload: EthereumGasEtherscanPayload): Partial<FeePerGas> => {\n const { FastGasPrice, ProposeGasPrice, SafeGasPrice } = payload.result\n const low = parseFloat(SafeGasPrice)\n const medium = parseFloat(ProposeGasPrice)\n const high = parseFloat(FastGasPrice)\n const veryHigh = linear([\n [0, low],\n [1, medium],\n [2, high],\n ]).predict(3)[1]\n return { high, low, medium, veryHigh }\n}\n\nexport const transformGasFromEtherscan = (payload: EthereumGasEtherscanPayload): FeeData => {\n const baseFee = getBaseFee(payload)\n const feePerGas = getFeePerGas(payload)\n const priorityFeePerGas = {}\n return { baseFee, feePerGas, priorityFeePerGas }\n}\n","/* eslint-disable sort-keys-fix/sort-keys-fix */\nimport { EthereumGasEthgasstationPayload } from '@xyo-network/ethgasstation-ethereum-gas-payload-plugin'\nimport { FeeData, FeePerGas, PriorityFeePerGas } from '@xyo-network/gas-price-payload-plugin'\nimport { linear } 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 { standard: medium, fast: high, instant: veryHigh } = payload.gasPrice\n const trend = linear([\n [1, medium],\n [2, high],\n [3, veryHigh],\n ])\n const low = trend.predict(0)[1]\n return { low, medium, high, veryHigh }\n}\n\nconst getPriorityFeePerGas = (payload: EthereumGasEthgasstationPayload): Partial<PriorityFeePerGas> => {\n const { standard: medium, fast: high, instant: veryHigh } = payload.priorityFee\n const trend = linear([\n [1, medium],\n [2, high],\n [3, veryHigh],\n ])\n const low = trend.predict(0)[1]\n return { low, medium, high, veryHigh }\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 { baseFee, feePerGas, priorityFeePerGas }\n}\n","export type EthereumGasDivinerQuerySchema = 'network.xyo.blockchain.ethereum.gas.diviner.query'\nexport const EthereumGasDivinerQuerySchema: EthereumGasDivinerQuerySchema = 'network.xyo.blockchain.ethereum.gas.diviner.query'\n\nexport type EthereumGasDivinerConfigSchema = 'network.xyo.blockchain.ethereum.gas.diviner.config'\nexport const EthereumGasDivinerConfigSchema: EthereumGasDivinerConfigSchema = 'network.xyo.blockchain.ethereum.gas.diviner.config'\n"],"mappings":"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","names":["import_gas_price_payload_plugin","import_gas_price_payload_plugin","getFeePerGas","getBaseFee","getFeePerGas","getPriorityFeePerGas","import_regression","getBaseFee","getFeePerGas","import_regression","getBaseFee","getFeePerGas","getPriorityFeePerGas"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/Plugin.ts","../../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"],"sourcesContent":["import { EthereumGasPlugin } from './Plugin'\n\nexport * from './Diviner'\nexport * from './Schema'\n\nexport { EthereumGasPlugin }\n\n// eslint-disable-next-line import/no-default-export\nexport default EthereumGasPlugin\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'\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","import { Promisable } from '@xylabs/promise'\nimport { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport { DivinerConfig, DivinerModule, DivinerParams } from '@xyo-network/diviner'\nimport { EthereumGasSchema } from '@xyo-network/gas-price-payload-plugin'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\n\nimport { divineGas } from './lib'\nimport { EthereumGasDivinerConfigSchema } from './Schema'\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{\n static override readonly configSchemas: string[] = [EthereumGasDivinerConfigSchema]\n static override targetSchema: string = EthereumGasSchema\n\n protected override divineHandler(payloads?: Payload[]): Promisable<Payload[]> {\n const cost = divineGas(payloads ?? [])\n return [cost]\n }\n}\n","import { EthereumGasPayload, EthereumGasSchema, FeeData } from '@xyo-network/gas-price-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\n\nimport { average } from './average'\nimport {\n isEthereumGasBlocknativePayload,\n isEthereumGasEtherchainV2Payload,\n isEthereumGasEtherscanPayload,\n isEthereumGasEthersPayload,\n isEthereumGasEthgasstationPayload,\n} from './identities'\nimport {\n transformGasFromBlocknative,\n transformGasFromEtherchainV2,\n transformGasFromEthers,\n transformGasFromEtherscan,\n transformGasFromEthgasstation,\n} from './transforms'\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 { 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 */\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 { EthereumGasBlocknativePayload, EthereumGasBlocknativeSchema } from '@xyo-network/blocknative-ethereum-gas-payload-plugin'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasBlocknativePayload = (payload?: Payload | null): payload is EthereumGasBlocknativePayload => {\n return payload?.schema === EthereumGasBlocknativeSchema\n}\n","import { EthereumGasEtherchainV2Payload, EthereumGasEtherchainV2Schema } from '@xyo-network/etherchain-gas-ethereum-blockchain-payload-plugins'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEtherchainV2Payload = (payload?: Payload | null): payload is EthereumGasEtherchainV2Payload => {\n return payload?.schema === EthereumGasEtherchainV2Schema\n}\n","import { EthereumGasEtherscanPayload, EthereumGasEtherscanSchema } from '@xyo-network/etherscan-ethereum-gas-payload-plugin'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEtherscanPayload = (payload?: Payload | null): payload is EthereumGasEtherscanPayload => {\n return payload?.schema === EthereumGasEtherscanSchema\n}\n","import { EthereumGasEthersPayload, EthereumGasEthersSchema } from '@xyo-network/ethers-ethereum-gas-payload-plugin'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEthersPayload = (payload?: Payload | null): payload is EthereumGasEthersPayload => {\n return payload?.schema === EthereumGasEthersSchema\n}\n","import { EthereumGasEthgasstationPayload, EthereumGasEthgasstationSchema } from '@xyo-network/ethgasstation-ethereum-gas-payload-plugin'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEthgasstationPayload = (payload?: Payload | null): payload is EthereumGasEthgasstationPayload => {\n return payload?.schema === EthereumGasEthgasstationSchema\n}\n","/* eslint-disable sort-keys-fix/sort-keys-fix */\nimport { EthereumGasBlocknativePayload } from '@xyo-network/blocknative-ethereum-gas-payload-plugin'\nimport { FeeData, FeePerGas, PriorityFeePerGas } from '@xyo-network/gas-price-payload-plugin'\nimport { linear } 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?.sort((a, b) => a.confidence - b.confidence)\n const trend = 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?.sort((a, b) => a.confidence - b.confidence)\n const trend = 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 { baseFee, feePerGas, priorityFeePerGas }\n}\n","import { EthereumGasEtherchainV2Payload } from '@xyo-network/etherchain-gas-ethereum-blockchain-payload-plugins'\nimport { FeeData, FeePerGas } from '@xyo-network/gas-price-payload-plugin'\n\nconst getFeePerGas = (payload: EthereumGasEtherchainV2Payload): Partial<FeePerGas> => {\n const { slow, standard, fast, rapid } = 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 { high, low, medium, veryHigh }\n}\n\nexport const transformGasFromEtherchainV2 = (payload: EthereumGasEtherchainV2Payload): FeeData => {\n const baseFee = undefined\n const feePerGas = getFeePerGas(payload)\n const priorityFeePerGas = {}\n return { baseFee, feePerGas, priorityFeePerGas }\n}\n","import { EthereumGasEthersPayload } from '@xyo-network/ethers-ethereum-gas-payload-plugin'\nimport { FeeData, FeePerGas, PriorityFeePerGas } 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 { baseFee, feePerGas, priorityFeePerGas }\n}\n","import { EthereumGasEtherscanPayload } from '@xyo-network/etherscan-ethereum-gas-payload-plugin'\nimport { FeeData, FeePerGas } from '@xyo-network/gas-price-payload-plugin'\nimport { linear } from 'regression'\n\nconst getBaseFee = (payload: EthereumGasEtherscanPayload): number | undefined => {\n const { suggestBaseFee } = payload.result\n return parseFloat(suggestBaseFee)\n}\n\nconst getFeePerGas = (payload: EthereumGasEtherscanPayload): Partial<FeePerGas> => {\n const { FastGasPrice, ProposeGasPrice, SafeGasPrice } = payload.result\n const low = parseFloat(SafeGasPrice)\n const medium = parseFloat(ProposeGasPrice)\n const high = parseFloat(FastGasPrice)\n const veryHigh = linear([\n [0, low],\n [1, medium],\n [2, high],\n ]).predict(3)[1]\n return { high, low, medium, veryHigh }\n}\n\nexport const transformGasFromEtherscan = (payload: EthereumGasEtherscanPayload): FeeData => {\n const baseFee = getBaseFee(payload)\n const feePerGas = getFeePerGas(payload)\n const priorityFeePerGas = {}\n return { baseFee, feePerGas, priorityFeePerGas }\n}\n","/* eslint-disable sort-keys-fix/sort-keys-fix */\nimport { EthereumGasEthgasstationPayload } from '@xyo-network/ethgasstation-ethereum-gas-payload-plugin'\nimport { FeeData, FeePerGas, PriorityFeePerGas } from '@xyo-network/gas-price-payload-plugin'\nimport { linear } 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 { standard: medium, fast: high, instant: veryHigh } = payload.gasPrice\n const trend = linear([\n [1, medium],\n [2, high],\n [3, veryHigh],\n ])\n const low = trend.predict(0)[1]\n return { low, medium, high, veryHigh }\n}\n\nconst getPriorityFeePerGas = (payload: EthereumGasEthgasstationPayload): Partial<PriorityFeePerGas> => {\n const { standard: medium, fast: high, instant: veryHigh } = payload.priorityFee\n const trend = linear([\n [1, medium],\n [2, high],\n [3, veryHigh],\n ])\n const low = trend.predict(0)[1]\n return { low, medium, high, veryHigh }\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 { baseFee, feePerGas, priorityFeePerGas }\n}\n","export type EthereumGasDivinerQuerySchema = 'network.xyo.blockchain.ethereum.gas.diviner.query'\nexport const EthereumGasDivinerQuerySchema: EthereumGasDivinerQuerySchema = 'network.xyo.blockchain.ethereum.gas.diviner.query'\n\nexport type EthereumGasDivinerConfigSchema = 'network.xyo.blockchain.ethereum.gas.diviner.config'\nexport const EthereumGasDivinerConfigSchema: EthereumGasDivinerConfigSchema = 'network.xyo.blockchain.ethereum.gas.diviner.config'\n"],"mappings":"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","names":["import_gas_price_payload_plugin","import_gas_price_payload_plugin","getFeePerGas","getBaseFee","getFeePerGas","getPriorityFeePerGas","import_regression","getBaseFee","getFeePerGas","import_regression","getBaseFee","getFeePerGas","getPriorityFeePerGas"]}
|
package/dist/browser/index.js
CHANGED
|
@@ -131,8 +131,8 @@ var transformGasFromEtherchainV2 = (payload) => {
|
|
|
131
131
|
|
|
132
132
|
// src/lib/transforms/transformGasFromEthers.ts
|
|
133
133
|
var getBaseFee2 = (payload) => {
|
|
134
|
-
const {
|
|
135
|
-
return
|
|
134
|
+
const { gasPrice } = payload;
|
|
135
|
+
return gasPrice ? gasPrice / 1e9 : void 0;
|
|
136
136
|
};
|
|
137
137
|
var getFeePerGas3 = (payload) => {
|
|
138
138
|
const { maxFeePerGas } = payload;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/Plugin.ts","../../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/index.ts"],"sourcesContent":["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'\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","import { Promisable } from '@xylabs/promise'\nimport { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport { DivinerConfig, DivinerModule, DivinerParams } from '@xyo-network/diviner'\nimport { EthereumGasSchema } from '@xyo-network/gas-price-payload-plugin'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\n\nimport { divineGas } from './lib'\nimport { EthereumGasDivinerConfigSchema } from './Schema'\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{\n static override readonly configSchemas: string[] = [EthereumGasDivinerConfigSchema]\n static override targetSchema: string = EthereumGasSchema\n\n protected override divineHandler(payloads?: Payload[]): Promisable<Payload[]> {\n const cost = divineGas(payloads ?? [])\n return [cost]\n }\n}\n","import { EthereumGasPayload, EthereumGasSchema, FeeData } from '@xyo-network/gas-price-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\n\nimport { average } from './average'\nimport {\n isEthereumGasBlocknativePayload,\n isEthereumGasEtherchainV2Payload,\n isEthereumGasEtherscanPayload,\n isEthereumGasEthersPayload,\n isEthereumGasEthgasstationPayload,\n} from './identities'\nimport {\n transformGasFromBlocknative,\n transformGasFromEtherchainV2,\n transformGasFromEthers,\n transformGasFromEtherscan,\n transformGasFromEthgasstation,\n} from './transforms'\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 { 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 */\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 { EthereumGasBlocknativePayload, EthereumGasBlocknativeSchema } from '@xyo-network/blocknative-ethereum-gas-payload-plugin'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasBlocknativePayload = (payload?: Payload | null): payload is EthereumGasBlocknativePayload => {\n return payload?.schema === EthereumGasBlocknativeSchema\n}\n","import { EthereumGasEtherchainV2Payload, EthereumGasEtherchainV2Schema } from '@xyo-network/etherchain-gas-ethereum-blockchain-payload-plugins'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEtherchainV2Payload = (payload?: Payload | null): payload is EthereumGasEtherchainV2Payload => {\n return payload?.schema === EthereumGasEtherchainV2Schema\n}\n","import { EthereumGasEtherscanPayload, EthereumGasEtherscanSchema } from '@xyo-network/etherscan-ethereum-gas-payload-plugin'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEtherscanPayload = (payload?: Payload | null): payload is EthereumGasEtherscanPayload => {\n return payload?.schema === EthereumGasEtherscanSchema\n}\n","import { EthereumGasEthersPayload, EthereumGasEthersSchema } from '@xyo-network/ethers-ethereum-gas-payload-plugin'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEthersPayload = (payload?: Payload | null): payload is EthereumGasEthersPayload => {\n return payload?.schema === EthereumGasEthersSchema\n}\n","import { EthereumGasEthgasstationPayload, EthereumGasEthgasstationSchema } from '@xyo-network/ethgasstation-ethereum-gas-payload-plugin'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEthgasstationPayload = (payload?: Payload | null): payload is EthereumGasEthgasstationPayload => {\n return payload?.schema === EthereumGasEthgasstationSchema\n}\n","/* eslint-disable sort-keys-fix/sort-keys-fix */\nimport { EthereumGasBlocknativePayload } from '@xyo-network/blocknative-ethereum-gas-payload-plugin'\nimport { FeeData, FeePerGas, PriorityFeePerGas } from '@xyo-network/gas-price-payload-plugin'\nimport { linear } 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?.sort((a, b) => a.confidence - b.confidence)\n const trend = 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?.sort((a, b) => a.confidence - b.confidence)\n const trend = 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 { baseFee, feePerGas, priorityFeePerGas }\n}\n","import { EthereumGasEtherchainV2Payload } from '@xyo-network/etherchain-gas-ethereum-blockchain-payload-plugins'\nimport { FeeData, FeePerGas } from '@xyo-network/gas-price-payload-plugin'\n\nconst getFeePerGas = (payload: EthereumGasEtherchainV2Payload): Partial<FeePerGas> => {\n const { slow, standard, fast, rapid } = 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 { high, low, medium, veryHigh }\n}\n\nexport const transformGasFromEtherchainV2 = (payload: EthereumGasEtherchainV2Payload): FeeData => {\n const baseFee = undefined\n const feePerGas = getFeePerGas(payload)\n const priorityFeePerGas = {}\n return { baseFee, feePerGas, priorityFeePerGas }\n}\n","import { EthereumGasEthersPayload } from '@xyo-network/ethers-ethereum-gas-payload-plugin'\nimport { FeeData, FeePerGas, PriorityFeePerGas } from '@xyo-network/gas-price-payload-plugin'\n\nconst getBaseFee = (payload: EthereumGasEthersPayload): number | undefined => {\n const { lastBaseFeePerGas } = payload\n return lastBaseFeePerGas ? lastBaseFeePerGas / 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 { baseFee, feePerGas, priorityFeePerGas }\n}\n","import { EthereumGasEtherscanPayload } from '@xyo-network/etherscan-ethereum-gas-payload-plugin'\nimport { FeeData, FeePerGas } from '@xyo-network/gas-price-payload-plugin'\nimport { linear } from 'regression'\n\nconst getBaseFee = (payload: EthereumGasEtherscanPayload): number | undefined => {\n const { suggestBaseFee } = payload.result\n return parseFloat(suggestBaseFee)\n}\n\nconst getFeePerGas = (payload: EthereumGasEtherscanPayload): Partial<FeePerGas> => {\n const { FastGasPrice, ProposeGasPrice, SafeGasPrice } = payload.result\n const low = parseFloat(SafeGasPrice)\n const medium = parseFloat(ProposeGasPrice)\n const high = parseFloat(FastGasPrice)\n const veryHigh = linear([\n [0, low],\n [1, medium],\n [2, high],\n ]).predict(3)[1]\n return { high, low, medium, veryHigh }\n}\n\nexport const transformGasFromEtherscan = (payload: EthereumGasEtherscanPayload): FeeData => {\n const baseFee = getBaseFee(payload)\n const feePerGas = getFeePerGas(payload)\n const priorityFeePerGas = {}\n return { baseFee, feePerGas, priorityFeePerGas }\n}\n","/* eslint-disable sort-keys-fix/sort-keys-fix */\nimport { EthereumGasEthgasstationPayload } from '@xyo-network/ethgasstation-ethereum-gas-payload-plugin'\nimport { FeeData, FeePerGas, PriorityFeePerGas } from '@xyo-network/gas-price-payload-plugin'\nimport { linear } 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 { standard: medium, fast: high, instant: veryHigh } = payload.gasPrice\n const trend = linear([\n [1, medium],\n [2, high],\n [3, veryHigh],\n ])\n const low = trend.predict(0)[1]\n return { low, medium, high, veryHigh }\n}\n\nconst getPriorityFeePerGas = (payload: EthereumGasEthgasstationPayload): Partial<PriorityFeePerGas> => {\n const { standard: medium, fast: high, instant: veryHigh } = payload.priorityFee\n const trend = linear([\n [1, medium],\n [2, high],\n [3, veryHigh],\n ])\n const low = trend.predict(0)[1]\n return { low, medium, high, veryHigh }\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 { baseFee, feePerGas, priorityFeePerGas }\n}\n","export type EthereumGasDivinerQuerySchema = 'network.xyo.blockchain.ethereum.gas.diviner.query'\nexport const EthereumGasDivinerQuerySchema: EthereumGasDivinerQuerySchema = 'network.xyo.blockchain.ethereum.gas.diviner.query'\n\nexport type EthereumGasDivinerConfigSchema = 'network.xyo.blockchain.ethereum.gas.diviner.config'\nexport const EthereumGasDivinerConfigSchema: EthereumGasDivinerConfigSchema = 'network.xyo.blockchain.ethereum.gas.diviner.config'\n","import { EthereumGasPlugin } from './Plugin'\n\nexport * from './Diviner'\nexport * from './Schema'\n\nexport { EthereumGasPlugin }\n\n// eslint-disable-next-line import/no-default-export\nexport default EthereumGasPlugin\n"],"mappings":"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","names":["EthereumGasSchema","EthereumGasSchema","getFeePerGas","getBaseFee","getFeePerGas","getPriorityFeePerGas","linear","getBaseFee","getFeePerGas","linear","getBaseFee","getFeePerGas","getPriorityFeePerGas","EthereumGasSchema","EthereumGasSchema"]}
|
|
1
|
+
{"version":3,"sources":["../../src/Plugin.ts","../../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/index.ts"],"sourcesContent":["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'\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","import { Promisable } from '@xylabs/promise'\nimport { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport { DivinerConfig, DivinerModule, DivinerParams } from '@xyo-network/diviner'\nimport { EthereumGasSchema } from '@xyo-network/gas-price-payload-plugin'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\n\nimport { divineGas } from './lib'\nimport { EthereumGasDivinerConfigSchema } from './Schema'\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{\n static override readonly configSchemas: string[] = [EthereumGasDivinerConfigSchema]\n static override targetSchema: string = EthereumGasSchema\n\n protected override divineHandler(payloads?: Payload[]): Promisable<Payload[]> {\n const cost = divineGas(payloads ?? [])\n return [cost]\n }\n}\n","import { EthereumGasPayload, EthereumGasSchema, FeeData } from '@xyo-network/gas-price-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\n\nimport { average } from './average'\nimport {\n isEthereumGasBlocknativePayload,\n isEthereumGasEtherchainV2Payload,\n isEthereumGasEtherscanPayload,\n isEthereumGasEthersPayload,\n isEthereumGasEthgasstationPayload,\n} from './identities'\nimport {\n transformGasFromBlocknative,\n transformGasFromEtherchainV2,\n transformGasFromEthers,\n transformGasFromEtherscan,\n transformGasFromEthgasstation,\n} from './transforms'\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 { 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 */\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 { EthereumGasBlocknativePayload, EthereumGasBlocknativeSchema } from '@xyo-network/blocknative-ethereum-gas-payload-plugin'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasBlocknativePayload = (payload?: Payload | null): payload is EthereumGasBlocknativePayload => {\n return payload?.schema === EthereumGasBlocknativeSchema\n}\n","import { EthereumGasEtherchainV2Payload, EthereumGasEtherchainV2Schema } from '@xyo-network/etherchain-gas-ethereum-blockchain-payload-plugins'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEtherchainV2Payload = (payload?: Payload | null): payload is EthereumGasEtherchainV2Payload => {\n return payload?.schema === EthereumGasEtherchainV2Schema\n}\n","import { EthereumGasEtherscanPayload, EthereumGasEtherscanSchema } from '@xyo-network/etherscan-ethereum-gas-payload-plugin'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEtherscanPayload = (payload?: Payload | null): payload is EthereumGasEtherscanPayload => {\n return payload?.schema === EthereumGasEtherscanSchema\n}\n","import { EthereumGasEthersPayload, EthereumGasEthersSchema } from '@xyo-network/ethers-ethereum-gas-payload-plugin'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEthersPayload = (payload?: Payload | null): payload is EthereumGasEthersPayload => {\n return payload?.schema === EthereumGasEthersSchema\n}\n","import { EthereumGasEthgasstationPayload, EthereumGasEthgasstationSchema } from '@xyo-network/ethgasstation-ethereum-gas-payload-plugin'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEthgasstationPayload = (payload?: Payload | null): payload is EthereumGasEthgasstationPayload => {\n return payload?.schema === EthereumGasEthgasstationSchema\n}\n","/* eslint-disable sort-keys-fix/sort-keys-fix */\nimport { EthereumGasBlocknativePayload } from '@xyo-network/blocknative-ethereum-gas-payload-plugin'\nimport { FeeData, FeePerGas, PriorityFeePerGas } from '@xyo-network/gas-price-payload-plugin'\nimport { linear } 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?.sort((a, b) => a.confidence - b.confidence)\n const trend = 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?.sort((a, b) => a.confidence - b.confidence)\n const trend = 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 { baseFee, feePerGas, priorityFeePerGas }\n}\n","import { EthereumGasEtherchainV2Payload } from '@xyo-network/etherchain-gas-ethereum-blockchain-payload-plugins'\nimport { FeeData, FeePerGas } from '@xyo-network/gas-price-payload-plugin'\n\nconst getFeePerGas = (payload: EthereumGasEtherchainV2Payload): Partial<FeePerGas> => {\n const { slow, standard, fast, rapid } = 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 { high, low, medium, veryHigh }\n}\n\nexport const transformGasFromEtherchainV2 = (payload: EthereumGasEtherchainV2Payload): FeeData => {\n const baseFee = undefined\n const feePerGas = getFeePerGas(payload)\n const priorityFeePerGas = {}\n return { baseFee, feePerGas, priorityFeePerGas }\n}\n","import { EthereumGasEthersPayload } from '@xyo-network/ethers-ethereum-gas-payload-plugin'\nimport { FeeData, FeePerGas, PriorityFeePerGas } 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 { baseFee, feePerGas, priorityFeePerGas }\n}\n","import { EthereumGasEtherscanPayload } from '@xyo-network/etherscan-ethereum-gas-payload-plugin'\nimport { FeeData, FeePerGas } from '@xyo-network/gas-price-payload-plugin'\nimport { linear } from 'regression'\n\nconst getBaseFee = (payload: EthereumGasEtherscanPayload): number | undefined => {\n const { suggestBaseFee } = payload.result\n return parseFloat(suggestBaseFee)\n}\n\nconst getFeePerGas = (payload: EthereumGasEtherscanPayload): Partial<FeePerGas> => {\n const { FastGasPrice, ProposeGasPrice, SafeGasPrice } = payload.result\n const low = parseFloat(SafeGasPrice)\n const medium = parseFloat(ProposeGasPrice)\n const high = parseFloat(FastGasPrice)\n const veryHigh = linear([\n [0, low],\n [1, medium],\n [2, high],\n ]).predict(3)[1]\n return { high, low, medium, veryHigh }\n}\n\nexport const transformGasFromEtherscan = (payload: EthereumGasEtherscanPayload): FeeData => {\n const baseFee = getBaseFee(payload)\n const feePerGas = getFeePerGas(payload)\n const priorityFeePerGas = {}\n return { baseFee, feePerGas, priorityFeePerGas }\n}\n","/* eslint-disable sort-keys-fix/sort-keys-fix */\nimport { EthereumGasEthgasstationPayload } from '@xyo-network/ethgasstation-ethereum-gas-payload-plugin'\nimport { FeeData, FeePerGas, PriorityFeePerGas } from '@xyo-network/gas-price-payload-plugin'\nimport { linear } 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 { standard: medium, fast: high, instant: veryHigh } = payload.gasPrice\n const trend = linear([\n [1, medium],\n [2, high],\n [3, veryHigh],\n ])\n const low = trend.predict(0)[1]\n return { low, medium, high, veryHigh }\n}\n\nconst getPriorityFeePerGas = (payload: EthereumGasEthgasstationPayload): Partial<PriorityFeePerGas> => {\n const { standard: medium, fast: high, instant: veryHigh } = payload.priorityFee\n const trend = linear([\n [1, medium],\n [2, high],\n [3, veryHigh],\n ])\n const low = trend.predict(0)[1]\n return { low, medium, high, veryHigh }\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 { baseFee, feePerGas, priorityFeePerGas }\n}\n","export type EthereumGasDivinerQuerySchema = 'network.xyo.blockchain.ethereum.gas.diviner.query'\nexport const EthereumGasDivinerQuerySchema: EthereumGasDivinerQuerySchema = 'network.xyo.blockchain.ethereum.gas.diviner.query'\n\nexport type EthereumGasDivinerConfigSchema = 'network.xyo.blockchain.ethereum.gas.diviner.config'\nexport const EthereumGasDivinerConfigSchema: EthereumGasDivinerConfigSchema = 'network.xyo.blockchain.ethereum.gas.diviner.config'\n","import { EthereumGasPlugin } from './Plugin'\n\nexport * from './Diviner'\nexport * from './Schema'\n\nexport { EthereumGasPlugin }\n\n// eslint-disable-next-line import/no-default-export\nexport default EthereumGasPlugin\n"],"mappings":"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","names":["EthereumGasSchema","EthereumGasSchema","getFeePerGas","getBaseFee","getFeePerGas","getPriorityFeePerGas","linear","getBaseFee","getFeePerGas","linear","getBaseFee","getFeePerGas","getPriorityFeePerGas","EthereumGasSchema","EthereumGasSchema"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sampleEthersGas.d.ts","sourceRoot":"","sources":["../../../src/test/sampleEthersGas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAA2B,MAAM,iDAAiD,CAAA;AAEnH,eAAO,MAAM,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"sampleEthersGas.d.ts","sourceRoot":"","sources":["../../../src/test/sampleEthersGas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAA2B,MAAM,iDAAiD,CAAA;AAEnH,eAAO,MAAM,eAAe,EAAE,wBAM7B,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sampleEthersGas.d.ts","sourceRoot":"","sources":["../../../src/test/sampleEthersGas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAA2B,MAAM,iDAAiD,CAAA;AAEnH,eAAO,MAAM,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"sampleEthersGas.d.ts","sourceRoot":"","sources":["../../../src/test/sampleEthersGas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAA2B,MAAM,iDAAiD,CAAA;AAEnH,eAAO,MAAM,eAAe,EAAE,wBAM7B,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sampleEthersGas.d.ts","sourceRoot":"","sources":["../../../src/test/sampleEthersGas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAA2B,MAAM,iDAAiD,CAAA;AAEnH,eAAO,MAAM,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"sampleEthersGas.d.ts","sourceRoot":"","sources":["../../../src/test/sampleEthersGas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAA2B,MAAM,iDAAiD,CAAA;AAEnH,eAAO,MAAM,eAAe,EAAE,wBAM7B,CAAA"}
|
package/dist/node/index.js
CHANGED
|
@@ -164,8 +164,8 @@ var transformGasFromEtherchainV2 = (payload) => {
|
|
|
164
164
|
|
|
165
165
|
// src/lib/transforms/transformGasFromEthers.ts
|
|
166
166
|
var getBaseFee2 = (payload) => {
|
|
167
|
-
const {
|
|
168
|
-
return
|
|
167
|
+
const { gasPrice } = payload;
|
|
168
|
+
return gasPrice ? gasPrice / 1e9 : void 0;
|
|
169
169
|
};
|
|
170
170
|
var getFeePerGas3 = (payload) => {
|
|
171
171
|
const { maxFeePerGas } = payload;
|
package/dist/node/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/Plugin.ts","../../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"],"sourcesContent":["import { EthereumGasPlugin } from './Plugin'\n\nexport * from './Diviner'\nexport * from './Schema'\n\nexport { EthereumGasPlugin }\n\n// eslint-disable-next-line import/no-default-export\nexport default EthereumGasPlugin\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'\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","import { Promisable } from '@xylabs/promise'\nimport { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport { DivinerConfig, DivinerModule, DivinerParams } from '@xyo-network/diviner'\nimport { EthereumGasSchema } from '@xyo-network/gas-price-payload-plugin'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\n\nimport { divineGas } from './lib'\nimport { EthereumGasDivinerConfigSchema } from './Schema'\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{\n static override readonly configSchemas: string[] = [EthereumGasDivinerConfigSchema]\n static override targetSchema: string = EthereumGasSchema\n\n protected override divineHandler(payloads?: Payload[]): Promisable<Payload[]> {\n const cost = divineGas(payloads ?? [])\n return [cost]\n }\n}\n","import { EthereumGasPayload, EthereumGasSchema, FeeData } from '@xyo-network/gas-price-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\n\nimport { average } from './average'\nimport {\n isEthereumGasBlocknativePayload,\n isEthereumGasEtherchainV2Payload,\n isEthereumGasEtherscanPayload,\n isEthereumGasEthersPayload,\n isEthereumGasEthgasstationPayload,\n} from './identities'\nimport {\n transformGasFromBlocknative,\n transformGasFromEtherchainV2,\n transformGasFromEthers,\n transformGasFromEtherscan,\n transformGasFromEthgasstation,\n} from './transforms'\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 { 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 */\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 { EthereumGasBlocknativePayload, EthereumGasBlocknativeSchema } from '@xyo-network/blocknative-ethereum-gas-payload-plugin'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasBlocknativePayload = (payload?: Payload | null): payload is EthereumGasBlocknativePayload => {\n return payload?.schema === EthereumGasBlocknativeSchema\n}\n","import { EthereumGasEtherchainV2Payload, EthereumGasEtherchainV2Schema } from '@xyo-network/etherchain-gas-ethereum-blockchain-payload-plugins'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEtherchainV2Payload = (payload?: Payload | null): payload is EthereumGasEtherchainV2Payload => {\n return payload?.schema === EthereumGasEtherchainV2Schema\n}\n","import { EthereumGasEtherscanPayload, EthereumGasEtherscanSchema } from '@xyo-network/etherscan-ethereum-gas-payload-plugin'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEtherscanPayload = (payload?: Payload | null): payload is EthereumGasEtherscanPayload => {\n return payload?.schema === EthereumGasEtherscanSchema\n}\n","import { EthereumGasEthersPayload, EthereumGasEthersSchema } from '@xyo-network/ethers-ethereum-gas-payload-plugin'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEthersPayload = (payload?: Payload | null): payload is EthereumGasEthersPayload => {\n return payload?.schema === EthereumGasEthersSchema\n}\n","import { EthereumGasEthgasstationPayload, EthereumGasEthgasstationSchema } from '@xyo-network/ethgasstation-ethereum-gas-payload-plugin'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEthgasstationPayload = (payload?: Payload | null): payload is EthereumGasEthgasstationPayload => {\n return payload?.schema === EthereumGasEthgasstationSchema\n}\n","/* eslint-disable sort-keys-fix/sort-keys-fix */\nimport { EthereumGasBlocknativePayload } from '@xyo-network/blocknative-ethereum-gas-payload-plugin'\nimport { FeeData, FeePerGas, PriorityFeePerGas } from '@xyo-network/gas-price-payload-plugin'\nimport { linear } 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?.sort((a, b) => a.confidence - b.confidence)\n const trend = 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?.sort((a, b) => a.confidence - b.confidence)\n const trend = 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 { baseFee, feePerGas, priorityFeePerGas }\n}\n","import { EthereumGasEtherchainV2Payload } from '@xyo-network/etherchain-gas-ethereum-blockchain-payload-plugins'\nimport { FeeData, FeePerGas } from '@xyo-network/gas-price-payload-plugin'\n\nconst getFeePerGas = (payload: EthereumGasEtherchainV2Payload): Partial<FeePerGas> => {\n const { slow, standard, fast, rapid } = 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 { high, low, medium, veryHigh }\n}\n\nexport const transformGasFromEtherchainV2 = (payload: EthereumGasEtherchainV2Payload): FeeData => {\n const baseFee = undefined\n const feePerGas = getFeePerGas(payload)\n const priorityFeePerGas = {}\n return { baseFee, feePerGas, priorityFeePerGas }\n}\n","import { EthereumGasEthersPayload } from '@xyo-network/ethers-ethereum-gas-payload-plugin'\nimport { FeeData, FeePerGas, PriorityFeePerGas } from '@xyo-network/gas-price-payload-plugin'\n\nconst getBaseFee = (payload: EthereumGasEthersPayload): number | undefined => {\n const { lastBaseFeePerGas } = payload\n return lastBaseFeePerGas ? lastBaseFeePerGas / 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 { baseFee, feePerGas, priorityFeePerGas }\n}\n","import { EthereumGasEtherscanPayload } from '@xyo-network/etherscan-ethereum-gas-payload-plugin'\nimport { FeeData, FeePerGas } from '@xyo-network/gas-price-payload-plugin'\nimport { linear } from 'regression'\n\nconst getBaseFee = (payload: EthereumGasEtherscanPayload): number | undefined => {\n const { suggestBaseFee } = payload.result\n return parseFloat(suggestBaseFee)\n}\n\nconst getFeePerGas = (payload: EthereumGasEtherscanPayload): Partial<FeePerGas> => {\n const { FastGasPrice, ProposeGasPrice, SafeGasPrice } = payload.result\n const low = parseFloat(SafeGasPrice)\n const medium = parseFloat(ProposeGasPrice)\n const high = parseFloat(FastGasPrice)\n const veryHigh = linear([\n [0, low],\n [1, medium],\n [2, high],\n ]).predict(3)[1]\n return { high, low, medium, veryHigh }\n}\n\nexport const transformGasFromEtherscan = (payload: EthereumGasEtherscanPayload): FeeData => {\n const baseFee = getBaseFee(payload)\n const feePerGas = getFeePerGas(payload)\n const priorityFeePerGas = {}\n return { baseFee, feePerGas, priorityFeePerGas }\n}\n","/* eslint-disable sort-keys-fix/sort-keys-fix */\nimport { EthereumGasEthgasstationPayload } from '@xyo-network/ethgasstation-ethereum-gas-payload-plugin'\nimport { FeeData, FeePerGas, PriorityFeePerGas } from '@xyo-network/gas-price-payload-plugin'\nimport { linear } 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 { standard: medium, fast: high, instant: veryHigh } = payload.gasPrice\n const trend = linear([\n [1, medium],\n [2, high],\n [3, veryHigh],\n ])\n const low = trend.predict(0)[1]\n return { low, medium, high, veryHigh }\n}\n\nconst getPriorityFeePerGas = (payload: EthereumGasEthgasstationPayload): Partial<PriorityFeePerGas> => {\n const { standard: medium, fast: high, instant: veryHigh } = payload.priorityFee\n const trend = linear([\n [1, medium],\n [2, high],\n [3, veryHigh],\n ])\n const low = trend.predict(0)[1]\n return { low, medium, high, veryHigh }\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 { baseFee, feePerGas, priorityFeePerGas }\n}\n","export type EthereumGasDivinerQuerySchema = 'network.xyo.blockchain.ethereum.gas.diviner.query'\nexport const EthereumGasDivinerQuerySchema: EthereumGasDivinerQuerySchema = 'network.xyo.blockchain.ethereum.gas.diviner.query'\n\nexport type EthereumGasDivinerConfigSchema = 'network.xyo.blockchain.ethereum.gas.diviner.config'\nexport const EthereumGasDivinerConfigSchema: EthereumGasDivinerConfigSchema = 'network.xyo.blockchain.ethereum.gas.diviner.config'\n"],"mappings":"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","names":["import_gas_price_payload_plugin","import_gas_price_payload_plugin","getFeePerGas","getBaseFee","getFeePerGas","getPriorityFeePerGas","import_regression","getBaseFee","getFeePerGas","import_regression","getBaseFee","getFeePerGas","getPriorityFeePerGas"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/Plugin.ts","../../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"],"sourcesContent":["import { EthereumGasPlugin } from './Plugin'\n\nexport * from './Diviner'\nexport * from './Schema'\n\nexport { EthereumGasPlugin }\n\n// eslint-disable-next-line import/no-default-export\nexport default EthereumGasPlugin\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'\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","import { Promisable } from '@xylabs/promise'\nimport { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport { DivinerConfig, DivinerModule, DivinerParams } from '@xyo-network/diviner'\nimport { EthereumGasSchema } from '@xyo-network/gas-price-payload-plugin'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\n\nimport { divineGas } from './lib'\nimport { EthereumGasDivinerConfigSchema } from './Schema'\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{\n static override readonly configSchemas: string[] = [EthereumGasDivinerConfigSchema]\n static override targetSchema: string = EthereumGasSchema\n\n protected override divineHandler(payloads?: Payload[]): Promisable<Payload[]> {\n const cost = divineGas(payloads ?? [])\n return [cost]\n }\n}\n","import { EthereumGasPayload, EthereumGasSchema, FeeData } from '@xyo-network/gas-price-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\n\nimport { average } from './average'\nimport {\n isEthereumGasBlocknativePayload,\n isEthereumGasEtherchainV2Payload,\n isEthereumGasEtherscanPayload,\n isEthereumGasEthersPayload,\n isEthereumGasEthgasstationPayload,\n} from './identities'\nimport {\n transformGasFromBlocknative,\n transformGasFromEtherchainV2,\n transformGasFromEthers,\n transformGasFromEtherscan,\n transformGasFromEthgasstation,\n} from './transforms'\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 { 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 */\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 { EthereumGasBlocknativePayload, EthereumGasBlocknativeSchema } from '@xyo-network/blocknative-ethereum-gas-payload-plugin'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasBlocknativePayload = (payload?: Payload | null): payload is EthereumGasBlocknativePayload => {\n return payload?.schema === EthereumGasBlocknativeSchema\n}\n","import { EthereumGasEtherchainV2Payload, EthereumGasEtherchainV2Schema } from '@xyo-network/etherchain-gas-ethereum-blockchain-payload-plugins'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEtherchainV2Payload = (payload?: Payload | null): payload is EthereumGasEtherchainV2Payload => {\n return payload?.schema === EthereumGasEtherchainV2Schema\n}\n","import { EthereumGasEtherscanPayload, EthereumGasEtherscanSchema } from '@xyo-network/etherscan-ethereum-gas-payload-plugin'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEtherscanPayload = (payload?: Payload | null): payload is EthereumGasEtherscanPayload => {\n return payload?.schema === EthereumGasEtherscanSchema\n}\n","import { EthereumGasEthersPayload, EthereumGasEthersSchema } from '@xyo-network/ethers-ethereum-gas-payload-plugin'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEthersPayload = (payload?: Payload | null): payload is EthereumGasEthersPayload => {\n return payload?.schema === EthereumGasEthersSchema\n}\n","import { EthereumGasEthgasstationPayload, EthereumGasEthgasstationSchema } from '@xyo-network/ethgasstation-ethereum-gas-payload-plugin'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEthgasstationPayload = (payload?: Payload | null): payload is EthereumGasEthgasstationPayload => {\n return payload?.schema === EthereumGasEthgasstationSchema\n}\n","/* eslint-disable sort-keys-fix/sort-keys-fix */\nimport { EthereumGasBlocknativePayload } from '@xyo-network/blocknative-ethereum-gas-payload-plugin'\nimport { FeeData, FeePerGas, PriorityFeePerGas } from '@xyo-network/gas-price-payload-plugin'\nimport { linear } 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?.sort((a, b) => a.confidence - b.confidence)\n const trend = 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?.sort((a, b) => a.confidence - b.confidence)\n const trend = 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 { baseFee, feePerGas, priorityFeePerGas }\n}\n","import { EthereumGasEtherchainV2Payload } from '@xyo-network/etherchain-gas-ethereum-blockchain-payload-plugins'\nimport { FeeData, FeePerGas } from '@xyo-network/gas-price-payload-plugin'\n\nconst getFeePerGas = (payload: EthereumGasEtherchainV2Payload): Partial<FeePerGas> => {\n const { slow, standard, fast, rapid } = 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 { high, low, medium, veryHigh }\n}\n\nexport const transformGasFromEtherchainV2 = (payload: EthereumGasEtherchainV2Payload): FeeData => {\n const baseFee = undefined\n const feePerGas = getFeePerGas(payload)\n const priorityFeePerGas = {}\n return { baseFee, feePerGas, priorityFeePerGas }\n}\n","import { EthereumGasEthersPayload } from '@xyo-network/ethers-ethereum-gas-payload-plugin'\nimport { FeeData, FeePerGas, PriorityFeePerGas } 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 { baseFee, feePerGas, priorityFeePerGas }\n}\n","import { EthereumGasEtherscanPayload } from '@xyo-network/etherscan-ethereum-gas-payload-plugin'\nimport { FeeData, FeePerGas } from '@xyo-network/gas-price-payload-plugin'\nimport { linear } from 'regression'\n\nconst getBaseFee = (payload: EthereumGasEtherscanPayload): number | undefined => {\n const { suggestBaseFee } = payload.result\n return parseFloat(suggestBaseFee)\n}\n\nconst getFeePerGas = (payload: EthereumGasEtherscanPayload): Partial<FeePerGas> => {\n const { FastGasPrice, ProposeGasPrice, SafeGasPrice } = payload.result\n const low = parseFloat(SafeGasPrice)\n const medium = parseFloat(ProposeGasPrice)\n const high = parseFloat(FastGasPrice)\n const veryHigh = linear([\n [0, low],\n [1, medium],\n [2, high],\n ]).predict(3)[1]\n return { high, low, medium, veryHigh }\n}\n\nexport const transformGasFromEtherscan = (payload: EthereumGasEtherscanPayload): FeeData => {\n const baseFee = getBaseFee(payload)\n const feePerGas = getFeePerGas(payload)\n const priorityFeePerGas = {}\n return { baseFee, feePerGas, priorityFeePerGas }\n}\n","/* eslint-disable sort-keys-fix/sort-keys-fix */\nimport { EthereumGasEthgasstationPayload } from '@xyo-network/ethgasstation-ethereum-gas-payload-plugin'\nimport { FeeData, FeePerGas, PriorityFeePerGas } from '@xyo-network/gas-price-payload-plugin'\nimport { linear } 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 { standard: medium, fast: high, instant: veryHigh } = payload.gasPrice\n const trend = linear([\n [1, medium],\n [2, high],\n [3, veryHigh],\n ])\n const low = trend.predict(0)[1]\n return { low, medium, high, veryHigh }\n}\n\nconst getPriorityFeePerGas = (payload: EthereumGasEthgasstationPayload): Partial<PriorityFeePerGas> => {\n const { standard: medium, fast: high, instant: veryHigh } = payload.priorityFee\n const trend = linear([\n [1, medium],\n [2, high],\n [3, veryHigh],\n ])\n const low = trend.predict(0)[1]\n return { low, medium, high, veryHigh }\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 { baseFee, feePerGas, priorityFeePerGas }\n}\n","export type EthereumGasDivinerQuerySchema = 'network.xyo.blockchain.ethereum.gas.diviner.query'\nexport const EthereumGasDivinerQuerySchema: EthereumGasDivinerQuerySchema = 'network.xyo.blockchain.ethereum.gas.diviner.query'\n\nexport type EthereumGasDivinerConfigSchema = 'network.xyo.blockchain.ethereum.gas.diviner.config'\nexport const EthereumGasDivinerConfigSchema: EthereumGasDivinerConfigSchema = 'network.xyo.blockchain.ethereum.gas.diviner.config'\n"],"mappings":"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","names":["import_gas_price_payload_plugin","import_gas_price_payload_plugin","getFeePerGas","getBaseFee","getFeePerGas","getPriorityFeePerGas","import_regression","getBaseFee","getFeePerGas","import_regression","getBaseFee","getFeePerGas","getPriorityFeePerGas"]}
|
package/dist/node/index.mjs
CHANGED
|
@@ -134,8 +134,8 @@ var transformGasFromEtherchainV2 = (payload) => {
|
|
|
134
134
|
|
|
135
135
|
// src/lib/transforms/transformGasFromEthers.ts
|
|
136
136
|
var getBaseFee2 = (payload) => {
|
|
137
|
-
const {
|
|
138
|
-
return
|
|
137
|
+
const { gasPrice } = payload;
|
|
138
|
+
return gasPrice ? gasPrice / 1e9 : void 0;
|
|
139
139
|
};
|
|
140
140
|
var getFeePerGas3 = (payload) => {
|
|
141
141
|
const { maxFeePerGas } = payload;
|
package/dist/node/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/Plugin.ts","../../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/index.ts"],"sourcesContent":["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'\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","import { Promisable } from '@xylabs/promise'\nimport { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport { DivinerConfig, DivinerModule, DivinerParams } from '@xyo-network/diviner'\nimport { EthereumGasSchema } from '@xyo-network/gas-price-payload-plugin'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\n\nimport { divineGas } from './lib'\nimport { EthereumGasDivinerConfigSchema } from './Schema'\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{\n static override readonly configSchemas: string[] = [EthereumGasDivinerConfigSchema]\n static override targetSchema: string = EthereumGasSchema\n\n protected override divineHandler(payloads?: Payload[]): Promisable<Payload[]> {\n const cost = divineGas(payloads ?? [])\n return [cost]\n }\n}\n","import { EthereumGasPayload, EthereumGasSchema, FeeData } from '@xyo-network/gas-price-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\n\nimport { average } from './average'\nimport {\n isEthereumGasBlocknativePayload,\n isEthereumGasEtherchainV2Payload,\n isEthereumGasEtherscanPayload,\n isEthereumGasEthersPayload,\n isEthereumGasEthgasstationPayload,\n} from './identities'\nimport {\n transformGasFromBlocknative,\n transformGasFromEtherchainV2,\n transformGasFromEthers,\n transformGasFromEtherscan,\n transformGasFromEthgasstation,\n} from './transforms'\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 { 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 */\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 { EthereumGasBlocknativePayload, EthereumGasBlocknativeSchema } from '@xyo-network/blocknative-ethereum-gas-payload-plugin'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasBlocknativePayload = (payload?: Payload | null): payload is EthereumGasBlocknativePayload => {\n return payload?.schema === EthereumGasBlocknativeSchema\n}\n","import { EthereumGasEtherchainV2Payload, EthereumGasEtherchainV2Schema } from '@xyo-network/etherchain-gas-ethereum-blockchain-payload-plugins'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEtherchainV2Payload = (payload?: Payload | null): payload is EthereumGasEtherchainV2Payload => {\n return payload?.schema === EthereumGasEtherchainV2Schema\n}\n","import { EthereumGasEtherscanPayload, EthereumGasEtherscanSchema } from '@xyo-network/etherscan-ethereum-gas-payload-plugin'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEtherscanPayload = (payload?: Payload | null): payload is EthereumGasEtherscanPayload => {\n return payload?.schema === EthereumGasEtherscanSchema\n}\n","import { EthereumGasEthersPayload, EthereumGasEthersSchema } from '@xyo-network/ethers-ethereum-gas-payload-plugin'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEthersPayload = (payload?: Payload | null): payload is EthereumGasEthersPayload => {\n return payload?.schema === EthereumGasEthersSchema\n}\n","import { EthereumGasEthgasstationPayload, EthereumGasEthgasstationSchema } from '@xyo-network/ethgasstation-ethereum-gas-payload-plugin'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEthgasstationPayload = (payload?: Payload | null): payload is EthereumGasEthgasstationPayload => {\n return payload?.schema === EthereumGasEthgasstationSchema\n}\n","/* eslint-disable sort-keys-fix/sort-keys-fix */\nimport { EthereumGasBlocknativePayload } from '@xyo-network/blocknative-ethereum-gas-payload-plugin'\nimport { FeeData, FeePerGas, PriorityFeePerGas } from '@xyo-network/gas-price-payload-plugin'\nimport { linear } 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?.sort((a, b) => a.confidence - b.confidence)\n const trend = 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?.sort((a, b) => a.confidence - b.confidence)\n const trend = 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 { baseFee, feePerGas, priorityFeePerGas }\n}\n","import { EthereumGasEtherchainV2Payload } from '@xyo-network/etherchain-gas-ethereum-blockchain-payload-plugins'\nimport { FeeData, FeePerGas } from '@xyo-network/gas-price-payload-plugin'\n\nconst getFeePerGas = (payload: EthereumGasEtherchainV2Payload): Partial<FeePerGas> => {\n const { slow, standard, fast, rapid } = 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 { high, low, medium, veryHigh }\n}\n\nexport const transformGasFromEtherchainV2 = (payload: EthereumGasEtherchainV2Payload): FeeData => {\n const baseFee = undefined\n const feePerGas = getFeePerGas(payload)\n const priorityFeePerGas = {}\n return { baseFee, feePerGas, priorityFeePerGas }\n}\n","import { EthereumGasEthersPayload } from '@xyo-network/ethers-ethereum-gas-payload-plugin'\nimport { FeeData, FeePerGas, PriorityFeePerGas } from '@xyo-network/gas-price-payload-plugin'\n\nconst getBaseFee = (payload: EthereumGasEthersPayload): number | undefined => {\n const { lastBaseFeePerGas } = payload\n return lastBaseFeePerGas ? lastBaseFeePerGas / 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 { baseFee, feePerGas, priorityFeePerGas }\n}\n","import { EthereumGasEtherscanPayload } from '@xyo-network/etherscan-ethereum-gas-payload-plugin'\nimport { FeeData, FeePerGas } from '@xyo-network/gas-price-payload-plugin'\nimport { linear } from 'regression'\n\nconst getBaseFee = (payload: EthereumGasEtherscanPayload): number | undefined => {\n const { suggestBaseFee } = payload.result\n return parseFloat(suggestBaseFee)\n}\n\nconst getFeePerGas = (payload: EthereumGasEtherscanPayload): Partial<FeePerGas> => {\n const { FastGasPrice, ProposeGasPrice, SafeGasPrice } = payload.result\n const low = parseFloat(SafeGasPrice)\n const medium = parseFloat(ProposeGasPrice)\n const high = parseFloat(FastGasPrice)\n const veryHigh = linear([\n [0, low],\n [1, medium],\n [2, high],\n ]).predict(3)[1]\n return { high, low, medium, veryHigh }\n}\n\nexport const transformGasFromEtherscan = (payload: EthereumGasEtherscanPayload): FeeData => {\n const baseFee = getBaseFee(payload)\n const feePerGas = getFeePerGas(payload)\n const priorityFeePerGas = {}\n return { baseFee, feePerGas, priorityFeePerGas }\n}\n","/* eslint-disable sort-keys-fix/sort-keys-fix */\nimport { EthereumGasEthgasstationPayload } from '@xyo-network/ethgasstation-ethereum-gas-payload-plugin'\nimport { FeeData, FeePerGas, PriorityFeePerGas } from '@xyo-network/gas-price-payload-plugin'\nimport { linear } 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 { standard: medium, fast: high, instant: veryHigh } = payload.gasPrice\n const trend = linear([\n [1, medium],\n [2, high],\n [3, veryHigh],\n ])\n const low = trend.predict(0)[1]\n return { low, medium, high, veryHigh }\n}\n\nconst getPriorityFeePerGas = (payload: EthereumGasEthgasstationPayload): Partial<PriorityFeePerGas> => {\n const { standard: medium, fast: high, instant: veryHigh } = payload.priorityFee\n const trend = linear([\n [1, medium],\n [2, high],\n [3, veryHigh],\n ])\n const low = trend.predict(0)[1]\n return { low, medium, high, veryHigh }\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 { baseFee, feePerGas, priorityFeePerGas }\n}\n","export type EthereumGasDivinerQuerySchema = 'network.xyo.blockchain.ethereum.gas.diviner.query'\nexport const EthereumGasDivinerQuerySchema: EthereumGasDivinerQuerySchema = 'network.xyo.blockchain.ethereum.gas.diviner.query'\n\nexport type EthereumGasDivinerConfigSchema = 'network.xyo.blockchain.ethereum.gas.diviner.config'\nexport const EthereumGasDivinerConfigSchema: EthereumGasDivinerConfigSchema = 'network.xyo.blockchain.ethereum.gas.diviner.config'\n","import { EthereumGasPlugin } from './Plugin'\n\nexport * from './Diviner'\nexport * from './Schema'\n\nexport { EthereumGasPlugin }\n\n// eslint-disable-next-line import/no-default-export\nexport default EthereumGasPlugin\n"],"mappings":"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","names":["EthereumGasSchema","EthereumGasSchema","getFeePerGas","getBaseFee","getFeePerGas","getPriorityFeePerGas","linear","getBaseFee","getFeePerGas","linear","getBaseFee","getFeePerGas","getPriorityFeePerGas","EthereumGasSchema","EthereumGasSchema"]}
|
|
1
|
+
{"version":3,"sources":["../../src/Plugin.ts","../../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/index.ts"],"sourcesContent":["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'\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","import { Promisable } from '@xylabs/promise'\nimport { AbstractDiviner } from '@xyo-network/abstract-diviner'\nimport { DivinerConfig, DivinerModule, DivinerParams } from '@xyo-network/diviner'\nimport { EthereumGasSchema } from '@xyo-network/gas-price-payload-plugin'\nimport { AnyConfigSchema } from '@xyo-network/module-model'\nimport { Payload } from '@xyo-network/payload-model'\n\nimport { divineGas } from './lib'\nimport { EthereumGasDivinerConfigSchema } from './Schema'\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{\n static override readonly configSchemas: string[] = [EthereumGasDivinerConfigSchema]\n static override targetSchema: string = EthereumGasSchema\n\n protected override divineHandler(payloads?: Payload[]): Promisable<Payload[]> {\n const cost = divineGas(payloads ?? [])\n return [cost]\n }\n}\n","import { EthereumGasPayload, EthereumGasSchema, FeeData } from '@xyo-network/gas-price-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport { Payload } from '@xyo-network/payload-model'\n\nimport { average } from './average'\nimport {\n isEthereumGasBlocknativePayload,\n isEthereumGasEtherchainV2Payload,\n isEthereumGasEtherscanPayload,\n isEthereumGasEthersPayload,\n isEthereumGasEthgasstationPayload,\n} from './identities'\nimport {\n transformGasFromBlocknative,\n transformGasFromEtherchainV2,\n transformGasFromEthers,\n transformGasFromEtherscan,\n transformGasFromEthgasstation,\n} from './transforms'\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 { 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 */\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 { EthereumGasBlocknativePayload, EthereumGasBlocknativeSchema } from '@xyo-network/blocknative-ethereum-gas-payload-plugin'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasBlocknativePayload = (payload?: Payload | null): payload is EthereumGasBlocknativePayload => {\n return payload?.schema === EthereumGasBlocknativeSchema\n}\n","import { EthereumGasEtherchainV2Payload, EthereumGasEtherchainV2Schema } from '@xyo-network/etherchain-gas-ethereum-blockchain-payload-plugins'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEtherchainV2Payload = (payload?: Payload | null): payload is EthereumGasEtherchainV2Payload => {\n return payload?.schema === EthereumGasEtherchainV2Schema\n}\n","import { EthereumGasEtherscanPayload, EthereumGasEtherscanSchema } from '@xyo-network/etherscan-ethereum-gas-payload-plugin'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEtherscanPayload = (payload?: Payload | null): payload is EthereumGasEtherscanPayload => {\n return payload?.schema === EthereumGasEtherscanSchema\n}\n","import { EthereumGasEthersPayload, EthereumGasEthersSchema } from '@xyo-network/ethers-ethereum-gas-payload-plugin'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEthersPayload = (payload?: Payload | null): payload is EthereumGasEthersPayload => {\n return payload?.schema === EthereumGasEthersSchema\n}\n","import { EthereumGasEthgasstationPayload, EthereumGasEthgasstationSchema } from '@xyo-network/ethgasstation-ethereum-gas-payload-plugin'\nimport { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEthgasstationPayload = (payload?: Payload | null): payload is EthereumGasEthgasstationPayload => {\n return payload?.schema === EthereumGasEthgasstationSchema\n}\n","/* eslint-disable sort-keys-fix/sort-keys-fix */\nimport { EthereumGasBlocknativePayload } from '@xyo-network/blocknative-ethereum-gas-payload-plugin'\nimport { FeeData, FeePerGas, PriorityFeePerGas } from '@xyo-network/gas-price-payload-plugin'\nimport { linear } 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?.sort((a, b) => a.confidence - b.confidence)\n const trend = 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?.sort((a, b) => a.confidence - b.confidence)\n const trend = 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 { baseFee, feePerGas, priorityFeePerGas }\n}\n","import { EthereumGasEtherchainV2Payload } from '@xyo-network/etherchain-gas-ethereum-blockchain-payload-plugins'\nimport { FeeData, FeePerGas } from '@xyo-network/gas-price-payload-plugin'\n\nconst getFeePerGas = (payload: EthereumGasEtherchainV2Payload): Partial<FeePerGas> => {\n const { slow, standard, fast, rapid } = 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 { high, low, medium, veryHigh }\n}\n\nexport const transformGasFromEtherchainV2 = (payload: EthereumGasEtherchainV2Payload): FeeData => {\n const baseFee = undefined\n const feePerGas = getFeePerGas(payload)\n const priorityFeePerGas = {}\n return { baseFee, feePerGas, priorityFeePerGas }\n}\n","import { EthereumGasEthersPayload } from '@xyo-network/ethers-ethereum-gas-payload-plugin'\nimport { FeeData, FeePerGas, PriorityFeePerGas } 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 { baseFee, feePerGas, priorityFeePerGas }\n}\n","import { EthereumGasEtherscanPayload } from '@xyo-network/etherscan-ethereum-gas-payload-plugin'\nimport { FeeData, FeePerGas } from '@xyo-network/gas-price-payload-plugin'\nimport { linear } from 'regression'\n\nconst getBaseFee = (payload: EthereumGasEtherscanPayload): number | undefined => {\n const { suggestBaseFee } = payload.result\n return parseFloat(suggestBaseFee)\n}\n\nconst getFeePerGas = (payload: EthereumGasEtherscanPayload): Partial<FeePerGas> => {\n const { FastGasPrice, ProposeGasPrice, SafeGasPrice } = payload.result\n const low = parseFloat(SafeGasPrice)\n const medium = parseFloat(ProposeGasPrice)\n const high = parseFloat(FastGasPrice)\n const veryHigh = linear([\n [0, low],\n [1, medium],\n [2, high],\n ]).predict(3)[1]\n return { high, low, medium, veryHigh }\n}\n\nexport const transformGasFromEtherscan = (payload: EthereumGasEtherscanPayload): FeeData => {\n const baseFee = getBaseFee(payload)\n const feePerGas = getFeePerGas(payload)\n const priorityFeePerGas = {}\n return { baseFee, feePerGas, priorityFeePerGas }\n}\n","/* eslint-disable sort-keys-fix/sort-keys-fix */\nimport { EthereumGasEthgasstationPayload } from '@xyo-network/ethgasstation-ethereum-gas-payload-plugin'\nimport { FeeData, FeePerGas, PriorityFeePerGas } from '@xyo-network/gas-price-payload-plugin'\nimport { linear } 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 { standard: medium, fast: high, instant: veryHigh } = payload.gasPrice\n const trend = linear([\n [1, medium],\n [2, high],\n [3, veryHigh],\n ])\n const low = trend.predict(0)[1]\n return { low, medium, high, veryHigh }\n}\n\nconst getPriorityFeePerGas = (payload: EthereumGasEthgasstationPayload): Partial<PriorityFeePerGas> => {\n const { standard: medium, fast: high, instant: veryHigh } = payload.priorityFee\n const trend = linear([\n [1, medium],\n [2, high],\n [3, veryHigh],\n ])\n const low = trend.predict(0)[1]\n return { low, medium, high, veryHigh }\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 { baseFee, feePerGas, priorityFeePerGas }\n}\n","export type EthereumGasDivinerQuerySchema = 'network.xyo.blockchain.ethereum.gas.diviner.query'\nexport const EthereumGasDivinerQuerySchema: EthereumGasDivinerQuerySchema = 'network.xyo.blockchain.ethereum.gas.diviner.query'\n\nexport type EthereumGasDivinerConfigSchema = 'network.xyo.blockchain.ethereum.gas.diviner.config'\nexport const EthereumGasDivinerConfigSchema: EthereumGasDivinerConfigSchema = 'network.xyo.blockchain.ethereum.gas.diviner.config'\n","import { EthereumGasPlugin } from './Plugin'\n\nexport * from './Diviner'\nexport * from './Schema'\n\nexport { EthereumGasPlugin }\n\n// eslint-disable-next-line import/no-default-export\nexport default EthereumGasPlugin\n"],"mappings":"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","names":["EthereumGasSchema","EthereumGasSchema","getFeePerGas","getBaseFee","getFeePerGas","getPriorityFeePerGas","linear","getBaseFee","getFeePerGas","linear","getBaseFee","getFeePerGas","getPriorityFeePerGas","EthereumGasSchema","EthereumGasSchema"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sampleEthersGas.d.ts","sourceRoot":"","sources":["../../../src/test/sampleEthersGas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAA2B,MAAM,iDAAiD,CAAA;AAEnH,eAAO,MAAM,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"sampleEthersGas.d.ts","sourceRoot":"","sources":["../../../src/test/sampleEthersGas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAA2B,MAAM,iDAAiD,CAAA;AAEnH,eAAO,MAAM,eAAe,EAAE,wBAM7B,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sampleEthersGas.d.ts","sourceRoot":"","sources":["../../../src/test/sampleEthersGas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAA2B,MAAM,iDAAiD,CAAA;AAEnH,eAAO,MAAM,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"sampleEthersGas.d.ts","sourceRoot":"","sources":["../../../src/test/sampleEthersGas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAA2B,MAAM,iDAAiD,CAAA;AAEnH,eAAO,MAAM,eAAe,EAAE,wBAM7B,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sampleEthersGas.d.ts","sourceRoot":"","sources":["../../../src/test/sampleEthersGas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAA2B,MAAM,iDAAiD,CAAA;AAEnH,eAAO,MAAM,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"sampleEthersGas.d.ts","sourceRoot":"","sources":["../../../src/test/sampleEthersGas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAA2B,MAAM,iDAAiD,CAAA;AAEnH,eAAO,MAAM,eAAe,EAAE,wBAM7B,CAAA"}
|
package/package.json
CHANGED
|
@@ -12,49 +12,41 @@
|
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"@xylabs/exists": "^2.13.9",
|
|
14
14
|
"@xylabs/promise": "^2.13.9",
|
|
15
|
-
"@xyo-network/abstract-diviner": "^2.
|
|
16
|
-
"@xyo-network/blocknative-ethereum-gas-payload-plugin": "~2.
|
|
17
|
-
"@xyo-network/diviner": "^2.
|
|
18
|
-
"@xyo-network/etherchain-gas-ethereum-blockchain-payload-plugins": "~2.
|
|
19
|
-
"@xyo-network/ethers-ethereum-gas-payload-plugin": "~2.
|
|
20
|
-
"@xyo-network/etherscan-ethereum-gas-payload-plugin": "~2.
|
|
21
|
-
"@xyo-network/ethgasstation-ethereum-gas-payload-plugin": "~2.
|
|
22
|
-
"@xyo-network/gas-price-payload-plugin": "~2.
|
|
23
|
-
"@xyo-network/module-model": "^2.
|
|
24
|
-
"@xyo-network/payload-builder": "^2.
|
|
25
|
-
"@xyo-network/payload-model": "^2.
|
|
26
|
-
"@xyo-network/payloadset-plugin": "^2.
|
|
15
|
+
"@xyo-network/abstract-diviner": "^2.81.0-rc.1",
|
|
16
|
+
"@xyo-network/blocknative-ethereum-gas-payload-plugin": "~2.81.0-rc.1",
|
|
17
|
+
"@xyo-network/diviner": "^2.81.0-rc.1",
|
|
18
|
+
"@xyo-network/etherchain-gas-ethereum-blockchain-payload-plugins": "~2.81.0-rc.1",
|
|
19
|
+
"@xyo-network/ethers-ethereum-gas-payload-plugin": "~2.81.0-rc.1",
|
|
20
|
+
"@xyo-network/etherscan-ethereum-gas-payload-plugin": "~2.81.0-rc.1",
|
|
21
|
+
"@xyo-network/ethgasstation-ethereum-gas-payload-plugin": "~2.81.0-rc.1",
|
|
22
|
+
"@xyo-network/gas-price-payload-plugin": "~2.81.0-rc.1",
|
|
23
|
+
"@xyo-network/module-model": "^2.81.0-rc.1",
|
|
24
|
+
"@xyo-network/payload-builder": "^2.81.0-rc.1",
|
|
25
|
+
"@xyo-network/payload-model": "^2.81.0-rc.1",
|
|
26
|
+
"@xyo-network/payloadset-plugin": "^2.81.0-rc.1",
|
|
27
27
|
"regression": "^2.0.1"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
|
-
"@ethersproject/address": "^5.7.0",
|
|
31
|
-
"@ethersproject/contracts": "^5.7.0",
|
|
32
|
-
"@ethersproject/networks": "^5.7.1",
|
|
33
|
-
"@ethersproject/providers": "^5.7.2",
|
|
34
|
-
"@ethersproject/solidity": "^5.7.0",
|
|
35
30
|
"@types/regression": "^2.0.5",
|
|
36
31
|
"@uniswap/sdk": "^3.0.3",
|
|
37
32
|
"@uniswap/sdk-core": "^4.0.9",
|
|
38
33
|
"@uniswap/v3-sdk": "^3.10.0",
|
|
39
34
|
"@xylabs/ts-scripts-yarn3": "^3.2.2",
|
|
40
35
|
"@xylabs/tsconfig": "^3.2.2",
|
|
41
|
-
"@xyo-network/account": "^2.
|
|
42
|
-
"@xyo-network/blocknative-ethereum-gas-plugin": "~2.
|
|
43
|
-
"@xyo-network/etherchain-gas-ethereum-blockchain-plugins": "~2.
|
|
44
|
-
"@xyo-network/ethers-ethereum-gas-plugin": "~2.
|
|
45
|
-
"@xyo-network/etherscan-ethereum-gas-plugin": "~2.
|
|
46
|
-
"@xyo-network/witness-blockchain-abstract": "^2.
|
|
36
|
+
"@xyo-network/account": "^2.81.0-rc.1",
|
|
37
|
+
"@xyo-network/blocknative-ethereum-gas-plugin": "~2.81.0-rc.1",
|
|
38
|
+
"@xyo-network/etherchain-gas-ethereum-blockchain-plugins": "~2.81.0-rc.1",
|
|
39
|
+
"@xyo-network/ethers-ethereum-gas-plugin": "~2.81.0-rc.1",
|
|
40
|
+
"@xyo-network/etherscan-ethereum-gas-plugin": "~2.81.0-rc.1",
|
|
41
|
+
"@xyo-network/witness-blockchain-abstract": "^2.81.0-rc.1",
|
|
42
|
+
"ethers": "^6.8.1",
|
|
47
43
|
"typescript": "^5.2.2"
|
|
48
44
|
},
|
|
49
45
|
"peerDependencies": {
|
|
50
|
-
"@ethersproject/address": "^5.7.0",
|
|
51
|
-
"@ethersproject/contracts": "^5.7.0",
|
|
52
|
-
"@ethersproject/networks": "^5.7.0",
|
|
53
|
-
"@ethersproject/providers": "^5.7.0",
|
|
54
|
-
"@ethersproject/solidity": "^5.7.0",
|
|
55
46
|
"@uniswap/sdk": "^3.0.3",
|
|
56
47
|
"@uniswap/sdk-core": "^3.2.3",
|
|
57
|
-
"@uniswap/v3-sdk": "^3.9.0"
|
|
48
|
+
"@uniswap/v3-sdk": "^3.9.0",
|
|
49
|
+
"ethers": "^6.8.1"
|
|
58
50
|
},
|
|
59
51
|
"description": "Typescript/Javascript Plugins for XYO Platform",
|
|
60
52
|
"docs": "dist/docs.json",
|
|
@@ -96,5 +88,6 @@
|
|
|
96
88
|
"url": "https://github.com/XYOracleNetwork/plugins.git"
|
|
97
89
|
},
|
|
98
90
|
"sideEffects": false,
|
|
99
|
-
"version": "2.
|
|
91
|
+
"version": "2.81.0-rc.1",
|
|
92
|
+
"stableVersion": "2.80.5"
|
|
100
93
|
}
|
|
@@ -2,8 +2,8 @@ import { EthereumGasEthersPayload } from '@xyo-network/ethers-ethereum-gas-paylo
|
|
|
2
2
|
import { FeeData, FeePerGas, PriorityFeePerGas } from '@xyo-network/gas-price-payload-plugin'
|
|
3
3
|
|
|
4
4
|
const getBaseFee = (payload: EthereumGasEthersPayload): number | undefined => {
|
|
5
|
-
const {
|
|
6
|
-
return
|
|
5
|
+
const { gasPrice } = payload
|
|
6
|
+
return gasPrice ? gasPrice / 1_000_000_000 : undefined
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
const getFeePerGas = (payload: EthereumGasEthersPayload): Partial<FeePerGas> => {
|
|
@@ -2,7 +2,6 @@ import { EthereumGasEthersPayload, EthereumGasEthersSchema } from '@xyo-network/
|
|
|
2
2
|
|
|
3
3
|
export const sampleEthersGas: EthereumGasEthersPayload = {
|
|
4
4
|
gasPrice: 13547863640,
|
|
5
|
-
lastBaseFeePerGas: 13447862081,
|
|
6
5
|
maxFeePerGas: 28395724162,
|
|
7
6
|
maxPriorityFeePerGas: 1500000000,
|
|
8
7
|
schema: EthereumGasEthersSchema,
|