Skip to content

Commit

Permalink
Validate params in interactive mode
Browse files Browse the repository at this point in the history
  • Loading branch information
eternauta1337 committed Mar 15, 2024
1 parent d74dec9 commit a2101ac
Show file tree
Hide file tree
Showing 9 changed files with 43 additions and 9 deletions.
5 changes: 4 additions & 1 deletion packages/ethernaut-common/src/type-address.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,13 @@ module.exports = {
`"${argValue}" is not an address`,
`Invalid ${argName}`,
)

if (typeof describe === 'function') {
throw err
}

return false
}

return true
},
}
4 changes: 4 additions & 0 deletions packages/ethernaut-common/src/type-bytes32.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@ module.exports = {
if (typeof describe === 'function') {
throw err
}

return false
}

return true
},
}
4 changes: 4 additions & 0 deletions packages/ethernaut-common/src/type-ens.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ module.exports = {
if (typeof describe === 'function') {
throw err
}

return false
}

return true
},
}
4 changes: 4 additions & 0 deletions packages/ethernaut-common/src/type-int.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@ module.exports = {
if (typeof describe === 'function') {
throw err
}

return false
}

return true
},
}
4 changes: 4 additions & 0 deletions packages/ethernaut-common/src/type-string.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ module.exports = {
if (typeof describe === 'function') {
throw err
}

return false
}

return true
},
}
7 changes: 4 additions & 3 deletions packages/ethernaut-interact-ui/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,15 @@ extendEnvironment((hre) => {
contract.paramDefinitions.params.prompt = paramsPrompt

const token = hre.scopes.interact.tasks.token
token.paramDefinitions.address.suggest = addressSuggest
token.positionalParamDefinitions.find((p) => p.name === 'address').suggest =
addressSuggest
token.paramDefinitions.fn.prompt = fnERC20Prompt
token.paramDefinitions.params.prompt = paramsERC20Prompt

const logs = hre.scopes.interact.tasks.logs
logs.paramDefinitions.address.suggest = addressSuggest
logs.paramDefinitions.abi.prompt = abiPrompt
logs.paramDefinitions.abi.suggest = abiSuggest
logs.paramDefinitions.address.suggest = addressSuggest
logs.paramDefinitions.event.prompt = eventPrompt
logs.paramDefinitions.params.prompt = paramsLogPrompt
logs.paramDefinitions.event.prompt = eventPrompt
})
7 changes: 6 additions & 1 deletion packages/ethernaut-interact/src/tasks/token.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,12 @@ const interact = require('../internal/interact')

require('../scopes/interact')
.task('token', 'Interacts with any ERC20 token')
.addParam('address', 'The address of the token', undefined, types.string)
.addPositionalParam(
'address',
'The address of the token',
undefined,
types.address,
)
.addParam('fn', 'The function of the token to call', undefined, types.string)
.addOptionalParam(
'value',
Expand Down
15 changes: 12 additions & 3 deletions packages/ethernaut-ui/src/internal/collect-args.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,9 @@ module.exports = async function collectArguments(providedArgs, task, hre) {
)

const collectedArgs = {}
for (let paramDef of paramDefinitions) {
for (let i = 0; i < paramDefinitions.length; i++) {
const paramDef = paramDefinitions[i]

if (paramDef.originallyOptional) continue

const providedArg = providedArgs[paramDef.name]
Expand All @@ -29,7 +31,14 @@ module.exports = async function collectArguments(providedArgs, task, hre) {
argsSoFar,
)
if (collectedArg !== undefined) {
debug.log(`Collected ${paramDef.name}" with "${collectedArg}"`, 'ui')
debug.log(`Collected "${paramDef.name}" with "${collectedArg}"`, 'ui')

const isValid = paramDef.type.validate(paramDef.name, collectedArg)
debug.log(`Validation result for "${paramDef.name}": ${isValid}`, 'ui')
if (!isValid) {
i--
continue
}

collectedArgs[paramDef.name] = collectedArg
}
Expand Down Expand Up @@ -129,5 +138,5 @@ async function rawPrompt(paramDef, suggested) {
if (result === 'false') return false
if (result === 'true') return true

return result
return result === '' ? undefined : result
}
2 changes: 1 addition & 1 deletion packages/ethernaut-ui/src/internal/make-interactive.js
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ function makeInteractive(task) {
return parsedValue
},
validate: (argName, argValue) => {
originalType.validate(argName, argValue)
return originalType.validate(argName, argValue)
},
})
for (let paramDef of paramDefinitions) {
Expand Down

0 comments on commit a2101ac

Please sign in to comment.