From 50bab884470483d79c3fbac8bc3e6df8c00d04da Mon Sep 17 00:00:00 2001 From: Mark Spanbroek Date: Thu, 4 Nov 2021 13:16:11 +0100 Subject: [PATCH] Allow slashing of stake --- contracts/Stakes.sol | 4 ++++ contracts/TestStakes.sol | 4 ++++ test/Stakes.test.js | 7 +++++++ 3 files changed, 15 insertions(+) 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) + }) })