@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.
Files changed (222) hide show
  1. package/LICENSE +2 -2
  2. package/build/contracts/Bech32.json +1 -1
  3. package/build/contracts/Clonable.json +1 -1
  4. package/build/contracts/Context.json +1 -1
  5. package/build/contracts/Create3.json +1 -1
  6. package/build/contracts/ERC165.json +1 -1
  7. package/build/contracts/Escrowable.json +1 -1
  8. package/build/contracts/IChainlinkAggregatorV3.json +1 -1
  9. package/build/contracts/IERC165.json +1 -1
  10. package/build/contracts/IERC20.json +1 -1
  11. package/build/contracts/IERC2362.json +1 -1
  12. package/build/contracts/IPythChainlinkAggregatorV3.json +1 -1
  13. package/build/contracts/IWitAppliance.json +1 -1
  14. package/build/contracts/IWitOracle.json +1 -1
  15. package/build/contracts/IWitOracleAppliance.json +1 -1
  16. package/build/contracts/IWitOracleConsumer.json +1 -1
  17. package/build/contracts/IWitOracleConsumerLegacy.json +1 -1
  18. package/build/contracts/IWitOracleLegacy.json +1 -1
  19. package/build/contracts/IWitOracleQueriable.json +1 -1
  20. package/build/contracts/IWitOracleQueriableConsumer.json +1 -1
  21. package/build/contracts/IWitOracleQueriableEvents.json +1 -1
  22. package/build/contracts/IWitOracleQueriableExperimental.json +1 -1
  23. package/build/contracts/IWitOracleQueriableTrustableReporter.json +1 -1
  24. package/build/contracts/IWitOracleQueriableTrustlessReporter.json +1 -1
  25. package/build/contracts/IWitOracleRadonRegistry.json +1 -1
  26. package/build/contracts/IWitOracleRadonRegistryEvents.json +1 -1
  27. package/build/contracts/IWitOracleRadonRegistryLegacy.json +1 -1
  28. package/build/contracts/IWitOracleRadonRequestFactory.json +1 -1
  29. package/build/contracts/IWitOracleRadonRequestModal.json +1 -1
  30. package/build/contracts/IWitOracleRadonRequestTemplate.json +1 -1
  31. package/build/contracts/IWitOracleRequest.json +1 -1
  32. package/build/contracts/IWitOracleRequestFactory.json +1 -1
  33. package/build/contracts/IWitOracleRequestFactoryEvents.json +1 -1
  34. package/build/contracts/IWitOracleRequestTemplate.json +1 -1
  35. package/build/contracts/IWitOracleTrustableAdmin.json +1 -1
  36. package/build/contracts/IWitOracleTrustless.json +1 -1
  37. package/build/contracts/IWitPriceFeeds.json +1 -1
  38. package/build/contracts/IWitPriceFeedsAdmin.json +1 -1
  39. package/build/contracts/IWitPriceFeedsConsumer.json +1 -1
  40. package/build/contracts/IWitPriceFeedsEvents.json +1 -1
  41. package/build/contracts/IWitPriceFeedsLegacy.json +1 -1
  42. package/build/contracts/IWitPriceFeedsLegacyAdmin.json +1 -1
  43. package/build/contracts/IWitPriceFeedsLegacySolver.json +1 -1
  44. package/build/contracts/IWitPriceFeedsLegacySolverFactory.json +1 -1
  45. package/build/contracts/IWitPriceFeedsTypes.json +1 -1
  46. package/build/contracts/IWitPyth.json +1 -1
  47. package/build/contracts/IWitPythChainlinkAggregator.json +1 -1
  48. package/build/contracts/IWitPythErrors.json +1 -1
  49. package/build/contracts/IWitPythEvents.json +1 -1
  50. package/build/contracts/IWitPythReporter.json +1 -1
  51. package/build/contracts/IWitRandomness.json +1 -1
  52. package/build/contracts/IWitRandomnessAdmin.json +1 -1
  53. package/build/contracts/IWitRandomnessAdminV2.json +1 -1
  54. package/build/contracts/IWitRandomnessConsumer.json +1 -1
  55. package/build/contracts/IWitRandomnessEvents.json +1 -1
  56. package/build/contracts/IWitRandomnessLegacy.json +1 -1
  57. package/build/contracts/IWitRandomnessTypes.json +1 -1
  58. package/build/contracts/Initializable.json +1 -1
  59. package/build/contracts/OVM_GasPriceOracle.json +1 -1
  60. package/build/contracts/Ownable.json +1 -1
  61. package/build/contracts/Ownable2Step.json +1 -1
  62. package/build/contracts/Payable.json +1 -1
  63. package/build/contracts/Proxiable.json +1 -1
  64. package/build/contracts/ReentrancyGuard.json +1 -1
  65. package/build/contracts/Secp256k1.json +1 -1
  66. package/build/contracts/Slices.json +1 -1
  67. package/build/contracts/TestBech32.json +1 -1
  68. package/build/contracts/TestSecp256k1.json +1 -1
  69. package/build/contracts/Upgradeable.json +1 -1
  70. package/build/contracts/UsingWitOracle.json +1 -1
  71. package/build/contracts/UsingWitPriceFeeds.json +1 -1
  72. package/build/contracts/UsingWitRandomness.json +1 -1
  73. package/build/contracts/WitOracle.json +2 -13
  74. package/build/contracts/WitOracleBasePushOnly.json +1 -1
  75. package/build/contracts/WitOracleBasePushOnlyTrustable.json +1 -1
  76. package/build/contracts/WitOracleBasePushOnlyTrustless.json +1 -1
  77. package/build/contracts/WitOracleBasePushOnlyUpgradable.json +1 -1
  78. package/build/contracts/WitOracleBaseQueriable.json +1 -1
  79. package/build/contracts/WitOracleBaseQueriableTrustable.json +1 -1
  80. package/build/contracts/WitOracleBaseQueriableTrustless.json +1 -1
  81. package/build/contracts/WitOracleBaseQueriableUpgradable.json +1 -1
  82. package/build/contracts/WitOracleDataLib.json +2 -254
  83. package/build/contracts/WitOraclePushOnly.json +1 -1
  84. package/build/contracts/WitOracleRadonEncodingLib.json +2 -13
  85. package/build/contracts/WitOracleRadonRegistry.json +2 -13
  86. package/build/contracts/WitOracleRadonRegistryBase.json +1 -1
  87. package/build/contracts/WitOracleRadonRegistryBaseUpgradable.json +1 -1
  88. package/build/contracts/WitOracleRadonRegistryData.json +1 -1
  89. package/build/contracts/WitOracleRadonRegistryDefaultV21.json +1 -1
  90. package/build/contracts/WitOracleRadonRegistryUpgradableDefault.json +2 -17
  91. package/build/contracts/WitOracleRadonRegistryUpgradableNoSha256.json +1 -1
  92. package/build/contracts/WitOracleRadonRegistryUpgradableZkSync.json +1 -1
  93. package/build/contracts/WitOracleRadonRequestFactory.json +2 -13
  94. package/build/contracts/WitOracleRadonRequestFactoryBase.json +1 -1
  95. package/build/contracts/WitOracleRadonRequestFactoryBaseUpgradable.json +1 -1
  96. package/build/contracts/WitOracleRadonRequestFactoryModals.json +2 -13
  97. package/build/contracts/WitOracleRadonRequestFactoryModalsDefault.json +2 -13
  98. package/build/contracts/WitOracleRadonRequestFactoryTemplates.json +2 -13
  99. package/build/contracts/WitOracleRadonRequestFactoryTemplatesDefault.json +2 -13
  100. package/build/contracts/WitOracleRadonRequestFactoryUpgradableConfluxCore.json +1 -1
  101. package/build/contracts/WitOracleRadonRequestFactoryUpgradableDefault.json +2 -13
  102. package/build/contracts/WitOracleResultStatusLib.json +2 -14
  103. package/build/contracts/WitOracleTrustableDefault.json +2 -259
  104. package/build/contracts/WitOracleTrustableExperimental.json +1 -1
  105. package/build/contracts/WitOracleTrustableObscuro.json +1 -1
  106. package/build/contracts/WitOracleTrustableOvm2.json +1 -1
  107. package/build/contracts/WitOracleTrustablePushOnly.json +1 -1
  108. package/build/contracts/WitOracleTrustableReef.json +1 -1
  109. package/build/contracts/WitOracleTrustableZkSync.json +1 -1
  110. package/build/contracts/WitOracleTrustlessDataLib.json +1 -1
  111. package/build/contracts/WitOracleTrustlessDefaultV22.json +1 -1
  112. package/build/contracts/WitOracleTrustlessUpgradableDefault.json +1 -1
  113. package/build/contracts/WitPriceFeeds.json +2 -13
  114. package/build/contracts/WitPriceFeedsDataLib.json +2 -14
  115. package/build/contracts/WitPriceFeedsLegacy.json +2 -8
  116. package/build/contracts/WitPriceFeedsLegacyDataLib.json +2 -84
  117. package/build/contracts/WitPriceFeedsLegacyUpgradable.json +1 -1
  118. package/build/contracts/WitPriceFeedsLegacyUpgradableBypass.json +2 -80
  119. package/build/contracts/WitPriceFeedsSolverBase.json +1 -1
  120. package/build/contracts/WitPriceFeedsV3.json +1 -1
  121. package/build/contracts/WitPriceFeedsV3Upgradable.json +2 -17
  122. package/build/contracts/WitPythChainlinkAggregator.json +1 -1
  123. package/build/contracts/WitRandomness.json +2 -13
  124. package/build/contracts/WitRandomnessLegacy.json +1 -1
  125. package/build/contracts/WitRandomnessV3.json +2 -13
  126. package/build/contracts/WitRngConsumer.json +1 -1
  127. package/build/contracts/Witnet.json +1 -1
  128. package/build/contracts/WitnetBuffer.json +1 -1
  129. package/build/contracts/WitnetCBOR.json +1 -1
  130. package/build/contracts/WitnetDeployer.json +2 -13
  131. package/build/contracts/WitnetDeployerConfluxCore.json +1 -1
  132. package/build/contracts/WitnetDeployerDeferred.json +1 -1
  133. package/build/contracts/WitnetDeployerMeter.json +1 -1
  134. package/build/contracts/WitnetProxy.json +2 -9
  135. package/build/contracts/WitnetUpgradableBase.json +1 -1
  136. package/{migrations → dist/migrations}/addresses.json +1 -25
  137. package/{migrations → dist/migrations}/constructorArgs.json +1 -6
  138. package/dist/migrations/settings/artifacts.d.ts +95 -0
  139. package/dist/migrations/settings/artifacts.d.ts.map +1 -0
  140. package/dist/migrations/settings/artifacts.js +80 -0
  141. package/dist/migrations/settings/networks.d.ts +593 -0
  142. package/dist/migrations/settings/networks.d.ts.map +1 -0
  143. package/dist/migrations/settings/networks.js +593 -0
  144. package/dist/src/bin/helpers.cjs +350 -0
  145. package/dist/src/bin/helpers.d.cts +76 -0
  146. package/dist/src/bin/helpers.d.cts.map +1 -0
  147. package/dist/src/index.d.ts +6 -0
  148. package/dist/src/index.d.ts.map +1 -0
  149. package/dist/src/index.js +33 -0
  150. package/dist/src/lib/types.d.ts +99 -0
  151. package/dist/src/lib/types.d.ts.map +1 -0
  152. package/dist/src/lib/types.js +18 -0
  153. package/dist/src/lib/utils.d.ts +22 -0
  154. package/dist/src/lib/utils.d.ts.map +1 -0
  155. package/dist/src/lib/utils.js +267 -0
  156. package/dist/src/lib/wrappers/ContractWrapper.d.ts +47 -0
  157. package/dist/src/lib/wrappers/ContractWrapper.d.ts.map +1 -0
  158. package/dist/src/lib/wrappers/ContractWrapper.js +81 -0
  159. package/dist/src/lib/wrappers/WitAppliance.d.ts +7 -0
  160. package/dist/src/lib/wrappers/WitAppliance.d.ts.map +1 -0
  161. package/dist/src/lib/wrappers/WitAppliance.js +17 -0
  162. package/dist/src/lib/wrappers/WitArtifact.d.ts +6 -0
  163. package/dist/src/lib/wrappers/WitArtifact.d.ts.map +1 -0
  164. package/dist/src/lib/wrappers/WitArtifact.js +16 -0
  165. package/dist/src/lib/wrappers/WitOracle.d.ts +105 -0
  166. package/dist/src/lib/wrappers/WitOracle.d.ts.map +1 -0
  167. package/dist/src/lib/wrappers/WitOracle.js +217 -0
  168. package/dist/src/lib/wrappers/WitOracleConsumer.d.ts +16 -0
  169. package/dist/src/lib/wrappers/WitOracleConsumer.d.ts.map +1 -0
  170. package/dist/src/lib/wrappers/WitOracleConsumer.js +30 -0
  171. package/dist/src/lib/wrappers/WitOracleRadonRegistry.d.ts +102 -0
  172. package/dist/src/lib/wrappers/WitOracleRadonRegistry.d.ts.map +1 -0
  173. package/dist/src/lib/wrappers/WitOracleRadonRegistry.js +140 -0
  174. package/dist/src/lib/wrappers/WitOracleRadonRequestFactory.d.ts +81 -0
  175. package/dist/src/lib/wrappers/WitOracleRadonRequestFactory.d.ts.map +1 -0
  176. package/dist/src/lib/wrappers/WitOracleRadonRequestFactory.js +257 -0
  177. package/dist/src/lib/wrappers/WitPriceFeeds.d.ts +91 -0
  178. package/dist/src/lib/wrappers/WitPriceFeeds.d.ts.map +1 -0
  179. package/dist/src/lib/wrappers/WitPriceFeeds.js +356 -0
  180. package/dist/src/lib/wrappers/WitPriceFeedsLegacy.d.ts +14 -0
  181. package/dist/src/lib/wrappers/WitPriceFeedsLegacy.d.ts.map +1 -0
  182. package/dist/src/lib/wrappers/WitPriceFeedsLegacy.js +64 -0
  183. package/dist/src/lib/wrappers/WitRandomness.d.ts +55 -0
  184. package/dist/src/lib/wrappers/WitRandomness.d.ts.map +1 -0
  185. package/dist/src/lib/wrappers/WitRandomness.js +165 -0
  186. package/dist/src/lib/wrappers.d.ts +8 -0
  187. package/dist/src/lib/wrappers.d.ts.map +1 -0
  188. package/dist/src/lib/wrappers.js +8 -0
  189. package/package.json +78 -54
  190. package/scripts/clean.cjs +21 -0
  191. package/scripts/eth-create2.cjs +38 -0
  192. package/scripts/eth-create3.cjs +45 -0
  193. package/scripts/postinstall.cjs +9 -0
  194. package/scripts/prepare.cjs +27 -0
  195. package/scripts/vanity2gen.cjs +121 -0
  196. package/scripts/vanity3gen.cjs +84 -0
  197. package/scripts/verify-proxies.cjs +50 -0
  198. package/scripts/verify-truffle.cjs +69 -0
  199. package/scripts/verify.js +95 -0
  200. package/scripts/wof-acls.js +17 -0
  201. package/src/bin/bots/bridge.cjs +0 -0
  202. package/src/bin/bots/randomizer.cjs +290 -0
  203. package/src/bin/bots/reporter.cjs +0 -0
  204. package/src/bin/cli/accounts.cjs +47 -0
  205. package/src/bin/cli/assets.cjs +466 -0
  206. package/src/bin/cli/framework.cjs +100 -0
  207. package/src/bin/cli/gateway.cjs +26 -0
  208. package/src/bin/cli/networks.cjs +63 -0
  209. package/src/bin/cli/priceFeeds.cjs +170 -0
  210. package/src/bin/cli/queries.cjs +217 -0
  211. package/src/bin/cli/randomness.cjs +367 -0
  212. package/src/bin/cli/reports.cjs +272 -0
  213. package/src/bin/cli/wizard.cjs +352 -0
  214. package/src/bin/helpers.cjs +388 -0
  215. package/src/bin/index.cjs +407 -0
  216. package/settings/artifacts.js +0 -71
  217. package/settings/index.js +0 -49
  218. package/settings/networks.js +0 -593
  219. package/settings/solidity.js +0 -11
  220. package/settings/specs.js +0 -102
  221. package/src/index.js +0 -96
  222. 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
+ }