Skip to content

Commit

Permalink
3. Stake Tokens
Browse files Browse the repository at this point in the history
  • Loading branch information
gwmccubbin committed Aug 18, 2020
1 parent 391f515 commit 721cf72
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 0 deletions.
27 changes: 27 additions & 0 deletions src/contracts/TokenFarm.sol
Expand Up @@ -8,8 +8,35 @@ contract TokenFarm {
DappToken public dappToken;
DaiToken public daiToken;

address[] public stakers;
mapping(address => uint) public stakingBalance;
mapping(address => bool) public hasStaked;
mapping(address => bool) public isStaking;

constructor(DappToken _dappToken, DaiToken _daiToken) public {
dappToken = _dappToken;
daiToken = _daiToken;
}

function stakeTokens(uint _amount) public {

// Trasnfer Mock Dai tokens to this contract for staking
daiToken.transferFrom(msg.sender, address(this), _amount);

// Update staking balance
stakingBalance[msg.sender] = stakingBalance[msg.sender] + _amount;

// Add user to stakers array *only* if they haven't staked already
if(!hasStaked[msg.sender]) {
stakers.push(msg.sender);
}

// Update staking status
isStaking[msg.sender] = true;
hasStaked[msg.sender] = true;
}

// 2. Unstaking Tokens (Withdraw)

// 3. Issuing Tokens
}
38 changes: 38 additions & 0 deletions test/TokenFarm.test.js
Expand Up @@ -52,4 +52,42 @@ contract('TokenFarm', ([owner, investor]) => {
})
})

describe('Farming tokens', async () => {

it('rewards investors for staking mDai tokens', async () => {
let result

// Check investor balance before staking
result = await daiToken.balanceOf(investor)
assert.equal(result.toString(), tokens('100'), 'investor Mock DAI wallet balance correct before staking')

// Stake Mock DAI Tokens
await daiToken.approve(tokenFarm.address, tokens('100'), { from: investor })
await tokenFarm.stakeTokens(tokens('100'), { from: investor })

// Check staking result
result = await daiToken.balanceOf(investor)
assert.equal(result.toString(), tokens('0'), 'investor Mock DAI wallet balance correct after staking')

result = await daiToken.balanceOf(tokenFarm.address)
assert.equal(result.toString(), tokens('100'), 'Token Farm Mock DAI balance correct after staking')

result = await tokenFarm.stakingBalance(investor)
assert.equal(result.toString(), tokens('100'), 'investor staking balance correct after staking')

result = await tokenFarm.isStaking(investor)
assert.equal(result.toString(), 'true', 'investor staking status correct after staking')
})
})











})

0 comments on commit 721cf72

Please sign in to comment.