@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,290 @@
|
|
|
1
|
+
const cron = require("node-cron")
|
|
2
|
+
require("dotenv").config({ quiet: true })
|
|
3
|
+
const moment = require("moment")
|
|
4
|
+
const promisePoller = require("promise-poller").default
|
|
5
|
+
|
|
6
|
+
const { ethers, utils, WitOracle } = require("../../../dist/src")
|
|
7
|
+
|
|
8
|
+
const commas = (number) => {
|
|
9
|
+
const parts = number.toString().split(".")
|
|
10
|
+
const result =
|
|
11
|
+
parts.length <= 1
|
|
12
|
+
? `${parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",")}`
|
|
13
|
+
: `${parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",")}.${parts[1]}`
|
|
14
|
+
return result
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const CHECK_BALANCE_SECS = process.env.WITNET_SOLIDITY_RANDOMIZER_CHECK_BALANCE_SECS
|
|
18
|
+
const CONFIRMATIONS = process.env.WITNET_SOLIDITY_RANDOMIZER_CONFIRMATIONS || 2
|
|
19
|
+
const MAX_GAS_PRICE_GWEI = process.env.WITNET_SOLIDITY_RANDOMIZER_MAX_GAS_PRICE_GWEI
|
|
20
|
+
const MIN_BALANCE = process.env.WITNET_SOLIDITY_RANDOMIZER_MIN_BALANCE || 0
|
|
21
|
+
const NODE_CRON_OVERLAP = process.env.WITNET_SOLIDITY_RANDOMIZER_CRON_OVERLAP || true
|
|
22
|
+
const NODE_CRON_SCHEDULE = process.env.WITNET_SOLIDITY_RANDOMIZER_CRON_SCHEDULE || "0 0 9 * * 6" // default: every Saturday at 9.00 am
|
|
23
|
+
const NODE_CRON_TIMEZONE =
|
|
24
|
+
process.env.WITNET_SOLIDITY_RANDOMIZER_CRON_TIMEZONE || "Europe/Madrid" // see: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
|
|
25
|
+
const NETWORK =
|
|
26
|
+
_spliceFromArgs(process.argv, `--network`) || process.env.WITNET_SOLIDITY_RANDOMIZER_NETWORK
|
|
27
|
+
const POLLING_MSECS = process.env.WITNET_SOLIDITY_RANDOMIZER_POLLING_MSECS || 15000
|
|
28
|
+
const GATEWAY_HOST = (
|
|
29
|
+
_spliceFromArgs(process.argv, `--host`) ||
|
|
30
|
+
process.env.WITNET_SOLIDITY_RANDOMIZER_GATEWAY_HOST ||
|
|
31
|
+
"http://127.0.0.1"
|
|
32
|
+
).replace(/\/$/, "")
|
|
33
|
+
const GATEWAY_PORT =
|
|
34
|
+
_parseIntFromArgs(process.argv, `--port`) ||
|
|
35
|
+
process.env.WITNET_SOLIDITY_RANDOMIZER_GATEWAY_PORT
|
|
36
|
+
const SIGNER =
|
|
37
|
+
_spliceFromArgs(process.argv, `--signer`) || process.env.WITNET_SOLIDITY_RANDOMIZER_SIGNER
|
|
38
|
+
const TARGET =
|
|
39
|
+
_spliceFromArgs(process.argv, `--target`) ||
|
|
40
|
+
process.env.WITNET_SOLIDITY_RANDOMIZER_TARGET ||
|
|
41
|
+
undefined
|
|
42
|
+
|
|
43
|
+
main()
|
|
44
|
+
|
|
45
|
+
async function main() {
|
|
46
|
+
const headline = `@WITNET/SOLIDITY RANDOMIZER v${require("../../../package.json").version}`
|
|
47
|
+
console.info("=".repeat(120))
|
|
48
|
+
console.info(headline)
|
|
49
|
+
|
|
50
|
+
if (!GATEWAY_PORT) throw new Error(`Fatal: no PORT was specified.`)
|
|
51
|
+
else if (!TARGET) throw new Error(`Fatal: no TARGET was specified.`)
|
|
52
|
+
|
|
53
|
+
console.info(`> Ethereum gateway: ${GATEWAY_HOST}:${GATEWAY_PORT}`)
|
|
54
|
+
|
|
55
|
+
const witOracle = SIGNER
|
|
56
|
+
? await WitOracle.fromJsonRpcUrl(`${GATEWAY_HOST}:${GATEWAY_PORT}`, SIGNER)
|
|
57
|
+
: await WitOracle.fromJsonRpcUrl(`${GATEWAY_HOST}:${GATEWAY_PORT}`)
|
|
58
|
+
const { network, provider, signer } = witOracle
|
|
59
|
+
|
|
60
|
+
if (NETWORK && network !== NETWORK) {
|
|
61
|
+
throw new Error(
|
|
62
|
+
`Fatal: connected to wrong network: ${network.toUpperCase()}`,
|
|
63
|
+
)
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
console.info(`> Ethereum network: ${network}`)
|
|
67
|
+
|
|
68
|
+
const randomizer = await witOracle.getWitRandomnessAt(TARGET)
|
|
69
|
+
const artifact = await randomizer.getEvmImplClass()
|
|
70
|
+
const symbol = utils.getEvmNetworkSymbol(network)
|
|
71
|
+
const version = await randomizer.getEvmImplVersion()
|
|
72
|
+
|
|
73
|
+
console.info(
|
|
74
|
+
`> ${artifact}:${" ".repeat(Math.max(0, 16 - artifact.length))} ${TARGET} [${version}]`,
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
let randomizeWaitBlocks
|
|
78
|
+
if (artifact === "WitRandomnessV3") {
|
|
79
|
+
const settings = await randomizer.getSettings()
|
|
80
|
+
console.info(`> On-chain settings`, settings)
|
|
81
|
+
randomizeWaitBlocks = settings.randomizeWaitBlocks
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// set start clock
|
|
85
|
+
let _lastClock = Date.now()
|
|
86
|
+
|
|
87
|
+
// check initial balance
|
|
88
|
+
const balance = await checkBalance()
|
|
89
|
+
if (Number(ethers.formatEther(balance)) < MIN_BALANCE) {
|
|
90
|
+
console.error(
|
|
91
|
+
`> Fatal: insufficient balance: ${ethers.formatEther(balance)} < ${MIN_BALANCE} ${symbol}`,
|
|
92
|
+
)
|
|
93
|
+
process.exit(1)
|
|
94
|
+
}
|
|
95
|
+
console.info(`> Signer address: ${signer.address}`)
|
|
96
|
+
|
|
97
|
+
// max acceptable gas price
|
|
98
|
+
if (MAX_GAS_PRICE_GWEI) {
|
|
99
|
+
console.info(`> Max gas price: ${commas(MAX_GAS_PRICE_GWEI)} gwei`)
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// validate schedule plan
|
|
103
|
+
if (!cron.validate(NODE_CRON_SCHEDULE)) {
|
|
104
|
+
console.error(
|
|
105
|
+
`> Fatal: invalid randomizing schedule: "${NODE_CRON_SCHEDULE}"`,
|
|
106
|
+
)
|
|
107
|
+
process.exit(1)
|
|
108
|
+
} else {
|
|
109
|
+
console.info(
|
|
110
|
+
`> Randomizing schedule: "${NODE_CRON_SCHEDULE}" at ${NODE_CRON_TIMEZONE}`,
|
|
111
|
+
)
|
|
112
|
+
cron.schedule(NODE_CRON_SCHEDULE, async () => randomize(), {
|
|
113
|
+
noOverlap: !NODE_CRON_OVERLAP,
|
|
114
|
+
timezone: NODE_CRON_TIMEZONE,
|
|
115
|
+
})
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// check balance periodically
|
|
119
|
+
console.info(
|
|
120
|
+
`> Checking balance every ${CHECK_BALANCE_SECS || 900} seconds ...`,
|
|
121
|
+
)
|
|
122
|
+
setInterval(checkBalance, (CHECK_BALANCE_SECS || 900) * 1000)
|
|
123
|
+
|
|
124
|
+
async function checkBalance() {
|
|
125
|
+
return provider
|
|
126
|
+
.getBalance(signer)
|
|
127
|
+
.then((balance) => {
|
|
128
|
+
if (Number(ethers.formatEther(balance)) < MIN_BALANCE) {
|
|
129
|
+
console.info(
|
|
130
|
+
`> Low balance !!! ${ethers.formatEther(balance)} ${symbol} (${signer.address})`,
|
|
131
|
+
)
|
|
132
|
+
} else {
|
|
133
|
+
console.info(
|
|
134
|
+
`> Signer balance: ${ethers.formatEther(balance)} ${symbol}`,
|
|
135
|
+
)
|
|
136
|
+
}
|
|
137
|
+
return balance
|
|
138
|
+
})
|
|
139
|
+
.catch((err) => {
|
|
140
|
+
console.error(err)
|
|
141
|
+
})
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
async function randomize() {
|
|
145
|
+
_lastClock = Date.now()
|
|
146
|
+
|
|
147
|
+
let isRandomized = false
|
|
148
|
+
const feeData = await randomizer.provider.getFeeData()
|
|
149
|
+
if (Number(feeData.gasPrice) / 10 ** 9 > MAX_GAS_PRICE_GWEI) {
|
|
150
|
+
console.info(
|
|
151
|
+
`> Postponing randomize as current network gas price is too high: ${commas(
|
|
152
|
+
Number(feeData.gasPrice) / 10 ** 9,
|
|
153
|
+
)} gwei > ${commas(MAX_GAS_PRICE_GWEI)} gwei`,
|
|
154
|
+
)
|
|
155
|
+
setTimeout(randomize, POLLING_MSECS)
|
|
156
|
+
return
|
|
157
|
+
} else {
|
|
158
|
+
console.info(`> Randomizing new block ...`)
|
|
159
|
+
}
|
|
160
|
+
randomizer
|
|
161
|
+
.randomize({
|
|
162
|
+
evmConfirmations: CONFIRMATIONS || 2,
|
|
163
|
+
evmGasPrice: feeData.gasPrice,
|
|
164
|
+
})
|
|
165
|
+
.then(async (receipt) => {
|
|
166
|
+
console.info(` - Block number: ${commas(receipt.blockNumber)}`)
|
|
167
|
+
console.info(` - Block hash: ${receipt.blockHash}`)
|
|
168
|
+
console.info(` - Transaction: ${receipt.hash}`)
|
|
169
|
+
console.info(
|
|
170
|
+
` - Tx. gas price: ${
|
|
171
|
+
receipt.gasPrice < BigInt(10 ** 9)
|
|
172
|
+
? Number(Number(receipt.gasPrice) / 10 ** 9).toFixed(9)
|
|
173
|
+
: commas(Number(Number(receipt.gasPrice) / 10 ** 9).toFixed(1))
|
|
174
|
+
} gwei`,
|
|
175
|
+
)
|
|
176
|
+
const tx = await receipt.getTransaction()
|
|
177
|
+
console.info(
|
|
178
|
+
` - Tx. cost: ${ethers.formatEther(receipt.gasPrice * receipt.gasUsed + tx.value)} ${symbol}`,
|
|
179
|
+
)
|
|
180
|
+
const logs = await provider.getLogs({
|
|
181
|
+
address: randomizer.address,
|
|
182
|
+
fromBlock: receipt.blockNumber,
|
|
183
|
+
toBlock: receipt.blockNumber,
|
|
184
|
+
})
|
|
185
|
+
let randomizeBlock = Number(tx.blockNumber)
|
|
186
|
+
if (logs?.[0]) {
|
|
187
|
+
if (
|
|
188
|
+
logs[0].topics[0] ===
|
|
189
|
+
"0x8cb766b09215126141c41df86fd488fe4745f22f3c995c3ad9aaf4c07195b946"
|
|
190
|
+
) {
|
|
191
|
+
randomizeBlock = Number(logs[0].data.slice(0, 66))
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
return promisePoller({
|
|
196
|
+
interval: POLLING_MSECS,
|
|
197
|
+
taskFn: () =>
|
|
198
|
+
randomizer
|
|
199
|
+
.isRandomized(randomizeBlock)
|
|
200
|
+
.then(async (isRandomized) => ({
|
|
201
|
+
isRandomized,
|
|
202
|
+
blockNumber: await provider.getBlockNumber(),
|
|
203
|
+
randomizeBlock,
|
|
204
|
+
})),
|
|
205
|
+
shouldContinue: (err, result) => {
|
|
206
|
+
if (err) {
|
|
207
|
+
console.info(err)
|
|
208
|
+
} else if (result && !result?.isRandomized) {
|
|
209
|
+
const { blockNumber, randomizeBlock } = result
|
|
210
|
+
const plus = Number(blockNumber) - Number(tx.blockNumber)
|
|
211
|
+
if (randomizeWaitBlocks && plus > randomizeWaitBlocks) {
|
|
212
|
+
return false
|
|
213
|
+
} else {
|
|
214
|
+
console.info(
|
|
215
|
+
`> Awaiting randomness for block ${commas(randomizeBlock)} ... T + ${commas(plus)}`,
|
|
216
|
+
)
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
return !result || !result.isRandomized
|
|
220
|
+
},
|
|
221
|
+
}).then(async (result) => {
|
|
222
|
+
if (result.isRandomized) {
|
|
223
|
+
isRandomized = true
|
|
224
|
+
console.info(`> Randomized block ${commas(randomizeBlock)}:`)
|
|
225
|
+
const trails =
|
|
226
|
+
await randomizer.fetchRandomnessAfterProof(randomizeBlock)
|
|
227
|
+
console.info(` - Finality block: ${commas(trails.finality)}`)
|
|
228
|
+
console.info(` - Witnet DRT hash: ${trails.trail?.slice(2)}`)
|
|
229
|
+
if (artifact === "WitRandomnessV3") {
|
|
230
|
+
console.info(` - Wit/Oracle UUID: ${trails.uuid?.slice(2)}`)
|
|
231
|
+
console.info(
|
|
232
|
+
` - Wit/Oracle RNG: ${(await randomizer.fetchRandomnessAfter(receipt.blockNumber))?.slice(2)}`,
|
|
233
|
+
)
|
|
234
|
+
} else {
|
|
235
|
+
console.info(` - Witnet result: ${trails.uuid?.slice(2)}`)
|
|
236
|
+
}
|
|
237
|
+
console.info(
|
|
238
|
+
` - Witnet timestamp: ${moment.unix(trails.timestamp)}`,
|
|
239
|
+
)
|
|
240
|
+
}
|
|
241
|
+
return result
|
|
242
|
+
})
|
|
243
|
+
})
|
|
244
|
+
.then((result) => {
|
|
245
|
+
if (result.isRandomized) {
|
|
246
|
+
console.info(
|
|
247
|
+
`> Next randomizing schedule: "${NODE_CRON_SCHEDULE}" at ${NODE_CRON_TIMEZONE}`,
|
|
248
|
+
)
|
|
249
|
+
} else {
|
|
250
|
+
console.info(
|
|
251
|
+
`> Randomizing block ${commas(result.randomizeBlock)} is taking too long !!!`,
|
|
252
|
+
)
|
|
253
|
+
// retry immediately a new randomize request
|
|
254
|
+
setTimeout(randomize, 0)
|
|
255
|
+
}
|
|
256
|
+
})
|
|
257
|
+
.catch((err) => {
|
|
258
|
+
console.error(err)
|
|
259
|
+
if (isRandomized) {
|
|
260
|
+
console.info(
|
|
261
|
+
`> Next randomizing schedule: "${NODE_CRON_SCHEDULE}" at ${NODE_CRON_TIMEZONE}`,
|
|
262
|
+
)
|
|
263
|
+
} else {
|
|
264
|
+
console.info(
|
|
265
|
+
`> Retrying in ${Math.floor(POLLING_MSECS / 1000)} seconds before next randomize ...`,
|
|
266
|
+
)
|
|
267
|
+
// retry immediately a new randomize request
|
|
268
|
+
setTimeout(randomize, POLLING_MSECS)
|
|
269
|
+
}
|
|
270
|
+
})
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
function _parseIntFromArgs(args, flag) {
|
|
275
|
+
const argIndex = args.indexOf(flag)
|
|
276
|
+
if (argIndex >= 0 && args.length > argIndex + 1) {
|
|
277
|
+
const value = parseInt(args[argIndex + 1], 10)
|
|
278
|
+
args.splice(argIndex, 2)
|
|
279
|
+
return value
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
function _spliceFromArgs(args, flag) {
|
|
284
|
+
const argIndex = args.indexOf(flag)
|
|
285
|
+
if (argIndex >= 0 && args.length > argIndex + 1) {
|
|
286
|
+
const value = args[argIndex + 1]
|
|
287
|
+
args.splice(argIndex, 2)
|
|
288
|
+
return value
|
|
289
|
+
}
|
|
290
|
+
}
|
|
File without changes
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
const helpers = require("../helpers.cjs")
|
|
2
|
+
const { WitOracle } = require("../../../dist/src")
|
|
3
|
+
|
|
4
|
+
module.exports = async (flags = {}) => {
|
|
5
|
+
const witOracle = await WitOracle.fromJsonRpcUrl(
|
|
6
|
+
`http://127.0.0.1:${flags?.port || 8545}`,
|
|
7
|
+
)
|
|
8
|
+
|
|
9
|
+
const { provider, network } = witOracle
|
|
10
|
+
helpers.traceHeader(`${network.toUpperCase()}`, helpers.colors.lcyan)
|
|
11
|
+
|
|
12
|
+
const signers = await provider.listAccounts()
|
|
13
|
+
const records = []
|
|
14
|
+
let totalEth = 0n
|
|
15
|
+
records.push(
|
|
16
|
+
...(await Promise.all(
|
|
17
|
+
signers.map(async (signer) => {
|
|
18
|
+
const eth = await provider.getBalance(signer.address)
|
|
19
|
+
totalEth += eth
|
|
20
|
+
return [signer.address, eth]
|
|
21
|
+
}),
|
|
22
|
+
)),
|
|
23
|
+
)
|
|
24
|
+
records.push(["", totalEth])
|
|
25
|
+
|
|
26
|
+
helpers.traceTable(
|
|
27
|
+
records.map(([address, eth], index) => {
|
|
28
|
+
eth = Number(Number(eth) / 10 ** 18).toFixed(10)
|
|
29
|
+
return [
|
|
30
|
+
address !== "" ? index : "",
|
|
31
|
+
address,
|
|
32
|
+
address !== ""
|
|
33
|
+
? helpers.colors.yellow(helpers.commas(eth))
|
|
34
|
+
: helpers.colors.myellow(helpers.commas(eth)),
|
|
35
|
+
]
|
|
36
|
+
}),
|
|
37
|
+
{
|
|
38
|
+
headlines: [
|
|
39
|
+
"INDEX",
|
|
40
|
+
"EVM SIGNER ADDRESSES",
|
|
41
|
+
`$${helpers.colors.lwhite("ETH")} BALANCE`,
|
|
42
|
+
],
|
|
43
|
+
humanizers: [helpers.commas, undefined],
|
|
44
|
+
colors: [undefined, helpers.colors.mblue],
|
|
45
|
+
},
|
|
46
|
+
)
|
|
47
|
+
}
|