diff --git a/contracts/Stakes.sol b/contracts/Stakes.sol index 1613419..0b17b74 100644 --- a/contracts/Stakes.sol +++ b/contracts/Stakes.sol @@ -39,4 +39,8 @@ contract Stakes { require(locks[account] > 0, "Stake already unlocked"); locks[account] -= 1; } + + function _slash(address account, uint percentage) internal { + stakes[account] = stakes[account] * (100 - percentage) / 100; + } } diff --git a/contracts/TestStakes.sol b/contracts/TestStakes.sol index 6041162..19e4abb 100644 --- a/contracts/TestStakes.sol +++ b/contracts/TestStakes.sol @@ -27,4 +27,8 @@ contract TestStakes is Stakes { function unlockStake(address account) public { _unlockStake(account); } + + function slash(address account, uint percentage) public { + _slash(account, percentage); + } } diff --git a/test/Stakes.test.js b/test/Stakes.test.js index 03f7adc..429277b 100644 --- a/test/Stakes.test.js +++ b/test/Stakes.test.js @@ -68,4 +68,11 @@ describe("Stakes", function () { await stakes.unlockStake(host.address) await expect(stakes.withdrawStake()).not.to.be.reverted }) + + it("slashes stake", async function () { + await token.approve(stakes.address, 1000) + await stakes.increaseStake(1000) + await stakes.slash(host.address, 10) + expect(await stakes.stake(host.address)).to.equal(900) + }) })