@rougechain/sdk 0.1.0
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/README.md +334 -0
- package/dist/index.cjs +664 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +441 -0
- package/dist/index.d.ts +441 -0
- package/dist/index.js +653 -0
- package/dist/index.js.map +1 -0
- package/package.json +44 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils.ts","../src/signer.ts","../src/client.ts","../src/wallet.ts"],"names":["ml_dsa65"],"mappings":"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","file":"index.cjs","sourcesContent":["export function hexToBytes(hex: string): Uint8Array {\r\n const bytes = new Uint8Array(hex.length / 2);\r\n for (let i = 0; i < hex.length; i += 2) {\r\n bytes[i / 2] = parseInt(hex.substr(i, 2), 16);\r\n }\r\n return bytes;\r\n}\r\n\r\nexport function bytesToHex(bytes: Uint8Array): string {\r\n return Array.from(bytes)\r\n .map((b) => b.toString(16).padStart(2, \"0\"))\r\n .join(\"\");\r\n}\r\n\r\nexport function generateNonce(): string {\r\n const bytes = crypto.getRandomValues(new Uint8Array(16));\r\n return bytesToHex(bytes);\r\n}\r\n","import { ml_dsa65 } from \"@noble/post-quantum/ml-dsa.js\";\r\nimport { hexToBytes, bytesToHex, generateNonce } from \"./utils.js\";\r\nimport type {\r\n TransactionPayload,\r\n SignedTransaction,\r\n WalletKeys,\r\n} from \"./types.js\";\r\n\r\nexport const BURN_ADDRESS =\r\n \"XRGE_BURN_0x000000000000000000000000000000000000000000000000000000000000DEAD\";\r\n\r\nexport function serializePayload(payload: TransactionPayload): Uint8Array {\r\n const json = JSON.stringify(payload, Object.keys(payload).sort());\r\n return new TextEncoder().encode(json);\r\n}\r\n\r\nexport function signTransaction(\r\n payload: TransactionPayload,\r\n privateKey: string,\r\n publicKey: string\r\n): SignedTransaction {\r\n const payloadBytes = serializePayload(payload);\r\n const signature = ml_dsa65.sign(payloadBytes, hexToBytes(privateKey));\r\n return {\r\n payload,\r\n signature: bytesToHex(signature),\r\n public_key: publicKey,\r\n };\r\n}\r\n\r\nexport function verifyTransaction(signedTx: SignedTransaction): boolean {\r\n try {\r\n const payloadBytes = serializePayload(signedTx.payload);\r\n return ml_dsa65.verify(\r\n hexToBytes(signedTx.signature),\r\n payloadBytes,\r\n hexToBytes(signedTx.public_key)\r\n );\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\nexport function isBurnAddress(address: string): boolean {\r\n return address === BURN_ADDRESS;\r\n}\r\n\r\n// ===== Transaction builders =====\r\n\r\nfunction buildAndSign(\r\n wallet: WalletKeys,\r\n payload: Omit<TransactionPayload, \"from\" | \"timestamp\" | \"nonce\">\r\n): SignedTransaction {\r\n const full: TransactionPayload = {\r\n ...payload,\r\n from: wallet.publicKey,\r\n timestamp: Date.now(),\r\n nonce: generateNonce(),\r\n } as TransactionPayload;\r\n return signTransaction(full, wallet.privateKey, wallet.publicKey);\r\n}\r\n\r\nexport function createSignedTransfer(\r\n wallet: WalletKeys,\r\n to: string,\r\n amount: number,\r\n fee = 1,\r\n token = \"XRGE\"\r\n): SignedTransaction {\r\n return buildAndSign(wallet, { type: \"transfer\", to, amount, fee, token });\r\n}\r\n\r\nexport function createSignedTokenCreation(\r\n wallet: WalletKeys,\r\n tokenName: string,\r\n tokenSymbol: string,\r\n initialSupply: number,\r\n fee = 10\r\n): SignedTransaction {\r\n return buildAndSign(wallet, {\r\n type: \"create_token\",\r\n token_name: tokenName,\r\n token_symbol: tokenSymbol,\r\n initial_supply: initialSupply,\r\n fee,\r\n });\r\n}\r\n\r\nexport function createSignedSwap(\r\n wallet: WalletKeys,\r\n tokenIn: string,\r\n tokenOut: string,\r\n amountIn: number,\r\n minAmountOut: number\r\n): SignedTransaction {\r\n return buildAndSign(wallet, {\r\n type: \"swap\",\r\n token_in: tokenIn,\r\n token_out: tokenOut,\r\n amount_in: amountIn,\r\n min_amount_out: minAmountOut,\r\n });\r\n}\r\n\r\nexport function createSignedPoolCreation(\r\n wallet: WalletKeys,\r\n tokenA: string,\r\n tokenB: string,\r\n amountA: number,\r\n amountB: number\r\n): SignedTransaction {\r\n return buildAndSign(wallet, {\r\n type: \"create_pool\",\r\n token_a: tokenA,\r\n token_b: tokenB,\r\n amount_a: amountA,\r\n amount_b: amountB,\r\n });\r\n}\r\n\r\nexport function createSignedAddLiquidity(\r\n wallet: WalletKeys,\r\n poolId: string,\r\n amountA: number,\r\n amountB: number\r\n): SignedTransaction {\r\n return buildAndSign(wallet, {\r\n type: \"add_liquidity\",\r\n pool_id: poolId,\r\n amount_a: amountA,\r\n amount_b: amountB,\r\n });\r\n}\r\n\r\nexport function createSignedRemoveLiquidity(\r\n wallet: WalletKeys,\r\n poolId: string,\r\n lpAmount: number\r\n): SignedTransaction {\r\n return buildAndSign(wallet, {\r\n type: \"remove_liquidity\",\r\n pool_id: poolId,\r\n lp_amount: lpAmount,\r\n });\r\n}\r\n\r\nexport function createSignedStake(\r\n wallet: WalletKeys,\r\n amount: number,\r\n fee = 1\r\n): SignedTransaction {\r\n return buildAndSign(wallet, { type: \"stake\", amount, fee });\r\n}\r\n\r\nexport function createSignedUnstake(\r\n wallet: WalletKeys,\r\n amount: number,\r\n fee = 1\r\n): SignedTransaction {\r\n return buildAndSign(wallet, { type: \"unstake\", amount, fee });\r\n}\r\n\r\nexport function createSignedFaucetRequest(\r\n wallet: WalletKeys\r\n): SignedTransaction {\r\n return buildAndSign(wallet, { type: \"faucet\" });\r\n}\r\n\r\nexport function createSignedBurn(\r\n wallet: WalletKeys,\r\n amount: number,\r\n fee = 1,\r\n token = \"XRGE\"\r\n): SignedTransaction {\r\n return buildAndSign(wallet, {\r\n type: \"transfer\",\r\n to: BURN_ADDRESS,\r\n amount,\r\n fee,\r\n token,\r\n });\r\n}\r\n\r\n// ===== NFT builders =====\r\n\r\nexport function createSignedNftCreateCollection(\r\n wallet: WalletKeys,\r\n symbol: string,\r\n name: string,\r\n opts: {\r\n maxSupply?: number;\r\n royaltyBps?: number;\r\n image?: string;\r\n description?: string;\r\n } = {}\r\n): SignedTransaction {\r\n return buildAndSign(wallet, {\r\n type: \"nft_create_collection\",\r\n symbol,\r\n name,\r\n fee: 50,\r\n maxSupply: opts.maxSupply,\r\n royaltyBps: opts.royaltyBps,\r\n image: opts.image,\r\n description: opts.description,\r\n });\r\n}\r\n\r\nexport function createSignedNftMint(\r\n wallet: WalletKeys,\r\n collectionId: string,\r\n name: string,\r\n opts: { metadataUri?: string; attributes?: unknown } = {}\r\n): SignedTransaction {\r\n return buildAndSign(wallet, {\r\n type: \"nft_mint\",\r\n collectionId,\r\n name,\r\n fee: 5,\r\n metadataUri: opts.metadataUri,\r\n attributes: opts.attributes,\r\n });\r\n}\r\n\r\nexport function createSignedNftBatchMint(\r\n wallet: WalletKeys,\r\n collectionId: string,\r\n names: string[],\r\n opts: { uris?: string[]; batchAttributes?: unknown[] } = {}\r\n): SignedTransaction {\r\n return buildAndSign(wallet, {\r\n type: \"nft_batch_mint\",\r\n collectionId,\r\n names,\r\n fee: 5 * names.length,\r\n uris: opts.uris,\r\n batchAttributes: opts.batchAttributes,\r\n });\r\n}\r\n\r\nexport function createSignedNftTransfer(\r\n wallet: WalletKeys,\r\n collectionId: string,\r\n tokenId: number,\r\n to: string,\r\n salePrice?: number\r\n): SignedTransaction {\r\n return buildAndSign(wallet, {\r\n type: \"nft_transfer\",\r\n collectionId,\r\n tokenId,\r\n to,\r\n fee: 1,\r\n salePrice,\r\n });\r\n}\r\n\r\nexport function createSignedNftBurn(\r\n wallet: WalletKeys,\r\n collectionId: string,\r\n tokenId: number\r\n): SignedTransaction {\r\n return buildAndSign(wallet, {\r\n type: \"nft_burn\",\r\n collectionId,\r\n tokenId,\r\n fee: 0.1,\r\n });\r\n}\r\n\r\nexport function createSignedNftLock(\r\n wallet: WalletKeys,\r\n collectionId: string,\r\n tokenId: number,\r\n locked: boolean\r\n): SignedTransaction {\r\n return buildAndSign(wallet, {\r\n type: \"nft_lock\",\r\n collectionId,\r\n tokenId,\r\n locked,\r\n fee: 0.1,\r\n });\r\n}\r\n\r\nexport function createSignedNftFreezeCollection(\r\n wallet: WalletKeys,\r\n collectionId: string,\r\n frozen: boolean\r\n): SignedTransaction {\r\n return buildAndSign(wallet, {\r\n type: \"nft_freeze_collection\",\r\n collectionId,\r\n frozen,\r\n fee: 0.1,\r\n });\r\n}\r\n","import {\r\n createSignedTransfer,\r\n createSignedTokenCreation,\r\n createSignedSwap,\r\n createSignedPoolCreation,\r\n createSignedAddLiquidity,\r\n createSignedRemoveLiquidity,\r\n createSignedStake,\r\n createSignedUnstake,\r\n createSignedFaucetRequest,\r\n createSignedBurn,\r\n createSignedNftCreateCollection,\r\n createSignedNftMint,\r\n createSignedNftBatchMint,\r\n createSignedNftTransfer,\r\n createSignedNftBurn,\r\n createSignedNftLock,\r\n createSignedNftFreezeCollection,\r\n} from \"./signer.js\";\r\nimport type {\r\n WalletKeys,\r\n ApiResponse,\r\n SignedTransaction,\r\n NodeStats,\r\n Block,\r\n TokenMetadata,\r\n BalanceResponse,\r\n LiquidityPool,\r\n SwapQuote,\r\n PoolEvent,\r\n PoolStats,\r\n NftCollection,\r\n NftToken,\r\n Validator,\r\n BridgeConfig,\r\n BridgeWithdrawal,\r\n TransferParams,\r\n CreateTokenParams,\r\n SwapParams,\r\n CreatePoolParams,\r\n AddLiquidityParams,\r\n RemoveLiquidityParams,\r\n StakeParams,\r\n CreateNftCollectionParams,\r\n MintNftParams,\r\n BatchMintNftParams,\r\n TransferNftParams,\r\n BurnNftParams,\r\n LockNftParams,\r\n FreezeCollectionParams,\r\n BridgeWithdrawParams,\r\n SwapQuoteParams,\r\n TokenMetadataUpdateParams,\r\n TokenHolder,\r\n} from \"./types.js\";\r\n\r\ntype FetchFn = typeof globalThis.fetch;\r\n\r\nexport interface RougeChainOptions {\r\n /** Custom fetch implementation (defaults to globalThis.fetch) */\r\n fetch?: FetchFn;\r\n /** Optional API key for authenticated endpoints */\r\n apiKey?: string;\r\n}\r\n\r\nexport class RougeChain {\r\n private readonly baseUrl: string;\r\n private readonly fetchFn: FetchFn;\r\n private readonly headers: Record<string, string>;\r\n\r\n public readonly nft: NftClient;\r\n public readonly dex: DexClient;\r\n public readonly bridge: BridgeClient;\r\n\r\n constructor(baseUrl: string, options: RougeChainOptions = {}) {\r\n this.baseUrl = baseUrl.replace(/\\/+$/, \"\");\r\n this.fetchFn = options.fetch ?? globalThis.fetch.bind(globalThis);\r\n this.headers = { \"Content-Type\": \"application/json\" };\r\n if (options.apiKey) {\r\n this.headers[\"X-API-Key\"] = options.apiKey;\r\n }\r\n\r\n this.nft = new NftClient(this);\r\n this.dex = new DexClient(this);\r\n this.bridge = new BridgeClient(this);\r\n }\r\n\r\n // ===== Internal helpers =====\r\n\r\n /** @internal */\r\n async get<T = unknown>(path: string): Promise<T> {\r\n const res = await this.fetchFn(`${this.baseUrl}${path}`, {\r\n headers: this.headers,\r\n });\r\n if (!res.ok) {\r\n throw new Error(`GET ${path} failed: ${res.status} ${res.statusText}`);\r\n }\r\n return res.json() as Promise<T>;\r\n }\r\n\r\n /** @internal */\r\n async post<T = unknown>(path: string, body: unknown): Promise<T> {\r\n const res = await this.fetchFn(`${this.baseUrl}${path}`, {\r\n method: \"POST\",\r\n headers: this.headers,\r\n body: JSON.stringify(body),\r\n });\r\n if (!res.ok) {\r\n const text = await res.text().catch(() => \"\");\r\n throw new Error(\r\n `POST ${path} failed: ${res.status} ${res.statusText} ${text}`\r\n );\r\n }\r\n return res.json() as Promise<T>;\r\n }\r\n\r\n /** @internal */\r\n async submitTx(\r\n endpoint: string,\r\n signedTx: SignedTransaction\r\n ): Promise<ApiResponse> {\r\n try {\r\n const raw = await this.post<Record<string, unknown>>(endpoint, signedTx);\r\n const { success, error, ...rest } = raw;\r\n return {\r\n success: success as boolean,\r\n error: error as string | undefined,\r\n data: Object.keys(rest).length > 0 ? rest : undefined,\r\n };\r\n } catch (e) {\r\n return {\r\n success: false,\r\n error: e instanceof Error ? e.message : String(e),\r\n };\r\n }\r\n }\r\n\r\n // ===== Stats & Health =====\r\n\r\n async getStats(): Promise<NodeStats> {\r\n return this.get<NodeStats>(\"/stats\");\r\n }\r\n\r\n async getHealth(): Promise<{ status: string; chain_id: string; height: number }> {\r\n return this.get(\"/health\");\r\n }\r\n\r\n // ===== Blocks =====\r\n\r\n async getBlocks(opts: { limit?: number } = {}): Promise<Block[]> {\r\n const q = opts.limit ? `?limit=${opts.limit}` : \"\";\r\n const data = await this.get<{ blocks: Block[] }>(`/blocks${q}`);\r\n return data.blocks;\r\n }\r\n\r\n async getBlocksSummary(\r\n range: \"1h\" | \"24h\" | \"7d\" = \"24h\"\r\n ): Promise<unknown> {\r\n return this.get(`/blocks/summary?range=${range}`);\r\n }\r\n\r\n // ===== Balance =====\r\n\r\n async getBalance(publicKey: string): Promise<BalanceResponse> {\r\n return this.get<BalanceResponse>(`/balance/${publicKey}`);\r\n }\r\n\r\n async getTokenBalance(publicKey: string, token: string): Promise<number> {\r\n const data = await this.get<{ balance: number }>(\r\n `/balance/${publicKey}/${token}`\r\n );\r\n return data.balance;\r\n }\r\n\r\n // ===== Transactions =====\r\n\r\n async getTransactions(\r\n opts: { limit?: number; offset?: number } = {}\r\n ): Promise<unknown> {\r\n const params = new URLSearchParams();\r\n if (opts.limit) params.set(\"limit\", String(opts.limit));\r\n if (opts.offset) params.set(\"offset\", String(opts.offset));\r\n const q = params.toString();\r\n return this.get(`/txs${q ? `?${q}` : \"\"}`);\r\n }\r\n\r\n // ===== Tokens =====\r\n\r\n async getTokens(): Promise<TokenMetadata[]> {\r\n const data = await this.get<{ tokens: TokenMetadata[]; success: boolean }>(\r\n \"/tokens\"\r\n );\r\n return data.tokens;\r\n }\r\n\r\n async getTokenMetadata(symbol: string): Promise<TokenMetadata> {\r\n return this.get<TokenMetadata>(`/token/${symbol}/metadata`);\r\n }\r\n\r\n async getTokenHolders(\r\n symbol: string\r\n ): Promise<TokenHolder[]> {\r\n const data = await this.get<{ holders: TokenHolder[] }>(\r\n `/token/${symbol}/holders`\r\n );\r\n return data.holders;\r\n }\r\n\r\n async getTokenTransactions(\r\n symbol: string\r\n ): Promise<unknown> {\r\n return this.get(`/token/${symbol}/transactions`);\r\n }\r\n\r\n // ===== Validators =====\r\n\r\n async getValidators(): Promise<Validator[]> {\r\n const data = await this.get<{ validators: Validator[] }>(\"/validators\");\r\n return data.validators;\r\n }\r\n\r\n async getValidatorStats(): Promise<unknown> {\r\n return this.get(\"/validators/stats\");\r\n }\r\n\r\n async getFinality(): Promise<{\r\n finalized_height: number;\r\n tip_height: number;\r\n total_stake: number;\r\n finalized_stake: number;\r\n }> {\r\n return this.get(\"/finality\");\r\n }\r\n\r\n // ===== Peers =====\r\n\r\n async getPeers(): Promise<string[]> {\r\n const data = await this.get<{ peers: string[] }>(\"/peers\");\r\n return data.peers;\r\n }\r\n\r\n // ===== Burned =====\r\n\r\n async getBurnedTokens(): Promise<{\r\n burned: Record<string, number>;\r\n total_xrge_burned: number;\r\n }> {\r\n return this.get(\"/burned\");\r\n }\r\n\r\n // ===== Write operations =====\r\n\r\n async transfer(\r\n wallet: WalletKeys,\r\n params: TransferParams\r\n ): Promise<ApiResponse> {\r\n const tx = createSignedTransfer(\r\n wallet,\r\n params.to,\r\n params.amount,\r\n params.fee,\r\n params.token\r\n );\r\n return this.submitTx(\"/v2/transfer\", tx);\r\n }\r\n\r\n async createToken(\r\n wallet: WalletKeys,\r\n params: CreateTokenParams\r\n ): Promise<ApiResponse> {\r\n const tx = createSignedTokenCreation(\r\n wallet,\r\n params.name,\r\n params.symbol,\r\n params.totalSupply,\r\n params.fee\r\n );\r\n return this.submitTx(\"/v2/token/create\", tx);\r\n }\r\n\r\n async stake(\r\n wallet: WalletKeys,\r\n params: StakeParams\r\n ): Promise<ApiResponse> {\r\n const tx = createSignedStake(wallet, params.amount, params.fee);\r\n return this.submitTx(\"/v2/stake\", tx);\r\n }\r\n\r\n async unstake(\r\n wallet: WalletKeys,\r\n params: StakeParams\r\n ): Promise<ApiResponse> {\r\n const tx = createSignedUnstake(wallet, params.amount, params.fee);\r\n return this.submitTx(\"/v2/unstake\", tx);\r\n }\r\n\r\n async faucet(wallet: WalletKeys): Promise<ApiResponse> {\r\n const tx = createSignedFaucetRequest(wallet);\r\n return this.submitTx(\"/v2/faucet\", tx);\r\n }\r\n\r\n async burn(\r\n wallet: WalletKeys,\r\n amount: number,\r\n fee = 1,\r\n token = \"XRGE\"\r\n ): Promise<ApiResponse> {\r\n const tx = createSignedBurn(wallet, amount, fee, token);\r\n return this.submitTx(\"/v2/transfer\", tx);\r\n }\r\n\r\n async updateTokenMetadata(\r\n wallet: WalletKeys,\r\n params: TokenMetadataUpdateParams\r\n ): Promise<ApiResponse> {\r\n try {\r\n const data = await this.post<ApiResponse>(\"/token/metadata/update\", {\r\n token_symbol: params.symbol,\r\n from_public_key: wallet.publicKey,\r\n from_private_key: wallet.privateKey,\r\n image: params.image,\r\n description: params.description,\r\n website: params.website,\r\n twitter: params.twitter,\r\n discord: params.discord,\r\n });\r\n return data;\r\n } catch (e) {\r\n return {\r\n success: false,\r\n error: e instanceof Error ? e.message : String(e),\r\n };\r\n }\r\n }\r\n}\r\n\r\n// ===== NFT Sub-client =====\r\n\r\nclass NftClient {\r\n constructor(private readonly rc: RougeChain) {}\r\n\r\n // Queries\r\n\r\n async getCollections(): Promise<NftCollection[]> {\r\n const data = await this.rc.get<{ collections: NftCollection[] }>(\r\n \"/nft/collections\"\r\n );\r\n return data.collections;\r\n }\r\n\r\n async getCollection(collectionId: string): Promise<NftCollection> {\r\n return this.rc.get<NftCollection>(\r\n `/nft/collection/${encodeURIComponent(collectionId)}`\r\n );\r\n }\r\n\r\n async getTokens(\r\n collectionId: string,\r\n opts: { limit?: number; offset?: number } = {}\r\n ): Promise<{ tokens: NftToken[]; total: number }> {\r\n const params = new URLSearchParams();\r\n if (opts.limit !== undefined) params.set(\"limit\", String(opts.limit));\r\n if (opts.offset !== undefined) params.set(\"offset\", String(opts.offset));\r\n const q = params.toString();\r\n return this.rc.get(\r\n `/nft/collection/${encodeURIComponent(collectionId)}/tokens${q ? `?${q}` : \"\"}`\r\n );\r\n }\r\n\r\n async getToken(\r\n collectionId: string,\r\n tokenId: number\r\n ): Promise<NftToken> {\r\n return this.rc.get<NftToken>(\r\n `/nft/token/${encodeURIComponent(collectionId)}/${tokenId}`\r\n );\r\n }\r\n\r\n async getByOwner(pubkey: string): Promise<NftToken[]> {\r\n const data = await this.rc.get<{ nfts: NftToken[] }>(\r\n `/nft/owner/${encodeURIComponent(pubkey)}`\r\n );\r\n return data.nfts;\r\n }\r\n\r\n // Write operations\r\n\r\n async createCollection(\r\n wallet: WalletKeys,\r\n params: CreateNftCollectionParams\r\n ): Promise<ApiResponse> {\r\n const tx = createSignedNftCreateCollection(wallet, params.symbol, params.name, {\r\n maxSupply: params.maxSupply,\r\n royaltyBps: params.royaltyBps,\r\n image: params.image,\r\n description: params.description,\r\n });\r\n return this.rc.submitTx(\"/v2/nft/collection/create\", tx);\r\n }\r\n\r\n async mint(\r\n wallet: WalletKeys,\r\n params: MintNftParams\r\n ): Promise<ApiResponse> {\r\n const tx = createSignedNftMint(wallet, params.collectionId, params.name, {\r\n metadataUri: params.metadataUri,\r\n attributes: params.attributes,\r\n });\r\n return this.rc.submitTx(\"/v2/nft/mint\", tx);\r\n }\r\n\r\n async batchMint(\r\n wallet: WalletKeys,\r\n params: BatchMintNftParams\r\n ): Promise<ApiResponse> {\r\n const tx = createSignedNftBatchMint(\r\n wallet,\r\n params.collectionId,\r\n params.names,\r\n { uris: params.uris, batchAttributes: params.batchAttributes }\r\n );\r\n return this.rc.submitTx(\"/v2/nft/batch-mint\", tx);\r\n }\r\n\r\n async transfer(\r\n wallet: WalletKeys,\r\n params: TransferNftParams\r\n ): Promise<ApiResponse> {\r\n const tx = createSignedNftTransfer(\r\n wallet,\r\n params.collectionId,\r\n params.tokenId,\r\n params.to,\r\n params.salePrice\r\n );\r\n return this.rc.submitTx(\"/v2/nft/transfer\", tx);\r\n }\r\n\r\n async burn(\r\n wallet: WalletKeys,\r\n params: BurnNftParams\r\n ): Promise<ApiResponse> {\r\n const tx = createSignedNftBurn(wallet, params.collectionId, params.tokenId);\r\n return this.rc.submitTx(\"/v2/nft/burn\", tx);\r\n }\r\n\r\n async lock(\r\n wallet: WalletKeys,\r\n params: LockNftParams\r\n ): Promise<ApiResponse> {\r\n const tx = createSignedNftLock(\r\n wallet,\r\n params.collectionId,\r\n params.tokenId,\r\n params.locked\r\n );\r\n return this.rc.submitTx(\"/v2/nft/lock\", tx);\r\n }\r\n\r\n async freezeCollection(\r\n wallet: WalletKeys,\r\n params: FreezeCollectionParams\r\n ): Promise<ApiResponse> {\r\n const tx = createSignedNftFreezeCollection(\r\n wallet,\r\n params.collectionId,\r\n params.frozen\r\n );\r\n return this.rc.submitTx(\"/v2/nft/freeze-collection\", tx);\r\n }\r\n}\r\n\r\n// ===== DEX Sub-client =====\r\n\r\nclass DexClient {\r\n constructor(private readonly rc: RougeChain) {}\r\n\r\n // Queries\r\n\r\n async getPools(): Promise<LiquidityPool[]> {\r\n const data = await this.rc.get<{ pools: LiquidityPool[] }>(\"/pools\");\r\n return data.pools;\r\n }\r\n\r\n async getPool(poolId: string): Promise<LiquidityPool> {\r\n return this.rc.get<LiquidityPool>(`/pool/${poolId}`);\r\n }\r\n\r\n async getPoolEvents(poolId: string): Promise<PoolEvent[]> {\r\n const data = await this.rc.get<{ events: PoolEvent[] }>(\r\n `/pool/${poolId}/events`\r\n );\r\n return data.events;\r\n }\r\n\r\n async getPoolPrices(poolId: string): Promise<unknown> {\r\n return this.rc.get(`/pool/${poolId}/prices`);\r\n }\r\n\r\n async getPoolStats(poolId: string): Promise<PoolStats> {\r\n return this.rc.get<PoolStats>(`/pool/${poolId}/stats`);\r\n }\r\n\r\n async quote(params: SwapQuoteParams): Promise<SwapQuote> {\r\n return this.rc.post<SwapQuote>(\"/swap/quote\", {\r\n pool_id: params.poolId,\r\n token_in: params.tokenIn,\r\n amount_in: params.amountIn,\r\n });\r\n }\r\n\r\n // Write operations\r\n\r\n async swap(\r\n wallet: WalletKeys,\r\n params: SwapParams\r\n ): Promise<ApiResponse> {\r\n const tx = createSignedSwap(\r\n wallet,\r\n params.tokenIn,\r\n params.tokenOut,\r\n params.amountIn,\r\n params.minAmountOut\r\n );\r\n return this.rc.submitTx(\"/v2/swap/execute\", tx);\r\n }\r\n\r\n async createPool(\r\n wallet: WalletKeys,\r\n params: CreatePoolParams\r\n ): Promise<ApiResponse> {\r\n const tx = createSignedPoolCreation(\r\n wallet,\r\n params.tokenA,\r\n params.tokenB,\r\n params.amountA,\r\n params.amountB\r\n );\r\n return this.rc.submitTx(\"/v2/pool/create\", tx);\r\n }\r\n\r\n async addLiquidity(\r\n wallet: WalletKeys,\r\n params: AddLiquidityParams\r\n ): Promise<ApiResponse> {\r\n const tx = createSignedAddLiquidity(\r\n wallet,\r\n params.poolId,\r\n params.amountA,\r\n params.amountB\r\n );\r\n return this.rc.submitTx(\"/v2/pool/add-liquidity\", tx);\r\n }\r\n\r\n async removeLiquidity(\r\n wallet: WalletKeys,\r\n params: RemoveLiquidityParams\r\n ): Promise<ApiResponse> {\r\n const tx = createSignedRemoveLiquidity(wallet, params.poolId, params.lpAmount);\r\n return this.rc.submitTx(\"/v2/pool/remove-liquidity\", tx);\r\n }\r\n}\r\n\r\n// ===== Bridge Sub-client =====\r\n\r\nclass BridgeClient {\r\n constructor(private readonly rc: RougeChain) {}\r\n\r\n async getConfig(): Promise<BridgeConfig> {\r\n try {\r\n const data = await this.rc.get<Record<string, unknown>>(\"/bridge/config\");\r\n return {\r\n enabled: data.enabled === true,\r\n custodyAddress: data.custodyAddress as string | undefined,\r\n chainId: (data.chainId as number) ?? 84532,\r\n };\r\n } catch {\r\n return { enabled: false, chainId: 84532 };\r\n }\r\n }\r\n\r\n async getWithdrawals(): Promise<BridgeWithdrawal[]> {\r\n const data = await this.rc.get<{ withdrawals: BridgeWithdrawal[] }>(\r\n \"/bridge/withdrawals\"\r\n );\r\n return data.withdrawals;\r\n }\r\n\r\n async withdraw(\r\n wallet: WalletKeys,\r\n params: BridgeWithdrawParams\r\n ): Promise<ApiResponse> {\r\n try {\r\n const evm = params.evmAddress.startsWith(\"0x\")\r\n ? params.evmAddress\r\n : `0x${params.evmAddress}`;\r\n const data = await this.rc.post<Record<string, unknown>>(\r\n \"/bridge/withdraw\",\r\n {\r\n fromPrivateKey: wallet.privateKey,\r\n fromPublicKey: wallet.publicKey,\r\n amountUnits: params.amount,\r\n evmAddress: evm,\r\n fee: params.fee,\r\n }\r\n );\r\n return {\r\n success: data.success === true,\r\n error: data.error as string | undefined,\r\n data,\r\n };\r\n } catch (e) {\r\n return {\r\n success: false,\r\n error: e instanceof Error ? e.message : String(e),\r\n };\r\n }\r\n }\r\n\r\n async claim(params: {\r\n evmTxHash: string;\r\n evmAddress: string;\r\n evmSignature: string;\r\n recipientPubkey: string;\r\n }): Promise<ApiResponse> {\r\n try {\r\n const data = await this.rc.post<Record<string, unknown>>(\r\n \"/bridge/claim\",\r\n {\r\n evmTxHash: params.evmTxHash.startsWith(\"0x\")\r\n ? params.evmTxHash\r\n : `0x${params.evmTxHash}`,\r\n evmAddress: params.evmAddress.startsWith(\"0x\")\r\n ? params.evmAddress\r\n : `0x${params.evmAddress}`,\r\n evmSignature: params.evmSignature,\r\n recipientRougechainPubkey: params.recipientPubkey,\r\n }\r\n );\r\n return {\r\n success: data.success === true,\r\n error: data.error as string | undefined,\r\n data,\r\n };\r\n } catch (e) {\r\n return {\r\n success: false,\r\n error: e instanceof Error ? e.message : String(e),\r\n };\r\n }\r\n }\r\n}\r\n","import { ml_dsa65 } from \"@noble/post-quantum/ml-dsa.js\";\r\nimport { bytesToHex, hexToBytes } from \"./utils.js\";\r\nimport type { WalletKeys } from \"./types.js\";\r\n\r\nexport class Wallet implements WalletKeys {\r\n public readonly publicKey: string;\r\n public readonly privateKey: string;\r\n\r\n private constructor(publicKey: string, privateKey: string) {\r\n this.publicKey = publicKey;\r\n this.privateKey = privateKey;\r\n }\r\n\r\n /**\r\n * Generate a new ML-DSA-65 keypair.\r\n * Uses crypto.getRandomValues for secure randomness.\r\n */\r\n static generate(): Wallet {\r\n const keypair = ml_dsa65.keygen();\r\n return new Wallet(\r\n bytesToHex(keypair.publicKey),\r\n bytesToHex(keypair.secretKey)\r\n );\r\n }\r\n\r\n /**\r\n * Restore a wallet from existing hex-encoded keys.\r\n */\r\n static fromKeys(publicKey: string, privateKey: string): Wallet {\r\n return new Wallet(publicKey, privateKey);\r\n }\r\n\r\n /**\r\n * Export keys as a plain object (for serialization/storage).\r\n */\r\n toJSON(): WalletKeys {\r\n return { publicKey: this.publicKey, privateKey: this.privateKey };\r\n }\r\n\r\n /**\r\n * Verify that the keypair is valid by signing and verifying a test message.\r\n */\r\n verify(): boolean {\r\n try {\r\n const msg = new TextEncoder().encode(\"rougechain-verify\");\r\n const sig = ml_dsa65.sign(msg, hexToBytes(this.privateKey));\r\n return ml_dsa65.verify(sig, msg, hexToBytes(this.publicKey));\r\n } catch {\r\n return false;\r\n }\r\n }\r\n}\r\n"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,441 @@
|
|
|
1
|
+
interface WalletKeys {
|
|
2
|
+
publicKey: string;
|
|
3
|
+
privateKey: string;
|
|
4
|
+
}
|
|
5
|
+
interface ApiResponse<T = unknown> {
|
|
6
|
+
success: boolean;
|
|
7
|
+
error?: string;
|
|
8
|
+
data?: T;
|
|
9
|
+
}
|
|
10
|
+
type TransactionType = "transfer" | "create_token" | "swap" | "create_pool" | "add_liquidity" | "remove_liquidity" | "stake" | "unstake" | "faucet" | "nft_create_collection" | "nft_mint" | "nft_batch_mint" | "nft_transfer" | "nft_burn" | "nft_lock" | "nft_freeze_collection";
|
|
11
|
+
interface TransactionPayload {
|
|
12
|
+
type: TransactionType;
|
|
13
|
+
from: string;
|
|
14
|
+
to?: string;
|
|
15
|
+
amount?: number;
|
|
16
|
+
fee?: number;
|
|
17
|
+
token?: string;
|
|
18
|
+
timestamp: number;
|
|
19
|
+
nonce: string;
|
|
20
|
+
token_name?: string;
|
|
21
|
+
token_symbol?: string;
|
|
22
|
+
initial_supply?: number;
|
|
23
|
+
token_in?: string;
|
|
24
|
+
token_out?: string;
|
|
25
|
+
amount_in?: number;
|
|
26
|
+
min_amount_out?: number;
|
|
27
|
+
pool_id?: string;
|
|
28
|
+
token_a?: string;
|
|
29
|
+
token_b?: string;
|
|
30
|
+
amount_a?: number;
|
|
31
|
+
amount_b?: number;
|
|
32
|
+
lp_amount?: number;
|
|
33
|
+
symbol?: string;
|
|
34
|
+
name?: string;
|
|
35
|
+
collectionId?: string;
|
|
36
|
+
description?: string;
|
|
37
|
+
image?: string;
|
|
38
|
+
maxSupply?: number;
|
|
39
|
+
royaltyBps?: number;
|
|
40
|
+
tokenId?: number;
|
|
41
|
+
metadataUri?: string;
|
|
42
|
+
attributes?: unknown;
|
|
43
|
+
locked?: boolean;
|
|
44
|
+
frozen?: boolean;
|
|
45
|
+
salePrice?: number;
|
|
46
|
+
names?: string[];
|
|
47
|
+
uris?: string[];
|
|
48
|
+
batchAttributes?: unknown[];
|
|
49
|
+
}
|
|
50
|
+
interface SignedTransaction {
|
|
51
|
+
payload: TransactionPayload;
|
|
52
|
+
signature: string;
|
|
53
|
+
public_key: string;
|
|
54
|
+
}
|
|
55
|
+
interface BlockHeader {
|
|
56
|
+
version: number;
|
|
57
|
+
chain_id: string;
|
|
58
|
+
height: number;
|
|
59
|
+
time: number;
|
|
60
|
+
prev_hash: string;
|
|
61
|
+
tx_hash: string;
|
|
62
|
+
proposer_pub_key: string;
|
|
63
|
+
}
|
|
64
|
+
interface Transaction {
|
|
65
|
+
version: number;
|
|
66
|
+
tx_type: string;
|
|
67
|
+
from_pub_key: string;
|
|
68
|
+
target_pub_key?: string | null;
|
|
69
|
+
amount: number;
|
|
70
|
+
fee: number;
|
|
71
|
+
sig: string;
|
|
72
|
+
token_name?: string | null;
|
|
73
|
+
token_symbol?: string | null;
|
|
74
|
+
token_decimals?: number | null;
|
|
75
|
+
token_total_supply?: number | null;
|
|
76
|
+
pool_id?: string | null;
|
|
77
|
+
token_a_symbol?: string | null;
|
|
78
|
+
token_b_symbol?: string | null;
|
|
79
|
+
amount_a?: number | null;
|
|
80
|
+
amount_b?: number | null;
|
|
81
|
+
min_amount_out?: number | null;
|
|
82
|
+
swap_path?: string[] | null;
|
|
83
|
+
lp_amount?: number | null;
|
|
84
|
+
faucet?: boolean;
|
|
85
|
+
signed_payload?: string | null;
|
|
86
|
+
}
|
|
87
|
+
interface Block {
|
|
88
|
+
version: number;
|
|
89
|
+
header: BlockHeader;
|
|
90
|
+
txs: Transaction[];
|
|
91
|
+
proposer_sig: string;
|
|
92
|
+
hash: string;
|
|
93
|
+
}
|
|
94
|
+
interface NodeStats {
|
|
95
|
+
height: number;
|
|
96
|
+
peers: number;
|
|
97
|
+
network_height: number;
|
|
98
|
+
mining: boolean;
|
|
99
|
+
total_fees: number;
|
|
100
|
+
last_block_fees: number;
|
|
101
|
+
finalized_height: number;
|
|
102
|
+
ws_clients: number;
|
|
103
|
+
}
|
|
104
|
+
interface TokenMetadata {
|
|
105
|
+
symbol: string;
|
|
106
|
+
name: string;
|
|
107
|
+
creator: string;
|
|
108
|
+
image?: string;
|
|
109
|
+
description?: string;
|
|
110
|
+
website?: string;
|
|
111
|
+
twitter?: string;
|
|
112
|
+
discord?: string;
|
|
113
|
+
created_at: number;
|
|
114
|
+
updated_at: number;
|
|
115
|
+
}
|
|
116
|
+
interface TokenHolder {
|
|
117
|
+
address: string;
|
|
118
|
+
balance: number;
|
|
119
|
+
}
|
|
120
|
+
interface BalanceResponse {
|
|
121
|
+
balance: number;
|
|
122
|
+
token_balances: Record<string, number>;
|
|
123
|
+
lp_balances: Record<string, number>;
|
|
124
|
+
}
|
|
125
|
+
interface LiquidityPool {
|
|
126
|
+
pool_id: string;
|
|
127
|
+
token_a_symbol: string;
|
|
128
|
+
token_b_symbol: string;
|
|
129
|
+
reserve_a: number;
|
|
130
|
+
reserve_b: number;
|
|
131
|
+
total_lp: number;
|
|
132
|
+
fee_rate: number;
|
|
133
|
+
created_at: number;
|
|
134
|
+
}
|
|
135
|
+
interface SwapQuote {
|
|
136
|
+
amount_out: number;
|
|
137
|
+
price_impact: number;
|
|
138
|
+
path: string[];
|
|
139
|
+
}
|
|
140
|
+
interface PoolEvent {
|
|
141
|
+
event_type: string;
|
|
142
|
+
pool_id: string;
|
|
143
|
+
actor: string;
|
|
144
|
+
token_a_amount?: number;
|
|
145
|
+
token_b_amount?: number;
|
|
146
|
+
lp_amount?: number;
|
|
147
|
+
timestamp: number;
|
|
148
|
+
}
|
|
149
|
+
interface PoolStats {
|
|
150
|
+
pool_id: string;
|
|
151
|
+
volume_24h: number;
|
|
152
|
+
trades_24h: number;
|
|
153
|
+
tvl: number;
|
|
154
|
+
}
|
|
155
|
+
interface NftCollection {
|
|
156
|
+
collection_id: string;
|
|
157
|
+
symbol: string;
|
|
158
|
+
name: string;
|
|
159
|
+
creator: string;
|
|
160
|
+
description?: string;
|
|
161
|
+
image?: string;
|
|
162
|
+
max_supply?: number;
|
|
163
|
+
minted: number;
|
|
164
|
+
royalty_bps: number;
|
|
165
|
+
royalty_recipient: string;
|
|
166
|
+
frozen: boolean;
|
|
167
|
+
created_at: number;
|
|
168
|
+
}
|
|
169
|
+
interface NftToken {
|
|
170
|
+
collection_id: string;
|
|
171
|
+
token_id: number;
|
|
172
|
+
owner: string;
|
|
173
|
+
creator: string;
|
|
174
|
+
name: string;
|
|
175
|
+
metadata_uri?: string;
|
|
176
|
+
attributes?: unknown;
|
|
177
|
+
locked: boolean;
|
|
178
|
+
minted_at: number;
|
|
179
|
+
transferred_at: number;
|
|
180
|
+
}
|
|
181
|
+
interface Validator {
|
|
182
|
+
public_key: string;
|
|
183
|
+
stake: number;
|
|
184
|
+
status: string;
|
|
185
|
+
jailed_until: number;
|
|
186
|
+
uptime: number;
|
|
187
|
+
}
|
|
188
|
+
interface BridgeConfig {
|
|
189
|
+
enabled: boolean;
|
|
190
|
+
custodyAddress?: string;
|
|
191
|
+
chainId: number;
|
|
192
|
+
}
|
|
193
|
+
interface BridgeWithdrawal {
|
|
194
|
+
tx_id: string;
|
|
195
|
+
from_pub_key: string;
|
|
196
|
+
evm_address: string;
|
|
197
|
+
amount_units: number;
|
|
198
|
+
status: string;
|
|
199
|
+
created_at: number;
|
|
200
|
+
}
|
|
201
|
+
interface TransferParams {
|
|
202
|
+
to: string;
|
|
203
|
+
amount: number;
|
|
204
|
+
fee?: number;
|
|
205
|
+
token?: string;
|
|
206
|
+
}
|
|
207
|
+
interface CreateTokenParams {
|
|
208
|
+
name: string;
|
|
209
|
+
symbol: string;
|
|
210
|
+
totalSupply: number;
|
|
211
|
+
fee?: number;
|
|
212
|
+
}
|
|
213
|
+
interface SwapParams {
|
|
214
|
+
tokenIn: string;
|
|
215
|
+
tokenOut: string;
|
|
216
|
+
amountIn: number;
|
|
217
|
+
minAmountOut: number;
|
|
218
|
+
}
|
|
219
|
+
interface CreatePoolParams {
|
|
220
|
+
tokenA: string;
|
|
221
|
+
tokenB: string;
|
|
222
|
+
amountA: number;
|
|
223
|
+
amountB: number;
|
|
224
|
+
}
|
|
225
|
+
interface AddLiquidityParams {
|
|
226
|
+
poolId: string;
|
|
227
|
+
amountA: number;
|
|
228
|
+
amountB: number;
|
|
229
|
+
}
|
|
230
|
+
interface RemoveLiquidityParams {
|
|
231
|
+
poolId: string;
|
|
232
|
+
lpAmount: number;
|
|
233
|
+
}
|
|
234
|
+
interface StakeParams {
|
|
235
|
+
amount: number;
|
|
236
|
+
fee?: number;
|
|
237
|
+
}
|
|
238
|
+
interface CreateNftCollectionParams {
|
|
239
|
+
symbol: string;
|
|
240
|
+
name: string;
|
|
241
|
+
maxSupply?: number;
|
|
242
|
+
royaltyBps?: number;
|
|
243
|
+
image?: string;
|
|
244
|
+
description?: string;
|
|
245
|
+
}
|
|
246
|
+
interface MintNftParams {
|
|
247
|
+
collectionId: string;
|
|
248
|
+
name: string;
|
|
249
|
+
metadataUri?: string;
|
|
250
|
+
attributes?: unknown;
|
|
251
|
+
}
|
|
252
|
+
interface BatchMintNftParams {
|
|
253
|
+
collectionId: string;
|
|
254
|
+
names: string[];
|
|
255
|
+
uris?: string[];
|
|
256
|
+
batchAttributes?: unknown[];
|
|
257
|
+
}
|
|
258
|
+
interface TransferNftParams {
|
|
259
|
+
collectionId: string;
|
|
260
|
+
tokenId: number;
|
|
261
|
+
to: string;
|
|
262
|
+
salePrice?: number;
|
|
263
|
+
}
|
|
264
|
+
interface BurnNftParams {
|
|
265
|
+
collectionId: string;
|
|
266
|
+
tokenId: number;
|
|
267
|
+
}
|
|
268
|
+
interface LockNftParams {
|
|
269
|
+
collectionId: string;
|
|
270
|
+
tokenId: number;
|
|
271
|
+
locked: boolean;
|
|
272
|
+
}
|
|
273
|
+
interface FreezeCollectionParams {
|
|
274
|
+
collectionId: string;
|
|
275
|
+
frozen: boolean;
|
|
276
|
+
}
|
|
277
|
+
interface BridgeWithdrawParams {
|
|
278
|
+
amount: number;
|
|
279
|
+
evmAddress: string;
|
|
280
|
+
fee?: number;
|
|
281
|
+
}
|
|
282
|
+
interface SwapQuoteParams {
|
|
283
|
+
poolId: string;
|
|
284
|
+
tokenIn: string;
|
|
285
|
+
amountIn: number;
|
|
286
|
+
}
|
|
287
|
+
interface TokenMetadataUpdateParams {
|
|
288
|
+
symbol: string;
|
|
289
|
+
image?: string;
|
|
290
|
+
description?: string;
|
|
291
|
+
website?: string;
|
|
292
|
+
twitter?: string;
|
|
293
|
+
discord?: string;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
type FetchFn = typeof globalThis.fetch;
|
|
297
|
+
interface RougeChainOptions {
|
|
298
|
+
/** Custom fetch implementation (defaults to globalThis.fetch) */
|
|
299
|
+
fetch?: FetchFn;
|
|
300
|
+
/** Optional API key for authenticated endpoints */
|
|
301
|
+
apiKey?: string;
|
|
302
|
+
}
|
|
303
|
+
declare class RougeChain {
|
|
304
|
+
private readonly baseUrl;
|
|
305
|
+
private readonly fetchFn;
|
|
306
|
+
private readonly headers;
|
|
307
|
+
readonly nft: NftClient;
|
|
308
|
+
readonly dex: DexClient;
|
|
309
|
+
readonly bridge: BridgeClient;
|
|
310
|
+
constructor(baseUrl: string, options?: RougeChainOptions);
|
|
311
|
+
/** @internal */
|
|
312
|
+
get<T = unknown>(path: string): Promise<T>;
|
|
313
|
+
/** @internal */
|
|
314
|
+
post<T = unknown>(path: string, body: unknown): Promise<T>;
|
|
315
|
+
/** @internal */
|
|
316
|
+
submitTx(endpoint: string, signedTx: SignedTransaction): Promise<ApiResponse>;
|
|
317
|
+
getStats(): Promise<NodeStats>;
|
|
318
|
+
getHealth(): Promise<{
|
|
319
|
+
status: string;
|
|
320
|
+
chain_id: string;
|
|
321
|
+
height: number;
|
|
322
|
+
}>;
|
|
323
|
+
getBlocks(opts?: {
|
|
324
|
+
limit?: number;
|
|
325
|
+
}): Promise<Block[]>;
|
|
326
|
+
getBlocksSummary(range?: "1h" | "24h" | "7d"): Promise<unknown>;
|
|
327
|
+
getBalance(publicKey: string): Promise<BalanceResponse>;
|
|
328
|
+
getTokenBalance(publicKey: string, token: string): Promise<number>;
|
|
329
|
+
getTransactions(opts?: {
|
|
330
|
+
limit?: number;
|
|
331
|
+
offset?: number;
|
|
332
|
+
}): Promise<unknown>;
|
|
333
|
+
getTokens(): Promise<TokenMetadata[]>;
|
|
334
|
+
getTokenMetadata(symbol: string): Promise<TokenMetadata>;
|
|
335
|
+
getTokenHolders(symbol: string): Promise<TokenHolder[]>;
|
|
336
|
+
getTokenTransactions(symbol: string): Promise<unknown>;
|
|
337
|
+
getValidators(): Promise<Validator[]>;
|
|
338
|
+
getValidatorStats(): Promise<unknown>;
|
|
339
|
+
getFinality(): Promise<{
|
|
340
|
+
finalized_height: number;
|
|
341
|
+
tip_height: number;
|
|
342
|
+
total_stake: number;
|
|
343
|
+
finalized_stake: number;
|
|
344
|
+
}>;
|
|
345
|
+
getPeers(): Promise<string[]>;
|
|
346
|
+
getBurnedTokens(): Promise<{
|
|
347
|
+
burned: Record<string, number>;
|
|
348
|
+
total_xrge_burned: number;
|
|
349
|
+
}>;
|
|
350
|
+
transfer(wallet: WalletKeys, params: TransferParams): Promise<ApiResponse>;
|
|
351
|
+
createToken(wallet: WalletKeys, params: CreateTokenParams): Promise<ApiResponse>;
|
|
352
|
+
stake(wallet: WalletKeys, params: StakeParams): Promise<ApiResponse>;
|
|
353
|
+
unstake(wallet: WalletKeys, params: StakeParams): Promise<ApiResponse>;
|
|
354
|
+
faucet(wallet: WalletKeys): Promise<ApiResponse>;
|
|
355
|
+
burn(wallet: WalletKeys, amount: number, fee?: number, token?: string): Promise<ApiResponse>;
|
|
356
|
+
updateTokenMetadata(wallet: WalletKeys, params: TokenMetadataUpdateParams): Promise<ApiResponse>;
|
|
357
|
+
}
|
|
358
|
+
declare class NftClient {
|
|
359
|
+
private readonly rc;
|
|
360
|
+
constructor(rc: RougeChain);
|
|
361
|
+
getCollections(): Promise<NftCollection[]>;
|
|
362
|
+
getCollection(collectionId: string): Promise<NftCollection>;
|
|
363
|
+
getTokens(collectionId: string, opts?: {
|
|
364
|
+
limit?: number;
|
|
365
|
+
offset?: number;
|
|
366
|
+
}): Promise<{
|
|
367
|
+
tokens: NftToken[];
|
|
368
|
+
total: number;
|
|
369
|
+
}>;
|
|
370
|
+
getToken(collectionId: string, tokenId: number): Promise<NftToken>;
|
|
371
|
+
getByOwner(pubkey: string): Promise<NftToken[]>;
|
|
372
|
+
createCollection(wallet: WalletKeys, params: CreateNftCollectionParams): Promise<ApiResponse>;
|
|
373
|
+
mint(wallet: WalletKeys, params: MintNftParams): Promise<ApiResponse>;
|
|
374
|
+
batchMint(wallet: WalletKeys, params: BatchMintNftParams): Promise<ApiResponse>;
|
|
375
|
+
transfer(wallet: WalletKeys, params: TransferNftParams): Promise<ApiResponse>;
|
|
376
|
+
burn(wallet: WalletKeys, params: BurnNftParams): Promise<ApiResponse>;
|
|
377
|
+
lock(wallet: WalletKeys, params: LockNftParams): Promise<ApiResponse>;
|
|
378
|
+
freezeCollection(wallet: WalletKeys, params: FreezeCollectionParams): Promise<ApiResponse>;
|
|
379
|
+
}
|
|
380
|
+
declare class DexClient {
|
|
381
|
+
private readonly rc;
|
|
382
|
+
constructor(rc: RougeChain);
|
|
383
|
+
getPools(): Promise<LiquidityPool[]>;
|
|
384
|
+
getPool(poolId: string): Promise<LiquidityPool>;
|
|
385
|
+
getPoolEvents(poolId: string): Promise<PoolEvent[]>;
|
|
386
|
+
getPoolPrices(poolId: string): Promise<unknown>;
|
|
387
|
+
getPoolStats(poolId: string): Promise<PoolStats>;
|
|
388
|
+
quote(params: SwapQuoteParams): Promise<SwapQuote>;
|
|
389
|
+
swap(wallet: WalletKeys, params: SwapParams): Promise<ApiResponse>;
|
|
390
|
+
createPool(wallet: WalletKeys, params: CreatePoolParams): Promise<ApiResponse>;
|
|
391
|
+
addLiquidity(wallet: WalletKeys, params: AddLiquidityParams): Promise<ApiResponse>;
|
|
392
|
+
removeLiquidity(wallet: WalletKeys, params: RemoveLiquidityParams): Promise<ApiResponse>;
|
|
393
|
+
}
|
|
394
|
+
declare class BridgeClient {
|
|
395
|
+
private readonly rc;
|
|
396
|
+
constructor(rc: RougeChain);
|
|
397
|
+
getConfig(): Promise<BridgeConfig>;
|
|
398
|
+
getWithdrawals(): Promise<BridgeWithdrawal[]>;
|
|
399
|
+
withdraw(wallet: WalletKeys, params: BridgeWithdrawParams): Promise<ApiResponse>;
|
|
400
|
+
claim(params: {
|
|
401
|
+
evmTxHash: string;
|
|
402
|
+
evmAddress: string;
|
|
403
|
+
evmSignature: string;
|
|
404
|
+
recipientPubkey: string;
|
|
405
|
+
}): Promise<ApiResponse>;
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
declare class Wallet implements WalletKeys {
|
|
409
|
+
readonly publicKey: string;
|
|
410
|
+
readonly privateKey: string;
|
|
411
|
+
private constructor();
|
|
412
|
+
/**
|
|
413
|
+
* Generate a new ML-DSA-65 keypair.
|
|
414
|
+
* Uses crypto.getRandomValues for secure randomness.
|
|
415
|
+
*/
|
|
416
|
+
static generate(): Wallet;
|
|
417
|
+
/**
|
|
418
|
+
* Restore a wallet from existing hex-encoded keys.
|
|
419
|
+
*/
|
|
420
|
+
static fromKeys(publicKey: string, privateKey: string): Wallet;
|
|
421
|
+
/**
|
|
422
|
+
* Export keys as a plain object (for serialization/storage).
|
|
423
|
+
*/
|
|
424
|
+
toJSON(): WalletKeys;
|
|
425
|
+
/**
|
|
426
|
+
* Verify that the keypair is valid by signing and verifying a test message.
|
|
427
|
+
*/
|
|
428
|
+
verify(): boolean;
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
declare const BURN_ADDRESS = "XRGE_BURN_0x000000000000000000000000000000000000000000000000000000000000DEAD";
|
|
432
|
+
declare function serializePayload(payload: TransactionPayload): Uint8Array;
|
|
433
|
+
declare function signTransaction(payload: TransactionPayload, privateKey: string, publicKey: string): SignedTransaction;
|
|
434
|
+
declare function verifyTransaction(signedTx: SignedTransaction): boolean;
|
|
435
|
+
declare function isBurnAddress(address: string): boolean;
|
|
436
|
+
|
|
437
|
+
declare function hexToBytes(hex: string): Uint8Array;
|
|
438
|
+
declare function bytesToHex(bytes: Uint8Array): string;
|
|
439
|
+
declare function generateNonce(): string;
|
|
440
|
+
|
|
441
|
+
export { type AddLiquidityParams, type ApiResponse, BURN_ADDRESS, type BalanceResponse, type BatchMintNftParams, type Block, type BlockHeader, type BridgeConfig, type BridgeWithdrawParams, type BridgeWithdrawal, type BurnNftParams, type CreateNftCollectionParams, type CreatePoolParams, type CreateTokenParams, type FreezeCollectionParams, type LiquidityPool, type LockNftParams, type MintNftParams, type NftCollection, type NftToken, type NodeStats, type PoolEvent, type PoolStats, type RemoveLiquidityParams, RougeChain, type RougeChainOptions, type SignedTransaction, type StakeParams, type SwapParams, type SwapQuote, type SwapQuoteParams, type TokenHolder, type TokenMetadata, type TokenMetadataUpdateParams, type Transaction, type TransactionPayload, type TransactionType, type TransferNftParams, type TransferParams, type Validator, Wallet, type WalletKeys, bytesToHex, generateNonce, hexToBytes, isBurnAddress, serializePayload, signTransaction, verifyTransaction };
|