Property testing for ERC tokens

If you develop ERC tokens using Open Zeppelin templates and unit tests, we have a lot of extras for you. We start by checking EIP compliance, but we add a custom security test suite for each standard (20, 4626, 721, 1155) so you gain additional confidence in the behavior of these smart contracts.

Reports

ERCx generates structured and detailed reports about its analysis of the token. Token properties are organized in categories, reflecting what they evaluate and their importance. The tool provides you with a comprehensive overview and detailed information of the token evaluated.
Summary of test results (by level):
Pass
Inconclusive
Fail
Optional
ABI (Signature)
27
1
standard
19
security
37
1
Features

Desirable properties

ERCx goes beyond the requirements prescribed in the standards as described in the Ethereum Improvement Proposals. ERCx includes important security properties designed by our security auditors, putting you on top of the standard.
ResultProperty

IDE

ERCx is available as a VSCode plugin, letting you evaluate all properties on your token while you are still developing it. A violated property? Modify your token code and check again if the test passes.
IDE

Open API

ERCx offers a complete open API, letting you interact with our test suites from your favorite programming language or web interface. We also provide endpoints for you to create your lists of tokens and run test suites on the tokens of that list.

Generate ABI

ERCx lets you generate the Application Binary Interface of any contract deployed on mainnet and testnets. The provided JSON ABI lets you automatically interact with the contract.
"root"
:
{5 Items
"address"
:
string
"0xac3E018457B222d93114458476f3E3416Abbe38F"
"proxy"
:
[
]0 Items
"implementation_address"
:
string
"0xac3E018457B222d93114458476f3E3416Abbe38F"
"source"
:
string
"etherscan-Mainnet"
"abi"
:
[42 Items
0
:
{3 Items
"inputs"
:
[
]2 Items
"stateMutability"
:
string
"nonpayable"
"type"
:
string
"constructor"
}
1
:
{3 Items
"inputs"
:
[
]0 Items
"name"
:
string
"SyncError"
"type"
:
string
"error"
}
2
:
{4 Items
"anonymous"
:
bool
false
"inputs"
:
[
]3 Items
"name"
:
string
"Approval"
"type"
:
string
"event"
}
3
:
{4 Items
"anonymous"
:
bool
false
"inputs"
:
[
]4 Items
"name"
:
string
"Deposit"
"type"
:
string
"event"
}
4
:
{4 Items
"anonymous"
:
bool
false
"inputs"
:
[
]2 Items
"name"
:
string
"NewRewardsCycle"
"type"
:
string
"event"
}
5
:
{4 Items
"anonymous"
:
bool
false
"inputs"
:
[
]3 Items
"name"
:
string
"Transfer"
"type"
:
string
"event"
}
6
:
{4 Items
"anonymous"
:
bool
false
"inputs"
:
[
]5 Items
"name"
:
string
"Withdraw"
"type"
:
string
"event"
}
7
:
{5 Items
"inputs"
:
[
]0 Items
"name"
:
string
"DOMAIN_SEPARATOR"
"outputs"
:
[
]1 Items
"stateMutability"
:
string
"view"
"type"
:
string
"function"
}
8
:
{5 Items
"inputs"
:
[
]2 Items
"name"
:
string
"allowance"
"outputs"
:
[
]1 Items
"stateMutability"
:
string
"view"
"type"
:
string
"function"
}
9
:
{5 Items
"inputs"
:
[
]2 Items
"name"
:
string
"approve"
"outputs"
:
[
]1 Items
"stateMutability"
:
string
"nonpayable"
"type"
:
string
"function"
}
10
:
{5 Items
"inputs"
:
[
]0 Items
"name"
:
string
"asset"
"outputs"
:
[
]1 Items
"stateMutability"
:
string
"view"
"type"
:
string
"function"
}
11
:
{5 Items
"inputs"
:
[
]1 Items
"name"
:
string
"balanceOf"
"outputs"
:
[
]1 Items
"stateMutability"
:
string
"view"
"type"
:
string
"function"
}
12
:
{5 Items
"inputs"
:
[
]1 Items
"name"
:
string
"convertToAssets"
"outputs"
:
[
]1 Items
"stateMutability"
:
string
"view"
"type"
:
string
"function"
}
13
:
{5 Items
"inputs"
:
[
]1 Items
"name"
:
string
"convertToShares"
"outputs"
:
[
]1 Items
"stateMutability"
:
string
"view"
"type"
:
string
"function"
}
14
:
{5 Items
"inputs"
:
[
]0 Items
"name"
:
string
"decimals"
"outputs"
:
[
]1 Items
"stateMutability"
:
string
"view"
"type"
:
string
"function"
}
15
:
{5 Items
"inputs"
:
[
]2 Items
"name"
:
string
"deposit"
"outputs"
:
[
]1 Items
"stateMutability"
:
string
"nonpayable"
"type"
:
string
"function"
}
16
:
{5 Items
"inputs"
:
[
]7 Items
"name"
:
string
"depositWithSignature"
"outputs"
:
[
]1 Items
"stateMutability"
:
string
"nonpayable"
"type"
:
string
"function"
}
17
:
{5 Items
"inputs"
:
[
]0 Items
"name"
:
string
"lastRewardAmount"
"outputs"
:
[
]1 Items
"stateMutability"
:
string
"view"
"type"
:
string
"function"
}
18
:
{5 Items
"inputs"
:
[
]0 Items
"name"
:
string
"lastSync"
"outputs"
:
[
]1 Items
"stateMutability"
:
string
"view"
"type"
:
string
"function"
}
19
:
{5 Items
"inputs"
:
[
]1 Items
"name"
:
string
"maxDeposit"
"outputs"
:
[
]1 Items
"stateMutability"
:
string
"view"
"type"
:
string
"function"
}
20
:
{5 Items
"inputs"
:
[
]1 Items
"name"
:
string
"maxMint"
"outputs"
:
[
]1 Items
"stateMutability"
:
string
"view"
"type"
:
string
"function"
}
21
:
{5 Items
"inputs"
:
[
]1 Items
"name"
:
string
"maxRedeem"
"outputs"
:
[
]1 Items
"stateMutability"
:
string
"view"
"type"
:
string
"function"
}
22
:
{5 Items
"inputs"
:
[
]1 Items
"name"
:
string
"maxWithdraw"
"outputs"
:
[
]1 Items
"stateMutability"
:
string
"view"
"type"
:
string
"function"
}
23
:
{5 Items
"inputs"
:
[
]2 Items
"name"
:
string
"mint"
"outputs"
:
[
]1 Items
"stateMutability"
:
string
"nonpayable"
"type"
:
string
"function"
}
24
:
{5 Items
"inputs"
:
[
]0 Items
"name"
:
string
"name"
"outputs"
:
[
]1 Items
"stateMutability"
:
string
"view"
"type"
:
string
"function"
}
25
:
{5 Items
"inputs"
:
[
]1 Items
"name"
:
string
"nonces"
"outputs"
:
[
]1 Items
"stateMutability"
:
string
"view"
"type"
:
string
"function"
}
26
:
{5 Items
"inputs"
:
[
]7 Items
"name"
:
string
"permit"
"outputs"
:
[
]0 Items
"stateMutability"
:
string
"nonpayable"
"type"
:
string
"function"
}
27
:
{5 Items
"inputs"
:
[
]1 Items
"name"
:
string
"previewDeposit"
"outputs"
:
[
]1 Items
"stateMutability"
:
string
"view"
"type"
:
string
"function"
}
28
:
{5 Items
"inputs"
:
[
]1 Items
"name"
:
string
"previewMint"
"outputs"
:
[
]1 Items
"stateMutability"
:
string
"view"
"type"
:
string
"function"
}
29
:
{5 Items
"inputs"
:
[
]1 Items
"name"
:
string
"previewRedeem"
"outputs"
:
[
]1 Items
"stateMutability"
:
string
"view"
"type"
:
string
"function"
}
hidden 12 items…
]
}

Blog posts