SwapDEX consists of a leading network called SmartDEX-Network and a research chain called Kusari-Network, forming the initial seed of an open, decentralized, and independent DeFi platform. This platform aims to become the industry-wide standard for decentralized finance.
The SmartDEX-Network is maintained by validators selected through a Nominated Proof-of-Stake (NPoS) consensus design. The validators are responsible for block production and chain finality.
Rewards are given out when validators behave correctly, and any misbehavior is punished via a slashing mechanism.
Furthermore, SwapDEX has a decentralized, community-run governance scheme that can change any SwapDEX design or parameter decision through formal consensus. Governance council members are required to be elected by holders of the relevant coin (SDX for SwapDEX, KSI for Kusari) with proposals requiring majority approval from council members to be implemented.
Unlike other projects, SwapDEX keeps validator selection completely independent from governance and the user’s right to participate in governance is never delegated.
NPoS is a Proof-of-Stake (PoS) variant that substitutes Nakamoto's consensus protocol's highly inefficient Proof-of-Work (PoW) design with a Proof-of-Stake (PoS) architecture.
SwapDEX utilizes NPoS to advance chain security, enable a fair representation and satisfaction of users, and boost efficiency. Networks following a similar path include Polkadot, Kusama, Chainlink, Moonbeam, to name a few.
While similar in spirit, the approaches in these networks vary in design choices, such as the incentive structure, the number of validators elected, and the election rule used to select them.
In the SwapDEX ecosystem, we focus on fully decentralized finance. Therefore, every SDX holder is free to become a validator candidate or a nominator to maintain the blockchain.
Validators participate in the consensus mechanism by producing blocks and validating blocks constructed by other validators. Nominators vote for validator candidates they trust and back them with their coins.
Once per era (a certain period), a committee of validators gets elected according to the current nominator's preference. In SwapDEX, the number of validators elected is in the order of hundreds and potentially thousands.
Both validators and nominators lock their coins as collateral and receive staking rewards on a pro-rata basis, but may also be slashed and lose their collateral in case backed validators show malicious or negligent behavior.
Nominators thus participate indirectly in the consensus protocol with an economic incentive to pay close attention to the evolving set of validator candidates and make sure that only the most capable and trustworthy among them get elected.
Unable to find manual contract audit (e.g. Certik, PeckShield, Solidity...)
ERC20.constructor(string,string).name (#813) shadows:
- ERC20.name() (#822-824) (function)
ERC20PresetMinterPauser.constructor(string,string).symbol (#1228) shadows:
- ERC20.symbol() (#830-832) (function)
ERC20Custom.constructor(string,string,uint8).name (#1289) shadows:
- ERC20.name() (#822-824) (function)
ERC20Custom.constructor(string,string,uint8).symbol (#1289) shadows:
- ERC20.symbol() (#830-832) (function)
ERC20.constructor(string,string).symbol (#813) shadows:
- ERC20.symbol() (#830-832) (function)
ERC20Custom.constructor(string,string,uint8).decimals (#1289) shadows:
- ERC20.decimals() (#847-849) (function)
ERC20PresetMinterPauser.constructor(string,string).name (#1228) shadows:
- ERC20.name() (#822-824) (function)
Rename the local variables that shadow another component.
Additional information: link
Address.isContract(address) (#50-59) uses assembly
- INLINE ASM (#57)
Do not use evm assembly.
Additional information: link
SafeMath.mul(uint256,uint256) (#683-695) is never used and should be removed
AccessControl._setRoleAdmin(bytes32,bytes32) (#516-518) is never used and should be removed
Address.sendValue(address,uint256) (#77-83) is never used and should be removed
EnumerableSet.remove(EnumerableSet.UintSet,uint256) (#300-302) is never used and should be removed
EnumerableSet.contains(EnumerableSet.UintSet,uint256) (#307-309) is never used and should be removed
SafeMath.mod(uint256,uint256,string) (#758-761) is never used and should be removed
SafeMath.div(uint256,uint256,string) (#723-730) is never used and should be removed
Context._msgData() (#22-25) is never used and should be removed
SafeMath.mod(uint256,uint256) (#743-745) is never used and should be removed
SafeMath.div(uint256,uint256) (#708-710) is never used and should be removed
EnumerableSet.length(EnumerableSet.UintSet) (#314-316) is never used and should be removed
EnumerableSet.at(EnumerableSet.UintSet,uint256) (#328-330) is never used and should be removed
Address.isContract(address) (#50-59) is never used and should be removed
EnumerableSet.add(EnumerableSet.UintSet,uint256) (#290-292) is never used and should be removed
Remove unused functions.
Additional information: link
Pragma version^0.6.0 (#1) 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 Address.sendValue(address,uint256) (#77-83):
- (success) = recipient.call{value: amount}() (#81)
Avoid low-level calls. Check the call success. If the call is meant for a contract, check for code existence
Additional information: link
Redundant expression "this (#23)" inContext (#13-26)
Remove redundant statements if they congest code but offer no value.
Additional information: link
transferFrom(address,address,uint256) should be declared external:
- ERC20.transferFrom(address,address,uint256) (#909-913)
burnFrom(address,uint256) should be declared external:
- ERC20Burnable.burnFrom(address,uint256) (#1096-1101)
mint(address,uint256) should be declared external:
- ERC20PresetMinterPauser.mint(address,uint256) (#1244-1247)
decimals() should be declared external:
- ERC20.decimals() (#847-849)
decreaseAllowance(address,uint256) should be declared external:
- ERC20.decreaseAllowance(address,uint256) (#946-949)
symbol() should be declared external:
- ERC20.symbol() (#830-832)
balanceOf(address) should be declared external:
- ERC20.balanceOf(address) (#861-863)
transfer(address,uint256) should be declared external:
- ERC20.transfer(address,uint256) (#873-876)
increaseAllowance(address,uint256) should be declared external:
- ERC20.increaseAllowance(address,uint256) (#927-930)
getRoleMemberCount(bytes32) should be declared external:
- AccessControl.getRoleMemberCount(bytes32) (#412-414)
name() should be declared external:
- ERC20.name() (#822-824)
grantRole(bytes32,address) should be declared external:
- AccessControl.grantRole(bytes32,address) (#452-456)
getRoleMember(bytes32,uint256) should be declared external:
- AccessControl.getRoleMember(bytes32,uint256) (#428-430)
unpause() should be declared external:
- ERC20PresetMinterPauser.unpause() (#1272-1275)
revokeRole(bytes32,address) should be declared external:
- AccessControl.revokeRole(bytes32,address) (#467-471)
totalSupply() should be declared external:
- ERC20.totalSupply() (#854-856)
approve(address,uint256) should be declared external:
- ERC20.approve(address,uint256) (#892-895)
renounceRole(bytes32,address) should be declared external:
- AccessControl.renounceRole(bytes32,address) (#487-491)
burn(uint256) should be declared external:
- ERC20Burnable.burn(uint256) (#1081-1083)
pause() should be declared external:
- ERC20PresetMinterPauser.pause() (#1258-1261)
getRoleAdmin(bytes32) should be declared external:
- AccessControl.getRoleAdmin(bytes32) (#438-440)
Use the external attribute for functions never called from the contract.
Additional information: link
Attempt to swap token was unsuccessful. For some reason it is untradeable. If token is not in presale stage and is not traded outside PancakeSwap, then it's a scam
Additional information: link
Average 30d PancakeSwap liquidity is less than $100. Token is either dead or inactive.
Average 30d PancakeSwap volume is less than $100. Token is either dead or inactive.
Average 30d number of PancakeSwap swaps is less than 1. Token is either dead or inactive.
Average PancakeSwap trading volume, liqudity, number of swaps are extremely low. Token seems to be dead.
Number of Binance Smart Chain (BSC) token holders is low.
BscScan page for the token does not contain additional info: website, socials, description, etc.
Additional information: link
Token was delisted (assigned to inactive / untracked listing) from CoinMarketCap
Additional information: link
Unable to find token contract audit
Unable to find audit link on the website
Token is not listed at Mobula.Finance
Additional information: link
Unable to find token on CoinHunt
Additional information: link
Token is marked as scam (rug pull, honeypot, phishing, etc.)
Additional information: link
Token has no active CoinMarketCap listing / rank
Token has a considerable age, but average PancakeSwap 30d trading volume is low
Token has relatively low CoinGecko rank
Young tokens have high risks of price dump / death