mirror of
https://github.com/status-im/discover-dapps.git
synced 2025-02-18 05:16:20 +00:00
Adds protection against DApps with same id
This commit is contained in:
parent
076a6c77a9
commit
9cd3abd939
@ -41,6 +41,7 @@ contract DAppStore is ApproveAndCallFallBack, BancorFormula {
|
|||||||
|
|
||||||
Data[] public dapps;
|
Data[] public dapps;
|
||||||
mapping(bytes32 => uint) public id2index;
|
mapping(bytes32 => uint) public id2index;
|
||||||
|
mapping(bytes32 => bool) existingIDs;
|
||||||
|
|
||||||
event DAppCreated(bytes32 indexed id, uint votesMint, uint amount);
|
event DAppCreated(bytes32 indexed id, uint votesMint, uint amount);
|
||||||
event Upvote(bytes32 indexed id, uint newEffectiveBalance);
|
event Upvote(bytes32 indexed id, uint newEffectiveBalance);
|
||||||
@ -231,6 +232,8 @@ contract DAppStore is ApproveAndCallFallBack, BancorFormula {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function _createDApp(address _from, bytes32 _id, uint _amount) internal {
|
function _createDApp(address _from, bytes32 _id, uint _amount) internal {
|
||||||
|
require(!existingIDs[_id], "You must submit a unique ID");
|
||||||
|
|
||||||
require(_amount > 0, "You must spend some SNT to submit a ranking in order to avoid spam");
|
require(_amount > 0, "You must spend some SNT to submit a ranking in order to avoid spam");
|
||||||
require (_amount < safeMax, "You cannot stake more SNT than the ceiling dictates");
|
require (_amount < safeMax, "You cannot stake more SNT than the ceiling dictates");
|
||||||
|
|
||||||
@ -260,6 +263,7 @@ contract DAppStore is ApproveAndCallFallBack, BancorFormula {
|
|||||||
d.effectiveBalance = _amount;
|
d.effectiveBalance = _amount;
|
||||||
|
|
||||||
id2index[_id] = dappIdx;
|
id2index[_id] = dappIdx;
|
||||||
|
existingIDs[_id] = true;
|
||||||
|
|
||||||
require(SNT.allowance(_from, address(this)) >= _amount, "Not enough SNT allowance");
|
require(SNT.allowance(_from, address(this)) >= _amount, "Not enough SNT allowance");
|
||||||
require(SNT.transferFrom(_from, address(this), _amount), "Transfer failed");
|
require(SNT.transferFrom(_from, address(this), _amount), "Transfer failed");
|
||||||
|
@ -87,6 +87,21 @@ contract("DAppStore", function () {
|
|||||||
assert.strictEqual(amount, parseInt(receipt.effectiveBalance, 10));
|
assert.strictEqual(amount, parseInt(receipt.effectiveBalance, 10));
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it("should not create a new DApp with the same ID", async function () {
|
||||||
|
let id = "0x7465737400000000000000000000000000000000000000000000000000000000";
|
||||||
|
let amount = 1000;
|
||||||
|
|
||||||
|
await SNT.methods.generateTokens(accounts[0], amount).send();
|
||||||
|
const encodedCall = DAppStore.methods.createDApp(id,amount).encodeABI();
|
||||||
|
|
||||||
|
try {
|
||||||
|
await SNT.methods.approveAndCall(DAppStore.options.address, amount, encodedCall).send({from: accounts[0]});
|
||||||
|
assert.fail('should have reverted before');
|
||||||
|
} catch (error) {
|
||||||
|
TestUtils.assertJump(error);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
it("should not create a new DApp when exceeding the ceiling or staking nothing", async function () {
|
it("should not create a new DApp when exceeding the ceiling or staking nothing", async function () {
|
||||||
let id = "0x7465737400000000000000000000000000000000000000000000000000000000";
|
let id = "0x7465737400000000000000000000000000000000000000000000000000000000";
|
||||||
let initial = await DAppStore.methods.max().call();
|
let initial = await DAppStore.methods.max().call();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user