@xyo-network/gas-price-plugin 3.1.0 → 3.1.2
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/neutral/Plugin.d.ts +3 -3
- package/dist/neutral/index.mjs +8 -8
- package/dist/neutral/index.mjs.map +1 -1
- package/dist/neutral/lib/average.d.ts +5 -0
- package/dist/neutral/lib/average.d.ts.map +1 -1
- package/package.json +24 -22
- package/src/lib/transforms/transformGasFromBlocknative.ts +3 -3
- package/src/lib/transforms/transformGasFromEtherscan.ts +2 -2
- package/src/lib/transforms/transformGasFromEthgasstation.ts +3 -3
package/dist/neutral/Plugin.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { EthereumGasDiviner } from './Diviner.ts';
|
|
2
|
-
export declare const EthereumGasPlugin: () => import("@xyo-network/payloadset-plugin").PayloadSetDivinerPlugin<EthereumGasDiviner<import(".store/@xylabs-object-npm-4.
|
|
3
|
-
account?: import(".store/@xyo-network-account-model-virtual-
|
|
2
|
+
export declare const EthereumGasPlugin: () => import("@xyo-network/payloadset-plugin").PayloadSetDivinerPlugin<EthereumGasDiviner<import(".store/@xylabs-object-npm-4.4.9-23a96f4f51/package").BaseParamsFields & {
|
|
3
|
+
account?: import(".store/@xyo-network-account-model-virtual-b94ae9d87c/package").AccountInstance | "random";
|
|
4
4
|
addToResolvers?: boolean;
|
|
5
|
-
additionalSigners?: import(".store/@xyo-network-account-model-virtual-
|
|
5
|
+
additionalSigners?: import(".store/@xyo-network-account-model-virtual-b94ae9d87c/package").AccountInstance[];
|
|
6
6
|
allowNameResolution?: boolean;
|
|
7
7
|
config: import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & import("@xyo-network/payload-model").SchemaFields & import("@xyo-network/payload-model").PayloadFields & Omit<import("@xyo-network/module-model").ArchivingModuleConfig & import("@xyo-network/module-model").ModuleConfigFields & {
|
|
8
8
|
schema: "network.xyo.blockchain.ethereum.gas.diviner.config";
|
package/dist/neutral/index.mjs
CHANGED
|
@@ -63,13 +63,13 @@ var isEthereumGasEthgasstationPayload = (payload) => {
|
|
|
63
63
|
};
|
|
64
64
|
|
|
65
65
|
// src/lib/transforms/transformGasFromBlocknative.ts
|
|
66
|
-
import
|
|
66
|
+
import regression from "regression";
|
|
67
67
|
var getBaseFee = (payload) => {
|
|
68
68
|
return payload?.blockPrices?.[0]?.baseFeePerGas;
|
|
69
69
|
};
|
|
70
70
|
var getFeePerGas = (payload) => {
|
|
71
71
|
const sorted = payload.blockPrices?.[0].estimatedPrices?.sort((a, b) => a.confidence - b.confidence);
|
|
72
|
-
const trend = linear([
|
|
72
|
+
const trend = regression.linear([
|
|
73
73
|
[0, sorted?.[0].price],
|
|
74
74
|
[1, sorted?.[1].price],
|
|
75
75
|
[2, sorted?.[2].price],
|
|
@@ -86,7 +86,7 @@ var getFeePerGas = (payload) => {
|
|
|
86
86
|
};
|
|
87
87
|
var getPriorityFeePerGas = (payload) => {
|
|
88
88
|
const sorted = payload.blockPrices?.[0].estimatedPrices?.sort((a, b) => a.confidence - b.confidence);
|
|
89
|
-
const trend = linear([
|
|
89
|
+
const trend = regression.linear([
|
|
90
90
|
[0, sorted?.[0].maxPriorityFeePerGas],
|
|
91
91
|
[1, sorted?.[1].maxPriorityFeePerGas],
|
|
92
92
|
[2, sorted?.[2].maxPriorityFeePerGas],
|
|
@@ -169,7 +169,7 @@ var transformGasFromEthers = (payload) => {
|
|
|
169
169
|
};
|
|
170
170
|
|
|
171
171
|
// src/lib/transforms/transformGasFromEtherscan.ts
|
|
172
|
-
import
|
|
172
|
+
import regression2 from "regression";
|
|
173
173
|
var getBaseFee3 = (payload) => {
|
|
174
174
|
const { suggestBaseFee } = payload.result;
|
|
175
175
|
return Number.parseFloat(suggestBaseFee);
|
|
@@ -183,7 +183,7 @@ var getFeePerGas4 = (payload) => {
|
|
|
183
183
|
const low = Number.parseFloat(SafeGasPrice);
|
|
184
184
|
const medium = Number.parseFloat(ProposeGasPrice);
|
|
185
185
|
const high = Number.parseFloat(FastGasPrice);
|
|
186
|
-
const veryHigh =
|
|
186
|
+
const veryHigh = regression2.linear([
|
|
187
187
|
[0, low],
|
|
188
188
|
[1, medium],
|
|
189
189
|
[2, high]
|
|
@@ -207,7 +207,7 @@ var transformGasFromEtherscan = (payload) => {
|
|
|
207
207
|
};
|
|
208
208
|
|
|
209
209
|
// src/lib/transforms/transformGasFromEthgasstation.ts
|
|
210
|
-
import
|
|
210
|
+
import regression3 from "regression";
|
|
211
211
|
var getBaseFee4 = (payload) => {
|
|
212
212
|
const { baseFee } = payload;
|
|
213
213
|
return baseFee;
|
|
@@ -218,7 +218,7 @@ var getFeePerGas5 = (payload) => {
|
|
|
218
218
|
fast: high,
|
|
219
219
|
instant: veryHigh
|
|
220
220
|
} = payload.gasPrice;
|
|
221
|
-
const trend =
|
|
221
|
+
const trend = regression3.linear([
|
|
222
222
|
[1, medium],
|
|
223
223
|
[2, high],
|
|
224
224
|
[3, veryHigh]
|
|
@@ -237,7 +237,7 @@ var getPriorityFeePerGas3 = (payload) => {
|
|
|
237
237
|
fast: high,
|
|
238
238
|
instant: veryHigh
|
|
239
239
|
} = payload.priorityFee;
|
|
240
|
-
const trend =
|
|
240
|
+
const trend = regression3.linear([
|
|
241
241
|
[1, medium],
|
|
242
242
|
[2, high],
|
|
243
243
|
[3, veryHigh]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/Diviner.ts","../../src/lib/divineGas.ts","../../src/lib/average.ts","../../src/lib/identities/isEthereumGasBlocknativePayload.ts","../../src/lib/identities/isEthereumGasEtherchainV2Payload.ts","../../src/lib/identities/isEthereumGasEtherscanPayload.ts","../../src/lib/identities/isEthereumGasEthersPayload.ts","../../src/lib/identities/isEthereumGasEthgasstationPayload.ts","../../src/lib/transforms/transformGasFromBlocknative.ts","../../src/lib/transforms/transformGasFromEtherchainV2.ts","../../src/lib/transforms/transformGasFromEthers.ts","../../src/lib/transforms/transformGasFromEtherscan.ts","../../src/lib/transforms/transformGasFromEthgasstation.ts","../../src/Schema.ts","../../src/Plugin.ts"],"sourcesContent":["import { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport type {\n DivinerConfig, DivinerModule, DivinerParams,\n} from '@xyo-network/diviner-model'\nimport { EthereumGasSchema } from '@xyo-network/gas-price-payload-plugin'\nimport type { AnyConfigSchema } from '@xyo-network/module-model'\nimport type { Payload, Schema } from '@xyo-network/payload-model'\n\nimport { divineGas } from './lib/index.ts'\nimport { EthereumGasDivinerConfigSchema } from './Schema.ts'\n\nexport type EthereumGasDivinerConfig = DivinerConfig<{ schema: EthereumGasDivinerConfigSchema }>\nexport type EthereumGasDivinerParams = DivinerParams<AnyConfigSchema<EthereumGasDivinerConfig>>\n\nexport class EthereumGasDiviner<TParams extends EthereumGasDivinerParams = EthereumGasDivinerParams>\n extends AbstractDiviner<TParams>\n implements DivinerModule {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, EthereumGasDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = EthereumGasDivinerConfigSchema\n static override targetSchema: string = EthereumGasSchema\n\n protected override async divineHandler(payloads?: Payload[]): Promise<Payload[]> {\n const cost = await divineGas(payloads ?? [])\n return [cost]\n }\n}\n","import type { EthereumGasPayload, FeeData } from '@xyo-network/gas-price-payload-plugin'\nimport { EthereumGasSchema } from '@xyo-network/gas-price-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\n\nimport { average } from './average.ts'\nimport {\n isEthereumGasBlocknativePayload,\n isEthereumGasEtherchainV2Payload,\n isEthereumGasEtherscanPayload,\n isEthereumGasEthersPayload,\n isEthereumGasEthgasstationPayload,\n} from './identities/index.ts'\nimport {\n transformGasFromBlocknative,\n transformGasFromEtherchainV2,\n transformGasFromEthers,\n transformGasFromEtherscan,\n transformGasFromEthgasstation,\n} from './transforms/index.ts'\n\nexport const divineGas = async (payloads: Payload[]): Promise<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 = await new PayloadBuilder<EthereumGasPayload>({ schema: EthereumGasSchema }).fields({ ...avg, timestamp }).build()\n return payload\n}\n","import { exists } from '@xylabs/exists'\nimport type { FeeData } from '@xyo-network/gas-price-payload-plugin'\n\n/**\n * Averages an array of numbers\n * @param x Averages an array of numbers\n * @returns The average of the array of numbers or undefined if the\n * array is empty or undefined\n */\nconst listAverage = (x?: number[]) => (x?.length ? x.reduce((a, b) => a + b) / x.length : undefined)\n\n/**\n * Averages the property indicates by the supplied property\n * expression across the array of FeeData\n * @param data The array of data to average\n * @param propertyExpression The expression for the property to\n * average\n * @returns The average of the supplied property across the array\n */\nconst averageProperty = (data: FeeData[], propertyExpression: (x: FeeData) => number | undefined) => {\n return listAverage(data.map(propertyExpression).filter(exists))\n}\n\n/**\n * Averages the supplied FeeData\n * @param input An array of FeeData or undefined\n * @returns The average of the supplied FeeData\n */\nexport const average = (input?: (FeeData | undefined)[]): FeeData => {\n const data = input?.filter(exists) || []\n const averaged: FeeData = {\n baseFee: averageProperty(data, x => x.baseFee),\n feePerGas: {\n high: averageProperty(data, x => x.feePerGas.high),\n low: averageProperty(data, x => x.feePerGas.low),\n medium: averageProperty(data, x => x.feePerGas.medium),\n veryHigh: averageProperty(data, x => x.feePerGas.veryHigh),\n },\n priorityFeePerGas: {\n high: averageProperty(data, x => x.priorityFeePerGas.high),\n low: averageProperty(data, x => x.priorityFeePerGas.low),\n medium: averageProperty(data, x => x.priorityFeePerGas.medium),\n veryHigh: averageProperty(data, x => x.priorityFeePerGas.veryHigh),\n },\n }\n return averaged\n}\n","import type { EthereumGasBlocknativePayload } from '@xyo-network/blocknative-ethereum-gas-payload-plugin'\nimport { EthereumGasBlocknativeSchema } from '@xyo-network/blocknative-ethereum-gas-payload-plugin'\nimport type { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasBlocknativePayload = (payload?: Payload | null): payload is EthereumGasBlocknativePayload => {\n return payload?.schema === EthereumGasBlocknativeSchema\n}\n","import type { EthereumGasEtherchainV2Payload } from '@xyo-network/etherchain-gas-ethereum-blockchain-payload-plugins'\nimport { EthereumGasEtherchainV2Schema } from '@xyo-network/etherchain-gas-ethereum-blockchain-payload-plugins'\nimport type { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEtherchainV2Payload = (payload?: Payload | null): payload is EthereumGasEtherchainV2Payload => {\n return payload?.schema === EthereumGasEtherchainV2Schema\n}\n","import type { EthereumGasEtherscanPayload } from '@xyo-network/etherscan-ethereum-gas-payload-plugin'\nimport { EthereumGasEtherscanSchema } from '@xyo-network/etherscan-ethereum-gas-payload-plugin'\nimport type { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEtherscanPayload = (payload?: Payload | null): payload is EthereumGasEtherscanPayload => {\n return payload?.schema === EthereumGasEtherscanSchema\n}\n","import type { EthereumGasEthersPayload } from '@xyo-network/ethers-ethereum-gas-payload-plugin'\nimport { EthereumGasEthersSchema } from '@xyo-network/ethers-ethereum-gas-payload-plugin'\nimport type { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEthersPayload = (payload?: Payload | null): payload is EthereumGasEthersPayload => {\n return payload?.schema === EthereumGasEthersSchema\n}\n","import type { EthereumGasEthgasstationPayload } from '@xyo-network/ethgasstation-ethereum-gas-payload-plugin'\nimport { EthereumGasEthgasstationSchema } from '@xyo-network/ethgasstation-ethereum-gas-payload-plugin'\nimport type { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEthgasstationPayload = (payload?: Payload | null): payload is EthereumGasEthgasstationPayload => {\n return payload?.schema === EthereumGasEthgasstationSchema\n}\n","import type { EthereumGasBlocknativePayload } from '@xyo-network/blocknative-ethereum-gas-payload-plugin'\nimport type {\n FeeData, FeePerGas, PriorityFeePerGas,\n} from '@xyo-network/gas-price-payload-plugin'\nimport { 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 {\n baseFee, feePerGas, priorityFeePerGas,\n }\n}\n","import type { EthereumGasEtherchainV2Payload } from '@xyo-network/etherchain-gas-ethereum-blockchain-payload-plugins'\nimport type { FeeData, FeePerGas } from '@xyo-network/gas-price-payload-plugin'\n\nconst getFeePerGas = (payload: EthereumGasEtherchainV2Payload): Partial<FeePerGas> => {\n const {\n slow, standard, fast, rapid,\n } = payload.data\n const low = slow / 1_000_000_000\n const medium = standard / 1_000_000_000\n const high = fast / 1_000_000_000\n const veryHigh = rapid / 1_000_000_000\n return {\n high, low, medium, veryHigh,\n }\n}\n\nexport const transformGasFromEtherchainV2 = (payload: EthereumGasEtherchainV2Payload): FeeData => {\n const baseFee = undefined\n const feePerGas = getFeePerGas(payload)\n const priorityFeePerGas = {}\n return {\n baseFee, feePerGas, priorityFeePerGas,\n }\n}\n","import type { EthereumGasEthersPayload } from '@xyo-network/ethers-ethereum-gas-payload-plugin'\nimport type {\n FeeData, FeePerGas, PriorityFeePerGas,\n} from '@xyo-network/gas-price-payload-plugin'\n\nconst getBaseFee = (payload: EthereumGasEthersPayload): number | undefined => {\n const { gasPrice } = payload\n return gasPrice ? gasPrice / 1_000_000_000 : undefined\n}\n\nconst getFeePerGas = (payload: EthereumGasEthersPayload): Partial<FeePerGas> => {\n const { maxFeePerGas } = payload\n const high = maxFeePerGas ? maxFeePerGas / 1_000_000_000 : undefined\n return { high }\n}\n\nconst getPriorityFeePerGas = (payload: EthereumGasEthersPayload): Partial<PriorityFeePerGas> => {\n const { maxPriorityFeePerGas } = payload\n const high = maxPriorityFeePerGas ? maxPriorityFeePerGas / 1_000_000_000 : undefined\n return { high }\n}\n\nexport const transformGasFromEthers = (payload: EthereumGasEthersPayload): FeeData => {\n const baseFee = getBaseFee(payload)\n const feePerGas = getFeePerGas(payload)\n const priorityFeePerGas = getPriorityFeePerGas(payload)\n return {\n baseFee, feePerGas, priorityFeePerGas,\n }\n}\n","import type { EthereumGasEtherscanPayload } from '@xyo-network/etherscan-ethereum-gas-payload-plugin'\nimport type { FeeData, FeePerGas } from '@xyo-network/gas-price-payload-plugin'\nimport { linear } from 'regression'\n\nconst getBaseFee = (payload: EthereumGasEtherscanPayload): number | undefined => {\n const { suggestBaseFee } = payload.result\n return Number.parseFloat(suggestBaseFee)\n}\n\nconst getFeePerGas = (payload: EthereumGasEtherscanPayload): Partial<FeePerGas> => {\n const {\n FastGasPrice, ProposeGasPrice, SafeGasPrice,\n } = payload.result\n const low = Number.parseFloat(SafeGasPrice)\n const medium = Number.parseFloat(ProposeGasPrice)\n const high = Number.parseFloat(FastGasPrice)\n const veryHigh = linear([\n [0, low],\n [1, medium],\n [2, high],\n ]).predict(3)[1]\n return {\n high, low, medium, veryHigh,\n }\n}\n\nexport const transformGasFromEtherscan = (payload: EthereumGasEtherscanPayload): FeeData => {\n const baseFee = getBaseFee(payload)\n const feePerGas = getFeePerGas(payload)\n const priorityFeePerGas = {}\n return {\n baseFee, feePerGas, priorityFeePerGas,\n }\n}\n","import type { EthereumGasEthgasstationPayload } from '@xyo-network/ethgasstation-ethereum-gas-payload-plugin'\nimport type {\n FeeData, FeePerGas, PriorityFeePerGas,\n} from '@xyo-network/gas-price-payload-plugin'\nimport { 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 {\n standard: medium, fast: high, instant: veryHigh,\n } = 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 {\n low, medium, high, veryHigh,\n }\n}\n\nconst getPriorityFeePerGas = (payload: EthereumGasEthgasstationPayload): Partial<PriorityFeePerGas> => {\n const {\n standard: medium, fast: high, instant: veryHigh,\n } = payload.priorityFee\n const trend = linear([\n [1, medium],\n [2, high],\n [3, veryHigh],\n ])\n const low = trend.predict(0)[1]\n return {\n low, medium, high, veryHigh,\n }\n}\n\nexport const transformGasFromEthgasstation = (payload: EthereumGasEthgasstationPayload): FeeData => {\n const baseFee = getBaseFee(payload)\n const feePerGas = getFeePerGas(payload)\n const priorityFeePerGas = getPriorityFeePerGas(payload)\n return {\n baseFee, feePerGas, priorityFeePerGas,\n }\n}\n","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 { EthereumGasSchema } from '@xyo-network/gas-price-payload-plugin'\nimport { PayloadSetSchema } from '@xyo-network/payload-model'\nimport { createPayloadSetDivinerPlugin } from '@xyo-network/payloadset-plugin'\n\nimport { EthereumGasDiviner } from './Diviner.ts'\n\nexport const EthereumGasPlugin = () =>\n createPayloadSetDivinerPlugin<EthereumGasDiviner>(\n { required: { [EthereumGasSchema]: 1 }, schema: PayloadSetSchema },\n {\n diviner: async (params) => {\n return (await EthereumGasDiviner.create(params)) as EthereumGasDiviner\n },\n },\n )\n"],"mappings":";AAAA,SAAS,uBAAuB;AAIhC,SAAS,qBAAAA,0BAAyB;;;ACHlC,SAAS,yBAAyB;AAClC,SAAS,sBAAsB;;;ACF/B,SAAS,cAAc;AASvB,IAAM,cAAc,CAAC,MAAkB,GAAG,SAAS,EAAE,OAAO,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,SAAS;AAU1F,IAAM,kBAAkB,CAAC,MAAiB,uBAA2D;AACnG,SAAO,YAAY,KAAK,IAAI,kBAAkB,EAAE,OAAO,MAAM,CAAC;AAChE;AAOO,IAAM,UAAU,CAAC,UAA6C;AACnE,QAAM,OAAO,OAAO,OAAO,MAAM,KAAK,CAAC;AACvC,QAAM,WAAoB;AAAA,IACxB,SAAS,gBAAgB,MAAM,OAAK,EAAE,OAAO;AAAA,IAC7C,WAAW;AAAA,MACT,MAAM,gBAAgB,MAAM,OAAK,EAAE,UAAU,IAAI;AAAA,MACjD,KAAK,gBAAgB,MAAM,OAAK,EAAE,UAAU,GAAG;AAAA,MAC/C,QAAQ,gBAAgB,MAAM,OAAK,EAAE,UAAU,MAAM;AAAA,MACrD,UAAU,gBAAgB,MAAM,OAAK,EAAE,UAAU,QAAQ;AAAA,IAC3D;AAAA,IACA,mBAAmB;AAAA,MACjB,MAAM,gBAAgB,MAAM,OAAK,EAAE,kBAAkB,IAAI;AAAA,MACzD,KAAK,gBAAgB,MAAM,OAAK,EAAE,kBAAkB,GAAG;AAAA,MACvD,QAAQ,gBAAgB,MAAM,OAAK,EAAE,kBAAkB,MAAM;AAAA,MAC7D,UAAU,gBAAgB,MAAM,OAAK,EAAE,kBAAkB,QAAQ;AAAA,IACnE;AAAA,EACF;AACA,SAAO;AACT;;;AC7CA,SAAS,oCAAoC;AAGtC,IAAM,kCAAkC,CAAC,YAAuE;AACrH,SAAO,SAAS,WAAW;AAC7B;;;ACLA,SAAS,qCAAqC;AAGvC,IAAM,mCAAmC,CAAC,YAAwE;AACvH,SAAO,SAAS,WAAW;AAC7B;;;ACLA,SAAS,kCAAkC;AAGpC,IAAM,gCAAgC,CAAC,YAAqE;AACjH,SAAO,SAAS,WAAW;AAC7B;;;ACLA,SAAS,+BAA+B;AAGjC,IAAM,6BAA6B,CAAC,YAAkE;AAC3G,SAAO,SAAS,WAAW;AAC7B;;;ACLA,SAAS,sCAAsC;AAGxC,IAAM,oCAAoC,CAAC,YAAyE;AACzH,SAAO,SAAS,WAAW;AAC7B;;;ACFA,SAAS,cAAc;AAEvB,IAAM,aAAa,CAAC,YAA+D;AACjF,SAAO,SAAS,cAAc,CAAC,GAAG;AACpC;AAEA,IAAM,eAAe,CAAC,YAA+D;AACnF,QAAM,SAAS,QAAQ,cAAc,CAAC,EAAE,iBAAiB,KAAK,CAAC,GAAG,MAAM,EAAE,aAAa,EAAE,UAAU;AACnG,QAAM,QAAQ,OAAO;AAAA,IACnB,CAAC,GAAG,SAAS,CAAC,EAAE,KAAK;AAAA,IACrB,CAAC,GAAG,SAAS,CAAC,EAAE,KAAK;AAAA,IACrB,CAAC,GAAG,SAAS,CAAC,EAAE,KAAK;AAAA,IACrB,CAAC,GAAG,SAAS,CAAC,EAAE,KAAK;AAAA,IACrB,CAAC,GAAG,SAAS,CAAC,EAAE,KAAK;AAAA,EACvB,CAAC;AACD,QAAM,YAAuB;AAAA,IAC3B,KAAK,MAAM,QAAQ,GAAG,EAAE,CAAC;AAAA,IACzB,QAAQ,MAAM,QAAQ,GAAG,EAAE,CAAC;AAAA,IAC5B,MAAM,MAAM,QAAQ,GAAG,EAAE,CAAC;AAAA,IAC1B,UAAU,MAAM,QAAQ,GAAG,EAAE,CAAC;AAAA,EAChC;AACA,SAAO;AACT;AAEA,IAAM,uBAAuB,CAAC,YAAuE;AACnG,QAAM,SAAS,QAAQ,cAAc,CAAC,EAAE,iBAAiB,KAAK,CAAC,GAAG,MAAM,EAAE,aAAa,EAAE,UAAU;AACnG,QAAM,QAAQ,OAAO;AAAA,IACnB,CAAC,GAAG,SAAS,CAAC,EAAE,oBAAoB;AAAA,IACpC,CAAC,GAAG,SAAS,CAAC,EAAE,oBAAoB;AAAA,IACpC,CAAC,GAAG,SAAS,CAAC,EAAE,oBAAoB;AAAA,IACpC,CAAC,GAAG,SAAS,CAAC,EAAE,oBAAoB;AAAA,IACpC,CAAC,GAAG,SAAS,CAAC,EAAE,oBAAoB;AAAA,EACtC,CAAC;AACD,QAAM,oBAAuC;AAAA,IAC3C,KAAK,MAAM,QAAQ,GAAG,EAAE,CAAC;AAAA,IACzB,QAAQ,MAAM,QAAQ,GAAG,EAAE,CAAC;AAAA,IAC5B,MAAM,MAAM,QAAQ,GAAG,EAAE,CAAC;AAAA,IAC1B,UAAU,MAAM,QAAQ,GAAG,EAAE,CAAC;AAAA,EAChC;AACA,SAAO;AACT;AAEO,IAAM,8BAA8B,CAAC,YAAoD;AAC9F,QAAM,UAAU,WAAW,OAAO;AAClC,QAAM,YAAY,aAAa,OAAO;AACtC,QAAM,oBAAoB,qBAAqB,OAAO;AACtD,SAAO;AAAA,IACL;AAAA,IAAS;AAAA,IAAW;AAAA,EACtB;AACF;;;AClDA,IAAMC,gBAAe,CAAC,YAAgE;AACpF,QAAM;AAAA,IACJ;AAAA,IAAM;AAAA,IAAU;AAAA,IAAM;AAAA,EACxB,IAAI,QAAQ;AACZ,QAAM,MAAM,OAAO;AACnB,QAAM,SAAS,WAAW;AAC1B,QAAM,OAAO,OAAO;AACpB,QAAM,WAAW,QAAQ;AACzB,SAAO;AAAA,IACL;AAAA,IAAM;AAAA,IAAK;AAAA,IAAQ;AAAA,EACrB;AACF;AAEO,IAAM,+BAA+B,CAAC,YAAqD;AAChG,QAAM,UAAU;AAChB,QAAM,YAAYA,cAAa,OAAO;AACtC,QAAM,oBAAoB,CAAC;AAC3B,SAAO;AAAA,IACL;AAAA,IAAS;AAAA,IAAW;AAAA,EACtB;AACF;;;AClBA,IAAMC,cAAa,CAAC,YAA0D;AAC5E,QAAM,EAAE,SAAS,IAAI;AACrB,SAAO,WAAW,WAAW,MAAgB;AAC/C;AAEA,IAAMC,gBAAe,CAAC,YAA0D;AAC9E,QAAM,EAAE,aAAa,IAAI;AACzB,QAAM,OAAO,eAAe,eAAe,MAAgB;AAC3D,SAAO,EAAE,KAAK;AAChB;AAEA,IAAMC,wBAAuB,CAAC,YAAkE;AAC9F,QAAM,EAAE,qBAAqB,IAAI;AACjC,QAAM,OAAO,uBAAuB,uBAAuB,MAAgB;AAC3E,SAAO,EAAE,KAAK;AAChB;AAEO,IAAM,yBAAyB,CAAC,YAA+C;AACpF,QAAM,UAAUF,YAAW,OAAO;AAClC,QAAM,YAAYC,cAAa,OAAO;AACtC,QAAM,oBAAoBC,sBAAqB,OAAO;AACtD,SAAO;AAAA,IACL;AAAA,IAAS;AAAA,IAAW;AAAA,EACtB;AACF;;;AC3BA,SAAS,UAAAC,eAAc;AAEvB,IAAMC,cAAa,CAAC,YAA6D;AAC/E,QAAM,EAAE,eAAe,IAAI,QAAQ;AACnC,SAAO,OAAO,WAAW,cAAc;AACzC;AAEA,IAAMC,gBAAe,CAAC,YAA6D;AACjF,QAAM;AAAA,IACJ;AAAA,IAAc;AAAA,IAAiB;AAAA,EACjC,IAAI,QAAQ;AACZ,QAAM,MAAM,OAAO,WAAW,YAAY;AAC1C,QAAM,SAAS,OAAO,WAAW,eAAe;AAChD,QAAM,OAAO,OAAO,WAAW,YAAY;AAC3C,QAAM,WAAWF,QAAO;AAAA,IACtB,CAAC,GAAG,GAAG;AAAA,IACP,CAAC,GAAG,MAAM;AAAA,IACV,CAAC,GAAG,IAAI;AAAA,EACV,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;AACf,SAAO;AAAA,IACL;AAAA,IAAM;AAAA,IAAK;AAAA,IAAQ;AAAA,EACrB;AACF;AAEO,IAAM,4BAA4B,CAAC,YAAkD;AAC1F,QAAM,UAAUC,YAAW,OAAO;AAClC,QAAM,YAAYC,cAAa,OAAO;AACtC,QAAM,oBAAoB,CAAC;AAC3B,SAAO;AAAA,IACL;AAAA,IAAS;AAAA,IAAW;AAAA,EACtB;AACF;;;AC7BA,SAAS,UAAAC,eAAc;AAEvB,IAAMC,cAAa,CAAC,YAAiE;AACnF,QAAM,EAAE,QAAQ,IAAI;AACpB,SAAO;AACT;AAEA,IAAMC,gBAAe,CAAC,YAAiE;AACrF,QAAM;AAAA,IACJ,UAAU;AAAA,IAAQ,MAAM;AAAA,IAAM,SAAS;AAAA,EACzC,IAAI,QAAQ;AACZ,QAAM,QAAQF,QAAO;AAAA,IACnB,CAAC,GAAG,MAAM;AAAA,IACV,CAAC,GAAG,IAAI;AAAA,IACR,CAAC,GAAG,QAAQ;AAAA,EACd,CAAC;AACD,QAAM,MAAM,MAAM,QAAQ,CAAC,EAAE,CAAC;AAC9B,SAAO;AAAA,IACL;AAAA,IAAK;AAAA,IAAQ;AAAA,IAAM;AAAA,EACrB;AACF;AAEA,IAAMG,wBAAuB,CAAC,YAAyE;AACrG,QAAM;AAAA,IACJ,UAAU;AAAA,IAAQ,MAAM;AAAA,IAAM,SAAS;AAAA,EACzC,IAAI,QAAQ;AACZ,QAAM,QAAQH,QAAO;AAAA,IACnB,CAAC,GAAG,MAAM;AAAA,IACV,CAAC,GAAG,IAAI;AAAA,IACR,CAAC,GAAG,QAAQ;AAAA,EACd,CAAC;AACD,QAAM,MAAM,MAAM,QAAQ,CAAC,EAAE,CAAC;AAC9B,SAAO;AAAA,IACL;AAAA,IAAK;AAAA,IAAQ;AAAA,IAAM;AAAA,EACrB;AACF;AAEO,IAAM,gCAAgC,CAAC,YAAsD;AAClG,QAAM,UAAUC,YAAW,OAAO;AAClC,QAAM,YAAYC,cAAa,OAAO;AACtC,QAAM,oBAAoBC,sBAAqB,OAAO;AACtD,SAAO;AAAA,IACL;AAAA,IAAS;AAAA,IAAW;AAAA,EACtB;AACF;;;AX3BO,IAAM,YAAY,OAAO,aAAqD;AACnF,QAAM,cAAc,SAAS,OAAO,+BAA+B,EAAE,IAAI,2BAA2B;AACpG,QAAM,eAAe,SAAS,OAAO,gCAAgC,EAAE,IAAI,4BAA4B;AACvG,QAAM,SAAS,SAAS,OAAO,0BAA0B,EAAE,IAAI,sBAAsB;AACrF,QAAM,YAAY,SAAS,OAAO,6BAA6B,EAAE,IAAI,yBAAyB;AAC9F,QAAM,gBAAgB,SAAS,OAAO,iCAAiC,EAAE,IAAI,6BAA6B;AAC1G,QAAM,mBAA8B,CAAC,GAAG,aAAa,GAAG,cAAc,GAAG,QAAQ,GAAG,WAAW,GAAG,aAAa;AAC/G,QAAM,MAAM,QAAQ,gBAAgB;AACpC,QAAM,YAAY,KAAK,IAAI;AAC3B,QAAM,UAAU,MAAM,IAAI,eAAmC,EAAE,QAAQ,kBAAkB,CAAC,EAAE,OAAO,EAAE,GAAG,KAAK,UAAU,CAAC,EAAE,MAAM;AAChI,SAAO;AACT;;;AY/BO,IAAM,gCAA+D;AAGrE,IAAM,iCAAiE;;;AbUvE,IAAM,qBAAN,cACG,gBACiB;AAAA,EACzB,OAAyB,gBAA0B,CAAC,GAAG,MAAM,eAAe,8BAA8B;AAAA,EAC1G,OAAyB,sBAA8B;AAAA,EACvD,OAAgB,eAAuBC;AAAA,EAEvC,MAAyB,cAAc,UAA0C;AAC/E,UAAM,OAAO,MAAM,UAAU,YAAY,CAAC,CAAC;AAC3C,WAAO,CAAC,IAAI;AAAA,EACd;AACF;;;AczBA,SAAS,qBAAAC,0BAAyB;AAClC,SAAS,wBAAwB;AACjC,SAAS,qCAAqC;AAIvC,IAAM,oBAAoB,MAC/B;AAAA,EACE,EAAE,UAAU,EAAE,CAACC,kBAAiB,GAAG,EAAE,GAAG,QAAQ,iBAAiB;AAAA,EACjE;AAAA,IACE,SAAS,OAAO,WAAW;AACzB,aAAQ,MAAM,mBAAmB,OAAO,MAAM;AAAA,IAChD;AAAA,EACF;AACF;","names":["EthereumGasSchema","getFeePerGas","getBaseFee","getFeePerGas","getPriorityFeePerGas","linear","getBaseFee","getFeePerGas","linear","getBaseFee","getFeePerGas","getPriorityFeePerGas","EthereumGasSchema","EthereumGasSchema","EthereumGasSchema"]}
|
|
1
|
+
{"version":3,"sources":["../../src/Diviner.ts","../../src/lib/divineGas.ts","../../src/lib/average.ts","../../src/lib/identities/isEthereumGasBlocknativePayload.ts","../../src/lib/identities/isEthereumGasEtherchainV2Payload.ts","../../src/lib/identities/isEthereumGasEtherscanPayload.ts","../../src/lib/identities/isEthereumGasEthersPayload.ts","../../src/lib/identities/isEthereumGasEthgasstationPayload.ts","../../src/lib/transforms/transformGasFromBlocknative.ts","../../src/lib/transforms/transformGasFromEtherchainV2.ts","../../src/lib/transforms/transformGasFromEthers.ts","../../src/lib/transforms/transformGasFromEtherscan.ts","../../src/lib/transforms/transformGasFromEthgasstation.ts","../../src/Schema.ts","../../src/Plugin.ts"],"sourcesContent":["import { AbstractDiviner } from '@xyo-network/diviner-abstract'\nimport type {\n DivinerConfig, DivinerModule, DivinerParams,\n} from '@xyo-network/diviner-model'\nimport { EthereumGasSchema } from '@xyo-network/gas-price-payload-plugin'\nimport type { AnyConfigSchema } from '@xyo-network/module-model'\nimport type { Payload, Schema } from '@xyo-network/payload-model'\n\nimport { divineGas } from './lib/index.ts'\nimport { EthereumGasDivinerConfigSchema } from './Schema.ts'\n\nexport type EthereumGasDivinerConfig = DivinerConfig<{ schema: EthereumGasDivinerConfigSchema }>\nexport type EthereumGasDivinerParams = DivinerParams<AnyConfigSchema<EthereumGasDivinerConfig>>\n\nexport class EthereumGasDiviner<TParams extends EthereumGasDivinerParams = EthereumGasDivinerParams>\n extends AbstractDiviner<TParams>\n implements DivinerModule {\n static override readonly configSchemas: Schema[] = [...super.configSchemas, EthereumGasDivinerConfigSchema]\n static override readonly defaultConfigSchema: Schema = EthereumGasDivinerConfigSchema\n static override targetSchema: string = EthereumGasSchema\n\n protected override async divineHandler(payloads?: Payload[]): Promise<Payload[]> {\n const cost = await divineGas(payloads ?? [])\n return [cost]\n }\n}\n","import type { EthereumGasPayload, FeeData } from '@xyo-network/gas-price-payload-plugin'\nimport { EthereumGasSchema } from '@xyo-network/gas-price-payload-plugin'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { Payload } from '@xyo-network/payload-model'\n\nimport { average } from './average.ts'\nimport {\n isEthereumGasBlocknativePayload,\n isEthereumGasEtherchainV2Payload,\n isEthereumGasEtherscanPayload,\n isEthereumGasEthersPayload,\n isEthereumGasEthgasstationPayload,\n} from './identities/index.ts'\nimport {\n transformGasFromBlocknative,\n transformGasFromEtherchainV2,\n transformGasFromEthers,\n transformGasFromEtherscan,\n transformGasFromEthgasstation,\n} from './transforms/index.ts'\n\nexport const divineGas = async (payloads: Payload[]): Promise<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 = await new PayloadBuilder<EthereumGasPayload>({ schema: EthereumGasSchema }).fields({ ...avg, timestamp }).build()\n return payload\n}\n","import { exists } from '@xylabs/exists'\nimport type { FeeData } from '@xyo-network/gas-price-payload-plugin'\n\n/**\n * Averages an array of numbers\n * @param x Averages an array of numbers\n * @returns The average of the array of numbers or undefined if the\n * array is empty or undefined\n */\nconst listAverage = (x?: number[]) => (x?.length ? x.reduce((a, b) => a + b) / x.length : undefined)\n\n/**\n * Averages the property indicates by the supplied property\n * expression across the array of FeeData\n * @param data The array of data to average\n * @param propertyExpression The expression for the property to\n * average\n * @returns The average of the supplied property across the array\n */\nconst averageProperty = (data: FeeData[], propertyExpression: (x: FeeData) => number | undefined) => {\n return listAverage(data.map(propertyExpression).filter(exists))\n}\n\n/**\n * Averages the supplied FeeData\n * @param input An array of FeeData or undefined\n * @returns The average of the supplied FeeData\n */\nexport const average = (input?: (FeeData | undefined)[]): FeeData => {\n const data = input?.filter(exists) || []\n const averaged: FeeData = {\n baseFee: averageProperty(data, x => x.baseFee),\n feePerGas: {\n high: averageProperty(data, x => x.feePerGas.high),\n low: averageProperty(data, x => x.feePerGas.low),\n medium: averageProperty(data, x => x.feePerGas.medium),\n veryHigh: averageProperty(data, x => x.feePerGas.veryHigh),\n },\n priorityFeePerGas: {\n high: averageProperty(data, x => x.priorityFeePerGas.high),\n low: averageProperty(data, x => x.priorityFeePerGas.low),\n medium: averageProperty(data, x => x.priorityFeePerGas.medium),\n veryHigh: averageProperty(data, x => x.priorityFeePerGas.veryHigh),\n },\n }\n return averaged\n}\n","import type { EthereumGasBlocknativePayload } from '@xyo-network/blocknative-ethereum-gas-payload-plugin'\nimport { EthereumGasBlocknativeSchema } from '@xyo-network/blocknative-ethereum-gas-payload-plugin'\nimport type { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasBlocknativePayload = (payload?: Payload | null): payload is EthereumGasBlocknativePayload => {\n return payload?.schema === EthereumGasBlocknativeSchema\n}\n","import type { EthereumGasEtherchainV2Payload } from '@xyo-network/etherchain-gas-ethereum-blockchain-payload-plugins'\nimport { EthereumGasEtherchainV2Schema } from '@xyo-network/etherchain-gas-ethereum-blockchain-payload-plugins'\nimport type { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEtherchainV2Payload = (payload?: Payload | null): payload is EthereumGasEtherchainV2Payload => {\n return payload?.schema === EthereumGasEtherchainV2Schema\n}\n","import type { EthereumGasEtherscanPayload } from '@xyo-network/etherscan-ethereum-gas-payload-plugin'\nimport { EthereumGasEtherscanSchema } from '@xyo-network/etherscan-ethereum-gas-payload-plugin'\nimport type { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEtherscanPayload = (payload?: Payload | null): payload is EthereumGasEtherscanPayload => {\n return payload?.schema === EthereumGasEtherscanSchema\n}\n","import type { EthereumGasEthersPayload } from '@xyo-network/ethers-ethereum-gas-payload-plugin'\nimport { EthereumGasEthersSchema } from '@xyo-network/ethers-ethereum-gas-payload-plugin'\nimport type { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEthersPayload = (payload?: Payload | null): payload is EthereumGasEthersPayload => {\n return payload?.schema === EthereumGasEthersSchema\n}\n","import type { EthereumGasEthgasstationPayload } from '@xyo-network/ethgasstation-ethereum-gas-payload-plugin'\nimport { EthereumGasEthgasstationSchema } from '@xyo-network/ethgasstation-ethereum-gas-payload-plugin'\nimport type { Payload } from '@xyo-network/payload-model'\n\nexport const isEthereumGasEthgasstationPayload = (payload?: Payload | null): payload is EthereumGasEthgasstationPayload => {\n return payload?.schema === EthereumGasEthgasstationSchema\n}\n","import type { EthereumGasBlocknativePayload } from '@xyo-network/blocknative-ethereum-gas-payload-plugin'\nimport type {\n FeeData, FeePerGas, PriorityFeePerGas,\n} from '@xyo-network/gas-price-payload-plugin'\nimport regression from 'regression'\n\nconst getBaseFee = (payload: EthereumGasBlocknativePayload): number | undefined => {\n return payload?.blockPrices?.[0]?.baseFeePerGas\n}\n\nconst getFeePerGas = (payload: EthereumGasBlocknativePayload): Partial<FeePerGas> => {\n const sorted = payload.blockPrices?.[0].estimatedPrices?.sort((a, b) => a.confidence - b.confidence)\n const trend = regression.linear([\n [0, sorted?.[0].price],\n [1, sorted?.[1].price],\n [2, sorted?.[2].price],\n [3, sorted?.[3].price],\n [4, sorted?.[4].price],\n ])\n const feePerGas: FeePerGas = {\n low: trend.predict(0.5)[1],\n medium: trend.predict(1.5)[1],\n high: trend.predict(2.5)[1],\n veryHigh: trend.predict(3.5)[1],\n }\n return feePerGas\n}\n\nconst getPriorityFeePerGas = (payload: EthereumGasBlocknativePayload): Partial<PriorityFeePerGas> => {\n const sorted = payload.blockPrices?.[0].estimatedPrices?.sort((a, b) => a.confidence - b.confidence)\n const trend = regression.linear([\n [0, sorted?.[0].maxPriorityFeePerGas],\n [1, sorted?.[1].maxPriorityFeePerGas],\n [2, sorted?.[2].maxPriorityFeePerGas],\n [3, sorted?.[3].maxPriorityFeePerGas],\n [4, sorted?.[4].maxPriorityFeePerGas],\n ])\n const priorityFeePerGas: PriorityFeePerGas = {\n low: trend.predict(0.5)[1],\n medium: trend.predict(1.5)[1],\n high: trend.predict(2.5)[1],\n veryHigh: trend.predict(3.5)[1],\n }\n return priorityFeePerGas\n}\n\nexport const transformGasFromBlocknative = (payload: EthereumGasBlocknativePayload): FeeData => {\n const baseFee = getBaseFee(payload)\n const feePerGas = getFeePerGas(payload)\n const priorityFeePerGas = getPriorityFeePerGas(payload)\n return {\n baseFee, feePerGas, priorityFeePerGas,\n }\n}\n","import type { EthereumGasEtherchainV2Payload } from '@xyo-network/etherchain-gas-ethereum-blockchain-payload-plugins'\nimport type { FeeData, FeePerGas } from '@xyo-network/gas-price-payload-plugin'\n\nconst getFeePerGas = (payload: EthereumGasEtherchainV2Payload): Partial<FeePerGas> => {\n const {\n slow, standard, fast, rapid,\n } = payload.data\n const low = slow / 1_000_000_000\n const medium = standard / 1_000_000_000\n const high = fast / 1_000_000_000\n const veryHigh = rapid / 1_000_000_000\n return {\n high, low, medium, veryHigh,\n }\n}\n\nexport const transformGasFromEtherchainV2 = (payload: EthereumGasEtherchainV2Payload): FeeData => {\n const baseFee = undefined\n const feePerGas = getFeePerGas(payload)\n const priorityFeePerGas = {}\n return {\n baseFee, feePerGas, priorityFeePerGas,\n }\n}\n","import type { EthereumGasEthersPayload } from '@xyo-network/ethers-ethereum-gas-payload-plugin'\nimport type {\n FeeData, FeePerGas, PriorityFeePerGas,\n} from '@xyo-network/gas-price-payload-plugin'\n\nconst getBaseFee = (payload: EthereumGasEthersPayload): number | undefined => {\n const { gasPrice } = payload\n return gasPrice ? gasPrice / 1_000_000_000 : undefined\n}\n\nconst getFeePerGas = (payload: EthereumGasEthersPayload): Partial<FeePerGas> => {\n const { maxFeePerGas } = payload\n const high = maxFeePerGas ? maxFeePerGas / 1_000_000_000 : undefined\n return { high }\n}\n\nconst getPriorityFeePerGas = (payload: EthereumGasEthersPayload): Partial<PriorityFeePerGas> => {\n const { maxPriorityFeePerGas } = payload\n const high = maxPriorityFeePerGas ? maxPriorityFeePerGas / 1_000_000_000 : undefined\n return { high }\n}\n\nexport const transformGasFromEthers = (payload: EthereumGasEthersPayload): FeeData => {\n const baseFee = getBaseFee(payload)\n const feePerGas = getFeePerGas(payload)\n const priorityFeePerGas = getPriorityFeePerGas(payload)\n return {\n baseFee, feePerGas, priorityFeePerGas,\n }\n}\n","import type { EthereumGasEtherscanPayload } from '@xyo-network/etherscan-ethereum-gas-payload-plugin'\nimport type { FeeData, FeePerGas } from '@xyo-network/gas-price-payload-plugin'\nimport regression from 'regression'\n\nconst getBaseFee = (payload: EthereumGasEtherscanPayload): number | undefined => {\n const { suggestBaseFee } = payload.result\n return Number.parseFloat(suggestBaseFee)\n}\n\nconst getFeePerGas = (payload: EthereumGasEtherscanPayload): Partial<FeePerGas> => {\n const {\n FastGasPrice, ProposeGasPrice, SafeGasPrice,\n } = payload.result\n const low = Number.parseFloat(SafeGasPrice)\n const medium = Number.parseFloat(ProposeGasPrice)\n const high = Number.parseFloat(FastGasPrice)\n const veryHigh = regression.linear([\n [0, low],\n [1, medium],\n [2, high],\n ]).predict(3)[1]\n return {\n high, low, medium, veryHigh,\n }\n}\n\nexport const transformGasFromEtherscan = (payload: EthereumGasEtherscanPayload): FeeData => {\n const baseFee = getBaseFee(payload)\n const feePerGas = getFeePerGas(payload)\n const priorityFeePerGas = {}\n return {\n baseFee, feePerGas, priorityFeePerGas,\n }\n}\n","import type { EthereumGasEthgasstationPayload } from '@xyo-network/ethgasstation-ethereum-gas-payload-plugin'\nimport type {\n FeeData, FeePerGas, PriorityFeePerGas,\n} from '@xyo-network/gas-price-payload-plugin'\nimport regression from 'regression'\n\nconst getBaseFee = (payload: EthereumGasEthgasstationPayload): number | undefined => {\n const { baseFee } = payload\n return baseFee\n}\n\nconst getFeePerGas = (payload: EthereumGasEthgasstationPayload): Partial<FeePerGas> => {\n const {\n standard: medium, fast: high, instant: veryHigh,\n } = payload.gasPrice\n const trend = regression.linear([\n [1, medium],\n [2, high],\n [3, veryHigh],\n ])\n const low = trend.predict(0)[1]\n return {\n low, medium, high, veryHigh,\n }\n}\n\nconst getPriorityFeePerGas = (payload: EthereumGasEthgasstationPayload): Partial<PriorityFeePerGas> => {\n const {\n standard: medium, fast: high, instant: veryHigh,\n } = payload.priorityFee\n const trend = regression.linear([\n [1, medium],\n [2, high],\n [3, veryHigh],\n ])\n const low = trend.predict(0)[1]\n return {\n low, medium, high, veryHigh,\n }\n}\n\nexport const transformGasFromEthgasstation = (payload: EthereumGasEthgasstationPayload): FeeData => {\n const baseFee = getBaseFee(payload)\n const feePerGas = getFeePerGas(payload)\n const priorityFeePerGas = getPriorityFeePerGas(payload)\n return {\n baseFee, feePerGas, priorityFeePerGas,\n }\n}\n","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 { EthereumGasSchema } from '@xyo-network/gas-price-payload-plugin'\nimport { PayloadSetSchema } from '@xyo-network/payload-model'\nimport { createPayloadSetDivinerPlugin } from '@xyo-network/payloadset-plugin'\n\nimport { EthereumGasDiviner } from './Diviner.ts'\n\nexport const EthereumGasPlugin = () =>\n createPayloadSetDivinerPlugin<EthereumGasDiviner>(\n { required: { [EthereumGasSchema]: 1 }, schema: PayloadSetSchema },\n {\n diviner: async (params) => {\n return (await EthereumGasDiviner.create(params)) as EthereumGasDiviner\n },\n },\n )\n"],"mappings":";AAAA,SAAS,uBAAuB;AAIhC,SAAS,qBAAAA,0BAAyB;;;ACHlC,SAAS,yBAAyB;AAClC,SAAS,sBAAsB;;;ACF/B,SAAS,cAAc;AASvB,IAAM,cAAc,CAAC,MAAkB,GAAG,SAAS,EAAE,OAAO,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,SAAS;AAU1F,IAAM,kBAAkB,CAAC,MAAiB,uBAA2D;AACnG,SAAO,YAAY,KAAK,IAAI,kBAAkB,EAAE,OAAO,MAAM,CAAC;AAChE;AAOO,IAAM,UAAU,CAAC,UAA6C;AACnE,QAAM,OAAO,OAAO,OAAO,MAAM,KAAK,CAAC;AACvC,QAAM,WAAoB;AAAA,IACxB,SAAS,gBAAgB,MAAM,OAAK,EAAE,OAAO;AAAA,IAC7C,WAAW;AAAA,MACT,MAAM,gBAAgB,MAAM,OAAK,EAAE,UAAU,IAAI;AAAA,MACjD,KAAK,gBAAgB,MAAM,OAAK,EAAE,UAAU,GAAG;AAAA,MAC/C,QAAQ,gBAAgB,MAAM,OAAK,EAAE,UAAU,MAAM;AAAA,MACrD,UAAU,gBAAgB,MAAM,OAAK,EAAE,UAAU,QAAQ;AAAA,IAC3D;AAAA,IACA,mBAAmB;AAAA,MACjB,MAAM,gBAAgB,MAAM,OAAK,EAAE,kBAAkB,IAAI;AAAA,MACzD,KAAK,gBAAgB,MAAM,OAAK,EAAE,kBAAkB,GAAG;AAAA,MACvD,QAAQ,gBAAgB,MAAM,OAAK,EAAE,kBAAkB,MAAM;AAAA,MAC7D,UAAU,gBAAgB,MAAM,OAAK,EAAE,kBAAkB,QAAQ;AAAA,IACnE;AAAA,EACF;AACA,SAAO;AACT;;;AC7CA,SAAS,oCAAoC;AAGtC,IAAM,kCAAkC,CAAC,YAAuE;AACrH,SAAO,SAAS,WAAW;AAC7B;;;ACLA,SAAS,qCAAqC;AAGvC,IAAM,mCAAmC,CAAC,YAAwE;AACvH,SAAO,SAAS,WAAW;AAC7B;;;ACLA,SAAS,kCAAkC;AAGpC,IAAM,gCAAgC,CAAC,YAAqE;AACjH,SAAO,SAAS,WAAW;AAC7B;;;ACLA,SAAS,+BAA+B;AAGjC,IAAM,6BAA6B,CAAC,YAAkE;AAC3G,SAAO,SAAS,WAAW;AAC7B;;;ACLA,SAAS,sCAAsC;AAGxC,IAAM,oCAAoC,CAAC,YAAyE;AACzH,SAAO,SAAS,WAAW;AAC7B;;;ACFA,OAAO,gBAAgB;AAEvB,IAAM,aAAa,CAAC,YAA+D;AACjF,SAAO,SAAS,cAAc,CAAC,GAAG;AACpC;AAEA,IAAM,eAAe,CAAC,YAA+D;AACnF,QAAM,SAAS,QAAQ,cAAc,CAAC,EAAE,iBAAiB,KAAK,CAAC,GAAG,MAAM,EAAE,aAAa,EAAE,UAAU;AACnG,QAAM,QAAQ,WAAW,OAAO;AAAA,IAC9B,CAAC,GAAG,SAAS,CAAC,EAAE,KAAK;AAAA,IACrB,CAAC,GAAG,SAAS,CAAC,EAAE,KAAK;AAAA,IACrB,CAAC,GAAG,SAAS,CAAC,EAAE,KAAK;AAAA,IACrB,CAAC,GAAG,SAAS,CAAC,EAAE,KAAK;AAAA,IACrB,CAAC,GAAG,SAAS,CAAC,EAAE,KAAK;AAAA,EACvB,CAAC;AACD,QAAM,YAAuB;AAAA,IAC3B,KAAK,MAAM,QAAQ,GAAG,EAAE,CAAC;AAAA,IACzB,QAAQ,MAAM,QAAQ,GAAG,EAAE,CAAC;AAAA,IAC5B,MAAM,MAAM,QAAQ,GAAG,EAAE,CAAC;AAAA,IAC1B,UAAU,MAAM,QAAQ,GAAG,EAAE,CAAC;AAAA,EAChC;AACA,SAAO;AACT;AAEA,IAAM,uBAAuB,CAAC,YAAuE;AACnG,QAAM,SAAS,QAAQ,cAAc,CAAC,EAAE,iBAAiB,KAAK,CAAC,GAAG,MAAM,EAAE,aAAa,EAAE,UAAU;AACnG,QAAM,QAAQ,WAAW,OAAO;AAAA,IAC9B,CAAC,GAAG,SAAS,CAAC,EAAE,oBAAoB;AAAA,IACpC,CAAC,GAAG,SAAS,CAAC,EAAE,oBAAoB;AAAA,IACpC,CAAC,GAAG,SAAS,CAAC,EAAE,oBAAoB;AAAA,IACpC,CAAC,GAAG,SAAS,CAAC,EAAE,oBAAoB;AAAA,IACpC,CAAC,GAAG,SAAS,CAAC,EAAE,oBAAoB;AAAA,EACtC,CAAC;AACD,QAAM,oBAAuC;AAAA,IAC3C,KAAK,MAAM,QAAQ,GAAG,EAAE,CAAC;AAAA,IACzB,QAAQ,MAAM,QAAQ,GAAG,EAAE,CAAC;AAAA,IAC5B,MAAM,MAAM,QAAQ,GAAG,EAAE,CAAC;AAAA,IAC1B,UAAU,MAAM,QAAQ,GAAG,EAAE,CAAC;AAAA,EAChC;AACA,SAAO;AACT;AAEO,IAAM,8BAA8B,CAAC,YAAoD;AAC9F,QAAM,UAAU,WAAW,OAAO;AAClC,QAAM,YAAY,aAAa,OAAO;AACtC,QAAM,oBAAoB,qBAAqB,OAAO;AACtD,SAAO;AAAA,IACL;AAAA,IAAS;AAAA,IAAW;AAAA,EACtB;AACF;;;AClDA,IAAMC,gBAAe,CAAC,YAAgE;AACpF,QAAM;AAAA,IACJ;AAAA,IAAM;AAAA,IAAU;AAAA,IAAM;AAAA,EACxB,IAAI,QAAQ;AACZ,QAAM,MAAM,OAAO;AACnB,QAAM,SAAS,WAAW;AAC1B,QAAM,OAAO,OAAO;AACpB,QAAM,WAAW,QAAQ;AACzB,SAAO;AAAA,IACL;AAAA,IAAM;AAAA,IAAK;AAAA,IAAQ;AAAA,EACrB;AACF;AAEO,IAAM,+BAA+B,CAAC,YAAqD;AAChG,QAAM,UAAU;AAChB,QAAM,YAAYA,cAAa,OAAO;AACtC,QAAM,oBAAoB,CAAC;AAC3B,SAAO;AAAA,IACL;AAAA,IAAS;AAAA,IAAW;AAAA,EACtB;AACF;;;AClBA,IAAMC,cAAa,CAAC,YAA0D;AAC5E,QAAM,EAAE,SAAS,IAAI;AACrB,SAAO,WAAW,WAAW,MAAgB;AAC/C;AAEA,IAAMC,gBAAe,CAAC,YAA0D;AAC9E,QAAM,EAAE,aAAa,IAAI;AACzB,QAAM,OAAO,eAAe,eAAe,MAAgB;AAC3D,SAAO,EAAE,KAAK;AAChB;AAEA,IAAMC,wBAAuB,CAAC,YAAkE;AAC9F,QAAM,EAAE,qBAAqB,IAAI;AACjC,QAAM,OAAO,uBAAuB,uBAAuB,MAAgB;AAC3E,SAAO,EAAE,KAAK;AAChB;AAEO,IAAM,yBAAyB,CAAC,YAA+C;AACpF,QAAM,UAAUF,YAAW,OAAO;AAClC,QAAM,YAAYC,cAAa,OAAO;AACtC,QAAM,oBAAoBC,sBAAqB,OAAO;AACtD,SAAO;AAAA,IACL;AAAA,IAAS;AAAA,IAAW;AAAA,EACtB;AACF;;;AC3BA,OAAOC,iBAAgB;AAEvB,IAAMC,cAAa,CAAC,YAA6D;AAC/E,QAAM,EAAE,eAAe,IAAI,QAAQ;AACnC,SAAO,OAAO,WAAW,cAAc;AACzC;AAEA,IAAMC,gBAAe,CAAC,YAA6D;AACjF,QAAM;AAAA,IACJ;AAAA,IAAc;AAAA,IAAiB;AAAA,EACjC,IAAI,QAAQ;AACZ,QAAM,MAAM,OAAO,WAAW,YAAY;AAC1C,QAAM,SAAS,OAAO,WAAW,eAAe;AAChD,QAAM,OAAO,OAAO,WAAW,YAAY;AAC3C,QAAM,WAAWF,YAAW,OAAO;AAAA,IACjC,CAAC,GAAG,GAAG;AAAA,IACP,CAAC,GAAG,MAAM;AAAA,IACV,CAAC,GAAG,IAAI;AAAA,EACV,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC;AACf,SAAO;AAAA,IACL;AAAA,IAAM;AAAA,IAAK;AAAA,IAAQ;AAAA,EACrB;AACF;AAEO,IAAM,4BAA4B,CAAC,YAAkD;AAC1F,QAAM,UAAUC,YAAW,OAAO;AAClC,QAAM,YAAYC,cAAa,OAAO;AACtC,QAAM,oBAAoB,CAAC;AAC3B,SAAO;AAAA,IACL;AAAA,IAAS;AAAA,IAAW;AAAA,EACtB;AACF;;;AC7BA,OAAOC,iBAAgB;AAEvB,IAAMC,cAAa,CAAC,YAAiE;AACnF,QAAM,EAAE,QAAQ,IAAI;AACpB,SAAO;AACT;AAEA,IAAMC,gBAAe,CAAC,YAAiE;AACrF,QAAM;AAAA,IACJ,UAAU;AAAA,IAAQ,MAAM;AAAA,IAAM,SAAS;AAAA,EACzC,IAAI,QAAQ;AACZ,QAAM,QAAQF,YAAW,OAAO;AAAA,IAC9B,CAAC,GAAG,MAAM;AAAA,IACV,CAAC,GAAG,IAAI;AAAA,IACR,CAAC,GAAG,QAAQ;AAAA,EACd,CAAC;AACD,QAAM,MAAM,MAAM,QAAQ,CAAC,EAAE,CAAC;AAC9B,SAAO;AAAA,IACL;AAAA,IAAK;AAAA,IAAQ;AAAA,IAAM;AAAA,EACrB;AACF;AAEA,IAAMG,wBAAuB,CAAC,YAAyE;AACrG,QAAM;AAAA,IACJ,UAAU;AAAA,IAAQ,MAAM;AAAA,IAAM,SAAS;AAAA,EACzC,IAAI,QAAQ;AACZ,QAAM,QAAQH,YAAW,OAAO;AAAA,IAC9B,CAAC,GAAG,MAAM;AAAA,IACV,CAAC,GAAG,IAAI;AAAA,IACR,CAAC,GAAG,QAAQ;AAAA,EACd,CAAC;AACD,QAAM,MAAM,MAAM,QAAQ,CAAC,EAAE,CAAC;AAC9B,SAAO;AAAA,IACL;AAAA,IAAK;AAAA,IAAQ;AAAA,IAAM;AAAA,EACrB;AACF;AAEO,IAAM,gCAAgC,CAAC,YAAsD;AAClG,QAAM,UAAUC,YAAW,OAAO;AAClC,QAAM,YAAYC,cAAa,OAAO;AACtC,QAAM,oBAAoBC,sBAAqB,OAAO;AACtD,SAAO;AAAA,IACL;AAAA,IAAS;AAAA,IAAW;AAAA,EACtB;AACF;;;AX3BO,IAAM,YAAY,OAAO,aAAqD;AACnF,QAAM,cAAc,SAAS,OAAO,+BAA+B,EAAE,IAAI,2BAA2B;AACpG,QAAM,eAAe,SAAS,OAAO,gCAAgC,EAAE,IAAI,4BAA4B;AACvG,QAAM,SAAS,SAAS,OAAO,0BAA0B,EAAE,IAAI,sBAAsB;AACrF,QAAM,YAAY,SAAS,OAAO,6BAA6B,EAAE,IAAI,yBAAyB;AAC9F,QAAM,gBAAgB,SAAS,OAAO,iCAAiC,EAAE,IAAI,6BAA6B;AAC1G,QAAM,mBAA8B,CAAC,GAAG,aAAa,GAAG,cAAc,GAAG,QAAQ,GAAG,WAAW,GAAG,aAAa;AAC/G,QAAM,MAAM,QAAQ,gBAAgB;AACpC,QAAM,YAAY,KAAK,IAAI;AAC3B,QAAM,UAAU,MAAM,IAAI,eAAmC,EAAE,QAAQ,kBAAkB,CAAC,EAAE,OAAO,EAAE,GAAG,KAAK,UAAU,CAAC,EAAE,MAAM;AAChI,SAAO;AACT;;;AY/BO,IAAM,gCAA+D;AAGrE,IAAM,iCAAiE;;;AbUvE,IAAM,qBAAN,cACG,gBACiB;AAAA,EACzB,OAAyB,gBAA0B,CAAC,GAAG,MAAM,eAAe,8BAA8B;AAAA,EAC1G,OAAyB,sBAA8B;AAAA,EACvD,OAAgB,eAAuBC;AAAA,EAEvC,MAAyB,cAAc,UAA0C;AAC/E,UAAM,OAAO,MAAM,UAAU,YAAY,CAAC,CAAC;AAC3C,WAAO,CAAC,IAAI;AAAA,EACd;AACF;;;AczBA,SAAS,qBAAAC,0BAAyB;AAClC,SAAS,wBAAwB;AACjC,SAAS,qCAAqC;AAIvC,IAAM,oBAAoB,MAC/B;AAAA,EACE,EAAE,UAAU,EAAE,CAACC,kBAAiB,GAAG,EAAE,GAAG,QAAQ,iBAAiB;AAAA,EACjE;AAAA,IACE,SAAS,OAAO,WAAW;AACzB,aAAQ,MAAM,mBAAmB,OAAO,MAAM;AAAA,IAChD;AAAA,EACF;AACF;","names":["EthereumGasSchema","getFeePerGas","getBaseFee","getFeePerGas","getPriorityFeePerGas","regression","getBaseFee","getFeePerGas","regression","getBaseFee","getFeePerGas","getPriorityFeePerGas","EthereumGasSchema","EthereumGasSchema","EthereumGasSchema"]}
|
|
@@ -1,3 +1,8 @@
|
|
|
1
1
|
import type { FeeData } from '@xyo-network/gas-price-payload-plugin';
|
|
2
|
+
/**
|
|
3
|
+
* Averages the supplied FeeData
|
|
4
|
+
* @param input An array of FeeData or undefined
|
|
5
|
+
* @returns The average of the supplied FeeData
|
|
6
|
+
*/
|
|
2
7
|
export declare const average: (input?: (FeeData | undefined)[]) => FeeData;
|
|
3
8
|
//# sourceMappingURL=average.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"average.d.ts","sourceRoot":"","sources":["../../../src/lib/average.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uCAAuC,CAAA;
|
|
1
|
+
{"version":3,"file":"average.d.ts","sourceRoot":"","sources":["../../../src/lib/average.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uCAAuC,CAAA;AAsBpE;;;;GAIG;AACH,eAAO,MAAM,OAAO,WAAY,CAAC,OAAO,GAAG,SAAS,CAAC,EAAE,KAAG,OAkBzD,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xyo-network/gas-price-plugin",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.2",
|
|
4
4
|
"description": "Typescript/Javascript Plugins for XYO Platform",
|
|
5
5
|
"homepage": "https://xyo.network",
|
|
6
6
|
"bugs": {
|
|
@@ -29,31 +29,33 @@
|
|
|
29
29
|
"module": "dist/neutral/index.mjs",
|
|
30
30
|
"types": "dist/neutral/index.d.ts",
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@xylabs/exists": "^4.
|
|
33
|
-
"@xyo-network/blocknative-ethereum-gas-payload-plugin": "^3.1.
|
|
34
|
-
"@xyo-network/diviner-abstract": "^3.
|
|
35
|
-
"@xyo-network/diviner-model": "^3.
|
|
36
|
-
"@xyo-network/etherchain-gas-ethereum-blockchain-payload-plugins": "^3.1.
|
|
37
|
-
"@xyo-network/ethers-ethereum-gas-payload-plugin": "^3.1.
|
|
38
|
-
"@xyo-network/etherscan-ethereum-gas-payload-plugin": "^3.1.
|
|
39
|
-
"@xyo-network/ethgasstation-ethereum-gas-payload-plugin": "^3.1.
|
|
40
|
-
"@xyo-network/gas-price-payload-plugin": "^3.1.
|
|
41
|
-
"@xyo-network/module-model": "^3.
|
|
42
|
-
"@xyo-network/payload-builder": "^3.
|
|
43
|
-
"@xyo-network/payload-model": "^3.
|
|
44
|
-
"@xyo-network/payloadset-plugin": "^3.
|
|
32
|
+
"@xylabs/exists": "^4.4.9",
|
|
33
|
+
"@xyo-network/blocknative-ethereum-gas-payload-plugin": "^3.1.2",
|
|
34
|
+
"@xyo-network/diviner-abstract": "^3.5.1",
|
|
35
|
+
"@xyo-network/diviner-model": "^3.5.1",
|
|
36
|
+
"@xyo-network/etherchain-gas-ethereum-blockchain-payload-plugins": "^3.1.2",
|
|
37
|
+
"@xyo-network/ethers-ethereum-gas-payload-plugin": "^3.1.2",
|
|
38
|
+
"@xyo-network/etherscan-ethereum-gas-payload-plugin": "^3.1.2",
|
|
39
|
+
"@xyo-network/ethgasstation-ethereum-gas-payload-plugin": "^3.1.2",
|
|
40
|
+
"@xyo-network/gas-price-payload-plugin": "^3.1.2",
|
|
41
|
+
"@xyo-network/module-model": "^3.5.1",
|
|
42
|
+
"@xyo-network/payload-builder": "^3.5.1",
|
|
43
|
+
"@xyo-network/payload-model": "^3.5.1",
|
|
44
|
+
"@xyo-network/payloadset-plugin": "^3.5.1",
|
|
45
45
|
"regression": "^2.0.1"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
48
|
"@types/regression": "^2.0.6",
|
|
49
|
-
"@xylabs/ts-scripts-yarn3": "^4.
|
|
50
|
-
"@xylabs/tsconfig": "^4.
|
|
51
|
-
"@
|
|
52
|
-
"@xyo-network/
|
|
53
|
-
"@xyo-network/
|
|
54
|
-
"@xyo-network/
|
|
55
|
-
"@xyo-network/
|
|
56
|
-
"
|
|
49
|
+
"@xylabs/ts-scripts-yarn3": "^4.2.4",
|
|
50
|
+
"@xylabs/tsconfig": "^4.2.4",
|
|
51
|
+
"@xylabs/vitest-extended": "^4.4.9",
|
|
52
|
+
"@xyo-network/blocknative-ethereum-gas-plugin": "^3.1.2",
|
|
53
|
+
"@xyo-network/etherchain-gas-ethereum-blockchain-plugins": "^3.1.2",
|
|
54
|
+
"@xyo-network/ethers-ethereum-gas-plugin": "^3.1.2",
|
|
55
|
+
"@xyo-network/etherscan-ethereum-gas-plugin": "^3.1.2",
|
|
56
|
+
"@xyo-network/witness-blockchain-abstract": "^3.5.1",
|
|
57
|
+
"typescript": "^5.7.2",
|
|
58
|
+
"vitest": "^2.1.6"
|
|
57
59
|
},
|
|
58
60
|
"publishConfig": {
|
|
59
61
|
"access": "public"
|
|
@@ -2,7 +2,7 @@ import type { EthereumGasBlocknativePayload } from '@xyo-network/blocknative-eth
|
|
|
2
2
|
import type {
|
|
3
3
|
FeeData, FeePerGas, PriorityFeePerGas,
|
|
4
4
|
} from '@xyo-network/gas-price-payload-plugin'
|
|
5
|
-
import
|
|
5
|
+
import regression from 'regression'
|
|
6
6
|
|
|
7
7
|
const getBaseFee = (payload: EthereumGasBlocknativePayload): number | undefined => {
|
|
8
8
|
return payload?.blockPrices?.[0]?.baseFeePerGas
|
|
@@ -10,7 +10,7 @@ const getBaseFee = (payload: EthereumGasBlocknativePayload): number | undefined
|
|
|
10
10
|
|
|
11
11
|
const getFeePerGas = (payload: EthereumGasBlocknativePayload): Partial<FeePerGas> => {
|
|
12
12
|
const sorted = payload.blockPrices?.[0].estimatedPrices?.sort((a, b) => a.confidence - b.confidence)
|
|
13
|
-
const trend = linear([
|
|
13
|
+
const trend = regression.linear([
|
|
14
14
|
[0, sorted?.[0].price],
|
|
15
15
|
[1, sorted?.[1].price],
|
|
16
16
|
[2, sorted?.[2].price],
|
|
@@ -28,7 +28,7 @@ const getFeePerGas = (payload: EthereumGasBlocknativePayload): Partial<FeePerGas
|
|
|
28
28
|
|
|
29
29
|
const getPriorityFeePerGas = (payload: EthereumGasBlocknativePayload): Partial<PriorityFeePerGas> => {
|
|
30
30
|
const sorted = payload.blockPrices?.[0].estimatedPrices?.sort((a, b) => a.confidence - b.confidence)
|
|
31
|
-
const trend = linear([
|
|
31
|
+
const trend = regression.linear([
|
|
32
32
|
[0, sorted?.[0].maxPriorityFeePerGas],
|
|
33
33
|
[1, sorted?.[1].maxPriorityFeePerGas],
|
|
34
34
|
[2, sorted?.[2].maxPriorityFeePerGas],
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { EthereumGasEtherscanPayload } from '@xyo-network/etherscan-ethereum-gas-payload-plugin'
|
|
2
2
|
import type { FeeData, FeePerGas } from '@xyo-network/gas-price-payload-plugin'
|
|
3
|
-
import
|
|
3
|
+
import regression from 'regression'
|
|
4
4
|
|
|
5
5
|
const getBaseFee = (payload: EthereumGasEtherscanPayload): number | undefined => {
|
|
6
6
|
const { suggestBaseFee } = payload.result
|
|
@@ -14,7 +14,7 @@ const getFeePerGas = (payload: EthereumGasEtherscanPayload): Partial<FeePerGas>
|
|
|
14
14
|
const low = Number.parseFloat(SafeGasPrice)
|
|
15
15
|
const medium = Number.parseFloat(ProposeGasPrice)
|
|
16
16
|
const high = Number.parseFloat(FastGasPrice)
|
|
17
|
-
const veryHigh = linear([
|
|
17
|
+
const veryHigh = regression.linear([
|
|
18
18
|
[0, low],
|
|
19
19
|
[1, medium],
|
|
20
20
|
[2, high],
|
|
@@ -2,7 +2,7 @@ import type { EthereumGasEthgasstationPayload } from '@xyo-network/ethgasstation
|
|
|
2
2
|
import type {
|
|
3
3
|
FeeData, FeePerGas, PriorityFeePerGas,
|
|
4
4
|
} from '@xyo-network/gas-price-payload-plugin'
|
|
5
|
-
import
|
|
5
|
+
import regression from 'regression'
|
|
6
6
|
|
|
7
7
|
const getBaseFee = (payload: EthereumGasEthgasstationPayload): number | undefined => {
|
|
8
8
|
const { baseFee } = payload
|
|
@@ -13,7 +13,7 @@ const getFeePerGas = (payload: EthereumGasEthgasstationPayload): Partial<FeePerG
|
|
|
13
13
|
const {
|
|
14
14
|
standard: medium, fast: high, instant: veryHigh,
|
|
15
15
|
} = payload.gasPrice
|
|
16
|
-
const trend = linear([
|
|
16
|
+
const trend = regression.linear([
|
|
17
17
|
[1, medium],
|
|
18
18
|
[2, high],
|
|
19
19
|
[3, veryHigh],
|
|
@@ -28,7 +28,7 @@ const getPriorityFeePerGas = (payload: EthereumGasEthgasstationPayload): Partial
|
|
|
28
28
|
const {
|
|
29
29
|
standard: medium, fast: high, instant: veryHigh,
|
|
30
30
|
} = payload.priorityFee
|
|
31
|
-
const trend = linear([
|
|
31
|
+
const trend = regression.linear([
|
|
32
32
|
[1, medium],
|
|
33
33
|
[2, high],
|
|
34
34
|
[3, veryHigh],
|