Merge remote-tracking branch 'upstream/main'

This commit is contained in:
Edward Mulraney 2021-07-30 10:32:01 +01:00
commit 5e749a73d2
2 changed files with 35 additions and 9 deletions

View File

@ -2,10 +2,10 @@ pragma solidity >=0.7.0;
pragma experimental ABIEncoderV2;
interface InstaFlashV2Interface {
function initiateFlashLoan(address[] calldata tokens, uint256[] calldata amts, uint route, bytes calldata data) external;
function initiateFlashLoan(address token, uint256 amt, uint route, bytes calldata data) external;
}
interface AccountInterface {
function enable(address) external;
function disable(address) external;
}
}

View File

@ -180,10 +180,20 @@ const parseCode = async (connector) => {
func = []
}
}
funcs = funcs
const allPublicFuncs = funcs
.filter(({ raw }) => {
if ((raw.includes('external') || raw.includes('public')) &&
raw.includes('returns')) {
return raw.includes('external') || raw.includes('public')
})
.map(f => {
const name = f.raw.split('(')[0].split('function')[1].trim()
return {
...f,
name
}
})
funcs = allPublicFuncs
.filter(({ raw }) => {
if (raw.includes('returns')) {
const returns = raw.split('returns')[1].split('(')[1].split(')')[0]
return returns.includes('string') && returns.includes('bytes')
}
@ -193,11 +203,9 @@ const parseCode = async (connector) => {
const args = f.raw.split('(')[1].split(')')[0].split(',')
.map(arg => arg.trim())
.filter(arg => arg !== '')
const name = f.raw.split('(')[0].split('function')[1].trim()
return {
...f,
args,
name
args
}
})
const eventsPath = `${connector.path}/events.sol`
@ -229,7 +237,8 @@ const parseCode = async (connector) => {
eventsFirstLines,
mainEvents,
mainEventsLines,
funcs
funcs,
allPublicFuncs
}
} catch (error) {
return Promise.reject(error)
@ -262,6 +271,21 @@ const checkComments = async (connector) => {
}
}
const checkPublicFuncs = async (connector) => {
try {
const errors = []
for (let i1 = 0; i1 < connector.allPublicFuncs.length; i1++) {
const { raw, firstLine, name } = connector.allPublicFuncs[i1]
if (!raw.includes('payable')) {
errors.push(`public function ${name} is not payable at ${connector.path}/main.sol:${firstLine}`)
}
}
return errors
} catch (error) {
return Promise.reject(error)
}
}
const checkName = async (connector) => {
try {
const strs = connector.code.split('\n')
@ -313,12 +337,14 @@ async function checkMain () {
const commentsErrors = await checkComments(connectors[index])
const nameErrors = await checkName(connectors[index])
const headCommentsErrors = await checkHeadComments(connectors[index])
const publicFuncsErrors = await checkPublicFuncs(connectors[index])
errors.push(...forbiddenErrors)
errors.push(...eventsErrors)
errors.push(...commentsErrors)
errors.push(...nameErrors)
errors.push(...headCommentsErrors)
errors.push(...publicFuncsErrors)
warnings.push(...eventsWarnings)
}
if (errors.length) {