@ -8,7 +8,6 @@ export default class assignAndCompare {
description = 'The result of an operation was not used.'
category = category.MISC
algorithm = algorithm.EXACT
Module = this
visit (node) {
if (isSubScopeWithTopLevelUnAssignedBinOp(node)) getUnAssignedTopLevelBinOps(node).forEach((n) => this.warningNodes.push(n))
@ -8,7 +8,6 @@ export default class blockBlockhash {
desc = 'Semantics maybe unclear'
categories = category.SECURITY
if (isBlockBlockHashAccess(node)) this.warningNodes.push(node)
@ -9,7 +9,6 @@ export default class blockTimestamp {
if (isNowAccess(node)) this.warningNowNodes.push(node)
@ -11,7 +11,6 @@ export default class checksEffectsInteraction {
desc = 'Avoid potential reentrancy bugs'
algorithm = algorithm.HEURISTIC
abstractAst = new AbstractAst()
@ -12,7 +12,6 @@ export default class constantFunctions {
desc = 'Check for potentially constant functions'
categories = category.MISC
@ -8,7 +8,6 @@ export default class deleteDynamicArrays {
desc = 'Use require and appropriately'
categories = category.GAS
if (isDeleteOfDynamicArray(node)) this.rel.push(node)
@ -6,7 +6,6 @@ export default class deleteFromDynamicArray {
name = 'Delete from dynamic Array: '
desc = 'Using delete on an array leaves a gap'
if (isDeleteFromDynamicArray(node) && !isMappingIndexAccess(node.children[0])) this.relevantNodes.push(node)
@ -8,7 +8,6 @@ export default class erc20Decimals {
desc = 'Decimal should be uint8'
categories = category.ERC
visit = this.abstractAst.build_visit((node) => false)
@ -6,7 +6,6 @@ export default class etherTransferInLoop {
name = 'Ether transfer in a loop: '
desc = 'Avoid transferring Ether to multiple addresses in a loop'
category = category.GAS
if (isLoop(node)) {
@ -6,7 +6,6 @@ export default class forLoopIteratesOverDynamicArray {
name = 'For loop iterates over dynamic array: '
desc = 'The number of \'for\' loop iterations depends on dynamic array\'s size'
if (isForLoop(node)) {
@ -6,7 +6,6 @@ export default class gasCosts {
desc = 'Warn if the gas requirements of functions are too high.'
/**
@ -8,7 +8,6 @@ export default class guardConditions {
if (isRequireCall(node) || isAssertCall(node)) this.guards.push(node)
@ -8,7 +8,6 @@ export default class inlineAssembly {
desc = 'Use of Inline Assembly'
if (isInlineAssembly(node)) this.inlineAssNodes.push(node)
@ -8,7 +8,6 @@ export default class intDivitionTruncate {
desc = 'Division on int/uint values truncates the result.'
if (isIntDivision(node)) this.warningNodes.push(node)
@ -9,7 +9,6 @@ export default class lowLevelCalls {
if (isLowLevelCallInst(node)) {
@ -8,7 +8,6 @@ export default class noReturn {
desc = 'Function with return type is not returning'
@ -8,7 +8,6 @@ export default class selfdestruct {
desc = 'Be aware of caller contracts.'
@ -11,7 +11,6 @@ export default class similarVariableNames {
visit = this.abstractAst.build_visit(
(node) => false
@ -5,7 +5,6 @@ export default class stringBytesLength {
name = 'String Length: '
desc = 'Bytes length != String length'
stringToBytesConversions: any[] = []
bytesLengthChecks: any[] = []
@ -8,7 +8,6 @@ export default class thisLocal {
desc = 'Invocation of local functions via this'
if (isThisLocalCall(node)) this.warningNodes.push(node)
@ -7,7 +7,6 @@ export default class txOrigin {
desc = 'Warn if tx.origin is used'
if (node.name === 'MemberAccess' &&