@arkecosystem/typescript-crypto 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.editorconfig +16 -0
- package/.eslintrc.js +12 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +24 -0
- package/.github/workflows/ci.yml +36 -0
- package/.github/workflows/publish.yml +56 -0
- package/.vscode/settings.json +2 -0
- package/README.md +31 -0
- package/dist/configuration/Network.d.ts +7 -0
- package/dist/configuration/Network.d.ts.map +1 -0
- package/dist/configuration/Network.js +12 -0
- package/dist/configuration/index.d.ts +2 -0
- package/dist/configuration/index.d.ts.map +1 -0
- package/dist/configuration/index.js +1 -0
- package/dist/enums/AbiFunction.d.ts +10 -0
- package/dist/enums/AbiFunction.d.ts.map +1 -0
- package/dist/enums/AbiFunction.js +10 -0
- package/dist/enums/Constants.d.ts +5 -0
- package/dist/enums/Constants.d.ts.map +1 -0
- package/dist/enums/Constants.js +5 -0
- package/dist/enums/ContractAbiType.d.ts +7 -0
- package/dist/enums/ContractAbiType.d.ts.map +1 -0
- package/dist/enums/ContractAbiType.js +7 -0
- package/dist/enums/ContractAddresses.d.ts +6 -0
- package/dist/enums/ContractAddresses.d.ts.map +1 -0
- package/dist/enums/ContractAddresses.js +6 -0
- package/dist/enums/index.d.ts +5 -0
- package/dist/enums/index.d.ts.map +1 -0
- package/dist/enums/index.js +4 -0
- package/dist/exceptions/InvalidUsernameException.d.ts +4 -0
- package/dist/exceptions/InvalidUsernameException.d.ts.map +1 -0
- package/dist/exceptions/InvalidUsernameException.js +6 -0
- package/dist/exceptions/index.d.ts +2 -0
- package/dist/exceptions/index.d.ts.map +1 -0
- package/dist/exceptions/index.js +1 -0
- package/dist/identities/Address.d.ts +7 -0
- package/dist/identities/Address.d.ts.map +1 -0
- package/dist/identities/Address.js +15 -0
- package/dist/identities/PrivateKey.d.ts +16 -0
- package/dist/identities/PrivateKey.d.ts.map +1 -0
- package/dist/identities/PrivateKey.js +31 -0
- package/dist/identities/PublicKey.d.ts +8 -0
- package/dist/identities/PublicKey.d.ts.map +1 -0
- package/dist/identities/PublicKey.js +24 -0
- package/dist/identities/WIF.d.ts +4 -0
- package/dist/identities/WIF.d.ts.map +1 -0
- package/dist/identities/WIF.js +13 -0
- package/dist/identities/index.d.ts +5 -0
- package/dist/identities/index.d.ts.map +1 -0
- package/dist/identities/index.js +4 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/networks/AbstractNetwork.d.ts +6 -0
- package/dist/networks/AbstractNetwork.d.ts.map +1 -0
- package/dist/networks/AbstractNetwork.js +2 -0
- package/dist/networks/Mainnet.d.ts +7 -0
- package/dist/networks/Mainnet.d.ts.map +1 -0
- package/dist/networks/Mainnet.js +12 -0
- package/dist/networks/Testnet.d.ts +7 -0
- package/dist/networks/Testnet.d.ts.map +1 -0
- package/dist/networks/Testnet.js +12 -0
- package/dist/networks/index.d.ts +4 -0
- package/dist/networks/index.d.ts.map +1 -0
- package/dist/networks/index.js +3 -0
- package/dist/transactions/Deserializer.d.ts +18 -0
- package/dist/transactions/Deserializer.d.ts.map +1 -0
- package/dist/transactions/Deserializer.js +106 -0
- package/dist/transactions/Serializer.d.ts +9 -0
- package/dist/transactions/Serializer.d.ts.map +1 -0
- package/dist/transactions/Serializer.js +16 -0
- package/dist/transactions/builders/AbstractTransactionBuilder.d.ts +17 -0
- package/dist/transactions/builders/AbstractTransactionBuilder.d.ts.map +1 -0
- package/dist/transactions/builders/AbstractTransactionBuilder.js +54 -0
- package/dist/transactions/builders/EvmCallBuilder.d.ts +9 -0
- package/dist/transactions/builders/EvmCallBuilder.d.ts.map +1 -0
- package/dist/transactions/builders/EvmCallBuilder.js +18 -0
- package/dist/transactions/builders/MultipaymentBuilder.d.ts +9 -0
- package/dist/transactions/builders/MultipaymentBuilder.d.ts.map +1 -0
- package/dist/transactions/builders/MultipaymentBuilder.js +25 -0
- package/dist/transactions/builders/TransferBuilder.d.ts +8 -0
- package/dist/transactions/builders/TransferBuilder.d.ts.map +1 -0
- package/dist/transactions/builders/TransferBuilder.js +15 -0
- package/dist/transactions/builders/UnvoteBuilder.d.ts +8 -0
- package/dist/transactions/builders/UnvoteBuilder.d.ts.map +1 -0
- package/dist/transactions/builders/UnvoteBuilder.js +15 -0
- package/dist/transactions/builders/UsernameRegistrationBuilder.d.ts +9 -0
- package/dist/transactions/builders/UsernameRegistrationBuilder.d.ts.map +1 -0
- package/dist/transactions/builders/UsernameRegistrationBuilder.js +22 -0
- package/dist/transactions/builders/UsernameResignationBuilder.d.ts +8 -0
- package/dist/transactions/builders/UsernameResignationBuilder.d.ts.map +1 -0
- package/dist/transactions/builders/UsernameResignationBuilder.js +15 -0
- package/dist/transactions/builders/ValidatorRegistrationBuilder.d.ts +9 -0
- package/dist/transactions/builders/ValidatorRegistrationBuilder.d.ts.map +1 -0
- package/dist/transactions/builders/ValidatorRegistrationBuilder.js +20 -0
- package/dist/transactions/builders/ValidatorResignationBuilder.d.ts +8 -0
- package/dist/transactions/builders/ValidatorResignationBuilder.d.ts.map +1 -0
- package/dist/transactions/builders/ValidatorResignationBuilder.js +15 -0
- package/dist/transactions/builders/VoteBuilder.d.ts +9 -0
- package/dist/transactions/builders/VoteBuilder.d.ts.map +1 -0
- package/dist/transactions/builders/VoteBuilder.js +20 -0
- package/dist/transactions/builders/index.d.ts +11 -0
- package/dist/transactions/builders/index.d.ts.map +1 -0
- package/dist/transactions/builders/index.js +10 -0
- package/dist/transactions/index.d.ts +5 -0
- package/dist/transactions/index.d.ts.map +1 -0
- package/dist/transactions/index.js +4 -0
- package/dist/transactions/types/AbstractTransaction.d.ts +22 -0
- package/dist/transactions/types/AbstractTransaction.d.ts.map +1 -0
- package/dist/transactions/types/AbstractTransaction.js +79 -0
- package/dist/transactions/types/EvmCall.d.ts +8 -0
- package/dist/transactions/types/EvmCall.d.ts.map +1 -0
- package/dist/transactions/types/EvmCall.js +14 -0
- package/dist/transactions/types/Multipayment.d.ts +9 -0
- package/dist/transactions/types/Multipayment.d.ts.map +1 -0
- package/dist/transactions/types/Multipayment.js +38 -0
- package/dist/transactions/types/Transfer.d.ts +8 -0
- package/dist/transactions/types/Transfer.d.ts.map +1 -0
- package/dist/transactions/types/Transfer.js +14 -0
- package/dist/transactions/types/Unvote.d.ts +8 -0
- package/dist/transactions/types/Unvote.d.ts.map +1 -0
- package/dist/transactions/types/Unvote.js +16 -0
- package/dist/transactions/types/UsernameRegistration.d.ts +9 -0
- package/dist/transactions/types/UsernameRegistration.d.ts.map +1 -0
- package/dist/transactions/types/UsernameRegistration.js +33 -0
- package/dist/transactions/types/UsernameResignation.d.ts +8 -0
- package/dist/transactions/types/UsernameResignation.d.ts.map +1 -0
- package/dist/transactions/types/UsernameResignation.js +16 -0
- package/dist/transactions/types/ValidatorRegistration.d.ts +9 -0
- package/dist/transactions/types/ValidatorRegistration.d.ts.map +1 -0
- package/dist/transactions/types/ValidatorRegistration.js +33 -0
- package/dist/transactions/types/ValidatorResignation.d.ts +8 -0
- package/dist/transactions/types/ValidatorResignation.d.ts.map +1 -0
- package/dist/transactions/types/ValidatorResignation.js +16 -0
- package/dist/transactions/types/Vote.d.ts +9 -0
- package/dist/transactions/types/Vote.d.ts.map +1 -0
- package/dist/transactions/types/Vote.js +31 -0
- package/dist/transactions/types/index.d.ts +11 -0
- package/dist/transactions/types/index.d.ts.map +1 -0
- package/dist/transactions/types/index.js +10 -0
- package/dist/types.d.ts +72 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +1 -0
- package/dist/utils/Abi/ArgumentDecoder.d.ts +10 -0
- package/dist/utils/Abi/ArgumentDecoder.d.ts.map +1 -0
- package/dist/utils/Abi/ArgumentDecoder.js +21 -0
- package/dist/utils/Abi/json/Abi.Consensus.json +1673 -0
- package/dist/utils/Abi/json/Abi.Multipayment.json +110 -0
- package/dist/utils/Abi/json/Abi.Usernames.json +900 -0
- package/dist/utils/AbiBase.d.ts +8 -0
- package/dist/utils/AbiBase.d.ts.map +1 -0
- package/dist/utils/AbiBase.js +25 -0
- package/dist/utils/AbiDecoder.d.ts +6 -0
- package/dist/utils/AbiDecoder.d.ts.map +1 -0
- package/dist/utils/AbiDecoder.js +14 -0
- package/dist/utils/AbiEncoder.d.ts +5 -0
- package/dist/utils/AbiEncoder.d.ts.map +1 -0
- package/dist/utils/AbiEncoder.js +6 -0
- package/dist/utils/Helpers.d.ts +19 -0
- package/dist/utils/Helpers.d.ts.map +1 -0
- package/dist/utils/Helpers.js +38 -0
- package/dist/utils/Message.d.ts +14 -0
- package/dist/utils/Message.d.ts.map +1 -0
- package/dist/utils/Message.js +43 -0
- package/dist/utils/Slot.d.ts +5 -0
- package/dist/utils/Slot.d.ts.map +1 -0
- package/dist/utils/Slot.js +9 -0
- package/dist/utils/TransactionUtils.d.ts +7 -0
- package/dist/utils/TransactionUtils.d.ts.map +1 -0
- package/dist/utils/TransactionUtils.js +35 -0
- package/dist/utils/UnitConverter.d.ts +8 -0
- package/dist/utils/UnitConverter.d.ts.map +1 -0
- package/dist/utils/UnitConverter.js +48 -0
- package/dist/utils/index.d.ts +9 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +8 -0
- package/jest.config.ts +14 -0
- package/package.json +59 -0
- package/prettier.config.js +8 -0
- package/src/configuration/Network.ts +18 -0
- package/src/configuration/index.ts +1 -0
- package/src/enums/AbiFunction.ts +9 -0
- package/src/enums/Constants.ts +4 -0
- package/src/enums/ContractAbiType.ts +6 -0
- package/src/enums/ContractAddresses.ts +5 -0
- package/src/enums/index.ts +4 -0
- package/src/exceptions/InvalidUsernameException.ts +6 -0
- package/src/exceptions/index.ts +1 -0
- package/src/identities/Address.ts +19 -0
- package/src/identities/PrivateKey.ts +49 -0
- package/src/identities/PublicKey.ts +28 -0
- package/src/identities/WIF.ts +16 -0
- package/src/identities/index.ts +4 -0
- package/src/index.ts +7 -0
- package/src/networks/AbstractNetwork.ts +7 -0
- package/src/networks/Mainnet.ts +15 -0
- package/src/networks/Testnet.ts +15 -0
- package/src/networks/index.ts +3 -0
- package/src/transactions/Deserializer.ts +140 -0
- package/src/transactions/Serializer.ts +24 -0
- package/src/transactions/builders/AbstractTransactionBuilder.ts +81 -0
- package/src/transactions/builders/EvmCallBuilder.ts +24 -0
- package/src/transactions/builders/MultipaymentBuilder.ts +37 -0
- package/src/transactions/builders/TransferBuilder.ts +22 -0
- package/src/transactions/builders/UnvoteBuilder.ts +21 -0
- package/src/transactions/builders/UsernameRegistrationBuilder.ts +35 -0
- package/src/transactions/builders/UsernameResignationBuilder.ts +21 -0
- package/src/transactions/builders/ValidatorRegistrationBuilder.ts +32 -0
- package/src/transactions/builders/ValidatorResignationBuilder.ts +21 -0
- package/src/transactions/builders/VoteBuilder.ts +29 -0
- package/src/transactions/builders/index.ts +10 -0
- package/src/transactions/index.ts +4 -0
- package/src/transactions/types/AbstractTransaction.ts +118 -0
- package/src/transactions/types/EvmCall.ts +22 -0
- package/src/transactions/types/Multipayment.ts +51 -0
- package/src/transactions/types/Transfer.ts +22 -0
- package/src/transactions/types/Unvote.ts +24 -0
- package/src/transactions/types/UsernameRegistration.ts +44 -0
- package/src/transactions/types/UsernameResignation.ts +24 -0
- package/src/transactions/types/ValidatorRegistration.ts +44 -0
- package/src/transactions/types/ValidatorResignation.ts +24 -0
- package/src/transactions/types/Vote.ts +42 -0
- package/src/transactions/types/index.ts +10 -0
- package/src/types.ts +86 -0
- package/src/utils/Abi/ArgumentDecoder.ts +29 -0
- package/src/utils/Abi/json/Abi.Consensus.json +1673 -0
- package/src/utils/Abi/json/Abi.Multipayment.json +110 -0
- package/src/utils/Abi/json/Abi.Usernames.json +900 -0
- package/src/utils/AbiBase.ts +32 -0
- package/src/utils/AbiDecoder.ts +19 -0
- package/src/utils/AbiEncoder.ts +7 -0
- package/src/utils/Helpers.ts +46 -0
- package/src/utils/Message.ts +63 -0
- package/src/utils/Slot.ts +11 -0
- package/src/utils/TransactionUtils.ts +43 -0
- package/src/utils/UnitConverter.ts +57 -0
- package/src/utils/index.ts +8 -0
- package/tests/fixtures/global.json +10 -0
- package/tests/fixtures/identity.json +11 -0
- package/tests/fixtures/message-sign.json +5 -0
- package/tests/fixtures/sign-compact.json +10 -0
- package/tests/fixtures/transactions/evm-sign.json +18 -0
- package/tests/fixtures/transactions/multipayment-empty.json +18 -0
- package/tests/fixtures/transactions/multipayment-single.json +18 -0
- package/tests/fixtures/transactions/multipayment.json +18 -0
- package/tests/fixtures/transactions/transfer-0.json +18 -0
- package/tests/fixtures/transactions/transfer-large-amount.json +18 -0
- package/tests/fixtures/transactions/transfer.json +18 -0
- package/tests/fixtures/transactions/unvote.json +18 -0
- package/tests/fixtures/transactions/username-registration.json +18 -0
- package/tests/fixtures/transactions/username-resignation.json +18 -0
- package/tests/fixtures/transactions/validator-registration.json +18 -0
- package/tests/fixtures/transactions/validator-resignation.json +18 -0
- package/tests/fixtures/transactions/vote.json +18 -0
- package/tests/unit/identities/Address.test.ts +26 -0
- package/tests/unit/identities/PrivateKey.test.ts +36 -0
- package/tests/unit/identities/PublicKey.test.ts +39 -0
- package/tests/unit/identities/WIF.test.ts +8 -0
- package/tests/unit/transactions/Deserializer.test.ts +138 -0
- package/tests/unit/transactions/Serializer.test.ts +9 -0
- package/tests/unit/transactions/builders/EvmCallBuilder.test.ts +49 -0
- package/tests/unit/transactions/builders/MultipaymentBuilder.test.ts +99 -0
- package/tests/unit/transactions/builders/TransferBuilder.test.ts +73 -0
- package/tests/unit/transactions/builders/UnvoteBuilder.test.ts +47 -0
- package/tests/unit/transactions/builders/UsernameRegistrationBuilder.test.ts +54 -0
- package/tests/unit/transactions/builders/UsernameResignationBuilder.test.ts +48 -0
- package/tests/unit/transactions/builders/ValidatorRegistrationBuilder.test.ts +51 -0
- package/tests/unit/transactions/builders/ValidatorResignationBuilder.test.ts +48 -0
- package/tests/unit/transactions/builders/VoteBuilder.test.ts +48 -0
- package/tests/unit/transactions/types/AbstractTransaction.test.ts +145 -0
- package/tests/unit/utils/Abi/ArgumentDecoder.test.ts +55 -0
- package/tests/unit/utils/AbiDecoder.test.ts +44 -0
- package/tests/unit/utils/AbiEncoder.test.ts +30 -0
- package/tests/unit/utils/Helpers.test.ts +120 -0
- package/tests/unit/utils/Message.test.ts +104 -0
- package/tests/unit/utils/Slot.test.ts +69 -0
- package/tests/unit/utils/TransactionUtils.test.ts +31 -0
- package/tests/unit/utils/UnitConverter.test.ts +71 -0
- package/tsconfig.json +20 -0
@@ -0,0 +1,36 @@
|
|
1
|
+
import fixtureIdentity from "@tests/fixtures/identity.json";
|
2
|
+
import fixtureSignCompact from "@tests/fixtures/sign-compact.json";
|
3
|
+
import { PrivateKey } from "@/identities/PrivateKey";
|
4
|
+
|
5
|
+
it('should parse the private key from passphrase', () => {
|
6
|
+
const actual = PrivateKey.fromPassphrase(fixtureIdentity.passphrase);
|
7
|
+
|
8
|
+
expect(actual.privateKey).toEqual(fixtureIdentity.data.privateKey);
|
9
|
+
});
|
10
|
+
|
11
|
+
it('should parse the private key from hex', () => {
|
12
|
+
const actual = PrivateKey.fromHex(fixtureIdentity.data.privateKey);
|
13
|
+
|
14
|
+
expect(actual.privateKey).toEqual(fixtureIdentity.data.privateKey);
|
15
|
+
});
|
16
|
+
|
17
|
+
it('should parse the private key from wif', () => {
|
18
|
+
const actual = PrivateKey.fromWif(fixtureIdentity.data.wif);
|
19
|
+
|
20
|
+
expect(actual.privateKey).toEqual(fixtureIdentity.data.privateKey);
|
21
|
+
});
|
22
|
+
|
23
|
+
it('should parse the private key from wif', () => {
|
24
|
+
const actual = PrivateKey.fromWif(fixtureIdentity.data.wif);
|
25
|
+
|
26
|
+
expect(actual.privateKey).toEqual(fixtureIdentity.data.privateKey);
|
27
|
+
});
|
28
|
+
|
29
|
+
it('should sign compact correctly', async () => {
|
30
|
+
const privateKey = PrivateKey.fromPassphrase(fixtureSignCompact.passphrase);
|
31
|
+
const signature = await privateKey.sign(fixtureSignCompact.data.message);
|
32
|
+
|
33
|
+
expect(signature.v).toBe(fixtureSignCompact.data.v);
|
34
|
+
expect(signature.r).toBe(fixtureSignCompact.data.r);
|
35
|
+
expect(signature.s).toBe(fixtureSignCompact.data.s);
|
36
|
+
});
|
@@ -0,0 +1,39 @@
|
|
1
|
+
import fixture from "@tests/fixtures/identity.json";
|
2
|
+
import fixtureTransaction from "@tests/fixtures/transactions/transfer.json";
|
3
|
+
|
4
|
+
import { PublicKey } from "@/identities/PublicKey";
|
5
|
+
import { TransactionUtils } from "@/utils/TransactionUtils";
|
6
|
+
|
7
|
+
it('should get the address from passphrase', () => {
|
8
|
+
const actual = PublicKey.fromPassphrase(fixture.passphrase);
|
9
|
+
|
10
|
+
expect(actual.publicKey).toEqual(fixture.data.publicKey);
|
11
|
+
});
|
12
|
+
|
13
|
+
it('should get the address from hex', () => {
|
14
|
+
const actual = PublicKey.fromHex(fixture.data.publicKey);
|
15
|
+
|
16
|
+
expect(actual.publicKey).toEqual(fixture.data.publicKey);
|
17
|
+
});
|
18
|
+
|
19
|
+
it('should recover a public key', () => {
|
20
|
+
const hash = TransactionUtils.toHash(fixtureTransaction.data, true);
|
21
|
+
const v = fixtureTransaction.data.v - 27;
|
22
|
+
const r = BigInt(`0x${fixtureTransaction.data.r}`);
|
23
|
+
const s = BigInt(`0x${fixtureTransaction.data.s}`);
|
24
|
+
|
25
|
+
const actual = PublicKey.recover(Buffer.from(hash, 'hex'), r, s, v);
|
26
|
+
|
27
|
+
expect(actual.publicKey).toEqual(fixture.data.publicKey);
|
28
|
+
});
|
29
|
+
|
30
|
+
it('should throw error with invalid recovery id', () => {
|
31
|
+
const hash = TransactionUtils.toHash(fixtureTransaction.data, true);
|
32
|
+
const r = BigInt(`0x${fixtureTransaction.data.r}`);
|
33
|
+
const s = BigInt(`0x${fixtureTransaction.data.s}`);
|
34
|
+
|
35
|
+
expect(() => PublicKey.recover(Buffer.from(hash, 'hex'), r, s, 4)).toThrow("recovery id invalid");
|
36
|
+
expect(() => PublicKey.recover(Buffer.from(hash, 'hex'), r, s, 5)).toThrow("recovery id invalid");
|
37
|
+
expect(() => PublicKey.recover(Buffer.from(hash, 'hex'), r, s, 26)).toThrow("recovery id invalid");
|
38
|
+
expect(() => PublicKey.recover(Buffer.from(hash, 'hex'), r, s, 27)).toThrow("recovery id invalid");
|
39
|
+
});
|
@@ -0,0 +1,138 @@
|
|
1
|
+
import { Deserializer } from "@/transactions/Deserializer";
|
2
|
+
import { EvmCall, Multipayment, Unvote, UsernameRegistration, UsernameResignation, ValidatorRegistration, ValidatorResignation, Vote } from "@/transactions/types";
|
3
|
+
import { Transfer } from "@/transactions/types/Transfer";
|
4
|
+
import fixtureTransfer from "@tests/fixtures/transactions/transfer.json";
|
5
|
+
|
6
|
+
function assertDeserialized(fixture: any, keys: string[]) {
|
7
|
+
const deserializer = Deserializer.new(fixture['serialized'])
|
8
|
+
const transaction = deserializer.deserialize()
|
9
|
+
for (const key in keys) {
|
10
|
+
try {
|
11
|
+
expect(transaction.data[key]).toEqual(fixture['data'][key])
|
12
|
+
} catch (e) {
|
13
|
+
console.log(`Mismatch in ${key}`)
|
14
|
+
|
15
|
+
throw e
|
16
|
+
}
|
17
|
+
}
|
18
|
+
|
19
|
+
expect(transaction.serialize().toString('binary')).toEqual(fixture['serialized']);
|
20
|
+
expect(transaction.verify()).toBe(true);
|
21
|
+
|
22
|
+
return transaction
|
23
|
+
}
|
24
|
+
|
25
|
+
const getFixture = async (name: string) => {
|
26
|
+
return (await import(`@tests/fixtures/transactions/${name}.json`)).default;
|
27
|
+
};
|
28
|
+
|
29
|
+
it('should deserialize transfer', () => {
|
30
|
+
const transaction = assertDeserialized(fixtureTransfer, ['id', 'nonce', 'gasPrice', 'gasLimit', 'value', 'v', 'r', 's']);
|
31
|
+
|
32
|
+
expect(transaction).toBeInstanceOf(Transfer);
|
33
|
+
expect(transaction.data['value']).toEqual('100000000')
|
34
|
+
});
|
35
|
+
|
36
|
+
it('should deserialize a transfer signed with a passphrase', async () => {
|
37
|
+
const fixture = await getFixture('transfer');
|
38
|
+
|
39
|
+
const transaction = assertDeserialized(fixture, ['id', 'nonce', 'gasPrice', 'gasLimit', 'value', 'v', 'r', 's']);
|
40
|
+
|
41
|
+
expect(transaction).toBeInstanceOf(Transfer);
|
42
|
+
});
|
43
|
+
|
44
|
+
it('should deserialize a transfer signed with a passphrase with 0 value', async () => {
|
45
|
+
const fixture = await getFixture('transfer-0');
|
46
|
+
|
47
|
+
const transaction = assertDeserialized(fixture, ['id', 'nonce', 'gasPrice', 'gasLimit', 'value', 'v', 'r', 's']);
|
48
|
+
|
49
|
+
expect(transaction).toBeInstanceOf(EvmCall);
|
50
|
+
});
|
51
|
+
|
52
|
+
it('should deserialize a vote signed with a passphrase', async () => {
|
53
|
+
const fixture = await getFixture('vote');
|
54
|
+
|
55
|
+
const transaction = assertDeserialized(fixture, ['id', 'nonce', 'gasPrice', 'gasLimit', 'value', 'v', 'r', 's']);
|
56
|
+
|
57
|
+
expect(transaction.data['vote']).toEqual('0xC3bBE9B1CeE1ff85Ad72b87414B0E9B7F2366763');
|
58
|
+
|
59
|
+
expect(transaction.data['id']).toEqual(fixture['data']['id']);
|
60
|
+
|
61
|
+
expect(transaction).toBeInstanceOf(Vote);
|
62
|
+
});
|
63
|
+
|
64
|
+
it('should deserialize a unvote signed with a passphrase', async () => {
|
65
|
+
const fixture = await getFixture('unvote');
|
66
|
+
|
67
|
+
const transaction = assertDeserialized(fixture, ['id', 'nonce', 'gasPrice', 'gasLimit', 'value', 'v', 'r', 's']);
|
68
|
+
|
69
|
+
expect(transaction).toBeInstanceOf(Unvote);
|
70
|
+
});
|
71
|
+
|
72
|
+
it('should deserialize a validator registration signed with a passphrase', async () => {
|
73
|
+
const fixture = await getFixture('validator-registration');
|
74
|
+
|
75
|
+
const transaction = assertDeserialized(fixture, ['id', 'nonce', 'gasPrice', 'gasLimit', 'value', 'v', 'r', 's']);
|
76
|
+
|
77
|
+
expect(transaction).toBeInstanceOf(ValidatorRegistration);
|
78
|
+
});
|
79
|
+
|
80
|
+
it('should deserialize a validator resignation signed with a passphrase', async () => {
|
81
|
+
const fixture = await getFixture('validator-resignation');
|
82
|
+
|
83
|
+
const transaction = assertDeserialized(fixture, ['id', 'nonce', 'gasPrice', 'gasLimit', 'value', 'v', 'r', 's']);
|
84
|
+
|
85
|
+
expect(transaction).toBeInstanceOf(ValidatorResignation);
|
86
|
+
});
|
87
|
+
|
88
|
+
it('should deserialize a username registration signed with a passphrase', async () => {
|
89
|
+
const fixture = await getFixture('username-registration');
|
90
|
+
|
91
|
+
const transaction = assertDeserialized(fixture, ['id', 'nonce', 'gasPrice', 'gasLimit', 'value', 'v', 'r', 's']);
|
92
|
+
|
93
|
+
expect(transaction).toBeInstanceOf(UsernameRegistration);
|
94
|
+
});
|
95
|
+
|
96
|
+
it('should deserialize a username resignation signed with a passphrase', async () => {
|
97
|
+
const fixture = await getFixture('username-resignation');
|
98
|
+
|
99
|
+
const transaction = assertDeserialized(fixture, ['id', 'nonce', 'gasPrice', 'gasLimit', 'value', 'v', 'r', 's']);
|
100
|
+
|
101
|
+
expect(transaction).toBeInstanceOf(UsernameResignation);
|
102
|
+
});
|
103
|
+
|
104
|
+
it('should deserialize a multipayment signed with a passphrase', async () => {
|
105
|
+
const fixture = await getFixture('multipayment');
|
106
|
+
|
107
|
+
const transaction = assertDeserialized(fixture, ['id', 'nonce', 'gasPrice', 'gasLimit', 'value', 'v', 'r', 's']);
|
108
|
+
|
109
|
+
expect(transaction).toBeInstanceOf(Multipayment);
|
110
|
+
});
|
111
|
+
|
112
|
+
it('should parse number', () => {
|
113
|
+
expect(Deserializer.parseNumber('0x01')).toEqual(1)
|
114
|
+
expect(Deserializer.parseNumber('0x0100')).toEqual(256)
|
115
|
+
expect(Deserializer.parseNumber('0x010000')).toEqual(65536);
|
116
|
+
expect(Deserializer.parseNumber('0x')).toEqual(0);
|
117
|
+
});
|
118
|
+
|
119
|
+
it('should parse hex', () => {
|
120
|
+
expect(Deserializer.parseHex('0x01')).toEqual('01');
|
121
|
+
expect(Deserializer.parseHex('0x0100')).toEqual('0100');
|
122
|
+
expect(Deserializer.parseHex('0x010000')).toEqual('010000');
|
123
|
+
expect(Deserializer.parseHex('0x')).toEqual('');
|
124
|
+
expect(Deserializer.parseHex('0x52B7D2DCC80CD2E4000000')).toEqual('52B7D2DCC80CD2E4000000');
|
125
|
+
});
|
126
|
+
|
127
|
+
it('should parse big_number', () => {
|
128
|
+
expect(Deserializer.parseBigNumber('0x01')).toEqual('1');
|
129
|
+
expect(Deserializer.parseBigNumber('0x0100')).toEqual('256');
|
130
|
+
expect(Deserializer.parseBigNumber('0x010000')).toEqual('65536');
|
131
|
+
expect(Deserializer.parseBigNumber('0x')).toEqual('0');
|
132
|
+
expect(Deserializer.parseBigNumber('0x52B7D2DCC80CD2E4000000')).toEqual('100000000000000000000000000');
|
133
|
+
});
|
134
|
+
|
135
|
+
it('should parse address', () => {
|
136
|
+
expect(Deserializer.parseAddress('0x52B7D2DCC80CD2E4000000')).toEqual('0x52B7D2DCC80CD2E4000000');
|
137
|
+
expect(Deserializer.parseAddress('0x')).toBe(undefined);
|
138
|
+
});
|
@@ -0,0 +1,9 @@
|
|
1
|
+
import fixtureTransfer from "@tests/fixtures/transactions/transfer.json";
|
2
|
+
|
3
|
+
import { Transfer } from "@/transactions/types/Transfer";
|
4
|
+
|
5
|
+
it("should serialize a transfer transaction", () => {
|
6
|
+
const transaction = new Transfer(fixtureTransfer.data);
|
7
|
+
|
8
|
+
expect(fixtureTransfer["serialized"]).toEqual(transaction.serialize().toString("binary"));
|
9
|
+
});
|
@@ -0,0 +1,49 @@
|
|
1
|
+
import fixture from "@tests/fixtures/transactions/evm-sign.json";
|
2
|
+
import identityFixture from "@tests/fixtures/identity.json";
|
3
|
+
|
4
|
+
import { EvmCallBuilder } from "@/transactions/builders/EvmCallBuilder";
|
5
|
+
|
6
|
+
it("should build a transaction", async () => {
|
7
|
+
const transaction = (
|
8
|
+
await EvmCallBuilder.new()
|
9
|
+
.payload(fixture.data.data)
|
10
|
+
.recipientAddress(fixture.data.recipientAddress)
|
11
|
+
.nonce(fixture.data.nonce)
|
12
|
+
.gasPrice(fixture.data.gasPrice)
|
13
|
+
.gasLimit(fixture.data.gasLimit)
|
14
|
+
.network(fixture.data.network)
|
15
|
+
.sign(identityFixture.passphrase)
|
16
|
+
).transaction;
|
17
|
+
|
18
|
+
expect(transaction.data.gasPrice).toBe(fixture.data.gasPrice);
|
19
|
+
expect(transaction.data.nonce).toBe(fixture.data.nonce);
|
20
|
+
expect(transaction.data.network).toBe(fixture.data.network);
|
21
|
+
expect(transaction.data.gasLimit).toBe(fixture.data.gasLimit);
|
22
|
+
expect(transaction.data.recipientAddress).toBe(fixture.data.recipientAddress);
|
23
|
+
expect(transaction.data.value).toBe(fixture.data.value);
|
24
|
+
expect(transaction.data.v).toBe(fixture.data.v);
|
25
|
+
expect(transaction.data.r).toBe(fixture.data.r);
|
26
|
+
expect(transaction.data.s).toBe(fixture.data.s);
|
27
|
+
expect(transaction.data.id).toBe(fixture.data.id);
|
28
|
+
|
29
|
+
expect(transaction.serialize().toString("binary")).toEqual(fixture.serialized);
|
30
|
+
expect(transaction.verify()).toBe(true);
|
31
|
+
});
|
32
|
+
|
33
|
+
it("should sign a transaction", async () => {
|
34
|
+
const transaction = (await EvmCallBuilder.new(fixture.data).sign(identityFixture.passphrase)).transaction;
|
35
|
+
|
36
|
+
expect(transaction.data.gasPrice).toBe(fixture.data.gasPrice);
|
37
|
+
expect(transaction.data.nonce).toBe(fixture.data.nonce);
|
38
|
+
expect(transaction.data.network).toBe(fixture.data.network);
|
39
|
+
expect(transaction.data.gasLimit).toBe(fixture.data.gasLimit);
|
40
|
+
expect(transaction.data.recipientAddress).toBe(fixture.data.recipientAddress);
|
41
|
+
expect(transaction.data.value).toBe(fixture.data.value);
|
42
|
+
expect(transaction.data.v).toBe(fixture.data.v);
|
43
|
+
expect(transaction.data.r).toBe(fixture.data.r);
|
44
|
+
expect(transaction.data.s).toBe(fixture.data.s);
|
45
|
+
expect(transaction.data.id).toBe(fixture.data.id);
|
46
|
+
|
47
|
+
expect(transaction.serialize().toString("binary")).toEqual(fixture.serialized);
|
48
|
+
expect(transaction.verify()).toBe(true);
|
49
|
+
});
|
@@ -0,0 +1,99 @@
|
|
1
|
+
import fixture from "@tests/fixtures/transactions/multipayment.json";
|
2
|
+
import fixtureEmpty from "@tests/fixtures/transactions/multipayment-empty.json";
|
3
|
+
import fixtureSingle from "@tests/fixtures/transactions/multipayment-single.json";
|
4
|
+
import identityFixture from "@tests/fixtures/identity.json";
|
5
|
+
|
6
|
+
import { MultipaymentBuilder } from "@/transactions/builders/MultipaymentBuilder";
|
7
|
+
|
8
|
+
it("should build a transaction", async () => {
|
9
|
+
const transaction = (
|
10
|
+
await MultipaymentBuilder.new()
|
11
|
+
.pay("0x6F0182a0cc707b055322CcF6d4CB6a5Aff1aEb22", "100000")
|
12
|
+
.pay("0xc3bbe9b1cee1ff85ad72b87414b0e9b7f2366763", "200000")
|
13
|
+
.gasPrice(fixture.data.gasPrice)
|
14
|
+
.gasLimit(fixture.data.gasLimit)
|
15
|
+
.network(fixture.data.network)
|
16
|
+
.sign(identityFixture.passphrase)
|
17
|
+
).transaction;
|
18
|
+
|
19
|
+
expect(transaction.data.gasPrice).toBe(fixture.data.gasPrice);
|
20
|
+
expect(transaction.data.nonce).toBe(fixture.data.nonce);
|
21
|
+
expect(transaction.data.network).toBe(fixture.data.network);
|
22
|
+
expect(transaction.data.gasLimit).toBe(fixture.data.gasLimit);
|
23
|
+
expect(transaction.data.recipientAddress).toBe(fixture.data.recipientAddress);
|
24
|
+
expect(transaction.data.value).toBe(fixture.data.value);
|
25
|
+
expect(transaction.data.v).toBe(fixture.data.v);
|
26
|
+
expect(transaction.data.r).toBe(fixture.data.r);
|
27
|
+
expect(transaction.data.s).toBe(fixture.data.s);
|
28
|
+
expect(transaction.data.id).toBe(fixture.data.id);
|
29
|
+
|
30
|
+
expect(transaction.serialize().toString("binary")).toEqual(fixture.serialized);
|
31
|
+
expect(transaction.verify()).toBe(true);
|
32
|
+
});
|
33
|
+
|
34
|
+
it("should sign a transaction", async () => {
|
35
|
+
const transaction = (await MultipaymentBuilder.new(fixture.data).sign(identityFixture.passphrase)).transaction;
|
36
|
+
|
37
|
+
expect(transaction.data.gasPrice).toBe(fixture.data.gasPrice);
|
38
|
+
expect(transaction.data.nonce).toBe(fixture.data.nonce);
|
39
|
+
expect(transaction.data.network).toBe(fixture.data.network);
|
40
|
+
expect(transaction.data.gasLimit).toBe(fixture.data.gasLimit);
|
41
|
+
expect(transaction.data.recipientAddress).toBe(fixture.data.recipientAddress);
|
42
|
+
expect(transaction.data.value).toBe(fixture.data.value);
|
43
|
+
expect(transaction.data.v).toBe(fixture.data.v);
|
44
|
+
expect(transaction.data.r).toBe(fixture.data.r);
|
45
|
+
expect(transaction.data.s).toBe(fixture.data.s);
|
46
|
+
expect(transaction.data.id).toBe(fixture.data.id);
|
47
|
+
|
48
|
+
expect(transaction.serialize().toString("binary")).toEqual(fixture.serialized);
|
49
|
+
expect(transaction.verify()).toBe(true);
|
50
|
+
});
|
51
|
+
|
52
|
+
it("should build a transaction with a single payment", async () => {
|
53
|
+
const transaction = (
|
54
|
+
await MultipaymentBuilder.new()
|
55
|
+
.pay("0x6F0182a0cc707b055322CcF6d4CB6a5Aff1aEb22", "100000")
|
56
|
+
.gasPrice(fixtureSingle.data.gasPrice)
|
57
|
+
.gasLimit(fixtureSingle.data.gasLimit)
|
58
|
+
.network(fixtureSingle.data.network)
|
59
|
+
.sign(identityFixture.passphrase)
|
60
|
+
).transaction;
|
61
|
+
|
62
|
+
expect(transaction.data.gasPrice).toBe(fixtureSingle.data.gasPrice);
|
63
|
+
expect(transaction.data.nonce).toBe(fixtureSingle.data.nonce);
|
64
|
+
expect(transaction.data.network).toBe(fixtureSingle.data.network);
|
65
|
+
expect(transaction.data.gasLimit).toBe(fixtureSingle.data.gasLimit);
|
66
|
+
expect(transaction.data.recipientAddress).toBe(fixtureSingle.data.recipientAddress);
|
67
|
+
expect(transaction.data.value).toBe(fixtureSingle.data.value);
|
68
|
+
expect(transaction.data.v).toBe(fixtureSingle.data.v);
|
69
|
+
expect(transaction.data.r).toBe(fixtureSingle.data.r);
|
70
|
+
expect(transaction.data.s).toBe(fixtureSingle.data.s);
|
71
|
+
expect(transaction.data.id).toBe(fixtureSingle.data.id);
|
72
|
+
|
73
|
+
expect(transaction.serialize().toString("binary")).toEqual(fixtureSingle.serialized);
|
74
|
+
expect(transaction.verify()).toBe(true);
|
75
|
+
});
|
76
|
+
|
77
|
+
it("should build a transaction with an empty payment", async () => {
|
78
|
+
const transaction = (
|
79
|
+
await MultipaymentBuilder.new()
|
80
|
+
.gasPrice(fixtureEmpty.data.gasPrice)
|
81
|
+
.gasLimit(fixtureEmpty.data.gasLimit)
|
82
|
+
.network(fixtureEmpty.data.network)
|
83
|
+
.sign(identityFixture.passphrase)
|
84
|
+
).transaction;
|
85
|
+
|
86
|
+
expect(transaction.data.gasPrice).toBe(fixtureEmpty.data.gasPrice);
|
87
|
+
expect(transaction.data.nonce).toBe(fixtureEmpty.data.nonce);
|
88
|
+
expect(transaction.data.network).toBe(fixtureEmpty.data.network);
|
89
|
+
expect(transaction.data.gasLimit).toBe(fixtureEmpty.data.gasLimit);
|
90
|
+
expect(transaction.data.recipientAddress).toBe(fixtureEmpty.data.recipientAddress);
|
91
|
+
expect(transaction.data.value).toBe(fixtureEmpty.data.value);
|
92
|
+
expect(transaction.data.v).toBe(fixtureEmpty.data.v);
|
93
|
+
expect(transaction.data.r).toBe(fixtureEmpty.data.r);
|
94
|
+
expect(transaction.data.s).toBe(fixtureEmpty.data.s);
|
95
|
+
expect(transaction.data.id).toBe(fixtureEmpty.data.id);
|
96
|
+
|
97
|
+
expect(transaction.serialize().toString("binary")).toEqual(fixtureEmpty.serialized);
|
98
|
+
expect(transaction.verify()).toBe(true);
|
99
|
+
});
|
@@ -0,0 +1,73 @@
|
|
1
|
+
import fixtureTransfer from "@tests/fixtures/transactions/transfer.json";
|
2
|
+
import fixtureTransferLargeAmount from "@tests/fixtures/transactions/transfer-large-amount.json";
|
3
|
+
import identityFixture from "@tests/fixtures/identity.json";
|
4
|
+
|
5
|
+
import { TransferBuilder } from "@/transactions/builders/TransferBuilder";
|
6
|
+
|
7
|
+
it("should build a transaction", async () => {
|
8
|
+
const transaction = (await TransferBuilder.new()
|
9
|
+
.value(fixtureTransfer.data.value)
|
10
|
+
.recipientAddress(fixtureTransfer.data.recipientAddress)
|
11
|
+
.nonce(fixtureTransfer.data.nonce)
|
12
|
+
.gasPrice(fixtureTransfer.data.gasPrice)
|
13
|
+
.gasLimit(fixtureTransfer.data.gasLimit)
|
14
|
+
.network(fixtureTransfer.data.network)
|
15
|
+
.sign(identityFixture.passphrase)).transaction;
|
16
|
+
|
17
|
+
expect(transaction.data.gasPrice).toBe(fixtureTransfer.data.gasPrice);
|
18
|
+
expect(transaction.data.nonce).toBe(fixtureTransfer.data.nonce);
|
19
|
+
expect(transaction.data.network).toBe(fixtureTransfer.data.network);
|
20
|
+
expect(transaction.data.gasLimit).toBe(fixtureTransfer.data.gasLimit);
|
21
|
+
expect(transaction.data.recipientAddress).toBe(fixtureTransfer.data.recipientAddress);
|
22
|
+
expect(transaction.data.value).toBe(fixtureTransfer.data.value);
|
23
|
+
expect(transaction.data.v).toBe(fixtureTransfer.data.v);
|
24
|
+
expect(transaction.data.r).toBe(fixtureTransfer.data.r);
|
25
|
+
expect(transaction.data.s).toBe(fixtureTransfer.data.s);
|
26
|
+
expect(transaction.data.id).toBe(fixtureTransfer.data.id);
|
27
|
+
|
28
|
+
expect(transaction.serialize().toString("binary")).toEqual(fixtureTransfer.serialized);
|
29
|
+
expect(transaction.verify()).toBe(true);
|
30
|
+
});
|
31
|
+
|
32
|
+
it("should sign a transaction", async () => {
|
33
|
+
const transaction = (await TransferBuilder.new(fixtureTransfer.data).sign(identityFixture.passphrase)).transaction;
|
34
|
+
|
35
|
+
expect(transaction.data.gasPrice).toBe(fixtureTransfer.data.gasPrice);
|
36
|
+
expect(transaction.data.nonce).toBe(fixtureTransfer.data.nonce);
|
37
|
+
expect(transaction.data.network).toBe(fixtureTransfer.data.network);
|
38
|
+
expect(transaction.data.gasLimit).toBe(fixtureTransfer.data.gasLimit);
|
39
|
+
expect(transaction.data.recipientAddress).toBe(fixtureTransfer.data.recipientAddress);
|
40
|
+
expect(transaction.data.value).toBe(fixtureTransfer.data.value);
|
41
|
+
expect(transaction.data.v).toBe(fixtureTransfer.data.v);
|
42
|
+
expect(transaction.data.r).toBe(fixtureTransfer.data.r);
|
43
|
+
expect(transaction.data.s).toBe(fixtureTransfer.data.s);
|
44
|
+
expect(transaction.data.id).toBe(fixtureTransfer.data.id);
|
45
|
+
|
46
|
+
expect(transaction.serialize().toString("binary")).toEqual(fixtureTransfer.serialized);
|
47
|
+
expect(transaction.verify()).toBe(true);
|
48
|
+
});
|
49
|
+
|
50
|
+
it("should handle large amounts", async () => {
|
51
|
+
const transaction = (await TransferBuilder.new()
|
52
|
+
.value(fixtureTransferLargeAmount.data.value)
|
53
|
+
.recipientAddress(fixtureTransferLargeAmount.data.recipientAddress)
|
54
|
+
.nonce(fixtureTransferLargeAmount.data.nonce)
|
55
|
+
.gasPrice(fixtureTransferLargeAmount.data.gasPrice)
|
56
|
+
.gasLimit(fixtureTransferLargeAmount.data.gasLimit)
|
57
|
+
.network(fixtureTransferLargeAmount.data.network)
|
58
|
+
.sign(identityFixture.passphrase)).transaction;
|
59
|
+
|
60
|
+
expect(transaction.data.gasPrice).toBe(fixtureTransferLargeAmount.data.gasPrice);
|
61
|
+
expect(transaction.data.nonce).toBe(fixtureTransferLargeAmount.data.nonce);
|
62
|
+
expect(transaction.data.network).toBe(fixtureTransferLargeAmount.data.network);
|
63
|
+
expect(transaction.data.gasLimit).toBe(fixtureTransferLargeAmount.data.gasLimit);
|
64
|
+
expect(transaction.data.recipientAddress).toBe(fixtureTransferLargeAmount.data.recipientAddress);
|
65
|
+
expect(transaction.data.value).toBe(fixtureTransferLargeAmount.data.value);
|
66
|
+
expect(transaction.data.v).toBe(fixtureTransferLargeAmount.data.v);
|
67
|
+
expect(transaction.data.r).toBe(fixtureTransferLargeAmount.data.r);
|
68
|
+
expect(transaction.data.s).toBe(fixtureTransferLargeAmount.data.s);
|
69
|
+
expect(transaction.data.id).toBe(fixtureTransferLargeAmount.data.id);
|
70
|
+
|
71
|
+
expect(transaction.serialize().toString("binary")).toEqual(fixtureTransferLargeAmount.serialized);
|
72
|
+
expect(transaction.verify()).toBe(true);
|
73
|
+
});
|
@@ -0,0 +1,47 @@
|
|
1
|
+
import fixture from "@tests/fixtures/transactions/unvote.json";
|
2
|
+
import identityFixture from "@tests/fixtures/identity.json";
|
3
|
+
|
4
|
+
import { UnvoteBuilder } from "@/transactions/builders/UnvoteBuilder";
|
5
|
+
|
6
|
+
it("should build a transaction", async () => {
|
7
|
+
const transaction = (
|
8
|
+
await UnvoteBuilder.new()
|
9
|
+
.nonce(fixture.data.nonce)
|
10
|
+
.gasPrice(fixture.data.gasPrice)
|
11
|
+
.gasLimit(fixture.data.gasLimit)
|
12
|
+
.network(fixture.data.network)
|
13
|
+
.sign(identityFixture.passphrase)
|
14
|
+
).transaction;
|
15
|
+
|
16
|
+
expect(transaction.data.gasPrice).toBe(fixture.data.gasPrice);
|
17
|
+
expect(transaction.data.nonce).toBe(fixture.data.nonce);
|
18
|
+
expect(transaction.data.network).toBe(fixture.data.network);
|
19
|
+
expect(transaction.data.gasLimit).toBe(fixture.data.gasLimit);
|
20
|
+
expect(transaction.data.recipientAddress).toBe(fixture.data.recipientAddress);
|
21
|
+
expect(transaction.data.value).toBe(fixture.data.value);
|
22
|
+
expect(transaction.data.v).toBe(fixture.data.v);
|
23
|
+
expect(transaction.data.r).toBe(fixture.data.r);
|
24
|
+
expect(transaction.data.s).toBe(fixture.data.s);
|
25
|
+
expect(transaction.data.id).toBe(fixture.data.id);
|
26
|
+
|
27
|
+
expect(transaction.serialize().toString("binary")).toEqual(fixture.serialized);
|
28
|
+
expect(transaction.verify()).toBe(true);
|
29
|
+
});
|
30
|
+
|
31
|
+
it("should sign a transaction", async () => {
|
32
|
+
const transaction = (await UnvoteBuilder.new(fixture.data).sign(identityFixture.passphrase)).transaction;
|
33
|
+
|
34
|
+
expect(transaction.data.gasPrice).toBe(fixture.data.gasPrice);
|
35
|
+
expect(transaction.data.nonce).toBe(fixture.data.nonce);
|
36
|
+
expect(transaction.data.network).toBe(fixture.data.network);
|
37
|
+
expect(transaction.data.gasLimit).toBe(fixture.data.gasLimit);
|
38
|
+
expect(transaction.data.recipientAddress).toBe(fixture.data.recipientAddress);
|
39
|
+
expect(transaction.data.value).toBe(fixture.data.value);
|
40
|
+
expect(transaction.data.v).toBe(fixture.data.v);
|
41
|
+
expect(transaction.data.r).toBe(fixture.data.r);
|
42
|
+
expect(transaction.data.s).toBe(fixture.data.s);
|
43
|
+
expect(transaction.data.id).toBe(fixture.data.id);
|
44
|
+
|
45
|
+
expect(transaction.serialize().toString("binary")).toEqual(fixture.serialized);
|
46
|
+
expect(transaction.verify()).toBe(true);
|
47
|
+
});
|
@@ -0,0 +1,54 @@
|
|
1
|
+
import fixture from "@tests/fixtures/transactions/username-registration.json";
|
2
|
+
import identityFixture from "@tests/fixtures/identity.json";
|
3
|
+
|
4
|
+
import { InvalidUsernameException } from "@/exceptions/InvalidUsernameException";
|
5
|
+
import { UsernameRegistrationBuilder } from "@/transactions/builders/UsernameRegistrationBuilder";
|
6
|
+
|
7
|
+
it("should build a transaction", async () => {
|
8
|
+
const transaction = (
|
9
|
+
await UsernameRegistrationBuilder.new()
|
10
|
+
.username("fixture")
|
11
|
+
.nonce(fixture.data.nonce)
|
12
|
+
.gasPrice(fixture.data.gasPrice)
|
13
|
+
.gasLimit(fixture.data.gasLimit)
|
14
|
+
.network(fixture.data.network)
|
15
|
+
.sign(identityFixture.passphrase)
|
16
|
+
).transaction;
|
17
|
+
|
18
|
+
expect(transaction.data.gasPrice).toBe(fixture.data.gasPrice);
|
19
|
+
expect(transaction.data.nonce).toBe(fixture.data.nonce);
|
20
|
+
expect(transaction.data.network).toBe(fixture.data.network);
|
21
|
+
expect(transaction.data.gasLimit).toBe(fixture.data.gasLimit);
|
22
|
+
expect(transaction.data.recipientAddress).toBe(fixture.data.recipientAddress);
|
23
|
+
expect(transaction.data.value).toBe(fixture.data.value);
|
24
|
+
expect(transaction.data.v).toBe(fixture.data.v);
|
25
|
+
expect(transaction.data.r).toBe(fixture.data.r);
|
26
|
+
expect(transaction.data.s).toBe(fixture.data.s);
|
27
|
+
expect(transaction.data.id).toBe(fixture.data.id);
|
28
|
+
|
29
|
+
expect(transaction.serialize().toString("binary")).toEqual(fixture.serialized);
|
30
|
+
expect(transaction.verify()).toBe(true);
|
31
|
+
});
|
32
|
+
|
33
|
+
it("should sign a transaction", async () => {
|
34
|
+
const transaction = (await UsernameRegistrationBuilder.new(fixture.data).sign(identityFixture.passphrase))
|
35
|
+
.transaction;
|
36
|
+
|
37
|
+
expect(transaction.data.gasPrice).toBe(fixture.data.gasPrice);
|
38
|
+
expect(transaction.data.nonce).toBe(fixture.data.nonce);
|
39
|
+
expect(transaction.data.network).toBe(fixture.data.network);
|
40
|
+
expect(transaction.data.gasLimit).toBe(fixture.data.gasLimit);
|
41
|
+
expect(transaction.data.recipientAddress).toBe(fixture.data.recipientAddress);
|
42
|
+
expect(transaction.data.value).toBe(fixture.data.value);
|
43
|
+
expect(transaction.data.v).toBe(fixture.data.v);
|
44
|
+
expect(transaction.data.r).toBe(fixture.data.r);
|
45
|
+
expect(transaction.data.s).toBe(fixture.data.s);
|
46
|
+
expect(transaction.data.id).toBe(fixture.data.id);
|
47
|
+
|
48
|
+
expect(transaction.serialize().toString("binary")).toEqual(fixture.serialized);
|
49
|
+
expect(transaction.verify()).toBe(true);
|
50
|
+
});
|
51
|
+
|
52
|
+
it("should throw if username is invalid", async () => {
|
53
|
+
expect(() => UsernameRegistrationBuilder.new().username("invalid.username.too.long")).toThrow();
|
54
|
+
});
|
@@ -0,0 +1,48 @@
|
|
1
|
+
import fixture from "@tests/fixtures/transactions/username-resignation.json";
|
2
|
+
import identityFixture from "@tests/fixtures/identity.json";
|
3
|
+
|
4
|
+
import { UsernameResignationBuilder } from "@/transactions/builders/UsernameResignationBuilder";
|
5
|
+
|
6
|
+
it("should build a transaction", async () => {
|
7
|
+
const transaction = (
|
8
|
+
await UsernameResignationBuilder.new()
|
9
|
+
.nonce(fixture.data.nonce)
|
10
|
+
.gasPrice(fixture.data.gasPrice)
|
11
|
+
.gasLimit(fixture.data.gasLimit)
|
12
|
+
.network(fixture.data.network)
|
13
|
+
.sign(identityFixture.passphrase)
|
14
|
+
).transaction;
|
15
|
+
|
16
|
+
expect(transaction.data.gasPrice).toBe(fixture.data.gasPrice);
|
17
|
+
expect(transaction.data.nonce).toBe(fixture.data.nonce);
|
18
|
+
expect(transaction.data.network).toBe(fixture.data.network);
|
19
|
+
expect(transaction.data.gasLimit).toBe(fixture.data.gasLimit);
|
20
|
+
expect(transaction.data.recipientAddress).toBe(fixture.data.recipientAddress);
|
21
|
+
expect(transaction.data.value).toBe(fixture.data.value);
|
22
|
+
expect(transaction.data.v).toBe(fixture.data.v);
|
23
|
+
expect(transaction.data.r).toBe(fixture.data.r);
|
24
|
+
expect(transaction.data.s).toBe(fixture.data.s);
|
25
|
+
expect(transaction.data.id).toBe(fixture.data.id);
|
26
|
+
|
27
|
+
expect(transaction.serialize().toString("binary")).toEqual(fixture.serialized);
|
28
|
+
expect(transaction.verify()).toBe(true);
|
29
|
+
});
|
30
|
+
|
31
|
+
it("should sign a transaction", async () => {
|
32
|
+
const transaction = (await UsernameResignationBuilder.new(fixture.data).sign(identityFixture.passphrase))
|
33
|
+
.transaction;
|
34
|
+
|
35
|
+
expect(transaction.data.gasPrice).toBe(fixture.data.gasPrice);
|
36
|
+
expect(transaction.data.nonce).toBe(fixture.data.nonce);
|
37
|
+
expect(transaction.data.network).toBe(fixture.data.network);
|
38
|
+
expect(transaction.data.gasLimit).toBe(fixture.data.gasLimit);
|
39
|
+
expect(transaction.data.recipientAddress).toBe(fixture.data.recipientAddress);
|
40
|
+
expect(transaction.data.value).toBe(fixture.data.value);
|
41
|
+
expect(transaction.data.v).toBe(fixture.data.v);
|
42
|
+
expect(transaction.data.r).toBe(fixture.data.r);
|
43
|
+
expect(transaction.data.s).toBe(fixture.data.s);
|
44
|
+
expect(transaction.data.id).toBe(fixture.data.id);
|
45
|
+
|
46
|
+
expect(transaction.serialize().toString("binary")).toEqual(fixture.serialized);
|
47
|
+
expect(transaction.verify()).toBe(true);
|
48
|
+
});
|
@@ -0,0 +1,51 @@
|
|
1
|
+
import fixture from "@tests/fixtures/transactions/validator-registration.json";
|
2
|
+
import identityFixture from "@tests/fixtures/identity.json";
|
3
|
+
|
4
|
+
import { ValidatorRegistrationBuilder } from "@/transactions/builders/ValidatorRegistrationBuilder";
|
5
|
+
|
6
|
+
it("should build a transaction", async () => {
|
7
|
+
const transaction = (
|
8
|
+
await ValidatorRegistrationBuilder.new()
|
9
|
+
.validatorPublicKey(
|
10
|
+
"0x30954f46d6097a1d314e900e66e11e0dad0a57cd03e04ec99f0dedd1c765dcb11e6d7fa02e22cf40f9ee23d9cc1c0624",
|
11
|
+
)
|
12
|
+
.nonce(fixture.data.nonce)
|
13
|
+
.gasPrice(fixture.data.gasPrice)
|
14
|
+
.gasLimit(fixture.data.gasLimit)
|
15
|
+
.network(fixture.data.network)
|
16
|
+
.sign(identityFixture.passphrase)
|
17
|
+
).transaction;
|
18
|
+
|
19
|
+
expect(transaction.data.gasPrice).toBe(fixture.data.gasPrice);
|
20
|
+
expect(transaction.data.nonce).toBe(fixture.data.nonce);
|
21
|
+
expect(transaction.data.network).toBe(fixture.data.network);
|
22
|
+
expect(transaction.data.gasLimit).toBe(fixture.data.gasLimit);
|
23
|
+
expect(transaction.data.recipientAddress).toBe(fixture.data.recipientAddress);
|
24
|
+
expect(transaction.data.value).toBe(fixture.data.value);
|
25
|
+
expect(transaction.data.v).toBe(fixture.data.v);
|
26
|
+
expect(transaction.data.r).toBe(fixture.data.r);
|
27
|
+
expect(transaction.data.s).toBe(fixture.data.s);
|
28
|
+
expect(transaction.data.id).toBe(fixture.data.id);
|
29
|
+
|
30
|
+
expect(transaction.serialize().toString("binary")).toEqual(fixture.serialized);
|
31
|
+
expect(transaction.verify()).toBe(true);
|
32
|
+
});
|
33
|
+
|
34
|
+
it("should sign a transaction", async () => {
|
35
|
+
const transaction = (await ValidatorRegistrationBuilder.new(fixture.data).sign(identityFixture.passphrase))
|
36
|
+
.transaction;
|
37
|
+
|
38
|
+
expect(transaction.data.gasPrice).toBe(fixture.data.gasPrice);
|
39
|
+
expect(transaction.data.nonce).toBe(fixture.data.nonce);
|
40
|
+
expect(transaction.data.network).toBe(fixture.data.network);
|
41
|
+
expect(transaction.data.gasLimit).toBe(fixture.data.gasLimit);
|
42
|
+
expect(transaction.data.recipientAddress).toBe(fixture.data.recipientAddress);
|
43
|
+
expect(transaction.data.value).toBe(fixture.data.value);
|
44
|
+
expect(transaction.data.v).toBe(fixture.data.v);
|
45
|
+
expect(transaction.data.r).toBe(fixture.data.r);
|
46
|
+
expect(transaction.data.s).toBe(fixture.data.s);
|
47
|
+
expect(transaction.data.id).toBe(fixture.data.id);
|
48
|
+
|
49
|
+
expect(transaction.serialize().toString("binary")).toEqual(fixture.serialized);
|
50
|
+
expect(transaction.verify()).toBe(true);
|
51
|
+
});
|