import { PubKey, GeneralPrefixData } from "../types.js"; import { FundOperation } from "../operations/fund.js"; import { RollOverOperation } from "../operations/rollover.js"; import { TransferOperation } from "../operations/transfer.js"; import { WithdrawOperation } from "../operations/withdraw.js"; import { RagequitOperation } from "../operations/ragequit.js"; import { AEBalance } from "../ae_balance.js"; import { Audit, ExPost } from "../operations/audit.js"; import { AccountEvents, AccountFundEvent, AccountRagequitEvent, AccountRolloverEvent, AccountTransferInEvent, AccountTransferOutEvent, AccountWithdrawEvent, } from "./events.js"; import { CairoOption } from "starknet"; import { CipherBalance } from "../types.js"; export interface IAccount { publicKey: PubKey; tongoAddress(): string; // Operations fund(fundDetails: FundDetails): Promise; transfer(transferDetails: TransferDetails): Promise; withdraw(withdrawDetails: WithdrawDetails): Promise; ragequit(ragequitDetails: RagequitDetails): Promise; rollover(rolloverDetails: RolloverDetails): Promise; // state access rawState(): Promise; state(): Promise; nonce(): Promise; rate(): Promise; // decryption decryptAEBalance(cipher: AEBalance, accountNonce: bigint): Promise; decryptCipherBalance(cipher: CipherBalance): bigint; // rate erc20ToTongo(erc20Amount: bigint): Promise; tongoToErc20(tongoAmount: bigint): Promise; //audit createAuditPart(balance: bigint, storedCipherBalance: CipherBalance, prefix_data: GeneralPrefixData): Promise>; // ex post generateExPost(to: PubKey, cipher: CipherBalance, sender: string): Promise; verifyExPost(expost: ExPost): bigint; // events getEventsFund(initialBlock: number): Promise; getEventsRollover(initialBlock: number): Promise; getEventsWithdraw(initialBlock: number): Promise; getEventsRagequit(initialBlock: number): Promise; getEventsTransferOut(initialBlock: number): Promise; getEventsTransferIn(initialBlock: number): Promise; getTxHistory(initialBlock: number): Promise; } export interface FundDetails { amount: bigint; sender: string, } export interface TransferDetails { amount: bigint; to: PubKey; sender: string, } export interface RolloverDetails { sender: string, } export interface RagequitDetails { to: string; sender: string, } export interface WithdrawDetails { to: string; amount: bigint; sender: string, } export interface RawAccountState { balance: CipherBalance; pending: CipherBalance; audit: CipherBalance | undefined; aeBalance?: AEBalance; aeAuditBalance?: AEBalance; nonce: bigint; } export interface AccountState { balance: bigint; pending: bigint; nonce: bigint; }