prevent cancelPledge transfer to 0 note
This commit is contained in:
parent
66388c4e9e
commit
420d07d161
|
@ -1,6 +1,6 @@
|
|||
/* 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._solcVersion = "0.4.15+commit.bbb8e64f.Emscripten.clang"
|
||||
exports._solcVersion = "0.4.18+commit.9cf6e910.Emscripten.clang"
|
||||
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,6 +646,7 @@ function donate(uint64 idGiver, uint64 idReceiver) payable {
|
|||
idPledge = normalizePledge(idPledge);
|
||||
|
||||
Pledge storage n = findPledge(idPledge);
|
||||
require(n.oldPledge != 0);
|
||||
|
||||
PledgeAdmin storage m = findAdmin(n.owner);
|
||||
checkAdminOwner(m);
|
||||
|
|
|
@ -646,6 +646,7 @@ function donate(uint64 idGiver, uint64 idReceiver) payable {
|
|||
idPledge = normalizePledge(idPledge);
|
||||
|
||||
Pledge storage n = findPledge(idPledge);
|
||||
require(n.oldPledge != 0);
|
||||
|
||||
PledgeAdmin storage m = findAdmin(n.owner);
|
||||
checkAdminOwner(m);
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* 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.OwnedByteCode = "0x6060604052341561000f57600080fd5b5b60008054600160a060020a03191633600160a060020a03161790555b5b6101d18061003c6000396000f300606060405263ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166379ba5097811461005e5780638da5cb5b14610073578063a6f9dae1146100a2578063d4ee1d90146100c3575b600080fd5b341561006957600080fd5b6100716100f2565b005b341561007e57600080fd5b61008661013f565b604051600160a060020a03909116815260200160405180910390f35b34156100ad57600080fd5b610071600160a060020a036004351661014e565b005b34156100ce57600080fd5b610086610196565b604051600160a060020a03909116815260200160405180910390f35b60015433600160a060020a0390811691161461010d57600080fd5b6001546000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a039092169190911790555b565b600054600160a060020a031681565b60005433600160a060020a0390811691161461016957600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0383161790555b5b50565b600154600160a060020a0316815600a165627a7a72305820e68440031004354b3db9d740fb2b8896f5bedd56653beb65edd62e94e414a7ad0029"
|
||||
exports._solcVersion = "0.4.15+commit.bbb8e64f.Emscripten.clang"
|
||||
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 = "0x6060604052341561000f57600080fd5b60008054600160a060020a033316600160a060020a03199091161790556101bc8061003b6000396000f3006060604052600436106100615763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166379ba509781146100665780638da5cb5b1461007b578063a6f9dae1146100aa578063d4ee1d90146100c9575b600080fd5b341561007157600080fd5b6100796100dc565b005b341561008657600080fd5b61008e610128565b604051600160a060020a03909116815260200160405180910390f35b34156100b557600080fd5b610079600160a060020a0360043516610137565b34156100d457600080fd5b61008e610181565b60015433600160a060020a039081169116146100f757600080fd5b6001546000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a03909216919091179055565b600054600160a060020a031681565b60005433600160a060020a0390811691161461015257600080fd5b6001805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b600154600160a060020a0316815600a165627a7a7230582093915e2078cf23efe265b372c026c6cbc79ddd13f04e6e31d52efe53c70380790029"
|
||||
exports._solcVersion = "0.4.18+commit.9cf6e910.Emscripten.clang"
|
||||
exports._sha256 = "0xf61824cbb7f4765beceba9899e284825b9c60abba4179558d6b40e6976076b6b"
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -232,6 +232,7 @@ function donate(uint64 idGiver, uint64 idReceiver) payable {
|
|||
idPledge = normalizePledge(idPledge);
|
||||
|
||||
Pledge storage n = findPledge(idPledge);
|
||||
require(n.oldPledge != 0);
|
||||
|
||||
PledgeAdmin storage m = findAdmin(n.owner);
|
||||
checkAdminOwner(m);
|
||||
|
|
|
@ -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);
|
||||
assert.equal(origPledge.amount, '0');
|
||||
|
||||
// await printState(liquidPledgingState);
|
||||
// veto the delegation
|
||||
await liquidPledging.transfer(2, 3, '1000', 1, { from: giver1, gas: 400000 });
|
||||
|
||||
const currentPledge = await liquidPledging.getPledge(2);
|
||||
|
||||
// await printState(liquidPledgingState);
|
||||
|
||||
assert.equal(currentPledge.amount, '1000');
|
||||
assert.equal(currentPledge.nDelegates, 1);
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue