Skip to content

Commit

Permalink
refactor(crypto): update multipayment limits (#3157)
Browse files Browse the repository at this point in the history
  • Loading branch information
spkjp committed Nov 21, 2019
1 parent 28611ae commit e516c54
Show file tree
Hide file tree
Showing 10 changed files with 31 additions and 27 deletions.
26 changes: 14 additions & 12 deletions __tests__/functional/transaction-forging/multi-payment.test.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import "@packages/core-test-framework/src/matchers";

import { Contracts } from "@arkecosystem/core-kernel";
import { Identities, Utils } from "@arkecosystem/crypto";
import { Identities, Utils, Managers } from "@arkecosystem/crypto";

import { snoozeForBlock, TransactionFactory } from "@packages/core-test-framework/src/utils";
import secrets from "@packages/core-test-framework/src/internal/secrets.json";
Expand Down Expand Up @@ -47,7 +47,7 @@ describe("Transaction Forging - Multipayment", () => {
await expect(transactions.id).toBeForged();
});

it("should broadcast, accept and forge it [500 payments per tx, 200 tx] [Signed with 1 Passphase]", async () => {
it("should broadcast, accept and forge it [max payments per tx, 200 tx] [Signed with 1 Passphase]", async () => {
// Initial Funds
const initialFunds = TransactionFactory.init(app)
.transfer(Identities.Address.fromPassphrase(passphrase), 5000 * 1e8)
Expand All @@ -58,16 +58,16 @@ describe("Transaction Forging - Multipayment", () => {
await snoozeForBlock(1);
await expect(initialFunds.id).toBeForged();

const payments100 = [];
for (let i = 1; i <= 500; i++) {
payments100.push({
const payments = [];
for (let i = 1; i <= Managers.configManager.getMilestone().multiPaymentLimit; i++) {
payments.push({
recipientId: "AbfQq8iRSf9TFQRzQWo33dHYU7HFMS17Zd",
amount: "1",
});
}
// Submit multipayment transaction
const transactions = TransactionFactory.init(app)
.multiPayment(payments100)
.multiPayment(payments)
.withPassphrase(passphrase)
.withFee(2 * 1e8)
.create(200);
Expand All @@ -80,7 +80,7 @@ describe("Transaction Forging - Multipayment", () => {
}
});

it("should NOT broadcast, accept and forge it [501 payments] [Signed with 1 Passphase]", async () => {
it("should NOT broadcast, accept and forge it [max + 1 payments] [Signed with 1 Passphase]", async () => {
// Initial Funds
const initialFunds = TransactionFactory.init(app)
.transfer(Identities.Address.fromPassphrase(passphrase), 100 * 1e8)
Expand All @@ -91,17 +91,17 @@ describe("Transaction Forging - Multipayment", () => {
await snoozeForBlock(1);
await expect(initialFunds.id).toBeForged();

const payments101 = [];
for (let i = 1; i <= 500; i++) {
payments101.push({
const payments = [];
for (let i = 1; i <= Managers.configManager.getMilestone().multiPaymentLimit; i++) {
payments.push({
recipientId: "AbfQq8iRSf9TFQRzQWo33dHYU7HFMS17Zd",
amount: "" + i,
});
}

// Submit multipayment transaction
const factory = TransactionFactory.init(app)
.multiPayment(payments101)
.multiPayment(payments)
.withPassphrase(passphrase)
.withFee(2 * 1e8);

Expand All @@ -111,7 +111,9 @@ describe("Transaction Forging - Multipayment", () => {
});

const transaction = factory.createOne();
expect(transaction.asset.payments.length).toBe(501);
expect(transaction.asset.payments.length).toBe(
Managers.configManager.getMilestone().multiPaymentLimit + 1
);

await expect(transaction).not.toBeAccepted();
await snoozeForBlock(1);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
}
},
"vendorFieldLength": 64,
"multiPaymentLimit": 500,
"multiPaymentLimit": 256,
"aip11": true
},
{
Expand All @@ -43,4 +43,4 @@
"idFullSha256": true
}
}
]
]
4 changes: 2 additions & 2 deletions __tests__/unit/crypto/transactions/deserializer.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -327,11 +327,11 @@ describe("Transaction serializer / deserializer", () => {
.fee("50000000")
.network(23);

for (let i = 0; i < 500; i++) {
for (let i = 0; i < configManager.getMilestone().multiPaymentLimit; i++) {
multiPayment.addPayment(Address.fromPassphrase(`recipient-${i}`), "1");
}

expect(() => multiPayment.addPayment(Address.fromPassphrase("recipient501"), "1")).toThrow(
expect(() => multiPayment.addPayment(Address.fromPassphrase("recipientBad"), "1")).toThrow(
Errors.MaximumPaymentCountExceededError,
);

Expand Down
2 changes: 1 addition & 1 deletion packages/core-test-framework/src/generators/network.ts
Original file line number Diff line number Diff line change
Expand Up @@ -267,7 +267,7 @@ export class GenerateNetwork {
},
},
vendorFieldLength: 64,
multiPaymentLimit: 500,
multiPaymentLimit: 256,
aip11: true,
},
{
Expand Down
2 changes: 1 addition & 1 deletion packages/core/src/commands/network/generate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -273,7 +273,7 @@ $ ark network:generate --network=mynet7 --premine=120000000000 --delegates=47 --
},
},
vendorFieldLength: 64,
multiPaymentLimit: 500,
multiPaymentLimit: 256,
aip11: true,
},
{
Expand Down
8 changes: 5 additions & 3 deletions packages/crypto/src/networks/devnet/milestones.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
"ignoreInvalidSecondSignatureField": true,
"ignoreExpiredTransactions": true,
"vendorFieldLength": 64,
"multiPaymentLimit": 500
"multiPaymentLimit": 128
},
{
"height": 10800,
Expand Down Expand Up @@ -76,11 +76,13 @@
{
"height": 3963000,
"p2p": {
"minimumVersions": ["^2.6 || ^2.6.0-next.0"]
"minimumVersions": [
"^2.6 || ^2.6.0-next.0"
]
}
},
{
"height": 4006000,
"aip11": true
}
]
]
4 changes: 2 additions & 2 deletions packages/crypto/src/networks/mainnet/milestones.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
}
},
"vendorFieldLength": 64,
"multiPaymentLimit": 500
"multiPaymentLimit": 64
},
{
"height": 75600,
Expand Down Expand Up @@ -56,4 +56,4 @@
"acceptExpiredTransactionTimestamps": false
}
}
]
]
4 changes: 2 additions & 2 deletions packages/crypto/src/networks/testnet/milestones.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
}
},
"vendorFieldLength": 64,
"multiPaymentLimit": 500,
"multiPaymentLimit": 256,
"aip11": true
},
{
Expand All @@ -43,4 +43,4 @@
"idFullSha256": true
}
}
]
]
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ export class MultiPaymentBuilder extends TransactionBuilder<MultiPaymentBuilder>
public addPayment(recipientId: string, amount: string): MultiPaymentBuilder {
if (this.data.asset && this.data.asset.payments) {

const limit: number = configManager.getMilestone().multiPaymentLimit || 500;
const limit: number = configManager.getMilestone().multiPaymentLimit || 256;
if (this.data.asset.payments.length >= limit) {
throw new MaximumPaymentCountExceededError(limit);
}
Expand Down
2 changes: 1 addition & 1 deletion packages/crypto/src/validation/keywords.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ const transactionType = (ajv: Ajv) => {
(!parentObject.typeGroup || parentObject.typeGroup === 1)
) {
if (parentObject.asset && parentObject.asset.payments) {
const limit: number = configManager.getMilestone().multiPaymentLimit || 500;
const limit: number = configManager.getMilestone().multiPaymentLimit || 256;
return parentObject.asset.payments.length <= limit;
}
}
Expand Down

0 comments on commit e516c54

Please sign in to comment.