PHP WebShell

Текущая директория: /usr/lib/node_modules/bitgo/node_modules/@vechain/sdk-core/src/vcdm/account

Просмотр файла: Account.ts

import { InvalidOperation } from '@vechain/sdk-errors';
import { type Address } from '../Address';
import { type Currency } from '../currency/Currency';
import { type VeChainDataModel } from '../VeChainDataModel';

type AccountType = 'EOA' | 'Contract';

/**
 * Represents a VeChain account.
 *
 * @implements {VeChainDataModel<Account>}
 */
class Account implements VeChainDataModel<Account> {
    public readonly address: Address;
    public readonly balance: Currency;
    // Replace the string array with a Transaction class #1162
    public readonly transactions: string[];

    public readonly type: AccountType;

    constructor(
        address: Address,
        balance: Currency,
        type: AccountType = 'EOA',
        transactions?: string[]
    ) {
        this.address = address;
        this.balance = balance;
        this.type = type;
        this.transactions = transactions ?? [];
    }

    /**
     * Throws an exception because the account cannot be represented as a big integer.
     * @returns {bigint} The BigInt representation of the account.
     * @throws {InvalidOperation} The account cannot be represented as a bigint.
     * @override {@link VeChainDataModel#bi}
     * @remarks The conversion to BigInt is not supported for an account.
     */
    public get bi(): bigint {
        throw new InvalidOperation(
            'Account.bi',
            'There is no big integer representation for an account.',
            { data: '' }
        );
    }

    /**
     * Throws an exception because the account cannot be represented as a byte array.
     * @returns {Uint8Array} The byte array representation of the account.
     * @throws {InvalidOperation} The account cannot be represented as a byte array.
     * @override {@link VeChainDataModel#bytes}
     * @remarks The conversion to byte array is not supported for an account.
     */
    public get bytes(): Uint8Array {
        throw new InvalidOperation(
            'Account.bytes',
            'There is no bytes representation for an account.',
            { data: '' }
        );
    }

    /**
     * Throws an exception because the account cannot be represented as a number.
     * @returns {bigint} The number representation of the account.
     * @throws {InvalidOperation} The account cannot be represented as a number.
     * @override {@link VeChainDataModel#n}
     * @remarks The conversion to number is not supported for an account.
     */
    public get n(): number {
        throw new InvalidOperation(
            'Account.n',
            'There is no number representation for an account.',
            { data: '' }
        );
    }

    /**
     * Adds a transaction to the account.
     * @param {string} transaction The transaction to add.
     */
    public addTransaction(transaction: string): void {
        // Replace body once Transaction class is implemented #1162
        this.transactions.push(transaction);
    }

    /**
     * Compare this instance with `that` in a meaningful way.
     *
     * @param {Account} that object to compare.
     * @return a negative number if `this` < `that`, zero if `this` = `that`, a positive number if `this` > that`.
     * @override {@link VeChainDataModel#compareTo}
     */
    public compareTo(that: Account): number {
        const typeDiff = this.type.localeCompare(that.type);
        if (typeDiff === 0) {
            const addressDiff = this.address.compareTo(that.address);
            if (addressDiff === 0) {
                const codeDiff = this.balance.code.compareTo(that.balance.code);
                if (codeDiff === 0) {
                    return this.balance.value.compareTo(that.balance.value);
                }
                return codeDiff;
            }
            return addressDiff;
        }
        return typeDiff;
    }

    /**
     * Checks if the given value is equal to the current instance.
     *
     * @param {Account} that - The value to compare.
     * @returns {boolean} - True if the values are equal, false otherwise.
     * @override {@link VeChainDataModel#isEqual}
     */
    public isEqual(that: Account): boolean {
        return this.compareTo(that) === 0;
    }

    /**
     * Returns a string representation of the account.
     *
     * @returns {string} A string representation of the account.
     */
    public toString(): string {
        return `${this.type} Address: ${this.address.toString()} Balance: ${this.balance.value} ${this.balance.code}`;
    }
}

export { Account };
export type { AccountType };

Выполнить команду


Для локальной разработки. Не используйте в интернете!