@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,352 @@
|
|
|
1
|
+
const helpers = require("../helpers.cjs")
|
|
2
|
+
const fs = require("node:fs")
|
|
3
|
+
const inquirer = require("inquirer")
|
|
4
|
+
const path = require("node:path")
|
|
5
|
+
|
|
6
|
+
const { supportsNetwork, supportedEcosystems, supportedNetworks } =
|
|
7
|
+
require("@witnet/solidity").default
|
|
8
|
+
|
|
9
|
+
const MODULE_WITNET_PATH =
|
|
10
|
+
process.env.WITNET_SOLIDITY_MODULE_PATH ||
|
|
11
|
+
"node_modules/witnet-solidity/witnet"
|
|
12
|
+
|
|
13
|
+
const camelizeDashedString = (str) =>
|
|
14
|
+
str
|
|
15
|
+
.split("-")
|
|
16
|
+
.map((part) => capitalizeFirstLetter(part))
|
|
17
|
+
.join("")
|
|
18
|
+
const capitalizeFirstLetter = (str) =>
|
|
19
|
+
str.charAt(0).toUpperCase() + str.slice(1).toLowerCase()
|
|
20
|
+
|
|
21
|
+
module.exports = async (flags = {}) => {
|
|
22
|
+
const network = flags?.network
|
|
23
|
+
if (network && !supportsNetwork(network)) {
|
|
24
|
+
throw new Error(`Unsupported network "${network}"`)
|
|
25
|
+
}
|
|
26
|
+
let contractPath = "contracts/"
|
|
27
|
+
let contractName = flags?.contract || ""
|
|
28
|
+
let isFirstMockup = true
|
|
29
|
+
let namedByUser = false
|
|
30
|
+
if (contractName !== "") {
|
|
31
|
+
if (contractName.indexOf("/") > -1) {
|
|
32
|
+
contractPath = contractName.slice(0, contractName.lastIndexOf("/"))
|
|
33
|
+
contractName = contractName.slice(contractName.lastIndexOf("/") + 1)
|
|
34
|
+
}
|
|
35
|
+
if (fs.existsSync(contractPath + contractName)) {
|
|
36
|
+
console.info("Sorry, output file already exists:", contractName)
|
|
37
|
+
process.exit(1)
|
|
38
|
+
} else if (!fs.existsSync(contractPath)) {
|
|
39
|
+
fs.mkdirSync(contractPath)
|
|
40
|
+
}
|
|
41
|
+
if (contractName.endsWith(".sol")) contractName = contractName.slice(0, -4)
|
|
42
|
+
contractName = camelizeDashedString(contractName)
|
|
43
|
+
namedByUser = true
|
|
44
|
+
}
|
|
45
|
+
if (contractName === "") {
|
|
46
|
+
const basename = `WitOracle${camelizeDashedString(path.basename(process.cwd()))}`
|
|
47
|
+
if (!fs.existsSync(contractPath)) {
|
|
48
|
+
fs.mkdirSync(contractPath)
|
|
49
|
+
}
|
|
50
|
+
const files = fs
|
|
51
|
+
.readdirSync(contractPath)
|
|
52
|
+
.filter((filename) => filename.startsWith(basename))
|
|
53
|
+
contractName = `${basename}${files.length + 1}`
|
|
54
|
+
isFirstMockup = files.length === 0
|
|
55
|
+
}
|
|
56
|
+
let answers = {
|
|
57
|
+
...(await inquirer.prompt([
|
|
58
|
+
{
|
|
59
|
+
type: "rawlist",
|
|
60
|
+
name: "usage",
|
|
61
|
+
message: `What will ${
|
|
62
|
+
isFirstMockup
|
|
63
|
+
? "your first"
|
|
64
|
+
: namedByUser
|
|
65
|
+
? `the ${contractName}`
|
|
66
|
+
: "your next"
|
|
67
|
+
} Solidity contract be using the Wit/Oracle for?`,
|
|
68
|
+
choices: [
|
|
69
|
+
"Randomness => unmalleable source of entropy.",
|
|
70
|
+
"Price feeds => based on multiple, reliable and public data sources.",
|
|
71
|
+
"Public data => retrieved from a single or multiple providers on the Internet.",
|
|
72
|
+
],
|
|
73
|
+
},
|
|
74
|
+
])),
|
|
75
|
+
}
|
|
76
|
+
const appKind = answers.usage.split(" ")[0]
|
|
77
|
+
switch (appKind) {
|
|
78
|
+
case "Randomness": {
|
|
79
|
+
answers = {
|
|
80
|
+
...(await inquirer.prompt({
|
|
81
|
+
type: "list",
|
|
82
|
+
name: "randomness",
|
|
83
|
+
message:
|
|
84
|
+
"Would you rather rely on the WitRandomness appliance or handle resolution of randomness requests at a lower level?",
|
|
85
|
+
choices: [
|
|
86
|
+
"Yes => use the WitRandomness appliance (randomize results need to be polled).",
|
|
87
|
+
"No => I know how to handle randomness request callbacks, attend eventual faulty requests and protect against front-run attacks.",
|
|
88
|
+
],
|
|
89
|
+
})),
|
|
90
|
+
...answers,
|
|
91
|
+
}
|
|
92
|
+
break
|
|
93
|
+
}
|
|
94
|
+
case "Public": {
|
|
95
|
+
answers = {
|
|
96
|
+
...(await inquirer.prompt({
|
|
97
|
+
type: "list",
|
|
98
|
+
name: "dynamic",
|
|
99
|
+
message:
|
|
100
|
+
"Will the underlying data sources or parameters vary in time",
|
|
101
|
+
choices: [
|
|
102
|
+
"Yes => either the data sources, or some request parameters, will vary in time.",
|
|
103
|
+
"No => the data sources and parameters will remain constant.",
|
|
104
|
+
],
|
|
105
|
+
})),
|
|
106
|
+
...answers,
|
|
107
|
+
}
|
|
108
|
+
if (answers?.dynamic.split(" ")[0] === "Yes") {
|
|
109
|
+
answers = {
|
|
110
|
+
...(await inquirer.prompt({
|
|
111
|
+
type: "list",
|
|
112
|
+
name: "parameterized",
|
|
113
|
+
message:
|
|
114
|
+
"Will your contract have to deal with data request parameters?",
|
|
115
|
+
choices: [
|
|
116
|
+
"Yes => my contract will have to generate actual parameter values onchain.",
|
|
117
|
+
"No => Witnet-compliant data request bytecode will be provided by some Externally Owned Account.",
|
|
118
|
+
],
|
|
119
|
+
})),
|
|
120
|
+
...answers,
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
if (
|
|
124
|
+
answers?.dynamic.split(" ")[0] === "No" ||
|
|
125
|
+
answers?.parameterized.split(" ")[0] === "Yes"
|
|
126
|
+
) {
|
|
127
|
+
answers = {
|
|
128
|
+
...(await inquirer.prompt({
|
|
129
|
+
type: "list",
|
|
130
|
+
name: "callbacks",
|
|
131
|
+
message:
|
|
132
|
+
"How would you like your contract to fetch data provided from the Wit/Oracle?",
|
|
133
|
+
choices: [
|
|
134
|
+
"Asynchronously => my contract will eventually read the result from the WitOracle contract.",
|
|
135
|
+
"Synchronously => my contract is to be called as soon as data is reported from the Wit/Oracle.",
|
|
136
|
+
],
|
|
137
|
+
})),
|
|
138
|
+
...answers,
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
break
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// console.info()
|
|
145
|
+
if (
|
|
146
|
+
answers?.randomness?.split(" ")[0] === "No" ||
|
|
147
|
+
answers?.callbacks?.split(" ")[0] === "Synchronously" ||
|
|
148
|
+
answers?.parameterized?.split(" ")[0] === "No"
|
|
149
|
+
) {
|
|
150
|
+
let callbackGasLimit
|
|
151
|
+
do {
|
|
152
|
+
callbackGasLimit = parseInt(
|
|
153
|
+
(
|
|
154
|
+
await inquirer.prompt({
|
|
155
|
+
type: "number",
|
|
156
|
+
name: "callbackGasLimit",
|
|
157
|
+
message:
|
|
158
|
+
"Please, specify the maximum gas that you expect your Witnet-callback methods to consume:",
|
|
159
|
+
default: 250000,
|
|
160
|
+
})
|
|
161
|
+
).callbackGasLimit,
|
|
162
|
+
10,
|
|
163
|
+
)
|
|
164
|
+
} while (!callbackGasLimit)
|
|
165
|
+
answers = { callbackGasLimit, ...answers }
|
|
166
|
+
}
|
|
167
|
+
let importWitnetMocks = ""
|
|
168
|
+
if (
|
|
169
|
+
appKind === "Randomness" ||
|
|
170
|
+
appKind === "Price" ||
|
|
171
|
+
answers?.parameterized?.split(" ")[0] === "No"
|
|
172
|
+
) {
|
|
173
|
+
// answers = {
|
|
174
|
+
// ...await inquirer.prompt({
|
|
175
|
+
// type: "confirm",
|
|
176
|
+
// name: "includeMocks",
|
|
177
|
+
// message: "Do you intend to include your new contract within unitary Solidity tests?",
|
|
178
|
+
// default: false,
|
|
179
|
+
// }),
|
|
180
|
+
// ...answers,
|
|
181
|
+
// }
|
|
182
|
+
answers.includeMocks = false
|
|
183
|
+
if (!answers.includeMocks) {
|
|
184
|
+
const artifact =
|
|
185
|
+
appKind === "Price"
|
|
186
|
+
? "apps.WitPriceFeeds"
|
|
187
|
+
: answers?.randomness?.split(" ")[0] === "Yes"
|
|
188
|
+
? "apps.WitRandomnessV2"
|
|
189
|
+
: "core.WitOracle"
|
|
190
|
+
const findings = []
|
|
191
|
+
if (!network) {
|
|
192
|
+
const choices = supportedEcosystems().map((e) => e.toUpperCase())
|
|
193
|
+
answers = {
|
|
194
|
+
...(await inquirer.prompt({
|
|
195
|
+
type: "checkbox",
|
|
196
|
+
name: "ecosystems",
|
|
197
|
+
message:
|
|
198
|
+
"Please, select the ecosystem(s) where you intend to deploy this new contract:",
|
|
199
|
+
choices,
|
|
200
|
+
pageSize: 32,
|
|
201
|
+
loop: true,
|
|
202
|
+
validate: (ans) => {
|
|
203
|
+
return ans.length > 0
|
|
204
|
+
},
|
|
205
|
+
})),
|
|
206
|
+
...answers,
|
|
207
|
+
}
|
|
208
|
+
answers?.ecosystems.forEach((ecosystem) => {
|
|
209
|
+
Object.keys(supportedNetworks(ecosystem)).forEach((network) => {
|
|
210
|
+
const addrs = helpers.flattenObject(
|
|
211
|
+
helpers.getNetworkAddresses(network),
|
|
212
|
+
)
|
|
213
|
+
const artifactAddr = addrs[artifact]
|
|
214
|
+
if (artifactAddr && !findings.includes(artifactAddr)) {
|
|
215
|
+
findings.push(artifactAddr)
|
|
216
|
+
}
|
|
217
|
+
})
|
|
218
|
+
})
|
|
219
|
+
} else {
|
|
220
|
+
const addrs = helpers.flattenObject(
|
|
221
|
+
helpers.getNetworkAddresses(network),
|
|
222
|
+
)
|
|
223
|
+
if (addrs[artifact]) {
|
|
224
|
+
findings.push(addrs[artifact])
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
if (findings.length === 1) {
|
|
228
|
+
answers = {
|
|
229
|
+
...answers,
|
|
230
|
+
witnetAddress: findings[0],
|
|
231
|
+
}
|
|
232
|
+
} else if (findings.length === 0) {
|
|
233
|
+
throw Error(
|
|
234
|
+
`Sorry, required ${artifact} contract is not available on selected ecosystems: ${answers?.ecosystems}`,
|
|
235
|
+
)
|
|
236
|
+
}
|
|
237
|
+
} else {
|
|
238
|
+
importWitnetMocks =
|
|
239
|
+
'\nimport "@witnet/solidity/contracts/mocks/WitMockedOracle.sol";'
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
let baseFeeOverhead = 5 // 5%
|
|
244
|
+
answers = {
|
|
245
|
+
...(await inquirer.prompt([
|
|
246
|
+
{
|
|
247
|
+
type: "rawlist",
|
|
248
|
+
name: "overhead",
|
|
249
|
+
message:
|
|
250
|
+
"How much extra fee would you pay as to to prevent EVM gas price variations affecting queries resolution time?",
|
|
251
|
+
choices: [
|
|
252
|
+
"Average (+15%)",
|
|
253
|
+
"Generous (+30%)",
|
|
254
|
+
"Precautious (+50%)",
|
|
255
|
+
"Stingy (+5%)",
|
|
256
|
+
],
|
|
257
|
+
},
|
|
258
|
+
])),
|
|
259
|
+
...answers,
|
|
260
|
+
}
|
|
261
|
+
switch (answers.overhead.split(" ")[0].toLowerCase()) {
|
|
262
|
+
case "average":
|
|
263
|
+
baseFeeOverhead = 15
|
|
264
|
+
break
|
|
265
|
+
case "generous":
|
|
266
|
+
baseFeeOverhead = 30
|
|
267
|
+
break
|
|
268
|
+
case "precautious":
|
|
269
|
+
baseFeeOverhead = 50
|
|
270
|
+
break
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
let constructorParams = ""
|
|
274
|
+
let witnetAddress = ""
|
|
275
|
+
let templateFile = `${MODULE_WITNET_PATH}/contracts/`
|
|
276
|
+
switch (appKind) {
|
|
277
|
+
case "Randomness": {
|
|
278
|
+
if (answers?.randomness?.split(" ")[0] === "Yes") {
|
|
279
|
+
if (!answers?.witnetAddress) {
|
|
280
|
+
constructorParams = "WitRandomness _witnetRandomness"
|
|
281
|
+
witnetAddress = "_witnetRandomness"
|
|
282
|
+
} else {
|
|
283
|
+
witnetAddress = `WitRandomness(${answers.witnetAddress})`
|
|
284
|
+
}
|
|
285
|
+
templateFile += "_UsingRandomness.tsol"
|
|
286
|
+
} else {
|
|
287
|
+
if (!answers?.witnetAddress) {
|
|
288
|
+
constructorParams = "WitOracle _witOracle"
|
|
289
|
+
witnetAddress = "_witOracle"
|
|
290
|
+
} else {
|
|
291
|
+
witnetAddress = `WitOracle(${answers.witnetAddress})`
|
|
292
|
+
}
|
|
293
|
+
templateFile += "_RandomnessRequestConsumer.tsol"
|
|
294
|
+
}
|
|
295
|
+
break
|
|
296
|
+
}
|
|
297
|
+
case "Price": {
|
|
298
|
+
if (!answers?.witnetAddress) {
|
|
299
|
+
constructorParams = "WitPriceFeeds _witnetPriceFeeds"
|
|
300
|
+
witnetAddress = "_witnetPriceFeeds"
|
|
301
|
+
} else {
|
|
302
|
+
witnetAddress = `WitPriceFeeds(${answers.witnetAddress})`
|
|
303
|
+
}
|
|
304
|
+
templateFile += "_UsingPriceFeeds.tsol"
|
|
305
|
+
break
|
|
306
|
+
}
|
|
307
|
+
case "Public": {
|
|
308
|
+
if (answers?.dynamic.split(" ")[0] === "Yes") {
|
|
309
|
+
if (answers.parameterized.split(" ")[0] === "Yes") {
|
|
310
|
+
constructorParams =
|
|
311
|
+
"WitOracleRadonRequestTemplate _witOracleRequestTemplate"
|
|
312
|
+
witnetAddress = "_witOracleRequestTemplate"
|
|
313
|
+
templateFile +=
|
|
314
|
+
answers?.callbacks.split(" ")[0] === "Synchronously"
|
|
315
|
+
? "_RequestTemplateConsumer.tsol"
|
|
316
|
+
: "_UsingRequestTemplate.tsol"
|
|
317
|
+
} else {
|
|
318
|
+
if (!answers?.witnetAddress) {
|
|
319
|
+
constructorParams = "WitOracle _witOracle"
|
|
320
|
+
witnetAddress = "_witOracle"
|
|
321
|
+
} else {
|
|
322
|
+
witnetAddress = `WitOracle(${answers.witnetAddress})`
|
|
323
|
+
}
|
|
324
|
+
templateFile += "_Consumer.tsol"
|
|
325
|
+
}
|
|
326
|
+
} else {
|
|
327
|
+
constructorParams = "WitOracleRequest _witOracleRequest"
|
|
328
|
+
witnetAddress = "_witOracleRequest"
|
|
329
|
+
templateFile +=
|
|
330
|
+
answers?.callbacks.split(" ")[0] === "Synchronously"
|
|
331
|
+
? "_RequestConsumer.tsol"
|
|
332
|
+
: "_UsingRequest.tsol"
|
|
333
|
+
}
|
|
334
|
+
break
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
const solidity = fs
|
|
339
|
+
.readFileSync(templateFile, "utf-8")
|
|
340
|
+
.replaceAll("$_importWitnetMocks", importWitnetMocks)
|
|
341
|
+
.replaceAll("$_contractName", contractName)
|
|
342
|
+
.replaceAll("$_constructorParams", constructorParams)
|
|
343
|
+
.replaceAll("$_witnetAddress", witnetAddress)
|
|
344
|
+
.replaceAll("$_baseFeeOverhead", baseFeeOverhead)
|
|
345
|
+
.replaceAll("$_callbackGasLimit", answers.callbackGasLimit)
|
|
346
|
+
|
|
347
|
+
const solidityPathFileName = `${contractPath}${contractName}.sol`
|
|
348
|
+
fs.writeFileSync(solidityPathFileName, solidity)
|
|
349
|
+
console.info()
|
|
350
|
+
console.info("Awesome! Your new contract was just created here:")
|
|
351
|
+
console.info(`\x1b[35m${contractPath}\x1b[1;35m${contractName}.sol\x1b[0m`)
|
|
352
|
+
}
|