Merge pull request #30 from Giveth/cancelPledge
cancel pledge bugs Good catch!
This commit is contained in:
commit
d198ac0d74
|
@ -1,6 +1,6 @@
|
||||||
/* This is an autogenerated file. DO NOT EDIT MANUALLY */
|
/* This is an autogenerated file. DO NOT EDIT MANUALLY */
|
||||||
|
|
||||||
exports.ILiquidPledgingPluginAbi = [{"constant":false,"inputs":[{"name":"pledgeManager","type":"uint64"},{"name":"pledgeFrom","type":"uint64"},{"name":"pledgeTo","type":"uint64"},{"name":"context","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"afterTransfer","outputs":[],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"pledgeManager","type":"uint64"},{"name":"pledgeFrom","type":"uint64"},{"name":"pledgeTo","type":"uint64"},{"name":"context","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"beforeTransfer","outputs":[{"name":"maxAllowed","type":"uint256"}],"payable":false,"type":"function"}]
|
exports.ILiquidPledgingPluginAbi = [{"constant":false,"inputs":[{"name":"pledgeManager","type":"uint64"},{"name":"pledgeFrom","type":"uint64"},{"name":"pledgeTo","type":"uint64"},{"name":"context","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"afterTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"pledgeManager","type":"uint64"},{"name":"pledgeFrom","type":"uint64"},{"name":"pledgeTo","type":"uint64"},{"name":"context","type":"uint64"},{"name":"amount","type":"uint256"}],"name":"beforeTransfer","outputs":[{"name":"maxAllowed","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]
|
||||||
exports.ILiquidPledgingPluginByteCode = "0x"
|
exports.ILiquidPledgingPluginByteCode = "0x"
|
||||||
exports._solcVersion = "0.4.15+commit.bbb8e64f.Emscripten.clang"
|
exports._solcVersion = "0.4.18+commit.9cf6e910.Emscripten.clang"
|
||||||
exports._sha256 = "0xdca1f6e8e45033d2b165904df14f39c39500c42395eabcc79e156346438f3259"
|
exports._sha256 = "0xdca1f6e8e45033d2b165904df14f39c39500c42395eabcc79e156346438f3259"
|
||||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -646,11 +646,13 @@ function donate(uint64 idGiver, uint64 idReceiver) payable {
|
||||||
idPledge = normalizePledge(idPledge);
|
idPledge = normalizePledge(idPledge);
|
||||||
|
|
||||||
Pledge storage n = findPledge(idPledge);
|
Pledge storage n = findPledge(idPledge);
|
||||||
|
require(n.oldPledge != 0);
|
||||||
|
|
||||||
PledgeAdmin storage m = findAdmin(n.owner);
|
PledgeAdmin storage m = findAdmin(n.owner);
|
||||||
checkAdminOwner(m);
|
checkAdminOwner(m);
|
||||||
|
|
||||||
doTransfer(idPledge, n.oldPledge, amount);
|
uint64 oldPledge = getOldestPledgeNotCanceled(n.oldPledge);
|
||||||
|
doTransfer(idPledge, oldPledge, amount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -646,11 +646,13 @@ function donate(uint64 idGiver, uint64 idReceiver) payable {
|
||||||
idPledge = normalizePledge(idPledge);
|
idPledge = normalizePledge(idPledge);
|
||||||
|
|
||||||
Pledge storage n = findPledge(idPledge);
|
Pledge storage n = findPledge(idPledge);
|
||||||
|
require(n.oldPledge != 0);
|
||||||
|
|
||||||
PledgeAdmin storage m = findAdmin(n.owner);
|
PledgeAdmin storage m = findAdmin(n.owner);
|
||||||
checkAdminOwner(m);
|
checkAdminOwner(m);
|
||||||
|
|
||||||
doTransfer(idPledge, n.oldPledge, amount);
|
uint64 oldPledge = getOldestPledgeNotCanceled(n.oldPledge);
|
||||||
|
doTransfer(idPledge, oldPledge, amount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* This is an autogenerated file. DO NOT EDIT MANUALLY */
|
/* This is an autogenerated file. DO NOT EDIT MANUALLY */
|
||||||
|
|
||||||
exports.OwnedAbi = [{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"changeOwner","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"newOwner","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"inputs":[],"payable":false,"type":"constructor"}]
|
exports.OwnedAbi = [{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_newOwner","type":"address"}],"name":"changeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"newOwner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"}]
|
||||||
exports.OwnedByteCode = "0x6060604052341561000f57600080fd5b5b60008054600160a060020a03191633600160a060020a03161790555b5b6101d18061003c6000396000f300606060405263ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166379ba5097811461005e5780638da5cb5b14610073578063a6f9dae1146100a2578063d4ee1d90146100c3575b600080fd5b341561006957600080fd5b6100716100f2565b005b341561007e57600080fd5b61008661013f565b604051600160a060020a03909116815260200160405180910390f35b34156100ad57600080fd5b610071600160a060020a036004351661014e565b005b34156100ce57600080fd5b610086610196565b604051600160a060020a03909116815260200160405180910390f35b60015433600160a060020a0390811691161461010d57600080fd5b6001546000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039092169190911790555b565b600054600160a060020a031681565b60005433600160a060020a0390811691161461016957600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b50565b600154600160a060020a0316815600a165627a7a72305820e68440031004354b3db9d740fb2b8896f5bedd56653beb65edd62e94e414a7ad0029"
|
exports.OwnedByteCode = "0x6060604052341561000f57600080fd5b60008054600160a060020a033316600160a060020a03199091161790556101bc8061003b6000396000f3006060604052600436106100615763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166379ba509781146100665780638da5cb5b1461007b578063a6f9dae1146100aa578063d4ee1d90146100c9575b600080fd5b341561007157600080fd5b6100796100dc565b005b341561008657600080fd5b61008e610128565b604051600160a060020a03909116815260200160405180910390f35b34156100b557600080fd5b610079600160a060020a0360043516610137565b34156100d457600080fd5b61008e610181565b60015433600160a060020a039081169116146100f757600080fd5b6001546000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055565b600054600160a060020a031681565b60005433600160a060020a0390811691161461015257600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600154600160a060020a0316815600a165627a7a7230582093915e2078cf23efe265b372c026c6cbc79ddd13f04e6e31d52efe53c70380790029"
|
||||||
exports._solcVersion = "0.4.15+commit.bbb8e64f.Emscripten.clang"
|
exports._solcVersion = "0.4.18+commit.9cf6e910.Emscripten.clang"
|
||||||
exports._sha256 = "0xf61824cbb7f4765beceba9899e284825b9c60abba4179558d6b40e6976076b6b"
|
exports._sha256 = "0xf61824cbb7f4765beceba9899e284825b9c60abba4179558d6b40e6976076b6b"
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -232,11 +232,13 @@ function donate(uint64 idGiver, uint64 idReceiver) payable {
|
||||||
idPledge = normalizePledge(idPledge);
|
idPledge = normalizePledge(idPledge);
|
||||||
|
|
||||||
Pledge storage n = findPledge(idPledge);
|
Pledge storage n = findPledge(idPledge);
|
||||||
|
require(n.oldPledge != 0);
|
||||||
|
|
||||||
PledgeAdmin storage m = findAdmin(n.owner);
|
PledgeAdmin storage m = findAdmin(n.owner);
|
||||||
checkAdminOwner(m);
|
checkAdminOwner(m);
|
||||||
|
|
||||||
doTransfer(idPledge, n.oldPledge, amount);
|
uint64 oldPledge = getOldestPledgeNotCanceled(n.oldPledge);
|
||||||
|
doTransfer(idPledge, oldPledge, amount);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,89 @@
|
||||||
|
/* eslint-env mocha */
|
||||||
|
/* eslint-disable no-await-in-loop */
|
||||||
|
const TestRPC = require('ethereumjs-testrpc');
|
||||||
|
const Web3 = require('web3');
|
||||||
|
const chai = require('chai');
|
||||||
|
const liquidpledging = require('../index.js');
|
||||||
|
const assertFail = require('./helpers/assertFail');
|
||||||
|
|
||||||
|
const LiquidPledging = liquidpledging.LiquidPledgingMock;
|
||||||
|
const LiquidPledgingState = liquidpledging.LiquidPledgingState;
|
||||||
|
const Vault = liquidpledging.Vault;
|
||||||
|
const assert = chai.assert;
|
||||||
|
|
||||||
|
const printState = async (liquidPledgingState) => {
|
||||||
|
const st = await liquidPledgingState.getState();
|
||||||
|
console.log(JSON.stringify(st, null, 2));
|
||||||
|
};
|
||||||
|
|
||||||
|
describe('LiquidPledging cancelPledge normal scenario', function () {
|
||||||
|
this.timeout(0);
|
||||||
|
|
||||||
|
let testrpc;
|
||||||
|
let web3;
|
||||||
|
let accounts;
|
||||||
|
let liquidPledging;
|
||||||
|
let liquidPledgingState;
|
||||||
|
let vault;
|
||||||
|
let giver1;
|
||||||
|
let adminProject1;
|
||||||
|
let adminProject2;
|
||||||
|
|
||||||
|
before(async () => {
|
||||||
|
testrpc = TestRPC.server({
|
||||||
|
ws: true,
|
||||||
|
gasLimit: 5800000,
|
||||||
|
total_accounts: 10,
|
||||||
|
});
|
||||||
|
|
||||||
|
testrpc.listen(8546, '127.0.0.1');
|
||||||
|
|
||||||
|
web3 = new Web3('ws://localhost:8546');
|
||||||
|
accounts = await web3.eth.getAccounts();
|
||||||
|
giver1 = accounts[ 1 ];
|
||||||
|
adminProject1 = accounts[ 2 ];
|
||||||
|
adminProject2 = accounts[ 3 ];
|
||||||
|
});
|
||||||
|
|
||||||
|
after((done) => {
|
||||||
|
testrpc.close();
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Should deploy LiquidPledging contract', async () => {
|
||||||
|
vault = await Vault.new(web3);
|
||||||
|
liquidPledging = await LiquidPledging.new(web3, vault.$address, { gas: 5800000 });
|
||||||
|
await vault.setLiquidPledging(liquidPledging.$address);
|
||||||
|
liquidPledgingState = new LiquidPledgingState(liquidPledging);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Should add project and donate ', async () => {
|
||||||
|
await liquidPledging.addProject('Project1', 'URLProject1', adminProject1, 0, 0, '0x0', { from: adminProject1 });
|
||||||
|
await liquidPledging.donate(0, 1, { from: giver1, value: '1000', gas: 500000 });
|
||||||
|
|
||||||
|
const nAdmins = await liquidPledging.numberOfPledgeAdmins();
|
||||||
|
assert.equal(nAdmins, 2);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Should only allow pledge owner to cancel pledge', async () => {
|
||||||
|
await assertFail(async () => {
|
||||||
|
await liquidPledging.cancelPledge(2, 1000, { from: giver1, gas: 500000 });
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Should cancel pledge and return to oldPledge', async () => {
|
||||||
|
await liquidPledging.cancelPledge(2, 1000, { from: adminProject1, gas: 500000 });
|
||||||
|
|
||||||
|
const st = await liquidPledgingState.getState();
|
||||||
|
|
||||||
|
assert.equal(st.pledges[1].amount, 1000);
|
||||||
|
assert.equal(st.pledges[2].amount, 0);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Should not allow to cancel pledge if oldPledge === 0', async () => {
|
||||||
|
await assertFail(async () => {
|
||||||
|
await liquidPledging.cancelPledge(1, 1000, { from: giver1, gas: 500000 });
|
||||||
|
});
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
|
@ -89,14 +89,11 @@ describe('LiquidPledging test', () => {
|
||||||
const origPledge = await liquidPledging.getPledge(2);
|
const origPledge = await liquidPledging.getPledge(2);
|
||||||
assert.equal(origPledge.amount, '0');
|
assert.equal(origPledge.amount, '0');
|
||||||
|
|
||||||
// await printState(liquidPledgingState);
|
|
||||||
// veto the delegation
|
// veto the delegation
|
||||||
await liquidPledging.transfer(2, 3, '1000', 1, { from: giver1, gas: 400000 });
|
await liquidPledging.transfer(2, 3, '1000', 1, { from: giver1, gas: 400000 });
|
||||||
|
|
||||||
const currentPledge = await liquidPledging.getPledge(2);
|
const currentPledge = await liquidPledging.getPledge(2);
|
||||||
|
|
||||||
// await printState(liquidPledgingState);
|
|
||||||
|
|
||||||
assert.equal(currentPledge.amount, '1000');
|
assert.equal(currentPledge.amount, '1000');
|
||||||
assert.equal(currentPledge.nDelegates, 1);
|
assert.equal(currentPledge.nDelegates, 1);
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue