@thru/thru-sdk 0.2.7 → 0.2.8
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/dist/{chunk-DSEDHQB6.js → chunk-7YBVSFCS.js} +927 -829
- package/dist/chunk-7YBVSFCS.js.map +1 -0
- package/dist/{VersionInfo-BsDQIEcl.d.ts → client-BbrO3ANU.d.ts} +98 -3
- package/dist/client.d.ts +3 -100
- package/dist/client.js +1 -100
- package/dist/client.js.map +1 -1
- package/dist/metafile-esm.json +1 -1
- package/dist/sdk.d.ts +3 -3
- package/dist/sdk.js +1 -1
- package/package.json +4 -4
- package/dist/chunk-DSEDHQB6.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../thru-ts-client-sdk/domain/transactions/domain-signing.ts","../thru-ts-client-sdk/domain/primitives/byte-utils.ts","../thru-ts-client-sdk/domain/primitives/constants.ts","../thru-ts-client-sdk/domain/primitives/Pubkey.ts","../thru-ts-client-sdk/domain/primitives/Signature.ts","../thru-ts-client-sdk/wire-format.ts","../thru-ts-client-sdk/domain/transactions/Transaction.ts","../thru-ts-client-sdk/domain/transactions/utils.ts","../thru-ts-client-sdk/domain/transactions/TransactionBuilder.ts","../thru-ts-client-sdk/utils/utils.ts","../thru-ts-client-sdk/domain/transactions/TransactionStatusSnapshot.ts","../thru-ts-client-sdk/defaults.ts","../thru-ts-client-sdk/core/client.ts","../thru-ts-client-sdk/domain/accounts/Account.ts","../thru-ts-client-sdk/domain/accounts/streaming.ts","../thru-ts-client-sdk/domain/pagination/Page.ts","../thru-ts-client-sdk/domain/proofs/StateProof.ts","../thru-ts-client-sdk/modules/proofs.ts","../thru-ts-client-sdk/modules/accounts.ts","../thru-ts-client-sdk/domain/transactions/streaming.ts","../thru-ts-client-sdk/domain/blocks/BlockFooter.ts","../thru-ts-client-sdk/domain/blocks/BlockHeader.ts","../thru-ts-client-sdk/domain/blocks/Block.ts","../thru-ts-client-sdk/modules/helpers.ts","../thru-ts-client-sdk/modules/blocks.ts","../thru-ts-client-sdk/modules/chain.ts","../thru-ts-client-sdk/modules/consensus.ts","../thru-ts-client-sdk/domain/events/ChainEvent.ts","../thru-ts-client-sdk/modules/events.ts","../thru-ts-client-sdk/domain/height/HeightSnapshot.ts","../thru-ts-client-sdk/modules/height.ts","../thru-ts-client-sdk/modules/keys.ts","../thru-ts-client-sdk/modules/node.ts","../thru-ts-client-sdk/modules/slots.ts","../thru-ts-client-sdk/domain/filters/Filter.ts","../thru-ts-client-sdk/modules/streaming.ts","../thru-ts-client-sdk/modules/transactions.ts","../thru-ts-client-sdk/domain/version/VersionInfo.ts"],"names":["SignatureDomain","copyBytes","create","isHexString","hexToBytes","SIGNATURE_SIZE","PUBKEY_SIZE","ConsensusStatus","ExecutionStatus","encodeAddress","VersionContextSchema","CurrentVersionSchema","encodeSignature","createInstructionContext","AccountView"],"mappings":"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","file":"chunk-DSEDHQB6.js","sourcesContent":["import { CURVE, Point, etc, utils } from \"@noble/ed25519\";\n\n/**\n * Signature domain types matching the C implementation.\n */\nexport enum SignatureDomain {\n TXN = 0, /* Transaction */\n BLOCK_HEADER = 1, /* Block header */\n BLOCK = 2, /* Block */\n GOSSIP = 3, /* Gossip */\n}\n\n/**\n * Domain tag values matching the C implementation.\n */\nconst DOMAIN_TAGS: Record<SignatureDomain, bigint> = {\n [SignatureDomain.TXN]: 1n,\n [SignatureDomain.BLOCK_HEADER]: 2n,\n [SignatureDomain.BLOCK]: 3n,\n [SignatureDomain.GOSSIP]: 4n,\n};\n\n/**\n * Size of domain block (128 bytes = SHA-512 block size)\n */\nconst DOMAIN_BLOCK_SIZE = 128;\nconst SIGNATURE_SIZE = 64;\nconst PUBKEY_SIZE = 32;\n\n/**\n * Creates a domain block: 8-byte tag (big-endian) + 120 bytes of zeros = 128 bytes\n */\nfunction createDomainBlock(domain: SignatureDomain): Uint8Array {\n const block = new Uint8Array(DOMAIN_BLOCK_SIZE);\n block.fill(0);\n \n const tag = DOMAIN_TAGS[domain];\n if (tag === undefined) {\n throw new Error(`Invalid signature domain: ${domain}`);\n }\n \n // Write tag as big-endian 8-byte value\n const view = new DataView(block.buffer, block.byteOffset, block.byteLength);\n view.setBigUint64(0, tag, false); // false = big-endian\n \n return block;\n}\n\nfunction copyBytes(bytes: Uint8Array): Uint8Array {\n const out = new Uint8Array(bytes.length);\n out.set(bytes);\n return out;\n}\n\nfunction concatBytes(...arrays: Uint8Array[]): Uint8Array {\n return etc.concatBytes(...arrays);\n}\n\nfunction bytesToNumberLE(bytes: Uint8Array): bigint {\n let value = 0n;\n for (let i = 0; i < bytes.length; i++) {\n value += BigInt(bytes[i]) << (8n * BigInt(i));\n }\n return value;\n}\n\nfunction modOrder(value: bigint): bigint {\n const modulus = CURVE.n;\n const result = value % modulus;\n return result >= 0n ? result : result + modulus;\n}\n\nfunction numberToBytesLE(value: bigint, length: number): Uint8Array {\n const out = new Uint8Array(length);\n let current = value;\n for (let i = 0; i < length; i++) {\n out[i] = Number(current & 0xffn);\n current >>= 8n;\n }\n return out;\n}\n\n/**\n * Domain-separated Ed25519 signing that matches the Rust/C implementation:\n * r = H(domain || prefix || msg)\n * k = H(domain || R || A || msg)\n * S = (r + k * scalar) mod L\n */\nexport async function signWithDomain(\n message: Uint8Array,\n privateKey: Uint8Array,\n publicKey?: Uint8Array,\n domain: SignatureDomain = SignatureDomain.TXN,\n): Promise<Uint8Array> {\n if (privateKey.length !== PUBKEY_SIZE) {\n throw new Error(\"Private key must contain 32 bytes\");\n }\n\n const domainBlock = createDomainBlock(domain);\n const messageBytes = copyBytes(message);\n const extended = await utils.getExtendedPublicKeyAsync(privateKey);\n const publicKeyBytes = publicKey ? copyBytes(publicKey) : extended.pointBytes;\n if (publicKeyBytes.length !== PUBKEY_SIZE) {\n throw new Error(\"Public key must contain 32 bytes\");\n }\n\n const rInput = concatBytes(domainBlock, extended.prefix, messageBytes);\n const r = modOrder(bytesToNumberLE(await etc.sha512Async(rInput)));\n const R = Point.BASE.multiply(r).toBytes();\n\n const kInput = concatBytes(domainBlock, R, publicKeyBytes, messageBytes);\n const k = modOrder(bytesToNumberLE(await etc.sha512Async(kInput)));\n\n const s = modOrder(r + k * extended.scalar);\n const signature = new Uint8Array(SIGNATURE_SIZE);\n signature.set(R, 0);\n signature.set(numberToBytesLE(s, PUBKEY_SIZE), PUBKEY_SIZE);\n return signature;\n}\n\n/**\n * Domain-separated Ed25519 verification matching the Rust/C implementation.\n */\nexport async function verifyWithDomain(\n signature: Uint8Array,\n message: Uint8Array,\n publicKey: Uint8Array,\n domain: SignatureDomain = SignatureDomain.TXN,\n): Promise<boolean> {\n if (signature.length !== SIGNATURE_SIZE || publicKey.length !== PUBKEY_SIZE) {\n return false;\n }\n\n const domainBlock = createDomainBlock(domain);\n const messageBytes = copyBytes(message);\n const rBytes = signature.subarray(0, PUBKEY_SIZE);\n const s = bytesToNumberLE(signature.subarray(PUBKEY_SIZE));\n if (s >= CURVE.n) {\n return false;\n }\n\n let R: Point;\n let A: Point;\n try {\n R = Point.fromHex(rBytes);\n A = Point.fromHex(publicKey);\n } catch {\n return false;\n }\n\n const kInput = concatBytes(domainBlock, rBytes, publicKey, messageBytes);\n const k = modOrder(bytesToNumberLE(await etc.sha512Async(kInput)));\n\n const lhs = Point.BASE.multiply(s);\n const rhs = R.add(A.multiply(k));\n return lhs.add(rhs.negate()).clearCofactor().is0();\n}\n","export function copyBytes(source: Uint8Array): Uint8Array {\n const bytes = new Uint8Array(source.length);\n bytes.set(source);\n return bytes;\n}\n\nexport function ensureExactLength(bytes: Uint8Array, expected: number): Uint8Array {\n if (bytes.length !== expected) {\n throw new Error(`Must contain ${expected} bytes`);\n }\n return copyBytes(bytes);\n}\n\nexport function bytesEqual(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) {\n return false;\n }\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n}\n\nexport function bytesToHex(bytes: Uint8Array): string {\n const hex: string[] = new Array(bytes.length);\n for (let i = 0; i < bytes.length; i++) {\n hex[i] = bytes[i].toString(16).padStart(2, \"0\");\n }\n return hex.join(\"\");\n}\n\nexport function bytesToBase64(bytes: Uint8Array): string {\n const globalBuffer = typeof globalThis !== \"undefined\" ? (globalThis as any)?.Buffer : undefined;\n if (globalBuffer) {\n return globalBuffer.from(bytes).toString(\"base64\");\n }\n if (typeof btoa === \"function\") {\n let binary = \"\";\n for (let i = 0; i < bytes.length; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary);\n }\n throw new Error(\"Base64 encoding is not supported in this environment\");\n}\n\n","export const PUBKEY_LENGTH = 32;\nexport const SIGNATURE_LENGTH = 64;\nexport const TA_ADDRESS_LENGTH = 46;\nexport const TS_SIGNATURE_LENGTH = 90;\n\n","import { create } from \"@bufbuild/protobuf\";\nimport {\n decodeAddress,\n encodeAddress,\n hexToBytes,\n isHexString,\n} from \"@thru/helpers\";\n\nimport {\n Pubkey as ProtoPubkey,\n PubkeySchema,\n TaPubkey,\n TaPubkeySchema,\n} from \"@thru/proto\";\nimport {\n bytesEqual,\n bytesToHex,\n copyBytes,\n ensureExactLength,\n} from \"./byte-utils\";\nimport { PUBKEY_LENGTH, TA_ADDRESS_LENGTH } from \"./constants\";\n\nexport type PubkeyInput = Uint8Array | string | Pubkey;\n\nexport class Pubkey {\n private readonly bytes: Uint8Array;\n\n private constructor(bytes: Uint8Array) {\n this.bytes = bytes;\n }\n\n static from(value: PubkeyInput): Pubkey {\n if (value instanceof Pubkey) {\n return value;\n }\n if (value instanceof Uint8Array) {\n return new Pubkey(ensureExactLength(value, PUBKEY_LENGTH));\n }\n if (typeof value === \"string\") {\n return new Pubkey(Pubkey.bytesFromString(value));\n }\n throw new Error(\n `Must be provided as Uint8Array, hex string, or ta-address`\n );\n }\n\n\n\n static isThruFmt(value: string): boolean {\n return value.startsWith(\"ta\") && value.length === TA_ADDRESS_LENGTH;\n }\n\n toBytes(): Uint8Array {\n return copyBytes(this.bytes);\n }\n\n toBytesUnsafe(): Uint8Array {\n return this.bytes;\n }\n\n toThruFmt(): string {\n return encodeAddress(this.bytes);\n }\n\n toHex(): string {\n return bytesToHex(this.bytes);\n }\n\n equals(other: PubkeyInput): boolean {\n const candidate = Pubkey.from(other);\n return bytesEqual(this.bytes, candidate.bytes);\n }\n\n toProtoPubkey(): ProtoPubkey {\n return create(PubkeySchema, { value: this.toBytes() });\n }\n\n toProtoTaPubkey(): TaPubkey {\n return create(TaPubkeySchema, { value: this.toThruFmt() });\n }\n\n static fromProtoPubkey(proto?: ProtoPubkey): Pubkey {\n if (!proto?.value) {\n throw new Error(`Proto is missing value`);\n }\n return new Pubkey(ensureExactLength(proto.value, PUBKEY_LENGTH));\n }\n\n static fromProtoTaPubkey(proto?: TaPubkey): Pubkey {\n if (!proto?.value) {\n throw new Error(`Proto is missing value`);\n }\n return new Pubkey(ensureExactLength(decodeAddress(proto.value), PUBKEY_LENGTH));\n }\n\n private static bytesFromString(value: string): Uint8Array {\n if (Pubkey.isThruFmt(value)) {\n return ensureExactLength(decodeAddress(value), PUBKEY_LENGTH);\n }\n if (isHexString(value)) {\n return ensureExactLength(hexToBytes(value), PUBKEY_LENGTH);\n }\n throw new Error(`Must be provided as hex string or ta-address`);\n }\n}\n","import { create } from \"@bufbuild/protobuf\";\nimport {\n decodeSignature,\n encodeSignature,\n hexToBytes,\n isHexString\n} from \"@thru/helpers\";\n\nimport {\n Signature as ProtoSignature,\n SignatureSchema,\n TsSignature,\n TsSignatureSchema,\n} from \"@thru/proto\";\nimport {\n bytesEqual,\n bytesToHex,\n copyBytes,\n ensureExactLength,\n} from \"./byte-utils\";\nimport { SIGNATURE_LENGTH, TS_SIGNATURE_LENGTH } from \"./constants\";\n\nexport type SignatureInput = Uint8Array | string | Signature;\n\nexport class Signature {\n private readonly bytes: Uint8Array;\n\n private constructor(bytes: Uint8Array) {\n this.bytes = bytes;\n }\n\n static from(value: SignatureInput): Signature {\n if (value instanceof Signature) {\n return value;\n }\n if (value instanceof Uint8Array) {\n return new Signature(ensureExactLength(value, SIGNATURE_LENGTH));\n }\n if (typeof value === \"string\") {\n return new Signature(Signature.bytesFromString(value));\n }\n throw new Error(\n `Must be provided as Uint8Array, ts-encoded string, hex string, or base64 string`\n );\n }\n\n static fromProto(proto?: ProtoSignature): Signature {\n if (!proto?.value) {\n throw new Error(`Proto is missing value`);\n }\n return new Signature(ensureExactLength(proto.value, SIGNATURE_LENGTH));\n }\n\n\n\n static isThruFmt(value: string): boolean {\n return value.startsWith(\"ts\") && value.length === TS_SIGNATURE_LENGTH;\n }\n\n toBytes(): Uint8Array {\n return copyBytes(this.bytes);\n }\n\n toBytesUnsafe(): Uint8Array {\n return this.bytes;\n }\n\n toThruFmt(): string {\n return encodeSignature(this.bytes);\n }\n\n toHex(): string {\n return bytesToHex(this.bytes);\n }\n\n equals(other: SignatureInput): boolean {\n const candidate = Signature.from(other);\n return bytesEqual(this.bytes, candidate.bytes);\n }\n\n toProtoSignature(): ProtoSignature {\n return create(SignatureSchema, { value: this.toBytes() });\n }\n toProtoTsSignature(): TsSignature {\n return create(TsSignatureSchema, { value: this.toThruFmt() });\n }\n\n static fromProtoTsSignature(proto?: TsSignature): Signature {\n if (!proto?.value) {\n throw new Error(`Proto is missing value`);\n }\n return new Signature(ensureExactLength(decodeSignature(proto.value), SIGNATURE_LENGTH));\n }\n\n static fromProtoSignature(proto?: ProtoSignature): Signature {\n if (!proto?.value) {\n throw new Error(`Proto is missing value`);\n }\n return new Signature(ensureExactLength(proto.value, SIGNATURE_LENGTH));\n }\n\n private static bytesFromString(value: string): Uint8Array {\n if (Signature.isThruFmt(value)) {\n return ensureExactLength(decodeSignature(value), SIGNATURE_LENGTH);\n }\n if (isHexString(value)) {\n return ensureExactLength(hexToBytes(value), SIGNATURE_LENGTH);\n }\n throw new Error(`Must be provided as ts-encoded string or hex string`);\n }\n}\n","/**\n * Wire format constants for Thru Network protocol.\n * \n * These constants define the sizes and formats used in the binary wire protocol\n * for blocks and transactions. They match the Go implementation in\n * grpc/pkg/uds/message/block.go and grpc/pkg/crypto/transaction.go\n */\n\n// ============================================================================\n// Common Constants\n// ============================================================================\n\n/** Size of an Ed25519 signature in bytes */\nexport const SIGNATURE_SIZE = 64;\n\n/** Size of a public key/account address in bytes */\nexport const PUBKEY_SIZE = 32;\n\n/** Size of a hash in bytes */\nexport const HASH_SIZE = 32;\n\n// ============================================================================\n// Block Constants\n// ============================================================================\n\n/** Size of a block header in bytes (current format with weight_slot) */\nexport const BLOCK_HEADER_SIZE = 168;\n\n/** Size of a block header in bytes (legacy format without weight_slot, before Dec 2025) */\nexport const BLOCK_HEADER_SIZE_LEGACY = 160;\n\n/** Size of a block footer in bytes */\nexport const BLOCK_FOOTER_SIZE = 104;\n\n/** Block version 1 */\nexport const BLOCK_VERSION_V1 = 0x01;\n\n// ============================================================================\n// Transaction Constants\n// ============================================================================\n\n/**\n * Wire format (from tn_txn.h):\n * [header (112 bytes)]\n * [input_pubkeys (variable)]\n * [instr_data (variable)]\n * [state_proof (optional, variable)]\n * [account_meta (optional, variable)]\n * [fee_payer_signature (64 bytes at end)]\n */\n\n/** Size of a transaction header in bytes */\nexport const TXN_HEADER_BODY_SIZE = 112;\n\n/** Transaction version 1 */\nexport const TXN_VERSION_V1 = 0x01;\n\n/** Maximum number of accounts allowed in a transaction */\nexport const TXN_MAX_ACCOUNTS = 1024;\n\n/** Size of state proof header in bytes */\nexport const STATE_PROOF_HEADER_SIZE = 40;\n\n/** Size of account metadata footprint in bytes */\nexport const ACCOUNT_META_FOOTPRINT = 64;\n\n// ============================================================================\n// Transaction Flags\n// ============================================================================\n\n/** Flag indicating transaction has fee payer state proof */\nexport const TXN_FLAG_HAS_FEE_PAYER_PROOF = 1 << 0;\n\n/** Flag indicating account may be compressed */\nexport const TXN_FLAG_MAY_COMPRESS_ACCOUNT = 1 << 1;\n\n// ============================================================================\n// State Proof Types\n// ============================================================================\n\n/** State proof type: existing account */\nexport const STATE_PROOF_TYPE_EXISTING = 0;\n\n/** State proof type: updating account */\nexport const STATE_PROOF_TYPE_UPDATING = 1;\n\n/** State proof type: creating account */\nexport const STATE_PROOF_TYPE_CREATION = 2;\n\n","import { signWithDomain, SignatureDomain } from \"./domain-signing\";\nimport {\n TransactionVmError,\n type Transaction as CoreTransaction,\n type TransactionExecutionResult as CoreTransactionExecutionResult\n} from \"@thru/proto\";\nimport {\n ACCOUNT_META_FOOTPRINT,\n HASH_SIZE,\n PUBKEY_SIZE,\n SIGNATURE_SIZE,\n STATE_PROOF_HEADER_SIZE,\n STATE_PROOF_TYPE_CREATION,\n STATE_PROOF_TYPE_EXISTING,\n STATE_PROOF_TYPE_UPDATING,\n TXN_FLAG_HAS_FEE_PAYER_PROOF,\n TXN_FLAG_MAY_COMPRESS_ACCOUNT,\n TXN_HEADER_BODY_SIZE,\n TXN_MAX_ACCOUNTS,\n TXN_VERSION_V1,\n} from \"../../wire-format\";\nimport { Pubkey, PubkeyInput, Signature } from \"../primitives\";\nimport type { OptionalProofs, TransactionAccountsInput, TransactionHeaderInput } from \"./types\";\n\nconst DEFAULT_FLAGS = 0;\nconst MAX_INSTRUCTION_DATA_LENGTH = 0xffff;\nconst BYTE_POPCOUNT = new Uint8Array(256).map((_value, index) => {\n let v = index;\n let count = 0;\n while (v !== 0) {\n count += v & 1;\n v >>= 1;\n }\n return count;\n});\n\nexport interface TransactionExecutionEvent {\n eventId: string;\n callIdx: number;\n programIdx: number;\n program?: Pubkey;\n payload: Uint8Array;\n}\n\nexport interface TransactionExecutionResultData {\n consumedComputeUnits: number;\n consumedMemoryUnits: number;\n consumedStateUnits: number;\n userErrorCode: bigint;\n vmError: TransactionVmError;\n executionResult: bigint;\n pagesUsed: number;\n eventsCount: number;\n eventsSize: number;\n readwriteAccounts: Pubkey[];\n readonlyAccounts: Pubkey[];\n events?: TransactionExecutionEvent[];\n errorProgramAccIdx: number;\n}\n\nexport class Transaction {\n readonly version: number;\n readonly feePayer: Pubkey;\n readonly program: Pubkey;\n\n readonly fee: bigint;\n readonly nonce: bigint;\n readonly startSlot: bigint;\n readonly expiryAfter: number;\n readonly chainId: number;\n\n readonly requestedComputeUnits: number;\n readonly requestedStateUnits: number;\n readonly requestedMemoryUnits: number;\n readonly flags: number;\n\n readonly readWriteAccounts: Pubkey[];\n readonly readOnlyAccounts: Pubkey[];\n\n readonly instructionData?: Uint8Array;\n readonly instructionDataSize?: number;\n readonly feePayerStateProof?: Uint8Array;\n readonly feePayerAccountMetaRaw?: Uint8Array;\n\n executionResult?: TransactionExecutionResultData;\n slot?: bigint;\n blockOffset?: number;\n\n private signature?: Signature;\n\n constructor(params: {\n version?: number;\n feePayer: PubkeyInput;\n program: PubkeyInput;\n header: TransactionHeaderInput;\n accounts?: TransactionAccountsInput;\n instructionData?: Uint8Array;\n instructionDataSize?: number;\n proofs?: OptionalProofs;\n }) {\n this.version = params.version ?? TXN_VERSION_V1;\n this.feePayer = Pubkey.from(params.feePayer);\n this.program = Pubkey.from(params.program);\n\n this.fee = params.header.fee;\n this.nonce = params.header.nonce;\n this.startSlot = params.header.startSlot;\n this.expiryAfter = params.header.expiryAfter ?? 0;\n this.chainId = params.header.chainId ?? 1;\n\n this.requestedComputeUnits = params.header.computeUnits ?? 0;\n this.requestedStateUnits = params.header.stateUnits ?? 0;\n this.requestedMemoryUnits = params.header.memoryUnits ?? 0;\n this.flags = params.header.flags ?? DEFAULT_FLAGS;\n\n this.readWriteAccounts = params.accounts?.readWriteAccounts\n ? params.accounts.readWriteAccounts.map(Pubkey.from)\n : [];\n this.readOnlyAccounts = params.accounts?.readOnlyAccounts\n ? params.accounts.readOnlyAccounts.map(Pubkey.from)\n : [];\n\n this.instructionData = params.instructionData ? new Uint8Array(params.instructionData) : undefined;\n if (this.instructionData && this.instructionData.length > MAX_INSTRUCTION_DATA_LENGTH) {\n throw new Error(`Instruction data exceeds maximum length (${MAX_INSTRUCTION_DATA_LENGTH} bytes)`);\n }\n this.instructionDataSize = params.instructionDataSize;\n\n this.feePayerStateProof = params.proofs?.feePayerStateProof\n ? new Uint8Array(params.proofs.feePayerStateProof)\n : undefined;\n this.feePayerAccountMetaRaw = params.proofs?.feePayerAccountMetaRaw\n ? new Uint8Array(params.proofs.feePayerAccountMetaRaw)\n : undefined;\n }\n\n static fromWire(data: Uint8Array): Transaction {\n const { transaction, size } = Transaction.parseWire(data, { strict: true });\n if (size !== data.length) {\n throw new Error(\n `Transaction body has trailing bytes: expected ${size} bytes but found ${data.length}`,\n );\n }\n return transaction;\n }\n\n static parseWire(\n data: Uint8Array,\n options: { strict?: boolean } = {},\n ): { transaction: Transaction; size: number } {\n const strict = options.strict ?? false;\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\n // Wire format (from tn_txn.h):\n // [header (112 bytes)]\n // [input_pubkeys (variable)]\n // [instr_data (variable)]\n // [state_proof (optional, variable)]\n // [account_meta (optional, variable)]\n // [fee_payer_signature (64 bytes at end)]\n\n if (data.length < TXN_HEADER_BODY_SIZE) {\n throw new Error(`Transaction data too short: ${data.length} bytes (minimum ${TXN_HEADER_BODY_SIZE})`);\n }\n\n let offset = 0;\n\n const version = view.getUint8(offset);\n offset += 1;\n if (strict && version !== TXN_VERSION_V1) {\n throw new Error(`Unsupported transaction version: ${version}`);\n }\n\n const flags = view.getUint8(offset);\n offset += 1;\n const invalidFlags = flags & ~(TXN_FLAG_HAS_FEE_PAYER_PROOF | TXN_FLAG_MAY_COMPRESS_ACCOUNT);\n if (strict && invalidFlags !== 0) {\n throw new Error(`Unsupported transaction flags: 0x${invalidFlags.toString(16).padStart(2, \"0\")}`);\n }\n\n const readwriteAccountsCount = view.getUint16(offset, true);\n offset += 2;\n const readonlyAccountsCount = view.getUint16(offset, true);\n offset += 2;\n const instructionDataSize = view.getUint16(offset, true);\n offset += 2;\n const requestedComputeUnits = view.getUint32(offset, true);\n offset += 4;\n const requestedStateUnits = view.getUint16(offset, true);\n offset += 2;\n const requestedMemoryUnits = view.getUint16(offset, true);\n offset += 2;\n const fee = view.getBigUint64(offset, true);\n offset += 8;\n const nonce = view.getBigUint64(offset, true);\n offset += 8;\n const startSlot = view.getBigUint64(offset, true);\n offset += 8;\n const expiryAfter = view.getUint32(offset, true);\n offset += 4;\n const chainId = view.getUint16(offset, true);\n offset += 2;\n offset += 2; // padding\n\n Transaction.ensureAvailable(data.length, offset, PUBKEY_SIZE, \"fee payer account\");\n const feePayer = data.slice(offset, offset + PUBKEY_SIZE);\n offset += PUBKEY_SIZE;\n\n Transaction.ensureAvailable(data.length, offset, PUBKEY_SIZE, \"program account\");\n const program = data.slice(offset, offset + PUBKEY_SIZE);\n offset += PUBKEY_SIZE;\n\n // Verify header parsing completed at expected offset\n if (offset !== TXN_HEADER_BODY_SIZE) {\n throw new Error(`Transaction header parsing mismatch (expected offset ${TXN_HEADER_BODY_SIZE}, got ${offset})`);\n }\n\n const totalAccountCount = Number(readwriteAccountsCount + readonlyAccountsCount);\n if (strict && totalAccountCount > TXN_MAX_ACCOUNTS) {\n throw new Error(\n `Transaction references ${totalAccountCount} accounts (maximum allowed ${TXN_MAX_ACCOUNTS})`,\n );\n }\n\n // Calculate expected transaction size from header fields to handle\n // parsing multiple transactions from a buffer\n const accountsSize = totalAccountCount * PUBKEY_SIZE;\n let expectedBodySize = accountsSize + instructionDataSize;\n\n // If fee payer proof flag is set, we need to peek at the proof to get its size\n // The state proof format has an 8-byte typeSlot (with proofType in bits 62-63)\n // followed by a 32-byte pathBitset. The total size is calculated using popcount.\n if ((flags & TXN_FLAG_HAS_FEE_PAYER_PROOF) !== 0) {\n const proofOffset = TXN_HEADER_BODY_SIZE + accountsSize + instructionDataSize;\n Transaction.ensureAvailable(data.length, proofOffset, STATE_PROOF_HEADER_SIZE, \"state proof header\");\n const proofView = new DataView(data.buffer, data.byteOffset + proofOffset, STATE_PROOF_HEADER_SIZE);\n const typeSlot = proofView.getBigUint64(0, true);\n const proofType = Number((typeSlot >> 62n) & 0x3n);\n const pathBitset = data.subarray(proofOffset + 8, proofOffset + 40);\n const siblingCount = countSetBits(pathBitset);\n const bodyCount = proofType + siblingCount;\n const proofFootprint = STATE_PROOF_HEADER_SIZE + bodyCount * HASH_SIZE;\n expectedBodySize += proofFootprint;\n if (proofType === STATE_PROOF_TYPE_EXISTING) {\n expectedBodySize += ACCOUNT_META_FOOTPRINT;\n }\n }\n\n // Transaction size: header(112) + body + signature(64) at end\n const txnSize = TXN_HEADER_BODY_SIZE + expectedBodySize + SIGNATURE_SIZE;\n Transaction.ensureAvailable(data.length, 0, txnSize, \"full transaction\");\n const sigStart = TXN_HEADER_BODY_SIZE + expectedBodySize;\n\n const readWriteAccounts: Uint8Array[] = [];\n for (let i = 0; i < readwriteAccountsCount; i++) {\n Transaction.ensureAvailable(sigStart, offset, PUBKEY_SIZE, \"read-write accounts\");\n readWriteAccounts.push(data.slice(offset, offset + PUBKEY_SIZE));\n offset += PUBKEY_SIZE;\n }\n\n const readOnlyAccounts: Uint8Array[] = [];\n for (let i = 0; i < readonlyAccountsCount; i++) {\n Transaction.ensureAvailable(sigStart, offset, PUBKEY_SIZE, \"read-only accounts\");\n readOnlyAccounts.push(data.slice(offset, offset + PUBKEY_SIZE));\n offset += PUBKEY_SIZE;\n }\n\n let instructionData: Uint8Array | undefined;\n if (instructionDataSize > 0) {\n Transaction.ensureAvailable(sigStart, offset, instructionDataSize, \"instruction data\");\n instructionData = data.slice(offset, offset + instructionDataSize);\n offset += instructionDataSize;\n }\n\n let feePayerStateProof: Uint8Array | undefined;\n let feePayerAccountMetaRaw: Uint8Array | undefined;\n\n if ((flags & TXN_FLAG_HAS_FEE_PAYER_PROOF) !== 0) {\n const { proofBytes, footprint, proofType } = Transaction.parseStateProof(data.subarray(offset, sigStart));\n feePayerStateProof = proofBytes;\n offset += footprint;\n\n if (proofType === STATE_PROOF_TYPE_EXISTING) {\n Transaction.ensureAvailable(sigStart, offset, ACCOUNT_META_FOOTPRINT, \"fee payer account metadata\");\n feePayerAccountMetaRaw = data.slice(offset, offset + ACCOUNT_META_FOOTPRINT);\n offset += ACCOUNT_META_FOOTPRINT;\n }\n }\n\n // Verify we consumed all bytes before signature\n if (offset !== sigStart) {\n throw new Error(\n `Transaction body has trailing bytes: expected ${sigStart} bytes consumed but found ${offset}`,\n );\n }\n\n // Read signature from the end of the transaction\n const signatureBytes = data.slice(sigStart, sigStart + SIGNATURE_SIZE);\n const hasSignature = hasNonZeroBytes(signatureBytes);\n\n const transaction = new Transaction({\n version,\n feePayer: Pubkey.from(feePayer),\n program: Pubkey.from(program),\n header: {\n fee,\n nonce,\n startSlot,\n expiryAfter,\n chainId,\n computeUnits: requestedComputeUnits,\n stateUnits: requestedStateUnits,\n memoryUnits: requestedMemoryUnits,\n flags,\n },\n accounts: {\n readWriteAccounts,\n readOnlyAccounts,\n },\n instructionData,\n instructionDataSize,\n proofs:\n feePayerStateProof || feePayerAccountMetaRaw\n ? {\n feePayerStateProof,\n feePayerAccountMetaRaw,\n }\n : undefined,\n });\n\n if (hasSignature) {\n transaction.setSignature(Signature.from(signatureBytes));\n }\n\n return { transaction, size: txnSize };\n }\n\n static fromProto(proto: CoreTransaction): Transaction {\n if (!proto.header) {\n throw new Error(\"Transaction proto missing header\");\n }\n\n const header = proto.header;\n const body = proto.body ? new Uint8Array(proto.body) : undefined;\n\n let transaction: Transaction | undefined;\n\n if (body && body.length > 0) {\n try {\n const { transaction: parsed } = this.parseWire(body, { strict: false });\n transaction = parsed;\n } catch (err) {\n transaction = undefined;\n }\n }\n\n if (!transaction) {\n let parsed:\n | {\n readWriteAccounts: Uint8Array[];\n readOnlyAccounts: Uint8Array[];\n instructionData?: Uint8Array;\n feePayerStateProof?: Uint8Array;\n feePayerAccountMetaRaw?: Uint8Array;\n }\n | undefined;\n\n if (body && body.length > 0) {\n try {\n parsed = this.parseBodySections(\n body,\n header.readwriteAccountsCount ?? 0,\n header.readonlyAccountsCount ?? 0,\n header.instructionDataSize ?? 0,\n header.flags ?? DEFAULT_FLAGS,\n );\n } catch (sectionErr) {\n if (body.length >= TXN_HEADER_BODY_SIZE) {\n parsed = this.parseBodySections(\n body.slice(TXN_HEADER_BODY_SIZE),\n header.readwriteAccountsCount ?? 0,\n header.readonlyAccountsCount ?? 0,\n header.instructionDataSize ?? 0,\n header.flags ?? DEFAULT_FLAGS,\n );\n } else {\n throw sectionErr;\n }\n }\n }\n\n if (!parsed) {\n parsed = {\n readWriteAccounts: [] as Uint8Array[],\n readOnlyAccounts: [] as Uint8Array[],\n instructionData: undefined,\n feePayerStateProof: undefined,\n feePayerAccountMetaRaw: undefined,\n };\n }\n\n transaction = new Transaction({\n version: header.version ?? TXN_VERSION_V1,\n feePayer: Pubkey.fromProtoPubkey(header.feePayerPubkey),\n program: Pubkey.fromProtoPubkey(header.programPubkey),\n header: {\n fee: header.fee ?? 0n,\n nonce: header.nonce ?? 0n,\n startSlot: header.startSlot ?? 0n,\n expiryAfter: header.expiryAfter ?? 0,\n chainId: header.chainId ?? 1,\n computeUnits: header.requestedComputeUnits ?? 0,\n stateUnits: header.requestedStateUnits ?? 0,\n memoryUnits: header.requestedMemoryUnits ?? 0,\n flags: header.flags ?? DEFAULT_FLAGS,\n },\n accounts: {\n readWriteAccounts: parsed.readWriteAccounts,\n readOnlyAccounts: parsed.readOnlyAccounts,\n },\n instructionData: parsed.instructionData,\n instructionDataSize: header.instructionDataSize,\n proofs:\n parsed.feePayerStateProof || parsed.feePayerAccountMetaRaw\n ? {\n feePayerStateProof: parsed.feePayerStateProof,\n feePayerAccountMetaRaw: parsed.feePayerAccountMetaRaw,\n }\n : undefined,\n });\n }\n\n const signatureBytes = proto.signature?.value ?? header.feePayerSignature?.value ?? undefined;\n if (signatureBytes && signatureBytes.length === SIGNATURE_SIZE && hasNonZeroBytes(signatureBytes)) {\n transaction.setSignature(Signature.from(signatureBytes));\n }\n\n if (proto.executionResult) {\n transaction.executionResult = Transaction.executionResultFromProto(proto.executionResult);\n }\n\n if (proto.slot !== undefined) {\n transaction.slot = proto.slot;\n }\n if (proto.blockOffset !== undefined) {\n transaction.blockOffset = proto.blockOffset;\n }\n\n return transaction;\n }\n\n getSignature(): Signature | undefined {\n return this.signature;\n }\n\n setSignature(signature: Signature): void {\n this.signature = signature;\n }\n\n async sign(privateKey: Uint8Array): Promise<Signature> {\n if (privateKey.length !== 32) {\n throw new Error(\"Fee payer private key must contain 32 bytes\");\n }\n const payload = this.toWireForSigning();\n\n const publicKey = this.feePayer.toBytes();\n const signature = await signWithDomain(\n payload,\n privateKey,\n publicKey,\n SignatureDomain.TXN,\n );\n \n if (signature.length !== SIGNATURE_SIZE) {\n throw new Error(\"ed25519 signing produced an invalid signature\");\n }\n this.signature = Signature.from(signature);\n return this.signature;\n }\n\n toWireForSigning(): Uint8Array {\n const header = this.createHeader();\n return this.buildWirePayload(new Uint8Array(header), false);\n }\n\n toWire(): Uint8Array {\n const header = this.createHeader();\n return this.buildWirePayload(new Uint8Array(header), true);\n }\n\n private createHeader(): ArrayBufferLike {\n const buffer = new ArrayBuffer(TXN_HEADER_BODY_SIZE);\n const headerBytes = new Uint8Array(buffer);\n const view = new DataView(buffer);\n\n let offset = 0;\n view.setUint8(offset, this.version & 0xff);\n offset += 1;\n\n view.setUint8(offset, this.flags & 0xff);\n offset += 1;\n\n view.setUint16(offset, this.readWriteAccounts.length, true);\n offset += 2;\n\n view.setUint16(offset, this.readOnlyAccounts.length, true);\n offset += 2;\n\n const instructionDataLength = this.instructionData?.length ?? 0;\n if (instructionDataLength > MAX_INSTRUCTION_DATA_LENGTH) {\n throw new Error(`Instruction data exceeds maximum length (${MAX_INSTRUCTION_DATA_LENGTH} bytes)`);\n }\n view.setUint16(offset, instructionDataLength, true);\n offset += 2;\n\n view.setUint32(offset, ensureUint32(this.requestedComputeUnits), true);\n offset += 4;\n\n view.setUint16(offset, ensureUint16(this.requestedStateUnits), true);\n offset += 2;\n\n view.setUint16(offset, ensureUint16(this.requestedMemoryUnits), true);\n offset += 2;\n\n view.setBigUint64(offset, ensureBigUint64(this.fee), true);\n offset += 8;\n\n view.setBigUint64(offset, ensureBigUint64(this.nonce), true);\n offset += 8;\n\n view.setBigUint64(offset, ensureBigUint64(this.startSlot), true);\n offset += 8;\n\n view.setUint32(offset, ensureUint32(this.expiryAfter), true);\n offset += 4;\n\n view.setUint16(offset, ensureUint16(this.chainId), true);\n offset += 2;\n\n offset += 2; // padding\n\n headerBytes.set(this.feePayer.toBytes(), offset);\n offset += PUBKEY_SIZE;\n\n headerBytes.set(this.program.toBytes(), offset);\n\n return buffer;\n }\n\n private buildWirePayload(headerBytes: Uint8Array, includeSignature: boolean): Uint8Array {\n const dynamicLength =\n this.readWriteAccounts.length * PUBKEY_SIZE +\n this.readOnlyAccounts.length * PUBKEY_SIZE +\n (this.instructionData?.length ?? 0) +\n (this.feePayerStateProof?.length ?? 0) +\n (this.feePayerAccountMetaRaw?.length ?? 0);\n\n const signatureLength = includeSignature ? SIGNATURE_SIZE : 0;\n\n const result = new Uint8Array(headerBytes.length + dynamicLength + signatureLength);\n result.set(headerBytes, 0);\n\n let offset = headerBytes.length;\n offset = appendAccountList(result, offset, this.readWriteAccounts.map(account => account.toBytes()));\n offset = appendAccountList(result, offset, this.readOnlyAccounts.map(account => account.toBytes()));\n if (this.instructionData) {\n result.set(this.instructionData, offset);\n offset += this.instructionData.length;\n }\n if (this.feePayerStateProof) {\n result.set(this.feePayerStateProof, offset);\n offset += this.feePayerStateProof.length;\n }\n if (this.feePayerAccountMetaRaw) {\n result.set(this.feePayerAccountMetaRaw, offset);\n offset += this.feePayerAccountMetaRaw.length;\n }\n\n // Append signature at the end\n if (includeSignature) {\n if (this.signature) {\n result.set(this.signature.toBytes(), offset);\n }\n // If no signature, bytes remain zero (already initialized)\n }\n\n return result;\n }\n\n private static parseBodySections(\n body: Uint8Array,\n readwriteCount: number,\n readonlyCount: number,\n instructionDataSize: number,\n flags: number,\n ): {\n readWriteAccounts: Uint8Array[];\n readOnlyAccounts: Uint8Array[];\n instructionData?: Uint8Array;\n feePayerStateProof?: Uint8Array;\n feePayerAccountMetaRaw?: Uint8Array;\n } {\n let offset = 0;\n\n const readWriteAccounts: Uint8Array[] = [];\n for (let i = 0; i < readwriteCount; i++) {\n this.ensureAvailable(body.length, offset, PUBKEY_SIZE, \"read-write accounts\");\n readWriteAccounts.push(body.slice(offset, offset + PUBKEY_SIZE));\n offset += PUBKEY_SIZE;\n }\n\n const readOnlyAccounts: Uint8Array[] = [];\n for (let i = 0; i < readonlyCount; i++) {\n this.ensureAvailable(body.length, offset, PUBKEY_SIZE, \"read-only accounts\");\n readOnlyAccounts.push(body.slice(offset, offset + PUBKEY_SIZE));\n offset += PUBKEY_SIZE;\n }\n\n let instructionData: Uint8Array | undefined;\n if (instructionDataSize > 0) {\n this.ensureAvailable(body.length, offset, instructionDataSize, \"instruction data\");\n instructionData = body.slice(offset, offset + instructionDataSize);\n offset += instructionDataSize;\n }\n\n let feePayerStateProof: Uint8Array | undefined;\n let feePayerAccountMetaRaw: Uint8Array | undefined;\n\n if ((flags & TXN_FLAG_HAS_FEE_PAYER_PROOF) !== 0) {\n const { proofBytes, footprint, proofType } = this.parseStateProof(body.subarray(offset));\n feePayerStateProof = proofBytes;\n offset += footprint;\n\n if (proofType === STATE_PROOF_TYPE_EXISTING) {\n this.ensureAvailable(body.length, offset, ACCOUNT_META_FOOTPRINT, \"fee payer account metadata\");\n feePayerAccountMetaRaw = body.slice(offset, offset + ACCOUNT_META_FOOTPRINT);\n offset += ACCOUNT_META_FOOTPRINT;\n }\n }\n\n if (offset !== body.length) {\n throw new Error(\n `Transaction body has trailing bytes: expected ${offset} bytes but found ${body.length}`,\n );\n }\n\n return {\n readWriteAccounts,\n readOnlyAccounts,\n instructionData,\n feePayerStateProof,\n feePayerAccountMetaRaw,\n };\n }\n\n private static ensureAvailable(totalLength: number, offset: number, required: number, context: string): void {\n if (offset + required > totalLength) {\n throw new Error(`Transaction data truncated while parsing ${context}`);\n }\n }\n\n private static parseStateProof(data: Uint8Array): { proofBytes: Uint8Array; footprint: number; proofType: number } {\n if (data.length < STATE_PROOF_HEADER_SIZE) {\n throw new Error(\"Transaction data truncated while parsing state proof header\");\n }\n\n const view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n const typeSlot = view.getBigUint64(0, true);\n const proofType = Number((typeSlot >> 62n) & 0x3n);\n if (\n proofType !== STATE_PROOF_TYPE_EXISTING &&\n proofType !== STATE_PROOF_TYPE_UPDATING &&\n proofType !== STATE_PROOF_TYPE_CREATION\n ) {\n throw new Error(`Transaction state proof has unknown type: ${proofType}`);\n }\n\n const pathBitset = data.subarray(8, 40);\n const siblingCount = countSetBits(pathBitset);\n const bodyCount = proofType + siblingCount;\n const totalSize = STATE_PROOF_HEADER_SIZE + bodyCount * HASH_SIZE;\n\n if (proofType === STATE_PROOF_TYPE_CREATION && bodyCount < 2) {\n throw new Error(\"Transaction state proof creation entry is truncated\");\n }\n if (proofType === STATE_PROOF_TYPE_UPDATING && bodyCount < 1) {\n throw new Error(\"Transaction state proof updating entry is truncated\");\n }\n if (data.length < totalSize) {\n throw new Error(\"Transaction data truncated while parsing state proof body\");\n }\n\n return {\n proofBytes: data.slice(0, totalSize),\n footprint: totalSize,\n proofType,\n };\n }\n\n\n static executionResultFromProto(\n proto: CoreTransactionExecutionResult,\n ): TransactionExecutionResultData {\n return {\n consumedComputeUnits: proto.consumedComputeUnits ?? 0,\n consumedMemoryUnits: proto.consumedMemoryUnits ?? 0,\n consumedStateUnits: proto.consumedStateUnits ?? 0,\n userErrorCode: proto.userErrorCode ?? 0n,\n vmError: proto.vmError ?? TransactionVmError.TRANSACTION_VM_EXECUTE_SUCCESS,\n executionResult: proto.executionResult ?? 0n,\n pagesUsed: proto.pagesUsed ?? 0,\n eventsCount: proto.eventsCount ?? 0,\n eventsSize: proto.eventsSize ?? 0,\n readwriteAccounts: proto.readwriteAccounts.map((account) => Pubkey.fromProtoPubkey(account)),\n readonlyAccounts: proto.readonlyAccounts.map((account) => Pubkey.fromProtoPubkey(account)),\n events: proto.events.length\n ? proto.events.map((event) => ({\n eventId: event.eventId,\n callIdx: event.callIdx,\n programIdx: event.programIdx,\n program: event.program ? Pubkey.fromProtoPubkey(event.program) : undefined,\n payload: new Uint8Array(event.payload ?? new Uint8Array(0)),\n }))\n : undefined,\n errorProgramAccIdx: proto.errorProgramAccIdx ?? 0,\n };\n }\n}\n\nfunction appendAccountList(target: Uint8Array, start: number, accounts: Uint8Array[]): number {\n let offset = start;\n for (const account of accounts) {\n target.set(account, offset);\n offset += PUBKEY_SIZE;\n }\n return offset;\n}\n\nfunction ensureUint16(value: number): number {\n if (!Number.isInteger(value) || value < 0 || value > 0xffff) {\n throw new Error(\"Value must fit within uint16 range\");\n }\n return value;\n}\n\nfunction ensureUint32(value: number): number {\n if (!Number.isInteger(value) || value < 0 || value > 0xffffffff) {\n throw new Error(\"Value must fit within uint32 range\");\n }\n return value;\n}\n\nfunction ensureBigUint64(value: bigint): bigint {\n if (value < 0n || value > 0xffff_ffff_ffff_ffffn) {\n throw new Error(\"Value must fit within uint64 range\");\n }\n return value;\n}\n\nfunction countSetBits(bytes: Uint8Array): number {\n let total = 0;\n for (let i = 0; i < bytes.length; i++) {\n total += BYTE_POPCOUNT[bytes[i]];\n }\n return total;\n}\n\nfunction hasNonZeroBytes(value: Uint8Array): boolean {\n for (let i = 0; i < value.length; i++) {\n if (value[i] !== 0) {\n return true;\n }\n }\n return false;\n}\n","import { hexToBytes, isHexString } from \"@thru/helpers\";\nimport { Pubkey, PubkeyInput } from \"../primitives\";\nimport type { InstructionContext } from \"./types\";\n\nconst ACCOUNT_LIMIT = 1024;\n\nexport function normalizeAccountList(accounts: PubkeyInput[]): Uint8Array[] {\n if (accounts.length === 0) {\n return [];\n }\n\n if (accounts.length > ACCOUNT_LIMIT) {\n throw new Error(`Too many accounts provided: ${accounts.length} (max ${ACCOUNT_LIMIT})`);\n }\n\n const deduped = dedupeAccountList(accounts);\n return deduped;\n}\n\nfunction dedupeAccountList(accounts: PubkeyInput[]): Uint8Array[] {\n const pubkeys = accounts.map(Pubkey.from).map((pubkey) => pubkey.toBytes());\n const seen = new Map<string, Uint8Array>();\n for (const pubkey of pubkeys) {\n if (pubkey.length !== 32) {\n throw new Error(\"Account addresses must contain 32 bytes\");\n }\n\n const key = toHex(pubkey);\n if (!seen.has(key)) {\n seen.set(key, pubkey);\n }\n }\n\n return Array.from(seen.values()).sort(compareAccounts);\n}\n\nfunction compareAccounts(a: Uint8Array, b: Uint8Array): number {\n for (let i = 0; i < 32; i++) {\n if (a[i] !== b[i]) {\n return a[i] - b[i];\n }\n }\n return 0;\n}\n\nfunction toHex(bytes: Uint8Array): string {\n let result = \"\";\n for (let i = 0; i < bytes.length; i++) {\n const hex = bytes[i].toString(16).padStart(2, \"0\");\n result += hex;\n }\n return result;\n}\n\nexport function parseInstructionData(value?: Uint8Array | string): Uint8Array | undefined {\n if (value === undefined) {\n return undefined;\n }\n if (value instanceof Uint8Array) {\n return new Uint8Array(value);\n }\n if (typeof value === \"string\") {\n if (value.length === 0) {\n return new Uint8Array();\n }\n if (isHexString(value)) {\n return hexToBytes(value);\n }\n }\n throw new Error(\"Instruction data must be provided as hex string or Uint8Array\");\n}\n\n/**\n * Creates an InstructionContext from the transaction's account layout.\n *\n * Account order in context: [feePayer, program, ...readWriteAccounts, ...readOnlyAccounts]\n *\n * @param feePayer - The fee payer public key\n * @param program - The program public key\n * @param sortedReadWrite - Read-write accounts in their final sorted order\n * @param sortedReadOnly - Read-only accounts in their final sorted order\n */\nexport function createInstructionContext(\n feePayer: Pubkey,\n program: Pubkey,\n sortedReadWrite: Uint8Array[],\n sortedReadOnly: Uint8Array[]\n): InstructionContext {\n // Build full account list: [feePayer, program, ...readWrite, ...readOnly]\n const accounts: Pubkey[] = [\n feePayer,\n program,\n ...sortedReadWrite.map(bytes => Pubkey.from(bytes)),\n ...sortedReadOnly.map(bytes => Pubkey.from(bytes)),\n ];\n\n // Build index map for fast lookups\n const indexMap = new Map<string, number>();\n for (let i = 0; i < accounts.length; i++) {\n const key = toHex(accounts[i].toBytes());\n // First occurrence wins (handles any duplicates)\n if (!indexMap.has(key)) {\n indexMap.set(key, i);\n }\n }\n\n return {\n accounts,\n getAccountIndex: (pubkey: PubkeyInput): number => {\n const bytes = Pubkey.from(pubkey).toBytes();\n const key = toHex(bytes);\n const index = indexMap.get(key);\n if (index === undefined) {\n throw new Error(`Account ${key} not found in transaction accounts`);\n }\n return index;\n },\n };\n}","import { Pubkey } from \"../primitives\";\nimport { Transaction } from \"./Transaction\";\nimport type {\n BuildTransactionParams,\n SignedTransactionResult,\n TransactionAccountsInput,\n} from \"./types\";\nimport { createInstructionContext, normalizeAccountList, parseInstructionData } from \"./utils\";\n\nconst FLAG_HAS_FEE_PAYER_PROOF = 1 << 0;\n\nexport class TransactionBuilder {\n build(params: BuildTransactionParams): Transaction {\n const feePayer = Pubkey.from(params.feePayer.publicKey);\n const program = Pubkey.from(params.program);\n\n // Normalize accounts first (sort and dedupe)\n const sortedReadWrite = normalizeAccountList(params.accounts?.readWriteAccounts ?? []);\n const sortedReadOnly = normalizeAccountList(params.accounts?.readOnlyAccounts ?? []);\n\n // Resolve instruction data - either from callback or static value\n let instructionData: Uint8Array | undefined;\n\n if (params.buildInstructionData) {\n const context = createInstructionContext(feePayer, program, sortedReadWrite, sortedReadOnly);\n const result = params.buildInstructionData(context);\n instructionData = parseInstructionData(result);\n } else {\n instructionData = parseInstructionData(params.instructionData);\n }\n\n const baseFlags = params.header.flags ?? 0;\n const flags = params.proofs?.feePayerStateProof ? baseFlags | FLAG_HAS_FEE_PAYER_PROOF : baseFlags;\n\n // Build normalized accounts object\n const accounts: TransactionAccountsInput | undefined =\n sortedReadWrite.length > 0 || sortedReadOnly.length > 0\n ? { readWriteAccounts: sortedReadWrite, readOnlyAccounts: sortedReadOnly }\n : undefined;\n\n return new Transaction({\n feePayer,\n program,\n header: {\n ...params.header,\n flags,\n },\n accounts,\n instructionData,\n proofs: params.proofs,\n });\n }\n\n async buildAndSign(params: BuildTransactionParams): Promise<SignedTransactionResult> {\n if (!params.feePayer.privateKey) {\n throw new Error(\"Fee payer private key is required to sign the transaction\");\n }\n const transaction = this.build(params);\n const signature = await transaction.sign(params.feePayer.privateKey);\n const rawTransaction = transaction.toWire();\n return { transaction, signature, rawTransaction };\n }\n}\n","\nimport type { Timestamp } from \"@bufbuild/protobuf/wkt\";\nimport { TransactionHeaderInput } from \"../domain/transactions\";\nimport { BlockSelector } from \"../modules/helpers\";\nimport { ConsensusStatus } from \"@thru/proto\";\n\n\nexport function isSlotSelector(selector: BlockSelector): selector is { slot: number | bigint } {\n return \"slot\" in selector;\n}\n\nexport function mergeTransactionHeader(\n defaults: TransactionHeaderInput,\n overrides?: Partial<TransactionHeaderInput>,\n): TransactionHeaderInput {\n if (!overrides) {\n return defaults;\n }\n\n const sanitized = Object.fromEntries(\n Object.entries(overrides).filter(([, value]) => value !== undefined),\n ) as Partial<TransactionHeaderInput>;\n\n return {\n ...defaults,\n ...sanitized,\n };\n}\n\nexport function timestampToNanoseconds(timestamp?: Timestamp): bigint {\n if (!timestamp) {\n return 0n;\n }\n const seconds = BigInt(timestamp.seconds ?? 0);\n const nanos = BigInt(timestamp.nanos ?? 0);\n return seconds * 1_000_000_000n + nanos;\n}\n\nexport function nanosecondsToTimestamp(ns: bigint): Timestamp {\n const seconds = ns / 1_000_000_000n;\n const nanos = Number(ns % 1_000_000_000n);\n return { seconds, nanos } as Timestamp;\n}\n\nexport function consensusStatusToString(status: ConsensusStatus): string {\n const lookup = ConsensusStatus as unknown as Record<number, string>;\n return lookup[status] ?? `UNKNOWN(${status})`;\n}\n","import { ConsensusStatus } from \"@thru/proto\";\nimport type { TransactionStatus } from \"@thru/proto\";\nimport { consensusStatusToString } from \"../../utils/utils\";\nimport { Transaction } from \"./Transaction\";\n\nexport interface TransactionStatusParams {\n signature: Uint8Array;\n consensusStatus?: ConsensusStatus;\n executionResult?: ReturnType<typeof Transaction.executionResultFromProto>;\n}\n\nexport class TransactionStatusSnapshot {\n readonly signature: Uint8Array;\n readonly statusCode?: ConsensusStatus;\n readonly status?: string;\n readonly executionResult?: ReturnType<typeof Transaction.executionResultFromProto>;\n\n constructor(params: TransactionStatusParams) {\n this.signature = copyBytes(params.signature);\n this.statusCode = params.consensusStatus;\n this.status = params.consensusStatus != null ? consensusStatusToString(params.consensusStatus) : undefined;\n this.executionResult = params.executionResult;\n }\n\n static fromProto(proto: TransactionStatus): TransactionStatusSnapshot {\n if (!proto.signature?.value) {\n throw new Error(\"TransactionStatus proto missing signature\");\n }\n return new TransactionStatusSnapshot({\n signature: proto.signature.value,\n consensusStatus: proto.consensusStatus,\n executionResult: proto.executionResult\n ? Transaction.executionResultFromProto(proto.executionResult)\n : undefined,\n });\n }\n}\n\nfunction copyBytes(bytes: Uint8Array): Uint8Array {\n const copy = new Uint8Array(bytes.length);\n copy.set(bytes);\n return copy;\n}\n\n","import { create } from \"@bufbuild/protobuf\";\n\nimport {\n ConsensusStatus,\n CurrentVersionSchema,\n VersionContextSchema,\n AccountView,\n BlockView,\n TransactionView\n} from \"@thru/proto\";\n\nexport const DEFAULT_HOST = \"https://grpc-web.alphanet.thruput.org\";\n\nexport const DEFAULT_ACCOUNT_VIEW = AccountView.FULL;\nexport const DEFAULT_BLOCK_VIEW = BlockView.FULL;\nexport const DEFAULT_TRANSACTION_VIEW = TransactionView.FULL;\nexport const DEFAULT_MIN_CONSENSUS = ConsensusStatus.UNSPECIFIED;\nexport const DEFAULT_VERSION_CONTEXT = create(VersionContextSchema, {\n version: {\n case: \"current\",\n value: create(CurrentVersionSchema, {}),\n },\n});\n\nexport const DEFAULT_FEE = 1n;\nexport const DEFAULT_COMPUTE_UNITS = 300_000_000;\nexport const DEFAULT_STATE_UNITS = 10_000;\nexport const DEFAULT_MEMORY_UNITS = 10_000;\nexport const DEFAULT_EXPIRY_AFTER = 100;\n","import { CallOptions, Interceptor, Transport, createClient } from \"@connectrpc/connect\";\nimport { GrpcWebTransportOptions, createGrpcWebTransport } from \"@connectrpc/connect-web\";\n\nimport { DEFAULT_HOST } from \"../defaults\";\nimport { CommandService, QueryService, StreamingService } from \"@thru/proto\";\n\ntype PartialTransportOptions = Partial<GrpcWebTransportOptions>;\n\nexport interface ThruClientConfig {\n baseUrl?: string;\n transport?: Transport;\n transportOptions?: PartialTransportOptions;\n interceptors?: Interceptor[];\n callOptions?: CallOptions;\n}\n\ntype QueryClient = ReturnType<typeof createClient<typeof QueryService>>;\ntype CommandClient = ReturnType<typeof createClient<typeof CommandService>>;\ntype StreamingClient = ReturnType<typeof createClient<typeof StreamingService>>;\n\nexport interface ThruClientContext {\n baseUrl: string;\n transport: Transport;\n query: QueryClient;\n command: CommandClient;\n streaming: StreamingClient;\n callOptions?: CallOptions;\n}\n\nexport function createThruClientContext(config: ThruClientConfig = {}): ThruClientContext {\n const transportOptions = config.transportOptions ?? {};\n const { baseUrl: optionsBaseUrl, interceptors: optionInterceptors, ...restTransportOptions } = transportOptions;\n const baseUrl = config.baseUrl ?? optionsBaseUrl ?? DEFAULT_HOST;\n const mergedInterceptors = [\n ...(optionInterceptors ?? []),\n ...(config.interceptors ?? []),\n ];\n const transport =\n config.transport ??\n createGrpcWebTransport({\n baseUrl,\n ...(restTransportOptions as Omit<GrpcWebTransportOptions, \"baseUrl\">),\n interceptors: mergedInterceptors.length > 0 ? mergedInterceptors : undefined,\n });\n\n return {\n baseUrl,\n transport,\n query: createClient(QueryService, transport),\n command: createClient(CommandService, transport),\n streaming: createClient(StreamingService, transport),\n callOptions: config.callOptions,\n };\n}\n\nexport function withCallOptions(ctx: ThruClientContext, overrides?: CallOptions): CallOptions | undefined {\n return mergeCallOptions(ctx.callOptions, overrides);\n}\n\nfunction mergeCallOptions(defaults?: CallOptions, overrides?: CallOptions): CallOptions | undefined {\n if (!defaults) {\n return overrides;\n }\n if (!overrides) {\n return defaults;\n }\n return {\n ...defaults,\n ...overrides,\n headers: mergeHeaders(defaults.headers, overrides.headers),\n contextValues: overrides.contextValues ?? defaults.contextValues,\n onHeader: overrides.onHeader ?? defaults.onHeader,\n onTrailer: overrides.onTrailer ?? defaults.onTrailer,\n };\n}\n\nfunction mergeHeaders(a?: HeadersInit, b?: HeadersInit): HeadersInit | undefined {\n const entries: [string, string][] = [];\n const add = (init?: HeadersInit) => {\n if (!init) {\n return;\n }\n if (init instanceof Headers) {\n init.forEach((value, key) => {\n entries.push([key, value]);\n });\n return;\n }\n if (Array.isArray(init)) {\n for (const [key, value] of init) {\n entries.push([key, value]);\n }\n return;\n }\n for (const [key, value] of Object.entries(init)) {\n if (value !== undefined) {\n entries.push([key, String(value)]);\n }\n }\n };\n add(a);\n add(b);\n if (entries.length === 0) {\n return undefined;\n }\n return entries;\n}\n","import type { ConsensusStatus } from \"@thru/proto\";\nimport type {\n Account as ProtoAccount,\n AccountData as ProtoAccountData,\n AccountFlags as ProtoAccountFlags,\n AccountMeta as ProtoAccountMeta,\n VersionContextMetadata as ProtoVersionContextMetadata,\n} from \"@thru/proto\";\nimport { timestampToNanoseconds } from \"../../utils/utils\";\nimport { Pubkey } from \"../primitives\";\n\nexport interface AccountFlagsData {\n isProgram: boolean;\n isPrivileged: boolean;\n isUncompressable: boolean;\n isEphemeral: boolean;\n isDeleted: boolean;\n isNew: boolean;\n isCompressed: boolean;\n}\n\nexport class AccountFlags implements AccountFlagsData {\n readonly isProgram: boolean;\n readonly isPrivileged: boolean;\n readonly isUncompressable: boolean;\n readonly isEphemeral: boolean;\n readonly isDeleted: boolean;\n readonly isNew: boolean;\n readonly isCompressed: boolean;\n\n constructor(flags?: Partial<AccountFlagsData>) {\n this.isProgram = flags?.isProgram ?? false;\n this.isPrivileged = flags?.isPrivileged ?? false;\n this.isUncompressable = flags?.isUncompressable ?? false;\n this.isEphemeral = flags?.isEphemeral ?? false;\n this.isDeleted = flags?.isDeleted ?? false;\n this.isNew = flags?.isNew ?? false;\n this.isCompressed = flags?.isCompressed ?? false;\n }\n\n static fromProto(flags?: ProtoAccountFlags): AccountFlags {\n if (!flags) {\n return new AccountFlags();\n }\n return new AccountFlags({\n isProgram: flags.isProgram,\n isPrivileged: flags.isPrivileged,\n isUncompressable: flags.isUncompressable,\n isEphemeral: flags.isEphemeral,\n isDeleted: flags.isDeleted,\n isNew: flags.isNew,\n isCompressed: flags.isCompressed,\n });\n }\n}\n\nexport class AccountMeta {\n readonly version: number;\n readonly flags: AccountFlags;\n readonly dataSize: number;\n readonly seq: bigint;\n readonly owner?: Pubkey;\n readonly balance: bigint;\n readonly nonce?: bigint;\n\n constructor(params: {\n version: number;\n flags?: AccountFlags;\n dataSize: number;\n seq: bigint;\n owner?: Pubkey;\n balance: bigint;\n nonce?: bigint;\n }) {\n this.version = params.version;\n this.flags = params.flags ?? new AccountFlags();\n this.dataSize = params.dataSize;\n this.seq = params.seq;\n this.owner = params.owner;\n this.balance = params.balance;\n this.nonce = params.nonce;\n }\n\n static fromProto(meta?: ProtoAccountMeta): AccountMeta | undefined {\n if (!meta) {\n return undefined;\n }\n return new AccountMeta({\n version: meta.version,\n flags: AccountFlags.fromProto(meta.flags),\n dataSize: meta.dataSize,\n seq: meta.seq ?? 0n,\n owner: meta.owner ? Pubkey.fromProtoPubkey(meta.owner) : undefined,\n balance: meta.balance ?? 0n,\n nonce: meta.nonce,\n });\n }\n}\n\nexport class AccountData {\n readonly data?: Uint8Array;\n readonly compressed: boolean;\n readonly compressionAlgorithm?: string;\n\n constructor(params: { data?: Uint8Array; compressed?: boolean; compressionAlgorithm?: string }) {\n this.data = params.data ? new Uint8Array(params.data) : undefined;\n this.compressed = params.compressed ?? false;\n this.compressionAlgorithm = params.compressionAlgorithm;\n }\n\n static fromProto(data?: ProtoAccountData): AccountData | undefined {\n if (!data) {\n return undefined;\n }\n return new AccountData({\n data: data.data ? new Uint8Array(data.data) : undefined,\n compressed: data.compressed ?? false,\n compressionAlgorithm: data.compressionAlgorithm,\n });\n }\n}\n\nexport interface AccountVersionContext {\n slot?: bigint;\n blockTimestampNs?: bigint;\n}\n\nexport class Account {\n readonly address: Pubkey;\n readonly meta?: AccountMeta;\n readonly data?: AccountData;\n readonly versionContext?: AccountVersionContext;\n readonly consensusStatus?: ConsensusStatus;\n\n constructor(params: {\n address: Pubkey;\n meta?: AccountMeta;\n data?: AccountData;\n versionContext?: AccountVersionContext;\n consensusStatus?: ConsensusStatus;\n }) {\n this.address = params.address;\n this.meta = params.meta;\n this.data = params.data;\n this.versionContext = params.versionContext;\n this.consensusStatus = params.consensusStatus;\n }\n\n static fromProto(proto: ProtoAccount): Account {\n if (!proto.address) {\n throw new Error(\"Account proto missing address\");\n }\n\n return new Account({\n address: Pubkey.fromProtoPubkey(proto.address),\n meta: AccountMeta.fromProto(proto.meta),\n data: AccountData.fromProto(proto.data ?? undefined),\n versionContext: convertVersionContext(proto.versionContext),\n consensusStatus: proto.consensusStatus,\n });\n }\n}\n\nfunction convertVersionContext(meta?: ProtoVersionContextMetadata): AccountVersionContext | undefined {\n if (!meta) {\n return undefined;\n }\n\n return {\n slot: meta.slot,\n blockTimestampNs: timestampToNanoseconds(meta.blockTimestamp),\n };\n}\n","import type { AccountPage as ProtoAccountPage } from \"@thru/proto\";\nimport type { AccountUpdate as ProtoAccountUpdate, StreamAccountUpdatesResponse } from \"@thru/proto\";\nimport { Account, AccountMeta } from \"./Account\";\n\nexport interface AccountPageChunk {\n pageIndex: number;\n pageSize: number;\n data: Uint8Array;\n compressed?: boolean;\n compressionAlgorithm?: string;\n}\n\nexport interface AccountSnapshot {\n account: Account;\n}\n\nexport interface AccountUpdateDelta {\n slot: bigint;\n meta?: AccountMeta;\n page?: AccountPageChunk;\n deleted?: boolean;\n}\n\nexport type StreamAccountUpdate =\n | { kind: \"snapshot\"; snapshot: AccountSnapshot }\n | { kind: \"update\"; update: AccountUpdateDelta };\n\nexport function toStreamAccountUpdate(response: StreamAccountUpdatesResponse): StreamAccountUpdate | undefined {\n if (!response.message) {\n return undefined;\n }\n\n if (response.message.case === \"snapshot\") {\n return {\n kind: \"snapshot\",\n snapshot: { account: Account.fromProto(response.message.value) },\n };\n }\n\n if (response.message.case === \"update\") {\n return {\n kind: \"update\",\n update: fromProtoUpdate(response.message.value),\n };\n }\n\n return undefined;\n}\n\nfunction fromProtoUpdate(update: ProtoAccountUpdate): AccountUpdateDelta {\n return {\n slot: update.slot,\n meta: AccountMeta.fromProto(update.meta),\n page: update.page ? fromProtoPage(update.page) : undefined,\n deleted: update.delete ?? false,\n };\n}\n\nfunction fromProtoPage(page: ProtoAccountPage): AccountPageChunk {\n return {\n pageIndex: page.pageIdx,\n pageSize: page.pageSize,\n data: new Uint8Array(page.pageData),\n compressed: page.compressed ?? undefined,\n compressionAlgorithm: page.compressionAlgorithm,\n };\n}\n","import { create } from \"@bufbuild/protobuf\";\n\nimport {\n PageRequest as ProtoPageRequest,\n PageRequestSchema,\n PageResponse as ProtoPageResponse,\n PageResponseSchema,\n} from \"@thru/proto\";\n\nexport interface PageRequestParams {\n pageSize?: number;\n pageToken?: string;\n orderBy?: string;\n}\n\nexport class PageRequest {\n readonly pageSize?: number;\n readonly pageToken?: string;\n readonly orderBy?: string;\n\n constructor(params: PageRequestParams = {}) {\n if (params.pageSize !== undefined) {\n if (!Number.isInteger(params.pageSize) || params.pageSize < 0) {\n throw new Error(\"PageRequest.pageSize must be a non-negative integer\");\n }\n }\n\n this.pageSize = params.pageSize;\n this.pageToken = params.pageToken;\n this.orderBy = params.orderBy;\n }\n\n static fromProto(proto?: ProtoPageRequest): PageRequest | undefined {\n if (!proto) {\n return undefined;\n }\n return new PageRequest({\n pageSize: proto.pageSize,\n pageToken: proto.pageToken,\n orderBy: proto.orderBy,\n });\n }\n\n toProto(): ProtoPageRequest {\n return create(PageRequestSchema, {\n pageSize: this.pageSize,\n pageToken: this.pageToken,\n orderBy: this.orderBy,\n });\n }\n\n withParams(params: PageRequestParams): PageRequest {\n return new PageRequest({\n pageSize: params.pageSize ?? this.pageSize,\n pageToken: params.pageToken ?? this.pageToken,\n orderBy: params.orderBy ?? this.orderBy,\n });\n }\n}\n\nexport interface PageResponseParams {\n nextPageToken?: string;\n totalSize?: bigint;\n}\n\nexport class PageResponse {\n readonly nextPageToken?: string;\n readonly totalSize?: bigint;\n\n constructor(params: PageResponseParams = {}) {\n this.nextPageToken = params.nextPageToken;\n this.totalSize = params.totalSize;\n }\n\n static fromProto(proto?: ProtoPageResponse): PageResponse | undefined {\n if (!proto) {\n return undefined;\n }\n return new PageResponse({\n nextPageToken: proto.nextPageToken,\n totalSize: proto.totalSize,\n });\n }\n\n toProto(): ProtoPageResponse {\n return create(PageResponseSchema, {\n nextPageToken: this.nextPageToken,\n totalSize: this.totalSize,\n });\n }\n\n hasNextPage(): boolean {\n return !!this.nextPageToken;\n }\n}\n\n\n\n","import type { StateProof as CoreStateProof } from \"@thru/proto\";\n\nexport class StateProof {\n readonly proof: Uint8Array;\n readonly slot: bigint;\n\n constructor(params: { proof: Uint8Array; slot: bigint }) {\n this.proof = copyBytes(params.proof);\n this.slot = params.slot;\n }\n\n static fromProto(proto: CoreStateProof): StateProof {\n return new StateProof({\n proof: proto.proof,\n slot: proto.slot ?? 0n,\n });\n }\n}\n\nfunction copyBytes(bytes: Uint8Array): Uint8Array {\n const copy = new Uint8Array(bytes.length);\n copy.set(bytes);\n return copy;\n}\n\n","import { create } from \"@bufbuild/protobuf\";\n\nimport type { ThruClientContext } from \"../core/client\";\nimport { withCallOptions } from \"../core/client\";\nimport { Pubkey } from \"../domain/primitives\";\nimport { StateProof } from \"../domain/proofs\";\nimport {\n StateProofRequestSchema,\n GenerateStateProofRequestSchema,\n GenerateStateProofResponse,\n GetStateRootsRequestSchema,\n type GetStateRootsResponse,\n} from \"@thru/proto\";\nimport { GenerateStateProofOptions } from \"../types/types\";\n\nexport async function generateStateProof(\n ctx: ThruClientContext,\n options: GenerateStateProofOptions,\n): Promise<StateProof> {\n // If targetSlot is undefined or 0, let the server auto-select the latest\n // available state root slot. This avoids race conditions where the client\n // requests a slot that hasn't been ingested into ClickHouse yet.\n const targetSlot = options.targetSlot ?? 0n;\n\n const request = create(StateProofRequestSchema, {\n address: options.address ? Pubkey.from(options.address).toProtoPubkey() : undefined,\n proofType: options.proofType,\n targetSlot,\n });\n const schemaRequest = create(GenerateStateProofRequestSchema, { request });\n const response: GenerateStateProofResponse = await ctx.query.generateStateProof(\n schemaRequest,\n withCallOptions(ctx),\n );\n if (!response.proof) {\n throw new Error(\"State proof response missing proof\");\n }\n return StateProof.fromProto(response.proof);\n}\n\nexport interface GetStateRootsOptions {\n slot?: bigint;\n}\n\nexport async function getStateRoots(\n ctx: ThruClientContext,\n options: GetStateRootsOptions = {},\n): Promise<GetStateRootsResponse> {\n const request = create(GetStateRootsRequestSchema, {\n slot: options.slot,\n });\n return ctx.query.getStateRoots(request, withCallOptions(ctx));\n}\n","import { create } from \"@bufbuild/protobuf\";\n\nimport type { ThruClientContext } from \"../core/client\";\nimport { withCallOptions } from \"../core/client\";\nimport { DEFAULT_ACCOUNT_VIEW, DEFAULT_MIN_CONSENSUS, DEFAULT_VERSION_CONTEXT } from \"../defaults\";\nimport { Account } from \"../domain/accounts\";\nimport { Filter } from \"../domain/filters\";\nimport { PageRequest, PageResponse } from \"../domain/pagination\";\nimport { Pubkey, type PubkeyInput } from \"../domain/primitives\";\nimport type { Transaction } from \"../domain/transactions/Transaction\";\nimport { TransactionBuilder } from \"../domain/transactions/TransactionBuilder\";\nimport type { TransactionHeaderInput } from \"../domain/transactions/types\";\nimport {\n ConsensusStatus,\n VersionContext,\n AccountView,\n DataSlice,\n RawAccount,\n StateProofType,\n GetAccountRequestSchema,\n GetRawAccountRequestSchema,\n ListAccountsRequestSchema,\n type ListAccountsResponse as ProtoListAccountsResponse,\n} from \"@thru/proto\";\nimport { mergeTransactionHeader } from \"../utils/utils\";\nimport { generateStateProof } from \"./proofs\";\n\nexport interface CreateAccountOptions {\n /** The new account's public key (fee payer). */\n publicKey: PubkeyInput;\n /** Optional overrides for the transaction header. */\n header?: Partial<TransactionHeaderInput>;\n}\n\n\nexport interface AccountQueryOptions {\n view?: AccountView;\n versionContext?: VersionContext;\n minConsensus?: ConsensusStatus;\n dataSlice?: DataSlice;\n}\n\nexport interface RawAccountQueryOptions {\n view?: AccountView;\n versionContext?: VersionContext;\n minConsensus?: ConsensusStatus;\n}\n\nexport interface ListAccountsOptions {\n view?: AccountView;\n versionContext?: VersionContext;\n filter?: Filter;\n page?: PageRequest;\n minConsensus?: ConsensusStatus;\n}\n\nexport interface AccountList {\n accounts: Account[];\n page?: PageResponse;\n}\n\nexport function getAccount(\n ctx: ThruClientContext,\n address: PubkeyInput,\n options: AccountQueryOptions = {},\n): Promise<Account> {\n const request = create(GetAccountRequestSchema, {\n address: Pubkey.from(address).toProtoPubkey(),\n view: options.view ?? DEFAULT_ACCOUNT_VIEW,\n versionContext: options.versionContext ?? DEFAULT_VERSION_CONTEXT,\n minConsensus: options.minConsensus ?? DEFAULT_MIN_CONSENSUS,\n dataSlice: options.dataSlice,\n });\n return ctx.query.getAccount(request, withCallOptions(ctx)).then(Account.fromProto);\n}\n\nexport function getRawAccount(\n ctx: ThruClientContext,\n address: PubkeyInput,\n options: RawAccountQueryOptions = {},\n): Promise<RawAccount> {\n const request = create(GetRawAccountRequestSchema, {\n address: Pubkey.from(address).toProtoPubkey(),\n view: options.view ?? DEFAULT_ACCOUNT_VIEW,\n versionContext: options.versionContext ?? DEFAULT_VERSION_CONTEXT,\n minConsensus: options.minConsensus ?? DEFAULT_MIN_CONSENSUS,\n });\n return ctx.query.getRawAccount(request, withCallOptions(ctx));\n}\n\nexport function listAccounts(\n ctx: ThruClientContext,\n options: ListAccountsOptions,\n): Promise<AccountList> {\n const request = create(ListAccountsRequestSchema, {\n view: options.view ?? DEFAULT_ACCOUNT_VIEW,\n versionContext: options.versionContext ?? DEFAULT_VERSION_CONTEXT,\n filter: options.filter?.toProto(),\n page: options.page?.toProto(),\n minConsensus: options.minConsensus ?? DEFAULT_MIN_CONSENSUS,\n });\n return ctx.query.listAccounts(request, withCallOptions(ctx)).then((response: ProtoListAccountsResponse) => ({\n accounts: response.accounts.map((proto) => Account.fromProto(proto)),\n page: PageResponse.fromProto(response.page),\n }));\n}\n\nexport async function createAccount(\n ctx: ThruClientContext,\n options: CreateAccountOptions,\n): Promise<Transaction> {\n const feePayer = Pubkey.from(options.publicKey).toBytes();\n\n // Let the server auto-select the latest available state root slot.\n // This avoids race conditions where we request a slot that hasn't\n // been ingested into ClickHouse yet.\n const proofResponse = await generateStateProof(ctx, {\n address: options.publicKey,\n proofType: StateProofType.CREATING,\n // targetSlot omitted - server will auto-select\n });\n\n const proofBytes = proofResponse.proof;\n if (!proofBytes || proofBytes.length === 0) {\n throw new Error(\"State proof generation returned empty proof\");\n }\n\n // Use the slot from the proof response for the transaction startSlot\n const startSlot = proofResponse.slot;\n\n const program = new Uint8Array(32);\n program[31] = 0x03; /* NOOP program id used by thru-cli account creation */\n\n const builder = new TransactionBuilder();\n const headerDefaults: TransactionHeaderInput = {\n fee: 0n,\n nonce: 0n,\n startSlot,\n expiryAfter: 100,\n computeUnits: 10_000,\n memoryUnits: 10_000,\n stateUnits: 10_000,\n };\n\n const header = mergeTransactionHeader(headerDefaults, options.header);\n\n const transaction = builder.build({\n feePayer: { publicKey: feePayer },\n program,\n header,\n proofs: { feePayerStateProof: proofBytes }\n });\n\n return transaction;\n}\n","import { ConsensusStatus } from \"@thru/proto\";\nimport type { Transaction as ProtoTransaction } from \"@thru/proto\";\nimport type { TrackTransactionResponse } from \"@thru/proto\";\nimport { consensusStatusToString } from \"../../utils/utils\";\nimport { Transaction } from \"./Transaction\";\n\nexport type StreamTransactionUpdate =\n | {\n kind: \"partial\";\n signature: Uint8Array;\n slot?: bigint;\n executionResult?: ReturnType<typeof Transaction.executionResultFromProto>;\n }\n | {\n kind: \"full\";\n transaction: Transaction;\n };\n\nexport function toStreamTransactionUpdate(proto: ProtoTransaction): StreamTransactionUpdate {\n const signatureBytes = proto.signature?.value ? new Uint8Array(proto.signature.value) : new Uint8Array();\n const executionResult = proto.executionResult\n ? Transaction.executionResultFromProto(proto.executionResult)\n : undefined;\n\n if (!proto.header) {\n return {\n kind: \"partial\",\n signature: signatureBytes,\n slot: proto.slot,\n executionResult,\n };\n }\n\n return {\n kind: \"full\",\n transaction: Transaction.fromProto(proto),\n };\n}\n\nexport interface TrackTransactionUpdate {\n signature?: Uint8Array;\n status: string;\n statusCode: ConsensusStatus;\n executionResult?: ReturnType<typeof Transaction.executionResultFromProto>;\n transaction?: Transaction;\n}\n\nexport function toTrackTransactionUpdate(response: TrackTransactionResponse): TrackTransactionUpdate {\n const signatureBytes = response.signature?.value ? new Uint8Array(response.signature.value) : undefined;\n const executionResult = response.executionResult\n ? Transaction.executionResultFromProto(response.executionResult)\n : undefined;\n\n return {\n signature: signatureBytes,\n status: consensusStatusToString(response.consensusStatus),\n statusCode: response.consensusStatus,\n executionResult,\n transaction: undefined,\n };\n}\n","import type { BlockFooter as ProtoBlockFooter } from \"@thru/proto\";\nimport { ExecutionStatus } from \"@thru/proto\";\n\nexport interface BlockFooterParams {\n signature?: Uint8Array;\n status: ExecutionStatus;\n consumedComputeUnits: bigint;\n consumedStateUnits: number;\n attestorPayment: bigint;\n}\n\nexport class BlockFooter {\n readonly signature?: Uint8Array;\n readonly status: ExecutionStatus;\n readonly consumedComputeUnits: bigint;\n readonly consumedStateUnits: number;\n readonly attestorPayment: bigint;\n\n constructor(params: BlockFooterParams) {\n this.signature = copyBytes(params.signature);\n this.status = params.status;\n this.consumedComputeUnits = params.consumedComputeUnits;\n this.consumedStateUnits = params.consumedStateUnits;\n this.attestorPayment = params.attestorPayment;\n }\n\n static fromProto(proto: ProtoBlockFooter): BlockFooter {\n return new BlockFooter({\n signature: proto.signature?.value,\n status: proto.status ?? ExecutionStatus.UNSPECIFIED,\n consumedComputeUnits: proto.consumedComputeUnits ?? 0n,\n consumedStateUnits: proto.consumedStateUnits ?? 0,\n attestorPayment: proto.attestorPayment ?? 0n,\n });\n }\n}\n\nfunction copyBytes(bytes?: Uint8Array): Uint8Array | undefined {\n if (!bytes) return undefined;\n const out = new Uint8Array(bytes.length);\n out.set(bytes);\n return out;\n}\n","import type { Timestamp } from \"@bufbuild/protobuf/wkt\";\n\nimport type { BlockHeader as ProtoBlockHeader } from \"@thru/proto\";\n\nexport interface BlockHeaderParams {\n slot: bigint;\n version: number;\n headerSignature?: Uint8Array;\n producer?: Uint8Array;\n expiryTimestamp?: Timestamp;\n startSlot: bigint;\n expiryAfter?: number;\n maxBlockSize?: number;\n maxComputeUnits?: bigint;\n maxStateUnits?: number;\n bondAmountLockUp?: bigint;\n weightSlot?: bigint;\n blockHash?: Uint8Array;\n chainId?: number;\n}\n\nexport class BlockHeader {\n readonly slot: bigint;\n readonly version: number;\n readonly headerSignature?: Uint8Array;\n readonly producer?: Uint8Array;\n readonly expiryTimestamp?: Timestamp;\n readonly startSlot: bigint;\n readonly expiryAfter?: number;\n readonly maxBlockSize?: number;\n readonly maxComputeUnits?: bigint;\n readonly maxStateUnits?: number;\n readonly bondAmountLockUp?: bigint;\n readonly weightSlot?: bigint;\n readonly blockHash?: Uint8Array;\n readonly chainId?: number;\n\n constructor(params: BlockHeaderParams) {\n this.slot = params.slot;\n this.version = params.version;\n this.headerSignature = copyBytes(params.headerSignature);\n this.producer = copyBytes(params.producer);\n this.expiryTimestamp = params.expiryTimestamp;\n this.startSlot = params.startSlot;\n this.expiryAfter = params.expiryAfter;\n this.maxBlockSize = params.maxBlockSize;\n this.maxComputeUnits = params.maxComputeUnits;\n this.maxStateUnits = params.maxStateUnits;\n this.bondAmountLockUp = params.bondAmountLockUp;\n this.weightSlot = params.weightSlot;\n this.blockHash = copyBytes(params.blockHash);\n this.chainId = params.chainId;\n }\n\n static fromProto(proto: ProtoBlockHeader): BlockHeader {\n return new BlockHeader({\n slot: proto.slot ?? 0n,\n version: proto.version ?? 0,\n headerSignature: proto.headerSignature?.value,\n producer: proto.producer?.value,\n expiryTimestamp: proto.expiryTimestamp,\n startSlot: proto.startSlot ?? 0n,\n expiryAfter: proto.expiryAfter,\n maxBlockSize: proto.maxBlockSize,\n maxComputeUnits: proto.maxComputeUnits,\n maxStateUnits: proto.maxStateUnits,\n bondAmountLockUp: proto.bondAmountLockUp,\n weightSlot: proto.weightSlot,\n blockHash: proto.blockHash?.value,\n chainId: proto.chainId,\n });\n }\n\n withBlockHash(blockHash: Uint8Array): BlockHeader {\n return new BlockHeader({\n slot: this.slot,\n version: this.version,\n headerSignature: this.headerSignature,\n producer: this.producer,\n expiryTimestamp: this.expiryTimestamp,\n startSlot: this.startSlot,\n expiryAfter: this.expiryAfter,\n maxBlockSize: this.maxBlockSize,\n maxComputeUnits: this.maxComputeUnits,\n maxStateUnits: this.maxStateUnits,\n bondAmountLockUp: this.bondAmountLockUp,\n weightSlot: this.weightSlot,\n blockHash,\n chainId: this.chainId,\n });\n }\n}\n\nfunction copyBytes(bytes?: Uint8Array): Uint8Array | undefined {\n if (!bytes) return undefined;\n const out = new Uint8Array(bytes.length);\n out.set(bytes);\n return out;\n}\n","import type { ConsensusStatus } from \"@thru/proto\";\nimport { ExecutionStatus, type Block as CoreBlock } from \"@thru/proto\";\nimport { nanosecondsToTimestamp, timestampToNanoseconds } from \"../../utils/utils\";\nimport {\n BLOCK_FOOTER_SIZE,\n BLOCK_HEADER_SIZE,\n BLOCK_HEADER_SIZE_LEGACY,\n BLOCK_VERSION_V1,\n PUBKEY_SIZE,\n SIGNATURE_SIZE,\n TXN_HEADER_BODY_SIZE,\n TXN_VERSION_V1,\n} from \"../../wire-format\";\nimport { Transaction } from \"../transactions\";\nimport { BlockFooter } from \"./BlockFooter\";\nimport { BlockHeader } from \"./BlockHeader\";\n\nconst BLOCK_HASH_SIZE = 32;\nconst RESERVED_FOOTER_PADDING = 0n;\nconst SIGNATURE_PREFIX_SIZE = SIGNATURE_SIZE;\n\nexport class Block {\n readonly header: BlockHeader;\n readonly footer?: BlockFooter;\n readonly body?: Uint8Array;\n readonly consensusStatus?: ConsensusStatus;\n\n blockTimeNs?: bigint;\n attestorPayment?: bigint;\n\n constructor(params: {\n header: BlockHeader;\n footer?: BlockFooter;\n body?: Uint8Array;\n consensusStatus?: ConsensusStatus;\n }) {\n this.header = params.header;\n this.footer = params.footer;\n this.body = params.body ? new Uint8Array(params.body) : undefined;\n this.consensusStatus = params.consensusStatus;\n }\n\n static fromProto(proto: CoreBlock): Block {\n if (!proto.header) {\n throw new Error(\"Block proto missing header\");\n }\n\n const rawBody = proto.body ? new Uint8Array(proto.body) : undefined;\n const transactionBody = Block.extractTransactionBody(rawBody, !!proto.footer);\n\n const block = new Block({\n header: BlockHeader.fromProto(proto.header),\n footer: proto.footer ? BlockFooter.fromProto(proto.footer) : undefined,\n body: transactionBody,\n consensusStatus: proto.consensusStatus,\n });\n\n // blockTimeNs is not part of the proto Block message, so it remains undefined\n // It will only be set when parsing from wire format\n block.attestorPayment = block.footer?.attestorPayment ?? 0n;\n\n return block;\n }\n\n static fromWire(data: Uint8Array): Block {\n // Try parsing with current header size first, then fall back to legacy\n const result = Block.tryParseWireWithHeaderSize(data, BLOCK_HEADER_SIZE);\n if (result) {\n return result;\n }\n\n // Try legacy header size (160 bytes, before weight_slot was added)\n const legacyResult = Block.tryParseWireWithHeaderSize(data, BLOCK_HEADER_SIZE_LEGACY);\n if (legacyResult) {\n return legacyResult;\n }\n\n // If both fail, throw with the current expected size\n throw new Error(`Block data too short: ${data.length} bytes (expected at least ${BLOCK_HEADER_SIZE})`);\n }\n\n private static tryParseWireWithHeaderSize(data: Uint8Array, headerSize: number): Block | null {\n if (data.length < headerSize) {\n return null;\n }\n\n const headerBytes = data.slice(0, headerSize);\n let header: BlockHeader;\n let blockTimeNs: bigint;\n\n try {\n const parsed = this.parseHeaderWithSize(headerBytes, headerSize);\n header = parsed.header;\n blockTimeNs = parsed.blockTimeNs;\n } catch {\n return null;\n }\n\n if (header.version !== BLOCK_VERSION_V1) {\n return null;\n }\n\n let finalHeader = header;\n let footer: BlockFooter | undefined;\n let footerInfo: { blockHash: Uint8Array; attestorPayment: bigint } | undefined;\n let body: Uint8Array | undefined;\n\n if (data.length >= headerSize + BLOCK_FOOTER_SIZE) {\n const footerOffset = data.length - BLOCK_FOOTER_SIZE;\n const footerBytes = data.slice(footerOffset);\n\n try {\n const parsedFooter = this.parseFooter(footerBytes);\n footer = parsedFooter.footer;\n footerInfo = { blockHash: parsedFooter.blockHash, attestorPayment: parsedFooter.attestorPayment };\n finalHeader = header.withBlockHash(parsedFooter.blockHash);\n } catch {\n return null;\n }\n\n body = footerOffset > headerSize ? data.slice(headerSize, footerOffset) : undefined;\n } else {\n body = data.length > headerSize ? data.slice(headerSize) : undefined;\n }\n\n // Validate that the extracted body looks like valid transactions\n if (body && body.length > 0 && !Block.looksLikeValidTransactionBody(body)) {\n return null;\n }\n\n const block = new Block({ header: finalHeader, footer, body });\n block.blockTimeNs = blockTimeNs;\n block.attestorPayment = footerInfo?.attestorPayment ?? 0n;\n\n return block;\n }\n\n toWire(): Uint8Array {\n const headerBytes = this.serializeHeader();\n const bodyBytes = this.body ?? new Uint8Array(0);\n const footerBytes = this.footer ? this.serializeFooter() : undefined;\n\n const totalLength = headerBytes.length + bodyBytes.length + (footerBytes?.length ?? 0);\n const result = new Uint8Array(totalLength);\n\n result.set(headerBytes, 0);\n result.set(bodyBytes, headerBytes.length);\n\n if (footerBytes) {\n result.set(footerBytes, headerBytes.length + bodyBytes.length);\n }\n\n return result;\n }\n\n getTransactions(): Transaction[] {\n if (!this.body || this.body.length === 0) {\n return [];\n }\n\n return Block.parseTransactionsFromBody(this.body);\n }\n\n private static extractTransactionBody(raw: Uint8Array | undefined, hasFooter: boolean): Uint8Array | undefined {\n if (!raw || raw.length === 0) {\n return undefined;\n }\n\n // Try current header size first (168 bytes with weight_slot)\n const bodyWithCurrentHeader = Block.extractWithHeaderSize(raw, hasFooter, BLOCK_HEADER_SIZE);\n if (bodyWithCurrentHeader && bodyWithCurrentHeader.length > 0 && Block.looksLikeValidTransactionBody(bodyWithCurrentHeader)) {\n return bodyWithCurrentHeader;\n }\n\n // Try legacy header size (160 bytes without weight_slot, for blocks before Dec 2025)\n const bodyWithLegacyHeader = Block.extractWithHeaderSize(raw, hasFooter, BLOCK_HEADER_SIZE_LEGACY);\n if (bodyWithLegacyHeader && bodyWithLegacyHeader.length > 0 && Block.looksLikeValidTransactionBody(bodyWithLegacyHeader)) {\n return bodyWithLegacyHeader;\n }\n\n // If stripping header/footer doesn't produce any body, return undefined\n return undefined;\n }\n\n private static extractWithHeaderSize(\n raw: Uint8Array,\n hasFooter: boolean,\n headerSize: number,\n ): Uint8Array | undefined {\n if (raw.length <= headerSize) {\n return undefined;\n }\n\n const footerSize = hasFooter && raw.length >= headerSize + BLOCK_FOOTER_SIZE ? BLOCK_FOOTER_SIZE : 0;\n const start = headerSize;\n const end = Math.max(start, raw.length - footerSize);\n\n if (end <= start) {\n return undefined;\n }\n\n return raw.slice(start, end);\n }\n\n /**\n * Checks if the data looks like a valid transaction body.\n * Uses heuristics to detect if we've correctly offset into the block data.\n * Wire format: header (112 bytes) + body + signature (64 bytes at end)\n * This is a lenient heuristic for format detection - version/flag validation\n * happens in Transaction.parseWire.\n */\n private static looksLikeValidTransactionBody(data: Uint8Array): boolean {\n const MIN_TXN_SIZE = TXN_HEADER_BODY_SIZE + SIGNATURE_SIZE; // 176 bytes minimum\n\n if (data.length < MIN_TXN_SIZE) {\n return false;\n }\n\n // Read account counts (little-endian uint16) at offsets 2-5\n const readwriteCount = data[2] | (data[3] << 8);\n const readonlyCount = data[4] | (data[5] << 8);\n\n const totalAccounts = readwriteCount + readonlyCount;\n if (totalAccounts > 1024) {\n return false;\n }\n\n // Read instruction data size at offsets 6-7\n const instrDataSize = data[6] | (data[7] << 8);\n\n // Calculate expected minimum transaction size (header + accounts + instr + signature)\n const expectedMinSize = TXN_HEADER_BODY_SIZE + totalAccounts * PUBKEY_SIZE + instrDataSize + SIGNATURE_SIZE;\n\n if (data.length < expectedMinSize) {\n return false;\n }\n\n return true;\n }\n\n private serializeHeader(): Uint8Array {\n const buffer = new ArrayBuffer(BLOCK_HEADER_SIZE);\n const bytes = new Uint8Array(buffer);\n const view = new DataView(buffer);\n\n const signature = normalizeBytes(this.header.headerSignature, SIGNATURE_SIZE);\n bytes.set(signature, 0);\n\n let offset = SIGNATURE_PREFIX_SIZE;\n const version = this.header.version ?? BLOCK_VERSION_V1;\n view.setUint8(offset, version & 0xff);\n offset += 1;\n\n bytes.fill(0, offset, offset + 5); // padding (5 bytes)\n offset += 5;\n\n view.setUint16(offset, this.header.chainId ?? 0, true);\n offset += 2;\n\n const producer = normalizeBytes(this.header.producer, PUBKEY_SIZE);\n bytes.set(producer, offset);\n offset += PUBKEY_SIZE;\n\n const bondAmountLockUp = this.header.bondAmountLockUp ?? 0n;\n view.setBigUint64(offset, bondAmountLockUp, true);\n offset += 8;\n\n const expiryTimestampNs = timestampToNanoseconds(this.header.expiryTimestamp);\n view.setBigUint64(offset, expiryTimestampNs, true);\n offset += 8;\n\n const startSlot = this.header.startSlot ?? 0n;\n view.setBigUint64(offset, startSlot, true);\n offset += 8;\n\n view.setUint32(offset, this.header.expiryAfter ?? 0, true);\n offset += 4;\n\n view.setUint32(offset, this.header.maxBlockSize ?? 0, true);\n offset += 4;\n\n view.setBigUint64(offset, this.header.maxComputeUnits ?? 0n, true);\n offset += 8;\n\n view.setUint32(offset, this.header.maxStateUnits ?? 0, true);\n offset += 4;\n\n bytes.fill(0, offset, offset + 4); // reserved\n offset += 4;\n\n view.setBigUint64(offset, this.header.weightSlot ?? 0n, true);\n offset += 8;\n\n // If blockTimeNs is not available, write 0 instead of defaulting to expiryTimestamp\n // This preserves the distinction between \"not available\" and \"equals expiryTimestamp\"\n const blockTimeNs = this.blockTimeNs ?? 0n;\n view.setBigUint64(offset, blockTimeNs, true);\n\n return bytes;\n }\n\n private serializeFooter(): Uint8Array {\n const buffer = new ArrayBuffer(BLOCK_FOOTER_SIZE);\n const bytes = new Uint8Array(buffer);\n const view = new DataView(buffer);\n\n const attestorPayment =\n this.footer?.attestorPayment ??\n this.attestorPayment ??\n RESERVED_FOOTER_PADDING;\n view.setBigUint64(0, attestorPayment, true);\n\n const blockHash = normalizeBytes(this.header.blockHash, BLOCK_HASH_SIZE);\n bytes.set(blockHash, 8);\n\n const signature = normalizeBytes(this.footer?.signature, SIGNATURE_SIZE);\n bytes.set(signature, 8 + BLOCK_HASH_SIZE);\n\n return bytes;\n }\n\n private static parseHeader(bytes: Uint8Array): { header: BlockHeader; blockTimeNs: bigint } {\n if (bytes.length !== BLOCK_HEADER_SIZE) {\n throw new Error(`Invalid block header size: ${bytes.length}`);\n }\n\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n let offset = 0;\n\n const signature = bytes.slice(offset, offset + SIGNATURE_SIZE);\n offset += SIGNATURE_SIZE;\n\n const version = view.getUint8(offset);\n offset += 1;\n\n offset += 5; // padding (5 bytes)\n\n const chainId = view.getUint16(offset, true);\n offset += 2;\n\n const producer = bytes.slice(offset, offset + PUBKEY_SIZE);\n offset += PUBKEY_SIZE;\n\n const bondAmountLockUp = view.getBigUint64(offset, true);\n offset += 8;\n\n const expiryTimestampNs = view.getBigUint64(offset, true);\n offset += 8;\n\n const startSlot = view.getBigUint64(offset, true);\n offset += 8;\n\n const expiryAfter = view.getUint32(offset, true);\n offset += 4;\n\n const maxBlockSize = view.getUint32(offset, true);\n offset += 4;\n\n const maxComputeUnits = view.getBigUint64(offset, true);\n offset += 8;\n\n const maxStateUnits = view.getUint32(offset, true);\n offset += 4;\n\n offset += 4; // reserved\n\n const weightSlot = view.getBigUint64(offset, true);\n offset += 8;\n\n const blockTimeNs = view.getBigUint64(offset, true);\n\n const header = new BlockHeader({\n slot: startSlot,\n version,\n headerSignature: signature,\n producer,\n expiryTimestamp: nanosecondsToTimestamp(expiryTimestampNs),\n startSlot,\n expiryAfter,\n maxBlockSize,\n maxComputeUnits,\n maxStateUnits,\n bondAmountLockUp,\n weightSlot,\n chainId,\n });\n\n return { header, blockTimeNs };\n }\n\n /**\n * Parses a block header with a specific expected size.\n * Handles both current (168 bytes with weight_slot) and legacy (160 bytes without weight_slot) formats.\n */\n private static parseHeaderWithSize(\n bytes: Uint8Array,\n expectedSize: number,\n ): { header: BlockHeader; blockTimeNs: bigint } {\n if (bytes.length !== expectedSize) {\n throw new Error(`Invalid block header size: ${bytes.length}, expected ${expectedSize}`);\n }\n\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n let offset = 0;\n\n const signature = bytes.slice(offset, offset + SIGNATURE_SIZE);\n offset += SIGNATURE_SIZE;\n\n const version = view.getUint8(offset);\n offset += 1;\n\n offset += 5; // padding\n\n const chainId = view.getUint16(offset, true);\n offset += 2;\n\n const producer = bytes.slice(offset, offset + PUBKEY_SIZE);\n offset += PUBKEY_SIZE;\n\n const bondAmountLockUp = view.getBigUint64(offset, true);\n offset += 8;\n\n const expiryTimestampNs = view.getBigUint64(offset, true);\n offset += 8;\n\n const startSlot = view.getBigUint64(offset, true);\n offset += 8;\n\n const expiryAfter = view.getUint32(offset, true);\n offset += 4;\n\n const maxBlockSize = view.getUint32(offset, true);\n offset += 4;\n\n const maxComputeUnits = view.getBigUint64(offset, true);\n offset += 8;\n\n const maxStateUnits = view.getUint32(offset, true);\n offset += 4;\n\n offset += 4; // reserved\n\n // Layout differs between current and legacy formats:\n // Current (168 bytes): ... reserved(4) | weightSlot(8) | blockTimeNs(8)\n // Legacy (160 bytes): ... reserved(4) | blockTimeNs(8)\n let weightSlot: bigint | undefined;\n let blockTimeNs: bigint;\n if (expectedSize === BLOCK_HEADER_SIZE) {\n weightSlot = view.getBigUint64(offset, true);\n offset += 8;\n blockTimeNs = view.getBigUint64(offset, true);\n } else {\n blockTimeNs = view.getBigUint64(offset, true);\n }\n\n const header = new BlockHeader({\n slot: startSlot,\n version,\n headerSignature: signature,\n producer,\n expiryTimestamp: nanosecondsToTimestamp(expiryTimestampNs),\n startSlot,\n expiryAfter,\n maxBlockSize,\n maxComputeUnits,\n maxStateUnits,\n bondAmountLockUp,\n weightSlot,\n chainId,\n });\n\n return { header, blockTimeNs };\n }\n\n private static parseFooter(bytes: Uint8Array): {\n footer: BlockFooter;\n blockHash: Uint8Array;\n attestorPayment: bigint;\n } {\n if (bytes.length !== BLOCK_FOOTER_SIZE) {\n throw new Error(`Invalid block footer size: ${bytes.length}`);\n }\n\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n let offset = 0;\n\n const attestorPayment = view.getBigUint64(offset, true);\n offset += 8;\n\n const blockHash = bytes.slice(offset, offset + BLOCK_HASH_SIZE);\n offset += BLOCK_HASH_SIZE;\n\n const signature = bytes.slice(offset, offset + SIGNATURE_SIZE);\n\n const footer = new BlockFooter({\n signature,\n status: ExecutionStatus.UNSPECIFIED,\n consumedComputeUnits: 0n,\n consumedStateUnits: 0,\n attestorPayment,\n });\n\n return { footer, blockHash, attestorPayment };\n }\n\n private static parseTransactionsFromBody(body: Uint8Array): Transaction[] {\n const transactions: Transaction[] = [];\n let offset = 0;\n\n while (offset < body.length) {\n const slice = body.subarray(offset);\n // Stop parsing if remaining bytes are too short for a transaction\n // Wire format: header (112 bytes) + body + signature (64 bytes)\n // Minimum transaction size: 112 header + 64 signature = 176 bytes\n if (slice.length < 176) {\n // Remaining bytes are likely padding or the block signature\n break;\n }\n try {\n const { transaction, size } = Transaction.parseWire(slice);\n transactions.push(transaction);\n offset += size;\n } catch {\n // Stop parsing on error - remaining bytes may be padding\n break;\n }\n }\n\n return transactions;\n }\n}\n\nfunction normalizeBytes(bytes: Uint8Array | undefined, size: number): Uint8Array {\n if (!bytes || bytes.length !== size) {\n return new Uint8Array(size);\n }\n return bytes;\n}\n","import { create } from \"@bufbuild/protobuf\";\nimport { sha256 } from \"@noble/hashes/sha2\";\nimport {\n encodeAddress,\n ensureBytes,\n hexToBytes,\n isHexString,\n} from \"@thru/helpers\";\n\nimport { Pubkey, type PubkeyInput } from \"../domain/primitives\";\nimport { BlockHash, BlockHashSchema } from \"@thru/proto\";\n\nexport type BlockSelector =\n | { slot: number | bigint }\n | { blockHash: Uint8Array | string };\n\nexport function toBlockHash(value: Uint8Array | string): BlockHash {\n return create(BlockHashSchema, { value: ensureBytes(value, \"blockHash\") });\n}\n\nexport interface DeriveProgramAddressOptions {\n programAddress: PubkeyInput;\n seed: Uint8Array | string;\n ephemeral?: boolean;\n}\n\nexport interface DeriveProgramAddressResult {\n bytes: Uint8Array;\n address: string;\n}\n\nexport function deriveProgramAddress(\n options: DeriveProgramAddressOptions\n): DeriveProgramAddressResult {\n const programAddress = Pubkey.from(options.programAddress).toBytes();\n const seed = normalizeSeed(options.seed);\n const ephemeral = options.ephemeral === true;\n\n const derivationInput = new Uint8Array(\n programAddress.length + 1 + seed.length\n );\n derivationInput.set(programAddress, 0);\n derivationInput[programAddress.length] = ephemeral ? 1 : 0;\n derivationInput.set(seed, programAddress.length + 1);\n\n const hash = sha256(derivationInput);\n const derivedBytes = new Uint8Array(hash.slice(0, 32));\n\n return {\n bytes: derivedBytes,\n address: encodeAddress(derivedBytes),\n };\n}\n\nexport type DeriveAddressInput = PubkeyInput | Uint8Array;\n\nexport interface DeriveAddressResult {\n bytes: Uint8Array;\n address: string;\n}\n\n/**\n * Derive an address by hashing an array of inputs.\n * Inputs can be pubkeys (as string, Uint8Array, or Pubkey) or raw Uint8Array data.\n *\n * @example\n * // Token account: SHA256(owner || mint || seed)\n * deriveAddress([ownerPubkey, mintPubkey, seed])\n *\n * // Mint account: SHA256(creator || seed)\n * deriveAddress([creatorPubkey, seed])\n */\nexport function deriveAddress(\n inputs: DeriveAddressInput[]\n): DeriveAddressResult {\n if (inputs.length === 0) {\n throw new Error(\"At least one input is required\");\n }\n\n const normalizedInputs = inputs.map((input) => normalizeToBytes(input));\n const totalLength = normalizedInputs.reduce(\n (sum, arr) => sum + arr.length,\n 0\n );\n\n const derivationInput = new Uint8Array(totalLength);\n let offset = 0;\n for (const input of normalizedInputs) {\n derivationInput.set(input, offset);\n offset += input.length;\n }\n\n const hash = sha256(derivationInput);\n const derivedBytes = new Uint8Array(hash.slice(0, 32));\n\n return {\n bytes: derivedBytes,\n address: encodeAddress(derivedBytes),\n };\n}\n\nfunction normalizeToBytes(input: DeriveAddressInput): Uint8Array {\n if (input instanceof Uint8Array) {\n return input;\n }\n return Pubkey.from(input).toBytes();\n}\n\nfunction normalizeSeed(value: Uint8Array | string): Uint8Array {\n if (value instanceof Uint8Array) {\n if (value.length === 0) {\n throw new Error(\"Seed cannot be empty\");\n }\n if (value.length > 32) {\n throw new Error(\"Seed cannot exceed 32 bytes\");\n }\n const seed = new Uint8Array(32);\n seed.set(value);\n return seed;\n }\n if (typeof value === \"string\") {\n if (value.length === 0) {\n throw new Error(\"Seed cannot be empty\");\n }\n if (isHexString(value)) {\n const bytes = hexToBytes(value);\n if (bytes.length !== 32) {\n throw new Error(\n `Hex seed must decode to 32 bytes, got ${bytes.length}`\n );\n }\n return bytes;\n }\n const encoder = new TextEncoder();\n const utf8 = encoder.encode(value);\n if (utf8.length > 32) {\n throw new Error(`UTF-8 seed too long: ${utf8.length} bytes (max 32)`);\n }\n const seed = new Uint8Array(32);\n seed.set(utf8);\n return seed;\n }\n throw new Error(\"Seed must be provided as Uint8Array or string\");\n}\n","import { create } from \"@bufbuild/protobuf\";\n\nimport type { ThruClientContext } from \"../core/client\";\nimport { withCallOptions } from \"../core/client\";\nimport { DEFAULT_BLOCK_VIEW, DEFAULT_MIN_CONSENSUS } from \"../defaults\";\nimport { Block } from \"../domain/blocks\";\nimport { Filter } from \"../domain/filters\";\nimport { PageRequest, PageResponse } from \"../domain/pagination\";\nimport {\n ConsensusStatus,\n BlockView,\n RawBlock,\n GetBlockRequestSchema,\n GetRawBlockRequestSchema,\n ListBlocksRequestSchema,\n ListBlocksResponse as ProtoListBlocksResponse,\n} from \"@thru/proto\";\nimport { isSlotSelector } from \"../utils/utils\";\nimport { BLOCK_HEADER_SIZE } from \"../wire-format\";\nimport type { BlockSelector } from \"./helpers\";\nimport { toBlockHash } from \"./helpers\";\n\nexport interface BlockQueryOptions {\n view?: BlockView;\n minConsensus?: ConsensusStatus;\n}\n\nexport interface RawBlockQueryOptions {\n minConsensus?: ConsensusStatus;\n}\n\nexport interface ListBlocksOptions {\n filter?: Filter;\n page?: PageRequest;\n view?: BlockView;\n minConsensus?: ConsensusStatus;\n}\n\nexport interface BlockList {\n blocks: Block[];\n page?: PageResponse;\n}\n\nexport async function getBlock(\n ctx: ThruClientContext,\n selector: BlockSelector,\n options: BlockQueryOptions = {},\n): Promise<Block> {\n // Get proto block\n const request = create(GetBlockRequestSchema, {\n selector: isSlotSelector(selector)\n ? { case: \"slot\", value: typeof selector.slot === \"bigint\" ? selector.slot : BigInt(selector.slot) }\n : { case: \"blockHash\", value: toBlockHash(selector.blockHash) },\n view: options.view ?? DEFAULT_BLOCK_VIEW,\n minConsensus: options.minConsensus ?? DEFAULT_MIN_CONSENSUS,\n });\n const proto = await ctx.query.getBlock(request, withCallOptions(ctx));\n const protoBlock = Block.fromProto(proto);\n\n // Try to enrich with raw block metadata (block time, attestor payment) when available.\n try {\n const rawBlock = await getRawBlock(ctx, selector);\n const rawBytes = rawBlock?.rawBlock;\n if (rawBytes && rawBytes.length >= BLOCK_HEADER_SIZE) {\n const rawBlockParsed = Block.fromWire(rawBytes);\n if (rawBlockParsed.blockTimeNs !== undefined) {\n protoBlock.blockTimeNs = rawBlockParsed.blockTimeNs;\n }\n if (rawBlockParsed.attestorPayment !== undefined) {\n protoBlock.attestorPayment = rawBlockParsed.attestorPayment;\n }\n }\n } catch (error) {\n console.debug(\"blocks.getBlock: failed to enrich with raw block\", error); \n }\n\n return protoBlock;\n}\n\nexport function getRawBlock(\n ctx: ThruClientContext,\n selector: BlockSelector,\n options: RawBlockQueryOptions = {},\n): Promise<RawBlock> {\n const request = create(GetRawBlockRequestSchema, {\n selector: isSlotSelector(selector)\n ? { case: \"slot\", value: typeof selector.slot === \"bigint\" ? selector.slot : BigInt(selector.slot) }\n : { case: \"blockHash\", value: toBlockHash(selector.blockHash) },\n minConsensus: options.minConsensus ?? DEFAULT_MIN_CONSENSUS,\n });\n return ctx.query.getRawBlock(request, withCallOptions(ctx));\n}\n\nexport async function listBlocks(\n ctx: ThruClientContext,\n options: ListBlocksOptions = {},\n): Promise<BlockList> {\n const request = create(ListBlocksRequestSchema, {\n filter: options.filter?.toProto(),\n page: options.page?.toProto(),\n view: options.view ?? DEFAULT_BLOCK_VIEW,\n minConsensus: options.minConsensus ?? DEFAULT_MIN_CONSENSUS,\n });\n const response: ProtoListBlocksResponse = await ctx.query.listBlocks(request, withCallOptions(ctx));\n return {\n blocks: response.blocks.map((proto) => Block.fromProto(proto)),\n page: PageResponse.fromProto(response.page),\n };\n}\n","import { create } from \"@bufbuild/protobuf\";\n\nimport type { ThruClientContext } from \"../core/client\";\nimport { withCallOptions } from \"../core/client\";\nimport { GetChainInfoRequestSchema, type GetChainInfoResponse } from \"@thru/proto\";\n\nexport async function getChainInfo(ctx: ThruClientContext): Promise<GetChainInfoResponse> {\n const request = create(GetChainInfoRequestSchema);\n return ctx.query.getChainInfo(request, withCallOptions(ctx));\n}\n\nexport async function getChainId(ctx: ThruClientContext): Promise<number> {\n const response = await getChainInfo(ctx);\n return response.chainId;\n}\n","import { create } from \"@bufbuild/protobuf\";\nimport type { Timestamp } from \"@bufbuild/protobuf/wkt\";\n\nimport {\n CurrentOrHistoricalVersionSchema,\n CurrentVersionSchema,\n VersionContext,\n VersionContextSchema,\n} from \"@thru/proto\";\nimport { consensusStatusToString } from \"../utils/utils\";\n\nexport type VersionContextInput =\n | VersionContext\n | { current: true }\n | { currentOrHistorical: true }\n | { slot: number | bigint }\n | { timestamp: Date | number | Timestamp }\n | { seq: number | bigint };\n\nexport { consensusStatusToString };\n\nexport function currentVersionContext(): VersionContext {\n return create(VersionContextSchema, {\n version: { case: \"current\", value: create(CurrentVersionSchema) },\n });\n}\n\nexport function currentOrHistoricalVersionContext(): VersionContext {\n return create(VersionContextSchema, {\n version: { case: \"currentOrHistorical\", value: create(CurrentOrHistoricalVersionSchema) },\n });\n}\n\nexport function slotVersionContext(slot: number | bigint): VersionContext {\n return create(VersionContextSchema, {\n version: { case: \"slot\", value: toUint64(slot, \"slot\") },\n });\n}\n\nexport function timestampVersionContext(value: Date | number | Timestamp): VersionContext {\n return create(VersionContextSchema, {\n version: { case: \"timestamp\", value: normalizeTimestamp(value) },\n });\n}\n\nexport function seqVersionContext(seq: number | bigint): VersionContext {\n return create(VersionContextSchema, {\n version: { case: \"seq\", value: toUint64(seq, \"seq\") },\n });\n}\n\nexport function versionContext(input?: VersionContextInput): VersionContext {\n if (!input) {\n return currentVersionContext();\n }\n if (\"version\" in input) {\n return input;\n }\n if (\"current\" in input) {\n return currentVersionContext();\n }\n if (\"currentOrHistorical\" in input) {\n return currentOrHistoricalVersionContext();\n }\n if (\"slot\" in input) {\n return slotVersionContext(input.slot);\n }\n if (\"timestamp\" in input) {\n return timestampVersionContext(input.timestamp);\n }\n if (\"seq\" in input) {\n return seqVersionContext(input.seq);\n }\n throw new Error(\"Version context input must specify current, slot, timestamp, or seq\");\n}\n\nfunction toUint64(value: number | bigint, field: string): bigint {\n if (typeof value === \"bigint\") {\n if (value < 0n) {\n throw new Error(`${field} must be non-negative`);\n }\n return value;\n }\n if (!Number.isFinite(value) || !Number.isInteger(value) || value < 0) {\n throw new Error(`${field} must be a non-negative integer`);\n }\n return BigInt(value);\n}\n\nfunction normalizeTimestamp(value: Date | number | Timestamp): Timestamp {\n if (value instanceof Date) {\n const ms = value.getTime();\n return {\n seconds: BigInt(Math.floor(ms / 1000)),\n nanos: (ms % 1000) * 1_000_000,\n } as Timestamp;\n }\n if (typeof value === \"number\") {\n if (!Number.isFinite(value)) {\n throw new Error(\"timestamp must be a finite number\");\n }\n const ms = Math.trunc(value);\n return {\n seconds: BigInt(Math.floor(ms / 1000)),\n nanos: (ms % 1000) * 1_000_000,\n } as Timestamp;\n }\n if (typeof value === \"object\" && value !== null) {\n return value;\n }\n throw new Error(\"timestamp must be a Date, number, or protobuf Timestamp\");\n}\n\n","import type { Event as QueryEvent } from \"@thru/proto\";\nimport type { StreamEventsResponse } from \"@thru/proto\";\nimport { timestampToNanoseconds } from \"../../utils/utils\";\n\nexport interface ChainEventParams {\n id: string;\n transactionSignature?: Uint8Array;\n program?: Uint8Array;\n payload?: Uint8Array;\n slot?: bigint;\n callIndex?: number;\n programIndex?: number;\n payloadSize?: number;\n timestampNs?: bigint;\n}\n\nexport class ChainEvent {\n readonly id: string;\n readonly transactionSignature?: Uint8Array;\n readonly program?: Uint8Array;\n readonly payload?: Uint8Array;\n readonly slot?: bigint;\n readonly callIndex?: number;\n readonly programIndex?: number;\n readonly payloadSize?: number;\n readonly timestampNs?: bigint;\n\n constructor(params: ChainEventParams) {\n if (!params.id) {\n throw new Error(\"ChainEvent id is required\");\n }\n this.id = params.id;\n this.transactionSignature = copyBytes(params.transactionSignature);\n this.program = copyBytes(params.program);\n this.payload = copyBytes(params.payload);\n this.slot = params.slot;\n this.callIndex = params.callIndex;\n this.programIndex = params.programIndex;\n this.payloadSize = params.payloadSize;\n this.timestampNs = params.timestampNs;\n }\n\n static fromQuery(proto: QueryEvent): ChainEvent {\n return new ChainEvent({\n id: proto.eventId,\n transactionSignature: proto.transactionSignature?.value,\n program: proto.program?.value,\n payload: proto.payload,\n slot: proto.slot,\n callIndex: proto.callIdx,\n programIndex: proto.programIdx,\n payloadSize: proto.payloadSize,\n });\n }\n\n static fromStream(proto: StreamEventsResponse): ChainEvent {\n const id = normalizeStreamEventId(proto.eventId);\n return new ChainEvent({\n id,\n transactionSignature: proto.signature?.value,\n program: proto.program?.value,\n payload: proto.payload,\n slot: proto.slot,\n callIndex: proto.callIdx,\n timestampNs: timestampToNanoseconds(proto.timestamp),\n });\n }\n}\n\nfunction copyBytes(input?: Uint8Array): Uint8Array | undefined {\n if (!input) {\n return undefined;\n }\n const copy = new Uint8Array(input.length);\n copy.set(input);\n return copy;\n}\n\nfunction normalizeStreamEventId(id: string): string {\n const parts = id.split(\":\" );\n if (parts.length >= 4) {\n return parts.slice(0, 4).join(\":\" );\n }\n return id;\n}\n","import { create } from \"@bufbuild/protobuf\";\n\nimport type { ThruClientContext } from \"../core/client\";\nimport { withCallOptions } from \"../core/client\";\nimport { DEFAULT_MIN_CONSENSUS, DEFAULT_VERSION_CONTEXT } from \"../defaults\";\nimport { ChainEvent } from \"../domain/events\";\nimport { Filter } from \"../domain/filters\";\nimport { PageRequest, PageResponse } from \"../domain/pagination\";\nimport {\n type ConsensusStatus,\n type VersionContext,\n GetEventRequestSchema,\n ListEventsRequestSchema,\n type ListEventsResponse as ProtoListEventsResponse,\n Event as QueryEvent,\n} from \"@thru/proto\";\n\nexport interface GetEventOptions {\n versionContext?: VersionContext;\n}\n\nexport interface ListEventsOptions {\n filter?: Filter;\n page?: PageRequest;\n versionContext?: VersionContext;\n minConsensus?: ConsensusStatus;\n}\n\nexport interface EventList {\n events: ChainEvent[];\n page?: PageResponse;\n}\n\nexport function getEvent(ctx: ThruClientContext, eventId: string, options: GetEventOptions = {}): Promise<ChainEvent> {\n if (!eventId) {\n throw new Error(\"eventId is required\");\n }\n const request = create(GetEventRequestSchema, {\n eventId,\n versionContext: options.versionContext ?? DEFAULT_VERSION_CONTEXT,\n });\n return ctx.query.getEvent(request, withCallOptions(ctx)).then((proto: QueryEvent) => ChainEvent.fromQuery(proto));\n}\n\nexport function listEvents(\n ctx: ThruClientContext,\n options: ListEventsOptions = {},\n): Promise<EventList> {\n const request = create(ListEventsRequestSchema, {\n filter: options.filter?.toProto(),\n page: options.page?.toProto(),\n versionContext: options.versionContext ?? DEFAULT_VERSION_CONTEXT,\n minConsensus: options.minConsensus ?? DEFAULT_MIN_CONSENSUS,\n });\n return ctx.query.listEvents(request, withCallOptions(ctx)).then((response: ProtoListEventsResponse) => ({\n events: response.events.map((proto) => ChainEvent.fromQuery(proto)),\n page: PageResponse.fromProto(response.page),\n }));\n}\n","export interface HeightSnapshotParams {\n finalized: bigint;\n locallyExecuted: bigint;\n clusterExecuted: bigint;\n}\n\nexport class HeightSnapshot {\n readonly finalized: bigint;\n readonly locallyExecuted: bigint;\n readonly clusterExecuted: bigint;\n\n constructor(params: HeightSnapshotParams) {\n this.finalized = params.finalized;\n this.locallyExecuted = params.locallyExecuted;\n this.clusterExecuted = params.clusterExecuted;\n }\n\n static fromProto(proto: { finalized: bigint; locallyExecuted: bigint; clusterExecuted: bigint }): HeightSnapshot {\n return new HeightSnapshot({\n finalized: proto.finalized ?? 0n,\n locallyExecuted: proto.locallyExecuted ?? 0n,\n clusterExecuted: proto.clusterExecuted ?? 0n,\n });\n }\n\n delta(other: HeightSnapshot): { finalized: bigint; locallyExecuted: bigint; clusterExecuted: bigint } {\n return {\n finalized: this.finalized - other.finalized,\n locallyExecuted: this.locallyExecuted - other.locallyExecuted,\n clusterExecuted: this.clusterExecuted - other.clusterExecuted,\n };\n }\n}\n\n","import { create } from \"@bufbuild/protobuf\";\n\nimport type { ThruClientContext } from \"../core/client\";\nimport { withCallOptions } from \"../core/client\";\nimport { HeightSnapshot } from \"../domain/height\";\nimport { GetHeightRequestSchema, GetHeightResponse } from \"@thru/proto\";\n\nexport function getBlockHeight(ctx: ThruClientContext): Promise<HeightSnapshot> {\n const request = create(GetHeightRequestSchema);\n return ctx.query.getHeight(request, withCallOptions(ctx)).then((proto: GetHeightResponse) => HeightSnapshot.fromProto(proto));\n}\n","import { getPublicKeyAsync } from \"@noble/ed25519\";\nimport { getWebCrypto, ThruHDWallet } from \"@thru/crypto\";\n\nexport interface GeneratedKeyPair {\n address: string;\n publicKey: Uint8Array;\n privateKey: Uint8Array;\n}\n\n/**\n * Generates a new Ed25519 keypair using the same HD wallet pipeline as the Thru wallet.\n */\nexport async function generateKeyPair(): Promise<GeneratedKeyPair> {\n const seed = generateSeed();\n const account = await ThruHDWallet.getAccount(seed, 0);\n seed.fill(0);\n\n return {\n address: account.address,\n publicKey: account.publicKey,\n privateKey: account.privateKey,\n };\n}\n\nexport async function fromPrivateKey(privateKey: Uint8Array): Promise<Uint8Array> {\n return new Uint8Array(await getPublicKeyAsync(privateKey));\n}\n\nfunction generateSeed(): Uint8Array {\n const cryptoObj = getWebCrypto();\n const bytes = new Uint8Array(64);\n cryptoObj.getRandomValues(bytes);\n return bytes;\n}\n","import { create } from \"@bufbuild/protobuf\";\n\nimport type { ThruClientContext } from \"../core/client\";\nimport { withCallOptions } from \"../core/client\";\nimport {\n GetNodePubkeyRequestSchema,\n type GetNodePubkeyResponse,\n GetNodeRecordsRequestSchema,\n type GetNodeRecordsResponse,\n} from \"@thru/proto\";\n\nexport async function getNodePubkey(\n ctx: ThruClientContext,\n): Promise<GetNodePubkeyResponse> {\n const request = create(GetNodePubkeyRequestSchema, {});\n return ctx.query.getNodePubkey(request, withCallOptions(ctx));\n}\n\nexport async function getNodeRecords(\n ctx: ThruClientContext,\n): Promise<GetNodeRecordsResponse> {\n const request = create(GetNodeRecordsRequestSchema, {});\n return ctx.query.getNodeRecords(request, withCallOptions(ctx));\n}\n","import { create } from \"@bufbuild/protobuf\";\n\nimport type { ThruClientContext } from \"../core/client\";\nimport { withCallOptions } from \"../core/client\";\nimport {\n GetSlotMetricsRequestSchema,\n type GetSlotMetricsResponse,\n ListSlotMetricsRequestSchema,\n type ListSlotMetricsResponse,\n} from \"@thru/proto\";\n\nexport interface ListSlotMetricsOptions {\n startSlot: bigint;\n endSlot?: bigint;\n limit?: number;\n}\n\nexport async function getSlotMetrics(\n ctx: ThruClientContext,\n slot: bigint,\n): Promise<GetSlotMetricsResponse> {\n const request = create(GetSlotMetricsRequestSchema, { slot });\n return ctx.query.getSlotMetrics(request, withCallOptions(ctx));\n}\n\nexport async function listSlotMetrics(\n ctx: ThruClientContext,\n options: ListSlotMetricsOptions,\n): Promise<ListSlotMetricsResponse> {\n const request = create(ListSlotMetricsRequestSchema, {\n startSlot: options.startSlot,\n endSlot: options.endSlot,\n limit: options.limit,\n });\n return ctx.query.listSlotMetrics(request, withCallOptions(ctx));\n}\n","import { create } from \"@bufbuild/protobuf\";\n\nimport {\n FilterParamValueSchema,\n FilterSchema,\n Filter as ProtoFilter,\n FilterParamValue as ProtoFilterParamValue,\n} from \"@thru/proto\";\n\nimport { Pubkey, Signature, type PubkeyInput, type SignatureInput } from \"../primitives\";\n\nexport type FilterParamValueCase =\n | \"stringValue\"\n | \"bytesValue\"\n | \"boolValue\"\n | \"intValue\"\n | \"doubleValue\"\n | \"uintValue\"\n | \"pubkeyValue\"\n | \"signatureValue\"\n | \"taPubkeyValue\"\n | \"tsSignatureValue\";\n\nfunction copyBytes(source: Uint8Array): Uint8Array {\n const bytes = new Uint8Array(source.length);\n bytes.set(source);\n return bytes;\n}\n\nfunction toUint(value: number | bigint): bigint {\n if (typeof value === \"bigint\") {\n if (value < 0n) {\n throw new Error(\"FilterParamValue.uint requires a non-negative value\");\n }\n return value;\n }\n if (!Number.isFinite(value) || !Number.isInteger(value) || value < 0) {\n throw new Error(\"FilterParamValue.uint requires a non-negative integer\");\n }\n return BigInt(value);\n}\n\nexport class FilterParamValue {\n private readonly case?: FilterParamValueCase;\n private readonly value?: string | Uint8Array | boolean | bigint | number;\n\n private constructor(params: {\n case?: FilterParamValueCase;\n value?: string | Uint8Array | boolean | bigint | number;\n }) {\n this.case = params.case;\n\n if (!params.case) {\n this.value = undefined;\n return;\n }\n\n switch (params.case) {\n case \"stringValue\":\n if (typeof params.value !== \"string\") {\n throw new Error(\"FilterParamValue.string requires a string value\");\n }\n this.value = params.value;\n return;\n case \"bytesValue\":\n if (!(params.value instanceof Uint8Array)) {\n throw new Error(\"FilterParamValue.bytes requires a Uint8Array value\");\n }\n this.value = copyBytes(params.value);\n return;\n case \"boolValue\":\n if (typeof params.value !== \"boolean\") {\n throw new Error(\"FilterParamValue.bool requires a boolean value\");\n }\n this.value = params.value;\n return;\n case \"intValue\":\n if (typeof params.value !== \"bigint\") {\n throw new Error(\"FilterParamValue.int requires a bigint value\");\n }\n this.value = params.value;\n return;\n case \"doubleValue\":\n if (typeof params.value !== \"number\") {\n throw new Error(\"FilterParamValue.double requires a number value\");\n }\n this.value = params.value;\n return;\n case \"uintValue\":\n if (typeof params.value !== \"bigint\") {\n throw new Error(\"FilterParamValue.uint requires a bigint value\");\n }\n this.value = params.value;\n return;\n case \"pubkeyValue\":\n if (!(params.value instanceof Uint8Array)) {\n throw new Error(\"FilterParamValue.pubkey requires a Uint8Array value\");\n }\n this.value = copyBytes(params.value);\n return;\n case \"signatureValue\":\n if (!(params.value instanceof Uint8Array)) {\n throw new Error(\"FilterParamValue.signature requires a Uint8Array value\");\n }\n this.value = copyBytes(params.value);\n return;\n case \"taPubkeyValue\":\n if (typeof params.value !== \"string\") {\n throw new Error(\"FilterParamValue.taPubkey requires a string value\");\n }\n this.value = params.value;\n return;\n case \"tsSignatureValue\":\n if (typeof params.value !== \"string\") {\n throw new Error(\"FilterParamValue.tsSignature requires a string value\");\n }\n this.value = params.value;\n return;\n default:\n this.value = undefined;\n }\n }\n\n static none(): FilterParamValue {\n return new FilterParamValue({});\n }\n\n static string(value: string): FilterParamValue {\n return new FilterParamValue({ case: \"stringValue\", value });\n }\n\n static bytes(value: Uint8Array): FilterParamValue {\n return new FilterParamValue({ case: \"bytesValue\", value });\n }\n\n static bool(value: boolean): FilterParamValue {\n return new FilterParamValue({ case: \"boolValue\", value });\n }\n\n static int(value: bigint): FilterParamValue {\n return new FilterParamValue({ case: \"intValue\", value });\n }\n\n static double(value: number): FilterParamValue {\n if (!Number.isFinite(value)) {\n throw new Error(\"FilterParamValue.double requires a finite number\");\n }\n return new FilterParamValue({ case: \"doubleValue\", value });\n }\n\n static uint(value: number | bigint): FilterParamValue {\n return new FilterParamValue({ case: \"uintValue\", value: toUint(value) });\n }\n\n static pubkey(value: PubkeyInput): FilterParamValue {\n return new FilterParamValue({\n case: \"pubkeyValue\",\n value: Pubkey.from(value).toBytes(),\n });\n }\n\n static signature(value: SignatureInput): FilterParamValue {\n return new FilterParamValue({\n case: \"signatureValue\",\n value: Signature.from(value).toBytes(),\n });\n }\n\n static taPubkey(value: PubkeyInput | string): FilterParamValue {\n return new FilterParamValue({\n case: \"taPubkeyValue\",\n value: Pubkey.from(value).toThruFmt(),\n });\n }\n\n static tsSignature(value: SignatureInput): FilterParamValue {\n return new FilterParamValue({\n case: \"tsSignatureValue\",\n value: Signature.from(value).toThruFmt(),\n });\n }\n\n static fromProto(proto: ProtoFilterParamValue): FilterParamValue {\n const kind = proto.kind;\n if (!kind.case) {\n return FilterParamValue.none();\n }\n\n switch (kind.case) {\n case \"stringValue\":\n return FilterParamValue.string(kind.value);\n case \"bytesValue\":\n return FilterParamValue.bytes(kind.value);\n case \"boolValue\":\n return FilterParamValue.bool(kind.value);\n case \"intValue\":\n return FilterParamValue.int(kind.value);\n case \"doubleValue\":\n return FilterParamValue.double(kind.value);\n case \"uintValue\":\n return FilterParamValue.uint(kind.value);\n case \"pubkeyValue\":\n return FilterParamValue.pubkey(Pubkey.fromProtoPubkey(kind.value).toBytes());\n case \"signatureValue\":\n return FilterParamValue.signature(Signature.fromProtoSignature(kind.value).toBytes());\n case \"taPubkeyValue\":\n return FilterParamValue.taPubkey(Pubkey.fromProtoTaPubkey(kind.value).toThruFmt());\n case \"tsSignatureValue\":\n return FilterParamValue.tsSignature(Signature.fromProtoTsSignature(kind.value).toThruFmt());\n default:\n return FilterParamValue.none();\n }\n }\n\n toProto(): ProtoFilterParamValue {\n if (!this.case) {\n return create(FilterParamValueSchema);\n }\n\n switch (this.case) {\n case \"stringValue\":\n return create(FilterParamValueSchema, {\n kind: {\n case: \"stringValue\",\n value: this.value as string,\n },\n });\n case \"bytesValue\":\n return create(FilterParamValueSchema, {\n kind: {\n case: \"bytesValue\",\n value: copyBytes(this.value as Uint8Array),\n },\n });\n case \"boolValue\":\n return create(FilterParamValueSchema, {\n kind: {\n case: \"boolValue\",\n value: this.value as boolean,\n },\n });\n case \"intValue\":\n return create(FilterParamValueSchema, {\n kind: {\n case: \"intValue\",\n value: this.value as bigint,\n },\n });\n case \"doubleValue\":\n return create(FilterParamValueSchema, {\n kind: {\n case: \"doubleValue\",\n value: this.value as number,\n },\n });\n case \"uintValue\":\n return create(FilterParamValueSchema, {\n kind: {\n case: \"uintValue\",\n value: this.value as bigint,\n },\n });\n case \"pubkeyValue\":\n return create(FilterParamValueSchema, {\n kind: {\n case: \"pubkeyValue\",\n value: Pubkey.from(this.value as Uint8Array).toProtoPubkey(),\n },\n });\n case \"signatureValue\":\n return create(FilterParamValueSchema, {\n kind: {\n case: \"signatureValue\",\n value: Signature.from(this.value as Uint8Array).toProtoSignature(),\n },\n });\n case \"taPubkeyValue\":\n return create(FilterParamValueSchema, {\n kind: {\n case: \"taPubkeyValue\",\n value: Pubkey.from(this.value as string).toProtoTaPubkey(),\n },\n });\n case \"tsSignatureValue\":\n return create(FilterParamValueSchema, {\n kind: {\n case: \"tsSignatureValue\",\n value: Signature.from(this.value as string).toProtoTsSignature(),\n },\n });\n default:\n throw new Error(\"FilterParamValue has an unknown kind\");\n }\n }\n\n getCase(): FilterParamValueCase | undefined {\n return this.case;\n }\n\n getString(): string | undefined {\n return this.case === \"stringValue\" ? (this.value as string) : undefined;\n }\n\n getBytes(): Uint8Array | undefined {\n if (this.case !== \"bytesValue\" || !(this.value instanceof Uint8Array)) {\n return undefined;\n }\n return copyBytes(this.value);\n }\n\n getBool(): boolean | undefined {\n return this.case === \"boolValue\" ? (this.value as boolean) : undefined;\n }\n\n getInt(): bigint | undefined {\n return this.case === \"intValue\" ? (this.value as bigint) : undefined;\n }\n\n getUint(): bigint | undefined {\n return this.case === \"uintValue\" ? (this.value as bigint) : undefined;\n }\n\n getDouble(): number | undefined {\n return this.case === \"doubleValue\" ? (this.value as number) : undefined;\n }\n\n getPubkey(): Uint8Array | undefined {\n if (this.case !== \"pubkeyValue\") {\n return undefined;\n }\n return copyBytes(this.value as Uint8Array);\n }\n\n getSignature(): Uint8Array | undefined {\n if (this.case !== \"signatureValue\") {\n return undefined;\n }\n return copyBytes(this.value as Uint8Array);\n }\n\n getTaPubkey(): string | undefined {\n return this.case === \"taPubkeyValue\" ? (this.value as string) : undefined;\n }\n\n getTsSignature(): string | undefined {\n return this.case === \"tsSignatureValue\" ? (this.value as string) : undefined;\n }\n}\n\nexport interface FilterParamsInit {\n [key: string]: FilterParamValue;\n}\n\nexport class Filter {\n readonly expression?: string;\n private readonly params: Map<string, FilterParamValue>;\n\n constructor(init: { expression?: string; params?: FilterParamsInit | Map<string, FilterParamValue> | Iterable<[string, FilterParamValue]> } = {}) {\n this.expression = init.expression;\n this.params = new Map();\n\n if (!init.params) {\n return;\n }\n\n if (init.params instanceof Map) {\n for (const [key, value] of init.params.entries()) {\n this.setParamInternal(key, value);\n }\n return;\n }\n\n if (typeof (init.params as FilterParamsInit) === \"object\" && !Array.isArray(init.params)) {\n for (const [key, value] of Object.entries(init.params as FilterParamsInit)) {\n this.setParamInternal(key, value);\n }\n return;\n }\n\n for (const [key, value] of init.params as Iterable<[string, FilterParamValue]>) {\n this.setParamInternal(key, value);\n }\n }\n\n static fromProto(proto: ProtoFilter): Filter {\n const params = Object.entries(proto.params ?? {}).map(([key, value]) => [key, FilterParamValue.fromProto(value)] as [string, FilterParamValue]);\n return new Filter({\n expression: proto.expression,\n params,\n });\n }\n\n toProto(): ProtoFilter {\n const protoParams: { [key: string]: ProtoFilterParamValue } = {};\n for (const [key, value] of this.params.entries()) {\n protoParams[key] = value.toProto();\n }\n\n return create(FilterSchema, {\n expression: this.expression,\n params: protoParams,\n });\n }\n\n hasParam(name: string): boolean {\n return this.params.has(name);\n }\n\n getParam(name: string): FilterParamValue | undefined {\n const param = this.params.get(name);\n return param;\n }\n\n listParams(): string[] {\n return Array.from(this.params.keys());\n }\n\n entries(): [string, FilterParamValue][] {\n return Array.from(this.params.entries());\n }\n\n withExpression(expression?: string): Filter {\n return new Filter({ expression, params: this.params });\n }\n\n withParam(name: string, value: FilterParamValue): Filter {\n const params = new Map(this.params);\n params.set(name, value);\n return new Filter({ expression: this.expression, params });\n }\n\n withoutParam(name: string): Filter {\n if (!this.params.has(name)) {\n return this;\n }\n const params = new Map(this.params);\n params.delete(name);\n return new Filter({ expression: this.expression, params });\n }\n\n private setParamInternal(name: string, value: FilterParamValue): void {\n if (!(value instanceof FilterParamValue)) {\n throw new Error(`Filter parameter \"${name}\" must be a FilterParamValue`);\n }\n this.params.set(name, value);\n }\n}\n\n\n","import { create } from \"@bufbuild/protobuf\";\n\nimport type { ThruClientContext } from \"../core/client\";\nimport { withCallOptions } from \"../core/client\";\nimport { DEFAULT_ACCOUNT_VIEW, DEFAULT_BLOCK_VIEW, DEFAULT_MIN_CONSENSUS } from \"../defaults\";\nimport { toStreamAccountUpdate, type StreamAccountUpdate } from \"../domain/accounts\";\nimport { Block } from \"../domain/blocks\";\nimport { ChainEvent } from \"../domain/events\";\nimport { Filter, FilterParamValue } from \"../domain/filters\";\nimport { HeightSnapshot } from \"../domain/height\";\nimport { Pubkey, Signature, type PubkeyInput, type SignatureInput } from \"../domain/primitives\";\nimport type { StreamTransactionUpdate, TrackTransactionUpdate } from \"../domain/transactions\";\nimport { toStreamTransactionUpdate, toTrackTransactionUpdate } from \"../domain/transactions\";\nimport {\n ConsensusStatus,\n type AccountView,\n type BlockView,\n type NodeRecord,\n StreamAccountUpdatesRequestSchema,\n StreamBlocksRequestSchema,\n StreamEventsRequestSchema,\n StreamHeightRequestSchema,\n StreamNodeRecordsRequestSchema,\n StreamSlotMetricsRequestSchema,\n StreamTransactionsRequestSchema,\n TrackTransactionRequestSchema,\n} from \"@thru/proto\";\nimport type { Timestamp } from \"@bufbuild/protobuf/wkt\";\n\nexport type { StreamTransactionUpdate, TrackTransactionUpdate } from \"../domain/transactions\";\n\nexport interface TrackTransactionOptions {\n timeoutMs?: number;\n signal?: AbortSignal;\n}\n\nexport interface StreamBlocksOptions {\n startSlot?: bigint;\n filter?: Filter;\n view?: BlockView;\n minConsensus?: ConsensusStatus;\n signal?: AbortSignal;\n}\n\nexport interface StreamBlocksResult {\n block: Block;\n}\n\nexport function streamBlocks(\n ctx: ThruClientContext,\n options: StreamBlocksOptions = {},\n): AsyncIterable<StreamBlocksResult> {\n const request = create(StreamBlocksRequestSchema, {\n startSlot: options.startSlot,\n filter: options.filter?.toProto(),\n view: options.view ?? DEFAULT_BLOCK_VIEW,\n minConsensus: options.minConsensus ?? DEFAULT_MIN_CONSENSUS,\n });\n\n const iterable = ctx.streaming.streamBlocks(request, withCallOptions(ctx, { signal: options.signal }));\n\n async function* mapper() {\n for await (const response of iterable) {\n if (!response.block) {\n continue;\n }\n yield { block: Block.fromProto(response.block) };\n }\n }\n\n return mapper();\n}\n\nexport interface StreamAccountUpdatesOptions {\n view?: AccountView;\n filter?: Filter;\n signal?: AbortSignal;\n}\n\nexport interface StreamAccountUpdatesResult {\n update: StreamAccountUpdate;\n}\n\nexport function streamAccountUpdates(\n ctx: ThruClientContext,\n address: PubkeyInput,\n options: StreamAccountUpdatesOptions = {},\n): AsyncIterable<StreamAccountUpdatesResult> {\n // Build address filter - StreamAccountUpdatesRequest now uses filter-based approach\n const addressBytes = Pubkey.from(address).toBytes();\n const addressFilter = new Filter({\n expression: \"account_address.value == params.address\",\n params: {\n address: FilterParamValue.bytes(addressBytes),\n },\n });\n\n // Merge with user-provided filter if any\n let mergedFilter = addressFilter;\n if (options.filter) {\n // Combine expressions and params\n const combinedParams: { [key: string]: FilterParamValue } = {};\n for (const [key, value] of addressFilter.entries()) {\n combinedParams[key] = value;\n }\n for (const [key, value] of options.filter.entries()) {\n combinedParams[key] = value;\n }\n mergedFilter = new Filter({\n expression: `(${addressFilter.expression}) && (${options.filter.expression})`,\n params: combinedParams,\n });\n }\n\n const request = create(StreamAccountUpdatesRequestSchema, {\n view: options.view ?? DEFAULT_ACCOUNT_VIEW,\n filter: mergedFilter.toProto(),\n });\n\n const iterable = ctx.streaming.streamAccountUpdates(request, withCallOptions(ctx, { signal: options.signal }));\n\n async function* mapper() {\n for await (const response of iterable) {\n const update = toStreamAccountUpdate(response);\n if (!update) {\n continue;\n }\n yield { update };\n }\n }\n\n return mapper();\n}\n\nexport interface StreamTransactionsOptions {\n filter?: Filter;\n minConsensus?: ConsensusStatus;\n signal?: AbortSignal;\n}\n\nexport type StreamTransactionsResult = StreamTransactionUpdate;\n\nexport function streamTransactions(\n ctx: ThruClientContext,\n options: StreamTransactionsOptions = {},\n): AsyncIterable<StreamTransactionsResult> {\n const request = create(StreamTransactionsRequestSchema, {\n filter: options.filter?.toProto(),\n minConsensus: options.minConsensus ?? DEFAULT_MIN_CONSENSUS,\n });\n\n const iterable = ctx.streaming.streamTransactions(request, withCallOptions(ctx, { signal: options.signal }));\n\n async function* mapper(): AsyncGenerator<StreamTransactionsResult> {\n for await (const response of iterable) {\n if (!response.transaction) {\n continue;\n }\n try {\n yield toStreamTransactionUpdate(response.transaction);\n } catch (err) {\n console.error(\"streamTransactions: failed to decode transaction update\", err);\n }\n }\n }\n\n return mapper();\n}\n\nexport interface StreamEventsOptions {\n filter?: Filter;\n signal?: AbortSignal;\n}\n\nexport interface StreamEventsResult {\n event: ChainEvent;\n}\n\nexport function streamEvents(\n ctx: ThruClientContext,\n options: StreamEventsOptions = {},\n): AsyncIterable<StreamEventsResult> {\n const request = create(StreamEventsRequestSchema, {\n filter: options.filter?.toProto(),\n });\n\n const iterable = ctx.streaming.streamEvents(request, withCallOptions(ctx, { signal: options.signal }));\n\n async function* mapper() {\n for await (const response of iterable) {\n yield { event: ChainEvent.fromStream(response) };\n }\n }\n\n return mapper();\n}\n\nexport function trackTransaction(\n ctx: ThruClientContext,\n signature: SignatureInput,\n options: TrackTransactionOptions = {},\n): AsyncIterable<TrackTransactionUpdate> {\n const timeoutMs = options.timeoutMs;\n const request = create(TrackTransactionRequestSchema, {\n signature: Signature.from(signature).toProtoSignature(),\n timeout:\n timeoutMs != null\n ? {\n seconds: BigInt(Math.floor(timeoutMs / 1000)),\n nanos: (timeoutMs % 1000) * 1_000_000,\n }\n : undefined,\n });\n\n const iterable = ctx.streaming.trackTransaction(request, withCallOptions(ctx, { signal: options.signal }));\n\n async function* mapper() {\n for await (const response of iterable) {\n yield toTrackTransactionUpdate(response);\n }\n }\n\n return mapper();\n}\n\nexport interface StreamHeightOptions {\n signal?: AbortSignal;\n}\n\nexport interface StreamHeightResult {\n height: HeightSnapshot;\n}\n\nexport function streamHeight(\n ctx: ThruClientContext,\n options: StreamHeightOptions = {},\n): AsyncIterable<StreamHeightResult> {\n const request = create(StreamHeightRequestSchema, {});\n\n const iterable = ctx.streaming.streamHeight(request, withCallOptions(ctx, { signal: options.signal }));\n\n async function* mapper() {\n for await (const response of iterable) {\n yield { height: HeightSnapshot.fromProto(response) };\n }\n }\n\n return mapper();\n}\n\nexport interface StreamSlotMetricsOptions {\n startSlot?: bigint;\n signal?: AbortSignal;\n}\n\nexport interface StreamSlotMetricsResult {\n slot: bigint;\n collectedFees: bigint;\n globalActivatedStateCounter: bigint;\n globalDeactivatedStateCounter: bigint;\n blockTimestamp?: Timestamp;\n}\n\nexport function streamSlotMetrics(\n ctx: ThruClientContext,\n options: StreamSlotMetricsOptions = {},\n): AsyncIterable<StreamSlotMetricsResult> {\n const request = create(StreamSlotMetricsRequestSchema, {\n startSlot: options.startSlot,\n });\n\n const iterable = ctx.streaming.streamSlotMetrics(request, withCallOptions(ctx, { signal: options.signal }));\n\n async function* mapper() {\n for await (const response of iterable) {\n yield {\n slot: response.slot,\n collectedFees: response.collectedFees,\n globalActivatedStateCounter: response.globalActivatedStateCounter,\n globalDeactivatedStateCounter: response.globalDeactivatedStateCounter,\n blockTimestamp: response.blockTimestamp,\n };\n }\n }\n\n return mapper();\n}\n\nexport type StreamNodeRecordsResult =\n | { type: \"record\"; record: NodeRecord }\n | { type: \"finished\" };\n\nexport interface StreamNodeRecordsOptions {\n signal?: AbortSignal;\n}\n\nexport function streamNodeRecords(\n ctx: ThruClientContext,\n options: StreamNodeRecordsOptions = {},\n): AsyncIterable<StreamNodeRecordsResult> {\n const request = create(StreamNodeRecordsRequestSchema, {});\n\n const iterable = ctx.streaming.streamNodeRecords(request, withCallOptions(ctx, { signal: options.signal }));\n\n async function* mapper(): AsyncGenerator<StreamNodeRecordsResult> {\n for await (const response of iterable) {\n if (response.message.case === \"record\") {\n yield { type: \"record\", record: response.message.value };\n } else if (response.message.case === \"finished\") {\n yield { type: \"finished\" };\n }\n }\n }\n\n return mapper();\n}\n\nexport interface CollectStreamOptions {\n limit?: number;\n signal?: AbortSignal;\n}\n\nexport async function collectStream<T>(\n iterable: AsyncIterable<T>,\n options: CollectStreamOptions = {},\n): Promise<T[]> {\n const { limit, signal } = options;\n throwIfAborted(signal);\n if (limit != null && limit <= 0) {\n return [];\n }\n const results: T[] = [];\n let count = 0;\n for await (const value of iterable) {\n throwIfAborted(signal);\n results.push(value);\n count += 1;\n if (limit != null && count >= limit) {\n break;\n }\n }\n return results;\n}\n\nexport async function firstStreamValue<T>(\n iterable: AsyncIterable<T>,\n options: { signal?: AbortSignal } = {},\n): Promise<T | undefined> {\n const values = await collectStream(iterable, { ...options, limit: 1 });\n return values[0];\n}\n\nexport async function forEachStreamValue<T>(\n iterable: AsyncIterable<T>,\n handler: (value: T, index: number) => void | Promise<void>,\n options: { signal?: AbortSignal } = {},\n): Promise<void> {\n let index = 0;\n for await (const value of iterable) {\n throwIfAborted(options.signal);\n await handler(value, index++);\n }\n}\n\nfunction throwIfAborted(signal?: AbortSignal): void {\n if (!signal) {\n return;\n }\n if (signal.aborted) {\n const reason = signal.reason;\n if (reason instanceof Error) {\n throw reason;\n }\n if (reason !== undefined) {\n throw new Error(String(reason));\n }\n throw new DOMException(\"The operation was aborted.\", \"AbortError\");\n }\n}\n","import { create } from \"@bufbuild/protobuf\";\n\nimport type { ThruClientContext } from \"../core/client\";\nimport { withCallOptions } from \"../core/client\";\nimport {\n DEFAULT_COMPUTE_UNITS,\n DEFAULT_EXPIRY_AFTER,\n DEFAULT_FEE,\n DEFAULT_MEMORY_UNITS,\n DEFAULT_MIN_CONSENSUS,\n DEFAULT_STATE_UNITS,\n DEFAULT_TRANSACTION_VIEW,\n DEFAULT_VERSION_CONTEXT,\n} from \"../defaults\";\nimport { Filter } from \"../domain/filters\";\nimport { PageRequest, PageResponse } from \"../domain/pagination\";\nimport {\n type BuildTransactionParams,\n type InstructionContext,\n Transaction as LocalTransaction,\n type OptionalProofs,\n type SignedTransactionResult,\n Transaction,\n type TransactionAccountsInput,\n TransactionBuilder,\n type TransactionHeaderInput,\n TransactionStatusSnapshot\n} from \"../domain/transactions\";\nimport { normalizeAccountList, parseInstructionData } from \"../domain/transactions/utils\";\nimport {\n type ConsensusStatus,\n type VersionContext,\n AccountView,\n RawTransaction,\n TransactionView,\n BatchSendTransactionsRequestSchema,\n type BatchSendTransactionsResponse,\n SendAndTrackTxnRequestSchema,\n type SendAndTrackTxnResponse,\n type SubmissionStatus,\n SendTransactionRequestSchema,\n GetRawTransactionRequestSchema,\n GetTransactionRequestSchema,\n GetTransactionStatusRequestSchema,\n ListTransactionsForAccountRequestSchema,\n type ListTransactionsForAccountResponse as ProtoListTransactionsForAccountResponse,\n ListTransactionsRequestSchema,\n type ListTransactionsResponse as ProtoListTransactionsResponse,\n} from \"@thru/proto\";\n\nimport { encodeSignature } from \"@thru/helpers\";\nimport { Pubkey, type PubkeyInput, Signature, type SignatureInput } from \"../domain/primitives\";\nimport { getAccount } from \"./accounts\";\nimport { getChainId } from \"./chain\";\nimport { getBlockHeight } from \"./height\";\n\nexport interface TransactionFeePayerConfig {\n publicKey: PubkeyInput;\n privateKey?: Uint8Array;\n}\n\nexport interface TransactionAccountsConfig {\n readWrite?: PubkeyInput[];\n readOnly?: PubkeyInput[];\n}\n\nexport interface TransactionHeaderConfig {\n fee?: bigint;\n nonce?: bigint;\n startSlot?: bigint;\n expiryAfter?: number;\n chainId?: number;\n computeUnits?: number;\n stateUnits?: number;\n memoryUnits?: number;\n flags?: number;\n}\n/**\n * Instruction data can be either:\n * - A Uint8Array directly\n * - A function that takes an InstructionContext and returns a Uint8Array\n */\nexport type InstructionData = Uint8Array | string| ((context: InstructionContext) => Promise<Uint8Array>);\n\nexport interface BuildTransactionOptions {\n feePayer: TransactionFeePayerConfig;\n program: PubkeyInput;\n header?: TransactionHeaderConfig;\n accounts?: TransactionAccountsConfig;\n instructionData?: InstructionData;\n feePayerStateProof?: Uint8Array;\n feePayerAccountMetaRaw?: Uint8Array;\n}\n\nexport interface BuildAndSignTransactionOptions extends BuildTransactionOptions {\n feePayer: TransactionFeePayerConfig & { privateKey: Uint8Array };\n}\n\nexport interface TransactionQueryOptions {\n view?: TransactionView;\n versionContext?: VersionContext;\n minConsensus?: ConsensusStatus;\n}\n\nexport interface RawTransactionQueryOptions {\n versionContext?: VersionContext;\n minConsensus?: ConsensusStatus;\n}\n\nexport interface ListTransactionsForAccountOptions {\n filter?: Filter;\n page?: PageRequest;\n transactionOptions?: TransactionQueryOptions;\n}\n\nexport interface TransactionList {\n transactions: Transaction[];\n page?: PageResponse;\n}\n\nexport interface ListTransactionsOptions {\n filter?: Filter;\n page?: PageRequest;\n returnEvents?: boolean;\n versionContext?: VersionContext;\n minConsensus?: ConsensusStatus;\n}\n\nexport async function getTransaction(\n ctx: ThruClientContext,\n signature: SignatureInput,\n options: TransactionQueryOptions = {},\n): Promise<Transaction> {\n const request = create(GetTransactionRequestSchema, {\n signature: Signature.from(signature).toProtoSignature(),\n view: options.view ?? DEFAULT_TRANSACTION_VIEW,\n versionContext: options.versionContext ?? DEFAULT_VERSION_CONTEXT,\n minConsensus: options.minConsensus ?? DEFAULT_MIN_CONSENSUS,\n });\n const proto = await ctx.query.getTransaction(request, withCallOptions(ctx));\n return Transaction.fromProto(proto);\n}\n\nexport async function getRawTransaction(\n ctx: ThruClientContext,\n signature: SignatureInput,\n options: RawTransactionQueryOptions = {},\n): Promise<RawTransaction> {\n const request = create(GetRawTransactionRequestSchema, {\n signature: Signature.from(signature).toProtoSignature(),\n versionContext: options.versionContext ?? DEFAULT_VERSION_CONTEXT,\n minConsensus: options.minConsensus ?? DEFAULT_MIN_CONSENSUS,\n });\n return ctx.query.getRawTransaction(request, withCallOptions(ctx));\n}\n\nexport async function getTransactionStatus(ctx: ThruClientContext, signature: SignatureInput): Promise<TransactionStatusSnapshot> {\n const request = create(GetTransactionStatusRequestSchema, {\n signature: Signature.from(signature).toProtoSignature(),\n });\n const proto = await ctx.query.getTransactionStatus(request, withCallOptions(ctx));\n return TransactionStatusSnapshot.fromProto(proto);\n}\n\nexport async function listTransactionsForAccount(\n ctx: ThruClientContext,\n account: PubkeyInput,\n options: ListTransactionsForAccountOptions = {},\n): Promise<TransactionList> {\n const request = create(ListTransactionsForAccountRequestSchema, {\n account: Pubkey.from(account).toProtoPubkey(),\n filter: options.filter?.toProto(),\n page: options.page?.toProto(),\n });\n const response: ProtoListTransactionsForAccountResponse = await ctx.query.listTransactionsForAccount(\n request,\n withCallOptions(ctx),\n );\n const protoTransactionSignatures = (response.transactions ?? []).map((transaction) => transaction.signature);\n const transactions = await Promise.all(\n protoTransactionSignatures.map((signature) => {\n if (!signature) {\n throw new Error(\"ListTransactionsForAccount returned an empty signature\");\n }\n return getTransaction(ctx, signature.value, options.transactionOptions);\n }),\n );\n return {\n transactions,\n page: PageResponse.fromProto(response.page),\n };\n}\n\nexport async function listTransactions(\n ctx: ThruClientContext,\n options: ListTransactionsOptions = {},\n): Promise<TransactionList> {\n const request = create(ListTransactionsRequestSchema, {\n filter: options.filter?.toProto(),\n page: options.page?.toProto(),\n returnEvents: options.returnEvents,\n versionContext: options.versionContext ?? DEFAULT_VERSION_CONTEXT,\n minConsensus: options.minConsensus ?? DEFAULT_MIN_CONSENSUS,\n });\n const response: ProtoListTransactionsResponse = await ctx.query.listTransactions(\n request,\n withCallOptions(ctx),\n );\n return {\n transactions: response.transactions.map((proto) => Transaction.fromProto(proto)),\n page: PageResponse.fromProto(response.page),\n };\n}\n\nexport async function buildTransaction(\n ctx: ThruClientContext,\n options: BuildTransactionOptions,\n): Promise<LocalTransaction> {\n const builder = createTransactionBuilder();\n const params = await createBuildParams(ctx, options);\n return builder.build(params);\n}\n\nexport async function buildAndSignTransaction(\n ctx: ThruClientContext,\n options: BuildAndSignTransactionOptions,\n): Promise<SignedTransactionResult> {\n const builder = createTransactionBuilder();\n const params = await createBuildParams(ctx, options);\n if (!params.feePayer.privateKey) {\n throw new Error(\"Fee payer private key is required to sign the transaction\");\n }\n return builder.buildAndSign(params);\n}\n\nexport async function sendTransaction(\n ctx: ThruClientContext,\n transaction: LocalTransaction | Uint8Array,\n): Promise<string> {\n const raw = transaction instanceof Uint8Array ? transaction : transaction.toWire();\n return sendRawTransaction(ctx, raw);\n}\n\nexport interface BatchSendTransactionsOptions {\n numRetries?: number;\n}\n\nexport async function batchSendTransactions(\n ctx: ThruClientContext,\n transactions: (LocalTransaction | Uint8Array)[],\n options: BatchSendTransactionsOptions = {},\n): Promise<BatchSendTransactionsResponse> {\n const rawTransactions = transactions.map((tx) =>\n tx instanceof Uint8Array ? tx : tx.toWire(),\n );\n const request = create(BatchSendTransactionsRequestSchema, {\n rawTransactions,\n numRetries: options.numRetries ?? 0,\n });\n return ctx.command.batchSendTransactions(request, withCallOptions(ctx));\n}\n\nexport interface SendAndTrackTxnOptions {\n timeoutMs?: number;\n signal?: AbortSignal;\n}\n\nexport interface SendAndTrackTxnUpdate {\n status: SubmissionStatus;\n signature?: { value: Uint8Array };\n consensusStatus: number;\n executionResult?: {\n vmError: number;\n consumedComputeUnits: number;\n userErrorCode: bigint;\n };\n}\n\nexport function sendAndTrackTxn(\n ctx: ThruClientContext,\n transaction: LocalTransaction | Uint8Array,\n options: SendAndTrackTxnOptions = {},\n): AsyncIterable<SendAndTrackTxnUpdate> {\n const raw = transaction instanceof Uint8Array ? transaction : transaction.toWire();\n const request = create(SendAndTrackTxnRequestSchema, {\n transaction: raw,\n timeout:\n options.timeoutMs != null\n ? {\n seconds: BigInt(Math.floor(options.timeoutMs / 1000)),\n nanos: (options.timeoutMs % 1000) * 1_000_000,\n }\n : undefined,\n });\n\n const iterable = ctx.command.sendAndTrackTxn(request, {\n ...withCallOptions(ctx),\n signal: options.signal,\n });\n\n async function* mapper(): AsyncGenerator<SendAndTrackTxnUpdate> {\n for await (const response of iterable) {\n yield {\n status: response.status,\n signature: response.signature ? { value: response.signature.value } : undefined,\n consensusStatus: response.consensusStatus,\n executionResult: response.executionResult\n ? {\n vmError: response.executionResult.vmError,\n consumedComputeUnits: response.executionResult.consumedComputeUnits,\n userErrorCode: response.executionResult.userErrorCode,\n }\n : undefined,\n };\n }\n }\n\n return mapper();\n}\n\nasync function sendRawTransaction(ctx: ThruClientContext, rawTransaction: Uint8Array): Promise<string> {\n const request = create(SendTransactionRequestSchema, { rawTransaction });\n const response = await ctx.command.sendTransaction(request, withCallOptions(ctx));\n if (!response.signature?.value) {\n throw new Error(\"No signature returned from sendTransaction\");\n }\n return encodeSignature(response.signature.value);\n}\n\nfunction createTransactionBuilder(): TransactionBuilder {\n return new TransactionBuilder();\n}\n\nasync function createBuildParams(\n ctx: ThruClientContext,\n options: BuildTransactionOptions,\n): Promise<BuildTransactionParams> {\n const feePayerPublicKey = Pubkey.from(options.feePayer.publicKey).toBytes();\n const program = Pubkey.from(options.program).toBytes();\n const header = await createTransactionHeader(ctx, options.header ?? {}, feePayerPublicKey);\n const accounts = parseAccounts(options.accounts);\n \n // Create context for function resolution\n const context = createInstructionContext(feePayerPublicKey, program, accounts);\n \n // Resolve instruction data (functions get resolved here)\n const instructionData = await resolveInstructionData(options.instructionData, context);\n const proofs = createProofs(options);\n\n return {\n feePayer: {\n publicKey: feePayerPublicKey,\n privateKey: options.feePayer.privateKey,\n },\n program: Pubkey.from(options.program).toBytes(),\n header,\n accounts,\n instructionData,\n proofs,\n };\n}\n\nasync function createTransactionHeader(\n ctx: ThruClientContext,\n header: TransactionHeaderConfig,\n feePayerPublicKey: Uint8Array,\n): Promise<TransactionHeaderInput> {\n const nonce = header.nonce ?? (await fetchFeePayerNonce(ctx, feePayerPublicKey));\n const startSlot = header.startSlot ?? (await fetchFinalizedSlot(ctx));\n const chainId = header.chainId ?? (await fetchChainId(ctx));\n return {\n fee: header.fee ?? DEFAULT_FEE,\n nonce,\n startSlot,\n expiryAfter: header.expiryAfter ?? DEFAULT_EXPIRY_AFTER,\n chainId,\n computeUnits: header.computeUnits ?? DEFAULT_COMPUTE_UNITS,\n stateUnits: header.stateUnits ?? DEFAULT_STATE_UNITS,\n memoryUnits: header.memoryUnits ?? DEFAULT_MEMORY_UNITS,\n flags: header.flags,\n };\n}\n\nfunction parseAccounts(accounts?: TransactionAccountsConfig): TransactionAccountsInput | undefined {\n if (!accounts) {\n return undefined;\n }\n const readWrite = accounts.readWrite?.map((value, index) =>\n Pubkey.from(value).toBytes(),\n );\n const readOnly = accounts.readOnly?.map((value, index) =>\n Pubkey.from(value).toBytes(),\n );\n\n const result: TransactionAccountsInput = {};\n if (readWrite && readWrite.length > 0) {\n result.readWriteAccounts = normalizeAccountList(readWrite);\n }\n if (readOnly && readOnly.length > 0) {\n result.readOnlyAccounts = normalizeAccountList(readOnly);\n }\n\n if (!result.readWriteAccounts && !result.readOnlyAccounts) {\n return undefined;\n }\n\n return result;\n}\n\nfunction createInstructionContext(\n feePayer: PubkeyInput,\n program: PubkeyInput,\n accounts?: TransactionAccountsInput,\n): InstructionContext {\n // Build accounts array in transaction order: [feePayer, program, ...readWrite, ...readOnly]\n const allAccounts: Pubkey[] = [\n Pubkey.from(feePayer),\n Pubkey.from(program),\n ...(accounts?.readWriteAccounts?.map((value) => Pubkey.from(value)) ?? []),\n ...(accounts?.readOnlyAccounts?.map((value) => Pubkey.from(value)) ?? []),\n ];\n\n // Helper to compare two account addresses\n const getAccountIndex = (pubkey: PubkeyInput): number => {\n for (let i = 0; i < allAccounts.length; i++) {\n if (allAccounts[i].equals(Pubkey.from(pubkey))) {\n return i;\n }\n }\n throw new Error(\"Account not found in transaction accounts\");\n };\n\n return { accounts: allAccounts, getAccountIndex };\n}\n\nasync function resolveInstructionData(\n value: InstructionData | undefined,\n context: InstructionContext,\n): Promise<Uint8Array | undefined> {\n if (value === undefined) {\n return undefined;\n }\n \n // If it's a function, resolve it with the context\n if (typeof value === \"function\") {\n return await value(context);\n }\n \n // If it's already a Uint8Array, pass it through\n if (value instanceof Uint8Array) {\n return value;\n }\n \n return parseInstructionData(value);\n}\n\nfunction createProofs(options: BuildTransactionOptions): OptionalProofs | undefined {\n const proofs: OptionalProofs = {};\n if (options.feePayerStateProof) {\n proofs.feePayerStateProof = options.feePayerStateProof;\n }\n if (options.feePayerAccountMetaRaw) {\n proofs.feePayerAccountMetaRaw = options.feePayerAccountMetaRaw;\n }\n const hasProofs = Boolean(proofs.feePayerStateProof || proofs.feePayerAccountMetaRaw);\n return hasProofs ? proofs : undefined;\n}\n\nasync function fetchFeePayerNonce(ctx: ThruClientContext, feePayer: Uint8Array): Promise<bigint> {\n const account = await getAccount(ctx, feePayer, { view: AccountView.FULL });\n const nonce = account.meta?.nonce;\n if (nonce === undefined) {\n throw new Error(\"Fee payer account nonce is unavailable\");\n }\n return nonce;\n}\n\nasync function fetchFinalizedSlot(ctx: ThruClientContext): Promise<bigint> {\n const height = await getBlockHeight(ctx);\n return height.finalized;\n}\n\nasync function fetchChainId(ctx: ThruClientContext): Promise<number> {\n return getChainId(ctx);\n}\n","import type { GetVersionResponse } from \"@thru/proto\";\n\nexport class VersionInfo {\n readonly components: Record<string, string>;\n\n constructor(components: Record<string, string>) {\n this.components = { ...components };\n }\n\n static fromProto(proto: GetVersionResponse): VersionInfo {\n return new VersionInfo(proto.versions ?? {});\n }\n\n get(component: string): string | undefined {\n return this.components[component];\n }\n}\n\n"]}
|