Skip to content

Commit

Permalink
refactor(core-magistrate): don't allow multiple business or bri… (#3137)
Browse files Browse the repository at this point in the history
  • Loading branch information
spkjp committed Nov 21, 2019
1 parent 317a89f commit 8e5475d
Show file tree
Hide file tree
Showing 13 changed files with 330 additions and 79 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,33 @@ describe("Transaction Forging - Bridgechain registration", () => {
await expect(bridgechainRegistration.id).toBeForged();
});

it("should reject bridgechain registration, because bridgechain registration with same name is already in the pool [Signed with 1 Passphrase]", async () => {
// Registering a bridgechain
const bridgechainRegistration = TransactionFactory.bridgechainRegistration({
name: "cryptoProject2",
seedNodes: ["1.2.3.4", "2001:0db8:85a3:0000:0000:8a2e:0370:7334"],
genesisHash: "127e6fbfe24a750e72930c220a8e138275656b8e5d8f48a98c3c92df2caba935",
bridgechainRepository: "somerepository",
})
.withPassphrase(secrets[0])
.createOne();

const bridgechainRegistration2 = TransactionFactory.bridgechainRegistration({
name: "cryptoProject2",
seedNodes: ["1.2.3.4", "2001:0db8:85a3:0000:0000:8a2e:0370:7334"],
genesisHash: "127e6fbfe24a750e72930c220a8e138275656b8e5d8f48a98c3c92df2caba935",
bridgechainRepository: "somerepository",
})
.withPassphrase(secrets[0])
.withNonce(bridgechainRegistration.nonce.plus(1))
.createOne();

await expect([bridgechainRegistration, bridgechainRegistration2]).not.toBeAllAccepted();
await snoozeForBlock(1);
await expect(bridgechainRegistration.id).toBeForged();
await expect(bridgechainRegistration2.id).not.toBeForged();
});

it("should broadcast, accept and forge it again [Signed with 1 Passphrase]", async () => {
// Registering a bridgechain again
const bridgechainRegistration = TransactionFactory.init(app)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,15 +44,17 @@ describe("Transaction Forging - Bridgechain resignation", () => {
await expect(bridgechainRegistration.id).toBeForged();

// Bridgechain resignation
let bridgechainResignation = TransactionFactory.init(app)
const bridgechainResignation = TransactionFactory.init(app)
.bridgechainResignation("1")
.withPassphrase(secrets[0])
.createOne();
await expect(bridgechainResignation).toBeAccepted();
await snoozeForBlock(1);
await expect(bridgechainResignation.id).toBeForged();
});

bridgechainResignation = TransactionFactory.init(app)
it("should reject bridgechain resignation, because bridgechain resigned [Signed with 1 Passphrase]", async () => {
const bridgechainResignation = TransactionFactory.init(app)
.bridgechainResignation("1")
.withPassphrase(secrets[0])
.createOne();
Expand All @@ -61,6 +63,36 @@ describe("Transaction Forging - Bridgechain resignation", () => {
await snoozeForBlock(1);
await expect(bridgechainResignation.id).not.toBeForged();
});

it("should reject bridgechain resignation, because bridgechain resignation for same bridgechain is already in the pool [Signed with 1 Passphrase]", async () => {
// Bridgechain registration
const bridgechainRegistration = TransactionFactory.bridgechainRegistration({
name: "cryptoProject2",
seedNodes: ["1.2.3.4", "2001:0db8:85a3:0000:0000:8a2e:0370:7334"],
genesisHash: "127e6fbfe24a750e72930c220a8e138275656b8e5d8f48a98c3c92df2caba935",
bridgechainRepository: "www.repository.com/myorg/myrepo",
})
.withPassphrase(secrets[0])
.createOne();

await expect(bridgechainRegistration).toBeAccepted();
await snoozeForBlock(1);
await expect(bridgechainRegistration.id).toBeForged();

const bridgechainResignation = TransactionFactory.bridgechainResignation(2)
.withPassphrase(secrets[0])
.createOne();

const bridgechainResignation2 = TransactionFactory.bridgechainResignation(2)
.withPassphrase(secrets[0])
.withNonce(bridgechainResignation.nonce.plus(1))
.createOne();

await expect([bridgechainResignation, bridgechainResignation2]).not.toBeAllAccepted();
await snoozeForBlock(1);
await expect(bridgechainResignation.id).toBeForged();
await expect(bridgechainResignation2.id).not.toBeForged();
});
});

describe("Signed with 2 Passphrases", () => {
Expand All @@ -71,7 +103,7 @@ describe("Transaction Forging - Bridgechain resignation", () => {

// Initial Funds
const initialFunds = TransactionFactory.init(app)
.transfer(Identities.Address.fromPassphrase(passphrase), 150 * 1e8)
.transfer(Identities.Address.fromPassphrase(passphrase), 200 * 1e8)
.withPassphrase(secrets[0])
.createOne();

Expand Down Expand Up @@ -118,6 +150,16 @@ describe("Transaction Forging - Bridgechain resignation", () => {
await expect(bridgechainRegistration).toBeAccepted();
await snoozeForBlock(1);
await expect(bridgechainRegistration.id).toBeForged();

// Bridgechain resignation
const bridgechainResignation = TransactionFactory.bridgechainResignation(3)
.withPassphrase(passphrase)
.withSecondPassphrase(secondPassphrase)
.createOne();

await expect(bridgechainResignation).toBeAccepted();
await snoozeForBlock(1);
await expect(bridgechainResignation.id).toBeForged();
});
});

Expand Down Expand Up @@ -198,7 +240,7 @@ describe("Transaction Forging - Bridgechain resignation", () => {

// Bridgechain resignation
const bridgechainResignation = TransactionFactory.init(app)
.bridgechainResignation("3")
.bridgechainResignation("4")
.withSenderPublicKey(multiSigPublicKey)
.withPassphraseList(passphrases)
.createOne();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ describe("Transaction Forging - Bridgechain update", () => {
await expect(bridgechainRegistration.id).toBeForged();

// Updating a bridgechain
let bridgechainUpdate = TransactionFactory.init(app)
const bridgechainUpdate = TransactionFactory.init(app)
.bridgechainUpdate({
bridgechainId: Utils.BigNumber.ONE,
seedNodes: ["1.2.3.4", "1.2.3.5", "192.168.1.0", "131.107.0.89"],
Expand All @@ -64,9 +64,11 @@ describe("Transaction Forging - Bridgechain update", () => {
await expect(bridgechainResignation).toBeAccepted();
await snoozeForBlock(1);
await expect(bridgechainResignation.id).toBeForged();
});

it("should reject bridgechain update, because bridgechain resigned [Signed with 1 Passphrase]", async () => {
// Updating a bridgechain after resignation
bridgechainUpdate = TransactionFactory.init(app)
const bridgechainUpdate = TransactionFactory.init(app)
.bridgechainUpdate({
bridgechainId: Utils.BigNumber.ONE,
seedNodes: ["1.2.3.4", "1.2.3.5", "192.168.1.0", "131.107.0.89"],
Expand All @@ -78,6 +80,43 @@ describe("Transaction Forging - Bridgechain update", () => {
await snoozeForBlock(1);
await expect(bridgechainUpdate.id).not.toBeForged();
});


it("should reject bridgechain update, because bridgechain update for same bridgechain is already in the pool [Signed with 1 Passphrase]", async () => {
// Registering a bridgechain
const bridgechainRegistration = TransactionFactory.bridgechainRegistration({
name: "cryptoProject2",
seedNodes: ["1.2.3.4", "2001:0db8:85a3:0000:0000:8a2e:0370:7334"],
genesisHash: "127e6fbfe24a750e72930c220a8e138275656b8e5d8f48a98c3c92df2caba935",
bridgechainRepository: "somerepository",
})
.withPassphrase(secrets[0])
.createOne();

await expect(bridgechainRegistration).toBeAccepted();
await snoozeForBlock(1);
await expect(bridgechainRegistration.id).toBeForged();

const bridgechainUpdate = TransactionFactory.bridgechainUpdate({
bridgechainId: 3,
seedNodes: ["1.2.3.4", "1.2.3.5", "192.168.1.0", "131.107.0.89"],
})
.withPassphrase(secrets[0])
.createOne();

const bridgechainUpdate2 = TransactionFactory.bridgechainUpdate({
bridgechainId: 3,
seedNodes: ["1.2.3.4", "1.2.3.5", "192.168.1.0", "131.107.0.89"],
})
.withPassphrase(secrets[0])
.withNonce(bridgechainUpdate.nonce.plus(1))
.createOne();

await expect([bridgechainUpdate, bridgechainUpdate2]).not.toBeAllAccepted();
await snoozeForBlock(1);
await expect(bridgechainUpdate.id).toBeForged();
await expect(bridgechainUpdate2.id).not.toBeForged();
});
});

describe("Signed with 2 Passphrases", () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,32 +8,20 @@ import { snoozeForBlock, TransactionFactory } from "@packages/core-test-framewor
import secrets from "@packages/core-test-framework/src/internal/secrets.json";
import * as support from "./__support__";

const { passphrase } = support.passphrases;

let app: Contracts.Kernel.Application;
beforeAll(async () => (app = await support.setUp()));
afterAll(async () => await support.tearDown());

describe("Transaction Forging - Business registration", () => {
describe("Signed with 1 Passphrase", () => {
it("should broadcast, accept and forge it [Signed with 1 Passphrase]", async () => {
// Initial Funds
const initialFunds = TransactionFactory.init(app)
.transfer(Identities.Address.fromPassphrase(passphrase), 50 * 1e8)
.withPassphrase(secrets[0])
.createOne();

await expect(initialFunds).toBeAccepted();
await snoozeForBlock(1);
await expect(initialFunds.id).toBeForged();

// Registering a business
const businessRegistration = TransactionFactory.init(app)
.businessRegistration({
name: "ark",
website: "ark.io",
})
.withPassphrase(passphrase)
.withPassphrase(secrets[0])
.createOne();

await expect(businessRegistration).toBeAccepted();
Expand All @@ -48,7 +36,7 @@ describe("Transaction Forging - Business registration", () => {
name: "ark",
website: "ark.io",
})
.withPassphrase(passphrase)
.withPassphrase(secrets[0])
.createOne();

await expect(businessRegistration).toBeRejected();
Expand All @@ -62,7 +50,7 @@ describe("Transaction Forging - Business registration", () => {
name: "\u0000ark",
website: "ark.io",
})
.withPassphrase(passphrase)
.withPassphrase(secrets[1])
.createOne();

await expect(businessRegistration).toBeRejected();
Expand All @@ -76,13 +64,38 @@ describe("Transaction Forging - Business registration", () => {
name: "ark+",
website: "ark.io",
})
.withPassphrase(passphrase)
.withPassphrase(secrets[1])
.createOne();

await expect(businessRegistration).toBeRejected();
await snoozeForBlock(1);
await expect(businessRegistration.id).not.toBeForged();
});


it("should be rejected, because business registration is already in the pool [Signed with 1 Passphrase]", async () => {
// Registering a business
const businessRegistration = TransactionFactory.businessRegistration({
name: "ark",
website: "ark.io",
})
.withPassphrase(secrets[1])
.createOne();

// Registering a business again
const businessRegistration2 = TransactionFactory.businessRegistration({
name: "ark2",
website: "ark.io",
})
.withPassphrase(secrets[1])
.withNonce(businessRegistration.nonce.plus(1))
.createOne();

await expect([businessRegistration, businessRegistration2]).not.toBeAllAccepted();
await snoozeForBlock(1);
await expect(businessRegistration.id).toBeForged();
await expect(businessRegistration2.id).not.toBeForged();
});
});

describe("Signed with 2 Passphrases", () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ describe("Transaction Forging - Business resignation", () => {
await expect(businessRegistration.id).toBeForged();

// Resigning a business
let businessResignation = TransactionFactory.init(app)
const businessResignation = TransactionFactory.init(app)
.businessResignation()
.withPassphrase(secrets[0])
.createOne();
Expand All @@ -38,28 +38,56 @@ describe("Transaction Forging - Business resignation", () => {
await snoozeForBlock(1);
await expect(businessResignation.id).toBeForged();

// Reject a second resignation
businessResignation = TransactionFactory.init(app)
// Reject a new registration
businessRegistration = TransactionFactory.businessRegistration({
name: "ark",
website: "ark.io",
})
.withPassphrase(secrets[0])
.createOne();

await expect(businessRegistration).toBeRejected();
await snoozeForBlock(1);
await expect(businessRegistration.id).not.toBeForged();
});

it("should reject business resignation, because business resigned [Signed with 1 Passphrase]", async () => {
const businessResignation = TransactionFactory.businessResignation()
.businessResignation()
.withPassphrase(secrets[0])
.createOne();

await expect(businessResignation).toBeRejected();
await snoozeForBlock(1);
await expect(businessResignation.id).not.toBeForged();
});

// Reject a new registration
businessRegistration = TransactionFactory.init(app)
.businessRegistration({
name: "ark",
website: "ark.io",
})
.withPassphrase(secrets[0])
it("should reject business resignation, because business resignation is already in the pool [Signed with 1 Passphrase]", async () => {
// Registering a business
const businessRegistration = TransactionFactory.businessRegistration({
name: "ark",
website: "ark.io",
})
.withPassphrase(secrets[1])
.createOne();

await expect(businessRegistration).toBeRejected();
await expect(businessRegistration).toBeAccepted();
await snoozeForBlock(1);
await expect(businessRegistration.id).not.toBeForged();
await expect(businessRegistration.id).toBeForged();

const businessResignation = TransactionFactory.businessResignation()
.withPassphrase(secrets[1])
.createOne();

const businessResignation2 = TransactionFactory.businessResignation()
.withPassphrase(secrets[1])
.withNonce(businessResignation.nonce.plus(1))
.createOne();

await expect([businessResignation, businessResignation2]).not.toBeAllAccepted();
await snoozeForBlock(1);
await expect(businessResignation.id).toBeForged();
await expect(businessResignation2.id).not.toBeForged();
});
});

Expand Down
Loading

0 comments on commit 8e5475d

Please sign in to comment.