The WSB movement for financial democracy started on Reddit and became a global phenomenon. This is why (we, the apes) created a Decentralized Application to give our community a tool to voice their opinions as retail investors.
Unable to verify that contract auditor is trusted: Certik, Quantstamp, Hacken, Solidity, Paladinsec, Openzeppelin, Verichains
AdminUpgradeabilityProxy.constructor(address,address,bytes)._admin (#430) shadows:
- BaseAdminUpgradeabilityProxy._admin() (#382-387) (function)
Rename the local variables that shadow another component.
Additional information: link
BaseAdminUpgradeabilityProxy.upgradeToAndCall(address,bytes).newImplementation (#373) lacks a zero-check on :
- (success) = newImplementation.delegatecall(data) (#375)
UpgradeabilityProxy.constructor(address,bytes)._logic (#275) lacks a zero-check on :
- (success) = _logic.delegatecall(_data) (#279)
Check that the address is not zero.
Additional information: link
Modifier BaseAdminUpgradeabilityProxy.ifAdmin() (#322-328) does not always execute _; or revert
All the paths in a modifier must execute _ or revert.
Additional information: link
BaseAdminUpgradeabilityProxy._admin() (#382-387) uses assembly
- INLINE ASM (#384-386)
BaseAdminUpgradeabilityProxy._setAdmin(address) (#393-399) uses assembly
- INLINE ASM (#396-398)
Proxy._delegate(address) (#157-176) uses assembly
- INLINE ASM (#158-175)
OpenZeppelinUpgradesAddress.isContract(address) (#23-34) uses assembly
- INLINE ASM (#32)
BaseUpgradeabilityProxy._implementation() (#225-230) uses assembly
- INLINE ASM (#227-229)
BaseUpgradeabilityProxy._setImplementation(address) (#245-253) uses assembly
- INLINE ASM (#250-252)
Do not use evm assembly.
Additional information: link
Pragma version^0.5.0 (#3) allows old versions
Deploy with any of the following Solidity versions: 0.5.16 - 0.5.17, 0.6.11 - 0.6.12, 0.7.5 - 0.7.6 Use a simple pragma version that allows any of these versions. Consider using the latest version of Solidity for testing.
Additional information: link
Low level call in UpgradeabilityProxy.constructor(address,bytes) (#275-282):
- (success) = _logic.delegatecall(_data) (#279)
Low level call in ProxyAdmin.getProxyImplementation(AdminUpgradeabilityProxy) (#453-459):
- (success,returndata) = address(proxy).staticcall(0x5c60da1b) (#456)
Low level call in ProxyAdmin.getProxyAdmin(AdminUpgradeabilityProxy) (#465-471):
- (success,returndata) = address(proxy).staticcall(0xf851a440) (#468)
Low level call in BaseAdminUpgradeabilityProxy.upgradeToAndCall(address,bytes) (#373-377):
- (success) = newImplementation.delegatecall(data) (#375)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
getProxyAdmin(AdminUpgradeabilityProxy) should be declared external:
- ProxyAdmin.getProxyAdmin(AdminUpgradeabilityProxy) (#465-471)
upgrade(AdminUpgradeabilityProxy,address) should be declared external:
- ProxyAdmin.upgrade(AdminUpgradeabilityProxy,address) (#487-489)
upgradeAndCall(AdminUpgradeabilityProxy,address,bytes) should be declared external:
- ProxyAdmin.upgradeAndCall(AdminUpgradeabilityProxy,address,bytes) (#500-502)
transferOwnership(address) should be declared external:
- OpenZeppelinUpgradesOwnable.transferOwnership(address) (#106-108)
getProxyImplementation(AdminUpgradeabilityProxy) should be declared external:
- ProxyAdmin.getProxyImplementation(AdminUpgradeabilityProxy) (#453-459)
renounceOwnership() should be declared external:
- OpenZeppelinUpgradesOwnable.renounceOwnership() (#97-100)
changeProxyAdmin(AdminUpgradeabilityProxy,address) should be declared external:
- ProxyAdmin.changeProxyAdmin(AdminUpgradeabilityProxy,address) (#478-480)
owner() should be declared external:
- OpenZeppelinUpgradesOwnable.owner() (#72-74)
Use the external attribute for functions never called from the contract.
Additional information: link
Twitter account link seems to be invalid