Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Implement Delegate Resignation (AIP11) #2538

Merged
merged 28 commits into from
May 10, 2019
Merged
Show file tree
Hide file tree
Changes from 19 commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
8d9eacf
feat: complete the delegate resignation transaction type
vasild May 7, 2019
9eb4aba
Merge remote-tracking branch 'ArkEcosystem/core/develop' into feat/de…
vasild May 8, 2019
90e4b83
feat: introduce a wallet flag indicating whether a delegate resigned
vasild May 8, 2019
f334cad
Merge remote-tracking branch 'ArkEcosystem/core/develop' into feat/de…
vasild May 8, 2019
b58f7dc
feat: do not allow voting for a resigned delegate
vasild May 8, 2019
7c9040a
Merge branch 'develop' into feat/delegate-resignation
faustbrian May 9, 2019
bcfce03
fix: revert all unnecessary changes
faustbrian May 9, 2019
758981e
fix(core-transactions): apply resigned flag on boot to delegates
faustbrian May 9, 2019
ef434f9
test: adjust expectations of failing tests
faustbrian May 9, 2019
e19bfd5
test: add handler and functional tests for delegate resignation
faustbrian May 9, 2019
68aef6f
test(crypto): enable AIP11 for delegate resignation signing
faustbrian May 9, 2019
d55644b
test(functional): add delegate resignation forging tests
faustbrian May 9, 2019
119d03e
test(functional): register a delegate before resigning with 2nd signa…
faustbrian May 9, 2019
231169d
chore: remove `delegates` argument from buildDelegateRanking()
vasild May 9, 2019
4df1f59
chore: set delegate resignation version to 2
vasild May 9, 2019
fc0f65c
test: update and enable DelegateResignationTransaction unit tests
vasild May 9, 2019
6c8f73c
test: generate a proper tx to test delegate resignation
vasild May 9, 2019
049e826
Merge remote-tracking branch 'ArkEcosystem/core/develop' into feat/de…
vasild May 9, 2019
fb137fa
test: use unitnet for unit tests
vasild May 9, 2019
4d9ffda
fix: throw if a delegate already resigned
faustbrian May 10, 2019
4200d0d
fix: variable name collision
faustbrian May 10, 2019
9031872
Merge remote-tracking branch 'ArkEcosystem/core/develop' into feat/de…
vasild May 10, 2019
9cf775b
Merge branch 'develop' into feat/delegate-resignation
faustbrian May 10, 2019
0fd5b3c
Merge branch 'develop' into feat/delegate-resignation
faustbrian May 10, 2019
14d57b9
test: adjust tests after 1bea3ff4e
vasild May 10, 2019
17c6487
Merge branch 'develop' into feat/delegate-resignation
faustbrian May 10, 2019
eda7137
Apply suggestions from code review
faustbrian May 10, 2019
805c3d8
Update __tests__/functional/transaction-forging/delegate-resignation.…
faustbrian May 10, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@ const { delegates } = require("../../../../lib/utils/testnet");
module.exports = async options => {
Managers.configManager.setFromPreset("testnet");

let transaction1 = Transactions.BuilderFactory
.transfer()
let transaction1 = Transactions.BuilderFactory.transfer()
.amount(1000 * Math.pow(10, 8))
.recipientId(utils.a.address)
.vendorField("send coins to wallet A")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,7 @@ module.exports = async options => {
Managers.configManager.setFromPreset("testnet");

// A => B
let transaction1 = Transactions.BuilderFactory
.transfer()
let transaction1 = Transactions.BuilderFactory.transfer()
.amount(300 * Math.pow(10, 8))
.recipientId(utils.b.address)
.vendorField("transfer A => B")
Expand All @@ -24,8 +23,7 @@ module.exports = async options => {
.getStruct();

// B => C
let transaction2 = Transactions.BuilderFactory
.transfer()
let transaction2 = Transactions.BuilderFactory.transfer()
.amount(250 * Math.pow(10, 8))
.recipientId(utils.c.address)
.vendorField("transfer B => C")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,7 @@ module.exports = async options => {
Managers.configManager.setFromPreset("testnet");

// B => C
let transaction2 = Transactions.BuilderFactory
.transfer()
let transaction2 = Transactions.BuilderFactory.transfer()
.amount(250 * Math.pow(10, 8))
.recipientId(utils.c.address)
.vendorField("transfer B => C")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,16 +21,14 @@ module.exports = async options => {
const wallets = secondTxsTypes[secondTxType];
const transferAmount = _balanceNeededFromTxMix(firstTxType, secondTxType);
transactions.push(
Transactions.BuilderFactory
.transfer()
Transactions.BuilderFactory.transfer()
.amount(transferAmount)
.recipientId(wallets[0].address)
.vendorField(`init double spend ${firstTxType} - ${secondTxType}`)
.fee(0.1 * Math.pow(10, 8))
.sign(delegates[0].passphrase)
.getStruct(),
Transactions.BuilderFactory
.transfer()
Transactions.BuilderFactory.transfer()
.amount(utils.fees.secondSignRegistration + transferAmount)
.recipientId(wallets[2].address)
.vendorField(`init double spend ${firstTxType} - ${secondTxType}`)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,7 @@ module.exports = async options => {
Object.keys(secondTxsTypes).forEach(secondTxType => {
const wallets = secondTxsTypes[secondTxType];
transactions.push(
Transactions.BuilderFactory
.secondSignature()
Transactions.BuilderFactory.secondSignature()
.signatureAsset(wallets[3].passphrase)
.fee(utils.fees.secondSignRegistration)
.sign(wallets[2].passphrase)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,7 @@ module.exports = async options => {
let transaction;
switch (type) {
case "transfer":
transaction = Transactions.BuilderFactory
.transfer()
transaction = Transactions.BuilderFactory.transfer()
.amount(utils.transferAmount)
.recipientId(wallets[1].address);
break;
Expand All @@ -42,9 +41,9 @@ module.exports = async options => {
transaction = Transactions.BuilderFactory.secondSignature().signatureAsset(wallets[1].passphrase);
break;
case "delegateRegistration":
transaction = Transactions.BuilderFactory
.delegateRegistration()
.usernameAsset(wallets[0].address.slice(0, 10).toLowerCase());
transaction = Transactions.BuilderFactory.delegateRegistration().usernameAsset(
wallets[0].address.slice(0, 10).toLowerCase(),
);
break;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,18 +33,17 @@ module.exports = async options => {
let transaction;
switch (type) {
case "transfer":
transaction = Transactions.BuilderFactory
.transfer()
transaction = Transactions.BuilderFactory.transfer()
.amount(utils.transferAmount)
.recipientId(wallets[1].address);
break;
case "vote":
transaction = Transactions.BuilderFactory.vote().votesAsset([`+${delegates[2].publicKey}`]);
break;
case "delegateRegistration":
transaction = Transactions.BuilderFactory
.delegateRegistration()
.usernameAsset(wallets[2].address.slice(0, 10).toLowerCase());
transaction = Transactions.BuilderFactory.delegateRegistration().usernameAsset(
wallets[2].address.slice(0, 10).toLowerCase(),
);
break;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,40 +14,35 @@ module.exports = async options => {
Managers.configManager.setFromPreset("testnet");

const transactions = [
Transactions.BuilderFactory
.transfer()
Transactions.BuilderFactory.transfer()
.amount(1000 * Math.pow(10, 8))
.recipientId(utils.doubleTransferSender.address)
.vendorField("send coins for double spend - transfer")
.fee(0.1 * Math.pow(10, 8))
.sign(delegates[0].passphrase)
.getStruct(),
Transactions.BuilderFactory
.transfer()
Transactions.BuilderFactory.transfer()
.amount(1000 * Math.pow(10, 8))
.recipientId(utils.doubleTransfer2ndsigSender.address)
.vendorField("send coins for double spend - transfer with 2nd sig")
.fee(0.1 * Math.pow(10, 8))
.sign(delegates[0].passphrase)
.getStruct(),
Transactions.BuilderFactory
.transfer()
Transactions.BuilderFactory.transfer()
.amount(1.5 * Math.pow(10, 8))
.recipientId(utils.doubleVoteSender.address)
.vendorField("send coins for double spend - vote")
.fee(0.1 * Math.pow(10, 8))
.sign(delegates[0].passphrase)
.getStruct(),
Transactions.BuilderFactory
.transfer()
Transactions.BuilderFactory.transfer()
.amount(35 * Math.pow(10, 8))
.recipientId(utils.doubleDelRegSender.address)
.vendorField("send coins for double spend - delegate registration")
.fee(0.1 * Math.pow(10, 8))
.sign(delegates[0].passphrase)
.getStruct(),
Transactions.BuilderFactory
.transfer()
Transactions.BuilderFactory.transfer()
.amount(7 * Math.pow(10, 8))
.recipientId(utils.double2ndsigRegSender.address)
.vendorField("send coins for double spend - 2nd signature registration")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@ module.exports = async options => {
Managers.configManager.setFromPreset("testnet");

const transactions = [
Transactions.BuilderFactory
.secondSignature()
Transactions.BuilderFactory.secondSignature()
.signatureAsset(utils.doubleTransfer2ndsigSender2.passphrase)
.fee(5 * Math.pow(10, 8))
.sign(utils.doubleTransfer2ndsigSender.passphrase)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,14 @@ module.exports = async options => {
Managers.configManager.setFromPreset("testnet");

const transactions = [
Transactions.BuilderFactory
.transfer()
Transactions.BuilderFactory.transfer()
.amount(600 * Math.pow(10, 8))
.recipientId(utils.doubleTransferRecipient.address)
.vendorField("first part of double spend")
.fee(0.1 * Math.pow(10, 8))
.sign(utils.doubleTransferSender.passphrase)
.getStruct(),
Transactions.BuilderFactory
.transfer()
Transactions.BuilderFactory.transfer()
.amount(600 * Math.pow(10, 8))
.recipientId(utils.doubleTransferRecipient.address)
.vendorField("second part of double spend")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,15 @@ module.exports = async options => {
Managers.configManager.setFromPreset("testnet");

const transactions = [
Transactions.BuilderFactory
.transfer()
Transactions.BuilderFactory.transfer()
.amount(600 * Math.pow(10, 8))
.recipientId(utils.doubleTransfer2ndsigRecipient.address)
.vendorField("first part of double spend")
.fee(0.1 * Math.pow(10, 8))
.sign(utils.doubleTransfer2ndsigSender.passphrase)
.secondSign(utils.doubleTransfer2ndsigSender2.passphrase)
.getStruct(),
Transactions.BuilderFactory
.transfer()
Transactions.BuilderFactory.transfer()
.amount(600 * Math.pow(10, 8))
.recipientId(utils.doubleTransfer2ndsigRecipient.address)
.vendorField("second part of double spend")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,12 @@ module.exports = async options => {
Managers.configManager.setFromPreset("testnet");

const transactions = [
Transactions.BuilderFactory
.vote()
Transactions.BuilderFactory.vote()
.votesAsset([`+${delegates[2].publicKey}`])
.fee(1 * Math.pow(10, 8))
.sign(utils.doubleVoteSender.passphrase)
.getStruct(),
Transactions.BuilderFactory
.vote()
Transactions.BuilderFactory.vote()
.votesAsset([`+${delegates[3].publicKey}`])
.fee(1 * Math.pow(10, 8))
.sign(utils.doubleVoteSender.passphrase)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,12 @@ module.exports = async options => {
Managers.configManager.setFromPreset("testnet");

const transactions = [
Transactions.BuilderFactory
.delegateRegistration()
Transactions.BuilderFactory.delegateRegistration()
.usernameAsset("dummydelegate1")
.fee(25 * Math.pow(10, 8))
.sign(utils.doubleDelRegSender.passphrase)
.getStruct(),
Transactions.BuilderFactory
.delegateRegistration()
Transactions.BuilderFactory.delegateRegistration()
.usernameAsset("dummydelegate2")
.fee(25 * Math.pow(10, 8))
.sign(utils.doubleDelRegSender.passphrase)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,12 @@ module.exports = async options => {
Managers.configManager.setFromPreset("testnet");

const transactions = [
Transactions.BuilderFactory
.secondSignature()
Transactions.BuilderFactory.secondSignature()
.signatureAsset(utils.double2ndsigRegSender2.passphrase)
.fee(5 * Math.pow(10, 8))
.sign(utils.double2ndsigRegSender.passphrase)
.getStruct(),
Transactions.BuilderFactory
.secondSignature()
Transactions.BuilderFactory.secondSignature()
.signatureAsset(utils.double2ndsigRegSender3.passphrase)
.fee(5 * Math.pow(10, 8))
.sign(utils.double2ndsigRegSender.passphrase)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,40 +14,35 @@ module.exports = async options => {
Managers.configManager.setFromPreset("testnet");

const transactions = [
Transactions.BuilderFactory
.transfer()
Transactions.BuilderFactory.transfer()
.amount(1000 * Math.pow(10, 8))
.recipientId(utils.transferSender.address)
.vendorField("init for transfer")
.fee(0.1 * Math.pow(10, 8))
.sign(delegates[0].passphrase)
.getStruct(),
Transactions.BuilderFactory
.transfer()
Transactions.BuilderFactory.transfer()
.amount(1000 * Math.pow(10, 8))
.recipientId(utils.transfer2ndsigSender.address)
.vendorField("init for transfer with 2nd sig")
.fee(0.1 * Math.pow(10, 8))
.sign(delegates[0].passphrase)
.getStruct(),
Transactions.BuilderFactory
.transfer()
Transactions.BuilderFactory.transfer()
.amount(0.5 * Math.pow(10, 8))
.recipientId(utils.voteSender.address)
.vendorField("init for vote")
.fee(0.1 * Math.pow(10, 8))
.sign(delegates[0].passphrase)
.getStruct(),
Transactions.BuilderFactory
.transfer()
Transactions.BuilderFactory.transfer()
.amount(15 * Math.pow(10, 8))
.recipientId(utils.delRegSender.address)
.vendorField("init for delegate registration")
.fee(0.1 * Math.pow(10, 8))
.sign(delegates[0].passphrase)
.getStruct(),
Transactions.BuilderFactory
.transfer()
Transactions.BuilderFactory.transfer()
.amount(3 * Math.pow(10, 8))
.recipientId(utils.secondsigRegSender.address)
.vendorField("init for 2nd signature registration")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@ module.exports = async options => {
Managers.configManager.setFromPreset("testnet");

const transactions = [
Transactions.BuilderFactory
.secondSignature()
Transactions.BuilderFactory.secondSignature()
.signatureAsset(utils.transfer2ndsigSender2.passphrase)
.fee(5 * Math.pow(10, 8))
.sign(utils.transfer2ndsigSender.passphrase)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@ module.exports = async options => {
Managers.configManager.setFromPreset("testnet");

const transactions = [
Transactions.BuilderFactory
.transfer()
Transactions.BuilderFactory.transfer()
.amount(1100 * Math.pow(10, 8))
.recipientId(utils.transferRecipient.address)
.vendorField("transfer with insufficient balance")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@ module.exports = async options => {
Managers.configManager.setFromPreset("testnet");

const transactions = [
Transactions.BuilderFactory
.transfer()
Transactions.BuilderFactory.transfer()
.amount(1100 * Math.pow(10, 8))
.recipientId(utils.transfer2ndsigRecipient.address)
.vendorField("transfer with 2nd signature with insufficient balance")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,7 @@ module.exports = async options => {
Managers.configManager.setFromPreset("testnet");

const transactions = [
Transactions.BuilderFactory
.vote()
Transactions.BuilderFactory.vote()
.votesAsset([`+${delegates[2].publicKey}`])
.fee(1 * Math.pow(10, 8))
.sign(utils.voteSender.passphrase)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@ module.exports = async options => {
Managers.configManager.setFromPreset("testnet");

const transactions = [
Transactions.BuilderFactory
.delegateRegistration()
Transactions.BuilderFactory.delegateRegistration()
.usernameAsset("dummydelegate1")
.fee(25 * Math.pow(10, 8))
.sign(utils.delRegSender.passphrase)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@ module.exports = async options => {
Managers.configManager.setFromPreset("testnet");

const transactions = [
Transactions.BuilderFactory
.secondSignature()
Transactions.BuilderFactory.secondSignature()
.signatureAsset(utils.secondsigRegSender2.passphrase)
.fee(5 * Math.pow(10, 8))
.sign(utils.secondsigRegSender.passphrase)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@ const testUtils = require("../../../../lib/utils/test-utils");
module.exports = async options => {
Managers.configManager.setFromPreset("testnet");

let transaction1 = Transactions.BuilderFactory
.transfer()
let transaction1 = Transactions.BuilderFactory.transfer()
.amount(1000 * Math.pow(10, 8))
.recipientId(utils.senderWallet.address)
.vendorField("send coins to new wallet")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,7 @@ module.exports = async options => {
Managers.configManager.setFromPreset("testnet");

// first transaction which will be broadcasted to other nodes for forging
let transaction = Transactions.BuilderFactory
.transfer()
let transaction = Transactions.BuilderFactory.transfer()
.amount(300 * Math.pow(10, 8))
.recipientId(utils.randomRecipient.address)
.vendorField("transaction to add to pool before disconnecting node")
Expand All @@ -32,8 +31,7 @@ module.exports = async options => {
console.log(`[pool-clear] disconnect node : ${JSON.stringify({ stdoutDisconnect, stderrDisconnect })}`);

// second transaction which will not be broadcasted and should be kept in the node pool
let transaction2 = Transactions.BuilderFactory
.transfer()
let transaction2 = Transactions.BuilderFactory.transfer()
.amount(300 * Math.pow(10, 8))
.recipientId(utils.randomRecipient2.address)
.vendorField("transaction to add to pool before stopping node")
Expand Down
Loading