Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/cli/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
"dev": "tsx src/index.ts",
"start": "node dist/index.js",
"clean": "rm -rf dist",
"test": "jest",
"test": "jest --passWithNoTests",
"lint": "tsc --noEmit",
"prepublishOnly": "npm run clean && npm run build"
},
Expand Down
16 changes: 5 additions & 11 deletions packages/cli/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -161,16 +161,10 @@ program
.action(stakeCommand);

// ========================================
// Error Handling
// Parse and Execute
// ========================================

program.exitOverride();

try {
await program.parseAsync(process.argv);
} catch (error: any) {
if (error.code !== "commander.help" && error.code !== "commander.version") {
console.error(chalk.red("\nError:"), error.message);
process.exit(1);
}
}
program.parseAsync(process.argv).catch((error: any) => {
console.error(chalk.red("\nError:"), error.message);
process.exit(1);
});
7 changes: 1 addition & 6 deletions packages/core/jest.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,7 @@ export default {
"ts-jest",
{
useESM: true,
tsconfig: {
module: "ESNext",
moduleResolution: "bundler",
target: "ES2022",
esModuleInterop: true,
},
tsconfig: "tsconfig.test.json",
},
],
},
Expand Down
109 changes: 76 additions & 33 deletions packages/core/src/pallets/balances/client.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
/**
* Balances Pallet Client
*
*
* Main client for interacting with the Balances pallet
*/

import type { ApiPromise } from '@polkadot/api';
import type { SubmittableExtrinsic } from '@polkadot/api/types';
import type { ISubmittableResult } from '@polkadot/types/types';
import { BalancesQueries } from './queries.js';
import type {
import type { ApiPromise } from "@polkadot/api";
import type { SubmittableExtrinsic } from "@polkadot/api/types";
import type { ISubmittableResult } from "@polkadot/types/types";
import { BalancesQueries } from "./queries.js";
import {
TransferParams,
TransferAllParams,
ForceTransferParams,
Expand All @@ -22,7 +22,7 @@ import type {
UnreservedEvent,
DepositEvent,
WithdrawEvent,
} from './types';
} from "./types.js";

/**
* Balances Manager - Main interface for Balances pallet
Expand All @@ -43,9 +43,12 @@ export class BalancesManager {
* @param params - Transfer parameters
* @returns Submittable extrinsic
*/
transfer(params: TransferParams): SubmittableExtrinsic<'promise', ISubmittableResult> {
transfer(
params: TransferParams
): SubmittableExtrinsic<"promise", ISubmittableResult> {
// Use transferAllowDeath (newer API) or transfer (older API)
const transferFn = this.api.tx.balances.transferAllowDeath || this.api.tx.balances.transfer;
const transferFn =
this.api.tx.balances.transferAllowDeath || this.api.tx.balances.transfer;
return transferFn(params.dest, params.value);
}

Expand All @@ -54,7 +57,9 @@ export class BalancesManager {
* @param params - Transfer parameters
* @returns Submittable extrinsic
*/
transferKeepAlive(params: TransferParams): SubmittableExtrinsic<'promise', ISubmittableResult> {
transferKeepAlive(
params: TransferParams
): SubmittableExtrinsic<"promise", ISubmittableResult> {
return this.api.tx.balances.transferKeepAlive(params.dest, params.value);
}

Expand All @@ -63,7 +68,9 @@ export class BalancesManager {
* @param params - Transfer all parameters
* @returns Submittable extrinsic
*/
transferAll(params: TransferAllParams): SubmittableExtrinsic<'promise', ISubmittableResult> {
transferAll(
params: TransferAllParams
): SubmittableExtrinsic<"promise", ISubmittableResult> {
return this.api.tx.balances.transferAll(params.dest, params.keepAlive);
}

Expand All @@ -72,16 +79,24 @@ export class BalancesManager {
* @param params - Force transfer parameters
* @returns Submittable extrinsic
*/
forceTransfer(params: ForceTransferParams): SubmittableExtrinsic<'promise', ISubmittableResult> {
return this.api.tx.balances.forceTransfer(params.source, params.dest, params.value);
forceTransfer(
params: ForceTransferParams
): SubmittableExtrinsic<"promise", ISubmittableResult> {
return this.api.tx.balances.forceTransfer(
params.source,
params.dest,
params.value
);
}

/**
* Force unreserve balance (sudo only)
* @param params - Force unreserve parameters
* @returns Submittable extrinsic
*/
forceUnreserve(params: ForceUnreserveParams): SubmittableExtrinsic<'promise', ISubmittableResult> {
forceUnreserve(
params: ForceUnreserveParams
): SubmittableExtrinsic<"promise", ISubmittableResult> {
return this.api.tx.balances.forceUnreserve(params.who, params.amount);
}

Expand All @@ -90,9 +105,12 @@ export class BalancesManager {
* @param params - Set balance parameters
* @returns Submittable extrinsic
*/
setBalance(params: SetBalanceParams): SubmittableExtrinsic<'promise', ISubmittableResult> {
setBalance(
params: SetBalanceParams
): SubmittableExtrinsic<"promise", ISubmittableResult> {
// Use forceSetBalance (newer API) or setBalance (older API)
const setBalanceFn = this.api.tx.balances.forceSetBalance || this.api.tx.balances.setBalance;
const setBalanceFn =
this.api.tx.balances.forceSetBalance || this.api.tx.balances.setBalance;
return setBalanceFn(params.who, params.newFree, params.newReserved);
}

Expand All @@ -115,10 +133,12 @@ export class BalancesManager {
}, 0n);

// Transferable = free - max(frozen, locked)
const frozenOrLocked = accountData.frozen > locked ? accountData.frozen : locked;
const transferable = accountData.free > frozenOrLocked
? accountData.free - frozenOrLocked
: 0n;
const frozenOrLocked =
accountData.frozen > locked ? accountData.frozen : locked;
const transferable =
accountData.free > frozenOrLocked
? accountData.free - frozenOrLocked
: 0n;

return {
free: accountData.free,
Expand Down Expand Up @@ -169,7 +189,11 @@ export class BalancesManager {
* @param amount - Amount to transfer
* @returns Fee estimate
*/
async estimateTransferFee(from: string, to: string, amount: bigint): Promise<FeeEstimate> {
async estimateTransferFee(
from: string,
to: string,
amount: bigint
): Promise<FeeEstimate> {
const tx = this.transfer({ dest: to, value: amount });
const paymentInfo = await tx.paymentInfo(from);

Expand Down Expand Up @@ -209,20 +233,27 @@ export class BalancesManager {
* @param keepAlive - Whether to keep account alive
* @returns Maximum transferable amount
*/
async getMaxTransferable(from: string, keepAlive: boolean = true): Promise<bigint> {
async getMaxTransferable(
from: string,
keepAlive: boolean = true
): Promise<bigint> {
const balanceInfo = await this.getBalance(from);

if (!keepAlive) {
return balanceInfo.transferable;
}

const ed = await this.getExistentialDeposit();
const fee = await this.estimateTransferFee(from, from, balanceInfo.transferable);

const fee = await this.estimateTransferFee(
from,
from,
balanceInfo.transferable
);

// Max = transferable - fee - ED (to keep alive)
const required = fee.partialFee + ed;
return balanceInfo.transferable > required
? balanceInfo.transferable - required
return balanceInfo.transferable > required
? balanceInfo.transferable - required
: 0n;
}

Expand All @@ -235,7 +266,9 @@ export class BalancesManager {
* @param callback - Callback function for transfer events
* @returns Unsubscribe function
*/
async onTransfer(callback: (event: TransferEvent) => void): Promise<() => void> {
async onTransfer(
callback: (event: TransferEvent) => void
): Promise<() => void> {
return this.api.query.system.events((events: any) => {
events.forEach((record: any) => {
const { event } = record;
Expand All @@ -256,7 +289,9 @@ export class BalancesManager {
* @param callback - Callback function for balance set events
* @returns Unsubscribe function
*/
async onBalanceSet(callback: (event: BalanceSetEvent) => void): Promise<() => void> {
async onBalanceSet(
callback: (event: BalanceSetEvent) => void
): Promise<() => void> {
return this.api.query.system.events((events: any) => {
events.forEach((record: any) => {
const { event } = record;
Expand All @@ -277,7 +312,9 @@ export class BalancesManager {
* @param callback - Callback function for reserved events
* @returns Unsubscribe function
*/
async onReserved(callback: (event: ReservedEvent) => void): Promise<() => void> {
async onReserved(
callback: (event: ReservedEvent) => void
): Promise<() => void> {
return this.api.query.system.events((events: any) => {
events.forEach((record: any) => {
const { event } = record;
Expand All @@ -297,7 +334,9 @@ export class BalancesManager {
* @param callback - Callback function for unreserved events
* @returns Unsubscribe function
*/
async onUnreserved(callback: (event: UnreservedEvent) => void): Promise<() => void> {
async onUnreserved(
callback: (event: UnreservedEvent) => void
): Promise<() => void> {
return this.api.query.system.events((events: any) => {
events.forEach((record: any) => {
const { event } = record;
Expand All @@ -317,7 +356,9 @@ export class BalancesManager {
* @param callback - Callback function for deposit events
* @returns Unsubscribe function
*/
async onDeposit(callback: (event: DepositEvent) => void): Promise<() => void> {
async onDeposit(
callback: (event: DepositEvent) => void
): Promise<() => void> {
return this.api.query.system.events((events: any) => {
events.forEach((record: any) => {
const { event } = record;
Expand All @@ -337,7 +378,9 @@ export class BalancesManager {
* @param callback - Callback function for withdraw events
* @returns Unsubscribe function
*/
async onWithdraw(callback: (event: WithdrawEvent) => void): Promise<() => void> {
async onWithdraw(
callback: (event: WithdrawEvent) => void
): Promise<() => void> {
return this.api.query.system.events((events: any) => {
events.forEach((record: any) => {
const { event } = record;
Expand Down
22 changes: 11 additions & 11 deletions packages/core/src/pallets/balances/queries.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
/**
* Balances Pallet Storage Queries
*
*
* Query functions for the Balances pallet storage
*/

import type { ApiPromise } from '@polkadot/api';
import type { AccountData, BalanceLock, ReserveData } from './types';
import type { ApiPromise } from "@polkadot/api";
import type { AccountData, BalanceLock, ReserveData } from "./types";

/**
* Balances storage queries
Expand Down Expand Up @@ -34,8 +34,8 @@ export class BalancesQueries {
return {
free: BigInt(data.free.toString()),
reserved: BigInt(data.reserved.toString()),
frozen: BigInt(data.frozen?.toString() || '0'),
flags: BigInt(data.flags?.toString() || '0'),
frozen: BigInt(data.frozen?.toString() || "0"),
flags: BigInt(data.flags?.toString() || "0"),
};
}

Expand All @@ -46,7 +46,7 @@ export class BalancesQueries {
*/
async locks(accountId: string): Promise<BalanceLock[]> {
const locks: any = await this.api.query.balances.locks(accountId);

return locks.map((lock: any) => ({
id: lock.id.toHuman() as string,
amount: BigInt(lock.amount.toString()),
Expand All @@ -61,7 +61,7 @@ export class BalancesQueries {
*/
async reserves(accountId: string): Promise<ReserveData[]> {
const reserves: any = await this.api.query.balances.reserves(accountId);

return reserves.map((reserve: any) => ({
id: reserve.id.toHuman() as string,
amount: BigInt(reserve.amount.toString()),
Expand Down Expand Up @@ -111,9 +111,9 @@ export class BalancesQueries {
* Parse lock reasons from chain data
*/
private parseReasons(reasons: any): any {
if (reasons.isFee) return 'Fee';
if (reasons.isMisc) return 'Misc';
if (reasons.isAll) return 'All';
return 'All';
if (reasons.isFee) return "Fee";
if (reasons.isMisc) return "Misc";
if (reasons.isAll) return "All";
return "All";
}
}
Loading