import { Resource } from '../types/TransactionBuilder.js'; import { AbiParamsCommon, ContractAbiInterface, FunctionFragment, GetMethodsTypeFromAbi, GetOutputsType, GetParamsType, IsConstAbi } from './ABI.js'; import { IsNever, Prettify, UnionToIntersection } from './UtilsTypes.js'; export declare enum ContractType { AccountCreateContract = "AccountCreateContract", TransferContract = "TransferContract", TransferAssetContract = "TransferAssetContract", VoteAssetContract = "VoteAssetContract", VoteWitnessContract = "VoteWitnessContract", WitnessCreateContract = "WitnessCreateContract", AssetIssueContract = "AssetIssueContract", WitnessUpdateContract = "WitnessUpdateContract", ParticipateAssetIssueContract = "ParticipateAssetIssueContract", AccountUpdateContract = "AccountUpdateContract", FreezeBalanceContract = "FreezeBalanceContract", UnfreezeBalanceContract = "UnfreezeBalanceContract", CancelAllUnfreezeV2Contract = "CancelAllUnfreezeV2Contract", WithdrawBalanceContract = "WithdrawBalanceContract", UnfreezeAssetContract = "UnfreezeAssetContract", UpdateAssetContract = "UpdateAssetContract", ProposalCreateContract = "ProposalCreateContract", ProposalApproveContract = "ProposalApproveContract", ProposalDeleteContract = "ProposalDeleteContract", SetAccountIdContract = "SetAccountIdContract", CustomContract = "CustomContract", CreateSmartContract = "CreateSmartContract", TriggerSmartContract = "TriggerSmartContract", GetContract = "GetContract", UpdateSettingContract = "UpdateSettingContract", ExchangeCreateContract = "ExchangeCreateContract", ExchangeInjectContract = "ExchangeInjectContract", ExchangeWithdrawContract = "ExchangeWithdrawContract", ExchangeTransactionContract = "ExchangeTransactionContract", UpdateEnergyLimitContract = "UpdateEnergyLimitContract", AccountPermissionUpdateContract = "AccountPermissionUpdateContract", ClearABIContract = "ClearABIContract", UpdateBrokerageContract = "UpdateBrokerageContract", ShieldedTransferContract = "ShieldedTransferContract", MarketSellAssetContract = "MarketSellAssetContract", MarketCancelOrderContract = "MarketCancelOrderContract", FreezeBalanceV2Contract = "FreezeBalanceV2Contract", UnfreezeBalanceV2Contract = "UnfreezeBalanceV2Contract", WithdrawExpireUnfreezeContract = "WithdrawExpireUnfreezeContract", DelegateResourceContract = "DelegateResourceContract", UnDelegateResourceContract = "UnDelegateResourceContract", UNRECOGNIZED = "UNRECOGNIZED" } export declare enum Permission_PermissionType { Owner = 0, Witness = 1, Active = 2, UNRECOGNIZED = -1 } export interface Key { address: Uint8Array; weight: number; } export declare enum AccountType { Normal = 0, AssetIssue = 1, Contract = 2, UNRECOGNIZED = -1 } export interface PermissionKey { address: string; weight: number; } export interface Permission { type: number; /** Owner id=0, Witness id=1, Active id start by 2 */ id?: number; permission_name: string; threshold: number; operations?: string; keys: PermissionKey[]; } export interface TransferContract { to_address: string; owner_address: string; amount: number; } export interface TransferAssetContract { to_address: string; owner_address: string; amount: number; asset_name: string; } export interface ParticipateAssetIssueContract { to_address: string; owner_address: string; asset_name: string; amount: number; } export interface TriggerSmartContract { owner_address: string; contract_address: string; call_value?: number; call_token_value?: number; token_id?: number; data?: string; } export interface FreezeBalanceContract { owner_address: string; frozen_balance: number; frozen_duration: number; resource?: Resource; receiver_address?: string; } export interface UnfreezeBalanceContract { owner_address: string; resource: string; receiver_address: string; } export interface WithdrawBalanceContract { owner_address: string; } export interface FreezeBalanceV2Contract { owner_address: string; frozen_balance: number; resource?: Resource; } export interface CancelFreezeBalanceV2Contract { owner_address: string; } export interface UnfreezeBalanceV2Contract { owner_address: string; unfreeze_balance: number; resource?: Resource; } export interface DelegateResourceContract { owner_address: string; receiver_address: string; balance: number; resource?: Resource; lock?: boolean; lock_period?: number; } export interface UnDelegateResourceContract { owner_address: string; receiver_address: string; balance: number; resource?: Resource; } export interface WithdrawExpireUnfreezeContract { owner_address: string; } export interface CreateSmartContract { owner_address: string; call_token_value: number; token_id: string; new_contract: { name: string; origin_address: string; contract_address: string; abi: { entrys?: ContractAbiInterface; }; bytecode: string; call_value: number; consume_user_resource_percent: number; origin_energy_limit: number; }; } export interface DeployConstantContract { data: string; owner_address: string; call_value?: number; token_id?: number | string; call_token_value?: number | string; } export interface ClearABIContract { contract_address: string; owner_address: string; } export interface UpdateBrokerageContract { brokerage: number; owner_address: string; } interface FrozenSupply { frozen_amount: number; frozen_days: number; } export interface AssetIssueContract { owner_address: string; name: string; abbr: string; description: string; url: string; total_supply: number; trx_num: number; num: number; start_time: number; end_time: number; precision: number; free_asset_net_limit: number; public_free_asset_net_limit: number; public_free_asset_net_usage: number; public_latest_free_net_time: number; vote_score: number; frozen_supply: FrozenSupply[]; } export interface AccountCreateContract { account_address: string; owner_address: string; } export interface AccountUpdateContract { account_name: string; owner_address: string; } export interface SetAccountIdContract { account_id: string; owner_address: string; } export interface ProposalCreateContract { owner_address: string; parameters: Record[]; } export interface ProposalDeleteContract { owner_address: string; proposal_id: number; } export interface VoteProposalContract { owner_address: string; proposal_id: number; is_add_approval: boolean; } export interface ExchangeCreateContract { owner_address: string; first_token_id: string; first_token_balance: number; second_token_id: string; second_token_balance: number; } export interface ExchangeInjectContract { owner_address: string; exchange_id: number; token_id: string; quant: number; } export interface ExchangeWithdrawContract { owner_address: string; exchange_id: number; token_id: string; quant: number; } export interface ExchangeTransactionContract { owner_address: string; exchange_id: number; token_id: string; quant: number; expected: number; } export interface UpdateSettingContract { owner_address: string; contract_address: string; consume_user_resource_percent: number; } export interface UpdateEnergyLimitContract { owner_address: string; contract_address: string; origin_energy_limit: number; } export interface AccountPermissionUpdateContract { owner_address: string; owner?: Permission; witness?: Permission; actives?: Permission[]; } export interface UpdateAssetContract { owner_address: string; description: string; url: string; new_limit?: number; new_public_limit?: number; } export interface WitnessCreateContract { owner_address: string; url: string; } export interface WitnessUpdateContract { owner_address: string; update_url: string; } export interface VoteWitnessContract { owner_address: string; votes: { vote_address: string; vote_count: number; }[]; } export type ContractParamter = TransferContract | TransferAssetContract | ParticipateAssetIssueContract | TriggerSmartContract | FreezeBalanceContract | UnfreezeBalanceContract | WithdrawBalanceContract | FreezeBalanceV2Contract | CancelFreezeBalanceV2Contract | UnfreezeBalanceV2Contract | DelegateResourceContract | UnDelegateResourceContract | WithdrawExpireUnfreezeContract | CreateSmartContract | ClearABIContract | UpdateBrokerageContract | AssetIssueContract | AccountCreateContract | AccountUpdateContract | SetAccountIdContract | ProposalCreateContract | ProposalDeleteContract | VoteProposalContract | ExchangeCreateContract | ExchangeInjectContract | ExchangeWithdrawContract | ExchangeTransactionContract | UpdateSettingContract | UpdateEnergyLimitContract | AccountPermissionUpdateContract | UpdateAssetContract | WitnessCreateContract | WitnessUpdateContract | VoteWitnessContract; type IsReadOnlyFunction = Fragment extends FunctionFragment ? Fragment['stateMutability'] extends 'view' | 'pure' ? true : Fragment['constant'] extends true ? true : false : false; type IsWriteFunction = Fragment extends FunctionFragment ? IsReadOnlyFunction extends true ? false : true : false; type ReadContractFragments = Abi[number] extends infer Fragment ? Fragment extends FunctionFragment ? IsReadOnlyFunction extends true ? Fragment : never : never : never; type WriteContractFragments = Abi[number] extends infer Fragment ? Fragment extends FunctionFragment ? IsWriteFunction extends true ? Fragment : never : never : never; export type ReadContractFunctionName = ReadContractFragments['name']; export type WriteContractFunctionName = WriteContractFragments['name']; export type CollapseSingleItemTuple = Value extends readonly [infer Only] ? Only : Value; type ChangeNeverToString = IsNever extends true ? string : T; export type ReadContractParameters = { readonly functionName: ChangeNeverToString; readonly args?: GetParamsType; /** Caller address for the constant call. */ readonly from?: string; readonly value?: number | bigint; }; export type ReadContractReturnType = CollapseSingleItemTuple>; export type WriteContractParameters = { readonly functionName: ChangeNeverToString; readonly args?: GetParamsType; /** * Signer: a private key whose derived address owns and signs the transaction, * allowing a non-default signer. When omitted, the instance default key signs. */ readonly account?: string; readonly value?: number | bigint; readonly feeLimit?: number; readonly tokenId?: string; readonly tokenValue?: number; readonly permissionId?: number; }; export type WriteContractReturnType = string; export type ReadOptions = Prettify, 'functionName' | 'args'>>; export type WriteOptions = Prettify, 'functionName' | 'args'>>; type ReadFragmentSignature['args']>, Options = ReadOptions> = AbiFrag extends FunctionFragment ? (...parameters: Parameters extends readonly [] ? [ options?: Options ] : [ args: Parameters, options?: Options ]) => Promise> : never; type ReadSignaturesForName> = Extract, { name: Name; }> extends infer F ? F extends FunctionFragment ? ReadFragmentSignature : never : never; type CanonicalizeIntType = T extends `uint[${infer Rest}` ? `uint256[${Rest}` : T extends `int[${infer Rest}` ? `int256[${Rest}` : T extends 'uint' ? 'uint256' : T extends 'int' ? 'int256' : T; type ParamTypeSignature = Param['type'] extends `tuple${infer Suffix}` ? Param extends { components: infer Components; } ? Components extends ReadonlyArray ? `(${JoinParamTypeSignatures})${Suffix}` : Param['type'] : Param['type'] : CanonicalizeIntType; type JoinParamTypeSignatures> = Params extends readonly [infer Head, ...infer Rest] ? Head extends AbiParamsCommon ? Rest extends ReadonlyArray ? Rest extends readonly [] ? ParamTypeSignature : `${ParamTypeSignature},${JoinParamTypeSignatures}` : ParamTypeSignature : '' : Params extends readonly [] ? '' : string; type FragmentInputs = 'inputs' extends keyof Fragment ? [NonNullable] extends [never] ? readonly [] : NonNullable : readonly []; /** * A fragment's full signature, e.g. `"transfer(address,uint256)"` — the return * type of `buildFunctionSelector`. Const ABI fragments produce the literal * signature; a plain `FunctionFragment` degrades to `` `${string}(${string})` ``. */ export type FunctionSelector = `${Fragment['name']}(${JoinParamTypeSignatures>})`; type ExtractReadNamespace = { [K in ReadContractFragments as K['name']]: UnionToIntersection>; } & { [K in ReadContractFragments as FunctionSelector]: ReadFragmentSignature; }; export type ContractReadNamespace = IsConstAbi extends true ? 'read' extends ReadContractFunctionName | WriteContractFunctionName ? GetMethodsTypeFromAbi['read']['onMethod'] & Prettify> : Prettify> : any; type WriteFragmentSignature['args']>, Options = WriteOptions> = AbiFrag extends FunctionFragment ? (...parameters: Parameters extends readonly [] ? [ options?: Options ] : [ args: Parameters, options?: Options ]) => Promise : never; type WriteSignaturesForName> = Extract, { name: Name; }> extends infer F ? F extends FunctionFragment ? WriteFragmentSignature : never : never; type ExtractWriteNamespace = { [K in WriteContractFragments as K['name']]: UnionToIntersection>; } & { [K in WriteContractFragments as FunctionSelector]: WriteFragmentSignature; }; export type ContractWriteNamespace = IsConstAbi extends true ? 'write' extends ReadContractFunctionName | WriteContractFunctionName ? GetMethodsTypeFromAbi['write']['onMethod'] & Prettify> : Prettify> : any; export {};