Skip to content

Commit

Permalink
feat(core-transactions): versioned transaction types
Browse files Browse the repository at this point in the history
  • Loading branch information
spkjp authored and faustbrian committed Nov 29, 2019
1 parent 84c4788 commit ae6cab5
Show file tree
Hide file tree
Showing 88 changed files with 960 additions and 741 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@ import "jest-extended";

import { configManager } from "@packages/crypto/src/managers";
import { TransactionType } from "@packages/crypto/src/enums";
import { DelegateRegistrationTransaction, Utils } from "@packages/crypto/src/transactions";
import { Utils } from "@packages/crypto/src/transactions";
import { Two } from "@packages/crypto/src/transactions/types";
import { BuilderFactory } from "@packages/crypto/src/transactions/builders";
import { DelegateRegistrationBuilder } from "@packages/crypto/src/transactions/builders/transactions/delegate-registration";
import { BigNumber } from "@packages/crypto/src/utils";
Expand Down Expand Up @@ -49,7 +50,7 @@ describe("Delegate Registration Transaction", () => {
it("should have its specific properties", () => {
expect(builder).toHaveProperty("data.type", TransactionType.DelegateRegistration);
expect(builder).toHaveProperty("data.amount", BigNumber.ZERO);
expect(builder).toHaveProperty("data.fee", DelegateRegistrationTransaction.staticFee());
expect(builder).toHaveProperty("data.fee", Two.DelegateRegistrationTransaction.staticFee());
expect(builder).toHaveProperty("data.recipientId", undefined);
expect(builder).toHaveProperty("data.senderPublicKey", undefined);
expect(builder).toHaveProperty("data.asset", { delegate: {} });
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ import "jest-extended";

import { configManager } from "@packages/crypto/src/managers";
import { TransactionType } from "@packages/crypto/src/enums";
import { DelegateResignationTransaction } from "@packages/crypto/src/transactions/";
import { BuilderFactory } from "@packages/crypto/src/transactions/builders";
import { DelegateResignationBuilder } from "@packages/crypto/src/transactions/builders/transactions/delegate-resignation";
import { BigNumber } from "@packages/crypto/src/utils";
import { Two } from "@packages/crypto/src/transactions/types";

import { Generators } from "@packages/core-test-framework/src";

Expand Down Expand Up @@ -40,7 +40,7 @@ describe("Delegate Resignation Transaction", () => {
it("should have its specific properties", () => {
expect(builder).toHaveProperty("data.type", TransactionType.DelegateResignation);
expect(builder).toHaveProperty("data.amount", BigNumber.ZERO);
expect(builder).toHaveProperty("data.fee", DelegateResignationTransaction.staticFee());
expect(builder).toHaveProperty("data.fee", Two.DelegateResignationTransaction.staticFee());
expect(builder).toHaveProperty("data.senderPublicKey", undefined);
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { configManager } from "@packages/crypto/src/managers";
import { TransactionType } from "@packages/crypto/src/enums";
import { BuilderFactory } from "@packages/crypto/src/transactions";
import { HtlcClaimBuilder } from "@packages/crypto/src/transactions/builders/transactions/htlc-claim";
import { HtlcClaimTransaction } from "@packages/crypto/src/transactions/types/htlc-claim";
import { Two } from "@packages/crypto/src/transactions/types";
import { BigNumber } from "@packages/crypto/src/utils";

import { Generators } from "@packages/core-test-framework/src";
Expand All @@ -22,7 +22,7 @@ beforeEach(() => {
describe("Htlc claim Transaction", () => {
it("should have its specific properties", () => {
expect(builder).toHaveProperty("data.type", TransactionType.HtlcClaim);
expect(builder).toHaveProperty("data.fee", HtlcClaimTransaction.staticFee());
expect(builder).toHaveProperty("data.fee", Two.HtlcClaimTransaction.staticFee());
expect(builder).toHaveProperty("data.amount", BigNumber.make(0));
expect(builder).toHaveProperty("data.asset", {});
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { configManager } from "@packages/crypto/src/managers";
import { HtlcLockExpirationType, TransactionType } from "@packages/crypto/src/enums";
import { BuilderFactory } from "@packages/crypto/src/transactions";
import { HtlcLockBuilder } from "@packages/crypto/src/transactions/builders/transactions/htlc-lock";
import { HtlcLockTransaction } from "@packages/crypto/src/transactions/types/htlc-lock";
import { Two } from "@packages/crypto/src/transactions/types";

import { Generators } from "@packages/core-test-framework/src";

Expand All @@ -23,7 +23,7 @@ beforeEach(() => {
describe("Htlc lock Transaction", () => {
it("should have its specific properties", () => {
expect(builder).toHaveProperty("data.type", TransactionType.HtlcLock);
expect(builder).toHaveProperty("data.fee", HtlcLockTransaction.staticFee());
expect(builder).toHaveProperty("data.fee", Two.HtlcLockTransaction.staticFee());
expect(builder).toHaveProperty("data.asset", {});
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { configManager } from "@packages/crypto/src/managers";
import { TransactionType } from "@packages/crypto/src/enums";
import { BuilderFactory } from "@packages/crypto/src/transactions";
import { HtlcRefundBuilder } from "@packages/crypto/src/transactions/builders/transactions/htlc-refund";
import { HtlcRefundTransaction } from "@packages/crypto/src/transactions/types/htlc-refund";
import { Two } from "@packages/crypto/src/transactions/types";
import { BigNumber } from "@packages/crypto/src/utils";

import { Generators } from "@packages/core-test-framework/src";
Expand All @@ -22,7 +22,7 @@ beforeEach(() => {
describe("Htlc refund Transaction", () => {
it("should have its specific properties", () => {
expect(builder).toHaveProperty("data.type", TransactionType.HtlcRefund);
expect(builder).toHaveProperty("data.fee", HtlcRefundTransaction.staticFee());
expect(builder).toHaveProperty("data.fee", Two.HtlcRefundTransaction.staticFee());
expect(builder).toHaveProperty("data.amount", BigNumber.make(0));
expect(builder).toHaveProperty("data.asset", {});
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ import "jest-extended";
import { configManager } from "@packages/crypto/src/managers";
import { Utils } from "@arkecosystem/crypto";
import { TransactionType } from "@packages/crypto/src/enums";
import { BuilderFactory, IpfsTransaction } from "@packages/crypto/src/transactions";
import { BuilderFactory } from "@packages/crypto/src/transactions";
import { Two } from "@packages/crypto/src/transactions/types";
import { IPFSBuilder } from "@packages/crypto/src/transactions/builders/transactions/ipfs";

import { Generators } from "@packages/core-test-framework/src";
Expand All @@ -21,7 +22,7 @@ beforeEach(() => {
describe("IPFS Transaction", () => {
it("should have its specific properties", () => {
expect(builder).toHaveProperty("data.type", TransactionType.Ipfs);
expect(builder).toHaveProperty("data.fee", IpfsTransaction.staticFee());
expect(builder).toHaveProperty("data.fee", Two.IpfsTransaction.staticFee());
expect(builder).toHaveProperty("data.amount", Utils.BigNumber.make(0));
expect(builder).toHaveProperty("data.asset", {});
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@ import "jest-extended";
import { configManager } from "@packages/crypto/src/managers";
import { TransactionType } from "@packages/crypto/src/enums";
import { MaximumPaymentCountExceededError } from "@packages/crypto/src/errors";
import { BuilderFactory, MultiPaymentTransaction } from "@packages/crypto/src/transactions";
import { BuilderFactory } from "@packages/crypto/src/transactions";
import { MultiPaymentBuilder } from "@packages/crypto/src/transactions/builders/transactions/multi-payment";
import { Two } from "@packages/crypto/src/transactions/types";
import { BigNumber } from "@packages/crypto/src/utils";

import { Generators } from "@packages/core-test-framework/src";
Expand All @@ -22,7 +23,7 @@ beforeEach(() => {
describe("Multi Payment Transaction", () => {
it("should have its specific properties", () => {
expect(builder).toHaveProperty("data.type", TransactionType.MultiPayment);
expect(builder).toHaveProperty("data.fee", MultiPaymentTransaction.staticFee());
expect(builder).toHaveProperty("data.fee", Two.MultiPaymentTransaction.staticFee());
expect(builder).toHaveProperty("data.asset.payments", []);
expect(builder).toHaveProperty("data.vendorField", undefined);
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@ import "jest-extended";
import { configManager } from "@packages/crypto/src/managers";
import { TransactionType } from "@packages/crypto/src/enums";
import { TransactionVersionError } from "@packages/crypto/src/errors";
import { BuilderFactory, MultiSignatureRegistrationTransaction } from "@packages/crypto/src/transactions";
import { BuilderFactory } from "@packages/crypto/src/transactions";
import { Two } from "@packages/crypto/src/transactions/types";
import { MultiSignatureBuilder } from "@packages/crypto/src/transactions/builders/transactions/multi-signature";
import * as Utils from "@packages/crypto/src/utils";

Expand Down Expand Up @@ -71,7 +72,7 @@ describe("Multi Signature Transaction", () => {
});

describe("multiSignatureAsset", () => {
const multiSignatureFee = MultiSignatureRegistrationTransaction.staticFee();
const multiSignatureFee = Two.MultiSignatureRegistrationTransaction.staticFee();
const multiSignature = {
publicKeys: ["key a", "key b", "key c"],
min: 1,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ import { configManager } from "@packages/crypto/src/managers";
import { Utils } from "@arkecosystem/crypto";
import { TransactionType } from "@packages/crypto/src/enums";
import { Keys } from "@packages/crypto/src/identities";
import { BuilderFactory, SecondSignatureRegistrationTransaction } from "@packages/crypto/src/transactions";
import { BuilderFactory } from "@packages/crypto/src/transactions";
import { Two } from "@packages/crypto/src/transactions/types";
import { SecondSignatureBuilder } from "@packages/crypto/src/transactions/builders/transactions/second-signature";

import { Factories, Generators } from "@packages/core-test-framework/src";
Expand Down Expand Up @@ -36,7 +37,7 @@ describe("Second Signature Transaction", () => {

it("should have its specific properties", () => {
expect(builder).toHaveProperty("data.type", TransactionType.SecondSignature);
expect(builder).toHaveProperty("data.fee", SecondSignatureRegistrationTransaction.staticFee());
expect(builder).toHaveProperty("data.fee", Two.SecondSignatureRegistrationTransaction.staticFee());
expect(builder).toHaveProperty("data.amount", Utils.BigNumber.make(0));
expect(builder).toHaveProperty("data.recipientId", undefined);
expect(builder).toHaveProperty("data.senderPublicKey", undefined);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,8 @@ import { configManager } from "@packages/crypto/src/managers";
import { TransactionType } from "@packages/crypto/src/enums";
import { Keys, WIF } from "@packages/crypto/src/identities";
import { devnet } from "@packages/crypto/src/networks";
import { BuilderFactory, TransferTransaction } from "@packages/crypto/src/transactions";
import { BuilderFactory } from "@packages/crypto/src/transactions";
import { Two } from "@packages/crypto/src/transactions/types";
import { TransferBuilder } from "@packages/crypto/src/transactions/builders/transactions/transfer";

import { Factories, Generators } from "@packages/core-test-framework/src";
Expand Down Expand Up @@ -102,7 +103,7 @@ describe("Transfer Transaction", () => {

it("should have its specific properties", () => {
expect(builder).toHaveProperty("data.type", TransactionType.Transfer);
expect(builder).toHaveProperty("data.fee", TransferTransaction.staticFee());
expect(builder).toHaveProperty("data.fee", Two.TransferTransaction.staticFee());
expect(builder).toHaveProperty("data.amount", Utils.BigNumber.make(0));
expect(builder).toHaveProperty("data.recipientId", undefined);
expect(builder).toHaveProperty("data.senderPublicKey", undefined);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@ import { Factories, Generators } from "@packages/core-test-framework/src";
import { configManager } from "@packages/crypto/src/managers";
import { TransactionType } from "@packages/crypto/src/enums";
import { Keys } from "@packages/crypto/src/identities";
import { BuilderFactory, VoteTransaction } from "@packages/crypto/src/transactions";
import { BuilderFactory } from "@packages/crypto/src/transactions";
import { Two } from "@packages/crypto/src/transactions/types";
import { VoteBuilder } from "@packages/crypto/src/transactions/builders/transactions/vote";
import * as Utils from "@packages/crypto/src/utils";

Expand Down Expand Up @@ -48,7 +49,7 @@ describe("Vote Transaction", () => {

it("should have its specific properties", () => {
expect(builder).toHaveProperty("data.type", TransactionType.Vote);
expect(builder).toHaveProperty("data.fee", VoteTransaction.staticFee());
expect(builder).toHaveProperty("data.fee", Two.VoteTransaction.staticFee());
expect(builder).toHaveProperty("data.amount", Utils.BigNumber.make(0));
expect(builder).toHaveProperty("data.recipientId", undefined);
expect(builder).toHaveProperty("data.senderPublicKey", undefined);
Expand Down
41 changes: 17 additions & 24 deletions __tests__/unit/crypto/transactions/transaction.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,10 @@ import "jest-extended";
import { configManager } from "../../../../packages/crypto/src/managers";
import { devnet } from "../../../../packages/crypto/src/networks";
import {
DelegateRegistrationTransaction,
DelegateResignationTransaction,
IpfsTransaction,
MultiPaymentTransaction,
MultiSignatureRegistrationTransaction,
SecondSignatureRegistrationTransaction,
TransactionFactory,
TransferTransaction,
VoteTransaction,
} from "../../../../packages/crypto/src/transactions";
import { BigNumber } from "../../../../packages/crypto/src/utils";
import { Two } from "../../../../packages/crypto/src/transactions/types";

describe("Transaction", () => {
describe("should deserialize correctly some tests transactions", () => {
Expand Down Expand Up @@ -145,38 +138,38 @@ describe("Transaction", () => {
configManager.setHeight(100000000);

let { staticFees } = configManager.getMilestone().fees;
expect(TransferTransaction.staticFee()).toEqual(BigNumber.make(1234));
expect(SecondSignatureRegistrationTransaction.staticFee()).toEqual(
expect(Two.TransferTransaction.staticFee()).toEqual(BigNumber.make(1234));
expect(Two.SecondSignatureRegistrationTransaction.staticFee()).toEqual(
BigNumber.make(staticFees.secondSignature),
);
expect(DelegateRegistrationTransaction.staticFee()).toEqual(
expect(Two.DelegateRegistrationTransaction.staticFee()).toEqual(
BigNumber.make(staticFees.delegateRegistration),
);
expect(VoteTransaction.staticFee()).toEqual(BigNumber.make(staticFees.vote));
expect(MultiSignatureRegistrationTransaction.staticFee()).toEqual(
expect(Two.VoteTransaction.staticFee()).toEqual(BigNumber.make(staticFees.vote));
expect(Two.MultiSignatureRegistrationTransaction.staticFee()).toEqual(
BigNumber.make(staticFees.multiSignature),
);
expect(IpfsTransaction.staticFee()).toEqual(BigNumber.make(staticFees.ipfs));
expect(MultiPaymentTransaction.staticFee()).toEqual(BigNumber.make(staticFees.multiPayment));
expect(DelegateResignationTransaction.staticFee()).toEqual(BigNumber.make(staticFees.delegateResignation));
expect(Two.IpfsTransaction.staticFee()).toEqual(BigNumber.make(staticFees.ipfs));
expect(Two.MultiPaymentTransaction.staticFee()).toEqual(BigNumber.make(staticFees.multiPayment));
expect(Two.DelegateResignationTransaction.staticFee()).toEqual(BigNumber.make(staticFees.delegateResignation));

configManager.setHeight(1);
staticFees = configManager.getMilestone().fees.staticFees;

expect(TransferTransaction.staticFee()).toEqual(BigNumber.make(staticFees.transfer));
expect(SecondSignatureRegistrationTransaction.staticFee()).toEqual(
expect(Two.TransferTransaction.staticFee()).toEqual(BigNumber.make(staticFees.transfer));
expect(Two.SecondSignatureRegistrationTransaction.staticFee()).toEqual(
BigNumber.make(staticFees.secondSignature),
);
expect(DelegateRegistrationTransaction.staticFee()).toEqual(
expect(Two.DelegateRegistrationTransaction.staticFee()).toEqual(
BigNumber.make(staticFees.delegateRegistration),
);
expect(VoteTransaction.staticFee()).toEqual(BigNumber.make(staticFees.vote));
expect(MultiSignatureRegistrationTransaction.staticFee()).toEqual(
expect(Two.VoteTransaction.staticFee()).toEqual(BigNumber.make(staticFees.vote));
expect(Two.MultiSignatureRegistrationTransaction.staticFee()).toEqual(
BigNumber.make(staticFees.multiSignature),
);
expect(IpfsTransaction.staticFee()).toEqual(BigNumber.make(staticFees.ipfs));
expect(MultiPaymentTransaction.staticFee()).toEqual(BigNumber.make(staticFees.multiPayment));
expect(DelegateResignationTransaction.staticFee()).toEqual(BigNumber.make(staticFees.delegateResignation));
expect(Two.IpfsTransaction.staticFee()).toEqual(BigNumber.make(staticFees.ipfs));
expect(Two.MultiPaymentTransaction.staticFee()).toEqual(BigNumber.make(staticFees.multiPayment));
expect(Two.DelegateResignationTransaction.staticFee()).toEqual(BigNumber.make(staticFees.delegateResignation));

devnet.milestones.pop();
});
Expand Down
2 changes: 1 addition & 1 deletion packages/core-api/src/controllers/node.ts
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ export class NodeController extends Controller {

const handler: Handlers.TransactionHandler = await this.app
.get<Handlers.Registry>(Container.Identifiers.TransactionHandlerRegistry)
.get(result.type, result.typeGroup);
.get(result);
groupedByTypeGroup[result.typeGroup][handler.getConstructor().key] = {
avg: result.avg,
max: result.max,
Expand Down
4 changes: 2 additions & 2 deletions packages/core-api/src/controllers/transactions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ export class TransactionsController extends Controller {

public async types(request: Hapi.Request, h: Hapi.ResponseToolkit) {
const activatedTransactionHandlers: Handlers.TransactionHandler[] = await this.app
.get<any>(Container.Identifiers.TransactionHandlerRegistry)
.get<Handlers.Registry>(Container.Identifiers.TransactionHandlerRegistry)
.getActivatedTransactionHandlers();
const typeGroups: Record<string | number, Record<string, number>> = {};

Expand All @@ -141,7 +141,7 @@ export class TransactionsController extends Controller {

public async schemas(request: Hapi.Request, h: Hapi.ResponseToolkit) {
const activatedTransactionHandlers: Handlers.TransactionHandler[] = await this.app
.get<any>(Container.Identifiers.TransactionHandlerRegistry)
.get<Handlers.Registry>(Container.Identifiers.TransactionHandlerRegistry)
.getActivatedTransactionHandlers();
const schemasByType: Record<string, Record<string, any>> = {};

Expand Down
Loading

0 comments on commit ae6cab5

Please sign in to comment.