@witnet/solidity 3.0.4 → 3.0.5
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/LICENSE +2 -2
- package/build/contracts/Bech32.json +1 -1
- package/build/contracts/Clonable.json +1 -1
- package/build/contracts/Context.json +1 -1
- package/build/contracts/Create3.json +1 -1
- package/build/contracts/ERC165.json +1 -1
- package/build/contracts/Escrowable.json +1 -1
- package/build/contracts/IChainlinkAggregatorV3.json +1 -1
- package/build/contracts/IERC165.json +1 -1
- package/build/contracts/IERC20.json +1 -1
- package/build/contracts/IERC2362.json +1 -1
- package/build/contracts/IPythChainlinkAggregatorV3.json +1 -1
- package/build/contracts/IWitAppliance.json +1 -1
- package/build/contracts/IWitOracle.json +1 -1
- package/build/contracts/IWitOracleAppliance.json +1 -1
- package/build/contracts/IWitOracleConsumer.json +1 -1
- package/build/contracts/IWitOracleConsumerLegacy.json +1 -1
- package/build/contracts/IWitOracleLegacy.json +1 -1
- package/build/contracts/IWitOracleQueriable.json +1 -1
- package/build/contracts/IWitOracleQueriableConsumer.json +1 -1
- package/build/contracts/IWitOracleQueriableEvents.json +1 -1
- package/build/contracts/IWitOracleQueriableExperimental.json +1 -1
- package/build/contracts/IWitOracleQueriableTrustableReporter.json +1 -1
- package/build/contracts/IWitOracleQueriableTrustlessReporter.json +1 -1
- package/build/contracts/IWitOracleRadonRegistry.json +1 -1
- package/build/contracts/IWitOracleRadonRegistryEvents.json +1 -1
- package/build/contracts/IWitOracleRadonRegistryLegacy.json +1 -1
- package/build/contracts/IWitOracleRadonRequestFactory.json +1 -1
- package/build/contracts/IWitOracleRadonRequestModal.json +1 -1
- package/build/contracts/IWitOracleRadonRequestTemplate.json +1 -1
- package/build/contracts/IWitOracleRequest.json +1 -1
- package/build/contracts/IWitOracleRequestFactory.json +1 -1
- package/build/contracts/IWitOracleRequestFactoryEvents.json +1 -1
- package/build/contracts/IWitOracleRequestTemplate.json +1 -1
- package/build/contracts/IWitOracleTrustableAdmin.json +1 -1
- package/build/contracts/IWitOracleTrustless.json +1 -1
- package/build/contracts/IWitPriceFeeds.json +1 -1
- package/build/contracts/IWitPriceFeedsAdmin.json +1 -1
- package/build/contracts/IWitPriceFeedsConsumer.json +1 -1
- package/build/contracts/IWitPriceFeedsEvents.json +1 -1
- package/build/contracts/IWitPriceFeedsLegacy.json +1 -1
- package/build/contracts/IWitPriceFeedsLegacyAdmin.json +1 -1
- package/build/contracts/IWitPriceFeedsLegacySolver.json +1 -1
- package/build/contracts/IWitPriceFeedsLegacySolverFactory.json +1 -1
- package/build/contracts/IWitPriceFeedsTypes.json +1 -1
- package/build/contracts/IWitPyth.json +1 -1
- package/build/contracts/IWitPythChainlinkAggregator.json +1 -1
- package/build/contracts/IWitPythErrors.json +1 -1
- package/build/contracts/IWitPythEvents.json +1 -1
- package/build/contracts/IWitPythReporter.json +1 -1
- package/build/contracts/IWitRandomness.json +1 -1
- package/build/contracts/IWitRandomnessAdmin.json +1 -1
- package/build/contracts/IWitRandomnessAdminV2.json +1 -1
- package/build/contracts/IWitRandomnessConsumer.json +1 -1
- package/build/contracts/IWitRandomnessEvents.json +1 -1
- package/build/contracts/IWitRandomnessLegacy.json +1 -1
- package/build/contracts/IWitRandomnessTypes.json +1 -1
- package/build/contracts/Initializable.json +1 -1
- package/build/contracts/OVM_GasPriceOracle.json +1 -1
- package/build/contracts/Ownable.json +1 -1
- package/build/contracts/Ownable2Step.json +1 -1
- package/build/contracts/Payable.json +1 -1
- package/build/contracts/Proxiable.json +1 -1
- package/build/contracts/ReentrancyGuard.json +1 -1
- package/build/contracts/Secp256k1.json +1 -1
- package/build/contracts/Slices.json +1 -1
- package/build/contracts/TestBech32.json +1 -1
- package/build/contracts/TestSecp256k1.json +1 -1
- package/build/contracts/Upgradeable.json +1 -1
- package/build/contracts/UsingWitOracle.json +1 -1
- package/build/contracts/UsingWitPriceFeeds.json +1 -1
- package/build/contracts/UsingWitRandomness.json +1 -1
- package/build/contracts/WitOracle.json +2 -13
- package/build/contracts/WitOracleBasePushOnly.json +1 -1
- package/build/contracts/WitOracleBasePushOnlyTrustable.json +1 -1
- package/build/contracts/WitOracleBasePushOnlyTrustless.json +1 -1
- package/build/contracts/WitOracleBasePushOnlyUpgradable.json +1 -1
- package/build/contracts/WitOracleBaseQueriable.json +1 -1
- package/build/contracts/WitOracleBaseQueriableTrustable.json +1 -1
- package/build/contracts/WitOracleBaseQueriableTrustless.json +1 -1
- package/build/contracts/WitOracleBaseQueriableUpgradable.json +1 -1
- package/build/contracts/WitOracleDataLib.json +2 -254
- package/build/contracts/WitOraclePushOnly.json +1 -1
- package/build/contracts/WitOracleRadonEncodingLib.json +2 -13
- package/build/contracts/WitOracleRadonRegistry.json +2 -13
- package/build/contracts/WitOracleRadonRegistryBase.json +1 -1
- package/build/contracts/WitOracleRadonRegistryBaseUpgradable.json +1 -1
- package/build/contracts/WitOracleRadonRegistryData.json +1 -1
- package/build/contracts/WitOracleRadonRegistryDefaultV21.json +1 -1
- package/build/contracts/WitOracleRadonRegistryUpgradableDefault.json +2 -17
- package/build/contracts/WitOracleRadonRegistryUpgradableNoSha256.json +1 -1
- package/build/contracts/WitOracleRadonRegistryUpgradableZkSync.json +1 -1
- package/build/contracts/WitOracleRadonRequestFactory.json +2 -13
- package/build/contracts/WitOracleRadonRequestFactoryBase.json +1 -1
- package/build/contracts/WitOracleRadonRequestFactoryBaseUpgradable.json +1 -1
- package/build/contracts/WitOracleRadonRequestFactoryModals.json +2 -13
- package/build/contracts/WitOracleRadonRequestFactoryModalsDefault.json +2 -13
- package/build/contracts/WitOracleRadonRequestFactoryTemplates.json +2 -13
- package/build/contracts/WitOracleRadonRequestFactoryTemplatesDefault.json +2 -13
- package/build/contracts/WitOracleRadonRequestFactoryUpgradableConfluxCore.json +1 -1
- package/build/contracts/WitOracleRadonRequestFactoryUpgradableDefault.json +2 -13
- package/build/contracts/WitOracleResultStatusLib.json +2 -14
- package/build/contracts/WitOracleTrustableDefault.json +2 -259
- package/build/contracts/WitOracleTrustableExperimental.json +1 -1
- package/build/contracts/WitOracleTrustableObscuro.json +1 -1
- package/build/contracts/WitOracleTrustableOvm2.json +1 -1
- package/build/contracts/WitOracleTrustablePushOnly.json +1 -1
- package/build/contracts/WitOracleTrustableReef.json +1 -1
- package/build/contracts/WitOracleTrustableZkSync.json +1 -1
- package/build/contracts/WitOracleTrustlessDataLib.json +1 -1
- package/build/contracts/WitOracleTrustlessDefaultV22.json +1 -1
- package/build/contracts/WitOracleTrustlessUpgradableDefault.json +1 -1
- package/build/contracts/WitPriceFeeds.json +2 -13
- package/build/contracts/WitPriceFeedsDataLib.json +2 -14
- package/build/contracts/WitPriceFeedsLegacy.json +2 -8
- package/build/contracts/WitPriceFeedsLegacyDataLib.json +2 -84
- package/build/contracts/WitPriceFeedsLegacyUpgradable.json +1 -1
- package/build/contracts/WitPriceFeedsLegacyUpgradableBypass.json +2 -80
- package/build/contracts/WitPriceFeedsSolverBase.json +1 -1
- package/build/contracts/WitPriceFeedsV3.json +1 -1
- package/build/contracts/WitPriceFeedsV3Upgradable.json +2 -17
- package/build/contracts/WitPythChainlinkAggregator.json +1 -1
- package/build/contracts/WitRandomness.json +2 -13
- package/build/contracts/WitRandomnessLegacy.json +1 -1
- package/build/contracts/WitRandomnessV3.json +2 -13
- package/build/contracts/WitRngConsumer.json +1 -1
- package/build/contracts/Witnet.json +1 -1
- package/build/contracts/WitnetBuffer.json +1 -1
- package/build/contracts/WitnetCBOR.json +1 -1
- package/build/contracts/WitnetDeployer.json +2 -13
- package/build/contracts/WitnetDeployerConfluxCore.json +1 -1
- package/build/contracts/WitnetDeployerDeferred.json +1 -1
- package/build/contracts/WitnetDeployerMeter.json +1 -1
- package/build/contracts/WitnetProxy.json +2 -9
- package/build/contracts/WitnetUpgradableBase.json +1 -1
- package/{migrations → dist/migrations}/addresses.json +1 -25
- package/{migrations → dist/migrations}/constructorArgs.json +1 -6
- package/dist/migrations/settings/artifacts.d.ts +95 -0
- package/dist/migrations/settings/artifacts.d.ts.map +1 -0
- package/dist/migrations/settings/artifacts.js +80 -0
- package/dist/migrations/settings/networks.d.ts +593 -0
- package/dist/migrations/settings/networks.d.ts.map +1 -0
- package/dist/migrations/settings/networks.js +593 -0
- package/dist/src/bin/helpers.cjs +350 -0
- package/dist/src/bin/helpers.d.cts +76 -0
- package/dist/src/bin/helpers.d.cts.map +1 -0
- package/dist/src/index.d.ts +6 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +33 -0
- package/dist/src/lib/types.d.ts +99 -0
- package/dist/src/lib/types.d.ts.map +1 -0
- package/dist/src/lib/types.js +18 -0
- package/dist/src/lib/utils.d.ts +22 -0
- package/dist/src/lib/utils.d.ts.map +1 -0
- package/dist/src/lib/utils.js +267 -0
- package/dist/src/lib/wrappers/ContractWrapper.d.ts +47 -0
- package/dist/src/lib/wrappers/ContractWrapper.d.ts.map +1 -0
- package/dist/src/lib/wrappers/ContractWrapper.js +81 -0
- package/dist/src/lib/wrappers/WitAppliance.d.ts +7 -0
- package/dist/src/lib/wrappers/WitAppliance.d.ts.map +1 -0
- package/dist/src/lib/wrappers/WitAppliance.js +17 -0
- package/dist/src/lib/wrappers/WitArtifact.d.ts +6 -0
- package/dist/src/lib/wrappers/WitArtifact.d.ts.map +1 -0
- package/dist/src/lib/wrappers/WitArtifact.js +16 -0
- package/dist/src/lib/wrappers/WitOracle.d.ts +105 -0
- package/dist/src/lib/wrappers/WitOracle.d.ts.map +1 -0
- package/dist/src/lib/wrappers/WitOracle.js +217 -0
- package/dist/src/lib/wrappers/WitOracleConsumer.d.ts +16 -0
- package/dist/src/lib/wrappers/WitOracleConsumer.d.ts.map +1 -0
- package/dist/src/lib/wrappers/WitOracleConsumer.js +30 -0
- package/dist/src/lib/wrappers/WitOracleRadonRegistry.d.ts +102 -0
- package/dist/src/lib/wrappers/WitOracleRadonRegistry.d.ts.map +1 -0
- package/dist/src/lib/wrappers/WitOracleRadonRegistry.js +140 -0
- package/dist/src/lib/wrappers/WitOracleRadonRequestFactory.d.ts +81 -0
- package/dist/src/lib/wrappers/WitOracleRadonRequestFactory.d.ts.map +1 -0
- package/dist/src/lib/wrappers/WitOracleRadonRequestFactory.js +257 -0
- package/dist/src/lib/wrappers/WitPriceFeeds.d.ts +91 -0
- package/dist/src/lib/wrappers/WitPriceFeeds.d.ts.map +1 -0
- package/dist/src/lib/wrappers/WitPriceFeeds.js +356 -0
- package/dist/src/lib/wrappers/WitPriceFeedsLegacy.d.ts +14 -0
- package/dist/src/lib/wrappers/WitPriceFeedsLegacy.d.ts.map +1 -0
- package/dist/src/lib/wrappers/WitPriceFeedsLegacy.js +64 -0
- package/dist/src/lib/wrappers/WitRandomness.d.ts +55 -0
- package/dist/src/lib/wrappers/WitRandomness.d.ts.map +1 -0
- package/dist/src/lib/wrappers/WitRandomness.js +165 -0
- package/dist/src/lib/wrappers.d.ts +8 -0
- package/dist/src/lib/wrappers.d.ts.map +1 -0
- package/dist/src/lib/wrappers.js +8 -0
- package/package.json +78 -54
- package/scripts/clean.cjs +21 -0
- package/scripts/eth-create2.cjs +38 -0
- package/scripts/eth-create3.cjs +45 -0
- package/scripts/postinstall.cjs +9 -0
- package/scripts/prepare.cjs +27 -0
- package/scripts/vanity2gen.cjs +121 -0
- package/scripts/vanity3gen.cjs +84 -0
- package/scripts/verify-proxies.cjs +50 -0
- package/scripts/verify-truffle.cjs +69 -0
- package/scripts/verify.js +95 -0
- package/scripts/wof-acls.js +17 -0
- package/src/bin/bots/bridge.cjs +0 -0
- package/src/bin/bots/randomizer.cjs +290 -0
- package/src/bin/bots/reporter.cjs +0 -0
- package/src/bin/cli/accounts.cjs +47 -0
- package/src/bin/cli/assets.cjs +466 -0
- package/src/bin/cli/framework.cjs +100 -0
- package/src/bin/cli/gateway.cjs +26 -0
- package/src/bin/cli/networks.cjs +63 -0
- package/src/bin/cli/priceFeeds.cjs +170 -0
- package/src/bin/cli/queries.cjs +217 -0
- package/src/bin/cli/randomness.cjs +367 -0
- package/src/bin/cli/reports.cjs +272 -0
- package/src/bin/cli/wizard.cjs +352 -0
- package/src/bin/helpers.cjs +388 -0
- package/src/bin/index.cjs +407 -0
- package/settings/artifacts.js +0 -71
- package/settings/index.js +0 -49
- package/settings/networks.js +0 -593
- package/settings/solidity.js +0 -11
- package/settings/specs.js +0 -102
- package/src/index.js +0 -96
- package/src/utils.js +0 -305
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
const helpers = require("../helpers.cjs")
|
|
2
|
+
const moment = require("moment")
|
|
3
|
+
const prompt = require("inquirer").createPromptModule()
|
|
4
|
+
|
|
5
|
+
const { Witnet } = require("@witnet/sdk")
|
|
6
|
+
const { utils, WitOracle } = require("../../../dist/src")
|
|
7
|
+
|
|
8
|
+
module.exports = async (options = {}, args = []) => {
|
|
9
|
+
;[args] = helpers.deleteExtraFlags(args)
|
|
10
|
+
|
|
11
|
+
const witOracle = await WitOracle.fromJsonRpcUrl(
|
|
12
|
+
`http://127.0.0.1:${options?.port || 8545}`,
|
|
13
|
+
options?.signer,
|
|
14
|
+
)
|
|
15
|
+
|
|
16
|
+
const { network, provider } = witOracle
|
|
17
|
+
helpers.traceHeader(`${network.toUpperCase()}`, helpers.colors.lcyan)
|
|
18
|
+
const framework = await helpers.prompter(
|
|
19
|
+
utils.fetchWitOracleFramework(provider),
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
let target = args[0]
|
|
23
|
+
let chosen = false
|
|
24
|
+
if (!target) {
|
|
25
|
+
const artifacts = Object.entries(framework).filter(([key]) =>
|
|
26
|
+
key.startsWith("WitPriceFeeds"),
|
|
27
|
+
)
|
|
28
|
+
if (artifacts.length === 1) {
|
|
29
|
+
target = artifacts[0][1].address
|
|
30
|
+
} else {
|
|
31
|
+
const selection = await prompt([
|
|
32
|
+
{
|
|
33
|
+
choices: artifacts.map(([, artifact]) => artifact.address),
|
|
34
|
+
message: "Price feeds contract:",
|
|
35
|
+
name: "target",
|
|
36
|
+
type: "rawlist",
|
|
37
|
+
},
|
|
38
|
+
])
|
|
39
|
+
target = selection.target
|
|
40
|
+
chosen = true
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
let pfs
|
|
45
|
+
try {
|
|
46
|
+
pfs = await witOracle.getWitPriceFeedsAt(target)
|
|
47
|
+
} catch {
|
|
48
|
+
pfs = await witOracle.getWitPriceFeedsLegacyAt(target)
|
|
49
|
+
}
|
|
50
|
+
const artifact = await pfs.getEvmImplClass()
|
|
51
|
+
if (artifact.indexOf("Legacy") >= 0) {
|
|
52
|
+
pfs = await witOracle.getWitPriceFeedsLegacyAt(target)
|
|
53
|
+
}
|
|
54
|
+
const version = await pfs.getEvmImplVersion()
|
|
55
|
+
const maxWidth = Math.max(21, artifact.length + 2)
|
|
56
|
+
console.info(
|
|
57
|
+
`> ${helpers.colors.lwhite(artifact)}:${" ".repeat(
|
|
58
|
+
maxWidth - artifact.length,
|
|
59
|
+
)}${chosen ? "" : `${helpers.colors.lblue(target)} `}${helpers.colors.blue(
|
|
60
|
+
`[ ${version} ]`,
|
|
61
|
+
)}`,
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
let priceFeeds = (await pfs.lookupPriceFeeds()).sort((a, b) =>
|
|
65
|
+
a.symbol.localeCompare(b.symbol),
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
if (!options["trace-back"]) {
|
|
69
|
+
const registry = await witOracle.getWitOracleRadonRegistry()
|
|
70
|
+
priceFeeds = await helpers.prompter(
|
|
71
|
+
Promise.all(
|
|
72
|
+
priceFeeds.map(async (pf) => {
|
|
73
|
+
let providers = []
|
|
74
|
+
if (pf?.oracle && pf.oracle.class === "Witnet") {
|
|
75
|
+
const bytecode = await registry.lookupRadonRequestBytecode(
|
|
76
|
+
pf.oracle.sources,
|
|
77
|
+
)
|
|
78
|
+
const request = Witnet.Radon.RadonRequest.fromBytecode(bytecode)
|
|
79
|
+
try {
|
|
80
|
+
const dryrun = JSON.parse(await request.execDryRun(true))
|
|
81
|
+
// const result = dryrun.tally.result
|
|
82
|
+
providers = request.sources
|
|
83
|
+
.map((source, index) => {
|
|
84
|
+
let authority = source.authority.split(".").slice(-2)[0]
|
|
85
|
+
authority = authority[0].toUpperCase() + authority.slice(1)
|
|
86
|
+
return dryrun.retrieve[index].result?.RadonInteger
|
|
87
|
+
? helpers.colors.mmagenta(authority)
|
|
88
|
+
: helpers.colors.red(authority)
|
|
89
|
+
})
|
|
90
|
+
.sort((a, b) =>
|
|
91
|
+
helpers.colorstrip(a).localeCompare(helpers.colorstrip(b)),
|
|
92
|
+
)
|
|
93
|
+
} catch (_err) {
|
|
94
|
+
providers = request.sources
|
|
95
|
+
.map((source) => {
|
|
96
|
+
const authority = source.authority.split(".").slice(-2)[0]
|
|
97
|
+
return helpers.colors.magenta(
|
|
98
|
+
authority[0].toUpperCase() + authority.slice(1),
|
|
99
|
+
)
|
|
100
|
+
})
|
|
101
|
+
.sort((a, b) =>
|
|
102
|
+
helpers.colorstrip(a).localeCompare(helpers.colorstrip(b)),
|
|
103
|
+
)
|
|
104
|
+
}
|
|
105
|
+
} else if (pf?.oracle) {
|
|
106
|
+
providers = [
|
|
107
|
+
helpers.colors.mblue(
|
|
108
|
+
`${pf.oracle.class}:${
|
|
109
|
+
pf.oracle.sources !==
|
|
110
|
+
"0x0000000000000000000000000000000000000000000000000000000000000000"
|
|
111
|
+
? `${pf.oracle.target}:${pf.oracle.sources.slice(2, 10)}`
|
|
112
|
+
: pf.oracle.target
|
|
113
|
+
}`,
|
|
114
|
+
),
|
|
115
|
+
]
|
|
116
|
+
} else if (pf?.mapper) {
|
|
117
|
+
providers = pf.mapper.deps.map((dep) =>
|
|
118
|
+
helpers.colors.gray(dep.split(".").pop().toLowerCase()),
|
|
119
|
+
)
|
|
120
|
+
}
|
|
121
|
+
return {
|
|
122
|
+
...pf,
|
|
123
|
+
providers,
|
|
124
|
+
}
|
|
125
|
+
}),
|
|
126
|
+
).catch((err) => console.error(err)),
|
|
127
|
+
)
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
if (priceFeeds?.length > 0) {
|
|
131
|
+
helpers.traceTable(
|
|
132
|
+
priceFeeds.map((pf) => [
|
|
133
|
+
pf.id4,
|
|
134
|
+
pf.symbol,
|
|
135
|
+
pf.lastUpdate.timestamp ? pf.lastUpdate.price.toFixed(6) : "",
|
|
136
|
+
pf.lastUpdate.timestamp
|
|
137
|
+
? moment.unix(Number(pf.lastUpdate.timestamp)).fromNow()
|
|
138
|
+
: "",
|
|
139
|
+
...(options["trace-back"]
|
|
140
|
+
? [
|
|
141
|
+
pf.lastUpdate.trail !==
|
|
142
|
+
"0x0000000000000000000000000000000000000000000000000000000000000000"
|
|
143
|
+
? helpers.colors.mmagenta(pf.lastUpdate.trail.slice(2))
|
|
144
|
+
: "",
|
|
145
|
+
]
|
|
146
|
+
: [pf?.providers?.join(" ")]),
|
|
147
|
+
]),
|
|
148
|
+
{
|
|
149
|
+
colors: [
|
|
150
|
+
helpers.colors.lwhite,
|
|
151
|
+
helpers.colors.mgreen,
|
|
152
|
+
helpers.colors.mcyan,
|
|
153
|
+
helpers.colors.yellow,
|
|
154
|
+
undefined,
|
|
155
|
+
],
|
|
156
|
+
headlines: [
|
|
157
|
+
":ID4",
|
|
158
|
+
":CAPTION",
|
|
159
|
+
"LAST PRICE:",
|
|
160
|
+
"FRESHNESS:",
|
|
161
|
+
options["trace-back"]
|
|
162
|
+
? `DATA WITNESSING TRAIL ON ${helpers.colors.lwhite(`WITNET ${utils.isEvmNetworkMainnet(network) ? "MAINNET" : "TESTNET"}`)}`
|
|
163
|
+
: ":DATA PROVIDERS",
|
|
164
|
+
],
|
|
165
|
+
},
|
|
166
|
+
)
|
|
167
|
+
} else {
|
|
168
|
+
console.info("> No price feeds currently supported.")
|
|
169
|
+
}
|
|
170
|
+
}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
const helpers = require("../helpers.cjs")
|
|
2
|
+
const moment = require("moment")
|
|
3
|
+
|
|
4
|
+
const { utils, WitOracle } = require("../../../dist/src")
|
|
5
|
+
|
|
6
|
+
const { DEFAULT_BATCH_SIZE, DEFAULT_LIMIT, DEFAULT_SINCE } = helpers
|
|
7
|
+
|
|
8
|
+
module.exports = async (options = {}, args = []) => {
|
|
9
|
+
;[args] = helpers.deleteExtraFlags(args)
|
|
10
|
+
|
|
11
|
+
const { limit, offset, since } = options
|
|
12
|
+
|
|
13
|
+
const witOracle = await WitOracle.fromJsonRpcUrl(
|
|
14
|
+
`http://127.0.0.1:${options?.port || 8545}`,
|
|
15
|
+
options?.signer,
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
const { address, network, provider } = witOracle
|
|
19
|
+
helpers.traceHeader(`${network.toUpperCase()}`, helpers.colors.lcyan)
|
|
20
|
+
|
|
21
|
+
const symbol = utils.getEvmNetworkSymbol(network)
|
|
22
|
+
const artifact = await witOracle.getEvmImplClass()
|
|
23
|
+
const version = await witOracle.getEvmImplVersion()
|
|
24
|
+
console.info(
|
|
25
|
+
`> ${helpers.colors.lwhite(artifact)}: ${helpers.colors.lblue(address)} ${helpers.colors.blue(`[ v${version} ]`)}`,
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
// determine current block number
|
|
29
|
+
const blockNumber = await provider.getBlockNumber()
|
|
30
|
+
|
|
31
|
+
// determine fromBlock
|
|
32
|
+
let fromBlock
|
|
33
|
+
if (since === undefined || since < 0) {
|
|
34
|
+
fromBlock = BigInt(blockNumber) + BigInt(since ?? DEFAULT_SINCE)
|
|
35
|
+
} else {
|
|
36
|
+
fromBlock = BigInt(since ?? 0n)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// fetch events since specified block
|
|
40
|
+
let logs = await witOracle.filterWitOracleQueryEvents({
|
|
41
|
+
fromBlock,
|
|
42
|
+
where: {
|
|
43
|
+
evmRequester: options["filter-requester"],
|
|
44
|
+
queryRadHash: options["filter-radHash"],
|
|
45
|
+
},
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
// filter out unspecified query ids
|
|
49
|
+
if (args && args.length > 0) {
|
|
50
|
+
logs = logs.filter((log) => args.includes(log.queryId.toString()))
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// fetch query statuses
|
|
54
|
+
const queryIds = logs.map((log) => log.queryId)
|
|
55
|
+
const queryStatuses = await helpers.prompter(
|
|
56
|
+
Promise.all(
|
|
57
|
+
[...helpers.chunks(queryIds, DEFAULT_BATCH_SIZE)].map((ids) =>
|
|
58
|
+
witOracle.getQueryStatuses(ids),
|
|
59
|
+
),
|
|
60
|
+
).then((ids) => ids.flat()),
|
|
61
|
+
)
|
|
62
|
+
logs = logs.map((log, index) => ({
|
|
63
|
+
...log,
|
|
64
|
+
queryStatus: queryStatuses[index],
|
|
65
|
+
}))
|
|
66
|
+
|
|
67
|
+
// filter out deleted queries, if no otherwise specified
|
|
68
|
+
if (!options.voids) {
|
|
69
|
+
logs = logs.filter((log) => log.queryStatus !== "Void")
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// count logs before last filter
|
|
73
|
+
const totalLogs = logs.length
|
|
74
|
+
|
|
75
|
+
// apply limit/offset filter
|
|
76
|
+
logs =
|
|
77
|
+
!since || BigInt(since) < 0n
|
|
78
|
+
? logs
|
|
79
|
+
.slice(offset || 0)
|
|
80
|
+
.slice(0, limit || DEFAULT_LIMIT) // oldest first
|
|
81
|
+
: logs
|
|
82
|
+
.reverse()
|
|
83
|
+
.slice(offset || 0)
|
|
84
|
+
.slice(0, limit || DEFAULT_LIMIT) // latest first
|
|
85
|
+
|
|
86
|
+
if (options["trace-back"]) {
|
|
87
|
+
logs = await Promise.all(
|
|
88
|
+
logs.map(async (log) => {
|
|
89
|
+
const response = await witOracle.getQueryResponse(log.queryId)
|
|
90
|
+
return {
|
|
91
|
+
...log,
|
|
92
|
+
resultDrTxHash: response.resultDrTxHash,
|
|
93
|
+
}
|
|
94
|
+
}),
|
|
95
|
+
).catch((err) => console.error(err))
|
|
96
|
+
} else {
|
|
97
|
+
logs = await helpers.prompter(
|
|
98
|
+
Promise.all(
|
|
99
|
+
logs.map(async (log) => {
|
|
100
|
+
const receipt = await provider.getTransactionReceipt(
|
|
101
|
+
log.evmTransactionHash,
|
|
102
|
+
)
|
|
103
|
+
const transaction = await provider.getTransaction(
|
|
104
|
+
log.evmTransactionHash,
|
|
105
|
+
)
|
|
106
|
+
const evmTransactionCost =
|
|
107
|
+
transaction.value + receipt.gasPrice * receipt.gasUsed
|
|
108
|
+
const resultStatus =
|
|
109
|
+
log.queryStatus !== "Void"
|
|
110
|
+
? await witOracle.getQueryResultStatusDescription(log.queryId)
|
|
111
|
+
: ""
|
|
112
|
+
let resultTTR = ""
|
|
113
|
+
if (["Finalized", "Reported", "Disputed"].includes(log.queryStatus)) {
|
|
114
|
+
const query = await witOracle.getQuery(log.queryId)
|
|
115
|
+
const evmCheckpointBlock = await provider.getBlock(query.checkpoint)
|
|
116
|
+
const evmQueryBlock = await provider.getBlock(log.evmBlockNumber)
|
|
117
|
+
resultTTR = moment
|
|
118
|
+
.duration(
|
|
119
|
+
moment
|
|
120
|
+
.unix(evmCheckpointBlock.timestamp)
|
|
121
|
+
.diff(moment.unix(evmQueryBlock.timestamp)),
|
|
122
|
+
)
|
|
123
|
+
.humanize()
|
|
124
|
+
}
|
|
125
|
+
return {
|
|
126
|
+
...log,
|
|
127
|
+
evmTransactionCost,
|
|
128
|
+
resultStatus,
|
|
129
|
+
resultTTR,
|
|
130
|
+
}
|
|
131
|
+
}),
|
|
132
|
+
).catch((err) => console.error(err)),
|
|
133
|
+
)
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
if (logs?.length > 0) {
|
|
137
|
+
if (!options["trace-back"]) {
|
|
138
|
+
helpers.traceTable(
|
|
139
|
+
logs.map((log) => [
|
|
140
|
+
log.evmBlockNumber,
|
|
141
|
+
log.queryId,
|
|
142
|
+
`${log.evmRequester?.slice(0, 8)}..${log.evmRequester?.slice(-4)}`,
|
|
143
|
+
Number(Number(log?.evmTransactionCost || 0n) / 10 ** 18).toFixed(7),
|
|
144
|
+
`${log.queryRadHash?.slice(2).slice(0, 6)}..${log.queryRadHash.slice(-5)}`,
|
|
145
|
+
`${log.queryParams.witnesses}`,
|
|
146
|
+
// `${Witnet.Coins.fromPedros(BigInt(log.queryParams.unitaryReward) * (3n + log.queryParams.witnesses)).toString(2)}`,
|
|
147
|
+
log.resultTTR,
|
|
148
|
+
log.queryStatus,
|
|
149
|
+
log.resultStatus,
|
|
150
|
+
]),
|
|
151
|
+
{
|
|
152
|
+
colors: [
|
|
153
|
+
helpers.colors.white,
|
|
154
|
+
helpers.colors.lwhite,
|
|
155
|
+
helpers.colors.mblue,
|
|
156
|
+
helpers.colors.gray,
|
|
157
|
+
helpers.colors.mgreen,
|
|
158
|
+
helpers.colors.green,
|
|
159
|
+
// helpers.colors.green,
|
|
160
|
+
helpers.colors.cyan,
|
|
161
|
+
helpers.colors.mcyan,
|
|
162
|
+
helpers.colors.magenta,
|
|
163
|
+
],
|
|
164
|
+
headlines: [
|
|
165
|
+
"EVM BLOCK:",
|
|
166
|
+
"QUERY ID:",
|
|
167
|
+
"EVM REQUESTER",
|
|
168
|
+
`$${helpers.colors.lwhite(symbol)} COST`,
|
|
169
|
+
"radon request",
|
|
170
|
+
"witnesses",
|
|
171
|
+
// "witnet fees",
|
|
172
|
+
"T.T.R.:",
|
|
173
|
+
":QUERY STATUS",
|
|
174
|
+
":RESULT STATUS",
|
|
175
|
+
],
|
|
176
|
+
humanizers: [helpers.commas, helpers.commas],
|
|
177
|
+
},
|
|
178
|
+
)
|
|
179
|
+
} else {
|
|
180
|
+
// traceBack is ON
|
|
181
|
+
helpers.traceTable(
|
|
182
|
+
logs.map((log) => [
|
|
183
|
+
log.evmBlockNumber,
|
|
184
|
+
log.queryId,
|
|
185
|
+
log.evmTransactionHash,
|
|
186
|
+
log.resultDrTxHash.slice(2),
|
|
187
|
+
]),
|
|
188
|
+
{
|
|
189
|
+
colors: [
|
|
190
|
+
helpers.colors.white,
|
|
191
|
+
helpers.colors.lwhite,
|
|
192
|
+
helpers.colors.gray,
|
|
193
|
+
helpers.colors.mmagenta,
|
|
194
|
+
],
|
|
195
|
+
headlines: [
|
|
196
|
+
"EVM BLOCK:",
|
|
197
|
+
"QUERY ID:",
|
|
198
|
+
"EVM DATA QUERYING TRANSACTION HASH",
|
|
199
|
+
`QUERY'S RESOLUTION ACT ON ${helpers.colors.lwhite(`WITNET ${utils.isEvmNetworkMainnet(network) ? "MAINNET" : "TESTNET"}`)}`,
|
|
200
|
+
],
|
|
201
|
+
humanizers: [helpers.commas, helpers.commas],
|
|
202
|
+
},
|
|
203
|
+
)
|
|
204
|
+
}
|
|
205
|
+
console.info(
|
|
206
|
+
`^ Listed ${logs.length} out of ${totalLogs} queries${
|
|
207
|
+
fromBlock
|
|
208
|
+
? ` since block #${helpers.commas(fromBlock)}.`
|
|
209
|
+
: ` up until current block #${helpers.colors.lwhite(helpers.commas(blockNumber))}.`
|
|
210
|
+
}`,
|
|
211
|
+
)
|
|
212
|
+
} else {
|
|
213
|
+
console.info(
|
|
214
|
+
`^ No oracle queries${fromBlock ? ` since block #${helpers.colors.lwhite(helpers.commas(fromBlock))}.` : "."}`,
|
|
215
|
+
)
|
|
216
|
+
}
|
|
217
|
+
}
|