Dividend Bearing Token (DIV)
DIV is a Dividend Bearing ERC20 Token. What this means is that DIV can receive funds in ETH and token holders can collect dividends based on the percentage of DIV tokens they hold. For example, DIV tokens could represent an apartment, where rent earned from that apartment is paid in ETH to the DIV contract. If I own 10% of all of the apartment's DIV tokens, I can collect 10% of the rent money that was paid to the contract. Thanks for trying it out!!
Install Truffle globally.
npm install -g truffle
Install Ganache-CLI globally.
npm install -g ganache-cli
Compile and migrate the smart contracts.
Run your private blockchain.
Run the webpack server for front-end hot reloading (outside the development console). Smart contract changes must be manually recompiled and migrated. You can now view the web app at http://localhost:3000
npm run start
To run tests:
How do I reset the demo?
To reset the DIV token supply, the ETH in the DIV contract, and the amount of DIV you hold, run:
truffle migrate --reset npm run start
What were your design pattern decisions?
Here is an explanation of the design decisions made.
What attacks could be possible on this contract?
Here is an overview of the common attacks that were identified and handled.
Explanation of Tests
The main contract that I implemented can be found at
and my tests for this contract can be found at
The "total supply" and "balanceOf" tests are simply to ensure that the "beforeEach" function worked successfully and that there are 100 DIV tokens, with half going to "owner" and half going to "recipient".
The "transfer" tests token transfers and ensures that both accounts end up with the correct amount of DIV.
The "accepting payments" tests make sure the contract can accept payments in ETH, but reject payments of 0 wei.
The "distribute dividends" ensures that users receive the correct amount of ETH when they claim their dividends (e.g. if they have 10% of total tokens, they receive 10% of the ETH in the contract), and that dividends are distributed for both sender and receiver before any "transfer" or "transferFrom". This is to prevent an attack where someone could try to collect their dividends and then send their DIV tokens to another account who could then collect extra dividends.