@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,32 @@
|
|
1
|
+
import { ContractAbiType } from "@/enums/ContractAbiType";
|
2
|
+
import { Interface } from "ethers";
|
3
|
+
import ConsensusContract from "./Abi/json/Abi.Consensus.json";
|
4
|
+
import MultipaymentContract from "./Abi/json/Abi.Multipayment.json";
|
5
|
+
import UsernamesContract from "./Abi/json/Abi.Usernames.json";
|
6
|
+
|
7
|
+
export abstract class AbiBase {
|
8
|
+
protected interface: Interface;
|
9
|
+
|
10
|
+
constructor(type: ContractAbiType = ContractAbiType.CONSENSUS, customAbi?: string) {
|
11
|
+
const abi = this.contractAbi(type, customAbi);
|
12
|
+
|
13
|
+
this.interface = new Interface(JSON.parse(JSON.stringify(abi)).abi);
|
14
|
+
}
|
15
|
+
|
16
|
+
private contractAbi(type: ContractAbiType = ContractAbiType.CONSENSUS, customAbi?: any): object {
|
17
|
+
switch (type) {
|
18
|
+
case ContractAbiType.CONSENSUS:
|
19
|
+
return ConsensusContract;
|
20
|
+
case ContractAbiType.MULTIPAYMENT:
|
21
|
+
return MultipaymentContract;
|
22
|
+
case ContractAbiType.USERNAMES:
|
23
|
+
return UsernamesContract;
|
24
|
+
}
|
25
|
+
|
26
|
+
if (customAbi) {
|
27
|
+
return customAbi;
|
28
|
+
}
|
29
|
+
|
30
|
+
throw new Error("Invalid contract type");
|
31
|
+
}
|
32
|
+
}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
import { AbiResult } from "@/types";
|
2
|
+
import { AbiBase } from "./AbiBase";
|
3
|
+
import { Result } from "ethers";
|
4
|
+
|
5
|
+
export class AbiDecoder extends AbiBase {
|
6
|
+
decodeFunctionData(data: string): AbiResult {
|
7
|
+
if (!data.startsWith("0x")) {
|
8
|
+
data = "0x" + data;
|
9
|
+
}
|
10
|
+
|
11
|
+
const functionSelector = data.slice(0, 10);
|
12
|
+
const functionFragment = this.interface.getFunction(functionSelector);
|
13
|
+
|
14
|
+
return {
|
15
|
+
functionName: functionFragment!.name,
|
16
|
+
args: this.interface.decodeFunctionData(functionFragment!, data),
|
17
|
+
};
|
18
|
+
}
|
19
|
+
}
|
@@ -0,0 +1,46 @@
|
|
1
|
+
import { InvalidUsernameException } from "@/exceptions/InvalidUsernameException";
|
2
|
+
|
3
|
+
export class Helpers {
|
4
|
+
/**
|
5
|
+
* Validates a username based on specific rules.
|
6
|
+
* Based on https://github.com/ArkEcosystem/mainsail/blob/develop/contracts/src/usernames/UsernamesV1.sol#L101
|
7
|
+
*
|
8
|
+
* @param username The username to validate
|
9
|
+
* @returns true if the username is valid
|
10
|
+
* @throws InvalidUsernameException if the username is invalid
|
11
|
+
*/
|
12
|
+
public static isValidUsername(username: string): boolean {
|
13
|
+
if (username.length < 1 || username.length > 20) {
|
14
|
+
throw new InvalidUsernameException(
|
15
|
+
`Username must be between 1 and 20 characters long. Got ${username.length} characters.`,
|
16
|
+
);
|
17
|
+
}
|
18
|
+
|
19
|
+
// Only lowercase letters, numbers and underscores are allowed
|
20
|
+
if (/[^a-z0-9_]/.test(username)) {
|
21
|
+
throw new InvalidUsernameException("Username can only contain lowercase letters, numbers and underscores.");
|
22
|
+
}
|
23
|
+
|
24
|
+
// Cannot start or end with underscore
|
25
|
+
if (/^_|_$/.test(username)) {
|
26
|
+
throw new InvalidUsernameException("Username cannot start or end with an underscore.");
|
27
|
+
}
|
28
|
+
|
29
|
+
// Cannot contain two or more consecutive underscores
|
30
|
+
if (/__/.test(username)) {
|
31
|
+
throw new InvalidUsernameException("Username cannot contain consecutive underscores.");
|
32
|
+
}
|
33
|
+
|
34
|
+
return true;
|
35
|
+
}
|
36
|
+
|
37
|
+
/**
|
38
|
+
* Removes the leading '0x' from a hex string.
|
39
|
+
*
|
40
|
+
* @param hex The hex string to process
|
41
|
+
* @returns The hex string without the leading '0x'
|
42
|
+
*/
|
43
|
+
public static removeLeadingHexZero(hex: string): string {
|
44
|
+
return hex.replace(/^0x/, ""); // Using replace to only remove the prefix, not leading zeros
|
45
|
+
}
|
46
|
+
}
|
@@ -0,0 +1,63 @@
|
|
1
|
+
import { PrivateKey } from "@/identities/PrivateKey";
|
2
|
+
import { PublicKey } from "@/identities/PublicKey";
|
3
|
+
import { SignedMessage } from "@/types";
|
4
|
+
import { keccak256 } from "ethers";
|
5
|
+
// import { verify } from "tiny-secp256k1";
|
6
|
+
import { verify } from "@noble/secp256k1";
|
7
|
+
|
8
|
+
export class Message {
|
9
|
+
public publicKey: string;
|
10
|
+
public signature: string;
|
11
|
+
public message: string;
|
12
|
+
|
13
|
+
constructor(message: SignedMessage) {
|
14
|
+
this.publicKey = message.publicKey;
|
15
|
+
this.signature = message.signature;
|
16
|
+
this.message = message.message;
|
17
|
+
}
|
18
|
+
|
19
|
+
static new(message: SignedMessage): Message {
|
20
|
+
return new Message(message);
|
21
|
+
}
|
22
|
+
|
23
|
+
static async sign(message: string, passphrase: string): Promise<Message> {
|
24
|
+
const privateKey = PrivateKey.fromPassphrase(passphrase);
|
25
|
+
const publicKey = PublicKey.fromPassphrase(passphrase).publicKey;
|
26
|
+
|
27
|
+
const signature = await privateKey.sign(Buffer.from(message).toString("hex"));
|
28
|
+
|
29
|
+
return Message.new({
|
30
|
+
publicKey,
|
31
|
+
signature: signature.r + signature.s + Number(signature.v).toString(16),
|
32
|
+
message,
|
33
|
+
});
|
34
|
+
}
|
35
|
+
|
36
|
+
verify(): boolean {
|
37
|
+
const message = Buffer.from(keccak256(Buffer.from(this.message)).slice(2), "hex");
|
38
|
+
const signature = Buffer.from(this.signature.slice(0, 128), "hex");
|
39
|
+
const publicKey = Buffer.from(this.publicKey, "hex");
|
40
|
+
|
41
|
+
// const r = signature.subarray(0, 32).readBigInt64BE();
|
42
|
+
// const s = signature.subarray(32, 64).readBigInt64BE();
|
43
|
+
// const v = Number(signature.subarray(64, 66).toString("hex"));
|
44
|
+
|
45
|
+
return verify(signature, message, publicKey);
|
46
|
+
}
|
47
|
+
|
48
|
+
toString(): string {
|
49
|
+
return JSON.stringify(this.toJson());
|
50
|
+
}
|
51
|
+
|
52
|
+
toArray(): string[] {
|
53
|
+
return [this.publicKey, this.signature, this.message];
|
54
|
+
}
|
55
|
+
|
56
|
+
toJson(): SignedMessage {
|
57
|
+
return {
|
58
|
+
publicKey: this.publicKey,
|
59
|
+
signature: this.signature,
|
60
|
+
message: this.message,
|
61
|
+
};
|
62
|
+
}
|
63
|
+
}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import { Network } from "@/configuration/Network";
|
2
|
+
|
3
|
+
export class Slot {
|
4
|
+
static time(): number {
|
5
|
+
return Math.floor(Date.now() / 1000) - this.epoch();
|
6
|
+
}
|
7
|
+
|
8
|
+
static epoch(): number {
|
9
|
+
return Math.floor(new Date(Network.get().epoch()).getTime() / 1000);
|
10
|
+
}
|
11
|
+
}
|
@@ -0,0 +1,43 @@
|
|
1
|
+
import { encodeRlp, keccak256, toBeArray } from "ethers";
|
2
|
+
import { Constants } from "@/enums/Constants";
|
3
|
+
import { TransactionData } from "@/types";
|
4
|
+
|
5
|
+
export class TransactionUtils {
|
6
|
+
public static toBuffer(transaction: TransactionData, skipSignature: boolean = false): Buffer {
|
7
|
+
const fields = [
|
8
|
+
toBeArray(transaction['network'] ?? 0),
|
9
|
+
toBeArray(transaction['nonce'] ? transaction['nonce'] : 0),
|
10
|
+
toBeArray(0),
|
11
|
+
toBeArray(transaction['gasPrice'] ?? 0),
|
12
|
+
toBeArray(transaction['gasLimit'] ?? 0),
|
13
|
+
transaction['recipientAddress'] ?? '0x',
|
14
|
+
toBeArray(transaction['value'] ? transaction['value'] : 0),
|
15
|
+
transaction['data'] && transaction['data'].startsWith('0x')
|
16
|
+
? transaction['data']
|
17
|
+
: ('0x' + (transaction['data'] ?? '')),
|
18
|
+
[],
|
19
|
+
];
|
20
|
+
|
21
|
+
if (! skipSignature && transaction['v'] && transaction['r'] && transaction['s']) {
|
22
|
+
fields.push(toBeArray(transaction['v'] - Constants.ETHEREUM_RECOVERY_ID_OFFSET));
|
23
|
+
fields.push('0x' + transaction['r']);
|
24
|
+
fields.push('0x' + transaction['s']);
|
25
|
+
}
|
26
|
+
|
27
|
+
const encoded = encodeRlp(fields);
|
28
|
+
|
29
|
+
const payload = Constants.EIP_1559_PREFIX + encoded.substring(2);
|
30
|
+
|
31
|
+
return Buffer.from(payload);
|
32
|
+
}
|
33
|
+
|
34
|
+
public static toHash(transaction: TransactionData, skipSignature: boolean = false): string {
|
35
|
+
const encoding = this.toBuffer(transaction, skipSignature);
|
36
|
+
|
37
|
+
return keccak256('0x' + encoding.toString('binary')).substring(2);
|
38
|
+
}
|
39
|
+
|
40
|
+
public static getId(transaction: TransactionData): string {
|
41
|
+
return this.toHash(transaction, false);
|
42
|
+
}
|
43
|
+
}
|
@@ -0,0 +1,57 @@
|
|
1
|
+
import BigNumber from "bignumber.js";
|
2
|
+
|
3
|
+
const WEI_MULTIPLIER = 1;
|
4
|
+
const GWEI_MULTIPLIER = 1000000000; // 1e9
|
5
|
+
const ARK_MULTIPLIER = 1000000000000000000; // 1e18
|
6
|
+
|
7
|
+
export class UnitConverter {
|
8
|
+
static parseUnits(value: number|string, unit: string = 'ark'): BigNumber {
|
9
|
+
switch (unit.toLowerCase()) {
|
10
|
+
case 'wei':
|
11
|
+
return BigNumber(value).multipliedBy(WEI_MULTIPLIER);
|
12
|
+
case 'gwei':
|
13
|
+
return BigNumber(value).multipliedBy(GWEI_MULTIPLIER);
|
14
|
+
case 'ark':
|
15
|
+
return BigNumber(value).multipliedBy(ARK_MULTIPLIER);
|
16
|
+
default:
|
17
|
+
throw new Error(`Unsupported unit: ${unit}. Supported units are 'wei', 'gwei', and 'ark'.`);
|
18
|
+
}
|
19
|
+
}
|
20
|
+
|
21
|
+
static formatUnits(value: string, unit: string = 'ark'): number {
|
22
|
+
switch (unit.toLowerCase()) {
|
23
|
+
case 'wei':
|
24
|
+
return BigNumber(value).dividedBy(WEI_MULTIPLIER).toNumber();
|
25
|
+
case 'gwei':
|
26
|
+
return BigNumber(value).dividedBy(GWEI_MULTIPLIER).toNumber();
|
27
|
+
case 'ark':
|
28
|
+
return BigNumber(value).dividedBy(ARK_MULTIPLIER).toNumber();
|
29
|
+
default:
|
30
|
+
throw new Error(`Unsupported unit: ${unit}. Supported units are 'wei', 'gwei', and 'ark'.`);
|
31
|
+
}
|
32
|
+
}
|
33
|
+
|
34
|
+
static weiToArk(value: number|string, suffix?: string): string {
|
35
|
+
const convertedValue = new BigNumber(this.formatUnits(this.parseUnits(value, 'wei').toString(), 'ark'))
|
36
|
+
.decimalPlaces(18)
|
37
|
+
.toFixed();
|
38
|
+
|
39
|
+
if (suffix) {
|
40
|
+
return convertedValue + ' ' + suffix;
|
41
|
+
}
|
42
|
+
|
43
|
+
return convertedValue;
|
44
|
+
}
|
45
|
+
|
46
|
+
static gweiToArk(value: number|string, suffix?: string): string {
|
47
|
+
const convertedValue = new BigNumber(this.formatUnits(this.parseUnits(value, 'gwei').toString(), 'ark'))
|
48
|
+
.decimalPlaces(18)
|
49
|
+
.toFixed();
|
50
|
+
|
51
|
+
if (suffix) {
|
52
|
+
return convertedValue + ' ' + suffix;
|
53
|
+
}
|
54
|
+
|
55
|
+
return convertedValue;
|
56
|
+
}
|
57
|
+
}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
{
|
2
|
+
"address": "0x6f0182a0cc707b055322ccf6d4cb6a5aff1aeb22",
|
3
|
+
"passphrase": "found lobster oblige describe ready addict body brave live vacuum display salute lizard combine gift resemble race senior quality reunion proud tell adjust angle",
|
4
|
+
"secondPassphrase": "this is a top secret second passphrase",
|
5
|
+
"passphrases": [
|
6
|
+
"album pony urban cheap small blade cannon silent run reveal luxury glad predict excess fire beauty hollow reward solar egg exclude leaf sight degree",
|
7
|
+
"hen slogan retire boss upset blame rocket slender area arch broom bring elder few milk bounce execute page evoke once inmate pear marine deliver",
|
8
|
+
"top visa use bacon sun infant shrimp eye bridge fantasy chair sadness stable simple salad canoe raw hill target connect avoid promote spider category"
|
9
|
+
]
|
10
|
+
}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
{
|
2
|
+
"data": {
|
3
|
+
"publicKey": "0243333347c8cbf4e3cbc7a96964181d02a2b0c854faa2fef86b4b8d92afcf473d",
|
4
|
+
"privateKey": "50829dd3b7ffbe2df401d730b5e60cea7520ba3f3a18e5b1490707667fb43fae",
|
5
|
+
"address": "0x1E6747BEAa5B4076a6A98D735DF8c35a70D18Bdd",
|
6
|
+
"wif": "UZYnRZ8qpeQWTLeCNzw93guWSdKLmr2vHEWGG4sNv7TJofL7TZvy",
|
7
|
+
"validatorPublicKey": "b209f4a7454ae17c5808991dffbf204c747b851f351d2ce72a6e18903d0e2f609e0328ebbc3fb97cd4d3660b4bc156f1",
|
8
|
+
"validatorPrivateKey": "6ec4993df152b10e672567c1fdf854a4cee50708fa30986a7d9b259673099175"
|
9
|
+
},
|
10
|
+
"passphrase": "found lobster oblige describe ready addict body brave live vacuum display salute lizard combine gift resemble race senior quality reunion proud tell adjust angle"
|
11
|
+
}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
{
|
2
|
+
"data": {
|
3
|
+
"serialized": "1c104665257d4dea61c4654e74c6c0f6cd0a398905781c3040bea67dc641a66da046d718d04b2331f3b0561808549ed3f3f0d867a284acf6b334869078df7a9136",
|
4
|
+
"message": "02ea822710018085012a05f200825208946f0182a0cc707b055322ccf6d4cb6a5aff1aeb228405f5e10080c0",
|
5
|
+
"v": 28,
|
6
|
+
"r": "104665257d4dea61c4654e74c6c0f6cd0a398905781c3040bea67dc641a66da0",
|
7
|
+
"s": "46d718d04b2331f3b0561808549ed3f3f0d867a284acf6b334869078df7a9136"
|
8
|
+
},
|
9
|
+
"passphrase": "found lobster oblige describe ready addict body brave live vacuum display salute lizard combine gift resemble race senior quality reunion proud tell adjust angle"
|
10
|
+
}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
{
|
2
|
+
"data": {
|
3
|
+
"network": 10000,
|
4
|
+
"nonce": "1",
|
5
|
+
"gasPrice": "5000000000",
|
6
|
+
"gasLimit": "200000",
|
7
|
+
"recipientAddress": "0xE536720791A7DaDBeBdBCD8c8546fb0791a11901",
|
8
|
+
"value": "0",
|
9
|
+
"data": "a9059cbb00000000000000000000000027fa7caffaae77ddb9ab232fdbda56d5e5af23930000000000000000000000000000000000000000000000000000000000000064",
|
10
|
+
"v": 28,
|
11
|
+
"r": "8cd7afafdfaaa6c4b6c97e49888dff89713c99f8b1324693ef4427ce88994bbe",
|
12
|
+
"s": "01c589bb8d3bc908aaee56d64ca35458f2cebf977bbc29180c574aba8bc12b0d",
|
13
|
+
"senderPublicKey": "0243333347c8cbf4e3cbc7a96964181d02a2b0c854faa2fef86b4b8d92afcf473d",
|
14
|
+
"senderAddress": "0x1E6747BEAa5B4076a6A98D735DF8c35a70D18Bdd",
|
15
|
+
"id": "85cdc2ae6cd4569dd1b5b11df10fc409b3996864032d6acf87ff907286f40a03"
|
16
|
+
},
|
17
|
+
"serialized": "02f8af822710018085012a05f20083030d4094e536720791a7dadbebdbcd8c8546fb0791a1190180b844a9059cbb00000000000000000000000027fa7caffaae77ddb9ab232fdbda56d5e5af23930000000000000000000000000000000000000000000000000000000000000064c001a08cd7afafdfaaa6c4b6c97e49888dff89713c99f8b1324693ef4427ce88994bbea001c589bb8d3bc908aaee56d64ca35458f2cebf977bbc29180c574aba8bc12b0d"
|
18
|
+
}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
{
|
2
|
+
"data": {
|
3
|
+
"network": 10000,
|
4
|
+
"nonce": "1",
|
5
|
+
"gasPrice": "5000000000",
|
6
|
+
"gasLimit": "200000",
|
7
|
+
"recipientAddress": "0x00EFd0D4639191C49908A7BddbB9A11A994A8527",
|
8
|
+
"value": "0",
|
9
|
+
"data": "084ce7080000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
10
|
+
"v": 27,
|
11
|
+
"r": "cbec73e1cba1177789adf44fcd3cea797d132563635fae211c350acd7c328046",
|
12
|
+
"s": "216eabb6cd1eb5c0000e7eb74f66595bd5b688f43dd646f15f33e3827c8c966b",
|
13
|
+
"senderPublicKey": "0243333347c8cbf4e3cbc7a96964181d02a2b0c854faa2fef86b4b8d92afcf473d",
|
14
|
+
"senderAddress": "0x1E6747BEAa5B4076a6A98D735DF8c35a70D18Bdd",
|
15
|
+
"id": "555fcaca65f9319c638ebb15c5ffdee0a5e41b7dc3b171aca3707bc43f40ed57"
|
16
|
+
},
|
17
|
+
"serialized": "02f8ef822710018085012a05f20083030d409400efd0d4639191c49908a7bddbb9a11a994a852780b884084ce7080000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c080a0cbec73e1cba1177789adf44fcd3cea797d132563635fae211c350acd7c328046a0216eabb6cd1eb5c0000e7eb74f66595bd5b688f43dd646f15f33e3827c8c966b"
|
18
|
+
}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
{
|
2
|
+
"data": {
|
3
|
+
"network": 10000,
|
4
|
+
"nonce": "1",
|
5
|
+
"gasPrice": "5000000000",
|
6
|
+
"gasLimit": "200000",
|
7
|
+
"recipientAddress": "0x00EFd0D4639191C49908A7BddbB9A11A994A8527",
|
8
|
+
"value": "100000",
|
9
|
+
"data": "084ce7080000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000006f0182a0cc707b055322ccf6d4cb6a5aff1aeb22000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000186a0",
|
10
|
+
"v": 28,
|
11
|
+
"r": "e381eb89f21e450009706650346e3abfaee0c91c5685c8ec923d86b8212a2427",
|
12
|
+
"s": "5b3a7bfdec8ca69469e989805e7715f5d317bf62304f868a905224e7dabe7b37",
|
13
|
+
"senderPublicKey": "0243333347c8cbf4e3cbc7a96964181d02a2b0c854faa2fef86b4b8d92afcf473d",
|
14
|
+
"senderAddress": "0x1E6747BEAa5B4076a6A98D735DF8c35a70D18Bdd",
|
15
|
+
"id": "1d0e3d567ffa39defba7904202941070b224f885f9399c817a58aeb36f4f3863"
|
16
|
+
},
|
17
|
+
"serialized": "02f90132822710018085012a05f20083030d409400efd0d4639191c49908a7bddbb9a11a994a8527830186a0b8c4084ce7080000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000010000000000000000000000006f0182a0cc707b055322ccf6d4cb6a5aff1aeb22000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000186a0c001a0e381eb89f21e450009706650346e3abfaee0c91c5685c8ec923d86b8212a2427a05b3a7bfdec8ca69469e989805e7715f5d317bf62304f868a905224e7dabe7b37"
|
18
|
+
}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
{
|
2
|
+
"data": {
|
3
|
+
"network": 10000,
|
4
|
+
"nonce": "1",
|
5
|
+
"gasPrice": "5000000000",
|
6
|
+
"gasLimit": "200000",
|
7
|
+
"recipientAddress": "0x00EFd0D4639191C49908A7BddbB9A11A994A8527",
|
8
|
+
"value": "300000",
|
9
|
+
"data": "084ce708000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000020000000000000000000000006f0182a0cc707b055322ccf6d4cb6a5aff1aeb22000000000000000000000000c3bbe9b1cee1ff85ad72b87414b0e9b7f2366763000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000186a00000000000000000000000000000000000000000000000000000000000030d40",
|
10
|
+
"v": 27,
|
11
|
+
"r": "0c7cfc6e77249b44385decfd49b8d4deac3c4c49147a0a8d539d82d51da81581",
|
12
|
+
"s": "6af2959905394b401c87872f78ae321cf8cfdd03fe80a815a99bdd723cc90462",
|
13
|
+
"senderPublicKey": "0243333347c8cbf4e3cbc7a96964181d02a2b0c854faa2fef86b4b8d92afcf473d",
|
14
|
+
"senderAddress": "0x1E6747BEAa5B4076a6A98D735DF8c35a70D18Bdd",
|
15
|
+
"id": "d2b7d9e8730de8ab788a37905974c11f6df1a7e5bea5f9a716bffbec17b1d3a8"
|
16
|
+
},
|
17
|
+
"serialized": "02f90173822710018085012a05f20083030d409400efd0d4639191c49908a7bddbb9a11a994a8527830493e0b90104084ce708000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000020000000000000000000000006f0182a0cc707b055322ccf6d4cb6a5aff1aeb22000000000000000000000000c3bbe9b1cee1ff85ad72b87414b0e9b7f2366763000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000186a00000000000000000000000000000000000000000000000000000000000030d40c080a00c7cfc6e77249b44385decfd49b8d4deac3c4c49147a0a8d539d82d51da81581a06af2959905394b401c87872f78ae321cf8cfdd03fe80a815a99bdd723cc90462"
|
18
|
+
}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
{
|
2
|
+
"data": {
|
3
|
+
"network": 10000,
|
4
|
+
"nonce": "1",
|
5
|
+
"gasPrice": "5000000000",
|
6
|
+
"gasLimit": "21000",
|
7
|
+
"recipientAddress": "0x6F0182a0cc707b055322CcF6d4CB6a5Aff1aEb22",
|
8
|
+
"value": "0",
|
9
|
+
"data": "",
|
10
|
+
"v": 27,
|
11
|
+
"r": "2c42ef45cb01b01c0a59b61a7e82d37c8566e0fc0f0f47c2a2825d1cbc8abefc",
|
12
|
+
"s": "455bb2aec9d8d038db506d5a964728c78eaa4f237e0d40666742e4d5d686f576",
|
13
|
+
"senderPublicKey": "0243333347c8cbf4e3cbc7a96964181d02a2b0c854faa2fef86b4b8d92afcf473d",
|
14
|
+
"senderAddress": "0x1E6747BEAa5B4076a6A98D735DF8c35a70D18Bdd",
|
15
|
+
"id": "241ce787680623dea7b9acf2951e2f8b8afac5f92b33b9909ab2bfbadf4be92c"
|
16
|
+
},
|
17
|
+
"serialized": "02f869822710018085012a05f200825208946f0182a0cc707b055322ccf6d4cb6a5aff1aeb228080c080a02c42ef45cb01b01c0a59b61a7e82d37c8566e0fc0f0f47c2a2825d1cbc8abefca0455bb2aec9d8d038db506d5a964728c78eaa4f237e0d40666742e4d5d686f576"
|
18
|
+
}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
{
|
2
|
+
"data": {
|
3
|
+
"network": 10000,
|
4
|
+
"nonce": "1",
|
5
|
+
"gasPrice": "5000000000",
|
6
|
+
"gasLimit": "21000",
|
7
|
+
"recipientAddress": "0x6F0182a0cc707b055322CcF6d4CB6a5Aff1aEb22",
|
8
|
+
"value": "10000000000000000000",
|
9
|
+
"data": "",
|
10
|
+
"v": 27,
|
11
|
+
"r": "62666b937e4c3f55c87c44ee72b5a228c1377adbdad44264dd953b3c2b878734",
|
12
|
+
"s": "2d8670a69ce09018cfac5604d59a2b74bee18c99a91cbd14ac33c3ccfe96a35a",
|
13
|
+
"senderPublicKey": "0243333347c8cbf4e3cbc7a96964181d02a2b0c854faa2fef86b4b8d92afcf473d",
|
14
|
+
"senderAddress": "0x1E6747BEAa5B4076a6A98D735DF8c35a70D18Bdd",
|
15
|
+
"id": "0d22ff14b09da9c5fa975d8fe79b93086853d223000cf88ff923a57650c93e4a"
|
16
|
+
},
|
17
|
+
"serialized": "02f871822710018085012a05f200825208946f0182a0cc707b055322ccf6d4cb6a5aff1aeb22888ac7230489e8000080c080a062666b937e4c3f55c87c44ee72b5a228c1377adbdad44264dd953b3c2b878734a02d8670a69ce09018cfac5604d59a2b74bee18c99a91cbd14ac33c3ccfe96a35a"
|
18
|
+
}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
{
|
2
|
+
"data": {
|
3
|
+
"network": 10000,
|
4
|
+
"nonce": "1",
|
5
|
+
"gasPrice": "5000000000",
|
6
|
+
"gasLimit": "21000",
|
7
|
+
"recipientAddress": "0x6F0182a0cc707b055322CcF6d4CB6a5Aff1aEb22",
|
8
|
+
"value": "100000000",
|
9
|
+
"data": "",
|
10
|
+
"v": 28,
|
11
|
+
"r": "104665257d4dea61c4654e74c6c0f6cd0a398905781c3040bea67dc641a66da0",
|
12
|
+
"s": "46d718d04b2331f3b0561808549ed3f3f0d867a284acf6b334869078df7a9136",
|
13
|
+
"senderPublicKey": "0243333347c8cbf4e3cbc7a96964181d02a2b0c854faa2fef86b4b8d92afcf473d",
|
14
|
+
"senderAddress": "0x1E6747BEAa5B4076a6A98D735DF8c35a70D18Bdd",
|
15
|
+
"id": "b7927d90b38cd1296351f26145b3d8b0674fdc9b8721bc1a10f71a12bcbccf60"
|
16
|
+
},
|
17
|
+
"serialized": "02f86d822710018085012a05f200825208946f0182a0cc707b055322ccf6d4cb6a5aff1aeb228405f5e10080c001a0104665257d4dea61c4654e74c6c0f6cd0a398905781c3040bea67dc641a66da0a046d718d04b2331f3b0561808549ed3f3f0d867a284acf6b334869078df7a9136"
|
18
|
+
}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
{
|
2
|
+
"data": {
|
3
|
+
"network": 10000,
|
4
|
+
"nonce": "1",
|
5
|
+
"gasPrice": "5000000000",
|
6
|
+
"gasLimit": "200000",
|
7
|
+
"recipientAddress": "0x535B3D7A252fa034Ed71F0C53ec0C6F784cB64E1",
|
8
|
+
"value": "0",
|
9
|
+
"data": "3174b689",
|
10
|
+
"v": 27,
|
11
|
+
"r": "bd7f932c18b49e05600cd1603808fd0a19701ee4af99035fc7b1a9159458d08d",
|
12
|
+
"s": "18a4420edfdc90fcff7c6e4d062ae11dae7a62a7ab53f6499862f3e79d67a252",
|
13
|
+
"senderPublicKey": "0243333347c8cbf4e3cbc7a96964181d02a2b0c854faa2fef86b4b8d92afcf473d",
|
14
|
+
"senderAddress": "0x1E6747BEAa5B4076a6A98D735DF8c35a70D18Bdd",
|
15
|
+
"id": "ed937a96f4edc0fa89e7d6146b88f17a3de71f86fc200da49c73e7c93eabfea9"
|
16
|
+
},
|
17
|
+
"serialized": "02f86e822710018085012a05f20083030d4094535b3d7a252fa034ed71f0c53ec0c6f784cb64e180843174b689c080a0bd7f932c18b49e05600cd1603808fd0a19701ee4af99035fc7b1a9159458d08da018a4420edfdc90fcff7c6e4d062ae11dae7a62a7ab53f6499862f3e79d67a252"
|
18
|
+
}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
{
|
2
|
+
"data": {
|
3
|
+
"network": 10000,
|
4
|
+
"nonce": "1",
|
5
|
+
"gasPrice": "5000000000",
|
6
|
+
"gasLimit": "200000",
|
7
|
+
"recipientAddress": "0x2c1DE3b4Dbb4aDebEbB5dcECAe825bE2a9fc6eb6",
|
8
|
+
"value": "0",
|
9
|
+
"data": "36a94134000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000076669787475726500000000000000000000000000000000000000000000000000",
|
10
|
+
"v": 28,
|
11
|
+
"r": "4564cc1adbde3e8a309bf9d3eb76b45fecfae62fbdc0604f70483197de4d66b3",
|
12
|
+
"s": "4d4573a50c9a80221c21d11ce51b9b8bd196f9e1ab1a805b7d8b8e56fcfe2003",
|
13
|
+
"senderPublicKey": "0243333347c8cbf4e3cbc7a96964181d02a2b0c854faa2fef86b4b8d92afcf473d",
|
14
|
+
"senderAddress": "0x1E6747BEAa5B4076a6A98D735DF8c35a70D18Bdd",
|
15
|
+
"id": "781979a58ac75475b91a1e401b50f9cc52465b21fe83e1c30e05676aaeb6a806"
|
16
|
+
},
|
17
|
+
"serialized": "02f8cf822710018085012a05f20083030d40942c1de3b4dbb4adebebb5dcecae825be2a9fc6eb680b86436a94134000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000076669787475726500000000000000000000000000000000000000000000000000c001a04564cc1adbde3e8a309bf9d3eb76b45fecfae62fbdc0604f70483197de4d66b3a04d4573a50c9a80221c21d11ce51b9b8bd196f9e1ab1a805b7d8b8e56fcfe2003"
|
18
|
+
}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
{
|
2
|
+
"data": {
|
3
|
+
"network": 10000,
|
4
|
+
"nonce": "1",
|
5
|
+
"gasPrice": "5000000000",
|
6
|
+
"gasLimit": "200000",
|
7
|
+
"recipientAddress": "0x2c1DE3b4Dbb4aDebEbB5dcECAe825bE2a9fc6eb6",
|
8
|
+
"value": "0",
|
9
|
+
"data": "ebed6dab",
|
10
|
+
"v": 27,
|
11
|
+
"r": "c786beafa03da8c6485bc15870ea8512db27427e3aa38654a7b8d534b30c48da",
|
12
|
+
"s": "78b2b4568f4d0f5d482c670001e6877b282ed6e16cdcbea6bd29195ca2bb036d",
|
13
|
+
"senderPublicKey": "0243333347c8cbf4e3cbc7a96964181d02a2b0c854faa2fef86b4b8d92afcf473d",
|
14
|
+
"senderAddress": "0x1E6747BEAa5B4076a6A98D735DF8c35a70D18Bdd",
|
15
|
+
"id": "d1647fe630bcf63a23bda6015295dafe246356b0e7930cdc8a52f216fa4429a5"
|
16
|
+
},
|
17
|
+
"serialized": "02f86e822710018085012a05f20083030d40942c1de3b4dbb4adebebb5dcecae825be2a9fc6eb68084ebed6dabc080a0c786beafa03da8c6485bc15870ea8512db27427e3aa38654a7b8d534b30c48daa078b2b4568f4d0f5d482c670001e6877b282ed6e16cdcbea6bd29195ca2bb036d"
|
18
|
+
}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
{
|
2
|
+
"data": {
|
3
|
+
"network": 10000,
|
4
|
+
"nonce": "1",
|
5
|
+
"gasPrice": "5000000000",
|
6
|
+
"gasLimit": "200000",
|
7
|
+
"recipientAddress": "0x535B3D7A252fa034Ed71F0C53ec0C6F784cB64E1",
|
8
|
+
"value": "0",
|
9
|
+
"data": "602a9eee0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003030954f46d6097a1d314e900e66e11e0dad0a57cd03e04ec99f0dedd1c765dcb11e6d7fa02e22cf40f9ee23d9cc1c062400000000000000000000000000000000",
|
10
|
+
"v": 28,
|
11
|
+
"r": "57216346b5252f6db63a2c78b5bc0a3697d2247377e9d9ef1b67849a87eb2413",
|
12
|
+
"s": "66ea02477fc19671b3b626e3c4d33939a8ba43004f0a56e900efc1e580739d11",
|
13
|
+
"senderPublicKey": "0243333347c8cbf4e3cbc7a96964181d02a2b0c854faa2fef86b4b8d92afcf473d",
|
14
|
+
"senderAddress": "0x1E6747BEAa5B4076a6A98D735DF8c35a70D18Bdd",
|
15
|
+
"id": "5064b50091b8e5d50ec1d1eb7c5b71cdcf9c7355bba18ee0efeaeacb0b1c95d5"
|
16
|
+
},
|
17
|
+
"serialized": "02f8ef822710018085012a05f20083030d4094535b3d7a252fa034ed71f0c53ec0c6f784cb64e180b884602a9eee0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003030954f46d6097a1d314e900e66e11e0dad0a57cd03e04ec99f0dedd1c765dcb11e6d7fa02e22cf40f9ee23d9cc1c062400000000000000000000000000000000c001a057216346b5252f6db63a2c78b5bc0a3697d2247377e9d9ef1b67849a87eb2413a066ea02477fc19671b3b626e3c4d33939a8ba43004f0a56e900efc1e580739d11"
|
18
|
+
}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
{
|
2
|
+
"data": {
|
3
|
+
"network": 10000,
|
4
|
+
"nonce": "1",
|
5
|
+
"gasPrice": "5000000000",
|
6
|
+
"gasLimit": "200000",
|
7
|
+
"recipientAddress": "0x535B3D7A252fa034Ed71F0C53ec0C6F784cB64E1",
|
8
|
+
"value": "0",
|
9
|
+
"data": "b85f5da2",
|
10
|
+
"v": 28,
|
11
|
+
"r": "5670e5d314906eeaf92da15b55eaeabbb92814874f2fe6c72bcbee7e13e7ff40",
|
12
|
+
"s": "32a34c8438e441d10e83180b5a8a84cf1bfb92fc0fe8b53cd23dc4105631b83d",
|
13
|
+
"senderPublicKey": "0243333347c8cbf4e3cbc7a96964181d02a2b0c854faa2fef86b4b8d92afcf473d",
|
14
|
+
"senderAddress": "0x1E6747BEAa5B4076a6A98D735DF8c35a70D18Bdd",
|
15
|
+
"id": "2dc3b976d8dee25e2ecf341c1493670d9d087cc338ed63f764c0eb9e28869dc3"
|
16
|
+
},
|
17
|
+
"serialized": "02f86e822710018085012a05f20083030d4094535b3d7a252fa034ed71f0c53ec0c6f784cb64e18084b85f5da2c001a05670e5d314906eeaf92da15b55eaeabbb92814874f2fe6c72bcbee7e13e7ff40a032a34c8438e441d10e83180b5a8a84cf1bfb92fc0fe8b53cd23dc4105631b83d"
|
18
|
+
}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
{
|
2
|
+
"data": {
|
3
|
+
"network": 10000,
|
4
|
+
"nonce": "1",
|
5
|
+
"gasPrice": "5000000000",
|
6
|
+
"gasLimit": "200000",
|
7
|
+
"recipientAddress": "0x535B3D7A252fa034Ed71F0C53ec0C6F784cB64E1",
|
8
|
+
"value": "0",
|
9
|
+
"data": "6dd7d8ea000000000000000000000000c3bbe9b1cee1ff85ad72b87414b0e9b7f2366763",
|
10
|
+
"v": 27,
|
11
|
+
"r": "67734fadb38bd9cd584d39fc08af836f15dd6337b05511b312add11a3586451a",
|
12
|
+
"s": "08ba89cec57c38b1e1f488d3507b9cbe1a21aa3f441482e62bd9c1eef61d3bd9",
|
13
|
+
"senderPublicKey": "0243333347c8cbf4e3cbc7a96964181d02a2b0c854faa2fef86b4b8d92afcf473d",
|
14
|
+
"senderAddress": "0x1E6747BEAa5B4076a6A98D735DF8c35a70D18Bdd",
|
15
|
+
"id": "351114ee096ad8a02ddb7abee6f4fe283b8dadceff17157722d7a8153de710c1"
|
16
|
+
},
|
17
|
+
"serialized": "02f88e822710018085012a05f20083030d4094535b3d7a252fa034ed71f0c53ec0c6f784cb64e180a46dd7d8ea000000000000000000000000c3bbe9b1cee1ff85ad72b87414b0e9b7f2366763c080a067734fadb38bd9cd584d39fc08af836f15dd6337b05511b312add11a3586451aa008ba89cec57c38b1e1f488d3507b9cbe1a21aa3f441482e62bd9c1eef61d3bd9"
|
18
|
+
}
|
@@ -0,0 +1,26 @@
|
|
1
|
+
import fixture from "@tests/fixtures/identity.json";
|
2
|
+
import { Address } from "@/identities/Address";
|
3
|
+
|
4
|
+
it('should get the address from passphrase', () => {
|
5
|
+
const actual = Address.fromPassphrase(fixture.passphrase);
|
6
|
+
|
7
|
+
expect(actual).toEqual(fixture.data.address);
|
8
|
+
});
|
9
|
+
|
10
|
+
it('should get the address from public key', () => {
|
11
|
+
const actual = Address.fromPublicKey(fixture.data.publicKey);
|
12
|
+
|
13
|
+
expect(actual).toEqual(fixture.data.address);
|
14
|
+
});
|
15
|
+
|
16
|
+
it('should get the address from private key', () => {
|
17
|
+
const actual = Address.fromPrivateKey(fixture.data.privateKey);
|
18
|
+
|
19
|
+
expect(actual).toEqual(fixture.data.address);
|
20
|
+
});
|
21
|
+
|
22
|
+
it('should validate the address', () => {
|
23
|
+
const actual = Address.validate(fixture.data.address);
|
24
|
+
|
25
|
+
expect(actual).toBe(true);
|
26
|
+
});
|