@rialo/ts-cdk 0.5.0-alpha.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../node_modules/@scure/base/index.ts","../node_modules/@protobufjs/float/index.js","../node_modules/@protobufjs/utf8/index.js","../src/constants.ts","../src/crypto/errors.ts","../node_modules/@noble/ed25519/index.js","../node_modules/@noble/hashes/src/utils.ts","../node_modules/@noble/hashes/src/_md.ts","../node_modules/@noble/hashes/src/_u64.ts","../node_modules/@noble/hashes/src/sha2.ts","../src/crypto/public-key.ts","../src/crypto/utils.ts","../src/crypto/signature.ts","../src/crypto/keypair.ts","../node_modules/@noble/hashes/src/hmac.ts","../node_modules/@scure/bip39/node_modules/@noble/hashes/src/utils.ts","../node_modules/@scure/bip39/node_modules/@noble/hashes/src/hmac.ts","../node_modules/@scure/bip39/node_modules/@noble/hashes/src/pbkdf2.ts","../node_modules/@scure/bip39/node_modules/@noble/hashes/src/_md.ts","../node_modules/@scure/bip39/node_modules/@noble/hashes/src/_u64.ts","../node_modules/@scure/bip39/node_modules/@noble/hashes/src/sha2.ts","../node_modules/@scure/bip39/index.js","../node_modules/@scure/bip39/wordlists/english.js","../src/crypto/mnemonic.ts","../src/error.ts","../src/rex/errors.ts","../src/rex/constants.ts","../src/rex/rex-value.ts","../src/rex/hpke.ts","../src/rpc/errors.ts","../src/rpc/clients/base-client.ts","../src/generated/rpc-client.ts","../src/rpc/clients/query-client.ts","../src/utils.ts","../src/rpc/clients/transaction-client.ts","../src/rpc/clients/client.ts","../src/rpc/http-transport.ts","../src/rpc/index.ts","../src/serialization/bincode/reader.ts","../src/serialization/bincode/writer.ts","../src/serialization/bincode/schema.ts","../node_modules/@dao-xyz/borsh/src/binary.ts","../node_modules/@dao-xyz/borsh/src/bigint.ts","../node_modules/@dao-xyz/borsh/src/error.ts","../node_modules/@dao-xyz/borsh/src/types.ts","../node_modules/@dao-xyz/borsh/src/index.ts","../src/serialization/borsh.ts","../src/transaction/account-meta-table.ts","../src/transaction/errors.ts","../src/transaction/instructions/borsh-instruction.ts","../src/transaction/instructions/system.ts","../src/transaction/message.ts","../src/transaction/transaction.ts","../src/transaction/transaction-builder.ts","../src/serialization/compact-u16.ts","../src/signer/keypair-signer.ts","../src/generated/keyring.ts","../src/keyring/validation.ts","../src/keyring/keyring.ts","../src/generated/keyring-provider.ts","../src/keyring/keyring-provider.ts","../src/program/constants.ts","../src/program/deployment.ts","../src/program/errors.ts","../src/program/instructions.ts"],"names":["isBytes","abytes","anumber","padding","bytes","str","alphabet","sha256","exports","sign","utf8","CryptoErrorCode","hex","C","G","P","h","cr","concatBytes","ahash","aexists","aoutput","clean","createView","rotr","createHasher","randomBytes","oidNist","_HMAC","hmac","Chi","Maj","HashMD","SHA256_IV","SHA512_IV","U32_MASK64","_32n","fromBig","split","shrSH","shrSL","rotrSH","rotrSL","rotrBH","rotrBL","add","add3L","add3H","add4L","add4H","add5L","add5H","SHA256_K","SHA256_W","SHA2_32B","_SHA256","K512","SHA512_Kh","SHA512_Kl","SHA512_W_H","SHA512_W_L","SHA2_64B","_SHA512","sha512","wordlist","normalize","RialoErrorType","HpkeErrorCode","RexValueVariant","CipherSuite","DhkemX25519HkdfSha256","HkdfSha256","Chacha20Poly1305","RpcErrorCode","base58","base64","chain","readValue","writeValue","field","serialize","deserialize","i","obj","TransactionErrorCode","SystemInstruction","deserializeCompactU16","DEFAULT_MAX_RETRIES","DeploymentErrorCode","err","RiscVLoaderInstruction","calculateBackoff"],"mappings":"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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA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","file":"index.js","sourcesContent":["/*! scure-base - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\nexport interface Coder<F, T> {\n encode(from: F): T;\n decode(to: T): F;\n}\n\nexport interface BytesCoder extends Coder<Uint8Array, string> {\n encode: (data: Uint8Array) => string;\n decode: (str: string) => Uint8Array;\n}\n\nfunction isBytes(a: unknown): a is Uint8Array {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n/** Asserts something is Uint8Array. */\nfunction abytes(b: Uint8Array | undefined): void {\n if (!isBytes(b)) throw new Error('Uint8Array expected');\n}\n\nfunction isArrayOf(isString: boolean, arr: any[]) {\n if (!Array.isArray(arr)) return false;\n if (arr.length === 0) return true;\n if (isString) {\n return arr.every((item) => typeof item === 'string');\n } else {\n return arr.every((item) => Number.isSafeInteger(item));\n }\n}\n\nfunction afn(input: Function): input is Function {\n if (typeof input !== 'function') throw new Error('function expected');\n return true;\n}\n\nfunction astr(label: string, input: unknown): input is string {\n if (typeof input !== 'string') throw new Error(`${label}: string expected`);\n return true;\n}\n\nfunction anumber(n: number): void {\n if (!Number.isSafeInteger(n)) throw new Error(`invalid integer: ${n}`);\n}\n\nfunction aArr(input: any[]) {\n if (!Array.isArray(input)) throw new Error('array expected');\n}\nfunction astrArr(label: string, input: string[]) {\n if (!isArrayOf(true, input)) throw new Error(`${label}: array of strings expected`);\n}\nfunction anumArr(label: string, input: number[]) {\n if (!isArrayOf(false, input)) throw new Error(`${label}: array of numbers expected`);\n}\n\n// TODO: some recusive type inference so it would check correct order of input/output inside rest?\n// like <string, number>, <number, bytes>, <bytes, float>\ntype Chain = [Coder<any, any>, ...Coder<any, any>[]];\n// Extract info from Coder type\ntype Input<F> = F extends Coder<infer T, any> ? T : never;\ntype Output<F> = F extends Coder<any, infer T> ? T : never;\n// Generic function for arrays\ntype First<T> = T extends [infer U, ...any[]] ? U : never;\ntype Last<T> = T extends [...any[], infer U] ? U : never;\ntype Tail<T> = T extends [any, ...infer U] ? U : never;\n\ntype AsChain<C extends Chain, Rest = Tail<C>> = {\n // C[K] = Coder<Input<C[K]>, Input<Rest[k]>>\n [K in keyof C]: Coder<Input<C[K]>, Input<K extends keyof Rest ? Rest[K] : any>>;\n};\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction chain<T extends Chain & AsChain<T>>(...args: T): Coder<Input<First<T>>, Output<Last<T>>> {\n const id = (a: any) => a;\n // Wrap call in closure so JIT can inline calls\n const wrap = (a: any, b: any) => (c: any) => a(b(c));\n // Construct chain of args[-1].encode(args[-2].encode([...]))\n const encode = args.map((x) => x.encode).reduceRight(wrap, id);\n // Construct chain of args[0].decode(args[1].decode(...))\n const decode = args.map((x) => x.decode).reduce(wrap, id);\n return { encode, decode };\n}\n\n/**\n * Encodes integer radix representation to array of strings using alphabet and back.\n * Could also be array of strings.\n * @__NO_SIDE_EFFECTS__\n */\nfunction alphabet(letters: string | string[]): Coder<number[], string[]> {\n // mapping 1 to \"b\"\n const lettersA = typeof letters === 'string' ? letters.split('') : letters;\n const len = lettersA.length;\n astrArr('alphabet', lettersA);\n\n // mapping \"b\" to 1\n const indexes = new Map(lettersA.map((l, i) => [l, i]));\n return {\n encode: (digits: number[]) => {\n aArr(digits);\n return digits.map((i) => {\n if (!Number.isSafeInteger(i) || i < 0 || i >= len)\n throw new Error(\n `alphabet.encode: digit index outside alphabet \"${i}\". Allowed: ${letters}`\n );\n return lettersA[i]!;\n });\n },\n decode: (input: string[]): number[] => {\n aArr(input);\n return input.map((letter) => {\n astr('alphabet.decode', letter);\n const i = indexes.get(letter);\n if (i === undefined) throw new Error(`Unknown letter: \"${letter}\". Allowed: ${letters}`);\n return i;\n });\n },\n };\n}\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction join(separator = ''): Coder<string[], string> {\n astr('join', separator);\n return {\n encode: (from) => {\n astrArr('join.decode', from);\n return from.join(separator);\n },\n decode: (to) => {\n astr('join.decode', to);\n return to.split(separator);\n },\n };\n}\n\n/**\n * Pad strings array so it has integer number of bits\n * @__NO_SIDE_EFFECTS__\n */\nfunction padding(bits: number, chr = '='): Coder<string[], string[]> {\n anumber(bits);\n astr('padding', chr);\n return {\n encode(data: string[]): string[] {\n astrArr('padding.encode', data);\n while ((data.length * bits) % 8) data.push(chr);\n return data;\n },\n decode(input: string[]): string[] {\n astrArr('padding.decode', input);\n let end = input.length;\n if ((end * bits) % 8)\n throw new Error('padding: invalid, string should have whole number of bytes');\n for (; end > 0 && input[end - 1] === chr; end--) {\n const last = end - 1;\n const byte = last * bits;\n if (byte % 8 === 0) throw new Error('padding: invalid, string has too much padding');\n }\n return input.slice(0, end);\n },\n };\n}\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction normalize<T>(fn: (val: T) => T): Coder<T, T> {\n afn(fn);\n return { encode: (from: T) => from, decode: (to: T) => fn(to) };\n}\n\n/**\n * Slow: O(n^2) time complexity\n */\nfunction convertRadix(data: number[], from: number, to: number): number[] {\n // base 1 is impossible\n if (from < 2) throw new Error(`convertRadix: invalid from=${from}, base cannot be less than 2`);\n if (to < 2) throw new Error(`convertRadix: invalid to=${to}, base cannot be less than 2`);\n aArr(data);\n if (!data.length) return [];\n let pos = 0;\n const res = [];\n const digits = Array.from(data, (d) => {\n anumber(d);\n if (d < 0 || d >= from) throw new Error(`invalid integer: ${d}`);\n return d;\n });\n const dlen = digits.length;\n while (true) {\n let carry = 0;\n let done = true;\n for (let i = pos; i < dlen; i++) {\n const digit = digits[i]!;\n const fromCarry = from * carry;\n const digitBase = fromCarry + digit;\n if (\n !Number.isSafeInteger(digitBase) ||\n fromCarry / from !== carry ||\n digitBase - digit !== fromCarry\n ) {\n throw new Error('convertRadix: carry overflow');\n }\n const div = digitBase / to;\n carry = digitBase % to;\n const rounded = Math.floor(div);\n digits[i] = rounded;\n if (!Number.isSafeInteger(rounded) || rounded * to + carry !== digitBase)\n throw new Error('convertRadix: carry overflow');\n if (!done) continue;\n else if (!rounded) pos = i;\n else done = false;\n }\n res.push(carry);\n if (done) break;\n }\n for (let i = 0; i < data.length - 1 && data[i] === 0; i++) res.push(0);\n return res.reverse();\n}\n\nconst gcd = (a: number, b: number): number => (b === 0 ? a : gcd(b, a % b));\nconst radix2carry = /* @__NO_SIDE_EFFECTS__ */ (from: number, to: number) =>\n from + (to - gcd(from, to));\nconst powers: number[] = /* @__PURE__ */ (() => {\n let res = [];\n for (let i = 0; i < 40; i++) res.push(2 ** i);\n return res;\n})();\n/**\n * Implemented with numbers, because BigInt is 5x slower\n */\nfunction convertRadix2(data: number[], from: number, to: number, padding: boolean): number[] {\n aArr(data);\n if (from <= 0 || from > 32) throw new Error(`convertRadix2: wrong from=${from}`);\n if (to <= 0 || to > 32) throw new Error(`convertRadix2: wrong to=${to}`);\n if (radix2carry(from, to) > 32) {\n throw new Error(\n `convertRadix2: carry overflow from=${from} to=${to} carryBits=${radix2carry(from, to)}`\n );\n }\n let carry = 0;\n let pos = 0; // bitwise position in current element\n const max = powers[from]!;\n const mask = powers[to]! - 1;\n const res: number[] = [];\n for (const n of data) {\n anumber(n);\n if (n >= max) throw new Error(`convertRadix2: invalid data word=${n} from=${from}`);\n carry = (carry << from) | n;\n if (pos + from > 32) throw new Error(`convertRadix2: carry overflow pos=${pos} from=${from}`);\n pos += from;\n for (; pos >= to; pos -= to) res.push(((carry >> (pos - to)) & mask) >>> 0);\n const pow = powers[pos];\n if (pow === undefined) throw new Error('invalid carry');\n carry &= pow - 1; // clean carry, otherwise it will cause overflow\n }\n carry = (carry << (to - pos)) & mask;\n if (!padding && pos >= from) throw new Error('Excess padding');\n if (!padding && carry > 0) throw new Error(`Non-zero padding: ${carry}`);\n if (padding && pos > 0) res.push(carry >>> 0);\n return res;\n}\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction radix(num: number): Coder<Uint8Array, number[]> {\n anumber(num);\n const _256 = 2 ** 8;\n return {\n encode: (bytes: Uint8Array) => {\n if (!isBytes(bytes)) throw new Error('radix.encode input should be Uint8Array');\n return convertRadix(Array.from(bytes), _256, num);\n },\n decode: (digits: number[]) => {\n anumArr('radix.decode', digits);\n return Uint8Array.from(convertRadix(digits, num, _256));\n },\n };\n}\n\n/**\n * If both bases are power of same number (like `2**8 <-> 2**64`),\n * there is a linear algorithm. For now we have implementation for power-of-two bases only.\n * @__NO_SIDE_EFFECTS__\n */\nfunction radix2(bits: number, revPadding = false): Coder<Uint8Array, number[]> {\n anumber(bits);\n if (bits <= 0 || bits > 32) throw new Error('radix2: bits should be in (0..32]');\n if (radix2carry(8, bits) > 32 || radix2carry(bits, 8) > 32)\n throw new Error('radix2: carry overflow');\n return {\n encode: (bytes: Uint8Array) => {\n if (!isBytes(bytes)) throw new Error('radix2.encode input should be Uint8Array');\n return convertRadix2(Array.from(bytes), 8, bits, !revPadding);\n },\n decode: (digits: number[]) => {\n anumArr('radix2.decode', digits);\n return Uint8Array.from(convertRadix2(digits, bits, 8, revPadding));\n },\n };\n}\n\ntype ArgumentTypes<F extends Function> = F extends (...args: infer A) => any ? A : never;\nfunction unsafeWrapper<T extends (...args: any) => any>(fn: T) {\n afn(fn);\n return function (...args: ArgumentTypes<T>): ReturnType<T> | void {\n try {\n return fn.apply(null, args);\n } catch (e) {}\n };\n}\n\nfunction checksum(\n len: number,\n fn: (data: Uint8Array) => Uint8Array\n): Coder<Uint8Array, Uint8Array> {\n anumber(len);\n afn(fn);\n return {\n encode(data: Uint8Array) {\n if (!isBytes(data)) throw new Error('checksum.encode: input should be Uint8Array');\n const sum = fn(data).slice(0, len);\n const res = new Uint8Array(data.length + len);\n res.set(data);\n res.set(sum, data.length);\n return res;\n },\n decode(data: Uint8Array) {\n if (!isBytes(data)) throw new Error('checksum.decode: input should be Uint8Array');\n const payload = data.slice(0, -len);\n const oldChecksum = data.slice(-len);\n const newChecksum = fn(payload).slice(0, len);\n for (let i = 0; i < len; i++)\n if (newChecksum[i] !== oldChecksum[i]) throw new Error('Invalid checksum');\n return payload;\n },\n };\n}\n\n// prettier-ignore\nexport const utils: { alphabet: typeof alphabet; chain: typeof chain; checksum: typeof checksum; convertRadix: typeof convertRadix; convertRadix2: typeof convertRadix2; radix: typeof radix; radix2: typeof radix2; join: typeof join; padding: typeof padding; } = {\n alphabet, chain, checksum, convertRadix, convertRadix2, radix, radix2, join, padding,\n};\n\n// RFC 4648 aka RFC 3548\n// ---------------------\n\n/**\n * base16 encoding from RFC 4648.\n * @example\n * ```js\n * base16.encode(Uint8Array.from([0x12, 0xab]));\n * // => '12AB'\n * ```\n */\nexport const base16: BytesCoder = chain(radix2(4), alphabet('0123456789ABCDEF'), join(''));\n\n/**\n * base32 encoding from RFC 4648. Has padding.\n * Use `base32nopad` for unpadded version.\n * Also check out `base32hex`, `base32hexnopad`, `base32crockford`.\n * @example\n * ```js\n * base32.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'CKVQ===='\n * base32.decode('CKVQ====');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32: BytesCoder = chain(\n radix2(5),\n alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'),\n padding(5),\n join('')\n);\n\n/**\n * base32 encoding from RFC 4648. No padding.\n * Use `base32` for padded version.\n * Also check out `base32hex`, `base32hexnopad`, `base32crockford`.\n * @example\n * ```js\n * base32nopad.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'CKVQ'\n * base32nopad.decode('CKVQ');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32nopad: BytesCoder = chain(\n radix2(5),\n alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'),\n join('')\n);\n/**\n * base32 encoding from RFC 4648. Padded. Compared to ordinary `base32`, slightly different alphabet.\n * Use `base32hexnopad` for unpadded version.\n * @example\n * ```js\n * base32hex.encode(Uint8Array.from([0x12, 0xab]));\n * // => '2ALG===='\n * base32hex.decode('2ALG====');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32hex: BytesCoder = chain(\n radix2(5),\n alphabet('0123456789ABCDEFGHIJKLMNOPQRSTUV'),\n padding(5),\n join('')\n);\n\n/**\n * base32 encoding from RFC 4648. No padding. Compared to ordinary `base32`, slightly different alphabet.\n * Use `base32hex` for padded version.\n * @example\n * ```js\n * base32hexnopad.encode(Uint8Array.from([0x12, 0xab]));\n * // => '2ALG'\n * base32hexnopad.decode('2ALG');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32hexnopad: BytesCoder = chain(\n radix2(5),\n alphabet('0123456789ABCDEFGHIJKLMNOPQRSTUV'),\n join('')\n);\n/**\n * base32 encoding from RFC 4648. Doug Crockford's version.\n * https://www.crockford.com/base32.html\n * @example\n * ```js\n * base32crockford.encode(Uint8Array.from([0x12, 0xab]));\n * // => '2ANG'\n * base32crockford.decode('2ANG');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32crockford: BytesCoder = chain(\n radix2(5),\n alphabet('0123456789ABCDEFGHJKMNPQRSTVWXYZ'),\n join(''),\n normalize((s: string) => s.toUpperCase().replace(/O/g, '0').replace(/[IL]/g, '1'))\n);\n\n// Built-in base64 conversion https://caniuse.com/mdn-javascript_builtins_uint8array_frombase64\n// prettier-ignore\nconst hasBase64Builtin: boolean = /* @__PURE__ */ (() =>\n typeof (Uint8Array as any).from([]).toBase64 === 'function' &&\n typeof (Uint8Array as any).fromBase64 === 'function')();\n\nconst decodeBase64Builtin = (s: string, isUrl: boolean) => {\n astr('base64', s);\n const re = isUrl ? /^[A-Za-z0-9=_-]+$/ : /^[A-Za-z0-9=+/]+$/;\n const alphabet = isUrl ? 'base64url' : 'base64';\n if (s.length > 0 && !re.test(s)) throw new Error('invalid base64');\n return (Uint8Array as any).fromBase64(s, { alphabet, lastChunkHandling: 'strict' });\n};\n\n/**\n * base64 from RFC 4648. Padded.\n * Use `base64nopad` for unpadded version.\n * Also check out `base64url`, `base64urlnopad`.\n * Falls back to built-in function, when available.\n * @example\n * ```js\n * base64.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'Eqs='\n * base64.decode('Eqs=');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\n// prettier-ignore\nexport const base64: BytesCoder = hasBase64Builtin ? {\n encode(b) { abytes(b); return (b as any).toBase64(); },\n decode(s) { return decodeBase64Builtin(s, false); },\n} : chain(\n radix2(6),\n alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'),\n padding(6),\n join('')\n);\n/**\n * base64 from RFC 4648. No padding.\n * Use `base64` for padded version.\n * @example\n * ```js\n * base64nopad.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'Eqs'\n * base64nopad.decode('Eqs');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base64nopad: BytesCoder = chain(\n radix2(6),\n alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'),\n join('')\n);\n\n/**\n * base64 from RFC 4648, using URL-safe alphabet. Padded.\n * Use `base64urlnopad` for unpadded version.\n * Falls back to built-in function, when available.\n * @example\n * ```js\n * base64url.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'Eqs='\n * base64url.decode('Eqs=');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\n// prettier-ignore\nexport const base64url: BytesCoder = hasBase64Builtin ? {\n encode(b) { abytes(b); return (b as any).toBase64({ alphabet: 'base64url' }); },\n decode(s) { return decodeBase64Builtin(s, true); },\n} : chain(\n radix2(6),\n alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'),\n padding(6),\n join('')\n);\n\n/**\n * base64 from RFC 4648, using URL-safe alphabet. No padding.\n * Use `base64url` for padded version.\n * @example\n * ```js\n * base64urlnopad.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'Eqs'\n * base64urlnopad.decode('Eqs');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base64urlnopad: BytesCoder = chain(\n radix2(6),\n alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'),\n join('')\n);\n\n// base58 code\n// -----------\nconst genBase58 = /* @__NO_SIDE_EFFECTS__ */ (abc: string) =>\n chain(radix(58), alphabet(abc), join(''));\n\n/**\n * base58: base64 without ambigous characters +, /, 0, O, I, l.\n * Quadratic (O(n^2)) - so, can't be used on large inputs.\n * @example\n * ```js\n * base58.decode('01abcdef');\n * // => '3UhJW'\n * ```\n */\nexport const base58: BytesCoder = genBase58(\n '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n);\n/**\n * base58: flickr version. Check out `base58`.\n */\nexport const base58flickr: BytesCoder = genBase58(\n '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n);\n/**\n * base58: XRP version. Check out `base58`.\n */\nexport const base58xrp: BytesCoder = genBase58(\n 'rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz'\n);\n\n// Data len (index) -> encoded block len\nconst XMR_BLOCK_LEN = [0, 2, 3, 5, 6, 7, 9, 10, 11];\n\n/**\n * base58: XMR version. Check out `base58`.\n * Done in 8-byte blocks (which equals 11 chars in decoding). Last (non-full) block padded with '1' to size in XMR_BLOCK_LEN.\n * Block encoding significantly reduces quadratic complexity of base58.\n */\nexport const base58xmr: BytesCoder = {\n encode(data: Uint8Array) {\n let res = '';\n for (let i = 0; i < data.length; i += 8) {\n const block = data.subarray(i, i + 8);\n res += base58.encode(block).padStart(XMR_BLOCK_LEN[block.length]!, '1');\n }\n return res;\n },\n decode(str: string) {\n let res: number[] = [];\n for (let i = 0; i < str.length; i += 11) {\n const slice = str.slice(i, i + 11);\n const blockLen = XMR_BLOCK_LEN.indexOf(slice.length);\n const block = base58.decode(slice);\n for (let j = 0; j < block.length - blockLen; j++) {\n if (block[j] !== 0) throw new Error('base58xmr: wrong padding');\n }\n res = res.concat(Array.from(block.slice(block.length - blockLen)));\n }\n return Uint8Array.from(res);\n },\n};\n\n/**\n * Method, which creates base58check encoder.\n * Requires function, calculating sha256.\n */\nexport const createBase58check = (sha256: (data: Uint8Array) => Uint8Array): BytesCoder =>\n chain(\n checksum(4, (data) => sha256(sha256(data))),\n base58\n );\n\n/**\n * Use `createBase58check` instead.\n * @deprecated\n */\nexport const base58check: (sha256: (data: Uint8Array) => Uint8Array) => BytesCoder =\n createBase58check;\n\n// Bech32 code\n// -----------\nexport interface Bech32Decoded<Prefix extends string = string> {\n prefix: Prefix;\n words: number[];\n}\nexport interface Bech32DecodedWithArray<Prefix extends string = string> {\n prefix: Prefix;\n words: number[];\n bytes: Uint8Array;\n}\n\nconst BECH_ALPHABET: Coder<number[], string> = chain(\n alphabet('qpzry9x8gf2tvdw0s3jn54khce6mua7l'),\n join('')\n);\n\nconst POLYMOD_GENERATORS = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3];\nfunction bech32Polymod(pre: number): number {\n const b = pre >> 25;\n let chk = (pre & 0x1ffffff) << 5;\n for (let i = 0; i < POLYMOD_GENERATORS.length; i++) {\n if (((b >> i) & 1) === 1) chk ^= POLYMOD_GENERATORS[i]!;\n }\n return chk;\n}\n\nfunction bechChecksum(prefix: string, words: number[], encodingConst = 1): string {\n const len = prefix.length;\n let chk = 1;\n for (let i = 0; i < len; i++) {\n const c = prefix.charCodeAt(i);\n if (c < 33 || c > 126) throw new Error(`Invalid prefix (${prefix})`);\n chk = bech32Polymod(chk) ^ (c >> 5);\n }\n chk = bech32Polymod(chk);\n for (let i = 0; i < len; i++) chk = bech32Polymod(chk) ^ (prefix.charCodeAt(i) & 0x1f);\n for (let v of words) chk = bech32Polymod(chk) ^ v;\n for (let i = 0; i < 6; i++) chk = bech32Polymod(chk);\n chk ^= encodingConst;\n return BECH_ALPHABET.encode(convertRadix2([chk % powers[30]!], 30, 5, false));\n}\n\nexport interface Bech32 {\n encode<Prefix extends string>(\n prefix: Prefix,\n words: number[] | Uint8Array,\n limit?: number | false\n ): `${Lowercase<Prefix>}1${string}`;\n decode<Prefix extends string>(\n str: `${Prefix}1${string}`,\n limit?: number | false\n ): Bech32Decoded<Prefix>;\n encodeFromBytes(prefix: string, bytes: Uint8Array): string;\n decodeToBytes(str: string): Bech32DecodedWithArray;\n decodeUnsafe(str: string, limit?: number | false): void | Bech32Decoded<string>;\n fromWords(to: number[]): Uint8Array;\n fromWordsUnsafe(to: number[]): void | Uint8Array;\n toWords(from: Uint8Array): number[];\n}\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction genBech32(encoding: 'bech32' | 'bech32m'): Bech32 {\n const ENCODING_CONST = encoding === 'bech32' ? 1 : 0x2bc830a3;\n const _words = radix2(5);\n const fromWords = _words.decode;\n const toWords = _words.encode;\n const fromWordsUnsafe = unsafeWrapper(fromWords);\n\n function encode<Prefix extends string>(\n prefix: Prefix,\n words: number[] | Uint8Array,\n limit: number | false = 90\n ): `${Lowercase<Prefix>}1${string}` {\n astr('bech32.encode prefix', prefix);\n if (isBytes(words)) words = Array.from(words);\n anumArr('bech32.encode', words);\n const plen = prefix.length;\n if (plen === 0) throw new TypeError(`Invalid prefix length ${plen}`);\n const actualLength = plen + 7 + words.length;\n if (limit !== false && actualLength > limit)\n throw new TypeError(`Length ${actualLength} exceeds limit ${limit}`);\n const lowered = prefix.toLowerCase();\n const sum = bechChecksum(lowered, words, ENCODING_CONST);\n return `${lowered}1${BECH_ALPHABET.encode(words)}${sum}` as `${Lowercase<Prefix>}1${string}`;\n }\n\n function decode<Prefix extends string>(\n str: `${Prefix}1${string}`,\n limit?: number | false\n ): Bech32Decoded<Prefix>;\n function decode(str: string, limit?: number | false): Bech32Decoded;\n function decode(str: string, limit: number | false = 90): Bech32Decoded {\n astr('bech32.decode input', str);\n const slen = str.length;\n if (slen < 8 || (limit !== false && slen > limit))\n throw new TypeError(`invalid string length: ${slen} (${str}). Expected (8..${limit})`);\n // don't allow mixed case\n const lowered = str.toLowerCase();\n if (str !== lowered && str !== str.toUpperCase())\n throw new Error(`String must be lowercase or uppercase`);\n const sepIndex = lowered.lastIndexOf('1');\n if (sepIndex === 0 || sepIndex === -1)\n throw new Error(`Letter \"1\" must be present between prefix and data only`);\n const prefix = lowered.slice(0, sepIndex);\n const data = lowered.slice(sepIndex + 1);\n if (data.length < 6) throw new Error('Data must be at least 6 characters long');\n const words = BECH_ALPHABET.decode(data).slice(0, -6);\n const sum = bechChecksum(prefix, words, ENCODING_CONST);\n if (!data.endsWith(sum)) throw new Error(`Invalid checksum in ${str}: expected \"${sum}\"`);\n return { prefix, words };\n }\n\n const decodeUnsafe = unsafeWrapper(decode);\n\n function decodeToBytes(str: string): Bech32DecodedWithArray {\n const { prefix, words } = decode(str, false);\n return { prefix, words, bytes: fromWords(words) };\n }\n\n function encodeFromBytes(prefix: string, bytes: Uint8Array) {\n return encode(prefix, toWords(bytes));\n }\n\n return {\n encode,\n decode,\n encodeFromBytes,\n decodeToBytes,\n decodeUnsafe,\n fromWords,\n fromWordsUnsafe,\n toWords,\n };\n}\n\n/**\n * bech32 from BIP 173. Operates on words.\n * For high-level, check out scure-btc-signer:\n * https://github.com/paulmillr/scure-btc-signer.\n */\nexport const bech32: Bech32 = genBech32('bech32');\n\n/**\n * bech32m from BIP 350. Operates on words.\n * It was to mitigate `bech32` weaknesses.\n * For high-level, check out scure-btc-signer:\n * https://github.com/paulmillr/scure-btc-signer.\n */\nexport const bech32m: Bech32 = genBech32('bech32m');\n\ndeclare const TextEncoder: any;\ndeclare const TextDecoder: any;\n\n/**\n * UTF-8-to-byte decoder. Uses built-in TextDecoder / TextEncoder.\n * @example\n * ```js\n * const b = utf8.decode(\"hey\"); // => new Uint8Array([ 104, 101, 121 ])\n * const str = utf8.encode(b); // \"hey\"\n * ```\n */\nexport const utf8: BytesCoder = {\n encode: (data) => new TextDecoder().decode(data),\n decode: (str) => new TextEncoder().encode(str),\n};\n\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\n// prettier-ignore\nconst hasHexBuiltin: boolean = /* @__PURE__ */ (() =>\n typeof (Uint8Array as any).from([]).toHex === 'function' &&\n typeof (Uint8Array as any).fromHex === 'function')();\n// prettier-ignore\nconst hexBuiltin: BytesCoder = {\n encode(data) { abytes(data); return (data as any).toHex(); },\n decode(s) { astr('hex', s); return (Uint8Array as any).fromHex(s); },\n};\n/**\n * hex string decoder. Uses built-in function, when available.\n * @example\n * ```js\n * const b = hex.decode(\"0102ff\"); // => new Uint8Array([ 1, 2, 255 ])\n * const str = hex.encode(b); // \"0102ff\"\n * ```\n */\nexport const hex: BytesCoder = hasHexBuiltin\n ? hexBuiltin\n : chain(\n radix2(4),\n alphabet('0123456789abcdef'),\n join(''),\n normalize((s: string) => {\n if (typeof s !== 'string' || s.length % 2 !== 0)\n throw new TypeError(\n `hex.decode: expected string, got ${typeof s} with length ${s.length}`\n );\n return s.toLowerCase();\n })\n );\n\nexport type SomeCoders = {\n utf8: BytesCoder;\n hex: BytesCoder;\n base16: BytesCoder;\n base32: BytesCoder;\n base64: BytesCoder;\n base64url: BytesCoder;\n base58: BytesCoder;\n base58xmr: BytesCoder;\n};\n// prettier-ignore\nconst CODERS: SomeCoders = {\n utf8, hex, base16, base32, base64, base64url, base58, base58xmr\n};\ntype CoderType = keyof SomeCoders;\nconst coderTypeError =\n 'Invalid encoding type. Available types: utf8, hex, base16, base32, base64, base64url, base58, base58xmr';\n\n/** @deprecated */\nexport const bytesToString = (type: CoderType, bytes: Uint8Array): string => {\n if (typeof type !== 'string' || !CODERS.hasOwnProperty(type)) throw new TypeError(coderTypeError);\n if (!isBytes(bytes)) throw new TypeError('bytesToString() expects Uint8Array');\n return CODERS[type].encode(bytes);\n};\n\n/** @deprecated */\nexport const str: (type: CoderType, bytes: Uint8Array) => string = bytesToString; // as in python, but for bytes only\n\n/** @deprecated */\nexport const stringToBytes = (type: CoderType, str: string): Uint8Array => {\n if (!CODERS.hasOwnProperty(type)) throw new TypeError(coderTypeError);\n if (typeof str !== 'string') throw new TypeError('stringToBytes() expects string');\n return CODERS[type].decode(str);\n};\n/** @deprecated */\nexport const bytes: (type: CoderType, str: string) => Uint8Array = stringToBytes;\n","\"use strict\";\r\n\r\nmodule.exports = factory(factory);\r\n\r\n/**\r\n * Reads / writes floats / doubles from / to buffers.\r\n * @name util.float\r\n * @namespace\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using little endian byte order.\r\n * @name util.float.writeFloatLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using big endian byte order.\r\n * @name util.float.writeFloatBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using little endian byte order.\r\n * @name util.float.readFloatLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using big endian byte order.\r\n * @name util.float.readFloatBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using little endian byte order.\r\n * @name util.float.writeDoubleLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using big endian byte order.\r\n * @name util.float.writeDoubleBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using little endian byte order.\r\n * @name util.float.readDoubleLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using big endian byte order.\r\n * @name util.float.readDoubleBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n// Factory function for the purpose of node-based testing in modified global environments\r\nfunction factory(exports) {\r\n\r\n // float: typed array\r\n if (typeof Float32Array !== \"undefined\") (function() {\r\n\r\n var f32 = new Float32Array([ -0 ]),\r\n f8b = new Uint8Array(f32.buffer),\r\n le = f8b[3] === 128;\r\n\r\n function writeFloat_f32_cpy(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n }\r\n\r\n function writeFloat_f32_rev(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[3];\r\n buf[pos + 1] = f8b[2];\r\n buf[pos + 2] = f8b[1];\r\n buf[pos + 3] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy;\r\n\r\n function readFloat_f32_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n function readFloat_f32_rev(buf, pos) {\r\n f8b[3] = buf[pos ];\r\n f8b[2] = buf[pos + 1];\r\n f8b[1] = buf[pos + 2];\r\n f8b[0] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy;\r\n\r\n // float: ieee754\r\n })(); else (function() {\r\n\r\n function writeFloat_ieee754(writeUint, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0)\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos);\r\n else if (isNaN(val))\r\n writeUint(2143289344, buf, pos);\r\n else if (val > 3.4028234663852886e+38) // +-Infinity\r\n writeUint((sign << 31 | 2139095040) >>> 0, buf, pos);\r\n else if (val < 1.1754943508222875e-38) // denormal\r\n writeUint((sign << 31 | Math.round(val / 1.401298464324817e-45)) >>> 0, buf, pos);\r\n else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2),\r\n mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607;\r\n writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);\r\n }\r\n }\r\n\r\n exports.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE);\r\n exports.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE);\r\n\r\n function readFloat_ieee754(readUint, buf, pos) {\r\n var uint = readUint(buf, pos),\r\n sign = (uint >> 31) * 2 + 1,\r\n exponent = uint >>> 23 & 255,\r\n mantissa = uint & 8388607;\r\n return exponent === 255\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 1.401298464324817e-45 * mantissa\r\n : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);\r\n }\r\n\r\n exports.readFloatLE = readFloat_ieee754.bind(null, readUintLE);\r\n exports.readFloatBE = readFloat_ieee754.bind(null, readUintBE);\r\n\r\n })();\r\n\r\n // double: typed array\r\n if (typeof Float64Array !== \"undefined\") (function() {\r\n\r\n var f64 = new Float64Array([-0]),\r\n f8b = new Uint8Array(f64.buffer),\r\n le = f8b[7] === 128;\r\n\r\n function writeDouble_f64_cpy(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n buf[pos + 4] = f8b[4];\r\n buf[pos + 5] = f8b[5];\r\n buf[pos + 6] = f8b[6];\r\n buf[pos + 7] = f8b[7];\r\n }\r\n\r\n function writeDouble_f64_rev(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[7];\r\n buf[pos + 1] = f8b[6];\r\n buf[pos + 2] = f8b[5];\r\n buf[pos + 3] = f8b[4];\r\n buf[pos + 4] = f8b[3];\r\n buf[pos + 5] = f8b[2];\r\n buf[pos + 6] = f8b[1];\r\n buf[pos + 7] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy;\r\n\r\n function readDouble_f64_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n f8b[4] = buf[pos + 4];\r\n f8b[5] = buf[pos + 5];\r\n f8b[6] = buf[pos + 6];\r\n f8b[7] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n function readDouble_f64_rev(buf, pos) {\r\n f8b[7] = buf[pos ];\r\n f8b[6] = buf[pos + 1];\r\n f8b[5] = buf[pos + 2];\r\n f8b[4] = buf[pos + 3];\r\n f8b[3] = buf[pos + 4];\r\n f8b[2] = buf[pos + 5];\r\n f8b[1] = buf[pos + 6];\r\n f8b[0] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy;\r\n\r\n // double: ieee754\r\n })(); else (function() {\r\n\r\n function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos + off1);\r\n } else if (isNaN(val)) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(2146959360, buf, pos + off1);\r\n } else if (val > 1.7976931348623157e+308) { // +-Infinity\r\n writeUint(0, buf, pos + off0);\r\n writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1);\r\n } else {\r\n var mantissa;\r\n if (val < 2.2250738585072014e-308) { // denormal\r\n mantissa = val / 5e-324;\r\n writeUint(mantissa >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1);\r\n } else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2);\r\n if (exponent === 1024)\r\n exponent = 1023;\r\n mantissa = val * Math.pow(2, -exponent);\r\n writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1);\r\n }\r\n }\r\n }\r\n\r\n exports.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4);\r\n exports.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0);\r\n\r\n function readDouble_ieee754(readUint, off0, off1, buf, pos) {\r\n var lo = readUint(buf, pos + off0),\r\n hi = readUint(buf, pos + off1);\r\n var sign = (hi >> 31) * 2 + 1,\r\n exponent = hi >>> 20 & 2047,\r\n mantissa = 4294967296 * (hi & 1048575) + lo;\r\n return exponent === 2047\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 5e-324 * mantissa\r\n : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);\r\n }\r\n\r\n exports.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4);\r\n exports.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0);\r\n\r\n })();\r\n\r\n return exports;\r\n}\r\n\r\n// uint helpers\r\n\r\nfunction writeUintLE(val, buf, pos) {\r\n buf[pos ] = val & 255;\r\n buf[pos + 1] = val >>> 8 & 255;\r\n buf[pos + 2] = val >>> 16 & 255;\r\n buf[pos + 3] = val >>> 24;\r\n}\r\n\r\nfunction writeUintBE(val, buf, pos) {\r\n buf[pos ] = val >>> 24;\r\n buf[pos + 1] = val >>> 16 & 255;\r\n buf[pos + 2] = val >>> 8 & 255;\r\n buf[pos + 3] = val & 255;\r\n}\r\n\r\nfunction readUintLE(buf, pos) {\r\n return (buf[pos ]\r\n | buf[pos + 1] << 8\r\n | buf[pos + 2] << 16\r\n | buf[pos + 3] << 24) >>> 0;\r\n}\r\n\r\nfunction readUintBE(buf, pos) {\r\n return (buf[pos ] << 24\r\n | buf[pos + 1] << 16\r\n | buf[pos + 2] << 8\r\n | buf[pos + 3]) >>> 0;\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal UTF8 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar utf8 = exports;\r\n\r\n/**\r\n * Calculates the UTF8 byte length of a string.\r\n * @param {string} string String\r\n * @returns {number} Byte length\r\n */\r\nutf8.length = function utf8_length(string) {\r\n var len = 0,\r\n c = 0;\r\n for (var i = 0; i < string.length; ++i) {\r\n c = string.charCodeAt(i);\r\n if (c < 128)\r\n len += 1;\r\n else if (c < 2048)\r\n len += 2;\r\n else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\r\n ++i;\r\n len += 4;\r\n } else\r\n len += 3;\r\n }\r\n return len;\r\n};\r\n\r\n/**\r\n * Reads UTF8 bytes as a string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} String read\r\n */\r\nutf8.read = function utf8_read(buffer, start, end) {\r\n var len = end - start;\r\n if (len < 1)\r\n return \"\";\r\n var parts = null,\r\n chunk = [],\r\n i = 0, // char offset\r\n t; // temporary\r\n while (start < end) {\r\n t = buffer[start++];\r\n if (t < 128)\r\n chunk[i++] = t;\r\n else if (t > 191 && t < 224)\r\n chunk[i++] = (t & 31) << 6 | buffer[start++] & 63;\r\n else if (t > 239 && t < 365) {\r\n t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 0x10000;\r\n chunk[i++] = 0xD800 + (t >> 10);\r\n chunk[i++] = 0xDC00 + (t & 1023);\r\n } else\r\n chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63;\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\n/**\r\n * Writes a string as UTF8 bytes.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Bytes written\r\n */\r\nutf8.write = function utf8_write(string, buffer, offset) {\r\n var start = offset,\r\n c1, // character 1\r\n c2; // character 2\r\n for (var i = 0; i < string.length; ++i) {\r\n c1 = string.charCodeAt(i);\r\n if (c1 < 128) {\r\n buffer[offset++] = c1;\r\n } else if (c1 < 2048) {\r\n buffer[offset++] = c1 >> 6 | 192;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\r\n c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF);\r\n ++i;\r\n buffer[offset++] = c1 >> 18 | 240;\r\n buffer[offset++] = c1 >> 12 & 63 | 128;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else {\r\n buffer[offset++] = c1 >> 12 | 224;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n }\r\n }\r\n return offset - start;\r\n};\r\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ChainDefinition } from \"./rpc/clients/config\";\n\n/** Default number of accounts to derive in HD wallets */\nexport const DEFAULT_NUM_ACCOUNTS: number = 1;\n\n/** Rialo mainnet RPC URL */\nexport const URL_MAINNET: string = \"https://mainnet.rialo.io:4101\";\n\n/** Rialo testnet RPC URL */\nexport const URL_TESTNET: string = \"https://testnet.rialo.io:4101\";\n\n/** Rialo devnet RPC URL */\nexport const URL_DEVNET: string = \"https://devnet.rialo.io:4101\";\n\n/** Rialo localnet RPC URL */\nexport const URL_LOCALNET: string = \"http://localhost:4104\";\n\nexport const RIALO_MAINNET_CHAIN: ChainDefinition = {\n\tid: \"rialo:mainnet\",\n\tname: \"Mainnet\",\n\trpcUrl: URL_MAINNET,\n};\n\nexport const RIALO_TESTNET_CHAIN: ChainDefinition = {\n\tid: \"rialo:testnet\",\n\tname: \"Testnet\",\n\trpcUrl: URL_TESTNET,\n};\n\nexport const RIALO_DEVNET_CHAIN: ChainDefinition = {\n\tid: \"rialo:devnet\",\n\tname: \"Devnet\",\n\trpcUrl: URL_DEVNET,\n};\n\nexport const RIALO_LOCALNET_CHAIN: ChainDefinition = {\n\tid: \"rialo:localnet\",\n\tname: \"Localhost\",\n\trpcUrl: URL_LOCALNET,\n};\n\n/** System program ID */\nexport const SYSTEM_PROGRAM_ID: string = \"11111111111111111111111111111111\";\n\n/** Base derivation path for Rialo wallets (BIP44 coin type 756) */\n/** Coin type 756 follows the telephone keypad convention: R=7, L=5, O=6 */\nexport const BASE_DERIVATION_PATH: string = \"m/44'/756'/\";\n\nexport const KELVIN_PER_RLO: number = 1_000_000_000;\n\nexport const PUBLIC_KEY_LENGTH: number = 32;\n\nexport const SECRET_KEY_LENGTH: number = 32;\n\nexport const SIGNATURE_LENGTH: number = 64;\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Error codes for cryptographic operations.\n */\nexport enum CryptoErrorCode {\n\tINVALID_KEY_LENGTH = \"INVALID_KEY_LENGTH\",\n\tINVALID_SIGNATURE = \"INVALID_SIGNATURE\",\n\tINVALID_PUBLIC_KEY = \"INVALID_PUBLIC_KEY\",\n\tINVALID_BLOCKHASH = \"INVALID_BLOCKHASH\",\n\tINVALID_MNEMONIC = \"INVALID_MNEMONIC\",\n\tKEY_DERIVATION_FAILED = \"KEY_DERIVATION_FAILED\",\n\tKEYPAIR_DISPOSED = \"KEYPAIR_DISPOSED\",\n\tMAX_SEED_LENGTH_EXCEEDED = \"MAX_SEED_LENGTH_EXCEEDED\",\n\tMAX_SEEDS_EXCEEDED = \"MAX_SEEDS_EXCEEDED\",\n\tINVALID_SEEDS_ON_CURVE = \"INVALID_SEEDS_ON_CURVE\",\n\tNO_VIABLE_BUMP_SEED = \"NO_VIABLE_BUMP_SEED\",\n\tINVALID_SEED = \"INVALID_SEED\",\n}\n\n/**\n * Error class for cryptographic operations.\n *\n * Provides structured error information with error codes and contextual details\n * for better debugging and error handling.\n */\nexport class CryptoError extends Error {\n\tpublic readonly code: CryptoErrorCode;\n\tpublic readonly details?: Record<string, unknown>;\n\n\tconstructor(\n\t\tcode: CryptoErrorCode,\n\t\tmessage: string,\n\t\tdetails?: Record<string, unknown>,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"CryptoError\";\n\t\tthis.code = code;\n\t\tthis.details = details;\n\t}\n\n\tstatic invalidKeyLength(expected: number, actual: number): CryptoError {\n\t\treturn new CryptoError(\n\t\t\tCryptoErrorCode.INVALID_KEY_LENGTH,\n\t\t\t`Invalid key length: expected ${expected} bytes, got ${actual} bytes`,\n\t\t\t{ expected, actual },\n\t\t);\n\t}\n\n\tstatic invalidMnemonic(reason?: string): CryptoError {\n\t\tconst message = reason\n\t\t\t? `Invalid mnemonic: ${reason}`\n\t\t\t: \"Invalid mnemonic phrase. Check that all words are valid and in the correct order.\";\n\t\treturn new CryptoError(CryptoErrorCode.INVALID_MNEMONIC, message);\n\t}\n\n\tstatic keyDerivationFailed(path: string, cause?: Error): CryptoError {\n\t\treturn new CryptoError(\n\t\t\tCryptoErrorCode.KEY_DERIVATION_FAILED,\n\t\t\t`Failed to derive key at path: ${path}`,\n\t\t\t{ path, cause: cause?.message },\n\t\t);\n\t}\n\n\tstatic keypairDisposed(): CryptoError {\n\t\treturn new CryptoError(\n\t\t\tCryptoErrorCode.KEYPAIR_DISPOSED,\n\t\t\t\"Cannot use disposed keypair. The private key has been securely erased from memory.\",\n\t\t);\n\t}\n}\n","/*! noble-ed25519 - MIT License (c) 2019 Paul Miller (paulmillr.com) */\n/**\n * 5KB JS implementation of ed25519 EdDSA signatures.\n * Compliant with RFC8032, FIPS 186-5 & ZIP215.\n * @module\n * @example\n * ```js\nimport * as ed from '@noble/ed25519';\n(async () => {\n const secretKey = ed.utils.randomSecretKey();\n const message = Uint8Array.from([0xab, 0xbc, 0xcd, 0xde]);\n const pubKey = await ed.getPublicKeyAsync(secretKey); // Sync methods are also present\n const signature = await ed.signAsync(message, secretKey);\n const isValid = await ed.verifyAsync(signature, message, pubKey);\n})();\n```\n */\n/**\n * Curve params. ed25519 is twisted edwards curve. Equation is −x² + y² = -a + dx²y².\n * * P = `2n**255n - 19n` // field over which calculations are done\n * * N = `2n**252n + 27742317777372353535851937790883648493n` // group order, amount of curve points\n * * h = 8 // cofactor\n * * a = `Fp.create(BigInt(-1))` // equation param\n * * d = -121665/121666 a.k.a. `Fp.neg(121665 * Fp.inv(121666))` // equation param\n * * Gx, Gy are coordinates of Generator / base point\n */\nconst ed25519_CURVE = {\n p: 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedn,\n n: 0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3edn,\n h: 8n,\n a: 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecn,\n d: 0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3n,\n Gx: 0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51an,\n Gy: 0x6666666666666666666666666666666666666666666666666666666666666658n,\n};\nconst { p: P, n: N, Gx, Gy, a: _a, d: _d, h } = ed25519_CURVE;\nconst L = 32; // field / group byte length\nconst L2 = 64;\n// Helpers and Precomputes sections are reused between libraries\n// ## Helpers\n// ----------\nconst captureTrace = (...args) => {\n if ('captureStackTrace' in Error && typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(...args);\n }\n};\nconst err = (message = '') => {\n const e = new Error(message);\n captureTrace(e, err);\n throw e;\n};\nconst isBig = (n) => typeof n === 'bigint'; // is big integer\nconst isStr = (s) => typeof s === 'string'; // is string\nconst isBytes = (a) => a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n/** Asserts something is Uint8Array. */\nconst abytes = (value, length, title = '') => {\n const bytes = isBytes(value);\n const len = value?.length;\n const needsLen = length !== undefined;\n if (!bytes || (needsLen && len !== length)) {\n const prefix = title && `\"${title}\" `;\n const ofLen = needsLen ? ` of length ${length}` : '';\n const got = bytes ? `length=${len}` : `type=${typeof value}`;\n err(prefix + 'expected Uint8Array' + ofLen + ', got ' + got);\n }\n return value;\n};\n/** create Uint8Array */\nconst u8n = (len) => new Uint8Array(len);\nconst u8fr = (buf) => Uint8Array.from(buf);\nconst padh = (n, pad) => n.toString(16).padStart(pad, '0');\nconst bytesToHex = (b) => Array.from(abytes(b))\n .map((e) => padh(e, 2))\n .join('');\nconst C = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 }; // ASCII characters\nconst _ch = (ch) => {\n if (ch >= C._0 && ch <= C._9)\n return ch - C._0; // '2' => 50-48\n if (ch >= C.A && ch <= C.F)\n return ch - (C.A - 10); // 'B' => 66-(65-10)\n if (ch >= C.a && ch <= C.f)\n return ch - (C.a - 10); // 'b' => 98-(97-10)\n return;\n};\nconst hexToBytes = (hex) => {\n const e = 'hex invalid';\n if (!isStr(hex))\n return err(e);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n return err(e);\n const array = u8n(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n // treat each char as ASCII\n const n1 = _ch(hex.charCodeAt(hi)); // parse first char, multiply it by 16\n const n2 = _ch(hex.charCodeAt(hi + 1)); // parse second char\n if (n1 === undefined || n2 === undefined)\n return err(e);\n array[ai] = n1 * 16 + n2; // example: 'A9' => 10*16 + 9\n }\n return array;\n};\nconst cr = () => globalThis?.crypto; // WebCrypto is available in all modern environments\nconst subtle = () => cr()?.subtle ?? err('crypto.subtle must be defined, consider polyfill');\n// prettier-ignore\nconst concatBytes = (...arrs) => {\n const r = u8n(arrs.reduce((sum, a) => sum + abytes(a).length, 0)); // create u8a of summed length\n let pad = 0; // walk through each array,\n arrs.forEach(a => { r.set(a, pad); pad += a.length; }); // ensure they have proper type\n return r;\n};\n/** WebCrypto OS-level CSPRNG (random number generator). Will throw when not available. */\nconst randomBytes = (len = L) => {\n const c = cr();\n return c.getRandomValues(u8n(len));\n};\nconst big = BigInt;\nconst assertRange = (n, min, max, msg = 'bad number: out of range') => (isBig(n) && min <= n && n < max ? n : err(msg));\n/** modular division */\nconst M = (a, b = P) => {\n const r = a % b;\n return r >= 0n ? r : b + r;\n};\nconst modN = (a) => M(a, N);\n/** Modular inversion using euclidean GCD (non-CT). No negative exponent for now. */\n// prettier-ignore\nconst invert = (num, md) => {\n if (num === 0n || md <= 0n)\n err('no inverse n=' + num + ' mod=' + md);\n let a = M(num, md), b = md, x = 0n, y = 1n, u = 1n, v = 0n;\n while (a !== 0n) {\n const q = b / a, r = b % a;\n const m = x - u * q, n = y - v * q;\n b = a, a = r, x = u, y = v, u = m, v = n;\n }\n return b === 1n ? M(x, md) : err('no inverse'); // b is gcd at this point\n};\nconst callHash = (name) => {\n // @ts-ignore\n const fn = hashes[name];\n if (typeof fn !== 'function')\n err('hashes.' + name + ' not set');\n return fn;\n};\nconst hash = (msg) => callHash('sha512')(msg);\nconst apoint = (p) => (p instanceof Point ? p : err('Point expected'));\n// ## End of Helpers\n// -----------------\nconst B256 = 2n ** 256n;\n/** Point in XYZT extended coordinates. */\nclass Point {\n static BASE;\n static ZERO;\n X;\n Y;\n Z;\n T;\n constructor(X, Y, Z, T) {\n const max = B256;\n this.X = assertRange(X, 0n, max);\n this.Y = assertRange(Y, 0n, max);\n this.Z = assertRange(Z, 1n, max);\n this.T = assertRange(T, 0n, max);\n Object.freeze(this);\n }\n static CURVE() {\n return ed25519_CURVE;\n }\n static fromAffine(p) {\n return new Point(p.x, p.y, 1n, M(p.x * p.y));\n }\n /** RFC8032 5.1.3: Uint8Array to Point. */\n static fromBytes(hex, zip215 = false) {\n const d = _d;\n // Copy array to not mess it up.\n const normed = u8fr(abytes(hex, L));\n // adjust first LE byte = last BE byte\n const lastByte = hex[31];\n normed[31] = lastByte & ~0x80;\n const y = bytesToNumLE(normed);\n // zip215=true: 0 <= y < 2^256\n // zip215=false, RFC8032: 0 <= y < 2^255-19\n const max = zip215 ? B256 : P;\n assertRange(y, 0n, max);\n const y2 = M(y * y); // y²\n const u = M(y2 - 1n); // u=y²-1\n const v = M(d * y2 + 1n); // v=dy²+1\n let { isValid, value: x } = uvRatio(u, v); // (uv³)(uv⁷)^(p-5)/8; square root\n if (!isValid)\n err('bad point: y not sqrt'); // not square root: bad point\n const isXOdd = (x & 1n) === 1n; // adjust sign of x coordinate\n const isLastByteOdd = (lastByte & 0x80) !== 0; // x_0, last bit\n if (!zip215 && x === 0n && isLastByteOdd)\n err('bad point: x==0, isLastByteOdd'); // x=0, x_0=1\n if (isLastByteOdd !== isXOdd)\n x = M(-x);\n return new Point(x, y, 1n, M(x * y)); // Z=1, T=xy\n }\n static fromHex(hex, zip215) {\n return Point.fromBytes(hexToBytes(hex), zip215);\n }\n get x() {\n return this.toAffine().x;\n }\n get y() {\n return this.toAffine().y;\n }\n /** Checks if the point is valid and on-curve. */\n assertValidity() {\n const a = _a;\n const d = _d;\n const p = this;\n if (p.is0())\n return err('bad point: ZERO'); // TODO: optimize, with vars below?\n // Equation in affine coordinates: ax² + y² = 1 + dx²y²\n // Equation in projective coordinates (X/Z, Y/Z, Z): (aX² + Y²)Z² = Z⁴ + dX²Y²\n const { X, Y, Z, T } = p;\n const X2 = M(X * X); // X²\n const Y2 = M(Y * Y); // Y²\n const Z2 = M(Z * Z); // Z²\n const Z4 = M(Z2 * Z2); // Z⁴\n const aX2 = M(X2 * a); // aX²\n const left = M(Z2 * M(aX2 + Y2)); // (aX² + Y²)Z²\n const right = M(Z4 + M(d * M(X2 * Y2))); // Z⁴ + dX²Y²\n if (left !== right)\n return err('bad point: equation left != right (1)');\n // In Extended coordinates we also have T, which is x*y=T/Z: check X*Y == Z*T\n const XY = M(X * Y);\n const ZT = M(Z * T);\n if (XY !== ZT)\n return err('bad point: equation left != right (2)');\n return this;\n }\n /** Equality check: compare points P&Q. */\n equals(other) {\n const { X: X1, Y: Y1, Z: Z1 } = this;\n const { X: X2, Y: Y2, Z: Z2 } = apoint(other); // checks class equality\n const X1Z2 = M(X1 * Z2);\n const X2Z1 = M(X2 * Z1);\n const Y1Z2 = M(Y1 * Z2);\n const Y2Z1 = M(Y2 * Z1);\n return X1Z2 === X2Z1 && Y1Z2 === Y2Z1;\n }\n is0() {\n return this.equals(I);\n }\n /** Flip point over y coordinate. */\n negate() {\n return new Point(M(-this.X), this.Y, this.Z, M(-this.T));\n }\n /** Point doubling. Complete formula. Cost: `4M + 4S + 1*a + 6add + 1*2`. */\n double() {\n const { X: X1, Y: Y1, Z: Z1 } = this;\n const a = _a;\n // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended.html#doubling-dbl-2008-hwcd\n const A = M(X1 * X1);\n const B = M(Y1 * Y1);\n const C = M(2n * M(Z1 * Z1));\n const D = M(a * A);\n const x1y1 = X1 + Y1;\n const E = M(M(x1y1 * x1y1) - A - B);\n const G = D + B;\n const F = G - C;\n const H = D - B;\n const X3 = M(E * F);\n const Y3 = M(G * H);\n const T3 = M(E * H);\n const Z3 = M(F * G);\n return new Point(X3, Y3, Z3, T3);\n }\n /** Point addition. Complete formula. Cost: `8M + 1*k + 8add + 1*2`. */\n add(other) {\n const { X: X1, Y: Y1, Z: Z1, T: T1 } = this;\n const { X: X2, Y: Y2, Z: Z2, T: T2 } = apoint(other); // doesn't check if other on-curve\n const a = _a;\n const d = _d;\n // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html#addition-add-2008-hwcd-3\n const A = M(X1 * X2);\n const B = M(Y1 * Y2);\n const C = M(T1 * d * T2);\n const D = M(Z1 * Z2);\n const E = M((X1 + Y1) * (X2 + Y2) - A - B);\n const F = M(D - C);\n const G = M(D + C);\n const H = M(B - a * A);\n const X3 = M(E * F);\n const Y3 = M(G * H);\n const T3 = M(E * H);\n const Z3 = M(F * G);\n return new Point(X3, Y3, Z3, T3);\n }\n subtract(other) {\n return this.add(apoint(other).negate());\n }\n /**\n * Point-by-scalar multiplication. Scalar must be in range 1 <= n < CURVE.n.\n * Uses {@link wNAF} for base point.\n * Uses fake point to mitigate side-channel leakage.\n * @param n scalar by which point is multiplied\n * @param safe safe mode guards against timing attacks; unsafe mode is faster\n */\n multiply(n, safe = true) {\n if (!safe && (n === 0n || this.is0()))\n return I;\n assertRange(n, 1n, N);\n if (n === 1n)\n return this;\n if (this.equals(G))\n return wNAF(n).p;\n // init result point & fake point\n let p = I;\n let f = G;\n for (let d = this; n > 0n; d = d.double(), n >>= 1n) {\n // if bit is present, add to point\n // if not present, add to fake, for timing safety\n if (n & 1n)\n p = p.add(d);\n else if (safe)\n f = f.add(d);\n }\n return p;\n }\n multiplyUnsafe(scalar) {\n return this.multiply(scalar, false);\n }\n /** Convert point to 2d xy affine point. (X, Y, Z) ∋ (x=X/Z, y=Y/Z) */\n toAffine() {\n const { X, Y, Z } = this;\n // fast-paths for ZERO point OR Z=1\n if (this.equals(I))\n return { x: 0n, y: 1n };\n const iz = invert(Z, P);\n // (Z * Z^-1) must be 1, otherwise bad math\n if (M(Z * iz) !== 1n)\n err('invalid inverse');\n // x = X*Z^-1; y = Y*Z^-1\n const x = M(X * iz);\n const y = M(Y * iz);\n return { x, y };\n }\n toBytes() {\n const { x, y } = this.assertValidity().toAffine();\n const b = numTo32bLE(y);\n // store sign in first LE byte\n b[31] |= x & 1n ? 0x80 : 0;\n return b;\n }\n toHex() {\n return bytesToHex(this.toBytes());\n }\n clearCofactor() {\n return this.multiply(big(h), false);\n }\n isSmallOrder() {\n return this.clearCofactor().is0();\n }\n isTorsionFree() {\n // Multiply by big number N. We can't `mul(N)` because of checks. Instead, we `mul(N/2)*2+1`\n let p = this.multiply(N / 2n, false).double();\n if (N % 2n)\n p = p.add(this);\n return p.is0();\n }\n}\n/** Generator / base point */\nconst G = new Point(Gx, Gy, 1n, M(Gx * Gy));\n/** Identity / zero point */\nconst I = new Point(0n, 1n, 1n, 0n);\n// Static aliases\nPoint.BASE = G;\nPoint.ZERO = I;\nconst numTo32bLE = (num) => hexToBytes(padh(assertRange(num, 0n, B256), L2)).reverse();\nconst bytesToNumLE = (b) => big('0x' + bytesToHex(u8fr(abytes(b)).reverse()));\nconst pow2 = (x, power) => {\n // pow2(x, 4) == x^(2^4)\n let r = x;\n while (power-- > 0n) {\n r *= r;\n r %= P;\n }\n return r;\n};\n// prettier-ignore\nconst pow_2_252_3 = (x) => {\n const x2 = (x * x) % P; // x^2, bits 1\n const b2 = (x2 * x) % P; // x^3, bits 11\n const b4 = (pow2(b2, 2n) * b2) % P; // x^(2^4-1), bits 1111\n const b5 = (pow2(b4, 1n) * x) % P; // x^(2^5-1), bits 11111\n const b10 = (pow2(b5, 5n) * b5) % P; // x^(2^10)\n const b20 = (pow2(b10, 10n) * b10) % P; // x^(2^20)\n const b40 = (pow2(b20, 20n) * b20) % P; // x^(2^40)\n const b80 = (pow2(b40, 40n) * b40) % P; // x^(2^80)\n const b160 = (pow2(b80, 80n) * b80) % P; // x^(2^160)\n const b240 = (pow2(b160, 80n) * b80) % P; // x^(2^240)\n const b250 = (pow2(b240, 10n) * b10) % P; // x^(2^250)\n const pow_p_5_8 = (pow2(b250, 2n) * x) % P; // < To pow to (p+3)/8, multiply it by x.\n return { pow_p_5_8, b2 };\n};\nconst RM1 = 0x2b8324804fc1df0b2b4d00993dfbd7a72f431806ad2fe478c4ee1b274a0ea0b0n; // √-1\n// for sqrt comp\n// prettier-ignore\nconst uvRatio = (u, v) => {\n const v3 = M(v * v * v); // v³\n const v7 = M(v3 * v3 * v); // v⁷\n const pow = pow_2_252_3(u * v7).pow_p_5_8; // (uv⁷)^(p-5)/8\n let x = M(u * v3 * pow); // (uv³)(uv⁷)^(p-5)/8\n const vx2 = M(v * x * x); // vx²\n const root1 = x; // First root candidate\n const root2 = M(x * RM1); // Second root candidate; RM1 is √-1\n const useRoot1 = vx2 === u; // If vx² = u (mod p), x is a square root\n const useRoot2 = vx2 === M(-u); // If vx² = -u, set x <-- x * 2^((p-1)/4)\n const noRoot = vx2 === M(-u * RM1); // There is no valid root, vx² = -u√-1\n if (useRoot1)\n x = root1;\n if (useRoot2 || noRoot)\n x = root2; // We return root2 anyway, for const-time\n if ((M(x) & 1n) === 1n)\n x = M(-x); // edIsNegative\n return { isValid: useRoot1 || useRoot2, value: x };\n};\n// N == L, just weird naming\nconst modL_LE = (hash) => modN(bytesToNumLE(hash)); // modulo L; but little-endian\n/** hashes.sha512 should conform to the interface. */\n// TODO: rename\nconst sha512a = (...m) => hashes.sha512Async(concatBytes(...m)); // Async SHA512\nconst sha512s = (...m) => callHash('sha512')(concatBytes(...m));\n// RFC8032 5.1.5\nconst hash2extK = (hashed) => {\n // slice creates a copy, unlike subarray\n const head = hashed.slice(0, L);\n head[0] &= 248; // Clamp bits: 0b1111_1000\n head[31] &= 127; // 0b0111_1111\n head[31] |= 64; // 0b0100_0000\n const prefix = hashed.slice(L, L2); // secret key \"prefix\"\n const scalar = modL_LE(head); // modular division over curve order\n const point = G.multiply(scalar); // public key point\n const pointBytes = point.toBytes(); // point serialized to Uint8Array\n return { head, prefix, scalar, point, pointBytes };\n};\n// RFC8032 5.1.5; getPublicKey async, sync. Hash priv key and extract point.\nconst getExtendedPublicKeyAsync = (secretKey) => sha512a(abytes(secretKey, L)).then(hash2extK);\nconst getExtendedPublicKey = (secretKey) => hash2extK(sha512s(abytes(secretKey, L)));\n/** Creates 32-byte ed25519 public key from 32-byte secret key. Async. */\nconst getPublicKeyAsync = (secretKey) => getExtendedPublicKeyAsync(secretKey).then((p) => p.pointBytes);\n/** Creates 32-byte ed25519 public key from 32-byte secret key. To use, set `hashes.sha512` first. */\nconst getPublicKey = (priv) => getExtendedPublicKey(priv).pointBytes;\nconst hashFinishA = (res) => sha512a(res.hashable).then(res.finish);\nconst hashFinishS = (res) => res.finish(sha512s(res.hashable));\n// Code, shared between sync & async sign\nconst _sign = (e, rBytes, msg) => {\n const { pointBytes: P, scalar: s } = e;\n const r = modL_LE(rBytes); // r was created outside, reduce it modulo L\n const R = G.multiply(r).toBytes(); // R = [r]B\n const hashable = concatBytes(R, P, msg); // dom2(F, C) || R || A || PH(M)\n const finish = (hashed) => {\n // k = SHA512(dom2(F, C) || R || A || PH(M))\n const S = modN(r + modL_LE(hashed) * s); // S = (r + k * s) mod L; 0 <= s < l\n return abytes(concatBytes(R, numTo32bLE(S)), L2); // 64-byte sig: 32b R.x + 32b LE(S)\n };\n return { hashable, finish };\n};\n/**\n * Signs message using secret key. Async.\n * Follows RFC8032 5.1.6.\n */\nconst signAsync = async (message, secretKey) => {\n const m = abytes(message);\n const e = await getExtendedPublicKeyAsync(secretKey);\n const rBytes = await sha512a(e.prefix, m); // r = SHA512(dom2(F, C) || prefix || PH(M))\n return hashFinishA(_sign(e, rBytes, m)); // gen R, k, S, then 64-byte signature\n};\n/**\n * Signs message using secret key. To use, set `hashes.sha512` first.\n * Follows RFC8032 5.1.6.\n */\nconst sign = (message, secretKey) => {\n const m = abytes(message);\n const e = getExtendedPublicKey(secretKey);\n const rBytes = sha512s(e.prefix, m); // r = SHA512(dom2(F, C) || prefix || PH(M))\n return hashFinishS(_sign(e, rBytes, m)); // gen R, k, S, then 64-byte signature\n};\nconst defaultVerifyOpts = { zip215: true };\nconst _verify = (sig, msg, pub, opts = defaultVerifyOpts) => {\n sig = abytes(sig, L2); // Signature hex str/Bytes, must be 64 bytes\n msg = abytes(msg); // Message hex str/Bytes\n pub = abytes(pub, L);\n const { zip215 } = opts; // switch between zip215 and rfc8032 verif\n let A;\n let R;\n let s;\n let SB;\n let hashable = Uint8Array.of();\n try {\n A = Point.fromBytes(pub, zip215); // public key A decoded\n R = Point.fromBytes(sig.slice(0, L), zip215); // 0 <= R < 2^256: ZIP215 R can be >= P\n s = bytesToNumLE(sig.slice(L, L2)); // Decode second half as an integer S\n SB = G.multiply(s, false); // in the range 0 <= s < L\n hashable = concatBytes(R.toBytes(), A.toBytes(), msg); // dom2(F, C) || R || A || PH(M)\n }\n catch (error) { }\n const finish = (hashed) => {\n // k = SHA512(dom2(F, C) || R || A || PH(M))\n if (SB == null)\n return false; // false if try-catch catched an error\n if (!zip215 && A.isSmallOrder())\n return false; // false for SBS: Strongly Binding Signature\n const k = modL_LE(hashed); // decode in little-endian, modulo L\n const RkA = R.add(A.multiply(k, false)); // [8]R + [8][k]A'\n return RkA.add(SB.negate()).clearCofactor().is0(); // [8][S]B = [8]R + [8][k]A'\n };\n return { hashable, finish };\n};\n/** Verifies signature on message and public key. Async. Follows RFC8032 5.1.7. */\nconst verifyAsync = async (signature, message, publicKey, opts = defaultVerifyOpts) => hashFinishA(_verify(signature, message, publicKey, opts));\n/** Verifies signature on message and public key. To use, set `hashes.sha512` first. Follows RFC8032 5.1.7. */\nconst verify = (signature, message, publicKey, opts = defaultVerifyOpts) => hashFinishS(_verify(signature, message, publicKey, opts));\n/** Math, hex, byte helpers. Not in `utils` because utils share API with noble-curves. */\nconst etc = {\n bytesToHex: bytesToHex,\n hexToBytes: hexToBytes,\n concatBytes: concatBytes,\n mod: M,\n invert: invert,\n randomBytes: randomBytes,\n};\nconst hashes = {\n sha512Async: async (message) => {\n const s = subtle();\n const m = concatBytes(message);\n return u8n(await s.digest('SHA-512', m.buffer));\n },\n sha512: undefined,\n};\n// FIPS 186 B.4.1 compliant key generation produces private keys\n// with modulo bias being neglible. takes >N+16 bytes, returns (hash mod n-1)+1\nconst randomSecretKey = (seed = randomBytes(L)) => seed;\nconst keygen = (seed) => {\n const secretKey = randomSecretKey(seed);\n const publicKey = getPublicKey(secretKey);\n return { secretKey, publicKey };\n};\nconst keygenAsync = async (seed) => {\n const secretKey = randomSecretKey(seed);\n const publicKey = await getPublicKeyAsync(secretKey);\n return { secretKey, publicKey };\n};\n/** ed25519-specific key utilities. */\nconst utils = {\n getExtendedPublicKeyAsync: getExtendedPublicKeyAsync,\n getExtendedPublicKey: getExtendedPublicKey,\n randomSecretKey: randomSecretKey,\n};\n// ## Precomputes\n// --------------\nconst W = 8; // W is window size\nconst scalarBits = 256;\nconst pwindows = Math.ceil(scalarBits / W) + 1; // 33 for W=8, NOT 32 - see wNAF loop\nconst pwindowSize = 2 ** (W - 1); // 128 for W=8\nconst precompute = () => {\n const points = [];\n let p = G;\n let b = p;\n for (let w = 0; w < pwindows; w++) {\n b = p;\n points.push(b);\n for (let i = 1; i < pwindowSize; i++) {\n b = b.add(p);\n points.push(b);\n } // i=1, bc we skip 0\n p = b.double();\n }\n return points;\n};\nlet Gpows = undefined; // precomputes for base point G\n// const-time negate\nconst ctneg = (cnd, p) => {\n const n = p.negate();\n return cnd ? n : p;\n};\n/**\n * Precomputes give 12x faster getPublicKey(), 10x sign(), 2x verify() by\n * caching multiples of G (base point). Cache is stored in 32MB of RAM.\n * Any time `G.multiply` is done, precomputes are used.\n * Not used for getSharedSecret, which instead multiplies random pubkey `P.multiply`.\n *\n * w-ary non-adjacent form (wNAF) precomputation method is 10% slower than windowed method,\n * but takes 2x less RAM. RAM reduction is possible by utilizing `.subtract`.\n *\n * !! Precomputes can be disabled by commenting-out call of the wNAF() inside Point#multiply().\n */\nconst wNAF = (n) => {\n const comp = Gpows || (Gpows = precompute());\n let p = I;\n let f = G; // f must be G, or could become I in the end\n const pow_2_w = 2 ** W; // 256 for W=8\n const maxNum = pow_2_w; // 256 for W=8\n const mask = big(pow_2_w - 1); // 255 for W=8 == mask 0b11111111\n const shiftBy = big(W); // 8 for W=8\n for (let w = 0; w < pwindows; w++) {\n let wbits = Number(n & mask); // extract W bits.\n n >>= shiftBy; // shift number by W bits.\n // We use negative indexes to reduce size of precomputed table by 2x.\n // Instead of needing precomputes 0..256, we only calculate them for 0..128.\n // If an index > 128 is found, we do (256-index) - where 256 is next window.\n // Naive: index +127 => 127, +224 => 224\n // Optimized: index +127 => 127, +224 => 256-32\n if (wbits > pwindowSize) {\n wbits -= maxNum;\n n += 1n;\n }\n const off = w * pwindowSize;\n const offF = off; // offsets, evaluate both\n const offP = off + Math.abs(wbits) - 1;\n const isEven = w % 2 !== 0; // conditions, evaluate both\n const isNeg = wbits < 0;\n if (wbits === 0) {\n // off == I: can't add it. Adding random offF instead.\n f = f.add(ctneg(isEven, comp[offF])); // bits are 0: add garbage to fake point\n }\n else {\n p = p.add(ctneg(isNeg, comp[offP])); // bits are 1: add to result point\n }\n }\n if (n !== 0n)\n err('invalid wnaf');\n return { p, f }; // return both real and fake points for JIT\n};\n// !! Remove the export to easily use in REPL / browser console\nexport { etc, getPublicKey, getPublicKeyAsync, hash, hashes, keygen, keygenAsync, Point, sign, signAsync, utils, verify, verifyAsync, };\n","/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */\nexport function isBytes(a: unknown): a is Uint8Array {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n\n/** Asserts something is positive integer. */\nexport function anumber(n: number, title: string = ''): void {\n if (!Number.isSafeInteger(n) || n < 0) {\n const prefix = title && `\"${title}\" `;\n throw new Error(`${prefix}expected integer >0, got ${n}`);\n }\n}\n\n/** Asserts something is Uint8Array. */\nexport function abytes(value: Uint8Array, length?: number, title: string = ''): Uint8Array {\n const bytes = isBytes(value);\n const len = value?.length;\n const needsLen = length !== undefined;\n if (!bytes || (needsLen && len !== length)) {\n const prefix = title && `\"${title}\" `;\n const ofLen = needsLen ? ` of length ${length}` : '';\n const got = bytes ? `length=${len}` : `type=${typeof value}`;\n throw new Error(prefix + 'expected Uint8Array' + ofLen + ', got ' + got);\n }\n return value;\n}\n\n/** Asserts something is hash */\nexport function ahash(h: CHash): void {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new Error('Hash must wrapped by utils.createHasher');\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\n\n/** Asserts a hash instance has not been destroyed / finished */\nexport function aexists(instance: any, checkFinished = true): void {\n if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\n\n/** Asserts output is properly-sized byte array */\nexport function aoutput(out: any, instance: any): void {\n abytes(out, undefined, 'digestInto() output');\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('\"digestInto() output\" expected to be of length >=' + min);\n }\n}\n\n/** Generic type encompassing 8/16/32-byte arrays - but not 64-byte. */\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n Uint16Array | Int16Array | Uint32Array | Int32Array;\n\n/** Cast u8 / u16 / u32 to u8. */\nexport function u8(arr: TypedArray): Uint8Array {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** Cast u8 / u16 / u32 to u32. */\nexport function u32(arr: TypedArray): Uint32Array {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n\n/** Zeroize a byte array. Warning: JS provides no guarantees. */\nexport function clean(...arrays: TypedArray[]): void {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\n\n/** Create DataView of an array for easy byte-level manipulation. */\nexport function createView(arr: TypedArray): DataView {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** The rotate right (circular right shift) operation for uint32 */\nexport function rotr(word: number, shift: number): number {\n return (word << (32 - shift)) | (word >>> shift);\n}\n\n/** The rotate left (circular left shift) operation for uint32 */\nexport function rotl(word: number, shift: number): number {\n return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nexport const isLE: boolean = /* @__PURE__ */ (() =>\n new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n\n/** The byte swap operation for uint32 */\nexport function byteSwap(word: number): number {\n return (\n ((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff)\n );\n}\n/** Conditionally byte swap if on a big-endian platform */\nexport const swap8IfBE: (n: number) => number = isLE\n ? (n: number) => n\n : (n: number) => byteSwap(n);\n\n/** In place byte swap for Uint32Array */\nexport function byteSwap32(arr: Uint32Array): Uint32Array {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\n\nexport const swap32IfBE: (u: Uint32Array) => Uint32Array = isLE\n ? (u: Uint32Array) => u\n : byteSwap32;\n\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin: boolean = /* @__PURE__ */ (() =>\n // @ts-ignore\n typeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n i.toString(16).padStart(2, '0')\n);\n\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin) return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 } as const;\nfunction asciiToBase16(ch: number): number | undefined {\n if (ch >= asciis._0 && ch <= asciis._9) return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F) return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f) return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n // @ts-ignore\n if (hasHexBuiltin) return Uint8Array.fromHex(hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2) throw new Error('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * Call of async fn will return Promise, which will be fullfiled only on\n * next scheduler queue processing step and this is exactly what we need.\n */\nexport const nextTick = async (): Promise<void> => {};\n\n/** Returns control to thread each 'tick' ms to avoid blocking. */\nexport async function asyncLoop(\n iters: number,\n tick: number,\n cb: (i: number) => void\n): Promise<void> {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick) continue;\n await nextTick();\n ts += diff;\n }\n}\n\n// Global symbols, but ts doesn't see them: https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * Converts string to bytes using UTF8 encoding.\n * Built-in doesn't validate input to be string: we do the check.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n if (typeof str !== 'string') throw new Error('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\n/** KDFs can accept string or Uint8Array for user convenience. */\nexport type KDFInput = string | Uint8Array;\n\n/**\n * Helper for KDFs: consumes uint8array or string.\n * When string is passed, does utf8 decoding, using TextDecoder.\n */\nexport function kdfInputToBytes(data: KDFInput, errorTitle = ''): Uint8Array {\n if (typeof data === 'string') return utf8ToBytes(data);\n return abytes(data, undefined, errorTitle);\n}\n\n/** Copies several Uint8Arrays into one. */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\n\ntype EmptyObj = {};\n/** Merges default options and passed options. */\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n defaults: T1,\n opts?: T2\n): T1 & T2 {\n if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n throw new Error('options must be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged as T1 & T2;\n}\n\n/** Common interface for all hashes. */\nexport interface Hash<T> {\n blockLen: number; // Bytes per block\n outputLen: number; // Bytes in output\n update(buf: Uint8Array): this;\n digestInto(buf: Uint8Array): void;\n digest(): Uint8Array;\n destroy(): void;\n _cloneInto(to?: T): T;\n clone(): T;\n}\n\n/** PseudoRandom (number) Generator */\nexport interface PRG {\n addEntropy(seed: Uint8Array): void;\n randomBytes(length: number): Uint8Array;\n clean(): void;\n}\n\n/**\n * XOF: streaming API to read digest in chunks.\n * Same as 'squeeze' in keccak/k12 and 'seek' in blake3, but more generic name.\n * When hash used in XOF mode it is up to user to call '.destroy' afterwards, since we cannot\n * destroy state, next call can require more bytes.\n */\nexport type HashXOF<T extends Hash<T>> = Hash<T> & {\n xof(bytes: number): Uint8Array; // Read 'bytes' bytes from digest stream\n xofInto(buf: Uint8Array): Uint8Array; // read buf.length bytes from digest stream into buf\n};\n\n/** Hash constructor */\nexport type HasherCons<T, Opts = undefined> = Opts extends undefined ? () => T : (opts?: Opts) => T;\n/** Optional hash params. */\nexport type HashInfo = {\n oid?: Uint8Array; // DER encoded OID in bytes\n};\n/** Hash function */\nexport type CHash<T extends Hash<T> = Hash<any>, Opts = undefined> = {\n outputLen: number;\n blockLen: number;\n} & HashInfo &\n (Opts extends undefined\n ? {\n (msg: Uint8Array): Uint8Array;\n create(): T;\n }\n : {\n (msg: Uint8Array, opts?: Opts): Uint8Array;\n create(opts?: Opts): T;\n });\n/** XOF with output */\nexport type CHashXOF<T extends HashXOF<T> = HashXOF<any>, Opts = undefined> = CHash<T, Opts>;\n\n/** Creates function with outputLen, blockLen, create properties from a class constructor. */\nexport function createHasher<T extends Hash<T>, Opts = undefined>(\n hashCons: HasherCons<T, Opts>,\n info: HashInfo = {}\n): CHash<T, Opts> {\n const hashC: any = (msg: Uint8Array, opts?: Opts) => hashCons(opts).update(msg).digest();\n const tmp = hashCons(undefined);\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts?: Opts) => hashCons(opts);\n Object.assign(hashC, info);\n return Object.freeze(hashC);\n}\n\n/** Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`. */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n const cr = typeof globalThis === 'object' ? (globalThis as any).crypto : null;\n if (typeof cr?.getRandomValues !== 'function')\n throw new Error('crypto.getRandomValues must be defined');\n return cr.getRandomValues(new Uint8Array(bytesLength));\n}\n\n/** Creates OID opts for NIST hashes, with prefix 06 09 60 86 48 01 65 03 04 02. */\nexport const oidNist = (suffix: number): Required<HashInfo> => ({\n oid: Uint8Array.from([0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, suffix]),\n});\n","/**\n * Internal Merkle-Damgard hash utils.\n * @module\n */\nimport { abytes, aexists, aoutput, clean, createView, type Hash } from './utils.ts';\n\n/** Choice: a ? b : c */\nexport function Chi(a: number, b: number, c: number): number {\n return (a & b) ^ (~a & c);\n}\n\n/** Majority function, true if any two inputs is true. */\nexport function Maj(a: number, b: number, c: number): number {\n return (a & b) ^ (a & c) ^ (b & c);\n}\n\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */\nexport abstract class HashMD<T extends HashMD<T>> implements Hash<T> {\n protected abstract process(buf: DataView, offset: number): void;\n protected abstract get(): number[];\n protected abstract set(...args: number[]): void;\n abstract destroy(): void;\n protected abstract roundClean(): void;\n\n readonly blockLen: number;\n readonly outputLen: number;\n readonly padOffset: number;\n readonly isLE: boolean;\n\n // For partial updates less than block size\n protected buffer: Uint8Array;\n protected view: DataView;\n protected finished = false;\n protected length = 0;\n protected pos = 0;\n protected destroyed = false;\n\n constructor(blockLen: number, outputLen: number, padOffset: number, isLE: boolean) {\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data: Uint8Array): this {\n aexists(this);\n abytes(data);\n const { view, buffer, blockLen } = this;\n const len = data.length;\n for (let pos = 0; pos < len; ) {\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = createView(data);\n for (; blockLen <= len - pos; pos += blockLen) this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out: Uint8Array): void {\n aexists(this);\n aoutput(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n clean(this.buffer.subarray(pos));\n // we have less than padOffset left in buffer, so we cannot put length in\n // current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for (let i = pos; i < blockLen; i++) buffer[i] = 0;\n // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64 bits of that value.\n view.setBigUint64(blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = createView(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which must be fused in single op with modulo by JIT\n if (len % 4) throw new Error('_sha2: outputLen must be aligned to 32bit');\n const outLen = len / 4;\n const state = this.get();\n if (outLen > state.length) throw new Error('_sha2: outputLen bigger than state');\n for (let i = 0; i < outLen; i++) oview.setUint32(4 * i, state[i], isLE);\n }\n digest(): Uint8Array {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to?: T): T {\n to ||= new (this.constructor as any)() as T;\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.destroyed = destroyed;\n to.finished = finished;\n to.length = length;\n to.pos = pos;\n if (length % blockLen) to.buffer.set(buffer);\n return to as unknown as any;\n }\n clone(): T {\n return this._cloneInto();\n }\n}\n\n/**\n * Initial SHA-2 state: fractional parts of square roots of first 16 primes 2..53.\n * Check out `test/misc/sha2-gen-iv.js` for recomputation guide.\n */\n\n/** Initial SHA256 state. Bits 0..32 of frac part of sqrt of primes 2..19 */\nexport const SHA256_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n]);\n\n/** Initial SHA224 state. Bits 32..64 of frac part of sqrt of primes 23..53 */\nexport const SHA224_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4,\n]);\n\n/** Initial SHA384 state. Bits 0..64 of frac part of sqrt of primes 23..53 */\nexport const SHA384_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4,\n]);\n\n/** Initial SHA512 state. Bits 0..64 of frac part of sqrt of primes 2..19 */\nexport const SHA512_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179,\n]);\n","/**\n * Internal helpers for u64. BigUint64Array is too slow as per 2025, so we implement it using Uint32Array.\n * @todo re-check https://issues.chromium.org/issues/42212588\n * @module\n */\nconst U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\n\nfunction fromBig(\n n: bigint,\n le = false\n): {\n h: number;\n l: number;\n} {\n if (le) return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\n\nfunction split(lst: bigint[], le = false): Uint32Array[] {\n const len = lst.length;\n let Ah = new Uint32Array(len);\n let Al = new Uint32Array(len);\n for (let i = 0; i < len; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\n\nconst toBig = (h: number, l: number): bigint => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h: number, _l: number, s: number): number => h >>> s;\nconst shrSL = (h: number, l: number, s: number): number => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h: number, l: number, s: number): number => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h: number, l: number, s: number): number => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h: number, l: number, s: number): number => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h: number, l: number, s: number): number => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h: number, l: number): number => l;\nconst rotr32L = (h: number, _l: number): number => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h: number, l: number, s: number): number => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h: number, l: number, s: number): number => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h: number, l: number, s: number): number => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h: number, l: number, s: number): number => (h << (s - 32)) | (l >>> (64 - s));\n\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(\n Ah: number,\n Al: number,\n Bh: number,\n Bl: number\n): {\n h: number;\n l: number;\n} {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al: number, Bl: number, Cl: number): number => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low: number, Ah: number, Bh: number, Ch: number): number =>\n (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al: number, Bl: number, Cl: number, Dl: number): number =>\n (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number): number =>\n (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al: number, Bl: number, Cl: number, Dl: number, El: number): number =>\n (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number): number =>\n (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n\n// prettier-ignore\nexport {\n add, add3H, add3L, add4H, add4L, add5H, add5L, fromBig, rotlBH, rotlBL, rotlSH, rotlSL, rotr32H, rotr32L, rotrBH, rotrBL, rotrSH, rotrSL, shrSH, shrSL, split, toBig\n};\n// prettier-ignore\nconst u64: { fromBig: typeof fromBig; split: typeof split; toBig: (h: number, l: number) => bigint; shrSH: (h: number, _l: number, s: number) => number; shrSL: (h: number, l: number, s: number) => number; rotrSH: (h: number, l: number, s: number) => number; rotrSL: (h: number, l: number, s: number) => number; rotrBH: (h: number, l: number, s: number) => number; rotrBL: (h: number, l: number, s: number) => number; rotr32H: (_h: number, l: number) => number; rotr32L: (h: number, _l: number) => number; rotlSH: (h: number, l: number, s: number) => number; rotlSL: (h: number, l: number, s: number) => number; rotlBH: (h: number, l: number, s: number) => number; rotlBL: (h: number, l: number, s: number) => number; add: typeof add; add3L: (Al: number, Bl: number, Cl: number) => number; add3H: (low: number, Ah: number, Bh: number, Ch: number) => number; add4L: (Al: number, Bl: number, Cl: number, Dl: number) => number; add4H: (low: number, Ah: number, Bh: number, Ch: number, Dh: number) => number; add5H: (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number) => number; add5L: (Al: number, Bl: number, Cl: number, Dl: number, El: number) => number; } = {\n fromBig, split, toBig,\n shrSH, shrSL,\n rotrSH, rotrSL, rotrBH, rotrBL,\n rotr32H, rotr32L,\n rotlSH, rotlSL, rotlBH, rotlBL,\n add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexport default u64;\n","/**\n * SHA2 hash function. A.k.a. sha256, sha384, sha512, sha512_224, sha512_256.\n * SHA256 is the fastest hash implementable in JS, even faster than Blake3.\n * Check out [RFC 4634](https://www.rfc-editor.org/rfc/rfc4634) and\n * [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n */\nimport { Chi, HashMD, Maj, SHA224_IV, SHA256_IV, SHA384_IV, SHA512_IV } from './_md.ts';\nimport * as u64 from './_u64.ts';\nimport { type CHash, clean, createHasher, oidNist, rotr } from './utils.ts';\n\n/**\n * Round constants:\n * First 32 bits of fractional parts of the cube roots of the first 64 primes 2..311)\n */\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ Uint32Array.from([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n\n/** Reusable temporary buffer. \"W\" comes straight from spec. */\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\n\n/** Internal 32-byte base SHA2 hash class. */\nabstract class SHA2_32B<T extends SHA2_32B<T>> extends HashMD<T> {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n protected abstract A: number;\n protected abstract B: number;\n protected abstract C: number;\n protected abstract D: number;\n protected abstract E: number;\n protected abstract F: number;\n protected abstract G: number;\n protected abstract H: number;\n\n constructor(outputLen: number) {\n super(64, outputLen, 8, false);\n }\n protected get(): [number, number, number, number, number, number, number, number] {\n const { A, B, C, D, E, F, G, H } = this;\n return [A, B, C, D, E, F, G, H];\n }\n // prettier-ignore\n protected set(\n A: number, B: number, C: number, D: number, E: number, F: number, G: number, H: number\n ): void {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n this.F = F | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n protected process(view: DataView, offset: number): void {\n // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) SHA256_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 64; i++) {\n const W15 = SHA256_W[i - 15];\n const W2 = SHA256_W[i - 2];\n const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n }\n // Compression function main loop, 64 rounds\n let { A, B, C, D, E, F, G, H } = this;\n for (let i = 0; i < 64; i++) {\n const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n const T2 = (sigma0 + Maj(A, B, C)) | 0;\n H = G;\n G = F;\n F = E;\n E = (D + T1) | 0;\n D = C;\n C = B;\n B = A;\n A = (T1 + T2) | 0;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n F = (F + this.F) | 0;\n G = (G + this.G) | 0;\n H = (H + this.H) | 0;\n this.set(A, B, C, D, E, F, G, H);\n }\n protected roundClean(): void {\n clean(SHA256_W);\n }\n destroy(): void {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n clean(this.buffer);\n }\n}\n\n/** Internal SHA2-256 hash class. */\nexport class _SHA256 extends SHA2_32B<_SHA256> {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n protected A: number = SHA256_IV[0] | 0;\n protected B: number = SHA256_IV[1] | 0;\n protected C: number = SHA256_IV[2] | 0;\n protected D: number = SHA256_IV[3] | 0;\n protected E: number = SHA256_IV[4] | 0;\n protected F: number = SHA256_IV[5] | 0;\n protected G: number = SHA256_IV[6] | 0;\n protected H: number = SHA256_IV[7] | 0;\n constructor() {\n super(32);\n }\n}\n\n/** Internal SHA2-224 hash class. */\nexport class _SHA224 extends SHA2_32B<_SHA224> {\n protected A: number = SHA224_IV[0] | 0;\n protected B: number = SHA224_IV[1] | 0;\n protected C: number = SHA224_IV[2] | 0;\n protected D: number = SHA224_IV[3] | 0;\n protected E: number = SHA224_IV[4] | 0;\n protected F: number = SHA224_IV[5] | 0;\n protected G: number = SHA224_IV[6] | 0;\n protected H: number = SHA224_IV[7] | 0;\n constructor() {\n super(28);\n }\n}\n\n// SHA2-512 is slower than sha256 in js because u64 operations are slow.\n\n// Round contants\n// First 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409\n// prettier-ignore\nconst K512 = /* @__PURE__ */ (() => u64.split([\n '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n))))();\nconst SHA512_Kh = /* @__PURE__ */ (() => K512[0])();\nconst SHA512_Kl = /* @__PURE__ */ (() => K512[1])();\n\n// Reusable temporary buffers\nconst SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\nconst SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\n\n/** Internal 64-byte base SHA2 hash class. */\nabstract class SHA2_64B<T extends SHA2_64B<T>> extends HashMD<T> {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n // h -- high 32 bits, l -- low 32 bits\n protected abstract Ah: number;\n protected abstract Al: number;\n protected abstract Bh: number;\n protected abstract Bl: number;\n protected abstract Ch: number;\n protected abstract Cl: number;\n protected abstract Dh: number;\n protected abstract Dl: number;\n protected abstract Eh: number;\n protected abstract El: number;\n protected abstract Fh: number;\n protected abstract Fl: number;\n protected abstract Gh: number;\n protected abstract Gl: number;\n protected abstract Hh: number;\n protected abstract Hl: number;\n\n constructor(outputLen: number) {\n super(128, outputLen, 16, false);\n }\n // prettier-ignore\n protected get(): [\n number, number, number, number, number, number, number, number,\n number, number, number, number, number, number, number, number\n ] {\n const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n }\n // prettier-ignore\n protected set(\n Ah: number, Al: number, Bh: number, Bl: number, Ch: number, Cl: number, Dh: number, Dl: number,\n Eh: number, El: number, Fh: number, Fl: number, Gh: number, Gl: number, Hh: number, Hl: number\n ): void {\n this.Ah = Ah | 0;\n this.Al = Al | 0;\n this.Bh = Bh | 0;\n this.Bl = Bl | 0;\n this.Ch = Ch | 0;\n this.Cl = Cl | 0;\n this.Dh = Dh | 0;\n this.Dl = Dl | 0;\n this.Eh = Eh | 0;\n this.El = El | 0;\n this.Fh = Fh | 0;\n this.Fl = Fl | 0;\n this.Gh = Gh | 0;\n this.Gl = Gl | 0;\n this.Hh = Hh | 0;\n this.Hl = Hl | 0;\n }\n protected process(view: DataView, offset: number): void {\n // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) {\n SHA512_W_H[i] = view.getUint32(offset);\n SHA512_W_L[i] = view.getUint32((offset += 4));\n }\n for (let i = 16; i < 80; i++) {\n // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n const W15h = SHA512_W_H[i - 15] | 0;\n const W15l = SHA512_W_L[i - 15] | 0;\n const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n const W2h = SHA512_W_H[i - 2] | 0;\n const W2l = SHA512_W_L[i - 2] | 0;\n const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n SHA512_W_H[i] = SUMh | 0;\n SHA512_W_L[i] = SUMl | 0;\n }\n let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n // Compression function main loop, 80 rounds\n for (let i = 0; i < 80; i++) {\n // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n const CHIl = (El & Fl) ^ (~El & Gl);\n // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n // prettier-ignore\n const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n const T1l = T1ll | 0;\n // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n Hh = Gh | 0;\n Hl = Gl | 0;\n Gh = Fh | 0;\n Gl = Fl | 0;\n Fh = Eh | 0;\n Fl = El | 0;\n ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n Dh = Ch | 0;\n Dl = Cl | 0;\n Ch = Bh | 0;\n Cl = Bl | 0;\n Bh = Ah | 0;\n Bl = Al | 0;\n const All = u64.add3L(T1l, sigma0l, MAJl);\n Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n Al = All | 0;\n }\n // Add the compressed chunk to the current hash value\n ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n }\n protected roundClean(): void {\n clean(SHA512_W_H, SHA512_W_L);\n }\n destroy(): void {\n clean(this.buffer);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\n\n/** Internal SHA2-512 hash class. */\nexport class _SHA512 extends SHA2_64B<_SHA512> {\n protected Ah: number = SHA512_IV[0] | 0;\n protected Al: number = SHA512_IV[1] | 0;\n protected Bh: number = SHA512_IV[2] | 0;\n protected Bl: number = SHA512_IV[3] | 0;\n protected Ch: number = SHA512_IV[4] | 0;\n protected Cl: number = SHA512_IV[5] | 0;\n protected Dh: number = SHA512_IV[6] | 0;\n protected Dl: number = SHA512_IV[7] | 0;\n protected Eh: number = SHA512_IV[8] | 0;\n protected El: number = SHA512_IV[9] | 0;\n protected Fh: number = SHA512_IV[10] | 0;\n protected Fl: number = SHA512_IV[11] | 0;\n protected Gh: number = SHA512_IV[12] | 0;\n protected Gl: number = SHA512_IV[13] | 0;\n protected Hh: number = SHA512_IV[14] | 0;\n protected Hl: number = SHA512_IV[15] | 0;\n\n constructor() {\n super(64);\n }\n}\n\n/** Internal SHA2-384 hash class. */\nexport class _SHA384 extends SHA2_64B<_SHA384> {\n protected Ah: number = SHA384_IV[0] | 0;\n protected Al: number = SHA384_IV[1] | 0;\n protected Bh: number = SHA384_IV[2] | 0;\n protected Bl: number = SHA384_IV[3] | 0;\n protected Ch: number = SHA384_IV[4] | 0;\n protected Cl: number = SHA384_IV[5] | 0;\n protected Dh: number = SHA384_IV[6] | 0;\n protected Dl: number = SHA384_IV[7] | 0;\n protected Eh: number = SHA384_IV[8] | 0;\n protected El: number = SHA384_IV[9] | 0;\n protected Fh: number = SHA384_IV[10] | 0;\n protected Fl: number = SHA384_IV[11] | 0;\n protected Gh: number = SHA384_IV[12] | 0;\n protected Gl: number = SHA384_IV[13] | 0;\n protected Hh: number = SHA384_IV[14] | 0;\n protected Hl: number = SHA384_IV[15] | 0;\n\n constructor() {\n super(48);\n }\n}\n\n/**\n * Truncated SHA512/256 and SHA512/224.\n * SHA512_IV is XORed with 0xa5a5a5a5a5a5a5a5, then used as \"intermediary\" IV of SHA512/t.\n * Then t hashes string to produce result IV.\n * See `test/misc/sha2-gen-iv.js`.\n */\n\n/** SHA512/224 IV */\nconst T224_IV = /* @__PURE__ */ Uint32Array.from([\n 0x8c3d37c8, 0x19544da2, 0x73e19966, 0x89dcd4d6, 0x1dfab7ae, 0x32ff9c82, 0x679dd514, 0x582f9fcf,\n 0x0f6d2b69, 0x7bd44da8, 0x77e36f73, 0x04c48942, 0x3f9d85a8, 0x6a1d36c8, 0x1112e6ad, 0x91d692a1,\n]);\n\n/** SHA512/256 IV */\nconst T256_IV = /* @__PURE__ */ Uint32Array.from([\n 0x22312194, 0xfc2bf72c, 0x9f555fa3, 0xc84c64c2, 0x2393b86b, 0x6f53b151, 0x96387719, 0x5940eabd,\n 0x96283ee2, 0xa88effe3, 0xbe5e1e25, 0x53863992, 0x2b0199fc, 0x2c85b8aa, 0x0eb72ddc, 0x81c52ca2,\n]);\n\n/** Internal SHA2-512/224 hash class. */\nexport class _SHA512_224 extends SHA2_64B<_SHA512_224> {\n protected Ah: number = T224_IV[0] | 0;\n protected Al: number = T224_IV[1] | 0;\n protected Bh: number = T224_IV[2] | 0;\n protected Bl: number = T224_IV[3] | 0;\n protected Ch: number = T224_IV[4] | 0;\n protected Cl: number = T224_IV[5] | 0;\n protected Dh: number = T224_IV[6] | 0;\n protected Dl: number = T224_IV[7] | 0;\n protected Eh: number = T224_IV[8] | 0;\n protected El: number = T224_IV[9] | 0;\n protected Fh: number = T224_IV[10] | 0;\n protected Fl: number = T224_IV[11] | 0;\n protected Gh: number = T224_IV[12] | 0;\n protected Gl: number = T224_IV[13] | 0;\n protected Hh: number = T224_IV[14] | 0;\n protected Hl: number = T224_IV[15] | 0;\n\n constructor() {\n super(28);\n }\n}\n\n/** Internal SHA2-512/256 hash class. */\nexport class _SHA512_256 extends SHA2_64B<_SHA512_256> {\n protected Ah: number = T256_IV[0] | 0;\n protected Al: number = T256_IV[1] | 0;\n protected Bh: number = T256_IV[2] | 0;\n protected Bl: number = T256_IV[3] | 0;\n protected Ch: number = T256_IV[4] | 0;\n protected Cl: number = T256_IV[5] | 0;\n protected Dh: number = T256_IV[6] | 0;\n protected Dl: number = T256_IV[7] | 0;\n protected Eh: number = T256_IV[8] | 0;\n protected El: number = T256_IV[9] | 0;\n protected Fh: number = T256_IV[10] | 0;\n protected Fl: number = T256_IV[11] | 0;\n protected Gh: number = T256_IV[12] | 0;\n protected Gl: number = T256_IV[13] | 0;\n protected Hh: number = T256_IV[14] | 0;\n protected Hl: number = T256_IV[15] | 0;\n\n constructor() {\n super(32);\n }\n}\n\n/**\n * SHA2-256 hash function from RFC 4634. In JS it's the fastest: even faster than Blake3. Some info:\n *\n * - Trying 2^128 hashes would get 50% chance of collision, using birthday attack.\n * - BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n * - Each sha256 hash is executing 2^18 bit operations.\n * - Good 2024 ASICs can do 200Th/sec with 3500 watts of power, corresponding to 2^36 hashes/joule.\n */\nexport const sha256: CHash<_SHA256> = /* @__PURE__ */ createHasher(\n () => new _SHA256(),\n /* @__PURE__ */ oidNist(0x01)\n);\n/** SHA2-224 hash function from RFC 4634 */\nexport const sha224: CHash<_SHA224> = /* @__PURE__ */ createHasher(\n () => new _SHA224(),\n /* @__PURE__ */ oidNist(0x04)\n);\n\n/** SHA2-512 hash function from RFC 4634. */\nexport const sha512: CHash<_SHA512> = /* @__PURE__ */ createHasher(\n () => new _SHA512(),\n /* @__PURE__ */ oidNist(0x03)\n);\n/** SHA2-384 hash function from RFC 4634. */\nexport const sha384: CHash<_SHA384> = /* @__PURE__ */ createHasher(\n () => new _SHA384(),\n /* @__PURE__ */ oidNist(0x02)\n);\n\n/**\n * SHA2-512/256 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_256: CHash<_SHA512_256> = /* @__PURE__ */ createHasher(\n () => new _SHA512_256(),\n /* @__PURE__ */ oidNist(0x06)\n);\n/**\n * SHA2-512/224 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_224: CHash<_SHA512_224> = /* @__PURE__ */ createHasher(\n () => new _SHA512_224(),\n /* @__PURE__ */ oidNist(0x05)\n);\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport * as ed25519 from \"@noble/ed25519\";\nimport { sha256 } from \"@noble/hashes/sha2\";\nimport { base58 } from \"@scure/base\";\nimport { PUBLIC_KEY_LENGTH } from \"../constants\";\nimport { CryptoError, CryptoErrorCode } from \"./errors\";\nimport type { Signature } from \"./signature\";\nimport { concatBytes, isOnCurve, seedToBytes } from \"./utils\";\n\n/**\n * A seed for PDA derivation - string (UTF-8) or raw bytes.\n */\nexport type Seed = string | Uint8Array;\n\n/**\n * Bump seed (0-255) that pushes derived address off the Ed25519 curve.\n */\nexport type Bump = number;\n\n/**\n * Result of PDA derivation: [address, bump].\n */\nexport type PDA = readonly [PublicKey, Bump];\n\nconst MAX_SEED_LENGTH = 32;\nconst MAX_SEEDS = 16;\nconst PDA_MARKER = new TextEncoder().encode(\"ProgramDerivedAddress\");\nconst MAX_BUMP_SEED = 255;\n\n/**\n * Represents a 32-byte Ed25519 public key.\n *\n * @example\n * ```typescript\n * // From base58 string\n * const pubkey = PublicKey.fromString(\"5ZqB9U...\");\n *\n * // From bytes\n * const pubkey = PublicKey.fromBytes(new Uint8Array(32));\n *\n * // Comparison\n * if (pubkey1.equals(pubkey2)) {\n * console.log(\"Keys match\");\n * }\n * ```\n */\nexport class PublicKey {\n\tprivate readonly bytes: Uint8Array;\n\n\tprivate constructor(bytes: Uint8Array) {\n\t\tif (bytes.length !== PUBLIC_KEY_LENGTH) {\n\t\t\tthrow CryptoError.invalidKeyLength(PUBLIC_KEY_LENGTH, bytes.length);\n\t\t}\n\t\tthis.bytes = new Uint8Array(bytes);\n\t}\n\n\t/**\n\t * Creates a PublicKey from raw bytes.\n\t *\n\t * @param bytes - 32-byte Ed25519 public key\n\t * @throws {CryptoError} If bytes length is not 32\n\t */\n\tstatic fromBytes(bytes: Uint8Array): PublicKey {\n\t\treturn new PublicKey(bytes);\n\t}\n\n\t/**\n\t * Creates a PublicKey from a base58-encoded string.\n\t *\n\t * @param str - Base58-encoded public key\n\t * @throws {CryptoError} If string is invalid or decodes to wrong length\n\t */\n\tstatic fromString(str: string): PublicKey {\n\t\ttry {\n\t\t\tconst bytes = base58.decode(str);\n\t\t\treturn new PublicKey(bytes);\n\t\t} catch (error) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.INVALID_PUBLIC_KEY,\n\t\t\t\t`Invalid base58 public key: ${error instanceof Error ? error.message : \"unknown error\"}`,\n\t\t\t\t{ input: str },\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Derives a program address from seeds and a program ID.\n\t *\n\t * @remarks\n\t * This is the low-level derivation function. It will throw if the resulting\n\t * address falls on the Ed25519 curve. For most use cases, prefer\n\t * {@link findProgramAddress} which automatically finds a valid bump seed.\n\t *\n\t * Use this method when you already know the bump seed (e.g., stored on-chain\n\t * or passed from a previous computation) for better performance.\n\t *\n\t * @param seeds - Array of seeds (strings or byte arrays, max 16 seeds, each max 32 bytes)\n\t * @param programId - The program that will own this PDA\n\t * @returns The derived public key\n\t * @throws {CryptoError} If seeds exceed limits or result is on curve\n\t *\n\t * @example\n\t * ```typescript\n\t * // With known bump seed (most efficient for verification)\n\t * const pda = PublicKey.createProgramAddress(\n\t * [\"metadata\", mintPubkey.toBytes(), new Uint8Array([254])],\n\t * metadataProgramId\n\t * );\n\t * ```\n\t */\n\tstatic createProgramAddress(seeds: Seed[], programId: PublicKey): PublicKey {\n\t\tif (seeds.length > MAX_SEEDS) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.MAX_SEEDS_EXCEEDED,\n\t\t\t\t`Expected max ${MAX_SEEDS} seeds, got ${seeds.length}`,\n\t\t\t);\n\t\t}\n\n\t\tconst seedBytes: Uint8Array[] = [];\n\t\tfor (let i = 0; i < seeds.length; i++) {\n\t\t\tconst bytes = seedToBytes(seeds[i]);\n\t\t\tif (bytes.length > MAX_SEED_LENGTH) {\n\t\t\t\tthrow new CryptoError(\n\t\t\t\t\tCryptoErrorCode.MAX_SEED_LENGTH_EXCEEDED,\n\t\t\t\t\t`Seed[${i}] exceeds ${MAX_SEED_LENGTH} bytes`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tseedBytes.push(bytes);\n\t\t}\n\n\t\tconst hash = sha256(concatBytes(...seedBytes, programId.bytes, PDA_MARKER));\n\n\t\tif (isOnCurve(hash)) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.INVALID_SEEDS_ON_CURVE,\n\t\t\t\t\"Invalid seeds - derived address is on curve\",\n\t\t\t);\n\t\t}\n\n\t\treturn new PublicKey(hash);\n\t}\n\n\t/**\n\t * Finds a valid program derived address by searching for a bump seed.\n\t *\n\t * @remarks\n\t * Iterates from bump 255 down to 0, returning the first combination that\n\t * produces an address off the Ed25519 curve. The bump seed should be stored\n\t * or passed to programs to allow efficient verification via {@link createProgramAddress}.\n\t *\n\t * @param seeds - Array of seeds (max 16 seeds, each max 32 bytes)\n\t * @param programId - The program that will own this PDA\n\t * @returns Tuple of [PublicKey, Bump] where bump is 0-255\n\t * @throws {CryptoError} If no valid bump found (extremely rare) or seeds invalid\n\t *\n\t * @example\n\t * ```typescript\n\t * const [vaultPda, vaultBump] = PublicKey.findProgramAddress(\n\t * [\"vault\", userPubkey.toBytes()],\n\t * programId\n\t * );\n\t *\n\t * // Store bump for later use\n\t * console.log(`Vault: ${vaultPda}, Bump: ${vaultBump}`);\n\t * ```\n\t */\n\tstatic findProgramAddress(seeds: Seed[], programId: PublicKey): PDA {\n\t\tif (seeds.length >= MAX_SEEDS) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.MAX_SEEDS_EXCEEDED,\n\t\t\t\t`Expected max ${MAX_SEEDS - 1} user seeds (one slot reserved for bump), got ${seeds.length}`,\n\t\t\t);\n\t\t}\n\n\t\tfor (let bump = MAX_BUMP_SEED; bump >= 0; bump--) {\n\t\t\ttry {\n\t\t\t\tconst address = PublicKey.createProgramAddress(\n\t\t\t\t\t[...seeds, Uint8Array.of(bump)],\n\t\t\t\t\tprogramId,\n\t\t\t\t);\n\t\t\t\treturn [address, bump] as const;\n\t\t\t} catch (e) {\n\t\t\t\tif (\n\t\t\t\t\te instanceof CryptoError &&\n\t\t\t\t\te.code === CryptoErrorCode.INVALID_SEEDS_ON_CURVE\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t}\n\n\t\tthrow new CryptoError(\n\t\t\tCryptoErrorCode.NO_VIABLE_BUMP_SEED,\n\t\t\t\"Could not find valid bump seed\",\n\t\t);\n\t}\n\n\t/**\n\t * Creates a derived address from a base address, seed string, and program ID.\n\t *\n\t * @remarks\n\t * Unlike PDAs, this derivation CAN produce addresses on the curve.\n\t * This is useful for creating deterministic addresses that a user can sign for,\n\t * where the base address's private key holder can sign transactions.\n\t *\n\t * @param baseAddress - The base public key (signer)\n\t * @param seed - A seed string (max 32 bytes when UTF-8 encoded)\n\t * @param programId - The program that will own the derived account\n\t * @returns The derived address\n\t *\n\t * @example\n\t * ```typescript\n\t * const derivedAddress = PublicKey.createWithSeed(\n\t * userPubkey,\n\t * \"savings-account\",\n\t * systemProgramId\n\t * );\n\t * ```\n\t */\n\tstatic createWithSeed(\n\t\tbaseAddress: PublicKey,\n\t\tseed: string,\n\t\tprogramId: PublicKey,\n\t): PublicKey {\n\t\tconst seedBytes = new TextEncoder().encode(seed);\n\t\tif (seedBytes.length > MAX_SEED_LENGTH) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.MAX_SEED_LENGTH_EXCEEDED,\n\t\t\t\t`Seed exceeds ${MAX_SEED_LENGTH} bytes`,\n\t\t\t);\n\t\t}\n\n\t\tif (seed.length === 0) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.INVALID_SEED,\n\t\t\t\t\"Seed cannot be empty\",\n\t\t\t);\n\t\t}\n\n\t\tconst hash = sha256(\n\t\t\tconcatBytes(baseAddress.bytes, seedBytes, programId.bytes),\n\t\t);\n\t\treturn new PublicKey(hash);\n\t}\n\n\t/**\n\t * Returns a copy of the raw bytes.\n\t */\n\ttoBytes(): Uint8Array {\n\t\treturn new Uint8Array(this.bytes);\n\t}\n\n\t/**\n\t * Returns the base58-encoded string representation.\n\t */\n\ttoString(): string {\n\t\treturn base58.encode(this.bytes);\n\t}\n\n\t/**\n\t * Checks equality with another public key using constant-time comparison.\n\t */\n\tequals(other: PublicKey): boolean {\n\t\tif (!other) return false;\n\t\tif (this.bytes.length !== other.bytes.length) return false;\n\t\tfor (let i = 0; i < this.bytes.length; i++) {\n\t\t\tif (this.bytes[i] !== other.bytes[i]) return false;\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * Verifies an Ed25519 signature over a message.\n\t *\n\t * @param message - Message bytes that were signed\n\t * @param signature - Signature to verify\n\t * @returns True if signature is valid, false otherwise\n\t *\n\t * @example\n\t * ```typescript\n\t * const message = new Uint8Array([1, 2, 3]);\n\t * const signature = keypair.sign(message);\n\t * const isValid = keypair.publicKey.verify(message, signature);\n\t * ```\n\t */\n\tverify(message: Uint8Array, signature: Signature): boolean {\n\t\treturn ed25519.verify(signature.toBytes(), message, this.bytes);\n\t}\n\n\t/**\n\t * Checks if the public key is on the Ed25519 curve.\n\t *\n\t * @returns True if the public key is on the curve, false otherwise\n\t */\n\tisOnCurve(): boolean {\n\t\treturn isOnCurve(this.bytes);\n\t}\n\n\t/**\n\t * JSON serialization (returns base58 string).\n\t */\n\ttoJSON(): string {\n\t\treturn this.toString();\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Point } from \"@noble/ed25519\";\nimport type { Seed } from \"./public-key\";\n\n/**\n * Checks if a 32-byte array represents a valid point on the Ed25519 curve.\n *\n * This is used for PDA (Program Derived Address) derivation, where valid PDAs\n * must NOT be on the curve to ensure they can only be signed by the program.\n *\n * @param bytes - 32-byte public key or hash to check\n * @returns true if the bytes represent a valid Ed25519 point, false otherwise\n *\n * @example\n * ```typescript\n * const hash = sha256(data);\n * if (!isOnCurve(hash)) {\n * // Valid PDA - not on curve\n * }\n * ```\n */\nexport function isOnCurve(bytes: Uint8Array): boolean {\n\ttry {\n\t\tPoint.fromBytes(bytes);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/**\n * Converts a seed to a 32-byte array.\n *\n * @param seed - Seed to convert\n * @returns 32-byte array\n */\nexport function seedToBytes(seed: Seed): Uint8Array {\n\treturn typeof seed === \"string\" ? new TextEncoder().encode(seed) : seed;\n}\n\n/**\n * Concatenates multiple byte arrays into a single byte array.\n *\n * @param arrays - Byte arrays to concatenate\n * @returns Concatenated byte array\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n\tconst totalLength = arrays.reduce((sum, arr) => sum + arr.length, 0);\n\tconst result = new Uint8Array(totalLength);\n\tlet offset = 0;\n\tfor (const arr of arrays) {\n\t\tresult.set(arr, offset);\n\t\toffset += arr.length;\n\t}\n\treturn result;\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { base58 } from \"@scure/base\";\nimport { SIGNATURE_LENGTH } from \"../constants\";\nimport { CryptoError, CryptoErrorCode } from \"./errors\";\n\n/**\n * Represents a 64-byte Ed25519 signature.\n *\n * @example\n * ```typescript\n * // From bytes\n * const sig = Signature.fromBytes(signatureBytes);\n *\n * // From base58 string\n * const sig = Signature.fromString(\"3Bxs4h...\");\n *\n * // Serialize\n * const base58 = sig.toString();\n * ```\n */\nexport class Signature {\n\tprivate readonly bytes: Uint8Array;\n\n\tprivate constructor(bytes: Uint8Array) {\n\t\tif (bytes.length !== SIGNATURE_LENGTH) {\n\t\t\tthrow CryptoError.invalidKeyLength(SIGNATURE_LENGTH, bytes.length);\n\t\t}\n\t\tthis.bytes = new Uint8Array(bytes);\n\t}\n\n\t/**\n\t * Creates a Signature from raw bytes.\n\t *\n\t * @param bytes - 64-byte Ed25519 signature\n\t * @throws {CryptoError} If bytes length is not 64\n\t */\n\tstatic fromBytes(bytes: Uint8Array): Signature {\n\t\treturn new Signature(bytes);\n\t}\n\n\t/**\n\t * Creates a Signature from a base58-encoded string.\n\t *\n\t * @param str - Base58-encoded signature\n\t * @throws {CryptoError} If string is invalid or decodes to wrong length\n\t */\n\tstatic fromString(str: string): Signature {\n\t\ttry {\n\t\t\tconst bytes = base58.decode(str);\n\t\t\treturn new Signature(bytes);\n\t\t} catch (error) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.INVALID_SIGNATURE,\n\t\t\t\t`Invalid base58 signature: ${error instanceof Error ? error.message : \"unknown error\"}`,\n\t\t\t\t{ input: str },\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Returns a copy of the raw bytes.\n\t */\n\ttoBytes(): Uint8Array {\n\t\treturn new Uint8Array(this.bytes);\n\t}\n\n\t/**\n\t * Returns the base58-encoded string representation.\n\t */\n\ttoString(): string {\n\t\treturn base58.encode(this.bytes);\n\t}\n\n\t/**\n\t * JSON serialization (returns base58 string).\n\t */\n\ttoJSON(): string {\n\t\treturn this.toString();\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport * as ed25519 from \"@noble/ed25519\";\nimport { sha512 } from \"@noble/hashes/sha2\";\nimport { randomBytes } from \"@noble/hashes/utils\";\nimport { SECRET_KEY_LENGTH } from \"../constants\";\nimport { CryptoError } from \"./errors\";\nimport { PublicKey } from \"./public-key\";\nimport { Signature } from \"./signature\";\n\n// Configure ed25519 to use SHA-512\ned25519.hashes.sha512 = sha512;\n\n/**\n * Represents an Ed25519 keypair for signing transactions.\n *\n * Provides secure key generation, signing, and disposal capabilities.\n * Call {@link dispose} when finished to securely erase the private key from memory.\n *\n * @example\n * ```typescript\n * // Generate random keypair\n * const keypair = Keypair.generate();\n *\n * // Sign a message\n * const message = new TextEncoder().encode(\"Hello\");\n * const signature = keypair.sign(message);\n *\n * // Verify signature\n * const isValid = keypair.verify(message, signature);\n *\n * // Secure cleanup\n * keypair.dispose();\n * ```\n */\nexport class Keypair {\n\tpublic readonly publicKey: PublicKey;\n\tprivate secretKey: Uint8Array | null;\n\tprivate disposed = false;\n\n\tprivate constructor(secretKey: Uint8Array, publicKey?: Uint8Array) {\n\t\tif (secretKey.length !== SECRET_KEY_LENGTH) {\n\t\t\tthrow CryptoError.invalidKeyLength(SECRET_KEY_LENGTH, secretKey.length);\n\t\t}\n\n\t\tthis.secretKey = new Uint8Array(secretKey);\n\n\t\tif (publicKey) {\n\t\t\tthis.publicKey = PublicKey.fromBytes(publicKey);\n\t\t} else {\n\t\t\tconst publicKeyBytes = ed25519.getPublicKey(secretKey);\n\t\t\tthis.publicKey = PublicKey.fromBytes(publicKeyBytes);\n\t\t}\n\t}\n\n\t/**\n\t * Generates a random keypair using cryptographically secure randomness.\n\t */\n\tstatic generate(): Keypair {\n\t\tconst secretKey = randomBytes(SECRET_KEY_LENGTH);\n\t\treturn new Keypair(secretKey);\n\t}\n\n\t/**\n\t * Creates a keypair from a 32-byte secret key.\n\t * The public key will be derived from the secret key.\n\t *\n\t * @param secretKey - 32-byte Ed25519 secret key\n\t */\n\tstatic fromSecretKey(secretKey: Uint8Array): Keypair {\n\t\treturn new Keypair(secretKey);\n\t}\n\n\t/**\n\t * Creates a keypair from a secret key and pre-computed public key.\n\t *\n\t * Use this for SLIP-0010/BIP32 derived keys where the public key\n\t * should NOT be re-derived (compatibility with hierarchical derivation).\n\t *\n\t * @param secretKey - 32-byte Ed25519 secret key\n\t * @param publicKey - 32-byte Ed25519 public key (pre-computed)\n\t */\n\tstatic fromKeyPair(secretKey: Uint8Array, publicKey: Uint8Array): Keypair {\n\t\treturn new Keypair(secretKey, publicKey);\n\t}\n\n\t/**\n\t * Signs a message with this keypair.\n\t *\n\t * @param message - Message bytes to sign\n\t * @returns Ed25519 signature\n\t * @throws {CryptoError} If keypair has been disposed\n\t */\n\tsign(message: Uint8Array): Signature {\n\t\tthis.ensureNotDisposed();\n\n\t\tif (!this.secretKey) {\n\t\t\tthrow CryptoError.keypairDisposed();\n\t\t}\n\n\t\tconst signatureBytes = ed25519.sign(message, this.secretKey);\n\t\treturn Signature.fromBytes(signatureBytes);\n\t}\n\n\t/**\n\t * Verifies a signature against a message using this keypair's public key.\n\t *\n\t * @param message - Original message that was signed\n\t * @param signature - Signature to verify\n\t * @returns true if signature is valid\n\t */\n\tverify(message: Uint8Array, signature: Signature): boolean {\n\t\treturn ed25519.verify(\n\t\t\tsignature.toBytes(),\n\t\t\tmessage,\n\t\t\tthis.publicKey.toBytes(),\n\t\t);\n\t}\n\n\t/**\n\t * Exports the secret key for storage.\n\t *\n\t * **WARNING**: Keep this secret! Never expose it in logs, APIs, or client-side code.\n\t *\n\t * @returns Copy of the 32-byte secret key\n\t * @throws {CryptoError} If keypair has been disposed\n\t */\n\tsecretKeyBytes(): Uint8Array {\n\t\tthis.ensureNotDisposed();\n\n\t\tif (!this.secretKey) {\n\t\t\tthrow CryptoError.keypairDisposed();\n\t\t}\n\n\t\treturn new Uint8Array(this.secretKey);\n\t}\n\n\t/**\n\t * Checks if this keypair has been disposed.\n\t */\n\tisDisposed(): boolean {\n\t\treturn this.disposed;\n\t}\n\n\t/**\n\t * Securely erases the secret key from memory.\n\t *\n\t * After calling this method, the keypair can no longer be used for signing.\n\t * This is important for security when the keypair is no longer needed.\n\t */\n\tdispose(): void {\n\t\tif (this.disposed) return;\n\n\t\tif (this.secretKey) {\n\t\t\tthis.secretKey.fill(0);\n\t\t\tthis.secretKey = null;\n\t\t}\n\t\tthis.disposed = true;\n\t}\n\n\tprivate ensureNotDisposed(): void {\n\t\tif (this.disposed) {\n\t\t\tthrow CryptoError.keypairDisposed();\n\t\t}\n\t}\n}\n","/**\n * HMAC: RFC2104 message authentication code.\n * @module\n */\nimport { abytes, aexists, ahash, clean, type CHash, type Hash } from './utils.ts';\n\n/** Internal class for HMAC. */\nexport class _HMAC<T extends Hash<T>> implements Hash<_HMAC<T>> {\n oHash: T;\n iHash: T;\n blockLen: number;\n outputLen: number;\n private finished = false;\n private destroyed = false;\n\n constructor(hash: CHash, key: Uint8Array) {\n ahash(hash);\n abytes(key, undefined, 'key');\n this.iHash = hash.create() as T;\n if (typeof this.iHash.update !== 'function')\n throw new Error('Expected instance of class which extends utils.Hash');\n this.blockLen = this.iHash.blockLen;\n this.outputLen = this.iHash.outputLen;\n const blockLen = this.blockLen;\n const pad = new Uint8Array(blockLen);\n // blockLen can be bigger than outputLen\n pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);\n for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36;\n this.iHash.update(pad);\n // By doing update (processing of first block) of outer hash here we can re-use it between multiple calls via clone\n this.oHash = hash.create() as T;\n // Undo internal XOR && apply outer XOR\n for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36 ^ 0x5c;\n this.oHash.update(pad);\n clean(pad);\n }\n update(buf: Uint8Array): this {\n aexists(this);\n this.iHash.update(buf);\n return this;\n }\n digestInto(out: Uint8Array): void {\n aexists(this);\n abytes(out, this.outputLen, 'output');\n this.finished = true;\n this.iHash.digestInto(out);\n this.oHash.update(out);\n this.oHash.digestInto(out);\n this.destroy();\n }\n digest(): Uint8Array {\n const out = new Uint8Array(this.oHash.outputLen);\n this.digestInto(out);\n return out;\n }\n _cloneInto(to?: _HMAC<T>): _HMAC<T> {\n // Create new instance without calling constructor since key already in state and we don't know it.\n to ||= Object.create(Object.getPrototypeOf(this), {});\n const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;\n to = to as this;\n to.finished = finished;\n to.destroyed = destroyed;\n to.blockLen = blockLen;\n to.outputLen = outputLen;\n to.oHash = oHash._cloneInto(to.oHash);\n to.iHash = iHash._cloneInto(to.iHash);\n return to;\n }\n clone(): _HMAC<T> {\n return this._cloneInto();\n }\n destroy(): void {\n this.destroyed = true;\n this.oHash.destroy();\n this.iHash.destroy();\n }\n}\n\n/**\n * HMAC: RFC2104 message authentication code.\n * @param hash - function that would be used e.g. sha256\n * @param key - message key\n * @param message - message data\n * @example\n * import { hmac } from '@noble/hashes/hmac';\n * import { sha256 } from '@noble/hashes/sha2';\n * const mac1 = hmac(sha256, 'key', 'message');\n */\nexport const hmac: {\n (hash: CHash, key: Uint8Array, message: Uint8Array): Uint8Array;\n create(hash: CHash, key: Uint8Array): _HMAC<any>;\n} = (hash: CHash, key: Uint8Array, message: Uint8Array): Uint8Array =>\n new _HMAC<any>(hash, key).update(message).digest();\nhmac.create = (hash: CHash, key: Uint8Array) => new _HMAC<any>(hash, key);\n","/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */\nexport function isBytes(a: unknown): a is Uint8Array {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n\n/** Asserts something is positive integer. */\nexport function anumber(n: number, title: string = ''): void {\n if (!Number.isSafeInteger(n) || n < 0) {\n const prefix = title && `\"${title}\" `;\n throw new Error(`${prefix}expected integer >= 0, got ${n}`);\n }\n}\n\n/** Asserts something is Uint8Array. */\nexport function abytes(value: Uint8Array, length?: number, title: string = ''): Uint8Array {\n const bytes = isBytes(value);\n const len = value?.length;\n const needsLen = length !== undefined;\n if (!bytes || (needsLen && len !== length)) {\n const prefix = title && `\"${title}\" `;\n const ofLen = needsLen ? ` of length ${length}` : '';\n const got = bytes ? `length=${len}` : `type=${typeof value}`;\n throw new Error(prefix + 'expected Uint8Array' + ofLen + ', got ' + got);\n }\n return value;\n}\n\n/** Asserts something is hash */\nexport function ahash(h: CHash): void {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new Error('Hash must wrapped by utils.createHasher');\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\n\n/** Asserts a hash instance has not been destroyed / finished */\nexport function aexists(instance: any, checkFinished = true): void {\n if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\n\n/** Asserts output is properly-sized byte array */\nexport function aoutput(out: any, instance: any): void {\n abytes(out, undefined, 'digestInto() output');\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('\"digestInto() output\" expected to be of length >=' + min);\n }\n}\n\n/** Generic type encompassing 8/16/32-byte arrays - but not 64-byte. */\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n Uint16Array | Int16Array | Uint32Array | Int32Array;\n\n/** Cast u8 / u16 / u32 to u8. */\nexport function u8(arr: TypedArray): Uint8Array {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** Cast u8 / u16 / u32 to u32. */\nexport function u32(arr: TypedArray): Uint32Array {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n\n/** Zeroize a byte array. Warning: JS provides no guarantees. */\nexport function clean(...arrays: TypedArray[]): void {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\n\n/** Create DataView of an array for easy byte-level manipulation. */\nexport function createView(arr: TypedArray): DataView {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** The rotate right (circular right shift) operation for uint32 */\nexport function rotr(word: number, shift: number): number {\n return (word << (32 - shift)) | (word >>> shift);\n}\n\n/** The rotate left (circular left shift) operation for uint32 */\nexport function rotl(word: number, shift: number): number {\n return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nexport const isLE: boolean = /* @__PURE__ */ (() =>\n new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n\n/** The byte swap operation for uint32 */\nexport function byteSwap(word: number): number {\n return (\n ((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff)\n );\n}\n/** Conditionally byte swap if on a big-endian platform */\nexport const swap8IfBE: (n: number) => number = isLE\n ? (n: number) => n\n : (n: number) => byteSwap(n);\n\n/** In place byte swap for Uint32Array */\nexport function byteSwap32(arr: Uint32Array): Uint32Array {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\n\nexport const swap32IfBE: (u: Uint32Array) => Uint32Array = isLE\n ? (u: Uint32Array) => u\n : byteSwap32;\n\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin: boolean = /* @__PURE__ */ (() =>\n // @ts-ignore\n typeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n i.toString(16).padStart(2, '0')\n);\n\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin) return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 } as const;\nfunction asciiToBase16(ch: number): number | undefined {\n if (ch >= asciis._0 && ch <= asciis._9) return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F) return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f) return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n // @ts-ignore\n if (hasHexBuiltin) return Uint8Array.fromHex(hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2) throw new Error('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * Call of async fn will return Promise, which will be fullfiled only on\n * next scheduler queue processing step and this is exactly what we need.\n */\nexport const nextTick = async (): Promise<void> => {};\n\n/** Returns control to thread each 'tick' ms to avoid blocking. */\nexport async function asyncLoop(\n iters: number,\n tick: number,\n cb: (i: number) => void\n): Promise<void> {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick) continue;\n await nextTick();\n ts += diff;\n }\n}\n\n// Global symbols, but ts doesn't see them: https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * Converts string to bytes using UTF8 encoding.\n * Built-in doesn't validate input to be string: we do the check.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n if (typeof str !== 'string') throw new Error('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\n/** KDFs can accept string or Uint8Array for user convenience. */\nexport type KDFInput = string | Uint8Array;\n\n/**\n * Helper for KDFs: consumes uint8array or string.\n * When string is passed, does utf8 decoding, using TextDecoder.\n */\nexport function kdfInputToBytes(data: KDFInput, errorTitle = ''): Uint8Array {\n if (typeof data === 'string') return utf8ToBytes(data);\n return abytes(data, undefined, errorTitle);\n}\n\n/** Copies several Uint8Arrays into one. */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\n\ntype EmptyObj = {};\n/** Merges default options and passed options. */\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n defaults: T1,\n opts?: T2\n): T1 & T2 {\n if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n throw new Error('options must be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged as T1 & T2;\n}\n\n/** Common interface for all hashes. */\nexport interface Hash<T> {\n blockLen: number; // Bytes per block\n outputLen: number; // Bytes in output\n update(buf: Uint8Array): this;\n digestInto(buf: Uint8Array): void;\n digest(): Uint8Array;\n destroy(): void;\n _cloneInto(to?: T): T;\n clone(): T;\n}\n\n/** PseudoRandom (number) Generator */\nexport interface PRG {\n addEntropy(seed: Uint8Array): void;\n randomBytes(length: number): Uint8Array;\n clean(): void;\n}\n\n/**\n * XOF: streaming API to read digest in chunks.\n * Same as 'squeeze' in keccak/k12 and 'seek' in blake3, but more generic name.\n * When hash used in XOF mode it is up to user to call '.destroy' afterwards, since we cannot\n * destroy state, next call can require more bytes.\n */\nexport type HashXOF<T extends Hash<T>> = Hash<T> & {\n xof(bytes: number): Uint8Array; // Read 'bytes' bytes from digest stream\n xofInto(buf: Uint8Array): Uint8Array; // read buf.length bytes from digest stream into buf\n};\n\n/** Hash constructor */\nexport type HasherCons<T, Opts = undefined> = Opts extends undefined ? () => T : (opts?: Opts) => T;\n/** Optional hash params. */\nexport type HashInfo = {\n oid?: Uint8Array; // DER encoded OID in bytes\n};\n/** Hash function */\nexport type CHash<T extends Hash<T> = Hash<any>, Opts = undefined> = {\n outputLen: number;\n blockLen: number;\n} & HashInfo &\n (Opts extends undefined\n ? {\n (msg: Uint8Array): Uint8Array;\n create(): T;\n }\n : {\n (msg: Uint8Array, opts?: Opts): Uint8Array;\n create(opts?: Opts): T;\n });\n/** XOF with output */\nexport type CHashXOF<T extends HashXOF<T> = HashXOF<any>, Opts = undefined> = CHash<T, Opts>;\n\n/** Creates function with outputLen, blockLen, create properties from a class constructor. */\nexport function createHasher<T extends Hash<T>, Opts = undefined>(\n hashCons: HasherCons<T, Opts>,\n info: HashInfo = {}\n): CHash<T, Opts> {\n const hashC: any = (msg: Uint8Array, opts?: Opts) => hashCons(opts).update(msg).digest();\n const tmp = hashCons(undefined);\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts?: Opts) => hashCons(opts);\n Object.assign(hashC, info);\n return Object.freeze(hashC);\n}\n\n/** Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`. */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n const cr = typeof globalThis === 'object' ? (globalThis as any).crypto : null;\n if (typeof cr?.getRandomValues !== 'function')\n throw new Error('crypto.getRandomValues must be defined');\n return cr.getRandomValues(new Uint8Array(bytesLength));\n}\n\n/** Creates OID opts for NIST hashes, with prefix 06 09 60 86 48 01 65 03 04 02. */\nexport const oidNist = (suffix: number): Required<HashInfo> => ({\n oid: Uint8Array.from([0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, suffix]),\n});\n","/**\n * HMAC: RFC2104 message authentication code.\n * @module\n */\nimport { abytes, aexists, ahash, clean, type CHash, type Hash } from './utils.ts';\n\n/** Internal class for HMAC. */\nexport class _HMAC<T extends Hash<T>> implements Hash<_HMAC<T>> {\n oHash: T;\n iHash: T;\n blockLen: number;\n outputLen: number;\n private finished = false;\n private destroyed = false;\n\n constructor(hash: CHash, key: Uint8Array) {\n ahash(hash);\n abytes(key, undefined, 'key');\n this.iHash = hash.create() as T;\n if (typeof this.iHash.update !== 'function')\n throw new Error('Expected instance of class which extends utils.Hash');\n this.blockLen = this.iHash.blockLen;\n this.outputLen = this.iHash.outputLen;\n const blockLen = this.blockLen;\n const pad = new Uint8Array(blockLen);\n // blockLen can be bigger than outputLen\n pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);\n for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36;\n this.iHash.update(pad);\n // By doing update (processing of first block) of outer hash here we can re-use it between multiple calls via clone\n this.oHash = hash.create() as T;\n // Undo internal XOR && apply outer XOR\n for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36 ^ 0x5c;\n this.oHash.update(pad);\n clean(pad);\n }\n update(buf: Uint8Array): this {\n aexists(this);\n this.iHash.update(buf);\n return this;\n }\n digestInto(out: Uint8Array): void {\n aexists(this);\n abytes(out, this.outputLen, 'output');\n this.finished = true;\n this.iHash.digestInto(out);\n this.oHash.update(out);\n this.oHash.digestInto(out);\n this.destroy();\n }\n digest(): Uint8Array {\n const out = new Uint8Array(this.oHash.outputLen);\n this.digestInto(out);\n return out;\n }\n _cloneInto(to?: _HMAC<T>): _HMAC<T> {\n // Create new instance without calling constructor since key already in state and we don't know it.\n to ||= Object.create(Object.getPrototypeOf(this), {});\n const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;\n to = to as this;\n to.finished = finished;\n to.destroyed = destroyed;\n to.blockLen = blockLen;\n to.outputLen = outputLen;\n to.oHash = oHash._cloneInto(to.oHash);\n to.iHash = iHash._cloneInto(to.iHash);\n return to;\n }\n clone(): _HMAC<T> {\n return this._cloneInto();\n }\n destroy(): void {\n this.destroyed = true;\n this.oHash.destroy();\n this.iHash.destroy();\n }\n}\n\n/**\n * HMAC: RFC2104 message authentication code.\n * @param hash - function that would be used e.g. sha256\n * @param key - message key\n * @param message - message data\n * @example\n * import { hmac } from '@noble/hashes/hmac';\n * import { sha256 } from '@noble/hashes/sha2';\n * const mac1 = hmac(sha256, 'key', 'message');\n */\nexport const hmac: {\n (hash: CHash, key: Uint8Array, message: Uint8Array): Uint8Array;\n create(hash: CHash, key: Uint8Array): _HMAC<any>;\n} = (hash: CHash, key: Uint8Array, message: Uint8Array): Uint8Array =>\n new _HMAC<any>(hash, key).update(message).digest();\nhmac.create = (hash: CHash, key: Uint8Array) => new _HMAC<any>(hash, key);\n","/**\n * PBKDF (RFC 2898). Can be used to create a key from password and salt.\n * @module\n */\nimport { hmac } from './hmac.ts';\n// prettier-ignore\nimport {\n ahash, anumber,\n asyncLoop, checkOpts, clean, createView, kdfInputToBytes,\n type CHash,\n type Hash,\n type KDFInput\n} from './utils.ts';\n\n/**\n * PBKDF2 options:\n * * c: iterations, should probably be higher than 100_000\n * * dkLen: desired length of derived key in bytes\n * * asyncTick: max time in ms for which async function can block execution\n */\nexport type Pbkdf2Opt = {\n c: number;\n dkLen?: number;\n asyncTick?: number;\n};\n// Common start and end for sync/async functions\nfunction pbkdf2Init(hash: CHash, _password: KDFInput, _salt: KDFInput, _opts: Pbkdf2Opt) {\n ahash(hash);\n const opts = checkOpts({ dkLen: 32, asyncTick: 10 }, _opts);\n const { c, dkLen, asyncTick } = opts;\n anumber(c, 'c');\n anumber(dkLen, 'dkLen');\n anumber(asyncTick, 'asyncTick');\n if (c < 1) throw new Error('iterations (c) must be >= 1');\n const password = kdfInputToBytes(_password, 'password');\n const salt = kdfInputToBytes(_salt, 'salt');\n // DK = PBKDF2(PRF, Password, Salt, c, dkLen);\n const DK = new Uint8Array(dkLen);\n // U1 = PRF(Password, Salt + INT_32_BE(i))\n const PRF = hmac.create(hash, password);\n const PRFSalt = PRF._cloneInto().update(salt);\n return { c, dkLen, asyncTick, DK, PRF, PRFSalt };\n}\n\nfunction pbkdf2Output<T extends Hash<T>>(\n PRF: Hash<T>,\n PRFSalt: Hash<T>,\n DK: Uint8Array,\n prfW: Hash<T>,\n u: Uint8Array\n) {\n PRF.destroy();\n PRFSalt.destroy();\n if (prfW) prfW.destroy();\n clean(u);\n return DK;\n}\n\n/**\n * PBKDF2-HMAC: RFC 2898 key derivation function\n * @param hash - hash function that would be used e.g. sha256\n * @param password - password from which a derived key is generated\n * @param salt - cryptographic salt\n * @param opts - {c, dkLen} where c is work factor and dkLen is output message size\n * @example\n * const key = pbkdf2(sha256, 'password', 'salt', { dkLen: 32, c: Math.pow(2, 18) });\n */\nexport function pbkdf2(\n hash: CHash,\n password: KDFInput,\n salt: KDFInput,\n opts: Pbkdf2Opt\n): Uint8Array {\n const { c, dkLen, DK, PRF, PRFSalt } = pbkdf2Init(hash, password, salt, opts);\n let prfW: any; // Working copy\n const arr = new Uint8Array(4);\n const view = createView(arr);\n const u = new Uint8Array(PRF.outputLen);\n // DK = T1 + T2 + ⋯ + Tdklen/hlen\n for (let ti = 1, pos = 0; pos < dkLen; ti++, pos += PRF.outputLen) {\n // Ti = F(Password, Salt, c, i)\n const Ti = DK.subarray(pos, pos + PRF.outputLen);\n view.setInt32(0, ti, false);\n // F(Password, Salt, c, i) = U1 ^ U2 ^ ⋯ ^ Uc\n // U1 = PRF(Password, Salt + INT_32_BE(i))\n (prfW = PRFSalt._cloneInto(prfW)).update(arr).digestInto(u);\n Ti.set(u.subarray(0, Ti.length));\n for (let ui = 1; ui < c; ui++) {\n // Uc = PRF(Password, Uc−1)\n PRF._cloneInto(prfW).update(u).digestInto(u);\n for (let i = 0; i < Ti.length; i++) Ti[i] ^= u[i];\n }\n }\n return pbkdf2Output(PRF, PRFSalt, DK, prfW, u);\n}\n\n/**\n * PBKDF2-HMAC: RFC 2898 key derivation function. Async version.\n * @example\n * await pbkdf2Async(sha256, 'password', 'salt', { dkLen: 32, c: 500_000 });\n */\nexport async function pbkdf2Async(\n hash: CHash,\n password: KDFInput,\n salt: KDFInput,\n opts: Pbkdf2Opt\n): Promise<Uint8Array> {\n const { c, dkLen, asyncTick, DK, PRF, PRFSalt } = pbkdf2Init(hash, password, salt, opts);\n let prfW: any; // Working copy\n const arr = new Uint8Array(4);\n const view = createView(arr);\n const u = new Uint8Array(PRF.outputLen);\n // DK = T1 + T2 + ⋯ + Tdklen/hlen\n for (let ti = 1, pos = 0; pos < dkLen; ti++, pos += PRF.outputLen) {\n // Ti = F(Password, Salt, c, i)\n const Ti = DK.subarray(pos, pos + PRF.outputLen);\n view.setInt32(0, ti, false);\n // F(Password, Salt, c, i) = U1 ^ U2 ^ ⋯ ^ Uc\n // U1 = PRF(Password, Salt + INT_32_BE(i))\n (prfW = PRFSalt._cloneInto(prfW)).update(arr).digestInto(u);\n Ti.set(u.subarray(0, Ti.length));\n await asyncLoop(c - 1, asyncTick, () => {\n // Uc = PRF(Password, Uc−1)\n PRF._cloneInto(prfW).update(u).digestInto(u);\n for (let i = 0; i < Ti.length; i++) Ti[i] ^= u[i];\n });\n }\n return pbkdf2Output(PRF, PRFSalt, DK, prfW, u);\n}\n","/**\n * Internal Merkle-Damgard hash utils.\n * @module\n */\nimport { abytes, aexists, aoutput, clean, createView, type Hash } from './utils.ts';\n\n/** Choice: a ? b : c */\nexport function Chi(a: number, b: number, c: number): number {\n return (a & b) ^ (~a & c);\n}\n\n/** Majority function, true if any two inputs is true. */\nexport function Maj(a: number, b: number, c: number): number {\n return (a & b) ^ (a & c) ^ (b & c);\n}\n\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */\nexport abstract class HashMD<T extends HashMD<T>> implements Hash<T> {\n protected abstract process(buf: DataView, offset: number): void;\n protected abstract get(): number[];\n protected abstract set(...args: number[]): void;\n abstract destroy(): void;\n protected abstract roundClean(): void;\n\n readonly blockLen: number;\n readonly outputLen: number;\n readonly padOffset: number;\n readonly isLE: boolean;\n\n // For partial updates less than block size\n protected buffer: Uint8Array;\n protected view: DataView;\n protected finished = false;\n protected length = 0;\n protected pos = 0;\n protected destroyed = false;\n\n constructor(blockLen: number, outputLen: number, padOffset: number, isLE: boolean) {\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data: Uint8Array): this {\n aexists(this);\n abytes(data);\n const { view, buffer, blockLen } = this;\n const len = data.length;\n for (let pos = 0; pos < len; ) {\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = createView(data);\n for (; blockLen <= len - pos; pos += blockLen) this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out: Uint8Array): void {\n aexists(this);\n aoutput(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n clean(this.buffer.subarray(pos));\n // we have less than padOffset left in buffer, so we cannot put length in\n // current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for (let i = pos; i < blockLen; i++) buffer[i] = 0;\n // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64 bits of that value.\n view.setBigUint64(blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = createView(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which must be fused in single op with modulo by JIT\n if (len % 4) throw new Error('_sha2: outputLen must be aligned to 32bit');\n const outLen = len / 4;\n const state = this.get();\n if (outLen > state.length) throw new Error('_sha2: outputLen bigger than state');\n for (let i = 0; i < outLen; i++) oview.setUint32(4 * i, state[i], isLE);\n }\n digest(): Uint8Array {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to?: T): T {\n to ||= new (this.constructor as any)() as T;\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.destroyed = destroyed;\n to.finished = finished;\n to.length = length;\n to.pos = pos;\n if (length % blockLen) to.buffer.set(buffer);\n return to as unknown as any;\n }\n clone(): T {\n return this._cloneInto();\n }\n}\n\n/**\n * Initial SHA-2 state: fractional parts of square roots of first 16 primes 2..53.\n * Check out `test/misc/sha2-gen-iv.js` for recomputation guide.\n */\n\n/** Initial SHA256 state. Bits 0..32 of frac part of sqrt of primes 2..19 */\nexport const SHA256_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n]);\n\n/** Initial SHA224 state. Bits 32..64 of frac part of sqrt of primes 23..53 */\nexport const SHA224_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4,\n]);\n\n/** Initial SHA384 state. Bits 0..64 of frac part of sqrt of primes 23..53 */\nexport const SHA384_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4,\n]);\n\n/** Initial SHA512 state. Bits 0..64 of frac part of sqrt of primes 2..19 */\nexport const SHA512_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179,\n]);\n","/**\n * Internal helpers for u64. BigUint64Array is too slow as per 2025, so we implement it using Uint32Array.\n * @todo re-check https://issues.chromium.org/issues/42212588\n * @module\n */\nconst U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\n\nfunction fromBig(\n n: bigint,\n le = false\n): {\n h: number;\n l: number;\n} {\n if (le) return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\n\nfunction split(lst: bigint[], le = false): Uint32Array[] {\n const len = lst.length;\n let Ah = new Uint32Array(len);\n let Al = new Uint32Array(len);\n for (let i = 0; i < len; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\n\nconst toBig = (h: number, l: number): bigint => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h: number, _l: number, s: number): number => h >>> s;\nconst shrSL = (h: number, l: number, s: number): number => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h: number, l: number, s: number): number => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h: number, l: number, s: number): number => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h: number, l: number, s: number): number => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h: number, l: number, s: number): number => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h: number, l: number): number => l;\nconst rotr32L = (h: number, _l: number): number => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h: number, l: number, s: number): number => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h: number, l: number, s: number): number => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h: number, l: number, s: number): number => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h: number, l: number, s: number): number => (h << (s - 32)) | (l >>> (64 - s));\n\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(\n Ah: number,\n Al: number,\n Bh: number,\n Bl: number\n): {\n h: number;\n l: number;\n} {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al: number, Bl: number, Cl: number): number => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low: number, Ah: number, Bh: number, Ch: number): number =>\n (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al: number, Bl: number, Cl: number, Dl: number): number =>\n (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number): number =>\n (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al: number, Bl: number, Cl: number, Dl: number, El: number): number =>\n (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number): number =>\n (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n\n// prettier-ignore\nexport {\n add, add3H, add3L, add4H, add4L, add5H, add5L, fromBig, rotlBH, rotlBL, rotlSH, rotlSL, rotr32H, rotr32L, rotrBH, rotrBL, rotrSH, rotrSL, shrSH, shrSL, split, toBig\n};\n// prettier-ignore\nconst u64: { fromBig: typeof fromBig; split: typeof split; toBig: (h: number, l: number) => bigint; shrSH: (h: number, _l: number, s: number) => number; shrSL: (h: number, l: number, s: number) => number; rotrSH: (h: number, l: number, s: number) => number; rotrSL: (h: number, l: number, s: number) => number; rotrBH: (h: number, l: number, s: number) => number; rotrBL: (h: number, l: number, s: number) => number; rotr32H: (_h: number, l: number) => number; rotr32L: (h: number, _l: number) => number; rotlSH: (h: number, l: number, s: number) => number; rotlSL: (h: number, l: number, s: number) => number; rotlBH: (h: number, l: number, s: number) => number; rotlBL: (h: number, l: number, s: number) => number; add: typeof add; add3L: (Al: number, Bl: number, Cl: number) => number; add3H: (low: number, Ah: number, Bh: number, Ch: number) => number; add4L: (Al: number, Bl: number, Cl: number, Dl: number) => number; add4H: (low: number, Ah: number, Bh: number, Ch: number, Dh: number) => number; add5H: (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number) => number; add5L: (Al: number, Bl: number, Cl: number, Dl: number, El: number) => number; } = {\n fromBig, split, toBig,\n shrSH, shrSL,\n rotrSH, rotrSL, rotrBH, rotrBL,\n rotr32H, rotr32L,\n rotlSH, rotlSL, rotlBH, rotlBL,\n add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexport default u64;\n","/**\n * SHA2 hash function. A.k.a. sha256, sha384, sha512, sha512_224, sha512_256.\n * SHA256 is the fastest hash implementable in JS, even faster than Blake3.\n * Check out [RFC 4634](https://www.rfc-editor.org/rfc/rfc4634) and\n * [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n */\nimport { Chi, HashMD, Maj, SHA224_IV, SHA256_IV, SHA384_IV, SHA512_IV } from './_md.ts';\nimport * as u64 from './_u64.ts';\nimport { type CHash, clean, createHasher, oidNist, rotr } from './utils.ts';\n\n/**\n * Round constants:\n * First 32 bits of fractional parts of the cube roots of the first 64 primes 2..311)\n */\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ Uint32Array.from([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n\n/** Reusable temporary buffer. \"W\" comes straight from spec. */\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\n\n/** Internal 32-byte base SHA2 hash class. */\nabstract class SHA2_32B<T extends SHA2_32B<T>> extends HashMD<T> {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n protected abstract A: number;\n protected abstract B: number;\n protected abstract C: number;\n protected abstract D: number;\n protected abstract E: number;\n protected abstract F: number;\n protected abstract G: number;\n protected abstract H: number;\n\n constructor(outputLen: number) {\n super(64, outputLen, 8, false);\n }\n protected get(): [number, number, number, number, number, number, number, number] {\n const { A, B, C, D, E, F, G, H } = this;\n return [A, B, C, D, E, F, G, H];\n }\n // prettier-ignore\n protected set(\n A: number, B: number, C: number, D: number, E: number, F: number, G: number, H: number\n ): void {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n this.F = F | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n protected process(view: DataView, offset: number): void {\n // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) SHA256_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 64; i++) {\n const W15 = SHA256_W[i - 15];\n const W2 = SHA256_W[i - 2];\n const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n }\n // Compression function main loop, 64 rounds\n let { A, B, C, D, E, F, G, H } = this;\n for (let i = 0; i < 64; i++) {\n const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n const T2 = (sigma0 + Maj(A, B, C)) | 0;\n H = G;\n G = F;\n F = E;\n E = (D + T1) | 0;\n D = C;\n C = B;\n B = A;\n A = (T1 + T2) | 0;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n F = (F + this.F) | 0;\n G = (G + this.G) | 0;\n H = (H + this.H) | 0;\n this.set(A, B, C, D, E, F, G, H);\n }\n protected roundClean(): void {\n clean(SHA256_W);\n }\n destroy(): void {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n clean(this.buffer);\n }\n}\n\n/** Internal SHA2-256 hash class. */\nexport class _SHA256 extends SHA2_32B<_SHA256> {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n protected A: number = SHA256_IV[0] | 0;\n protected B: number = SHA256_IV[1] | 0;\n protected C: number = SHA256_IV[2] | 0;\n protected D: number = SHA256_IV[3] | 0;\n protected E: number = SHA256_IV[4] | 0;\n protected F: number = SHA256_IV[5] | 0;\n protected G: number = SHA256_IV[6] | 0;\n protected H: number = SHA256_IV[7] | 0;\n constructor() {\n super(32);\n }\n}\n\n/** Internal SHA2-224 hash class. */\nexport class _SHA224 extends SHA2_32B<_SHA224> {\n protected A: number = SHA224_IV[0] | 0;\n protected B: number = SHA224_IV[1] | 0;\n protected C: number = SHA224_IV[2] | 0;\n protected D: number = SHA224_IV[3] | 0;\n protected E: number = SHA224_IV[4] | 0;\n protected F: number = SHA224_IV[5] | 0;\n protected G: number = SHA224_IV[6] | 0;\n protected H: number = SHA224_IV[7] | 0;\n constructor() {\n super(28);\n }\n}\n\n// SHA2-512 is slower than sha256 in js because u64 operations are slow.\n\n// Round contants\n// First 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409\n// prettier-ignore\nconst K512 = /* @__PURE__ */ (() => u64.split([\n '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n))))();\nconst SHA512_Kh = /* @__PURE__ */ (() => K512[0])();\nconst SHA512_Kl = /* @__PURE__ */ (() => K512[1])();\n\n// Reusable temporary buffers\nconst SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\nconst SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\n\n/** Internal 64-byte base SHA2 hash class. */\nabstract class SHA2_64B<T extends SHA2_64B<T>> extends HashMD<T> {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n // h -- high 32 bits, l -- low 32 bits\n protected abstract Ah: number;\n protected abstract Al: number;\n protected abstract Bh: number;\n protected abstract Bl: number;\n protected abstract Ch: number;\n protected abstract Cl: number;\n protected abstract Dh: number;\n protected abstract Dl: number;\n protected abstract Eh: number;\n protected abstract El: number;\n protected abstract Fh: number;\n protected abstract Fl: number;\n protected abstract Gh: number;\n protected abstract Gl: number;\n protected abstract Hh: number;\n protected abstract Hl: number;\n\n constructor(outputLen: number) {\n super(128, outputLen, 16, false);\n }\n // prettier-ignore\n protected get(): [\n number, number, number, number, number, number, number, number,\n number, number, number, number, number, number, number, number\n ] {\n const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n }\n // prettier-ignore\n protected set(\n Ah: number, Al: number, Bh: number, Bl: number, Ch: number, Cl: number, Dh: number, Dl: number,\n Eh: number, El: number, Fh: number, Fl: number, Gh: number, Gl: number, Hh: number, Hl: number\n ): void {\n this.Ah = Ah | 0;\n this.Al = Al | 0;\n this.Bh = Bh | 0;\n this.Bl = Bl | 0;\n this.Ch = Ch | 0;\n this.Cl = Cl | 0;\n this.Dh = Dh | 0;\n this.Dl = Dl | 0;\n this.Eh = Eh | 0;\n this.El = El | 0;\n this.Fh = Fh | 0;\n this.Fl = Fl | 0;\n this.Gh = Gh | 0;\n this.Gl = Gl | 0;\n this.Hh = Hh | 0;\n this.Hl = Hl | 0;\n }\n protected process(view: DataView, offset: number): void {\n // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) {\n SHA512_W_H[i] = view.getUint32(offset);\n SHA512_W_L[i] = view.getUint32((offset += 4));\n }\n for (let i = 16; i < 80; i++) {\n // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n const W15h = SHA512_W_H[i - 15] | 0;\n const W15l = SHA512_W_L[i - 15] | 0;\n const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n const W2h = SHA512_W_H[i - 2] | 0;\n const W2l = SHA512_W_L[i - 2] | 0;\n const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n SHA512_W_H[i] = SUMh | 0;\n SHA512_W_L[i] = SUMl | 0;\n }\n let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n // Compression function main loop, 80 rounds\n for (let i = 0; i < 80; i++) {\n // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n const CHIl = (El & Fl) ^ (~El & Gl);\n // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n // prettier-ignore\n const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n const T1l = T1ll | 0;\n // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n Hh = Gh | 0;\n Hl = Gl | 0;\n Gh = Fh | 0;\n Gl = Fl | 0;\n Fh = Eh | 0;\n Fl = El | 0;\n ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n Dh = Ch | 0;\n Dl = Cl | 0;\n Ch = Bh | 0;\n Cl = Bl | 0;\n Bh = Ah | 0;\n Bl = Al | 0;\n const All = u64.add3L(T1l, sigma0l, MAJl);\n Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n Al = All | 0;\n }\n // Add the compressed chunk to the current hash value\n ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n }\n protected roundClean(): void {\n clean(SHA512_W_H, SHA512_W_L);\n }\n destroy(): void {\n clean(this.buffer);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\n\n/** Internal SHA2-512 hash class. */\nexport class _SHA512 extends SHA2_64B<_SHA512> {\n protected Ah: number = SHA512_IV[0] | 0;\n protected Al: number = SHA512_IV[1] | 0;\n protected Bh: number = SHA512_IV[2] | 0;\n protected Bl: number = SHA512_IV[3] | 0;\n protected Ch: number = SHA512_IV[4] | 0;\n protected Cl: number = SHA512_IV[5] | 0;\n protected Dh: number = SHA512_IV[6] | 0;\n protected Dl: number = SHA512_IV[7] | 0;\n protected Eh: number = SHA512_IV[8] | 0;\n protected El: number = SHA512_IV[9] | 0;\n protected Fh: number = SHA512_IV[10] | 0;\n protected Fl: number = SHA512_IV[11] | 0;\n protected Gh: number = SHA512_IV[12] | 0;\n protected Gl: number = SHA512_IV[13] | 0;\n protected Hh: number = SHA512_IV[14] | 0;\n protected Hl: number = SHA512_IV[15] | 0;\n\n constructor() {\n super(64);\n }\n}\n\n/** Internal SHA2-384 hash class. */\nexport class _SHA384 extends SHA2_64B<_SHA384> {\n protected Ah: number = SHA384_IV[0] | 0;\n protected Al: number = SHA384_IV[1] | 0;\n protected Bh: number = SHA384_IV[2] | 0;\n protected Bl: number = SHA384_IV[3] | 0;\n protected Ch: number = SHA384_IV[4] | 0;\n protected Cl: number = SHA384_IV[5] | 0;\n protected Dh: number = SHA384_IV[6] | 0;\n protected Dl: number = SHA384_IV[7] | 0;\n protected Eh: number = SHA384_IV[8] | 0;\n protected El: number = SHA384_IV[9] | 0;\n protected Fh: number = SHA384_IV[10] | 0;\n protected Fl: number = SHA384_IV[11] | 0;\n protected Gh: number = SHA384_IV[12] | 0;\n protected Gl: number = SHA384_IV[13] | 0;\n protected Hh: number = SHA384_IV[14] | 0;\n protected Hl: number = SHA384_IV[15] | 0;\n\n constructor() {\n super(48);\n }\n}\n\n/**\n * Truncated SHA512/256 and SHA512/224.\n * SHA512_IV is XORed with 0xa5a5a5a5a5a5a5a5, then used as \"intermediary\" IV of SHA512/t.\n * Then t hashes string to produce result IV.\n * See `test/misc/sha2-gen-iv.js`.\n */\n\n/** SHA512/224 IV */\nconst T224_IV = /* @__PURE__ */ Uint32Array.from([\n 0x8c3d37c8, 0x19544da2, 0x73e19966, 0x89dcd4d6, 0x1dfab7ae, 0x32ff9c82, 0x679dd514, 0x582f9fcf,\n 0x0f6d2b69, 0x7bd44da8, 0x77e36f73, 0x04c48942, 0x3f9d85a8, 0x6a1d36c8, 0x1112e6ad, 0x91d692a1,\n]);\n\n/** SHA512/256 IV */\nconst T256_IV = /* @__PURE__ */ Uint32Array.from([\n 0x22312194, 0xfc2bf72c, 0x9f555fa3, 0xc84c64c2, 0x2393b86b, 0x6f53b151, 0x96387719, 0x5940eabd,\n 0x96283ee2, 0xa88effe3, 0xbe5e1e25, 0x53863992, 0x2b0199fc, 0x2c85b8aa, 0x0eb72ddc, 0x81c52ca2,\n]);\n\n/** Internal SHA2-512/224 hash class. */\nexport class _SHA512_224 extends SHA2_64B<_SHA512_224> {\n protected Ah: number = T224_IV[0] | 0;\n protected Al: number = T224_IV[1] | 0;\n protected Bh: number = T224_IV[2] | 0;\n protected Bl: number = T224_IV[3] | 0;\n protected Ch: number = T224_IV[4] | 0;\n protected Cl: number = T224_IV[5] | 0;\n protected Dh: number = T224_IV[6] | 0;\n protected Dl: number = T224_IV[7] | 0;\n protected Eh: number = T224_IV[8] | 0;\n protected El: number = T224_IV[9] | 0;\n protected Fh: number = T224_IV[10] | 0;\n protected Fl: number = T224_IV[11] | 0;\n protected Gh: number = T224_IV[12] | 0;\n protected Gl: number = T224_IV[13] | 0;\n protected Hh: number = T224_IV[14] | 0;\n protected Hl: number = T224_IV[15] | 0;\n\n constructor() {\n super(28);\n }\n}\n\n/** Internal SHA2-512/256 hash class. */\nexport class _SHA512_256 extends SHA2_64B<_SHA512_256> {\n protected Ah: number = T256_IV[0] | 0;\n protected Al: number = T256_IV[1] | 0;\n protected Bh: number = T256_IV[2] | 0;\n protected Bl: number = T256_IV[3] | 0;\n protected Ch: number = T256_IV[4] | 0;\n protected Cl: number = T256_IV[5] | 0;\n protected Dh: number = T256_IV[6] | 0;\n protected Dl: number = T256_IV[7] | 0;\n protected Eh: number = T256_IV[8] | 0;\n protected El: number = T256_IV[9] | 0;\n protected Fh: number = T256_IV[10] | 0;\n protected Fl: number = T256_IV[11] | 0;\n protected Gh: number = T256_IV[12] | 0;\n protected Gl: number = T256_IV[13] | 0;\n protected Hh: number = T256_IV[14] | 0;\n protected Hl: number = T256_IV[15] | 0;\n\n constructor() {\n super(32);\n }\n}\n\n/**\n * SHA2-256 hash function from RFC 4634. In JS it's the fastest: even faster than Blake3. Some info:\n *\n * - Trying 2^128 hashes would get 50% chance of collision, using birthday attack.\n * - BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n * - Each sha256 hash is executing 2^18 bit operations.\n * - Good 2024 ASICs can do 200Th/sec with 3500 watts of power, corresponding to 2^36 hashes/joule.\n */\nexport const sha256: CHash<_SHA256> = /* @__PURE__ */ createHasher(\n () => new _SHA256(),\n /* @__PURE__ */ oidNist(0x01)\n);\n/** SHA2-224 hash function from RFC 4634 */\nexport const sha224: CHash<_SHA224> = /* @__PURE__ */ createHasher(\n () => new _SHA224(),\n /* @__PURE__ */ oidNist(0x04)\n);\n\n/** SHA2-512 hash function from RFC 4634. */\nexport const sha512: CHash<_SHA512> = /* @__PURE__ */ createHasher(\n () => new _SHA512(),\n /* @__PURE__ */ oidNist(0x03)\n);\n/** SHA2-384 hash function from RFC 4634. */\nexport const sha384: CHash<_SHA384> = /* @__PURE__ */ createHasher(\n () => new _SHA384(),\n /* @__PURE__ */ oidNist(0x02)\n);\n\n/**\n * SHA2-512/256 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_256: CHash<_SHA512_256> = /* @__PURE__ */ createHasher(\n () => new _SHA512_256(),\n /* @__PURE__ */ oidNist(0x06)\n);\n/**\n * SHA2-512/224 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_224: CHash<_SHA512_224> = /* @__PURE__ */ createHasher(\n () => new _SHA512_224(),\n /* @__PURE__ */ oidNist(0x05)\n);\n","/*! scure-bip39 - MIT License (c) 2022 Patricio Palladino, Paul Miller (paulmillr.com) */\nimport { pbkdf2, pbkdf2Async } from '@noble/hashes/pbkdf2.js';\nimport { sha256, sha512 } from '@noble/hashes/sha2.js';\nimport { abytes, anumber, randomBytes } from '@noble/hashes/utils.js';\nimport { pbkdf2 as pbkdf2web, sha512 as sha512web } from '@noble/hashes/webcrypto.js';\nimport { utils as baseUtils } from '@scure/base';\n// Japanese wordlist\nconst isJapanese = (wordlist) => wordlist[0] === '\\u3042\\u3044\\u3053\\u304f\\u3057\\u3093';\n// Normalization replaces equivalent sequences of characters\n// so that any two texts that are equivalent will be reduced\n// to the same sequence of code points, called the normal form of the original text.\n// https://tonsky.me/blog/unicode/#why-is-a----\nfunction nfkd(str) {\n if (typeof str !== 'string')\n throw new TypeError('invalid mnemonic type: ' + typeof str);\n return str.normalize('NFKD');\n}\nfunction normalize(str) {\n const norm = nfkd(str);\n const words = norm.split(' ');\n if (![12, 15, 18, 21, 24].includes(words.length))\n throw new Error('Invalid mnemonic');\n return { nfkd: norm, words };\n}\nfunction aentropy(ent) {\n abytes(ent);\n if (![16, 20, 24, 28, 32].includes(ent.length))\n throw new Error('invalid entropy length');\n}\n/**\n * Generate x random words. Uses Cryptographically-Secure Random Number Generator.\n * @param wordlist imported wordlist for specific language\n * @param strength mnemonic strength 128-256 bits\n * @example\n * generateMnemonic(wordlist, 128)\n * // 'legal winner thank year wave sausage worth useful legal winner thank yellow'\n */\nexport function generateMnemonic(wordlist, strength = 128) {\n anumber(strength);\n if (strength % 32 !== 0 || strength > 256)\n throw new TypeError('Invalid entropy');\n return entropyToMnemonic(randomBytes(strength / 8), wordlist);\n}\nconst calcChecksum = (entropy) => {\n // Checksum is ent.length/4 bits long\n const bitsLeft = 8 - entropy.length / 4;\n // Zero rightmost \"bitsLeft\" bits in byte\n // For example: bitsLeft=4 val=10111101 -> 10110000\n return new Uint8Array([(sha256(entropy)[0] >> bitsLeft) << bitsLeft]);\n};\nfunction getCoder(wordlist) {\n if (!Array.isArray(wordlist) || wordlist.length !== 2048 || typeof wordlist[0] !== 'string')\n throw new Error('Wordlist: expected array of 2048 strings');\n wordlist.forEach((i) => {\n if (typeof i !== 'string')\n throw new Error('wordlist: non-string element: ' + i);\n });\n return baseUtils.chain(baseUtils.checksum(1, calcChecksum), baseUtils.radix2(11, true), baseUtils.alphabet(wordlist));\n}\n/**\n * Reversible: Converts mnemonic string to raw entropy in form of byte array.\n * @param mnemonic 12-24 words\n * @param wordlist imported wordlist for specific language\n * @example\n * const mnem = 'legal winner thank year wave sausage worth useful legal winner thank yellow';\n * mnemonicToEntropy(mnem, wordlist)\n * // Produces\n * new Uint8Array([\n * 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,\n * 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f\n * ])\n */\nexport function mnemonicToEntropy(mnemonic, wordlist) {\n const { words } = normalize(mnemonic);\n const entropy = getCoder(wordlist).decode(words);\n aentropy(entropy);\n return entropy;\n}\n/**\n * Reversible: Converts raw entropy in form of byte array to mnemonic string.\n * @param entropy byte array\n * @param wordlist imported wordlist for specific language\n * @returns 12-24 words\n * @example\n * const ent = new Uint8Array([\n * 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,\n * 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f\n * ]);\n * entropyToMnemonic(ent, wordlist);\n * // 'legal winner thank year wave sausage worth useful legal winner thank yellow'\n */\nexport function entropyToMnemonic(entropy, wordlist) {\n aentropy(entropy);\n const words = getCoder(wordlist).encode(entropy);\n return words.join(isJapanese(wordlist) ? '\\u3000' : ' ');\n}\n/**\n * Validates mnemonic for being 12-24 words contained in `wordlist`.\n */\nexport function validateMnemonic(mnemonic, wordlist) {\n try {\n mnemonicToEntropy(mnemonic, wordlist);\n }\n catch (e) {\n return false;\n }\n return true;\n}\nconst psalt = (passphrase) => nfkd('mnemonic' + passphrase);\n/**\n * Irreversible: Uses KDF to derive 64 bytes of key data from mnemonic + optional password.\n * @param mnemonic 12-24 words\n * @param passphrase string that will additionally protect the key\n * @returns 64 bytes of key data\n * @example\n * const mnem = 'legal winner thank year wave sausage worth useful legal winner thank yellow';\n * await mnemonicToSeed(mnem, 'password');\n * // new Uint8Array([...64 bytes])\n */\nexport function mnemonicToSeed(mnemonic, passphrase = '') {\n return pbkdf2Async(sha512, normalize(mnemonic).nfkd, psalt(passphrase), { c: 2048, dkLen: 64 });\n}\n/**\n * Irreversible: Uses KDF to derive 64 bytes of key data from mnemonic + optional password.\n * @param mnemonic 12-24 words\n * @param passphrase string that will additionally protect the key\n * @returns 64 bytes of key data\n * @example\n * const mnem = 'legal winner thank year wave sausage worth useful legal winner thank yellow';\n * mnemonicToSeedSync(mnem, 'password');\n * // new Uint8Array([...64 bytes])\n */\nexport function mnemonicToSeedSync(mnemonic, passphrase = '') {\n return pbkdf2(sha512, normalize(mnemonic).nfkd, psalt(passphrase), { c: 2048, dkLen: 64 });\n}\n/**\n * Uses native, built-in functionality, provided by globalThis.crypto.\n * Irreversible: Uses KDF to derive 64 bytes of key data from mnemonic + optional password.\n * @param mnemonic 12-24 words\n * @param passphrase string that will additionally protect the key\n * @returns 64 bytes of key data\n * @example\n * const mnem = 'legal winner thank year wave sausage worth useful legal winner thank yellow';\n * mnemonicToSeedWebcrypto(mnem, 'password');\n * // new Uint8Array([...64 bytes])\n */\nexport function mnemonicToSeedWebcrypto(mnemonic, passphrase = '') {\n return pbkdf2web(sha512web, normalize(mnemonic).nfkd, psalt(passphrase), { c: 2048, dkLen: 64 });\n}\n","export const wordlist = `abandon\nability\nable\nabout\nabove\nabsent\nabsorb\nabstract\nabsurd\nabuse\naccess\naccident\naccount\naccuse\nachieve\nacid\nacoustic\nacquire\nacross\nact\naction\nactor\nactress\nactual\nadapt\nadd\naddict\naddress\nadjust\nadmit\nadult\nadvance\nadvice\naerobic\naffair\nafford\nafraid\nagain\nage\nagent\nagree\nahead\naim\nair\nairport\naisle\nalarm\nalbum\nalcohol\nalert\nalien\nall\nalley\nallow\nalmost\nalone\nalpha\nalready\nalso\nalter\nalways\namateur\namazing\namong\namount\namused\nanalyst\nanchor\nancient\nanger\nangle\nangry\nanimal\nankle\nannounce\nannual\nanother\nanswer\nantenna\nantique\nanxiety\nany\napart\napology\nappear\napple\napprove\napril\narch\narctic\narea\narena\nargue\narm\narmed\narmor\narmy\naround\narrange\narrest\narrive\narrow\nart\nartefact\nartist\nartwork\nask\naspect\nassault\nasset\nassist\nassume\nasthma\nathlete\natom\nattack\nattend\nattitude\nattract\nauction\naudit\naugust\naunt\nauthor\nauto\nautumn\naverage\navocado\navoid\nawake\naware\naway\nawesome\nawful\nawkward\naxis\nbaby\nbachelor\nbacon\nbadge\nbag\nbalance\nbalcony\nball\nbamboo\nbanana\nbanner\nbar\nbarely\nbargain\nbarrel\nbase\nbasic\nbasket\nbattle\nbeach\nbean\nbeauty\nbecause\nbecome\nbeef\nbefore\nbegin\nbehave\nbehind\nbelieve\nbelow\nbelt\nbench\nbenefit\nbest\nbetray\nbetter\nbetween\nbeyond\nbicycle\nbid\nbike\nbind\nbiology\nbird\nbirth\nbitter\nblack\nblade\nblame\nblanket\nblast\nbleak\nbless\nblind\nblood\nblossom\nblouse\nblue\nblur\nblush\nboard\nboat\nbody\nboil\nbomb\nbone\nbonus\nbook\nboost\nborder\nboring\nborrow\nboss\nbottom\nbounce\nbox\nboy\nbracket\nbrain\nbrand\nbrass\nbrave\nbread\nbreeze\nbrick\nbridge\nbrief\nbright\nbring\nbrisk\nbroccoli\nbroken\nbronze\nbroom\nbrother\nbrown\nbrush\nbubble\nbuddy\nbudget\nbuffalo\nbuild\nbulb\nbulk\nbullet\nbundle\nbunker\nburden\nburger\nburst\nbus\nbusiness\nbusy\nbutter\nbuyer\nbuzz\ncabbage\ncabin\ncable\ncactus\ncage\ncake\ncall\ncalm\ncamera\ncamp\ncan\ncanal\ncancel\ncandy\ncannon\ncanoe\ncanvas\ncanyon\ncapable\ncapital\ncaptain\ncar\ncarbon\ncard\ncargo\ncarpet\ncarry\ncart\ncase\ncash\ncasino\ncastle\ncasual\ncat\ncatalog\ncatch\ncategory\ncattle\ncaught\ncause\ncaution\ncave\nceiling\ncelery\ncement\ncensus\ncentury\ncereal\ncertain\nchair\nchalk\nchampion\nchange\nchaos\nchapter\ncharge\nchase\nchat\ncheap\ncheck\ncheese\nchef\ncherry\nchest\nchicken\nchief\nchild\nchimney\nchoice\nchoose\nchronic\nchuckle\nchunk\nchurn\ncigar\ncinnamon\ncircle\ncitizen\ncity\ncivil\nclaim\nclap\nclarify\nclaw\nclay\nclean\nclerk\nclever\nclick\nclient\ncliff\nclimb\nclinic\nclip\nclock\nclog\nclose\ncloth\ncloud\nclown\nclub\nclump\ncluster\nclutch\ncoach\ncoast\ncoconut\ncode\ncoffee\ncoil\ncoin\ncollect\ncolor\ncolumn\ncombine\ncome\ncomfort\ncomic\ncommon\ncompany\nconcert\nconduct\nconfirm\ncongress\nconnect\nconsider\ncontrol\nconvince\ncook\ncool\ncopper\ncopy\ncoral\ncore\ncorn\ncorrect\ncost\ncotton\ncouch\ncountry\ncouple\ncourse\ncousin\ncover\ncoyote\ncrack\ncradle\ncraft\ncram\ncrane\ncrash\ncrater\ncrawl\ncrazy\ncream\ncredit\ncreek\ncrew\ncricket\ncrime\ncrisp\ncritic\ncrop\ncross\ncrouch\ncrowd\ncrucial\ncruel\ncruise\ncrumble\ncrunch\ncrush\ncry\ncrystal\ncube\nculture\ncup\ncupboard\ncurious\ncurrent\ncurtain\ncurve\ncushion\ncustom\ncute\ncycle\ndad\ndamage\ndamp\ndance\ndanger\ndaring\ndash\ndaughter\ndawn\nday\ndeal\ndebate\ndebris\ndecade\ndecember\ndecide\ndecline\ndecorate\ndecrease\ndeer\ndefense\ndefine\ndefy\ndegree\ndelay\ndeliver\ndemand\ndemise\ndenial\ndentist\ndeny\ndepart\ndepend\ndeposit\ndepth\ndeputy\nderive\ndescribe\ndesert\ndesign\ndesk\ndespair\ndestroy\ndetail\ndetect\ndevelop\ndevice\ndevote\ndiagram\ndial\ndiamond\ndiary\ndice\ndiesel\ndiet\ndiffer\ndigital\ndignity\ndilemma\ndinner\ndinosaur\ndirect\ndirt\ndisagree\ndiscover\ndisease\ndish\ndismiss\ndisorder\ndisplay\ndistance\ndivert\ndivide\ndivorce\ndizzy\ndoctor\ndocument\ndog\ndoll\ndolphin\ndomain\ndonate\ndonkey\ndonor\ndoor\ndose\ndouble\ndove\ndraft\ndragon\ndrama\ndrastic\ndraw\ndream\ndress\ndrift\ndrill\ndrink\ndrip\ndrive\ndrop\ndrum\ndry\nduck\ndumb\ndune\nduring\ndust\ndutch\nduty\ndwarf\ndynamic\neager\neagle\nearly\nearn\nearth\neasily\neast\neasy\necho\necology\neconomy\nedge\nedit\neducate\neffort\negg\neight\neither\nelbow\nelder\nelectric\nelegant\nelement\nelephant\nelevator\nelite\nelse\nembark\nembody\nembrace\nemerge\nemotion\nemploy\nempower\nempty\nenable\nenact\nend\nendless\nendorse\nenemy\nenergy\nenforce\nengage\nengine\nenhance\nenjoy\nenlist\nenough\nenrich\nenroll\nensure\nenter\nentire\nentry\nenvelope\nepisode\nequal\nequip\nera\nerase\nerode\nerosion\nerror\nerupt\nescape\nessay\nessence\nestate\neternal\nethics\nevidence\nevil\nevoke\nevolve\nexact\nexample\nexcess\nexchange\nexcite\nexclude\nexcuse\nexecute\nexercise\nexhaust\nexhibit\nexile\nexist\nexit\nexotic\nexpand\nexpect\nexpire\nexplain\nexpose\nexpress\nextend\nextra\neye\neyebrow\nfabric\nface\nfaculty\nfade\nfaint\nfaith\nfall\nfalse\nfame\nfamily\nfamous\nfan\nfancy\nfantasy\nfarm\nfashion\nfat\nfatal\nfather\nfatigue\nfault\nfavorite\nfeature\nfebruary\nfederal\nfee\nfeed\nfeel\nfemale\nfence\nfestival\nfetch\nfever\nfew\nfiber\nfiction\nfield\nfigure\nfile\nfilm\nfilter\nfinal\nfind\nfine\nfinger\nfinish\nfire\nfirm\nfirst\nfiscal\nfish\nfit\nfitness\nfix\nflag\nflame\nflash\nflat\nflavor\nflee\nflight\nflip\nfloat\nflock\nfloor\nflower\nfluid\nflush\nfly\nfoam\nfocus\nfog\nfoil\nfold\nfollow\nfood\nfoot\nforce\nforest\nforget\nfork\nfortune\nforum\nforward\nfossil\nfoster\nfound\nfox\nfragile\nframe\nfrequent\nfresh\nfriend\nfringe\nfrog\nfront\nfrost\nfrown\nfrozen\nfruit\nfuel\nfun\nfunny\nfurnace\nfury\nfuture\ngadget\ngain\ngalaxy\ngallery\ngame\ngap\ngarage\ngarbage\ngarden\ngarlic\ngarment\ngas\ngasp\ngate\ngather\ngauge\ngaze\ngeneral\ngenius\ngenre\ngentle\ngenuine\ngesture\nghost\ngiant\ngift\ngiggle\nginger\ngiraffe\ngirl\ngive\nglad\nglance\nglare\nglass\nglide\nglimpse\nglobe\ngloom\nglory\nglove\nglow\nglue\ngoat\ngoddess\ngold\ngood\ngoose\ngorilla\ngospel\ngossip\ngovern\ngown\ngrab\ngrace\ngrain\ngrant\ngrape\ngrass\ngravity\ngreat\ngreen\ngrid\ngrief\ngrit\ngrocery\ngroup\ngrow\ngrunt\nguard\nguess\nguide\nguilt\nguitar\ngun\ngym\nhabit\nhair\nhalf\nhammer\nhamster\nhand\nhappy\nharbor\nhard\nharsh\nharvest\nhat\nhave\nhawk\nhazard\nhead\nhealth\nheart\nheavy\nhedgehog\nheight\nhello\nhelmet\nhelp\nhen\nhero\nhidden\nhigh\nhill\nhint\nhip\nhire\nhistory\nhobby\nhockey\nhold\nhole\nholiday\nhollow\nhome\nhoney\nhood\nhope\nhorn\nhorror\nhorse\nhospital\nhost\nhotel\nhour\nhover\nhub\nhuge\nhuman\nhumble\nhumor\nhundred\nhungry\nhunt\nhurdle\nhurry\nhurt\nhusband\nhybrid\nice\nicon\nidea\nidentify\nidle\nignore\nill\nillegal\nillness\nimage\nimitate\nimmense\nimmune\nimpact\nimpose\nimprove\nimpulse\ninch\ninclude\nincome\nincrease\nindex\nindicate\nindoor\nindustry\ninfant\ninflict\ninform\ninhale\ninherit\ninitial\ninject\ninjury\ninmate\ninner\ninnocent\ninput\ninquiry\ninsane\ninsect\ninside\ninspire\ninstall\nintact\ninterest\ninto\ninvest\ninvite\ninvolve\niron\nisland\nisolate\nissue\nitem\nivory\njacket\njaguar\njar\njazz\njealous\njeans\njelly\njewel\njob\njoin\njoke\njourney\njoy\njudge\njuice\njump\njungle\njunior\njunk\njust\nkangaroo\nkeen\nkeep\nketchup\nkey\nkick\nkid\nkidney\nkind\nkingdom\nkiss\nkit\nkitchen\nkite\nkitten\nkiwi\nknee\nknife\nknock\nknow\nlab\nlabel\nlabor\nladder\nlady\nlake\nlamp\nlanguage\nlaptop\nlarge\nlater\nlatin\nlaugh\nlaundry\nlava\nlaw\nlawn\nlawsuit\nlayer\nlazy\nleader\nleaf\nlearn\nleave\nlecture\nleft\nleg\nlegal\nlegend\nleisure\nlemon\nlend\nlength\nlens\nleopard\nlesson\nletter\nlevel\nliar\nliberty\nlibrary\nlicense\nlife\nlift\nlight\nlike\nlimb\nlimit\nlink\nlion\nliquid\nlist\nlittle\nlive\nlizard\nload\nloan\nlobster\nlocal\nlock\nlogic\nlonely\nlong\nloop\nlottery\nloud\nlounge\nlove\nloyal\nlucky\nluggage\nlumber\nlunar\nlunch\nluxury\nlyrics\nmachine\nmad\nmagic\nmagnet\nmaid\nmail\nmain\nmajor\nmake\nmammal\nman\nmanage\nmandate\nmango\nmansion\nmanual\nmaple\nmarble\nmarch\nmargin\nmarine\nmarket\nmarriage\nmask\nmass\nmaster\nmatch\nmaterial\nmath\nmatrix\nmatter\nmaximum\nmaze\nmeadow\nmean\nmeasure\nmeat\nmechanic\nmedal\nmedia\nmelody\nmelt\nmember\nmemory\nmention\nmenu\nmercy\nmerge\nmerit\nmerry\nmesh\nmessage\nmetal\nmethod\nmiddle\nmidnight\nmilk\nmillion\nmimic\nmind\nminimum\nminor\nminute\nmiracle\nmirror\nmisery\nmiss\nmistake\nmix\nmixed\nmixture\nmobile\nmodel\nmodify\nmom\nmoment\nmonitor\nmonkey\nmonster\nmonth\nmoon\nmoral\nmore\nmorning\nmosquito\nmother\nmotion\nmotor\nmountain\nmouse\nmove\nmovie\nmuch\nmuffin\nmule\nmultiply\nmuscle\nmuseum\nmushroom\nmusic\nmust\nmutual\nmyself\nmystery\nmyth\nnaive\nname\nnapkin\nnarrow\nnasty\nnation\nnature\nnear\nneck\nneed\nnegative\nneglect\nneither\nnephew\nnerve\nnest\nnet\nnetwork\nneutral\nnever\nnews\nnext\nnice\nnight\nnoble\nnoise\nnominee\nnoodle\nnormal\nnorth\nnose\nnotable\nnote\nnothing\nnotice\nnovel\nnow\nnuclear\nnumber\nnurse\nnut\noak\nobey\nobject\noblige\nobscure\nobserve\nobtain\nobvious\noccur\nocean\noctober\nodor\noff\noffer\noffice\noften\noil\nokay\nold\nolive\nolympic\nomit\nonce\none\nonion\nonline\nonly\nopen\nopera\nopinion\noppose\noption\norange\norbit\norchard\norder\nordinary\norgan\norient\noriginal\norphan\nostrich\nother\noutdoor\nouter\noutput\noutside\noval\noven\nover\nown\nowner\noxygen\noyster\nozone\npact\npaddle\npage\npair\npalace\npalm\npanda\npanel\npanic\npanther\npaper\nparade\nparent\npark\nparrot\nparty\npass\npatch\npath\npatient\npatrol\npattern\npause\npave\npayment\npeace\npeanut\npear\npeasant\npelican\npen\npenalty\npencil\npeople\npepper\nperfect\npermit\nperson\npet\nphone\nphoto\nphrase\nphysical\npiano\npicnic\npicture\npiece\npig\npigeon\npill\npilot\npink\npioneer\npipe\npistol\npitch\npizza\nplace\nplanet\nplastic\nplate\nplay\nplease\npledge\npluck\nplug\nplunge\npoem\npoet\npoint\npolar\npole\npolice\npond\npony\npool\npopular\nportion\nposition\npossible\npost\npotato\npottery\npoverty\npowder\npower\npractice\npraise\npredict\nprefer\nprepare\npresent\npretty\nprevent\nprice\npride\nprimary\nprint\npriority\nprison\nprivate\nprize\nproblem\nprocess\nproduce\nprofit\nprogram\nproject\npromote\nproof\nproperty\nprosper\nprotect\nproud\nprovide\npublic\npudding\npull\npulp\npulse\npumpkin\npunch\npupil\npuppy\npurchase\npurity\npurpose\npurse\npush\nput\npuzzle\npyramid\nquality\nquantum\nquarter\nquestion\nquick\nquit\nquiz\nquote\nrabbit\nraccoon\nrace\nrack\nradar\nradio\nrail\nrain\nraise\nrally\nramp\nranch\nrandom\nrange\nrapid\nrare\nrate\nrather\nraven\nraw\nrazor\nready\nreal\nreason\nrebel\nrebuild\nrecall\nreceive\nrecipe\nrecord\nrecycle\nreduce\nreflect\nreform\nrefuse\nregion\nregret\nregular\nreject\nrelax\nrelease\nrelief\nrely\nremain\nremember\nremind\nremove\nrender\nrenew\nrent\nreopen\nrepair\nrepeat\nreplace\nreport\nrequire\nrescue\nresemble\nresist\nresource\nresponse\nresult\nretire\nretreat\nreturn\nreunion\nreveal\nreview\nreward\nrhythm\nrib\nribbon\nrice\nrich\nride\nridge\nrifle\nright\nrigid\nring\nriot\nripple\nrisk\nritual\nrival\nriver\nroad\nroast\nrobot\nrobust\nrocket\nromance\nroof\nrookie\nroom\nrose\nrotate\nrough\nround\nroute\nroyal\nrubber\nrude\nrug\nrule\nrun\nrunway\nrural\nsad\nsaddle\nsadness\nsafe\nsail\nsalad\nsalmon\nsalon\nsalt\nsalute\nsame\nsample\nsand\nsatisfy\nsatoshi\nsauce\nsausage\nsave\nsay\nscale\nscan\nscare\nscatter\nscene\nscheme\nschool\nscience\nscissors\nscorpion\nscout\nscrap\nscreen\nscript\nscrub\nsea\nsearch\nseason\nseat\nsecond\nsecret\nsection\nsecurity\nseed\nseek\nsegment\nselect\nsell\nseminar\nsenior\nsense\nsentence\nseries\nservice\nsession\nsettle\nsetup\nseven\nshadow\nshaft\nshallow\nshare\nshed\nshell\nsheriff\nshield\nshift\nshine\nship\nshiver\nshock\nshoe\nshoot\nshop\nshort\nshoulder\nshove\nshrimp\nshrug\nshuffle\nshy\nsibling\nsick\nside\nsiege\nsight\nsign\nsilent\nsilk\nsilly\nsilver\nsimilar\nsimple\nsince\nsing\nsiren\nsister\nsituate\nsix\nsize\nskate\nsketch\nski\nskill\nskin\nskirt\nskull\nslab\nslam\nsleep\nslender\nslice\nslide\nslight\nslim\nslogan\nslot\nslow\nslush\nsmall\nsmart\nsmile\nsmoke\nsmooth\nsnack\nsnake\nsnap\nsniff\nsnow\nsoap\nsoccer\nsocial\nsock\nsoda\nsoft\nsolar\nsoldier\nsolid\nsolution\nsolve\nsomeone\nsong\nsoon\nsorry\nsort\nsoul\nsound\nsoup\nsource\nsouth\nspace\nspare\nspatial\nspawn\nspeak\nspecial\nspeed\nspell\nspend\nsphere\nspice\nspider\nspike\nspin\nspirit\nsplit\nspoil\nsponsor\nspoon\nsport\nspot\nspray\nspread\nspring\nspy\nsquare\nsqueeze\nsquirrel\nstable\nstadium\nstaff\nstage\nstairs\nstamp\nstand\nstart\nstate\nstay\nsteak\nsteel\nstem\nstep\nstereo\nstick\nstill\nsting\nstock\nstomach\nstone\nstool\nstory\nstove\nstrategy\nstreet\nstrike\nstrong\nstruggle\nstudent\nstuff\nstumble\nstyle\nsubject\nsubmit\nsubway\nsuccess\nsuch\nsudden\nsuffer\nsugar\nsuggest\nsuit\nsummer\nsun\nsunny\nsunset\nsuper\nsupply\nsupreme\nsure\nsurface\nsurge\nsurprise\nsurround\nsurvey\nsuspect\nsustain\nswallow\nswamp\nswap\nswarm\nswear\nsweet\nswift\nswim\nswing\nswitch\nsword\nsymbol\nsymptom\nsyrup\nsystem\ntable\ntackle\ntag\ntail\ntalent\ntalk\ntank\ntape\ntarget\ntask\ntaste\ntattoo\ntaxi\nteach\nteam\ntell\nten\ntenant\ntennis\ntent\nterm\ntest\ntext\nthank\nthat\ntheme\nthen\ntheory\nthere\nthey\nthing\nthis\nthought\nthree\nthrive\nthrow\nthumb\nthunder\nticket\ntide\ntiger\ntilt\ntimber\ntime\ntiny\ntip\ntired\ntissue\ntitle\ntoast\ntobacco\ntoday\ntoddler\ntoe\ntogether\ntoilet\ntoken\ntomato\ntomorrow\ntone\ntongue\ntonight\ntool\ntooth\ntop\ntopic\ntopple\ntorch\ntornado\ntortoise\ntoss\ntotal\ntourist\ntoward\ntower\ntown\ntoy\ntrack\ntrade\ntraffic\ntragic\ntrain\ntransfer\ntrap\ntrash\ntravel\ntray\ntreat\ntree\ntrend\ntrial\ntribe\ntrick\ntrigger\ntrim\ntrip\ntrophy\ntrouble\ntruck\ntrue\ntruly\ntrumpet\ntrust\ntruth\ntry\ntube\ntuition\ntumble\ntuna\ntunnel\nturkey\nturn\nturtle\ntwelve\ntwenty\ntwice\ntwin\ntwist\ntwo\ntype\ntypical\nugly\numbrella\nunable\nunaware\nuncle\nuncover\nunder\nundo\nunfair\nunfold\nunhappy\nuniform\nunique\nunit\nuniverse\nunknown\nunlock\nuntil\nunusual\nunveil\nupdate\nupgrade\nuphold\nupon\nupper\nupset\nurban\nurge\nusage\nuse\nused\nuseful\nuseless\nusual\nutility\nvacant\nvacuum\nvague\nvalid\nvalley\nvalve\nvan\nvanish\nvapor\nvarious\nvast\nvault\nvehicle\nvelvet\nvendor\nventure\nvenue\nverb\nverify\nversion\nvery\nvessel\nveteran\nviable\nvibrant\nvicious\nvictory\nvideo\nview\nvillage\nvintage\nviolin\nvirtual\nvirus\nvisa\nvisit\nvisual\nvital\nvivid\nvocal\nvoice\nvoid\nvolcano\nvolume\nvote\nvoyage\nwage\nwagon\nwait\nwalk\nwall\nwalnut\nwant\nwarfare\nwarm\nwarrior\nwash\nwasp\nwaste\nwater\nwave\nway\nwealth\nweapon\nwear\nweasel\nweather\nweb\nwedding\nweekend\nweird\nwelcome\nwest\nwet\nwhale\nwhat\nwheat\nwheel\nwhen\nwhere\nwhip\nwhisper\nwide\nwidth\nwife\nwild\nwill\nwin\nwindow\nwine\nwing\nwink\nwinner\nwinter\nwire\nwisdom\nwise\nwish\nwitness\nwolf\nwoman\nwonder\nwood\nwool\nword\nwork\nworld\nworry\nworth\nwrap\nwreck\nwrestle\nwrist\nwrite\nwrong\nyard\nyear\nyellow\nyou\nyoung\nyouth\nzebra\nzero\nzone\nzoo`.split('\\n');\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { hmac } from \"@noble/hashes/hmac\";\nimport { sha512 } from \"@noble/hashes/sha2\";\nimport * as bip39 from \"@scure/bip39\";\nimport { wordlist } from \"@scure/bip39/wordlists/english.js\";\nimport { BASE_DERIVATION_PATH } from \"../constants\";\nimport { CryptoError, CryptoErrorCode } from \"./errors\";\nimport { Keypair } from \"./keypair\";\n\nexport type MnemonicStrength = 128 | 256;\n\ninterface HDKeyNode {\n\tprivateKey: Uint8Array;\n\tchainCode: Uint8Array;\n}\n\n/**\n * Represents a validated BIP39 mnemonic phrase with SLIP-0010 Ed25519 hierarchical key derivation.\n *\n * Implements the SLIP-0010 standard for Ed25519 key derivation, ensuring compatibility\n * with other implementations (e.g., Rust CDK). The default derivation path uses coin type\n * 756 (R=7, L=5, O=6 on telephone keypad).\n *\n * @example\n * ```typescript\n * // Generate new mnemonic (12 or 24 words)\n * const mnemonic = Mnemonic.generate(128); // 12 words\n *\n * // Restore from existing phrase\n * const restored = Mnemonic.fromPhrase(\"word1 word2 ...\");\n *\n * // Derive keypairs at specific account indices\n * const keypair0 = await mnemonic.toKeypair(0); // m/44'/756'/0'/0'\n * const keypair1 = await mnemonic.toKeypair(1); // m/44'/756'/1'/0'\n *\n * // With custom passphrase (BIP39 extension)\n * const secure = await mnemonic.toKeypair(0, {\n * passphrase: \"my-secret\"\n * });\n * ```\n *\n * @see {@link https://github.com/satoshilabs/slips/blob/master/slip-0010.md SLIP-0010 Specification}\n */\nexport class Mnemonic {\n\tprivate readonly phrase: string;\n\n\tprivate constructor(phrase: string) {\n\t\tif (!bip39.validateMnemonic(phrase, wordlist)) {\n\t\t\tthrow CryptoError.invalidMnemonic(\"Invalid BIP39 mnemonic phrase\");\n\t\t}\n\t\tthis.phrase = phrase;\n\t}\n\n\t/**\n\t * Generates a new random BIP39 mnemonic phrase.\n\t *\n\t * @param strength - Entropy strength (128 = 12 words, 256 = 24 words). Default: 128\n\t * @returns Validated Mnemonic instance\n\t */\n\tstatic generate(strength: MnemonicStrength = 128): Mnemonic {\n\t\tconst phrase = bip39.generateMnemonic(wordlist, strength);\n\t\treturn new Mnemonic(phrase);\n\t}\n\n\t/**\n\t * Creates a Mnemonic from an existing phrase.\n\t *\n\t * @param phrase - BIP39 mnemonic phrase (12 or 24 space-separated words)\n\t * @returns Validated Mnemonic instance\n\t * @throws {CryptoError} If phrase is invalid (wrong words or checksum)\n\t */\n\tstatic fromPhrase(phrase: string): Mnemonic {\n\t\treturn new Mnemonic(phrase);\n\t}\n\n\t/**\n\t * Validates a phrase without creating an instance.\n\t *\n\t * Checks both word validity and BIP39 checksum.\n\t *\n\t * @param phrase - Mnemonic phrase to validate\n\t * @returns true if phrase is valid\n\t */\n\tstatic isValid(phrase: string): boolean {\n\t\treturn bip39.validateMnemonic(phrase, wordlist);\n\t}\n\n\tprivate getMasterKeyFromSeed(seed: Uint8Array): HDKeyNode {\n\t\tconst seedKey = new TextEncoder().encode(\"ed25519 seed\");\n\t\tconst digest = hmac(sha512, seedKey, seed);\n\n\t\treturn {\n\t\t\tprivateKey: digest.slice(0, 32),\n\t\t\tchainCode: digest.slice(32, 64),\n\t\t};\n\t}\n\n\tprivate deriveChildKey(parentKey: HDKeyNode, index: number): HDKeyNode {\n\t\tconst hardenedIndex = index | 0x80000000;\n\t\tconst data = new Uint8Array(1 + 32 + 4);\n\t\tdata[0] = 0x00;\n\t\tdata.set(parentKey.privateKey, 1);\n\n\t\tconst view = new DataView(data.buffer);\n\t\tview.setUint32(33, hardenedIndex, false);\n\n\t\tconst digest = hmac(sha512, parentKey.chainCode, data);\n\n\t\treturn {\n\t\t\tprivateKey: digest.slice(0, 32),\n\t\t\tchainCode: digest.slice(32, 64),\n\t\t};\n\t}\n\n\tprivate derivePath(path: string, seed: Uint8Array): HDKeyNode {\n\t\tif (!path.startsWith(\"m/\")) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.KEY_DERIVATION_FAILED,\n\t\t\t\t\"Derivation path must start with 'm/'\",\n\t\t\t);\n\t\t}\n\n\t\tlet node = this.getMasterKeyFromSeed(seed);\n\t\tconst segments = path.slice(2).split(\"/\");\n\n\t\tfor (const segment of segments) {\n\t\t\tif (!segment) continue;\n\n\t\t\tconst index = segment.endsWith(\"'\")\n\t\t\t\t? Number.parseInt(segment.slice(0, -1), 10)\n\t\t\t\t: Number.parseInt(segment, 10);\n\n\t\t\tif (Number.isNaN(index) || index < 0) {\n\t\t\t\tthrow new CryptoError(\n\t\t\t\t\tCryptoErrorCode.KEY_DERIVATION_FAILED,\n\t\t\t\t\t`Invalid path segment: ${segment}`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tnode = this.deriveChildKey(node, index);\n\t\t}\n\n\t\treturn node;\n\t}\n\n\t/**\n\t * Derives a keypair at a specific account index.\n\t *\n\t * Uses SLIP-0010 Ed25519 derivation with the default path:\n\t * `m/44'/756'/{accountIndex}'/0'`\n\t *\n\t * Coin type 756 follows the telephone keypad convention (R=7, L=5, O=6).\n\t *\n\t * @param accountIndex - Account index to derive (default: 0)\n\t * @param options - Derivation options\n\t * @param options.passphrase - Optional BIP39 passphrase for additional security\n\t * @param options.baseDerivationPath - Base path (default: \"m/44'/756'\")\n\t * @returns Keypair for the derived account\n\t */\n\tasync toKeypair(\n\t\taccountIndex = 0,\n\t\toptions?: {\n\t\t\tpassphrase?: string;\n\t\t\tbaseDerivationPath?: string;\n\t\t},\n\t): Promise<Keypair> {\n\t\tif (accountIndex < 0 || !Number.isInteger(accountIndex)) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.KEY_DERIVATION_FAILED,\n\t\t\t\t\"Account index must be a non-negative integer\",\n\t\t\t\t{ accountIndex },\n\t\t\t);\n\t\t}\n\n\t\tconst { passphrase = \"\", baseDerivationPath = BASE_DERIVATION_PATH } =\n\t\t\toptions ?? {};\n\n\t\ttry {\n\t\t\tconst fullPath = this.buildFullPath(baseDerivationPath, accountIndex);\n\t\t\tconst seed = await bip39.mnemonicToSeed(this.phrase, passphrase);\n\t\t\tconst derivedNode = this.derivePath(fullPath, seed);\n\n\t\t\treturn Keypair.fromSecretKey(derivedNode.privateKey);\n\t\t} catch (error) {\n\t\t\tif (error instanceof CryptoError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow CryptoError.keyDerivationFailed(\n\t\t\t\tbaseDerivationPath,\n\t\t\t\terror instanceof Error ? error : undefined,\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Derives a keypair using an explicit full derivation path.\n\t *\n\t * @param fullPath - Complete derivation path (e.g., \"m/44'/756'/0'/0'\")\n\t * @param passphrase - Optional BIP39 passphrase\n\t */\n\tasync toKeypairWithPath(fullPath: string, passphrase = \"\"): Promise<Keypair> {\n\t\ttry {\n\t\t\tconst seed = await bip39.mnemonicToSeed(this.phrase, passphrase);\n\t\t\tconst derivedNode = this.derivePath(fullPath, seed);\n\t\t\treturn Keypair.fromSecretKey(derivedNode.privateKey);\n\t\t} catch (error) {\n\t\t\tif (error instanceof CryptoError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow CryptoError.keyDerivationFailed(\n\t\t\t\tfullPath,\n\t\t\t\terror instanceof Error ? error : undefined,\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Derives multiple keypairs sequentially from this mnemonic.\n\t *\n\t * @param count - Number of keypairs to derive\n\t * @param startIndex - Starting account index (default: 0)\n\t * @param options - Derivation options (passphrase and path)\n\t */\n\tasync deriveKeypairs(\n\t\tcount: number,\n\t\tstartIndex = 0,\n\t\toptions?: {\n\t\t\tpassphrase?: string;\n\t\t\tbaseDerivationPath?: string;\n\t\t},\n\t): Promise<Keypair[]> {\n\t\tif (count <= 0 || !Number.isInteger(count)) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.KEY_DERIVATION_FAILED,\n\t\t\t\t\"Count must be a positive integer\",\n\t\t\t\t{ count },\n\t\t\t);\n\t\t}\n\n\t\tconst keypairs: Keypair[] = [];\n\t\tfor (let i = 0; i < count; i++) {\n\t\t\tconst keypair = await this.toKeypair(startIndex + i, options);\n\t\t\tkeypairs.push(keypair);\n\t\t}\n\n\t\treturn keypairs;\n\t}\n\n\t/**\n\t * Converts the mnemonic to a BIP39 seed.\n\t *\n\t * @param passphrase - Optional BIP39 passphrase for additional security\n\t * @returns 64-byte seed\n\t */\n\tasync toSeed(passphrase = \"\"): Promise<Uint8Array> {\n\t\treturn bip39.mnemonicToSeed(this.phrase, passphrase);\n\t}\n\n\t/**\n\t * Returns the mnemonic phrase as a string.\n\t */\n\ttoString(): string {\n\t\treturn this.phrase;\n\t}\n\n\t/**\n\t * Returns the individual words of the mnemonic.\n\t */\n\tgetWords(): string[] {\n\t\treturn this.phrase.split(\" \");\n\t}\n\n\t/**\n\t * Returns the word count (12 or 24).\n\t */\n\tgetWordCount(): 12 | 24 {\n\t\tconst count = this.getWords().length;\n\t\treturn count === 24 ? 24 : 12;\n\t}\n\n\t/**\n\t * Returns the entropy strength (128 or 256 bits).\n\t */\n\tgetStrength(): MnemonicStrength {\n\t\treturn this.getWordCount() === 12 ? 128 : 256;\n\t}\n\n\t/**\n\t * Checks equality with another mnemonic using constant-time comparison.\n\t */\n\tequals(other: Mnemonic): boolean {\n\t\tif (this.phrase.length !== other.phrase.length) return false;\n\t\tlet result = 0;\n\t\tfor (let i = 0; i < this.phrase.length; i++) {\n\t\t\tresult |= this.phrase.charCodeAt(i) ^ other.phrase.charCodeAt(i);\n\t\t}\n\t\treturn result === 0;\n\t}\n\n\t/**\n\t * JSON serialization (returns the mnemonic phrase).\n\t */\n\ttoJSON(): string {\n\t\treturn this.phrase;\n\t}\n\n\tprivate buildFullPath(\n\t\tbaseDerivationPath: string,\n\t\taccountIndex: number,\n\t): string {\n\t\tconst cleanBasePath = baseDerivationPath.replace(/\\/$/, \"\");\n\n\t\tif (!cleanBasePath.startsWith(\"m/\")) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.KEY_DERIVATION_FAILED,\n\t\t\t\t\"Derivation path must start with 'm/'\",\n\t\t\t);\n\t\t}\n\n\t\treturn `${cleanBasePath}/${accountIndex}'/0'`;\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Error handling for the Rialo CDK.\n *\n * This module defines the common error types used throughout the Rialo CDK.\n * It provides a centralized error handling mechanism for all operations.\n */\n\n/**\n * Structured RPC error information parsed from JSON-RPC error responses.\n */\nexport interface RpcErrorDetails {\n\t/** HTTP status code (e.g., 200, 422, 500) */\n\tstatus?: number;\n\t/** JSON-RPC error code (e.g., -32002) */\n\tcode: number;\n\t/** Human-readable error message */\n\tmessage: string;\n}\n\n/**\n * Error types for different subsystems in the Rialo CDK.\n */\nexport enum RialoErrorType {\n\t/** Errors related to file or system I/O operations */\n\tIO = \"IO\",\n\t/** Errors occurring during RPC communication with blockchain nodes */\n\tRPC = \"RPC\",\n\t/** Errors related to public key parsing or validation */\n\tPARSE_PUBKEY = \"PARSE_PUBKEY\",\n\t/** Errors related to blockhash parsing or validation */\n\tINVALID_BLOCKHASH_FORMAT = \"INVALID_BLOCKHASH_FORMAT\",\n\t/** Errors related to wallet operations such as creation, loading, or signing */\n\tWALLET = \"WALLET\",\n\t/** Errors related to configuration loading, parsing, or validation */\n\tCONFIG = \"CONFIG\",\n\t/** Errors occurring during transaction building, signing, or submission */\n\tTRANSACTION = \"TRANSACTION\",\n\t/** Network-related errors, including HTTP client errors */\n\tNETWORK = \"NETWORK\",\n\t/** Errors related to password handling, validation, or verification */\n\tPASSWORD = \"PASSWORD\",\n\t/** Errors related to encryption or decryption operations */\n\tENCRYPTION = \"ENCRYPTION\",\n\t/** Errors occurring during JSON parsing, serialization, or deserialization */\n\tJSON = \"JSON\",\n\t/** Errors related to BIP32 key derivation */\n\tBIP32 = \"BIP32\",\n\t/** Errors related to invalid input parameters or data */\n\tINVALID_INPUT = \"INVALID_INPUT\",\n\t/** Errors related to serialization/deserialization */\n\tSERIALIZATION = \"SERIALIZATION\",\n}\n\n/**\n * Base error class for all Rialo CDK errors.\n *\n * Provides structured error handling with type categorization and optional\n * cause tracking for error chains. Use the static factory methods for\n * consistent error creation across the SDK.\n *\n * @example\n * ```typescript\n * // Create typed errors using factory methods\n * throw RialoError.invalidInput(\"Amount must be positive\");\n * throw RialoError.network(\"Connection failed\", originalError);\n * throw RialoError.rpc({ code: -32002, message: \"Invalid params\" });\n *\n * // Handle errors with type information\n * try {\n * await client.sendTransaction(tx);\n * } catch (error) {\n * if (error instanceof RialoError && error.type === RialoErrorType.NETWORK) {\n * console.log(\"Network error, retrying...\");\n * }\n * }\n * ```\n */\nexport class RialoError extends Error {\n\tpublic readonly type: RialoErrorType;\n\tpublic readonly cause?: Error;\n\tpublic readonly details?: RpcErrorDetails;\n\n\tpublic constructor(\n\t\ttype: RialoErrorType,\n\t\tmessage: string,\n\t\tcause?: Error,\n\t\tdetails?: RpcErrorDetails,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"RialoError\";\n\t\tthis.type = type;\n\t\tthis.cause = cause;\n\t\tthis.details = details;\n\n\t\t// Maintains proper stack trace for where our error was thrown (only available on V8)\n\t\tif (Error.captureStackTrace) {\n\t\t\tError.captureStackTrace(this, RialoError);\n\t\t}\n\t}\n\n\t/**\n\t * Creates an IO error.\n\t */\n\tpublic static io(message: string, cause?: Error): RialoError {\n\t\treturn new RialoError(RialoErrorType.IO, `I/O error: ${message}`, cause);\n\t}\n\n\t/**\n\t * Creates an RPC error.\n\t */\n\tpublic static rpc(details: RpcErrorDetails): RialoError {\n\t\tlet message: string = details.message;\n\t\tif (details.status !== undefined) {\n\t\t\tmessage = `${details.message} [HTTP ${details.status} code ${details.code}]`;\n\t\t} else if (details.code !== 0) {\n\t\t\tmessage = `${details.message} (code ${details.code})`;\n\t\t}\n\t\treturn new RialoError(\n\t\t\tRialoErrorType.RPC,\n\t\t\t`RPC error: ${message}`,\n\t\t\tundefined,\n\t\t\tdetails,\n\t\t);\n\t}\n\n\t/**\n\t * Creates a public key parsing error.\n\t */\n\tpublic static parsePubkey(message: string): RialoError {\n\t\treturn new RialoError(\n\t\t\tRialoErrorType.PARSE_PUBKEY,\n\t\t\t`Pubkey error: ${message}`,\n\t\t);\n\t}\n\n\t/**\n\t * Creates a blockhash format error.\n\t */\n\tpublic static invalidBlockhash(message: string): RialoError {\n\t\treturn new RialoError(\n\t\t\tRialoErrorType.INVALID_BLOCKHASH_FORMAT,\n\t\t\t`Invalid blockhash format: ${message}`,\n\t\t);\n\t}\n\n\t/**\n\t * Creates a wallet error.\n\t */\n\tpublic static wallet(message: string): RialoError {\n\t\treturn new RialoError(RialoErrorType.WALLET, `Wallet error: ${message}`);\n\t}\n\n\t/**\n\t * Creates a configuration error.\n\t */\n\tpublic static config(message: string): RialoError {\n\t\treturn new RialoError(RialoErrorType.CONFIG, `Config error: ${message}`);\n\t}\n\n\t/**\n\t * Creates a transaction error.\n\t */\n\tpublic static transaction(message: string): RialoError {\n\t\treturn new RialoError(\n\t\t\tRialoErrorType.TRANSACTION,\n\t\t\t`Transaction error: ${message}`,\n\t\t);\n\t}\n\n\t/**\n\t * Creates a network error.\n\t */\n\tpublic static network(message: string, cause?: Error): RialoError {\n\t\treturn new RialoError(\n\t\t\tRialoErrorType.NETWORK,\n\t\t\t`Network error: ${message}`,\n\t\t\tcause,\n\t\t);\n\t}\n\n\t/**\n\t * Creates a password error.\n\t */\n\tpublic static password(message: string): RialoError {\n\t\treturn new RialoError(\n\t\t\tRialoErrorType.PASSWORD,\n\t\t\t`Password error: ${message}`,\n\t\t);\n\t}\n\n\t/**\n\t * Creates an encryption error.\n\t */\n\tpublic static encryption(message: string): RialoError {\n\t\treturn new RialoError(\n\t\t\tRialoErrorType.ENCRYPTION,\n\t\t\t`Encryption error: ${message}`,\n\t\t);\n\t}\n\n\t/**\n\t * Creates a JSON error.\n\t */\n\tpublic static json(message: string, cause?: Error): RialoError {\n\t\treturn new RialoError(RialoErrorType.JSON, `JSON error: ${message}`, cause);\n\t}\n\n\t/**\n\t * Creates a BIP32 error.\n\t */\n\tpublic static bip32(message: string): RialoError {\n\t\treturn new RialoError(RialoErrorType.BIP32, `BIP32 error: ${message}`);\n\t}\n\n\t/**\n\t * Creates an invalid input error.\n\t */\n\tpublic static invalidInput(message: string): RialoError {\n\t\treturn new RialoError(\n\t\t\tRialoErrorType.INVALID_INPUT,\n\t\t\t`Invalid input: ${message}`,\n\t\t);\n\t}\n\n\t/**\n\t * Creates a serialization error.\n\t */\n\tpublic static serialization(message: string): RialoError {\n\t\treturn new RialoError(\n\t\t\tRialoErrorType.SERIALIZATION,\n\t\t\t`Serialization error: ${message}`,\n\t\t);\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Error codes for HPKE encryption operations.\n */\nexport enum HpkeErrorCode {\n\t/** Key length does not match expected size */\n\tINVALID_KEY_LENGTH = \"INVALID_KEY_LENGTH\",\n\t/** Ciphertext is shorter than minimum required length */\n\tCIPHERTEXT_TOO_SHORT = \"CIPHERTEXT_TOO_SHORT\",\n\t/** HPKE encryption operation failed */\n\tENCRYPTION_FAILED = \"ENCRYPTION_FAILED\",\n\t/** Failed to deserialize Borsh data */\n\tBORSH_DESERIALIZE_FAILED = \"BORSH_DESERIALIZE_FAILED\",\n\t/** RexValue has invalid variant byte */\n\tINVALID_REX_VALUE = \"INVALID_REX_VALUE\",\n}\n\n/**\n * Error class for HPKE encryption operations.\n *\n * Provides detailed error information for encryption failures,\n * including error codes and contextual details.\n */\nexport class HpkeError extends Error {\n\treadonly code: HpkeErrorCode;\n\treadonly cause?: Error;\n\n\tconstructor(code: HpkeErrorCode, message: string, cause?: Error) {\n\t\tsuper(message);\n\t\tthis.name = \"HpkeError\";\n\t\tthis.code = code;\n\t\tthis.cause = cause;\n\n\t\t// Maintain proper stack trace in V8 environments\n\t\tif (Error.captureStackTrace) {\n\t\t\tError.captureStackTrace(this, HpkeError);\n\t\t}\n\t}\n\n\t/**\n\t * Create an error for invalid key length.\n\t *\n\t * @param expected - Expected key length in bytes\n\t * @param actual - Actual key length in bytes\n\t * @param keyType - Description of the key type (e.g., \"REX public key\")\n\t */\n\tstatic invalidKeyLength(\n\t\texpected: number,\n\t\tactual: number,\n\t\tkeyType: string,\n\t): HpkeError {\n\t\treturn new HpkeError(\n\t\t\tHpkeErrorCode.INVALID_KEY_LENGTH,\n\t\t\t`Invalid ${keyType} length: expected ${expected} bytes, got ${actual}`,\n\t\t);\n\t}\n\n\t/**\n\t * Create an error for ciphertext that is too short.\n\t *\n\t * @param minLength - Minimum required length\n\t * @param actual - Actual length\n\t */\n\tstatic ciphertextTooShort(minLength: number, actual: number): HpkeError {\n\t\treturn new HpkeError(\n\t\t\tHpkeErrorCode.CIPHERTEXT_TOO_SHORT,\n\t\t\t`Ciphertext too short: minimum ${minLength} bytes required, got ${actual}`,\n\t\t);\n\t}\n\n\t/**\n\t * Create an error for encryption failure.\n\t *\n\t * @param cause - The underlying error\n\t */\n\tstatic encryptionFailed(cause: Error): HpkeError {\n\t\treturn new HpkeError(\n\t\t\tHpkeErrorCode.ENCRYPTION_FAILED,\n\t\t\t`HPKE encryption failed: ${cause.message}`,\n\t\t\tcause,\n\t\t);\n\t}\n\n\t/**\n\t * Create an error for Borsh deserialization failure.\n\t *\n\t * @param cause - The underlying error\n\t */\n\tstatic borshDeserializeFailed(cause: Error): HpkeError {\n\t\treturn new HpkeError(\n\t\t\tHpkeErrorCode.BORSH_DESERIALIZE_FAILED,\n\t\t\t`Borsh deserialization failed: ${cause.message}`,\n\t\t\tcause,\n\t\t);\n\t}\n\n\t/**\n\t * Create an error for invalid RexValue variant.\n\t *\n\t * @param variant - The invalid variant byte\n\t */\n\tstatic invalidRexValue(variant: number): HpkeError {\n\t\treturn new HpkeError(\n\t\t\tHpkeErrorCode.INVALID_REX_VALUE,\n\t\t\t`Invalid RexValue variant: ${variant}`,\n\t\t);\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Constants for REX HPKE encryption.\n *\n * These constants MUST match the Rust implementation exactly:\n * - `crates/tee/secret-sharing/src/constants.rs`\n *\n * @module\n */\n\n/**\n * Additional Authenticated Data (AAD) prefix for user secrets.\n *\n * This 13-byte string is prepended to the sender's public key to form\n * the complete AAD for HPKE encryption. It provides domain separation\n * to prevent cross-protocol attacks.\n *\n * Format: `USER_SECRET_AAD || senderPubkey` = 45 bytes total AAD\n *\n * @remarks\n * Must match Rust: `pub const USER_SECRET_AAD: &[u8] = b\"rex-secret-v1\";`\n */\nexport const USER_SECRET_AAD = new TextEncoder().encode(\"rex-secret-v1\");\n\n/**\n * HPKE info string for secret sharing context.\n *\n * This 32-byte string is used as the `info` parameter in HPKE encryption,\n * providing domain separation for secret sharing operations.\n *\n * @remarks\n * Must match Rust: `pub const SECRET_SHARING_HPKE_INFO: &[u8; 32] = b\"rialo/tee/secret-sharing-hpke/v1\";`\n */\nexport const SECRET_SHARING_HPKE_INFO = new TextEncoder().encode(\n\t\"rialo/tee/secret-sharing-hpke/v1\",\n);\n\n/**\n * Length of an X25519 public key in bytes.\n *\n * Used for the REX encryption public key (secret sharing key).\n */\nexport const X25519_PUBLIC_KEY_LENGTH = 32;\n\n/**\n * Length of an Ed25519 public key in bytes.\n *\n * Used for sender identity binding in AAD construction.\n */\nexport const ED25519_PUBLIC_KEY_LENGTH = 32;\n\n/**\n * Length of the HPKE encapsulated key (enc) in bytes.\n *\n * For X25519, this is always 32 bytes.\n */\nexport const HPKE_ENC_LENGTH = 32;\n\n/**\n * Length of the ChaCha20-Poly1305 authentication tag in bytes.\n */\nexport const CHACHA20_POLY1305_TAG_LENGTH = 16;\n\n/**\n * Total overhead added by HPKE encryption.\n *\n * This is the additional bytes beyond the plaintext:\n * - enc (32 bytes): Encapsulated ephemeral public key\n * - tag (16 bytes): ChaCha20-Poly1305 authentication tag\n *\n * Ciphertext length = plaintext length + 48 bytes\n */\nexport const HPKE_OVERHEAD_LENGTH = HPKE_ENC_LENGTH + CHACHA20_POLY1305_TAG_LENGTH;\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { HpkeError } from \"./errors.js\";\n\n/**\n * Variant discriminator for RexValue Borsh serialization.\n */\nexport enum RexValueVariant {\n\t/** Plain (unencrypted) data variant */\n\tPlain = 0,\n\t/** Encrypted data variant */\n\tEncrypted = 1,\n}\n\n/**\n * Represents an rex value that can be plain or encrypted.\n *\n * This class provides Borsh-compatible serialization that matches\n * the Rust `RexValue` enum:\n *\n * ```rust\n * pub enum RexValue {\n * Plain(Vec<u8>),\n * Encrypted(Vec<u8>),\n * }\n * ```\n *\n * ## Borsh Format\n *\n * - Plain: `[0x00] [length: u32 LE] [data bytes]`\n * - Encrypted: `[0x01] [length: u32 LE] [ciphertext bytes]`\n *\n * @example\n * ```typescript\n * // Plain value (unencrypted)\n * const plain = RexValue.plain(new TextEncoder().encode(\"hello\"));\n *\n * // Encrypted value (via HPKE)\n * const encrypted = RexValue.encrypted(ciphertextBytes);\n *\n * // Serialize to Borsh\n * const borsh = plain.toBorsh();\n *\n * // Deserialize from Borsh\n * const restored = RexValue.fromBorsh(borsh);\n * ```\n */\nexport class RexValue {\n\tprivate readonly variant: RexValueVariant;\n\tprivate readonly data: Uint8Array;\n\n\tprivate constructor(variant: RexValueVariant, data: Uint8Array) {\n\t\tthis.variant = variant;\n\t\tthis.data = data;\n\t}\n\n\t/**\n\t * Create a plain (unencrypted) RexValue from raw bytes.\n\t *\n\t * @param data - The raw byte data\n\t * @returns A new RexValue with Plain variant\n\t */\n\tstatic plain(data: Uint8Array): RexValue {\n\t\treturn new RexValue(RexValueVariant.Plain, data);\n\t}\n\n\t/**\n\t * Create a plain (unencrypted) RexValue from a UTF-8 string.\n\t *\n\t * @param s - The string to encode\n\t * @returns A new RexValue with Plain variant\n\t */\n\tstatic plainString(s: string): RexValue {\n\t\treturn new RexValue(\n\t\t\tRexValueVariant.Plain,\n\t\t\tnew TextEncoder().encode(s),\n\t\t);\n\t}\n\n\t/**\n\t * Create an encrypted RexValue from HPKE ciphertext.\n\t *\n\t * @param ciphertext - The HPKE-encrypted ciphertext (enc || ct || tag)\n\t * @returns A new RexValue with Encrypted variant\n\t */\n\tstatic encrypted(ciphertext: Uint8Array): RexValue {\n\t\treturn new RexValue(RexValueVariant.Encrypted, ciphertext);\n\t}\n\n\t/**\n\t * Check if this is a plain (unencrypted) value.\n\t */\n\tisPlain(): boolean {\n\t\treturn this.variant === RexValueVariant.Plain;\n\t}\n\n\t/**\n\t * Check if this is an encrypted value.\n\t */\n\tisEncrypted(): boolean {\n\t\treturn this.variant === RexValueVariant.Encrypted;\n\t}\n\n\t/**\n\t * Get the variant type.\n\t */\n\tgetVariant(): RexValueVariant {\n\t\treturn this.variant;\n\t}\n\n\t/**\n\t * Get the raw bytes (plaintext or ciphertext).\n\t *\n\t * For Plain values, returns the plaintext.\n\t * For Encrypted values, returns the ciphertext.\n\t */\n\tasBytes(): Uint8Array {\n\t\treturn this.data;\n\t}\n\n\t/**\n\t * Try to decode the plain value as a UTF-8 string.\n\t *\n\t * @returns The decoded string, or null if encrypted or not valid UTF-8\n\t */\n\tasString(): string | null {\n\t\tif (!this.isPlain()) {\n\t\t\treturn null;\n\t\t}\n\t\ttry {\n\t\t\treturn new TextDecoder(\"utf-8\", { fatal: true }).decode(this.data);\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t/**\n\t * Serialize to Borsh format.\n\t *\n\t * Format: `[variant: u8] [length: u32 LE] [data bytes]`\n\t *\n\t * @returns The Borsh-serialized bytes\n\t */\n\ttoBorsh(): Uint8Array {\n\t\t// 1 byte variant + 4 bytes length + data\n\t\tconst result = new Uint8Array(1 + 4 + this.data.length);\n\n\t\t// Write variant (1 byte)\n\t\tresult[0] = this.variant;\n\n\t\t// Write length as u32 LE (4 bytes)\n\t\tconst dataView = new DataView(result.buffer);\n\t\tdataView.setUint32(1, this.data.length, true);\n\n\t\t// Write data\n\t\tresult.set(this.data, 5);\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Deserialize from Borsh format.\n\t *\n\t * @param data - The Borsh-serialized bytes\n\t * @returns A new RexValue\n\t * @throws {HpkeError} If deserialization fails\n\t */\n\tstatic fromBorsh(data: Uint8Array): RexValue {\n\t\tif (data.length < 5) {\n\t\t\tthrow HpkeError.borshDeserializeFailed(\n\t\t\t\tnew Error(`Buffer too short: expected at least 5 bytes, got ${data.length}`),\n\t\t\t);\n\t\t}\n\n\t\tconst variant = data[0];\n\t\tif (variant !== RexValueVariant.Plain && variant !== RexValueVariant.Encrypted) {\n\t\t\tthrow HpkeError.invalidRexValue(variant);\n\t\t}\n\n\t\tconst dataView = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\t\tconst length = dataView.getUint32(1, true);\n\n\t\tif (data.length < 5 + length) {\n\t\t\tthrow HpkeError.borshDeserializeFailed(\n\t\t\t\tnew Error(`Buffer too short: expected ${5 + length} bytes, got ${data.length}`),\n\t\t\t);\n\t\t}\n\n\t\tconst payload = data.slice(5, 5 + length);\n\n\t\treturn new RexValue(variant as RexValueVariant, payload);\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Chacha20Poly1305 } from \"@hpke/chacha20poly1305\";\nimport { CipherSuite, DhkemX25519HkdfSha256, HkdfSha256 } from \"@hpke/core\";\n\nimport {\n\tED25519_PUBLIC_KEY_LENGTH,\n\tHPKE_OVERHEAD_LENGTH,\n\tSECRET_SHARING_HPKE_INFO,\n\tUSER_SECRET_AAD,\n\tX25519_PUBLIC_KEY_LENGTH,\n} from \"./constants\";\nimport { HpkeError } from \"./errors\";\nimport { RexValue } from \"./rex-value\";\n\n/**\n * HPKE cipher suite configuration.\n *\n * Uses the same parameters as the Rust REX implementation:\n * - KEM: DHKEM(X25519, HKDF-SHA256) (RFC 9180 ID: 0x0020)\n * - KDF: HKDF-SHA256 (RFC 9180 ID: 0x0001)\n * - AEAD: ChaCha20-Poly1305 (RFC 9180 ID: 0x0003)\n * - Mode: Base (0x00)\n */\nconst hpkeSuite = new CipherSuite({\n\tkem: new DhkemX25519HkdfSha256(),\n\tkdf: new HkdfSha256(),\n\taead: new Chacha20Poly1305(),\n});\n\n/**\n * Build the AAD (Additional Authenticated Data) for HPKE encryption.\n *\n * The AAD binds the ciphertext to the sender's identity, preventing\n * replay attacks where ciphertext is substituted between users.\n *\n * Format: USER_SECRET_AAD (16 bytes) || senderPubkey (32 bytes) = 48 bytes\n *\n * @param senderPubkey - The sender's Ed25519 public key (32 bytes)\n * @returns The constructed AAD (48 bytes)\n */\nfunction buildAad(senderPubkey: Uint8Array): Uint8Array {\n\tconst aad = new Uint8Array(USER_SECRET_AAD.length + senderPubkey.length);\n\taad.set(USER_SECRET_AAD, 0);\n\taad.set(senderPubkey, USER_SECRET_AAD.length);\n\treturn aad;\n}\n\n/**\n * Encrypt data using HPKE for REX secret sharing.\n *\n * This function performs HPKE encryption using the Base mode with:\n * - X25519 for key encapsulation\n * - HKDF-SHA256 for key derivation\n * - ChaCha20-Poly1305 for authenticated encryption\n *\n * The output format is: `enc (32 bytes) || ciphertext || tag (16 bytes)`\n *\n * @param rexPubkey - The REX X25519 public key (32 bytes)\n * @param data - The plaintext data to encrypt\n * @param senderPubkey - The sender's Ed25519 public key (32 bytes) for AAD construction\n * @returns The encrypted ciphertext including enc and tag\n * @throws {HpkeError} If key lengths are invalid or encryption fails\n *\n * @example\n * ```typescript\n * const rexPubkey = await client.getSecretSharingPubkey();\n * const ciphertext = await hpkeEncrypt(\n * rexPubkey,\n * new TextEncoder().encode(\"secret data\"),\n * keypair.publicKey.toBytes()\n * );\n * ```\n */\nexport async function hpkeEncrypt(\n\trexPubkey: Uint8Array,\n\tdata: Uint8Array,\n\tsenderPubkey: Uint8Array,\n): Promise<Uint8Array> {\n\t// Validate REX public key length (X25519)\n\tif (rexPubkey.length !== X25519_PUBLIC_KEY_LENGTH) {\n\t\tthrow HpkeError.invalidKeyLength(\n\t\t\tX25519_PUBLIC_KEY_LENGTH,\n\t\t\trexPubkey.length,\n\t\t\t\"REX public key\",\n\t\t);\n\t}\n\n\t// Validate sender public key length (Ed25519)\n\tif (senderPubkey.length !== ED25519_PUBLIC_KEY_LENGTH) {\n\t\tthrow HpkeError.invalidKeyLength(\n\t\t\tED25519_PUBLIC_KEY_LENGTH,\n\t\t\tsenderPubkey.length,\n\t\t\t\"sender public key\",\n\t\t);\n\t}\n\n\ttry {\n\t\t// Import the recipient's public key (convert to ArrayBuffer for HPKE library)\n\t\tconst recipientKey = await hpkeSuite.kem.importKey(\n\t\t\t\"raw\",\n\t\t\trexPubkey.buffer.slice(\n\t\t\t\trexPubkey.byteOffset,\n\t\t\t\trexPubkey.byteOffset + rexPubkey.byteLength,\n\t\t\t) as ArrayBuffer,\n\t\t);\n\n\t\t// Create sender context with the info string for domain separation\n\t\tconst sender = await hpkeSuite.createSenderContext({\n\t\t\trecipientPublicKey: recipientKey,\n\t\t\tinfo: SECRET_SHARING_HPKE_INFO.buffer.slice(\n\t\t\t\tSECRET_SHARING_HPKE_INFO.byteOffset,\n\t\t\t\tSECRET_SHARING_HPKE_INFO.byteOffset +\n\t\t\t\t\tSECRET_SHARING_HPKE_INFO.byteLength,\n\t\t\t) as ArrayBuffer,\n\t\t});\n\n\t\t// Build AAD: USER_SECRET_AAD || senderPubkey\n\t\tconst aad = buildAad(senderPubkey);\n\n\t\t// Encrypt the data (convert to ArrayBuffer for HPKE library)\n\t\tconst ciphertext = await sender.seal(\n\t\t\tdata.buffer.slice(\n\t\t\t\tdata.byteOffset,\n\t\t\t\tdata.byteOffset + data.byteLength,\n\t\t\t) as ArrayBuffer,\n\t\t\taad.buffer.slice(\n\t\t\t\taad.byteOffset,\n\t\t\t\taad.byteOffset + aad.byteLength,\n\t\t\t) as ArrayBuffer,\n\t\t);\n\n\t\t// Combine enc || ciphertext into final output\n\t\t// The enc is the encapsulated key from sender context\n\t\tconst enc = new Uint8Array(sender.enc);\n\t\tconst result = new Uint8Array(enc.length + ciphertext.byteLength);\n\t\tresult.set(enc, 0);\n\t\tresult.set(new Uint8Array(ciphertext), enc.length);\n\n\t\treturn result;\n\t} catch (error) {\n\t\tthrow HpkeError.encryptionFailed(\n\t\t\terror instanceof Error ? error : new Error(String(error)),\n\t\t);\n\t}\n}\n\n/**\n * Encrypt data for REX and wrap it in an RexValue.\n *\n * This is a convenience function that combines:\n * 1. HPKE encryption using `hpkeEncrypt`\n * 2. Wrapping the ciphertext in an `RexValue.encrypted`\n *\n * The resulting RexValue can be serialized to Borsh and sent to the network.\n *\n * @param rexPubkey - The REX X25519 public key (32 bytes)\n * @param data - The plaintext data to encrypt\n * @param senderPubkey - The sender's Ed25519 public key (32 bytes)\n * @returns An RexValue containing the encrypted ciphertext\n * @throws {HpkeError} If key lengths are invalid or encryption fails\n *\n * @example\n * ```typescript\n * import { RpcClient, Keypair } from \"@rialo/ts-cdk\";\n * import { encryptForRex, RexValue } from \"@rialo/ts-cdk/rex\";\n *\n * // Get REX public key from the network\n * const client = new RpcClient(\"https://rpc.rialo.xyz\");\n * const rexPubkey = await client.getSecretSharingPubkey();\n *\n * // Create keypair for signing\n * const keypair = Keypair.generate();\n *\n * // Encrypt secret data\n * const rexValue = await encryptForRex(\n * rexPubkey,\n * new TextEncoder().encode(\"my secret API key\"),\n * keypair.publicKey.toBytes()\n * );\n *\n * // The RexValue can now be serialized and used in transactions\n * const borshBytes = rexValue.toBorsh();\n * ```\n */\nexport async function encryptForRex(\n\trexPubkey: Uint8Array,\n\tdata: Uint8Array,\n\tsenderPubkey: Uint8Array,\n): Promise<RexValue> {\n\tconst ciphertext = await hpkeEncrypt(rexPubkey, data, senderPubkey);\n\treturn RexValue.encrypted(ciphertext);\n}\n\n/**\n * Calculate the expected ciphertext length for a given plaintext length.\n *\n * The ciphertext consists of:\n * - enc (32 bytes): Encapsulated ephemeral public key\n * - ciphertext (plaintext.length bytes): Encrypted data\n * - tag (16 bytes): ChaCha20-Poly1305 authentication tag\n *\n * @param plaintextLength - Length of the plaintext in bytes\n * @returns Expected ciphertext length\n *\n * @example\n * ```typescript\n * const ciphertextLen = getCiphertextLength(100);\n * console.log(ciphertextLen); // 148 (32 + 100 + 16)\n * ```\n */\nexport function getCiphertextLength(plaintextLength: number): number {\n\treturn HPKE_OVERHEAD_LENGTH + plaintextLength;\n}\n\n/**\n * Validate that a ciphertext has a valid length.\n *\n * A valid HPKE ciphertext must be at least 48 bytes (32 enc + 16 tag).\n *\n * @param ciphertext - The ciphertext to validate\n * @returns true if the ciphertext length is valid\n *\n * @example\n * ```typescript\n * if (!isValidCiphertextLength(ciphertext)) {\n * throw new Error(\"Ciphertext too short\");\n * }\n * ```\n */\nexport function isValidCiphertextLength(ciphertext: Uint8Array): boolean {\n\treturn ciphertext.length >= HPKE_OVERHEAD_LENGTH;\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Error codes for RPC operations, categorized by type.\n */\nexport enum RpcErrorCode {\n\t// Network errors (retryable)\n\tREQUEST_TIMEOUT = \"REQUEST_TIMEOUT\",\n\tNETWORK_ERROR = \"NETWORK_ERROR\",\n\tCONNECTION_REFUSED = \"CONNECTION_REFUSED\",\n\tINVALID_NETWORK = \"INVALID_NETWORK\",\n\n\t// RPC protocol errors\n\tINVALID_RESPONSE = \"INVALID_RESPONSE\",\n\tPARSE_ERROR = \"PARSE_ERROR\",\n\tINVALID_REQUEST = \"INVALID_REQUEST\",\n\tMETHOD_NOT_FOUND = \"METHOD_NOT_FOUND\",\n\tINVALID_PARAMS = \"INVALID_PARAMS\",\n\tINTERNAL_ERROR = \"INTERNAL_ERROR\",\n\n\t// Transaction errors\n\tTRANSACTION_REJECTED = \"TRANSACTION_REJECTED\",\n\tINSUFFICIENT_FUNDS = \"INSUFFICIENT_FUNDS\",\n\tTRANSACTION_CONFIRMATION_TIMEOUT = \"TRANSACTION_CONFIRMATION_TIMEOUT\",\n\n\t// Resource errors\n\tACCOUNT_NOT_FOUND = \"ACCOUNT_NOT_FOUND\",\n\n\t// Rate limiting (retryable after delay)\n\tRATE_LIMIT_EXCEEDED = \"RATE_LIMIT_EXCEEDED\",\n\n\t// Node health\n\tNODE_UNHEALTHY = \"NODE_UNHEALTHY\",\n}\n\n/**\n * Detailed error context for debugging and error handling.\n */\ninterface RpcErrorDetails {\n\tmethod?: string;\n\tparams?: unknown;\n\trequestId?: number;\n\turl?: string;\n\thttpStatus?: number;\n\trpcCode?: number;\n\ttimeout?: number;\n\tattempts?: number;\n\t[key: string]: unknown;\n}\n\n/**\n * Error class for RPC operations with structured error information.\n *\n * Provides actionable error messages and indicates whether errors are retryable.\n */\nexport class RpcError extends Error {\n\tpublic readonly code: RpcErrorCode;\n\tpublic readonly details: RpcErrorDetails;\n\tpublic readonly retryable: boolean;\n\n\tconstructor(\n\t\tcode: RpcErrorCode,\n\t\tmessage: string,\n\t\tdetails: RpcErrorDetails = {},\n\t\tretryable = false,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"RpcError\";\n\t\tthis.code = code;\n\t\tthis.details = details;\n\t\tthis.retryable = retryable;\n\t}\n\n\tstatic requestTimeout(timeoutMs: number, details: RpcErrorDetails): RpcError {\n\t\treturn new RpcError(\n\t\t\tRpcErrorCode.REQUEST_TIMEOUT,\n\t\t\t`RPC request timed out after ${timeoutMs}ms. The node may be slow or unreachable.`,\n\t\t\t{ ...details, timeout: timeoutMs },\n\t\t\ttrue, // Retryable\n\t\t);\n\t}\n\n\tstatic networkError(message: string, details: RpcErrorDetails): RpcError {\n\t\treturn new RpcError(\n\t\t\tRpcErrorCode.NETWORK_ERROR,\n\t\t\t`Network error: ${message}. Check your internet connection and node URL.`,\n\t\t\tdetails,\n\t\t\ttrue, // Retryable\n\t\t);\n\t}\n\n\tstatic invalidResponse(details: RpcErrorDetails): RpcError {\n\t\treturn new RpcError(\n\t\t\tRpcErrorCode.INVALID_RESPONSE,\n\t\t\t\"Received invalid response from RPC node. The response format is unexpected.\",\n\t\t\tdetails,\n\t\t\tfalse,\n\t\t);\n\t}\n\n\tstatic accountNotFound(pubkey: string): RpcError {\n\t\treturn new RpcError(\n\t\t\tRpcErrorCode.ACCOUNT_NOT_FOUND,\n\t\t\t`Account ${pubkey} not found on chain. It may not exist or has zero balance.`,\n\t\t\t{ pubkey },\n\t\t\tfalse,\n\t\t);\n\t}\n\n\tstatic rateLimitExceeded(details: RpcErrorDetails): RpcError {\n\t\treturn new RpcError(\n\t\t\tRpcErrorCode.RATE_LIMIT_EXCEEDED,\n\t\t\t\"Rate limit exceeded. Too many requests to the RPC endpoint. Try again later or use a different endpoint.\",\n\t\t\tdetails,\n\t\t\ttrue, // Can retry after delay\n\t\t);\n\t}\n\n\tstatic fromRpcCode(\n\t\trpcCode: number,\n\t\tmessage: string,\n\t\tdetails: RpcErrorDetails,\n\t): RpcError {\n\t\t// Map JSON-RPC error codes to our error codes\n\t\tconst codeMap: Record<number, RpcErrorCode> = {\n\t\t\t[-32700]: RpcErrorCode.PARSE_ERROR,\n\t\t\t[-32600]: RpcErrorCode.INVALID_REQUEST,\n\t\t\t[-32601]: RpcErrorCode.METHOD_NOT_FOUND,\n\t\t\t[-32602]: RpcErrorCode.INVALID_PARAMS,\n\t\t\t[-32603]: RpcErrorCode.INTERNAL_ERROR,\n\t\t\t[429]: RpcErrorCode.RATE_LIMIT_EXCEEDED,\n\t\t};\n\n\t\tconst code = codeMap[rpcCode] || RpcErrorCode.INTERNAL_ERROR;\n\t\tconst retryable = rpcCode === 429 || rpcCode === -32603;\n\n\t\treturn new RpcError(code, message, { ...details, rpcCode }, retryable);\n\t}\n\n\ttoJSON(): {\n\t\tcode: RpcErrorCode;\n\t\tmessage: string;\n\t\tdetails?: Record<string, unknown>;\n\t\tretryable: boolean;\n\t} {\n\t\treturn {\n\t\t\tcode: this.code,\n\t\t\tmessage: this.message,\n\t\t\tdetails: this.details,\n\t\t\tretryable: this.retryable,\n\t\t};\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Base RPC client with JSON-RPC 2.0 protocol handling.\n *\n * Provides common functionality for all RPC clients including\n * request/response validation and error handling.\n */\nimport { RpcError } from \"../errors\";\nimport type { HttpTransport } from \"../http-transport\";\n\ninterface JsonRpcRequest {\n jsonrpc: \"2.0\";\n id: number;\n method: string;\n params: unknown[];\n}\n\ninterface JsonRpcResponse<T> {\n jsonrpc: \"2.0\";\n id: number;\n result?: T;\n error?: {\n code: number;\n message: string;\n data?: unknown;\n };\n}\n\n/**\n * Base client with JSON-RPC protocol handling.\n *\n * All specific clients (QueryClient, TransactionClient) extend this.\n */\nexport class BaseRpcClient {\n protected readonly transport: HttpTransport;\n private requestId = 0;\n\n constructor(transport: HttpTransport) {\n this.transport = transport;\n }\n\n /**\n * Makes a JSON-RPC 2.0 method call with type safety.\n *\n * Handles request serialization, response validation, and error mapping.\n */\n async call<T>(method: string, params: unknown[] = []): Promise<T> {\n const requestId = this.nextRequestId();\n\n const request: JsonRpcRequest = {\n jsonrpc: \"2.0\",\n id: requestId,\n method,\n params,\n };\n\n const requestBody = JSON.stringify(request);\n const requestDetails = { method, params, requestId };\n\n // Make HTTP request with retry logic\n const data = await this.transport.request(requestBody, requestDetails);\n\n // Validate response structure\n if (!this.isValidJsonRpcResponse(data)) {\n throw RpcError.invalidResponse({\n ...requestDetails,\n response: data,\n });\n }\n\n const response = data as JsonRpcResponse<T>;\n\n // Check for RPC error\n if (response.error) {\n throw RpcError.fromRpcCode(response.error.code, response.error.message, {\n ...requestDetails,\n rpcData: response.error.data,\n });\n }\n\n // Check for result\n if (!(\"result\" in response)) {\n throw RpcError.invalidResponse({\n ...requestDetails,\n response,\n });\n }\n\n return response.result as T;\n }\n\n /**\n * Validate JSON-RPC response structure\n */\n private isValidJsonRpcResponse(data: unknown): boolean {\n if (typeof data !== \"object\" || data === null) {\n return false;\n }\n\n const response = data as Record<string, unknown>;\n\n return (\n response.jsonrpc === \"2.0\" &&\n typeof response.id === \"number\" &&\n (\"result\" in response || \"error\" in response)\n );\n }\n\n /**\n * Generates the next request ID with Overflow Protection.\n * @returns The next request ID.\n */\n private nextRequestId(): number {\n this.requestId = (this.requestId + 1) % Number.MAX_SAFE_INTEGER;\n return this.requestId;\n }\n\n /**\n * Returns the configured RPC endpoint URL.\n */\n getUrl(): string {\n return this.transport.getUrl();\n }\n\n /**\n * Call an arbitrary RPC method with a JSON string body.\n *\n * Escape hatch for methods not yet in the typed interface.\n *\n * @param method - The RPC method name\n * @param params - JSON string of parameters\n * @returns JSON string of the result\n */\n async callWithJson(method: string, params: string): Promise<string> {\n const parsedParams = JSON.parse(params);\n const result = await this.call<unknown>(method, parsedParams);\n return JSON.stringify(result);\n }\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n// AUTO-GENERATED FROM spec.wit — DO NOT EDIT\n\nimport type { AccountFilter, AccountInfo, AllAccountsEntry, BlockInfo, ClusterNodeInfo, ConfigHashPrefix, ConfirmTransactionOptions, ConfirmedTransaction, ConnectedNode, EpochInfo, FeeResponse, GetAccountsByOwnerConfig, GetAllAccountsConfig, GetBlockConfig, GetSignaturesForAddressConfig, GetTransactionsConfig, GetValidatorAccountsRequest, GetWorkflowLineageRequest, GetWorkflowLineageResponse, Hash, IsBlockhashValidResponse, Kelvin, OptionalAccountInfo, OwnerAccount, PaginationInfo, PublicKey, RexInfoAndDuties, SecretSharingPubkey, SendAndConfirmOptions, SendTransactionOptions, Signature, SignatureInfo, SignatureStatus, StakeAccountInfo, SubmitEpochChangeRequest, SubmitEpochChangeResponse, Subscription, TokenBalance, TransactionInfo, TransactionResponse, TriggeredTransaction, ValidatorAccountInfo, ValidatorHealth } from \"./types.js\";\n\n/**\n * RpcClient interface — generated from spec.wit.\n *\n * Every method corresponds to a function in the `rpc-client` interface.\n */\nexport abstract class RpcClient {\n /**\n * Gets the balance of an account in kelvins.\n * \n * # Parameters\n * \n * * `pubkey` - The public key (address) of the account to query.\n * \n * # Returns\n * \n * The account balance in the smallest denomination of the native token (kelvins).\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or the account does not exist.\n */\n abstract getBalance(pubkey: PublicKey): Promise<Kelvin>;\n\n /**\n * Gets detailed information about an on-chain account.\n * \n * # Parameters\n * \n * * `pubkey` - The public key (address) of the account to query.\n * \n * # Returns\n * \n * Detailed account information including balance, owner, data, and executable flag.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or the account does not exist.\n */\n abstract getAccountInfo(pubkey: PublicKey): Promise<AccountInfo>;\n\n /**\n * Gets the current finalized block height from the blockchain.\n * \n * The block height represents the number of blocks produced since genesis.\n * Always returns the finalized block height for consistency.\n * \n * # Returns\n * \n * The current finalized block height.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getBlockHeight(): Promise<bigint>;\n\n /**\n * Gets the current finalized block height with advanced configuration.\n * \n * Provides access to advanced parameters for block height retrieval,\n * specifically minimum context slot requirements.\n * \n * # Parameters\n * \n * * `min-context-slot` - The minimum context slot that the server must have\n * reached before responding. If absent, no minimum is required.\n * \n * # Returns\n * \n * The current finalized block height.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getBlockHeightWithConfig(minContextSlot: bigint | undefined): Promise<bigint>;\n\n /**\n * Gets detailed information about a transaction by its signature.\n * \n * # Parameters\n * \n * * `sig` - The transaction signature to look up.\n * \n * # Returns\n * \n * Full transaction details including block height, block hash, timestamp,\n * execution metadata (fee, errors), and the transaction content.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or the transaction is not found.\n */\n abstract getTransaction(sig: Signature): Promise<TransactionResponse>;\n\n /**\n * Gets the total number of transactions processed since genesis.\n * \n * # Returns\n * \n * The total transaction count.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getTransactionCount(): Promise<bigint>;\n\n /**\n * Calculates the minimum balance required for rent exemption.\n * \n * Accounts with at least this balance are exempt from paying rent.\n * \n * # Parameters\n * \n * * `data-size` - The size of the account data in bytes.\n * \n * # Returns\n * \n * The minimum balance (in kelvins) required for rent exemption.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getMinimumBalanceForRentExemption(dataSize: bigint): Promise<bigint>;\n\n /**\n * Gets the status of multiple transaction signatures.\n * \n * # Parameters\n * \n * * `signatures` - A list of transaction signatures to query.\n * \n * # Returns\n * \n * A list of signature statuses (slot, executed, error) corresponding\n * to the input signatures.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getSignatureStatuses(signatures: Signature[]): Promise<(SignatureStatus | undefined)[]>;\n\n /**\n * Gets signatures associated with an address, with optional pagination.\n * \n * # Parameters\n * \n * * `address` - The address to query signatures for.\n * * `config` - Optional configuration for pagination (limit, before, until).\n * \n * # Returns\n * \n * A list of signature info records for the given address.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getSignaturesForAddress(address: PublicKey, config: GetSignaturesForAddressConfig | undefined): Promise<SignatureInfo[]>;\n\n /**\n * Gets current epoch information.\n * \n * # Returns\n * \n * Epoch information including epoch number, slot indices, block height,\n * and transaction count.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getEpochInfo(): Promise<EpochInfo>;\n\n /**\n * Gets the fee for a given serialized message.\n * \n * # Parameters\n * \n * * `message` - The base64-encoded serialized message to calculate fees for.\n * \n * # Returns\n * \n * A fee response containing the fee in kelvins, or absent if the message\n * is invalid.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getFeeForMessage(message: string): Promise<FeeResponse>;\n\n /**\n * Gets information for multiple accounts in a single request.\n * \n * # Parameters\n * \n * * `pubkeys` - A list of public keys to query.\n * \n * # Returns\n * \n * A list of optional account info records. Each entry is absent if that\n * account does not exist.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getMultipleAccounts(pubkeys: PublicKey[]): Promise<OptionalAccountInfo[]>;\n\n /**\n * Gets accounts owned by a given program or address.\n * \n * Returns all accounts whose owner matches the specified public key,\n * along with optional pagination metadata.\n * \n * # Parameters\n * \n * * `owner` - The public key of the owner/program to query accounts for.\n * * `filter` - Optional filter to specify account type (program accounts\n * or token accounts). Defaults to program-accounts if absent.\n * * `config` - Optional pagination configuration (limit, after cursor).\n * \n * # Returns\n * \n * A tuple of (accounts list, optional pagination info).\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getAccountsByOwner(owner: PublicKey, filter: AccountFilter | undefined, config: GetAccountsByOwnerConfig | undefined): Promise<[OwnerAccount[], PaginationInfo | undefined]>;\n\n /**\n * Gets a subscription by subscriber public key and nonce.\n * \n * # Parameters\n * \n * * `subscriber` - The public key of the subscriber.\n * * `nonce` - The nonce identifying the specific subscription.\n * \n * # Returns\n * \n * The subscription record (kind, topic, subscriber, event-account).\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or the subscription is not found.\n */\n abstract getSubscription(subscriber: PublicKey, nonce: string): Promise<Subscription>;\n\n /**\n * Gets transactions triggered by a subscription.\n * \n * Returns transactions that were automatically triggered in response to\n * subscription matches or other programmatic conditions.\n * \n * # Parameters\n * \n * * `subscription-account` - The public key of the subscription account.\n * * `limit` - Optional maximum number of transactions to return.\n * \n * # Returns\n * \n * A list of triggered transaction records (signature, block number).\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getTriggeredTransactions(subscriptionAccount: PublicKey, limit: number | undefined): Promise<TriggeredTransaction[]>;\n\n /**\n * Gets the workflow lineage tree for a transaction.\n * \n * Traverses the chain of workflow-triggered transactions starting from\n * a root transaction, building a tree of parent-child relationships.\n * \n * # Parameters\n * \n * * `request` - The lineage request including root signature, max depth,\n * and whether to include event details.\n * \n * # Returns\n * \n * The workflow lineage response with nodes, leaves, and truncation info.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or the root transaction is not found.\n */\n abstract getWorkflowLineage(request: GetWorkflowLineageRequest): Promise<GetWorkflowLineageResponse>;\n\n /**\n * Gets paginated transactions from the blockchain.\n * \n * Returns a list of transactions, optionally filtered and paginated.\n * Useful for transaction monitoring, analytics, and debugging.\n * \n * # Parameters\n * \n * * `config` - Optional configuration for pagination (limit, before cursor).\n * If absent, defaults apply (limit: 100).\n * \n * # Returns\n * \n * A list of transaction info records with signatures, slots, block times,\n * and error status.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getTransactions(config: GetTransactionsConfig | undefined): Promise<TransactionInfo[]>;\n\n /**\n * Checks if a blockhash is still valid for transaction submission.\n * \n * # Parameters\n * \n * * `blockhash` - The blockhash to validate.\n * \n * # Returns\n * \n * `true` if the blockhash is still valid, `false` otherwise.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract isBlockhashValid(blockhash: Hash): Promise<IsBlockhashValidResponse>;\n\n /**\n * Gets the health status of the RPC node.\n * \n * # Returns\n * \n * A health status string, typically \"ok\" when the node is healthy.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or the node is unhealthy.\n */\n abstract getHealth(): Promise<string>;\n\n /**\n * Gets the health status of the validator.\n * \n * # Returns\n * \n * The validator health status record.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getValidatorHealth(): Promise<ValidatorHealth>;\n\n /**\n * Gets the list of full nodes connected to the validator or full node.\n * \n * # Returns\n * \n * A list of connected nodes, each identified by a network public key\n * and connection duration in milliseconds.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getConnectedFullNodes(): Promise<ConnectedNode[]>;\n\n /**\n * Gets the TEE's secret sharing public key for HPKE encryption.\n * \n * This public key is used to encrypt secrets that only the TEE cluster\n * can decrypt.\n * \n * # Returns\n * \n * The X25519 public key (hex-encoded) used for HPKE encryption.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails, the TEE Registry state account\n * doesn't exist, or the secret sharing public key has not been registered.\n */\n abstract getSecretSharingPubkey(): Promise<SecretSharingPubkey>;\n\n /**\n * Gets the config hash prefix for protecting against replay attacks.\n * \n * Retrieves the first 64 bits of the config hash, which is used for\n * transaction replay protection across chains.\n * \n * # Returns\n * \n * The config hash prefix as a u64 value.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getConfigHashPrefix(): Promise<ConfigHashPrefix>;\n\n /**\n * Gets all accounts in the system.\n * \n * **Warning:** This can be very expensive on large networks. Intended\n * primarily for testing and debugging on local/devnet.\n * \n * # Parameters\n * \n * * `config` - Optional configuration for encoding and data inclusion.\n * \n * # Returns\n * \n * A list of all account entries (pubkey + account info).\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getAllAccounts(config: GetAllAccountsConfig | undefined): Promise<AllAccountsEntry[]>;\n\n /**\n * Gets a block by its height.\n * \n * # Parameters\n * \n * * `block-height` - The block height to query.\n * * `config` - Optional configuration for transaction detail level\n * (\"full\", \"signatures\", or \"none\"). Defaults to \"full\".\n * \n * # Returns\n * \n * Block information including blockhash, timestamp, and transactions\n * (detail level depends on config).\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or the block is not found.\n */\n abstract getBlock(blockHeight: bigint, config: GetBlockConfig | undefined): Promise<BlockInfo>;\n\n /**\n * Gets a list of confirmed block heights in a range (inclusive).\n * \n * # Parameters\n * \n * * `start-height` - The start of the block height range.\n * * `end-height` - The end of the range. If absent, returns up to the\n * latest confirmed block.\n * \n * # Returns\n * \n * A list of confirmed block height numbers.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getBlocks(startHeight: bigint, endHeight: bigint | undefined): Promise<bigint[]>;\n\n /**\n * Gets detailed information about a stake account.\n * \n * # Parameters\n * \n * * `pubkey` - The public key of the stake account.\n * \n * # Returns\n * \n * The stake account info (state, balances, authorities), or absent if\n * the account is not a valid stake account.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getStakeAccount(pubkey: PublicKey): Promise<StakeAccountInfo | undefined>;\n\n /**\n * Gets all registered validator accounts.\n * \n * # Parameters\n * \n * * `request` - Request parameters specifying whether to use the frozen\n * (last epoch) or pending (current) snapshot.\n * \n * # Returns\n * \n * A list of validator account info records.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getValidatorAccounts(request: GetValidatorAccountsRequest): Promise<ValidatorAccountInfo[]>;\n\n /**\n * Gets the token balance of an SPL Token account.\n * \n * # Parameters\n * \n * * `pubkey` - The public key of the SPL Token account.\n * \n * # Returns\n * \n * Token balance information including raw amount, decimals, and\n * human-readable amount string.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or the account is not a valid\n * token account.\n */\n abstract getTokenAccountBalance(pubkey: PublicKey): Promise<TokenBalance>;\n\n /**\n * Gets registered REX requests for a creator.\n * \n * # Parameters\n * \n * * `creator` - The public key of the REX creator.\n * * `nonce` - Optional nonce to filter for a specific REX request.\n * If absent, returns all requests by the creator.\n * \n * # Returns\n * \n * A list of REX request records with their associated duties.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getRexRequests(creator: PublicKey, nonce: string | undefined): Promise<RexInfoAndDuties[]>;\n\n /**\n * Gets missed REX duty proposal rounds for a specific REX request.\n * \n * # Parameters\n * \n * * `creator` - The public key of the REX creator.\n * * `nonce` - The nonce identifying the specific REX request.\n * \n * # Returns\n * \n * A list of proposal round numbers where duties were missed.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getRexMissedDuties(creator: PublicKey, nonce: string): Promise<bigint[]>;\n\n /**\n * Gets information about all known cluster nodes.\n * \n * # Returns\n * \n * A list of cluster node info records including stake, addresses,\n * and public keys.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getClusterNodes(): Promise<ClusterNodeInfo[]>;\n\n /**\n * Gets the list of validator indices this node is connected to.\n * \n * # Returns\n * \n * A list of validator indices (u32).\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getConnectedValidators(): Promise<number[]>;\n\n /**\n * Submits a signed transaction to the network.\n * \n * # Parameters\n * \n * * `transaction` - The serialized, signed transaction as a byte array.\n * * `options` - Optional send options (skip preflight, max retries).\n * If absent, default options are used.\n * \n * # Returns\n * \n * The transaction signature, which can be used to check its status.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or the transaction is rejected.\n */\n abstract sendTransaction(transaction: Uint8Array, options: SendTransactionOptions | undefined): Promise<Signature>;\n\n /**\n * Requests an airdrop of tokens to the specified account.\n * \n * This method is typically only available on test networks (localnet, devnet).\n * \n * # Parameters\n * \n * * `pubkey` - The public key of the recipient account.\n * * `amount` - The amount of kelvins to airdrop.\n * \n * # Returns\n * \n * The transaction signature of the airdrop transaction.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or airdrops are not supported.\n */\n abstract requestAirdrop(pubkey: PublicKey, amount: Kelvin): Promise<Signature>;\n\n /**\n * Polls until a transaction is confirmed or times out.\n * \n * This is a CDK compound method (not a single RPC call). It repeatedly\n * calls getSignatureStatuses until the transaction is confirmed or the\n * retry limit is reached.\n * \n * # Parameters\n * \n * * `sig` - The transaction signature (base58) to monitor.\n * * `options` - Optional confirmation options (max retries, retry delay).\n * Defaults: 30 retries, 1000ms delay.\n * \n * # Returns\n * \n * A confirmed transaction record with signature, executed status, and error.\n * \n * # Errors\n * \n * Returns an error if the transaction fails or confirmation times out.\n */\n abstract confirmTransaction(sig: string, options: ConfirmTransactionOptions | undefined): Promise<ConfirmedTransaction>;\n\n /**\n * Sends a transaction and waits for confirmation.\n * \n * This is a CDK compound method that combines send-transaction and\n * confirm-transaction into a single call.\n * \n * # Parameters\n * \n * * `transaction` - The serialized, signed transaction as a byte array.\n * * `options` - Optional combined send-and-confirm options.\n * \n * # Returns\n * \n * A confirmed transaction record with signature, executed status, and error.\n * \n * # Errors\n * \n * Returns an error if sending fails, the transaction is rejected,\n * or confirmation times out.\n */\n abstract sendAndConfirmTransaction(transaction: Uint8Array, options: SendAndConfirmOptions | undefined): Promise<ConfirmedTransaction>;\n\n /**\n * Requests an airdrop and waits for confirmation.\n * \n * This is a CDK compound method that combines request-airdrop and\n * confirm-transaction into a single call.\n * \n * # Parameters\n * \n * * `pubkey` - The public key of the recipient account.\n * * `amount` - The amount of kelvins to airdrop.\n * \n * # Returns\n * \n * A confirmed transaction record for the airdrop.\n * \n * # Errors\n * \n * Returns an error if the airdrop fails or confirmation times out.\n */\n abstract requestAirdropAndConfirm(pubkey: PublicKey, amount: Kelvin): Promise<ConfirmedTransaction>;\n\n /**\n * Submits an epoch change transaction (admin-only).\n * \n * This is a restricted admin method used for epoch management.\n * Only available to authorized admin accounts.\n * \n * # Parameters\n * \n * * `request` - The epoch change request containing serialized data.\n * \n * # Returns\n * \n * A response indicating whether the submission was accepted.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or the sender is not authorized.\n */\n abstract sendAdminTransaction(request: SubmitEpochChangeRequest): Promise<SubmitEpochChangeResponse>;\n\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Query client for read-only RPC operations.\n */\n\nimport { base58 } from \"@scure/base\";\nimport { PublicKey } from \"../../crypto\";\nimport type {\n\tAccountInfo,\n\tAllAccountsEntry,\n\tBlockInfo,\n\tClusterNodeInfo,\n\tConnectedNode,\n\tEpochInfo,\n\tGetAccountsByOwnerConfig,\n\tGetAllAccountsConfig,\n\tGetBlockConfig,\n\tGetSignaturesForAddressConfig,\n\tGetTransactionsConfig,\n\tGetValidatorAccountsRequest,\n\tGetWorkflowLineageRequest,\n\tGetWorkflowLineageResponse,\n\tHash,\n\tIsBlockhashValidResponse,\n\tOwnerAccount,\n\tPaginationInfo,\n\tRexInfoAndDuties,\n\tSignature,\n\tSignatureInfo,\n\tSignatureStatus,\n\tStakeAccountInfo,\n\tSubscription,\n\tSubscriptionInstruction,\n\tSubscriptionKind,\n\tTokenBalance,\n\tTransactionInfo,\n\tTransactionResponse,\n\tTriggeredTransaction,\n\tTruncationReason,\n\tValidatorAccountInfo,\n\tValidatorHealth,\n} from \"../../generated/types\";\nimport { BaseRpcClient } from \"./base-client\";\n\n/**\n * Filter for what kind of accounts to return from getAccountsByOwner.\n * Uses the serde-compatible discriminated union format expected by the RPC.\n */\nexport type AccountFilterParam =\n\t| { type: \"programAccounts\" }\n\t| { type: \"tokenAccounts\"; mint?: string };\n\n/**\n * Client for querying blockchain state.\n *\n * Handles all read-only operations like getting balances, account info, etc.\n */\nexport class QueryRpcClient extends BaseRpcClient {\n\t/**\n\t * Retrieve the balance of an account in kelvins (smallest unit).\n\t *\n\t * @param pubkey - The public key of the account to query\n\t * @returns The account balance in kelvins\n\t *\n\t * @example\n\t * ```typescript\n\t * const balance = await client.getBalance(publicKey);\n\t * console.log(`Balance: ${balance} kelvins`);\n\t * ```\n\t */\n\tasync getBalance(pubkey: PublicKey): Promise<bigint> {\n\t\tconst result = await this.call<{ value: number }>(\"getBalance\", [\n\t\t\t{ address: pubkey.toString() },\n\t\t]);\n\t\treturn BigInt(result.value);\n\t}\n\n\t/**\n\t * Retrieve detailed information about an account.\n\t *\n\t * Returns account data including balance, owner program, stored data,\n\t * executable status, and rent epoch.\n\t *\n\t * @param pubkey - The public key of the account to query\n\t * @returns Account information, or null if the account does not exist\n\t *\n\t * @example\n\t * ```typescript\n\t * const info = await client.getAccountInfo(publicKey);\n\t * if (info) {\n\t * console.log(`Owner: ${info.owner}`);\n\t * console.log(`Balance: ${info.balance} kelvins`);\n\t * console.log(`Data length: ${info.data.length} bytes`);\n\t * }\n\t * ```\n\t */\n\tasync getAccountInfo(pubkey: PublicKey): Promise<AccountInfo | null> {\n\t\tconst result = await this.call<{\n\t\t\tvalue: {\n\t\t\t\tkelvin: number;\n\t\t\t\towner: string;\n\t\t\t\tdata: [string, string]; // [encoded_data, encoding_type]\n\t\t\t\texecutable: boolean;\n\t\t\t\trentEpoch: number;\n\t\t\t\tspace: number;\n\t\t\t} | null;\n\t\t}>(\"getAccountInfo\", [{ address: pubkey.toString() }]);\n\n\t\tif (!result.value) {\n\t\t\treturn null; // Account doesn't exist\n\t\t}\n\n\t\treturn {\n\t\t\tkelvin: BigInt(result.value.kelvin),\n\t\t\towner: PublicKey.fromString(result.value.owner),\n\t\t\tdata: result.value.data,\n\t\t\texecutable: result.value.executable,\n\t\t\trentEpoch: BigInt(result.value.rentEpoch),\n\t\t\tspace: BigInt(result.value.space ?? 0),\n\t\t};\n\t}\n\n\t/**\n\t * Retrieve the current block height of the blockchain.\n\t *\n\t * The block height represents the number of blocks that have been\n\t * confirmed on the chain since genesis.\n\t *\n\t * @returns The current block height\n\t *\n\t * @example\n\t * ```typescript\n\t * const height = await client.getBlockHeight();\n\t * console.log(`Current block height: ${height}`);\n\t * ```\n\t */\n\tasync getBlockHeight(): Promise<bigint> {\n\t\tconst result = await this.call<number>(\"getBlockHeight\", []);\n\t\treturn BigInt(result);\n\t}\n\n\t/**\n\t * Retrieve transaction signatures for a given address.\n\t *\n\t * Returns transaction signatures with metadata associated with the specified\n\t * address, ordered by slot height (most recent first).\n\t *\n\t * @param address - The public key of the address to query\n\t * @param config - Optional configuration options for the query (limit, before, until)\n\t * @returns Response containing context and array of signature info with blockHeight and blockTime\n\t *\n\t * @example\n\t * ```typescript\n\t * const result = await client.getSignaturesForAddress(publicKey, { limit: 10 });\n\t * console.log(`Query slot: ${result.context.slot}`);\n\t * result.value.forEach(sig => {\n\t * console.log(`Transaction: ${sig.signature}, block: ${sig.blockHeight}`);\n\t * });\n\t * ```\n\t */\n\tasync getSignaturesForAddress(\n\t\taddress: PublicKey,\n\t\tconfig?: GetSignaturesForAddressConfig,\n\t): Promise<SignatureInfo[]> {\n\t\tconst result = await this.call<{\n\t\t\tcontext: {\n\t\t\t\tslot: number;\n\t\t\t\tapi_version: string;\n\t\t\t};\n\t\t\tvalue: Array<{\n\t\t\t\tsignature: string;\n\t\t\t\tblockHeight: number;\n\t\t\t\tblockTime: number;\n\t\t\t\terr?: string;\n\t\t\t}>;\n\t\t}>(\"getSignaturesForAddress\", [\n\t\t\t{ address: address.toString(), config: config ?? {} },\n\t\t]);\n\t\treturn result.value.map((signature) => ({\n\t\t\tsignature: signature.signature,\n\t\t\tblockHeight: BigInt(signature.blockHeight),\n\t\t\tblockTime: BigInt(signature.blockTime),\n\t\t\terr: signature.err,\n\t\t}));\n\t}\n\n\t/**\n\t * Retrieve the total number of transactions processed since genesis.\n\t *\n\t * @returns The total transaction count\n\t *\n\t * @example\n\t * ```typescript\n\t * const count = await client.getTransactionCount();\n\t * console.log(`Total transactions: ${count}`);\n\t * ```\n\t */\n\tasync getTransactionCount(): Promise<bigint> {\n\t\tconst result = await this.call<number>(\"getTransactionCount\", []);\n\t\treturn BigInt(result);\n\t}\n\n\t/**\n\t * Retrieve the status of multiple transaction signatures in a single request.\n\t *\n\t * Useful for batch-checking transaction confirmations. Returns null for\n\t * signatures that are not found or have expired from the status cache.\n\t *\n\t * @param signatures - Array of transaction signatures to query\n\t * @returns Array of signature statuses (null if signature not found)\n\t *\n\t * @example\n\t * ```typescript\n\t * const statuses = await client.getSignatureStatuses([sig1, sig2, sig3]);\n\t * statuses.forEach((status, i) => {\n\t * if (status) {\n\t * console.log(`${signatures[i]}: slot ${status.slot}, executed: ${status.executed}`);\n\t * } else {\n\t * console.log(`${signatures[i]}: not found`);\n\t * }\n\t * });\n\t * ```\n\t */\n\tasync getSignatureStatuses(\n\t\tsignatures: string[],\n\t): Promise<(SignatureStatus | null)[]> {\n\t\tconst result = await this.call<{\n\t\t\tvalue: Array<{\n\t\t\t\tslot: number;\n\t\t\t\texecuted: boolean;\n\t\t\t\terr?: string;\n\t\t\t} | null>;\n\t\t}>(\"getSignatureStatuses\", [{ signatures }]);\n\n\t\treturn result.value.map((status) => {\n\t\t\tif (!status) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tslot: BigInt(status.slot),\n\t\t\t\texecuted: status.executed,\n\t\t\t\terr: status.err,\n\t\t\t};\n\t\t});\n\t}\n\n\t/**\n\t * Retrieve information about the current epoch.\n\t *\n\t * Returns epoch metadata including the current epoch number, slot position\n\t * within the epoch, total slots per epoch, and current block height.\n\t *\n\t * @returns Current epoch information\n\t *\n\t * @example\n\t * ```typescript\n\t * const info = await client.getEpochInfo();\n\t * console.log(`Epoch: ${info.epoch}`);\n\t * console.log(`Slot ${info.slotIndex} of ${info.slotsInEpoch}`);\n\t * console.log(`Block height: ${info.blockHeight}`);\n\t * ```\n\t */\n\tasync getEpochInfo(): Promise<EpochInfo> {\n\t\tconst result = await this.call<{\n\t\t\tepoch: number;\n\t\t\tslotIndex: number;\n\t\t\tslotsInEpoch: number;\n\t\t\tabsoluteSlot: number;\n\t\t\tblockHeight: number;\n\t\t\ttransactionCount?: number;\n\t\t}>(\"getEpochInfo\", []);\n\n\t\treturn {\n\t\t\tepoch: BigInt(result.epoch),\n\t\t\tslotIndex: BigInt(result.slotIndex),\n\t\t\tslotsInEpoch: BigInt(result.slotsInEpoch),\n\t\t\tabsoluteSlot: BigInt(result.absoluteSlot),\n\t\t\tblockHeight: BigInt(result.blockHeight),\n\t\t\ttransactionCount: result.transactionCount\n\t\t\t\t? BigInt(result.transactionCount)\n\t\t\t\t: undefined,\n\t\t};\n\t}\n\n\t/**\n\t * Check the health status of the RPC node.\n\t *\n\t * Returns \"ok\" if the node is healthy. If the node is unhealthy,\n\t * returns an error message describing the issue.\n\t *\n\t * @returns \"ok\" if healthy, otherwise an error message\n\t *\n\t * @example\n\t * ```typescript\n\t * const health = await client.getHealth();\n\t * if (health === \"ok\") {\n\t * console.log(\"Node is healthy\");\n\t * } else {\n\t * console.log(`Node unhealthy: ${health}`);\n\t * }\n\t * ```\n\t */\n\tasync getHealth(): Promise<\"ok\" | string> {\n\t\tconst result = await this.call<string>(\"getHealth\", []);\n\t\treturn result;\n\t}\n\n\t/**\n\t * Calculate the minimum balance required for an account to be rent-exempt.\n\t *\n\t * Accounts with at least this balance are exempt from paying rent.\n\t *\n\t * @param accountDataSize - The size of the account data in bytes\n\t * @returns The minimum balance in kelvins required for rent exemption\n\t *\n\t * @example\n\t * ```typescript\n\t * const minBalance = await client.getMinimumBalanceForRentExemption(128);\n\t * console.log(`Need at least ${minBalance} kelvins for 128 bytes`);\n\t * ```\n\t */\n\tasync getMinimumBalanceForRentExemption(\n\t\taccountDataSize: number,\n\t): Promise<bigint> {\n\t\tconst result = await this.call<number>(\n\t\t\t\"getMinimumBalanceForRentExemption\",\n\t\t\t[{ data_length: accountDataSize }],\n\t\t);\n\t\treturn BigInt(result);\n\t}\n\n\t/**\n\t * Get the fee required to process a specific message.\n\t *\n\t * @param message - Base64-encoded serialized versioned message\n\t * @returns Fee in kelvins, or null if message is invalid\n\t *\n\t * @example\n\t * ```typescript\n\t * const fee = await client.getFeeForMessage(base64Message);\n\t * if (fee !== null) {\n\t * console.log(`Fee: ${fee} kelvins`);\n\t * }\n\t * ```\n\t */\n\tasync getFeeForMessage(message: string): Promise<bigint | null> {\n\t\tconst result = await this.call<{\n\t\t\tvalue: number | null;\n\t\t}>(\"getFeeForMessage\", [{ message }]);\n\t\treturn result.value !== null ? BigInt(result.value) : null;\n\t}\n\n\t/**\n\t * Get information for multiple accounts in a single request.\n\t *\n\t * Useful for batch operations and reducing RPC calls.\n\t *\n\t * @param pubkeys - Array of public keys to query (1-100)\n\t * @returns Account information for each address (null for non-existent accounts)\n\t *\n\t * @example\n\t * ```typescript\n\t * const accounts = await client.getMultipleAccounts([pubkey1, pubkey2]);\n\t * accounts.value.forEach((account, i) => {\n\t * if (account) {\n\t * console.log(`Account ${i}: ${account.balance} kelvins`);\n\t * }\n\t * });\n\t * ```\n\t */\n\tasync getMultipleAccounts(\n\t\tpubkeys: PublicKey[],\n\t): Promise<Array<AccountInfo | null>> {\n\t\tconst result = await this.call<{\n\t\t\tvalue: ({\n\t\t\t\tkelvin: number;\n\t\t\t\towner: string;\n\t\t\t\tdata: [string, string];\n\t\t\t\texecutable: boolean;\n\t\t\t\trentEpoch: number;\n\t\t\t\tspace: number;\n\t\t\t} | null)[];\n\t\t}>(\"getMultipleAccounts\", [\n\t\t\t{ addresses: pubkeys.map((p) => p.toString()) },\n\t\t]);\n\n\t\treturn result.value.map((account) => {\n\t\t\tif (account === null) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tkelvin: BigInt(account.kelvin),\n\t\t\t\towner: PublicKey.fromString(account.owner),\n\t\t\t\tdata: account.data,\n\t\t\t\texecutable: account.executable,\n\t\t\t\trentEpoch: BigInt(account.rentEpoch),\n\t\t\t\tspace: BigInt(account.space ?? 0),\n\t\t\t};\n\t\t});\n\t}\n\n\t/**\n\t * Get all accounts owned by a specific program or address.\n\t *\n\t * Essential for querying token accounts, program data, and more.\n\t *\n\t * @param owner - Program ID or owner public key\n\t * @param filter - Filter type (ProgramAccounts or TokenAccounts)\n\t * @param config - Optional configuration for pagination and encoding\n\t * @returns Accounts owned by the specified owner with pagination info\n\t *\n\t * @example\n\t * ```typescript\n\t * const result = await client.getAccountsByOwner(programId);\n\t * console.log(`Found ${result.value.length} accounts`);\n\t * result.value.forEach(({ pubkey, account }) => {\n\t * console.log(`${pubkey}: ${account.balance} kelvins`);\n\t * });\n\t * ```\n\t */\n\tasync getAccountsByOwner(\n\t\towner: PublicKey,\n\t\tfilter: AccountFilterParam = { type: \"programAccounts\" },\n\t\tconfig?: GetAccountsByOwnerConfig,\n\t): Promise<[OwnerAccount[], PaginationInfo | undefined]> {\n\t\tconst result = await this.call<{\n\t\t\tcontext: { slot: number; api_version?: string };\n\t\t\tvalue: {\n\t\t\t\tpubkey: string;\n\t\t\t\taccount: {\n\t\t\t\t\tkelvin: number;\n\t\t\t\t\towner: string;\n\t\t\t\t\tdata: [string, string];\n\t\t\t\t\texecutable: boolean;\n\t\t\t\t\trentEpoch: number;\n\t\t\t\t\tspace: number;\n\t\t\t\t};\n\t\t\t}[];\n\t\t\tpagination?: { has_more: boolean; next_cursor?: string };\n\t\t}>(\"getAccountsByOwner\", [\n\t\t\t{\n\t\t\t\towner: owner.toString(),\n\t\t\t\tfilter,\n\t\t\t\tconfig: config\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tlimit: config.limit,\n\t\t\t\t\t\t\tafter: config.after,\n\t\t\t\t\t\t}\n\t\t\t\t\t: undefined,\n\t\t\t},\n\t\t]);\n\n\t\tconst accounts: OwnerAccount[] = result.value.map(\n\t\t\t({ pubkey, account }) => ({\n\t\t\t\tpubkey: PublicKey.fromString(pubkey),\n\t\t\t\taccount: {\n\t\t\t\t\tkelvin: BigInt(account.kelvin),\n\t\t\t\t\towner: PublicKey.fromString(account.owner),\n\t\t\t\t\tdata: account.data,\n\t\t\t\t\texecutable: account.executable,\n\t\t\t\t\trentEpoch: BigInt(account.rentEpoch),\n\t\t\t\t\tspace: BigInt(account.space ?? 0),\n\t\t\t\t},\n\t\t\t}),\n\t\t);\n\t\tconst pagination: PaginationInfo | undefined = result.pagination\n\t\t\t? {\n\t\t\t\t\thasMore: result.pagination.has_more,\n\t\t\t\t\tnextCursor: result.pagination.next_cursor,\n\t\t\t\t}\n\t\t\t: undefined;\n\t\treturn [accounts, pagination];\n\t}\n\n\t/**\n\t * Get workflow lineage information for tracking execution history.\n\t *\n\t * Returns the tree of transactions spawned from a root transaction\n\t * through subscriptions and triggers.\n\t *\n\t * @param request - Workflow lineage request with signature and options\n\t * @returns Workflow lineage tree with nodes and metadata\n\t *\n\t * @example\n\t * ```typescript\n\t * const lineage = await client.getWorkflowLineage({\n\t * signature: rootTxSignature,\n\t * maxDepth: 5,\n\t * });\n\t * console.log(`Found ${lineage.lineage.workflowNodes.length} nodes`);\n\t * ```\n\t */\n\tasync getWorkflowLineage(\n\t\trequest: GetWorkflowLineageRequest,\n\t): Promise<GetWorkflowLineageResponse> {\n\t\tconst result = await this.call<{\n\t\t\tlineage: {\n\t\t\t\tworkflowNodes: Array<{\n\t\t\t\t\tid: string;\n\t\t\t\t\tdepth: number;\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tblockHeight: number;\n\t\t\t\t\t\ttimestamp: number;\n\t\t\t\t\t\tsuccess: boolean;\n\t\t\t\t\t\tinstructionCount: number;\n\t\t\t\t\t\tinstructionProgramIds: string[];\n\t\t\t\t\t};\n\t\t\t\t\tsubscriptions: unknown[];\n\t\t\t\t\ttriggeredBy?: {\n\t\t\t\t\t\tevent: { topic: string; attributes: Record<string, unknown> };\n\t\t\t\t\t\tsubscriptionPubkey: string;\n\t\t\t\t\t\ttimestampRange?: { from: number; to: number };\n\t\t\t\t\t\teventAccount?: string;\n\t\t\t\t\t};\n\t\t\t\t\tworkflowChildren: string[];\n\t\t\t\t\thasMoreChildren: boolean;\n\t\t\t\t}>;\n\t\t\t};\n\t\t\tleaves: string[];\n\t\t\ttruncated: boolean;\n\t\t\ttruncationReason: string;\n\t\t\tcontinuationHints: string[];\n\t\t}>(\"getWorkflowLineage\", [\n\t\t\t{\n\t\t\t\tsignature: request.signature,\n\t\t\t\tmax_depth: request.maxDepth,\n\t\t\t\tinclude_events: request.includeEvents,\n\t\t\t},\n\t\t]);\n\n\t\treturn {\n\t\t\tlineage: {\n\t\t\t\tworkflowNodes: result.lineage.workflowNodes.map((node) => ({\n\t\t\t\t\tid: node.id,\n\t\t\t\t\tdepth: node.depth,\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tblockHeight: BigInt(node.data.blockHeight),\n\t\t\t\t\t\ttimestamp: BigInt(node.data.timestamp),\n\t\t\t\t\t\tsuccess: node.data.success,\n\t\t\t\t\t\tinstructionCount: node.data.instructionCount,\n\t\t\t\t\t\tinstructionProgramIds: node.data.instructionProgramIds,\n\t\t\t\t\t},\n\t\t\t\t\tsubscriptions: node.subscriptions as Subscription[],\n\t\t\t\t\ttriggeredBy: node.triggeredBy\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tevent: { topic: node.triggeredBy.event.topic },\n\t\t\t\t\t\t\t\tsubscriptionPubkey: node.triggeredBy.subscriptionPubkey,\n\t\t\t\t\t\t\t\ttimestampRange: node.triggeredBy.timestampRange\n\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\tstart: BigInt(node.triggeredBy.timestampRange.from),\n\t\t\t\t\t\t\t\t\t\t\tend: BigInt(node.triggeredBy.timestampRange.to),\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\teventAccount: node.triggeredBy.eventAccount,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: undefined,\n\t\t\t\t\tworkflowChildren: node.workflowChildren,\n\t\t\t\t\thasMoreChildren: node.hasMoreChildren,\n\t\t\t\t})),\n\t\t\t},\n\t\t\tleaves: result.leaves,\n\t\t\ttruncated: result.truncated,\n\t\t\ttruncationReason: result.truncationReason as TruncationReason,\n\t\t\tcontinuationHints: result.continuationHints,\n\t\t};\n\t}\n\n\t/**\n\t * Get subscriptions for a given subscriber address.\n\t *\n\t * Returns subscriptions that will trigger transactions when matching events occur.\n\t *\n\t * @param subscriber - The subscriber's public key\n\t * @param nonce - The nonce identifying the subscription\n\t * @returns The subscription for the subscriber and nonce\n\t *\n\t * @example\n\t * ```typescript\n\t * const subscription = await client.getSubscription(subscriberPubkey, \"my-nonce\");\n\t * console.log(`Topic: ${subscription.topic}, Kind: ${subscription.kind}`);\n\t * ```\n\t */\n\tasync getSubscription(\n\t\tsubscriber: PublicKey,\n\t\tnonce: string,\n\t): Promise<Subscription> {\n\t\tconst result = await this.call<{\n\t\t\tsubscription: {\n\t\t\t\tkind: string;\n\t\t\t\ttopic: string;\n\t\t\t\tinstructions: unknown[];\n\t\t\t\tsubscriber: string;\n\t\t\t\teventAccount?: string;\n\t\t\t\ttimestampRange?: [number, number];\n\t\t\t};\n\t\t}>(\"getSubscription\", [\n\t\t\t{\n\t\t\t\tsubscriber: subscriber.toString(),\n\t\t\t\tnonce,\n\t\t\t},\n\t\t]);\n\n\t\tconst sub = result.subscription;\n\t\treturn {\n\t\t\tkind: sub.kind as SubscriptionKind,\n\t\t\ttopic: sub.topic,\n\t\t\tinstructions: sub.instructions as SubscriptionInstruction[],\n\t\t\tsubscriber: sub.subscriber,\n\t\t\teventAccount: sub.eventAccount,\n\t\t\ttimestampRange: sub.timestampRange\n\t\t\t\t? [BigInt(sub.timestampRange[0]), BigInt(sub.timestampRange[1])]\n\t\t\t\t: undefined,\n\t\t};\n\t}\n\n\t/**\n\t * Get transactions triggered by a subscription account.\n\t *\n\t * Returns the history of transactions that were automatically executed\n\t * in response to subscription matches.\n\t *\n\t * @param subscriptionAccount - The subscription account public key\n\t * @param limit - Optional limit on transactions returned\n\t * @returns Triggered transactions for the subscription\n\t *\n\t * @example\n\t * ```typescript\n\t * const result = await client.getTriggeredTransactions(subscriptionPubkey, 10);\n\t * result.transactions.forEach(tx => {\n\t * console.log(`Signature: ${tx.signature}, Block: ${tx.blockNumber}`);\n\t * });\n\t * ```\n\t */\n\tasync getTriggeredTransactions(\n\t\tsubscriptionAccount: PublicKey,\n\t\tlimit?: number,\n\t): Promise<TriggeredTransaction[]> {\n\t\t// This method uses raw array params (not object params) per Rust impl\n\t\tconst params: unknown[] = [subscriptionAccount.toString()];\n\t\tif (limit !== undefined) {\n\t\t\tparams.push(limit.toString());\n\t\t}\n\n\t\tconst result = await this.call<{\n\t\t\ttransactions: { signature: string; block_number: number }[];\n\t\t}>(\"getTriggeredTransactions\", params);\n\n\t\treturn result.transactions.map((tx) => ({\n\t\t\tsignature: tx.signature,\n\t\t\tblockNumber: BigInt(tx.block_number),\n\t\t}));\n\t}\n\n\t/**\n\t * Retrieve the REX X25519 public key for secret sharing encryption.\n\t *\n\t * This key is used for HPKE encryption when sending encrypted data\n\t * that should only be decryptable within the REX execution environment.\n\t *\n\t * @returns The REX X25519 public key as a 32-byte Uint8Array\n\t *\n\t * @example\n\t * ```typescript\n\t * import { encryptForREX } from \"@rialo/ts-cdk\";\n\t *\n\t * // Get the REX public key\n\t * const rexPubkey = await client.getSecretSharingPubkey();\n\t *\n\t * // Use it for HPKE encryption\n\t * const encrypted = await encryptForRex(\n\t * rexPubkey,\n\t * new TextEncoder().encode(\"secret data\"),\n\t * keypair.publicKey.toBytes()\n\t * );\n\t * ```\n\t */\n\tasync getSecretSharingPubkey(): Promise<Uint8Array> {\n\t\tconst result = await this.call<{ public_key: string }>(\n\t\t\t\"getSecretSharingPubkey\",\n\t\t\t[],\n\t\t);\n\n\t\t// Convert hex string to bytes\n\t\tconst hexString = result.public_key;\n\t\tconst bytes = new Uint8Array(hexString.length / 2);\n\t\tfor (let i = 0; i < bytes.length; i++) {\n\t\t\tbytes[i] = Number.parseInt(hexString.slice(i * 2, i * 2 + 2), 16);\n\t\t}\n\t\treturn bytes;\n\t}\n\n\t/**\n\t * Get the config hash prefix for replay protection.\n\t *\n\t * Returns the first 64 bits of the config hash, which is used\n\t * for transaction replay protection across chains.\n\t *\n\t * @returns The config hash prefix as a bigint\n\t *\n\t * @example\n\t * ```typescript\n\t * const configHashPrefix = await client.getConfigHashPrefix();\n\t * const tx = TransactionBuilder.create()\n\t * .setPayer(payer)\n\t * .setValidFrom(validFrom)\n\t * .setConfigHashPrefix(configHashPrefix)\n\t * .addInstruction(instruction)\n\t * .build();\n\t * ```\n\t */\n\tasync getConfigHashPrefix(): Promise<bigint> {\n\t\t// configHashPrefix is a u64 that can exceed Number.MAX_SAFE_INTEGER (2^53).\n\t\t// JSON.parse() silently rounds such values, so we parse the raw response\n\t\t// text to extract the exact digit string before converting to BigInt.\n\t\tconst body = JSON.stringify({\n\t\t\tjsonrpc: \"2.0\",\n\t\t\tid: 1,\n\t\t\tmethod: \"getRecentValidatorConfigHash\",\n\t\t\tparams: [{}],\n\t\t});\n\t\tconst response = await fetch(this.transport.getUrl(), {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\tbody,\n\t\t});\n\t\tconst text = await response.text();\n\t\tconst match = text.match(/\"configHashPrefix\"\\s*:\\s*(\\d+)/);\n\t\tif (!match) {\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to parse configHashPrefix from RPC response: ${text}`,\n\t\t\t);\n\t\t}\n\t\treturn BigInt(match[1]);\n\t}\n\n\t/**\n\t * Retrieve the current block height with an optional minimum context slot.\n\t *\n\t * When minContextSlot is provided, the RPC will only return a result\n\t * if the node has processed at least that slot.\n\t *\n\t * @param minContextSlot - Minimum slot the node must have processed\n\t * @returns The current block height\n\t */\n\tasync getBlockHeightWithConfig(\n\t\tminContextSlot: bigint | undefined,\n\t): Promise<bigint> {\n\t\tif (minContextSlot !== undefined) {\n\t\t\tconst result = await this.call<number>(\"getBlockHeight\", [\n\t\t\t\t{ min_context_slot: Number(minContextSlot) },\n\t\t\t]);\n\t\t\treturn BigInt(result);\n\t\t}\n\t\treturn await this.getBlockHeight();\n\t}\n\n\t/**\n\t * Retrieve full transaction details by signature.\n\t *\n\t * Returns the complete transaction including metadata (fee, errors, logs),\n\t * the transaction body (signatures, message, instructions), and block context.\n\t *\n\t * @param sig - Transaction signature (Uint8Array)\n\t * @returns Full transaction response with block height, metadata, and body\n\t */\n\tasync getTransactionDetails(sig: Signature): Promise<TransactionResponse> {\n\t\tconst sigStr = base58.encode(sig);\n\n\t\tconst result = await this.call<{\n\t\t\tblock_height: number | null;\n\t\t\tblock_time?: number | null;\n\t\t\tmeta: {\n\t\t\t\tfee: number;\n\t\t\t\terr?: string | null;\n\t\t\t\tlog_messages?: string[] | null;\n\t\t\t};\n\t\t\ttransaction: {\n\t\t\t\tsignatures: string[];\n\t\t\t\tmessage: {\n\t\t\t\t\theader: {\n\t\t\t\t\t\tnum_required_signatures: number;\n\t\t\t\t\t\tnum_readonly_signed_accounts: number;\n\t\t\t\t\t\tnum_readonly_unsigned_accounts: number;\n\t\t\t\t\t};\n\t\t\t\t\taccount_keys: string[];\n\t\t\t\t\tinstructions: Array<{\n\t\t\t\t\t\tprogram_id_index: number;\n\t\t\t\t\t\taccounts: number[];\n\t\t\t\t\t\tdata: string;\n\t\t\t\t\t}>;\n\t\t\t\t};\n\t\t\t\tvalid_from: number;\n\t\t\t};\n\t\t}>(\"getTransaction\", [{ signature: sigStr }]);\n\n\t\treturn {\n\t\t\tblockHeight: BigInt(result.block_height ?? 0),\n\t\t\tblockTime:\n\t\t\t\tresult.block_time != null ? BigInt(result.block_time) : undefined,\n\t\t\tmeta: {\n\t\t\t\tfee: BigInt(result.meta.fee),\n\t\t\t\terr: result.meta.err ?? undefined,\n\t\t\t\tlogMessages: result.meta.log_messages ?? undefined,\n\t\t\t},\n\t\t\ttransaction: {\n\t\t\t\tsignatures: result.transaction.signatures.map(\n\t\t\t\t\t(s) => base58.decode(s) as Signature,\n\t\t\t\t),\n\t\t\t\tmessage: {\n\t\t\t\t\theader: {\n\t\t\t\t\t\tnumRequiredSignatures:\n\t\t\t\t\t\t\tresult.transaction.message.header.num_required_signatures,\n\t\t\t\t\t\tnumReadonlySignedAccounts:\n\t\t\t\t\t\t\tresult.transaction.message.header.num_readonly_signed_accounts,\n\t\t\t\t\t\tnumReadonlyUnsignedAccounts:\n\t\t\t\t\t\t\tresult.transaction.message.header.num_readonly_unsigned_accounts,\n\t\t\t\t\t},\n\t\t\t\t\taccountKeys: result.transaction.message.account_keys.map((k) =>\n\t\t\t\t\t\tPublicKey.fromString(k),\n\t\t\t\t\t),\n\t\t\t\t\tinstructions: result.transaction.message.instructions.map((ix) => ({\n\t\t\t\t\t\tprogramIdIndex: ix.program_id_index,\n\t\t\t\t\t\taccounts: new Uint8Array(ix.accounts),\n\t\t\t\t\t\tdata: ix.data,\n\t\t\t\t\t})),\n\t\t\t\t},\n\t\t\t\tvalidFrom: BigInt(result.transaction.valid_from),\n\t\t\t},\n\t\t};\n\t}\n\n\t/**\n\t * Retrieve a paginated list of recent transactions.\n\t *\n\t * @param config - Optional pagination config (limit, before cursor)\n\t * @returns Array of transaction summaries with signature, slot, time, and error status\n\t */\n\tasync getTransactions(\n\t\tconfig: GetTransactionsConfig | undefined,\n\t): Promise<TransactionInfo[]> {\n\t\tconst params: Record<string, unknown> = {};\n\t\tif (config) {\n\t\t\tif (config.limit !== undefined) params.limit = config.limit;\n\t\t\tif (config.before !== undefined) params.before = config.before;\n\t\t}\n\t\tconst result = await this.call<{\n\t\t\tvalue: Array<{\n\t\t\t\tsignature: string;\n\t\t\t\tslot: number;\n\t\t\t\tblockTime?: number;\n\t\t\t\terr?: string;\n\t\t\t}>;\n\t\t}>(\"getTransactions\", [\n\t\t\t{ config: Object.keys(params).length > 0 ? params : undefined },\n\t\t]);\n\n\t\treturn result.value.map((t) => ({\n\t\t\tsignature: t.signature,\n\t\t\tslot: BigInt(t.slot),\n\t\t\tblockTime: t.blockTime !== undefined ? BigInt(t.blockTime) : undefined,\n\t\t\terr: t.err,\n\t\t}));\n\t}\n\n\t/**\n\t * Check whether a blockhash is still valid for transaction submission.\n\t *\n\t * @param blockhash - The blockhash to check (Uint8Array)\n\t * @returns Slot context and validity boolean\n\t */\n\tasync isBlockhashValid(blockhash: Hash): Promise<IsBlockhashValidResponse> {\n\t\tconst { base58 } = await import(\"@scure/base\");\n\t\tconst hashStr = base58.encode(blockhash);\n\t\tconst result = await this.call<{\n\t\t\tcontext: { slot: number };\n\t\t\tvalue: boolean;\n\t\t}>(\"isBlockhashValid\", [{ blockhash: hashStr }]);\n\n\t\treturn {\n\t\t\tslot: BigInt(result.context.slot),\n\t\t\tisValid: result.value,\n\t\t};\n\t}\n\n\t/**\n\t * Get the health status of the validator node.\n\t *\n\t * @returns Validator health details\n\t */\n\tasync getValidatorHealth(): Promise<ValidatorHealth> {\n\t\treturn await this.call<ValidatorHealth>(\"getValidatorHealth\", [{}]);\n\t}\n\n\t/**\n\t * Get the list of full nodes connected to the validator or full node.\n\t *\n\t * @returns Array of connected nodes with their public key and connection duration\n\t */\n\tasync getConnectedFullNodes(): Promise<ConnectedNode[]> {\n\t\tconst result = await this.call<Array<[string, number]>>(\n\t\t\t\"getConnectedFullNodes\",\n\t\t\t[{}],\n\t\t);\n\t\treturn result.map(([publicKey, connectedMs]) => ({\n\t\t\tpublicKey,\n\t\t\tconnectedMs: BigInt(connectedMs),\n\t\t}));\n\t}\n\n\t/**\n\t * Get all accounts in the system.\n\t *\n\t * @param config - Optional filtering/pagination config\n\t * @returns Array of all account entries with pubkey and account data\n\t */\n\tasync getAllAccounts(\n\t\tconfig: GetAllAccountsConfig | undefined,\n\t): Promise<AllAccountsEntry[]> {\n\t\tconst result = await this.call<{\n\t\t\tvalue: Array<{\n\t\t\t\tpubkey: string;\n\t\t\t\taccount: {\n\t\t\t\t\tkelvin: number;\n\t\t\t\t\towner: string;\n\t\t\t\t\tdata: [string, string];\n\t\t\t\t\texecutable: boolean;\n\t\t\t\t\trentEpoch: number;\n\t\t\t\t\tspace: number;\n\t\t\t\t};\n\t\t\t}>;\n\t\t}>(\"getAllAccounts\", [{ config: config ?? undefined }]);\n\n\t\treturn result.value.map((entry) => ({\n\t\t\tpubkey: entry.pubkey,\n\t\t\taccount: {\n\t\t\t\tkelvin: BigInt(entry.account.kelvin),\n\t\t\t\towner: PublicKey.fromString(entry.account.owner),\n\t\t\t\tdata: entry.account.data,\n\t\t\t\texecutable: entry.account.executable,\n\t\t\t\trentEpoch: BigInt(entry.account.rentEpoch),\n\t\t\t\tspace: BigInt(entry.account.space ?? 0),\n\t\t\t},\n\t\t}));\n\t}\n\n\t/**\n\t * Get a block by its height.\n\t *\n\t * @param blockHeight - The height of the block to retrieve\n\t * @param config - Optional config to control transaction detail level\n\t * @returns Block info including hash, height, time, and optional signatures\n\t */\n\tasync getBlock(\n\t\tblockHeight: bigint,\n\t\tconfig: GetBlockConfig | undefined,\n\t): Promise<BlockInfo> {\n\t\tconst params: Record<string, unknown> = {\n\t\t\tblock_height: Number(blockHeight),\n\t\t};\n\t\tif (config?.transactionDetails) {\n\t\t\tparams.config = { transaction_details: config.transactionDetails };\n\t\t}\n\t\tconst result = await this.call<{\n\t\t\tvalue?: {\n\t\t\t\tblockhash: string;\n\t\t\t\tblockHeight: number;\n\t\t\t\tblockTime: number;\n\t\t\t\ttransactions?: unknown[];\n\t\t\t\tsignatures?: string[];\n\t\t\t};\n\t\t\tblockhash?: string;\n\t\t\tblockHeight?: number;\n\t\t\tblockTime?: number;\n\t\t\ttransactions?: unknown[];\n\t\t\tsignatures?: string[];\n\t\t}>(\"getBlock\", [params]);\n\n\t\tconst block = result.value ?? result;\n\t\treturn {\n\t\t\tblockhash: (block.blockhash as string) ?? \"\",\n\t\t\tblockHeight: BigInt((block.blockHeight as number) ?? 0),\n\t\t\tblockTime: BigInt((block.blockTime as number) ?? 0),\n\t\t\tsignatures: block.signatures as string[] | undefined,\n\t\t};\n\t}\n\n\t/**\n\t * Get a list of confirmed block heights in a range.\n\t *\n\t * @param startHeight - Start of the range (inclusive)\n\t * @param endHeight - End of the range (inclusive), or undefined for open-ended\n\t * @returns Array of confirmed block heights\n\t */\n\tasync getBlocks(\n\t\tstartHeight: bigint,\n\t\tendHeight: bigint | undefined,\n\t): Promise<bigint[]> {\n\t\tconst result = await this.call<number[]>(\"getBlocks\", [\n\t\t\t{\n\t\t\t\tstart_slot: Number(startHeight),\n\t\t\t\tend_slot: endHeight !== undefined ? Number(endHeight) : undefined,\n\t\t\t},\n\t\t]);\n\t\treturn result.map((n) => BigInt(n));\n\t}\n\n\t/**\n\t * Get detailed information about a stake account.\n\t *\n\t * @param pubkey - The public key of the stake account\n\t * @returns Stake account info, or undefined if the account doesn't exist\n\t */\n\tasync getStakeAccount(\n\t\tpubkey: PublicKey,\n\t): Promise<StakeAccountInfo | undefined> {\n\t\tconst result = await this.call<{\n\t\t\tvalue?: {\n\t\t\t\tstate: string;\n\t\t\t\tkelvins: number;\n\t\t\t\tdelegated_balance: number;\n\t\t\t\tundelegated_balance: number;\n\t\t\t\tactivation_requested?: number;\n\t\t\t\tdeactivation_requested?: number;\n\t\t\t\tvalidator?: string;\n\t\t\t\tadmin_authority: string;\n\t\t\t\twithdraw_authority: string;\n\t\t\t};\n\t\t}>(\"getStakeAccount\", [{ pubkey: pubkey.toString() }]);\n\n\t\tif (!result.value) return undefined;\n\t\tconst s = result.value;\n\t\treturn {\n\t\t\tstate: s.state as StakeAccountInfo[\"state\"],\n\t\t\tkelvins: BigInt(s.kelvins),\n\t\t\tdelegatedBalance: BigInt(s.delegated_balance),\n\t\t\tundelegatedBalance: BigInt(s.undelegated_balance),\n\t\t\tactivationRequested:\n\t\t\t\ts.activation_requested !== undefined\n\t\t\t\t\t? BigInt(s.activation_requested)\n\t\t\t\t\t: undefined,\n\t\t\tdeactivationRequested:\n\t\t\t\ts.deactivation_requested !== undefined\n\t\t\t\t\t? BigInt(s.deactivation_requested)\n\t\t\t\t\t: undefined,\n\t\t\tvalidator: s.validator,\n\t\t\tadminAuthority: s.admin_authority,\n\t\t\twithdrawAuthority: s.withdraw_authority,\n\t\t};\n\t}\n\n\t/**\n\t * Get all registered validator accounts.\n\t *\n\t * @param request - Request config (e.g. whether to use frozen state)\n\t * @returns Array of validator account info\n\t */\n\tasync getValidatorAccounts(\n\t\trequest: GetValidatorAccountsRequest,\n\t): Promise<ValidatorAccountInfo[]> {\n\t\tconst result = await this.call<{\n\t\t\tvalue: Array<{\n\t\t\t\tcommission: number;\n\t\t\t\tpubkey: string;\n\t\t\t\tsigning_key: string;\n\t\t\t\twithdrawal_key: string;\n\t\t\t\tstake: number;\n\t\t\t\taddress: string;\n\t\t\t\tstate_sync_address: string;\n\t\t\t}>;\n\t\t}>(\"getValidatorAccounts\", [{ use_frozen: request.useFrozen }]);\n\n\t\treturn result.value.map((v) => ({\n\t\t\tcommission: BigInt(v.commission),\n\t\t\tpubkey: v.pubkey,\n\t\t\tsigningKey: v.signing_key,\n\t\t\twithdrawalKey: v.withdrawal_key,\n\t\t\tstake: BigInt(v.stake),\n\t\t\taddress: v.address,\n\t\t\tstateSyncAddress: v.state_sync_address,\n\t\t}));\n\t}\n\n\t/**\n\t * Get the token balance of an SPL Token account.\n\t *\n\t * @param pubkey - The public key of the token account\n\t * @returns Token balance with amount, decimals, and UI-formatted string\n\t */\n\tasync getTokenAccountBalance(pubkey: PublicKey): Promise<TokenBalance> {\n\t\tconst result = await this.call<{\n\t\t\tvalue: {\n\t\t\t\tamount: string;\n\t\t\t\tdecimals: number;\n\t\t\t\tuiAmountString: string;\n\t\t\t};\n\t\t}>(\"getTokenAccountBalance\", [{ address: pubkey.toString() }]);\n\n\t\treturn {\n\t\t\tamount: result.value.amount,\n\t\t\tdecimals: result.value.decimals,\n\t\t\tuiAmountString: result.value.uiAmountString,\n\t\t};\n\t}\n\n\t/**\n\t * Get registered REX requests for a creator.\n\t *\n\t * REX (Remote EXecution) requests are scheduled jobs that validators\n\t * execute on behalf of a creator.\n\t *\n\t * @param creator - The creator's public key\n\t * @param nonce - Optional nonce to filter a specific request\n\t * @returns Array of REX request info with their assigned duties\n\t */\n\tasync getRexRequests(\n\t\tcreator: PublicKey,\n\t\tnonce: string | undefined,\n\t): Promise<RexInfoAndDuties[]> {\n\t\tconst result = await this.call<{\n\t\t\trex_requests: Array<{\n\t\t\t\tcreator: string;\n\t\t\t\tnonce: string;\n\t\t\t\tis_active: boolean;\n\t\t\t\tdescription: string;\n\t\t\t\tupdate_frequency: string;\n\t\t\t\tstarting_timestamp: string;\n\t\t\t\tcreated_at: string;\n\t\t\t\tvalidators_per_duty: number;\n\t\t\t\trex_request_delay_ms: number;\n\t\t\t\tcompute_units_limit?: number;\n\t\t\t\theap_size_limit?: number;\n\t\t\t\tduties: Array<{\n\t\t\t\t\ttarget_timestamp: string;\n\t\t\t\t\tassigned_validators: string[];\n\t\t\t\t}>;\n\t\t\t}>;\n\t\t}>(\"getRexRequests\", [{ creator: creator.toString(), nonce }]);\n\n\t\treturn result.rex_requests.map((r) => ({\n\t\t\tcreator: r.creator,\n\t\t\tnonce: r.nonce,\n\t\t\tisActive: r.is_active,\n\t\t\tdescription: r.description,\n\t\t\tupdateFrequency: r.update_frequency,\n\t\t\tstartingTimestamp: r.starting_timestamp,\n\t\t\tcreatedAt: r.created_at,\n\t\t\tvalidatorsPerDuty: r.validators_per_duty,\n\t\t\trexRequestDelayMs: BigInt(r.rex_request_delay_ms),\n\t\t\tcomputeUnitsLimit: r.compute_units_limit,\n\t\t\theapSizeLimit: r.heap_size_limit,\n\t\t\tduties: r.duties.map((d) => ({\n\t\t\t\ttargetTimestamp: d.target_timestamp,\n\t\t\t\tassignedValidators: d.assigned_validators,\n\t\t\t})),\n\t\t}));\n\t}\n\n\t/**\n\t * Get missed REX duty proposal rounds for a specific REX request.\n\t *\n\t * @param creator - The creator's public key\n\t * @param nonce - The nonce identifying the REX request\n\t * @returns Array of proposal round numbers where duties were missed\n\t */\n\tasync getRexMissedDuties(\n\t\tcreator: PublicKey,\n\t\tnonce: string,\n\t): Promise<bigint[]> {\n\t\tconst result = await this.call<{\n\t\t\tmissed_duties_at_proposal_rounds: number[];\n\t\t}>(\"getRexMissedDuties\", [{ creator: creator.toString(), nonce }]);\n\n\t\treturn result.missed_duties_at_proposal_rounds.map((n) => BigInt(n));\n\t}\n\n\t/**\n\t * Get information about all known cluster nodes.\n\t *\n\t * @returns Array of cluster node info with stake, addresses, and keys\n\t */\n\tasync getClusterNodes(): Promise<ClusterNodeInfo[]> {\n\t\tconst result = await this.call<{\n\t\t\tnodes: Array<{\n\t\t\t\tstake: number;\n\t\t\t\taddress: string;\n\t\t\t\thostname: string;\n\t\t\t\tauthority_pubkey: string;\n\t\t\t\tprotocol_pubkey: string;\n\t\t\t\tnetwork_pubkey: string;\n\t\t\t\tlast_committed_round?: number;\n\t\t\t}>;\n\t\t}>(\"getClusterNodes\", [null]);\n\n\t\treturn result.nodes.map((n) => ({\n\t\t\tstake: BigInt(n.stake),\n\t\t\taddress: n.address,\n\t\t\thostname: n.hostname,\n\t\t\tauthorityPubkey: n.authority_pubkey,\n\t\t\tprotocolPubkey: n.protocol_pubkey,\n\t\t\tnetworkPubkey: n.network_pubkey,\n\t\t\tlastCommittedRound: n.last_committed_round,\n\t\t}));\n\t}\n\n\t/**\n\t * Get the list of validator indices this node is connected to.\n\t *\n\t * @returns Array of validator indices\n\t */\n\tasync getConnectedValidators(): Promise<number[]> {\n\t\treturn await this.call<number[]>(\"getConnectedValidators\", [{}]);\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n\tURL_DEVNET,\n\tURL_LOCALNET,\n\tURL_MAINNET,\n\tURL_TESTNET,\n} from \"./constants\";\n\n/**\n * Converts bytes to base64 string.\n *\n * Works in both browser and Node.js environments.\n */\nexport function toBase64(bytes: Uint8Array): string {\n\t// Browser environment\n\tif (typeof btoa !== \"undefined\") {\n\t\t// For large arrays, chunk to avoid call stack size exceeded\n\t\tconst chunkSize = 8192;\n\t\tlet result = \"\";\n\n\t\tfor (let i = 0; i < bytes.length; i += chunkSize) {\n\t\t\tconst chunk = bytes.slice(i, i + chunkSize);\n\t\t\tresult += String.fromCharCode(...chunk);\n\t\t}\n\n\t\treturn btoa(result);\n\t}\n\n\t// Node.js environment\n\tif (typeof Buffer !== \"undefined\") {\n\t\treturn Buffer.from(bytes).toString(\"base64\");\n\t}\n\n\tthrow new Error(\"No base64 encoding available in this environment\");\n}\n\n/**\n * Converts base64 string to bytes.\n *\n * Works in both browser and Node.js environments.\n */\nexport function fromBase64(base64: string): Uint8Array {\n\t// Browser environment\n\tif (typeof atob !== \"undefined\") {\n\t\tconst binary = atob(base64);\n\t\tconst bytes = new Uint8Array(binary.length);\n\t\tfor (let i = 0; i < binary.length; i++) {\n\t\t\tbytes[i] = binary.charCodeAt(i);\n\t\t}\n\t\treturn bytes;\n\t}\n\n\t// Node.js environment\n\tif (typeof Buffer !== \"undefined\") {\n\t\treturn new Uint8Array(Buffer.from(base64, \"base64\"));\n\t}\n\n\tthrow new Error(\"No base64 decoding available in this environment\");\n}\n\n/**\n * Sleeps for the specified duration.\n *\n * @param ms - Milliseconds to sleep\n */\nexport function sleep(ms: number): Promise<void> {\n\treturn new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Calculates exponential backoff delay with jitter.\n *\n * @param attempt - Current retry attempt (0-indexed)\n * @param baseMs - Base delay in milliseconds\n * @param maxMs - Maximum delay in milliseconds\n * @returns Calculated delay with 30% random jitter\n */\nexport function calculateBackoff(\n\tattempt: number,\n\tbaseMs = 1000,\n\tmaxMs = 30000,\n): number {\n\tconst exponentialDelay = baseMs * 2 ** attempt;\n\tconst jitter = Math.random() * 0.3 * exponentialDelay; // 30% jitter\n\treturn Math.min(exponentialDelay + jitter, maxMs);\n}\n\n/**\n * Returns the devnet RPC URL.\n */\nexport function getDevnetUrl(): string {\n\treturn URL_DEVNET;\n}\n\n/**\n * Returns the testnet RPC URL.\n */\nexport function getTestnetUrl(): string {\n\treturn URL_TESTNET;\n}\n\n/**\n * Returns the mainnet RPC URL.\n */\nexport function getMainnetUrl(): string {\n\treturn URL_MAINNET;\n}\n\n/**\n * Returns the localnet RPC URL.\n */\nexport function getLocalnetUrl(): string {\n\treturn URL_LOCALNET;\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Query client for read-only RPC operations.\n */\n\nimport type { PublicKey } from \"../../crypto\";\nimport type {\n\tConfirmedTransaction,\n\tConfirmTransactionOptions,\n\tSendAndConfirmOptions,\n\tSendTransactionOptions,\n\tSubmitEpochChangeRequest,\n\tSubmitEpochChangeResponse,\n} from \"../../generated/types\";\nimport { toBase64 } from \"../../utils\";\nimport { RpcError, RpcErrorCode } from \"../errors\";\nimport { BaseRpcClient } from \"./base-client\";\n\ninterface TransactionPollResult {\n\tblockHeight: bigint;\n\terr?: string;\n}\n\nconst DEFAULT_MAX_RETRIES = 10;\nconst DEFAULT_RETRY_DELAY_MS = 200;\n\n/**\n * Client for sending/simulating transactions and requesting airdrops.\n *\n * Handles all transaction operations like sending transactions, requesting airdrops, etc.\n */\nexport class TransactionRpcClient extends BaseRpcClient {\n\t/**\n\t * Submit a signed transaction to the blockchain.\n\t *\n\t * Sends the transaction to the network for processing. The transaction\n\t * must be fully signed before submission. Returns immediately with the\n\t * transaction signature - use {@link confirmTransaction} or\n\t * {@link sendAndConfirmTransaction} to wait for confirmation.\n\t *\n\t * @param transaction - Serialized signed transaction bytes\n\t * @param options - Transaction submission options\n\t * @returns Transaction signature (base58 encoded)\n\t *\n\t * @example\n\t * ```typescript\n\t * const signature = await client.sendTransaction(signedTx);\n\t * console.log(`Submitted: ${signature}`);\n\t *\n\t * // With options\n\t * const signature = await client.sendTransaction(signedTx, {\n\t * skipPreflight: true,\n\t * maxRetries: 3,\n\t * });\n\t * ```\n\t */\n\tasync sendTransaction(\n\t\ttransaction: Uint8Array,\n\t\toptions?: Partial<SendTransactionOptions>,\n\t): Promise<string> {\n\t\tconst base64Tx = toBase64(transaction);\n\n\t\tconst config = {\n\t\t\tencoding: \"base64\",\n\t\t\tskipPreflight: options?.skipPreflight ?? false,\n\t\t\tmaxRetries: options?.maxRetries ?? 5,\n\t\t};\n\n\t\tconst signature = await this.call<string>(\"sendTransaction\", [\n\t\t\tbase64Tx,\n\t\t\tconfig,\n\t\t]);\n\t\treturn signature;\n\t}\n\n\t/**\n\t * Wait for a transaction to be confirmed.\n\t *\n\t * A transaction is considered confirmed when:\n\t * - It has been processed in a block (`blockHeight > 0`)\n\t *\n\t * @param signature - Transaction signature to monitor\n\t * @param options - Confirmation options\n\t * @returns Confirmed transaction details\n\t * @throws {TransactionFailedError} If the transaction fails on-chain\n\t * @throws {TransactionConfirmationTimeoutError} If confirmation times out\n\t */\n\tasync confirmTransaction(\n\t\tsignature: string,\n\t\toptions?: Partial<ConfirmTransactionOptions>,\n\t): Promise<ConfirmedTransaction> {\n\t\tconst maxRetries = options?.maxRetries ?? DEFAULT_MAX_RETRIES;\n\t\tconst retryDelayMs = options?.retryDelayMs ?? DEFAULT_RETRY_DELAY_MS;\n\n\t\t// Poll using getSignatureStatuses which is fast\n\t\tfor (let attempt = 0; attempt < maxRetries; attempt++) {\n\t\t\t// Wait before checking\n\t\t\tif (attempt > 0) {\n\t\t\t\tawait this.sleep(retryDelayMs);\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst txInfo = await this.getTransaction(signature);\n\t\t\t\tif (!txInfo) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (txInfo.err) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tsignature,\n\t\t\t\t\t\texecuted: false,\n\t\t\t\t\t\terr: txInfo.err,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Transaction executed - fully confirmed\n\t\t\t\tif (txInfo.blockHeight && txInfo.blockHeight > 0n) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tsignature,\n\t\t\t\t\t\texecuted: true,\n\t\t\t\t\t\terr: undefined,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\t// Re-throw transaction failures immediately\n\t\t\t\tif (\n\t\t\t\t\terror instanceof RpcError &&\n\t\t\t\t\terror.code === RpcErrorCode.TRANSACTION_REJECTED\n\t\t\t\t) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthrow new RpcError(\n\t\t\tRpcErrorCode.TRANSACTION_CONFIRMATION_TIMEOUT,\n\t\t\t\"Transaction confirmation timed out\",\n\t\t\t{\n\t\t\t\tsignature,\n\t\t\t\tmaxRetries,\n\t\t\t},\n\t\t);\n\t}\n\n\t/**\n\t * Submit a signed transaction and wait for confirmation.\n\t *\n\t * Polls the transaction status until it is confirmed (blockHeight > 0),\n\t * or until the maximum number of retries is reached.\n\t *\n\t * @param transaction - Serialized signed transaction bytes\n\t * @param options - Transaction submission and confirmation options\n\t * @returns Confirmed transaction details\n\t * @throws {TransactionFailedError} If the transaction fails on-chain\n\t * @throws {TransactionConfirmationTimeoutError} If confirmation times out\n\t *\n\t * @example\n\t * ```typescript\n\t * const result = await client.sendAndConfirmTransaction(signedTx);\n\t * console.log(`Confirmed in block ${result.blockHeight}, executed: ${result.executed}`);\n\t *\n\t * // With custom retry settings\n\t * const result = await client.sendAndConfirmTransaction(signedTx, {\n\t * maxRetries: 3,\n\t * confirmMaxRetries: 10,\n\t * confirmRetryDelayMs: 500,\n\t * });\n\t * ```\n\t */\n\tasync sendAndConfirmTransaction(\n\t\ttransaction: Uint8Array,\n\t\toptions?: Partial<SendAndConfirmOptions>,\n\t): Promise<ConfirmedTransaction> {\n\t\tconst signature = await this.sendTransaction(transaction, {\n\t\t\tskipPreflight: options?.skipPreflight,\n\t\t\tmaxRetries: options?.maxRetries,\n\t\t});\n\t\treturn await this.confirmTransaction(signature, {\n\t\t\tmaxRetries: options?.confirmMaxRetries,\n\t\t\tretryDelayMs: options?.confirmRetryDelayMs,\n\t\t});\n\t}\n\n\t/**\n\t * Request an airdrop of tokens to an account.\n\t *\n\t * **Note**: Only available on devnet and testnet networks.\n\t *\n\t * Returns immediately with the airdrop transaction signature.\n\t * Use {@link requestAirdropAndConfirm} to wait for the airdrop to complete.\n\t *\n\t * @param pubkey - The public key of the account to receive tokens\n\t * @param amount - Amount to airdrop in kelvins (smallest unit)\n\t * @returns Airdrop transaction signature\n\t *\n\t * @example\n\t * ```typescript\n\t * const signature = await client.requestAirdrop(publicKey, 1_000_000_000n);\n\t * console.log(`Airdrop requested: ${signature}`);\n\t * ```\n\t */\n\tasync requestAirdrop(pubkey: PublicKey, amount: bigint): Promise<string> {\n\t\tif (amount > BigInt(Number.MAX_SAFE_INTEGER)) {\n\t\t\tthrow new RpcError(\n\t\t\t\tRpcErrorCode.INVALID_PARAMS,\n\t\t\t\t`Airdrop amount ${amount} exceeds maximum safe value`,\n\t\t\t);\n\t\t}\n\t\tconst signature = await this.call<string>(\"requestAirdrop\", [\n\t\t\t{\n\t\t\t\tpubkey: pubkey.toString(),\n\t\t\t\tkelvins: Number(amount),\n\t\t\t},\n\t\t]);\n\t\treturn signature;\n\t}\n\n\t/**\n\t * Request an airdrop of tokens and wait for confirmation.\n\t *\n\t * **Note**: Only available on devnet and testnet networks.\n\t *\n\t * Combines {@link requestAirdrop} and {@link confirmTransaction} into\n\t * a single call for convenience.\n\t *\n\t * @param pubkey - The public key of the account to receive tokens\n\t * @param amount - Amount to airdrop in kelvins (smallest unit)\n\t * @param options - Confirmation options (max retries, retry delay)\n\t * @returns Confirmed transaction details\n\t * @throws {RpcError} If the airdrop transaction fails or confirmation times out\n\t *\n\t * @example\n\t * ```typescript\n\t * const result = await client.requestAirdropAndConfirm(publicKey, 1_000_000_000n);\n\t * if (result.executed) {\n\t * console.log(\"Airdrop confirmed!\");\n\t * }\n\t * ```\n\t */\n\tasync requestAirdropAndConfirm(\n\t\tpubkey: PublicKey,\n\t\tamount: bigint,\n\t\toptions?: Partial<ConfirmTransactionOptions>,\n\t): Promise<ConfirmedTransaction> {\n\t\tconst signature = await this.requestAirdrop(pubkey, amount);\n\t\treturn await this.confirmTransaction(signature, options);\n\t}\n\n\t/**\n\t * Submit an epoch change transaction (admin-only).\n\t *\n\t * @param request - The epoch change request payload\n\t * @returns Response from the epoch change submission\n\t */\n\tasync sendAdminTransaction(\n\t\trequest: SubmitEpochChangeRequest,\n\t): Promise<SubmitEpochChangeResponse> {\n\t\treturn await this.call<SubmitEpochChangeResponse>(\"submitEpochChange\", [\n\t\t\trequest,\n\t\t]);\n\t}\n\n\tprivate async getTransaction(\n\t\tsignature: string,\n\t): Promise<TransactionPollResult | null> {\n\t\tconst result = await this.call<{\n\t\t\tslot: number;\n\t\t\tblock_height?: number;\n\t\t\terr?: string;\n\t\t\tmeta: {\n\t\t\t\terr?: string;\n\t\t\t};\n\t\t} | null>(\"getTransaction\", [{ signature }]);\n\n\t\tif (!result) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\tblockHeight: BigInt(result.block_height ?? 0),\n\t\t\terr: result.err ?? result.meta?.err ?? undefined,\n\t\t};\n\t}\n\n\t/**\n\t * Sleeps for a given number of milliseconds.\n\t * @param ms - The number of milliseconds to sleep.\n\t * @returns A promise that resolves when the sleep is complete.\n\t */\n\tprivate sleep(ms: number): Promise<void> {\n\t\treturn new Promise((resolve) => setTimeout(resolve, ms));\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Main Rialo RPC client for blockchain interactions.\n */\nimport type { PublicKey } from \"../../crypto\";\nimport { RpcClient } from \"../../generated/rpc-client\";\nimport type {\n\tAccountFilter,\n\tAccountInfo,\n\tAllAccountsEntry,\n\tBlockInfo,\n\tClusterNodeInfo,\n\tConfigHashPrefix,\n\tConfirmedTransaction,\n\tConfirmTransactionOptions,\n\tConnectedNode,\n\tEpochInfo,\n\tFeeResponse,\n\tGetAccountsByOwnerConfig,\n\tGetAllAccountsConfig,\n\tGetBlockConfig,\n\tGetSignaturesForAddressConfig,\n\tGetTransactionsConfig,\n\tGetValidatorAccountsRequest,\n\tGetWorkflowLineageRequest,\n\tGetWorkflowLineageResponse,\n\tHash,\n\tIsBlockhashValidResponse,\n\tKelvin,\n\tOptionalAccountInfo,\n\tOwnerAccount,\n\tPaginationInfo,\n\tRexInfoAndDuties,\n\tSecretSharingPubkey,\n\tSendAndConfirmOptions,\n\tSendTransactionOptions,\n\tSignature,\n\tSignatureInfo,\n\tSignatureStatus,\n\tStakeAccountInfo,\n\tSubmitEpochChangeRequest,\n\tSubmitEpochChangeResponse,\n\tSubscription,\n\tTokenBalance,\n\tTransactionInfo,\n\tTransactionResponse,\n\tTriggeredTransaction,\n\tValidatorAccountInfo,\n\tValidatorHealth,\n} from \"../../generated/types\";\nimport type { HttpTransport } from \"../http-transport\";\nimport type { ChainDefinition, IdentifierString } from \"./config\";\nimport type { AccountFilterParam } from \"./query-client\";\nimport { QueryRpcClient } from \"./query-client\";\nimport { TransactionRpcClient } from \"./transaction-client\";\n\n/**\n * High-level Rialo RPC client for blockchain interactions.\n *\n * Provides a unified interface for querying blockchain state and\n * sending transactions. Internally delegates to specialized clients\n * (QueryRpcClient, TransactionRpcClient) for modular organization.\n *\n * @example\n * ```typescript\n * import { createRialoClient, RIALO_DEVNET_CHAIN } from '@rialo/ts-cdk';\n *\n * const client = createRialoClient({ chain: RIALO_DEVNET_CHAIN });\n *\n * // Query operations\n * const balance = await client.getBalance(publicKey);\n * const chainId = client.getChainIdentifier();\n *\n * // Transaction operations\n * const signature = await client.sendTransaction(signedTx);\n * ```\n */\nexport class RialoClient extends RpcClient {\n\tprivate readonly queryClient: QueryRpcClient;\n\tprivate readonly transactionClient: TransactionRpcClient;\n\tprivate readonly transport: HttpTransport;\n\tprivate readonly chain: ChainDefinition;\n\n\tconstructor(transport: HttpTransport, chain: ChainDefinition) {\n\t\tsuper();\n\t\tthis.chain = chain;\n\t\tthis.transport = transport;\n\t\tthis.queryClient = new QueryRpcClient(transport);\n\t\tthis.transactionClient = new TransactionRpcClient(transport);\n\t}\n\n\t/**\n\t * Returns the configured RPC endpoint URL.\n\t */\n\tgetUrl(): string {\n\t\treturn this.transport.getUrl();\n\t}\n\n\t/**\n\t * Returns the chain identifier.\n\t */\n\tgetChainIdentifier(): IdentifierString {\n\t\treturn this.chain.id;\n\t}\n\n\t/**\n\t * Returns the chain configuration.\n\t */\n\tgetChainConfig(): ChainDefinition {\n\t\treturn this.chain;\n\t}\n\n\t/**\n\t * Retrieves the balance of an account in kelvins (smallest unit).\n\t */\n\tasync getBalance(pubkey: PublicKey): Promise<Kelvin> {\n\t\treturn await this.queryClient.getBalance(pubkey);\n\t}\n\n\t/**\n\t * Retrieves detailed information about an account.\n\t *\n\t * @returns Account info or null if account doesn't exist\n\t */\n\tasync getAccountInfo(pubkey: PublicKey): Promise<AccountInfo> {\n\t\tconst result = await this.queryClient.getAccountInfo(pubkey);\n\t\tif (!result) {\n\t\t\tthrow new Error(`Account does not exist: ${pubkey}`);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * Retrieves the current block height.\n\t */\n\tasync getBlockHeight(): Promise<bigint> {\n\t\treturn await this.queryClient.getBlockHeight();\n\t}\n\n\t/**\n\t * Retrieves the current block height with advanced configuration.\n\t */\n\tasync getBlockHeightWithConfig(\n\t\tminContextSlot: bigint | undefined,\n\t): Promise<bigint> {\n\t\treturn await this.queryClient.getBlockHeightWithConfig(minContextSlot);\n\t}\n\n\t/**\n\t * Retrieves the signatures for an address.\n\t */\n\tasync getSignaturesForAddress(\n\t\taddress: PublicKey,\n\t\tconfig: GetSignaturesForAddressConfig | undefined,\n\t): Promise<SignatureInfo[]> {\n\t\treturn await this.queryClient.getSignaturesForAddress(address, config);\n\t}\n\n\t/**\n\t * Retrieves detailed information about a transaction.\n\t *\n\t * @returns Full transaction response\n\t */\n\tasync getTransaction(sig: Signature): Promise<TransactionResponse> {\n\t\treturn await this.queryClient.getTransactionDetails(sig);\n\t}\n\n\t/**\n\t * Retrieves the total number of transactions processed since genesis.\n\t */\n\tasync getTransactionCount(): Promise<bigint> {\n\t\treturn await this.queryClient.getTransactionCount();\n\t}\n\n\t/**\n\t * Retrieves the status of multiple transaction signatures.\n\t */\n\tasync getSignatureStatuses(\n\t\tsignatures: Signature[],\n\t): Promise<(SignatureStatus | undefined)[]> {\n\t\t// Convert Uint8Array signatures to base58 strings\n\t\tconst { base58 } = await import(\"@scure/base\");\n\t\tconst sigStrings = signatures.map((s) => base58.encode(s));\n\t\tconst results = await this.queryClient.getSignatureStatuses(sigStrings);\n\t\t// Filter out null entries (unknown signatures) per spec behaviour\n\t\treturn results.filter((s): s is SignatureStatus => s !== null);\n\t}\n\n\t/**\n\t * Retrieves current epoch information.\n\t */\n\tasync getEpochInfo(): Promise<EpochInfo> {\n\t\treturn await this.queryClient.getEpochInfo();\n\t}\n\n\t/**\n\t * Checks the health status of the RPC node.\n\t *\n\t * @returns \"ok\" if healthy, error message otherwise\n\t */\n\tasync getHealth(): Promise<string> {\n\t\treturn await this.queryClient.getHealth();\n\t}\n\n\t/**\n\t * Submits a signed transaction to the blockchain.\n\t *\n\t * @param transaction - Serialized signed transaction bytes\n\t * @param options - Transaction submission options\n\t * @returns Transaction signature\n\t */\n\tasync sendTransaction(\n\t\ttransaction: Uint8Array,\n\t\toptions?: Partial<SendTransactionOptions>,\n\t): Promise<Signature> {\n\t\tconst sigStr = await this.transactionClient.sendTransaction(\n\t\t\ttransaction,\n\t\t\toptions,\n\t\t);\n\t\tconst { base58 } = await import(\"@scure/base\");\n\t\treturn base58.decode(sigStr);\n\t}\n\n\t/**\n\t * Requests an airdrop of tokens to an account.\n\t *\n\t * **Note**: Only available on devnet and testnet.\n\t *\n\t * @param pubkey - Account to receive the airdrop\n\t * @param amount - Amount in kelvins (smallest unit)\n\t * @returns Transaction signature\n\t */\n\tasync requestAirdrop(pubkey: PublicKey, amount: Kelvin): Promise<Signature> {\n\t\tconst sigStr = await this.transactionClient.requestAirdrop(pubkey, amount);\n\t\tconst { base58 } = await import(\"@scure/base\");\n\t\treturn base58.decode(sigStr);\n\t}\n\n\t/**\n\t * Submits a signed transaction and waits for confirmation.\n\t *\n\t * @param transaction - Serialized signed transaction bytes\n\t * @param options - Transaction submission and confirmation options\n\t * @returns Confirmed transaction details\n\t * @throws {TransactionFailedError} If the transaction fails on-chain\n\t * @throws {TransactionConfirmationTimeoutError} If confirmation times out\n\t *\n\t * @example\n\t * ```typescript\n\t * const result = await client.sendAndConfirmTransaction(signedTx);\n\t * console.log(`Confirmed in slot ${result.slot}`);\n\t * ```\n\t */\n\tasync sendAndConfirmTransaction(\n\t\ttransaction: Uint8Array,\n\t\toptions?: Partial<SendAndConfirmOptions>,\n\t): Promise<ConfirmedTransaction> {\n\t\treturn await this.transactionClient.sendAndConfirmTransaction(\n\t\t\ttransaction,\n\t\t\toptions,\n\t\t);\n\t}\n\n\t/**\n\t * Waits for a transaction to be confirmed.\n\t *\n\t * @param signature - Transaction signature to monitor\n\t * @param options - Confirmation options\n\t * @returns Confirmed transaction details\n\t */\n\tasync confirmTransaction(\n\t\tsig: string,\n\t\toptions?: Partial<ConfirmTransactionOptions>,\n\t): Promise<ConfirmedTransaction> {\n\t\treturn await this.transactionClient.confirmTransaction(sig, options);\n\t}\n\n\t/**\n\t * Requests an airdrop and waits for confirmation.\n\t *\n\t * **Note**: Only available on devnet and testnet.\n\t */\n\tasync requestAirdropAndConfirm(\n\t\tpubkey: PublicKey,\n\t\tamount: Kelvin,\n\t): Promise<ConfirmedTransaction> {\n\t\treturn await this.transactionClient.requestAirdropAndConfirm(\n\t\t\tpubkey,\n\t\t\tamount,\n\t\t);\n\t}\n\n\t/**\n\t * Calculate the minimum balance required for an account to be rent-exempt.\n\t *\n\t * @param accountDataSize - The size of the account data in bytes\n\t * @returns The minimum balance in kelvins required for rent exemption\n\t */\n\tasync getMinimumBalanceForRentExemption(dataSize: bigint): Promise<bigint> {\n\t\treturn await this.queryClient.getMinimumBalanceForRentExemption(\n\t\t\tNumber(dataSize),\n\t\t);\n\t}\n\n\t/**\n\t * Get the fee required to process a specific message.\n\t *\n\t * @param message - Base64-encoded serialized versioned message\n\t * @returns Fee response with value in kelvins\n\t */\n\tasync getFeeForMessage(message: string): Promise<FeeResponse> {\n\t\tconst value = await this.queryClient.getFeeForMessage(message);\n\t\treturn { value: value ?? undefined };\n\t}\n\n\t/**\n\t * Get information for multiple accounts in a single request.\n\t *\n\t * @param pubkeys - Array of public keys to query (1-100)\n\t * @returns Account information for each address\n\t */\n\tasync getMultipleAccounts(\n\t\tpubkeys: PublicKey[],\n\t): Promise<OptionalAccountInfo[]> {\n\t\tconst results = await this.queryClient.getMultipleAccounts(pubkeys);\n\t\t// Convert null → undefined to match OptionalAccountInfo type\n\t\treturn results.map((r) =>\n\t\t\tr === null ? undefined : r,\n\t\t) as OptionalAccountInfo[];\n\t}\n\n\t/**\n\t * Get all accounts owned by a specific program or address.\n\t *\n\t * @param owner - Program ID or owner public key\n\t * @param filter - Filter type (programAccounts or tokenAccounts)\n\t * @param config - Optional configuration for pagination and encoding\n\t * @returns Tuple of accounts and optional pagination info\n\t */\n\tasync getAccountsByOwner(\n\t\towner: PublicKey,\n\t\tfilter: AccountFilter | undefined,\n\t\tconfig: GetAccountsByOwnerConfig | undefined,\n\t): Promise<[OwnerAccount[], PaginationInfo | undefined]> {\n\t\t// Convert generated string union AccountFilter to the serde-compatible param\n\t\tconst filterParam: AccountFilterParam =\n\t\t\tfilter === \"tokenAccounts\"\n\t\t\t\t? { type: \"tokenAccounts\" }\n\t\t\t\t: { type: \"programAccounts\" };\n\t\treturn await this.queryClient.getAccountsByOwner(\n\t\t\towner,\n\t\t\tfilterParam,\n\t\t\tconfig,\n\t\t);\n\t}\n\n\t/**\n\t * Get workflow lineage information for tracking execution history.\n\t *\n\t * @param request - Workflow lineage request with signature and options\n\t * @returns Workflow lineage tree with nodes and metadata\n\t */\n\tasync getWorkflowLineage(\n\t\trequest: GetWorkflowLineageRequest,\n\t): Promise<GetWorkflowLineageResponse> {\n\t\treturn await this.queryClient.getWorkflowLineage(request);\n\t}\n\n\t/**\n\t * Get subscription for a given subscriber address and nonce.\n\t *\n\t * @param subscriber - The subscriber's public key\n\t * @param nonce - The nonce identifying the subscription\n\t * @returns The subscription for the subscriber and nonce\n\t */\n\tasync getSubscription(\n\t\tsubscriber: PublicKey,\n\t\tnonce: string,\n\t): Promise<Subscription> {\n\t\treturn await this.queryClient.getSubscription(subscriber, nonce);\n\t}\n\n\t/**\n\t * Get transactions triggered by a subscription account.\n\t *\n\t * @param subscriptionAccount - The subscription account public key\n\t * @param limit - Optional limit on transactions returned\n\t * @returns Triggered transactions for the subscription\n\t */\n\tasync getTriggeredTransactions(\n\t\tsubscriptionAccount: PublicKey,\n\t\tlimit: number | undefined,\n\t): Promise<TriggeredTransaction[]> {\n\t\treturn await this.queryClient.getTriggeredTransactions(\n\t\t\tsubscriptionAccount,\n\t\t\tlimit,\n\t\t);\n\t}\n\n\t/**\n\t * Gets paginated transactions from the blockchain.\n\t */\n\tasync getTransactions(\n\t\tconfig: GetTransactionsConfig | undefined,\n\t): Promise<TransactionInfo[]> {\n\t\treturn await this.queryClient.getTransactions(config);\n\t}\n\n\t/**\n\t * Checks if a blockhash is still valid for transaction submission.\n\t */\n\tasync isBlockhashValid(blockhash: Hash): Promise<IsBlockhashValidResponse> {\n\t\treturn await this.queryClient.isBlockhashValid(blockhash);\n\t}\n\n\t/**\n\t * Gets the health status of the validator.\n\t */\n\tasync getValidatorHealth(): Promise<ValidatorHealth> {\n\t\treturn await this.queryClient.getValidatorHealth();\n\t}\n\n\t/**\n\t * Gets the list of full nodes connected to the validator or full node.\n\t */\n\tasync getConnectedFullNodes(): Promise<ConnectedNode[]> {\n\t\treturn await this.queryClient.getConnectedFullNodes();\n\t}\n\n\t/**\n\t * Gets the TEE's secret sharing public key for HPKE encryption.\n\t */\n\tasync getSecretSharingPubkey(): Promise<SecretSharingPubkey> {\n\t\tconst rawBytes = await this.queryClient.getSecretSharingPubkey();\n\t\tconst hex = Array.from(rawBytes)\n\t\t\t.map((b) => b.toString(16).padStart(2, \"0\"))\n\t\t\t.join(\"\");\n\t\treturn { publicKey: hex };\n\t}\n\n\t/**\n\t * Gets the config hash prefix for protecting against replay attacks.\n\t */\n\tasync getConfigHashPrefix(): Promise<ConfigHashPrefix> {\n\t\treturn await this.queryClient.getConfigHashPrefix();\n\t}\n\n\t/**\n\t * Submits an epoch change transaction (admin-only).\n\t */\n\tasync sendAdminTransaction(\n\t\trequest: SubmitEpochChangeRequest,\n\t): Promise<SubmitEpochChangeResponse> {\n\t\treturn await this.transactionClient.sendAdminTransaction(request);\n\t}\n\n\t/**\n\t * Gets all accounts in the system.\n\t */\n\tasync getAllAccounts(\n\t\tconfig: GetAllAccountsConfig | undefined,\n\t): Promise<AllAccountsEntry[]> {\n\t\treturn await this.queryClient.getAllAccounts(config);\n\t}\n\n\t/**\n\t * Gets a block by its height.\n\t */\n\tasync getBlock(\n\t\tblockHeight: bigint,\n\t\tconfig: GetBlockConfig | undefined,\n\t): Promise<BlockInfo> {\n\t\treturn await this.queryClient.getBlock(blockHeight, config);\n\t}\n\n\t/**\n\t * Gets a list of confirmed block heights in a range.\n\t */\n\tasync getBlocks(\n\t\tstartHeight: bigint,\n\t\tendHeight: bigint | undefined,\n\t): Promise<bigint[]> {\n\t\treturn await this.queryClient.getBlocks(startHeight, endHeight);\n\t}\n\n\t/**\n\t * Gets detailed information about a stake account.\n\t */\n\tasync getStakeAccount(\n\t\tpubkey: PublicKey,\n\t): Promise<StakeAccountInfo | undefined> {\n\t\treturn await this.queryClient.getStakeAccount(pubkey);\n\t}\n\n\t/**\n\t * Gets all registered validator accounts.\n\t */\n\tasync getValidatorAccounts(\n\t\trequest: GetValidatorAccountsRequest,\n\t): Promise<ValidatorAccountInfo[]> {\n\t\treturn await this.queryClient.getValidatorAccounts(request);\n\t}\n\n\t/**\n\t * Gets the token balance of an SPL Token account.\n\t */\n\tasync getTokenAccountBalance(pubkey: PublicKey): Promise<TokenBalance> {\n\t\treturn await this.queryClient.getTokenAccountBalance(pubkey);\n\t}\n\n\t/**\n\t * Gets registered REX requests for a creator.\n\t */\n\tasync getRexRequests(\n\t\tcreator: PublicKey,\n\t\tnonce: string | undefined,\n\t): Promise<RexInfoAndDuties[]> {\n\t\treturn await this.queryClient.getRexRequests(creator, nonce);\n\t}\n\n\t/**\n\t * Gets missed REX duty proposal rounds for a specific REX request.\n\t */\n\tasync getRexMissedDuties(\n\t\tcreator: PublicKey,\n\t\tnonce: string,\n\t): Promise<bigint[]> {\n\t\treturn await this.queryClient.getRexMissedDuties(creator, nonce);\n\t}\n\n\t/**\n\t * Gets information about all known cluster nodes.\n\t */\n\tasync getClusterNodes(): Promise<ClusterNodeInfo[]> {\n\t\treturn await this.queryClient.getClusterNodes();\n\t}\n\n\t/**\n\t * Gets the list of validator indices this node is connected to.\n\t */\n\tasync getConnectedValidators(): Promise<number[]> {\n\t\treturn await this.queryClient.getConnectedValidators();\n\t}\n\n\t/**\n\t * Calls an arbitrary RPC method with a JSON string body.\n\t * Utility method for methods not yet in the generated interface.\n\t */\n\tasync callWithJson(method: string, params: string): Promise<string> {\n\t\treturn await this.queryClient.callWithJson(method, params);\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Low-level HTTP transport with retry logic and timeout handling.\n *\n * Provides robust network communication with automatic retry,\n * exponential backoff, and proper error handling.\n */\nimport { calculateBackoff, sleep } from \"../utils\";\nimport { RpcError, RpcErrorCode } from \"./errors\";\n\nexport interface HttpTransportConfig {\n\t/** Request timeout in milliseconds */\n\ttimeout?: number;\n\t/** Maximum number of retry attempts */\n\tmaxRetries?: number;\n\t/** Base delay for exponential backoff (ms) */\n\tretryBaseDelay?: number;\n\t/** Maximum retry delay (ms) */\n\tretryMaxDelay?: number;\n\t/** Custom headers to include in requests */\n\theaders?: Record<string, string>;\n}\n\ninterface RequestOptions {\n\tmethod: string;\n\theaders: Record<string, string>;\n\tbody: string;\n\tsignal?: AbortSignal;\n}\n\nconst DEFAULT_CONFIG: Required<HttpTransportConfig> = {\n\ttimeout: 30000, // 30 seconds\n\tmaxRetries: 3,\n\tretryBaseDelay: 1000, // 1 second\n\tretryMaxDelay: 30000, // 30 seconds\n\theaders: {},\n};\n\n/**\n * HTTP transport with built-in retry logic and timeout handling.\n *\n * Features:\n * - Automatic retries with exponential backoff\n * - Request timeouts using AbortController\n * - Network error recovery\n * - Rate limit handling\n * - Proper HTTP status code handling\n */\nexport class HttpTransport {\n\tprivate readonly url: string;\n\tprivate readonly config: Required<HttpTransportConfig>;\n\n\tconstructor(url: string, config: HttpTransportConfig = {}) {\n\t\tthis.url = url;\n\t\tthis.config = { ...DEFAULT_CONFIG, ...config };\n\t}\n\n\t/**\n\t * Makes an HTTP request with automatic retry logic.\n\t *\n\t * Retries are attempted for network errors and server errors (5xx).\n\t * Uses exponential backoff between retry attempts.\n\t */\n\tasync request(\n\t\tbody: string,\n\t\trequestDetails: Record<string, unknown> = {},\n\t): Promise<unknown> {\n\t\tlet lastError: Error | undefined;\n\n\t\tfor (let attempt = 0; attempt <= this.config.maxRetries; attempt++) {\n\t\t\ttry {\n\t\t\t\treturn await this.makeRequest(body, requestDetails, attempt);\n\t\t\t} catch (error) {\n\t\t\t\tlastError = error as Error;\n\n\t\t\t\t// Don't retry if it's not a retryable error\n\t\t\t\tif (error instanceof RpcError && !error.retryable) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\n\t\t\t\t// Don't retry on the last attempt\n\t\t\t\tif (attempt === this.config.maxRetries) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\n\t\t\t\t// Calculate backoff delay\n\t\t\t\tconst delay = calculateBackoff(\n\t\t\t\t\tattempt,\n\t\t\t\t\tthis.config.retryBaseDelay,\n\t\t\t\t\tthis.config.retryMaxDelay,\n\t\t\t\t);\n\n\t\t\t\t// Wait before retrying\n\t\t\t\tawait sleep(delay);\n\t\t\t}\n\t\t}\n\n\t\t// Should never reach here, but TypeScript doesn't know that\n\t\tthrow lastError;\n\t}\n\n\t/**\n\t * Make a single HTTP request with timeout\n\t */\n\tprivate async makeRequest(\n\t\tbody: string,\n\t\trequestDetails: Record<string, unknown>,\n\t\tattempt: number,\n\t): Promise<unknown> {\n\t\tconst controller = new AbortController();\n\t\tconst timeoutId = setTimeout(() => controller.abort(), this.config.timeout);\n\n\t\ttry {\n\t\t\tconst options: RequestOptions = {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: {\n\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\t...this.config.headers,\n\t\t\t\t},\n\t\t\t\tbody,\n\t\t\t\tsignal: controller.signal,\n\t\t\t};\n\n\t\t\tconst response = await fetch(this.url, options);\n\n\t\t\t// Handle HTTP errors\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow await this.handleHttpError(response, requestDetails, attempt);\n\t\t\t}\n\n\t\t\t// Parse JSON response\n\t\t\tconst data = await response.json();\n\t\t\treturn data;\n\t\t} catch (error) {\n\t\t\t// Handle timeout\n\t\t\tif (error instanceof Error && error.name === \"AbortError\") {\n\t\t\t\tthrow RpcError.requestTimeout(this.config.timeout, {\n\t\t\t\t\t...requestDetails,\n\t\t\t\t\turl: this.url,\n\t\t\t\t\tattempts: attempt + 1,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Handle network errors\n\t\t\tif (error instanceof TypeError) {\n\t\t\t\tthrow RpcError.networkError(error.message, {\n\t\t\t\t\t...requestDetails,\n\t\t\t\t\turl: this.url,\n\t\t\t\t\tattempts: attempt + 1,\n\t\t\t\t\tcause: error.message,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Re-throw RpcError\n\t\t\tif (error instanceof RpcError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\t// Unknown error\n\t\t\tthrow RpcError.networkError(\"Unknown network error\", {\n\t\t\t\t...requestDetails,\n\t\t\t\turl: this.url,\n\t\t\t\tattempts: attempt + 1,\n\t\t\t\tcause: error instanceof Error ? error.message : String(error),\n\t\t\t});\n\t\t} finally {\n\t\t\tclearTimeout(timeoutId);\n\t\t}\n\t}\n\n\t/**\n\t * Handle HTTP error responses.\n\t *\n\t * Parses the response body to extract JSON-RPC error details when available,\n\t * regardless of HTTP status code. Falls back to HTTP status-based error handling.\n\t */\n\tprivate async handleHttpError(\n\t\tresponse: Response,\n\t\trequestDetails: Record<string, unknown>,\n\t\tattempt: number,\n\t): Promise<RpcError> {\n\t\tconst status = response.status;\n\t\tconst isRetryable = status >= 500 || status === 429;\n\t\tconst baseDetails = {\n\t\t\t...requestDetails,\n\t\t\thttpStatus: status,\n\t\t\turl: this.url,\n\t\t\tattempts: attempt + 1,\n\t\t};\n\n\t\t// Try to parse response body for error details\n\t\tconst { message, rpcCode, errorData } = await this.parseErrorResponse(\n\t\t\tresponse,\n\t\t\tstatus,\n\t\t);\n\n\t\t// Rate limiting gets special handling\n\t\tif (status === 429) {\n\t\t\treturn RpcError.rateLimitExceeded({\n\t\t\t\t...baseDetails,\n\t\t\t\tserverError: errorData,\n\t\t\t});\n\t\t}\n\n\t\t// If we have a JSON-RPC error code, use proper error mapping\n\t\tif (rpcCode !== undefined) {\n\t\t\treturn RpcError.fromRpcCode(rpcCode, message, {\n\t\t\t\t...baseDetails,\n\t\t\t\tserverError: errorData,\n\t\t\t});\n\t\t}\n\n\t\t// Server errors (5xx) are retryable network errors\n\t\tif (status >= 500) {\n\t\t\treturn RpcError.networkError(message, {\n\t\t\t\t...baseDetails,\n\t\t\t\tserverError: errorData,\n\t\t\t});\n\t\t}\n\n\t\t// Client errors (4xx) are not retryable\n\t\treturn new RpcError(RpcErrorCode.NETWORK_ERROR, message, baseDetails, isRetryable);\n\t}\n\n\t/**\n\t * Parse error response body to extract message and RPC error code.\n\t *\n\t * Handles multiple formats:\n\t * - JSON-RPC error: { error: { code, message, data? } }\n\t * - Simple JSON: { message: \"...\" }\n\t * - Non-JSON responses\n\t */\n\tprivate async parseErrorResponse(\n\t\tresponse: Response,\n\t\tstatus: number,\n\t): Promise<{ message: string; rpcCode?: number; errorData?: unknown }> {\n\t\tlet message = `HTTP ${status}: ${response.statusText}`;\n\t\tlet rpcCode: number | undefined;\n\t\tlet errorData: unknown;\n\n\t\ttry {\n\t\t\terrorData = await response.json();\n\n\t\t\tif (errorData && typeof errorData === \"object\") {\n\t\t\t\tconst data = errorData as Record<string, unknown>;\n\n\t\t\t\t// Check for JSON-RPC error format: { error: { code, message } }\n\t\t\t\tif (\n\t\t\t\t\tdata.error &&\n\t\t\t\t\ttypeof data.error === \"object\" &&\n\t\t\t\t\t\"message\" in data.error\n\t\t\t\t) {\n\t\t\t\t\tconst rpcError = data.error as Record<string, unknown>;\n\t\t\t\t\tmessage = String(rpcError.message);\n\t\t\t\t\trpcCode =\n\t\t\t\t\t\ttypeof rpcError.code === \"number\" ? rpcError.code : undefined;\n\t\t\t\t} else if (\"message\" in data) {\n\t\t\t\t\t// Fallback to top-level message\n\t\t\t\t\tmessage = String(data.message);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {\n\t\t\t// Response might not be JSON, keep default message\n\t\t}\n\n\t\treturn { message, rpcCode, errorData };\n\t}\n\n\t/**\n\t * Returns the configured RPC endpoint URL.\n\t */\n\tgetUrl(): string {\n\t\treturn this.url;\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nexport type {\n\tAccountFilter,\n\tAccountInfo,\n\tAllAccountsEntry,\n\tBlockInfo,\n\tClusterNodeInfo,\n\tConfigHashPrefix,\n\tConfirmedTransaction,\n\tConfirmTransactionOptions,\n\tConnectedNode,\n\tEpochConsensusConfigRequest,\n\tEpochInfo,\n\tEventData,\n\tFeeResponse,\n\tGetAccountsByOwnerConfig,\n\tGetAllAccountsConfig,\n\tGetBlockConfig,\n\tGetSignaturesForAddressConfig,\n\tGetTransactionsConfig,\n\tGetValidatorAccountsRequest,\n\tGetWorkflowLineageRequest,\n\tGetWorkflowLineageResponse,\n\tIsBlockhashValidResponse,\n\tKelvin,\n\tOptionalAccountInfo,\n\tOwnerAccount,\n\tPaginationInfo,\n\tRexDuty,\n\tRexInfoAndDuties,\n\tSecretSharingPubkey,\n\tSendAndConfirmOptions,\n\tSendTransactionOptions,\n\tSignatureInfo,\n\tSignatureStatus,\n\tStakeAccountInfo,\n\tStakeState,\n\tSubmitEpochChangeRequest,\n\tSubmitEpochChangeResponse,\n\tSubscription,\n\tSubscriptionAccountMeta,\n\tSubscriptionInstruction,\n\tSubscriptionKind,\n\tTimestampRange,\n\tTokenBalance,\n\tTransactionData,\n\tTransactionInfo,\n\tTransactionMessage,\n\tTransactionNodeData,\n\tTransactionResponse,\n\tTransactionStatusMetadata,\n\tTransactionWithMeta,\n\tTriggeredTransaction,\n\tTriggerInfo,\n\tTruncationReason,\n\tValidatorAccountInfo,\n\tValidatorHealth,\n\tValidatorInfoRequest,\n\tWorkflowLineage,\n\tWorkflowNode,\n} from \"../generated/types\";\nexport * from \"./clients\";\nexport * from \"./errors\";\nexport * from \"./http-transport\";\n\nimport {\n\tRIALO_DEVNET_CHAIN,\n\tRIALO_LOCALNET_CHAIN,\n\tRIALO_MAINNET_CHAIN,\n\tRIALO_TESTNET_CHAIN,\n} from \"../constants\";\nimport {\n\tRialoClient,\n\ttype RialoClientConfig,\n\ttype RialoNetwork,\n} from \"./clients\";\nimport { RpcError, RpcErrorCode } from \"./errors\";\nimport { HttpTransport } from \"./http-transport\";\n\n/**\n * Creates an RPC client with automatic retry and timeout handling.\n *\n * @param config - Client configuration with chain definition and optional transport settings\n * @param config.chain - Chain definition (e.g., RIALO_DEVNET_CHAIN, RIALO_MAINNET_CHAIN) or a custom chain with your own rpcUrl\n * @param config.transport - Optional transport configuration (timeout, retries, headers)\n * @returns Configured RialoClient instance\n *\n * @example\n * ```typescript\n * // Basic usage with preset chain\n * const client = createRialoClient({ chain: RIALO_DEVNET_CHAIN });\n *\n * // With custom transport config\n * const client = createRialoClient({\n * chain: RIALO_MAINNET_CHAIN,\n * transport: { timeout: 30000, maxRetries: 5 }\n * });\n *\n * // With custom RPC URL\n * const client = createRialoClient({\n * chain: {\n * id: 'rialo:mainnet',\n * name: 'Mainnet',\n * rpcUrl: 'https://mainnet.custom-rpc.com:4101'\n * },\n * });\n * ```\n */\nexport function createRialoClient(config: RialoClientConfig): RialoClient {\n\tconst { chain, transport } = config;\n\tconst httpTransport = new HttpTransport(chain.rpcUrl, transport);\n\n\treturn new RialoClient(httpTransport, chain);\n}\n\n/**\n * Returns a default RialoClientConfig for a given network.\n *\n * Provides preset chain configurations for standard Rialo networks, making it easy\n * to connect to mainnet, devnet, testnet, or localnet without manual configuration.\n *\n * @param network - Network identifier: \"mainnet\", \"devnet\", \"testnet\", or \"localnet\"\n * @returns Default RialoClientConfig for the specified network\n * @throws {RpcError} With code INVALID_NETWORK if an unknown network is provided\n *\n * @example\n * ```typescript\n * // Get devnet config and create client\n * const config = getDefaultRialoClientConfig('devnet');\n * const client = createRialoClient(config);\n *\n * // Customize the config with transport options\n * const config = getDefaultRialoClientConfig('mainnet');\n * const client = createRialoClient({\n * ...config,\n * transport: { timeout: 60000, maxRetries: 5 }\n * });\n *\n * // Use custom RPC URL while preserving network identity\n * const config = getDefaultRialoClientConfig('mainnet');\n * const client = createRialoClient({\n * ...config,\n * chain: {\n * ...config.chain,\n * rpcUrl: 'https://mainnet.custom-rpc.com:4101'\n * },\n * });\n * ```\n */\nexport function getDefaultRialoClientConfig(\n\tnetwork: RialoNetwork,\n): RialoClientConfig {\n\tswitch (network) {\n\t\tcase \"mainnet\":\n\t\t\treturn { chain: RIALO_MAINNET_CHAIN };\n\t\tcase \"devnet\":\n\t\t\treturn { chain: RIALO_DEVNET_CHAIN };\n\t\tcase \"testnet\":\n\t\t\treturn { chain: RIALO_TESTNET_CHAIN };\n\t\tcase \"localnet\":\n\t\t\treturn { chain: RIALO_LOCALNET_CHAIN };\n\t\tdefault:\n\t\t\tthrow new RpcError(\n\t\t\t\tRpcErrorCode.INVALID_NETWORK,\n\t\t\t\t`Unknown network: ${network}`,\n\t\t\t);\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Bincode deserialization reader\n *\n * Matches Rust's bincode crate with default configuration:\n * - Little-endian byte order\n * - Fixed-size integer encoding (no varint)\n * - u64 length prefixes for dynamic collections\n * - u32 enum variant indices\n */\nexport class BincodeReader {\n\tprivate view: DataView;\n\tprivate offset: number;\n\tprivate bytes: Uint8Array;\n\n\tconstructor(data: Uint8Array) {\n\t\tthis.bytes = data;\n\t\tthis.view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\t\tthis.offset = 0;\n\t}\n\n\t// ========== Position Management ==========\n\n\tgetOffset(): number {\n\t\treturn this.offset;\n\t}\n\n\tremaining(): number {\n\t\treturn this.bytes.length - this.offset;\n\t}\n\n\tisExhausted(): boolean {\n\t\treturn this.offset >= this.bytes.length;\n\t}\n\n\tskip(bytes: number): this {\n\t\tthis.ensureAvailable(bytes);\n\t\tthis.offset += bytes;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Peek at bytes without advancing the offset\n\t */\n\tpeek(length: number): Uint8Array {\n\t\tthis.ensureAvailable(length);\n\t\treturn this.bytes.slice(this.offset, this.offset + length);\n\t}\n\n\t/**\n\t * Reset reader to beginning\n\t */\n\treset(): this {\n\t\tthis.offset = 0;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Seek to specific offset\n\t */\n\tseek(offset: number): this {\n\t\tif (offset < 0 || offset > this.bytes.length) {\n\t\t\tthrow new Error(\n\t\t\t\t`Invalid seek offset: ${offset}, buffer length: ${this.bytes.length}`,\n\t\t\t);\n\t\t}\n\t\tthis.offset = offset;\n\t\treturn this;\n\t}\n\n\t// ========== Primitive Types ==========\n\n\treadU8(): number {\n\t\tthis.ensureAvailable(1);\n\t\tconst value = this.view.getUint8(this.offset);\n\t\tthis.offset += 1;\n\t\treturn value;\n\t}\n\n\treadU16(): number {\n\t\tthis.ensureAvailable(2);\n\t\tconst value = this.view.getUint16(this.offset, true);\n\t\tthis.offset += 2;\n\t\treturn value;\n\t}\n\n\treadU32(): number {\n\t\tthis.ensureAvailable(4);\n\t\tconst value = this.view.getUint32(this.offset, true);\n\t\tthis.offset += 4;\n\t\treturn value;\n\t}\n\n\treadU64(): bigint {\n\t\tthis.ensureAvailable(8);\n\t\tconst low = this.view.getUint32(this.offset, true);\n\t\tconst high = this.view.getUint32(this.offset + 4, true);\n\t\tthis.offset += 8;\n\t\treturn BigInt(low) | (BigInt(high) << 32n);\n\t}\n\n\treadU128(): bigint {\n\t\tthis.ensureAvailable(16);\n\t\tconst low = this.readU64();\n\t\tconst high = this.readU64();\n\t\treturn low | (high << 64n);\n\t}\n\n\treadI8(): number {\n\t\tthis.ensureAvailable(1);\n\t\tconst value = this.view.getInt8(this.offset);\n\t\tthis.offset += 1;\n\t\treturn value;\n\t}\n\n\treadI16(): number {\n\t\tthis.ensureAvailable(2);\n\t\tconst value = this.view.getInt16(this.offset, true);\n\t\tthis.offset += 2;\n\t\treturn value;\n\t}\n\n\treadI32(): number {\n\t\tthis.ensureAvailable(4);\n\t\tconst value = this.view.getInt32(this.offset, true);\n\t\tthis.offset += 4;\n\t\treturn value;\n\t}\n\n\treadI64(): bigint {\n\t\tthis.ensureAvailable(8);\n\t\tconst low = this.view.getUint32(this.offset, true);\n\t\tconst high = this.view.getInt32(this.offset + 4, true);\n\t\tthis.offset += 8;\n\t\t// Use BigInt arithmetic to properly handle sign extension\n\t\treturn BigInt(low) | (BigInt(high) << 32n);\n\t}\n\n\treadI128(): bigint {\n\t\t// Read as unsigned first, then convert to signed\n\t\tconst unsigned = this.readU128();\n\t\t// If sign bit (bit 127) is set, convert to negative\n\t\tconst signBit = 1n << 127n;\n\t\tif ((unsigned & signBit) !== 0n) {\n\t\t\treturn unsigned - (1n << 128n);\n\t\t}\n\t\treturn unsigned;\n\t}\n\n\treadF32(): number {\n\t\tthis.ensureAvailable(4);\n\t\tconst value = this.view.getFloat32(this.offset, true);\n\t\tthis.offset += 4;\n\t\treturn value;\n\t}\n\n\treadF64(): number {\n\t\tthis.ensureAvailable(8);\n\t\tconst value = this.view.getFloat64(this.offset, true);\n\t\tthis.offset += 8;\n\t\treturn value;\n\t}\n\n\treadBool(): boolean {\n\t\tconst value = this.readU8();\n\t\tif (value > 1) {\n\t\t\tthrow new Error(`Invalid boolean value: ${value}`);\n\t\t}\n\t\treturn value === 1;\n\t}\n\n\t// ========== Compound Types ==========\n\n\treadBytes(length: number): Uint8Array {\n\t\tthis.ensureAvailable(length);\n\t\tconst bytes = this.bytes.slice(this.offset, this.offset + length);\n\t\tthis.offset += length;\n\t\treturn bytes;\n\t}\n\n\treadFixedArray(length: number): Uint8Array {\n\t\treturn this.readBytes(length);\n\t}\n\n\treadVecBytes(): Uint8Array {\n\t\tconst length = this.readLength();\n\t\treturn this.readBytes(length);\n\t}\n\n\treadString(): string {\n\t\tconst bytes = this.readVecBytes();\n\t\treturn new TextDecoder().decode(bytes);\n\t}\n\n\treadVariant(): number {\n\t\treturn this.readU32();\n\t}\n\n\treadOption<T>(readValue: () => T): T | null {\n\t\tconst hasValue = this.readU8();\n\t\tif (hasValue === 0) {\n\t\t\treturn null;\n\t\t}\n\t\tif (hasValue !== 1) {\n\t\t\tthrow new Error(`Invalid option discriminant: ${hasValue}`);\n\t\t}\n\t\treturn readValue();\n\t}\n\n\treadVec<T>(readElement: () => T): T[] {\n\t\tconst length = this.readLength();\n\t\tconst result: T[] = [];\n\t\tfor (let i = 0; i < length; i++) {\n\t\t\tresult.push(readElement());\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * Read a tuple of fixed size with heterogeneous types\n\t */\n\treadTuple<T extends unknown[]>(readers: { [K in keyof T]: () => T[K] }): T {\n\t\treturn readers.map((read) => read()) as T;\n\t}\n\n\treadMap<K, V>(readKey: () => K, readValue: () => V): Map<K, V> {\n\t\tconst length = this.readLength();\n\t\tconst map = new Map<K, V>();\n\t\tfor (let i = 0; i < length; i++) {\n\t\t\tconst key = readKey();\n\t\t\tconst value = readValue();\n\t\t\tmap.set(key, value);\n\t\t}\n\t\treturn map;\n\t}\n\n\t// ========== Helpers ==========\n\n\t/**\n\t * Read length as u64 but validate it's within safe integer range\n\t */\n\tprivate readLength(): number {\n\t\tconst length = this.readU64();\n\t\tif (length > BigInt(Number.MAX_SAFE_INTEGER)) {\n\t\t\tthrow new Error(`Length ${length} exceeds maximum safe integer`);\n\t\t}\n\t\tconst numLength = Number(length);\n\t\t// Additional sanity check: length shouldn't exceed remaining bytes\n\t\tif (numLength > this.remaining()) {\n\t\t\tthrow new Error(\n\t\t\t\t`Length ${numLength} exceeds remaining bytes ${this.remaining()}`,\n\t\t\t);\n\t\t}\n\t\treturn numLength;\n\t}\n\n\tprivate ensureAvailable(bytes: number): void {\n\t\tif (this.offset + bytes > this.bytes.length) {\n\t\t\tthrow new Error(\n\t\t\t\t`Unexpected end of data: need ${bytes} bytes at offset ${this.offset}, ` +\n\t\t\t\t\t`but only ${this.bytes.length - this.offset} available`,\n\t\t\t);\n\t\t}\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Bincode serialization writer\n *\n * Matches Rust's bincode crate with default configuration:\n * - Little-endian byte order\n * - Fixed-size integer encoding (no varint)\n * - u64 length prefixes for dynamic collections\n * - u32 enum variant indices\n */\nexport class BincodeWriter {\n\tprivate buffer: Uint8Array;\n\tprivate offset: number;\n\tprivate view: DataView;\n\n\tconstructor(initialCapacity = 256) {\n\t\tthis.buffer = new Uint8Array(initialCapacity);\n\t\tthis.view = new DataView(this.buffer.buffer);\n\t\tthis.offset = 0;\n\t}\n\n\t// ========== Primitive Types ==========\n\n\twriteU8(value: number): this {\n\t\tif (value < 0 || value > 0xff) {\n\t\t\tthrow new Error(`u8 value out of range: ${value}`);\n\t\t}\n\t\tthis.ensureCapacity(1);\n\t\tthis.buffer[this.offset++] = value;\n\t\treturn this;\n\t}\n\n\twriteU16(value: number): this {\n\t\tif (value < 0 || value > 0xffff) {\n\t\t\tthrow new Error(`u16 value out of range: ${value}`);\n\t\t}\n\t\tthis.ensureCapacity(2);\n\t\tthis.view.setUint16(this.offset, value, true);\n\t\tthis.offset += 2;\n\t\treturn this;\n\t}\n\n\twriteU32(value: number): this {\n\t\tif (value < 0 || value > 0xffffffff) {\n\t\t\tthrow new Error(`u32 value out of range: ${value}`);\n\t\t}\n\t\tthis.ensureCapacity(4);\n\t\tthis.view.setUint32(this.offset, value, true);\n\t\tthis.offset += 4;\n\t\treturn this;\n\t}\n\n\twriteU64(value: bigint | number): this {\n\t\tconst val = BigInt(value);\n\t\tif (val < 0n || val > 0xffff_ffff_ffff_ffffn) {\n\t\t\tthrow new Error(`u64 value out of range: ${val}`);\n\t\t}\n\t\tthis.ensureCapacity(8);\n\t\t// Write as two u32s for better performance\n\t\tthis.view.setUint32(this.offset, Number(val & 0xffff_ffffn), true);\n\t\tthis.view.setUint32(\n\t\t\tthis.offset + 4,\n\t\t\tNumber((val >> 32n) & 0xffff_ffffn),\n\t\t\ttrue,\n\t\t);\n\t\tthis.offset += 8;\n\t\treturn this;\n\t}\n\n\twriteU128(value: bigint): this {\n\t\tif (value < 0n || value > (1n << 128n) - 1n) {\n\t\t\tthrow new Error(`u128 value out of range: ${value}`);\n\t\t}\n\t\tthis.writeU64(value & ((1n << 64n) - 1n));\n\t\tthis.writeU64(value >> 64n);\n\t\treturn this;\n\t}\n\n\twriteI8(value: number): this {\n\t\tif (value < -128 || value > 127) {\n\t\t\tthrow new Error(`i8 value out of range: ${value}`);\n\t\t}\n\t\tthis.ensureCapacity(1);\n\t\tthis.view.setInt8(this.offset, value);\n\t\tthis.offset += 1;\n\t\treturn this;\n\t}\n\n\twriteI16(value: number): this {\n\t\tif (value < -32768 || value > 32767) {\n\t\t\tthrow new Error(`i16 value out of range: ${value}`);\n\t\t}\n\t\tthis.ensureCapacity(2);\n\t\tthis.view.setInt16(this.offset, value, true);\n\t\tthis.offset += 2;\n\t\treturn this;\n\t}\n\n\twriteI32(value: number): this {\n\t\tif (value < -2147483648 || value > 2147483647) {\n\t\t\tthrow new Error(`i32 value out of range: ${value}`);\n\t\t}\n\t\tthis.ensureCapacity(4);\n\t\tthis.view.setInt32(this.offset, value, true);\n\t\tthis.offset += 4;\n\t\treturn this;\n\t}\n\n\twriteI64(value: bigint): this {\n\t\tconst min = -(1n << 63n);\n\t\tconst max = (1n << 63n) - 1n;\n\t\tif (value < min || value > max) {\n\t\t\tthrow new Error(`i64 value out of range: ${value}`);\n\t\t}\n\t\tthis.ensureCapacity(8);\n\t\t// For signed integers, we write the bit pattern directly\n\t\t// JavaScript's BigInt handles two's complement correctly\n\t\tconst unsigned = value < 0n ? value + (1n << 64n) : value;\n\t\tthis.view.setUint32(this.offset, Number(unsigned & 0xffff_ffffn), true);\n\t\tthis.view.setUint32(\n\t\t\tthis.offset + 4,\n\t\t\tNumber((unsigned >> 32n) & 0xffff_ffffn),\n\t\t\ttrue,\n\t\t);\n\t\tthis.offset += 8;\n\t\treturn this;\n\t}\n\n\twriteI128(value: bigint): this {\n\t\tconst min = -(1n << 127n);\n\t\tconst max = (1n << 127n) - 1n;\n\t\tif (value < min || value > max) {\n\t\t\tthrow new Error(`i128 value out of range: ${value}`);\n\t\t}\n\t\t// Convert to unsigned representation for writing\n\t\tconst unsigned = value < 0n ? value + (1n << 128n) : value;\n\t\tthis.writeU64(unsigned & ((1n << 64n) - 1n));\n\t\tthis.writeU64(unsigned >> 64n);\n\t\treturn this;\n\t}\n\n\twriteF32(value: number): this {\n\t\tthis.ensureCapacity(4);\n\t\tthis.view.setFloat32(this.offset, value, true);\n\t\tthis.offset += 4;\n\t\treturn this;\n\t}\n\n\twriteF64(value: number): this {\n\t\tthis.ensureCapacity(8);\n\t\tthis.view.setFloat64(this.offset, value, true);\n\t\tthis.offset += 8;\n\t\treturn this;\n\t}\n\n\twriteBool(value: boolean): this {\n\t\tthis.ensureCapacity(1);\n\t\tthis.buffer[this.offset++] = value ? 1 : 0;\n\t\treturn this;\n\t}\n\n\t// ========== Compound Types ==========\n\n\twriteBytes(bytes: Uint8Array): this {\n\t\tthis.ensureCapacity(bytes.length);\n\t\tthis.buffer.set(bytes, this.offset);\n\t\tthis.offset += bytes.length;\n\t\treturn this;\n\t}\n\n\twriteFixedArray(bytes: Uint8Array, expectedLength?: number): this {\n\t\tif (expectedLength !== undefined && bytes.length !== expectedLength) {\n\t\t\tthrow new Error(\n\t\t\t\t`Fixed array length mismatch: expected ${expectedLength}, got ${bytes.length}`,\n\t\t\t);\n\t\t}\n\t\treturn this.writeBytes(bytes);\n\t}\n\n\twriteVecBytes(bytes: Uint8Array): this {\n\t\tthis.writeU64(BigInt(bytes.length));\n\t\treturn this.writeBytes(bytes);\n\t}\n\n\twriteString(str: string): this {\n\t\tconst bytes = new TextEncoder().encode(str);\n\t\treturn this.writeVecBytes(bytes);\n\t}\n\n\twriteVariant(index: number): this {\n\t\treturn this.writeU32(index);\n\t}\n\n\twriteOption<T>(\n\t\tvalue: T | null | undefined,\n\t\twriteValue: (writer: BincodeWriter, val: T) => void,\n\t): this {\n\t\tif (value === null || value === undefined) {\n\t\t\tthis.writeU8(0);\n\t\t} else {\n\t\t\tthis.writeU8(1);\n\t\t\twriteValue(this, value);\n\t\t}\n\t\treturn this;\n\t}\n\n\twriteVec<T>(\n\t\titems: T[],\n\t\twriteItem: (writer: BincodeWriter, item: T) => void,\n\t): this {\n\t\tthis.writeU64(BigInt(items.length));\n\t\tfor (const item of items) {\n\t\t\twriteItem(this, item);\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Write a tuple (fixed-size heterogeneous collection)\n\t */\n\twriteTuple<T extends unknown[]>(\n\t\titems: T,\n\t\twriters: { [K in keyof T]: (writer: BincodeWriter, val: T[K]) => void },\n\t): this {\n\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\t(writers[i] as (writer: BincodeWriter, val: unknown) => void)(\n\t\t\t\tthis,\n\t\t\t\titems[i],\n\t\t\t);\n\t\t}\n\t\treturn this;\n\t}\n\n\twriteMap<K, V>(\n\t\tmap: Map<K, V>,\n\t\twriteKey: (writer: BincodeWriter, key: K) => void,\n\t\twriteValue: (writer: BincodeWriter, value: V) => void,\n\t): this {\n\t\tthis.writeU64(BigInt(map.size));\n\t\tfor (const [key, value] of map) {\n\t\t\twriteKey(this, key);\n\t\t\twriteValue(this, value);\n\t\t}\n\t\treturn this;\n\t}\n\n\t// ========== Output ==========\n\n\ttoBytes(): Uint8Array {\n\t\treturn this.buffer.slice(0, this.offset);\n\t}\n\n\t/**\n\t * Get a view of the written bytes WITHOUT copying.\n\t *\n\t * ⚠️ WARNING: This returns a view into the internal buffer.\n\t * The view becomes INVALID if:\n\t * - The writer continues writing (may trigger resize)\n\t * - The writer is cleared via clear()\n\t *\n\t * Use toBytes() for a safe copy, or use this only for immediate\n\t * read-only access when performance is critical.\n\t */\n\ttoView(): Uint8Array {\n\t\treturn this.buffer.subarray(0, this.offset);\n\t}\n\n\tlength(): number {\n\t\treturn this.offset;\n\t}\n\n\tclear(): this {\n\t\tthis.offset = 0;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Reserve additional capacity\n\t */\n\treserve(additionalBytes: number): this {\n\t\tthis.ensureCapacity(additionalBytes);\n\t\treturn this;\n\t}\n\n\t// ========== Internal ==========\n\n\tprivate ensureCapacity(needed: number): void {\n\t\tconst required = this.offset + needed;\n\t\tif (required <= this.buffer.length) {\n\t\t\treturn;\n\t\t}\n\t\t// Grow by at least 2x or to required size\n\t\tlet newCapacity = this.buffer.length * 2;\n\t\twhile (newCapacity < required) {\n\t\t\tnewCapacity *= 2;\n\t\t}\n\t\tconst newBuffer = new Uint8Array(newCapacity);\n\t\tnewBuffer.set(this.buffer);\n\t\tthis.buffer = newBuffer;\n\t\tthis.view = new DataView(this.buffer.buffer);\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { BincodeReader } from \"./reader\";\nimport { BincodeWriter } from \"./writer\";\n\n/**\n * Type definitions for bincode schemas\n *\n * IMPORTANT: For structs and enums, field/variant order MUST match Rust definition order.\n * Use arrays of tuples instead of objects to guarantee order preservation.\n */\nexport type BincodeSchema =\n\t| { type: \"u8\" }\n\t| { type: \"u16\" }\n\t| { type: \"u32\" }\n\t| { type: \"u64\" }\n\t| { type: \"u128\" }\n\t| { type: \"i8\" }\n\t| { type: \"i16\" }\n\t| { type: \"i32\" }\n\t| { type: \"i64\" }\n\t| { type: \"i128\" }\n\t| { type: \"f32\" }\n\t| { type: \"f64\" }\n\t| { type: \"bool\" }\n\t| { type: \"string\" }\n\t| { type: \"bytes\" }\n\t| { type: \"unit\" } // Rust's () type - zero size\n\t| { type: \"fixedArray\"; length: number }\n\t| { type: \"vec\"; element: BincodeSchema }\n\t| { type: \"option\"; inner: BincodeSchema }\n\t| { type: \"tuple\"; elements: BincodeSchema[] }\n\t| { type: \"struct\"; fields: StructField[] } // Ordered array, not object!\n\t| { type: \"enum\"; variants: EnumVariant[] } // Ordered array, not object!\n\t| { type: \"map\"; key: BincodeSchema; value: BincodeSchema }\n\t| { type: \"pubkey\" }; // 32-byte public key (Solana specific)\n\n/**\n * Struct field definition - order matters!\n */\nexport interface StructField {\n\tname: string;\n\tschema: BincodeSchema;\n}\n\n/**\n * Enum variant definition - order matters!\n */\nexport interface EnumVariant {\n\tname: string;\n\tschema: BincodeSchema | null; // null for unit variants\n}\n\n// ========== Schema Builder Helpers ==========\n\nexport const Schema = {\n\tu8: (): BincodeSchema => ({ type: \"u8\" }),\n\tu16: (): BincodeSchema => ({ type: \"u16\" }),\n\tu32: (): BincodeSchema => ({ type: \"u32\" }),\n\tu64: (): BincodeSchema => ({ type: \"u64\" }),\n\tu128: (): BincodeSchema => ({ type: \"u128\" }),\n\ti8: (): BincodeSchema => ({ type: \"i8\" }),\n\ti16: (): BincodeSchema => ({ type: \"i16\" }),\n\ti32: (): BincodeSchema => ({ type: \"i32\" }),\n\ti64: (): BincodeSchema => ({ type: \"i64\" }),\n\ti128: (): BincodeSchema => ({ type: \"i128\" }),\n\tf32: (): BincodeSchema => ({ type: \"f32\" }),\n\tf64: (): BincodeSchema => ({ type: \"f64\" }),\n\tbool: (): BincodeSchema => ({ type: \"bool\" }),\n\tstring: (): BincodeSchema => ({ type: \"string\" }),\n\tbytes: (): BincodeSchema => ({ type: \"bytes\" }),\n\tunit: (): BincodeSchema => ({ type: \"unit\" }),\n\n\tfixedArray: (length: number): BincodeSchema => ({\n\t\ttype: \"fixedArray\",\n\t\tlength,\n\t}),\n\n\tvec: (element: BincodeSchema): BincodeSchema => ({\n\t\ttype: \"vec\",\n\t\telement,\n\t}),\n\n\toption: (inner: BincodeSchema): BincodeSchema => ({\n\t\ttype: \"option\",\n\t\tinner,\n\t}),\n\n\ttuple: (...elements: BincodeSchema[]): BincodeSchema => ({\n\t\ttype: \"tuple\",\n\t\telements,\n\t}),\n\n\t/**\n\t * Define a struct with ordered fields\n\t * @example\n\t * Schema.struct([\n\t * [\"id\", Schema.u64()],\n\t * [\"name\", Schema.string()],\n\t * [\"active\", Schema.bool()],\n\t * ])\n\t */\n\tstruct: (fields: [string, BincodeSchema][]): BincodeSchema => ({\n\t\ttype: \"struct\",\n\t\tfields: fields.map(([name, schema]) => ({ name, schema })),\n\t}),\n\n\t/**\n\t * Define an enum with ordered variants\n\t * @example\n\t * Schema.enum([\n\t * [\"None\", null],\n\t * [\"Some\", Schema.u64()],\n\t * [\"Error\", Schema.string()],\n\t * ])\n\t */\n\tenum: (variants: [string, BincodeSchema | null][]): BincodeSchema => ({\n\t\ttype: \"enum\",\n\t\tvariants: variants.map(([name, schema]) => ({ name, schema })),\n\t}),\n\n\tmap: (key: BincodeSchema, value: BincodeSchema): BincodeSchema => ({\n\t\ttype: \"map\",\n\t\tkey,\n\t\tvalue,\n\t}),\n\n\tpubkey: (): BincodeSchema => ({ type: \"pubkey\" }),\n} as const;\n\n// ========== Serialization ==========\n\n/**\n * Serialize a value according to a schema\n */\nexport function serialize(schema: BincodeSchema, value: unknown): Uint8Array {\n\tconst writer = new BincodeWriter();\n\twriteValue(writer, schema, value);\n\treturn writer.toBytes();\n}\n\n/**\n * Deserialize bytes according to a schema\n */\nexport function deserialize<T>(schema: BincodeSchema, data: Uint8Array): T {\n\tconst reader = new BincodeReader(data);\n\tconst result = readValue(reader, schema) as T;\n\n\t// Verify all bytes were consumed (optional strict mode)\n\tif (!reader.isExhausted()) {\n\t\tconsole.warn(\n\t\t\t`Bincode deserialize: ${reader.remaining()} bytes remaining after parsing`,\n\t\t);\n\t}\n\n\treturn result;\n}\n\n/**\n * Deserialize bytes with strict validation\n */\nexport function deserializeStrict<T>(\n\tschema: BincodeSchema,\n\tdata: Uint8Array,\n): T {\n\tconst reader = new BincodeReader(data);\n\tconst result = readValue(reader, schema) as T;\n\n\tif (!reader.isExhausted()) {\n\t\tthrow new Error(\n\t\t\t`Unexpected data: ${reader.remaining()} bytes remaining after parsing`,\n\t\t);\n\t}\n\n\treturn result;\n}\n\nfunction writeValue(\n\twriter: BincodeWriter,\n\tschema: BincodeSchema,\n\tvalue: unknown,\n): void {\n\tswitch (schema.type) {\n\t\tcase \"u8\":\n\t\t\twriter.writeU8(value as number);\n\t\t\tbreak;\n\t\tcase \"u16\":\n\t\t\twriter.writeU16(value as number);\n\t\t\tbreak;\n\t\tcase \"u32\":\n\t\t\twriter.writeU32(value as number);\n\t\t\tbreak;\n\t\tcase \"u64\":\n\t\t\twriter.writeU64(value as bigint);\n\t\t\tbreak;\n\t\tcase \"u128\":\n\t\t\twriter.writeU128(value as bigint);\n\t\t\tbreak;\n\t\tcase \"i8\":\n\t\t\twriter.writeI8(value as number);\n\t\t\tbreak;\n\t\tcase \"i16\":\n\t\t\twriter.writeI16(value as number);\n\t\t\tbreak;\n\t\tcase \"i32\":\n\t\t\twriter.writeI32(value as number);\n\t\t\tbreak;\n\t\tcase \"i64\":\n\t\t\twriter.writeI64(value as bigint);\n\t\t\tbreak;\n\t\tcase \"i128\":\n\t\t\twriter.writeI128(value as bigint);\n\t\t\tbreak;\n\t\tcase \"f32\":\n\t\t\twriter.writeF32(value as number);\n\t\t\tbreak;\n\t\tcase \"f64\":\n\t\t\twriter.writeF64(value as number);\n\t\t\tbreak;\n\t\tcase \"bool\":\n\t\t\twriter.writeBool(value as boolean);\n\t\t\tbreak;\n\t\tcase \"string\":\n\t\t\twriter.writeString(value as string);\n\t\t\tbreak;\n\t\tcase \"bytes\":\n\t\t\twriter.writeVecBytes(value as Uint8Array);\n\t\t\tbreak;\n\t\tcase \"unit\":\n\t\t\t// Nothing to write for unit type\n\t\t\tbreak;\n\t\tcase \"fixedArray\": {\n\t\t\tconst arr = value as Uint8Array;\n\t\t\tif (arr.length !== schema.length) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Fixed array length mismatch: expected ${schema.length}, got ${arr.length}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\twriter.writeFixedArray(arr);\n\t\t\tbreak;\n\t\t}\n\t\tcase \"pubkey\": {\n\t\t\tconst arr = value as Uint8Array;\n\t\t\tif (arr.length !== 32) {\n\t\t\t\tthrow new Error(`Pubkey must be exactly 32 bytes, got ${arr.length}`);\n\t\t\t}\n\t\t\twriter.writeFixedArray(arr);\n\t\t\tbreak;\n\t\t}\n\t\tcase \"vec\": {\n\t\t\tconst arr = value as unknown[];\n\t\t\twriter.writeU64(BigInt(arr.length));\n\t\t\tfor (const item of arr) {\n\t\t\t\twriteValue(writer, schema.element, item);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase \"option\": {\n\t\t\tif (value === null || value === undefined) {\n\t\t\t\twriter.writeU8(0);\n\t\t\t} else {\n\t\t\t\twriter.writeU8(1);\n\t\t\t\twriteValue(writer, schema.inner, value);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase \"tuple\": {\n\t\t\tconst arr = value as unknown[];\n\t\t\tif (arr.length !== schema.elements.length) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Tuple length mismatch: expected ${schema.elements.length}, got ${arr.length}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tfor (let i = 0; i < schema.elements.length; i++) {\n\t\t\t\twriteValue(writer, schema.elements[i], arr[i]);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase \"struct\": {\n\t\t\tconst obj = value as Record<string, unknown>;\n\t\t\tfor (const field of schema.fields) {\n\t\t\t\tif (!(field.name in obj)) {\n\t\t\t\t\tthrow new Error(`Missing struct field: ${field.name}`);\n\t\t\t\t}\n\t\t\t\twriteValue(writer, field.schema, obj[field.name]);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase \"enum\": {\n\t\t\tconst enumValue = value as { variant: string; value?: unknown };\n\t\t\tconst variantIndex = schema.variants.findIndex(\n\t\t\t\t(v) => v.name === enumValue.variant,\n\t\t\t);\n\t\t\tif (variantIndex === -1) {\n\t\t\t\tconst validVariants = schema.variants.map((v) => v.name).join(\", \");\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Unknown variant: ${enumValue.variant}. Valid variants: ${validVariants}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\twriter.writeVariant(variantIndex);\n\t\t\tconst variantSchema = schema.variants[variantIndex].schema;\n\t\t\tif (variantSchema !== null) {\n\t\t\t\twriteValue(writer, variantSchema, enumValue.value);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase \"map\": {\n\t\t\tconst map = value as Map<unknown, unknown>;\n\t\t\twriter.writeU64(BigInt(map.size));\n\t\t\tfor (const [k, v] of map) {\n\t\t\t\twriteValue(writer, schema.key, k);\n\t\t\t\twriteValue(writer, schema.value, v);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tdefault: {\n\t\t\tthrow new Error(`Unknown schema type: ${JSON.stringify(schema)}`);\n\t\t}\n\t}\n}\n\nfunction readValue(reader: BincodeReader, schema: BincodeSchema): unknown {\n\tswitch (schema.type) {\n\t\tcase \"u8\":\n\t\t\treturn reader.readU8();\n\t\tcase \"u16\":\n\t\t\treturn reader.readU16();\n\t\tcase \"u32\":\n\t\t\treturn reader.readU32();\n\t\tcase \"u64\":\n\t\t\treturn reader.readU64();\n\t\tcase \"u128\":\n\t\t\treturn reader.readU128();\n\t\tcase \"i8\":\n\t\t\treturn reader.readI8();\n\t\tcase \"i16\":\n\t\t\treturn reader.readI16();\n\t\tcase \"i32\":\n\t\t\treturn reader.readI32();\n\t\tcase \"i64\":\n\t\t\treturn reader.readI64();\n\t\tcase \"i128\":\n\t\t\treturn reader.readI128();\n\t\tcase \"f32\":\n\t\t\treturn reader.readF32();\n\t\tcase \"f64\":\n\t\t\treturn reader.readF64();\n\t\tcase \"bool\":\n\t\t\treturn reader.readBool();\n\t\tcase \"string\":\n\t\t\treturn reader.readString();\n\t\tcase \"bytes\":\n\t\t\treturn reader.readVecBytes();\n\t\tcase \"unit\":\n\t\t\treturn undefined;\n\t\tcase \"fixedArray\":\n\t\t\treturn reader.readFixedArray(schema.length);\n\t\tcase \"pubkey\":\n\t\t\treturn reader.readFixedArray(32);\n\t\tcase \"vec\": {\n\t\t\tconst lengthBigInt = reader.readU64();\n\t\t\tif (lengthBigInt > BigInt(Number.MAX_SAFE_INTEGER)) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Vec length ${lengthBigInt} exceeds safe integer range`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst length = Number(lengthBigInt);\n\t\t\tconst result: unknown[] = [];\n\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\tresult.push(readValue(reader, schema.element));\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t\tcase \"option\": {\n\t\t\tconst hasValue = reader.readU8();\n\t\t\tif (hasValue === 0) return null;\n\t\t\tif (hasValue !== 1) {\n\t\t\t\tthrow new Error(`Invalid option discriminant: ${hasValue}`);\n\t\t\t}\n\t\t\treturn readValue(reader, schema.inner);\n\t\t}\n\t\tcase \"tuple\": {\n\t\t\tconst result: unknown[] = [];\n\t\t\tfor (const elementSchema of schema.elements) {\n\t\t\t\tresult.push(readValue(reader, elementSchema));\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t\tcase \"struct\": {\n\t\t\tconst result: Record<string, unknown> = {};\n\t\t\tfor (const field of schema.fields) {\n\t\t\t\tresult[field.name] = readValue(reader, field.schema);\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t\tcase \"enum\": {\n\t\t\tconst variantIndex = reader.readVariant();\n\t\t\tif (variantIndex >= schema.variants.length) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Invalid variant index: ${variantIndex}, max: ${schema.variants.length - 1}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst variant = schema.variants[variantIndex];\n\t\t\tif (variant.schema === null) {\n\t\t\t\treturn { variant: variant.name };\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tvariant: variant.name,\n\t\t\t\tvalue: readValue(reader, variant.schema),\n\t\t\t};\n\t\t}\n\t\tcase \"map\": {\n\t\t\tconst lengthBigInt = reader.readU64();\n\t\t\tif (lengthBigInt > BigInt(Number.MAX_SAFE_INTEGER)) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Map length ${lengthBigInt} exceeds safe integer range`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst length = Number(lengthBigInt);\n\t\t\tconst map = new Map<unknown, unknown>();\n\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\tconst key = readValue(reader, schema.key);\n\t\t\t\tconst value = readValue(reader, schema.value);\n\t\t\t\tmap.set(key, value);\n\t\t\t}\n\t\t\treturn map;\n\t\t}\n\t\tdefault: {\n\t\t\t// Exhaustive check - TypeScript will error if a case is missing\n\t\t\tconst _exhaustive: never = schema;\n\t\t\tthrow new Error(\n\t\t\t\t`Unknown schema type: ${(_exhaustive as BincodeSchema).type}`,\n\t\t\t);\n\t\t}\n\t}\n}\n\n// ========== Type Inference Helpers ==========\n\n/**\n * Infer TypeScript type from schema (for documentation purposes)\n *\n * Usage:\n * const mySchema = Schema.struct([...]);\n * type MyType = InferSchema<typeof mySchema>;\n */\nexport type InferSchema<S extends BincodeSchema> = S extends { type: \"u8\" }\n\t? number\n\t: S extends { type: \"u16\" }\n\t\t? number\n\t\t: S extends { type: \"u32\" }\n\t\t\t? number\n\t\t\t: S extends { type: \"u64\" }\n\t\t\t\t? bigint\n\t\t\t\t: S extends { type: \"u128\" }\n\t\t\t\t\t? bigint\n\t\t\t\t\t: S extends { type: \"i8\" }\n\t\t\t\t\t\t? number\n\t\t\t\t\t\t: S extends { type: \"i16\" }\n\t\t\t\t\t\t\t? number\n\t\t\t\t\t\t\t: S extends { type: \"i32\" }\n\t\t\t\t\t\t\t\t? number\n\t\t\t\t\t\t\t\t: S extends { type: \"i64\" }\n\t\t\t\t\t\t\t\t\t? bigint\n\t\t\t\t\t\t\t\t\t: S extends { type: \"i128\" }\n\t\t\t\t\t\t\t\t\t\t? bigint\n\t\t\t\t\t\t\t\t\t\t: S extends { type: \"f32\" }\n\t\t\t\t\t\t\t\t\t\t\t? number\n\t\t\t\t\t\t\t\t\t\t\t: S extends { type: \"f64\" }\n\t\t\t\t\t\t\t\t\t\t\t\t? number\n\t\t\t\t\t\t\t\t\t\t\t\t: S extends { type: \"bool\" }\n\t\t\t\t\t\t\t\t\t\t\t\t\t? boolean\n\t\t\t\t\t\t\t\t\t\t\t\t\t: S extends { type: \"string\" }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? string\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: S extends { type: \"bytes\" }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? Uint8Array\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: S extends { type: \"unit\" }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: S extends { type: \"fixedArray\" }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? Uint8Array\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: S extends { type: \"pubkey\" }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? Uint8Array\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: S extends {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype: \"vec\";\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\telement: infer E;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? E extends BincodeSchema\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? InferSchema<E>[]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: S extends {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype: \"option\";\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tinner: infer I;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? I extends BincodeSchema\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? InferSchema<I> | null\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: unknown;\n",null,null,null,null,null,"// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n\tdeserialize,\n\tfield,\n\tfixedArray,\n\toption,\n\tserialize,\n\tvec,\n} from \"@dao-xyz/borsh\";\n\n/**\n * Serializes data using Borsh (Binary Object Representation Serializer for Hashing) encoding.\n *\n * Borsh is efficient for complex types like enums, Options, vectors, and nested structs.\n * Use the exported decorators (@field, @option, @vec) to define your data structures.\n *\n * @param data - Data object to serialize\n * @returns Serialized bytes\n *\n * @example\n * ```typescript\n * import { serializeBorsh, field, option } from '@rialo/ts-cdk';\n *\n * class SwapInstruction {\n * @field({ type: 'u8' })\n * instruction: number;\n *\n * @field({ type: 'u64' })\n * amountIn: bigint;\n *\n * @field({ type: option('u64') })\n * minAmountOut?: bigint;\n * }\n *\n * const data = serializeBorsh(new SwapInstruction({\n * instruction: 1,\n * amountIn: 1000n,\n * minAmountOut: 900n,\n * }));\n * ```\n */\nexport function serializeBorsh<T>(data: T): Uint8Array {\n\treturn serialize(data);\n}\n\n/**\n * Deserializes Borsh-encoded data into a typed object.\n *\n * @param data - Borsh-encoded bytes\n * @param type - Class constructor for the target type\n * @returns Deserialized object instance\n */\nexport function deserializeBorsh<T>(data: Uint8Array, type: new () => T): T {\n\treturn deserialize(data, type);\n}\n\n// Re-export Borsh decorators for convenience\nexport { field, fixedArray, option, vec };\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Account metadata table for deduplication and sorting.\n * Avoids: Complex account sorting logic scattered throughout builder\n */\n\nimport type { PublicKey } from \"../crypto\";\nimport type { AccountMeta, MessageHeader } from \"./types\";\n\n/**\n * Internal account entry with aggregated metadata.\n */\ninterface AccountEntry {\n\tpubkey: PublicKey;\n\tisSigner: boolean;\n\tisWritable: boolean;\n}\n\n/**\n * Manages account deduplication and sorting for transaction messages.\n *\n * Accounts are sorted according to these rules:\n * 1. Signer + writable accounts first\n * 2. Then signer + readonly accounts\n * 3. Then non-signer + writable accounts\n * 4. Finally non-signer + readonly accounts\n * 5. Within each group, sort by public key bytes\n *\n * This matches Solana's account sorting rules for compatibility.\n */\nexport class AccountMetaTable {\n\tprivate readonly accounts: Map<string, AccountEntry> = new Map();\n\tprivate readonly accountOrder: string[] = [];\n\tprivate payerKey: string | null = null;\n\n\t/**\n\t * Set the fee payer for this transaction.\n\t * The fee payer is always pinned at index 0 in the sorted account list,\n\t * regardless of lexicographic ordering. This matches Solana's invariant\n\t * that account_keys[0] is always the fee payer.\n\t */\n\tsetFeePayer(pubkey: PublicKey): void {\n\t\tthis.payerKey = pubkey.toString();\n\t\tthis.add({ pubkey, isSigner: true, isWritable: true });\n\t}\n\n\t/**\n\t * Add or update an account in the table.\n\t * If account already exists, merges signer/writable flags (OR operation).\n\t */\n\tadd(meta: AccountMeta): void {\n\t\tconst key = meta.pubkey.toString();\n\n\t\tif (this.accounts.has(key)) {\n\t\t\t// Merge with existing entry (OR flags)\n\t\t\t// biome-ignore lint/style/noNonNullAssertion: we know the key is in the map\n\t\t\tconst existing = this.accounts.get(key)!;\n\t\t\texisting.isSigner ||= meta.isSigner;\n\t\t\texisting.isWritable ||= meta.isWritable;\n\t\t} else {\n\t\t\t// New entry\n\t\t\tthis.accounts.set(key, {\n\t\t\t\tpubkey: meta.pubkey,\n\t\t\t\tisSigner: meta.isSigner,\n\t\t\t\tisWritable: meta.isWritable,\n\t\t\t});\n\t\t\tthis.accountOrder.push(key);\n\t\t}\n\t}\n\n\t/**\n\t * Add multiple accounts at once.\n\t */\n\taddAll(metas: readonly AccountMeta[]): void {\n\t\tfor (const meta of metas) {\n\t\t\tthis.add(meta);\n\t\t}\n\t}\n\n\t/**\n\t * Get the index of an account in the sorted order.\n\t * Returns -1 if account not found.\n\t */\n\tgetIndex(pubkey: PublicKey): number {\n\t\tconst sorted = this.getSortedAccounts();\n\t\treturn sorted.findIndex((entry) => entry.pubkey.equals(pubkey));\n\t}\n\n\t/**\n\t * Get sorted accounts according to transaction rules.\n\t */\n\tgetSortedAccounts(): readonly AccountEntry[] {\n\t\t// biome-ignore lint/style/noNonNullAssertion: we know the key is in the map\n\t\tconst entries = this.accountOrder.map((key) => this.accounts.get(key)!);\n\n\t\t// Separate fee payer from the rest so it can be pinned at index 0.\n\t\t// This matches the Rust CDK and Solana's invariant: account_keys[0] == fee_payer.\n\t\tlet payerEntry: AccountEntry | null = null;\n\t\tconst rest: AccountEntry[] = [];\n\t\tfor (const entry of entries) {\n\t\t\tif (this.payerKey !== null && entry.pubkey.toString() === this.payerKey) {\n\t\t\t\tpayerEntry = entry;\n\t\t\t} else {\n\t\t\t\trest.push(entry);\n\t\t\t}\n\t\t}\n\n\t\trest.sort((a, b): number => {\n\t\t\t// Priority 1: Signer + writable\n\t\t\tconst aPriority =\n\t\t\t\ta.isSigner && a.isWritable ? 0 : a.isSigner ? 1 : a.isWritable ? 2 : 3;\n\t\t\tconst bPriority =\n\t\t\t\tb.isSigner && b.isWritable ? 0 : b.isSigner ? 1 : b.isWritable ? 2 : 3;\n\n\t\t\tif (aPriority !== bPriority) {\n\t\t\t\treturn aPriority - bPriority;\n\t\t\t}\n\n\t\t\t// Priority 2: Sort by public key bytes\n\t\t\tconst aBytes = a.pubkey.toBytes();\n\t\t\tconst bBytes = b.pubkey.toBytes();\n\n\t\t\tfor (let i = 0; i < 32; i++) {\n\t\t\t\tif (aBytes[i] !== bBytes[i]) {\n\t\t\t\t\treturn aBytes[i] - bBytes[i];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t});\n\n\t\t// Pin fee payer at index 0\n\t\tif (payerEntry !== null) {\n\t\t\treturn [payerEntry, ...rest];\n\t\t}\n\t\treturn rest;\n\t}\n\n\t/**\n\t * Get the message header based on sorted accounts.\n\t */\n\tgetHeader(): MessageHeader {\n\t\tconst sorted = this.getSortedAccounts();\n\n\t\tlet numRequiredSignatures = 0;\n\t\tlet numReadonlySignedAccounts = 0;\n\t\tlet numReadonlyUnsignedAccounts = 0;\n\n\t\tfor (const entry of sorted) {\n\t\t\tif (entry.isSigner) {\n\t\t\t\tnumRequiredSignatures++;\n\t\t\t\tif (!entry.isWritable) {\n\t\t\t\t\tnumReadonlySignedAccounts++;\n\t\t\t\t}\n\t\t\t} else if (!entry.isWritable) {\n\t\t\t\tnumReadonlyUnsignedAccounts++;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tnumRequiredSignatures,\n\t\t\tnumReadonlySignedAccounts,\n\t\t\tnumReadonlyUnsignedAccounts,\n\t\t};\n\t}\n\n\t/**\n\t * Get sorted public keys.\n\t */\n\tgetPublicKeys(): readonly PublicKey[] {\n\t\treturn this.getSortedAccounts().map((entry) => entry.pubkey);\n\t}\n\n\t/**\n\t * Get number of accounts in table.\n\t */\n\tsize(): number {\n\t\treturn this.accounts.size;\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Error codes for transaction operations.\n */\nexport enum TransactionErrorCode {\n\t// Building errors\n\tINVALID_INSTRUCTION = \"INVALID_INSTRUCTION\",\n\tINVALID_ACCOUNT_META = \"INVALID_ACCOUNT_META\",\n\tNO_INSTRUCTIONS = \"NO_INSTRUCTIONS\",\n\tDUPLICATE_ACCOUNT = \"DUPLICATE_ACCOUNT\",\n\n\t// Signing errors\n\tMISSING_SIGNATURE = \"MISSING_SIGNATURE\",\n\tINVALID_SIGNATURE = \"INVALID_SIGNATURE\",\n\tSIGNATURE_OUT_OF_BOUNDS = \"SIGNATURE_OUT_OF_BOUNDS\",\n\tSIGNER_NOT_FOUND = \"SIGNER_NOT_FOUND\",\n\tALREADY_SIGNED = \"ALREADY_SIGNED\",\n\n\t// Serialization errors\n\tINVALID_MESSAGE_FORMAT = \"INVALID_MESSAGE_FORMAT\",\n\tINSUFFICIENT_DATA = \"INSUFFICIENT_DATA\",\n\tSERIALIZATION_FAILED = \"SERIALIZATION_FAILED\",\n\n\t// Simulation errors\n\tSIMULATION_FAILED = \"SIMULATION_FAILED\",\n\tINSUFFICIENT_FUNDS = \"INSUFFICIENT_FUNDS\",\n\tBLOCKHASH_EXPIRED = \"BLOCKHASH_EXPIRED\",\n}\n\n/**\n * Error class for transaction operations with structured error information.\n */\nexport class TransactionError extends Error {\n\tconstructor(\n\t\tpublic readonly code: TransactionErrorCode,\n\t\tmessage: string,\n\t\tpublic readonly details?: Record<string, unknown>,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"TransactionError\";\n\t}\n\n\tstatic noInstructions(): TransactionError {\n\t\treturn new TransactionError(\n\t\t\tTransactionErrorCode.NO_INSTRUCTIONS,\n\t\t\t\"Transaction must contain at least one instruction. Use addInstruction() to add instructions.\",\n\t\t);\n\t}\n\n\tstatic signerNotFound(pubkey: string): TransactionError {\n\t\treturn new TransactionError(\n\t\t\tTransactionErrorCode.SIGNER_NOT_FOUND,\n\t\t\t`Public key ${pubkey} is not a required signer for this transaction. Check that the account is marked as a signer in the instruction.`,\n\t\t\t{ pubkey },\n\t\t);\n\t}\n\n\tstatic missingSignature(index: number, pubkey: string): TransactionError {\n\t\treturn new TransactionError(\n\t\t\tTransactionErrorCode.MISSING_SIGNATURE,\n\t\t\t`Missing signature for signer ${index} (${pubkey}). Transaction requires ${index + 1} signatures.`,\n\t\t\t{ index, pubkey },\n\t\t);\n\t}\n\n\tstatic simulationFailed(logs: string[], error: string): TransactionError {\n\t\treturn new TransactionError(\n\t\t\tTransactionErrorCode.SIMULATION_FAILED,\n\t\t\t`Transaction simulation failed: ${error}`,\n\t\t\t{ logs, error },\n\t\t);\n\t}\n\n\tstatic insufficientFunds(\n\t\trequired: bigint,\n\t\tavailable: bigint,\n\t): TransactionError {\n\t\treturn new TransactionError(\n\t\t\tTransactionErrorCode.INSUFFICIENT_FUNDS,\n\t\t\t`Insufficient funds: need ${required}, have ${available}`,\n\t\t\t{ required: required.toString(), available: available.toString() },\n\t\t);\n\t}\n\n\ttoJSON(): {\n\t\tcode: TransactionErrorCode;\n\t\tmessage: string;\n\t\tdetails?: Record<string, unknown>;\n\t} {\n\t\treturn {\n\t\t\tcode: this.code,\n\t\t\tmessage: this.message,\n\t\t\tdetails: this.details,\n\t\t};\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { PublicKey } from \"../../crypto\";\nimport { serializeBorsh } from \"../../serialization\";\nimport type { AccountMeta, Instruction } from \"../types\";\n\n/**\n * Create an instruction with Borsh-encoded data.\n *\n * @example\n * ```typescript\n * // Define your instruction data class\n * class MyInstructionData {\n * @field({ type: 'u8' })\n * instruction: number;\n *\n * @field({ type: 'u64' })\n * amount: bigint;\n *\n * @field({ type: option('string') })\n * memo?: string;\n * }\n *\n * // Create instruction\n * const instruction = createBorshInstruction({\n * programId: myProgramId,\n * accounts: [\n * { pubkey: account1, isSigner: true, isWritable: true },\n * { pubkey: account2, isSigner: false, isWritable: false },\n * ],\n * data: new MyInstructionData({\n * instruction: 5,\n * amount: 1000n,\n * memo: \"Hello, Rialo!\",\n * }),\n * });\n * ```\n */\nexport function createBorshInstruction<T>(params: {\n\tprogramId: PublicKey;\n\taccounts: AccountMeta[];\n\tdata: T;\n}): Instruction {\n\treturn {\n\t\tprogramId: params.programId,\n\t\taccounts: params.accounts,\n\t\tdata: serializeBorsh(params.data),\n\t};\n}\n\n/**\n * Helper for creating Borsh-serialized instruction data from a plain object.\n *\n * This is useful when you don't want to define a class with decorators.\n *\n * @example\n * ```typescript\n * const data = encodeBorshData({\n * instruction: { type: 'u8', value: 1 },\n * amount: { type: 'u64', value: 1000n },\n * recipient: { type: fixedArray('u8', 32), value: recipientBytes },\n * });\n * ```\n */\nexport function encodeBorshData(\n\t_schema: Record<string, { type: unknown; value: unknown }>,\n): Uint8Array {\n\t// TODO: Implement this\n\tthrow new Error(\"Use class-based Borsh serialization with decorators\");\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { SYSTEM_PROGRAM_ID } from \"../../constants\";\nimport { PublicKey } from \"../../crypto\";\nimport { BincodeWriter } from \"../../serialization/bincode\";\nimport type { Instruction } from \"../types\";\n\n/**\n * System program instruction types.\n */\nexport enum SystemInstruction {\n\tCreateAccount = 0,\n\tAssign = 1,\n\tTransfer = 2,\n\tCreateAccountWithSeed = 3,\n\tAdvanceNonceAccount = 4,\n\tWithdrawNonceAccount = 5,\n\tInitializeNonceAccount = 6,\n\tAuthorizeNonceAccount = 7,\n\tAllocate = 8,\n\tAllocateWithSeed = 9,\n\tAssignWithSeed = 10,\n\tTransferWithSeed = 11,\n}\n\n/**\n * Create a transfer instruction.\n *\n * Transfers native tokens from one account to another.\n *\n * @param from - Source account (must be signer)\n * @param to - Destination account\n * @param amount - Amount to transfer in smallest denomination (kelvins)\n *\n * @example\n * ```typescript\n * const instruction = transferInstruction(fromPubkey, toPubkey, 1_000_000n);\n *\n * const tx = TransactionBuilder.create()\n * .setPayer(fromPubkey)\n * .addInstruction(instruction)\n * .build();\n * ```\n */\nexport function transferInstruction(\n\tfrom: PublicKey,\n\tto: PublicKey,\n\tamount: bigint,\n): Instruction {\n\t// Instruction data: bincode serialization format\n\t// - 4 bytes: variant index as u32 little-endian (2 for Transfer)\n\t// - 8 bytes: amount as u64 little-endian\n\tconst writer = new BincodeWriter(12);\n\twriter.writeVariant(SystemInstruction.Transfer);\n\twriter.writeU64(amount);\n\n\treturn {\n\t\tprogramId: PublicKey.fromString(SYSTEM_PROGRAM_ID),\n\t\taccounts: [\n\t\t\t{ pubkey: from, isSigner: true, isWritable: true },\n\t\t\t{ pubkey: to, isSigner: false, isWritable: true },\n\t\t],\n\t\tdata: writer.toBytes(),\n\t};\n}\n\n/**\n * Create an account creation instruction.\n *\n * @param from - Funding account (must be signer)\n * @param newAccount - New account to create (must be signer)\n * @param kelvins - Initial balance for new account\n * @param space - Number of bytes to allocate for account data\n * @param owner - Program that will own the new account\n */\nexport function createAccount(\n\tfrom: PublicKey,\n\tnewAccount: PublicKey,\n\tkelvins: bigint,\n\tspace: bigint,\n\towner: PublicKey,\n): Instruction {\n\t// Instruction data: bincode serialization format\n\t// - 4 bytes: variant index as u32 little-endian (0 for CreateAccount)\n\t// - 8 bytes: kelvins as u64 little-endian\n\t// - 8 bytes: space as u64 little-endian\n\t// - 32 bytes: owner public key\n\tconst writer = new BincodeWriter(52);\n\twriter.writeVariant(SystemInstruction.CreateAccount);\n\twriter.writeU64(kelvins);\n\twriter.writeU64(space);\n\twriter.writeBytes(owner.toBytes());\n\n\treturn {\n\t\tprogramId: PublicKey.fromString(SYSTEM_PROGRAM_ID),\n\t\taccounts: [\n\t\t\t{ pubkey: from, isSigner: true, isWritable: true },\n\t\t\t{ pubkey: newAccount, isSigner: true, isWritable: true },\n\t\t],\n\t\tdata: writer.toBytes(),\n\t};\n}\n\n/**\n * Create an allocate instruction.\n *\n * Allocates space for an account's data. The account must be owned by\n * the system program and must sign the transaction.\n *\n * @param account - Account to allocate space for (must be signer)\n * @param space - Number of bytes to allocate\n */\nexport function allocateInstruction(\n\taccount: PublicKey,\n\tspace: bigint,\n): Instruction {\n\t// Instruction data: bincode serialization format\n\t// - 4 bytes: variant index as u32 little-endian (8 for Allocate)\n\t// - 8 bytes: space as u64 little-endian\n\tconst writer = new BincodeWriter(12);\n\twriter.writeVariant(SystemInstruction.Allocate);\n\twriter.writeU64(space);\n\n\treturn {\n\t\tprogramId: PublicKey.fromString(SYSTEM_PROGRAM_ID),\n\t\taccounts: [\n\t\t\t{ pubkey: account, isSigner: true, isWritable: true },\n\t\t],\n\t\tdata: writer.toBytes(),\n\t};\n}\n\n/**\n * Create an assign instruction.\n *\n * Changes the owner of an account. The account must currently be owned\n * by the system program and must sign the transaction.\n *\n * @param account - Account to reassign (must be signer)\n * @param owner - New owner program\n */\nexport function assignInstruction(\n\taccount: PublicKey,\n\towner: PublicKey,\n): Instruction {\n\t// Instruction data: bincode serialization format\n\t// - 4 bytes: variant index as u32 little-endian (1 for Assign)\n\t// - 32 bytes: owner public key\n\tconst writer = new BincodeWriter(36);\n\twriter.writeVariant(SystemInstruction.Assign);\n\twriter.writeBytes(owner.toBytes());\n\n\treturn {\n\t\tprogramId: PublicKey.fromString(SYSTEM_PROGRAM_ID),\n\t\taccounts: [\n\t\t\t{ pubkey: account, isSigner: true, isWritable: true },\n\t\t],\n\t\tdata: writer.toBytes(),\n\t};\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { PublicKey } from \"../crypto\";\nimport { TransactionError, TransactionErrorCode } from \"./errors\";\nimport type { CompiledInstruction, MessageHeader } from \"./types\";\n\n/**\n * An unsigned transaction message ready to be signed.\n *\n * This is the data that gets signed by transaction signers.\n * It's immutable to prevent accidental modification after creation.\n *\n * @example\n * ```typescript\n * const message = MessageBuilder.create()\n * .setPayer(payer)\n * .setValidFrom(validFrom)\n * .addInstruction(transferInstruction)\n * .build();\n *\n * // Serialize for signing\n * const messageBytes = message.serialize();\n * ```\n */\nexport class Message {\n\t/** Message header with signature requirements */\n\tpublic readonly header: MessageHeader;\n\n\t/** All account public keys referenced in the transaction */\n\tpublic readonly accountKeys: readonly PublicKey[];\n\n\t/** Transaction valid from (milliseconds since Unix epoch) */\n\tvalidFrom?: bigint;\n\n\t/** Config hash prefix for replay protection across chains */\n\tpublic readonly configHashPrefix: bigint;\n\n\t/** Whether the transaction should use OCC (optimistic concurrency control) scheduling */\n\tpublic readonly occ: boolean;\n\n\t/** Compiled instructions with account indices */\n\tpublic readonly instructions: readonly CompiledInstruction[];\n\n\t/** Cached serialized bytes */\n\tprivate serializedCache?: Uint8Array;\n\n\tconstructor(\n\t\theader: MessageHeader,\n\t\taccountKeys: readonly PublicKey[],\n\t\tvalidFrom: bigint,\n\t\tconfigHashPrefix: bigint,\n\t\tocc: boolean,\n\t\tinstructions: readonly CompiledInstruction[],\n\t) {\n\t\tthis.header = Object.freeze({ ...header });\n\t\tthis.accountKeys = Object.freeze([...accountKeys]);\n\t\tthis.validFrom = validFrom;\n\t\tthis.configHashPrefix = configHashPrefix;\n\t\tthis.occ = occ;\n\t\tthis.instructions = Object.freeze(\n\t\t\tinstructions.map((ix) => Object.freeze({ ...ix })),\n\t\t);\n\t}\n\n\t/**\n\t * Serialize message to bytes for signing.\n\t * Result is cached for performance.\n\t */\n\tserialize(): Uint8Array {\n\t\tif (!this.serializedCache) {\n\t\t\tthis.serializedCache = this.serializeInternal();\n\t\t}\n\t\treturn new Uint8Array(this.serializedCache); // Return copy\n\t}\n\n\t/**\n\t * Deserialize a message from wire format.\n\t *\n\t * @param data - Serialized message bytes\n\t * @returns Deserialized Message\n\t */\n\tstatic deserialize(data: Uint8Array): Message {\n\t\tif (data.length < 3) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\t\"Insufficient data for message header\",\n\t\t\t);\n\t\t}\n\n\t\tlet cursor = 0;\n\n\t\t// Deserialize header (3 bytes)\n\t\tconst header: MessageHeader = {\n\t\t\tnumRequiredSignatures: data[cursor++],\n\t\t\tnumReadonlySignedAccounts: data[cursor++],\n\t\t\tnumReadonlyUnsignedAccounts: data[cursor++],\n\t\t};\n\n\t\t// Deserialize account keys with compact-u16 length prefix\n\t\tconst [accountKeysLength, newCursor1] = deserializeCompactU16(data, cursor);\n\t\tcursor = newCursor1;\n\n\t\tconst accountKeys: PublicKey[] = [];\n\t\tfor (let i = 0; i < accountKeysLength; i++) {\n\t\t\tif (data.length < cursor + 32) {\n\t\t\t\tthrow new TransactionError(\n\t\t\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\t\t`Insufficient data for account key ${i}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst keyBytes = data.slice(cursor, cursor + 32);\n\t\t\taccountKeys.push(PublicKey.fromBytes(keyBytes));\n\t\t\tcursor += 32;\n\t\t}\n\n\t\t// Deserialize recent valid from (8 bytes)\n\t\tif (data.length < cursor + 8) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\t\"Insufficient data for validFrom\",\n\t\t\t);\n\t\t}\n\t\tconst validFromBytes = data.slice(cursor, cursor + 8);\n\t\tconst validFrom = BigInt.asUintN(\n\t\t\t64,\n\t\t\tnew DataView(validFromBytes.buffer).getBigUint64(0, true),\n\t\t);\n\t\tcursor += 8;\n\n\t\t// Deserialize config hash prefix (8 bytes)\n\t\tif (data.length < cursor + 8) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\t\"Insufficient data for configHashPrefix\",\n\t\t\t);\n\t\t}\n\t\tconst configHashPrefixBytes = data.slice(cursor, cursor + 8);\n\t\tconst configHashPrefix = BigInt.asUintN(\n\t\t\t64,\n\t\t\tnew DataView(configHashPrefixBytes.buffer).getBigUint64(0, true),\n\t\t);\n\t\tcursor += 8;\n\n\t\t// Deserialize occ flag (1 byte)\n\t\tif (data.length < cursor + 1) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\t\"Insufficient data for occ flag\",\n\t\t\t);\n\t\t}\n\t\tconst occ = data[cursor++] !== 0;\n\n\t\t// Deserialize instructions with compact-u16 length prefix\n\t\tconst [instructionsLength, newCursor2] = deserializeCompactU16(\n\t\t\tdata,\n\t\t\tcursor,\n\t\t);\n\t\tcursor = newCursor2;\n\n\t\tconst instructions: CompiledInstruction[] = [];\n\t\tfor (let i = 0; i < instructionsLength; i++) {\n\t\t\t// Read program ID index\n\t\t\tif (data.length < cursor + 1) {\n\t\t\t\tthrow new TransactionError(\n\t\t\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\t\t`Insufficient data for instruction ${i} program index`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst programIdIndex = data[cursor++];\n\n\t\t\t// Read account key indexes array\n\t\t\tconst [accountIndexesLength, newCursor3] = deserializeCompactU16(\n\t\t\t\tdata,\n\t\t\t\tcursor,\n\t\t\t);\n\t\t\tcursor = newCursor3;\n\n\t\t\tconst accountKeyIndexes: number[] = [];\n\t\t\tfor (let j = 0; j < accountIndexesLength; j++) {\n\t\t\t\tif (data.length < cursor + 1) {\n\t\t\t\t\tthrow new TransactionError(\n\t\t\t\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\t\t\t`Insufficient data for instruction ${i} account index ${j}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\taccountKeyIndexes.push(data[cursor++]);\n\t\t\t}\n\n\t\t\t// Read instruction data array\n\t\t\tconst [dataLength, newCursor4] = deserializeCompactU16(data, cursor);\n\t\t\tcursor = newCursor4;\n\n\t\t\tif (data.length < cursor + dataLength) {\n\t\t\t\tthrow new TransactionError(\n\t\t\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\t\t`Insufficient data for instruction ${i} data`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst instructionData = data.slice(cursor, cursor + dataLength);\n\t\t\tcursor += dataLength;\n\n\t\t\tinstructions.push({\n\t\t\t\tprogramIdIndex,\n\t\t\t\taccountKeyIndexes: Object.freeze(accountKeyIndexes),\n\t\t\t\tdata: instructionData,\n\t\t\t});\n\t\t}\n\n\t\treturn new Message(header, accountKeys, validFrom, configHashPrefix, occ, instructions);\n\t}\n\n\tprivate serializeInternal(): Uint8Array {\n\t\tconst buffer: number[] = [];\n\n\t\t// Serialize header (3 bytes)\n\t\tbuffer.push(this.header.numRequiredSignatures);\n\t\tbuffer.push(this.header.numReadonlySignedAccounts);\n\t\tbuffer.push(this.header.numReadonlyUnsignedAccounts);\n\n\t\t// Serialize account keys with compact-u16 length prefix\n\t\tthis.serializeCompactArray(buffer, this.accountKeys, (buf, key) => {\n\t\t\tbuf.push(...key.toBytes());\n\t\t});\n\n\t\t// Serialize recent valid from (8 bytes, little-endian to match Rust's bincode)\n\t\tconst validFromBuffer = new ArrayBuffer(8);\n\t\tnew DataView(validFromBuffer).setBigUint64(\n\t\t\t0,\n\t\t\tthis.validFrom ?? BigInt(0),\n\t\t\ttrue,\n\t\t);\n\t\tbuffer.push(...new Uint8Array(validFromBuffer));\n\n\t\t// Serialize config hash prefix (8 bytes, little-endian)\n\t\tconst configHashPrefixBuffer = new ArrayBuffer(8);\n\t\tnew DataView(configHashPrefixBuffer).setBigUint64(\n\t\t\t0,\n\t\t\tthis.configHashPrefix,\n\t\t\ttrue,\n\t\t);\n\t\tbuffer.push(...new Uint8Array(configHashPrefixBuffer));\n\n\t\t// Serialize occ flag (1 byte, bincode bool)\n\t\tbuffer.push(this.occ ? 1 : 0);\n\n\t\t// Serialize instructions with compact-u16 length prefix\n\t\tthis.serializeCompactArray(buffer, this.instructions, (buf, ix) => {\n\t\t\t// Program ID index (1 byte)\n\t\t\tbuf.push(ix.programIdIndex);\n\n\t\t\t// Account indexes array\n\t\t\tthis.serializeCompactArray(buf, ix.accountKeyIndexes, (b, idx) => {\n\t\t\t\tb.push(idx);\n\t\t\t});\n\n\t\t\t// Instruction data array\n\t\t\tthis.serializeCompactArray(buf, Array.from(ix.data), (b, byte) => {\n\t\t\t\tb.push(byte);\n\t\t\t});\n\t\t});\n\n\t\treturn new Uint8Array(buffer);\n\t}\n\n\tprivate serializeCompactArray<T>(\n\t\tbuffer: number[],\n\t\titems: readonly T[],\n\t\tserializeItem: (buf: number[], item: T) => void,\n\t): void {\n\t\t// Serialize length as compact-u16\n\t\tthis.serializeCompactU16(buffer, items.length);\n\n\t\t// Serialize each item\n\t\tfor (const item of items) {\n\t\t\tserializeItem(buffer, item);\n\t\t}\n\t}\n\n\tprivate serializeCompactU16(buffer: number[], value: number): void {\n\t\tif (value < 0 || value > 0xffff) {\n\t\t\tthrow new Error(`Value out of range for compact-u16: ${value}`);\n\t\t}\n\n\t\t// Single byte (0-127)\n\t\tif (value <= 0x7f) {\n\t\t\tbuffer.push(value);\n\t\t\treturn;\n\t\t}\n\n\t\t// Two bytes (128-16383)\n\t\tif (value <= 0x3fff) {\n\t\t\tbuffer.push((value & 0x7f) | 0x80);\n\t\t\tbuffer.push((value >> 7) & 0x7f);\n\t\t\treturn;\n\t\t}\n\n\t\t// Three bytes (16384-65535)\n\t\tbuffer.push((value & 0x7f) | 0x80);\n\t\tbuffer.push(((value >> 7) & 0x7f) | 0x80);\n\t\tbuffer.push((value >> 14) & 0xff);\n\t}\n\n\t/**\n\t * Get all signers required for this message.\n\t */\n\tgetSigners(): readonly PublicKey[] {\n\t\treturn this.accountKeys.slice(0, this.header.numRequiredSignatures);\n\t}\n\n\t/**\n\t * Check if a public key is a required signer.\n\t */\n\tisSignerRequired(pubkey: PublicKey): boolean {\n\t\treturn this.getSigners().some((signer) => signer.equals(pubkey));\n\t}\n\n\t/**\n\t * Get the index of a signer in the signers array.\n\t * Returns -1 if not a signer.\n\t */\n\tgetSignerIndex(pubkey: PublicKey): number {\n\t\treturn this.getSigners().findIndex((signer) => signer.equals(pubkey));\n\t}\n}\n\nfunction deserializeCompactU16(\n\tdata: Uint8Array,\n\tcurrentCursor: number,\n): [number, number] {\n\tlet cursor = currentCursor;\n\tif (cursor >= data.length) {\n\t\tthrow new TransactionError(\n\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\"Insufficient data for compact-u16\",\n\t\t);\n\t}\n\n\tconst firstByte = data[cursor++];\n\n\t// Single byte encoding (0-127)\n\tif ((firstByte & 0x80) === 0) {\n\t\treturn [firstByte, cursor];\n\t}\n\n\t// Multi-byte encoding\n\tif (cursor >= data.length) {\n\t\tthrow new TransactionError(\n\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\"Incomplete compact-u16 encoding\",\n\t\t);\n\t}\n\n\tconst secondByte = data[cursor++];\n\n\t// Two-byte encoding (128-16383)\n\tif ((secondByte & 0x80) === 0) {\n\t\treturn [(firstByte & 0x7f) | (secondByte << 7), cursor];\n\t}\n\n\t// Three-byte encoding (16384-65535)\n\tif (cursor >= data.length) {\n\t\tthrow new TransactionError(\n\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\"Incomplete compact-u16 encoding\",\n\t\t);\n\t}\n\n\tconst thirdByte = data[cursor++];\n\tconst value =\n\t\t(firstByte & 0x7f) | ((secondByte & 0x7f) << 7) | (thirdByte << 14);\n\n\treturn [value, cursor];\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n// transaction/transaction.ts\n// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { SIGNATURE_LENGTH } from \"../constants\";\nimport type { Keypair, PublicKey, Signature } from \"../crypto\";\nimport { deserializeCompactU16, writeCompactU16 } from \"../serialization\";\nimport type { Signer } from \"../signer\";\nimport { TransactionError, TransactionErrorCode } from \"./errors\";\nimport { Message } from \"./message\";\n\n/**\n * A transaction with zero or more signatures.\n *\n * Transactions are immutable - signing methods return new instances.\n * This prevents accidental modification and signature tampering.\n *\n * @example\n * ```typescript\n * // Simple signing\n * const tx = builder.build();\n * const signed = tx.sign(keypair);\n *\n * // Method chaining\n * const signed = tx\n * .sign(keypair1)\n * .sign(keypair2)\n * .sign(keypair3);\n *\n * // Multi-sig convenience\n * const signed = tx.signAll([keypair1, keypair2, keypair3]);\n * ```\n */\nexport class Transaction {\n\t/** The unsigned message */\n\tprivate readonly message: Message;\n\n\t/** Signatures (64 bytes each), aligned with message.header.numRequiredSignatures */\n\tprivate readonly signatures: readonly Uint8Array[];\n\n\t// Private constructor - use static factories\n\tprivate constructor(message: Message, signatures: readonly Uint8Array[]) {\n\t\tthis.message = message;\n\n\t\t// Deep copy signatures to prevent external mutation\n\t\tthis.signatures = signatures.map((sig) => new Uint8Array(sig));\n\n\t\t// Validate signature count matches required signers\n\t\tif (signatures.length !== message.header.numRequiredSignatures) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.INVALID_SIGNATURE,\n\t\t\t\t`Signature count (${signatures.length}) doesn't match required signers (${message.header.numRequiredSignatures})`,\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Create an unsigned transaction from a message.\n\t * All signature slots are initialized to zero.\n\t *\n\t * @internal - Users should use TransactionBuilder instead\n\t */\n\tstatic fromMessage(message: Message): Transaction {\n\t\tconst numSignatures = message.header.numRequiredSignatures;\n\t\tconst signatures = Array.from(\n\t\t\t{ length: numSignatures },\n\t\t\t() => new Uint8Array(SIGNATURE_LENGTH),\n\t\t);\n\n\t\treturn new Transaction(message, signatures);\n\t}\n\n\t/**\n\t * Create transaction from message and existing signatures.\n\t * @internal\n\t */\n\tstatic fromMessageAndSignatures(\n\t\tmessage: Message,\n\t\tsignatures: readonly Uint8Array[],\n\t): Transaction {\n\t\treturn new Transaction(message, signatures);\n\t}\n\n\t/**\n\t * Deserialize a transaction from wire format.\n\t */\n\tstatic deserialize(data: Uint8Array): Transaction {\n\t\tif (data.length === 0) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.SERIALIZATION_FAILED,\n\t\t\t\t\"Cannot deserialize empty transaction data\",\n\t\t\t);\n\t\t}\n\n\t\tlet cursor = 0;\n\n\t\t// Deserialize signatures with compact-u16 length prefix\n\t\tconst [signaturesLength, newCursor] = deserializeCompactU16(data, cursor);\n\t\tcursor = newCursor;\n\n\t\tconst signatures: Uint8Array[] = [];\n\t\tfor (let i = 0; i < signaturesLength; i++) {\n\t\t\tif (data.length < cursor + SIGNATURE_LENGTH) {\n\t\t\t\tthrow new TransactionError(\n\t\t\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\t\t`Insufficient data for signature ${i}: need ${SIGNATURE_LENGTH} bytes at offset ${cursor}`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst signature = data.slice(cursor, cursor + SIGNATURE_LENGTH);\n\t\t\tsignatures.push(signature);\n\t\t\tcursor += SIGNATURE_LENGTH;\n\t\t}\n\n\t\t// Remaining data is the message\n\t\tif (cursor >= data.length) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\t\"No message data found after signatures\",\n\t\t\t);\n\t\t}\n\n\t\tconst messageBytes = data.slice(cursor);\n\t\tconst message = Message.deserialize(messageBytes);\n\n\t\treturn new Transaction(message, signatures);\n\t}\n\n\tgetMessage(): Message {\n\t\treturn this.message;\n\t}\n\n\t/**\n\t * Sign the transaction with a keypair.\n\t * Returns a NEW Transaction instance.\n\t *\n\t * @param keypair - Keypair to sign with\n\t * @returns New Transaction instance with signature added\n\t *\n\t * @example\n\t * ```typescript\n\t * const signedTx = tx.sign(keypair);\n\t * await client.sendTransaction(signedTx.serialize());\n\t * ```\n\t */\n\tsign(keypair: Keypair): Transaction {\n\t\tconst messageBytes = this.message.serialize();\n\t\tconst signature = keypair.sign(messageBytes);\n\t\treturn this.addSignatureForPubkey(keypair.publicKey, signature);\n\t}\n\n\t/**\n\t * Sign with multiple keypairs at once.\n\t * Returns a NEW Transaction instance.\n\t *\n\t * @example\n\t * ```typescript\n\t * const signed = tx.signAll([keypair1, keypair2, keypair3]);\n\t * ```\n\t */\n\tsignAll(keypairs: Keypair[]): Transaction {\n\t\tlet result: Transaction = this;\n\t\tfor (const keypair of keypairs) {\n\t\t\tresult = result.sign(keypair);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * Sign the transaction with a Signer interface (async).\n\t * Returns a NEW Transaction instance.\n\t *\n\t * @example\n\t * ```typescript\n\t * const signedTx = await tx.signWith(browserWallet);\n\t * ```\n\t */\n\tasync signWith(signer: Signer): Promise<Transaction> {\n\t\tconst pubkey = await signer.getPublicKey();\n\t\tconst messageBytes = this.message.serialize();\n\t\tconst signature = await signer.signMessage(messageBytes);\n\t\treturn this.addSignatureForPubkey(pubkey, signature);\n\t}\n\n\t/**\n\t * Sign with multiple signers.\n\t * Returns a NEW Transaction instance.\n\t */\n\tasync signAllWith(signers: Signer[]): Promise<Transaction> {\n\t\tlet result: Transaction = this;\n\t\tfor (const signer of signers) {\n\t\t\tresult = await result.signWith(signer);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * Partially sign the transaction (for multi-sig transactions).\n\t * Returns a NEW Transaction instance.\n\t *\n\t * @example\n\t * ```typescript\n\t * const signedTx = tx\n\t * .partialSign(signer1)\n\t * .partialSign(signer2);\n\t * ```\n\t */\n\tpartialSign(keypair: Keypair): Transaction {\n\t\treturn this.sign(keypair);\n\t}\n\n\t/**\n\t * Partially sign with a Signer interface (async).\n\t * Returns a NEW Transaction instance.\n\t */\n\tasync partialSignWith(signer: Signer): Promise<Transaction> {\n\t\treturn this.signWith(signer);\n\t}\n\n\t/**\n\t * Add a signature at a specific index.\n\t * Returns a NEW Transaction instance.\n\t *\n\t * Most users should use sign() or signAll() instead.\n\t */\n\taddSignature(index: number, signature: Signature | Uint8Array): Transaction {\n\t\tif (index < 0 || index >= this.signatures.length) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.SIGNATURE_OUT_OF_BOUNDS,\n\t\t\t\t`Signature index ${index} out of bounds (must be 0-${this.signatures.length - 1})`,\n\t\t\t);\n\t\t}\n\n\t\tconst sigBytes =\n\t\t\tsignature instanceof Uint8Array ? signature : signature.toBytes();\n\n\t\tif (sigBytes.length !== SIGNATURE_LENGTH) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.INVALID_SIGNATURE,\n\t\t\t\t`Signature must be ${SIGNATURE_LENGTH} bytes, got ${sigBytes.length}`,\n\t\t\t);\n\t\t}\n\n\t\t// Create NEW signatures array (immutable update)\n\t\tconst newSignatures = this.signatures.map((sig, i) =>\n\t\t\ti === index ? new Uint8Array(sigBytes) : new Uint8Array(sig),\n\t\t);\n\n\t\t// Return NEW Transaction instance\n\t\treturn new Transaction(this.message, newSignatures);\n\t}\n\n\t/**\n\t * Add a signature for a specific public key.\n\t * Returns a NEW Transaction instance.\n\t *\n\t * Most users should use sign() or signAll() instead.\n\t */\n\taddSignatureForPubkey(\n\t\tpubkey: PublicKey,\n\t\tsignature: Signature | Uint8Array,\n\t): Transaction {\n\t\tconst signerIndex = this.message.getSignerIndex(pubkey);\n\n\t\tif (signerIndex === -1) {\n\t\t\tthrow TransactionError.signerNotFound(pubkey.toString());\n\t\t}\n\n\t\treturn this.addSignature(signerIndex, signature);\n\t}\n\n\t/**\n\t * Check if transaction is fully signed (all signatures present).\n\t */\n\tisSigned(): boolean {\n\t\treturn this.signatures.every((sig) => sig.some((byte) => byte !== 0));\n\t}\n\n\t/**\n\t * Check if a specific signature slot is filled.\n\t */\n\tisSignaturePresent(index: number): boolean {\n\t\tif (index < 0 || index >= this.signatures.length) {\n\t\t\treturn false;\n\t\t}\n\t\treturn this.signatures[index].some((byte) => byte !== 0);\n\t}\n\n\t/**\n\t * Get all signatures (returns copies to prevent mutation).\n\t */\n\tgetSignatures(): readonly Uint8Array[] {\n\t\treturn this.signatures.map((sig) => new Uint8Array(sig));\n\t}\n\n\t/**\n\t * Get a specific signature (returns copy).\n\t */\n\tgetSignature(index: number): Uint8Array {\n\t\tif (index < 0 || index >= this.signatures.length) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.SIGNATURE_OUT_OF_BOUNDS,\n\t\t\t\t`Signature index ${index} out of bounds`,\n\t\t\t);\n\t\t}\n\t\treturn new Uint8Array(this.signatures[index]);\n\t}\n\n\t/**\n\t * Get a specific signature for a public key.\n\t */\n\tgetSignatureForPubkey(pubkey: PublicKey): Uint8Array {\n\t\tconst signerIndex = this.message.getSignerIndex(pubkey);\n\t\tif (signerIndex === -1) {\n\t\t\tthrow TransactionError.signerNotFound(pubkey.toString());\n\t\t}\n\t\treturn this.getSignature(signerIndex);\n\t}\n\n\t\n\n\t/**\n\t * Get required signers for this transaction.\n\t */\n\tgetSigners(): readonly PublicKey[] {\n\t\treturn this.message.getSigners();\n\t}\n\n\t/**\n\t * Get the number of required signatures.\n\t */\n\tgetRequiredSignatureCount(): number {\n\t\treturn this.message.header.numRequiredSignatures;\n\t}\n\n\t/**\n\t * Throw an error if the transaction is not fully signed.\n\t *\n\t * @throws {TransactionError} If transaction is not fully signed\n\t *\n\t * @example\n\t * ```typescript\n\t * signedTx.ensureSigned(); // Throws if not signed\n\t * await client.sendTransaction(signedTx.serialize());\n\t * ```\n\t */\n\tensureSigned(): void {\n\t\tif (!this.isSigned()) {\n\t\t\tconst missingIndices = this.signatures\n\t\t\t\t.map((sig, i) => ({ sig, i }))\n\t\t\t\t.filter(({ sig }) => !sig.some((byte) => byte !== 0))\n\t\t\t\t.map(({ i }) => i);\n\n\t\t\tconst signers = this.getSigners();\n\t\t\tconst missingSigners = missingIndices.map((i) => signers[i].toString());\n\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.MISSING_SIGNATURE,\n\t\t\t\t`Transaction is not fully signed. Missing signatures for: ${missingSigners.join(\", \")}`,\n\t\t\t\t{ missingIndices, missingSigners },\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Serialize transaction to wire format.\n\t */\n\tserialize(): Uint8Array {\n\t\t// Calculate exact size\n\t\tconst compactU16Size = this.signatures.length < 128 ? 1 : 2;\n\t\tconst sigsSize = compactU16Size + this.signatures.length * SIGNATURE_LENGTH;\n\t\tconst messageBytes = this.message.serialize();\n\t\tconst totalSize = sigsSize + messageBytes.length;\n\n\t\t// Pre-allocate buffer\n\t\tconst buffer = new Uint8Array(totalSize);\n\t\tlet offset = 0;\n\n\t\t// Write signature count\n\t\toffset = writeCompactU16(buffer, offset, this.signatures.length);\n\n\t\t// Write signatures\n\t\tfor (const sig of this.signatures) {\n\t\t\tbuffer.set(sig, offset);\n\t\t\toffset += SIGNATURE_LENGTH;\n\t\t}\n\n\t\t// Write message\n\t\tbuffer.set(messageBytes, offset);\n\n\t\treturn buffer;\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Fluent API for building transactions.\n * Returns Transaction directly (not Message).\n */\n\nimport type { PublicKey } from \"../crypto\";\nimport { AccountMetaTable } from \"./account-meta-table\";\nimport { TransactionError, TransactionErrorCode } from \"./errors\";\nimport { Message } from \"./message\";\nimport { Transaction } from \"./transaction\";\nimport type { CompiledInstruction, Instruction } from \"./types\";\n\n/**\n * Builder for creating transactions with a fluent API.\n *\n * Provides an intuitive interface for constructing transactions.\n * Call build() to get an unsigned Transaction ready for signing.\n *\n * @example\n * ```typescript\n * // Simple transfer\n * const tx = TransactionBuilder.create()\n * .setPayer(payer)\n * .setValidFrom(validFrom)\n * .addInstruction(transfer(from, to, 1_000_000n))\n * .build();\n *\n * const signedTx = tx.sign(keypair);\n * await client.transaction.sendTransaction(signedTx.serialize());\n * ```\n *\n * @example\n * ```typescript\n * // Multi-instruction transaction\n * const tx = TransactionBuilder.create()\n * .setPayer(payer)\n * .setValidFrom(validFrom)\n * .addInstruction(transfer(from, to, 1_000_000n))\n * .addInstruction(memoInstruction(\"Payment for invoice #123\"))\n * .build();\n * ```\n */\nexport class TransactionBuilder {\n\tprivate payer?: PublicKey;\n private validFrom?: bigint;\n private configHashPrefix?: bigint;\n private occ = false;\n\tprivate readonly instructions: Instruction[] = [];\n\n\tprivate constructor() {}\n\n\t/**\n\t * Create a new transaction builder.\n\t */\n\tstatic create(): TransactionBuilder {\n\t\treturn new TransactionBuilder();\n\t}\n\n\t/**\n\t * Set the fee payer for this transaction.\n\t *\n\t * The payer will be the first account and must sign the transaction.\n\t * The payer pays for transaction fees.\n\t *\n\t * @param payer - Public key of the fee payer\n\t */\n\tsetPayer(payer: PublicKey): this {\n\t\tthis.payer = payer;\n\t\treturn this;\n\t}\n\n /**\n * Set the Transaction valid from.\n *\n * This is the time the transaction is valid from, in milliseconds since Unix epoch.\n * It can be used for additional replay protection or auditing.\n *\n * @param validFrom - Transaction valid from in milliseconds since Unix epoch\n */\n setValidFrom(validFrom: bigint): this {\n this.validFrom = validFrom;\n return this;\n }\n\n /**\n * Set the config hash prefix for replay protection.\n *\n * This is the first 64 bits of the config hash, used to ensure\n * transactions cannot be replayed on different chains.\n *\n * @param configHashPrefix - config hash prefix as a u64\n */\n setConfigHashPrefix(configHashPrefix: bigint): this {\n this.configHashPrefix = configHashPrefix;\n return this;\n }\n\n /**\n * Enable OCC (optimistic concurrency control) scheduling for this transaction.\n *\n * @param occ - Whether to use OCC scheduling (default: false)\n */\n setOcc(occ: boolean): this {\n this.occ = occ;\n return this;\n }\n\n\t/**\n\t * Add an instruction to the transaction.\n\t *\n\t * @param instruction - Instruction to add\n\t */\n\taddInstruction(instruction: Instruction): this {\n\t\tthis.instructions.push(instruction);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Add multiple instructions at once.\n\t *\n\t * @param instructions - Array of instructions to add\n\t */\n\taddInstructions(instructions: readonly Instruction[]): this {\n\t\tthis.instructions.push(...instructions);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Build the transaction (unsigned).\n\t *\n\t * Returns an unsigned Transaction that's ready to be signed.\n\t *\n\t * @returns Unsigned Transaction\n\t * @throws {TransactionError} If payer, valid_from, or instructions are missing\n\t *\n\t * @example\n\t * ```typescript\n\t * const tx = builder.build();\n\t * const signedTx = tx.sign(keypair);\n\t * ```\n\t */\n\tbuild(): Transaction {\n\t\t// Validate required fields\n\t\tif (!this.payer) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.INVALID_ACCOUNT_META,\n\t\t\t\t\"Transaction must have a fee payer. Use setPayer() to set the fee payer.\",\n\t\t\t);\n\t\t}\n\n if (!this.validFrom) {\n throw new TransactionError(\n TransactionErrorCode.INVALID_MESSAGE_FORMAT,\n \"Transaction must have a valid from. Use setValidFrom() to set the valid from.\",\n );\n }\n\n if (this.configHashPrefix === undefined) {\n throw new TransactionError(\n TransactionErrorCode.INVALID_MESSAGE_FORMAT,\n \"Transaction must have a config hash prefix. Use setConfigHashPrefix() to set the config hash prefix.\",\n );\n }\n\n\t\tif (this.instructions.length === 0) {\n\t\t\tthrow TransactionError.noInstructions();\n\t\t}\n\n\t\t// Build account meta table\n\t\tconst accountTable = new AccountMetaTable();\n\n\t\t// Pin payer at index 0 (signer + writable)\n\t\taccountTable.setFeePayer(this.payer);\n\n\t\t// Add all accounts from instructions\n\t\tfor (const instruction of this.instructions) {\n\t\t\taccountTable.addAll(instruction.accounts);\n\n\t\t\t// Add program ID as readonly non-signer\n\t\t\taccountTable.add({\n\t\t\t\tpubkey: instruction.programId,\n\t\t\t\tisSigner: false,\n\t\t\t\tisWritable: false,\n\t\t\t});\n\t\t}\n\n\t\t// Get sorted accounts and header\n\t\tconst accountKeys = accountTable.getPublicKeys();\n\t\tconst header = accountTable.getHeader();\n\n\t\t// Compile instructions (convert pubkeys to indices)\n\t\tconst compiledInstructions = this.instructions.map((instruction) => {\n\t\t\tconst programIdIndex = accountTable.getIndex(instruction.programId);\n\t\t\tif (programIdIndex === -1) {\n\t\t\t\tthrow new TransactionError(\n\t\t\t\t\tTransactionErrorCode.INVALID_INSTRUCTION,\n\t\t\t\t\t`Program ID ${instruction.programId.toString()} not found in account table`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst accountKeyIndexes = instruction.accounts.map((meta) => {\n\t\t\t\tconst index = accountTable.getIndex(meta.pubkey);\n\t\t\t\tif (index === -1) {\n\t\t\t\t\tthrow new TransactionError(\n\t\t\t\t\t\tTransactionErrorCode.INVALID_INSTRUCTION,\n\t\t\t\t\t\t`Account ${meta.pubkey.toString()} not found in account table`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn index;\n\t\t\t});\n\n\t\t\tconst compiled: CompiledInstruction = {\n\t\t\t\tprogramIdIndex,\n\t\t\t\taccountKeyIndexes: Object.freeze(accountKeyIndexes),\n\t\t\t\tdata: instruction.data,\n\t\t\t};\n\n\t\t\treturn compiled;\n\t\t});\n\n\t\t// Create message\n\t\tconst message = new Message(\n\t\t\theader,\n\t\t\taccountKeys,\n this.validFrom,\n this.configHashPrefix,\n this.occ,\n\t\t\tcompiledInstructions,\n\t\t);\n\n\t\t// Return unsigned transaction\n\t\treturn Transaction.fromMessage(message);\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Compact-u16 encoding for efficient variable-length integer serialization.\n *\n * Uses 1-3 bytes depending on value size:\n * - 0-127: 1 byte (7 bits)\n * - 128-16,383: 2 bytes (14 bits)\n * - 16,384-65,535: 3 bytes (16 bits)\n *\n * This encoding saves space for small numbers while supporting the full u16 range.\n */\nimport {\n\tTransactionError,\n\tTransactionErrorCode,\n} from \"../transaction/index.js\";\n\n/**\n * Serializes a u16 value into compact encoding.\n *\n * @param buffer - Output buffer to append bytes to\n * @param value - Value to encode (0-65535)\n * @throws {TransactionError} If value is out of range\n */\nexport function serializeCompactU16(buffer: number[], value: number): void {\n\tif (value < 0 || value > 0xffff) {\n\t\tthrow new TransactionError(\n\t\t\tTransactionErrorCode.SERIALIZATION_FAILED,\n\t\t\t`Value out of range for compact-u16: ${value}`,\n\t\t);\n\t}\n\n\t// Single byte (0-127)\n\tif (value <= 0x7f) {\n\t\tbuffer.push(value);\n\t\treturn;\n\t}\n\n\t// Two bytes (128-16383)\n\tif (value <= 0x3fff) {\n\t\tbuffer.push((value & 0x7f) | 0x80);\n\t\tbuffer.push((value >> 7) & 0x7f);\n\t\treturn;\n\t}\n\n\t// Three bytes (16384-65535)\n\tbuffer.push((value & 0x7f) | 0x80);\n\tbuffer.push(((value >> 7) & 0x7f) | 0x80);\n\tbuffer.push((value >> 14) & 0xff);\n}\n\n/**\n * Deserializes a compact-u16 value from bytes.\n *\n * @param data - Input byte array\n * @param currentCursor - Starting position in the array\n * @returns Tuple of [decoded value, new cursor position]\n * @throws {TransactionError} If data is insufficient or malformed\n */\nexport function deserializeCompactU16(\n\tdata: Uint8Array,\n\tcurrentCursor: number,\n): [number, number] {\n\tlet cursor = currentCursor;\n\tif (cursor >= data.length) {\n\t\tthrow new TransactionError(\n\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\"Insufficient data for compact-u16\",\n\t\t);\n\t}\n\n\tconst firstByte = data[cursor++];\n\n\t// Single byte encoding (0-127)\n\tif ((firstByte & 0x80) === 0) {\n\t\treturn [firstByte, cursor];\n\t}\n\n\t// Multi-byte encoding\n\tif (cursor >= data.length) {\n\t\tthrow new TransactionError(\n\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\"Incomplete compact-u16 encoding\",\n\t\t);\n\t}\n\n\tconst secondByte = data[cursor++];\n\n\t// Two-byte encoding (128-16383)\n\tif ((secondByte & 0x80) === 0) {\n\t\treturn [(firstByte & 0x7f) | (secondByte << 7), cursor];\n\t}\n\n\t// Three-byte encoding (16384-65535)\n\tif (cursor >= data.length) {\n\t\tthrow new TransactionError(\n\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\"Incomplete compact-u16 encoding\",\n\t\t);\n\t}\n\n\tconst thirdByte = data[cursor++];\n\tconst value =\n\t\t(firstByte & 0x7f) | ((secondByte & 0x7f) << 7) | (thirdByte << 14);\n\n\treturn [value, cursor];\n}\n\n/**\n * Writes a compact-u16 value directly to a buffer (zero-copy).\n *\n * Optimized version for in-place writing without intermediate allocations.\n *\n * @param buffer - Target buffer\n * @param offset - Starting position to write at\n * @param value - Value to encode (0-127 only, uses 1-2 bytes)\n * @returns New offset after writing\n */\nexport function writeCompactU16(\n\tbuffer: Uint8Array,\n\toffset: number,\n\tvalue: number,\n): number {\n\tif (value < 0x80) {\n\t\tbuffer[offset] = value;\n\t\treturn offset + 1;\n\t}\n\tbuffer[offset] = (value & 0x7f) | 0x80;\n\tbuffer[offset + 1] = value >> 7;\n\treturn offset + 2;\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { Keypair, PublicKey, Signature } from \"../crypto\";\nimport type { Signer } from \"./signer\";\n\n/**\n * Signer implementation using a local Ed25519 keypair.\n *\n * Provides synchronous signing without external dependencies.\n * Suitable for server-side applications, CLIs, and testing.\n *\n * @example\n * ```typescript\n * import { Keypair, KeypairSigner } from '@rialo/ts-cdk';\n *\n * // Generate new keypair\n * const keypair = Keypair.generate();\n * const signer = new KeypairSigner(keypair);\n *\n * // Or from mnemonic\n * const mnemonic = Mnemonic.generate();\n * const keypair = await mnemonic.toKeypair(0);\n * const signer = new KeypairSigner(keypair);\n *\n * // Sign messages\n * const publicKey = await signer.getPublicKey();\n * const signature = await signer.signMessage(message);\n * ```\n */\nexport class KeypairSigner implements Signer {\n\tconstructor(private readonly keypair: Keypair) {}\n\n\t/**\n\t * Returns the keypair's public key.\n\t */\n\tasync getPublicKey(): Promise<PublicKey> {\n\t\treturn this.keypair.publicKey;\n\t}\n\n\t/**\n\t * Signs a message using the keypair's private key.\n\t */\n\tasync signMessage(message: Uint8Array): Promise<Signature> {\n\t\treturn this.keypair.sign(message);\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n// AUTO-GENERATED FROM spec.wit — DO NOT EDIT\n\nimport type { DerivedKeypairInfo, PublicKey } from \"./types.js\";\n\n/**\n * A keyring managing one or more derived keypairs.\n * Secret material stays inside the keyring — callers interact via\n * indices and public metadata. No freely-passed keypair resources.\n * \n * No direct constructor — keyrings are created via KeyringProvider\n * (create, create-with-mnemonic, recover-from-mnemonic, load).\n * Active keypair contract: the active keypair is always index 0 at\n * creation time. Active-keypair switching is a facade operation not\n * in the generated contract.\n */\n/**\n * Resource `keyring` — generated from spec.wit.\n *\n * Extend this class to provide a concrete `Keyring` implementation.\n * Instance methods are abstract; static methods throw by default (override in subclass).\n */\nexport abstract class Keyring {\n /**\n * Sign a message with the active keypair.\n * Returns 64-byte Ed25519 signature.\n */\n abstract sign(message: Uint8Array): Uint8Array;\n\n /**\n * Verify a signature with the active keypair.\n */\n abstract verify(message: Uint8Array, sig: Uint8Array): boolean;\n\n /**\n * Active keypair's public key as base58 string.\n */\n abstract pubkeyString(): string;\n\n /**\n * Active keypair's public key (32 bytes).\n */\n abstract pubkey(): PublicKey;\n\n /**\n * Get public metadata for a keypair by index.\n */\n abstract getKeypairInfo(index: number): DerivedKeypairInfo | undefined;\n\n /**\n * List all keypair indices, sorted ascending.\n */\n abstract listKeypairs(): number[];\n\n /**\n * Get public metadata for all keypairs, sorted by ascending index.\n */\n abstract getKeypairsInfo(): DerivedKeypairInfo[];\n\n /**\n * Sign with a specific keypair by index.\n */\n abstract signWithKeypair(message: Uint8Array, index: number): Uint8Array;\n\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { RialoError, RialoErrorType } from \"../error.js\";\n\nconst U32_MAX = 0xFFFFFFFF;\n\n/**\n * Validates that a keypair index is a valid WIT u32 value.\n * Rejects negative, fractional, NaN, and values above 0xFFFFFFFF.\n */\nexport function validateKeypairIndex(index: number): void {\n\tif (!Number.isInteger(index) || index < 0 || index > U32_MAX) {\n\t\tthrow new RialoError(\n\t\t\tRialoErrorType.INVALID_INPUT,\n\t\t\t`Invalid keypair index: ${index}. Must be a non-negative integer <= ${U32_MAX}.`,\n\t\t);\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Keyring as KeyringBase } from \"../generated/keyring.js\";\nimport type { DerivedKeypairInfo, PublicKey } from \"../generated/types.js\";\nimport { Keypair } from \"../crypto/keypair.js\";\nimport { Signature } from \"../crypto/signature.js\";\nimport { RialoError, RialoErrorType } from \"../error.js\";\nimport { validateKeypairIndex } from \"./validation.js\";\n\n/**\n * Concrete keyring implementation backed by an in-memory map of derived keypairs.\n *\n * Keyrings are created via {@link InMemoryKeyringProvider}, not directly.\n * The active keypair defaults to index 0. Use {@link setActiveKeypair} to change it.\n * Secret material stays inside the keyring — callers interact via indices and public metadata.\n */\nexport class RialoKeyring extends KeyringBase {\n\tprivate readonly keypairs: Map<number, Keypair>;\n\tprivate readonly derivationPaths: Map<number, string | undefined>;\n\tprivate activeIndex: number;\n\n\tconstructor(\n\t\tkeypairs: Map<number, Keypair>,\n\t\tderivationPaths: Map<number, string | undefined>,\n\t) {\n\t\tsuper();\n\t\tthis.keypairs = keypairs;\n\t\tthis.derivationPaths = derivationPaths;\n\t\tthis.activeIndex = 0;\n\t}\n\n\t/**\n\t * Sets the active keypair index (facade operation, not in WIT contract).\n\t *\n\t * @param index - The keypair index to make active\n\t * @throws {RialoError} If the index does not exist in this keyring\n\t */\n\tsetActiveKeypair(index: number): void {\n\t\tvalidateKeypairIndex(index);\n\t\tif (!this.keypairs.has(index)) {\n\t\t\tthrow new RialoError(\n\t\t\t\tRialoErrorType.WALLET,\n\t\t\t\t`Keypair ${index} not found in keyring`,\n\t\t\t);\n\t\t}\n\t\tthis.activeIndex = index;\n\t}\n\n\tprivate activeKeypair(): Keypair {\n\t\tconst kp = this.keypairs.get(this.activeIndex);\n\t\tif (!kp) {\n\t\t\tthrow new RialoError(RialoErrorType.WALLET, \"Active keypair does not exist\");\n\t\t}\n\t\treturn kp;\n\t}\n\n\tsign(message: Uint8Array): Uint8Array {\n\t\treturn this.activeKeypair().sign(message).toBytes();\n\t}\n\n\tverify(message: Uint8Array, sig: Uint8Array): boolean {\n\t\treturn this.activeKeypair().verify(message, Signature.fromBytes(sig));\n\t}\n\n\tpubkeyString(): string {\n\t\treturn this.activeKeypair().publicKey.toString();\n\t}\n\n\tpubkey(): PublicKey {\n\t\treturn this.activeKeypair().publicKey;\n\t}\n\n\tgetKeypairInfo(index: number): DerivedKeypairInfo | undefined {\n\t\tvalidateKeypairIndex(index);\n\t\tconst kp = this.keypairs.get(index);\n\t\tif (!kp) return undefined;\n\t\treturn {\n\t\t\tindex,\n\t\t\tpubkey: kp.publicKey,\n\t\t\tpubkeyString: kp.publicKey.toString(),\n\t\t\tderivationPath: this.derivationPaths.get(index) ?? undefined,\n\t\t};\n\t}\n\n\tlistKeypairs(): number[] {\n\t\treturn Array.from(this.keypairs.keys()).sort((a, b) => a - b);\n\t}\n\n\tgetKeypairsInfo(): DerivedKeypairInfo[] {\n\t\treturn this.listKeypairs().map((index) => this.getKeypairInfo(index)!);\n\t}\n\n\tsignWithKeypair(message: Uint8Array, index: number): Uint8Array {\n\t\tvalidateKeypairIndex(index);\n\t\tconst kp = this.keypairs.get(index);\n\t\tif (!kp) {\n\t\t\tthrow new RialoError(\n\t\t\t\tRialoErrorType.WALLET,\n\t\t\t\t`Keypair ${index} not found in keyring`,\n\t\t\t);\n\t\t}\n\t\treturn kp.sign(message).toBytes();\n\t}\n\n\t/**\n\t * Securely erases all secret key material from this keyring snapshot.\n\t *\n\t * Calls {@link Keypair.dispose} on every keypair, zeroing private key bytes.\n\t * After disposal, signing and secret-key export will throw. Verification\n\t * still works (uses only the public key). Does not affect provider-stored\n\t * state or other snapshots.\n\t */\n\tdispose(): void {\n\t\tfor (const kp of this.keypairs.values()) {\n\t\t\tkp.dispose();\n\t\t}\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n// AUTO-GENERATED FROM spec.wit — DO NOT EDIT\n\nimport type { DerivedKeypairInfo, PublicKey } from \"./types.js\";\nimport type { Keyring } from \"./keyring.js\";\n\n/**\n * Storage and lifecycle management for keyrings. All methods async (I/O).\n * No WIT constructor — concrete providers are language-specific\n * (e.g., InMemoryKeyringProvider::new(), new InMemoryKeyringProvider()).\n */\n/**\n * Resource `keyring-provider` — generated from spec.wit.\n *\n * Extend this class to provide a concrete `KeyringProvider` implementation.\n * Instance methods are abstract; static methods throw by default (override in subclass).\n */\nexport abstract class KeyringProvider {\n /**\n * Create a new keyring with a random keypair at index 0.\n */\n abstract create(name: string, password: string): Promise<Keyring>;\n\n /**\n * Create a keyring with a generated BIP39 mnemonic.\n * strength-bits: 128 (12 words) or 256 (24 words).\n * Initializes exactly one keypair at index 0 derived from the mnemonic.\n * Returns (keyring, mnemonic_phrase). The mnemonic is returned ONCE\n * for backup — it is NOT stored on the keyring contract.\n */\n abstract createWithMnemonic(name: string, strengthBits: number, password: string): Promise<[Keyring, string]>;\n\n /**\n * Recover a keyring from an existing BIP39 mnemonic phrase.\n * Initializes one keypair at index 0 derived from the mnemonic.\n */\n abstract recoverFromMnemonic(name: string, mnemonic: string, password: string): Promise<Keyring>;\n\n /**\n * Load an existing keyring by name. Active keypair defaults to index 0.\n */\n abstract load(name: string, password: string): Promise<Keyring>;\n\n /**\n * List all keyring names, sorted alphabetically.\n */\n abstract list(): Promise<string[]>;\n\n /**\n * Check if a keyring exists by name.\n */\n abstract exists(name: string): Promise<boolean>;\n\n /**\n * Get the active keypair's public key for a keyring (without loading).\n */\n abstract getPublicKey(name: string): Promise<PublicKey>;\n\n /**\n * List all keyrings with their active keypair's public info,\n * sorted alphabetically by keyring name.\n */\n abstract listPublicKeys(): Promise<[string, DerivedKeypairInfo][]>;\n\n /**\n * List keypair metadata for a specific keyring, sorted by ascending index.\n */\n abstract listKeypairs(keyringName: string): Promise<DerivedKeypairInfo[]>;\n\n /**\n * Derive a new keypair at the specified index.\n * Errors with DUPLICATE_KEYPAIR_INDEX if the index already exists.\n */\n abstract deriveKeypair(keyringName: string, keypairIndex: number, password: string): Promise<DerivedKeypairInfo>;\n\n /**\n * Import an existing 32-byte Ed25519 secret key into a keyring.\n * Assigns the next available index (max(existing) + 1).\n */\n abstract importSecretKey(keyringName: string, secretKey: Uint8Array, derivationPath: string | undefined, password: string): Promise<DerivedKeypairInfo>;\n\n /**\n * Get metadata for all keypairs in a keyring, sorted by ascending index.\n */\n abstract getKeypairsInfo(name: string): Promise<DerivedKeypairInfo[]>;\n\n /**\n * Get metadata for a specific keypair by index.\n */\n abstract getKeypairInfo(name: string, keypairIndex: number): Promise<DerivedKeypairInfo>;\n\n /**\n * Returns max(existing indices) + 1, or 0 if empty.\n * With sparse indices (e.g., 0 and 5 exist), returns 6, not 2.\n */\n abstract nextKeypairIndex(name: string): Promise<number>;\n\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { KeyringProvider as KeyringProviderBase } from \"../generated/keyring-provider.js\";\nimport type { Keyring } from \"../generated/keyring.js\";\nimport type { DerivedKeypairInfo, PublicKey } from \"../generated/types.js\";\nimport { Keypair } from \"../crypto/keypair.js\";\nimport { Mnemonic, type MnemonicStrength } from \"../crypto/mnemonic.js\";\nimport { RialoError, RialoErrorType } from \"../error.js\";\nimport { BASE_DERIVATION_PATH } from \"../constants.js\";\nimport { RialoKeyring } from \"./keyring.js\";\nimport { validateKeypairIndex } from \"./validation.js\";\n\ninterface StoredKeyring {\n\tkeypairs: Map<number, Keypair>;\n\tderivationPaths: Map<number, string | undefined>;\n\tmnemonic: string | undefined;\n\tpassword: string;\n}\n\n/**\n * In-memory keyring provider for testing and ephemeral use.\n *\n * **Security note:** This provider stores keyrings, passwords, and mnemonic\n * phrases in plaintext memory. It is designed for development, testing, and\n * ephemeral use cases — NOT for production secret storage. Key material\n * persists in the JS heap until garbage collected. For production use,\n * implement a provider backed by encrypted storage or a hardware security module.\n *\n * Keyrings are stored in memory only — not persisted between restarts.\n * Implements the full keyring-provider contract from the WIT spec.\n */\nexport class InMemoryKeyringProvider extends KeyringProviderBase {\n\tprivate readonly keyrings = new Map<string, StoredKeyring>();\n\n\tprivate getStored(name: string): StoredKeyring {\n\t\tconst stored = this.keyrings.get(name);\n\t\tif (!stored) {\n\t\t\tthrow new RialoError(RialoErrorType.WALLET, `Keyring not found: ${name}`);\n\t\t}\n\t\treturn stored;\n\t}\n\n\tprivate checkPassword(stored: StoredKeyring, password: string): void {\n\t\tif (stored.password !== password) {\n\t\t\tthrow new RialoError(RialoErrorType.PASSWORD, \"Invalid password\");\n\t\t}\n\t}\n\n\tprivate buildKeyring(stored: StoredKeyring): RialoKeyring {\n\t\tconst keypairsCopy = new Map<number, Keypair>();\n\t\tfor (const [idx, kp] of stored.keypairs) {\n\t\t\tkeypairsCopy.set(idx, Keypair.fromSecretKey(kp.secretKeyBytes()));\n\t\t}\n\t\tconst pathsCopy = new Map(stored.derivationPaths);\n\t\treturn new RialoKeyring(keypairsCopy, pathsCopy);\n\t}\n\n\tprivate toInfo(index: number, kp: Keypair, derivationPath: string | undefined): DerivedKeypairInfo {\n\t\treturn {\n\t\t\tindex,\n\t\t\tpubkey: kp.publicKey,\n\t\t\tpubkeyString: kp.publicKey.toString(),\n\t\t\tderivationPath,\n\t\t};\n\t}\n\n\tprivate nextIndex(stored: StoredKeyring): number {\n\t\tif (stored.keypairs.size === 0) return 0;\n\t\treturn Math.max(...stored.keypairs.keys()) + 1;\n\t}\n\n\tasync create(name: string, password: string): Promise<Keyring> {\n\t\tif (this.keyrings.has(name)) {\n\t\t\tthrow new RialoError(RialoErrorType.WALLET, `Keyring already exists: ${name}`);\n\t\t}\n\n\t\tconst kp = Keypair.generate();\n\t\tconst keypairs = new Map<number, Keypair>([[0, kp]]);\n\t\tconst derivationPaths = new Map<number, string | undefined>([[0, undefined]]);\n\n\t\tthis.keyrings.set(name, { keypairs, derivationPaths, mnemonic: undefined, password });\n\t\treturn this.buildKeyring(this.getStored(name));\n\t}\n\n\tasync createWithMnemonic(\n\t\tname: string,\n\t\tstrengthBits: number,\n\t\tpassword: string,\n\t): Promise<[Keyring, string]> {\n\t\tif (this.keyrings.has(name)) {\n\t\t\tthrow new RialoError(RialoErrorType.WALLET, `Keyring already exists: ${name}`);\n\t\t}\n\t\tif (strengthBits !== 128 && strengthBits !== 256) {\n\t\t\tthrow new RialoError(\n\t\t\t\tRialoErrorType.INVALID_INPUT,\n\t\t\t\t`Invalid mnemonic strength: ${strengthBits}. Must be 128 or 256.`,\n\t\t\t);\n\t\t}\n\n\t\tconst mnemonic = Mnemonic.generate(strengthBits as MnemonicStrength);\n\t\tconst kp = await mnemonic.toKeypair(0);\n\t\tconst path = `${BASE_DERIVATION_PATH}0'/0'`;\n\n\t\tconst keypairs = new Map<number, Keypair>([[0, kp]]);\n\t\tconst derivationPaths = new Map<number, string | undefined>([[0, path]]);\n\n\t\tthis.keyrings.set(name, {\n\t\t\tkeypairs,\n\t\t\tderivationPaths,\n\t\t\tmnemonic: mnemonic.toString(),\n\t\t\tpassword,\n\t\t});\n\n\t\treturn [this.buildKeyring(this.getStored(name)), mnemonic.toString()];\n\t}\n\n\tasync recoverFromMnemonic(\n\t\tname: string,\n\t\tmnemonicPhrase: string,\n\t\tpassword: string,\n\t): Promise<Keyring> {\n\t\tif (this.keyrings.has(name)) {\n\t\t\tthrow new RialoError(RialoErrorType.WALLET, `Keyring already exists: ${name}`);\n\t\t}\n\t\tif (!Mnemonic.isValid(mnemonicPhrase)) {\n\t\t\tthrow new RialoError(RialoErrorType.INVALID_INPUT, \"Invalid BIP39 mnemonic phrase\");\n\t\t}\n\n\t\tconst mnemonic = Mnemonic.fromPhrase(mnemonicPhrase);\n\t\tconst kp = await mnemonic.toKeypair(0);\n\t\tconst path = `${BASE_DERIVATION_PATH}0'/0'`;\n\n\t\tconst keypairs = new Map<number, Keypair>([[0, kp]]);\n\t\tconst derivationPaths = new Map<number, string | undefined>([[0, path]]);\n\n\t\tthis.keyrings.set(name, {\n\t\t\tkeypairs,\n\t\t\tderivationPaths,\n\t\t\tmnemonic: mnemonicPhrase,\n\t\t\tpassword,\n\t\t});\n\n\t\treturn this.buildKeyring(this.getStored(name));\n\t}\n\n\tasync load(name: string, password: string): Promise<Keyring> {\n\t\tconst stored = this.getStored(name);\n\t\tthis.checkPassword(stored, password);\n\t\treturn this.buildKeyring(stored);\n\t}\n\n\tasync list(): Promise<string[]> {\n\t\treturn Array.from(this.keyrings.keys()).sort();\n\t}\n\n\tasync exists(name: string): Promise<boolean> {\n\t\treturn this.keyrings.has(name);\n\t}\n\n\tasync getPublicKey(name: string): Promise<PublicKey> {\n\t\tconst stored = this.getStored(name);\n\t\tconst kp = stored.keypairs.get(0);\n\t\tif (!kp) throw new RialoError(RialoErrorType.WALLET, `Keyring ${name} has no keypair at index 0`);\n\t\treturn kp.publicKey;\n\t}\n\n\tasync listPublicKeys(): Promise<[string, DerivedKeypairInfo][]> {\n\t\tconst results: [string, DerivedKeypairInfo][] = [];\n\t\tfor (const [name, stored] of this.keyrings) {\n\t\t\tconst kp = stored.keypairs.get(0);\n\t\t\tif (kp) {\n\t\t\t\tresults.push([name, this.toInfo(0, kp, stored.derivationPaths.get(0))]);\n\t\t\t}\n\t\t}\n\t\tresults.sort((a, b) => a[0].localeCompare(b[0]));\n\t\treturn results;\n\t}\n\n\tasync listKeypairs(keyringName: string): Promise<DerivedKeypairInfo[]> {\n\t\tconst stored = this.getStored(keyringName);\n\t\tconst indices = Array.from(stored.keypairs.keys()).sort((a, b) => a - b);\n\t\treturn indices.map((idx) => {\n\t\t\tconst kp = stored.keypairs.get(idx)!;\n\t\t\treturn this.toInfo(idx, kp, stored.derivationPaths.get(idx));\n\t\t});\n\t}\n\n\tasync deriveKeypair(\n\t\tkeyringName: string,\n\t\tkeypairIndex: number,\n\t\tpassword: string,\n\t): Promise<DerivedKeypairInfo> {\n\t\tvalidateKeypairIndex(keypairIndex);\n\n\t\tconst stored = this.getStored(keyringName);\n\t\tthis.checkPassword(stored, password);\n\n\t\tif (stored.keypairs.has(keypairIndex)) {\n\t\t\tthrow new RialoError(\n\t\t\t\tRialoErrorType.WALLET,\n\t\t\t\t`Keypair with index ${keypairIndex} already exists`,\n\t\t\t);\n\t\t}\n\n\t\tlet kp: Keypair;\n\t\tlet derivationPath: string | undefined;\n\n\t\tif (stored.mnemonic) {\n\t\t\tconst mnemonic = Mnemonic.fromPhrase(stored.mnemonic);\n\t\t\tkp = await mnemonic.toKeypair(keypairIndex);\n\t\t\tderivationPath = `${BASE_DERIVATION_PATH}${keypairIndex}'/0'`;\n\t\t} else {\n\t\t\tkp = Keypair.generate();\n\t\t\tderivationPath = undefined;\n\t\t}\n\n\t\tstored.keypairs.set(keypairIndex, kp);\n\t\tstored.derivationPaths.set(keypairIndex, derivationPath);\n\n\t\treturn this.toInfo(keypairIndex, kp, derivationPath);\n\t}\n\n\tasync importSecretKey(\n\t\tkeyringName: string,\n\t\tsecretKey: Uint8Array,\n\t\tderivationPath: string | undefined,\n\t\tpassword: string,\n\t): Promise<DerivedKeypairInfo> {\n\t\tif (secretKey.length !== 32) {\n\t\t\tthrow new RialoError(\n\t\t\t\tRialoErrorType.INVALID_INPUT,\n\t\t\t\t`Invalid secret key length: expected 32 bytes, got ${secretKey.length}`,\n\t\t\t);\n\t\t}\n\n\t\tconst stored = this.getStored(keyringName);\n\t\tthis.checkPassword(stored, password);\n\n\t\tconst kp = Keypair.fromSecretKey(secretKey);\n\t\tconst nextIdx = this.nextIndex(stored);\n\n\t\tstored.keypairs.set(nextIdx, kp);\n\t\tstored.derivationPaths.set(nextIdx, derivationPath);\n\n\t\treturn this.toInfo(nextIdx, kp, derivationPath);\n\t}\n\n\tasync getKeypairsInfo(name: string): Promise<DerivedKeypairInfo[]> {\n\t\treturn this.listKeypairs(name);\n\t}\n\n\tasync getKeypairInfo(name: string, keypairIndex: number): Promise<DerivedKeypairInfo> {\n\t\tvalidateKeypairIndex(keypairIndex);\n\t\tconst stored = this.getStored(name);\n\t\tconst kp = stored.keypairs.get(keypairIndex);\n\t\tif (!kp) {\n\t\t\tthrow new RialoError(\n\t\t\t\tRialoErrorType.WALLET,\n\t\t\t\t`Keypair ${keypairIndex} not found in keyring ${name}`,\n\t\t\t);\n\t\t}\n\t\treturn this.toInfo(keypairIndex, kp, stored.derivationPaths.get(keypairIndex));\n\t}\n\n\tasync nextKeypairIndex(name: string): Promise<number> {\n\t\tconst stored = this.getStored(name);\n\t\treturn this.nextIndex(stored);\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/** RISC-V loader program ID (PolkaVM bytecode). */\nexport const RISCV_LOADER_PROGRAM_ID = \"RiscVLoader11111111111111111111111111111111\";\n\n/** LoaderV4 program ID (eBPF programs). */\nexport const LOADER_V4_PROGRAM_ID = \"LoaderV411111111111111111111111111111111111\";\n\n/** Default chunk size for writing program data (bytes). */\nexport const DEFAULT_CHUNK_SIZE = 3700;\n\n/** Default max retries when polling for confirmation. */\nexport const DEFAULT_MAX_RETRIES = 350;\n\n/** Default base delay between retries (ms). */\nexport const DEFAULT_RETRY_BASE_DELAY_MS = 50;\n\n/** Default max delay between retries (ms). */\nexport const DEFAULT_RETRY_MAX_DELAY_MS = 1000;\n\n/** Number of chunks to confirm per batch. */\nexport const DEFAULT_CONFIRMATION_BATCH_SIZE = 25;\n\n/** Safety factor for rent-exempt balance calculation. */\nexport const BUFFER_BALANCE_FACTOR = 1.2;\n\n/** Byte offset where program data begins in a loader account (size of LoaderState header). */\nexport const PROGRAM_DATA_OFFSET = 48;\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { base58 } from \"@scure/base\";\nimport { PublicKey, type Keypair } from \"../crypto\";\nimport type { RialoClient } from \"../rpc/clients/client\";\nimport { RpcError, RpcErrorCode } from \"../rpc/errors\";\nimport { createAccount, transferInstruction } from \"../transaction/instructions/system\";\nimport { TransactionBuilder } from \"../transaction/transaction-builder\";\nimport type { Instruction } from \"../transaction/types\";\nimport { sleep } from \"../utils\";\nimport {\n BUFFER_BALANCE_FACTOR,\n DEFAULT_CHUNK_SIZE,\n DEFAULT_CONFIRMATION_BATCH_SIZE,\n DEFAULT_MAX_RETRIES,\n DEFAULT_RETRY_BASE_DELAY_MS,\n DEFAULT_RETRY_MAX_DELAY_MS,\n PROGRAM_DATA_OFFSET,\n RISCV_LOADER_PROGRAM_ID,\n} from \"./constants\";\nimport { DeploymentError } from \"./errors\";\nimport {\n deployInstruction,\n retractInstruction,\n setProgramLengthInstruction,\n writeInstruction,\n} from \"./instructions\";\n\nexport interface DeploymentConfig {\n chunkSize?: number;\n maxRetries?: number;\n retryBaseDelayMs?: number;\n retryMaxDelayMs?: number;\n confirmationBatchSize?: number;\n}\n\nexport interface ProgramDeploymentOptions {\n programData: Uint8Array;\n programKeypair: Keypair;\n config?: DeploymentConfig;\n}\n\n/**\n * Calculate exponential backoff delay (matching Rust: base_ms * 1.15^attempt, capped).\n */\nexport function calculateBackoff(attempt: number, baseDelayMs: number, maxDelayMs: number): number {\n const delay = baseDelayMs * 1.15 ** attempt;\n return Math.min(delay, maxDelayMs);\n}\n\n\n/**\n * Deploys PolkaVM programs to Rialo chains.\n *\n * Matches the Rust CDK's ProgramDeployment behavior:\n * 1. Create/prepare program account\n * 2. Write bytecode in chunks with batched confirmation\n * 3. Deploy (make executable)\n */\nexport class ProgramDeployment {\n private readonly programData: Uint8Array;\n private readonly programKeypair: Keypair;\n private readonly chunkSize: number;\n private readonly maxRetries: number;\n private readonly retryBaseDelayMs: number;\n private readonly retryMaxDelayMs: number;\n private readonly confirmationBatchSize: number;\n\n constructor(options: ProgramDeploymentOptions) {\n if (options.programData.length === 0) {\n throw DeploymentError.emptyProgramData();\n }\n\n this.programData = options.programData;\n this.programKeypair = options.programKeypair;\n\n const chunkSize = options.config?.chunkSize ?? DEFAULT_CHUNK_SIZE;\n if (chunkSize <= 0) {\n throw DeploymentError.invalidChunkSize(chunkSize);\n }\n this.chunkSize = chunkSize;\n this.maxRetries = options.config?.maxRetries ?? DEFAULT_MAX_RETRIES;\n this.retryBaseDelayMs = options.config?.retryBaseDelayMs ?? DEFAULT_RETRY_BASE_DELAY_MS;\n this.retryMaxDelayMs = options.config?.retryMaxDelayMs ?? DEFAULT_RETRY_MAX_DELAY_MS;\n this.confirmationBatchSize =\n options.config?.confirmationBatchSize ?? DEFAULT_CONFIRMATION_BATCH_SIZE;\n }\n\n /**\n * Deploy the program to the blockchain.\n *\n * @param client - RPC client\n * @param payerKeypair - Keypair that pays for transactions and becomes the program authority\n * @returns The program's public key (derived from programKeypair)\n */\n async deploy(client: RialoClient, payerKeypair: Keypair): Promise<PublicKey> {\n const programPubkey = this.programKeypair.publicKey;\n const payerPubkey = payerKeypair.publicKey;\n const loaderPubkey = PublicKey.fromString(RISCV_LOADER_PROGRAM_ID);\n\n // Get config hash prefix for replay protection\n const configHashPrefix = await client.getConfigHashPrefix();\n\n // Calculate rent-exempt balance with safety factor\n const rentExempt = await client.getMinimumBalanceForRentExemption(\n BigInt(PROGRAM_DATA_OFFSET + this.programData.length),\n );\n const bufferBalance = BigInt(Math.floor(Number(rentExempt) * BUFFER_BALANCE_FACTOR));\n\n // --- Phase 1: Create or prepare program account ---\n const validFrom = BigInt(Date.now());\n\n const existing = await client.getAccountInfo(programPubkey).catch((e: unknown) => {\n // RialoClient.getAccountInfo throws \"Account does not exist: ...\" for missing accounts.\n // Any other error (network, rate-limit, server) must propagate — not silently\n // route into the account-creation path.\n if (e instanceof Error && e.message.startsWith(\"Account does not exist\")) {\n return null;\n }\n throw e;\n });\n\n if (existing) {\n // --- Redeployment path ---\n\n // Validate owner matches RISC-V loader (same check as Rust CDK)\n if (existing.owner.toString() !== RISCV_LOADER_PROGRAM_ID) {\n throw DeploymentError.ownerMismatch(existing.owner.toString());\n }\n\n const ixs: Instruction[] = [];\n\n // Top up funds if needed\n if (existing.kelvin < bufferBalance) {\n const deficit = bufferBalance - existing.kelvin;\n ixs.push(transferInstruction(payerPubkey, programPubkey, deficit));\n }\n\n // Retract if currently executable\n if (existing.executable) {\n ixs.push(retractInstruction(programPubkey, payerPubkey));\n }\n\n // Resize (always needed for redeployment)\n ixs.push(\n setProgramLengthInstruction(\n programPubkey,\n payerPubkey,\n this.programData.length,\n payerPubkey,\n ),\n );\n\n const builder = TransactionBuilder.create()\n .setPayer(payerPubkey)\n .setValidFrom(validFrom)\n .setConfigHashPrefix(configHashPrefix);\n\n for (const ix of ixs) {\n builder.addInstruction(ix);\n }\n\n const tx = builder.build().sign(payerKeypair);\n await this.sendAndConfirm(client, tx.serialize());\n } else {\n // --- Initial deployment path ---\n const createIx = createAccount(\n payerPubkey,\n programPubkey,\n bufferBalance,\n 0n, // space=0, the loader manages sizing via SetProgramLength\n loaderPubkey,\n );\n const setLengthIx = setProgramLengthInstruction(\n programPubkey,\n payerPubkey,\n this.programData.length,\n payerPubkey,\n );\n\n const tx = TransactionBuilder.create()\n .setPayer(payerPubkey)\n .setValidFrom(validFrom)\n .setConfigHashPrefix(configHashPrefix)\n .addInstruction(createIx)\n .addInstruction(setLengthIx)\n .build()\n .signAll([payerKeypair, this.programKeypair]);\n\n await this.sendAndConfirm(client, tx.serialize());\n }\n\n // Wait for buffer account to be ready\n await this.waitForBufferReady(client, programPubkey);\n\n // --- Phase 2: Write bytecode in chunks ---\n const chunks = this.splitIntoChunks(this.programData);\n const batchSignatures: string[] = [];\n\n for (let i = 0; i < chunks.length; i++) {\n const offset = i * this.chunkSize;\n const ix = writeInstruction(programPubkey, payerPubkey, offset, chunks[i]);\n\n const chunkValidFrom = BigInt(Date.now());\n const tx = TransactionBuilder.create()\n .setPayer(payerPubkey)\n .setValidFrom(chunkValidFrom)\n .setConfigHashPrefix(configHashPrefix)\n .addInstruction(ix)\n .build()\n .sign(payerKeypair);\n\n let sig: Uint8Array;\n try {\n sig = await client.sendTransaction(tx.serialize());\n } catch (e: unknown) {\n throw this.toDeploymentError(e);\n }\n batchSignatures.push(base58.encode(sig));\n\n // Confirm batch when full or on last chunk\n const isBatchComplete = batchSignatures.length >= this.confirmationBatchSize;\n const isLastChunk = i === chunks.length - 1;\n\n if (isBatchComplete || isLastChunk) {\n await this.confirmBatch(client, batchSignatures);\n batchSignatures.length = 0;\n }\n }\n\n // --- Phase 3: Deploy ---\n const deployIx = deployInstruction(programPubkey, payerPubkey);\n const deployValidFrom = BigInt(Date.now());\n const deployTx = TransactionBuilder.create()\n .setPayer(payerPubkey)\n .setValidFrom(deployValidFrom)\n .setConfigHashPrefix(configHashPrefix)\n .addInstruction(deployIx)\n .build()\n .sign(payerKeypair);\n\n await this.sendAndConfirm(client, deployTx.serialize());\n\n return programPubkey;\n }\n\n private splitIntoChunks(data: Uint8Array): Uint8Array[] {\n const chunks: Uint8Array[] = [];\n for (let offset = 0; offset < data.length; offset += this.chunkSize) {\n chunks.push(data.subarray(offset, offset + this.chunkSize));\n }\n return chunks;\n }\n\n private async sendAndConfirm(client: RialoClient, transaction: Uint8Array): Promise<void> {\n let result;\n try {\n result = await client.sendAndConfirmTransaction(transaction, {\n confirmMaxRetries: this.maxRetries,\n confirmRetryDelayMs: this.retryBaseDelayMs,\n });\n } catch (e: unknown) {\n throw this.toDeploymentError(e);\n }\n if (!result.executed) {\n throw DeploymentError.transactionFailed(result.err ?? \"unknown error\");\n }\n }\n\n private async confirmBatch(client: RialoClient, signatures: string[]): Promise<void> {\n let results;\n try {\n results = await Promise.all(\n signatures.map(sig => client.confirmTransaction(sig, {\n maxRetries: this.maxRetries,\n retryDelayMs: this.retryBaseDelayMs,\n })),\n );\n } catch (e: unknown) {\n throw this.toDeploymentError(e);\n }\n for (const result of results) {\n if (!result.executed) {\n throw DeploymentError.transactionFailed(result.err ?? \"unknown error\", {\n signature: result.signature,\n });\n }\n }\n }\n\n private toDeploymentError(e: unknown): DeploymentError {\n if (e instanceof DeploymentError) return e;\n if (e instanceof RpcError) {\n const details = { rpcCode: e.code, retryable: e.retryable, ...e.details };\n switch (e.code) {\n case RpcErrorCode.TRANSACTION_CONFIRMATION_TIMEOUT:\n return DeploymentError.transactionTimeout(e.message, details);\n case RpcErrorCode.TRANSACTION_REJECTED:\n case RpcErrorCode.INSUFFICIENT_FUNDS:\n return DeploymentError.transactionFailed(e.message, details);\n default:\n return DeploymentError.rpcError(e.message, details);\n }\n }\n const message = e instanceof Error ? e.message : String(e);\n return DeploymentError.rpcError(message, {\n cause: e instanceof Error ? e.constructor.name : undefined,\n });\n }\n\n private async waitForBufferReady(client: RialoClient, programPubkey: PublicKey): Promise<void> {\n const expectedSize = PROGRAM_DATA_OFFSET + this.programData.length;\n\n for (let attempt = 0; attempt < this.maxRetries; attempt++) {\n try {\n const account = await client.getAccountInfo(programPubkey);\n if (\n account.owner.toString() === RISCV_LOADER_PROGRAM_ID &&\n account.space >= BigInt(expectedSize)\n ) {\n return;\n }\n } catch (e: unknown) {\n // \"Account does not exist\" is expected while waiting — keep polling.\n // Any other error (network, server) should propagate.\n if (!(e instanceof Error && e.message.startsWith(\"Account does not exist\"))) {\n throw e;\n }\n }\n\n const delay = calculateBackoff(attempt, this.retryBaseDelayMs, this.retryMaxDelayMs);\n await sleep(delay);\n }\n throw DeploymentError.bufferNotReady(this.maxRetries);\n }\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Error codes for program deployment operations.\n */\nexport enum DeploymentErrorCode {\n\t// Validation errors\n\tEMPTY_PROGRAM_DATA = \"EMPTY_PROGRAM_DATA\",\n\tINVALID_CHUNK_SIZE = \"INVALID_CHUNK_SIZE\",\n\n\t// Deployment errors\n\tOWNER_MISMATCH = \"OWNER_MISMATCH\",\n\tTRANSACTION_FAILED = \"TRANSACTION_FAILED\",\n\tTRANSACTION_TIMEOUT = \"TRANSACTION_TIMEOUT\",\n\tRPC_ERROR = \"RPC_ERROR\",\n\tBUFFER_NOT_READY = \"BUFFER_NOT_READY\",\n}\n\n/**\n * Error class for program deployment operations with structured error information.\n */\nexport class DeploymentError extends Error {\n\tconstructor(\n\t\tpublic readonly code: DeploymentErrorCode,\n\t\tmessage: string,\n\t\tpublic readonly details?: Record<string, unknown>,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"DeploymentError\";\n\t}\n\n\tstatic emptyProgramData(): DeploymentError {\n\t\treturn new DeploymentError(\n\t\t\tDeploymentErrorCode.EMPTY_PROGRAM_DATA,\n\t\t\t\"Program data must not be empty.\",\n\t\t);\n\t}\n\n\tstatic invalidChunkSize(chunkSize: number): DeploymentError {\n\t\treturn new DeploymentError(\n\t\t\tDeploymentErrorCode.INVALID_CHUNK_SIZE,\n\t\t\t`chunkSize must be greater than 0, got ${chunkSize}.`,\n\t\t\t{ chunkSize },\n\t\t);\n\t}\n\n\tstatic ownerMismatch(owner: string): DeploymentError {\n\t\treturn new DeploymentError(\n\t\t\tDeploymentErrorCode.OWNER_MISMATCH,\n\t\t\t`Existing account is not owned by RISC-V Loader (owner: ${owner}).`,\n\t\t\t{ owner },\n\t\t);\n\t}\n\n\tstatic transactionFailed(err: string, details?: Record<string, unknown>): DeploymentError {\n\t\treturn new DeploymentError(\n\t\t\tDeploymentErrorCode.TRANSACTION_FAILED,\n\t\t\t`Transaction failed: ${err}`,\n\t\t\tdetails,\n\t\t);\n\t}\n\n\tstatic transactionTimeout(message: string, details?: Record<string, unknown>): DeploymentError {\n\t\treturn new DeploymentError(\n\t\t\tDeploymentErrorCode.TRANSACTION_TIMEOUT,\n\t\t\t`Transaction confirmation timed out: ${message}`,\n\t\t\tdetails,\n\t\t);\n\t}\n\n\tstatic rpcError(message: string, details?: Record<string, unknown>): DeploymentError {\n\t\treturn new DeploymentError(\n\t\t\tDeploymentErrorCode.RPC_ERROR,\n\t\t\t`RPC error during deployment: ${message}`,\n\t\t\tdetails,\n\t\t);\n\t}\n\n\tstatic bufferNotReady(maxRetries: number): DeploymentError {\n\t\treturn new DeploymentError(\n\t\t\tDeploymentErrorCode.BUFFER_NOT_READY,\n\t\t\t`Buffer account not ready after ${maxRetries} attempts.`,\n\t\t\t{ maxRetries },\n\t\t);\n\t}\n\n\ttoJSON(): {\n\t\tcode: DeploymentErrorCode;\n\t\tmessage: string;\n\t\tdetails?: Record<string, unknown>;\n\t} {\n\t\treturn {\n\t\t\tcode: this.code,\n\t\t\tmessage: this.message,\n\t\t\tdetails: this.details,\n\t\t};\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { PublicKey } from \"../crypto\";\nimport { BincodeWriter } from \"../serialization/bincode\";\nimport type { Instruction } from \"../transaction/types\";\nimport { RISCV_LOADER_PROGRAM_ID } from \"./constants\";\n\n/**\n * RISC-V loader instruction variant indices.\n * Must match `RiscVLoaderInstruction` enum order in Rust (bincode u32 encoding).\n */\nexport enum RiscVLoaderInstruction {\n Write = 0,\n Copy = 1,\n SetProgramLength = 2,\n Deploy = 3,\n Retract = 4,\n TransferAuthority = 5,\n Finalize = 6,\n}\n\nconst LOADER_PROGRAM_ID = PublicKey.fromString(RISCV_LOADER_PROGRAM_ID);\n\n/**\n * Create a Write instruction to write bytecode into an undeployed program account.\n * Accounts: [program (writable), authority (signer)]\n */\nexport function writeInstruction(\n programAddress: PublicKey,\n authority: PublicKey,\n offset: number,\n bytes: Uint8Array,\n): Instruction {\n const writer = new BincodeWriter(4 + 4 + 8 + bytes.length);\n writer.writeVariant(RiscVLoaderInstruction.Write);\n writer.writeU32(offset);\n writer.writeVecBytes(bytes);\n\n return {\n programId: LOADER_PROGRAM_ID,\n accounts: [\n { pubkey: programAddress, isSigner: false, isWritable: true },\n { pubkey: authority, isSigner: true, isWritable: false },\n ],\n data: writer.toBytes(),\n };\n}\n\n/**\n * Create a SetProgramLength instruction to resize a program account.\n * Accounts: [program (writable), authority (signer), recipient (writable)]\n */\nexport function setProgramLengthInstruction(\n programAddress: PublicKey,\n authority: PublicKey,\n newSize: number,\n recipientAddress: PublicKey,\n): Instruction {\n const writer = new BincodeWriter(8);\n writer.writeVariant(RiscVLoaderInstruction.SetProgramLength);\n writer.writeU32(newSize);\n\n return {\n programId: LOADER_PROGRAM_ID,\n accounts: [\n { pubkey: programAddress, isSigner: false, isWritable: true },\n { pubkey: authority, isSigner: true, isWritable: false },\n { pubkey: recipientAddress, isSigner: false, isWritable: true },\n ],\n data: writer.toBytes(),\n };\n}\n\n/**\n * Create a Deploy instruction to make a program executable.\n * Accounts: [program (writable), authority (signer)]\n */\nexport function deployInstruction(programAddress: PublicKey, authority: PublicKey): Instruction {\n const writer = new BincodeWriter(4);\n writer.writeVariant(RiscVLoaderInstruction.Deploy);\n\n return {\n programId: LOADER_PROGRAM_ID,\n accounts: [\n { pubkey: programAddress, isSigner: false, isWritable: true },\n { pubkey: authority, isSigner: true, isWritable: false },\n ],\n data: writer.toBytes(),\n };\n}\n\n/**\n * Create a Retract instruction to undo deployment (enters maintenance mode).\n * Accounts: [program (writable), authority (signer)]\n */\nexport function retractInstruction(programAddress: PublicKey, authority: PublicKey): Instruction {\n const writer = new BincodeWriter(4);\n writer.writeVariant(RiscVLoaderInstruction.Retract);\n\n return {\n programId: LOADER_PROGRAM_ID,\n accounts: [\n { pubkey: programAddress, isSigner: false, isWritable: true },\n { pubkey: authority, isSigner: true, isWritable: false },\n ],\n data: writer.toBytes(),\n };\n}\n"]}
1
+ {"version":3,"sources":["../node_modules/@scure/base/index.ts","../node_modules/@protobufjs/float/index.js","../node_modules/@protobufjs/utf8/index.js","../src/constants.ts","../src/crypto/errors.ts","../node_modules/@noble/ed25519/index.js","../node_modules/@noble/hashes/src/utils.ts","../node_modules/@noble/hashes/src/_md.ts","../node_modules/@noble/hashes/src/_u64.ts","../node_modules/@noble/hashes/src/sha2.ts","../src/crypto/public-key.ts","../src/crypto/utils.ts","../src/crypto/signature.ts","../src/crypto/keypair.ts","../node_modules/@noble/hashes/src/hmac.ts","../node_modules/@scure/bip39/node_modules/@noble/hashes/src/utils.ts","../node_modules/@scure/bip39/node_modules/@noble/hashes/src/hmac.ts","../node_modules/@scure/bip39/node_modules/@noble/hashes/src/pbkdf2.ts","../node_modules/@scure/bip39/node_modules/@noble/hashes/src/_md.ts","../node_modules/@scure/bip39/node_modules/@noble/hashes/src/_u64.ts","../node_modules/@scure/bip39/node_modules/@noble/hashes/src/sha2.ts","../node_modules/@scure/bip39/index.js","../node_modules/@scure/bip39/wordlists/english.js","../src/crypto/mnemonic.ts","../src/error.ts","../src/rex/errors.ts","../src/rex/constants.ts","../src/rex/rex-value.ts","../node_modules/@noble/curves/node_modules/@noble/hashes/src/utils.ts","../node_modules/@noble/curves/src/utils.ts","../node_modules/@noble/curves/src/abstract/modular.ts","../node_modules/@noble/curves/src/abstract/curve.ts","../node_modules/@noble/curves/src/abstract/edwards.ts","../node_modules/@noble/curves/src/ed25519.ts","../node_modules/@noble/hashes/src/hkdf.ts","../src/rex/dkg.ts","../src/rpc/errors.ts","../src/rpc/clients/base-client.ts","../src/generated/rpc-client.ts","../src/rpc/clients/query-client.ts","../src/utils.ts","../src/rpc/clients/transaction-client.ts","../src/rpc/clients/client.ts","../src/rpc/http-transport.ts","../src/rpc/index.ts","../src/serialization/bincode/reader.ts","../src/serialization/bincode/writer.ts","../src/serialization/bincode/schema.ts","../node_modules/@dao-xyz/borsh/src/binary.ts","../node_modules/@dao-xyz/borsh/src/bigint.ts","../node_modules/@dao-xyz/borsh/src/error.ts","../node_modules/@dao-xyz/borsh/src/types.ts","../node_modules/@dao-xyz/borsh/src/index.ts","../src/serialization/borsh.ts","../src/transaction/account-meta-table.ts","../src/transaction/errors.ts","../src/transaction/instructions/borsh-instruction.ts","../src/transaction/instructions/system.ts","../src/transaction/message.ts","../src/transaction/transaction.ts","../src/transaction/transaction-builder.ts","../src/serialization/compact-u16.ts","../src/signer/keypair-signer.ts","../src/generated/keyring.ts","../src/keyring/validation.ts","../src/keyring/keyring.ts","../src/generated/keyring-provider.ts","../src/keyring/keyring-provider.ts","../src/program/constants.ts","../src/program/deployment.ts","../src/program/errors.ts","../src/program/instructions.ts"],"names":["isBytes","abytes","anumber","padding","bytes","str","alphabet","sha256","exports","sign","utf8","CryptoErrorCode","hex","C","G","P","h","cr","concatBytes","ahash","aexists","aoutput","clean","createView","rotr","createHasher","randomBytes","oidNist","_HMAC","hmac","Chi","Maj","HashMD","SHA256_IV","SHA512_IV","U32_MASK64","_32n","fromBig","split","shrSH","shrSL","rotrSH","rotrSL","rotrBH","rotrBL","add","add3L","add3H","add4L","add4H","add5L","add5H","SHA256_K","SHA256_W","SHA2_32B","_SHA256","K512","SHA512_Kh","SHA512_Kl","SHA512_W_H","SHA512_W_L","SHA2_64B","_SHA512","sha512","wordlist","normalize","RialoErrorType","EncryptionErrorCode","RexValueVariant","hasHexBuiltin","bytesToHex","hexToBytes","_0n","_1n","pow2","invert","gcd","Fp","M","field","W","scalarBits","wNAF","Point","Fn","_2n","_8n","uvRatio","p","_5n","ed25519_CURVE","mod","I","DKG_PAYLOAD_VERSION","MAX_SECRET_LENGTH","RISTRETTO_POINT_BYTES","chacha20poly1305","RpcErrorCode","base58","base64","chain","readValue","writeValue","serialize","deserialize","i","obj","TransactionErrorCode","SystemInstruction","deserializeCompactU16","DEFAULT_MAX_RETRIES","DeploymentErrorCode","err","RiscVLoaderInstruction","calculateBackoff"],"mappings":"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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA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","file":"index.js","sourcesContent":["/*! scure-base - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\nexport interface Coder<F, T> {\n encode(from: F): T;\n decode(to: T): F;\n}\n\nexport interface BytesCoder extends Coder<Uint8Array, string> {\n encode: (data: Uint8Array) => string;\n decode: (str: string) => Uint8Array;\n}\n\nfunction isBytes(a: unknown): a is Uint8Array {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n/** Asserts something is Uint8Array. */\nfunction abytes(b: Uint8Array | undefined): void {\n if (!isBytes(b)) throw new Error('Uint8Array expected');\n}\n\nfunction isArrayOf(isString: boolean, arr: any[]) {\n if (!Array.isArray(arr)) return false;\n if (arr.length === 0) return true;\n if (isString) {\n return arr.every((item) => typeof item === 'string');\n } else {\n return arr.every((item) => Number.isSafeInteger(item));\n }\n}\n\nfunction afn(input: Function): input is Function {\n if (typeof input !== 'function') throw new Error('function expected');\n return true;\n}\n\nfunction astr(label: string, input: unknown): input is string {\n if (typeof input !== 'string') throw new Error(`${label}: string expected`);\n return true;\n}\n\nfunction anumber(n: number): void {\n if (!Number.isSafeInteger(n)) throw new Error(`invalid integer: ${n}`);\n}\n\nfunction aArr(input: any[]) {\n if (!Array.isArray(input)) throw new Error('array expected');\n}\nfunction astrArr(label: string, input: string[]) {\n if (!isArrayOf(true, input)) throw new Error(`${label}: array of strings expected`);\n}\nfunction anumArr(label: string, input: number[]) {\n if (!isArrayOf(false, input)) throw new Error(`${label}: array of numbers expected`);\n}\n\n// TODO: some recusive type inference so it would check correct order of input/output inside rest?\n// like <string, number>, <number, bytes>, <bytes, float>\ntype Chain = [Coder<any, any>, ...Coder<any, any>[]];\n// Extract info from Coder type\ntype Input<F> = F extends Coder<infer T, any> ? T : never;\ntype Output<F> = F extends Coder<any, infer T> ? T : never;\n// Generic function for arrays\ntype First<T> = T extends [infer U, ...any[]] ? U : never;\ntype Last<T> = T extends [...any[], infer U] ? U : never;\ntype Tail<T> = T extends [any, ...infer U] ? U : never;\n\ntype AsChain<C extends Chain, Rest = Tail<C>> = {\n // C[K] = Coder<Input<C[K]>, Input<Rest[k]>>\n [K in keyof C]: Coder<Input<C[K]>, Input<K extends keyof Rest ? Rest[K] : any>>;\n};\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction chain<T extends Chain & AsChain<T>>(...args: T): Coder<Input<First<T>>, Output<Last<T>>> {\n const id = (a: any) => a;\n // Wrap call in closure so JIT can inline calls\n const wrap = (a: any, b: any) => (c: any) => a(b(c));\n // Construct chain of args[-1].encode(args[-2].encode([...]))\n const encode = args.map((x) => x.encode).reduceRight(wrap, id);\n // Construct chain of args[0].decode(args[1].decode(...))\n const decode = args.map((x) => x.decode).reduce(wrap, id);\n return { encode, decode };\n}\n\n/**\n * Encodes integer radix representation to array of strings using alphabet and back.\n * Could also be array of strings.\n * @__NO_SIDE_EFFECTS__\n */\nfunction alphabet(letters: string | string[]): Coder<number[], string[]> {\n // mapping 1 to \"b\"\n const lettersA = typeof letters === 'string' ? letters.split('') : letters;\n const len = lettersA.length;\n astrArr('alphabet', lettersA);\n\n // mapping \"b\" to 1\n const indexes = new Map(lettersA.map((l, i) => [l, i]));\n return {\n encode: (digits: number[]) => {\n aArr(digits);\n return digits.map((i) => {\n if (!Number.isSafeInteger(i) || i < 0 || i >= len)\n throw new Error(\n `alphabet.encode: digit index outside alphabet \"${i}\". Allowed: ${letters}`\n );\n return lettersA[i]!;\n });\n },\n decode: (input: string[]): number[] => {\n aArr(input);\n return input.map((letter) => {\n astr('alphabet.decode', letter);\n const i = indexes.get(letter);\n if (i === undefined) throw new Error(`Unknown letter: \"${letter}\". Allowed: ${letters}`);\n return i;\n });\n },\n };\n}\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction join(separator = ''): Coder<string[], string> {\n astr('join', separator);\n return {\n encode: (from) => {\n astrArr('join.decode', from);\n return from.join(separator);\n },\n decode: (to) => {\n astr('join.decode', to);\n return to.split(separator);\n },\n };\n}\n\n/**\n * Pad strings array so it has integer number of bits\n * @__NO_SIDE_EFFECTS__\n */\nfunction padding(bits: number, chr = '='): Coder<string[], string[]> {\n anumber(bits);\n astr('padding', chr);\n return {\n encode(data: string[]): string[] {\n astrArr('padding.encode', data);\n while ((data.length * bits) % 8) data.push(chr);\n return data;\n },\n decode(input: string[]): string[] {\n astrArr('padding.decode', input);\n let end = input.length;\n if ((end * bits) % 8)\n throw new Error('padding: invalid, string should have whole number of bytes');\n for (; end > 0 && input[end - 1] === chr; end--) {\n const last = end - 1;\n const byte = last * bits;\n if (byte % 8 === 0) throw new Error('padding: invalid, string has too much padding');\n }\n return input.slice(0, end);\n },\n };\n}\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction normalize<T>(fn: (val: T) => T): Coder<T, T> {\n afn(fn);\n return { encode: (from: T) => from, decode: (to: T) => fn(to) };\n}\n\n/**\n * Slow: O(n^2) time complexity\n */\nfunction convertRadix(data: number[], from: number, to: number): number[] {\n // base 1 is impossible\n if (from < 2) throw new Error(`convertRadix: invalid from=${from}, base cannot be less than 2`);\n if (to < 2) throw new Error(`convertRadix: invalid to=${to}, base cannot be less than 2`);\n aArr(data);\n if (!data.length) return [];\n let pos = 0;\n const res = [];\n const digits = Array.from(data, (d) => {\n anumber(d);\n if (d < 0 || d >= from) throw new Error(`invalid integer: ${d}`);\n return d;\n });\n const dlen = digits.length;\n while (true) {\n let carry = 0;\n let done = true;\n for (let i = pos; i < dlen; i++) {\n const digit = digits[i]!;\n const fromCarry = from * carry;\n const digitBase = fromCarry + digit;\n if (\n !Number.isSafeInteger(digitBase) ||\n fromCarry / from !== carry ||\n digitBase - digit !== fromCarry\n ) {\n throw new Error('convertRadix: carry overflow');\n }\n const div = digitBase / to;\n carry = digitBase % to;\n const rounded = Math.floor(div);\n digits[i] = rounded;\n if (!Number.isSafeInteger(rounded) || rounded * to + carry !== digitBase)\n throw new Error('convertRadix: carry overflow');\n if (!done) continue;\n else if (!rounded) pos = i;\n else done = false;\n }\n res.push(carry);\n if (done) break;\n }\n for (let i = 0; i < data.length - 1 && data[i] === 0; i++) res.push(0);\n return res.reverse();\n}\n\nconst gcd = (a: number, b: number): number => (b === 0 ? a : gcd(b, a % b));\nconst radix2carry = /* @__NO_SIDE_EFFECTS__ */ (from: number, to: number) =>\n from + (to - gcd(from, to));\nconst powers: number[] = /* @__PURE__ */ (() => {\n let res = [];\n for (let i = 0; i < 40; i++) res.push(2 ** i);\n return res;\n})();\n/**\n * Implemented with numbers, because BigInt is 5x slower\n */\nfunction convertRadix2(data: number[], from: number, to: number, padding: boolean): number[] {\n aArr(data);\n if (from <= 0 || from > 32) throw new Error(`convertRadix2: wrong from=${from}`);\n if (to <= 0 || to > 32) throw new Error(`convertRadix2: wrong to=${to}`);\n if (radix2carry(from, to) > 32) {\n throw new Error(\n `convertRadix2: carry overflow from=${from} to=${to} carryBits=${radix2carry(from, to)}`\n );\n }\n let carry = 0;\n let pos = 0; // bitwise position in current element\n const max = powers[from]!;\n const mask = powers[to]! - 1;\n const res: number[] = [];\n for (const n of data) {\n anumber(n);\n if (n >= max) throw new Error(`convertRadix2: invalid data word=${n} from=${from}`);\n carry = (carry << from) | n;\n if (pos + from > 32) throw new Error(`convertRadix2: carry overflow pos=${pos} from=${from}`);\n pos += from;\n for (; pos >= to; pos -= to) res.push(((carry >> (pos - to)) & mask) >>> 0);\n const pow = powers[pos];\n if (pow === undefined) throw new Error('invalid carry');\n carry &= pow - 1; // clean carry, otherwise it will cause overflow\n }\n carry = (carry << (to - pos)) & mask;\n if (!padding && pos >= from) throw new Error('Excess padding');\n if (!padding && carry > 0) throw new Error(`Non-zero padding: ${carry}`);\n if (padding && pos > 0) res.push(carry >>> 0);\n return res;\n}\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction radix(num: number): Coder<Uint8Array, number[]> {\n anumber(num);\n const _256 = 2 ** 8;\n return {\n encode: (bytes: Uint8Array) => {\n if (!isBytes(bytes)) throw new Error('radix.encode input should be Uint8Array');\n return convertRadix(Array.from(bytes), _256, num);\n },\n decode: (digits: number[]) => {\n anumArr('radix.decode', digits);\n return Uint8Array.from(convertRadix(digits, num, _256));\n },\n };\n}\n\n/**\n * If both bases are power of same number (like `2**8 <-> 2**64`),\n * there is a linear algorithm. For now we have implementation for power-of-two bases only.\n * @__NO_SIDE_EFFECTS__\n */\nfunction radix2(bits: number, revPadding = false): Coder<Uint8Array, number[]> {\n anumber(bits);\n if (bits <= 0 || bits > 32) throw new Error('radix2: bits should be in (0..32]');\n if (radix2carry(8, bits) > 32 || radix2carry(bits, 8) > 32)\n throw new Error('radix2: carry overflow');\n return {\n encode: (bytes: Uint8Array) => {\n if (!isBytes(bytes)) throw new Error('radix2.encode input should be Uint8Array');\n return convertRadix2(Array.from(bytes), 8, bits, !revPadding);\n },\n decode: (digits: number[]) => {\n anumArr('radix2.decode', digits);\n return Uint8Array.from(convertRadix2(digits, bits, 8, revPadding));\n },\n };\n}\n\ntype ArgumentTypes<F extends Function> = F extends (...args: infer A) => any ? A : never;\nfunction unsafeWrapper<T extends (...args: any) => any>(fn: T) {\n afn(fn);\n return function (...args: ArgumentTypes<T>): ReturnType<T> | void {\n try {\n return fn.apply(null, args);\n } catch (e) {}\n };\n}\n\nfunction checksum(\n len: number,\n fn: (data: Uint8Array) => Uint8Array\n): Coder<Uint8Array, Uint8Array> {\n anumber(len);\n afn(fn);\n return {\n encode(data: Uint8Array) {\n if (!isBytes(data)) throw new Error('checksum.encode: input should be Uint8Array');\n const sum = fn(data).slice(0, len);\n const res = new Uint8Array(data.length + len);\n res.set(data);\n res.set(sum, data.length);\n return res;\n },\n decode(data: Uint8Array) {\n if (!isBytes(data)) throw new Error('checksum.decode: input should be Uint8Array');\n const payload = data.slice(0, -len);\n const oldChecksum = data.slice(-len);\n const newChecksum = fn(payload).slice(0, len);\n for (let i = 0; i < len; i++)\n if (newChecksum[i] !== oldChecksum[i]) throw new Error('Invalid checksum');\n return payload;\n },\n };\n}\n\n// prettier-ignore\nexport const utils: { alphabet: typeof alphabet; chain: typeof chain; checksum: typeof checksum; convertRadix: typeof convertRadix; convertRadix2: typeof convertRadix2; radix: typeof radix; radix2: typeof radix2; join: typeof join; padding: typeof padding; } = {\n alphabet, chain, checksum, convertRadix, convertRadix2, radix, radix2, join, padding,\n};\n\n// RFC 4648 aka RFC 3548\n// ---------------------\n\n/**\n * base16 encoding from RFC 4648.\n * @example\n * ```js\n * base16.encode(Uint8Array.from([0x12, 0xab]));\n * // => '12AB'\n * ```\n */\nexport const base16: BytesCoder = chain(radix2(4), alphabet('0123456789ABCDEF'), join(''));\n\n/**\n * base32 encoding from RFC 4648. Has padding.\n * Use `base32nopad` for unpadded version.\n * Also check out `base32hex`, `base32hexnopad`, `base32crockford`.\n * @example\n * ```js\n * base32.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'CKVQ===='\n * base32.decode('CKVQ====');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32: BytesCoder = chain(\n radix2(5),\n alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'),\n padding(5),\n join('')\n);\n\n/**\n * base32 encoding from RFC 4648. No padding.\n * Use `base32` for padded version.\n * Also check out `base32hex`, `base32hexnopad`, `base32crockford`.\n * @example\n * ```js\n * base32nopad.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'CKVQ'\n * base32nopad.decode('CKVQ');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32nopad: BytesCoder = chain(\n radix2(5),\n alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'),\n join('')\n);\n/**\n * base32 encoding from RFC 4648. Padded. Compared to ordinary `base32`, slightly different alphabet.\n * Use `base32hexnopad` for unpadded version.\n * @example\n * ```js\n * base32hex.encode(Uint8Array.from([0x12, 0xab]));\n * // => '2ALG===='\n * base32hex.decode('2ALG====');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32hex: BytesCoder = chain(\n radix2(5),\n alphabet('0123456789ABCDEFGHIJKLMNOPQRSTUV'),\n padding(5),\n join('')\n);\n\n/**\n * base32 encoding from RFC 4648. No padding. Compared to ordinary `base32`, slightly different alphabet.\n * Use `base32hex` for padded version.\n * @example\n * ```js\n * base32hexnopad.encode(Uint8Array.from([0x12, 0xab]));\n * // => '2ALG'\n * base32hexnopad.decode('2ALG');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32hexnopad: BytesCoder = chain(\n radix2(5),\n alphabet('0123456789ABCDEFGHIJKLMNOPQRSTUV'),\n join('')\n);\n/**\n * base32 encoding from RFC 4648. Doug Crockford's version.\n * https://www.crockford.com/base32.html\n * @example\n * ```js\n * base32crockford.encode(Uint8Array.from([0x12, 0xab]));\n * // => '2ANG'\n * base32crockford.decode('2ANG');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32crockford: BytesCoder = chain(\n radix2(5),\n alphabet('0123456789ABCDEFGHJKMNPQRSTVWXYZ'),\n join(''),\n normalize((s: string) => s.toUpperCase().replace(/O/g, '0').replace(/[IL]/g, '1'))\n);\n\n// Built-in base64 conversion https://caniuse.com/mdn-javascript_builtins_uint8array_frombase64\n// prettier-ignore\nconst hasBase64Builtin: boolean = /* @__PURE__ */ (() =>\n typeof (Uint8Array as any).from([]).toBase64 === 'function' &&\n typeof (Uint8Array as any).fromBase64 === 'function')();\n\nconst decodeBase64Builtin = (s: string, isUrl: boolean) => {\n astr('base64', s);\n const re = isUrl ? /^[A-Za-z0-9=_-]+$/ : /^[A-Za-z0-9=+/]+$/;\n const alphabet = isUrl ? 'base64url' : 'base64';\n if (s.length > 0 && !re.test(s)) throw new Error('invalid base64');\n return (Uint8Array as any).fromBase64(s, { alphabet, lastChunkHandling: 'strict' });\n};\n\n/**\n * base64 from RFC 4648. Padded.\n * Use `base64nopad` for unpadded version.\n * Also check out `base64url`, `base64urlnopad`.\n * Falls back to built-in function, when available.\n * @example\n * ```js\n * base64.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'Eqs='\n * base64.decode('Eqs=');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\n// prettier-ignore\nexport const base64: BytesCoder = hasBase64Builtin ? {\n encode(b) { abytes(b); return (b as any).toBase64(); },\n decode(s) { return decodeBase64Builtin(s, false); },\n} : chain(\n radix2(6),\n alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'),\n padding(6),\n join('')\n);\n/**\n * base64 from RFC 4648. No padding.\n * Use `base64` for padded version.\n * @example\n * ```js\n * base64nopad.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'Eqs'\n * base64nopad.decode('Eqs');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base64nopad: BytesCoder = chain(\n radix2(6),\n alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'),\n join('')\n);\n\n/**\n * base64 from RFC 4648, using URL-safe alphabet. Padded.\n * Use `base64urlnopad` for unpadded version.\n * Falls back to built-in function, when available.\n * @example\n * ```js\n * base64url.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'Eqs='\n * base64url.decode('Eqs=');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\n// prettier-ignore\nexport const base64url: BytesCoder = hasBase64Builtin ? {\n encode(b) { abytes(b); return (b as any).toBase64({ alphabet: 'base64url' }); },\n decode(s) { return decodeBase64Builtin(s, true); },\n} : chain(\n radix2(6),\n alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'),\n padding(6),\n join('')\n);\n\n/**\n * base64 from RFC 4648, using URL-safe alphabet. No padding.\n * Use `base64url` for padded version.\n * @example\n * ```js\n * base64urlnopad.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'Eqs'\n * base64urlnopad.decode('Eqs');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base64urlnopad: BytesCoder = chain(\n radix2(6),\n alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'),\n join('')\n);\n\n// base58 code\n// -----------\nconst genBase58 = /* @__NO_SIDE_EFFECTS__ */ (abc: string) =>\n chain(radix(58), alphabet(abc), join(''));\n\n/**\n * base58: base64 without ambigous characters +, /, 0, O, I, l.\n * Quadratic (O(n^2)) - so, can't be used on large inputs.\n * @example\n * ```js\n * base58.decode('01abcdef');\n * // => '3UhJW'\n * ```\n */\nexport const base58: BytesCoder = genBase58(\n '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n);\n/**\n * base58: flickr version. Check out `base58`.\n */\nexport const base58flickr: BytesCoder = genBase58(\n '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n);\n/**\n * base58: XRP version. Check out `base58`.\n */\nexport const base58xrp: BytesCoder = genBase58(\n 'rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz'\n);\n\n// Data len (index) -> encoded block len\nconst XMR_BLOCK_LEN = [0, 2, 3, 5, 6, 7, 9, 10, 11];\n\n/**\n * base58: XMR version. Check out `base58`.\n * Done in 8-byte blocks (which equals 11 chars in decoding). Last (non-full) block padded with '1' to size in XMR_BLOCK_LEN.\n * Block encoding significantly reduces quadratic complexity of base58.\n */\nexport const base58xmr: BytesCoder = {\n encode(data: Uint8Array) {\n let res = '';\n for (let i = 0; i < data.length; i += 8) {\n const block = data.subarray(i, i + 8);\n res += base58.encode(block).padStart(XMR_BLOCK_LEN[block.length]!, '1');\n }\n return res;\n },\n decode(str: string) {\n let res: number[] = [];\n for (let i = 0; i < str.length; i += 11) {\n const slice = str.slice(i, i + 11);\n const blockLen = XMR_BLOCK_LEN.indexOf(slice.length);\n const block = base58.decode(slice);\n for (let j = 0; j < block.length - blockLen; j++) {\n if (block[j] !== 0) throw new Error('base58xmr: wrong padding');\n }\n res = res.concat(Array.from(block.slice(block.length - blockLen)));\n }\n return Uint8Array.from(res);\n },\n};\n\n/**\n * Method, which creates base58check encoder.\n * Requires function, calculating sha256.\n */\nexport const createBase58check = (sha256: (data: Uint8Array) => Uint8Array): BytesCoder =>\n chain(\n checksum(4, (data) => sha256(sha256(data))),\n base58\n );\n\n/**\n * Use `createBase58check` instead.\n * @deprecated\n */\nexport const base58check: (sha256: (data: Uint8Array) => Uint8Array) => BytesCoder =\n createBase58check;\n\n// Bech32 code\n// -----------\nexport interface Bech32Decoded<Prefix extends string = string> {\n prefix: Prefix;\n words: number[];\n}\nexport interface Bech32DecodedWithArray<Prefix extends string = string> {\n prefix: Prefix;\n words: number[];\n bytes: Uint8Array;\n}\n\nconst BECH_ALPHABET: Coder<number[], string> = chain(\n alphabet('qpzry9x8gf2tvdw0s3jn54khce6mua7l'),\n join('')\n);\n\nconst POLYMOD_GENERATORS = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3];\nfunction bech32Polymod(pre: number): number {\n const b = pre >> 25;\n let chk = (pre & 0x1ffffff) << 5;\n for (let i = 0; i < POLYMOD_GENERATORS.length; i++) {\n if (((b >> i) & 1) === 1) chk ^= POLYMOD_GENERATORS[i]!;\n }\n return chk;\n}\n\nfunction bechChecksum(prefix: string, words: number[], encodingConst = 1): string {\n const len = prefix.length;\n let chk = 1;\n for (let i = 0; i < len; i++) {\n const c = prefix.charCodeAt(i);\n if (c < 33 || c > 126) throw new Error(`Invalid prefix (${prefix})`);\n chk = bech32Polymod(chk) ^ (c >> 5);\n }\n chk = bech32Polymod(chk);\n for (let i = 0; i < len; i++) chk = bech32Polymod(chk) ^ (prefix.charCodeAt(i) & 0x1f);\n for (let v of words) chk = bech32Polymod(chk) ^ v;\n for (let i = 0; i < 6; i++) chk = bech32Polymod(chk);\n chk ^= encodingConst;\n return BECH_ALPHABET.encode(convertRadix2([chk % powers[30]!], 30, 5, false));\n}\n\nexport interface Bech32 {\n encode<Prefix extends string>(\n prefix: Prefix,\n words: number[] | Uint8Array,\n limit?: number | false\n ): `${Lowercase<Prefix>}1${string}`;\n decode<Prefix extends string>(\n str: `${Prefix}1${string}`,\n limit?: number | false\n ): Bech32Decoded<Prefix>;\n encodeFromBytes(prefix: string, bytes: Uint8Array): string;\n decodeToBytes(str: string): Bech32DecodedWithArray;\n decodeUnsafe(str: string, limit?: number | false): void | Bech32Decoded<string>;\n fromWords(to: number[]): Uint8Array;\n fromWordsUnsafe(to: number[]): void | Uint8Array;\n toWords(from: Uint8Array): number[];\n}\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction genBech32(encoding: 'bech32' | 'bech32m'): Bech32 {\n const ENCODING_CONST = encoding === 'bech32' ? 1 : 0x2bc830a3;\n const _words = radix2(5);\n const fromWords = _words.decode;\n const toWords = _words.encode;\n const fromWordsUnsafe = unsafeWrapper(fromWords);\n\n function encode<Prefix extends string>(\n prefix: Prefix,\n words: number[] | Uint8Array,\n limit: number | false = 90\n ): `${Lowercase<Prefix>}1${string}` {\n astr('bech32.encode prefix', prefix);\n if (isBytes(words)) words = Array.from(words);\n anumArr('bech32.encode', words);\n const plen = prefix.length;\n if (plen === 0) throw new TypeError(`Invalid prefix length ${plen}`);\n const actualLength = plen + 7 + words.length;\n if (limit !== false && actualLength > limit)\n throw new TypeError(`Length ${actualLength} exceeds limit ${limit}`);\n const lowered = prefix.toLowerCase();\n const sum = bechChecksum(lowered, words, ENCODING_CONST);\n return `${lowered}1${BECH_ALPHABET.encode(words)}${sum}` as `${Lowercase<Prefix>}1${string}`;\n }\n\n function decode<Prefix extends string>(\n str: `${Prefix}1${string}`,\n limit?: number | false\n ): Bech32Decoded<Prefix>;\n function decode(str: string, limit?: number | false): Bech32Decoded;\n function decode(str: string, limit: number | false = 90): Bech32Decoded {\n astr('bech32.decode input', str);\n const slen = str.length;\n if (slen < 8 || (limit !== false && slen > limit))\n throw new TypeError(`invalid string length: ${slen} (${str}). Expected (8..${limit})`);\n // don't allow mixed case\n const lowered = str.toLowerCase();\n if (str !== lowered && str !== str.toUpperCase())\n throw new Error(`String must be lowercase or uppercase`);\n const sepIndex = lowered.lastIndexOf('1');\n if (sepIndex === 0 || sepIndex === -1)\n throw new Error(`Letter \"1\" must be present between prefix and data only`);\n const prefix = lowered.slice(0, sepIndex);\n const data = lowered.slice(sepIndex + 1);\n if (data.length < 6) throw new Error('Data must be at least 6 characters long');\n const words = BECH_ALPHABET.decode(data).slice(0, -6);\n const sum = bechChecksum(prefix, words, ENCODING_CONST);\n if (!data.endsWith(sum)) throw new Error(`Invalid checksum in ${str}: expected \"${sum}\"`);\n return { prefix, words };\n }\n\n const decodeUnsafe = unsafeWrapper(decode);\n\n function decodeToBytes(str: string): Bech32DecodedWithArray {\n const { prefix, words } = decode(str, false);\n return { prefix, words, bytes: fromWords(words) };\n }\n\n function encodeFromBytes(prefix: string, bytes: Uint8Array) {\n return encode(prefix, toWords(bytes));\n }\n\n return {\n encode,\n decode,\n encodeFromBytes,\n decodeToBytes,\n decodeUnsafe,\n fromWords,\n fromWordsUnsafe,\n toWords,\n };\n}\n\n/**\n * bech32 from BIP 173. Operates on words.\n * For high-level, check out scure-btc-signer:\n * https://github.com/paulmillr/scure-btc-signer.\n */\nexport const bech32: Bech32 = genBech32('bech32');\n\n/**\n * bech32m from BIP 350. Operates on words.\n * It was to mitigate `bech32` weaknesses.\n * For high-level, check out scure-btc-signer:\n * https://github.com/paulmillr/scure-btc-signer.\n */\nexport const bech32m: Bech32 = genBech32('bech32m');\n\ndeclare const TextEncoder: any;\ndeclare const TextDecoder: any;\n\n/**\n * UTF-8-to-byte decoder. Uses built-in TextDecoder / TextEncoder.\n * @example\n * ```js\n * const b = utf8.decode(\"hey\"); // => new Uint8Array([ 104, 101, 121 ])\n * const str = utf8.encode(b); // \"hey\"\n * ```\n */\nexport const utf8: BytesCoder = {\n encode: (data) => new TextDecoder().decode(data),\n decode: (str) => new TextEncoder().encode(str),\n};\n\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\n// prettier-ignore\nconst hasHexBuiltin: boolean = /* @__PURE__ */ (() =>\n typeof (Uint8Array as any).from([]).toHex === 'function' &&\n typeof (Uint8Array as any).fromHex === 'function')();\n// prettier-ignore\nconst hexBuiltin: BytesCoder = {\n encode(data) { abytes(data); return (data as any).toHex(); },\n decode(s) { astr('hex', s); return (Uint8Array as any).fromHex(s); },\n};\n/**\n * hex string decoder. Uses built-in function, when available.\n * @example\n * ```js\n * const b = hex.decode(\"0102ff\"); // => new Uint8Array([ 1, 2, 255 ])\n * const str = hex.encode(b); // \"0102ff\"\n * ```\n */\nexport const hex: BytesCoder = hasHexBuiltin\n ? hexBuiltin\n : chain(\n radix2(4),\n alphabet('0123456789abcdef'),\n join(''),\n normalize((s: string) => {\n if (typeof s !== 'string' || s.length % 2 !== 0)\n throw new TypeError(\n `hex.decode: expected string, got ${typeof s} with length ${s.length}`\n );\n return s.toLowerCase();\n })\n );\n\nexport type SomeCoders = {\n utf8: BytesCoder;\n hex: BytesCoder;\n base16: BytesCoder;\n base32: BytesCoder;\n base64: BytesCoder;\n base64url: BytesCoder;\n base58: BytesCoder;\n base58xmr: BytesCoder;\n};\n// prettier-ignore\nconst CODERS: SomeCoders = {\n utf8, hex, base16, base32, base64, base64url, base58, base58xmr\n};\ntype CoderType = keyof SomeCoders;\nconst coderTypeError =\n 'Invalid encoding type. Available types: utf8, hex, base16, base32, base64, base64url, base58, base58xmr';\n\n/** @deprecated */\nexport const bytesToString = (type: CoderType, bytes: Uint8Array): string => {\n if (typeof type !== 'string' || !CODERS.hasOwnProperty(type)) throw new TypeError(coderTypeError);\n if (!isBytes(bytes)) throw new TypeError('bytesToString() expects Uint8Array');\n return CODERS[type].encode(bytes);\n};\n\n/** @deprecated */\nexport const str: (type: CoderType, bytes: Uint8Array) => string = bytesToString; // as in python, but for bytes only\n\n/** @deprecated */\nexport const stringToBytes = (type: CoderType, str: string): Uint8Array => {\n if (!CODERS.hasOwnProperty(type)) throw new TypeError(coderTypeError);\n if (typeof str !== 'string') throw new TypeError('stringToBytes() expects string');\n return CODERS[type].decode(str);\n};\n/** @deprecated */\nexport const bytes: (type: CoderType, str: string) => Uint8Array = stringToBytes;\n","\"use strict\";\r\n\r\nmodule.exports = factory(factory);\r\n\r\n/**\r\n * Reads / writes floats / doubles from / to buffers.\r\n * @name util.float\r\n * @namespace\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using little endian byte order.\r\n * @name util.float.writeFloatLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using big endian byte order.\r\n * @name util.float.writeFloatBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using little endian byte order.\r\n * @name util.float.readFloatLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using big endian byte order.\r\n * @name util.float.readFloatBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using little endian byte order.\r\n * @name util.float.writeDoubleLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using big endian byte order.\r\n * @name util.float.writeDoubleBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using little endian byte order.\r\n * @name util.float.readDoubleLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using big endian byte order.\r\n * @name util.float.readDoubleBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n// Factory function for the purpose of node-based testing in modified global environments\r\nfunction factory(exports) {\r\n\r\n // float: typed array\r\n if (typeof Float32Array !== \"undefined\") (function() {\r\n\r\n var f32 = new Float32Array([ -0 ]),\r\n f8b = new Uint8Array(f32.buffer),\r\n le = f8b[3] === 128;\r\n\r\n function writeFloat_f32_cpy(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n }\r\n\r\n function writeFloat_f32_rev(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[3];\r\n buf[pos + 1] = f8b[2];\r\n buf[pos + 2] = f8b[1];\r\n buf[pos + 3] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy;\r\n\r\n function readFloat_f32_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n function readFloat_f32_rev(buf, pos) {\r\n f8b[3] = buf[pos ];\r\n f8b[2] = buf[pos + 1];\r\n f8b[1] = buf[pos + 2];\r\n f8b[0] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy;\r\n\r\n // float: ieee754\r\n })(); else (function() {\r\n\r\n function writeFloat_ieee754(writeUint, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0)\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos);\r\n else if (isNaN(val))\r\n writeUint(2143289344, buf, pos);\r\n else if (val > 3.4028234663852886e+38) // +-Infinity\r\n writeUint((sign << 31 | 2139095040) >>> 0, buf, pos);\r\n else if (val < 1.1754943508222875e-38) // denormal\r\n writeUint((sign << 31 | Math.round(val / 1.401298464324817e-45)) >>> 0, buf, pos);\r\n else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2),\r\n mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607;\r\n writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);\r\n }\r\n }\r\n\r\n exports.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE);\r\n exports.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE);\r\n\r\n function readFloat_ieee754(readUint, buf, pos) {\r\n var uint = readUint(buf, pos),\r\n sign = (uint >> 31) * 2 + 1,\r\n exponent = uint >>> 23 & 255,\r\n mantissa = uint & 8388607;\r\n return exponent === 255\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 1.401298464324817e-45 * mantissa\r\n : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);\r\n }\r\n\r\n exports.readFloatLE = readFloat_ieee754.bind(null, readUintLE);\r\n exports.readFloatBE = readFloat_ieee754.bind(null, readUintBE);\r\n\r\n })();\r\n\r\n // double: typed array\r\n if (typeof Float64Array !== \"undefined\") (function() {\r\n\r\n var f64 = new Float64Array([-0]),\r\n f8b = new Uint8Array(f64.buffer),\r\n le = f8b[7] === 128;\r\n\r\n function writeDouble_f64_cpy(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n buf[pos + 4] = f8b[4];\r\n buf[pos + 5] = f8b[5];\r\n buf[pos + 6] = f8b[6];\r\n buf[pos + 7] = f8b[7];\r\n }\r\n\r\n function writeDouble_f64_rev(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[7];\r\n buf[pos + 1] = f8b[6];\r\n buf[pos + 2] = f8b[5];\r\n buf[pos + 3] = f8b[4];\r\n buf[pos + 4] = f8b[3];\r\n buf[pos + 5] = f8b[2];\r\n buf[pos + 6] = f8b[1];\r\n buf[pos + 7] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy;\r\n\r\n function readDouble_f64_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n f8b[4] = buf[pos + 4];\r\n f8b[5] = buf[pos + 5];\r\n f8b[6] = buf[pos + 6];\r\n f8b[7] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n function readDouble_f64_rev(buf, pos) {\r\n f8b[7] = buf[pos ];\r\n f8b[6] = buf[pos + 1];\r\n f8b[5] = buf[pos + 2];\r\n f8b[4] = buf[pos + 3];\r\n f8b[3] = buf[pos + 4];\r\n f8b[2] = buf[pos + 5];\r\n f8b[1] = buf[pos + 6];\r\n f8b[0] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy;\r\n\r\n // double: ieee754\r\n })(); else (function() {\r\n\r\n function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos + off1);\r\n } else if (isNaN(val)) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(2146959360, buf, pos + off1);\r\n } else if (val > 1.7976931348623157e+308) { // +-Infinity\r\n writeUint(0, buf, pos + off0);\r\n writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1);\r\n } else {\r\n var mantissa;\r\n if (val < 2.2250738585072014e-308) { // denormal\r\n mantissa = val / 5e-324;\r\n writeUint(mantissa >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1);\r\n } else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2);\r\n if (exponent === 1024)\r\n exponent = 1023;\r\n mantissa = val * Math.pow(2, -exponent);\r\n writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1);\r\n }\r\n }\r\n }\r\n\r\n exports.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4);\r\n exports.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0);\r\n\r\n function readDouble_ieee754(readUint, off0, off1, buf, pos) {\r\n var lo = readUint(buf, pos + off0),\r\n hi = readUint(buf, pos + off1);\r\n var sign = (hi >> 31) * 2 + 1,\r\n exponent = hi >>> 20 & 2047,\r\n mantissa = 4294967296 * (hi & 1048575) + lo;\r\n return exponent === 2047\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 5e-324 * mantissa\r\n : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);\r\n }\r\n\r\n exports.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4);\r\n exports.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0);\r\n\r\n })();\r\n\r\n return exports;\r\n}\r\n\r\n// uint helpers\r\n\r\nfunction writeUintLE(val, buf, pos) {\r\n buf[pos ] = val & 255;\r\n buf[pos + 1] = val >>> 8 & 255;\r\n buf[pos + 2] = val >>> 16 & 255;\r\n buf[pos + 3] = val >>> 24;\r\n}\r\n\r\nfunction writeUintBE(val, buf, pos) {\r\n buf[pos ] = val >>> 24;\r\n buf[pos + 1] = val >>> 16 & 255;\r\n buf[pos + 2] = val >>> 8 & 255;\r\n buf[pos + 3] = val & 255;\r\n}\r\n\r\nfunction readUintLE(buf, pos) {\r\n return (buf[pos ]\r\n | buf[pos + 1] << 8\r\n | buf[pos + 2] << 16\r\n | buf[pos + 3] << 24) >>> 0;\r\n}\r\n\r\nfunction readUintBE(buf, pos) {\r\n return (buf[pos ] << 24\r\n | buf[pos + 1] << 16\r\n | buf[pos + 2] << 8\r\n | buf[pos + 3]) >>> 0;\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal UTF8 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar utf8 = exports;\r\n\r\n/**\r\n * Calculates the UTF8 byte length of a string.\r\n * @param {string} string String\r\n * @returns {number} Byte length\r\n */\r\nutf8.length = function utf8_length(string) {\r\n var len = 0,\r\n c = 0;\r\n for (var i = 0; i < string.length; ++i) {\r\n c = string.charCodeAt(i);\r\n if (c < 128)\r\n len += 1;\r\n else if (c < 2048)\r\n len += 2;\r\n else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\r\n ++i;\r\n len += 4;\r\n } else\r\n len += 3;\r\n }\r\n return len;\r\n};\r\n\r\n/**\r\n * Reads UTF8 bytes as a string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} String read\r\n */\r\nutf8.read = function utf8_read(buffer, start, end) {\r\n var len = end - start;\r\n if (len < 1)\r\n return \"\";\r\n var parts = null,\r\n chunk = [],\r\n i = 0, // char offset\r\n t; // temporary\r\n while (start < end) {\r\n t = buffer[start++];\r\n if (t < 128)\r\n chunk[i++] = t;\r\n else if (t > 191 && t < 224)\r\n chunk[i++] = (t & 31) << 6 | buffer[start++] & 63;\r\n else if (t > 239 && t < 365) {\r\n t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 0x10000;\r\n chunk[i++] = 0xD800 + (t >> 10);\r\n chunk[i++] = 0xDC00 + (t & 1023);\r\n } else\r\n chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63;\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\n/**\r\n * Writes a string as UTF8 bytes.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Bytes written\r\n */\r\nutf8.write = function utf8_write(string, buffer, offset) {\r\n var start = offset,\r\n c1, // character 1\r\n c2; // character 2\r\n for (var i = 0; i < string.length; ++i) {\r\n c1 = string.charCodeAt(i);\r\n if (c1 < 128) {\r\n buffer[offset++] = c1;\r\n } else if (c1 < 2048) {\r\n buffer[offset++] = c1 >> 6 | 192;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\r\n c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF);\r\n ++i;\r\n buffer[offset++] = c1 >> 18 | 240;\r\n buffer[offset++] = c1 >> 12 & 63 | 128;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else {\r\n buffer[offset++] = c1 >> 12 | 224;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n }\r\n }\r\n return offset - start;\r\n};\r\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ChainDefinition } from \"./rpc/clients/config\";\n\n/** Default number of accounts to derive in HD wallets */\nexport const DEFAULT_NUM_ACCOUNTS: number = 1;\n\n/** Rialo mainnet RPC URL */\nexport const URL_MAINNET: string = \"https://mainnet.rialo.io:4101\";\n\n/** Rialo testnet RPC URL */\nexport const URL_TESTNET: string = \"https://testnet.rialo.io:4101\";\n\n/** Rialo devnet RPC URL */\nexport const URL_DEVNET: string = \"https://devnet.rialo.io:4101\";\n\n/** Rialo localnet RPC URL */\nexport const URL_LOCALNET: string = \"http://localhost:4104\";\n\nexport const RIALO_MAINNET_CHAIN: ChainDefinition = {\n\tid: \"rialo:mainnet\",\n\tname: \"Mainnet\",\n\trpcUrl: URL_MAINNET,\n};\n\nexport const RIALO_TESTNET_CHAIN: ChainDefinition = {\n\tid: \"rialo:testnet\",\n\tname: \"Testnet\",\n\trpcUrl: URL_TESTNET,\n};\n\nexport const RIALO_DEVNET_CHAIN: ChainDefinition = {\n\tid: \"rialo:devnet\",\n\tname: \"Devnet\",\n\trpcUrl: URL_DEVNET,\n};\n\nexport const RIALO_LOCALNET_CHAIN: ChainDefinition = {\n\tid: \"rialo:localnet\",\n\tname: \"Localhost\",\n\trpcUrl: URL_LOCALNET,\n};\n\n/** System program ID */\nexport const SYSTEM_PROGRAM_ID: string = \"11111111111111111111111111111111\";\n\n/** Base derivation path for Rialo wallets (BIP44 coin type 756) */\n/** Coin type 756 follows the telephone keypad convention: R=7, L=5, O=6 */\nexport const BASE_DERIVATION_PATH: string = \"m/44'/756'/\";\n\nexport const KELVIN_PER_RLO: number = 1_000_000_000;\n\nexport const PUBLIC_KEY_LENGTH: number = 32;\n\nexport const SECRET_KEY_LENGTH: number = 32;\n\nexport const SIGNATURE_LENGTH: number = 64;\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Error codes for cryptographic operations.\n */\nexport enum CryptoErrorCode {\n\tINVALID_KEY_LENGTH = \"INVALID_KEY_LENGTH\",\n\tINVALID_SIGNATURE = \"INVALID_SIGNATURE\",\n\tINVALID_PUBLIC_KEY = \"INVALID_PUBLIC_KEY\",\n\tINVALID_BLOCKHASH = \"INVALID_BLOCKHASH\",\n\tINVALID_MNEMONIC = \"INVALID_MNEMONIC\",\n\tKEY_DERIVATION_FAILED = \"KEY_DERIVATION_FAILED\",\n\tKEYPAIR_DISPOSED = \"KEYPAIR_DISPOSED\",\n\tMAX_SEED_LENGTH_EXCEEDED = \"MAX_SEED_LENGTH_EXCEEDED\",\n\tMAX_SEEDS_EXCEEDED = \"MAX_SEEDS_EXCEEDED\",\n\tINVALID_SEEDS_ON_CURVE = \"INVALID_SEEDS_ON_CURVE\",\n\tNO_VIABLE_BUMP_SEED = \"NO_VIABLE_BUMP_SEED\",\n\tINVALID_SEED = \"INVALID_SEED\",\n}\n\n/**\n * Error class for cryptographic operations.\n *\n * Provides structured error information with error codes and contextual details\n * for better debugging and error handling.\n */\nexport class CryptoError extends Error {\n\tpublic readonly code: CryptoErrorCode;\n\tpublic readonly details?: Record<string, unknown>;\n\n\tconstructor(\n\t\tcode: CryptoErrorCode,\n\t\tmessage: string,\n\t\tdetails?: Record<string, unknown>,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"CryptoError\";\n\t\tthis.code = code;\n\t\tthis.details = details;\n\t}\n\n\tstatic invalidKeyLength(expected: number, actual: number): CryptoError {\n\t\treturn new CryptoError(\n\t\t\tCryptoErrorCode.INVALID_KEY_LENGTH,\n\t\t\t`Invalid key length: expected ${expected} bytes, got ${actual} bytes`,\n\t\t\t{ expected, actual },\n\t\t);\n\t}\n\n\tstatic invalidMnemonic(reason?: string): CryptoError {\n\t\tconst message = reason\n\t\t\t? `Invalid mnemonic: ${reason}`\n\t\t\t: \"Invalid mnemonic phrase. Check that all words are valid and in the correct order.\";\n\t\treturn new CryptoError(CryptoErrorCode.INVALID_MNEMONIC, message);\n\t}\n\n\tstatic keyDerivationFailed(path: string, cause?: Error): CryptoError {\n\t\treturn new CryptoError(\n\t\t\tCryptoErrorCode.KEY_DERIVATION_FAILED,\n\t\t\t`Failed to derive key at path: ${path}`,\n\t\t\t{ path, cause: cause?.message },\n\t\t);\n\t}\n\n\tstatic keypairDisposed(): CryptoError {\n\t\treturn new CryptoError(\n\t\t\tCryptoErrorCode.KEYPAIR_DISPOSED,\n\t\t\t\"Cannot use disposed keypair. The private key has been securely erased from memory.\",\n\t\t);\n\t}\n}\n","/*! noble-ed25519 - MIT License (c) 2019 Paul Miller (paulmillr.com) */\n/**\n * 5KB JS implementation of ed25519 EdDSA signatures.\n * Compliant with RFC8032, FIPS 186-5 & ZIP215.\n * @module\n * @example\n * ```js\nimport * as ed from '@noble/ed25519';\n(async () => {\n const secretKey = ed.utils.randomSecretKey();\n const message = Uint8Array.from([0xab, 0xbc, 0xcd, 0xde]);\n const pubKey = await ed.getPublicKeyAsync(secretKey); // Sync methods are also present\n const signature = await ed.signAsync(message, secretKey);\n const isValid = await ed.verifyAsync(signature, message, pubKey);\n})();\n```\n */\n/**\n * Curve params. ed25519 is twisted edwards curve. Equation is −x² + y² = -a + dx²y².\n * * P = `2n**255n - 19n` // field over which calculations are done\n * * N = `2n**252n + 27742317777372353535851937790883648493n` // group order, amount of curve points\n * * h = 8 // cofactor\n * * a = `Fp.create(BigInt(-1))` // equation param\n * * d = -121665/121666 a.k.a. `Fp.neg(121665 * Fp.inv(121666))` // equation param\n * * Gx, Gy are coordinates of Generator / base point\n */\nconst ed25519_CURVE = {\n p: 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedn,\n n: 0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3edn,\n h: 8n,\n a: 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecn,\n d: 0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3n,\n Gx: 0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51an,\n Gy: 0x6666666666666666666666666666666666666666666666666666666666666658n,\n};\nconst { p: P, n: N, Gx, Gy, a: _a, d: _d, h } = ed25519_CURVE;\nconst L = 32; // field / group byte length\nconst L2 = 64;\n// Helpers and Precomputes sections are reused between libraries\n// ## Helpers\n// ----------\nconst captureTrace = (...args) => {\n if ('captureStackTrace' in Error && typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(...args);\n }\n};\nconst err = (message = '') => {\n const e = new Error(message);\n captureTrace(e, err);\n throw e;\n};\nconst isBig = (n) => typeof n === 'bigint'; // is big integer\nconst isStr = (s) => typeof s === 'string'; // is string\nconst isBytes = (a) => a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n/** Asserts something is Uint8Array. */\nconst abytes = (value, length, title = '') => {\n const bytes = isBytes(value);\n const len = value?.length;\n const needsLen = length !== undefined;\n if (!bytes || (needsLen && len !== length)) {\n const prefix = title && `\"${title}\" `;\n const ofLen = needsLen ? ` of length ${length}` : '';\n const got = bytes ? `length=${len}` : `type=${typeof value}`;\n err(prefix + 'expected Uint8Array' + ofLen + ', got ' + got);\n }\n return value;\n};\n/** create Uint8Array */\nconst u8n = (len) => new Uint8Array(len);\nconst u8fr = (buf) => Uint8Array.from(buf);\nconst padh = (n, pad) => n.toString(16).padStart(pad, '0');\nconst bytesToHex = (b) => Array.from(abytes(b))\n .map((e) => padh(e, 2))\n .join('');\nconst C = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 }; // ASCII characters\nconst _ch = (ch) => {\n if (ch >= C._0 && ch <= C._9)\n return ch - C._0; // '2' => 50-48\n if (ch >= C.A && ch <= C.F)\n return ch - (C.A - 10); // 'B' => 66-(65-10)\n if (ch >= C.a && ch <= C.f)\n return ch - (C.a - 10); // 'b' => 98-(97-10)\n return;\n};\nconst hexToBytes = (hex) => {\n const e = 'hex invalid';\n if (!isStr(hex))\n return err(e);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n return err(e);\n const array = u8n(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n // treat each char as ASCII\n const n1 = _ch(hex.charCodeAt(hi)); // parse first char, multiply it by 16\n const n2 = _ch(hex.charCodeAt(hi + 1)); // parse second char\n if (n1 === undefined || n2 === undefined)\n return err(e);\n array[ai] = n1 * 16 + n2; // example: 'A9' => 10*16 + 9\n }\n return array;\n};\nconst cr = () => globalThis?.crypto; // WebCrypto is available in all modern environments\nconst subtle = () => cr()?.subtle ?? err('crypto.subtle must be defined, consider polyfill');\n// prettier-ignore\nconst concatBytes = (...arrs) => {\n const r = u8n(arrs.reduce((sum, a) => sum + abytes(a).length, 0)); // create u8a of summed length\n let pad = 0; // walk through each array,\n arrs.forEach(a => { r.set(a, pad); pad += a.length; }); // ensure they have proper type\n return r;\n};\n/** WebCrypto OS-level CSPRNG (random number generator). Will throw when not available. */\nconst randomBytes = (len = L) => {\n const c = cr();\n return c.getRandomValues(u8n(len));\n};\nconst big = BigInt;\nconst assertRange = (n, min, max, msg = 'bad number: out of range') => (isBig(n) && min <= n && n < max ? n : err(msg));\n/** modular division */\nconst M = (a, b = P) => {\n const r = a % b;\n return r >= 0n ? r : b + r;\n};\nconst modN = (a) => M(a, N);\n/** Modular inversion using euclidean GCD (non-CT). No negative exponent for now. */\n// prettier-ignore\nconst invert = (num, md) => {\n if (num === 0n || md <= 0n)\n err('no inverse n=' + num + ' mod=' + md);\n let a = M(num, md), b = md, x = 0n, y = 1n, u = 1n, v = 0n;\n while (a !== 0n) {\n const q = b / a, r = b % a;\n const m = x - u * q, n = y - v * q;\n b = a, a = r, x = u, y = v, u = m, v = n;\n }\n return b === 1n ? M(x, md) : err('no inverse'); // b is gcd at this point\n};\nconst callHash = (name) => {\n // @ts-ignore\n const fn = hashes[name];\n if (typeof fn !== 'function')\n err('hashes.' + name + ' not set');\n return fn;\n};\nconst hash = (msg) => callHash('sha512')(msg);\nconst apoint = (p) => (p instanceof Point ? p : err('Point expected'));\n// ## End of Helpers\n// -----------------\nconst B256 = 2n ** 256n;\n/** Point in XYZT extended coordinates. */\nclass Point {\n static BASE;\n static ZERO;\n X;\n Y;\n Z;\n T;\n constructor(X, Y, Z, T) {\n const max = B256;\n this.X = assertRange(X, 0n, max);\n this.Y = assertRange(Y, 0n, max);\n this.Z = assertRange(Z, 1n, max);\n this.T = assertRange(T, 0n, max);\n Object.freeze(this);\n }\n static CURVE() {\n return ed25519_CURVE;\n }\n static fromAffine(p) {\n return new Point(p.x, p.y, 1n, M(p.x * p.y));\n }\n /** RFC8032 5.1.3: Uint8Array to Point. */\n static fromBytes(hex, zip215 = false) {\n const d = _d;\n // Copy array to not mess it up.\n const normed = u8fr(abytes(hex, L));\n // adjust first LE byte = last BE byte\n const lastByte = hex[31];\n normed[31] = lastByte & ~0x80;\n const y = bytesToNumLE(normed);\n // zip215=true: 0 <= y < 2^256\n // zip215=false, RFC8032: 0 <= y < 2^255-19\n const max = zip215 ? B256 : P;\n assertRange(y, 0n, max);\n const y2 = M(y * y); // y²\n const u = M(y2 - 1n); // u=y²-1\n const v = M(d * y2 + 1n); // v=dy²+1\n let { isValid, value: x } = uvRatio(u, v); // (uv³)(uv⁷)^(p-5)/8; square root\n if (!isValid)\n err('bad point: y not sqrt'); // not square root: bad point\n const isXOdd = (x & 1n) === 1n; // adjust sign of x coordinate\n const isLastByteOdd = (lastByte & 0x80) !== 0; // x_0, last bit\n if (!zip215 && x === 0n && isLastByteOdd)\n err('bad point: x==0, isLastByteOdd'); // x=0, x_0=1\n if (isLastByteOdd !== isXOdd)\n x = M(-x);\n return new Point(x, y, 1n, M(x * y)); // Z=1, T=xy\n }\n static fromHex(hex, zip215) {\n return Point.fromBytes(hexToBytes(hex), zip215);\n }\n get x() {\n return this.toAffine().x;\n }\n get y() {\n return this.toAffine().y;\n }\n /** Checks if the point is valid and on-curve. */\n assertValidity() {\n const a = _a;\n const d = _d;\n const p = this;\n if (p.is0())\n return err('bad point: ZERO'); // TODO: optimize, with vars below?\n // Equation in affine coordinates: ax² + y² = 1 + dx²y²\n // Equation in projective coordinates (X/Z, Y/Z, Z): (aX² + Y²)Z² = Z⁴ + dX²Y²\n const { X, Y, Z, T } = p;\n const X2 = M(X * X); // X²\n const Y2 = M(Y * Y); // Y²\n const Z2 = M(Z * Z); // Z²\n const Z4 = M(Z2 * Z2); // Z⁴\n const aX2 = M(X2 * a); // aX²\n const left = M(Z2 * M(aX2 + Y2)); // (aX² + Y²)Z²\n const right = M(Z4 + M(d * M(X2 * Y2))); // Z⁴ + dX²Y²\n if (left !== right)\n return err('bad point: equation left != right (1)');\n // In Extended coordinates we also have T, which is x*y=T/Z: check X*Y == Z*T\n const XY = M(X * Y);\n const ZT = M(Z * T);\n if (XY !== ZT)\n return err('bad point: equation left != right (2)');\n return this;\n }\n /** Equality check: compare points P&Q. */\n equals(other) {\n const { X: X1, Y: Y1, Z: Z1 } = this;\n const { X: X2, Y: Y2, Z: Z2 } = apoint(other); // checks class equality\n const X1Z2 = M(X1 * Z2);\n const X2Z1 = M(X2 * Z1);\n const Y1Z2 = M(Y1 * Z2);\n const Y2Z1 = M(Y2 * Z1);\n return X1Z2 === X2Z1 && Y1Z2 === Y2Z1;\n }\n is0() {\n return this.equals(I);\n }\n /** Flip point over y coordinate. */\n negate() {\n return new Point(M(-this.X), this.Y, this.Z, M(-this.T));\n }\n /** Point doubling. Complete formula. Cost: `4M + 4S + 1*a + 6add + 1*2`. */\n double() {\n const { X: X1, Y: Y1, Z: Z1 } = this;\n const a = _a;\n // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended.html#doubling-dbl-2008-hwcd\n const A = M(X1 * X1);\n const B = M(Y1 * Y1);\n const C = M(2n * M(Z1 * Z1));\n const D = M(a * A);\n const x1y1 = X1 + Y1;\n const E = M(M(x1y1 * x1y1) - A - B);\n const G = D + B;\n const F = G - C;\n const H = D - B;\n const X3 = M(E * F);\n const Y3 = M(G * H);\n const T3 = M(E * H);\n const Z3 = M(F * G);\n return new Point(X3, Y3, Z3, T3);\n }\n /** Point addition. Complete formula. Cost: `8M + 1*k + 8add + 1*2`. */\n add(other) {\n const { X: X1, Y: Y1, Z: Z1, T: T1 } = this;\n const { X: X2, Y: Y2, Z: Z2, T: T2 } = apoint(other); // doesn't check if other on-curve\n const a = _a;\n const d = _d;\n // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html#addition-add-2008-hwcd-3\n const A = M(X1 * X2);\n const B = M(Y1 * Y2);\n const C = M(T1 * d * T2);\n const D = M(Z1 * Z2);\n const E = M((X1 + Y1) * (X2 + Y2) - A - B);\n const F = M(D - C);\n const G = M(D + C);\n const H = M(B - a * A);\n const X3 = M(E * F);\n const Y3 = M(G * H);\n const T3 = M(E * H);\n const Z3 = M(F * G);\n return new Point(X3, Y3, Z3, T3);\n }\n subtract(other) {\n return this.add(apoint(other).negate());\n }\n /**\n * Point-by-scalar multiplication. Scalar must be in range 1 <= n < CURVE.n.\n * Uses {@link wNAF} for base point.\n * Uses fake point to mitigate side-channel leakage.\n * @param n scalar by which point is multiplied\n * @param safe safe mode guards against timing attacks; unsafe mode is faster\n */\n multiply(n, safe = true) {\n if (!safe && (n === 0n || this.is0()))\n return I;\n assertRange(n, 1n, N);\n if (n === 1n)\n return this;\n if (this.equals(G))\n return wNAF(n).p;\n // init result point & fake point\n let p = I;\n let f = G;\n for (let d = this; n > 0n; d = d.double(), n >>= 1n) {\n // if bit is present, add to point\n // if not present, add to fake, for timing safety\n if (n & 1n)\n p = p.add(d);\n else if (safe)\n f = f.add(d);\n }\n return p;\n }\n multiplyUnsafe(scalar) {\n return this.multiply(scalar, false);\n }\n /** Convert point to 2d xy affine point. (X, Y, Z) ∋ (x=X/Z, y=Y/Z) */\n toAffine() {\n const { X, Y, Z } = this;\n // fast-paths for ZERO point OR Z=1\n if (this.equals(I))\n return { x: 0n, y: 1n };\n const iz = invert(Z, P);\n // (Z * Z^-1) must be 1, otherwise bad math\n if (M(Z * iz) !== 1n)\n err('invalid inverse');\n // x = X*Z^-1; y = Y*Z^-1\n const x = M(X * iz);\n const y = M(Y * iz);\n return { x, y };\n }\n toBytes() {\n const { x, y } = this.assertValidity().toAffine();\n const b = numTo32bLE(y);\n // store sign in first LE byte\n b[31] |= x & 1n ? 0x80 : 0;\n return b;\n }\n toHex() {\n return bytesToHex(this.toBytes());\n }\n clearCofactor() {\n return this.multiply(big(h), false);\n }\n isSmallOrder() {\n return this.clearCofactor().is0();\n }\n isTorsionFree() {\n // Multiply by big number N. We can't `mul(N)` because of checks. Instead, we `mul(N/2)*2+1`\n let p = this.multiply(N / 2n, false).double();\n if (N % 2n)\n p = p.add(this);\n return p.is0();\n }\n}\n/** Generator / base point */\nconst G = new Point(Gx, Gy, 1n, M(Gx * Gy));\n/** Identity / zero point */\nconst I = new Point(0n, 1n, 1n, 0n);\n// Static aliases\nPoint.BASE = G;\nPoint.ZERO = I;\nconst numTo32bLE = (num) => hexToBytes(padh(assertRange(num, 0n, B256), L2)).reverse();\nconst bytesToNumLE = (b) => big('0x' + bytesToHex(u8fr(abytes(b)).reverse()));\nconst pow2 = (x, power) => {\n // pow2(x, 4) == x^(2^4)\n let r = x;\n while (power-- > 0n) {\n r *= r;\n r %= P;\n }\n return r;\n};\n// prettier-ignore\nconst pow_2_252_3 = (x) => {\n const x2 = (x * x) % P; // x^2, bits 1\n const b2 = (x2 * x) % P; // x^3, bits 11\n const b4 = (pow2(b2, 2n) * b2) % P; // x^(2^4-1), bits 1111\n const b5 = (pow2(b4, 1n) * x) % P; // x^(2^5-1), bits 11111\n const b10 = (pow2(b5, 5n) * b5) % P; // x^(2^10)\n const b20 = (pow2(b10, 10n) * b10) % P; // x^(2^20)\n const b40 = (pow2(b20, 20n) * b20) % P; // x^(2^40)\n const b80 = (pow2(b40, 40n) * b40) % P; // x^(2^80)\n const b160 = (pow2(b80, 80n) * b80) % P; // x^(2^160)\n const b240 = (pow2(b160, 80n) * b80) % P; // x^(2^240)\n const b250 = (pow2(b240, 10n) * b10) % P; // x^(2^250)\n const pow_p_5_8 = (pow2(b250, 2n) * x) % P; // < To pow to (p+3)/8, multiply it by x.\n return { pow_p_5_8, b2 };\n};\nconst RM1 = 0x2b8324804fc1df0b2b4d00993dfbd7a72f431806ad2fe478c4ee1b274a0ea0b0n; // √-1\n// for sqrt comp\n// prettier-ignore\nconst uvRatio = (u, v) => {\n const v3 = M(v * v * v); // v³\n const v7 = M(v3 * v3 * v); // v⁷\n const pow = pow_2_252_3(u * v7).pow_p_5_8; // (uv⁷)^(p-5)/8\n let x = M(u * v3 * pow); // (uv³)(uv⁷)^(p-5)/8\n const vx2 = M(v * x * x); // vx²\n const root1 = x; // First root candidate\n const root2 = M(x * RM1); // Second root candidate; RM1 is √-1\n const useRoot1 = vx2 === u; // If vx² = u (mod p), x is a square root\n const useRoot2 = vx2 === M(-u); // If vx² = -u, set x <-- x * 2^((p-1)/4)\n const noRoot = vx2 === M(-u * RM1); // There is no valid root, vx² = -u√-1\n if (useRoot1)\n x = root1;\n if (useRoot2 || noRoot)\n x = root2; // We return root2 anyway, for const-time\n if ((M(x) & 1n) === 1n)\n x = M(-x); // edIsNegative\n return { isValid: useRoot1 || useRoot2, value: x };\n};\n// N == L, just weird naming\nconst modL_LE = (hash) => modN(bytesToNumLE(hash)); // modulo L; but little-endian\n/** hashes.sha512 should conform to the interface. */\n// TODO: rename\nconst sha512a = (...m) => hashes.sha512Async(concatBytes(...m)); // Async SHA512\nconst sha512s = (...m) => callHash('sha512')(concatBytes(...m));\n// RFC8032 5.1.5\nconst hash2extK = (hashed) => {\n // slice creates a copy, unlike subarray\n const head = hashed.slice(0, L);\n head[0] &= 248; // Clamp bits: 0b1111_1000\n head[31] &= 127; // 0b0111_1111\n head[31] |= 64; // 0b0100_0000\n const prefix = hashed.slice(L, L2); // secret key \"prefix\"\n const scalar = modL_LE(head); // modular division over curve order\n const point = G.multiply(scalar); // public key point\n const pointBytes = point.toBytes(); // point serialized to Uint8Array\n return { head, prefix, scalar, point, pointBytes };\n};\n// RFC8032 5.1.5; getPublicKey async, sync. Hash priv key and extract point.\nconst getExtendedPublicKeyAsync = (secretKey) => sha512a(abytes(secretKey, L)).then(hash2extK);\nconst getExtendedPublicKey = (secretKey) => hash2extK(sha512s(abytes(secretKey, L)));\n/** Creates 32-byte ed25519 public key from 32-byte secret key. Async. */\nconst getPublicKeyAsync = (secretKey) => getExtendedPublicKeyAsync(secretKey).then((p) => p.pointBytes);\n/** Creates 32-byte ed25519 public key from 32-byte secret key. To use, set `hashes.sha512` first. */\nconst getPublicKey = (priv) => getExtendedPublicKey(priv).pointBytes;\nconst hashFinishA = (res) => sha512a(res.hashable).then(res.finish);\nconst hashFinishS = (res) => res.finish(sha512s(res.hashable));\n// Code, shared between sync & async sign\nconst _sign = (e, rBytes, msg) => {\n const { pointBytes: P, scalar: s } = e;\n const r = modL_LE(rBytes); // r was created outside, reduce it modulo L\n const R = G.multiply(r).toBytes(); // R = [r]B\n const hashable = concatBytes(R, P, msg); // dom2(F, C) || R || A || PH(M)\n const finish = (hashed) => {\n // k = SHA512(dom2(F, C) || R || A || PH(M))\n const S = modN(r + modL_LE(hashed) * s); // S = (r + k * s) mod L; 0 <= s < l\n return abytes(concatBytes(R, numTo32bLE(S)), L2); // 64-byte sig: 32b R.x + 32b LE(S)\n };\n return { hashable, finish };\n};\n/**\n * Signs message using secret key. Async.\n * Follows RFC8032 5.1.6.\n */\nconst signAsync = async (message, secretKey) => {\n const m = abytes(message);\n const e = await getExtendedPublicKeyAsync(secretKey);\n const rBytes = await sha512a(e.prefix, m); // r = SHA512(dom2(F, C) || prefix || PH(M))\n return hashFinishA(_sign(e, rBytes, m)); // gen R, k, S, then 64-byte signature\n};\n/**\n * Signs message using secret key. To use, set `hashes.sha512` first.\n * Follows RFC8032 5.1.6.\n */\nconst sign = (message, secretKey) => {\n const m = abytes(message);\n const e = getExtendedPublicKey(secretKey);\n const rBytes = sha512s(e.prefix, m); // r = SHA512(dom2(F, C) || prefix || PH(M))\n return hashFinishS(_sign(e, rBytes, m)); // gen R, k, S, then 64-byte signature\n};\nconst defaultVerifyOpts = { zip215: true };\nconst _verify = (sig, msg, pub, opts = defaultVerifyOpts) => {\n sig = abytes(sig, L2); // Signature hex str/Bytes, must be 64 bytes\n msg = abytes(msg); // Message hex str/Bytes\n pub = abytes(pub, L);\n const { zip215 } = opts; // switch between zip215 and rfc8032 verif\n let A;\n let R;\n let s;\n let SB;\n let hashable = Uint8Array.of();\n try {\n A = Point.fromBytes(pub, zip215); // public key A decoded\n R = Point.fromBytes(sig.slice(0, L), zip215); // 0 <= R < 2^256: ZIP215 R can be >= P\n s = bytesToNumLE(sig.slice(L, L2)); // Decode second half as an integer S\n SB = G.multiply(s, false); // in the range 0 <= s < L\n hashable = concatBytes(R.toBytes(), A.toBytes(), msg); // dom2(F, C) || R || A || PH(M)\n }\n catch (error) { }\n const finish = (hashed) => {\n // k = SHA512(dom2(F, C) || R || A || PH(M))\n if (SB == null)\n return false; // false if try-catch catched an error\n if (!zip215 && A.isSmallOrder())\n return false; // false for SBS: Strongly Binding Signature\n const k = modL_LE(hashed); // decode in little-endian, modulo L\n const RkA = R.add(A.multiply(k, false)); // [8]R + [8][k]A'\n return RkA.add(SB.negate()).clearCofactor().is0(); // [8][S]B = [8]R + [8][k]A'\n };\n return { hashable, finish };\n};\n/** Verifies signature on message and public key. Async. Follows RFC8032 5.1.7. */\nconst verifyAsync = async (signature, message, publicKey, opts = defaultVerifyOpts) => hashFinishA(_verify(signature, message, publicKey, opts));\n/** Verifies signature on message and public key. To use, set `hashes.sha512` first. Follows RFC8032 5.1.7. */\nconst verify = (signature, message, publicKey, opts = defaultVerifyOpts) => hashFinishS(_verify(signature, message, publicKey, opts));\n/** Math, hex, byte helpers. Not in `utils` because utils share API with noble-curves. */\nconst etc = {\n bytesToHex: bytesToHex,\n hexToBytes: hexToBytes,\n concatBytes: concatBytes,\n mod: M,\n invert: invert,\n randomBytes: randomBytes,\n};\nconst hashes = {\n sha512Async: async (message) => {\n const s = subtle();\n const m = concatBytes(message);\n return u8n(await s.digest('SHA-512', m.buffer));\n },\n sha512: undefined,\n};\n// FIPS 186 B.4.1 compliant key generation produces private keys\n// with modulo bias being neglible. takes >N+16 bytes, returns (hash mod n-1)+1\nconst randomSecretKey = (seed = randomBytes(L)) => seed;\nconst keygen = (seed) => {\n const secretKey = randomSecretKey(seed);\n const publicKey = getPublicKey(secretKey);\n return { secretKey, publicKey };\n};\nconst keygenAsync = async (seed) => {\n const secretKey = randomSecretKey(seed);\n const publicKey = await getPublicKeyAsync(secretKey);\n return { secretKey, publicKey };\n};\n/** ed25519-specific key utilities. */\nconst utils = {\n getExtendedPublicKeyAsync: getExtendedPublicKeyAsync,\n getExtendedPublicKey: getExtendedPublicKey,\n randomSecretKey: randomSecretKey,\n};\n// ## Precomputes\n// --------------\nconst W = 8; // W is window size\nconst scalarBits = 256;\nconst pwindows = Math.ceil(scalarBits / W) + 1; // 33 for W=8, NOT 32 - see wNAF loop\nconst pwindowSize = 2 ** (W - 1); // 128 for W=8\nconst precompute = () => {\n const points = [];\n let p = G;\n let b = p;\n for (let w = 0; w < pwindows; w++) {\n b = p;\n points.push(b);\n for (let i = 1; i < pwindowSize; i++) {\n b = b.add(p);\n points.push(b);\n } // i=1, bc we skip 0\n p = b.double();\n }\n return points;\n};\nlet Gpows = undefined; // precomputes for base point G\n// const-time negate\nconst ctneg = (cnd, p) => {\n const n = p.negate();\n return cnd ? n : p;\n};\n/**\n * Precomputes give 12x faster getPublicKey(), 10x sign(), 2x verify() by\n * caching multiples of G (base point). Cache is stored in 32MB of RAM.\n * Any time `G.multiply` is done, precomputes are used.\n * Not used for getSharedSecret, which instead multiplies random pubkey `P.multiply`.\n *\n * w-ary non-adjacent form (wNAF) precomputation method is 10% slower than windowed method,\n * but takes 2x less RAM. RAM reduction is possible by utilizing `.subtract`.\n *\n * !! Precomputes can be disabled by commenting-out call of the wNAF() inside Point#multiply().\n */\nconst wNAF = (n) => {\n const comp = Gpows || (Gpows = precompute());\n let p = I;\n let f = G; // f must be G, or could become I in the end\n const pow_2_w = 2 ** W; // 256 for W=8\n const maxNum = pow_2_w; // 256 for W=8\n const mask = big(pow_2_w - 1); // 255 for W=8 == mask 0b11111111\n const shiftBy = big(W); // 8 for W=8\n for (let w = 0; w < pwindows; w++) {\n let wbits = Number(n & mask); // extract W bits.\n n >>= shiftBy; // shift number by W bits.\n // We use negative indexes to reduce size of precomputed table by 2x.\n // Instead of needing precomputes 0..256, we only calculate them for 0..128.\n // If an index > 128 is found, we do (256-index) - where 256 is next window.\n // Naive: index +127 => 127, +224 => 224\n // Optimized: index +127 => 127, +224 => 256-32\n if (wbits > pwindowSize) {\n wbits -= maxNum;\n n += 1n;\n }\n const off = w * pwindowSize;\n const offF = off; // offsets, evaluate both\n const offP = off + Math.abs(wbits) - 1;\n const isEven = w % 2 !== 0; // conditions, evaluate both\n const isNeg = wbits < 0;\n if (wbits === 0) {\n // off == I: can't add it. Adding random offF instead.\n f = f.add(ctneg(isEven, comp[offF])); // bits are 0: add garbage to fake point\n }\n else {\n p = p.add(ctneg(isNeg, comp[offP])); // bits are 1: add to result point\n }\n }\n if (n !== 0n)\n err('invalid wnaf');\n return { p, f }; // return both real and fake points for JIT\n};\n// !! Remove the export to easily use in REPL / browser console\nexport { etc, getPublicKey, getPublicKeyAsync, hash, hashes, keygen, keygenAsync, Point, sign, signAsync, utils, verify, verifyAsync, };\n","/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */\nexport function isBytes(a: unknown): a is Uint8Array {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n\n/** Asserts something is positive integer. */\nexport function anumber(n: number, title: string = ''): void {\n if (!Number.isSafeInteger(n) || n < 0) {\n const prefix = title && `\"${title}\" `;\n throw new Error(`${prefix}expected integer >0, got ${n}`);\n }\n}\n\n/** Asserts something is Uint8Array. */\nexport function abytes(value: Uint8Array, length?: number, title: string = ''): Uint8Array {\n const bytes = isBytes(value);\n const len = value?.length;\n const needsLen = length !== undefined;\n if (!bytes || (needsLen && len !== length)) {\n const prefix = title && `\"${title}\" `;\n const ofLen = needsLen ? ` of length ${length}` : '';\n const got = bytes ? `length=${len}` : `type=${typeof value}`;\n throw new Error(prefix + 'expected Uint8Array' + ofLen + ', got ' + got);\n }\n return value;\n}\n\n/** Asserts something is hash */\nexport function ahash(h: CHash): void {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new Error('Hash must wrapped by utils.createHasher');\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\n\n/** Asserts a hash instance has not been destroyed / finished */\nexport function aexists(instance: any, checkFinished = true): void {\n if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\n\n/** Asserts output is properly-sized byte array */\nexport function aoutput(out: any, instance: any): void {\n abytes(out, undefined, 'digestInto() output');\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('\"digestInto() output\" expected to be of length >=' + min);\n }\n}\n\n/** Generic type encompassing 8/16/32-byte arrays - but not 64-byte. */\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n Uint16Array | Int16Array | Uint32Array | Int32Array;\n\n/** Cast u8 / u16 / u32 to u8. */\nexport function u8(arr: TypedArray): Uint8Array {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** Cast u8 / u16 / u32 to u32. */\nexport function u32(arr: TypedArray): Uint32Array {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n\n/** Zeroize a byte array. Warning: JS provides no guarantees. */\nexport function clean(...arrays: TypedArray[]): void {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\n\n/** Create DataView of an array for easy byte-level manipulation. */\nexport function createView(arr: TypedArray): DataView {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** The rotate right (circular right shift) operation for uint32 */\nexport function rotr(word: number, shift: number): number {\n return (word << (32 - shift)) | (word >>> shift);\n}\n\n/** The rotate left (circular left shift) operation for uint32 */\nexport function rotl(word: number, shift: number): number {\n return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nexport const isLE: boolean = /* @__PURE__ */ (() =>\n new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n\n/** The byte swap operation for uint32 */\nexport function byteSwap(word: number): number {\n return (\n ((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff)\n );\n}\n/** Conditionally byte swap if on a big-endian platform */\nexport const swap8IfBE: (n: number) => number = isLE\n ? (n: number) => n\n : (n: number) => byteSwap(n);\n\n/** In place byte swap for Uint32Array */\nexport function byteSwap32(arr: Uint32Array): Uint32Array {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\n\nexport const swap32IfBE: (u: Uint32Array) => Uint32Array = isLE\n ? (u: Uint32Array) => u\n : byteSwap32;\n\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin: boolean = /* @__PURE__ */ (() =>\n // @ts-ignore\n typeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n i.toString(16).padStart(2, '0')\n);\n\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin) return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 } as const;\nfunction asciiToBase16(ch: number): number | undefined {\n if (ch >= asciis._0 && ch <= asciis._9) return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F) return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f) return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n // @ts-ignore\n if (hasHexBuiltin) return Uint8Array.fromHex(hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2) throw new Error('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * Call of async fn will return Promise, which will be fullfiled only on\n * next scheduler queue processing step and this is exactly what we need.\n */\nexport const nextTick = async (): Promise<void> => {};\n\n/** Returns control to thread each 'tick' ms to avoid blocking. */\nexport async function asyncLoop(\n iters: number,\n tick: number,\n cb: (i: number) => void\n): Promise<void> {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick) continue;\n await nextTick();\n ts += diff;\n }\n}\n\n// Global symbols, but ts doesn't see them: https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * Converts string to bytes using UTF8 encoding.\n * Built-in doesn't validate input to be string: we do the check.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n if (typeof str !== 'string') throw new Error('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\n/** KDFs can accept string or Uint8Array for user convenience. */\nexport type KDFInput = string | Uint8Array;\n\n/**\n * Helper for KDFs: consumes uint8array or string.\n * When string is passed, does utf8 decoding, using TextDecoder.\n */\nexport function kdfInputToBytes(data: KDFInput, errorTitle = ''): Uint8Array {\n if (typeof data === 'string') return utf8ToBytes(data);\n return abytes(data, undefined, errorTitle);\n}\n\n/** Copies several Uint8Arrays into one. */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\n\ntype EmptyObj = {};\n/** Merges default options and passed options. */\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n defaults: T1,\n opts?: T2\n): T1 & T2 {\n if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n throw new Error('options must be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged as T1 & T2;\n}\n\n/** Common interface for all hashes. */\nexport interface Hash<T> {\n blockLen: number; // Bytes per block\n outputLen: number; // Bytes in output\n update(buf: Uint8Array): this;\n digestInto(buf: Uint8Array): void;\n digest(): Uint8Array;\n destroy(): void;\n _cloneInto(to?: T): T;\n clone(): T;\n}\n\n/** PseudoRandom (number) Generator */\nexport interface PRG {\n addEntropy(seed: Uint8Array): void;\n randomBytes(length: number): Uint8Array;\n clean(): void;\n}\n\n/**\n * XOF: streaming API to read digest in chunks.\n * Same as 'squeeze' in keccak/k12 and 'seek' in blake3, but more generic name.\n * When hash used in XOF mode it is up to user to call '.destroy' afterwards, since we cannot\n * destroy state, next call can require more bytes.\n */\nexport type HashXOF<T extends Hash<T>> = Hash<T> & {\n xof(bytes: number): Uint8Array; // Read 'bytes' bytes from digest stream\n xofInto(buf: Uint8Array): Uint8Array; // read buf.length bytes from digest stream into buf\n};\n\n/** Hash constructor */\nexport type HasherCons<T, Opts = undefined> = Opts extends undefined ? () => T : (opts?: Opts) => T;\n/** Optional hash params. */\nexport type HashInfo = {\n oid?: Uint8Array; // DER encoded OID in bytes\n};\n/** Hash function */\nexport type CHash<T extends Hash<T> = Hash<any>, Opts = undefined> = {\n outputLen: number;\n blockLen: number;\n} & HashInfo &\n (Opts extends undefined\n ? {\n (msg: Uint8Array): Uint8Array;\n create(): T;\n }\n : {\n (msg: Uint8Array, opts?: Opts): Uint8Array;\n create(opts?: Opts): T;\n });\n/** XOF with output */\nexport type CHashXOF<T extends HashXOF<T> = HashXOF<any>, Opts = undefined> = CHash<T, Opts>;\n\n/** Creates function with outputLen, blockLen, create properties from a class constructor. */\nexport function createHasher<T extends Hash<T>, Opts = undefined>(\n hashCons: HasherCons<T, Opts>,\n info: HashInfo = {}\n): CHash<T, Opts> {\n const hashC: any = (msg: Uint8Array, opts?: Opts) => hashCons(opts).update(msg).digest();\n const tmp = hashCons(undefined);\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts?: Opts) => hashCons(opts);\n Object.assign(hashC, info);\n return Object.freeze(hashC);\n}\n\n/** Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`. */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n const cr = typeof globalThis === 'object' ? (globalThis as any).crypto : null;\n if (typeof cr?.getRandomValues !== 'function')\n throw new Error('crypto.getRandomValues must be defined');\n return cr.getRandomValues(new Uint8Array(bytesLength));\n}\n\n/** Creates OID opts for NIST hashes, with prefix 06 09 60 86 48 01 65 03 04 02. */\nexport const oidNist = (suffix: number): Required<HashInfo> => ({\n oid: Uint8Array.from([0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, suffix]),\n});\n","/**\n * Internal Merkle-Damgard hash utils.\n * @module\n */\nimport { abytes, aexists, aoutput, clean, createView, type Hash } from './utils.ts';\n\n/** Choice: a ? b : c */\nexport function Chi(a: number, b: number, c: number): number {\n return (a & b) ^ (~a & c);\n}\n\n/** Majority function, true if any two inputs is true. */\nexport function Maj(a: number, b: number, c: number): number {\n return (a & b) ^ (a & c) ^ (b & c);\n}\n\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */\nexport abstract class HashMD<T extends HashMD<T>> implements Hash<T> {\n protected abstract process(buf: DataView, offset: number): void;\n protected abstract get(): number[];\n protected abstract set(...args: number[]): void;\n abstract destroy(): void;\n protected abstract roundClean(): void;\n\n readonly blockLen: number;\n readonly outputLen: number;\n readonly padOffset: number;\n readonly isLE: boolean;\n\n // For partial updates less than block size\n protected buffer: Uint8Array;\n protected view: DataView;\n protected finished = false;\n protected length = 0;\n protected pos = 0;\n protected destroyed = false;\n\n constructor(blockLen: number, outputLen: number, padOffset: number, isLE: boolean) {\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data: Uint8Array): this {\n aexists(this);\n abytes(data);\n const { view, buffer, blockLen } = this;\n const len = data.length;\n for (let pos = 0; pos < len; ) {\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = createView(data);\n for (; blockLen <= len - pos; pos += blockLen) this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out: Uint8Array): void {\n aexists(this);\n aoutput(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n clean(this.buffer.subarray(pos));\n // we have less than padOffset left in buffer, so we cannot put length in\n // current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for (let i = pos; i < blockLen; i++) buffer[i] = 0;\n // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64 bits of that value.\n view.setBigUint64(blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = createView(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which must be fused in single op with modulo by JIT\n if (len % 4) throw new Error('_sha2: outputLen must be aligned to 32bit');\n const outLen = len / 4;\n const state = this.get();\n if (outLen > state.length) throw new Error('_sha2: outputLen bigger than state');\n for (let i = 0; i < outLen; i++) oview.setUint32(4 * i, state[i], isLE);\n }\n digest(): Uint8Array {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to?: T): T {\n to ||= new (this.constructor as any)() as T;\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.destroyed = destroyed;\n to.finished = finished;\n to.length = length;\n to.pos = pos;\n if (length % blockLen) to.buffer.set(buffer);\n return to as unknown as any;\n }\n clone(): T {\n return this._cloneInto();\n }\n}\n\n/**\n * Initial SHA-2 state: fractional parts of square roots of first 16 primes 2..53.\n * Check out `test/misc/sha2-gen-iv.js` for recomputation guide.\n */\n\n/** Initial SHA256 state. Bits 0..32 of frac part of sqrt of primes 2..19 */\nexport const SHA256_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n]);\n\n/** Initial SHA224 state. Bits 32..64 of frac part of sqrt of primes 23..53 */\nexport const SHA224_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4,\n]);\n\n/** Initial SHA384 state. Bits 0..64 of frac part of sqrt of primes 23..53 */\nexport const SHA384_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4,\n]);\n\n/** Initial SHA512 state. Bits 0..64 of frac part of sqrt of primes 2..19 */\nexport const SHA512_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179,\n]);\n","/**\n * Internal helpers for u64. BigUint64Array is too slow as per 2025, so we implement it using Uint32Array.\n * @todo re-check https://issues.chromium.org/issues/42212588\n * @module\n */\nconst U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\n\nfunction fromBig(\n n: bigint,\n le = false\n): {\n h: number;\n l: number;\n} {\n if (le) return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\n\nfunction split(lst: bigint[], le = false): Uint32Array[] {\n const len = lst.length;\n let Ah = new Uint32Array(len);\n let Al = new Uint32Array(len);\n for (let i = 0; i < len; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\n\nconst toBig = (h: number, l: number): bigint => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h: number, _l: number, s: number): number => h >>> s;\nconst shrSL = (h: number, l: number, s: number): number => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h: number, l: number, s: number): number => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h: number, l: number, s: number): number => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h: number, l: number, s: number): number => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h: number, l: number, s: number): number => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h: number, l: number): number => l;\nconst rotr32L = (h: number, _l: number): number => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h: number, l: number, s: number): number => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h: number, l: number, s: number): number => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h: number, l: number, s: number): number => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h: number, l: number, s: number): number => (h << (s - 32)) | (l >>> (64 - s));\n\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(\n Ah: number,\n Al: number,\n Bh: number,\n Bl: number\n): {\n h: number;\n l: number;\n} {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al: number, Bl: number, Cl: number): number => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low: number, Ah: number, Bh: number, Ch: number): number =>\n (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al: number, Bl: number, Cl: number, Dl: number): number =>\n (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number): number =>\n (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al: number, Bl: number, Cl: number, Dl: number, El: number): number =>\n (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number): number =>\n (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n\n// prettier-ignore\nexport {\n add, add3H, add3L, add4H, add4L, add5H, add5L, fromBig, rotlBH, rotlBL, rotlSH, rotlSL, rotr32H, rotr32L, rotrBH, rotrBL, rotrSH, rotrSL, shrSH, shrSL, split, toBig\n};\n// prettier-ignore\nconst u64: { fromBig: typeof fromBig; split: typeof split; toBig: (h: number, l: number) => bigint; shrSH: (h: number, _l: number, s: number) => number; shrSL: (h: number, l: number, s: number) => number; rotrSH: (h: number, l: number, s: number) => number; rotrSL: (h: number, l: number, s: number) => number; rotrBH: (h: number, l: number, s: number) => number; rotrBL: (h: number, l: number, s: number) => number; rotr32H: (_h: number, l: number) => number; rotr32L: (h: number, _l: number) => number; rotlSH: (h: number, l: number, s: number) => number; rotlSL: (h: number, l: number, s: number) => number; rotlBH: (h: number, l: number, s: number) => number; rotlBL: (h: number, l: number, s: number) => number; add: typeof add; add3L: (Al: number, Bl: number, Cl: number) => number; add3H: (low: number, Ah: number, Bh: number, Ch: number) => number; add4L: (Al: number, Bl: number, Cl: number, Dl: number) => number; add4H: (low: number, Ah: number, Bh: number, Ch: number, Dh: number) => number; add5H: (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number) => number; add5L: (Al: number, Bl: number, Cl: number, Dl: number, El: number) => number; } = {\n fromBig, split, toBig,\n shrSH, shrSL,\n rotrSH, rotrSL, rotrBH, rotrBL,\n rotr32H, rotr32L,\n rotlSH, rotlSL, rotlBH, rotlBL,\n add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexport default u64;\n","/**\n * SHA2 hash function. A.k.a. sha256, sha384, sha512, sha512_224, sha512_256.\n * SHA256 is the fastest hash implementable in JS, even faster than Blake3.\n * Check out [RFC 4634](https://www.rfc-editor.org/rfc/rfc4634) and\n * [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n */\nimport { Chi, HashMD, Maj, SHA224_IV, SHA256_IV, SHA384_IV, SHA512_IV } from './_md.ts';\nimport * as u64 from './_u64.ts';\nimport { type CHash, clean, createHasher, oidNist, rotr } from './utils.ts';\n\n/**\n * Round constants:\n * First 32 bits of fractional parts of the cube roots of the first 64 primes 2..311)\n */\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ Uint32Array.from([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n\n/** Reusable temporary buffer. \"W\" comes straight from spec. */\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\n\n/** Internal 32-byte base SHA2 hash class. */\nabstract class SHA2_32B<T extends SHA2_32B<T>> extends HashMD<T> {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n protected abstract A: number;\n protected abstract B: number;\n protected abstract C: number;\n protected abstract D: number;\n protected abstract E: number;\n protected abstract F: number;\n protected abstract G: number;\n protected abstract H: number;\n\n constructor(outputLen: number) {\n super(64, outputLen, 8, false);\n }\n protected get(): [number, number, number, number, number, number, number, number] {\n const { A, B, C, D, E, F, G, H } = this;\n return [A, B, C, D, E, F, G, H];\n }\n // prettier-ignore\n protected set(\n A: number, B: number, C: number, D: number, E: number, F: number, G: number, H: number\n ): void {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n this.F = F | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n protected process(view: DataView, offset: number): void {\n // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) SHA256_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 64; i++) {\n const W15 = SHA256_W[i - 15];\n const W2 = SHA256_W[i - 2];\n const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n }\n // Compression function main loop, 64 rounds\n let { A, B, C, D, E, F, G, H } = this;\n for (let i = 0; i < 64; i++) {\n const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n const T2 = (sigma0 + Maj(A, B, C)) | 0;\n H = G;\n G = F;\n F = E;\n E = (D + T1) | 0;\n D = C;\n C = B;\n B = A;\n A = (T1 + T2) | 0;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n F = (F + this.F) | 0;\n G = (G + this.G) | 0;\n H = (H + this.H) | 0;\n this.set(A, B, C, D, E, F, G, H);\n }\n protected roundClean(): void {\n clean(SHA256_W);\n }\n destroy(): void {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n clean(this.buffer);\n }\n}\n\n/** Internal SHA2-256 hash class. */\nexport class _SHA256 extends SHA2_32B<_SHA256> {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n protected A: number = SHA256_IV[0] | 0;\n protected B: number = SHA256_IV[1] | 0;\n protected C: number = SHA256_IV[2] | 0;\n protected D: number = SHA256_IV[3] | 0;\n protected E: number = SHA256_IV[4] | 0;\n protected F: number = SHA256_IV[5] | 0;\n protected G: number = SHA256_IV[6] | 0;\n protected H: number = SHA256_IV[7] | 0;\n constructor() {\n super(32);\n }\n}\n\n/** Internal SHA2-224 hash class. */\nexport class _SHA224 extends SHA2_32B<_SHA224> {\n protected A: number = SHA224_IV[0] | 0;\n protected B: number = SHA224_IV[1] | 0;\n protected C: number = SHA224_IV[2] | 0;\n protected D: number = SHA224_IV[3] | 0;\n protected E: number = SHA224_IV[4] | 0;\n protected F: number = SHA224_IV[5] | 0;\n protected G: number = SHA224_IV[6] | 0;\n protected H: number = SHA224_IV[7] | 0;\n constructor() {\n super(28);\n }\n}\n\n// SHA2-512 is slower than sha256 in js because u64 operations are slow.\n\n// Round contants\n// First 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409\n// prettier-ignore\nconst K512 = /* @__PURE__ */ (() => u64.split([\n '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n))))();\nconst SHA512_Kh = /* @__PURE__ */ (() => K512[0])();\nconst SHA512_Kl = /* @__PURE__ */ (() => K512[1])();\n\n// Reusable temporary buffers\nconst SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\nconst SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\n\n/** Internal 64-byte base SHA2 hash class. */\nabstract class SHA2_64B<T extends SHA2_64B<T>> extends HashMD<T> {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n // h -- high 32 bits, l -- low 32 bits\n protected abstract Ah: number;\n protected abstract Al: number;\n protected abstract Bh: number;\n protected abstract Bl: number;\n protected abstract Ch: number;\n protected abstract Cl: number;\n protected abstract Dh: number;\n protected abstract Dl: number;\n protected abstract Eh: number;\n protected abstract El: number;\n protected abstract Fh: number;\n protected abstract Fl: number;\n protected abstract Gh: number;\n protected abstract Gl: number;\n protected abstract Hh: number;\n protected abstract Hl: number;\n\n constructor(outputLen: number) {\n super(128, outputLen, 16, false);\n }\n // prettier-ignore\n protected get(): [\n number, number, number, number, number, number, number, number,\n number, number, number, number, number, number, number, number\n ] {\n const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n }\n // prettier-ignore\n protected set(\n Ah: number, Al: number, Bh: number, Bl: number, Ch: number, Cl: number, Dh: number, Dl: number,\n Eh: number, El: number, Fh: number, Fl: number, Gh: number, Gl: number, Hh: number, Hl: number\n ): void {\n this.Ah = Ah | 0;\n this.Al = Al | 0;\n this.Bh = Bh | 0;\n this.Bl = Bl | 0;\n this.Ch = Ch | 0;\n this.Cl = Cl | 0;\n this.Dh = Dh | 0;\n this.Dl = Dl | 0;\n this.Eh = Eh | 0;\n this.El = El | 0;\n this.Fh = Fh | 0;\n this.Fl = Fl | 0;\n this.Gh = Gh | 0;\n this.Gl = Gl | 0;\n this.Hh = Hh | 0;\n this.Hl = Hl | 0;\n }\n protected process(view: DataView, offset: number): void {\n // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) {\n SHA512_W_H[i] = view.getUint32(offset);\n SHA512_W_L[i] = view.getUint32((offset += 4));\n }\n for (let i = 16; i < 80; i++) {\n // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n const W15h = SHA512_W_H[i - 15] | 0;\n const W15l = SHA512_W_L[i - 15] | 0;\n const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n const W2h = SHA512_W_H[i - 2] | 0;\n const W2l = SHA512_W_L[i - 2] | 0;\n const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n SHA512_W_H[i] = SUMh | 0;\n SHA512_W_L[i] = SUMl | 0;\n }\n let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n // Compression function main loop, 80 rounds\n for (let i = 0; i < 80; i++) {\n // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n const CHIl = (El & Fl) ^ (~El & Gl);\n // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n // prettier-ignore\n const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n const T1l = T1ll | 0;\n // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n Hh = Gh | 0;\n Hl = Gl | 0;\n Gh = Fh | 0;\n Gl = Fl | 0;\n Fh = Eh | 0;\n Fl = El | 0;\n ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n Dh = Ch | 0;\n Dl = Cl | 0;\n Ch = Bh | 0;\n Cl = Bl | 0;\n Bh = Ah | 0;\n Bl = Al | 0;\n const All = u64.add3L(T1l, sigma0l, MAJl);\n Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n Al = All | 0;\n }\n // Add the compressed chunk to the current hash value\n ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n }\n protected roundClean(): void {\n clean(SHA512_W_H, SHA512_W_L);\n }\n destroy(): void {\n clean(this.buffer);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\n\n/** Internal SHA2-512 hash class. */\nexport class _SHA512 extends SHA2_64B<_SHA512> {\n protected Ah: number = SHA512_IV[0] | 0;\n protected Al: number = SHA512_IV[1] | 0;\n protected Bh: number = SHA512_IV[2] | 0;\n protected Bl: number = SHA512_IV[3] | 0;\n protected Ch: number = SHA512_IV[4] | 0;\n protected Cl: number = SHA512_IV[5] | 0;\n protected Dh: number = SHA512_IV[6] | 0;\n protected Dl: number = SHA512_IV[7] | 0;\n protected Eh: number = SHA512_IV[8] | 0;\n protected El: number = SHA512_IV[9] | 0;\n protected Fh: number = SHA512_IV[10] | 0;\n protected Fl: number = SHA512_IV[11] | 0;\n protected Gh: number = SHA512_IV[12] | 0;\n protected Gl: number = SHA512_IV[13] | 0;\n protected Hh: number = SHA512_IV[14] | 0;\n protected Hl: number = SHA512_IV[15] | 0;\n\n constructor() {\n super(64);\n }\n}\n\n/** Internal SHA2-384 hash class. */\nexport class _SHA384 extends SHA2_64B<_SHA384> {\n protected Ah: number = SHA384_IV[0] | 0;\n protected Al: number = SHA384_IV[1] | 0;\n protected Bh: number = SHA384_IV[2] | 0;\n protected Bl: number = SHA384_IV[3] | 0;\n protected Ch: number = SHA384_IV[4] | 0;\n protected Cl: number = SHA384_IV[5] | 0;\n protected Dh: number = SHA384_IV[6] | 0;\n protected Dl: number = SHA384_IV[7] | 0;\n protected Eh: number = SHA384_IV[8] | 0;\n protected El: number = SHA384_IV[9] | 0;\n protected Fh: number = SHA384_IV[10] | 0;\n protected Fl: number = SHA384_IV[11] | 0;\n protected Gh: number = SHA384_IV[12] | 0;\n protected Gl: number = SHA384_IV[13] | 0;\n protected Hh: number = SHA384_IV[14] | 0;\n protected Hl: number = SHA384_IV[15] | 0;\n\n constructor() {\n super(48);\n }\n}\n\n/**\n * Truncated SHA512/256 and SHA512/224.\n * SHA512_IV is XORed with 0xa5a5a5a5a5a5a5a5, then used as \"intermediary\" IV of SHA512/t.\n * Then t hashes string to produce result IV.\n * See `test/misc/sha2-gen-iv.js`.\n */\n\n/** SHA512/224 IV */\nconst T224_IV = /* @__PURE__ */ Uint32Array.from([\n 0x8c3d37c8, 0x19544da2, 0x73e19966, 0x89dcd4d6, 0x1dfab7ae, 0x32ff9c82, 0x679dd514, 0x582f9fcf,\n 0x0f6d2b69, 0x7bd44da8, 0x77e36f73, 0x04c48942, 0x3f9d85a8, 0x6a1d36c8, 0x1112e6ad, 0x91d692a1,\n]);\n\n/** SHA512/256 IV */\nconst T256_IV = /* @__PURE__ */ Uint32Array.from([\n 0x22312194, 0xfc2bf72c, 0x9f555fa3, 0xc84c64c2, 0x2393b86b, 0x6f53b151, 0x96387719, 0x5940eabd,\n 0x96283ee2, 0xa88effe3, 0xbe5e1e25, 0x53863992, 0x2b0199fc, 0x2c85b8aa, 0x0eb72ddc, 0x81c52ca2,\n]);\n\n/** Internal SHA2-512/224 hash class. */\nexport class _SHA512_224 extends SHA2_64B<_SHA512_224> {\n protected Ah: number = T224_IV[0] | 0;\n protected Al: number = T224_IV[1] | 0;\n protected Bh: number = T224_IV[2] | 0;\n protected Bl: number = T224_IV[3] | 0;\n protected Ch: number = T224_IV[4] | 0;\n protected Cl: number = T224_IV[5] | 0;\n protected Dh: number = T224_IV[6] | 0;\n protected Dl: number = T224_IV[7] | 0;\n protected Eh: number = T224_IV[8] | 0;\n protected El: number = T224_IV[9] | 0;\n protected Fh: number = T224_IV[10] | 0;\n protected Fl: number = T224_IV[11] | 0;\n protected Gh: number = T224_IV[12] | 0;\n protected Gl: number = T224_IV[13] | 0;\n protected Hh: number = T224_IV[14] | 0;\n protected Hl: number = T224_IV[15] | 0;\n\n constructor() {\n super(28);\n }\n}\n\n/** Internal SHA2-512/256 hash class. */\nexport class _SHA512_256 extends SHA2_64B<_SHA512_256> {\n protected Ah: number = T256_IV[0] | 0;\n protected Al: number = T256_IV[1] | 0;\n protected Bh: number = T256_IV[2] | 0;\n protected Bl: number = T256_IV[3] | 0;\n protected Ch: number = T256_IV[4] | 0;\n protected Cl: number = T256_IV[5] | 0;\n protected Dh: number = T256_IV[6] | 0;\n protected Dl: number = T256_IV[7] | 0;\n protected Eh: number = T256_IV[8] | 0;\n protected El: number = T256_IV[9] | 0;\n protected Fh: number = T256_IV[10] | 0;\n protected Fl: number = T256_IV[11] | 0;\n protected Gh: number = T256_IV[12] | 0;\n protected Gl: number = T256_IV[13] | 0;\n protected Hh: number = T256_IV[14] | 0;\n protected Hl: number = T256_IV[15] | 0;\n\n constructor() {\n super(32);\n }\n}\n\n/**\n * SHA2-256 hash function from RFC 4634. In JS it's the fastest: even faster than Blake3. Some info:\n *\n * - Trying 2^128 hashes would get 50% chance of collision, using birthday attack.\n * - BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n * - Each sha256 hash is executing 2^18 bit operations.\n * - Good 2024 ASICs can do 200Th/sec with 3500 watts of power, corresponding to 2^36 hashes/joule.\n */\nexport const sha256: CHash<_SHA256> = /* @__PURE__ */ createHasher(\n () => new _SHA256(),\n /* @__PURE__ */ oidNist(0x01)\n);\n/** SHA2-224 hash function from RFC 4634 */\nexport const sha224: CHash<_SHA224> = /* @__PURE__ */ createHasher(\n () => new _SHA224(),\n /* @__PURE__ */ oidNist(0x04)\n);\n\n/** SHA2-512 hash function from RFC 4634. */\nexport const sha512: CHash<_SHA512> = /* @__PURE__ */ createHasher(\n () => new _SHA512(),\n /* @__PURE__ */ oidNist(0x03)\n);\n/** SHA2-384 hash function from RFC 4634. */\nexport const sha384: CHash<_SHA384> = /* @__PURE__ */ createHasher(\n () => new _SHA384(),\n /* @__PURE__ */ oidNist(0x02)\n);\n\n/**\n * SHA2-512/256 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_256: CHash<_SHA512_256> = /* @__PURE__ */ createHasher(\n () => new _SHA512_256(),\n /* @__PURE__ */ oidNist(0x06)\n);\n/**\n * SHA2-512/224 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_224: CHash<_SHA512_224> = /* @__PURE__ */ createHasher(\n () => new _SHA512_224(),\n /* @__PURE__ */ oidNist(0x05)\n);\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport * as ed25519 from \"@noble/ed25519\";\nimport { sha256 } from \"@noble/hashes/sha2\";\nimport { base58 } from \"@scure/base\";\nimport { PUBLIC_KEY_LENGTH } from \"../constants\";\nimport { CryptoError, CryptoErrorCode } from \"./errors\";\nimport type { Signature } from \"./signature\";\nimport { concatBytes, isOnCurve, seedToBytes } from \"./utils\";\n\n/**\n * A seed for PDA derivation - string (UTF-8) or raw bytes.\n */\nexport type Seed = string | Uint8Array;\n\n/**\n * Bump seed (0-255) that pushes derived address off the Ed25519 curve.\n */\nexport type Bump = number;\n\n/**\n * Result of PDA derivation: [address, bump].\n */\nexport type PDA = readonly [PublicKey, Bump];\n\nconst MAX_SEED_LENGTH = 32;\nconst MAX_SEEDS = 16;\nconst PDA_MARKER = new TextEncoder().encode(\"ProgramDerivedAddress\");\nconst MAX_BUMP_SEED = 255;\n\n/**\n * Represents a 32-byte Ed25519 public key.\n *\n * @example\n * ```typescript\n * // From base58 string\n * const pubkey = PublicKey.fromString(\"5ZqB9U...\");\n *\n * // From bytes\n * const pubkey = PublicKey.fromBytes(new Uint8Array(32));\n *\n * // Comparison\n * if (pubkey1.equals(pubkey2)) {\n * console.log(\"Keys match\");\n * }\n * ```\n */\nexport class PublicKey {\n\tprivate readonly bytes: Uint8Array;\n\n\tprivate constructor(bytes: Uint8Array) {\n\t\tif (bytes.length !== PUBLIC_KEY_LENGTH) {\n\t\t\tthrow CryptoError.invalidKeyLength(PUBLIC_KEY_LENGTH, bytes.length);\n\t\t}\n\t\tthis.bytes = new Uint8Array(bytes);\n\t}\n\n\t/**\n\t * Creates a PublicKey from raw bytes.\n\t *\n\t * @param bytes - 32-byte Ed25519 public key\n\t * @throws {CryptoError} If bytes length is not 32\n\t */\n\tstatic fromBytes(bytes: Uint8Array): PublicKey {\n\t\treturn new PublicKey(bytes);\n\t}\n\n\t/**\n\t * Creates a PublicKey from a base58-encoded string.\n\t *\n\t * @param str - Base58-encoded public key\n\t * @throws {CryptoError} If string is invalid or decodes to wrong length\n\t */\n\tstatic fromString(str: string): PublicKey {\n\t\ttry {\n\t\t\tconst bytes = base58.decode(str);\n\t\t\treturn new PublicKey(bytes);\n\t\t} catch (error) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.INVALID_PUBLIC_KEY,\n\t\t\t\t`Invalid base58 public key: ${error instanceof Error ? error.message : \"unknown error\"}`,\n\t\t\t\t{ input: str },\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Derives a program address from seeds and a program ID.\n\t *\n\t * @remarks\n\t * This is the low-level derivation function. It will throw if the resulting\n\t * address falls on the Ed25519 curve. For most use cases, prefer\n\t * {@link findProgramAddress} which automatically finds a valid bump seed.\n\t *\n\t * Use this method when you already know the bump seed (e.g., stored on-chain\n\t * or passed from a previous computation) for better performance.\n\t *\n\t * @param seeds - Array of seeds (strings or byte arrays, max 16 seeds, each max 32 bytes)\n\t * @param programId - The program that will own this PDA\n\t * @returns The derived public key\n\t * @throws {CryptoError} If seeds exceed limits or result is on curve\n\t *\n\t * @example\n\t * ```typescript\n\t * // With known bump seed (most efficient for verification)\n\t * const pda = PublicKey.createProgramAddress(\n\t * [\"metadata\", mintPubkey.toBytes(), new Uint8Array([254])],\n\t * metadataProgramId\n\t * );\n\t * ```\n\t */\n\tstatic createProgramAddress(seeds: Seed[], programId: PublicKey): PublicKey {\n\t\tif (seeds.length > MAX_SEEDS) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.MAX_SEEDS_EXCEEDED,\n\t\t\t\t`Expected max ${MAX_SEEDS} seeds, got ${seeds.length}`,\n\t\t\t);\n\t\t}\n\n\t\tconst seedBytes: Uint8Array[] = [];\n\t\tfor (let i = 0; i < seeds.length; i++) {\n\t\t\tconst bytes = seedToBytes(seeds[i]);\n\t\t\tif (bytes.length > MAX_SEED_LENGTH) {\n\t\t\t\tthrow new CryptoError(\n\t\t\t\t\tCryptoErrorCode.MAX_SEED_LENGTH_EXCEEDED,\n\t\t\t\t\t`Seed[${i}] exceeds ${MAX_SEED_LENGTH} bytes`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tseedBytes.push(bytes);\n\t\t}\n\n\t\tconst hash = sha256(concatBytes(...seedBytes, programId.bytes, PDA_MARKER));\n\n\t\tif (isOnCurve(hash)) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.INVALID_SEEDS_ON_CURVE,\n\t\t\t\t\"Invalid seeds - derived address is on curve\",\n\t\t\t);\n\t\t}\n\n\t\treturn new PublicKey(hash);\n\t}\n\n\t/**\n\t * Finds a valid program derived address by searching for a bump seed.\n\t *\n\t * @remarks\n\t * Iterates from bump 255 down to 0, returning the first combination that\n\t * produces an address off the Ed25519 curve. The bump seed should be stored\n\t * or passed to programs to allow efficient verification via {@link createProgramAddress}.\n\t *\n\t * @param seeds - Array of seeds (max 16 seeds, each max 32 bytes)\n\t * @param programId - The program that will own this PDA\n\t * @returns Tuple of [PublicKey, Bump] where bump is 0-255\n\t * @throws {CryptoError} If no valid bump found (extremely rare) or seeds invalid\n\t *\n\t * @example\n\t * ```typescript\n\t * const [vaultPda, vaultBump] = PublicKey.findProgramAddress(\n\t * [\"vault\", userPubkey.toBytes()],\n\t * programId\n\t * );\n\t *\n\t * // Store bump for later use\n\t * console.log(`Vault: ${vaultPda}, Bump: ${vaultBump}`);\n\t * ```\n\t */\n\tstatic findProgramAddress(seeds: Seed[], programId: PublicKey): PDA {\n\t\tif (seeds.length >= MAX_SEEDS) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.MAX_SEEDS_EXCEEDED,\n\t\t\t\t`Expected max ${MAX_SEEDS - 1} user seeds (one slot reserved for bump), got ${seeds.length}`,\n\t\t\t);\n\t\t}\n\n\t\tfor (let bump = MAX_BUMP_SEED; bump >= 0; bump--) {\n\t\t\ttry {\n\t\t\t\tconst address = PublicKey.createProgramAddress(\n\t\t\t\t\t[...seeds, Uint8Array.of(bump)],\n\t\t\t\t\tprogramId,\n\t\t\t\t);\n\t\t\t\treturn [address, bump] as const;\n\t\t\t} catch (e) {\n\t\t\t\tif (\n\t\t\t\t\te instanceof CryptoError &&\n\t\t\t\t\te.code === CryptoErrorCode.INVALID_SEEDS_ON_CURVE\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t}\n\n\t\tthrow new CryptoError(\n\t\t\tCryptoErrorCode.NO_VIABLE_BUMP_SEED,\n\t\t\t\"Could not find valid bump seed\",\n\t\t);\n\t}\n\n\t/**\n\t * Creates a derived address from a base address, seed string, and program ID.\n\t *\n\t * @remarks\n\t * Unlike PDAs, this derivation CAN produce addresses on the curve.\n\t * This is useful for creating deterministic addresses that a user can sign for,\n\t * where the base address's private key holder can sign transactions.\n\t *\n\t * @param baseAddress - The base public key (signer)\n\t * @param seed - A seed string (max 32 bytes when UTF-8 encoded)\n\t * @param programId - The program that will own the derived account\n\t * @returns The derived address\n\t *\n\t * @example\n\t * ```typescript\n\t * const derivedAddress = PublicKey.createWithSeed(\n\t * userPubkey,\n\t * \"savings-account\",\n\t * systemProgramId\n\t * );\n\t * ```\n\t */\n\tstatic createWithSeed(\n\t\tbaseAddress: PublicKey,\n\t\tseed: string,\n\t\tprogramId: PublicKey,\n\t): PublicKey {\n\t\tconst seedBytes = new TextEncoder().encode(seed);\n\t\tif (seedBytes.length > MAX_SEED_LENGTH) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.MAX_SEED_LENGTH_EXCEEDED,\n\t\t\t\t`Seed exceeds ${MAX_SEED_LENGTH} bytes`,\n\t\t\t);\n\t\t}\n\n\t\tif (seed.length === 0) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.INVALID_SEED,\n\t\t\t\t\"Seed cannot be empty\",\n\t\t\t);\n\t\t}\n\n\t\tconst hash = sha256(\n\t\t\tconcatBytes(baseAddress.bytes, seedBytes, programId.bytes),\n\t\t);\n\t\treturn new PublicKey(hash);\n\t}\n\n\t/**\n\t * Returns a copy of the raw bytes.\n\t */\n\ttoBytes(): Uint8Array {\n\t\treturn new Uint8Array(this.bytes);\n\t}\n\n\t/**\n\t * Returns the base58-encoded string representation.\n\t */\n\ttoString(): string {\n\t\treturn base58.encode(this.bytes);\n\t}\n\n\t/**\n\t * Checks equality with another public key using constant-time comparison.\n\t */\n\tequals(other: PublicKey): boolean {\n\t\tif (!other) return false;\n\t\tif (this.bytes.length !== other.bytes.length) return false;\n\t\tfor (let i = 0; i < this.bytes.length; i++) {\n\t\t\tif (this.bytes[i] !== other.bytes[i]) return false;\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * Verifies an Ed25519 signature over a message.\n\t *\n\t * @param message - Message bytes that were signed\n\t * @param signature - Signature to verify\n\t * @returns True if signature is valid, false otherwise\n\t *\n\t * @example\n\t * ```typescript\n\t * const message = new Uint8Array([1, 2, 3]);\n\t * const signature = keypair.sign(message);\n\t * const isValid = keypair.publicKey.verify(message, signature);\n\t * ```\n\t */\n\tverify(message: Uint8Array, signature: Signature): boolean {\n\t\treturn ed25519.verify(signature.toBytes(), message, this.bytes);\n\t}\n\n\t/**\n\t * Checks if the public key is on the Ed25519 curve.\n\t *\n\t * @returns True if the public key is on the curve, false otherwise\n\t */\n\tisOnCurve(): boolean {\n\t\treturn isOnCurve(this.bytes);\n\t}\n\n\t/**\n\t * JSON serialization (returns base58 string).\n\t */\n\ttoJSON(): string {\n\t\treturn this.toString();\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Point } from \"@noble/ed25519\";\nimport type { Seed } from \"./public-key\";\n\n/**\n * Checks if a 32-byte array represents a valid point on the Ed25519 curve.\n *\n * This is used for PDA (Program Derived Address) derivation, where valid PDAs\n * must NOT be on the curve to ensure they can only be signed by the program.\n *\n * @param bytes - 32-byte public key or hash to check\n * @returns true if the bytes represent a valid Ed25519 point, false otherwise\n *\n * @example\n * ```typescript\n * const hash = sha256(data);\n * if (!isOnCurve(hash)) {\n * // Valid PDA - not on curve\n * }\n * ```\n */\nexport function isOnCurve(bytes: Uint8Array): boolean {\n\ttry {\n\t\tPoint.fromBytes(bytes);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/**\n * Converts a seed to a 32-byte array.\n *\n * @param seed - Seed to convert\n * @returns 32-byte array\n */\nexport function seedToBytes(seed: Seed): Uint8Array {\n\treturn typeof seed === \"string\" ? new TextEncoder().encode(seed) : seed;\n}\n\n/**\n * Concatenates multiple byte arrays into a single byte array.\n *\n * @param arrays - Byte arrays to concatenate\n * @returns Concatenated byte array\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n\tconst totalLength = arrays.reduce((sum, arr) => sum + arr.length, 0);\n\tconst result = new Uint8Array(totalLength);\n\tlet offset = 0;\n\tfor (const arr of arrays) {\n\t\tresult.set(arr, offset);\n\t\toffset += arr.length;\n\t}\n\treturn result;\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { base58 } from \"@scure/base\";\nimport { SIGNATURE_LENGTH } from \"../constants\";\nimport { CryptoError, CryptoErrorCode } from \"./errors\";\n\n/**\n * Represents a 64-byte Ed25519 signature.\n *\n * @example\n * ```typescript\n * // From bytes\n * const sig = Signature.fromBytes(signatureBytes);\n *\n * // From base58 string\n * const sig = Signature.fromString(\"3Bxs4h...\");\n *\n * // Serialize\n * const base58 = sig.toString();\n * ```\n */\nexport class Signature {\n\tprivate readonly bytes: Uint8Array;\n\n\tprivate constructor(bytes: Uint8Array) {\n\t\tif (bytes.length !== SIGNATURE_LENGTH) {\n\t\t\tthrow CryptoError.invalidKeyLength(SIGNATURE_LENGTH, bytes.length);\n\t\t}\n\t\tthis.bytes = new Uint8Array(bytes);\n\t}\n\n\t/**\n\t * Creates a Signature from raw bytes.\n\t *\n\t * @param bytes - 64-byte Ed25519 signature\n\t * @throws {CryptoError} If bytes length is not 64\n\t */\n\tstatic fromBytes(bytes: Uint8Array): Signature {\n\t\treturn new Signature(bytes);\n\t}\n\n\t/**\n\t * Creates a Signature from a base58-encoded string.\n\t *\n\t * @param str - Base58-encoded signature\n\t * @throws {CryptoError} If string is invalid or decodes to wrong length\n\t */\n\tstatic fromString(str: string): Signature {\n\t\ttry {\n\t\t\tconst bytes = base58.decode(str);\n\t\t\treturn new Signature(bytes);\n\t\t} catch (error) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.INVALID_SIGNATURE,\n\t\t\t\t`Invalid base58 signature: ${error instanceof Error ? error.message : \"unknown error\"}`,\n\t\t\t\t{ input: str },\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Returns a copy of the raw bytes.\n\t */\n\ttoBytes(): Uint8Array {\n\t\treturn new Uint8Array(this.bytes);\n\t}\n\n\t/**\n\t * Returns the base58-encoded string representation.\n\t */\n\ttoString(): string {\n\t\treturn base58.encode(this.bytes);\n\t}\n\n\t/**\n\t * JSON serialization (returns base58 string).\n\t */\n\ttoJSON(): string {\n\t\treturn this.toString();\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport * as ed25519 from \"@noble/ed25519\";\nimport { sha512 } from \"@noble/hashes/sha2\";\nimport { randomBytes } from \"@noble/hashes/utils\";\nimport { SECRET_KEY_LENGTH } from \"../constants\";\nimport { CryptoError } from \"./errors\";\nimport { PublicKey } from \"./public-key\";\nimport { Signature } from \"./signature\";\n\n// Configure ed25519 to use SHA-512\ned25519.hashes.sha512 = sha512;\n\n/**\n * Represents an Ed25519 keypair for signing transactions.\n *\n * Provides secure key generation, signing, and disposal capabilities.\n * Call {@link dispose} when finished to securely erase the private key from memory.\n *\n * @example\n * ```typescript\n * // Generate random keypair\n * const keypair = Keypair.generate();\n *\n * // Sign a message\n * const message = new TextEncoder().encode(\"Hello\");\n * const signature = keypair.sign(message);\n *\n * // Verify signature\n * const isValid = keypair.verify(message, signature);\n *\n * // Secure cleanup\n * keypair.dispose();\n * ```\n */\nexport class Keypair {\n\tpublic readonly publicKey: PublicKey;\n\tprivate secretKey: Uint8Array | null;\n\tprivate disposed = false;\n\n\tprivate constructor(secretKey: Uint8Array, publicKey?: Uint8Array) {\n\t\tif (secretKey.length !== SECRET_KEY_LENGTH) {\n\t\t\tthrow CryptoError.invalidKeyLength(SECRET_KEY_LENGTH, secretKey.length);\n\t\t}\n\n\t\tthis.secretKey = new Uint8Array(secretKey);\n\n\t\tif (publicKey) {\n\t\t\tthis.publicKey = PublicKey.fromBytes(publicKey);\n\t\t} else {\n\t\t\tconst publicKeyBytes = ed25519.getPublicKey(secretKey);\n\t\t\tthis.publicKey = PublicKey.fromBytes(publicKeyBytes);\n\t\t}\n\t}\n\n\t/**\n\t * Generates a random keypair using cryptographically secure randomness.\n\t */\n\tstatic generate(): Keypair {\n\t\tconst secretKey = randomBytes(SECRET_KEY_LENGTH);\n\t\treturn new Keypair(secretKey);\n\t}\n\n\t/**\n\t * Creates a keypair from a 32-byte secret key.\n\t * The public key will be derived from the secret key.\n\t *\n\t * @param secretKey - 32-byte Ed25519 secret key\n\t */\n\tstatic fromSecretKey(secretKey: Uint8Array): Keypair {\n\t\treturn new Keypair(secretKey);\n\t}\n\n\t/**\n\t * Creates a keypair from a secret key and pre-computed public key.\n\t *\n\t * Use this for SLIP-0010/BIP32 derived keys where the public key\n\t * should NOT be re-derived (compatibility with hierarchical derivation).\n\t *\n\t * @param secretKey - 32-byte Ed25519 secret key\n\t * @param publicKey - 32-byte Ed25519 public key (pre-computed)\n\t */\n\tstatic fromKeyPair(secretKey: Uint8Array, publicKey: Uint8Array): Keypair {\n\t\treturn new Keypair(secretKey, publicKey);\n\t}\n\n\t/**\n\t * Signs a message with this keypair.\n\t *\n\t * @param message - Message bytes to sign\n\t * @returns Ed25519 signature\n\t * @throws {CryptoError} If keypair has been disposed\n\t */\n\tsign(message: Uint8Array): Signature {\n\t\tthis.ensureNotDisposed();\n\n\t\tif (!this.secretKey) {\n\t\t\tthrow CryptoError.keypairDisposed();\n\t\t}\n\n\t\tconst signatureBytes = ed25519.sign(message, this.secretKey);\n\t\treturn Signature.fromBytes(signatureBytes);\n\t}\n\n\t/**\n\t * Verifies a signature against a message using this keypair's public key.\n\t *\n\t * @param message - Original message that was signed\n\t * @param signature - Signature to verify\n\t * @returns true if signature is valid\n\t */\n\tverify(message: Uint8Array, signature: Signature): boolean {\n\t\treturn ed25519.verify(\n\t\t\tsignature.toBytes(),\n\t\t\tmessage,\n\t\t\tthis.publicKey.toBytes(),\n\t\t);\n\t}\n\n\t/**\n\t * Exports the secret key for storage.\n\t *\n\t * **WARNING**: Keep this secret! Never expose it in logs, APIs, or client-side code.\n\t *\n\t * @returns Copy of the 32-byte secret key\n\t * @throws {CryptoError} If keypair has been disposed\n\t */\n\tsecretKeyBytes(): Uint8Array {\n\t\tthis.ensureNotDisposed();\n\n\t\tif (!this.secretKey) {\n\t\t\tthrow CryptoError.keypairDisposed();\n\t\t}\n\n\t\treturn new Uint8Array(this.secretKey);\n\t}\n\n\t/**\n\t * Checks if this keypair has been disposed.\n\t */\n\tisDisposed(): boolean {\n\t\treturn this.disposed;\n\t}\n\n\t/**\n\t * Securely erases the secret key from memory.\n\t *\n\t * After calling this method, the keypair can no longer be used for signing.\n\t * This is important for security when the keypair is no longer needed.\n\t */\n\tdispose(): void {\n\t\tif (this.disposed) return;\n\n\t\tif (this.secretKey) {\n\t\t\tthis.secretKey.fill(0);\n\t\t\tthis.secretKey = null;\n\t\t}\n\t\tthis.disposed = true;\n\t}\n\n\tprivate ensureNotDisposed(): void {\n\t\tif (this.disposed) {\n\t\t\tthrow CryptoError.keypairDisposed();\n\t\t}\n\t}\n}\n","/**\n * HMAC: RFC2104 message authentication code.\n * @module\n */\nimport { abytes, aexists, ahash, clean, type CHash, type Hash } from './utils.ts';\n\n/** Internal class for HMAC. */\nexport class _HMAC<T extends Hash<T>> implements Hash<_HMAC<T>> {\n oHash: T;\n iHash: T;\n blockLen: number;\n outputLen: number;\n private finished = false;\n private destroyed = false;\n\n constructor(hash: CHash, key: Uint8Array) {\n ahash(hash);\n abytes(key, undefined, 'key');\n this.iHash = hash.create() as T;\n if (typeof this.iHash.update !== 'function')\n throw new Error('Expected instance of class which extends utils.Hash');\n this.blockLen = this.iHash.blockLen;\n this.outputLen = this.iHash.outputLen;\n const blockLen = this.blockLen;\n const pad = new Uint8Array(blockLen);\n // blockLen can be bigger than outputLen\n pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);\n for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36;\n this.iHash.update(pad);\n // By doing update (processing of first block) of outer hash here we can re-use it between multiple calls via clone\n this.oHash = hash.create() as T;\n // Undo internal XOR && apply outer XOR\n for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36 ^ 0x5c;\n this.oHash.update(pad);\n clean(pad);\n }\n update(buf: Uint8Array): this {\n aexists(this);\n this.iHash.update(buf);\n return this;\n }\n digestInto(out: Uint8Array): void {\n aexists(this);\n abytes(out, this.outputLen, 'output');\n this.finished = true;\n this.iHash.digestInto(out);\n this.oHash.update(out);\n this.oHash.digestInto(out);\n this.destroy();\n }\n digest(): Uint8Array {\n const out = new Uint8Array(this.oHash.outputLen);\n this.digestInto(out);\n return out;\n }\n _cloneInto(to?: _HMAC<T>): _HMAC<T> {\n // Create new instance without calling constructor since key already in state and we don't know it.\n to ||= Object.create(Object.getPrototypeOf(this), {});\n const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;\n to = to as this;\n to.finished = finished;\n to.destroyed = destroyed;\n to.blockLen = blockLen;\n to.outputLen = outputLen;\n to.oHash = oHash._cloneInto(to.oHash);\n to.iHash = iHash._cloneInto(to.iHash);\n return to;\n }\n clone(): _HMAC<T> {\n return this._cloneInto();\n }\n destroy(): void {\n this.destroyed = true;\n this.oHash.destroy();\n this.iHash.destroy();\n }\n}\n\n/**\n * HMAC: RFC2104 message authentication code.\n * @param hash - function that would be used e.g. sha256\n * @param key - message key\n * @param message - message data\n * @example\n * import { hmac } from '@noble/hashes/hmac';\n * import { sha256 } from '@noble/hashes/sha2';\n * const mac1 = hmac(sha256, 'key', 'message');\n */\nexport const hmac: {\n (hash: CHash, key: Uint8Array, message: Uint8Array): Uint8Array;\n create(hash: CHash, key: Uint8Array): _HMAC<any>;\n} = (hash: CHash, key: Uint8Array, message: Uint8Array): Uint8Array =>\n new _HMAC<any>(hash, key).update(message).digest();\nhmac.create = (hash: CHash, key: Uint8Array) => new _HMAC<any>(hash, key);\n","/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */\nexport function isBytes(a: unknown): a is Uint8Array {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n\n/** Asserts something is positive integer. */\nexport function anumber(n: number, title: string = ''): void {\n if (!Number.isSafeInteger(n) || n < 0) {\n const prefix = title && `\"${title}\" `;\n throw new Error(`${prefix}expected integer >= 0, got ${n}`);\n }\n}\n\n/** Asserts something is Uint8Array. */\nexport function abytes(value: Uint8Array, length?: number, title: string = ''): Uint8Array {\n const bytes = isBytes(value);\n const len = value?.length;\n const needsLen = length !== undefined;\n if (!bytes || (needsLen && len !== length)) {\n const prefix = title && `\"${title}\" `;\n const ofLen = needsLen ? ` of length ${length}` : '';\n const got = bytes ? `length=${len}` : `type=${typeof value}`;\n throw new Error(prefix + 'expected Uint8Array' + ofLen + ', got ' + got);\n }\n return value;\n}\n\n/** Asserts something is hash */\nexport function ahash(h: CHash): void {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new Error('Hash must wrapped by utils.createHasher');\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\n\n/** Asserts a hash instance has not been destroyed / finished */\nexport function aexists(instance: any, checkFinished = true): void {\n if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\n\n/** Asserts output is properly-sized byte array */\nexport function aoutput(out: any, instance: any): void {\n abytes(out, undefined, 'digestInto() output');\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('\"digestInto() output\" expected to be of length >=' + min);\n }\n}\n\n/** Generic type encompassing 8/16/32-byte arrays - but not 64-byte. */\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n Uint16Array | Int16Array | Uint32Array | Int32Array;\n\n/** Cast u8 / u16 / u32 to u8. */\nexport function u8(arr: TypedArray): Uint8Array {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** Cast u8 / u16 / u32 to u32. */\nexport function u32(arr: TypedArray): Uint32Array {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n\n/** Zeroize a byte array. Warning: JS provides no guarantees. */\nexport function clean(...arrays: TypedArray[]): void {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\n\n/** Create DataView of an array for easy byte-level manipulation. */\nexport function createView(arr: TypedArray): DataView {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** The rotate right (circular right shift) operation for uint32 */\nexport function rotr(word: number, shift: number): number {\n return (word << (32 - shift)) | (word >>> shift);\n}\n\n/** The rotate left (circular left shift) operation for uint32 */\nexport function rotl(word: number, shift: number): number {\n return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nexport const isLE: boolean = /* @__PURE__ */ (() =>\n new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n\n/** The byte swap operation for uint32 */\nexport function byteSwap(word: number): number {\n return (\n ((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff)\n );\n}\n/** Conditionally byte swap if on a big-endian platform */\nexport const swap8IfBE: (n: number) => number = isLE\n ? (n: number) => n\n : (n: number) => byteSwap(n);\n\n/** In place byte swap for Uint32Array */\nexport function byteSwap32(arr: Uint32Array): Uint32Array {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\n\nexport const swap32IfBE: (u: Uint32Array) => Uint32Array = isLE\n ? (u: Uint32Array) => u\n : byteSwap32;\n\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin: boolean = /* @__PURE__ */ (() =>\n // @ts-ignore\n typeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n i.toString(16).padStart(2, '0')\n);\n\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin) return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 } as const;\nfunction asciiToBase16(ch: number): number | undefined {\n if (ch >= asciis._0 && ch <= asciis._9) return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F) return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f) return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n // @ts-ignore\n if (hasHexBuiltin) return Uint8Array.fromHex(hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2) throw new Error('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * Call of async fn will return Promise, which will be fullfiled only on\n * next scheduler queue processing step and this is exactly what we need.\n */\nexport const nextTick = async (): Promise<void> => {};\n\n/** Returns control to thread each 'tick' ms to avoid blocking. */\nexport async function asyncLoop(\n iters: number,\n tick: number,\n cb: (i: number) => void\n): Promise<void> {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick) continue;\n await nextTick();\n ts += diff;\n }\n}\n\n// Global symbols, but ts doesn't see them: https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * Converts string to bytes using UTF8 encoding.\n * Built-in doesn't validate input to be string: we do the check.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n if (typeof str !== 'string') throw new Error('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\n/** KDFs can accept string or Uint8Array for user convenience. */\nexport type KDFInput = string | Uint8Array;\n\n/**\n * Helper for KDFs: consumes uint8array or string.\n * When string is passed, does utf8 decoding, using TextDecoder.\n */\nexport function kdfInputToBytes(data: KDFInput, errorTitle = ''): Uint8Array {\n if (typeof data === 'string') return utf8ToBytes(data);\n return abytes(data, undefined, errorTitle);\n}\n\n/** Copies several Uint8Arrays into one. */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\n\ntype EmptyObj = {};\n/** Merges default options and passed options. */\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n defaults: T1,\n opts?: T2\n): T1 & T2 {\n if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n throw new Error('options must be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged as T1 & T2;\n}\n\n/** Common interface for all hashes. */\nexport interface Hash<T> {\n blockLen: number; // Bytes per block\n outputLen: number; // Bytes in output\n update(buf: Uint8Array): this;\n digestInto(buf: Uint8Array): void;\n digest(): Uint8Array;\n destroy(): void;\n _cloneInto(to?: T): T;\n clone(): T;\n}\n\n/** PseudoRandom (number) Generator */\nexport interface PRG {\n addEntropy(seed: Uint8Array): void;\n randomBytes(length: number): Uint8Array;\n clean(): void;\n}\n\n/**\n * XOF: streaming API to read digest in chunks.\n * Same as 'squeeze' in keccak/k12 and 'seek' in blake3, but more generic name.\n * When hash used in XOF mode it is up to user to call '.destroy' afterwards, since we cannot\n * destroy state, next call can require more bytes.\n */\nexport type HashXOF<T extends Hash<T>> = Hash<T> & {\n xof(bytes: number): Uint8Array; // Read 'bytes' bytes from digest stream\n xofInto(buf: Uint8Array): Uint8Array; // read buf.length bytes from digest stream into buf\n};\n\n/** Hash constructor */\nexport type HasherCons<T, Opts = undefined> = Opts extends undefined ? () => T : (opts?: Opts) => T;\n/** Optional hash params. */\nexport type HashInfo = {\n oid?: Uint8Array; // DER encoded OID in bytes\n};\n/** Hash function */\nexport type CHash<T extends Hash<T> = Hash<any>, Opts = undefined> = {\n outputLen: number;\n blockLen: number;\n} & HashInfo &\n (Opts extends undefined\n ? {\n (msg: Uint8Array): Uint8Array;\n create(): T;\n }\n : {\n (msg: Uint8Array, opts?: Opts): Uint8Array;\n create(opts?: Opts): T;\n });\n/** XOF with output */\nexport type CHashXOF<T extends HashXOF<T> = HashXOF<any>, Opts = undefined> = CHash<T, Opts>;\n\n/** Creates function with outputLen, blockLen, create properties from a class constructor. */\nexport function createHasher<T extends Hash<T>, Opts = undefined>(\n hashCons: HasherCons<T, Opts>,\n info: HashInfo = {}\n): CHash<T, Opts> {\n const hashC: any = (msg: Uint8Array, opts?: Opts) => hashCons(opts).update(msg).digest();\n const tmp = hashCons(undefined);\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts?: Opts) => hashCons(opts);\n Object.assign(hashC, info);\n return Object.freeze(hashC);\n}\n\n/** Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`. */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n const cr = typeof globalThis === 'object' ? (globalThis as any).crypto : null;\n if (typeof cr?.getRandomValues !== 'function')\n throw new Error('crypto.getRandomValues must be defined');\n return cr.getRandomValues(new Uint8Array(bytesLength));\n}\n\n/** Creates OID opts for NIST hashes, with prefix 06 09 60 86 48 01 65 03 04 02. */\nexport const oidNist = (suffix: number): Required<HashInfo> => ({\n oid: Uint8Array.from([0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, suffix]),\n});\n","/**\n * HMAC: RFC2104 message authentication code.\n * @module\n */\nimport { abytes, aexists, ahash, clean, type CHash, type Hash } from './utils.ts';\n\n/** Internal class for HMAC. */\nexport class _HMAC<T extends Hash<T>> implements Hash<_HMAC<T>> {\n oHash: T;\n iHash: T;\n blockLen: number;\n outputLen: number;\n private finished = false;\n private destroyed = false;\n\n constructor(hash: CHash, key: Uint8Array) {\n ahash(hash);\n abytes(key, undefined, 'key');\n this.iHash = hash.create() as T;\n if (typeof this.iHash.update !== 'function')\n throw new Error('Expected instance of class which extends utils.Hash');\n this.blockLen = this.iHash.blockLen;\n this.outputLen = this.iHash.outputLen;\n const blockLen = this.blockLen;\n const pad = new Uint8Array(blockLen);\n // blockLen can be bigger than outputLen\n pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);\n for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36;\n this.iHash.update(pad);\n // By doing update (processing of first block) of outer hash here we can re-use it between multiple calls via clone\n this.oHash = hash.create() as T;\n // Undo internal XOR && apply outer XOR\n for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36 ^ 0x5c;\n this.oHash.update(pad);\n clean(pad);\n }\n update(buf: Uint8Array): this {\n aexists(this);\n this.iHash.update(buf);\n return this;\n }\n digestInto(out: Uint8Array): void {\n aexists(this);\n abytes(out, this.outputLen, 'output');\n this.finished = true;\n this.iHash.digestInto(out);\n this.oHash.update(out);\n this.oHash.digestInto(out);\n this.destroy();\n }\n digest(): Uint8Array {\n const out = new Uint8Array(this.oHash.outputLen);\n this.digestInto(out);\n return out;\n }\n _cloneInto(to?: _HMAC<T>): _HMAC<T> {\n // Create new instance without calling constructor since key already in state and we don't know it.\n to ||= Object.create(Object.getPrototypeOf(this), {});\n const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;\n to = to as this;\n to.finished = finished;\n to.destroyed = destroyed;\n to.blockLen = blockLen;\n to.outputLen = outputLen;\n to.oHash = oHash._cloneInto(to.oHash);\n to.iHash = iHash._cloneInto(to.iHash);\n return to;\n }\n clone(): _HMAC<T> {\n return this._cloneInto();\n }\n destroy(): void {\n this.destroyed = true;\n this.oHash.destroy();\n this.iHash.destroy();\n }\n}\n\n/**\n * HMAC: RFC2104 message authentication code.\n * @param hash - function that would be used e.g. sha256\n * @param key - message key\n * @param message - message data\n * @example\n * import { hmac } from '@noble/hashes/hmac';\n * import { sha256 } from '@noble/hashes/sha2';\n * const mac1 = hmac(sha256, 'key', 'message');\n */\nexport const hmac: {\n (hash: CHash, key: Uint8Array, message: Uint8Array): Uint8Array;\n create(hash: CHash, key: Uint8Array): _HMAC<any>;\n} = (hash: CHash, key: Uint8Array, message: Uint8Array): Uint8Array =>\n new _HMAC<any>(hash, key).update(message).digest();\nhmac.create = (hash: CHash, key: Uint8Array) => new _HMAC<any>(hash, key);\n","/**\n * PBKDF (RFC 2898). Can be used to create a key from password and salt.\n * @module\n */\nimport { hmac } from './hmac.ts';\n// prettier-ignore\nimport {\n ahash, anumber,\n asyncLoop, checkOpts, clean, createView, kdfInputToBytes,\n type CHash,\n type Hash,\n type KDFInput\n} from './utils.ts';\n\n/**\n * PBKDF2 options:\n * * c: iterations, should probably be higher than 100_000\n * * dkLen: desired length of derived key in bytes\n * * asyncTick: max time in ms for which async function can block execution\n */\nexport type Pbkdf2Opt = {\n c: number;\n dkLen?: number;\n asyncTick?: number;\n};\n// Common start and end for sync/async functions\nfunction pbkdf2Init(hash: CHash, _password: KDFInput, _salt: KDFInput, _opts: Pbkdf2Opt) {\n ahash(hash);\n const opts = checkOpts({ dkLen: 32, asyncTick: 10 }, _opts);\n const { c, dkLen, asyncTick } = opts;\n anumber(c, 'c');\n anumber(dkLen, 'dkLen');\n anumber(asyncTick, 'asyncTick');\n if (c < 1) throw new Error('iterations (c) must be >= 1');\n const password = kdfInputToBytes(_password, 'password');\n const salt = kdfInputToBytes(_salt, 'salt');\n // DK = PBKDF2(PRF, Password, Salt, c, dkLen);\n const DK = new Uint8Array(dkLen);\n // U1 = PRF(Password, Salt + INT_32_BE(i))\n const PRF = hmac.create(hash, password);\n const PRFSalt = PRF._cloneInto().update(salt);\n return { c, dkLen, asyncTick, DK, PRF, PRFSalt };\n}\n\nfunction pbkdf2Output<T extends Hash<T>>(\n PRF: Hash<T>,\n PRFSalt: Hash<T>,\n DK: Uint8Array,\n prfW: Hash<T>,\n u: Uint8Array\n) {\n PRF.destroy();\n PRFSalt.destroy();\n if (prfW) prfW.destroy();\n clean(u);\n return DK;\n}\n\n/**\n * PBKDF2-HMAC: RFC 2898 key derivation function\n * @param hash - hash function that would be used e.g. sha256\n * @param password - password from which a derived key is generated\n * @param salt - cryptographic salt\n * @param opts - {c, dkLen} where c is work factor and dkLen is output message size\n * @example\n * const key = pbkdf2(sha256, 'password', 'salt', { dkLen: 32, c: Math.pow(2, 18) });\n */\nexport function pbkdf2(\n hash: CHash,\n password: KDFInput,\n salt: KDFInput,\n opts: Pbkdf2Opt\n): Uint8Array {\n const { c, dkLen, DK, PRF, PRFSalt } = pbkdf2Init(hash, password, salt, opts);\n let prfW: any; // Working copy\n const arr = new Uint8Array(4);\n const view = createView(arr);\n const u = new Uint8Array(PRF.outputLen);\n // DK = T1 + T2 + ⋯ + Tdklen/hlen\n for (let ti = 1, pos = 0; pos < dkLen; ti++, pos += PRF.outputLen) {\n // Ti = F(Password, Salt, c, i)\n const Ti = DK.subarray(pos, pos + PRF.outputLen);\n view.setInt32(0, ti, false);\n // F(Password, Salt, c, i) = U1 ^ U2 ^ ⋯ ^ Uc\n // U1 = PRF(Password, Salt + INT_32_BE(i))\n (prfW = PRFSalt._cloneInto(prfW)).update(arr).digestInto(u);\n Ti.set(u.subarray(0, Ti.length));\n for (let ui = 1; ui < c; ui++) {\n // Uc = PRF(Password, Uc−1)\n PRF._cloneInto(prfW).update(u).digestInto(u);\n for (let i = 0; i < Ti.length; i++) Ti[i] ^= u[i];\n }\n }\n return pbkdf2Output(PRF, PRFSalt, DK, prfW, u);\n}\n\n/**\n * PBKDF2-HMAC: RFC 2898 key derivation function. Async version.\n * @example\n * await pbkdf2Async(sha256, 'password', 'salt', { dkLen: 32, c: 500_000 });\n */\nexport async function pbkdf2Async(\n hash: CHash,\n password: KDFInput,\n salt: KDFInput,\n opts: Pbkdf2Opt\n): Promise<Uint8Array> {\n const { c, dkLen, asyncTick, DK, PRF, PRFSalt } = pbkdf2Init(hash, password, salt, opts);\n let prfW: any; // Working copy\n const arr = new Uint8Array(4);\n const view = createView(arr);\n const u = new Uint8Array(PRF.outputLen);\n // DK = T1 + T2 + ⋯ + Tdklen/hlen\n for (let ti = 1, pos = 0; pos < dkLen; ti++, pos += PRF.outputLen) {\n // Ti = F(Password, Salt, c, i)\n const Ti = DK.subarray(pos, pos + PRF.outputLen);\n view.setInt32(0, ti, false);\n // F(Password, Salt, c, i) = U1 ^ U2 ^ ⋯ ^ Uc\n // U1 = PRF(Password, Salt + INT_32_BE(i))\n (prfW = PRFSalt._cloneInto(prfW)).update(arr).digestInto(u);\n Ti.set(u.subarray(0, Ti.length));\n await asyncLoop(c - 1, asyncTick, () => {\n // Uc = PRF(Password, Uc−1)\n PRF._cloneInto(prfW).update(u).digestInto(u);\n for (let i = 0; i < Ti.length; i++) Ti[i] ^= u[i];\n });\n }\n return pbkdf2Output(PRF, PRFSalt, DK, prfW, u);\n}\n","/**\n * Internal Merkle-Damgard hash utils.\n * @module\n */\nimport { abytes, aexists, aoutput, clean, createView, type Hash } from './utils.ts';\n\n/** Choice: a ? b : c */\nexport function Chi(a: number, b: number, c: number): number {\n return (a & b) ^ (~a & c);\n}\n\n/** Majority function, true if any two inputs is true. */\nexport function Maj(a: number, b: number, c: number): number {\n return (a & b) ^ (a & c) ^ (b & c);\n}\n\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */\nexport abstract class HashMD<T extends HashMD<T>> implements Hash<T> {\n protected abstract process(buf: DataView, offset: number): void;\n protected abstract get(): number[];\n protected abstract set(...args: number[]): void;\n abstract destroy(): void;\n protected abstract roundClean(): void;\n\n readonly blockLen: number;\n readonly outputLen: number;\n readonly padOffset: number;\n readonly isLE: boolean;\n\n // For partial updates less than block size\n protected buffer: Uint8Array;\n protected view: DataView;\n protected finished = false;\n protected length = 0;\n protected pos = 0;\n protected destroyed = false;\n\n constructor(blockLen: number, outputLen: number, padOffset: number, isLE: boolean) {\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data: Uint8Array): this {\n aexists(this);\n abytes(data);\n const { view, buffer, blockLen } = this;\n const len = data.length;\n for (let pos = 0; pos < len; ) {\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = createView(data);\n for (; blockLen <= len - pos; pos += blockLen) this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out: Uint8Array): void {\n aexists(this);\n aoutput(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n clean(this.buffer.subarray(pos));\n // we have less than padOffset left in buffer, so we cannot put length in\n // current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for (let i = pos; i < blockLen; i++) buffer[i] = 0;\n // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64 bits of that value.\n view.setBigUint64(blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = createView(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which must be fused in single op with modulo by JIT\n if (len % 4) throw new Error('_sha2: outputLen must be aligned to 32bit');\n const outLen = len / 4;\n const state = this.get();\n if (outLen > state.length) throw new Error('_sha2: outputLen bigger than state');\n for (let i = 0; i < outLen; i++) oview.setUint32(4 * i, state[i], isLE);\n }\n digest(): Uint8Array {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to?: T): T {\n to ||= new (this.constructor as any)() as T;\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.destroyed = destroyed;\n to.finished = finished;\n to.length = length;\n to.pos = pos;\n if (length % blockLen) to.buffer.set(buffer);\n return to as unknown as any;\n }\n clone(): T {\n return this._cloneInto();\n }\n}\n\n/**\n * Initial SHA-2 state: fractional parts of square roots of first 16 primes 2..53.\n * Check out `test/misc/sha2-gen-iv.js` for recomputation guide.\n */\n\n/** Initial SHA256 state. Bits 0..32 of frac part of sqrt of primes 2..19 */\nexport const SHA256_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n]);\n\n/** Initial SHA224 state. Bits 32..64 of frac part of sqrt of primes 23..53 */\nexport const SHA224_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4,\n]);\n\n/** Initial SHA384 state. Bits 0..64 of frac part of sqrt of primes 23..53 */\nexport const SHA384_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4,\n]);\n\n/** Initial SHA512 state. Bits 0..64 of frac part of sqrt of primes 2..19 */\nexport const SHA512_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179,\n]);\n","/**\n * Internal helpers for u64. BigUint64Array is too slow as per 2025, so we implement it using Uint32Array.\n * @todo re-check https://issues.chromium.org/issues/42212588\n * @module\n */\nconst U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\n\nfunction fromBig(\n n: bigint,\n le = false\n): {\n h: number;\n l: number;\n} {\n if (le) return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\n\nfunction split(lst: bigint[], le = false): Uint32Array[] {\n const len = lst.length;\n let Ah = new Uint32Array(len);\n let Al = new Uint32Array(len);\n for (let i = 0; i < len; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\n\nconst toBig = (h: number, l: number): bigint => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h: number, _l: number, s: number): number => h >>> s;\nconst shrSL = (h: number, l: number, s: number): number => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h: number, l: number, s: number): number => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h: number, l: number, s: number): number => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h: number, l: number, s: number): number => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h: number, l: number, s: number): number => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h: number, l: number): number => l;\nconst rotr32L = (h: number, _l: number): number => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h: number, l: number, s: number): number => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h: number, l: number, s: number): number => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h: number, l: number, s: number): number => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h: number, l: number, s: number): number => (h << (s - 32)) | (l >>> (64 - s));\n\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(\n Ah: number,\n Al: number,\n Bh: number,\n Bl: number\n): {\n h: number;\n l: number;\n} {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al: number, Bl: number, Cl: number): number => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low: number, Ah: number, Bh: number, Ch: number): number =>\n (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al: number, Bl: number, Cl: number, Dl: number): number =>\n (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number): number =>\n (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al: number, Bl: number, Cl: number, Dl: number, El: number): number =>\n (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number): number =>\n (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n\n// prettier-ignore\nexport {\n add, add3H, add3L, add4H, add4L, add5H, add5L, fromBig, rotlBH, rotlBL, rotlSH, rotlSL, rotr32H, rotr32L, rotrBH, rotrBL, rotrSH, rotrSL, shrSH, shrSL, split, toBig\n};\n// prettier-ignore\nconst u64: { fromBig: typeof fromBig; split: typeof split; toBig: (h: number, l: number) => bigint; shrSH: (h: number, _l: number, s: number) => number; shrSL: (h: number, l: number, s: number) => number; rotrSH: (h: number, l: number, s: number) => number; rotrSL: (h: number, l: number, s: number) => number; rotrBH: (h: number, l: number, s: number) => number; rotrBL: (h: number, l: number, s: number) => number; rotr32H: (_h: number, l: number) => number; rotr32L: (h: number, _l: number) => number; rotlSH: (h: number, l: number, s: number) => number; rotlSL: (h: number, l: number, s: number) => number; rotlBH: (h: number, l: number, s: number) => number; rotlBL: (h: number, l: number, s: number) => number; add: typeof add; add3L: (Al: number, Bl: number, Cl: number) => number; add3H: (low: number, Ah: number, Bh: number, Ch: number) => number; add4L: (Al: number, Bl: number, Cl: number, Dl: number) => number; add4H: (low: number, Ah: number, Bh: number, Ch: number, Dh: number) => number; add5H: (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number) => number; add5L: (Al: number, Bl: number, Cl: number, Dl: number, El: number) => number; } = {\n fromBig, split, toBig,\n shrSH, shrSL,\n rotrSH, rotrSL, rotrBH, rotrBL,\n rotr32H, rotr32L,\n rotlSH, rotlSL, rotlBH, rotlBL,\n add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexport default u64;\n","/**\n * SHA2 hash function. A.k.a. sha256, sha384, sha512, sha512_224, sha512_256.\n * SHA256 is the fastest hash implementable in JS, even faster than Blake3.\n * Check out [RFC 4634](https://www.rfc-editor.org/rfc/rfc4634) and\n * [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n */\nimport { Chi, HashMD, Maj, SHA224_IV, SHA256_IV, SHA384_IV, SHA512_IV } from './_md.ts';\nimport * as u64 from './_u64.ts';\nimport { type CHash, clean, createHasher, oidNist, rotr } from './utils.ts';\n\n/**\n * Round constants:\n * First 32 bits of fractional parts of the cube roots of the first 64 primes 2..311)\n */\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ Uint32Array.from([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n\n/** Reusable temporary buffer. \"W\" comes straight from spec. */\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\n\n/** Internal 32-byte base SHA2 hash class. */\nabstract class SHA2_32B<T extends SHA2_32B<T>> extends HashMD<T> {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n protected abstract A: number;\n protected abstract B: number;\n protected abstract C: number;\n protected abstract D: number;\n protected abstract E: number;\n protected abstract F: number;\n protected abstract G: number;\n protected abstract H: number;\n\n constructor(outputLen: number) {\n super(64, outputLen, 8, false);\n }\n protected get(): [number, number, number, number, number, number, number, number] {\n const { A, B, C, D, E, F, G, H } = this;\n return [A, B, C, D, E, F, G, H];\n }\n // prettier-ignore\n protected set(\n A: number, B: number, C: number, D: number, E: number, F: number, G: number, H: number\n ): void {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n this.F = F | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n protected process(view: DataView, offset: number): void {\n // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) SHA256_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 64; i++) {\n const W15 = SHA256_W[i - 15];\n const W2 = SHA256_W[i - 2];\n const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n }\n // Compression function main loop, 64 rounds\n let { A, B, C, D, E, F, G, H } = this;\n for (let i = 0; i < 64; i++) {\n const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n const T2 = (sigma0 + Maj(A, B, C)) | 0;\n H = G;\n G = F;\n F = E;\n E = (D + T1) | 0;\n D = C;\n C = B;\n B = A;\n A = (T1 + T2) | 0;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n F = (F + this.F) | 0;\n G = (G + this.G) | 0;\n H = (H + this.H) | 0;\n this.set(A, B, C, D, E, F, G, H);\n }\n protected roundClean(): void {\n clean(SHA256_W);\n }\n destroy(): void {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n clean(this.buffer);\n }\n}\n\n/** Internal SHA2-256 hash class. */\nexport class _SHA256 extends SHA2_32B<_SHA256> {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n protected A: number = SHA256_IV[0] | 0;\n protected B: number = SHA256_IV[1] | 0;\n protected C: number = SHA256_IV[2] | 0;\n protected D: number = SHA256_IV[3] | 0;\n protected E: number = SHA256_IV[4] | 0;\n protected F: number = SHA256_IV[5] | 0;\n protected G: number = SHA256_IV[6] | 0;\n protected H: number = SHA256_IV[7] | 0;\n constructor() {\n super(32);\n }\n}\n\n/** Internal SHA2-224 hash class. */\nexport class _SHA224 extends SHA2_32B<_SHA224> {\n protected A: number = SHA224_IV[0] | 0;\n protected B: number = SHA224_IV[1] | 0;\n protected C: number = SHA224_IV[2] | 0;\n protected D: number = SHA224_IV[3] | 0;\n protected E: number = SHA224_IV[4] | 0;\n protected F: number = SHA224_IV[5] | 0;\n protected G: number = SHA224_IV[6] | 0;\n protected H: number = SHA224_IV[7] | 0;\n constructor() {\n super(28);\n }\n}\n\n// SHA2-512 is slower than sha256 in js because u64 operations are slow.\n\n// Round contants\n// First 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409\n// prettier-ignore\nconst K512 = /* @__PURE__ */ (() => u64.split([\n '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n))))();\nconst SHA512_Kh = /* @__PURE__ */ (() => K512[0])();\nconst SHA512_Kl = /* @__PURE__ */ (() => K512[1])();\n\n// Reusable temporary buffers\nconst SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\nconst SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\n\n/** Internal 64-byte base SHA2 hash class. */\nabstract class SHA2_64B<T extends SHA2_64B<T>> extends HashMD<T> {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n // h -- high 32 bits, l -- low 32 bits\n protected abstract Ah: number;\n protected abstract Al: number;\n protected abstract Bh: number;\n protected abstract Bl: number;\n protected abstract Ch: number;\n protected abstract Cl: number;\n protected abstract Dh: number;\n protected abstract Dl: number;\n protected abstract Eh: number;\n protected abstract El: number;\n protected abstract Fh: number;\n protected abstract Fl: number;\n protected abstract Gh: number;\n protected abstract Gl: number;\n protected abstract Hh: number;\n protected abstract Hl: number;\n\n constructor(outputLen: number) {\n super(128, outputLen, 16, false);\n }\n // prettier-ignore\n protected get(): [\n number, number, number, number, number, number, number, number,\n number, number, number, number, number, number, number, number\n ] {\n const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n }\n // prettier-ignore\n protected set(\n Ah: number, Al: number, Bh: number, Bl: number, Ch: number, Cl: number, Dh: number, Dl: number,\n Eh: number, El: number, Fh: number, Fl: number, Gh: number, Gl: number, Hh: number, Hl: number\n ): void {\n this.Ah = Ah | 0;\n this.Al = Al | 0;\n this.Bh = Bh | 0;\n this.Bl = Bl | 0;\n this.Ch = Ch | 0;\n this.Cl = Cl | 0;\n this.Dh = Dh | 0;\n this.Dl = Dl | 0;\n this.Eh = Eh | 0;\n this.El = El | 0;\n this.Fh = Fh | 0;\n this.Fl = Fl | 0;\n this.Gh = Gh | 0;\n this.Gl = Gl | 0;\n this.Hh = Hh | 0;\n this.Hl = Hl | 0;\n }\n protected process(view: DataView, offset: number): void {\n // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) {\n SHA512_W_H[i] = view.getUint32(offset);\n SHA512_W_L[i] = view.getUint32((offset += 4));\n }\n for (let i = 16; i < 80; i++) {\n // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n const W15h = SHA512_W_H[i - 15] | 0;\n const W15l = SHA512_W_L[i - 15] | 0;\n const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n const W2h = SHA512_W_H[i - 2] | 0;\n const W2l = SHA512_W_L[i - 2] | 0;\n const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n SHA512_W_H[i] = SUMh | 0;\n SHA512_W_L[i] = SUMl | 0;\n }\n let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n // Compression function main loop, 80 rounds\n for (let i = 0; i < 80; i++) {\n // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n const CHIl = (El & Fl) ^ (~El & Gl);\n // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n // prettier-ignore\n const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n const T1l = T1ll | 0;\n // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n Hh = Gh | 0;\n Hl = Gl | 0;\n Gh = Fh | 0;\n Gl = Fl | 0;\n Fh = Eh | 0;\n Fl = El | 0;\n ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n Dh = Ch | 0;\n Dl = Cl | 0;\n Ch = Bh | 0;\n Cl = Bl | 0;\n Bh = Ah | 0;\n Bl = Al | 0;\n const All = u64.add3L(T1l, sigma0l, MAJl);\n Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n Al = All | 0;\n }\n // Add the compressed chunk to the current hash value\n ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n }\n protected roundClean(): void {\n clean(SHA512_W_H, SHA512_W_L);\n }\n destroy(): void {\n clean(this.buffer);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\n\n/** Internal SHA2-512 hash class. */\nexport class _SHA512 extends SHA2_64B<_SHA512> {\n protected Ah: number = SHA512_IV[0] | 0;\n protected Al: number = SHA512_IV[1] | 0;\n protected Bh: number = SHA512_IV[2] | 0;\n protected Bl: number = SHA512_IV[3] | 0;\n protected Ch: number = SHA512_IV[4] | 0;\n protected Cl: number = SHA512_IV[5] | 0;\n protected Dh: number = SHA512_IV[6] | 0;\n protected Dl: number = SHA512_IV[7] | 0;\n protected Eh: number = SHA512_IV[8] | 0;\n protected El: number = SHA512_IV[9] | 0;\n protected Fh: number = SHA512_IV[10] | 0;\n protected Fl: number = SHA512_IV[11] | 0;\n protected Gh: number = SHA512_IV[12] | 0;\n protected Gl: number = SHA512_IV[13] | 0;\n protected Hh: number = SHA512_IV[14] | 0;\n protected Hl: number = SHA512_IV[15] | 0;\n\n constructor() {\n super(64);\n }\n}\n\n/** Internal SHA2-384 hash class. */\nexport class _SHA384 extends SHA2_64B<_SHA384> {\n protected Ah: number = SHA384_IV[0] | 0;\n protected Al: number = SHA384_IV[1] | 0;\n protected Bh: number = SHA384_IV[2] | 0;\n protected Bl: number = SHA384_IV[3] | 0;\n protected Ch: number = SHA384_IV[4] | 0;\n protected Cl: number = SHA384_IV[5] | 0;\n protected Dh: number = SHA384_IV[6] | 0;\n protected Dl: number = SHA384_IV[7] | 0;\n protected Eh: number = SHA384_IV[8] | 0;\n protected El: number = SHA384_IV[9] | 0;\n protected Fh: number = SHA384_IV[10] | 0;\n protected Fl: number = SHA384_IV[11] | 0;\n protected Gh: number = SHA384_IV[12] | 0;\n protected Gl: number = SHA384_IV[13] | 0;\n protected Hh: number = SHA384_IV[14] | 0;\n protected Hl: number = SHA384_IV[15] | 0;\n\n constructor() {\n super(48);\n }\n}\n\n/**\n * Truncated SHA512/256 and SHA512/224.\n * SHA512_IV is XORed with 0xa5a5a5a5a5a5a5a5, then used as \"intermediary\" IV of SHA512/t.\n * Then t hashes string to produce result IV.\n * See `test/misc/sha2-gen-iv.js`.\n */\n\n/** SHA512/224 IV */\nconst T224_IV = /* @__PURE__ */ Uint32Array.from([\n 0x8c3d37c8, 0x19544da2, 0x73e19966, 0x89dcd4d6, 0x1dfab7ae, 0x32ff9c82, 0x679dd514, 0x582f9fcf,\n 0x0f6d2b69, 0x7bd44da8, 0x77e36f73, 0x04c48942, 0x3f9d85a8, 0x6a1d36c8, 0x1112e6ad, 0x91d692a1,\n]);\n\n/** SHA512/256 IV */\nconst T256_IV = /* @__PURE__ */ Uint32Array.from([\n 0x22312194, 0xfc2bf72c, 0x9f555fa3, 0xc84c64c2, 0x2393b86b, 0x6f53b151, 0x96387719, 0x5940eabd,\n 0x96283ee2, 0xa88effe3, 0xbe5e1e25, 0x53863992, 0x2b0199fc, 0x2c85b8aa, 0x0eb72ddc, 0x81c52ca2,\n]);\n\n/** Internal SHA2-512/224 hash class. */\nexport class _SHA512_224 extends SHA2_64B<_SHA512_224> {\n protected Ah: number = T224_IV[0] | 0;\n protected Al: number = T224_IV[1] | 0;\n protected Bh: number = T224_IV[2] | 0;\n protected Bl: number = T224_IV[3] | 0;\n protected Ch: number = T224_IV[4] | 0;\n protected Cl: number = T224_IV[5] | 0;\n protected Dh: number = T224_IV[6] | 0;\n protected Dl: number = T224_IV[7] | 0;\n protected Eh: number = T224_IV[8] | 0;\n protected El: number = T224_IV[9] | 0;\n protected Fh: number = T224_IV[10] | 0;\n protected Fl: number = T224_IV[11] | 0;\n protected Gh: number = T224_IV[12] | 0;\n protected Gl: number = T224_IV[13] | 0;\n protected Hh: number = T224_IV[14] | 0;\n protected Hl: number = T224_IV[15] | 0;\n\n constructor() {\n super(28);\n }\n}\n\n/** Internal SHA2-512/256 hash class. */\nexport class _SHA512_256 extends SHA2_64B<_SHA512_256> {\n protected Ah: number = T256_IV[0] | 0;\n protected Al: number = T256_IV[1] | 0;\n protected Bh: number = T256_IV[2] | 0;\n protected Bl: number = T256_IV[3] | 0;\n protected Ch: number = T256_IV[4] | 0;\n protected Cl: number = T256_IV[5] | 0;\n protected Dh: number = T256_IV[6] | 0;\n protected Dl: number = T256_IV[7] | 0;\n protected Eh: number = T256_IV[8] | 0;\n protected El: number = T256_IV[9] | 0;\n protected Fh: number = T256_IV[10] | 0;\n protected Fl: number = T256_IV[11] | 0;\n protected Gh: number = T256_IV[12] | 0;\n protected Gl: number = T256_IV[13] | 0;\n protected Hh: number = T256_IV[14] | 0;\n protected Hl: number = T256_IV[15] | 0;\n\n constructor() {\n super(32);\n }\n}\n\n/**\n * SHA2-256 hash function from RFC 4634. In JS it's the fastest: even faster than Blake3. Some info:\n *\n * - Trying 2^128 hashes would get 50% chance of collision, using birthday attack.\n * - BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n * - Each sha256 hash is executing 2^18 bit operations.\n * - Good 2024 ASICs can do 200Th/sec with 3500 watts of power, corresponding to 2^36 hashes/joule.\n */\nexport const sha256: CHash<_SHA256> = /* @__PURE__ */ createHasher(\n () => new _SHA256(),\n /* @__PURE__ */ oidNist(0x01)\n);\n/** SHA2-224 hash function from RFC 4634 */\nexport const sha224: CHash<_SHA224> = /* @__PURE__ */ createHasher(\n () => new _SHA224(),\n /* @__PURE__ */ oidNist(0x04)\n);\n\n/** SHA2-512 hash function from RFC 4634. */\nexport const sha512: CHash<_SHA512> = /* @__PURE__ */ createHasher(\n () => new _SHA512(),\n /* @__PURE__ */ oidNist(0x03)\n);\n/** SHA2-384 hash function from RFC 4634. */\nexport const sha384: CHash<_SHA384> = /* @__PURE__ */ createHasher(\n () => new _SHA384(),\n /* @__PURE__ */ oidNist(0x02)\n);\n\n/**\n * SHA2-512/256 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_256: CHash<_SHA512_256> = /* @__PURE__ */ createHasher(\n () => new _SHA512_256(),\n /* @__PURE__ */ oidNist(0x06)\n);\n/**\n * SHA2-512/224 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_224: CHash<_SHA512_224> = /* @__PURE__ */ createHasher(\n () => new _SHA512_224(),\n /* @__PURE__ */ oidNist(0x05)\n);\n","/*! scure-bip39 - MIT License (c) 2022 Patricio Palladino, Paul Miller (paulmillr.com) */\nimport { pbkdf2, pbkdf2Async } from '@noble/hashes/pbkdf2.js';\nimport { sha256, sha512 } from '@noble/hashes/sha2.js';\nimport { abytes, anumber, randomBytes } from '@noble/hashes/utils.js';\nimport { pbkdf2 as pbkdf2web, sha512 as sha512web } from '@noble/hashes/webcrypto.js';\nimport { utils as baseUtils } from '@scure/base';\n// Japanese wordlist\nconst isJapanese = (wordlist) => wordlist[0] === '\\u3042\\u3044\\u3053\\u304f\\u3057\\u3093';\n// Normalization replaces equivalent sequences of characters\n// so that any two texts that are equivalent will be reduced\n// to the same sequence of code points, called the normal form of the original text.\n// https://tonsky.me/blog/unicode/#why-is-a----\nfunction nfkd(str) {\n if (typeof str !== 'string')\n throw new TypeError('invalid mnemonic type: ' + typeof str);\n return str.normalize('NFKD');\n}\nfunction normalize(str) {\n const norm = nfkd(str);\n const words = norm.split(' ');\n if (![12, 15, 18, 21, 24].includes(words.length))\n throw new Error('Invalid mnemonic');\n return { nfkd: norm, words };\n}\nfunction aentropy(ent) {\n abytes(ent);\n if (![16, 20, 24, 28, 32].includes(ent.length))\n throw new Error('invalid entropy length');\n}\n/**\n * Generate x random words. Uses Cryptographically-Secure Random Number Generator.\n * @param wordlist imported wordlist for specific language\n * @param strength mnemonic strength 128-256 bits\n * @example\n * generateMnemonic(wordlist, 128)\n * // 'legal winner thank year wave sausage worth useful legal winner thank yellow'\n */\nexport function generateMnemonic(wordlist, strength = 128) {\n anumber(strength);\n if (strength % 32 !== 0 || strength > 256)\n throw new TypeError('Invalid entropy');\n return entropyToMnemonic(randomBytes(strength / 8), wordlist);\n}\nconst calcChecksum = (entropy) => {\n // Checksum is ent.length/4 bits long\n const bitsLeft = 8 - entropy.length / 4;\n // Zero rightmost \"bitsLeft\" bits in byte\n // For example: bitsLeft=4 val=10111101 -> 10110000\n return new Uint8Array([(sha256(entropy)[0] >> bitsLeft) << bitsLeft]);\n};\nfunction getCoder(wordlist) {\n if (!Array.isArray(wordlist) || wordlist.length !== 2048 || typeof wordlist[0] !== 'string')\n throw new Error('Wordlist: expected array of 2048 strings');\n wordlist.forEach((i) => {\n if (typeof i !== 'string')\n throw new Error('wordlist: non-string element: ' + i);\n });\n return baseUtils.chain(baseUtils.checksum(1, calcChecksum), baseUtils.radix2(11, true), baseUtils.alphabet(wordlist));\n}\n/**\n * Reversible: Converts mnemonic string to raw entropy in form of byte array.\n * @param mnemonic 12-24 words\n * @param wordlist imported wordlist for specific language\n * @example\n * const mnem = 'legal winner thank year wave sausage worth useful legal winner thank yellow';\n * mnemonicToEntropy(mnem, wordlist)\n * // Produces\n * new Uint8Array([\n * 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,\n * 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f\n * ])\n */\nexport function mnemonicToEntropy(mnemonic, wordlist) {\n const { words } = normalize(mnemonic);\n const entropy = getCoder(wordlist).decode(words);\n aentropy(entropy);\n return entropy;\n}\n/**\n * Reversible: Converts raw entropy in form of byte array to mnemonic string.\n * @param entropy byte array\n * @param wordlist imported wordlist for specific language\n * @returns 12-24 words\n * @example\n * const ent = new Uint8Array([\n * 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,\n * 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f\n * ]);\n * entropyToMnemonic(ent, wordlist);\n * // 'legal winner thank year wave sausage worth useful legal winner thank yellow'\n */\nexport function entropyToMnemonic(entropy, wordlist) {\n aentropy(entropy);\n const words = getCoder(wordlist).encode(entropy);\n return words.join(isJapanese(wordlist) ? '\\u3000' : ' ');\n}\n/**\n * Validates mnemonic for being 12-24 words contained in `wordlist`.\n */\nexport function validateMnemonic(mnemonic, wordlist) {\n try {\n mnemonicToEntropy(mnemonic, wordlist);\n }\n catch (e) {\n return false;\n }\n return true;\n}\nconst psalt = (passphrase) => nfkd('mnemonic' + passphrase);\n/**\n * Irreversible: Uses KDF to derive 64 bytes of key data from mnemonic + optional password.\n * @param mnemonic 12-24 words\n * @param passphrase string that will additionally protect the key\n * @returns 64 bytes of key data\n * @example\n * const mnem = 'legal winner thank year wave sausage worth useful legal winner thank yellow';\n * await mnemonicToSeed(mnem, 'password');\n * // new Uint8Array([...64 bytes])\n */\nexport function mnemonicToSeed(mnemonic, passphrase = '') {\n return pbkdf2Async(sha512, normalize(mnemonic).nfkd, psalt(passphrase), { c: 2048, dkLen: 64 });\n}\n/**\n * Irreversible: Uses KDF to derive 64 bytes of key data from mnemonic + optional password.\n * @param mnemonic 12-24 words\n * @param passphrase string that will additionally protect the key\n * @returns 64 bytes of key data\n * @example\n * const mnem = 'legal winner thank year wave sausage worth useful legal winner thank yellow';\n * mnemonicToSeedSync(mnem, 'password');\n * // new Uint8Array([...64 bytes])\n */\nexport function mnemonicToSeedSync(mnemonic, passphrase = '') {\n return pbkdf2(sha512, normalize(mnemonic).nfkd, psalt(passphrase), { c: 2048, dkLen: 64 });\n}\n/**\n * Uses native, built-in functionality, provided by globalThis.crypto.\n * Irreversible: Uses KDF to derive 64 bytes of key data from mnemonic + optional password.\n * @param mnemonic 12-24 words\n * @param passphrase string that will additionally protect the key\n * @returns 64 bytes of key data\n * @example\n * const mnem = 'legal winner thank year wave sausage worth useful legal winner thank yellow';\n * mnemonicToSeedWebcrypto(mnem, 'password');\n * // new Uint8Array([...64 bytes])\n */\nexport function mnemonicToSeedWebcrypto(mnemonic, passphrase = '') {\n return pbkdf2web(sha512web, normalize(mnemonic).nfkd, psalt(passphrase), { c: 2048, dkLen: 64 });\n}\n","export const wordlist = `abandon\nability\nable\nabout\nabove\nabsent\nabsorb\nabstract\nabsurd\nabuse\naccess\naccident\naccount\naccuse\nachieve\nacid\nacoustic\nacquire\nacross\nact\naction\nactor\nactress\nactual\nadapt\nadd\naddict\naddress\nadjust\nadmit\nadult\nadvance\nadvice\naerobic\naffair\nafford\nafraid\nagain\nage\nagent\nagree\nahead\naim\nair\nairport\naisle\nalarm\nalbum\nalcohol\nalert\nalien\nall\nalley\nallow\nalmost\nalone\nalpha\nalready\nalso\nalter\nalways\namateur\namazing\namong\namount\namused\nanalyst\nanchor\nancient\nanger\nangle\nangry\nanimal\nankle\nannounce\nannual\nanother\nanswer\nantenna\nantique\nanxiety\nany\napart\napology\nappear\napple\napprove\napril\narch\narctic\narea\narena\nargue\narm\narmed\narmor\narmy\naround\narrange\narrest\narrive\narrow\nart\nartefact\nartist\nartwork\nask\naspect\nassault\nasset\nassist\nassume\nasthma\nathlete\natom\nattack\nattend\nattitude\nattract\nauction\naudit\naugust\naunt\nauthor\nauto\nautumn\naverage\navocado\navoid\nawake\naware\naway\nawesome\nawful\nawkward\naxis\nbaby\nbachelor\nbacon\nbadge\nbag\nbalance\nbalcony\nball\nbamboo\nbanana\nbanner\nbar\nbarely\nbargain\nbarrel\nbase\nbasic\nbasket\nbattle\nbeach\nbean\nbeauty\nbecause\nbecome\nbeef\nbefore\nbegin\nbehave\nbehind\nbelieve\nbelow\nbelt\nbench\nbenefit\nbest\nbetray\nbetter\nbetween\nbeyond\nbicycle\nbid\nbike\nbind\nbiology\nbird\nbirth\nbitter\nblack\nblade\nblame\nblanket\nblast\nbleak\nbless\nblind\nblood\nblossom\nblouse\nblue\nblur\nblush\nboard\nboat\nbody\nboil\nbomb\nbone\nbonus\nbook\nboost\nborder\nboring\nborrow\nboss\nbottom\nbounce\nbox\nboy\nbracket\nbrain\nbrand\nbrass\nbrave\nbread\nbreeze\nbrick\nbridge\nbrief\nbright\nbring\nbrisk\nbroccoli\nbroken\nbronze\nbroom\nbrother\nbrown\nbrush\nbubble\nbuddy\nbudget\nbuffalo\nbuild\nbulb\nbulk\nbullet\nbundle\nbunker\nburden\nburger\nburst\nbus\nbusiness\nbusy\nbutter\nbuyer\nbuzz\ncabbage\ncabin\ncable\ncactus\ncage\ncake\ncall\ncalm\ncamera\ncamp\ncan\ncanal\ncancel\ncandy\ncannon\ncanoe\ncanvas\ncanyon\ncapable\ncapital\ncaptain\ncar\ncarbon\ncard\ncargo\ncarpet\ncarry\ncart\ncase\ncash\ncasino\ncastle\ncasual\ncat\ncatalog\ncatch\ncategory\ncattle\ncaught\ncause\ncaution\ncave\nceiling\ncelery\ncement\ncensus\ncentury\ncereal\ncertain\nchair\nchalk\nchampion\nchange\nchaos\nchapter\ncharge\nchase\nchat\ncheap\ncheck\ncheese\nchef\ncherry\nchest\nchicken\nchief\nchild\nchimney\nchoice\nchoose\nchronic\nchuckle\nchunk\nchurn\ncigar\ncinnamon\ncircle\ncitizen\ncity\ncivil\nclaim\nclap\nclarify\nclaw\nclay\nclean\nclerk\nclever\nclick\nclient\ncliff\nclimb\nclinic\nclip\nclock\nclog\nclose\ncloth\ncloud\nclown\nclub\nclump\ncluster\nclutch\ncoach\ncoast\ncoconut\ncode\ncoffee\ncoil\ncoin\ncollect\ncolor\ncolumn\ncombine\ncome\ncomfort\ncomic\ncommon\ncompany\nconcert\nconduct\nconfirm\ncongress\nconnect\nconsider\ncontrol\nconvince\ncook\ncool\ncopper\ncopy\ncoral\ncore\ncorn\ncorrect\ncost\ncotton\ncouch\ncountry\ncouple\ncourse\ncousin\ncover\ncoyote\ncrack\ncradle\ncraft\ncram\ncrane\ncrash\ncrater\ncrawl\ncrazy\ncream\ncredit\ncreek\ncrew\ncricket\ncrime\ncrisp\ncritic\ncrop\ncross\ncrouch\ncrowd\ncrucial\ncruel\ncruise\ncrumble\ncrunch\ncrush\ncry\ncrystal\ncube\nculture\ncup\ncupboard\ncurious\ncurrent\ncurtain\ncurve\ncushion\ncustom\ncute\ncycle\ndad\ndamage\ndamp\ndance\ndanger\ndaring\ndash\ndaughter\ndawn\nday\ndeal\ndebate\ndebris\ndecade\ndecember\ndecide\ndecline\ndecorate\ndecrease\ndeer\ndefense\ndefine\ndefy\ndegree\ndelay\ndeliver\ndemand\ndemise\ndenial\ndentist\ndeny\ndepart\ndepend\ndeposit\ndepth\ndeputy\nderive\ndescribe\ndesert\ndesign\ndesk\ndespair\ndestroy\ndetail\ndetect\ndevelop\ndevice\ndevote\ndiagram\ndial\ndiamond\ndiary\ndice\ndiesel\ndiet\ndiffer\ndigital\ndignity\ndilemma\ndinner\ndinosaur\ndirect\ndirt\ndisagree\ndiscover\ndisease\ndish\ndismiss\ndisorder\ndisplay\ndistance\ndivert\ndivide\ndivorce\ndizzy\ndoctor\ndocument\ndog\ndoll\ndolphin\ndomain\ndonate\ndonkey\ndonor\ndoor\ndose\ndouble\ndove\ndraft\ndragon\ndrama\ndrastic\ndraw\ndream\ndress\ndrift\ndrill\ndrink\ndrip\ndrive\ndrop\ndrum\ndry\nduck\ndumb\ndune\nduring\ndust\ndutch\nduty\ndwarf\ndynamic\neager\neagle\nearly\nearn\nearth\neasily\neast\neasy\necho\necology\neconomy\nedge\nedit\neducate\neffort\negg\neight\neither\nelbow\nelder\nelectric\nelegant\nelement\nelephant\nelevator\nelite\nelse\nembark\nembody\nembrace\nemerge\nemotion\nemploy\nempower\nempty\nenable\nenact\nend\nendless\nendorse\nenemy\nenergy\nenforce\nengage\nengine\nenhance\nenjoy\nenlist\nenough\nenrich\nenroll\nensure\nenter\nentire\nentry\nenvelope\nepisode\nequal\nequip\nera\nerase\nerode\nerosion\nerror\nerupt\nescape\nessay\nessence\nestate\neternal\nethics\nevidence\nevil\nevoke\nevolve\nexact\nexample\nexcess\nexchange\nexcite\nexclude\nexcuse\nexecute\nexercise\nexhaust\nexhibit\nexile\nexist\nexit\nexotic\nexpand\nexpect\nexpire\nexplain\nexpose\nexpress\nextend\nextra\neye\neyebrow\nfabric\nface\nfaculty\nfade\nfaint\nfaith\nfall\nfalse\nfame\nfamily\nfamous\nfan\nfancy\nfantasy\nfarm\nfashion\nfat\nfatal\nfather\nfatigue\nfault\nfavorite\nfeature\nfebruary\nfederal\nfee\nfeed\nfeel\nfemale\nfence\nfestival\nfetch\nfever\nfew\nfiber\nfiction\nfield\nfigure\nfile\nfilm\nfilter\nfinal\nfind\nfine\nfinger\nfinish\nfire\nfirm\nfirst\nfiscal\nfish\nfit\nfitness\nfix\nflag\nflame\nflash\nflat\nflavor\nflee\nflight\nflip\nfloat\nflock\nfloor\nflower\nfluid\nflush\nfly\nfoam\nfocus\nfog\nfoil\nfold\nfollow\nfood\nfoot\nforce\nforest\nforget\nfork\nfortune\nforum\nforward\nfossil\nfoster\nfound\nfox\nfragile\nframe\nfrequent\nfresh\nfriend\nfringe\nfrog\nfront\nfrost\nfrown\nfrozen\nfruit\nfuel\nfun\nfunny\nfurnace\nfury\nfuture\ngadget\ngain\ngalaxy\ngallery\ngame\ngap\ngarage\ngarbage\ngarden\ngarlic\ngarment\ngas\ngasp\ngate\ngather\ngauge\ngaze\ngeneral\ngenius\ngenre\ngentle\ngenuine\ngesture\nghost\ngiant\ngift\ngiggle\nginger\ngiraffe\ngirl\ngive\nglad\nglance\nglare\nglass\nglide\nglimpse\nglobe\ngloom\nglory\nglove\nglow\nglue\ngoat\ngoddess\ngold\ngood\ngoose\ngorilla\ngospel\ngossip\ngovern\ngown\ngrab\ngrace\ngrain\ngrant\ngrape\ngrass\ngravity\ngreat\ngreen\ngrid\ngrief\ngrit\ngrocery\ngroup\ngrow\ngrunt\nguard\nguess\nguide\nguilt\nguitar\ngun\ngym\nhabit\nhair\nhalf\nhammer\nhamster\nhand\nhappy\nharbor\nhard\nharsh\nharvest\nhat\nhave\nhawk\nhazard\nhead\nhealth\nheart\nheavy\nhedgehog\nheight\nhello\nhelmet\nhelp\nhen\nhero\nhidden\nhigh\nhill\nhint\nhip\nhire\nhistory\nhobby\nhockey\nhold\nhole\nholiday\nhollow\nhome\nhoney\nhood\nhope\nhorn\nhorror\nhorse\nhospital\nhost\nhotel\nhour\nhover\nhub\nhuge\nhuman\nhumble\nhumor\nhundred\nhungry\nhunt\nhurdle\nhurry\nhurt\nhusband\nhybrid\nice\nicon\nidea\nidentify\nidle\nignore\nill\nillegal\nillness\nimage\nimitate\nimmense\nimmune\nimpact\nimpose\nimprove\nimpulse\ninch\ninclude\nincome\nincrease\nindex\nindicate\nindoor\nindustry\ninfant\ninflict\ninform\ninhale\ninherit\ninitial\ninject\ninjury\ninmate\ninner\ninnocent\ninput\ninquiry\ninsane\ninsect\ninside\ninspire\ninstall\nintact\ninterest\ninto\ninvest\ninvite\ninvolve\niron\nisland\nisolate\nissue\nitem\nivory\njacket\njaguar\njar\njazz\njealous\njeans\njelly\njewel\njob\njoin\njoke\njourney\njoy\njudge\njuice\njump\njungle\njunior\njunk\njust\nkangaroo\nkeen\nkeep\nketchup\nkey\nkick\nkid\nkidney\nkind\nkingdom\nkiss\nkit\nkitchen\nkite\nkitten\nkiwi\nknee\nknife\nknock\nknow\nlab\nlabel\nlabor\nladder\nlady\nlake\nlamp\nlanguage\nlaptop\nlarge\nlater\nlatin\nlaugh\nlaundry\nlava\nlaw\nlawn\nlawsuit\nlayer\nlazy\nleader\nleaf\nlearn\nleave\nlecture\nleft\nleg\nlegal\nlegend\nleisure\nlemon\nlend\nlength\nlens\nleopard\nlesson\nletter\nlevel\nliar\nliberty\nlibrary\nlicense\nlife\nlift\nlight\nlike\nlimb\nlimit\nlink\nlion\nliquid\nlist\nlittle\nlive\nlizard\nload\nloan\nlobster\nlocal\nlock\nlogic\nlonely\nlong\nloop\nlottery\nloud\nlounge\nlove\nloyal\nlucky\nluggage\nlumber\nlunar\nlunch\nluxury\nlyrics\nmachine\nmad\nmagic\nmagnet\nmaid\nmail\nmain\nmajor\nmake\nmammal\nman\nmanage\nmandate\nmango\nmansion\nmanual\nmaple\nmarble\nmarch\nmargin\nmarine\nmarket\nmarriage\nmask\nmass\nmaster\nmatch\nmaterial\nmath\nmatrix\nmatter\nmaximum\nmaze\nmeadow\nmean\nmeasure\nmeat\nmechanic\nmedal\nmedia\nmelody\nmelt\nmember\nmemory\nmention\nmenu\nmercy\nmerge\nmerit\nmerry\nmesh\nmessage\nmetal\nmethod\nmiddle\nmidnight\nmilk\nmillion\nmimic\nmind\nminimum\nminor\nminute\nmiracle\nmirror\nmisery\nmiss\nmistake\nmix\nmixed\nmixture\nmobile\nmodel\nmodify\nmom\nmoment\nmonitor\nmonkey\nmonster\nmonth\nmoon\nmoral\nmore\nmorning\nmosquito\nmother\nmotion\nmotor\nmountain\nmouse\nmove\nmovie\nmuch\nmuffin\nmule\nmultiply\nmuscle\nmuseum\nmushroom\nmusic\nmust\nmutual\nmyself\nmystery\nmyth\nnaive\nname\nnapkin\nnarrow\nnasty\nnation\nnature\nnear\nneck\nneed\nnegative\nneglect\nneither\nnephew\nnerve\nnest\nnet\nnetwork\nneutral\nnever\nnews\nnext\nnice\nnight\nnoble\nnoise\nnominee\nnoodle\nnormal\nnorth\nnose\nnotable\nnote\nnothing\nnotice\nnovel\nnow\nnuclear\nnumber\nnurse\nnut\noak\nobey\nobject\noblige\nobscure\nobserve\nobtain\nobvious\noccur\nocean\noctober\nodor\noff\noffer\noffice\noften\noil\nokay\nold\nolive\nolympic\nomit\nonce\none\nonion\nonline\nonly\nopen\nopera\nopinion\noppose\noption\norange\norbit\norchard\norder\nordinary\norgan\norient\noriginal\norphan\nostrich\nother\noutdoor\nouter\noutput\noutside\noval\noven\nover\nown\nowner\noxygen\noyster\nozone\npact\npaddle\npage\npair\npalace\npalm\npanda\npanel\npanic\npanther\npaper\nparade\nparent\npark\nparrot\nparty\npass\npatch\npath\npatient\npatrol\npattern\npause\npave\npayment\npeace\npeanut\npear\npeasant\npelican\npen\npenalty\npencil\npeople\npepper\nperfect\npermit\nperson\npet\nphone\nphoto\nphrase\nphysical\npiano\npicnic\npicture\npiece\npig\npigeon\npill\npilot\npink\npioneer\npipe\npistol\npitch\npizza\nplace\nplanet\nplastic\nplate\nplay\nplease\npledge\npluck\nplug\nplunge\npoem\npoet\npoint\npolar\npole\npolice\npond\npony\npool\npopular\nportion\nposition\npossible\npost\npotato\npottery\npoverty\npowder\npower\npractice\npraise\npredict\nprefer\nprepare\npresent\npretty\nprevent\nprice\npride\nprimary\nprint\npriority\nprison\nprivate\nprize\nproblem\nprocess\nproduce\nprofit\nprogram\nproject\npromote\nproof\nproperty\nprosper\nprotect\nproud\nprovide\npublic\npudding\npull\npulp\npulse\npumpkin\npunch\npupil\npuppy\npurchase\npurity\npurpose\npurse\npush\nput\npuzzle\npyramid\nquality\nquantum\nquarter\nquestion\nquick\nquit\nquiz\nquote\nrabbit\nraccoon\nrace\nrack\nradar\nradio\nrail\nrain\nraise\nrally\nramp\nranch\nrandom\nrange\nrapid\nrare\nrate\nrather\nraven\nraw\nrazor\nready\nreal\nreason\nrebel\nrebuild\nrecall\nreceive\nrecipe\nrecord\nrecycle\nreduce\nreflect\nreform\nrefuse\nregion\nregret\nregular\nreject\nrelax\nrelease\nrelief\nrely\nremain\nremember\nremind\nremove\nrender\nrenew\nrent\nreopen\nrepair\nrepeat\nreplace\nreport\nrequire\nrescue\nresemble\nresist\nresource\nresponse\nresult\nretire\nretreat\nreturn\nreunion\nreveal\nreview\nreward\nrhythm\nrib\nribbon\nrice\nrich\nride\nridge\nrifle\nright\nrigid\nring\nriot\nripple\nrisk\nritual\nrival\nriver\nroad\nroast\nrobot\nrobust\nrocket\nromance\nroof\nrookie\nroom\nrose\nrotate\nrough\nround\nroute\nroyal\nrubber\nrude\nrug\nrule\nrun\nrunway\nrural\nsad\nsaddle\nsadness\nsafe\nsail\nsalad\nsalmon\nsalon\nsalt\nsalute\nsame\nsample\nsand\nsatisfy\nsatoshi\nsauce\nsausage\nsave\nsay\nscale\nscan\nscare\nscatter\nscene\nscheme\nschool\nscience\nscissors\nscorpion\nscout\nscrap\nscreen\nscript\nscrub\nsea\nsearch\nseason\nseat\nsecond\nsecret\nsection\nsecurity\nseed\nseek\nsegment\nselect\nsell\nseminar\nsenior\nsense\nsentence\nseries\nservice\nsession\nsettle\nsetup\nseven\nshadow\nshaft\nshallow\nshare\nshed\nshell\nsheriff\nshield\nshift\nshine\nship\nshiver\nshock\nshoe\nshoot\nshop\nshort\nshoulder\nshove\nshrimp\nshrug\nshuffle\nshy\nsibling\nsick\nside\nsiege\nsight\nsign\nsilent\nsilk\nsilly\nsilver\nsimilar\nsimple\nsince\nsing\nsiren\nsister\nsituate\nsix\nsize\nskate\nsketch\nski\nskill\nskin\nskirt\nskull\nslab\nslam\nsleep\nslender\nslice\nslide\nslight\nslim\nslogan\nslot\nslow\nslush\nsmall\nsmart\nsmile\nsmoke\nsmooth\nsnack\nsnake\nsnap\nsniff\nsnow\nsoap\nsoccer\nsocial\nsock\nsoda\nsoft\nsolar\nsoldier\nsolid\nsolution\nsolve\nsomeone\nsong\nsoon\nsorry\nsort\nsoul\nsound\nsoup\nsource\nsouth\nspace\nspare\nspatial\nspawn\nspeak\nspecial\nspeed\nspell\nspend\nsphere\nspice\nspider\nspike\nspin\nspirit\nsplit\nspoil\nsponsor\nspoon\nsport\nspot\nspray\nspread\nspring\nspy\nsquare\nsqueeze\nsquirrel\nstable\nstadium\nstaff\nstage\nstairs\nstamp\nstand\nstart\nstate\nstay\nsteak\nsteel\nstem\nstep\nstereo\nstick\nstill\nsting\nstock\nstomach\nstone\nstool\nstory\nstove\nstrategy\nstreet\nstrike\nstrong\nstruggle\nstudent\nstuff\nstumble\nstyle\nsubject\nsubmit\nsubway\nsuccess\nsuch\nsudden\nsuffer\nsugar\nsuggest\nsuit\nsummer\nsun\nsunny\nsunset\nsuper\nsupply\nsupreme\nsure\nsurface\nsurge\nsurprise\nsurround\nsurvey\nsuspect\nsustain\nswallow\nswamp\nswap\nswarm\nswear\nsweet\nswift\nswim\nswing\nswitch\nsword\nsymbol\nsymptom\nsyrup\nsystem\ntable\ntackle\ntag\ntail\ntalent\ntalk\ntank\ntape\ntarget\ntask\ntaste\ntattoo\ntaxi\nteach\nteam\ntell\nten\ntenant\ntennis\ntent\nterm\ntest\ntext\nthank\nthat\ntheme\nthen\ntheory\nthere\nthey\nthing\nthis\nthought\nthree\nthrive\nthrow\nthumb\nthunder\nticket\ntide\ntiger\ntilt\ntimber\ntime\ntiny\ntip\ntired\ntissue\ntitle\ntoast\ntobacco\ntoday\ntoddler\ntoe\ntogether\ntoilet\ntoken\ntomato\ntomorrow\ntone\ntongue\ntonight\ntool\ntooth\ntop\ntopic\ntopple\ntorch\ntornado\ntortoise\ntoss\ntotal\ntourist\ntoward\ntower\ntown\ntoy\ntrack\ntrade\ntraffic\ntragic\ntrain\ntransfer\ntrap\ntrash\ntravel\ntray\ntreat\ntree\ntrend\ntrial\ntribe\ntrick\ntrigger\ntrim\ntrip\ntrophy\ntrouble\ntruck\ntrue\ntruly\ntrumpet\ntrust\ntruth\ntry\ntube\ntuition\ntumble\ntuna\ntunnel\nturkey\nturn\nturtle\ntwelve\ntwenty\ntwice\ntwin\ntwist\ntwo\ntype\ntypical\nugly\numbrella\nunable\nunaware\nuncle\nuncover\nunder\nundo\nunfair\nunfold\nunhappy\nuniform\nunique\nunit\nuniverse\nunknown\nunlock\nuntil\nunusual\nunveil\nupdate\nupgrade\nuphold\nupon\nupper\nupset\nurban\nurge\nusage\nuse\nused\nuseful\nuseless\nusual\nutility\nvacant\nvacuum\nvague\nvalid\nvalley\nvalve\nvan\nvanish\nvapor\nvarious\nvast\nvault\nvehicle\nvelvet\nvendor\nventure\nvenue\nverb\nverify\nversion\nvery\nvessel\nveteran\nviable\nvibrant\nvicious\nvictory\nvideo\nview\nvillage\nvintage\nviolin\nvirtual\nvirus\nvisa\nvisit\nvisual\nvital\nvivid\nvocal\nvoice\nvoid\nvolcano\nvolume\nvote\nvoyage\nwage\nwagon\nwait\nwalk\nwall\nwalnut\nwant\nwarfare\nwarm\nwarrior\nwash\nwasp\nwaste\nwater\nwave\nway\nwealth\nweapon\nwear\nweasel\nweather\nweb\nwedding\nweekend\nweird\nwelcome\nwest\nwet\nwhale\nwhat\nwheat\nwheel\nwhen\nwhere\nwhip\nwhisper\nwide\nwidth\nwife\nwild\nwill\nwin\nwindow\nwine\nwing\nwink\nwinner\nwinter\nwire\nwisdom\nwise\nwish\nwitness\nwolf\nwoman\nwonder\nwood\nwool\nword\nwork\nworld\nworry\nworth\nwrap\nwreck\nwrestle\nwrist\nwrite\nwrong\nyard\nyear\nyellow\nyou\nyoung\nyouth\nzebra\nzero\nzone\nzoo`.split('\\n');\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { hmac } from \"@noble/hashes/hmac\";\nimport { sha512 } from \"@noble/hashes/sha2\";\nimport * as bip39 from \"@scure/bip39\";\nimport { wordlist } from \"@scure/bip39/wordlists/english.js\";\nimport { BASE_DERIVATION_PATH } from \"../constants\";\nimport { CryptoError, CryptoErrorCode } from \"./errors\";\nimport { Keypair } from \"./keypair\";\n\nexport type MnemonicStrength = 128 | 256;\n\ninterface HDKeyNode {\n\tprivateKey: Uint8Array;\n\tchainCode: Uint8Array;\n}\n\n/**\n * Represents a validated BIP39 mnemonic phrase with SLIP-0010 Ed25519 hierarchical key derivation.\n *\n * Implements the SLIP-0010 standard for Ed25519 key derivation, ensuring compatibility\n * with other implementations (e.g., Rust CDK). The default derivation path uses coin type\n * 756 (R=7, L=5, O=6 on telephone keypad).\n *\n * @example\n * ```typescript\n * // Generate new mnemonic (12 or 24 words)\n * const mnemonic = Mnemonic.generate(128); // 12 words\n *\n * // Restore from existing phrase\n * const restored = Mnemonic.fromPhrase(\"word1 word2 ...\");\n *\n * // Derive keypairs at specific account indices\n * const keypair0 = await mnemonic.toKeypair(0); // m/44'/756'/0'/0'\n * const keypair1 = await mnemonic.toKeypair(1); // m/44'/756'/1'/0'\n *\n * // With custom passphrase (BIP39 extension)\n * const secure = await mnemonic.toKeypair(0, {\n * passphrase: \"my-secret\"\n * });\n * ```\n *\n * @see {@link https://github.com/satoshilabs/slips/blob/master/slip-0010.md SLIP-0010 Specification}\n */\nexport class Mnemonic {\n\tprivate readonly phrase: string;\n\n\tprivate constructor(phrase: string) {\n\t\tif (!bip39.validateMnemonic(phrase, wordlist)) {\n\t\t\tthrow CryptoError.invalidMnemonic(\"Invalid BIP39 mnemonic phrase\");\n\t\t}\n\t\tthis.phrase = phrase;\n\t}\n\n\t/**\n\t * Generates a new random BIP39 mnemonic phrase.\n\t *\n\t * @param strength - Entropy strength (128 = 12 words, 256 = 24 words). Default: 128\n\t * @returns Validated Mnemonic instance\n\t */\n\tstatic generate(strength: MnemonicStrength = 128): Mnemonic {\n\t\tconst phrase = bip39.generateMnemonic(wordlist, strength);\n\t\treturn new Mnemonic(phrase);\n\t}\n\n\t/**\n\t * Creates a Mnemonic from an existing phrase.\n\t *\n\t * @param phrase - BIP39 mnemonic phrase (12 or 24 space-separated words)\n\t * @returns Validated Mnemonic instance\n\t * @throws {CryptoError} If phrase is invalid (wrong words or checksum)\n\t */\n\tstatic fromPhrase(phrase: string): Mnemonic {\n\t\treturn new Mnemonic(phrase);\n\t}\n\n\t/**\n\t * Validates a phrase without creating an instance.\n\t *\n\t * Checks both word validity and BIP39 checksum.\n\t *\n\t * @param phrase - Mnemonic phrase to validate\n\t * @returns true if phrase is valid\n\t */\n\tstatic isValid(phrase: string): boolean {\n\t\treturn bip39.validateMnemonic(phrase, wordlist);\n\t}\n\n\tprivate getMasterKeyFromSeed(seed: Uint8Array): HDKeyNode {\n\t\tconst seedKey = new TextEncoder().encode(\"ed25519 seed\");\n\t\tconst digest = hmac(sha512, seedKey, seed);\n\n\t\treturn {\n\t\t\tprivateKey: digest.slice(0, 32),\n\t\t\tchainCode: digest.slice(32, 64),\n\t\t};\n\t}\n\n\tprivate deriveChildKey(parentKey: HDKeyNode, index: number): HDKeyNode {\n\t\tconst hardenedIndex = index | 0x80000000;\n\t\tconst data = new Uint8Array(1 + 32 + 4);\n\t\tdata[0] = 0x00;\n\t\tdata.set(parentKey.privateKey, 1);\n\n\t\tconst view = new DataView(data.buffer);\n\t\tview.setUint32(33, hardenedIndex, false);\n\n\t\tconst digest = hmac(sha512, parentKey.chainCode, data);\n\n\t\treturn {\n\t\t\tprivateKey: digest.slice(0, 32),\n\t\t\tchainCode: digest.slice(32, 64),\n\t\t};\n\t}\n\n\tprivate derivePath(path: string, seed: Uint8Array): HDKeyNode {\n\t\tif (!path.startsWith(\"m/\")) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.KEY_DERIVATION_FAILED,\n\t\t\t\t\"Derivation path must start with 'm/'\",\n\t\t\t);\n\t\t}\n\n\t\tlet node = this.getMasterKeyFromSeed(seed);\n\t\tconst segments = path.slice(2).split(\"/\");\n\n\t\tfor (const segment of segments) {\n\t\t\tif (!segment) continue;\n\n\t\t\tconst index = segment.endsWith(\"'\")\n\t\t\t\t? Number.parseInt(segment.slice(0, -1), 10)\n\t\t\t\t: Number.parseInt(segment, 10);\n\n\t\t\tif (Number.isNaN(index) || index < 0) {\n\t\t\t\tthrow new CryptoError(\n\t\t\t\t\tCryptoErrorCode.KEY_DERIVATION_FAILED,\n\t\t\t\t\t`Invalid path segment: ${segment}`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tnode = this.deriveChildKey(node, index);\n\t\t}\n\n\t\treturn node;\n\t}\n\n\t/**\n\t * Derives a keypair at a specific account index.\n\t *\n\t * Uses SLIP-0010 Ed25519 derivation with the default path:\n\t * `m/44'/756'/{accountIndex}'/0'`\n\t *\n\t * Coin type 756 follows the telephone keypad convention (R=7, L=5, O=6).\n\t *\n\t * @param accountIndex - Account index to derive (default: 0)\n\t * @param options - Derivation options\n\t * @param options.passphrase - Optional BIP39 passphrase for additional security\n\t * @param options.baseDerivationPath - Base path (default: \"m/44'/756'\")\n\t * @returns Keypair for the derived account\n\t */\n\tasync toKeypair(\n\t\taccountIndex = 0,\n\t\toptions?: {\n\t\t\tpassphrase?: string;\n\t\t\tbaseDerivationPath?: string;\n\t\t},\n\t): Promise<Keypair> {\n\t\tif (accountIndex < 0 || !Number.isInteger(accountIndex)) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.KEY_DERIVATION_FAILED,\n\t\t\t\t\"Account index must be a non-negative integer\",\n\t\t\t\t{ accountIndex },\n\t\t\t);\n\t\t}\n\n\t\tconst { passphrase = \"\", baseDerivationPath = BASE_DERIVATION_PATH } =\n\t\t\toptions ?? {};\n\n\t\ttry {\n\t\t\tconst fullPath = this.buildFullPath(baseDerivationPath, accountIndex);\n\t\t\tconst seed = await bip39.mnemonicToSeed(this.phrase, passphrase);\n\t\t\tconst derivedNode = this.derivePath(fullPath, seed);\n\n\t\t\treturn Keypair.fromSecretKey(derivedNode.privateKey);\n\t\t} catch (error) {\n\t\t\tif (error instanceof CryptoError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow CryptoError.keyDerivationFailed(\n\t\t\t\tbaseDerivationPath,\n\t\t\t\terror instanceof Error ? error : undefined,\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Derives a keypair using an explicit full derivation path.\n\t *\n\t * @param fullPath - Complete derivation path (e.g., \"m/44'/756'/0'/0'\")\n\t * @param passphrase - Optional BIP39 passphrase\n\t */\n\tasync toKeypairWithPath(fullPath: string, passphrase = \"\"): Promise<Keypair> {\n\t\ttry {\n\t\t\tconst seed = await bip39.mnemonicToSeed(this.phrase, passphrase);\n\t\t\tconst derivedNode = this.derivePath(fullPath, seed);\n\t\t\treturn Keypair.fromSecretKey(derivedNode.privateKey);\n\t\t} catch (error) {\n\t\t\tif (error instanceof CryptoError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow CryptoError.keyDerivationFailed(\n\t\t\t\tfullPath,\n\t\t\t\terror instanceof Error ? error : undefined,\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Derives multiple keypairs sequentially from this mnemonic.\n\t *\n\t * @param count - Number of keypairs to derive\n\t * @param startIndex - Starting account index (default: 0)\n\t * @param options - Derivation options (passphrase and path)\n\t */\n\tasync deriveKeypairs(\n\t\tcount: number,\n\t\tstartIndex = 0,\n\t\toptions?: {\n\t\t\tpassphrase?: string;\n\t\t\tbaseDerivationPath?: string;\n\t\t},\n\t): Promise<Keypair[]> {\n\t\tif (count <= 0 || !Number.isInteger(count)) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.KEY_DERIVATION_FAILED,\n\t\t\t\t\"Count must be a positive integer\",\n\t\t\t\t{ count },\n\t\t\t);\n\t\t}\n\n\t\tconst keypairs: Keypair[] = [];\n\t\tfor (let i = 0; i < count; i++) {\n\t\t\tconst keypair = await this.toKeypair(startIndex + i, options);\n\t\t\tkeypairs.push(keypair);\n\t\t}\n\n\t\treturn keypairs;\n\t}\n\n\t/**\n\t * Converts the mnemonic to a BIP39 seed.\n\t *\n\t * @param passphrase - Optional BIP39 passphrase for additional security\n\t * @returns 64-byte seed\n\t */\n\tasync toSeed(passphrase = \"\"): Promise<Uint8Array> {\n\t\treturn bip39.mnemonicToSeed(this.phrase, passphrase);\n\t}\n\n\t/**\n\t * Returns the mnemonic phrase as a string.\n\t */\n\ttoString(): string {\n\t\treturn this.phrase;\n\t}\n\n\t/**\n\t * Returns the individual words of the mnemonic.\n\t */\n\tgetWords(): string[] {\n\t\treturn this.phrase.split(\" \");\n\t}\n\n\t/**\n\t * Returns the word count (12 or 24).\n\t */\n\tgetWordCount(): 12 | 24 {\n\t\tconst count = this.getWords().length;\n\t\treturn count === 24 ? 24 : 12;\n\t}\n\n\t/**\n\t * Returns the entropy strength (128 or 256 bits).\n\t */\n\tgetStrength(): MnemonicStrength {\n\t\treturn this.getWordCount() === 12 ? 128 : 256;\n\t}\n\n\t/**\n\t * Checks equality with another mnemonic using constant-time comparison.\n\t */\n\tequals(other: Mnemonic): boolean {\n\t\tif (this.phrase.length !== other.phrase.length) return false;\n\t\tlet result = 0;\n\t\tfor (let i = 0; i < this.phrase.length; i++) {\n\t\t\tresult |= this.phrase.charCodeAt(i) ^ other.phrase.charCodeAt(i);\n\t\t}\n\t\treturn result === 0;\n\t}\n\n\t/**\n\t * JSON serialization (returns the mnemonic phrase).\n\t */\n\ttoJSON(): string {\n\t\treturn this.phrase;\n\t}\n\n\tprivate buildFullPath(\n\t\tbaseDerivationPath: string,\n\t\taccountIndex: number,\n\t): string {\n\t\tconst cleanBasePath = baseDerivationPath.replace(/\\/$/, \"\");\n\n\t\tif (!cleanBasePath.startsWith(\"m/\")) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.KEY_DERIVATION_FAILED,\n\t\t\t\t\"Derivation path must start with 'm/'\",\n\t\t\t);\n\t\t}\n\n\t\treturn `${cleanBasePath}/${accountIndex}'/0'`;\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Error handling for the Rialo CDK.\n *\n * This module defines the common error types used throughout the Rialo CDK.\n * It provides a centralized error handling mechanism for all operations.\n */\n\n/**\n * Structured RPC error information parsed from JSON-RPC error responses.\n */\nexport interface RpcErrorDetails {\n\t/** HTTP status code (e.g., 200, 422, 500) */\n\tstatus?: number;\n\t/** JSON-RPC error code (e.g., -32002) */\n\tcode: number;\n\t/** Human-readable error message */\n\tmessage: string;\n}\n\n/**\n * Error types for different subsystems in the Rialo CDK.\n */\nexport enum RialoErrorType {\n\t/** Errors related to file or system I/O operations */\n\tIO = \"IO\",\n\t/** Errors occurring during RPC communication with blockchain nodes */\n\tRPC = \"RPC\",\n\t/** Errors related to public key parsing or validation */\n\tPARSE_PUBKEY = \"PARSE_PUBKEY\",\n\t/** Errors related to blockhash parsing or validation */\n\tINVALID_BLOCKHASH_FORMAT = \"INVALID_BLOCKHASH_FORMAT\",\n\t/** Errors related to wallet operations such as creation, loading, or signing */\n\tWALLET = \"WALLET\",\n\t/** Errors related to configuration loading, parsing, or validation */\n\tCONFIG = \"CONFIG\",\n\t/** Errors occurring during transaction building, signing, or submission */\n\tTRANSACTION = \"TRANSACTION\",\n\t/** Network-related errors, including HTTP client errors */\n\tNETWORK = \"NETWORK\",\n\t/** Errors related to password handling, validation, or verification */\n\tPASSWORD = \"PASSWORD\",\n\t/** Errors related to encryption or decryption operations */\n\tENCRYPTION = \"ENCRYPTION\",\n\t/** Errors occurring during JSON parsing, serialization, or deserialization */\n\tJSON = \"JSON\",\n\t/** Errors related to BIP32 key derivation */\n\tBIP32 = \"BIP32\",\n\t/** Errors related to invalid input parameters or data */\n\tINVALID_INPUT = \"INVALID_INPUT\",\n\t/** Errors related to serialization/deserialization */\n\tSERIALIZATION = \"SERIALIZATION\",\n}\n\n/**\n * Base error class for all Rialo CDK errors.\n *\n * Provides structured error handling with type categorization and optional\n * cause tracking for error chains. Use the static factory methods for\n * consistent error creation across the SDK.\n *\n * @example\n * ```typescript\n * // Create typed errors using factory methods\n * throw RialoError.invalidInput(\"Amount must be positive\");\n * throw RialoError.network(\"Connection failed\", originalError);\n * throw RialoError.rpc({ code: -32002, message: \"Invalid params\" });\n *\n * // Handle errors with type information\n * try {\n * await client.sendTransaction(tx);\n * } catch (error) {\n * if (error instanceof RialoError && error.type === RialoErrorType.NETWORK) {\n * console.log(\"Network error, retrying...\");\n * }\n * }\n * ```\n */\nexport class RialoError extends Error {\n\tpublic readonly type: RialoErrorType;\n\tpublic readonly cause?: Error;\n\tpublic readonly details?: RpcErrorDetails;\n\n\tpublic constructor(\n\t\ttype: RialoErrorType,\n\t\tmessage: string,\n\t\tcause?: Error,\n\t\tdetails?: RpcErrorDetails,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"RialoError\";\n\t\tthis.type = type;\n\t\tthis.cause = cause;\n\t\tthis.details = details;\n\n\t\t// Maintains proper stack trace for where our error was thrown (only available on V8)\n\t\tif (Error.captureStackTrace) {\n\t\t\tError.captureStackTrace(this, RialoError);\n\t\t}\n\t}\n\n\t/**\n\t * Creates an IO error.\n\t */\n\tpublic static io(message: string, cause?: Error): RialoError {\n\t\treturn new RialoError(RialoErrorType.IO, `I/O error: ${message}`, cause);\n\t}\n\n\t/**\n\t * Creates an RPC error.\n\t */\n\tpublic static rpc(details: RpcErrorDetails): RialoError {\n\t\tlet message: string = details.message;\n\t\tif (details.status !== undefined) {\n\t\t\tmessage = `${details.message} [HTTP ${details.status} code ${details.code}]`;\n\t\t} else if (details.code !== 0) {\n\t\t\tmessage = `${details.message} (code ${details.code})`;\n\t\t}\n\t\treturn new RialoError(\n\t\t\tRialoErrorType.RPC,\n\t\t\t`RPC error: ${message}`,\n\t\t\tundefined,\n\t\t\tdetails,\n\t\t);\n\t}\n\n\t/**\n\t * Creates a public key parsing error.\n\t */\n\tpublic static parsePubkey(message: string): RialoError {\n\t\treturn new RialoError(\n\t\t\tRialoErrorType.PARSE_PUBKEY,\n\t\t\t`Pubkey error: ${message}`,\n\t\t);\n\t}\n\n\t/**\n\t * Creates a blockhash format error.\n\t */\n\tpublic static invalidBlockhash(message: string): RialoError {\n\t\treturn new RialoError(\n\t\t\tRialoErrorType.INVALID_BLOCKHASH_FORMAT,\n\t\t\t`Invalid blockhash format: ${message}`,\n\t\t);\n\t}\n\n\t/**\n\t * Creates a wallet error.\n\t */\n\tpublic static wallet(message: string): RialoError {\n\t\treturn new RialoError(RialoErrorType.WALLET, `Wallet error: ${message}`);\n\t}\n\n\t/**\n\t * Creates a configuration error.\n\t */\n\tpublic static config(message: string): RialoError {\n\t\treturn new RialoError(RialoErrorType.CONFIG, `Config error: ${message}`);\n\t}\n\n\t/**\n\t * Creates a transaction error.\n\t */\n\tpublic static transaction(message: string): RialoError {\n\t\treturn new RialoError(\n\t\t\tRialoErrorType.TRANSACTION,\n\t\t\t`Transaction error: ${message}`,\n\t\t);\n\t}\n\n\t/**\n\t * Creates a network error.\n\t */\n\tpublic static network(message: string, cause?: Error): RialoError {\n\t\treturn new RialoError(\n\t\t\tRialoErrorType.NETWORK,\n\t\t\t`Network error: ${message}`,\n\t\t\tcause,\n\t\t);\n\t}\n\n\t/**\n\t * Creates a password error.\n\t */\n\tpublic static password(message: string): RialoError {\n\t\treturn new RialoError(\n\t\t\tRialoErrorType.PASSWORD,\n\t\t\t`Password error: ${message}`,\n\t\t);\n\t}\n\n\t/**\n\t * Creates an encryption error.\n\t */\n\tpublic static encryption(message: string): RialoError {\n\t\treturn new RialoError(\n\t\t\tRialoErrorType.ENCRYPTION,\n\t\t\t`Encryption error: ${message}`,\n\t\t);\n\t}\n\n\t/**\n\t * Creates a JSON error.\n\t */\n\tpublic static json(message: string, cause?: Error): RialoError {\n\t\treturn new RialoError(RialoErrorType.JSON, `JSON error: ${message}`, cause);\n\t}\n\n\t/**\n\t * Creates a BIP32 error.\n\t */\n\tpublic static bip32(message: string): RialoError {\n\t\treturn new RialoError(RialoErrorType.BIP32, `BIP32 error: ${message}`);\n\t}\n\n\t/**\n\t * Creates an invalid input error.\n\t */\n\tpublic static invalidInput(message: string): RialoError {\n\t\treturn new RialoError(\n\t\t\tRialoErrorType.INVALID_INPUT,\n\t\t\t`Invalid input: ${message}`,\n\t\t);\n\t}\n\n\t/**\n\t * Creates a serialization error.\n\t */\n\tpublic static serialization(message: string): RialoError {\n\t\treturn new RialoError(\n\t\t\tRialoErrorType.SERIALIZATION,\n\t\t\t`Serialization error: ${message}`,\n\t\t);\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nexport enum EncryptionErrorCode {\n\t/** Input validation failed (empty secret, oversized secret, invalid key length) */\n\tINVALID_INPUT = \"INVALID_INPUT\",\n\t/** Threshold public key is not a valid compressed Ristretto255 point */\n\tINVALID_THRESHOLD_KEY = \"INVALID_THRESHOLD_KEY\",\n\t/** DKG encryption operation failed */\n\tENCRYPTION_FAILED = \"ENCRYPTION_FAILED\",\n\t/** Failed to deserialize Borsh data */\n\tBORSH_DESERIALIZE_FAILED = \"BORSH_DESERIALIZE_FAILED\",\n\t/** RexValue has invalid variant byte */\n\tINVALID_REX_VALUE = \"INVALID_REX_VALUE\",\n}\n\nexport class EncryptionError extends Error {\n\treadonly code: EncryptionErrorCode;\n\treadonly cause?: Error;\n\n\tconstructor(code: EncryptionErrorCode, message: string, cause?: Error) {\n\t\tsuper(message);\n\t\tthis.name = \"EncryptionError\";\n\t\tthis.code = code;\n\t\tthis.cause = cause;\n\n\t\tif (Error.captureStackTrace) {\n\t\t\tError.captureStackTrace(this, EncryptionError);\n\t\t}\n\t}\n\n\tstatic invalidInput(message: string): EncryptionError {\n\t\treturn new EncryptionError(EncryptionErrorCode.INVALID_INPUT, message);\n\t}\n\n\tstatic invalidThresholdKey(cause: Error): EncryptionError {\n\t\treturn new EncryptionError(\n\t\t\tEncryptionErrorCode.INVALID_THRESHOLD_KEY,\n\t\t\t`Invalid threshold public key: ${cause.message}`,\n\t\t\tcause,\n\t\t);\n\t}\n\n\tstatic encryptionFailed(cause: Error): EncryptionError {\n\t\treturn new EncryptionError(\n\t\t\tEncryptionErrorCode.ENCRYPTION_FAILED,\n\t\t\t`DKG encryption failed: ${cause.message}`,\n\t\t\tcause,\n\t\t);\n\t}\n\n\tstatic borshDeserializeFailed(cause: Error): EncryptionError {\n\t\treturn new EncryptionError(\n\t\t\tEncryptionErrorCode.BORSH_DESERIALIZE_FAILED,\n\t\t\t`Borsh deserialization failed: ${cause.message}`,\n\t\t\tcause,\n\t\t);\n\t}\n\n\tstatic invalidRexValue(variant: number): EncryptionError {\n\t\treturn new EncryptionError(\n\t\t\tEncryptionErrorCode.INVALID_REX_VALUE,\n\t\t\t`Invalid RexValue variant: ${variant}`,\n\t\t);\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Constants for DKG threshold encryption.\n *\n * These constants MUST match the Rust implementation exactly:\n * - `crates/tee/secret-sharing/src/types.rs`\n * - `developer-frameworks/cdk/rialo-rs-cdk/src/secret_encryption.rs`\n *\n * @module\n */\n\n/**\n * Version byte prepended to every DKG threshold-encrypted payload stored in\n * `RexValue::Encrypted`. Format: `[DKG_PAYLOAD_VERSION] || borsh(DkgEncryptedPayload)`.\n *\n * Must match Rust: `pub const DKG_PAYLOAD_VERSION: u8 = 0x02`\n */\nexport const DKG_PAYLOAD_VERSION = 0x02;\n\n/**\n * Maximum plaintext length accepted by `encryptSecretBytes` (64 KB).\n *\n * Must match Rust: `pub const MAX_SECRET_LENGTH: usize = 64 * 1024`\n */\nexport const MAX_SECRET_LENGTH = 64 * 1024;\n\n/**\n * Length of a compressed Ristretto255 point in bytes.\n *\n * Used for the DKG threshold public key and the ElGamal header point U.\n */\nexport const RISTRETTO_POINT_BYTES = 32;\n\n/**\n * Length of an Ed25519 public key in bytes.\n *\n * Used for the creator public key bound into the AAD.\n */\nexport const ED25519_PUBLIC_KEY_LENGTH = 32;\n\n/**\n * Length of the ChaCha20-Poly1305 nonce in bytes.\n */\nexport const CHACHA20_POLY1305_NONCE_LENGTH = 12;\n\n/**\n * Length of the ChaCha20-Poly1305 authentication tag in bytes.\n */\nexport const CHACHA20_POLY1305_TAG_LENGTH = 16;\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { EncryptionError } from \"./errors.js\";\n\n/**\n * Variant discriminator for RexValue Borsh serialization.\n */\nexport enum RexValueVariant {\n\t/** Plain (unencrypted) data variant */\n\tPlain = 0,\n\t/** Encrypted data variant */\n\tEncrypted = 1,\n}\n\n/**\n * Represents an rex value that can be plain or encrypted.\n *\n * This class provides Borsh-compatible serialization that matches\n * the Rust `RexValue` enum:\n *\n * ```rust\n * pub enum RexValue {\n * Plain(Vec<u8>),\n * Encrypted(Vec<u8>),\n * }\n * ```\n *\n * ## Borsh Format\n *\n * - Plain: `[0x00] [length: u32 LE] [data bytes]`\n * - Encrypted: `[0x01] [length: u32 LE] [ciphertext bytes]`\n *\n * @example\n * ```typescript\n * // Plain value (unencrypted)\n * const plain = RexValue.plain(new TextEncoder().encode(\"hello\"));\n *\n * // Encrypted value (via DKG threshold encryption)\n * const encrypted = RexValue.encrypted(ciphertextBytes);\n *\n * // Serialize to Borsh\n * const borsh = plain.toBorsh();\n *\n * // Deserialize from Borsh\n * const restored = RexValue.fromBorsh(borsh);\n * ```\n */\nexport class RexValue {\n\tprivate readonly variant: RexValueVariant;\n\tprivate readonly data: Uint8Array;\n\n\tprivate constructor(variant: RexValueVariant, data: Uint8Array) {\n\t\tthis.variant = variant;\n\t\tthis.data = data;\n\t}\n\n\t/**\n\t * Create a plain (unencrypted) RexValue from raw bytes.\n\t *\n\t * @param data - The raw byte data\n\t * @returns A new RexValue with Plain variant\n\t */\n\tstatic plain(data: Uint8Array): RexValue {\n\t\treturn new RexValue(RexValueVariant.Plain, data);\n\t}\n\n\t/**\n\t * Create a plain (unencrypted) RexValue from a UTF-8 string.\n\t *\n\t * @param s - The string to encode\n\t * @returns A new RexValue with Plain variant\n\t */\n\tstatic plainString(s: string): RexValue {\n\t\treturn new RexValue(\n\t\t\tRexValueVariant.Plain,\n\t\t\tnew TextEncoder().encode(s),\n\t\t);\n\t}\n\n\t/**\n\t * Create an encrypted RexValue from a DKG threshold-encrypted payload.\n\t *\n\t * @param ciphertext - The DKG-encrypted payload bytes (`[0x02] || borsh(DkgEncryptedPayload)`)\n\t * @returns A new RexValue with Encrypted variant\n\t */\n\tstatic encrypted(ciphertext: Uint8Array): RexValue {\n\t\treturn new RexValue(RexValueVariant.Encrypted, ciphertext);\n\t}\n\n\t/**\n\t * Check if this is a plain (unencrypted) value.\n\t */\n\tisPlain(): boolean {\n\t\treturn this.variant === RexValueVariant.Plain;\n\t}\n\n\t/**\n\t * Check if this is an encrypted value.\n\t */\n\tisEncrypted(): boolean {\n\t\treturn this.variant === RexValueVariant.Encrypted;\n\t}\n\n\t/**\n\t * Get the variant type.\n\t */\n\tgetVariant(): RexValueVariant {\n\t\treturn this.variant;\n\t}\n\n\t/**\n\t * Get the raw bytes (plaintext or ciphertext).\n\t *\n\t * For Plain values, returns the plaintext.\n\t * For Encrypted values, returns the ciphertext.\n\t */\n\tasBytes(): Uint8Array {\n\t\treturn this.data;\n\t}\n\n\t/**\n\t * Try to decode the plain value as a UTF-8 string.\n\t *\n\t * @returns The decoded string, or null if encrypted or not valid UTF-8\n\t */\n\tasString(): string | null {\n\t\tif (!this.isPlain()) {\n\t\t\treturn null;\n\t\t}\n\t\ttry {\n\t\t\treturn new TextDecoder(\"utf-8\", { fatal: true }).decode(this.data);\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t/**\n\t * Serialize to Borsh format.\n\t *\n\t * Format: `[variant: u8] [length: u32 LE] [data bytes]`\n\t *\n\t * @returns The Borsh-serialized bytes\n\t */\n\ttoBorsh(): Uint8Array {\n\t\t// 1 byte variant + 4 bytes length + data\n\t\tconst result = new Uint8Array(1 + 4 + this.data.length);\n\n\t\t// Write variant (1 byte)\n\t\tresult[0] = this.variant;\n\n\t\t// Write length as u32 LE (4 bytes)\n\t\tconst dataView = new DataView(result.buffer);\n\t\tdataView.setUint32(1, this.data.length, true);\n\n\t\t// Write data\n\t\tresult.set(this.data, 5);\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Deserialize from Borsh format.\n\t *\n\t * @param data - The Borsh-serialized bytes\n\t * @returns A new RexValue\n\t * @throws {EncryptionError} If deserialization fails\n\t */\n\tstatic fromBorsh(data: Uint8Array): RexValue {\n\t\tif (data.length < 5) {\n\t\t\tthrow EncryptionError.borshDeserializeFailed(\n\t\t\t\tnew Error(`Buffer too short: expected at least 5 bytes, got ${data.length}`),\n\t\t\t);\n\t\t}\n\n\t\tconst variant = data[0];\n\t\tif (variant !== RexValueVariant.Plain && variant !== RexValueVariant.Encrypted) {\n\t\t\tthrow EncryptionError.invalidRexValue(variant);\n\t\t}\n\n\t\tconst dataView = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\t\tconst length = dataView.getUint32(1, true);\n\n\t\tif (data.length < 5 + length) {\n\t\t\tthrow EncryptionError.borshDeserializeFailed(\n\t\t\t\tnew Error(`Buffer too short: expected ${5 + length} bytes, got ${data.length}`),\n\t\t\t);\n\t\t}\n\n\t\tconst payload = data.slice(5, 5 + length);\n\n\t\treturn new RexValue(variant as RexValueVariant, payload);\n\t}\n}\n","/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */\nexport function isBytes(a: unknown): a is Uint8Array {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n\n/** Asserts something is positive integer. */\nexport function anumber(n: number, title: string = ''): void {\n if (!Number.isSafeInteger(n) || n < 0) {\n const prefix = title && `\"${title}\" `;\n throw new Error(`${prefix}expected integer >= 0, got ${n}`);\n }\n}\n\n/** Asserts something is Uint8Array. */\nexport function abytes(value: Uint8Array, length?: number, title: string = ''): Uint8Array {\n const bytes = isBytes(value);\n const len = value?.length;\n const needsLen = length !== undefined;\n if (!bytes || (needsLen && len !== length)) {\n const prefix = title && `\"${title}\" `;\n const ofLen = needsLen ? ` of length ${length}` : '';\n const got = bytes ? `length=${len}` : `type=${typeof value}`;\n throw new Error(prefix + 'expected Uint8Array' + ofLen + ', got ' + got);\n }\n return value;\n}\n\n/** Asserts something is hash */\nexport function ahash(h: CHash): void {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new Error('Hash must wrapped by utils.createHasher');\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\n\n/** Asserts a hash instance has not been destroyed / finished */\nexport function aexists(instance: any, checkFinished = true): void {\n if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\n\n/** Asserts output is properly-sized byte array */\nexport function aoutput(out: any, instance: any): void {\n abytes(out, undefined, 'digestInto() output');\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('\"digestInto() output\" expected to be of length >=' + min);\n }\n}\n\n/** Generic type encompassing 8/16/32-byte arrays - but not 64-byte. */\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n Uint16Array | Int16Array | Uint32Array | Int32Array;\n\n/** Cast u8 / u16 / u32 to u8. */\nexport function u8(arr: TypedArray): Uint8Array {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** Cast u8 / u16 / u32 to u32. */\nexport function u32(arr: TypedArray): Uint32Array {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n\n/** Zeroize a byte array. Warning: JS provides no guarantees. */\nexport function clean(...arrays: TypedArray[]): void {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\n\n/** Create DataView of an array for easy byte-level manipulation. */\nexport function createView(arr: TypedArray): DataView {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** The rotate right (circular right shift) operation for uint32 */\nexport function rotr(word: number, shift: number): number {\n return (word << (32 - shift)) | (word >>> shift);\n}\n\n/** The rotate left (circular left shift) operation for uint32 */\nexport function rotl(word: number, shift: number): number {\n return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nexport const isLE: boolean = /* @__PURE__ */ (() =>\n new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n\n/** The byte swap operation for uint32 */\nexport function byteSwap(word: number): number {\n return (\n ((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff)\n );\n}\n/** Conditionally byte swap if on a big-endian platform */\nexport const swap8IfBE: (n: number) => number = isLE\n ? (n: number) => n\n : (n: number) => byteSwap(n);\n\n/** In place byte swap for Uint32Array */\nexport function byteSwap32(arr: Uint32Array): Uint32Array {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\n\nexport const swap32IfBE: (u: Uint32Array) => Uint32Array = isLE\n ? (u: Uint32Array) => u\n : byteSwap32;\n\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin: boolean = /* @__PURE__ */ (() =>\n // @ts-ignore\n typeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n i.toString(16).padStart(2, '0')\n);\n\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin) return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 } as const;\nfunction asciiToBase16(ch: number): number | undefined {\n if (ch >= asciis._0 && ch <= asciis._9) return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F) return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f) return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n // @ts-ignore\n if (hasHexBuiltin) return Uint8Array.fromHex(hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2) throw new Error('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * Call of async fn will return Promise, which will be fullfiled only on\n * next scheduler queue processing step and this is exactly what we need.\n */\nexport const nextTick = async (): Promise<void> => {};\n\n/** Returns control to thread each 'tick' ms to avoid blocking. */\nexport async function asyncLoop(\n iters: number,\n tick: number,\n cb: (i: number) => void\n): Promise<void> {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick) continue;\n await nextTick();\n ts += diff;\n }\n}\n\n// Global symbols, but ts doesn't see them: https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * Converts string to bytes using UTF8 encoding.\n * Built-in doesn't validate input to be string: we do the check.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n if (typeof str !== 'string') throw new Error('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\n/** KDFs can accept string or Uint8Array for user convenience. */\nexport type KDFInput = string | Uint8Array;\n\n/**\n * Helper for KDFs: consumes uint8array or string.\n * When string is passed, does utf8 decoding, using TextDecoder.\n */\nexport function kdfInputToBytes(data: KDFInput, errorTitle = ''): Uint8Array {\n if (typeof data === 'string') return utf8ToBytes(data);\n return abytes(data, undefined, errorTitle);\n}\n\n/** Copies several Uint8Arrays into one. */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\n\ntype EmptyObj = {};\n/** Merges default options and passed options. */\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n defaults: T1,\n opts?: T2\n): T1 & T2 {\n if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n throw new Error('options must be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged as T1 & T2;\n}\n\n/** Common interface for all hashes. */\nexport interface Hash<T> {\n blockLen: number; // Bytes per block\n outputLen: number; // Bytes in output\n update(buf: Uint8Array): this;\n digestInto(buf: Uint8Array): void;\n digest(): Uint8Array;\n destroy(): void;\n _cloneInto(to?: T): T;\n clone(): T;\n}\n\n/** PseudoRandom (number) Generator */\nexport interface PRG {\n addEntropy(seed: Uint8Array): void;\n randomBytes(length: number): Uint8Array;\n clean(): void;\n}\n\n/**\n * XOF: streaming API to read digest in chunks.\n * Same as 'squeeze' in keccak/k12 and 'seek' in blake3, but more generic name.\n * When hash used in XOF mode it is up to user to call '.destroy' afterwards, since we cannot\n * destroy state, next call can require more bytes.\n */\nexport type HashXOF<T extends Hash<T>> = Hash<T> & {\n xof(bytes: number): Uint8Array; // Read 'bytes' bytes from digest stream\n xofInto(buf: Uint8Array): Uint8Array; // read buf.length bytes from digest stream into buf\n};\n\n/** Hash constructor */\nexport type HasherCons<T, Opts = undefined> = Opts extends undefined ? () => T : (opts?: Opts) => T;\n/** Optional hash params. */\nexport type HashInfo = {\n oid?: Uint8Array; // DER encoded OID in bytes\n};\n/** Hash function */\nexport type CHash<T extends Hash<T> = Hash<any>, Opts = undefined> = {\n outputLen: number;\n blockLen: number;\n} & HashInfo &\n (Opts extends undefined\n ? {\n (msg: Uint8Array): Uint8Array;\n create(): T;\n }\n : {\n (msg: Uint8Array, opts?: Opts): Uint8Array;\n create(opts?: Opts): T;\n });\n/** XOF with output */\nexport type CHashXOF<T extends HashXOF<T> = HashXOF<any>, Opts = undefined> = CHash<T, Opts>;\n\n/** Creates function with outputLen, blockLen, create properties from a class constructor. */\nexport function createHasher<T extends Hash<T>, Opts = undefined>(\n hashCons: HasherCons<T, Opts>,\n info: HashInfo = {}\n): CHash<T, Opts> {\n const hashC: any = (msg: Uint8Array, opts?: Opts) => hashCons(opts).update(msg).digest();\n const tmp = hashCons(undefined);\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts?: Opts) => hashCons(opts);\n Object.assign(hashC, info);\n return Object.freeze(hashC);\n}\n\n/** Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`. */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n const cr = typeof globalThis === 'object' ? (globalThis as any).crypto : null;\n if (typeof cr?.getRandomValues !== 'function')\n throw new Error('crypto.getRandomValues must be defined');\n return cr.getRandomValues(new Uint8Array(bytesLength));\n}\n\n/** Creates OID opts for NIST hashes, with prefix 06 09 60 86 48 01 65 03 04 02. */\nexport const oidNist = (suffix: number): Required<HashInfo> => ({\n oid: Uint8Array.from([0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, suffix]),\n});\n","/**\n * Hex, bytes and number utilities.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport {\n abytes as abytes_,\n anumber,\n bytesToHex as bytesToHex_,\n concatBytes as concatBytes_,\n hexToBytes as hexToBytes_,\n} from '@noble/hashes/utils.js';\nexport {\n abytes,\n anumber,\n bytesToHex,\n concatBytes,\n hexToBytes,\n isBytes,\n randomBytes,\n} from '@noble/hashes/utils.js';\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\n\nexport type CHash = {\n (message: Uint8Array): Uint8Array;\n blockLen: number;\n outputLen: number;\n create(opts?: { dkLen?: number }): any; // For shake\n};\nexport type FHash = (message: Uint8Array) => Uint8Array;\nexport function abool(value: boolean, title: string = ''): boolean {\n if (typeof value !== 'boolean') {\n const prefix = title && `\"${title}\" `;\n throw new Error(prefix + 'expected boolean, got type=' + typeof value);\n }\n return value;\n}\n\n// Used in weierstrass, der\nfunction abignumber(n: number | bigint) {\n if (typeof n === 'bigint') {\n if (!isPosBig(n)) throw new Error('positive bigint expected, got ' + n);\n } else anumber(n);\n return n;\n}\n\nexport function asafenumber(value: number, title: string = ''): void {\n if (!Number.isSafeInteger(value)) {\n const prefix = title && `\"${title}\" `;\n throw new Error(prefix + 'expected safe integer, got type=' + typeof value);\n }\n}\n\nexport function numberToHexUnpadded(num: number | bigint): string {\n const hex = abignumber(num).toString(16);\n return hex.length & 1 ? '0' + hex : hex;\n}\n\nexport function hexToNumber(hex: string): bigint {\n if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n return hex === '' ? _0n : BigInt('0x' + hex); // Big Endian\n}\n\n// BE: Big Endian, LE: Little Endian\nexport function bytesToNumberBE(bytes: Uint8Array): bigint {\n return hexToNumber(bytesToHex_(bytes));\n}\nexport function bytesToNumberLE(bytes: Uint8Array): bigint {\n return hexToNumber(bytesToHex_(copyBytes(abytes_(bytes)).reverse()));\n}\n\nexport function numberToBytesBE(n: number | bigint, len: number): Uint8Array {\n anumber(len);\n n = abignumber(n);\n const res = hexToBytes_(n.toString(16).padStart(len * 2, '0'));\n if (res.length !== len) throw new Error('number too large');\n return res;\n}\nexport function numberToBytesLE(n: number | bigint, len: number): Uint8Array {\n return numberToBytesBE(n, len).reverse();\n}\n// Unpadded, rarely used\nexport function numberToVarBytesBE(n: number | bigint): Uint8Array {\n return hexToBytes_(numberToHexUnpadded(abignumber(n)));\n}\n\n// Compares 2 u8a-s in kinda constant time\nexport function equalBytes(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) return false;\n let diff = 0;\n for (let i = 0; i < a.length; i++) diff |= a[i] ^ b[i];\n return diff === 0;\n}\n\n/**\n * Copies Uint8Array. We can't use u8a.slice(), because u8a can be Buffer,\n * and Buffer#slice creates mutable copy. Never use Buffers!\n */\nexport function copyBytes(bytes: Uint8Array): Uint8Array {\n return Uint8Array.from(bytes);\n}\n\n/**\n * Decodes 7-bit ASCII string to Uint8Array, throws on non-ascii symbols\n * Should be safe to use for things expected to be ASCII.\n * Returns exact same result as `TextEncoder` for ASCII or throws.\n */\nexport function asciiToBytes(ascii: string): Uint8Array {\n return Uint8Array.from(ascii, (c, i) => {\n const charCode = c.charCodeAt(0);\n if (c.length !== 1 || charCode > 127) {\n throw new Error(\n `string contains non-ASCII character \"${ascii[i]}\" with code ${charCode} at position ${i}`\n );\n }\n return charCode;\n });\n}\n\n// Is positive bigint\nconst isPosBig = (n: bigint) => typeof n === 'bigint' && _0n <= n;\n\nexport function inRange(n: bigint, min: bigint, max: bigint): boolean {\n return isPosBig(n) && isPosBig(min) && isPosBig(max) && min <= n && n < max;\n}\n\n/**\n * Asserts min <= n < max. NOTE: It's < max and not <= max.\n * @example\n * aInRange('x', x, 1n, 256n); // would assume x is in (1n..255n)\n */\nexport function aInRange(title: string, n: bigint, min: bigint, max: bigint): void {\n // Why min <= n < max and not a (min < n < max) OR b (min <= n <= max)?\n // consider P=256n, min=0n, max=P\n // - a for min=0 would require -1: `inRange('x', x, -1n, P)`\n // - b would commonly require subtraction: `inRange('x', x, 0n, P - 1n)`\n // - our way is the cleanest: `inRange('x', x, 0n, P)\n if (!inRange(n, min, max))\n throw new Error('expected valid ' + title + ': ' + min + ' <= n < ' + max + ', got ' + n);\n}\n\n// Bit operations\n\n/**\n * Calculates amount of bits in a bigint.\n * Same as `n.toString(2).length`\n * TODO: merge with nLength in modular\n */\nexport function bitLen(n: bigint): number {\n let len;\n for (len = 0; n > _0n; n >>= _1n, len += 1);\n return len;\n}\n\n/**\n * Gets single bit at position.\n * NOTE: first bit position is 0 (same as arrays)\n * Same as `!!+Array.from(n.toString(2)).reverse()[pos]`\n */\nexport function bitGet(n: bigint, pos: number): bigint {\n return (n >> BigInt(pos)) & _1n;\n}\n\n/**\n * Sets single bit at position.\n */\nexport function bitSet(n: bigint, pos: number, value: boolean): bigint {\n return n | ((value ? _1n : _0n) << BigInt(pos));\n}\n\n/**\n * Calculate mask for N bits. Not using ** operator with bigints because of old engines.\n * Same as BigInt(`0b${Array(i).fill('1').join('')}`)\n */\nexport const bitMask = (n: number): bigint => (_1n << BigInt(n)) - _1n;\n\n// DRBG\n\ntype Pred<T> = (v: Uint8Array) => T | undefined;\n/**\n * Minimal HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n * @returns function that will call DRBG until 2nd arg returns something meaningful\n * @example\n * const drbg = createHmacDRBG<Key>(32, 32, hmac);\n * drbg(seed, bytesToKey); // bytesToKey must return Key or undefined\n */\nexport function createHmacDrbg<T>(\n hashLen: number,\n qByteLen: number,\n hmacFn: (key: Uint8Array, message: Uint8Array) => Uint8Array\n): (seed: Uint8Array, predicate: Pred<T>) => T {\n anumber(hashLen, 'hashLen');\n anumber(qByteLen, 'qByteLen');\n if (typeof hmacFn !== 'function') throw new Error('hmacFn must be a function');\n const u8n = (len: number): Uint8Array => new Uint8Array(len); // creates Uint8Array\n const NULL = Uint8Array.of();\n const byte0 = Uint8Array.of(0x00);\n const byte1 = Uint8Array.of(0x01);\n const _maxDrbgIters = 1000;\n\n // Step B, Step C: set hashLen to 8*ceil(hlen/8)\n let v = u8n(hashLen); // Minimal non-full-spec HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n let k = u8n(hashLen); // Steps B and C of RFC6979 3.2: set hashLen, in our case always same\n let i = 0; // Iterations counter, will throw when over 1000\n const reset = () => {\n v.fill(1);\n k.fill(0);\n i = 0;\n };\n const h = (...msgs: Uint8Array[]) => hmacFn(k, concatBytes_(v, ...msgs)); // hmac(k)(v, ...values)\n const reseed = (seed: Uint8Array = NULL) => {\n // HMAC-DRBG reseed() function. Steps D-G\n k = h(byte0, seed); // k = hmac(k || v || 0x00 || seed)\n v = h(); // v = hmac(k || v)\n if (seed.length === 0) return;\n k = h(byte1, seed); // k = hmac(k || v || 0x01 || seed)\n v = h(); // v = hmac(k || v)\n };\n const gen = () => {\n // HMAC-DRBG generate() function\n if (i++ >= _maxDrbgIters) throw new Error('drbg: tried max amount of iterations');\n let len = 0;\n const out: Uint8Array[] = [];\n while (len < qByteLen) {\n v = h();\n const sl = v.slice();\n out.push(sl);\n len += v.length;\n }\n return concatBytes_(...out);\n };\n const genUntil = (seed: Uint8Array, pred: Pred<T>): T => {\n reset();\n reseed(seed); // Steps D-G\n let res: T | undefined = undefined; // Step H: grind until k is in [1..n-1]\n while (!(res = pred(gen()))) reseed();\n reset();\n return res;\n };\n return genUntil;\n}\n\nexport function validateObject(\n object: Record<string, any>,\n fields: Record<string, string> = {},\n optFields: Record<string, string> = {}\n): void {\n if (!object || typeof object !== 'object') throw new Error('expected valid options object');\n type Item = keyof typeof object;\n function checkField(fieldName: Item, expectedType: string, isOpt: boolean) {\n const val = object[fieldName];\n if (isOpt && val === undefined) return;\n const current = typeof val;\n if (current !== expectedType || val === null)\n throw new Error(`param \"${fieldName}\" is invalid: expected ${expectedType}, got ${current}`);\n }\n const iter = (f: typeof fields, isOpt: boolean) =>\n Object.entries(f).forEach(([k, v]) => checkField(k, v, isOpt));\n iter(fields, false);\n iter(optFields, true);\n}\n\n/**\n * throws not implemented error\n */\nexport const notImplemented = (): never => {\n throw new Error('not implemented');\n};\n\n/**\n * Memoizes (caches) computation result.\n * Uses WeakMap: the value is going auto-cleaned by GC after last reference is removed.\n */\nexport function memoized<T extends object, R, O extends any[]>(\n fn: (arg: T, ...args: O) => R\n): (arg: T, ...args: O) => R {\n const map = new WeakMap<T, R>();\n return (arg: T, ...args: O): R => {\n const val = map.get(arg);\n if (val !== undefined) return val;\n const computed = fn(arg, ...args);\n map.set(arg, computed);\n return computed;\n };\n}\n\nexport interface CryptoKeys {\n lengths: { seed?: number; public?: number; secret?: number };\n keygen: (seed?: Uint8Array) => { secretKey: Uint8Array; publicKey: Uint8Array };\n getPublicKey: (secretKey: Uint8Array) => Uint8Array;\n}\n\n/** Generic interface for signatures. Has keygen, sign and verify. */\nexport interface Signer extends CryptoKeys {\n // Interfaces are fun. We cannot just add new fields without copying old ones.\n lengths: {\n seed?: number;\n public?: number;\n secret?: number;\n signRand?: number;\n signature?: number;\n };\n sign: (msg: Uint8Array, secretKey: Uint8Array) => Uint8Array;\n verify: (sig: Uint8Array, msg: Uint8Array, publicKey: Uint8Array) => boolean;\n}\n","/**\n * Utils for modular division and fields.\n * Field over 11 is a finite (Galois) field is integer number operations `mod 11`.\n * There is no division: it is replaced by modular multiplicative inverse.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport {\n abytes,\n anumber,\n bytesToNumberBE,\n bytesToNumberLE,\n numberToBytesBE,\n numberToBytesLE,\n validateObject,\n} from '../utils.ts';\n\n// Numbers aren't used in x25519 / x448 builds\n// prettier-ignore\nconst _0n = /* @__PURE__ */ BigInt(0), _1n = /* @__PURE__ */ BigInt(1), _2n = /* @__PURE__ */ BigInt(2);\n// prettier-ignore\nconst _3n = /* @__PURE__ */ BigInt(3), _4n = /* @__PURE__ */ BigInt(4), _5n = /* @__PURE__ */ BigInt(5);\n// prettier-ignore\nconst _7n = /* @__PURE__ */ BigInt(7), _8n = /* @__PURE__ */ BigInt(8), _9n = /* @__PURE__ */ BigInt(9);\nconst _16n = /* @__PURE__ */ BigInt(16);\n\n// Calculates a modulo b\nexport function mod(a: bigint, b: bigint): bigint {\n const result = a % b;\n return result >= _0n ? result : b + result;\n}\n/**\n * Efficiently raise num to power and do modular division.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n * @example\n * pow(2n, 6n, 11n) // 64n % 11n == 9n\n */\nexport function pow(num: bigint, power: bigint, modulo: bigint): bigint {\n return FpPow(Field(modulo), num, power);\n}\n\n/** Does `x^(2^power)` mod p. `pow2(30, 4)` == `30^(2^4)` */\nexport function pow2(x: bigint, power: bigint, modulo: bigint): bigint {\n let res = x;\n while (power-- > _0n) {\n res *= res;\n res %= modulo;\n }\n return res;\n}\n\n/**\n * Inverses number over modulo.\n * Implemented using [Euclidean GCD](https://brilliant.org/wiki/extended-euclidean-algorithm/).\n */\nexport function invert(number: bigint, modulo: bigint): bigint {\n if (number === _0n) throw new Error('invert: expected non-zero number');\n if (modulo <= _0n) throw new Error('invert: expected positive modulus, got ' + modulo);\n // Fermat's little theorem \"CT-like\" version inv(n) = n^(m-2) mod m is 30x slower.\n let a = mod(number, modulo);\n let b = modulo;\n // prettier-ignore\n let x = _0n, y = _1n, u = _1n, v = _0n;\n while (a !== _0n) {\n // JIT applies optimization if those two lines follow each other\n const q = b / a;\n const r = b % a;\n const m = x - u * q;\n const n = y - v * q;\n // prettier-ignore\n b = a, a = r, x = u, y = v, u = m, v = n;\n }\n const gcd = b;\n if (gcd !== _1n) throw new Error('invert: does not exist');\n return mod(x, modulo);\n}\n\nfunction assertIsSquare<T>(Fp: IField<T>, root: T, n: T): void {\n if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n}\n\n// Not all roots are possible! Example which will throw:\n// const NUM =\n// n = 72057594037927816n;\n// Fp = Field(BigInt('0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab'));\nfunction sqrt3mod4<T>(Fp: IField<T>, n: T) {\n const p1div4 = (Fp.ORDER + _1n) / _4n;\n const root = Fp.pow(n, p1div4);\n assertIsSquare(Fp, root, n);\n return root;\n}\n\nfunction sqrt5mod8<T>(Fp: IField<T>, n: T) {\n const p5div8 = (Fp.ORDER - _5n) / _8n;\n const n2 = Fp.mul(n, _2n);\n const v = Fp.pow(n2, p5div8);\n const nv = Fp.mul(n, v);\n const i = Fp.mul(Fp.mul(nv, _2n), v);\n const root = Fp.mul(nv, Fp.sub(i, Fp.ONE));\n assertIsSquare(Fp, root, n);\n return root;\n}\n\n// Based on RFC9380, Kong algorithm\n// prettier-ignore\nfunction sqrt9mod16(P: bigint): <T>(Fp: IField<T>, n: T) => T {\n const Fp_ = Field(P);\n const tn = tonelliShanks(P);\n const c1 = tn(Fp_, Fp_.neg(Fp_.ONE));// 1. c1 = sqrt(-1) in F, i.e., (c1^2) == -1 in F\n const c2 = tn(Fp_, c1); // 2. c2 = sqrt(c1) in F, i.e., (c2^2) == c1 in F\n const c3 = tn(Fp_, Fp_.neg(c1)); // 3. c3 = sqrt(-c1) in F, i.e., (c3^2) == -c1 in F\n const c4 = (P + _7n) / _16n; // 4. c4 = (q + 7) / 16 # Integer arithmetic\n return <T>(Fp: IField<T>, n: T) => {\n let tv1 = Fp.pow(n, c4); // 1. tv1 = x^c4\n let tv2 = Fp.mul(tv1, c1); // 2. tv2 = c1 * tv1\n const tv3 = Fp.mul(tv1, c2); // 3. tv3 = c2 * tv1\n const tv4 = Fp.mul(tv1, c3); // 4. tv4 = c3 * tv1\n const e1 = Fp.eql(Fp.sqr(tv2), n); // 5. e1 = (tv2^2) == x\n const e2 = Fp.eql(Fp.sqr(tv3), n); // 6. e2 = (tv3^2) == x\n tv1 = Fp.cmov(tv1, tv2, e1); // 7. tv1 = CMOV(tv1, tv2, e1) # Select tv2 if (tv2^2) == x\n tv2 = Fp.cmov(tv4, tv3, e2); // 8. tv2 = CMOV(tv4, tv3, e2) # Select tv3 if (tv3^2) == x\n const e3 = Fp.eql(Fp.sqr(tv2), n); // 9. e3 = (tv2^2) == x\n const root = Fp.cmov(tv1, tv2, e3);// 10. z = CMOV(tv1, tv2, e3) # Select sqrt from tv1 & tv2\n assertIsSquare(Fp, root, n);\n return root;\n };\n}\n\n/**\n * Tonelli-Shanks square root search algorithm.\n * 1. https://eprint.iacr.org/2012/685.pdf (page 12)\n * 2. Square Roots from 1; 24, 51, 10 to Dan Shanks\n * @param P field order\n * @returns function that takes field Fp (created from P) and number n\n */\nexport function tonelliShanks(P: bigint): <T>(Fp: IField<T>, n: T) => T {\n // Initialization (precomputation).\n // Caching initialization could boost perf by 7%.\n if (P < _3n) throw new Error('sqrt is not defined for small field');\n // Factor P - 1 = Q * 2^S, where Q is odd\n let Q = P - _1n;\n let S = 0;\n while (Q % _2n === _0n) {\n Q /= _2n;\n S++;\n }\n\n // Find the first quadratic non-residue Z >= 2\n let Z = _2n;\n const _Fp = Field(P);\n while (FpLegendre(_Fp, Z) === 1) {\n // Basic primality test for P. After x iterations, chance of\n // not finding quadratic non-residue is 2^x, so 2^1000.\n if (Z++ > 1000) throw new Error('Cannot find square root: probably non-prime P');\n }\n // Fast-path; usually done before Z, but we do \"primality test\".\n if (S === 1) return sqrt3mod4;\n\n // Slow-path\n // TODO: test on Fp2 and others\n let cc = _Fp.pow(Z, Q); // c = z^Q\n const Q1div2 = (Q + _1n) / _2n;\n return function tonelliSlow<T>(Fp: IField<T>, n: T): T {\n if (Fp.is0(n)) return n;\n // Check if n is a quadratic residue using Legendre symbol\n if (FpLegendre(Fp, n) !== 1) throw new Error('Cannot find square root');\n\n // Initialize variables for the main loop\n let M = S;\n let c = Fp.mul(Fp.ONE, cc); // c = z^Q, move cc from field _Fp into field Fp\n let t = Fp.pow(n, Q); // t = n^Q, first guess at the fudge factor\n let R = Fp.pow(n, Q1div2); // R = n^((Q+1)/2), first guess at the square root\n\n // Main loop\n // while t != 1\n while (!Fp.eql(t, Fp.ONE)) {\n if (Fp.is0(t)) return Fp.ZERO; // if t=0 return R=0\n let i = 1;\n\n // Find the smallest i >= 1 such that t^(2^i) ≡ 1 (mod P)\n let t_tmp = Fp.sqr(t); // t^(2^1)\n while (!Fp.eql(t_tmp, Fp.ONE)) {\n i++;\n t_tmp = Fp.sqr(t_tmp); // t^(2^2)...\n if (i === M) throw new Error('Cannot find square root');\n }\n\n // Calculate the exponent for b: 2^(M - i - 1)\n const exponent = _1n << BigInt(M - i - 1); // bigint is important\n const b = Fp.pow(c, exponent); // b = 2^(M - i - 1)\n\n // Update variables\n M = i;\n c = Fp.sqr(b); // c = b^2\n t = Fp.mul(t, c); // t = (t * b^2)\n R = Fp.mul(R, b); // R = R*b\n }\n return R;\n };\n}\n\n/**\n * Square root for a finite field. Will try optimized versions first:\n *\n * 1. P ≡ 3 (mod 4)\n * 2. P ≡ 5 (mod 8)\n * 3. P ≡ 9 (mod 16)\n * 4. Tonelli-Shanks algorithm\n *\n * Different algorithms can give different roots, it is up to user to decide which one they want.\n * For example there is FpSqrtOdd/FpSqrtEven to choice root based on oddness (used for hash-to-curve).\n */\nexport function FpSqrt(P: bigint): <T>(Fp: IField<T>, n: T) => T {\n // P ≡ 3 (mod 4) => √n = n^((P+1)/4)\n if (P % _4n === _3n) return sqrt3mod4;\n // P ≡ 5 (mod 8) => Atkin algorithm, page 10 of https://eprint.iacr.org/2012/685.pdf\n if (P % _8n === _5n) return sqrt5mod8;\n // P ≡ 9 (mod 16) => Kong algorithm, page 11 of https://eprint.iacr.org/2012/685.pdf (algorithm 4)\n if (P % _16n === _9n) return sqrt9mod16(P);\n // Tonelli-Shanks algorithm\n return tonelliShanks(P);\n}\n\n// Little-endian check for first LE bit (last BE bit);\nexport const isNegativeLE = (num: bigint, modulo: bigint): boolean =>\n (mod(num, modulo) & _1n) === _1n;\n\n/** Field is not always over prime: for example, Fp2 has ORDER(q)=p^m. */\nexport interface IField<T> {\n ORDER: bigint;\n BYTES: number;\n BITS: number;\n isLE: boolean;\n ZERO: T;\n ONE: T;\n // 1-arg\n create: (num: T) => T;\n isValid: (num: T) => boolean;\n is0: (num: T) => boolean;\n isValidNot0: (num: T) => boolean;\n neg(num: T): T;\n inv(num: T): T;\n sqrt(num: T): T;\n sqr(num: T): T;\n // 2-args\n eql(lhs: T, rhs: T): boolean;\n add(lhs: T, rhs: T): T;\n sub(lhs: T, rhs: T): T;\n mul(lhs: T, rhs: T | bigint): T;\n pow(lhs: T, power: bigint): T;\n div(lhs: T, rhs: T | bigint): T;\n // N for NonNormalized (for now)\n addN(lhs: T, rhs: T): T;\n subN(lhs: T, rhs: T): T;\n mulN(lhs: T, rhs: T | bigint): T;\n sqrN(num: T): T;\n\n // Optional\n // Should be same as sgn0 function in\n // [RFC9380](https://www.rfc-editor.org/rfc/rfc9380#section-4.1).\n // NOTE: sgn0 is 'negative in LE', which is same as odd. And negative in LE is kinda strange definition anyway.\n isOdd?(num: T): boolean; // Odd instead of even since we have it for Fp2\n // legendre?(num: T): T;\n invertBatch: (lst: T[]) => T[];\n toBytes(num: T): Uint8Array;\n fromBytes(bytes: Uint8Array, skipValidation?: boolean): T;\n // If c is False, CMOV returns a, otherwise it returns b.\n cmov(a: T, b: T, c: boolean): T;\n}\n// prettier-ignore\nconst FIELD_FIELDS = [\n 'create', 'isValid', 'is0', 'neg', 'inv', 'sqrt', 'sqr',\n 'eql', 'add', 'sub', 'mul', 'pow', 'div',\n 'addN', 'subN', 'mulN', 'sqrN'\n] as const;\nexport function validateField<T>(field: IField<T>): IField<T> {\n const initial = {\n ORDER: 'bigint',\n BYTES: 'number',\n BITS: 'number',\n } as Record<string, string>;\n const opts = FIELD_FIELDS.reduce((map, val: string) => {\n map[val] = 'function';\n return map;\n }, initial);\n validateObject(field, opts);\n // const max = 16384;\n // if (field.BYTES < 1 || field.BYTES > max) throw new Error('invalid field');\n // if (field.BITS < 1 || field.BITS > 8 * max) throw new Error('invalid field');\n return field;\n}\n\n// Generic field functions\n\n/**\n * Same as `pow` but for Fp: non-constant-time.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n */\nexport function FpPow<T>(Fp: IField<T>, num: T, power: bigint): T {\n if (power < _0n) throw new Error('invalid exponent, negatives unsupported');\n if (power === _0n) return Fp.ONE;\n if (power === _1n) return num;\n let p = Fp.ONE;\n let d = num;\n while (power > _0n) {\n if (power & _1n) p = Fp.mul(p, d);\n d = Fp.sqr(d);\n power >>= _1n;\n }\n return p;\n}\n\n/**\n * Efficiently invert an array of Field elements.\n * Exception-free. Will return `undefined` for 0 elements.\n * @param passZero map 0 to 0 (instead of undefined)\n */\nexport function FpInvertBatch<T>(Fp: IField<T>, nums: T[], passZero = false): T[] {\n const inverted = new Array(nums.length).fill(passZero ? Fp.ZERO : undefined);\n // Walk from first to last, multiply them by each other MOD p\n const multipliedAcc = nums.reduce((acc, num, i) => {\n if (Fp.is0(num)) return acc;\n inverted[i] = acc;\n return Fp.mul(acc, num);\n }, Fp.ONE);\n // Invert last element\n const invertedAcc = Fp.inv(multipliedAcc);\n // Walk from last to first, multiply them by inverted each other MOD p\n nums.reduceRight((acc, num, i) => {\n if (Fp.is0(num)) return acc;\n inverted[i] = Fp.mul(acc, inverted[i]);\n return Fp.mul(acc, num);\n }, invertedAcc);\n return inverted;\n}\n\n// TODO: remove\nexport function FpDiv<T>(Fp: IField<T>, lhs: T, rhs: T | bigint): T {\n return Fp.mul(lhs, typeof rhs === 'bigint' ? invert(rhs, Fp.ORDER) : Fp.inv(rhs));\n}\n\n/**\n * Legendre symbol.\n * Legendre constant is used to calculate Legendre symbol (a | p)\n * which denotes the value of a^((p-1)/2) (mod p).\n *\n * * (a | p) ≡ 1 if a is a square (mod p), quadratic residue\n * * (a | p) ≡ -1 if a is not a square (mod p), quadratic non residue\n * * (a | p) ≡ 0 if a ≡ 0 (mod p)\n */\nexport function FpLegendre<T>(Fp: IField<T>, n: T): -1 | 0 | 1 {\n // We can use 3rd argument as optional cache of this value\n // but seems unneeded for now. The operation is very fast.\n const p1mod2 = (Fp.ORDER - _1n) / _2n;\n const powered = Fp.pow(n, p1mod2);\n const yes = Fp.eql(powered, Fp.ONE);\n const zero = Fp.eql(powered, Fp.ZERO);\n const no = Fp.eql(powered, Fp.neg(Fp.ONE));\n if (!yes && !zero && !no) throw new Error('invalid Legendre symbol result');\n return yes ? 1 : zero ? 0 : -1;\n}\n\n// This function returns True whenever the value x is a square in the field F.\nexport function FpIsSquare<T>(Fp: IField<T>, n: T): boolean {\n const l = FpLegendre(Fp, n);\n return l === 1;\n}\n\nexport type NLength = { nByteLength: number; nBitLength: number };\n// CURVE.n lengths\nexport function nLength(n: bigint, nBitLength?: number): NLength {\n // Bit size, byte size of CURVE.n\n if (nBitLength !== undefined) anumber(nBitLength);\n const _nBitLength = nBitLength !== undefined ? nBitLength : n.toString(2).length;\n const nByteLength = Math.ceil(_nBitLength / 8);\n return { nBitLength: _nBitLength, nByteLength };\n}\n\ntype FpField = IField<bigint> & Required<Pick<IField<bigint>, 'isOdd'>>;\ntype SqrtFn = (n: bigint) => bigint;\ntype FieldOpts = Partial<{\n isLE: boolean;\n BITS: number;\n sqrt: SqrtFn;\n allowedLengths?: readonly number[]; // for P521 (adds padding for smaller sizes)\n modFromBytes: boolean; // bls12-381 requires mod(n) instead of rejecting keys >= n\n}>;\nclass _Field implements IField<bigint> {\n readonly ORDER: bigint;\n readonly BITS: number;\n readonly BYTES: number;\n readonly isLE: boolean;\n readonly ZERO = _0n;\n readonly ONE = _1n;\n readonly _lengths?: number[];\n private _sqrt: ReturnType<typeof FpSqrt> | undefined; // cached sqrt\n private readonly _mod?: boolean;\n constructor(ORDER: bigint, opts: FieldOpts = {}) {\n if (ORDER <= _0n) throw new Error('invalid field: expected ORDER > 0, got ' + ORDER);\n let _nbitLength: number | undefined = undefined;\n this.isLE = false;\n if (opts != null && typeof opts === 'object') {\n if (typeof opts.BITS === 'number') _nbitLength = opts.BITS;\n if (typeof opts.sqrt === 'function') this.sqrt = opts.sqrt;\n if (typeof opts.isLE === 'boolean') this.isLE = opts.isLE;\n if (opts.allowedLengths) this._lengths = opts.allowedLengths?.slice();\n if (typeof opts.modFromBytes === 'boolean') this._mod = opts.modFromBytes;\n }\n const { nBitLength, nByteLength } = nLength(ORDER, _nbitLength);\n if (nByteLength > 2048) throw new Error('invalid field: expected ORDER of <= 2048 bytes');\n this.ORDER = ORDER;\n this.BITS = nBitLength;\n this.BYTES = nByteLength;\n this._sqrt = undefined;\n Object.preventExtensions(this);\n }\n\n create(num: bigint) {\n return mod(num, this.ORDER);\n }\n isValid(num: bigint) {\n if (typeof num !== 'bigint')\n throw new Error('invalid field element: expected bigint, got ' + typeof num);\n return _0n <= num && num < this.ORDER; // 0 is valid element, but it's not invertible\n }\n is0(num: bigint) {\n return num === _0n;\n }\n // is valid and invertible\n isValidNot0(num: bigint) {\n return !this.is0(num) && this.isValid(num);\n }\n isOdd(num: bigint) {\n return (num & _1n) === _1n;\n }\n neg(num: bigint) {\n return mod(-num, this.ORDER);\n }\n eql(lhs: bigint, rhs: bigint) {\n return lhs === rhs;\n }\n\n sqr(num: bigint) {\n return mod(num * num, this.ORDER);\n }\n add(lhs: bigint, rhs: bigint) {\n return mod(lhs + rhs, this.ORDER);\n }\n sub(lhs: bigint, rhs: bigint) {\n return mod(lhs - rhs, this.ORDER);\n }\n mul(lhs: bigint, rhs: bigint) {\n return mod(lhs * rhs, this.ORDER);\n }\n pow(num: bigint, power: bigint): bigint {\n return FpPow(this, num, power);\n }\n div(lhs: bigint, rhs: bigint) {\n return mod(lhs * invert(rhs, this.ORDER), this.ORDER);\n }\n\n // Same as above, but doesn't normalize\n sqrN(num: bigint) {\n return num * num;\n }\n addN(lhs: bigint, rhs: bigint) {\n return lhs + rhs;\n }\n subN(lhs: bigint, rhs: bigint) {\n return lhs - rhs;\n }\n mulN(lhs: bigint, rhs: bigint) {\n return lhs * rhs;\n }\n\n inv(num: bigint) {\n return invert(num, this.ORDER);\n }\n sqrt(num: bigint): bigint {\n // Caching _sqrt speeds up sqrt9mod16 by 5x and tonneli-shanks by 10%\n if (!this._sqrt) this._sqrt = FpSqrt(this.ORDER);\n return this._sqrt(this, num);\n }\n toBytes(num: bigint) {\n return this.isLE ? numberToBytesLE(num, this.BYTES) : numberToBytesBE(num, this.BYTES);\n }\n fromBytes(bytes: Uint8Array, skipValidation = false) {\n abytes(bytes);\n const { _lengths: allowedLengths, BYTES, isLE, ORDER, _mod: modFromBytes } = this;\n if (allowedLengths) {\n if (!allowedLengths.includes(bytes.length) || bytes.length > BYTES) {\n throw new Error(\n 'Field.fromBytes: expected ' + allowedLengths + ' bytes, got ' + bytes.length\n );\n }\n const padded = new Uint8Array(BYTES);\n // isLE add 0 to right, !isLE to the left.\n padded.set(bytes, isLE ? 0 : padded.length - bytes.length);\n bytes = padded;\n }\n if (bytes.length !== BYTES)\n throw new Error('Field.fromBytes: expected ' + BYTES + ' bytes, got ' + bytes.length);\n let scalar = isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);\n if (modFromBytes) scalar = mod(scalar, ORDER);\n if (!skipValidation)\n if (!this.isValid(scalar))\n throw new Error('invalid field element: outside of range 0..ORDER');\n // NOTE: we don't validate scalar here, please use isValid. This done such way because some\n // protocol may allow non-reduced scalar that reduced later or changed some other way.\n return scalar;\n }\n // TODO: we don't need it here, move out to separate fn\n invertBatch(lst: bigint[]): bigint[] {\n return FpInvertBatch(this, lst);\n }\n // We can't move this out because Fp6, Fp12 implement it\n // and it's unclear what to return in there.\n cmov(a: bigint, b: bigint, condition: boolean) {\n return condition ? b : a;\n }\n}\n\n/**\n * Creates a finite field. Major performance optimizations:\n * * 1. Denormalized operations like mulN instead of mul.\n * * 2. Identical object shape: never add or remove keys.\n * * 3. `Object.freeze`.\n * Fragile: always run a benchmark on a change.\n * Security note: operations don't check 'isValid' for all elements for performance reasons,\n * it is caller responsibility to check this.\n * This is low-level code, please make sure you know what you're doing.\n *\n * Note about field properties:\n * * CHARACTERISTIC p = prime number, number of elements in main subgroup.\n * * ORDER q = similar to cofactor in curves, may be composite `q = p^m`.\n *\n * @param ORDER field order, probably prime, or could be composite\n * @param bitLen how many bits the field consumes\n * @param isLE (default: false) if encoding / decoding should be in little-endian\n * @param redef optional faster redefinitions of sqrt and other methods\n */\nexport function Field(ORDER: bigint, opts: FieldOpts = {}): Readonly<FpField> {\n return new _Field(ORDER, opts);\n}\n\n// Generic random scalar, we can do same for other fields if via Fp2.mul(Fp2.ONE, Fp2.random)?\n// This allows unsafe methods like ignore bias or zero. These unsafe, but often used in different protocols (if deterministic RNG).\n// which mean we cannot force this via opts.\n// Not sure what to do with randomBytes, we can accept it inside opts if wanted.\n// Probably need to export getMinHashLength somewhere?\n// random(bytes?: Uint8Array, unsafeAllowZero = false, unsafeAllowBias = false) {\n// const LEN = !unsafeAllowBias ? getMinHashLength(ORDER) : BYTES;\n// if (bytes === undefined) bytes = randomBytes(LEN); // _opts.randomBytes?\n// const num = isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);\n// // `mod(x, 11)` can sometimes produce 0. `mod(x, 10) + 1` is the same, but no 0\n// const reduced = unsafeAllowZero ? mod(num, ORDER) : mod(num, ORDER - _1n) + _1n;\n// return reduced;\n// },\n\nexport function FpSqrtOdd<T>(Fp: IField<T>, elm: T): T {\n if (!Fp.isOdd) throw new Error(\"Field doesn't have isOdd\");\n const root = Fp.sqrt(elm);\n return Fp.isOdd(root) ? root : Fp.neg(root);\n}\n\nexport function FpSqrtEven<T>(Fp: IField<T>, elm: T): T {\n if (!Fp.isOdd) throw new Error(\"Field doesn't have isOdd\");\n const root = Fp.sqrt(elm);\n return Fp.isOdd(root) ? Fp.neg(root) : root;\n}\n\n/**\n * Returns total number of bytes consumed by the field element.\n * For example, 32 bytes for usual 256-bit weierstrass curve.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of field\n */\nexport function getFieldBytesLength(fieldOrder: bigint): number {\n if (typeof fieldOrder !== 'bigint') throw new Error('field order must be bigint');\n const bitLength = fieldOrder.toString(2).length;\n return Math.ceil(bitLength / 8);\n}\n\n/**\n * Returns minimal amount of bytes that can be safely reduced\n * by field order.\n * Should be 2^-128 for 128-bit curve such as P256.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of target hash\n */\nexport function getMinHashLength(fieldOrder: bigint): number {\n const length = getFieldBytesLength(fieldOrder);\n return length + Math.ceil(length / 2);\n}\n\n/**\n * \"Constant-time\" private key generation utility.\n * Can take (n + n/2) or more bytes of uniform input e.g. from CSPRNG or KDF\n * and convert them into private scalar, with the modulo bias being negligible.\n * Needs at least 48 bytes of input for 32-byte private key.\n * https://research.kudelskisecurity.com/2020/07/28/the-definitive-guide-to-modulo-bias-and-how-to-avoid-it/\n * FIPS 186-5, A.2 https://csrc.nist.gov/publications/detail/fips/186/5/final\n * RFC 9380, https://www.rfc-editor.org/rfc/rfc9380#section-5\n * @param hash hash output from SHA3 or a similar function\n * @param groupOrder size of subgroup - (e.g. secp256k1.Point.Fn.ORDER)\n * @param isLE interpret hash bytes as LE num\n * @returns valid private scalar\n */\nexport function mapHashToField(key: Uint8Array, fieldOrder: bigint, isLE = false): Uint8Array {\n abytes(key);\n const len = key.length;\n const fieldLen = getFieldBytesLength(fieldOrder);\n const minLen = getMinHashLength(fieldOrder);\n // No small numbers: need to understand bias story. No huge numbers: easier to detect JS timings.\n if (len < 16 || len < minLen || len > 1024)\n throw new Error('expected ' + minLen + '-1024 bytes of input, got ' + len);\n const num = isLE ? bytesToNumberLE(key) : bytesToNumberBE(key);\n // `mod(x, 11)` can sometimes produce 0. `mod(x, 10) + 1` is the same, but no 0\n const reduced = mod(num, fieldOrder - _1n) + _1n;\n return isLE ? numberToBytesLE(reduced, fieldLen) : numberToBytesBE(reduced, fieldLen);\n}\n","/**\n * Methods for elliptic curve multiplication by scalars.\n * Contains wNAF, pippenger.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { bitLen, bitMask, type Signer } from '../utils.ts';\nimport { Field, FpInvertBatch, validateField, type IField } from './modular.ts';\n\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\n\nexport type AffinePoint<T> = {\n x: T;\n y: T;\n} & { Z?: never };\n\n// We can't \"abstract out\" coordinates (X, Y, Z; and T in Edwards): argument names of constructor\n// are not accessible. See Typescript gh-56093, gh-41594.\n//\n// We have to use recursive types, so it will return actual point, not constained `CurvePoint`.\n// If, at any point, P is `any`, it will erase all types and replace it\n// with `any`, because of recursion, `any implements CurvePoint`,\n// but we lose all constrains on methods.\n\n/** Base interface for all elliptic curve Points. */\nexport interface CurvePoint<F, P extends CurvePoint<F, P>> {\n /** Affine x coordinate. Different from projective / extended X coordinate. */\n x: F;\n /** Affine y coordinate. Different from projective / extended Y coordinate. */\n y: F;\n Z?: F;\n double(): P;\n negate(): P;\n add(other: P): P;\n subtract(other: P): P;\n equals(other: P): boolean;\n multiply(scalar: bigint): P;\n assertValidity(): void;\n clearCofactor(): P;\n is0(): boolean;\n isTorsionFree(): boolean;\n isSmallOrder(): boolean;\n multiplyUnsafe(scalar: bigint): P;\n /**\n * Massively speeds up `p.multiply(n)` by using precompute tables (caching). See {@link wNAF}.\n * @param isLazy calculate cache now. Default (true) ensures it's deferred to first `multiply()`\n */\n precompute(windowSize?: number, isLazy?: boolean): P;\n /** Converts point to 2D xy affine coordinates */\n toAffine(invertedZ?: F): AffinePoint<F>;\n toBytes(): Uint8Array;\n toHex(): string;\n}\n\n/** Base interface for all elliptic curve Point constructors. */\nexport interface CurvePointCons<P extends CurvePoint<any, P>> {\n [Symbol.hasInstance]: (item: unknown) => boolean;\n BASE: P;\n ZERO: P;\n /** Field for basic curve math */\n Fp: IField<P_F<P>>;\n /** Scalar field, for scalars in multiply and others */\n Fn: IField<bigint>;\n /** Creates point from x, y. Does NOT validate if the point is valid. Use `.assertValidity()`. */\n fromAffine(p: AffinePoint<P_F<P>>): P;\n fromBytes(bytes: Uint8Array): P;\n fromHex(hex: string): P;\n}\n\n// Type inference helpers: PC - PointConstructor, P - Point, Fp - Field element\n// Short names, because we use them a lot in result types:\n// * we can't do 'P = GetCurvePoint<PC>': this is default value and doesn't constrain anything\n// * we can't do 'type X = GetCurvePoint<PC>': it won't be accesible for arguments/return types\n// * `CurvePointCons<P extends CurvePoint<any, P>>` constraints from interface definition\n// won't propagate, if `PC extends CurvePointCons<any>`: the P would be 'any', which is incorrect\n// * PC could be super specific with super specific P, which implements CurvePoint<any, P>.\n// this means we need to do stuff like\n// `function test<P extends CurvePoint<any, P>, PC extends CurvePointCons<P>>(`\n// if we want type safety around P, otherwise PC_P<PC> will be any\n\n/** Returns Fp type from Point (P_F<P> == P.F) */\nexport type P_F<P extends CurvePoint<any, P>> = P extends CurvePoint<infer F, P> ? F : never;\n/** Returns Fp type from PointCons (PC_F<PC> == PC.P.F) */\nexport type PC_F<PC extends CurvePointCons<CurvePoint<any, any>>> = PC['Fp']['ZERO'];\n/** Returns Point type from PointCons (PC_P<PC> == PC.P) */\nexport type PC_P<PC extends CurvePointCons<CurvePoint<any, any>>> = PC['ZERO'];\n\n// Ugly hack to get proper type inference, because in typescript fails to infer resursively.\n// The hack allows to do up to 10 chained operations without applying type erasure.\n//\n// Types which won't work:\n// * `CurvePointCons<CurvePoint<any, any>>`, will return `any` after 1 operation\n// * `CurvePointCons<any>: WeierstrassPointCons<bigint> extends CurvePointCons<any> = false`\n// * `P extends CurvePoint, PC extends CurvePointCons<P>`\n// * It can't infer P from PC alone\n// * Too many relations between F, P & PC\n// * It will infer P/F if `arg: CurvePointCons<F, P>`, but will fail if PC is generic\n// * It will work correctly if there is an additional argument of type P\n// * But generally, we don't want to parametrize `CurvePointCons` over `F`: it will complicate\n// types, making them un-inferable\n// prettier-ignore\nexport type PC_ANY = CurvePointCons<\n CurvePoint<any,\n CurvePoint<any,\n CurvePoint<any,\n CurvePoint<any,\n CurvePoint<any,\n CurvePoint<any,\n CurvePoint<any,\n CurvePoint<any,\n CurvePoint<any,\n CurvePoint<any, any>\n >>>>>>>>>\n>;\n\nexport interface CurveLengths {\n secretKey?: number;\n publicKey?: number;\n publicKeyUncompressed?: number;\n publicKeyHasPrefix?: boolean;\n signature?: number;\n seed?: number;\n}\n\nexport type Mapper<T> = (i: T[]) => T[];\n\nexport function negateCt<T extends { negate: () => T }>(condition: boolean, item: T): T {\n const neg = item.negate();\n return condition ? neg : item;\n}\n\n/**\n * Takes a bunch of Projective Points but executes only one\n * inversion on all of them. Inversion is very slow operation,\n * so this improves performance massively.\n * Optimization: converts a list of projective points to a list of identical points with Z=1.\n */\nexport function normalizeZ<P extends CurvePoint<any, P>, PC extends CurvePointCons<P>>(\n c: PC,\n points: P[]\n): P[] {\n const invertedZs = FpInvertBatch(\n c.Fp,\n points.map((p) => p.Z!)\n );\n return points.map((p, i) => c.fromAffine(p.toAffine(invertedZs[i])));\n}\n\nfunction validateW(W: number, bits: number) {\n if (!Number.isSafeInteger(W) || W <= 0 || W > bits)\n throw new Error('invalid window size, expected [1..' + bits + '], got W=' + W);\n}\n\n/** Internal wNAF opts for specific W and scalarBits */\ntype WOpts = {\n windows: number;\n windowSize: number;\n mask: bigint;\n maxNumber: number;\n shiftBy: bigint;\n};\n\nfunction calcWOpts(W: number, scalarBits: number): WOpts {\n validateW(W, scalarBits);\n const windows = Math.ceil(scalarBits / W) + 1; // W=8 33. Not 32, because we skip zero\n const windowSize = 2 ** (W - 1); // W=8 128. Not 256, because we skip zero\n const maxNumber = 2 ** W; // W=8 256\n const mask = bitMask(W); // W=8 255 == mask 0b11111111\n const shiftBy = BigInt(W); // W=8 8\n return { windows, windowSize, mask, maxNumber, shiftBy };\n}\n\nfunction calcOffsets(n: bigint, window: number, wOpts: WOpts) {\n const { windowSize, mask, maxNumber, shiftBy } = wOpts;\n let wbits = Number(n & mask); // extract W bits.\n let nextN = n >> shiftBy; // shift number by W bits.\n\n // What actually happens here:\n // const highestBit = Number(mask ^ (mask >> 1n));\n // let wbits2 = wbits - 1; // skip zero\n // if (wbits2 & highestBit) { wbits2 ^= Number(mask); // (~);\n\n // split if bits > max: +224 => 256-32\n if (wbits > windowSize) {\n // we skip zero, which means instead of `>= size-1`, we do `> size`\n wbits -= maxNumber; // -32, can be maxNumber - wbits, but then we need to set isNeg here.\n nextN += _1n; // +256 (carry)\n }\n const offsetStart = window * windowSize;\n const offset = offsetStart + Math.abs(wbits) - 1; // -1 because we skip zero\n const isZero = wbits === 0; // is current window slice a 0?\n const isNeg = wbits < 0; // is current window slice negative?\n const isNegF = window % 2 !== 0; // fake random statement for noise\n const offsetF = offsetStart; // fake offset for noise\n return { nextN, offset, isZero, isNeg, isNegF, offsetF };\n}\n\nfunction validateMSMPoints(points: any[], c: any) {\n if (!Array.isArray(points)) throw new Error('array expected');\n points.forEach((p, i) => {\n if (!(p instanceof c)) throw new Error('invalid point at index ' + i);\n });\n}\nfunction validateMSMScalars(scalars: any[], field: any) {\n if (!Array.isArray(scalars)) throw new Error('array of scalars expected');\n scalars.forEach((s, i) => {\n if (!field.isValid(s)) throw new Error('invalid scalar at index ' + i);\n });\n}\n\n// Since points in different groups cannot be equal (different object constructor),\n// we can have single place to store precomputes.\n// Allows to make points frozen / immutable.\nconst pointPrecomputes = new WeakMap<any, any[]>();\nconst pointWindowSizes = new WeakMap<any, number>();\n\nfunction getW(P: any): number {\n // To disable precomputes:\n // return 1;\n return pointWindowSizes.get(P) || 1;\n}\n\nfunction assert0(n: bigint): void {\n if (n !== _0n) throw new Error('invalid wNAF');\n}\n\n/**\n * Elliptic curve multiplication of Point by scalar. Fragile.\n * Table generation takes **30MB of ram and 10ms on high-end CPU**,\n * but may take much longer on slow devices. Actual generation will happen on\n * first call of `multiply()`. By default, `BASE` point is precomputed.\n *\n * Scalars should always be less than curve order: this should be checked inside of a curve itself.\n * Creates precomputation tables for fast multiplication:\n * - private scalar is split by fixed size windows of W bits\n * - every window point is collected from window's table & added to accumulator\n * - since windows are different, same point inside tables won't be accessed more than once per calc\n * - each multiplication is 'Math.ceil(CURVE_ORDER / 𝑊) + 1' point additions (fixed for any scalar)\n * - +1 window is neccessary for wNAF\n * - wNAF reduces table size: 2x less memory + 2x faster generation, but 10% slower multiplication\n *\n * @todo Research returning 2d JS array of windows, instead of a single window.\n * This would allow windows to be in different memory locations\n */\nexport class wNAF<PC extends PC_ANY> {\n private readonly BASE: PC_P<PC>;\n private readonly ZERO: PC_P<PC>;\n private readonly Fn: PC['Fn'];\n readonly bits: number;\n\n // Parametrized with a given Point class (not individual point)\n constructor(Point: PC, bits: number) {\n this.BASE = Point.BASE;\n this.ZERO = Point.ZERO;\n this.Fn = Point.Fn;\n this.bits = bits;\n }\n\n // non-const time multiplication ladder\n _unsafeLadder(elm: PC_P<PC>, n: bigint, p: PC_P<PC> = this.ZERO): PC_P<PC> {\n let d: PC_P<PC> = elm;\n while (n > _0n) {\n if (n & _1n) p = p.add(d);\n d = d.double();\n n >>= _1n;\n }\n return p;\n }\n\n /**\n * Creates a wNAF precomputation window. Used for caching.\n * Default window size is set by `utils.precompute()` and is equal to 8.\n * Number of precomputed points depends on the curve size:\n * 2^(𝑊−1) * (Math.ceil(𝑛 / 𝑊) + 1), where:\n * - 𝑊 is the window size\n * - 𝑛 is the bitlength of the curve order.\n * For a 256-bit curve and window size 8, the number of precomputed points is 128 * 33 = 4224.\n * @param point Point instance\n * @param W window size\n * @returns precomputed point tables flattened to a single array\n */\n private precomputeWindow(point: PC_P<PC>, W: number): PC_P<PC>[] {\n const { windows, windowSize } = calcWOpts(W, this.bits);\n const points: PC_P<PC>[] = [];\n let p: PC_P<PC> = point;\n let base = p;\n for (let window = 0; window < windows; window++) {\n base = p;\n points.push(base);\n // i=1, bc we skip 0\n for (let i = 1; i < windowSize; i++) {\n base = base.add(p);\n points.push(base);\n }\n p = base.double();\n }\n return points;\n }\n\n /**\n * Implements ec multiplication using precomputed tables and w-ary non-adjacent form.\n * More compact implementation:\n * https://github.com/paulmillr/noble-secp256k1/blob/47cb1669b6e506ad66b35fe7d76132ae97465da2/index.ts#L502-L541\n * @returns real and fake (for const-time) points\n */\n private wNAF(W: number, precomputes: PC_P<PC>[], n: bigint): { p: PC_P<PC>; f: PC_P<PC> } {\n // Scalar should be smaller than field order\n if (!this.Fn.isValid(n)) throw new Error('invalid scalar');\n // Accumulators\n let p = this.ZERO;\n let f = this.BASE;\n // This code was first written with assumption that 'f' and 'p' will never be infinity point:\n // since each addition is multiplied by 2 ** W, it cannot cancel each other. However,\n // there is negate now: it is possible that negated element from low value\n // would be the same as high element, which will create carry into next window.\n // It's not obvious how this can fail, but still worth investigating later.\n const wo = calcWOpts(W, this.bits);\n for (let window = 0; window < wo.windows; window++) {\n // (n === _0n) is handled and not early-exited. isEven and offsetF are used for noise\n const { nextN, offset, isZero, isNeg, isNegF, offsetF } = calcOffsets(n, window, wo);\n n = nextN;\n if (isZero) {\n // bits are 0: add garbage to fake point\n // Important part for const-time getPublicKey: add random \"noise\" point to f.\n f = f.add(negateCt(isNegF, precomputes[offsetF]));\n } else {\n // bits are 1: add to result point\n p = p.add(negateCt(isNeg, precomputes[offset]));\n }\n }\n assert0(n);\n // Return both real and fake points: JIT won't eliminate f.\n // At this point there is a way to F be infinity-point even if p is not,\n // which makes it less const-time: around 1 bigint multiply.\n return { p, f };\n }\n\n /**\n * Implements ec unsafe (non const-time) multiplication using precomputed tables and w-ary non-adjacent form.\n * @param acc accumulator point to add result of multiplication\n * @returns point\n */\n private wNAFUnsafe(\n W: number,\n precomputes: PC_P<PC>[],\n n: bigint,\n acc: PC_P<PC> = this.ZERO\n ): PC_P<PC> {\n const wo = calcWOpts(W, this.bits);\n for (let window = 0; window < wo.windows; window++) {\n if (n === _0n) break; // Early-exit, skip 0 value\n const { nextN, offset, isZero, isNeg } = calcOffsets(n, window, wo);\n n = nextN;\n if (isZero) {\n // Window bits are 0: skip processing.\n // Move to next window.\n continue;\n } else {\n const item = precomputes[offset];\n acc = acc.add(isNeg ? item.negate() : item); // Re-using acc allows to save adds in MSM\n }\n }\n assert0(n);\n return acc;\n }\n\n private getPrecomputes(W: number, point: PC_P<PC>, transform?: Mapper<PC_P<PC>>): PC_P<PC>[] {\n // Calculate precomputes on a first run, reuse them after\n let comp = pointPrecomputes.get(point);\n if (!comp) {\n comp = this.precomputeWindow(point, W) as PC_P<PC>[];\n if (W !== 1) {\n // Doing transform outside of if brings 15% perf hit\n if (typeof transform === 'function') comp = transform(comp);\n pointPrecomputes.set(point, comp);\n }\n }\n return comp;\n }\n\n cached(\n point: PC_P<PC>,\n scalar: bigint,\n transform?: Mapper<PC_P<PC>>\n ): { p: PC_P<PC>; f: PC_P<PC> } {\n const W = getW(point);\n return this.wNAF(W, this.getPrecomputes(W, point, transform), scalar);\n }\n\n unsafe(point: PC_P<PC>, scalar: bigint, transform?: Mapper<PC_P<PC>>, prev?: PC_P<PC>): PC_P<PC> {\n const W = getW(point);\n if (W === 1) return this._unsafeLadder(point, scalar, prev); // For W=1 ladder is ~x2 faster\n return this.wNAFUnsafe(W, this.getPrecomputes(W, point, transform), scalar, prev);\n }\n\n // We calculate precomputes for elliptic curve point multiplication\n // using windowed method. This specifies window size and\n // stores precomputed values. Usually only base point would be precomputed.\n createCache(P: PC_P<PC>, W: number): void {\n validateW(W, this.bits);\n pointWindowSizes.set(P, W);\n pointPrecomputes.delete(P);\n }\n\n hasCache(elm: PC_P<PC>): boolean {\n return getW(elm) !== 1;\n }\n}\n\n/**\n * Endomorphism-specific multiplication for Koblitz curves.\n * Cost: 128 dbl, 0-256 adds.\n */\nexport function mulEndoUnsafe<P extends CurvePoint<any, P>, PC extends CurvePointCons<P>>(\n Point: PC,\n point: P,\n k1: bigint,\n k2: bigint\n): { p1: P; p2: P } {\n let acc = point;\n let p1 = Point.ZERO;\n let p2 = Point.ZERO;\n while (k1 > _0n || k2 > _0n) {\n if (k1 & _1n) p1 = p1.add(acc);\n if (k2 & _1n) p2 = p2.add(acc);\n acc = acc.double();\n k1 >>= _1n;\n k2 >>= _1n;\n }\n return { p1, p2 };\n}\n\n/**\n * Pippenger algorithm for multi-scalar multiplication (MSM, Pa + Qb + Rc + ...).\n * 30x faster vs naive addition on L=4096, 10x faster than precomputes.\n * For N=254bit, L=1, it does: 1024 ADD + 254 DBL. For L=5: 1536 ADD + 254 DBL.\n * Algorithmically constant-time (for same L), even when 1 point + scalar, or when scalar = 0.\n * @param c Curve Point constructor\n * @param fieldN field over CURVE.N - important that it's not over CURVE.P\n * @param points array of L curve points\n * @param scalars array of L scalars (aka secret keys / bigints)\n */\nexport function pippenger<P extends CurvePoint<any, P>, PC extends CurvePointCons<P>>(\n c: PC,\n points: P[],\n scalars: bigint[]\n): P {\n // If we split scalars by some window (let's say 8 bits), every chunk will only\n // take 256 buckets even if there are 4096 scalars, also re-uses double.\n // TODO:\n // - https://eprint.iacr.org/2024/750.pdf\n // - https://tches.iacr.org/index.php/TCHES/article/view/10287\n // 0 is accepted in scalars\n const fieldN = c.Fn;\n validateMSMPoints(points, c);\n validateMSMScalars(scalars, fieldN);\n const plength = points.length;\n const slength = scalars.length;\n if (plength !== slength) throw new Error('arrays of points and scalars must have equal length');\n // if (plength === 0) throw new Error('array must be of length >= 2');\n const zero = c.ZERO;\n const wbits = bitLen(BigInt(plength));\n let windowSize = 1; // bits\n if (wbits > 12) windowSize = wbits - 3;\n else if (wbits > 4) windowSize = wbits - 2;\n else if (wbits > 0) windowSize = 2;\n const MASK = bitMask(windowSize);\n const buckets = new Array(Number(MASK) + 1).fill(zero); // +1 for zero array\n const lastBits = Math.floor((fieldN.BITS - 1) / windowSize) * windowSize;\n let sum = zero;\n for (let i = lastBits; i >= 0; i -= windowSize) {\n buckets.fill(zero);\n for (let j = 0; j < slength; j++) {\n const scalar = scalars[j];\n const wbits = Number((scalar >> BigInt(i)) & MASK);\n buckets[wbits] = buckets[wbits].add(points[j]);\n }\n let resI = zero; // not using this will do small speed-up, but will lose ct\n // Skip first bucket, because it is zero\n for (let j = buckets.length - 1, sumI = zero; j > 0; j--) {\n sumI = sumI.add(buckets[j]);\n resI = resI.add(sumI);\n }\n sum = sum.add(resI);\n if (i !== 0) for (let j = 0; j < windowSize; j++) sum = sum.double();\n }\n return sum as P;\n}\n/**\n * Precomputed multi-scalar multiplication (MSM, Pa + Qb + Rc + ...).\n * @param c Curve Point constructor\n * @param fieldN field over CURVE.N - important that it's not over CURVE.P\n * @param points array of L curve points\n * @returns function which multiplies points with scaars\n */\nexport function precomputeMSMUnsafe<P extends CurvePoint<any, P>, PC extends CurvePointCons<P>>(\n c: PC,\n points: P[],\n windowSize: number\n): (scalars: bigint[]) => P {\n /**\n * Performance Analysis of Window-based Precomputation\n *\n * Base Case (256-bit scalar, 8-bit window):\n * - Standard precomputation requires:\n * - 31 additions per scalar × 256 scalars = 7,936 ops\n * - Plus 255 summary additions = 8,191 total ops\n * Note: Summary additions can be optimized via accumulator\n *\n * Chunked Precomputation Analysis:\n * - Using 32 chunks requires:\n * - 255 additions per chunk\n * - 256 doublings\n * - Total: (255 × 32) + 256 = 8,416 ops\n *\n * Memory Usage Comparison:\n * Window Size | Standard Points | Chunked Points\n * ------------|-----------------|---------------\n * 4-bit | 520 | 15\n * 8-bit | 4,224 | 255\n * 10-bit | 13,824 | 1,023\n * 16-bit | 557,056 | 65,535\n *\n * Key Advantages:\n * 1. Enables larger window sizes due to reduced memory overhead\n * 2. More efficient for smaller scalar counts:\n * - 16 chunks: (16 × 255) + 256 = 4,336 ops\n * - ~2x faster than standard 8,191 ops\n *\n * Limitations:\n * - Not suitable for plain precomputes (requires 256 constant doublings)\n * - Performance degrades with larger scalar counts:\n * - Optimal for ~256 scalars\n * - Less efficient for 4096+ scalars (Pippenger preferred)\n */\n const fieldN = c.Fn;\n validateW(windowSize, fieldN.BITS);\n validateMSMPoints(points, c);\n const zero = c.ZERO;\n const tableSize = 2 ** windowSize - 1; // table size (without zero)\n const chunks = Math.ceil(fieldN.BITS / windowSize); // chunks of item\n const MASK = bitMask(windowSize);\n const tables = points.map((p: P) => {\n const res = [];\n for (let i = 0, acc = p; i < tableSize; i++) {\n res.push(acc);\n acc = acc.add(p);\n }\n return res;\n });\n return (scalars: bigint[]): P => {\n validateMSMScalars(scalars, fieldN);\n if (scalars.length > points.length)\n throw new Error('array of scalars must be smaller than array of points');\n let res = zero;\n for (let i = 0; i < chunks; i++) {\n // No need to double if accumulator is still zero.\n if (res !== zero) for (let j = 0; j < windowSize; j++) res = res.double();\n const shiftBy = BigInt(chunks * windowSize - (i + 1) * windowSize);\n for (let j = 0; j < scalars.length; j++) {\n const n = scalars[j];\n const curr = Number((n >> shiftBy) & MASK);\n if (!curr) continue; // skip zero scalars chunks\n res = res.add(tables[j][curr - 1]);\n }\n }\n return res;\n };\n}\n\nexport type ValidCurveParams<T> = {\n p: bigint;\n n: bigint;\n h: bigint;\n a: T;\n b?: T;\n d?: T;\n Gx: T;\n Gy: T;\n};\n\nfunction createField<T>(order: bigint, field?: IField<T>, isLE?: boolean): IField<T> {\n if (field) {\n if (field.ORDER !== order) throw new Error('Field.ORDER must match order: Fp == p, Fn == n');\n validateField(field);\n return field;\n } else {\n return Field(order, { isLE }) as unknown as IField<T>;\n }\n}\nexport type FpFn<T> = { Fp: IField<T>; Fn: IField<bigint> };\n\n/** Validates CURVE opts and creates fields */\nexport function createCurveFields<T>(\n type: 'weierstrass' | 'edwards',\n CURVE: ValidCurveParams<T>,\n curveOpts: Partial<FpFn<T>> = {},\n FpFnLE?: boolean\n): FpFn<T> & { CURVE: ValidCurveParams<T> } {\n if (FpFnLE === undefined) FpFnLE = type === 'edwards';\n if (!CURVE || typeof CURVE !== 'object') throw new Error(`expected valid ${type} CURVE object`);\n for (const p of ['p', 'n', 'h'] as const) {\n const val = CURVE[p];\n if (!(typeof val === 'bigint' && val > _0n))\n throw new Error(`CURVE.${p} must be positive bigint`);\n }\n const Fp = createField(CURVE.p, curveOpts.Fp, FpFnLE);\n const Fn = createField(CURVE.n, curveOpts.Fn, FpFnLE);\n const _b: 'b' | 'd' = type === 'weierstrass' ? 'b' : 'd';\n const params = ['Gx', 'Gy', 'a', _b] as const;\n for (const p of params) {\n // @ts-ignore\n if (!Fp.isValid(CURVE[p]))\n throw new Error(`CURVE.${p} must be valid field element of CURVE.Fp`);\n }\n CURVE = Object.freeze(Object.assign({}, CURVE));\n return { CURVE, Fp, Fn };\n}\n\ntype KeygenFn = (\n seed?: Uint8Array,\n isCompressed?: boolean\n) => { secretKey: Uint8Array; publicKey: Uint8Array };\nexport function createKeygen(\n randomSecretKey: Function,\n getPublicKey: Signer['getPublicKey']\n): KeygenFn {\n return function keygen(seed?: Uint8Array) {\n const secretKey = randomSecretKey(seed);\n return { secretKey, publicKey: getPublicKey(secretKey) };\n };\n}\n","/**\n * Twisted Edwards curve. The formula is: ax² + y² = 1 + dx²y².\n * For design rationale of types / exports, see weierstrass module documentation.\n * Untwisted Edwards curves exist, but they aren't used in real-world protocols.\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport {\n abool,\n abytes,\n aInRange,\n bytesToHex,\n bytesToNumberLE,\n concatBytes,\n copyBytes,\n hexToBytes,\n isBytes,\n memoized,\n notImplemented,\n validateObject,\n randomBytes as wcRandomBytes,\n type FHash,\n type Signer,\n} from '../utils.ts';\nimport {\n createCurveFields,\n createKeygen,\n normalizeZ,\n wNAF,\n type AffinePoint,\n type CurveLengths,\n type CurvePoint,\n type CurvePointCons,\n} from './curve.ts';\nimport { type IField } from './modular.ts';\n\n// Be friendly to bad ECMAScript parsers by not using bigint literals\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _8n = BigInt(8);\n\n/** Instance of Extended Point with coordinates in X, Y, Z, T. */\nexport interface EdwardsPoint extends CurvePoint<bigint, EdwardsPoint> {\n /** extended X coordinate. Different from affine x. */\n readonly X: bigint;\n /** extended Y coordinate. Different from affine y. */\n readonly Y: bigint;\n /** extended Z coordinate */\n readonly Z: bigint;\n /** extended T coordinate */\n readonly T: bigint;\n}\n/** Static methods of Extended Point with coordinates in X, Y, Z, T. */\nexport interface EdwardsPointCons extends CurvePointCons<EdwardsPoint> {\n new (X: bigint, Y: bigint, Z: bigint, T: bigint): EdwardsPoint;\n CURVE(): EdwardsOpts;\n fromBytes(bytes: Uint8Array, zip215?: boolean): EdwardsPoint;\n fromHex(hex: string, zip215?: boolean): EdwardsPoint;\n}\n\n/**\n * Twisted Edwards curve options.\n *\n * * a: formula param\n * * d: formula param\n * * p: prime characteristic (order) of finite field, in which arithmetics is done\n * * n: order of prime subgroup a.k.a total amount of valid curve points\n * * h: cofactor. h*n is group order; n is subgroup order\n * * Gx: x coordinate of generator point a.k.a. base point\n * * Gy: y coordinate of generator point\n */\nexport type EdwardsOpts = Readonly<{\n p: bigint;\n n: bigint;\n h: bigint;\n a: bigint;\n d: bigint;\n Gx: bigint;\n Gy: bigint;\n}>;\n\n/**\n * Extra curve options for Twisted Edwards.\n *\n * * Fp: redefined Field over curve.p\n * * Fn: redefined Field over curve.n\n * * uvRatio: helper function for decompression, calculating √(u/v)\n */\nexport type EdwardsExtraOpts = Partial<{\n Fp: IField<bigint>;\n Fn: IField<bigint>;\n FpFnLE: boolean;\n uvRatio: (u: bigint, v: bigint) => { isValid: boolean; value: bigint };\n}>;\n\n/**\n * EdDSA (Edwards Digital Signature algorithm) options.\n *\n * * hash: hash function used to hash secret keys and messages\n * * adjustScalarBytes: clears bits to get valid field element\n * * domain: Used for hashing\n * * mapToCurve: for hash-to-curve standard\n * * prehash: RFC 8032 pre-hashing of messages to sign() / verify()\n * * randomBytes: function generating random bytes, used for randomSecretKey\n */\nexport type EdDSAOpts = Partial<{\n adjustScalarBytes: (bytes: Uint8Array) => Uint8Array;\n domain: (data: Uint8Array, ctx: Uint8Array, phflag: boolean) => Uint8Array;\n mapToCurve: (scalar: bigint[]) => AffinePoint<bigint>;\n prehash: FHash;\n randomBytes: (bytesLength?: number) => Uint8Array;\n}>;\n\n/**\n * EdDSA (Edwards Digital Signature algorithm) interface.\n *\n * Allows to create and verify signatures, create public and secret keys.\n */\nexport interface EdDSA {\n keygen: (seed?: Uint8Array) => { secretKey: Uint8Array; publicKey: Uint8Array };\n getPublicKey: (secretKey: Uint8Array) => Uint8Array;\n sign: (\n message: Uint8Array,\n secretKey: Uint8Array,\n options?: { context?: Uint8Array }\n ) => Uint8Array;\n verify: (\n sig: Uint8Array,\n message: Uint8Array,\n publicKey: Uint8Array,\n options?: { context?: Uint8Array; zip215: boolean }\n ) => boolean;\n Point: EdwardsPointCons;\n utils: {\n randomSecretKey: (seed?: Uint8Array) => Uint8Array;\n isValidSecretKey: (secretKey: Uint8Array) => boolean;\n isValidPublicKey: (publicKey: Uint8Array, zip215?: boolean) => boolean;\n\n /**\n * Converts ed public key to x public key.\n *\n * There is NO `fromMontgomery`:\n * - There are 2 valid ed25519 points for every x25519, with flipped coordinate\n * - Sometimes there are 0 valid ed25519 points, because x25519 *additionally*\n * accepts inputs on the quadratic twist, which can't be moved to ed25519\n *\n * @example\n * ```js\n * const someonesPub_ed = ed25519.getPublicKey(ed25519.utils.randomSecretKey());\n * const someonesPub = ed25519.utils.toMontgomery(someonesPub);\n * const aPriv = x25519.utils.randomSecretKey();\n * const shared = x25519.getSharedSecret(aPriv, someonesPub)\n * ```\n */\n toMontgomery: (publicKey: Uint8Array) => Uint8Array;\n /**\n * Converts ed secret key to x secret key.\n * @example\n * ```js\n * const someonesPub = x25519.getPublicKey(x25519.utils.randomSecretKey());\n * const aPriv_ed = ed25519.utils.randomSecretKey();\n * const aPriv = ed25519.utils.toMontgomerySecret(aPriv_ed);\n * const shared = x25519.getSharedSecret(aPriv, someonesPub)\n * ```\n */\n toMontgomerySecret: (secretKey: Uint8Array) => Uint8Array;\n getExtendedPublicKey: (key: Uint8Array) => {\n head: Uint8Array;\n prefix: Uint8Array;\n scalar: bigint;\n point: EdwardsPoint;\n pointBytes: Uint8Array;\n };\n };\n lengths: CurveLengths;\n}\n\nfunction isEdValidXY(Fp: IField<bigint>, CURVE: EdwardsOpts, x: bigint, y: bigint): boolean {\n const x2 = Fp.sqr(x);\n const y2 = Fp.sqr(y);\n const left = Fp.add(Fp.mul(CURVE.a, x2), y2);\n const right = Fp.add(Fp.ONE, Fp.mul(CURVE.d, Fp.mul(x2, y2)));\n return Fp.eql(left, right);\n}\n\nexport function edwards(params: EdwardsOpts, extraOpts: EdwardsExtraOpts = {}): EdwardsPointCons {\n const validated = createCurveFields('edwards', params, extraOpts, extraOpts.FpFnLE);\n const { Fp, Fn } = validated;\n let CURVE = validated.CURVE as EdwardsOpts;\n const { h: cofactor } = CURVE;\n validateObject(extraOpts, {}, { uvRatio: 'function' });\n\n // Important:\n // There are some places where Fp.BYTES is used instead of nByteLength.\n // So far, everything has been tested with curves of Fp.BYTES == nByteLength.\n // TODO: test and find curves which behave otherwise.\n const MASK = _2n << (BigInt(Fn.BYTES * 8) - _1n);\n const modP = (n: bigint) => Fp.create(n); // Function overrides\n\n // sqrt(u/v)\n const uvRatio =\n extraOpts.uvRatio ||\n ((u: bigint, v: bigint) => {\n try {\n return { isValid: true, value: Fp.sqrt(Fp.div(u, v)) };\n } catch (e) {\n return { isValid: false, value: _0n };\n }\n });\n\n // Validate whether the passed curve params are valid.\n // equation ax² + y² = 1 + dx²y² should work for generator point.\n if (!isEdValidXY(Fp, CURVE, CURVE.Gx, CURVE.Gy))\n throw new Error('bad curve params: generator point');\n\n /**\n * Asserts coordinate is valid: 0 <= n < MASK.\n * Coordinates >= Fp.ORDER are allowed for zip215.\n */\n function acoord(title: string, n: bigint, banZero = false) {\n const min = banZero ? _1n : _0n;\n aInRange('coordinate ' + title, n, min, MASK);\n return n;\n }\n\n function aedpoint(other: unknown) {\n if (!(other instanceof Point)) throw new Error('EdwardsPoint expected');\n }\n // Converts Extended point to default (x, y) coordinates.\n // Can accept precomputed Z^-1 - for example, from invertBatch.\n const toAffineMemo = memoized((p: Point, iz?: bigint): AffinePoint<bigint> => {\n const { X, Y, Z } = p;\n const is0 = p.is0();\n if (iz == null) iz = is0 ? _8n : (Fp.inv(Z) as bigint); // 8 was chosen arbitrarily\n const x = modP(X * iz);\n const y = modP(Y * iz);\n const zz = Fp.mul(Z, iz);\n if (is0) return { x: _0n, y: _1n };\n if (zz !== _1n) throw new Error('invZ was invalid');\n return { x, y };\n });\n const assertValidMemo = memoized((p: Point) => {\n const { a, d } = CURVE;\n if (p.is0()) throw new Error('bad point: ZERO'); // TODO: optimize, with vars below?\n // Equation in affine coordinates: ax² + y² = 1 + dx²y²\n // Equation in projective coordinates (X/Z, Y/Z, Z): (aX² + Y²)Z² = Z⁴ + dX²Y²\n const { X, Y, Z, T } = p;\n const X2 = modP(X * X); // X²\n const Y2 = modP(Y * Y); // Y²\n const Z2 = modP(Z * Z); // Z²\n const Z4 = modP(Z2 * Z2); // Z⁴\n const aX2 = modP(X2 * a); // aX²\n const left = modP(Z2 * modP(aX2 + Y2)); // (aX² + Y²)Z²\n const right = modP(Z4 + modP(d * modP(X2 * Y2))); // Z⁴ + dX²Y²\n if (left !== right) throw new Error('bad point: equation left != right (1)');\n // In Extended coordinates we also have T, which is x*y=T/Z: check X*Y == Z*T\n const XY = modP(X * Y);\n const ZT = modP(Z * T);\n if (XY !== ZT) throw new Error('bad point: equation left != right (2)');\n return true;\n });\n\n // Extended Point works in extended coordinates: (X, Y, Z, T) ∋ (x=X/Z, y=Y/Z, T=xy).\n // https://en.wikipedia.org/wiki/Twisted_Edwards_curve#Extended_coordinates\n class Point implements EdwardsPoint {\n // base / generator point\n static readonly BASE = new Point(CURVE.Gx, CURVE.Gy, _1n, modP(CURVE.Gx * CURVE.Gy));\n // zero / infinity / identity point\n static readonly ZERO = new Point(_0n, _1n, _1n, _0n); // 0, 1, 1, 0\n // math field\n static readonly Fp = Fp;\n // scalar field\n static readonly Fn = Fn;\n\n readonly X: bigint;\n readonly Y: bigint;\n readonly Z: bigint;\n readonly T: bigint;\n\n constructor(X: bigint, Y: bigint, Z: bigint, T: bigint) {\n this.X = acoord('x', X);\n this.Y = acoord('y', Y);\n this.Z = acoord('z', Z, true);\n this.T = acoord('t', T);\n Object.freeze(this);\n }\n\n static CURVE(): EdwardsOpts {\n return CURVE;\n }\n\n static fromAffine(p: AffinePoint<bigint>): Point {\n if (p instanceof Point) throw new Error('extended point not allowed');\n const { x, y } = p || {};\n acoord('x', x);\n acoord('y', y);\n return new Point(x, y, _1n, modP(x * y));\n }\n\n // Uses algo from RFC8032 5.1.3.\n static fromBytes(bytes: Uint8Array, zip215 = false): Point {\n const len = Fp.BYTES;\n const { a, d } = CURVE;\n bytes = copyBytes(abytes(bytes, len, 'point'));\n abool(zip215, 'zip215');\n const normed = copyBytes(bytes); // copy again, we'll manipulate it\n const lastByte = bytes[len - 1]; // select last byte\n normed[len - 1] = lastByte & ~0x80; // clear last bit\n const y = bytesToNumberLE(normed);\n\n // zip215=true is good for consensus-critical apps. =false follows RFC8032 / NIST186-5.\n // RFC8032 prohibits >= p, but ZIP215 doesn't\n // zip215=true: 0 <= y < MASK (2^256 for ed25519)\n // zip215=false: 0 <= y < P (2^255-19 for ed25519)\n const max = zip215 ? MASK : Fp.ORDER;\n aInRange('point.y', y, _0n, max);\n\n // Ed25519: x² = (y²-1)/(dy²+1) mod p. Ed448: x² = (y²-1)/(dy²-1) mod p. Generic case:\n // ax²+y²=1+dx²y² => y²-1=dx²y²-ax² => y²-1=x²(dy²-a) => x²=(y²-1)/(dy²-a)\n const y2 = modP(y * y); // denominator is always non-0 mod p.\n const u = modP(y2 - _1n); // u = y² - 1\n const v = modP(d * y2 - a); // v = d y² + 1.\n let { isValid, value: x } = uvRatio(u, v); // √(u/v)\n if (!isValid) throw new Error('bad point: invalid y coordinate');\n const isXOdd = (x & _1n) === _1n; // There are 2 square roots. Use x_0 bit to select proper\n const isLastByteOdd = (lastByte & 0x80) !== 0; // x_0, last bit\n if (!zip215 && x === _0n && isLastByteOdd)\n // if x=0 and x_0 = 1, fail\n throw new Error('bad point: x=0 and x_0=1');\n if (isLastByteOdd !== isXOdd) x = modP(-x); // if x_0 != x mod 2, set x = p-x\n return Point.fromAffine({ x, y });\n }\n\n static fromHex(hex: string, zip215 = false): Point {\n return Point.fromBytes(hexToBytes(hex), zip215);\n }\n\n get x(): bigint {\n return this.toAffine().x;\n }\n get y(): bigint {\n return this.toAffine().y;\n }\n\n precompute(windowSize: number = 8, isLazy = true) {\n wnaf.createCache(this, windowSize);\n if (!isLazy) this.multiply(_2n); // random number\n return this;\n }\n\n // Useful in fromAffine() - not for fromBytes(), which always created valid points.\n assertValidity(): void {\n assertValidMemo(this);\n }\n\n // Compare one point to another.\n equals(other: Point): boolean {\n aedpoint(other);\n const { X: X1, Y: Y1, Z: Z1 } = this;\n const { X: X2, Y: Y2, Z: Z2 } = other;\n const X1Z2 = modP(X1 * Z2);\n const X2Z1 = modP(X2 * Z1);\n const Y1Z2 = modP(Y1 * Z2);\n const Y2Z1 = modP(Y2 * Z1);\n return X1Z2 === X2Z1 && Y1Z2 === Y2Z1;\n }\n\n is0(): boolean {\n return this.equals(Point.ZERO);\n }\n\n negate(): Point {\n // Flips point sign to a negative one (-x, y in affine coords)\n return new Point(modP(-this.X), this.Y, this.Z, modP(-this.T));\n }\n\n // Fast algo for doubling Extended Point.\n // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended.html#doubling-dbl-2008-hwcd\n // Cost: 4M + 4S + 1*a + 6add + 1*2.\n double(): Point {\n const { a } = CURVE;\n const { X: X1, Y: Y1, Z: Z1 } = this;\n const A = modP(X1 * X1); // A = X12\n const B = modP(Y1 * Y1); // B = Y12\n const C = modP(_2n * modP(Z1 * Z1)); // C = 2*Z12\n const D = modP(a * A); // D = a*A\n const x1y1 = X1 + Y1;\n const E = modP(modP(x1y1 * x1y1) - A - B); // E = (X1+Y1)2-A-B\n const G = D + B; // G = D+B\n const F = G - C; // F = G-C\n const H = D - B; // H = D-B\n const X3 = modP(E * F); // X3 = E*F\n const Y3 = modP(G * H); // Y3 = G*H\n const T3 = modP(E * H); // T3 = E*H\n const Z3 = modP(F * G); // Z3 = F*G\n return new Point(X3, Y3, Z3, T3);\n }\n\n // Fast algo for adding 2 Extended Points.\n // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended.html#addition-add-2008-hwcd\n // Cost: 9M + 1*a + 1*d + 7add.\n add(other: Point) {\n aedpoint(other);\n const { a, d } = CURVE;\n const { X: X1, Y: Y1, Z: Z1, T: T1 } = this;\n const { X: X2, Y: Y2, Z: Z2, T: T2 } = other;\n const A = modP(X1 * X2); // A = X1*X2\n const B = modP(Y1 * Y2); // B = Y1*Y2\n const C = modP(T1 * d * T2); // C = T1*d*T2\n const D = modP(Z1 * Z2); // D = Z1*Z2\n const E = modP((X1 + Y1) * (X2 + Y2) - A - B); // E = (X1+Y1)*(X2+Y2)-A-B\n const F = D - C; // F = D-C\n const G = D + C; // G = D+C\n const H = modP(B - a * A); // H = B-a*A\n const X3 = modP(E * F); // X3 = E*F\n const Y3 = modP(G * H); // Y3 = G*H\n const T3 = modP(E * H); // T3 = E*H\n const Z3 = modP(F * G); // Z3 = F*G\n return new Point(X3, Y3, Z3, T3);\n }\n\n subtract(other: Point): Point {\n return this.add(other.negate());\n }\n\n // Constant-time multiplication.\n multiply(scalar: bigint): Point {\n // 1 <= scalar < L\n if (!Fn.isValidNot0(scalar)) throw new Error('invalid scalar: expected 1 <= sc < curve.n');\n const { p, f } = wnaf.cached(this, scalar, (p) => normalizeZ(Point, p));\n return normalizeZ(Point, [p, f])[0];\n }\n\n // Non-constant-time multiplication. Uses double-and-add algorithm.\n // It's faster, but should only be used when you don't care about\n // an exposed private key e.g. sig verification.\n // Does NOT allow scalars higher than CURVE.n.\n // Accepts optional accumulator to merge with multiply (important for sparse scalars)\n multiplyUnsafe(scalar: bigint, acc = Point.ZERO): Point {\n // 0 <= scalar < L\n if (!Fn.isValid(scalar)) throw new Error('invalid scalar: expected 0 <= sc < curve.n');\n if (scalar === _0n) return Point.ZERO;\n if (this.is0() || scalar === _1n) return this;\n return wnaf.unsafe(this, scalar, (p) => normalizeZ(Point, p), acc);\n }\n\n // Checks if point is of small order.\n // If you add something to small order point, you will have \"dirty\"\n // point with torsion component.\n // Multiplies point by cofactor and checks if the result is 0.\n isSmallOrder(): boolean {\n return this.multiplyUnsafe(cofactor).is0();\n }\n\n // Multiplies point by curve order and checks if the result is 0.\n // Returns `false` is the point is dirty.\n isTorsionFree(): boolean {\n return wnaf.unsafe(this, CURVE.n).is0();\n }\n\n // Converts Extended point to default (x, y) coordinates.\n // Can accept precomputed Z^-1 - for example, from invertBatch.\n toAffine(invertedZ?: bigint): AffinePoint<bigint> {\n return toAffineMemo(this, invertedZ);\n }\n\n clearCofactor(): Point {\n if (cofactor === _1n) return this;\n return this.multiplyUnsafe(cofactor);\n }\n\n toBytes(): Uint8Array {\n const { x, y } = this.toAffine();\n // Fp.toBytes() allows non-canonical encoding of y (>= p).\n const bytes = Fp.toBytes(y);\n // Each y has 2 valid points: (x, y), (x,-y).\n // When compressing, it's enough to store y and use the last byte to encode sign of x\n bytes[bytes.length - 1] |= x & _1n ? 0x80 : 0;\n return bytes;\n }\n toHex(): string {\n return bytesToHex(this.toBytes());\n }\n\n toString() {\n return `<Point ${this.is0() ? 'ZERO' : this.toHex()}>`;\n }\n }\n const wnaf = new wNAF(Point, Fn.BITS);\n Point.BASE.precompute(8); // Enable precomputes. Slows down first publicKey computation by 20ms.\n return Point;\n}\n\n/**\n * Base class for prime-order points like Ristretto255 and Decaf448.\n * These points eliminate cofactor issues by representing equivalence classes\n * of Edwards curve points.\n */\nexport abstract class PrimeEdwardsPoint<T extends PrimeEdwardsPoint<T>>\n implements CurvePoint<bigint, T>\n{\n static BASE: PrimeEdwardsPoint<any>;\n static ZERO: PrimeEdwardsPoint<any>;\n static Fp: IField<bigint>;\n static Fn: IField<bigint>;\n\n protected readonly ep: EdwardsPoint;\n\n constructor(ep: EdwardsPoint) {\n this.ep = ep;\n }\n\n // Abstract methods that must be implemented by subclasses\n abstract toBytes(): Uint8Array;\n abstract equals(other: T): boolean;\n\n // Static methods that must be implemented by subclasses\n static fromBytes(_bytes: Uint8Array): any {\n notImplemented();\n }\n\n static fromHex(_hex: string): any {\n notImplemented();\n }\n\n get x(): bigint {\n return this.toAffine().x;\n }\n get y(): bigint {\n return this.toAffine().y;\n }\n\n // Common implementations\n clearCofactor(): T {\n // no-op for prime-order groups\n return this as any;\n }\n\n assertValidity(): void {\n this.ep.assertValidity();\n }\n\n toAffine(invertedZ?: bigint): AffinePoint<bigint> {\n return this.ep.toAffine(invertedZ);\n }\n\n toHex(): string {\n return bytesToHex(this.toBytes());\n }\n\n toString(): string {\n return this.toHex();\n }\n\n isTorsionFree(): boolean {\n return true;\n }\n\n isSmallOrder(): boolean {\n return false;\n }\n\n add(other: T): T {\n this.assertSame(other);\n return this.init(this.ep.add(other.ep));\n }\n\n subtract(other: T): T {\n this.assertSame(other);\n return this.init(this.ep.subtract(other.ep));\n }\n\n multiply(scalar: bigint): T {\n return this.init(this.ep.multiply(scalar));\n }\n\n multiplyUnsafe(scalar: bigint): T {\n return this.init(this.ep.multiplyUnsafe(scalar));\n }\n\n double(): T {\n return this.init(this.ep.double());\n }\n\n negate(): T {\n return this.init(this.ep.negate());\n }\n\n precompute(windowSize?: number, isLazy?: boolean): T {\n return this.init(this.ep.precompute(windowSize, isLazy));\n }\n\n // Helper methods\n abstract is0(): boolean;\n protected abstract assertSame(other: T): void;\n protected abstract init(ep: EdwardsPoint): T;\n}\n\n/**\n * Initializes EdDSA signatures over given Edwards curve.\n */\nexport function eddsa(Point: EdwardsPointCons, cHash: FHash, eddsaOpts: EdDSAOpts = {}): EdDSA {\n if (typeof cHash !== 'function') throw new Error('\"hash\" function param is required');\n validateObject(\n eddsaOpts,\n {},\n {\n adjustScalarBytes: 'function',\n randomBytes: 'function',\n domain: 'function',\n prehash: 'function',\n mapToCurve: 'function',\n }\n );\n\n const { prehash } = eddsaOpts;\n const { BASE, Fp, Fn } = Point;\n\n const randomBytes = eddsaOpts.randomBytes || wcRandomBytes;\n const adjustScalarBytes = eddsaOpts.adjustScalarBytes || ((bytes: Uint8Array) => bytes);\n const domain =\n eddsaOpts.domain ||\n ((data: Uint8Array, ctx: Uint8Array, phflag: boolean) => {\n abool(phflag, 'phflag');\n if (ctx.length || phflag) throw new Error('Contexts/pre-hash are not supported');\n return data;\n }); // NOOP\n\n // Little-endian SHA512 with modulo n\n function modN_LE(hash: Uint8Array): bigint {\n return Fn.create(bytesToNumberLE(hash)); // Not Fn.fromBytes: it has length limit\n }\n\n // Get the hashed private scalar per RFC8032 5.1.5\n function getPrivateScalar(key: Uint8Array) {\n const len = lengths.secretKey;\n abytes(key, lengths.secretKey, 'secretKey');\n // Hash private key with curve's hash function to produce uniformingly random input\n // Check byte lengths: ensure(64, h(ensure(32, key)))\n const hashed = abytes(cHash(key), 2 * len, 'hashedSecretKey');\n const head = adjustScalarBytes(hashed.slice(0, len)); // clear first half bits, produce FE\n const prefix = hashed.slice(len, 2 * len); // second half is called key prefix (5.1.6)\n const scalar = modN_LE(head); // The actual private scalar\n return { head, prefix, scalar };\n }\n\n /** Convenience method that creates public key from scalar. RFC8032 5.1.5 */\n function getExtendedPublicKey(secretKey: Uint8Array) {\n const { head, prefix, scalar } = getPrivateScalar(secretKey);\n const point = BASE.multiply(scalar); // Point on Edwards curve aka public key\n const pointBytes = point.toBytes();\n return { head, prefix, scalar, point, pointBytes };\n }\n\n /** Calculates EdDSA pub key. RFC8032 5.1.5. */\n function getPublicKey(secretKey: Uint8Array): Uint8Array {\n return getExtendedPublicKey(secretKey).pointBytes;\n }\n\n // int('LE', SHA512(dom2(F, C) || msgs)) mod N\n function hashDomainToScalar(context: Uint8Array = Uint8Array.of(), ...msgs: Uint8Array[]) {\n const msg = concatBytes(...msgs);\n return modN_LE(cHash(domain(msg, abytes(context, undefined, 'context'), !!prehash)));\n }\n\n /** Signs message with secret key. RFC8032 5.1.6 */\n function sign(\n msg: Uint8Array,\n secretKey: Uint8Array,\n options: { context?: Uint8Array } = {}\n ): Uint8Array {\n msg = abytes(msg, undefined, 'message');\n if (prehash) msg = prehash(msg); // for ed25519ph etc.\n const { prefix, scalar, pointBytes } = getExtendedPublicKey(secretKey);\n const r = hashDomainToScalar(options.context, prefix, msg); // r = dom2(F, C) || prefix || PH(M)\n const R = BASE.multiply(r).toBytes(); // R = rG\n const k = hashDomainToScalar(options.context, R, pointBytes, msg); // R || A || PH(M)\n const s = Fn.create(r + k * scalar); // S = (r + k * s) mod L\n if (!Fn.isValid(s)) throw new Error('sign failed: invalid s'); // 0 <= s < L\n const rs = concatBytes(R, Fn.toBytes(s));\n return abytes(rs, lengths.signature, 'result');\n }\n\n // verification rule is either zip215 or rfc8032 / nist186-5. Consult fromHex:\n const verifyOpts: { context?: Uint8Array; zip215?: boolean } = { zip215: true };\n\n /**\n * Verifies EdDSA signature against message and public key. RFC8032 5.1.7.\n * An extended group equation is checked.\n */\n function verify(\n sig: Uint8Array,\n msg: Uint8Array,\n publicKey: Uint8Array,\n options = verifyOpts\n ): boolean {\n const { context, zip215 } = options;\n const len = lengths.signature;\n sig = abytes(sig, len, 'signature');\n msg = abytes(msg, undefined, 'message');\n publicKey = abytes(publicKey, lengths.publicKey, 'publicKey');\n if (zip215 !== undefined) abool(zip215, 'zip215');\n if (prehash) msg = prehash(msg); // for ed25519ph, etc\n\n const mid = len / 2;\n const r = sig.subarray(0, mid);\n const s = bytesToNumberLE(sig.subarray(mid, len));\n let A, R, SB;\n try {\n // zip215=true is good for consensus-critical apps. =false follows RFC8032 / NIST186-5.\n // zip215=true: 0 <= y < MASK (2^256 for ed25519)\n // zip215=false: 0 <= y < P (2^255-19 for ed25519)\n A = Point.fromBytes(publicKey, zip215);\n R = Point.fromBytes(r, zip215);\n SB = BASE.multiplyUnsafe(s); // 0 <= s < l is done inside\n } catch (error) {\n return false;\n }\n if (!zip215 && A.isSmallOrder()) return false; // zip215 allows public keys of small order\n\n const k = hashDomainToScalar(context, R.toBytes(), A.toBytes(), msg);\n const RkA = R.add(A.multiplyUnsafe(k));\n // Extended group equation\n // [8][S]B = [8]R + [8][k]A'\n return RkA.subtract(SB).clearCofactor().is0();\n }\n\n const _size = Fp.BYTES; // 32 for ed25519, 57 for ed448\n const lengths = {\n secretKey: _size,\n publicKey: _size,\n signature: 2 * _size,\n seed: _size,\n };\n function randomSecretKey(seed = randomBytes(lengths.seed)): Uint8Array {\n return abytes(seed, lengths.seed, 'seed');\n }\n\n function isValidSecretKey(key: Uint8Array): boolean {\n return isBytes(key) && key.length === Fn.BYTES;\n }\n\n function isValidPublicKey(key: Uint8Array, zip215?: boolean): boolean {\n try {\n return !!Point.fromBytes(key, zip215);\n } catch (error) {\n return false;\n }\n }\n\n const utils = {\n getExtendedPublicKey,\n randomSecretKey,\n isValidSecretKey,\n isValidPublicKey,\n /**\n * Converts ed public key to x public key. Uses formula:\n * - ed25519:\n * - `(u, v) = ((1+y)/(1-y), sqrt(-486664)*u/x)`\n * - `(x, y) = (sqrt(-486664)*u/v, (u-1)/(u+1))`\n * - ed448:\n * - `(u, v) = ((y-1)/(y+1), sqrt(156324)*u/x)`\n * - `(x, y) = (sqrt(156324)*u/v, (1+u)/(1-u))`\n */\n toMontgomery(publicKey: Uint8Array): Uint8Array {\n const { y } = Point.fromBytes(publicKey);\n const size = lengths.publicKey;\n const is25519 = size === 32;\n if (!is25519 && size !== 57) throw new Error('only defined for 25519 and 448');\n const u = is25519 ? Fp.div(_1n + y, _1n - y) : Fp.div(y - _1n, y + _1n);\n return Fp.toBytes(u);\n },\n toMontgomerySecret(secretKey: Uint8Array): Uint8Array {\n const size = lengths.secretKey;\n abytes(secretKey, size);\n const hashed = cHash(secretKey.subarray(0, size));\n return adjustScalarBytes(hashed).subarray(0, size);\n },\n };\n\n return Object.freeze({\n keygen: createKeygen(randomSecretKey, getPublicKey),\n getPublicKey,\n sign,\n verify,\n utils,\n Point,\n lengths,\n }) satisfies Signer;\n}\n","/**\n * ed25519 Twisted Edwards curve with following addons:\n * - X25519 ECDH\n * - Ristretto cofactor elimination\n * - Elligator hash-to-group / point indistinguishability\n * @module\n */\n/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { sha512 } from '@noble/hashes/sha2.js';\nimport { abytes, concatBytes, hexToBytes } from '@noble/hashes/utils.js';\nimport { type AffinePoint } from './abstract/curve.ts';\nimport {\n eddsa,\n edwards,\n PrimeEdwardsPoint,\n type EdDSA,\n type EdDSAOpts,\n type EdwardsOpts,\n type EdwardsPoint,\n type EdwardsPointCons,\n} from './abstract/edwards.ts';\nimport {\n _DST_scalar,\n createHasher,\n expand_message_xmd,\n type H2CDSTOpts,\n type H2CHasher,\n type H2CHasherBase,\n} from './abstract/hash-to-curve.ts';\nimport {\n FpInvertBatch,\n FpSqrtEven,\n isNegativeLE,\n mod,\n pow2,\n type IField,\n} from './abstract/modular.ts';\nimport { montgomery, type MontgomeryECDH } from './abstract/montgomery.ts';\nimport { createORPF, type OPRF } from './abstract/oprf.ts';\nimport { asciiToBytes, bytesToNumberLE, equalBytes } from './utils.ts';\n\n// prettier-ignore\nconst _0n = /* @__PURE__ */ BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = /* @__PURE__ */ BigInt(3);\n// prettier-ignore\nconst _5n = BigInt(5), _8n = BigInt(8);\n\n// P = 2n**255n - 19n\nconst ed25519_CURVE_p = BigInt(\n '0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed'\n);\n// N = 2n**252n + 27742317777372353535851937790883648493n\n// a = Fp.create(BigInt(-1))\n// d = -121665/121666 a.k.a. Fp.neg(121665 * Fp.inv(121666))\nconst ed25519_CURVE: EdwardsOpts = /* @__PURE__ */ (() => ({\n p: ed25519_CURVE_p,\n n: BigInt('0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed'),\n h: _8n,\n a: BigInt('0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec'),\n d: BigInt('0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3'),\n Gx: BigInt('0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a'),\n Gy: BigInt('0x6666666666666666666666666666666666666666666666666666666666666658'),\n}))();\n\nfunction ed25519_pow_2_252_3(x: bigint) {\n // prettier-ignore\n const _10n = BigInt(10), _20n = BigInt(20), _40n = BigInt(40), _80n = BigInt(80);\n const P = ed25519_CURVE_p;\n const x2 = (x * x) % P;\n const b2 = (x2 * x) % P; // x^3, 11\n const b4 = (pow2(b2, _2n, P) * b2) % P; // x^15, 1111\n const b5 = (pow2(b4, _1n, P) * x) % P; // x^31\n const b10 = (pow2(b5, _5n, P) * b5) % P;\n const b20 = (pow2(b10, _10n, P) * b10) % P;\n const b40 = (pow2(b20, _20n, P) * b20) % P;\n const b80 = (pow2(b40, _40n, P) * b40) % P;\n const b160 = (pow2(b80, _80n, P) * b80) % P;\n const b240 = (pow2(b160, _80n, P) * b80) % P;\n const b250 = (pow2(b240, _10n, P) * b10) % P;\n const pow_p_5_8 = (pow2(b250, _2n, P) * x) % P;\n // ^ To pow to (p+3)/8, multiply it by x.\n return { pow_p_5_8, b2 };\n}\n\nfunction adjustScalarBytes(bytes: Uint8Array): Uint8Array {\n // Section 5: For X25519, in order to decode 32 random bytes as an integer scalar,\n // set the three least significant bits of the first byte\n bytes[0] &= 248; // 0b1111_1000\n // and the most significant bit of the last to zero,\n bytes[31] &= 127; // 0b0111_1111\n // set the second most significant bit of the last byte to 1\n bytes[31] |= 64; // 0b0100_0000\n return bytes;\n}\n\n// √(-1) aka √(a) aka 2^((p-1)/4)\n// Fp.sqrt(Fp.neg(1))\nconst ED25519_SQRT_M1 = /* @__PURE__ */ BigInt(\n '19681161376707505956807079304988542015446066515923890162744021073123829784752'\n);\n// sqrt(u/v)\nfunction uvRatio(u: bigint, v: bigint): { isValid: boolean; value: bigint } {\n const P = ed25519_CURVE_p;\n const v3 = mod(v * v * v, P); // v³\n const v7 = mod(v3 * v3 * v, P); // v⁷\n // (p+3)/8 and (p-5)/8\n const pow = ed25519_pow_2_252_3(u * v7).pow_p_5_8;\n let x = mod(u * v3 * pow, P); // (uv³)(uv⁷)^(p-5)/8\n const vx2 = mod(v * x * x, P); // vx²\n const root1 = x; // First root candidate\n const root2 = mod(x * ED25519_SQRT_M1, P); // Second root candidate\n const useRoot1 = vx2 === u; // If vx² = u (mod p), x is a square root\n const useRoot2 = vx2 === mod(-u, P); // If vx² = -u, set x <-- x * 2^((p-1)/4)\n const noRoot = vx2 === mod(-u * ED25519_SQRT_M1, P); // There is no valid root, vx² = -u√(-1)\n if (useRoot1) x = root1;\n if (useRoot2 || noRoot) x = root2; // We return root2 anyway, for const-time\n if (isNegativeLE(x, P)) x = mod(-x, P);\n return { isValid: useRoot1 || useRoot2, value: x };\n}\n\nconst ed25519_Point = /* @__PURE__ */ edwards(ed25519_CURVE, { uvRatio });\nconst Fp = /* @__PURE__ */ (() => ed25519_Point.Fp)();\nconst Fn = /* @__PURE__ */ (() => ed25519_Point.Fn)();\n\nfunction ed25519_domain(data: Uint8Array, ctx: Uint8Array, phflag: boolean) {\n if (ctx.length > 255) throw new Error('Context is too big');\n return concatBytes(\n asciiToBytes('SigEd25519 no Ed25519 collisions'),\n new Uint8Array([phflag ? 1 : 0, ctx.length]),\n ctx,\n data\n );\n}\n\nfunction ed(opts: EdDSAOpts) {\n return eddsa(ed25519_Point, sha512, Object.assign({ adjustScalarBytes }, opts));\n}\n\n/**\n * ed25519 curve with EdDSA signatures.\n * @example\n * ```js\n * import { ed25519 } from '@noble/curves/ed25519.js';\n * const { secretKey, publicKey } = ed25519.keygen();\n * // const publicKey = ed25519.getPublicKey(secretKey);\n * const msg = new TextEncoder().encode('hello noble');\n * const sig = ed25519.sign(msg, secretKey);\n * const isValid = ed25519.verify(sig, msg, pub); // ZIP215\n * // RFC8032 / FIPS 186-5\n * const isValid2 = ed25519.verify(sig, msg, pub, { zip215: false });\n * ```\n */\nexport const ed25519: EdDSA = /* @__PURE__ */ ed({});\n/** Context version of ed25519 (ctx for domain separation). See {@link ed25519} */\nexport const ed25519ctx: EdDSA = /* @__PURE__ */ ed({ domain: ed25519_domain });\n/** Prehashed version of ed25519. See {@link ed25519} */\nexport const ed25519ph: EdDSA = /* @__PURE__ */ ed({ domain: ed25519_domain, prehash: sha512 });\n\n/**\n * ECDH using curve25519 aka x25519.\n * @example\n * ```js\n * import { x25519 } from '@noble/curves/ed25519.js';\n * const alice = x25519.keygen();\n * const bob = x25519.keygen();\n * const shared = x25519.getSharedSecret(alice.secretKey, bob.publicKey);\n * ```\n */\nexport const x25519: MontgomeryECDH = /* @__PURE__ */ (() => {\n const P = ed25519_CURVE_p;\n return montgomery({\n P,\n type: 'x25519',\n powPminus2: (x: bigint): bigint => {\n // x^(p-2) aka x^(2^255-21)\n const { pow_p_5_8, b2 } = ed25519_pow_2_252_3(x);\n return mod(pow2(pow_p_5_8, _3n, P) * b2, P);\n },\n adjustScalarBytes,\n });\n})();\n\n// Hash To Curve Elligator2 Map (NOTE: different from ristretto255 elligator)\n// NOTE: very important part is usage of FpSqrtEven for ELL2_C1_EDWARDS, since\n// SageMath returns different root first and everything falls apart\nconst ELL2_C1 = /* @__PURE__ */ (() => (ed25519_CURVE_p + _3n) / _8n)(); // 1. c1 = (q + 3) / 8 # Integer arithmetic\nconst ELL2_C2 = /* @__PURE__ */ (() => Fp.pow(_2n, ELL2_C1))(); // 2. c2 = 2^c1\nconst ELL2_C3 = /* @__PURE__ */ (() => Fp.sqrt(Fp.neg(Fp.ONE)))(); // 3. c3 = sqrt(-1)\n\n/**\n * RFC 9380 method `map_to_curve_elligator2_curve25519`. Experimental name: may be renamed later.\n * @private\n */\n// prettier-ignore\nexport function _map_to_curve_elligator2_curve25519(u: bigint): {\n xMn: bigint, xMd: bigint, yMn: bigint, yMd: bigint\n} {\n const ELL2_C4 = (ed25519_CURVE_p - _5n) / _8n; // 4. c4 = (q - 5) / 8 # Integer arithmetic\n const ELL2_J = BigInt(486662);\n\n let tv1 = Fp.sqr(u); // 1. tv1 = u^2\n tv1 = Fp.mul(tv1, _2n); // 2. tv1 = 2 * tv1\n let xd = Fp.add(tv1, Fp.ONE); // 3. xd = tv1 + 1 # Nonzero: -1 is square (mod p), tv1 is not\n let x1n = Fp.neg(ELL2_J); // 4. x1n = -J # x1 = x1n / xd = -J / (1 + 2 * u^2)\n let tv2 = Fp.sqr(xd); // 5. tv2 = xd^2\n let gxd = Fp.mul(tv2, xd); // 6. gxd = tv2 * xd # gxd = xd^3\n let gx1 = Fp.mul(tv1, ELL2_J);// 7. gx1 = J * tv1 # x1n + J * xd\n gx1 = Fp.mul(gx1, x1n); // 8. gx1 = gx1 * x1n # x1n^2 + J * x1n * xd\n gx1 = Fp.add(gx1, tv2); // 9. gx1 = gx1 + tv2 # x1n^2 + J * x1n * xd + xd^2\n gx1 = Fp.mul(gx1, x1n); // 10. gx1 = gx1 * x1n # x1n^3 + J * x1n^2 * xd + x1n * xd^2\n let tv3 = Fp.sqr(gxd); // 11. tv3 = gxd^2\n tv2 = Fp.sqr(tv3); // 12. tv2 = tv3^2 # gxd^4\n tv3 = Fp.mul(tv3, gxd); // 13. tv3 = tv3 * gxd # gxd^3\n tv3 = Fp.mul(tv3, gx1); // 14. tv3 = tv3 * gx1 # gx1 * gxd^3\n tv2 = Fp.mul(tv2, tv3); // 15. tv2 = tv2 * tv3 # gx1 * gxd^7\n let y11 = Fp.pow(tv2, ELL2_C4); // 16. y11 = tv2^c4 # (gx1 * gxd^7)^((p - 5) / 8)\n y11 = Fp.mul(y11, tv3); // 17. y11 = y11 * tv3 # gx1*gxd^3*(gx1*gxd^7)^((p-5)/8)\n let y12 = Fp.mul(y11, ELL2_C3); // 18. y12 = y11 * c3\n tv2 = Fp.sqr(y11); // 19. tv2 = y11^2\n tv2 = Fp.mul(tv2, gxd); // 20. tv2 = tv2 * gxd\n let e1 = Fp.eql(tv2, gx1); // 21. e1 = tv2 == gx1\n let y1 = Fp.cmov(y12, y11, e1); // 22. y1 = CMOV(y12, y11, e1) # If g(x1) is square, this is its sqrt\n let x2n = Fp.mul(x1n, tv1); // 23. x2n = x1n * tv1 # x2 = x2n / xd = 2 * u^2 * x1n / xd\n let y21 = Fp.mul(y11, u); // 24. y21 = y11 * u\n y21 = Fp.mul(y21, ELL2_C2); // 25. y21 = y21 * c2\n let y22 = Fp.mul(y21, ELL2_C3); // 26. y22 = y21 * c3\n let gx2 = Fp.mul(gx1, tv1); // 27. gx2 = gx1 * tv1 # g(x2) = gx2 / gxd = 2 * u^2 * g(x1)\n tv2 = Fp.sqr(y21); // 28. tv2 = y21^2\n tv2 = Fp.mul(tv2, gxd); // 29. tv2 = tv2 * gxd\n let e2 = Fp.eql(tv2, gx2); // 30. e2 = tv2 == gx2\n let y2 = Fp.cmov(y22, y21, e2); // 31. y2 = CMOV(y22, y21, e2) # If g(x2) is square, this is its sqrt\n tv2 = Fp.sqr(y1); // 32. tv2 = y1^2\n tv2 = Fp.mul(tv2, gxd); // 33. tv2 = tv2 * gxd\n let e3 = Fp.eql(tv2, gx1); // 34. e3 = tv2 == gx1\n let xn = Fp.cmov(x2n, x1n, e3); // 35. xn = CMOV(x2n, x1n, e3) # If e3, x = x1, else x = x2\n let y = Fp.cmov(y2, y1, e3); // 36. y = CMOV(y2, y1, e3) # If e3, y = y1, else y = y2\n let e4 = Fp.isOdd!(y); // 37. e4 = sgn0(y) == 1 # Fix sign of y\n y = Fp.cmov(y, Fp.neg(y), e3 !== e4); // 38. y = CMOV(y, -y, e3 XOR e4)\n return { xMn: xn, xMd: xd, yMn: y, yMd: _1n }; // 39. return (xn, xd, y, 1)\n}\n\nconst ELL2_C1_EDWARDS = /* @__PURE__ */ (() => FpSqrtEven(Fp, Fp.neg(BigInt(486664))))(); // sgn0(c1) MUST equal 0\nfunction map_to_curve_elligator2_edwards25519(u: bigint) {\n const { xMn, xMd, yMn, yMd } = _map_to_curve_elligator2_curve25519(u); // 1. (xMn, xMd, yMn, yMd) =\n // map_to_curve_elligator2_curve25519(u)\n let xn = Fp.mul(xMn, yMd); // 2. xn = xMn * yMd\n xn = Fp.mul(xn, ELL2_C1_EDWARDS); // 3. xn = xn * c1\n let xd = Fp.mul(xMd, yMn); // 4. xd = xMd * yMn # xn / xd = c1 * xM / yM\n let yn = Fp.sub(xMn, xMd); // 5. yn = xMn - xMd\n let yd = Fp.add(xMn, xMd); // 6. yd = xMn + xMd # (n / d - 1) / (n / d + 1) = (n - d) / (n + d)\n let tv1 = Fp.mul(xd, yd); // 7. tv1 = xd * yd\n let e = Fp.eql(tv1, Fp.ZERO); // 8. e = tv1 == 0\n xn = Fp.cmov(xn, Fp.ZERO, e); // 9. xn = CMOV(xn, 0, e)\n xd = Fp.cmov(xd, Fp.ONE, e); // 10. xd = CMOV(xd, 1, e)\n yn = Fp.cmov(yn, Fp.ONE, e); // 11. yn = CMOV(yn, 1, e)\n yd = Fp.cmov(yd, Fp.ONE, e); // 12. yd = CMOV(yd, 1, e)\n const [xd_inv, yd_inv] = FpInvertBatch(Fp, [xd, yd], true); // batch division\n return { x: Fp.mul(xn, xd_inv), y: Fp.mul(yn, yd_inv) }; // 13. return (xn, xd, yn, yd)\n}\n\n/** Hashing to ed25519 points / field. RFC 9380 methods. */\nexport const ed25519_hasher: H2CHasher<EdwardsPointCons> = /* @__PURE__ */ (() =>\n createHasher(\n ed25519_Point,\n (scalars: bigint[]) => map_to_curve_elligator2_edwards25519(scalars[0]),\n {\n DST: 'edwards25519_XMD:SHA-512_ELL2_RO_',\n encodeDST: 'edwards25519_XMD:SHA-512_ELL2_NU_',\n p: ed25519_CURVE_p,\n m: 1,\n k: 128,\n expand: 'xmd',\n hash: sha512,\n }\n ))();\n\n// √(-1) aka √(a) aka 2^((p-1)/4)\nconst SQRT_M1 = ED25519_SQRT_M1;\n// √(ad - 1)\nconst SQRT_AD_MINUS_ONE = /* @__PURE__ */ BigInt(\n '25063068953384623474111414158702152701244531502492656460079210482610430750235'\n);\n// 1 / √(a-d)\nconst INVSQRT_A_MINUS_D = /* @__PURE__ */ BigInt(\n '54469307008909316920995813868745141605393597292927456921205312896311721017578'\n);\n// 1-d²\nconst ONE_MINUS_D_SQ = /* @__PURE__ */ BigInt(\n '1159843021668779879193775521855586647937357759715417654439879720876111806838'\n);\n// (d-1)²\nconst D_MINUS_ONE_SQ = /* @__PURE__ */ BigInt(\n '40440834346308536858101042469323190826248399146238708352240133220865137265952'\n);\n// Calculates 1/√(number)\nconst invertSqrt = (number: bigint) => uvRatio(_1n, number);\n\nconst MAX_255B = /* @__PURE__ */ BigInt(\n '0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff'\n);\nconst bytes255ToNumberLE = (bytes: Uint8Array) => Fp.create(bytesToNumberLE(bytes) & MAX_255B);\n\n/**\n * Computes Elligator map for Ristretto255.\n * Described in [RFC9380](https://www.rfc-editor.org/rfc/rfc9380#appendix-B) and on\n * the [website](https://ristretto.group/formulas/elligator.html).\n */\nfunction calcElligatorRistrettoMap(r0: bigint): EdwardsPoint {\n const { d } = ed25519_CURVE;\n const P = ed25519_CURVE_p;\n const mod = (n: bigint) => Fp.create(n);\n const r = mod(SQRT_M1 * r0 * r0); // 1\n const Ns = mod((r + _1n) * ONE_MINUS_D_SQ); // 2\n let c = BigInt(-1); // 3\n const D = mod((c - d * r) * mod(r + d)); // 4\n let { isValid: Ns_D_is_sq, value: s } = uvRatio(Ns, D); // 5\n let s_ = mod(s * r0); // 6\n if (!isNegativeLE(s_, P)) s_ = mod(-s_);\n if (!Ns_D_is_sq) s = s_; // 7\n if (!Ns_D_is_sq) c = r; // 8\n const Nt = mod(c * (r - _1n) * D_MINUS_ONE_SQ - D); // 9\n const s2 = s * s;\n const W0 = mod((s + s) * D); // 10\n const W1 = mod(Nt * SQRT_AD_MINUS_ONE); // 11\n const W2 = mod(_1n - s2); // 12\n const W3 = mod(_1n + s2); // 13\n return new ed25519_Point(mod(W0 * W3), mod(W2 * W1), mod(W1 * W3), mod(W0 * W2));\n}\n\n/**\n * Wrapper over Edwards Point for ristretto255.\n *\n * Each ed25519/EdwardsPoint has 8 different equivalent points. This can be\n * a source of bugs for protocols like ring signatures. Ristretto was created to solve this.\n * Ristretto point operates in X:Y:Z:T extended coordinates like EdwardsPoint,\n * but it should work in its own namespace: do not combine those two.\n * See [RFC9496](https://www.rfc-editor.org/rfc/rfc9496).\n */\nclass _RistrettoPoint extends PrimeEdwardsPoint<_RistrettoPoint> {\n // Do NOT change syntax: the following gymnastics is done,\n // because typescript strips comments, which makes bundlers disable tree-shaking.\n // prettier-ignore\n static BASE: _RistrettoPoint =\n /* @__PURE__ */ (() => new _RistrettoPoint(ed25519_Point.BASE))();\n // prettier-ignore\n static ZERO: _RistrettoPoint =\n /* @__PURE__ */ (() => new _RistrettoPoint(ed25519_Point.ZERO))();\n // prettier-ignore\n static Fp: IField<bigint> =\n /* @__PURE__ */ (() => Fp)();\n // prettier-ignore\n static Fn: IField<bigint> =\n /* @__PURE__ */ (() => Fn)();\n\n constructor(ep: EdwardsPoint) {\n super(ep);\n }\n\n static fromAffine(ap: AffinePoint<bigint>): _RistrettoPoint {\n return new _RistrettoPoint(ed25519_Point.fromAffine(ap));\n }\n\n protected assertSame(other: _RistrettoPoint): void {\n if (!(other instanceof _RistrettoPoint)) throw new Error('RistrettoPoint expected');\n }\n\n protected init(ep: EdwardsPoint): _RistrettoPoint {\n return new _RistrettoPoint(ep);\n }\n\n static fromBytes(bytes: Uint8Array): _RistrettoPoint {\n abytes(bytes, 32);\n const { a, d } = ed25519_CURVE;\n const P = ed25519_CURVE_p;\n const mod = (n: bigint) => Fp.create(n);\n const s = bytes255ToNumberLE(bytes);\n // 1. Check that s_bytes is the canonical encoding of a field element, or else abort.\n // 3. Check that s is non-negative, or else abort\n if (!equalBytes(Fp.toBytes(s), bytes) || isNegativeLE(s, P))\n throw new Error('invalid ristretto255 encoding 1');\n const s2 = mod(s * s);\n const u1 = mod(_1n + a * s2); // 4 (a is -1)\n const u2 = mod(_1n - a * s2); // 5\n const u1_2 = mod(u1 * u1);\n const u2_2 = mod(u2 * u2);\n const v = mod(a * d * u1_2 - u2_2); // 6\n const { isValid, value: I } = invertSqrt(mod(v * u2_2)); // 7\n const Dx = mod(I * u2); // 8\n const Dy = mod(I * Dx * v); // 9\n let x = mod((s + s) * Dx); // 10\n if (isNegativeLE(x, P)) x = mod(-x); // 10\n const y = mod(u1 * Dy); // 11\n const t = mod(x * y); // 12\n if (!isValid || isNegativeLE(t, P) || y === _0n)\n throw new Error('invalid ristretto255 encoding 2');\n return new _RistrettoPoint(new ed25519_Point(x, y, _1n, t));\n }\n\n /**\n * Converts ristretto-encoded string to ristretto point.\n * Described in [RFC9496](https://www.rfc-editor.org/rfc/rfc9496#name-decode).\n * @param hex Ristretto-encoded 32 bytes. Not every 32-byte string is valid ristretto encoding\n */\n static fromHex(hex: string): _RistrettoPoint {\n return _RistrettoPoint.fromBytes(hexToBytes(hex));\n }\n\n /**\n * Encodes ristretto point to Uint8Array.\n * Described in [RFC9496](https://www.rfc-editor.org/rfc/rfc9496#name-encode).\n */\n toBytes(): Uint8Array {\n let { X, Y, Z, T } = this.ep;\n const P = ed25519_CURVE_p;\n const mod = (n: bigint) => Fp.create(n);\n const u1 = mod(mod(Z + Y) * mod(Z - Y)); // 1\n const u2 = mod(X * Y); // 2\n // Square root always exists\n const u2sq = mod(u2 * u2);\n const { value: invsqrt } = invertSqrt(mod(u1 * u2sq)); // 3\n const D1 = mod(invsqrt * u1); // 4\n const D2 = mod(invsqrt * u2); // 5\n const zInv = mod(D1 * D2 * T); // 6\n let D: bigint; // 7\n if (isNegativeLE(T * zInv, P)) {\n let _x = mod(Y * SQRT_M1);\n let _y = mod(X * SQRT_M1);\n X = _x;\n Y = _y;\n D = mod(D1 * INVSQRT_A_MINUS_D);\n } else {\n D = D2; // 8\n }\n if (isNegativeLE(X * zInv, P)) Y = mod(-Y); // 9\n let s = mod((Z - Y) * D); // 10 (check footer's note, no sqrt(-a))\n if (isNegativeLE(s, P)) s = mod(-s);\n return Fp.toBytes(s); // 11\n }\n\n /**\n * Compares two Ristretto points.\n * Described in [RFC9496](https://www.rfc-editor.org/rfc/rfc9496#name-equals).\n */\n equals(other: _RistrettoPoint): boolean {\n this.assertSame(other);\n const { X: X1, Y: Y1 } = this.ep;\n const { X: X2, Y: Y2 } = other.ep;\n const mod = (n: bigint) => Fp.create(n);\n // (x1 * y2 == y1 * x2) | (y1 * y2 == x1 * x2)\n const one = mod(X1 * Y2) === mod(Y1 * X2);\n const two = mod(Y1 * Y2) === mod(X1 * X2);\n return one || two;\n }\n\n is0(): boolean {\n return this.equals(_RistrettoPoint.ZERO);\n }\n}\n\nexport const ristretto255: {\n Point: typeof _RistrettoPoint;\n} = { Point: _RistrettoPoint };\n\n/** Hashing to ristretto255 points / field. RFC 9380 methods. */\nexport const ristretto255_hasher: H2CHasherBase<typeof _RistrettoPoint> = {\n Point: _RistrettoPoint,\n /**\n * Spec: https://www.rfc-editor.org/rfc/rfc9380.html#name-hashing-to-ristretto255. Caveats:\n * * There are no test vectors\n * * encodeToCurve / mapToCurve is undefined\n * * mapToCurve would be `calcElligatorRistrettoMap(scalars[0])`, not ristretto255_map!\n * * hashToScalar is undefined too, so we just use OPRF implementation\n * * We cannot re-use 'createHasher', because ristretto255_map is different algorithm/RFC\n (os2ip -> bytes255ToNumberLE)\n * * mapToCurve == calcElligatorRistrettoMap, hashToCurve == ristretto255_map\n * * hashToScalar is undefined in RFC9380 for ristretto, we are using version from OPRF here, using bytes255ToNumblerLE will create different result if we use bytes255ToNumberLE as os2ip\n * * current version is closest to spec.\n */\n hashToCurve(msg: Uint8Array, options?: H2CDSTOpts): _RistrettoPoint {\n // == 'hash_to_ristretto255'\n const DST = options?.DST || 'ristretto255_XMD:SHA-512_R255MAP_RO_';\n const xmd = expand_message_xmd(msg, DST, 64, sha512);\n // NOTE: RFC 9380 incorrectly calls this function 'ristretto255_map', in RFC 9496 map was function inside (per point)\n // That also lead to confustion that ristretto255_map is mapToCurve (it is not! it is old hashToCurve)\n return ristretto255_hasher.deriveToCurve!(xmd);\n },\n hashToScalar(msg: Uint8Array, options: H2CDSTOpts = { DST: _DST_scalar }) {\n const xmd = expand_message_xmd(msg, options.DST, 64, sha512);\n return Fn.create(bytesToNumberLE(xmd));\n },\n /**\n * HashToCurve-like construction based on RFC 9496 (Element Derivation).\n * Converts 64 uniform random bytes into a curve point.\n *\n * WARNING: This represents an older hash-to-curve construction, preceding the finalization of RFC 9380.\n * It was later reused as a component in the newer `hash_to_ristretto255` function defined in RFC 9380.\n */\n deriveToCurve(bytes: Uint8Array): _RistrettoPoint {\n // https://www.rfc-editor.org/rfc/rfc9496.html#name-element-derivation\n abytes(bytes, 64);\n const r1 = bytes255ToNumberLE(bytes.subarray(0, 32));\n const R1 = calcElligatorRistrettoMap(r1);\n const r2 = bytes255ToNumberLE(bytes.subarray(32, 64));\n const R2 = calcElligatorRistrettoMap(r2);\n return new _RistrettoPoint(R1.add(R2));\n },\n};\n\n/** ristretto255 OPRF, defined in RFC 9497. */\nexport const ristretto255_oprf: OPRF = /* @__PURE__ */ (() =>\n createORPF({\n name: 'ristretto255-SHA512',\n Point: _RistrettoPoint,\n hash: sha512,\n hashToGroup: ristretto255_hasher.hashToCurve,\n hashToScalar: ristretto255_hasher.hashToScalar,\n }))();\n\n/**\n * Weird / bogus points, useful for debugging.\n * All 8 ed25519 points of 8-torsion subgroup can be generated from the point\n * T = `26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc05`.\n * ⟨T⟩ = { O, T, 2T, 3T, 4T, 5T, 6T, 7T }\n */\nexport const ED25519_TORSION_SUBGROUP: string[] = [\n '0100000000000000000000000000000000000000000000000000000000000000',\n 'c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac037a',\n '0000000000000000000000000000000000000000000000000000000000000080',\n '26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc05',\n 'ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f',\n '26e8958fc2b227b045c3f489f2ef98f0d5dfac05d3c63339b13802886d53fc85',\n '0000000000000000000000000000000000000000000000000000000000000000',\n 'c7176a703d4dd84fba3c0b760d10670f2a2053fa2c39ccc64ec7fd7792ac03fa',\n];\n","/**\n * HKDF (RFC 5869): extract + expand in one step.\n * See https://soatok.blog/2021/11/17/understanding-hkdf/.\n * @module\n */\nimport { hmac } from './hmac.ts';\nimport { abytes, ahash, anumber, type CHash, clean } from './utils.ts';\n\n/**\n * HKDF-extract from spec. Less important part. `HKDF-Extract(IKM, salt) -> PRK`\n * Arguments position differs from spec (IKM is first one, since it is not optional)\n * @param hash - hash function that would be used (e.g. sha256)\n * @param ikm - input keying material, the initial key\n * @param salt - optional salt value (a non-secret random value)\n */\nexport function extract(hash: CHash, ikm: Uint8Array, salt?: Uint8Array): Uint8Array {\n ahash(hash);\n // NOTE: some libraries treat zero-length array as 'not provided';\n // we don't, since we have undefined as 'not provided'\n // https://github.com/RustCrypto/KDFs/issues/15\n if (salt === undefined) salt = new Uint8Array(hash.outputLen);\n return hmac(hash, salt, ikm);\n}\n\nconst HKDF_COUNTER = /* @__PURE__ */ Uint8Array.of(0);\nconst EMPTY_BUFFER = /* @__PURE__ */ Uint8Array.of();\n\n/**\n * HKDF-expand from the spec. The most important part. `HKDF-Expand(PRK, info, L) -> OKM`\n * @param hash - hash function that would be used (e.g. sha256)\n * @param prk - a pseudorandom key of at least HashLen octets (usually, the output from the extract step)\n * @param info - optional context and application specific information (can be a zero-length string)\n * @param length - length of output keying material in bytes\n */\nexport function expand(\n hash: CHash,\n prk: Uint8Array,\n info?: Uint8Array,\n length: number = 32\n): Uint8Array {\n ahash(hash);\n anumber(length, 'length');\n const olen = hash.outputLen;\n if (length > 255 * olen) throw new Error('Length must be <= 255*HashLen');\n const blocks = Math.ceil(length / olen);\n if (info === undefined) info = EMPTY_BUFFER;\n else abytes(info, undefined, 'info');\n // first L(ength) octets of T\n const okm = new Uint8Array(blocks * olen);\n // Re-use HMAC instance between blocks\n const HMAC = hmac.create(hash, prk);\n const HMACTmp = HMAC._cloneInto();\n const T = new Uint8Array(HMAC.outputLen);\n for (let counter = 0; counter < blocks; counter++) {\n HKDF_COUNTER[0] = counter + 1;\n // T(0) = empty string (zero length)\n // T(N) = HMAC-Hash(PRK, T(N-1) | info | N)\n HMACTmp.update(counter === 0 ? EMPTY_BUFFER : T)\n .update(info)\n .update(HKDF_COUNTER)\n .digestInto(T);\n okm.set(T, olen * counter);\n HMAC._cloneInto(HMACTmp);\n }\n HMAC.destroy();\n HMACTmp.destroy();\n clean(T, HKDF_COUNTER);\n return okm.slice(0, length);\n}\n\n/**\n * HKDF (RFC 5869): derive keys from an initial input.\n * Combines hkdf_extract + hkdf_expand in one step\n * @param hash - hash function that would be used (e.g. sha256)\n * @param ikm - input keying material, the initial key\n * @param salt - optional salt value (a non-secret random value)\n * @param info - optional context and application specific information (can be a zero-length string)\n * @param length - length of output keying material in bytes\n * @example\n * import { hkdf } from '@noble/hashes/hkdf';\n * import { sha256 } from '@noble/hashes/sha2';\n * import { randomBytes } from '@noble/hashes/utils';\n * const inputKey = randomBytes(32);\n * const salt = randomBytes(32);\n * const info = 'application-key';\n * const hk1 = hkdf(sha256, inputKey, salt, info, 32);\n */\nexport const hkdf = (\n hash: CHash,\n ikm: Uint8Array,\n salt: Uint8Array | undefined,\n info: Uint8Array | undefined,\n length: number\n): Uint8Array => expand(hash, extract(hash, ikm, salt), info, length);\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { ristretto255 } from \"@noble/curves/ed25519.js\";\nimport { bytesToNumberLE } from \"@noble/curves/utils.js\";\nimport { chacha20poly1305 } from \"@noble/ciphers/chacha\";\nimport { hkdf } from \"@noble/hashes/hkdf\";\nimport { sha256 } from \"@noble/hashes/sha2\";\nimport { randomBytes } from \"@noble/hashes/utils\";\n\nimport type { SecretSharingPubkey } from \"../generated/types.js\";\nimport { EncryptionError } from \"./errors.js\";\nimport { RexValue } from \"./rex-value.js\";\n\n// Ristretto255 group order l = 2^252 + 27742317777372353535851937790883648493\nconst RISTRETTO255_ORDER = BigInt(\n\t\"0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed\",\n);\n\n// Internal constants — must match Rust secret_encryption.rs exactly\nconst DKG_KDF_SALT = /* @__PURE__ */ new TextEncoder().encode(\n\t\"RIALO_DKG_THRESHOLD_V1\",\n);\nconst DKG_ACL_AAD_DOMAIN = /* @__PURE__ */ new TextEncoder().encode(\n\t\"RIALO_DKG_ACL_V1\", // exactly 16 bytes\n);\n\nconst DKG_PAYLOAD_VERSION = 0x02;\nconst MAX_SECRET_LENGTH = 64 * 1024;\nconst RISTRETTO_POINT_BYTES = 32;\nconst ED25519_PUBKEY_BYTES = 32;\nconst CHACHA20_NONCE_BYTES = 12;\n\nfunction buildAad(creatorPubkey: Uint8Array): Uint8Array {\n\tconst aad = new Uint8Array(DKG_ACL_AAD_DOMAIN.length + creatorPubkey.length);\n\taad.set(DKG_ACL_AAD_DOMAIN, 0);\n\taad.set(creatorPubkey, DKG_ACL_AAD_DOMAIN.length);\n\treturn aad;\n}\n\nfunction buildKdfInfo(\n\tepoch: bigint,\n\theaderU: Uint8Array,\n\taad: Uint8Array,\n): Uint8Array {\n\tconst info = new Uint8Array(8 + RISTRETTO_POINT_BYTES + aad.length);\n\tnew DataView(info.buffer).setBigUint64(0, epoch, true);\n\tinfo.set(headerU, 8);\n\tinfo.set(aad, 8 + RISTRETTO_POINT_BYTES);\n\treturn info;\n}\n\n// Manual Borsh encoding of DkgEncryptedPayload (matches Rust struct field order)\n// epoch: u64 (8 bytes LE)\n// ciphertext_u: [u8; 32]\n// ciphertext_body: Vec<u8> (u32 LE length prefix + bytes)\n// ciphertext_nonce:[u8; 12]\n// ciphertext_aad: Vec<u8> (u32 LE length prefix + bytes)\nfunction encodeDkgPayload(\n\tepoch: bigint,\n\tciphertextU: Uint8Array,\n\tciphertextBody: Uint8Array,\n\tciphertextNonce: Uint8Array,\n\tciphertextAad: Uint8Array,\n): Uint8Array {\n\tconst size =\n\t\t8 +\n\t\tRISTRETTO_POINT_BYTES +\n\t\t4 + ciphertextBody.length +\n\t\tCHACHA20_NONCE_BYTES +\n\t\t4 + ciphertextAad.length;\n\tconst buf = new Uint8Array(size);\n\tconst view = new DataView(buf.buffer);\n\tlet off = 0;\n\tview.setBigUint64(off, epoch, true);\n\toff += 8;\n\tbuf.set(ciphertextU, off);\n\toff += RISTRETTO_POINT_BYTES;\n\tview.setUint32(off, ciphertextBody.length, true);\n\toff += 4;\n\tbuf.set(ciphertextBody, off);\n\toff += ciphertextBody.length;\n\tbuf.set(ciphertextNonce, off);\n\toff += CHACHA20_NONCE_BYTES;\n\tview.setUint32(off, ciphertextAad.length, true);\n\toff += 4;\n\tbuf.set(ciphertextAad, off);\n\treturn buf;\n}\n\n/**\n * Encrypt raw bytes using the DKG threshold public key.\n *\n * Low-level variant for callers that supply an explicit epoch and hex-encoded\n * threshold public key rather than a full `SecretSharingPubkey` struct.\n *\n * Uses ElGamal-style ECIES over Ristretto255 with HKDF-SHA256 key derivation\n * and ChaCha20-Poly1305 AEAD. The output format is:\n * `[0x02] || borsh(DkgEncryptedPayload)` — matching the Rust CDK exactly.\n *\n * @param plaintext - Raw bytes to encrypt (non-empty, max 64 KB)\n * @param creatorPubkey - Ed25519 public key (32 bytes) bound into the AAD\n * @param epoch - DKG epoch identifying the joint public key\n * @param thresholdPubkeyHex - Hex-encoded compressed Ristretto255 joint public key (32 bytes)\n * @throws {EncryptionError} On invalid inputs or encryption failure\n */\nexport function encryptSecretBytesWithEpoch(\n\tplaintext: Uint8Array,\n\tcreatorPubkey: Uint8Array,\n\tepoch: bigint,\n\tthresholdPubkeyHex: string,\n): Uint8Array {\n\tif (plaintext.length === 0) {\n\t\tthrow EncryptionError.invalidInput(\"Secret cannot be empty\");\n\t}\n\tif (plaintext.length > MAX_SECRET_LENGTH) {\n\t\tthrow EncryptionError.invalidInput(\n\t\t\t`Secret exceeds maximum length of ${MAX_SECRET_LENGTH} bytes (got ${plaintext.length} bytes)`,\n\t\t);\n\t}\n\tif (creatorPubkey.length !== ED25519_PUBKEY_BYTES) {\n\t\tthrow EncryptionError.invalidInput(\n\t\t\t`Creator public key must be ${ED25519_PUBKEY_BYTES} bytes, got ${creatorPubkey.length}`,\n\t\t);\n\t}\n\tif (epoch < 0n || epoch > 0xffffffffffffffffn) {\n\t\tthrow EncryptionError.invalidInput(\n\t\t\t`Epoch must be a valid u64 (0 to 2^64-1), got ${epoch}`,\n\t\t);\n\t}\n\n\tlet jointPubKey: ReturnType<typeof ristretto255.Point.fromHex>;\n\ttry {\n\t\tjointPubKey = ristretto255.Point.fromHex(thresholdPubkeyHex);\n\t} catch (e) {\n\t\tthrow EncryptionError.invalidThresholdKey(\n\t\t\te instanceof Error ? e : new Error(String(e)),\n\t\t);\n\t}\n\n\t// AAD: b\"RIALO_DKG_ACL_V1\" (16 bytes) || creatorPubkey (32 bytes)\n\tconst aad = buildAad(creatorPubkey);\n\n\t// Ephemeral scalar r from 64 random bytes, matching Scalar::from_bytes_mod_order_wide\n\tconst r = bytesToNumberLE(randomBytes(64)) % RISTRETTO255_ORDER;\n\n\t// U = r·G (ElGamal header point, compressed to 32 bytes)\n\tconst headerUBytes = ristretto255.Point.BASE.multiply(r).toBytes();\n\n\t// Z = r·Y (shared secret point, compressed to 32 bytes)\n\tconst combinedZBytes = jointPubKey.multiply(r).toBytes();\n\n\t// Session key via HKDF-SHA256(salt, ikm=Z, info=epoch||U||aad, len=32)\n\tconst sessionKey = hkdf(\n\t\tsha256,\n\t\tcombinedZBytes,\n\t\tDKG_KDF_SALT,\n\t\tbuildKdfInfo(epoch, headerUBytes, aad),\n\t\t32,\n\t);\n\n\tconst nonce = randomBytes(CHACHA20_NONCE_BYTES);\n\tconst ciphertextBody = chacha20poly1305(sessionKey, nonce, aad).encrypt(\n\t\tplaintext,\n\t);\n\n\tconst payload = encodeDkgPayload(epoch, headerUBytes, ciphertextBody, nonce, aad);\n\tconst result = new Uint8Array(1 + payload.length);\n\tresult[0] = DKG_PAYLOAD_VERSION;\n\tresult.set(payload, 1);\n\treturn result;\n}\n\n/**\n * Encrypt raw bytes using the active DKG threshold public key.\n *\n * Accepts a `SecretSharingPubkey` (as returned by `getSecretSharingPubkey()`)\n * and produces a versioned `DkgEncryptedPayload` that the network can\n * threshold-decrypt during REX execution.\n *\n * @param plaintext - Raw bytes to encrypt (non-empty, max 64 KB)\n * @param creatorPubkey - Ed25519 public key (32 bytes) bound into the AAD\n * @param secretSharingPubkey - Active threshold key metadata from RPC\n * @throws {EncryptionError} On invalid inputs or encryption failure\n *\n * @example\n * ```typescript\n * const { publicKey, epoch } = await client.getSecretSharingPubkey();\n * const payload = encryptSecretBytes(\n * new TextEncoder().encode(\"my-api-key\"),\n * keypair.publicKey.toBytes(),\n * { publicKey, epoch },\n * );\n * const rexValue = RexValue.encrypted(payload);\n * ```\n */\nexport function encryptSecretBytes(\n\tplaintext: Uint8Array,\n\tcreatorPubkey: Uint8Array,\n\tsecretSharingPubkey: SecretSharingPubkey,\n): Uint8Array {\n\treturn encryptSecretBytesWithEpoch(\n\t\tplaintext,\n\t\tcreatorPubkey,\n\t\tsecretSharingPubkey.epoch,\n\t\tsecretSharingPubkey.publicKey,\n\t);\n}\n\n/**\n * Encrypt a UTF-8 string using the active DKG threshold public key.\n *\n * Convenience wrapper around `encryptSecretBytes` for string secrets.\n *\n * @param secret - The plaintext string to encrypt (non-empty, max 64 KB)\n * @param creatorPubkey - Ed25519 public key (32 bytes)\n * @param secretSharingPubkey - Active threshold key metadata from RPC\n * @throws {EncryptionError} On invalid inputs or encryption failure\n *\n * @example\n * ```typescript\n * const payload = encryptSecret(\n * \"Bearer sk-1234567890abcdef\",\n * keypair.publicKey.toBytes(),\n * await client.getSecretSharingPubkey(),\n * );\n * ```\n */\nexport function encryptSecret(\n\tsecret: string,\n\tcreatorPubkey: Uint8Array,\n\tsecretSharingPubkey: SecretSharingPubkey,\n): Uint8Array {\n\treturn encryptSecretBytes(\n\t\tnew TextEncoder().encode(secret),\n\t\tcreatorPubkey,\n\t\tsecretSharingPubkey,\n\t);\n}\n\n/**\n * Encrypt raw bytes for REX and wrap the result in a `RexValue`.\n *\n * Combines `encryptSecretBytes` with `RexValue.encrypted`. The resulting\n * `RexValue` can be serialized to Borsh and included in transactions.\n *\n * @param plaintext - Raw bytes to encrypt\n * @param creatorPubkey - Ed25519 public key (32 bytes)\n * @param secretSharingPubkey - Active threshold key metadata from RPC\n * @throws {EncryptionError} On invalid inputs or encryption failure\n *\n * @example\n * ```typescript\n * const rexValue = encryptForRex(\n * new TextEncoder().encode(\"my secret\"),\n * keypair.publicKey.toBytes(),\n * await client.getSecretSharingPubkey(),\n * );\n * const borshBytes = rexValue.toBorsh();\n * ```\n */\nexport function encryptForRex(\n\tplaintext: Uint8Array,\n\tcreatorPubkey: Uint8Array,\n\tsecretSharingPubkey: SecretSharingPubkey,\n): RexValue {\n\treturn RexValue.encrypted(\n\t\tencryptSecretBytes(plaintext, creatorPubkey, secretSharingPubkey),\n\t);\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Error codes for RPC operations, categorized by type.\n */\nexport enum RpcErrorCode {\n\t// Network errors (retryable)\n\tREQUEST_TIMEOUT = \"REQUEST_TIMEOUT\",\n\tNETWORK_ERROR = \"NETWORK_ERROR\",\n\tCONNECTION_REFUSED = \"CONNECTION_REFUSED\",\n\tINVALID_NETWORK = \"INVALID_NETWORK\",\n\n\t// RPC protocol errors\n\tINVALID_RESPONSE = \"INVALID_RESPONSE\",\n\tPARSE_ERROR = \"PARSE_ERROR\",\n\tINVALID_REQUEST = \"INVALID_REQUEST\",\n\tMETHOD_NOT_FOUND = \"METHOD_NOT_FOUND\",\n\tINVALID_PARAMS = \"INVALID_PARAMS\",\n\tINTERNAL_ERROR = \"INTERNAL_ERROR\",\n\n\t// Transaction errors\n\tTRANSACTION_REJECTED = \"TRANSACTION_REJECTED\",\n\tINSUFFICIENT_FUNDS = \"INSUFFICIENT_FUNDS\",\n\tTRANSACTION_CONFIRMATION_TIMEOUT = \"TRANSACTION_CONFIRMATION_TIMEOUT\",\n\n\t// Resource errors\n\tACCOUNT_NOT_FOUND = \"ACCOUNT_NOT_FOUND\",\n\n\t// Rate limiting (retryable after delay)\n\tRATE_LIMIT_EXCEEDED = \"RATE_LIMIT_EXCEEDED\",\n\n\t// Node health\n\tNODE_UNHEALTHY = \"NODE_UNHEALTHY\",\n}\n\n/**\n * Detailed error context for debugging and error handling.\n */\ninterface RpcErrorDetails {\n\tmethod?: string;\n\tparams?: unknown;\n\trequestId?: number;\n\turl?: string;\n\thttpStatus?: number;\n\trpcCode?: number;\n\ttimeout?: number;\n\tattempts?: number;\n\t[key: string]: unknown;\n}\n\n/**\n * Error class for RPC operations with structured error information.\n *\n * Provides actionable error messages and indicates whether errors are retryable.\n */\nexport class RpcError extends Error {\n\tpublic readonly code: RpcErrorCode;\n\tpublic readonly details: RpcErrorDetails;\n\tpublic readonly retryable: boolean;\n\n\tconstructor(\n\t\tcode: RpcErrorCode,\n\t\tmessage: string,\n\t\tdetails: RpcErrorDetails = {},\n\t\tretryable = false,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"RpcError\";\n\t\tthis.code = code;\n\t\tthis.details = details;\n\t\tthis.retryable = retryable;\n\t}\n\n\tstatic requestTimeout(timeoutMs: number, details: RpcErrorDetails): RpcError {\n\t\treturn new RpcError(\n\t\t\tRpcErrorCode.REQUEST_TIMEOUT,\n\t\t\t`RPC request timed out after ${timeoutMs}ms. The node may be slow or unreachable.`,\n\t\t\t{ ...details, timeout: timeoutMs },\n\t\t\ttrue, // Retryable\n\t\t);\n\t}\n\n\tstatic networkError(message: string, details: RpcErrorDetails): RpcError {\n\t\treturn new RpcError(\n\t\t\tRpcErrorCode.NETWORK_ERROR,\n\t\t\t`Network error: ${message}. Check your internet connection and node URL.`,\n\t\t\tdetails,\n\t\t\ttrue, // Retryable\n\t\t);\n\t}\n\n\tstatic invalidResponse(details: RpcErrorDetails): RpcError {\n\t\treturn new RpcError(\n\t\t\tRpcErrorCode.INVALID_RESPONSE,\n\t\t\t\"Received invalid response from RPC node. The response format is unexpected.\",\n\t\t\tdetails,\n\t\t\tfalse,\n\t\t);\n\t}\n\n\tstatic accountNotFound(pubkey: string): RpcError {\n\t\treturn new RpcError(\n\t\t\tRpcErrorCode.ACCOUNT_NOT_FOUND,\n\t\t\t`Account ${pubkey} not found on chain. It may not exist or has zero balance.`,\n\t\t\t{ pubkey },\n\t\t\tfalse,\n\t\t);\n\t}\n\n\tstatic rateLimitExceeded(details: RpcErrorDetails): RpcError {\n\t\treturn new RpcError(\n\t\t\tRpcErrorCode.RATE_LIMIT_EXCEEDED,\n\t\t\t\"Rate limit exceeded. Too many requests to the RPC endpoint. Try again later or use a different endpoint.\",\n\t\t\tdetails,\n\t\t\ttrue, // Can retry after delay\n\t\t);\n\t}\n\n\tstatic fromRpcCode(\n\t\trpcCode: number,\n\t\tmessage: string,\n\t\tdetails: RpcErrorDetails,\n\t): RpcError {\n\t\t// Map JSON-RPC error codes to our error codes\n\t\tconst codeMap: Record<number, RpcErrorCode> = {\n\t\t\t[-32700]: RpcErrorCode.PARSE_ERROR,\n\t\t\t[-32600]: RpcErrorCode.INVALID_REQUEST,\n\t\t\t[-32601]: RpcErrorCode.METHOD_NOT_FOUND,\n\t\t\t[-32602]: RpcErrorCode.INVALID_PARAMS,\n\t\t\t[-32603]: RpcErrorCode.INTERNAL_ERROR,\n\t\t\t[429]: RpcErrorCode.RATE_LIMIT_EXCEEDED,\n\t\t};\n\n\t\tconst code = codeMap[rpcCode] || RpcErrorCode.INTERNAL_ERROR;\n\t\tconst retryable = rpcCode === 429 || rpcCode === -32603;\n\n\t\treturn new RpcError(code, message, { ...details, rpcCode }, retryable);\n\t}\n\n\ttoJSON(): {\n\t\tcode: RpcErrorCode;\n\t\tmessage: string;\n\t\tdetails?: Record<string, unknown>;\n\t\tretryable: boolean;\n\t} {\n\t\treturn {\n\t\t\tcode: this.code,\n\t\t\tmessage: this.message,\n\t\t\tdetails: this.details,\n\t\t\tretryable: this.retryable,\n\t\t};\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Base RPC client with JSON-RPC 2.0 protocol handling.\n *\n * Provides common functionality for all RPC clients including\n * request/response validation and error handling.\n */\nimport { RpcError } from \"../errors\";\nimport type { HttpTransport } from \"../http-transport\";\n\ninterface JsonRpcRequest {\n jsonrpc: \"2.0\";\n id: number;\n method: string;\n params: unknown[];\n}\n\ninterface JsonRpcResponse<T> {\n jsonrpc: \"2.0\";\n id: number;\n result?: T;\n error?: {\n code: number;\n message: string;\n data?: unknown;\n };\n}\n\n/**\n * Base client with JSON-RPC protocol handling.\n *\n * All specific clients (QueryClient, TransactionClient) extend this.\n */\nexport class BaseRpcClient {\n protected readonly transport: HttpTransport;\n private requestId = 0;\n\n constructor(transport: HttpTransport) {\n this.transport = transport;\n }\n\n /**\n * Makes a JSON-RPC 2.0 method call with type safety.\n *\n * Handles request serialization, response validation, and error mapping.\n */\n async call<T>(method: string, params: unknown[] = []): Promise<T> {\n const requestId = this.nextRequestId();\n\n const request: JsonRpcRequest = {\n jsonrpc: \"2.0\",\n id: requestId,\n method,\n params,\n };\n\n const requestBody = JSON.stringify(request);\n const requestDetails = { method, params, requestId };\n\n // Make HTTP request with retry logic\n const data = await this.transport.request(requestBody, requestDetails);\n\n // Validate response structure\n if (!this.isValidJsonRpcResponse(data)) {\n throw RpcError.invalidResponse({\n ...requestDetails,\n response: data,\n });\n }\n\n const response = data as JsonRpcResponse<T>;\n\n // Check for RPC error\n if (response.error) {\n throw RpcError.fromRpcCode(response.error.code, response.error.message, {\n ...requestDetails,\n rpcData: response.error.data,\n });\n }\n\n // Check for result\n if (!(\"result\" in response)) {\n throw RpcError.invalidResponse({\n ...requestDetails,\n response,\n });\n }\n\n return response.result as T;\n }\n\n /**\n * Validate JSON-RPC response structure\n */\n private isValidJsonRpcResponse(data: unknown): boolean {\n if (typeof data !== \"object\" || data === null) {\n return false;\n }\n\n const response = data as Record<string, unknown>;\n\n return (\n response.jsonrpc === \"2.0\" &&\n typeof response.id === \"number\" &&\n (\"result\" in response || \"error\" in response)\n );\n }\n\n /**\n * Generates the next request ID with Overflow Protection.\n * @returns The next request ID.\n */\n private nextRequestId(): number {\n this.requestId = (this.requestId + 1) % Number.MAX_SAFE_INTEGER;\n return this.requestId;\n }\n\n /**\n * Returns the configured RPC endpoint URL.\n */\n getUrl(): string {\n return this.transport.getUrl();\n }\n\n /**\n * Call an arbitrary RPC method with a JSON string body.\n *\n * Escape hatch for methods not yet in the typed interface.\n *\n * @param method - The RPC method name\n * @param params - JSON string of parameters\n * @returns JSON string of the result\n */\n async callWithJson(method: string, params: string): Promise<string> {\n const parsedParams = JSON.parse(params);\n const result = await this.call<unknown>(method, parsedParams);\n return JSON.stringify(result);\n }\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n// AUTO-GENERATED FROM spec.wit — DO NOT EDIT\n\nimport type { AccountFilter, AccountInfo, AllAccountsEntry, BlockInfo, ClusterNodeInfo, ConfigHashPrefix, ConfirmTransactionOptions, ConfirmedTransaction, ConnectedNode, EpochInfo, FeeResponse, GetAccountsByOwnerConfig, GetAllAccountsConfig, GetBlockConfig, GetSignaturesForAddressConfig, GetTransactionsConfig, GetValidatorAccountsRequest, GetWorkflowLineageRequest, GetWorkflowLineageResponse, Hash, IsBlockhashValidResponse, Kelvin, OptionalAccountInfo, OwnerAccount, PaginationInfo, PublicKey, RexInfoAndDuties, SecretSharingPubkey, SendAndConfirmOptions, SendTransactionOptions, Signature, SignatureInfo, SignatureStatus, StakeAccountInfo, SubmitEpochChangeRequest, SubmitEpochChangeResponse, Subscription, TokenBalance, TransactionInfo, TransactionResponse, TriggeredTransaction, ValidatorAccountInfo, ValidatorHealth } from \"./types.js\";\n\n/**\n * RpcClient interface — generated from spec.wit.\n *\n * Every method corresponds to a function in the `rpc-client` interface.\n */\nexport abstract class RpcClient {\n /**\n * Gets the balance of an account in kelvins.\n * \n * # Parameters\n * \n * * `pubkey` - The public key (address) of the account to query.\n * \n * # Returns\n * \n * The account balance in the smallest denomination of the native token (kelvins).\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or the account does not exist.\n */\n abstract getBalance(pubkey: PublicKey): Promise<Kelvin>;\n\n /**\n * Gets detailed information about an on-chain account.\n * \n * # Parameters\n * \n * * `pubkey` - The public key (address) of the account to query.\n * \n * # Returns\n * \n * Detailed account information including balance, owner, data, and executable flag.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or the account does not exist.\n */\n abstract getAccountInfo(pubkey: PublicKey): Promise<AccountInfo>;\n\n /**\n * Gets the current finalized block height from the blockchain.\n * \n * The block height represents the number of blocks produced since genesis.\n * Always returns the finalized block height for consistency.\n * \n * # Returns\n * \n * The current finalized block height.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getBlockHeight(): Promise<bigint>;\n\n /**\n * Gets the current finalized block height with advanced configuration.\n * \n * Provides access to advanced parameters for block height retrieval,\n * specifically minimum context slot requirements.\n * \n * # Parameters\n * \n * * `min-context-slot` - The minimum context slot that the server must have\n * reached before responding. If absent, no minimum is required.\n * \n * # Returns\n * \n * The current finalized block height.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getBlockHeightWithConfig(minContextSlot: bigint | undefined): Promise<bigint>;\n\n /**\n * Gets detailed information about a transaction by its signature.\n * \n * # Parameters\n * \n * * `sig` - The transaction signature to look up.\n * \n * # Returns\n * \n * Full transaction details including block height, block hash, timestamp,\n * execution metadata (fee, errors), and the transaction content.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or the transaction is not found.\n */\n abstract getTransaction(sig: Signature): Promise<TransactionResponse>;\n\n /**\n * Gets the total number of transactions processed since genesis.\n * \n * # Returns\n * \n * The total transaction count.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getTransactionCount(): Promise<bigint>;\n\n /**\n * Calculates the minimum balance required for rent exemption.\n * \n * Accounts with at least this balance are exempt from paying rent.\n * \n * # Parameters\n * \n * * `data-size` - The size of the account data in bytes.\n * \n * # Returns\n * \n * The minimum balance (in kelvins) required for rent exemption.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getMinimumBalanceForRentExemption(dataSize: bigint): Promise<bigint>;\n\n /**\n * Gets the status of multiple transaction signatures.\n * \n * # Parameters\n * \n * * `signatures` - A list of transaction signatures to query.\n * \n * # Returns\n * \n * A list of signature statuses (slot, executed, error) corresponding\n * to the input signatures.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getSignatureStatuses(signatures: Signature[]): Promise<(SignatureStatus | undefined)[]>;\n\n /**\n * Gets signatures associated with an address, with optional pagination.\n * \n * # Parameters\n * \n * * `address` - The address to query signatures for.\n * * `config` - Optional configuration for pagination (limit, before, until).\n * \n * # Returns\n * \n * A list of signature info records for the given address.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getSignaturesForAddress(address: PublicKey, config: GetSignaturesForAddressConfig | undefined): Promise<SignatureInfo[]>;\n\n /**\n * Gets current epoch information.\n * \n * # Returns\n * \n * Epoch information including epoch number, slot indices, block height,\n * and transaction count.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getEpochInfo(): Promise<EpochInfo>;\n\n /**\n * Gets the fee for a given serialized message.\n * \n * # Parameters\n * \n * * `message` - The base64-encoded serialized message to calculate fees for.\n * \n * # Returns\n * \n * A fee response containing the fee in kelvins, or absent if the message\n * is invalid.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getFeeForMessage(message: string): Promise<FeeResponse>;\n\n /**\n * Gets information for multiple accounts in a single request.\n * \n * # Parameters\n * \n * * `pubkeys` - A list of public keys to query.\n * \n * # Returns\n * \n * A list of optional account info records. Each entry is absent if that\n * account does not exist.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getMultipleAccounts(pubkeys: PublicKey[]): Promise<OptionalAccountInfo[]>;\n\n /**\n * Gets accounts owned by a given program or address.\n * \n * Returns all accounts whose owner matches the specified public key,\n * along with optional pagination metadata.\n * \n * # Parameters\n * \n * * `owner` - The public key of the owner/program to query accounts for.\n * * `filter` - Optional filter to specify account type (program accounts\n * or token accounts). Defaults to program-accounts if absent.\n * * `config` - Optional pagination configuration (limit, after cursor).\n * \n * # Returns\n * \n * A tuple of (accounts list, optional pagination info).\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getAccountsByOwner(owner: PublicKey, filter: AccountFilter | undefined, config: GetAccountsByOwnerConfig | undefined): Promise<[OwnerAccount[], PaginationInfo | undefined]>;\n\n /**\n * Gets a subscription by subscriber public key and nonce.\n * \n * # Parameters\n * \n * * `subscriber` - The public key of the subscriber.\n * * `nonce` - The nonce identifying the specific subscription.\n * \n * # Returns\n * \n * The subscription record (kind, topic, subscriber, event-account).\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or the subscription is not found.\n */\n abstract getSubscription(subscriber: PublicKey, nonce: string): Promise<Subscription>;\n\n /**\n * Gets transactions triggered by a subscription.\n * \n * Returns transactions that were automatically triggered in response to\n * subscription matches or other programmatic conditions.\n * \n * # Parameters\n * \n * * `subscription-account` - The public key of the subscription account.\n * * `limit` - Optional maximum number of transactions to return.\n * \n * # Returns\n * \n * A list of triggered transaction records (signature, block number).\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getTriggeredTransactions(subscriptionAccount: PublicKey, limit: number | undefined): Promise<TriggeredTransaction[]>;\n\n /**\n * Gets the workflow lineage tree for a transaction.\n * \n * Traverses the chain of workflow-triggered transactions starting from\n * a root transaction, building a tree of parent-child relationships.\n * \n * # Parameters\n * \n * * `request` - The lineage request including root signature, max depth,\n * and whether to include event details.\n * \n * # Returns\n * \n * The workflow lineage response with nodes, leaves, and truncation info.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or the root transaction is not found.\n */\n abstract getWorkflowLineage(request: GetWorkflowLineageRequest): Promise<GetWorkflowLineageResponse>;\n\n /**\n * Gets paginated transactions from the blockchain.\n * \n * Returns a list of transactions, optionally filtered and paginated.\n * Useful for transaction monitoring, analytics, and debugging.\n * \n * # Parameters\n * \n * * `config` - Optional configuration for pagination (limit, before cursor).\n * If absent, defaults apply (limit: 100).\n * \n * # Returns\n * \n * A list of transaction info records with signatures, slots, block times,\n * and error status.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getTransactions(config: GetTransactionsConfig | undefined): Promise<TransactionInfo[]>;\n\n /**\n * Checks if a blockhash is still valid for transaction submission.\n * \n * # Parameters\n * \n * * `blockhash` - The blockhash to validate.\n * \n * # Returns\n * \n * `true` if the blockhash is still valid, `false` otherwise.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract isBlockhashValid(blockhash: Hash): Promise<IsBlockhashValidResponse>;\n\n /**\n * Gets the health status of the RPC node.\n * \n * # Returns\n * \n * A health status string, typically \"ok\" when the node is healthy.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or the node is unhealthy.\n */\n abstract getHealth(): Promise<string>;\n\n /**\n * Gets the health status of the validator.\n * \n * # Returns\n * \n * The validator health status record.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getValidatorHealth(): Promise<ValidatorHealth>;\n\n /**\n * Gets the list of full nodes connected to the validator or full node.\n * \n * # Returns\n * \n * A list of connected nodes, each identified by a network public key\n * and connection duration in milliseconds.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getConnectedFullNodes(): Promise<ConnectedNode[]>;\n\n /**\n * Gets the active threshold public key used for secret sharing.\n * \n * This public key is used to create threshold-encrypted payloads that\n * the crypto-service committee can decrypt.\n * \n * # Returns\n * \n * The active threshold public key (hex-encoded) plus epoch metadata.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or no active threshold public key\n * has been finalized yet.\n */\n abstract getSecretSharingPubkey(): Promise<SecretSharingPubkey>;\n\n /**\n * Gets the config hash prefix for protecting against replay attacks.\n * \n * Retrieves the first 64 bits of the config hash, which is used for\n * transaction replay protection across chains.\n * \n * # Returns\n * \n * The config hash prefix as a u64 value.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getConfigHashPrefix(): Promise<ConfigHashPrefix>;\n\n /**\n * Gets all accounts in the system.\n * \n * **Warning:** This can be very expensive on large networks. Intended\n * primarily for testing and debugging on local/devnet.\n * \n * # Parameters\n * \n * * `config` - Optional configuration for encoding and data inclusion.\n * \n * # Returns\n * \n * A list of all account entries (pubkey + account info).\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getAllAccounts(config: GetAllAccountsConfig | undefined): Promise<AllAccountsEntry[]>;\n\n /**\n * Gets a block by its height.\n * \n * # Parameters\n * \n * * `block-height` - The block height to query.\n * * `config` - Optional configuration for transaction detail level\n * (\"full\", \"signatures\", or \"none\"). Defaults to \"full\".\n * \n * # Returns\n * \n * Block information including blockhash, timestamp, and transactions\n * (detail level depends on config).\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or the block is not found.\n */\n abstract getBlock(blockHeight: bigint, config: GetBlockConfig | undefined): Promise<BlockInfo>;\n\n /**\n * Gets a list of confirmed block heights in a range (inclusive).\n * \n * # Parameters\n * \n * * `start-height` - The start of the block height range.\n * * `end-height` - The end of the range. If absent, returns up to the\n * latest confirmed block.\n * \n * # Returns\n * \n * A list of confirmed block height numbers.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getBlocks(startHeight: bigint, endHeight: bigint | undefined): Promise<bigint[]>;\n\n /**\n * Gets detailed information about a stake account.\n * \n * # Parameters\n * \n * * `pubkey` - The public key of the stake account.\n * \n * # Returns\n * \n * The stake account info (state, balances, authorities), or absent if\n * the account is not a valid stake account.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getStakeAccount(pubkey: PublicKey): Promise<StakeAccountInfo | undefined>;\n\n /**\n * Gets all registered validator accounts.\n * \n * # Parameters\n * \n * * `request` - Request parameters specifying whether to use the frozen\n * (last epoch) or pending (current) snapshot.\n * \n * # Returns\n * \n * A list of validator account info records.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getValidatorAccounts(request: GetValidatorAccountsRequest): Promise<ValidatorAccountInfo[]>;\n\n /**\n * Gets the token balance of an SPL Token account.\n * \n * # Parameters\n * \n * * `pubkey` - The public key of the SPL Token account.\n * \n * # Returns\n * \n * Token balance information including raw amount, decimals, and\n * human-readable amount string.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or the account is not a valid\n * token account.\n */\n abstract getTokenAccountBalance(pubkey: PublicKey): Promise<TokenBalance>;\n\n /**\n * Gets registered REX requests for a creator.\n * \n * # Parameters\n * \n * * `creator` - The public key of the REX creator.\n * * `nonce` - Optional nonce to filter for a specific REX request.\n * If absent, returns all requests by the creator.\n * \n * # Returns\n * \n * A list of REX request records with their associated duties.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getRexRequests(creator: PublicKey, nonce: string | undefined): Promise<RexInfoAndDuties[]>;\n\n /**\n * Gets missed REX duty proposal rounds for a specific REX request.\n * \n * # Parameters\n * \n * * `creator` - The public key of the REX creator.\n * * `nonce` - The nonce identifying the specific REX request.\n * \n * # Returns\n * \n * A list of proposal round numbers where duties were missed.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getRexMissedDuties(creator: PublicKey, nonce: string): Promise<bigint[]>;\n\n /**\n * Gets information about all known cluster nodes.\n * \n * # Returns\n * \n * A list of cluster node info records including stake, addresses,\n * and public keys.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getClusterNodes(): Promise<ClusterNodeInfo[]>;\n\n /**\n * Gets the list of validator indices this node is connected to.\n * \n * # Returns\n * \n * A list of validator indices (u32).\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getConnectedValidators(): Promise<number[]>;\n\n /**\n * Submits a signed transaction to the network.\n * \n * # Parameters\n * \n * * `transaction` - The serialized, signed transaction as a byte array.\n * * `options` - Optional send options (skip preflight, max retries).\n * If absent, default options are used.\n * \n * # Returns\n * \n * The transaction signature, which can be used to check its status.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or the transaction is rejected.\n */\n abstract sendTransaction(transaction: Uint8Array, options: SendTransactionOptions | undefined): Promise<Signature>;\n\n /**\n * Requests an airdrop of tokens to the specified account.\n * \n * This method is typically only available on test networks (localnet, devnet).\n * \n * # Parameters\n * \n * * `pubkey` - The public key of the recipient account.\n * * `amount` - The amount of kelvins to airdrop.\n * \n * # Returns\n * \n * The transaction signature of the airdrop transaction.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or airdrops are not supported.\n */\n abstract requestAirdrop(pubkey: PublicKey, amount: Kelvin): Promise<Signature>;\n\n /**\n * Polls until a transaction is confirmed or times out.\n * \n * This is a CDK compound method (not a single RPC call). It repeatedly\n * calls getSignatureStatuses until the transaction is confirmed or the\n * retry limit is reached.\n * \n * # Parameters\n * \n * * `sig` - The transaction signature (base58) to monitor.\n * * `options` - Optional confirmation options (max retries, retry delay).\n * Defaults: 30 retries, 1000ms delay.\n * \n * # Returns\n * \n * A confirmed transaction record with signature, executed status, and error.\n * \n * # Errors\n * \n * Returns an error if the transaction fails or confirmation times out.\n */\n abstract confirmTransaction(sig: string, options: ConfirmTransactionOptions | undefined): Promise<ConfirmedTransaction>;\n\n /**\n * Sends a transaction and waits for confirmation.\n * \n * This is a CDK compound method that combines send-transaction and\n * confirm-transaction into a single call.\n * \n * # Parameters\n * \n * * `transaction` - The serialized, signed transaction as a byte array.\n * * `options` - Optional combined send-and-confirm options.\n * \n * # Returns\n * \n * A confirmed transaction record with signature, executed status, and error.\n * \n * # Errors\n * \n * Returns an error if sending fails, the transaction is rejected,\n * or confirmation times out.\n */\n abstract sendAndConfirmTransaction(transaction: Uint8Array, options: SendAndConfirmOptions | undefined): Promise<ConfirmedTransaction>;\n\n /**\n * Requests an airdrop and waits for confirmation.\n * \n * This is a CDK compound method that combines request-airdrop and\n * confirm-transaction into a single call.\n * \n * # Parameters\n * \n * * `pubkey` - The public key of the recipient account.\n * * `amount` - The amount of kelvins to airdrop.\n * \n * # Returns\n * \n * A confirmed transaction record for the airdrop.\n * \n * # Errors\n * \n * Returns an error if the airdrop fails or confirmation times out.\n */\n abstract requestAirdropAndConfirm(pubkey: PublicKey, amount: Kelvin): Promise<ConfirmedTransaction>;\n\n /**\n * Submits an epoch change transaction (admin-only).\n * \n * This is a restricted admin method used for epoch management.\n * Only available to authorized admin accounts.\n * \n * # Parameters\n * \n * * `request` - The epoch change request containing serialized data.\n * \n * # Returns\n * \n * A response indicating whether the submission was accepted.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or the sender is not authorized.\n */\n abstract sendAdminTransaction(request: SubmitEpochChangeRequest): Promise<SubmitEpochChangeResponse>;\n\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Query client for read-only RPC operations.\n */\n\nimport { base58 } from \"@scure/base\";\nimport { PublicKey } from \"../../crypto\";\nimport type {\n\tAccountInfo,\n\tAllAccountsEntry,\n\tBlockInfo,\n\tClusterNodeInfo,\n\tConnectedNode,\n\tEpochInfo,\n\tGetAccountsByOwnerConfig,\n\tGetAllAccountsConfig,\n\tGetBlockConfig,\n\tGetSignaturesForAddressConfig,\n\tGetTransactionsConfig,\n\tGetValidatorAccountsRequest,\n\tGetWorkflowLineageRequest,\n\tGetWorkflowLineageResponse,\n\tHash,\n\tIsBlockhashValidResponse,\n\tOwnerAccount,\n\tPaginationInfo,\n\tRexInfoAndDuties,\n\tSecretSharingPubkey,\n\tSignature,\n\tSignatureInfo,\n\tSignatureStatus,\n\tStakeAccountInfo,\n\tSubscription,\n\tSubscriptionInstruction,\n\tSubscriptionKind,\n\tTokenBalance,\n\tTransactionInfo,\n\tTransactionResponse,\n\tTriggeredTransaction,\n\tTruncationReason,\n\tValidatorAccountInfo,\n\tValidatorHealth,\n} from \"../../generated/types\";\nimport { BaseRpcClient } from \"./base-client\";\n\n/**\n * Filter for what kind of accounts to return from getAccountsByOwner.\n * Uses the serde-compatible discriminated union format expected by the RPC.\n */\nexport type AccountFilterParam =\n\t| { type: \"programAccounts\" }\n\t| { type: \"tokenAccounts\"; mint?: string };\n\n/**\n * Client for querying blockchain state.\n *\n * Handles all read-only operations like getting balances, account info, etc.\n */\nexport class QueryRpcClient extends BaseRpcClient {\n\t/**\n\t * Retrieve the balance of an account in kelvins (smallest unit).\n\t *\n\t * @param pubkey - The public key of the account to query\n\t * @returns The account balance in kelvins\n\t *\n\t * @example\n\t * ```typescript\n\t * const balance = await client.getBalance(publicKey);\n\t * console.log(`Balance: ${balance} kelvins`);\n\t * ```\n\t */\n\tasync getBalance(pubkey: PublicKey): Promise<bigint> {\n\t\tconst result = await this.call<{ value: number }>(\"getBalance\", [\n\t\t\t{ address: pubkey.toString() },\n\t\t]);\n\t\treturn BigInt(result.value);\n\t}\n\n\t/**\n\t * Retrieve detailed information about an account.\n\t *\n\t * Returns account data including balance, owner program, stored data,\n\t * executable status, and rent epoch.\n\t *\n\t * @param pubkey - The public key of the account to query\n\t * @returns Account information, or null if the account does not exist\n\t *\n\t * @example\n\t * ```typescript\n\t * const info = await client.getAccountInfo(publicKey);\n\t * if (info) {\n\t * console.log(`Owner: ${info.owner}`);\n\t * console.log(`Balance: ${info.balance} kelvins`);\n\t * console.log(`Data length: ${info.data.length} bytes`);\n\t * }\n\t * ```\n\t */\n\tasync getAccountInfo(pubkey: PublicKey): Promise<AccountInfo | null> {\n\t\tconst result = await this.call<{\n\t\t\tvalue: {\n\t\t\t\tkelvin: number;\n\t\t\t\towner: string;\n\t\t\t\tdata: [string, string]; // [encoded_data, encoding_type]\n\t\t\t\texecutable: boolean;\n\t\t\t\trentEpoch: number;\n\t\t\t\tspace: number;\n\t\t\t} | null;\n\t\t}>(\"getAccountInfo\", [{ address: pubkey.toString() }]);\n\n\t\tif (!result.value) {\n\t\t\treturn null; // Account doesn't exist\n\t\t}\n\n\t\treturn {\n\t\t\tkelvin: BigInt(result.value.kelvin),\n\t\t\towner: PublicKey.fromString(result.value.owner),\n\t\t\tdata: result.value.data,\n\t\t\texecutable: result.value.executable,\n\t\t\trentEpoch: BigInt(result.value.rentEpoch),\n\t\t\tspace: BigInt(result.value.space ?? 0),\n\t\t};\n\t}\n\n\t/**\n\t * Retrieve the current block height of the blockchain.\n\t *\n\t * The block height represents the number of blocks that have been\n\t * confirmed on the chain since genesis.\n\t *\n\t * @returns The current block height\n\t *\n\t * @example\n\t * ```typescript\n\t * const height = await client.getBlockHeight();\n\t * console.log(`Current block height: ${height}`);\n\t * ```\n\t */\n\tasync getBlockHeight(): Promise<bigint> {\n\t\tconst result = await this.call<number>(\"getBlockHeight\", []);\n\t\treturn BigInt(result);\n\t}\n\n\t/**\n\t * Retrieve transaction signatures for a given address.\n\t *\n\t * Returns transaction signatures with metadata associated with the specified\n\t * address, ordered by slot height (most recent first).\n\t *\n\t * @param address - The public key of the address to query\n\t * @param config - Optional configuration options for the query (limit, before, until)\n\t * @returns Response containing context and array of signature info with blockHeight and blockTime\n\t *\n\t * @example\n\t * ```typescript\n\t * const result = await client.getSignaturesForAddress(publicKey, { limit: 10 });\n\t * console.log(`Query slot: ${result.context.slot}`);\n\t * result.value.forEach(sig => {\n\t * console.log(`Transaction: ${sig.signature}, block: ${sig.blockHeight}`);\n\t * });\n\t * ```\n\t */\n\tasync getSignaturesForAddress(\n\t\taddress: PublicKey,\n\t\tconfig?: GetSignaturesForAddressConfig,\n\t): Promise<SignatureInfo[]> {\n\t\tconst result = await this.call<{\n\t\t\tcontext: {\n\t\t\t\tslot: number;\n\t\t\t\tapi_version: string;\n\t\t\t};\n\t\t\tvalue: Array<{\n\t\t\t\tsignature: string;\n\t\t\t\tblockHeight: number;\n\t\t\t\tblockTime: number;\n\t\t\t\terr?: string;\n\t\t\t}>;\n\t\t}>(\"getSignaturesForAddress\", [\n\t\t\t{ address: address.toString(), config: config ?? {} },\n\t\t]);\n\t\treturn result.value.map((signature) => ({\n\t\t\tsignature: signature.signature,\n\t\t\tblockHeight: BigInt(signature.blockHeight),\n\t\t\tblockTime: BigInt(signature.blockTime),\n\t\t\terr: signature.err,\n\t\t}));\n\t}\n\n\t/**\n\t * Retrieve the total number of transactions processed since genesis.\n\t *\n\t * @returns The total transaction count\n\t *\n\t * @example\n\t * ```typescript\n\t * const count = await client.getTransactionCount();\n\t * console.log(`Total transactions: ${count}`);\n\t * ```\n\t */\n\tasync getTransactionCount(): Promise<bigint> {\n\t\tconst result = await this.call<number>(\"getTransactionCount\", []);\n\t\treturn BigInt(result);\n\t}\n\n\t/**\n\t * Retrieve the status of multiple transaction signatures in a single request.\n\t *\n\t * Useful for batch-checking transaction confirmations. Returns null for\n\t * signatures that are not found or have expired from the status cache.\n\t *\n\t * @param signatures - Array of transaction signatures to query\n\t * @returns Array of signature statuses (null if signature not found)\n\t *\n\t * @example\n\t * ```typescript\n\t * const statuses = await client.getSignatureStatuses([sig1, sig2, sig3]);\n\t * statuses.forEach((status, i) => {\n\t * if (status) {\n\t * console.log(`${signatures[i]}: slot ${status.slot}, executed: ${status.executed}`);\n\t * } else {\n\t * console.log(`${signatures[i]}: not found`);\n\t * }\n\t * });\n\t * ```\n\t */\n\tasync getSignatureStatuses(\n\t\tsignatures: string[],\n\t): Promise<(SignatureStatus | null)[]> {\n\t\tconst result = await this.call<{\n\t\t\tvalue: Array<{\n\t\t\t\tslot: number;\n\t\t\t\texecuted: boolean;\n\t\t\t\terr?: string;\n\t\t\t} | null>;\n\t\t}>(\"getSignatureStatuses\", [{ signatures }]);\n\n\t\treturn result.value.map((status) => {\n\t\t\tif (!status) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tslot: BigInt(status.slot),\n\t\t\t\texecuted: status.executed,\n\t\t\t\terr: status.err,\n\t\t\t};\n\t\t});\n\t}\n\n\t/**\n\t * Retrieve information about the current epoch.\n\t *\n\t * Returns epoch metadata including the current epoch number, slot position\n\t * within the epoch, total slots per epoch, and current block height.\n\t *\n\t * @returns Current epoch information\n\t *\n\t * @example\n\t * ```typescript\n\t * const info = await client.getEpochInfo();\n\t * console.log(`Epoch: ${info.epoch}`);\n\t * console.log(`Slot ${info.slotIndex} of ${info.slotsInEpoch}`);\n\t * console.log(`Block height: ${info.blockHeight}`);\n\t * ```\n\t */\n\tasync getEpochInfo(): Promise<EpochInfo> {\n\t\tconst result = await this.call<{\n\t\t\tepoch: number;\n\t\t\tslotIndex: number;\n\t\t\tslotsInEpoch: number;\n\t\t\tabsoluteSlot: number;\n\t\t\tblockHeight: number;\n\t\t\ttransactionCount?: number;\n\t\t}>(\"getEpochInfo\", []);\n\n\t\treturn {\n\t\t\tepoch: BigInt(result.epoch),\n\t\t\tslotIndex: BigInt(result.slotIndex),\n\t\t\tslotsInEpoch: BigInt(result.slotsInEpoch),\n\t\t\tabsoluteSlot: BigInt(result.absoluteSlot),\n\t\t\tblockHeight: BigInt(result.blockHeight),\n\t\t\ttransactionCount: result.transactionCount\n\t\t\t\t? BigInt(result.transactionCount)\n\t\t\t\t: undefined,\n\t\t};\n\t}\n\n\t/**\n\t * Check the health status of the RPC node.\n\t *\n\t * Returns \"ok\" if the node is healthy. If the node is unhealthy,\n\t * returns an error message describing the issue.\n\t *\n\t * @returns \"ok\" if healthy, otherwise an error message\n\t *\n\t * @example\n\t * ```typescript\n\t * const health = await client.getHealth();\n\t * if (health === \"ok\") {\n\t * console.log(\"Node is healthy\");\n\t * } else {\n\t * console.log(`Node unhealthy: ${health}`);\n\t * }\n\t * ```\n\t */\n\tasync getHealth(): Promise<\"ok\" | string> {\n\t\tconst result = await this.call<string>(\"getHealth\", []);\n\t\treturn result;\n\t}\n\n\t/**\n\t * Calculate the minimum balance required for an account to be rent-exempt.\n\t *\n\t * Accounts with at least this balance are exempt from paying rent.\n\t *\n\t * @param accountDataSize - The size of the account data in bytes\n\t * @returns The minimum balance in kelvins required for rent exemption\n\t *\n\t * @example\n\t * ```typescript\n\t * const minBalance = await client.getMinimumBalanceForRentExemption(128);\n\t * console.log(`Need at least ${minBalance} kelvins for 128 bytes`);\n\t * ```\n\t */\n\tasync getMinimumBalanceForRentExemption(\n\t\taccountDataSize: number,\n\t): Promise<bigint> {\n\t\tconst result = await this.call<number>(\n\t\t\t\"getMinimumBalanceForRentExemption\",\n\t\t\t[{ data_length: accountDataSize }],\n\t\t);\n\t\treturn BigInt(result);\n\t}\n\n\t/**\n\t * Get the fee required to process a specific message.\n\t *\n\t * @param message - Base64-encoded serialized versioned message\n\t * @returns Fee in kelvins, or null if message is invalid\n\t *\n\t * @example\n\t * ```typescript\n\t * const fee = await client.getFeeForMessage(base64Message);\n\t * if (fee !== null) {\n\t * console.log(`Fee: ${fee} kelvins`);\n\t * }\n\t * ```\n\t */\n\tasync getFeeForMessage(message: string): Promise<bigint | null> {\n\t\tconst result = await this.call<{\n\t\t\tvalue: number | null;\n\t\t}>(\"getFeeForMessage\", [{ message }]);\n\t\treturn result.value !== null ? BigInt(result.value) : null;\n\t}\n\n\t/**\n\t * Get information for multiple accounts in a single request.\n\t *\n\t * Useful for batch operations and reducing RPC calls.\n\t *\n\t * @param pubkeys - Array of public keys to query (1-100)\n\t * @returns Account information for each address (null for non-existent accounts)\n\t *\n\t * @example\n\t * ```typescript\n\t * const accounts = await client.getMultipleAccounts([pubkey1, pubkey2]);\n\t * accounts.value.forEach((account, i) => {\n\t * if (account) {\n\t * console.log(`Account ${i}: ${account.balance} kelvins`);\n\t * }\n\t * });\n\t * ```\n\t */\n\tasync getMultipleAccounts(\n\t\tpubkeys: PublicKey[],\n\t): Promise<Array<AccountInfo | null>> {\n\t\tconst result = await this.call<{\n\t\t\tvalue: ({\n\t\t\t\tkelvin: number;\n\t\t\t\towner: string;\n\t\t\t\tdata: [string, string];\n\t\t\t\texecutable: boolean;\n\t\t\t\trentEpoch: number;\n\t\t\t\tspace: number;\n\t\t\t} | null)[];\n\t\t}>(\"getMultipleAccounts\", [\n\t\t\t{ addresses: pubkeys.map((p) => p.toString()) },\n\t\t]);\n\n\t\treturn result.value.map((account) => {\n\t\t\tif (account === null) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tkelvin: BigInt(account.kelvin),\n\t\t\t\towner: PublicKey.fromString(account.owner),\n\t\t\t\tdata: account.data,\n\t\t\t\texecutable: account.executable,\n\t\t\t\trentEpoch: BigInt(account.rentEpoch),\n\t\t\t\tspace: BigInt(account.space ?? 0),\n\t\t\t};\n\t\t});\n\t}\n\n\t/**\n\t * Get all accounts owned by a specific program or address.\n\t *\n\t * Essential for querying token accounts, program data, and more.\n\t *\n\t * @param owner - Program ID or owner public key\n\t * @param filter - Filter type (ProgramAccounts or TokenAccounts)\n\t * @param config - Optional configuration for pagination and encoding\n\t * @returns Accounts owned by the specified owner with pagination info\n\t *\n\t * @example\n\t * ```typescript\n\t * const result = await client.getAccountsByOwner(programId);\n\t * console.log(`Found ${result.value.length} accounts`);\n\t * result.value.forEach(({ pubkey, account }) => {\n\t * console.log(`${pubkey}: ${account.balance} kelvins`);\n\t * });\n\t * ```\n\t */\n\tasync getAccountsByOwner(\n\t\towner: PublicKey,\n\t\tfilter: AccountFilterParam = { type: \"programAccounts\" },\n\t\tconfig?: GetAccountsByOwnerConfig,\n\t): Promise<[OwnerAccount[], PaginationInfo | undefined]> {\n\t\tconst result = await this.call<{\n\t\t\tcontext: { slot: number; api_version?: string };\n\t\t\tvalue: {\n\t\t\t\tpubkey: string;\n\t\t\t\taccount: {\n\t\t\t\t\tkelvin: number;\n\t\t\t\t\towner: string;\n\t\t\t\t\tdata: [string, string];\n\t\t\t\t\texecutable: boolean;\n\t\t\t\t\trentEpoch: number;\n\t\t\t\t\tspace: number;\n\t\t\t\t};\n\t\t\t}[];\n\t\t\tpagination?: { has_more: boolean; next_cursor?: string };\n\t\t}>(\"getAccountsByOwner\", [\n\t\t\t{\n\t\t\t\towner: owner.toString(),\n\t\t\t\tfilter,\n\t\t\t\tconfig: config\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tlimit: config.limit,\n\t\t\t\t\t\t\tafter: config.after,\n\t\t\t\t\t\t}\n\t\t\t\t\t: undefined,\n\t\t\t},\n\t\t]);\n\n\t\tconst accounts: OwnerAccount[] = result.value.map(\n\t\t\t({ pubkey, account }) => ({\n\t\t\t\tpubkey: PublicKey.fromString(pubkey),\n\t\t\t\taccount: {\n\t\t\t\t\tkelvin: BigInt(account.kelvin),\n\t\t\t\t\towner: PublicKey.fromString(account.owner),\n\t\t\t\t\tdata: account.data,\n\t\t\t\t\texecutable: account.executable,\n\t\t\t\t\trentEpoch: BigInt(account.rentEpoch),\n\t\t\t\t\tspace: BigInt(account.space ?? 0),\n\t\t\t\t},\n\t\t\t}),\n\t\t);\n\t\tconst pagination: PaginationInfo | undefined = result.pagination\n\t\t\t? {\n\t\t\t\t\thasMore: result.pagination.has_more,\n\t\t\t\t\tnextCursor: result.pagination.next_cursor,\n\t\t\t\t}\n\t\t\t: undefined;\n\t\treturn [accounts, pagination];\n\t}\n\n\t/**\n\t * Get workflow lineage information for tracking execution history.\n\t *\n\t * Returns the tree of transactions spawned from a root transaction\n\t * through subscriptions and triggers.\n\t *\n\t * @param request - Workflow lineage request with signature and options\n\t * @returns Workflow lineage tree with nodes and metadata\n\t *\n\t * @example\n\t * ```typescript\n\t * const lineage = await client.getWorkflowLineage({\n\t * signature: rootTxSignature,\n\t * maxDepth: 5,\n\t * });\n\t * console.log(`Found ${lineage.lineage.workflowNodes.length} nodes`);\n\t * ```\n\t */\n\tasync getWorkflowLineage(\n\t\trequest: GetWorkflowLineageRequest,\n\t): Promise<GetWorkflowLineageResponse> {\n\t\tconst result = await this.call<{\n\t\t\tlineage: {\n\t\t\t\tworkflowNodes: Array<{\n\t\t\t\t\tid: string;\n\t\t\t\t\tdepth: number;\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tblockHeight: number;\n\t\t\t\t\t\ttimestamp: number;\n\t\t\t\t\t\tsuccess: boolean;\n\t\t\t\t\t\tinstructionCount: number;\n\t\t\t\t\t\tinstructionProgramIds: string[];\n\t\t\t\t\t};\n\t\t\t\t\tsubscriptions: unknown[];\n\t\t\t\t\ttriggeredBy?: {\n\t\t\t\t\t\tevent: { topic: string; attributes: Record<string, unknown> };\n\t\t\t\t\t\tsubscriptionPubkey: string;\n\t\t\t\t\t\ttimestampRange?: { from: number; to: number };\n\t\t\t\t\t\teventAccount?: string;\n\t\t\t\t\t};\n\t\t\t\t\tworkflowChildren: string[];\n\t\t\t\t\thasMoreChildren: boolean;\n\t\t\t\t}>;\n\t\t\t};\n\t\t\tleaves: string[];\n\t\t\ttruncated: boolean;\n\t\t\ttruncationReason: string;\n\t\t\tcontinuationHints: string[];\n\t\t}>(\"getWorkflowLineage\", [\n\t\t\t{\n\t\t\t\tsignature: request.signature,\n\t\t\t\tmax_depth: request.maxDepth,\n\t\t\t\tinclude_events: request.includeEvents,\n\t\t\t},\n\t\t]);\n\n\t\treturn {\n\t\t\tlineage: {\n\t\t\t\tworkflowNodes: result.lineage.workflowNodes.map((node) => ({\n\t\t\t\t\tid: node.id,\n\t\t\t\t\tdepth: node.depth,\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tblockHeight: BigInt(node.data.blockHeight),\n\t\t\t\t\t\ttimestamp: BigInt(node.data.timestamp),\n\t\t\t\t\t\tsuccess: node.data.success,\n\t\t\t\t\t\tinstructionCount: node.data.instructionCount,\n\t\t\t\t\t\tinstructionProgramIds: node.data.instructionProgramIds,\n\t\t\t\t\t},\n\t\t\t\t\tsubscriptions: node.subscriptions as Subscription[],\n\t\t\t\t\ttriggeredBy: node.triggeredBy\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tevent: { topic: node.triggeredBy.event.topic },\n\t\t\t\t\t\t\t\tsubscriptionPubkey: node.triggeredBy.subscriptionPubkey,\n\t\t\t\t\t\t\t\ttimestampRange: node.triggeredBy.timestampRange\n\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\tstart: BigInt(node.triggeredBy.timestampRange.from),\n\t\t\t\t\t\t\t\t\t\t\tend: BigInt(node.triggeredBy.timestampRange.to),\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\teventAccount: node.triggeredBy.eventAccount,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: undefined,\n\t\t\t\t\tworkflowChildren: node.workflowChildren,\n\t\t\t\t\thasMoreChildren: node.hasMoreChildren,\n\t\t\t\t})),\n\t\t\t},\n\t\t\tleaves: result.leaves,\n\t\t\ttruncated: result.truncated,\n\t\t\ttruncationReason: result.truncationReason as TruncationReason,\n\t\t\tcontinuationHints: result.continuationHints,\n\t\t};\n\t}\n\n\t/**\n\t * Get subscriptions for a given subscriber address.\n\t *\n\t * Returns subscriptions that will trigger transactions when matching events occur.\n\t *\n\t * @param subscriber - The subscriber's public key\n\t * @param nonce - The nonce identifying the subscription\n\t * @returns The subscription for the subscriber and nonce\n\t *\n\t * @example\n\t * ```typescript\n\t * const subscription = await client.getSubscription(subscriberPubkey, \"my-nonce\");\n\t * console.log(`Topic: ${subscription.topic}, Kind: ${subscription.kind}`);\n\t * ```\n\t */\n\tasync getSubscription(\n\t\tsubscriber: PublicKey,\n\t\tnonce: string,\n\t): Promise<Subscription> {\n\t\tconst result = await this.call<{\n\t\t\tsubscription: {\n\t\t\t\tkind: string;\n\t\t\t\ttopic: string;\n\t\t\t\tinstructions: unknown[];\n\t\t\t\tsubscriber: string;\n\t\t\t\teventAccount?: string;\n\t\t\t\ttimestampRange?: [number, number];\n\t\t\t};\n\t\t}>(\"getSubscription\", [\n\t\t\t{\n\t\t\t\tsubscriber: subscriber.toString(),\n\t\t\t\tnonce,\n\t\t\t},\n\t\t]);\n\n\t\tconst sub = result.subscription;\n\t\treturn {\n\t\t\tkind: sub.kind as SubscriptionKind,\n\t\t\ttopic: sub.topic,\n\t\t\tinstructions: sub.instructions as SubscriptionInstruction[],\n\t\t\tsubscriber: sub.subscriber,\n\t\t\teventAccount: sub.eventAccount,\n\t\t\ttimestampRange: sub.timestampRange\n\t\t\t\t? [BigInt(sub.timestampRange[0]), BigInt(sub.timestampRange[1])]\n\t\t\t\t: undefined,\n\t\t};\n\t}\n\n\t/**\n\t * Get transactions triggered by a subscription account.\n\t *\n\t * Returns the history of transactions that were automatically executed\n\t * in response to subscription matches.\n\t *\n\t * @param subscriptionAccount - The subscription account public key\n\t * @param limit - Optional limit on transactions returned\n\t * @returns Triggered transactions for the subscription\n\t *\n\t * @example\n\t * ```typescript\n\t * const result = await client.getTriggeredTransactions(subscriptionPubkey, 10);\n\t * result.transactions.forEach(tx => {\n\t * console.log(`Signature: ${tx.signature}, Block: ${tx.blockNumber}`);\n\t * });\n\t * ```\n\t */\n\tasync getTriggeredTransactions(\n\t\tsubscriptionAccount: PublicKey,\n\t\tlimit?: number,\n\t): Promise<TriggeredTransaction[]> {\n\t\t// This method uses raw array params (not object params) per Rust impl\n\t\tconst params: unknown[] = [subscriptionAccount.toString()];\n\t\tif (limit !== undefined) {\n\t\t\tparams.push(limit.toString());\n\t\t}\n\n\t\tconst result = await this.call<{\n\t\t\ttransactions: { signature: string; block_number: number }[];\n\t\t}>(\"getTriggeredTransactions\", params);\n\n\t\treturn result.transactions.map((tx) => ({\n\t\t\tsignature: tx.signature,\n\t\t\tblockNumber: BigInt(tx.block_number),\n\t\t}));\n\t}\n\n\t/**\n\t * Retrieve the active threshold public key metadata.\n\t *\n\t * Returns the active threshold public key (a compressed Ristretto point) and\n\t * its DKG epoch. Pass the result directly to `encryptSecretBytes`,\n\t * `encryptSecret`, or `encryptForRex` to produce a threshold-encrypted\n\t * `DkgEncryptedPayload` the network can decrypt during REX execution.\n\t */\n\tasync getSecretSharingPubkey(): Promise<SecretSharingPubkey> {\n\t\tconst result = await this.call<{ pubkey: string; epoch: number | string }>(\n\t\t\t\"getSecretSharingPubkey\",\n\t\t\t[],\n\t\t);\n\n\t\treturn {\n\t\t\tpublicKey: result.pubkey,\n\t\t\tepoch: BigInt(result.epoch),\n\t\t};\n\t}\n\n\t/**\n\t * @deprecated Use `getSecretSharingPubkey()` instead.\n\t */\n\tasync getSecretSharingPubkeyInfo(): Promise<SecretSharingPubkey> {\n\t\treturn await this.getSecretSharingPubkey();\n\t}\n\n\t/**\n\t * Get the config hash prefix for replay protection.\n\t *\n\t * Returns the first 64 bits of the config hash, which is used\n\t * for transaction replay protection across chains.\n\t *\n\t * @returns The config hash prefix as a bigint\n\t *\n\t * @example\n\t * ```typescript\n\t * const configHashPrefix = await client.getConfigHashPrefix();\n\t * const tx = TransactionBuilder.create()\n\t * .setPayer(payer)\n\t * .setValidFrom(validFrom)\n\t * .setConfigHashPrefix(configHashPrefix)\n\t * .addInstruction(instruction)\n\t * .build();\n\t * ```\n\t */\n\tasync getConfigHashPrefix(): Promise<bigint> {\n\t\t// configHashPrefix is a u64 that can exceed Number.MAX_SAFE_INTEGER (2^53).\n\t\t// JSON.parse() silently rounds such values, so we parse the raw response\n\t\t// text to extract the exact digit string before converting to BigInt.\n\t\tconst body = JSON.stringify({\n\t\t\tjsonrpc: \"2.0\",\n\t\t\tid: 1,\n\t\t\tmethod: \"getRecentValidatorConfigHash\",\n\t\t\tparams: [{}],\n\t\t});\n\t\tconst response = await fetch(this.transport.getUrl(), {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\tbody,\n\t\t});\n\t\tconst text = await response.text();\n\t\tconst match = text.match(/\"configHashPrefix\"\\s*:\\s*(\\d+)/);\n\t\tif (!match) {\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to parse configHashPrefix from RPC response: ${text}`,\n\t\t\t);\n\t\t}\n\t\treturn BigInt(match[1]);\n\t}\n\n\t/**\n\t * Retrieve the current block height with an optional minimum context slot.\n\t *\n\t * When minContextSlot is provided, the RPC will only return a result\n\t * if the node has processed at least that slot.\n\t *\n\t * @param minContextSlot - Minimum slot the node must have processed\n\t * @returns The current block height\n\t */\n\tasync getBlockHeightWithConfig(\n\t\tminContextSlot: bigint | undefined,\n\t): Promise<bigint> {\n\t\tif (minContextSlot !== undefined) {\n\t\t\tconst result = await this.call<number>(\"getBlockHeight\", [\n\t\t\t\t{ min_context_slot: Number(minContextSlot) },\n\t\t\t]);\n\t\t\treturn BigInt(result);\n\t\t}\n\t\treturn await this.getBlockHeight();\n\t}\n\n\t/**\n\t * Retrieve full transaction details by signature.\n\t *\n\t * Returns the complete transaction including metadata (fee, errors, logs),\n\t * the transaction body (signatures, message, instructions), and block context.\n\t *\n\t * @param sig - Transaction signature (Uint8Array)\n\t * @returns Full transaction response with block height, metadata, and body\n\t */\n\tasync getTransactionDetails(sig: Signature): Promise<TransactionResponse> {\n\t\tconst sigStr = base58.encode(sig);\n\n\t\tconst result = await this.call<{\n\t\t\tblock_height: number | null;\n\t\t\tblock_time?: number | null;\n\t\t\tmeta: {\n\t\t\t\tfee: number;\n\t\t\t\terr?: string | null;\n\t\t\t\tlog_messages?: string[] | null;\n\t\t\t};\n\t\t\ttransaction: {\n\t\t\t\tsignatures: string[];\n\t\t\t\tmessage: {\n\t\t\t\t\theader: {\n\t\t\t\t\t\tnum_required_signatures: number;\n\t\t\t\t\t\tnum_readonly_signed_accounts: number;\n\t\t\t\t\t\tnum_readonly_unsigned_accounts: number;\n\t\t\t\t\t};\n\t\t\t\t\taccount_keys: string[];\n\t\t\t\t\tinstructions: Array<{\n\t\t\t\t\t\tprogram_id_index: number;\n\t\t\t\t\t\taccounts: number[];\n\t\t\t\t\t\tdata: string;\n\t\t\t\t\t}>;\n\t\t\t\t};\n\t\t\t\tvalid_from: number;\n\t\t\t};\n\t\t}>(\"getTransaction\", [{ signature: sigStr }]);\n\n\t\treturn {\n\t\t\tblockHeight: BigInt(result.block_height ?? 0),\n\t\t\tblockTime:\n\t\t\t\tresult.block_time != null ? BigInt(result.block_time) : undefined,\n\t\t\tmeta: {\n\t\t\t\tfee: BigInt(result.meta.fee),\n\t\t\t\terr: result.meta.err ?? undefined,\n\t\t\t\tlogMessages: result.meta.log_messages ?? undefined,\n\t\t\t},\n\t\t\ttransaction: {\n\t\t\t\tsignatures: result.transaction.signatures.map(\n\t\t\t\t\t(s) => base58.decode(s) as Signature,\n\t\t\t\t),\n\t\t\t\tmessage: {\n\t\t\t\t\theader: {\n\t\t\t\t\t\tnumRequiredSignatures:\n\t\t\t\t\t\t\tresult.transaction.message.header.num_required_signatures,\n\t\t\t\t\t\tnumReadonlySignedAccounts:\n\t\t\t\t\t\t\tresult.transaction.message.header.num_readonly_signed_accounts,\n\t\t\t\t\t\tnumReadonlyUnsignedAccounts:\n\t\t\t\t\t\t\tresult.transaction.message.header.num_readonly_unsigned_accounts,\n\t\t\t\t\t},\n\t\t\t\t\taccountKeys: result.transaction.message.account_keys.map((k) =>\n\t\t\t\t\t\tPublicKey.fromString(k),\n\t\t\t\t\t),\n\t\t\t\t\tinstructions: result.transaction.message.instructions.map((ix) => ({\n\t\t\t\t\t\tprogramIdIndex: ix.program_id_index,\n\t\t\t\t\t\taccounts: new Uint8Array(ix.accounts),\n\t\t\t\t\t\tdata: ix.data,\n\t\t\t\t\t})),\n\t\t\t\t},\n\t\t\t\tvalidFrom: BigInt(result.transaction.valid_from),\n\t\t\t},\n\t\t};\n\t}\n\n\t/**\n\t * Retrieve a paginated list of recent transactions.\n\t *\n\t * @param config - Optional pagination config (limit, before cursor)\n\t * @returns Array of transaction summaries with signature, slot, time, and error status\n\t */\n\tasync getTransactions(\n\t\tconfig: GetTransactionsConfig | undefined,\n\t): Promise<TransactionInfo[]> {\n\t\tconst params: Record<string, unknown> = {};\n\t\tif (config) {\n\t\t\tif (config.limit !== undefined) params.limit = config.limit;\n\t\t\tif (config.before !== undefined) params.before = config.before;\n\t\t}\n\t\tconst result = await this.call<{\n\t\t\tvalue: Array<{\n\t\t\t\tsignature: string;\n\t\t\t\tslot: number;\n\t\t\t\tblockTime?: number;\n\t\t\t\terr?: string;\n\t\t\t}>;\n\t\t}>(\"getTransactions\", [\n\t\t\t{ config: Object.keys(params).length > 0 ? params : undefined },\n\t\t]);\n\n\t\treturn result.value.map((t) => ({\n\t\t\tsignature: t.signature,\n\t\t\tslot: BigInt(t.slot),\n\t\t\tblockTime: t.blockTime !== undefined ? BigInt(t.blockTime) : undefined,\n\t\t\terr: t.err,\n\t\t}));\n\t}\n\n\t/**\n\t * Check whether a blockhash is still valid for transaction submission.\n\t *\n\t * @param blockhash - The blockhash to check (Uint8Array)\n\t * @returns Slot context and validity boolean\n\t */\n\tasync isBlockhashValid(blockhash: Hash): Promise<IsBlockhashValidResponse> {\n\t\tconst { base58 } = await import(\"@scure/base\");\n\t\tconst hashStr = base58.encode(blockhash);\n\t\tconst result = await this.call<{\n\t\t\tcontext: { slot: number };\n\t\t\tvalue: boolean;\n\t\t}>(\"isBlockhashValid\", [{ blockhash: hashStr }]);\n\n\t\treturn {\n\t\t\tslot: BigInt(result.context.slot),\n\t\t\tisValid: result.value,\n\t\t};\n\t}\n\n\t/**\n\t * Get the health status of the validator node.\n\t *\n\t * @returns Validator health details\n\t */\n\tasync getValidatorHealth(): Promise<ValidatorHealth> {\n\t\treturn await this.call<ValidatorHealth>(\"getValidatorHealth\", [{}]);\n\t}\n\n\t/**\n\t * Get the list of full nodes connected to the validator or full node.\n\t *\n\t * @returns Array of connected nodes with their public key and connection duration\n\t */\n\tasync getConnectedFullNodes(): Promise<ConnectedNode[]> {\n\t\tconst result = await this.call<Array<[string, number]>>(\n\t\t\t\"getConnectedFullNodes\",\n\t\t\t[{}],\n\t\t);\n\t\treturn result.map(([publicKey, connectedMs]) => ({\n\t\t\tpublicKey,\n\t\t\tconnectedMs: BigInt(connectedMs),\n\t\t}));\n\t}\n\n\t/**\n\t * Get all accounts in the system.\n\t *\n\t * @param config - Optional filtering/pagination config\n\t * @returns Array of all account entries with pubkey and account data\n\t */\n\tasync getAllAccounts(\n\t\tconfig: GetAllAccountsConfig | undefined,\n\t): Promise<AllAccountsEntry[]> {\n\t\tconst result = await this.call<{\n\t\t\tvalue: Array<{\n\t\t\t\tpubkey: string;\n\t\t\t\taccount: {\n\t\t\t\t\tkelvin: number;\n\t\t\t\t\towner: string;\n\t\t\t\t\tdata: [string, string];\n\t\t\t\t\texecutable: boolean;\n\t\t\t\t\trentEpoch: number;\n\t\t\t\t\tspace: number;\n\t\t\t\t};\n\t\t\t}>;\n\t\t}>(\"getAllAccounts\", [{ config: config ?? undefined }]);\n\n\t\treturn result.value.map((entry) => ({\n\t\t\tpubkey: entry.pubkey,\n\t\t\taccount: {\n\t\t\t\tkelvin: BigInt(entry.account.kelvin),\n\t\t\t\towner: PublicKey.fromString(entry.account.owner),\n\t\t\t\tdata: entry.account.data,\n\t\t\t\texecutable: entry.account.executable,\n\t\t\t\trentEpoch: BigInt(entry.account.rentEpoch),\n\t\t\t\tspace: BigInt(entry.account.space ?? 0),\n\t\t\t},\n\t\t}));\n\t}\n\n\t/**\n\t * Get a block by its height.\n\t *\n\t * @param blockHeight - The height of the block to retrieve\n\t * @param config - Optional config to control transaction detail level\n\t * @returns Block info including hash, height, time, and optional signatures\n\t */\n\tasync getBlock(\n\t\tblockHeight: bigint,\n\t\tconfig: GetBlockConfig | undefined,\n\t): Promise<BlockInfo> {\n\t\tconst params: Record<string, unknown> = {\n\t\t\tblock_height: Number(blockHeight),\n\t\t};\n\t\tif (config?.transactionDetails) {\n\t\t\tparams.config = { transaction_details: config.transactionDetails };\n\t\t}\n\t\tconst result = await this.call<{\n\t\t\tvalue?: {\n\t\t\t\tblockhash: string;\n\t\t\t\tblockHeight: number;\n\t\t\t\tblockTime: number;\n\t\t\t\ttransactions?: unknown[];\n\t\t\t\tsignatures?: string[];\n\t\t\t};\n\t\t\tblockhash?: string;\n\t\t\tblockHeight?: number;\n\t\t\tblockTime?: number;\n\t\t\ttransactions?: unknown[];\n\t\t\tsignatures?: string[];\n\t\t}>(\"getBlock\", [params]);\n\n\t\tconst block = result.value ?? result;\n\t\treturn {\n\t\t\tblockhash: (block.blockhash as string) ?? \"\",\n\t\t\tblockHeight: BigInt((block.blockHeight as number) ?? 0),\n\t\t\tblockTime: BigInt((block.blockTime as number) ?? 0),\n\t\t\tsignatures: block.signatures as string[] | undefined,\n\t\t};\n\t}\n\n\t/**\n\t * Get a list of confirmed block heights in a range.\n\t *\n\t * @param startHeight - Start of the range (inclusive)\n\t * @param endHeight - End of the range (inclusive), or undefined for open-ended\n\t * @returns Array of confirmed block heights\n\t */\n\tasync getBlocks(\n\t\tstartHeight: bigint,\n\t\tendHeight: bigint | undefined,\n\t): Promise<bigint[]> {\n\t\tconst result = await this.call<number[]>(\"getBlocks\", [\n\t\t\t{\n\t\t\t\tstart_slot: Number(startHeight),\n\t\t\t\tend_slot: endHeight !== undefined ? Number(endHeight) : undefined,\n\t\t\t},\n\t\t]);\n\t\treturn result.map((n) => BigInt(n));\n\t}\n\n\t/**\n\t * Get detailed information about a stake account.\n\t *\n\t * @param pubkey - The public key of the stake account\n\t * @returns Stake account info, or undefined if the account doesn't exist\n\t */\n\tasync getStakeAccount(\n\t\tpubkey: PublicKey,\n\t): Promise<StakeAccountInfo | undefined> {\n\t\tconst result = await this.call<{\n\t\t\tvalue?: {\n\t\t\t\tstate: string;\n\t\t\t\tkelvins: number;\n\t\t\t\tdelegated_balance: number;\n\t\t\t\tundelegated_balance: number;\n\t\t\t\tactivation_requested?: number;\n\t\t\t\tdeactivation_requested?: number;\n\t\t\t\tvalidator?: string;\n\t\t\t\tadmin_authority: string;\n\t\t\t\twithdraw_authority: string;\n\t\t\t};\n\t\t}>(\"getStakeAccount\", [{ pubkey: pubkey.toString() }]);\n\n\t\tif (!result.value) return undefined;\n\t\tconst s = result.value;\n\t\treturn {\n\t\t\tstate: s.state as StakeAccountInfo[\"state\"],\n\t\t\tkelvins: BigInt(s.kelvins),\n\t\t\tdelegatedBalance: BigInt(s.delegated_balance),\n\t\t\tundelegatedBalance: BigInt(s.undelegated_balance),\n\t\t\tactivationRequested:\n\t\t\t\ts.activation_requested !== undefined\n\t\t\t\t\t? BigInt(s.activation_requested)\n\t\t\t\t\t: undefined,\n\t\t\tdeactivationRequested:\n\t\t\t\ts.deactivation_requested !== undefined\n\t\t\t\t\t? BigInt(s.deactivation_requested)\n\t\t\t\t\t: undefined,\n\t\t\tvalidator: s.validator,\n\t\t\tadminAuthority: s.admin_authority,\n\t\t\twithdrawAuthority: s.withdraw_authority,\n\t\t};\n\t}\n\n\t/**\n\t * Get all registered validator accounts.\n\t *\n\t * @param request - Request config (e.g. whether to use frozen state)\n\t * @returns Array of validator account info\n\t */\n\tasync getValidatorAccounts(\n\t\trequest: GetValidatorAccountsRequest,\n\t): Promise<ValidatorAccountInfo[]> {\n\t\tconst result = await this.call<{\n\t\t\tvalue: Array<{\n\t\t\t\tcommission: number;\n\t\t\t\tpubkey: string;\n\t\t\t\tsigning_key: string;\n\t\t\t\twithdrawal_key: string;\n\t\t\t\tstake: number;\n\t\t\t\taddress: string;\n\t\t\t\tsubdag_sync_address: string;\n\t\t\t}>;\n\t\t}>(\"getValidatorAccounts\", [{ use_frozen: request.useFrozen }]);\n\n\t\treturn result.value.map((v) => ({\n\t\t\tcommission: BigInt(v.commission),\n\t\t\tpubkey: v.pubkey,\n\t\t\tsigningKey: v.signing_key,\n\t\t\twithdrawalKey: v.withdrawal_key,\n\t\t\tstake: BigInt(v.stake),\n\t\t\taddress: v.address,\n\t\t\tsubdagSyncAddress: v.subdag_sync_address,\n\t\t}));\n\t}\n\n\t/**\n\t * Get the token balance of an SPL Token account.\n\t *\n\t * @param pubkey - The public key of the token account\n\t * @returns Token balance with amount, decimals, and UI-formatted string\n\t */\n\tasync getTokenAccountBalance(pubkey: PublicKey): Promise<TokenBalance> {\n\t\tconst result = await this.call<{\n\t\t\tvalue: {\n\t\t\t\tamount: string;\n\t\t\t\tdecimals: number;\n\t\t\t\tuiAmountString: string;\n\t\t\t};\n\t\t}>(\"getTokenAccountBalance\", [{ address: pubkey.toString() }]);\n\n\t\treturn {\n\t\t\tamount: result.value.amount,\n\t\t\tdecimals: result.value.decimals,\n\t\t\tuiAmountString: result.value.uiAmountString,\n\t\t};\n\t}\n\n\t/**\n\t * Get registered REX requests for a creator.\n\t *\n\t * REX (Remote EXecution) requests are scheduled jobs that validators\n\t * execute on behalf of a creator.\n\t *\n\t * @param creator - The creator's public key\n\t * @param nonce - Optional nonce to filter a specific request\n\t * @returns Array of REX request info with their assigned duties\n\t */\n\tasync getRexRequests(\n\t\tcreator: PublicKey,\n\t\tnonce: string | undefined,\n\t): Promise<RexInfoAndDuties[]> {\n\t\tconst result = await this.call<{\n\t\t\trex_requests: Array<{\n\t\t\t\tcreator: string;\n\t\t\t\tnonce: string;\n\t\t\t\tis_active: boolean;\n\t\t\t\tdescription: string;\n\t\t\t\tupdate_frequency: string;\n\t\t\t\tstarting_timestamp: string;\n\t\t\t\tcreated_at: string;\n\t\t\t\tvalidators_per_duty: number;\n\t\t\t\trex_request_delay_ms: number;\n\t\t\t\tcompute_units_limit?: number;\n\t\t\t\theap_size_limit?: number;\n\t\t\t\tduties: Array<{\n\t\t\t\t\ttarget_timestamp: string;\n\t\t\t\t\tassigned_validators: string[];\n\t\t\t\t}>;\n\t\t\t}>;\n\t\t}>(\"getRexRequests\", [{ creator: creator.toString(), nonce }]);\n\n\t\treturn result.rex_requests.map((r) => ({\n\t\t\tcreator: r.creator,\n\t\t\tnonce: r.nonce,\n\t\t\tisActive: r.is_active,\n\t\t\tdescription: r.description,\n\t\t\tupdateFrequency: r.update_frequency,\n\t\t\tstartingTimestamp: r.starting_timestamp,\n\t\t\tcreatedAt: r.created_at,\n\t\t\tvalidatorsPerDuty: r.validators_per_duty,\n\t\t\trexRequestDelayMs: BigInt(r.rex_request_delay_ms),\n\t\t\tcomputeUnitsLimit: r.compute_units_limit,\n\t\t\theapSizeLimit: r.heap_size_limit,\n\t\t\tduties: r.duties.map((d) => ({\n\t\t\t\ttargetTimestamp: d.target_timestamp,\n\t\t\t\tassignedValidators: d.assigned_validators,\n\t\t\t})),\n\t\t}));\n\t}\n\n\t/**\n\t * Get missed REX duty proposal rounds for a specific REX request.\n\t *\n\t * @param creator - The creator's public key\n\t * @param nonce - The nonce identifying the REX request\n\t * @returns Array of proposal round numbers where duties were missed\n\t */\n\tasync getRexMissedDuties(\n\t\tcreator: PublicKey,\n\t\tnonce: string,\n\t): Promise<bigint[]> {\n\t\tconst result = await this.call<{\n\t\t\tmissed_duties_at_proposal_rounds: number[];\n\t\t}>(\"getRexMissedDuties\", [{ creator: creator.toString(), nonce }]);\n\n\t\treturn result.missed_duties_at_proposal_rounds.map((n) => BigInt(n));\n\t}\n\n\t/**\n\t * Get information about all known cluster nodes.\n\t *\n\t * @returns Array of cluster node info with stake, addresses, and keys\n\t */\n\tasync getClusterNodes(): Promise<ClusterNodeInfo[]> {\n\t\tconst result = await this.call<{\n\t\t\tnodes: Array<{\n\t\t\t\tstake: number;\n\t\t\t\taddress: string;\n\t\t\t\thostname: string;\n\t\t\t\tauthority_pubkey: string;\n\t\t\t\tprotocol_pubkey: string;\n\t\t\t\tnetwork_pubkey: string;\n\t\t\t\tlast_committed_round?: number;\n\t\t\t}>;\n\t\t}>(\"getClusterNodes\", [null]);\n\n\t\treturn result.nodes.map((n) => ({\n\t\t\tstake: BigInt(n.stake),\n\t\t\taddress: n.address,\n\t\t\thostname: n.hostname,\n\t\t\tauthorityPubkey: n.authority_pubkey,\n\t\t\tprotocolPubkey: n.protocol_pubkey,\n\t\t\tnetworkPubkey: n.network_pubkey,\n\t\t\tlastCommittedRound: n.last_committed_round,\n\t\t}));\n\t}\n\n\t/**\n\t * Get the list of validator indices this node is connected to.\n\t *\n\t * @returns Array of validator indices\n\t */\n\tasync getConnectedValidators(): Promise<number[]> {\n\t\treturn await this.call<number[]>(\"getConnectedValidators\", [{}]);\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n\tURL_DEVNET,\n\tURL_LOCALNET,\n\tURL_MAINNET,\n\tURL_TESTNET,\n} from \"./constants\";\n\n/**\n * Converts bytes to base64 string.\n *\n * Works in both browser and Node.js environments.\n */\nexport function toBase64(bytes: Uint8Array): string {\n\t// Browser environment\n\tif (typeof btoa !== \"undefined\") {\n\t\t// For large arrays, chunk to avoid call stack size exceeded\n\t\tconst chunkSize = 8192;\n\t\tlet result = \"\";\n\n\t\tfor (let i = 0; i < bytes.length; i += chunkSize) {\n\t\t\tconst chunk = bytes.slice(i, i + chunkSize);\n\t\t\tresult += String.fromCharCode(...chunk);\n\t\t}\n\n\t\treturn btoa(result);\n\t}\n\n\t// Node.js environment\n\tif (typeof Buffer !== \"undefined\") {\n\t\treturn Buffer.from(bytes).toString(\"base64\");\n\t}\n\n\tthrow new Error(\"No base64 encoding available in this environment\");\n}\n\n/**\n * Converts base64 string to bytes.\n *\n * Works in both browser and Node.js environments.\n */\nexport function fromBase64(base64: string): Uint8Array {\n\t// Browser environment\n\tif (typeof atob !== \"undefined\") {\n\t\tconst binary = atob(base64);\n\t\tconst bytes = new Uint8Array(binary.length);\n\t\tfor (let i = 0; i < binary.length; i++) {\n\t\t\tbytes[i] = binary.charCodeAt(i);\n\t\t}\n\t\treturn bytes;\n\t}\n\n\t// Node.js environment\n\tif (typeof Buffer !== \"undefined\") {\n\t\treturn new Uint8Array(Buffer.from(base64, \"base64\"));\n\t}\n\n\tthrow new Error(\"No base64 decoding available in this environment\");\n}\n\n/**\n * Sleeps for the specified duration.\n *\n * @param ms - Milliseconds to sleep\n */\nexport function sleep(ms: number): Promise<void> {\n\treturn new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Calculates exponential backoff delay with jitter.\n *\n * @param attempt - Current retry attempt (0-indexed)\n * @param baseMs - Base delay in milliseconds\n * @param maxMs - Maximum delay in milliseconds\n * @returns Calculated delay with 30% random jitter\n */\nexport function calculateBackoff(\n\tattempt: number,\n\tbaseMs = 1000,\n\tmaxMs = 30000,\n): number {\n\tconst exponentialDelay = baseMs * 2 ** attempt;\n\tconst jitter = Math.random() * 0.3 * exponentialDelay; // 30% jitter\n\treturn Math.min(exponentialDelay + jitter, maxMs);\n}\n\n/**\n * Returns the devnet RPC URL.\n */\nexport function getDevnetUrl(): string {\n\treturn URL_DEVNET;\n}\n\n/**\n * Returns the testnet RPC URL.\n */\nexport function getTestnetUrl(): string {\n\treturn URL_TESTNET;\n}\n\n/**\n * Returns the mainnet RPC URL.\n */\nexport function getMainnetUrl(): string {\n\treturn URL_MAINNET;\n}\n\n/**\n * Returns the localnet RPC URL.\n */\nexport function getLocalnetUrl(): string {\n\treturn URL_LOCALNET;\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Query client for read-only RPC operations.\n */\n\nimport type { PublicKey } from \"../../crypto\";\nimport type {\n\tConfirmedTransaction,\n\tConfirmTransactionOptions,\n\tSendAndConfirmOptions,\n\tSendTransactionOptions,\n\tSubmitEpochChangeRequest,\n\tSubmitEpochChangeResponse,\n} from \"../../generated/types\";\nimport { toBase64 } from \"../../utils\";\nimport { RpcError, RpcErrorCode } from \"../errors\";\nimport { BaseRpcClient } from \"./base-client\";\n\ninterface TransactionPollResult {\n\tblockHeight: bigint;\n\terr?: string;\n}\n\nconst DEFAULT_MAX_RETRIES = 10;\nconst DEFAULT_RETRY_DELAY_MS = 200;\n\n/**\n * Client for sending/simulating transactions and requesting airdrops.\n *\n * Handles all transaction operations like sending transactions, requesting airdrops, etc.\n */\nexport class TransactionRpcClient extends BaseRpcClient {\n\t/**\n\t * Submit a signed transaction to the blockchain.\n\t *\n\t * Sends the transaction to the network for processing. The transaction\n\t * must be fully signed before submission. Returns immediately with the\n\t * transaction signature - use {@link confirmTransaction} or\n\t * {@link sendAndConfirmTransaction} to wait for confirmation.\n\t *\n\t * @param transaction - Serialized signed transaction bytes\n\t * @param options - Transaction submission options\n\t * @returns Transaction signature (base58 encoded)\n\t *\n\t * @example\n\t * ```typescript\n\t * const signature = await client.sendTransaction(signedTx);\n\t * console.log(`Submitted: ${signature}`);\n\t *\n\t * // With options\n\t * const signature = await client.sendTransaction(signedTx, {\n\t * skipPreflight: true,\n\t * maxRetries: 3,\n\t * });\n\t * ```\n\t */\n\tasync sendTransaction(\n\t\ttransaction: Uint8Array,\n\t\toptions?: Partial<SendTransactionOptions>,\n\t): Promise<string> {\n\t\tconst base64Tx = toBase64(transaction);\n\n\t\tconst config = {\n\t\t\tencoding: \"base64\",\n\t\t\tskipPreflight: options?.skipPreflight ?? false,\n\t\t\tmaxRetries: options?.maxRetries ?? 5,\n\t\t};\n\n\t\tconst signature = await this.call<string>(\"sendTransaction\", [\n\t\t\tbase64Tx,\n\t\t\tconfig,\n\t\t]);\n\t\treturn signature;\n\t}\n\n\t/**\n\t * Wait for a transaction to be confirmed.\n\t *\n\t * A transaction is considered confirmed when:\n\t * - It has been processed in a block (`blockHeight > 0`)\n\t *\n\t * @param signature - Transaction signature to monitor\n\t * @param options - Confirmation options\n\t * @returns Confirmed transaction details\n\t * @throws {TransactionFailedError} If the transaction fails on-chain\n\t * @throws {TransactionConfirmationTimeoutError} If confirmation times out\n\t */\n\tasync confirmTransaction(\n\t\tsignature: string,\n\t\toptions?: Partial<ConfirmTransactionOptions>,\n\t): Promise<ConfirmedTransaction> {\n\t\tconst maxRetries = options?.maxRetries ?? DEFAULT_MAX_RETRIES;\n\t\tconst retryDelayMs = options?.retryDelayMs ?? DEFAULT_RETRY_DELAY_MS;\n\n\t\t// Poll using getSignatureStatuses which is fast\n\t\tfor (let attempt = 0; attempt < maxRetries; attempt++) {\n\t\t\t// Wait before checking\n\t\t\tif (attempt > 0) {\n\t\t\t\tawait this.sleep(retryDelayMs);\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst txInfo = await this.getTransaction(signature);\n\t\t\t\tif (!txInfo) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (txInfo.err) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tsignature,\n\t\t\t\t\t\texecuted: false,\n\t\t\t\t\t\terr: txInfo.err,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Transaction executed - fully confirmed\n\t\t\t\tif (txInfo.blockHeight && txInfo.blockHeight > 0n) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tsignature,\n\t\t\t\t\t\texecuted: true,\n\t\t\t\t\t\terr: undefined,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\t// Re-throw transaction failures immediately\n\t\t\t\tif (\n\t\t\t\t\terror instanceof RpcError &&\n\t\t\t\t\terror.code === RpcErrorCode.TRANSACTION_REJECTED\n\t\t\t\t) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthrow new RpcError(\n\t\t\tRpcErrorCode.TRANSACTION_CONFIRMATION_TIMEOUT,\n\t\t\t\"Transaction confirmation timed out\",\n\t\t\t{\n\t\t\t\tsignature,\n\t\t\t\tmaxRetries,\n\t\t\t},\n\t\t);\n\t}\n\n\t/**\n\t * Submit a signed transaction and wait for confirmation.\n\t *\n\t * Polls the transaction status until it is confirmed (blockHeight > 0),\n\t * or until the maximum number of retries is reached.\n\t *\n\t * @param transaction - Serialized signed transaction bytes\n\t * @param options - Transaction submission and confirmation options\n\t * @returns Confirmed transaction details\n\t * @throws {TransactionFailedError} If the transaction fails on-chain\n\t * @throws {TransactionConfirmationTimeoutError} If confirmation times out\n\t *\n\t * @example\n\t * ```typescript\n\t * const result = await client.sendAndConfirmTransaction(signedTx);\n\t * console.log(`Confirmed in block ${result.blockHeight}, executed: ${result.executed}`);\n\t *\n\t * // With custom retry settings\n\t * const result = await client.sendAndConfirmTransaction(signedTx, {\n\t * maxRetries: 3,\n\t * confirmMaxRetries: 10,\n\t * confirmRetryDelayMs: 500,\n\t * });\n\t * ```\n\t */\n\tasync sendAndConfirmTransaction(\n\t\ttransaction: Uint8Array,\n\t\toptions?: Partial<SendAndConfirmOptions>,\n\t): Promise<ConfirmedTransaction> {\n\t\tconst signature = await this.sendTransaction(transaction, {\n\t\t\tskipPreflight: options?.skipPreflight,\n\t\t\tmaxRetries: options?.maxRetries,\n\t\t});\n\t\treturn await this.confirmTransaction(signature, {\n\t\t\tmaxRetries: options?.confirmMaxRetries,\n\t\t\tretryDelayMs: options?.confirmRetryDelayMs,\n\t\t});\n\t}\n\n\t/**\n\t * Request an airdrop of tokens to an account.\n\t *\n\t * **Note**: Only available on devnet and testnet networks.\n\t *\n\t * Returns immediately with the airdrop transaction signature.\n\t * Use {@link requestAirdropAndConfirm} to wait for the airdrop to complete.\n\t *\n\t * @param pubkey - The public key of the account to receive tokens\n\t * @param amount - Amount to airdrop in kelvins (smallest unit)\n\t * @returns Airdrop transaction signature\n\t *\n\t * @example\n\t * ```typescript\n\t * const signature = await client.requestAirdrop(publicKey, 1_000_000_000n);\n\t * console.log(`Airdrop requested: ${signature}`);\n\t * ```\n\t */\n\tasync requestAirdrop(pubkey: PublicKey, amount: bigint): Promise<string> {\n\t\tif (amount > BigInt(Number.MAX_SAFE_INTEGER)) {\n\t\t\tthrow new RpcError(\n\t\t\t\tRpcErrorCode.INVALID_PARAMS,\n\t\t\t\t`Airdrop amount ${amount} exceeds maximum safe value`,\n\t\t\t);\n\t\t}\n\t\tconst signature = await this.call<string>(\"requestAirdrop\", [\n\t\t\t{\n\t\t\t\tpubkey: pubkey.toString(),\n\t\t\t\tkelvins: Number(amount),\n\t\t\t},\n\t\t]);\n\t\treturn signature;\n\t}\n\n\t/**\n\t * Request an airdrop of tokens and wait for confirmation.\n\t *\n\t * **Note**: Only available on devnet and testnet networks.\n\t *\n\t * Combines {@link requestAirdrop} and {@link confirmTransaction} into\n\t * a single call for convenience.\n\t *\n\t * @param pubkey - The public key of the account to receive tokens\n\t * @param amount - Amount to airdrop in kelvins (smallest unit)\n\t * @param options - Confirmation options (max retries, retry delay)\n\t * @returns Confirmed transaction details\n\t * @throws {RpcError} If the airdrop transaction fails or confirmation times out\n\t *\n\t * @example\n\t * ```typescript\n\t * const result = await client.requestAirdropAndConfirm(publicKey, 1_000_000_000n);\n\t * if (result.executed) {\n\t * console.log(\"Airdrop confirmed!\");\n\t * }\n\t * ```\n\t */\n\tasync requestAirdropAndConfirm(\n\t\tpubkey: PublicKey,\n\t\tamount: bigint,\n\t\toptions?: Partial<ConfirmTransactionOptions>,\n\t): Promise<ConfirmedTransaction> {\n\t\tconst signature = await this.requestAirdrop(pubkey, amount);\n\t\treturn await this.confirmTransaction(signature, options);\n\t}\n\n\t/**\n\t * Submit an epoch change transaction (admin-only).\n\t *\n\t * @param request - The epoch change request payload\n\t * @returns Response from the epoch change submission\n\t */\n\tasync sendAdminTransaction(\n\t\trequest: SubmitEpochChangeRequest,\n\t): Promise<SubmitEpochChangeResponse> {\n\t\treturn await this.call<SubmitEpochChangeResponse>(\"submitEpochChange\", [\n\t\t\trequest,\n\t\t]);\n\t}\n\n\tprivate async getTransaction(\n\t\tsignature: string,\n\t): Promise<TransactionPollResult | null> {\n\t\tconst result = await this.call<{\n\t\t\tslot: number;\n\t\t\tblock_height?: number;\n\t\t\terr?: string;\n\t\t\tmeta: {\n\t\t\t\terr?: string;\n\t\t\t};\n\t\t} | null>(\"getTransaction\", [{ signature }]);\n\n\t\tif (!result) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\tblockHeight: BigInt(result.block_height ?? 0),\n\t\t\terr: result.err ?? result.meta?.err ?? undefined,\n\t\t};\n\t}\n\n\t/**\n\t * Sleeps for a given number of milliseconds.\n\t * @param ms - The number of milliseconds to sleep.\n\t * @returns A promise that resolves when the sleep is complete.\n\t */\n\tprivate sleep(ms: number): Promise<void> {\n\t\treturn new Promise((resolve) => setTimeout(resolve, ms));\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Main Rialo RPC client for blockchain interactions.\n */\nimport type { PublicKey } from \"../../crypto\";\nimport { RpcClient } from \"../../generated/rpc-client\";\nimport type {\n\tAccountFilter,\n\tAccountInfo,\n\tAllAccountsEntry,\n\tBlockInfo,\n\tClusterNodeInfo,\n\tConfigHashPrefix,\n\tConfirmedTransaction,\n\tConfirmTransactionOptions,\n\tConnectedNode,\n\tEpochInfo,\n\tFeeResponse,\n\tGetAccountsByOwnerConfig,\n\tGetAllAccountsConfig,\n\tGetBlockConfig,\n\tGetSignaturesForAddressConfig,\n\tGetTransactionsConfig,\n\tGetValidatorAccountsRequest,\n\tGetWorkflowLineageRequest,\n\tGetWorkflowLineageResponse,\n\tHash,\n\tIsBlockhashValidResponse,\n\tKelvin,\n\tOptionalAccountInfo,\n\tOwnerAccount,\n\tPaginationInfo,\n\tRexInfoAndDuties,\n\tSecretSharingPubkey,\n\tSendAndConfirmOptions,\n\tSendTransactionOptions,\n\tSignature,\n\tSignatureInfo,\n\tSignatureStatus,\n\tStakeAccountInfo,\n\tSubmitEpochChangeRequest,\n\tSubmitEpochChangeResponse,\n\tSubscription,\n\tTokenBalance,\n\tTransactionInfo,\n\tTransactionResponse,\n\tTriggeredTransaction,\n\tValidatorAccountInfo,\n\tValidatorHealth,\n} from \"../../generated/types\";\nimport type { HttpTransport } from \"../http-transport\";\nimport type { ChainDefinition, IdentifierString } from \"./config\";\nimport type { AccountFilterParam } from \"./query-client\";\nimport { QueryRpcClient } from \"./query-client\";\nimport { TransactionRpcClient } from \"./transaction-client\";\n\n/**\n * High-level Rialo RPC client for blockchain interactions.\n *\n * Provides a unified interface for querying blockchain state and\n * sending transactions. Internally delegates to specialized clients\n * (QueryRpcClient, TransactionRpcClient) for modular organization.\n *\n * @example\n * ```typescript\n * import { createRialoClient, RIALO_DEVNET_CHAIN } from '@rialo/ts-cdk';\n *\n * const client = createRialoClient({ chain: RIALO_DEVNET_CHAIN });\n *\n * // Query operations\n * const balance = await client.getBalance(publicKey);\n * const chainId = client.getChainIdentifier();\n *\n * // Transaction operations\n * const signature = await client.sendTransaction(signedTx);\n * ```\n */\nexport class RialoClient extends RpcClient {\n\tprivate readonly queryClient: QueryRpcClient;\n\tprivate readonly transactionClient: TransactionRpcClient;\n\tprivate readonly transport: HttpTransport;\n\tprivate readonly chain: ChainDefinition;\n\n\tconstructor(transport: HttpTransport, chain: ChainDefinition) {\n\t\tsuper();\n\t\tthis.chain = chain;\n\t\tthis.transport = transport;\n\t\tthis.queryClient = new QueryRpcClient(transport);\n\t\tthis.transactionClient = new TransactionRpcClient(transport);\n\t}\n\n\t/**\n\t * Returns the configured RPC endpoint URL.\n\t */\n\tgetUrl(): string {\n\t\treturn this.transport.getUrl();\n\t}\n\n\t/**\n\t * Returns the chain identifier.\n\t */\n\tgetChainIdentifier(): IdentifierString {\n\t\treturn this.chain.id;\n\t}\n\n\t/**\n\t * Returns the chain configuration.\n\t */\n\tgetChainConfig(): ChainDefinition {\n\t\treturn this.chain;\n\t}\n\n\t/**\n\t * Retrieves the balance of an account in kelvins (smallest unit).\n\t */\n\tasync getBalance(pubkey: PublicKey): Promise<Kelvin> {\n\t\treturn await this.queryClient.getBalance(pubkey);\n\t}\n\n\t/**\n\t * Retrieves detailed information about an account.\n\t *\n\t * @returns Account info or null if account doesn't exist\n\t */\n\tasync getAccountInfo(pubkey: PublicKey): Promise<AccountInfo> {\n\t\tconst result = await this.queryClient.getAccountInfo(pubkey);\n\t\tif (!result) {\n\t\t\tthrow new Error(`Account does not exist: ${pubkey}`);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * Retrieves the current block height.\n\t */\n\tasync getBlockHeight(): Promise<bigint> {\n\t\treturn await this.queryClient.getBlockHeight();\n\t}\n\n\t/**\n\t * Retrieves the current block height with advanced configuration.\n\t */\n\tasync getBlockHeightWithConfig(\n\t\tminContextSlot: bigint | undefined,\n\t): Promise<bigint> {\n\t\treturn await this.queryClient.getBlockHeightWithConfig(minContextSlot);\n\t}\n\n\t/**\n\t * Retrieves the signatures for an address.\n\t */\n\tasync getSignaturesForAddress(\n\t\taddress: PublicKey,\n\t\tconfig: GetSignaturesForAddressConfig | undefined,\n\t): Promise<SignatureInfo[]> {\n\t\treturn await this.queryClient.getSignaturesForAddress(address, config);\n\t}\n\n\t/**\n\t * Retrieves detailed information about a transaction.\n\t *\n\t * @returns Full transaction response\n\t */\n\tasync getTransaction(sig: Signature): Promise<TransactionResponse> {\n\t\treturn await this.queryClient.getTransactionDetails(sig);\n\t}\n\n\t/**\n\t * Retrieves the total number of transactions processed since genesis.\n\t */\n\tasync getTransactionCount(): Promise<bigint> {\n\t\treturn await this.queryClient.getTransactionCount();\n\t}\n\n\t/**\n\t * Retrieves the status of multiple transaction signatures.\n\t */\n\tasync getSignatureStatuses(\n\t\tsignatures: Signature[],\n\t): Promise<(SignatureStatus | undefined)[]> {\n\t\t// Convert Uint8Array signatures to base58 strings\n\t\tconst { base58 } = await import(\"@scure/base\");\n\t\tconst sigStrings = signatures.map((s) => base58.encode(s));\n\t\tconst results = await this.queryClient.getSignatureStatuses(sigStrings);\n\t\t// Filter out null entries (unknown signatures) per spec behaviour\n\t\treturn results.filter((s): s is SignatureStatus => s !== null);\n\t}\n\n\t/**\n\t * Retrieves current epoch information.\n\t */\n\tasync getEpochInfo(): Promise<EpochInfo> {\n\t\treturn await this.queryClient.getEpochInfo();\n\t}\n\n\t/**\n\t * Checks the health status of the RPC node.\n\t *\n\t * @returns \"ok\" if healthy, error message otherwise\n\t */\n\tasync getHealth(): Promise<string> {\n\t\treturn await this.queryClient.getHealth();\n\t}\n\n\t/**\n\t * Submits a signed transaction to the blockchain.\n\t *\n\t * @param transaction - Serialized signed transaction bytes\n\t * @param options - Transaction submission options\n\t * @returns Transaction signature\n\t */\n\tasync sendTransaction(\n\t\ttransaction: Uint8Array,\n\t\toptions?: Partial<SendTransactionOptions>,\n\t): Promise<Signature> {\n\t\tconst sigStr = await this.transactionClient.sendTransaction(\n\t\t\ttransaction,\n\t\t\toptions,\n\t\t);\n\t\tconst { base58 } = await import(\"@scure/base\");\n\t\treturn base58.decode(sigStr);\n\t}\n\n\t/**\n\t * Requests an airdrop of tokens to an account.\n\t *\n\t * **Note**: Only available on devnet and testnet.\n\t *\n\t * @param pubkey - Account to receive the airdrop\n\t * @param amount - Amount in kelvins (smallest unit)\n\t * @returns Transaction signature\n\t */\n\tasync requestAirdrop(pubkey: PublicKey, amount: Kelvin): Promise<Signature> {\n\t\tconst sigStr = await this.transactionClient.requestAirdrop(pubkey, amount);\n\t\tconst { base58 } = await import(\"@scure/base\");\n\t\treturn base58.decode(sigStr);\n\t}\n\n\t/**\n\t * Submits a signed transaction and waits for confirmation.\n\t *\n\t * @param transaction - Serialized signed transaction bytes\n\t * @param options - Transaction submission and confirmation options\n\t * @returns Confirmed transaction details\n\t * @throws {TransactionFailedError} If the transaction fails on-chain\n\t * @throws {TransactionConfirmationTimeoutError} If confirmation times out\n\t *\n\t * @example\n\t * ```typescript\n\t * const result = await client.sendAndConfirmTransaction(signedTx);\n\t * console.log(`Confirmed in slot ${result.slot}`);\n\t * ```\n\t */\n\tasync sendAndConfirmTransaction(\n\t\ttransaction: Uint8Array,\n\t\toptions?: Partial<SendAndConfirmOptions>,\n\t): Promise<ConfirmedTransaction> {\n\t\treturn await this.transactionClient.sendAndConfirmTransaction(\n\t\t\ttransaction,\n\t\t\toptions,\n\t\t);\n\t}\n\n\t/**\n\t * Waits for a transaction to be confirmed.\n\t *\n\t * @param signature - Transaction signature to monitor\n\t * @param options - Confirmation options\n\t * @returns Confirmed transaction details\n\t */\n\tasync confirmTransaction(\n\t\tsig: string,\n\t\toptions?: Partial<ConfirmTransactionOptions>,\n\t): Promise<ConfirmedTransaction> {\n\t\treturn await this.transactionClient.confirmTransaction(sig, options);\n\t}\n\n\t/**\n\t * Requests an airdrop and waits for confirmation.\n\t *\n\t * **Note**: Only available on devnet and testnet.\n\t */\n\tasync requestAirdropAndConfirm(\n\t\tpubkey: PublicKey,\n\t\tamount: Kelvin,\n\t): Promise<ConfirmedTransaction> {\n\t\treturn await this.transactionClient.requestAirdropAndConfirm(\n\t\t\tpubkey,\n\t\t\tamount,\n\t\t);\n\t}\n\n\t/**\n\t * Calculate the minimum balance required for an account to be rent-exempt.\n\t *\n\t * @param accountDataSize - The size of the account data in bytes\n\t * @returns The minimum balance in kelvins required for rent exemption\n\t */\n\tasync getMinimumBalanceForRentExemption(dataSize: bigint): Promise<bigint> {\n\t\treturn await this.queryClient.getMinimumBalanceForRentExemption(\n\t\t\tNumber(dataSize),\n\t\t);\n\t}\n\n\t/**\n\t * Get the fee required to process a specific message.\n\t *\n\t * @param message - Base64-encoded serialized versioned message\n\t * @returns Fee response with value in kelvins\n\t */\n\tasync getFeeForMessage(message: string): Promise<FeeResponse> {\n\t\tconst value = await this.queryClient.getFeeForMessage(message);\n\t\treturn { value: value ?? undefined };\n\t}\n\n\t/**\n\t * Get information for multiple accounts in a single request.\n\t *\n\t * @param pubkeys - Array of public keys to query (1-100)\n\t * @returns Account information for each address\n\t */\n\tasync getMultipleAccounts(\n\t\tpubkeys: PublicKey[],\n\t): Promise<OptionalAccountInfo[]> {\n\t\tconst results = await this.queryClient.getMultipleAccounts(pubkeys);\n\t\t// Convert null → undefined to match OptionalAccountInfo type\n\t\treturn results.map((r) =>\n\t\t\tr === null ? undefined : r,\n\t\t) as OptionalAccountInfo[];\n\t}\n\n\t/**\n\t * Get all accounts owned by a specific program or address.\n\t *\n\t * @param owner - Program ID or owner public key\n\t * @param filter - Filter type (programAccounts or tokenAccounts)\n\t * @param config - Optional configuration for pagination and encoding\n\t * @returns Tuple of accounts and optional pagination info\n\t */\n\tasync getAccountsByOwner(\n\t\towner: PublicKey,\n\t\tfilter: AccountFilter | undefined,\n\t\tconfig: GetAccountsByOwnerConfig | undefined,\n\t): Promise<[OwnerAccount[], PaginationInfo | undefined]> {\n\t\t// Convert generated string union AccountFilter to the serde-compatible param\n\t\tconst filterParam: AccountFilterParam =\n\t\t\tfilter === \"tokenAccounts\"\n\t\t\t\t? { type: \"tokenAccounts\" }\n\t\t\t\t: { type: \"programAccounts\" };\n\t\treturn await this.queryClient.getAccountsByOwner(\n\t\t\towner,\n\t\t\tfilterParam,\n\t\t\tconfig,\n\t\t);\n\t}\n\n\t/**\n\t * Get workflow lineage information for tracking execution history.\n\t *\n\t * @param request - Workflow lineage request with signature and options\n\t * @returns Workflow lineage tree with nodes and metadata\n\t */\n\tasync getWorkflowLineage(\n\t\trequest: GetWorkflowLineageRequest,\n\t): Promise<GetWorkflowLineageResponse> {\n\t\treturn await this.queryClient.getWorkflowLineage(request);\n\t}\n\n\t/**\n\t * Get subscription for a given subscriber address and nonce.\n\t *\n\t * @param subscriber - The subscriber's public key\n\t * @param nonce - The nonce identifying the subscription\n\t * @returns The subscription for the subscriber and nonce\n\t */\n\tasync getSubscription(\n\t\tsubscriber: PublicKey,\n\t\tnonce: string,\n\t): Promise<Subscription> {\n\t\treturn await this.queryClient.getSubscription(subscriber, nonce);\n\t}\n\n\t/**\n\t * Get transactions triggered by a subscription account.\n\t *\n\t * @param subscriptionAccount - The subscription account public key\n\t * @param limit - Optional limit on transactions returned\n\t * @returns Triggered transactions for the subscription\n\t */\n\tasync getTriggeredTransactions(\n\t\tsubscriptionAccount: PublicKey,\n\t\tlimit: number | undefined,\n\t): Promise<TriggeredTransaction[]> {\n\t\treturn await this.queryClient.getTriggeredTransactions(\n\t\t\tsubscriptionAccount,\n\t\t\tlimit,\n\t\t);\n\t}\n\n\t/**\n\t * Gets paginated transactions from the blockchain.\n\t */\n\tasync getTransactions(\n\t\tconfig: GetTransactionsConfig | undefined,\n\t): Promise<TransactionInfo[]> {\n\t\treturn await this.queryClient.getTransactions(config);\n\t}\n\n\t/**\n\t * Checks if a blockhash is still valid for transaction submission.\n\t */\n\tasync isBlockhashValid(blockhash: Hash): Promise<IsBlockhashValidResponse> {\n\t\treturn await this.queryClient.isBlockhashValid(blockhash);\n\t}\n\n\t/**\n\t * Gets the health status of the validator.\n\t */\n\tasync getValidatorHealth(): Promise<ValidatorHealth> {\n\t\treturn await this.queryClient.getValidatorHealth();\n\t}\n\n\t/**\n\t * Gets the list of full nodes connected to the validator or full node.\n\t */\n\tasync getConnectedFullNodes(): Promise<ConnectedNode[]> {\n\t\treturn await this.queryClient.getConnectedFullNodes();\n\t}\n\n\t/**\n\t * Gets the active secret-sharing public key metadata.\n\t */\n\tasync getSecretSharingPubkey(): Promise<SecretSharingPubkey> {\n\t\treturn await this.queryClient.getSecretSharingPubkey();\n\t}\n\n\t/**\n\t * Gets the config hash prefix for protecting against replay attacks.\n\t */\n\tasync getConfigHashPrefix(): Promise<ConfigHashPrefix> {\n\t\treturn await this.queryClient.getConfigHashPrefix();\n\t}\n\n\t/**\n\t * Submits an epoch change transaction (admin-only).\n\t */\n\tasync sendAdminTransaction(\n\t\trequest: SubmitEpochChangeRequest,\n\t): Promise<SubmitEpochChangeResponse> {\n\t\treturn await this.transactionClient.sendAdminTransaction(request);\n\t}\n\n\t/**\n\t * Gets all accounts in the system.\n\t */\n\tasync getAllAccounts(\n\t\tconfig: GetAllAccountsConfig | undefined,\n\t): Promise<AllAccountsEntry[]> {\n\t\treturn await this.queryClient.getAllAccounts(config);\n\t}\n\n\t/**\n\t * Gets a block by its height.\n\t */\n\tasync getBlock(\n\t\tblockHeight: bigint,\n\t\tconfig: GetBlockConfig | undefined,\n\t): Promise<BlockInfo> {\n\t\treturn await this.queryClient.getBlock(blockHeight, config);\n\t}\n\n\t/**\n\t * Gets a list of confirmed block heights in a range.\n\t */\n\tasync getBlocks(\n\t\tstartHeight: bigint,\n\t\tendHeight: bigint | undefined,\n\t): Promise<bigint[]> {\n\t\treturn await this.queryClient.getBlocks(startHeight, endHeight);\n\t}\n\n\t/**\n\t * Gets detailed information about a stake account.\n\t */\n\tasync getStakeAccount(\n\t\tpubkey: PublicKey,\n\t): Promise<StakeAccountInfo | undefined> {\n\t\treturn await this.queryClient.getStakeAccount(pubkey);\n\t}\n\n\t/**\n\t * Gets all registered validator accounts.\n\t */\n\tasync getValidatorAccounts(\n\t\trequest: GetValidatorAccountsRequest,\n\t): Promise<ValidatorAccountInfo[]> {\n\t\treturn await this.queryClient.getValidatorAccounts(request);\n\t}\n\n\t/**\n\t * Gets the token balance of an SPL Token account.\n\t */\n\tasync getTokenAccountBalance(pubkey: PublicKey): Promise<TokenBalance> {\n\t\treturn await this.queryClient.getTokenAccountBalance(pubkey);\n\t}\n\n\t/**\n\t * Gets registered REX requests for a creator.\n\t */\n\tasync getRexRequests(\n\t\tcreator: PublicKey,\n\t\tnonce: string | undefined,\n\t): Promise<RexInfoAndDuties[]> {\n\t\treturn await this.queryClient.getRexRequests(creator, nonce);\n\t}\n\n\t/**\n\t * Gets missed REX duty proposal rounds for a specific REX request.\n\t */\n\tasync getRexMissedDuties(\n\t\tcreator: PublicKey,\n\t\tnonce: string,\n\t): Promise<bigint[]> {\n\t\treturn await this.queryClient.getRexMissedDuties(creator, nonce);\n\t}\n\n\t/**\n\t * Gets information about all known cluster nodes.\n\t */\n\tasync getClusterNodes(): Promise<ClusterNodeInfo[]> {\n\t\treturn await this.queryClient.getClusterNodes();\n\t}\n\n\t/**\n\t * Gets the list of validator indices this node is connected to.\n\t */\n\tasync getConnectedValidators(): Promise<number[]> {\n\t\treturn await this.queryClient.getConnectedValidators();\n\t}\n\n\t/**\n\t * Calls an arbitrary RPC method with a JSON string body.\n\t * Utility method for methods not yet in the generated interface.\n\t */\n\tasync callWithJson(method: string, params: string): Promise<string> {\n\t\treturn await this.queryClient.callWithJson(method, params);\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Low-level HTTP transport with retry logic and timeout handling.\n *\n * Provides robust network communication with automatic retry,\n * exponential backoff, and proper error handling.\n */\nimport { calculateBackoff, sleep } from \"../utils\";\nimport { RpcError, RpcErrorCode } from \"./errors\";\n\nexport interface HttpTransportConfig {\n\t/** Request timeout in milliseconds */\n\ttimeout?: number;\n\t/** Maximum number of retry attempts */\n\tmaxRetries?: number;\n\t/** Base delay for exponential backoff (ms) */\n\tretryBaseDelay?: number;\n\t/** Maximum retry delay (ms) */\n\tretryMaxDelay?: number;\n\t/** Custom headers to include in requests */\n\theaders?: Record<string, string>;\n}\n\ninterface RequestOptions {\n\tmethod: string;\n\theaders: Record<string, string>;\n\tbody: string;\n\tsignal?: AbortSignal;\n}\n\nconst DEFAULT_CONFIG: Required<HttpTransportConfig> = {\n\ttimeout: 30000, // 30 seconds\n\tmaxRetries: 3,\n\tretryBaseDelay: 1000, // 1 second\n\tretryMaxDelay: 30000, // 30 seconds\n\theaders: {},\n};\n\n/**\n * HTTP transport with built-in retry logic and timeout handling.\n *\n * Features:\n * - Automatic retries with exponential backoff\n * - Request timeouts using AbortController\n * - Network error recovery\n * - Rate limit handling\n * - Proper HTTP status code handling\n */\nexport class HttpTransport {\n\tprivate readonly url: string;\n\tprivate readonly config: Required<HttpTransportConfig>;\n\n\tconstructor(url: string, config: HttpTransportConfig = {}) {\n\t\tthis.url = url;\n\t\tthis.config = { ...DEFAULT_CONFIG, ...config };\n\t}\n\n\t/**\n\t * Makes an HTTP request with automatic retry logic.\n\t *\n\t * Retries are attempted for network errors and server errors (5xx).\n\t * Uses exponential backoff between retry attempts.\n\t */\n\tasync request(\n\t\tbody: string,\n\t\trequestDetails: Record<string, unknown> = {},\n\t): Promise<unknown> {\n\t\tlet lastError: Error | undefined;\n\n\t\tfor (let attempt = 0; attempt <= this.config.maxRetries; attempt++) {\n\t\t\ttry {\n\t\t\t\treturn await this.makeRequest(body, requestDetails, attempt);\n\t\t\t} catch (error) {\n\t\t\t\tlastError = error as Error;\n\n\t\t\t\t// Don't retry if it's not a retryable error\n\t\t\t\tif (error instanceof RpcError && !error.retryable) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\n\t\t\t\t// Don't retry on the last attempt\n\t\t\t\tif (attempt === this.config.maxRetries) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\n\t\t\t\t// Calculate backoff delay\n\t\t\t\tconst delay = calculateBackoff(\n\t\t\t\t\tattempt,\n\t\t\t\t\tthis.config.retryBaseDelay,\n\t\t\t\t\tthis.config.retryMaxDelay,\n\t\t\t\t);\n\n\t\t\t\t// Wait before retrying\n\t\t\t\tawait sleep(delay);\n\t\t\t}\n\t\t}\n\n\t\t// Should never reach here, but TypeScript doesn't know that\n\t\tthrow lastError;\n\t}\n\n\t/**\n\t * Make a single HTTP request with timeout\n\t */\n\tprivate async makeRequest(\n\t\tbody: string,\n\t\trequestDetails: Record<string, unknown>,\n\t\tattempt: number,\n\t): Promise<unknown> {\n\t\tconst controller = new AbortController();\n\t\tconst timeoutId = setTimeout(() => controller.abort(), this.config.timeout);\n\n\t\ttry {\n\t\t\tconst options: RequestOptions = {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: {\n\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\t...this.config.headers,\n\t\t\t\t},\n\t\t\t\tbody,\n\t\t\t\tsignal: controller.signal,\n\t\t\t};\n\n\t\t\tconst response = await fetch(this.url, options);\n\n\t\t\t// Handle HTTP errors\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow await this.handleHttpError(response, requestDetails, attempt);\n\t\t\t}\n\n\t\t\t// Parse JSON response\n\t\t\tconst data = await response.json();\n\t\t\treturn data;\n\t\t} catch (error) {\n\t\t\t// Handle timeout\n\t\t\tif (error instanceof Error && error.name === \"AbortError\") {\n\t\t\t\tthrow RpcError.requestTimeout(this.config.timeout, {\n\t\t\t\t\t...requestDetails,\n\t\t\t\t\turl: this.url,\n\t\t\t\t\tattempts: attempt + 1,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Handle network errors\n\t\t\tif (error instanceof TypeError) {\n\t\t\t\tthrow RpcError.networkError(error.message, {\n\t\t\t\t\t...requestDetails,\n\t\t\t\t\turl: this.url,\n\t\t\t\t\tattempts: attempt + 1,\n\t\t\t\t\tcause: error.message,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Re-throw RpcError\n\t\t\tif (error instanceof RpcError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\t// Unknown error\n\t\t\tthrow RpcError.networkError(\"Unknown network error\", {\n\t\t\t\t...requestDetails,\n\t\t\t\turl: this.url,\n\t\t\t\tattempts: attempt + 1,\n\t\t\t\tcause: error instanceof Error ? error.message : String(error),\n\t\t\t});\n\t\t} finally {\n\t\t\tclearTimeout(timeoutId);\n\t\t}\n\t}\n\n\t/**\n\t * Handle HTTP error responses.\n\t *\n\t * Parses the response body to extract JSON-RPC error details when available,\n\t * regardless of HTTP status code. Falls back to HTTP status-based error handling.\n\t */\n\tprivate async handleHttpError(\n\t\tresponse: Response,\n\t\trequestDetails: Record<string, unknown>,\n\t\tattempt: number,\n\t): Promise<RpcError> {\n\t\tconst status = response.status;\n\t\tconst isRetryable = status >= 500 || status === 429;\n\t\tconst baseDetails = {\n\t\t\t...requestDetails,\n\t\t\thttpStatus: status,\n\t\t\turl: this.url,\n\t\t\tattempts: attempt + 1,\n\t\t};\n\n\t\t// Try to parse response body for error details\n\t\tconst { message, rpcCode, errorData } = await this.parseErrorResponse(\n\t\t\tresponse,\n\t\t\tstatus,\n\t\t);\n\n\t\t// Rate limiting gets special handling\n\t\tif (status === 429) {\n\t\t\treturn RpcError.rateLimitExceeded({\n\t\t\t\t...baseDetails,\n\t\t\t\tserverError: errorData,\n\t\t\t});\n\t\t}\n\n\t\t// If we have a JSON-RPC error code, use proper error mapping\n\t\tif (rpcCode !== undefined) {\n\t\t\treturn RpcError.fromRpcCode(rpcCode, message, {\n\t\t\t\t...baseDetails,\n\t\t\t\tserverError: errorData,\n\t\t\t});\n\t\t}\n\n\t\t// Server errors (5xx) are retryable network errors\n\t\tif (status >= 500) {\n\t\t\treturn RpcError.networkError(message, {\n\t\t\t\t...baseDetails,\n\t\t\t\tserverError: errorData,\n\t\t\t});\n\t\t}\n\n\t\t// Client errors (4xx) are not retryable\n\t\treturn new RpcError(RpcErrorCode.NETWORK_ERROR, message, baseDetails, isRetryable);\n\t}\n\n\t/**\n\t * Parse error response body to extract message and RPC error code.\n\t *\n\t * Handles multiple formats:\n\t * - JSON-RPC error: { error: { code, message, data? } }\n\t * - Simple JSON: { message: \"...\" }\n\t * - Non-JSON responses\n\t */\n\tprivate async parseErrorResponse(\n\t\tresponse: Response,\n\t\tstatus: number,\n\t): Promise<{ message: string; rpcCode?: number; errorData?: unknown }> {\n\t\tlet message = `HTTP ${status}: ${response.statusText}`;\n\t\tlet rpcCode: number | undefined;\n\t\tlet errorData: unknown;\n\n\t\ttry {\n\t\t\terrorData = await response.json();\n\n\t\t\tif (errorData && typeof errorData === \"object\") {\n\t\t\t\tconst data = errorData as Record<string, unknown>;\n\n\t\t\t\t// Check for JSON-RPC error format: { error: { code, message } }\n\t\t\t\tif (\n\t\t\t\t\tdata.error &&\n\t\t\t\t\ttypeof data.error === \"object\" &&\n\t\t\t\t\t\"message\" in data.error\n\t\t\t\t) {\n\t\t\t\t\tconst rpcError = data.error as Record<string, unknown>;\n\t\t\t\t\tmessage = String(rpcError.message);\n\t\t\t\t\trpcCode =\n\t\t\t\t\t\ttypeof rpcError.code === \"number\" ? rpcError.code : undefined;\n\t\t\t\t} else if (\"message\" in data) {\n\t\t\t\t\t// Fallback to top-level message\n\t\t\t\t\tmessage = String(data.message);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {\n\t\t\t// Response might not be JSON, keep default message\n\t\t}\n\n\t\treturn { message, rpcCode, errorData };\n\t}\n\n\t/**\n\t * Returns the configured RPC endpoint URL.\n\t */\n\tgetUrl(): string {\n\t\treturn this.url;\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nexport type {\n\tAccountFilter,\n\tAccountInfo,\n\tAllAccountsEntry,\n\tBlockInfo,\n\tClusterNodeInfo,\n\tConfigHashPrefix,\n\tConfirmedTransaction,\n\tConfirmTransactionOptions,\n\tConnectedNode,\n\tEpochConsensusConfigRequest,\n\tEpochInfo,\n\tEventData,\n\tFeeResponse,\n\tGetAccountsByOwnerConfig,\n\tGetAllAccountsConfig,\n\tGetBlockConfig,\n\tGetSignaturesForAddressConfig,\n\tGetTransactionsConfig,\n\tGetValidatorAccountsRequest,\n\tGetWorkflowLineageRequest,\n\tGetWorkflowLineageResponse,\n\tIsBlockhashValidResponse,\n\tKelvin,\n\tOptionalAccountInfo,\n\tOwnerAccount,\n\tPaginationInfo,\n\tRexDuty,\n\tRexInfoAndDuties,\n\tSecretSharingPubkey,\n\tSendAndConfirmOptions,\n\tSendTransactionOptions,\n\tSignatureInfo,\n\tSignatureStatus,\n\tStakeAccountInfo,\n\tStakeState,\n\tSubmitEpochChangeRequest,\n\tSubmitEpochChangeResponse,\n\tSubscription,\n\tSubscriptionAccountMeta,\n\tSubscriptionInstruction,\n\tSubscriptionKind,\n\tTimestampRange,\n\tTokenBalance,\n\tTransactionData,\n\tTransactionInfo,\n\tTransactionMessage,\n\tTransactionNodeData,\n\tTransactionResponse,\n\tTransactionStatusMetadata,\n\tTransactionWithMeta,\n\tTriggeredTransaction,\n\tTriggerInfo,\n\tTruncationReason,\n\tValidatorAccountInfo,\n\tValidatorHealth,\n\tValidatorInfoRequest,\n\tWorkflowLineage,\n\tWorkflowNode,\n} from \"../generated/types\";\nexport * from \"./clients\";\nexport * from \"./errors\";\nexport * from \"./http-transport\";\n\nimport {\n\tRIALO_DEVNET_CHAIN,\n\tRIALO_LOCALNET_CHAIN,\n\tRIALO_MAINNET_CHAIN,\n\tRIALO_TESTNET_CHAIN,\n} from \"../constants\";\nimport {\n\tRialoClient,\n\ttype RialoClientConfig,\n\ttype RialoNetwork,\n} from \"./clients\";\nimport { RpcError, RpcErrorCode } from \"./errors\";\nimport { HttpTransport } from \"./http-transport\";\n\n/**\n * Creates an RPC client with automatic retry and timeout handling.\n *\n * @param config - Client configuration with chain definition and optional transport settings\n * @param config.chain - Chain definition (e.g., RIALO_DEVNET_CHAIN, RIALO_MAINNET_CHAIN) or a custom chain with your own rpcUrl\n * @param config.transport - Optional transport configuration (timeout, retries, headers)\n * @returns Configured RialoClient instance\n *\n * @example\n * ```typescript\n * // Basic usage with preset chain\n * const client = createRialoClient({ chain: RIALO_DEVNET_CHAIN });\n *\n * // With custom transport config\n * const client = createRialoClient({\n * chain: RIALO_MAINNET_CHAIN,\n * transport: { timeout: 30000, maxRetries: 5 }\n * });\n *\n * // With custom RPC URL\n * const client = createRialoClient({\n * chain: {\n * id: 'rialo:mainnet',\n * name: 'Mainnet',\n * rpcUrl: 'https://mainnet.custom-rpc.com:4101'\n * },\n * });\n * ```\n */\nexport function createRialoClient(config: RialoClientConfig): RialoClient {\n\tconst { chain, transport } = config;\n\tconst httpTransport = new HttpTransport(chain.rpcUrl, transport);\n\n\treturn new RialoClient(httpTransport, chain);\n}\n\n/**\n * Returns a default RialoClientConfig for a given network.\n *\n * Provides preset chain configurations for standard Rialo networks, making it easy\n * to connect to mainnet, devnet, testnet, or localnet without manual configuration.\n *\n * @param network - Network identifier: \"mainnet\", \"devnet\", \"testnet\", or \"localnet\"\n * @returns Default RialoClientConfig for the specified network\n * @throws {RpcError} With code INVALID_NETWORK if an unknown network is provided\n *\n * @example\n * ```typescript\n * // Get devnet config and create client\n * const config = getDefaultRialoClientConfig('devnet');\n * const client = createRialoClient(config);\n *\n * // Customize the config with transport options\n * const config = getDefaultRialoClientConfig('mainnet');\n * const client = createRialoClient({\n * ...config,\n * transport: { timeout: 60000, maxRetries: 5 }\n * });\n *\n * // Use custom RPC URL while preserving network identity\n * const config = getDefaultRialoClientConfig('mainnet');\n * const client = createRialoClient({\n * ...config,\n * chain: {\n * ...config.chain,\n * rpcUrl: 'https://mainnet.custom-rpc.com:4101'\n * },\n * });\n * ```\n */\nexport function getDefaultRialoClientConfig(\n\tnetwork: RialoNetwork,\n): RialoClientConfig {\n\tswitch (network) {\n\t\tcase \"mainnet\":\n\t\t\treturn { chain: RIALO_MAINNET_CHAIN };\n\t\tcase \"devnet\":\n\t\t\treturn { chain: RIALO_DEVNET_CHAIN };\n\t\tcase \"testnet\":\n\t\t\treturn { chain: RIALO_TESTNET_CHAIN };\n\t\tcase \"localnet\":\n\t\t\treturn { chain: RIALO_LOCALNET_CHAIN };\n\t\tdefault:\n\t\t\tthrow new RpcError(\n\t\t\t\tRpcErrorCode.INVALID_NETWORK,\n\t\t\t\t`Unknown network: ${network}`,\n\t\t\t);\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Bincode deserialization reader\n *\n * Matches Rust's bincode crate with default configuration:\n * - Little-endian byte order\n * - Fixed-size integer encoding (no varint)\n * - u64 length prefixes for dynamic collections\n * - u32 enum variant indices\n */\nexport class BincodeReader {\n\tprivate view: DataView;\n\tprivate offset: number;\n\tprivate bytes: Uint8Array;\n\n\tconstructor(data: Uint8Array) {\n\t\tthis.bytes = data;\n\t\tthis.view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\t\tthis.offset = 0;\n\t}\n\n\t// ========== Position Management ==========\n\n\tgetOffset(): number {\n\t\treturn this.offset;\n\t}\n\n\tremaining(): number {\n\t\treturn this.bytes.length - this.offset;\n\t}\n\n\tisExhausted(): boolean {\n\t\treturn this.offset >= this.bytes.length;\n\t}\n\n\tskip(bytes: number): this {\n\t\tthis.ensureAvailable(bytes);\n\t\tthis.offset += bytes;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Peek at bytes without advancing the offset\n\t */\n\tpeek(length: number): Uint8Array {\n\t\tthis.ensureAvailable(length);\n\t\treturn this.bytes.slice(this.offset, this.offset + length);\n\t}\n\n\t/**\n\t * Reset reader to beginning\n\t */\n\treset(): this {\n\t\tthis.offset = 0;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Seek to specific offset\n\t */\n\tseek(offset: number): this {\n\t\tif (offset < 0 || offset > this.bytes.length) {\n\t\t\tthrow new Error(\n\t\t\t\t`Invalid seek offset: ${offset}, buffer length: ${this.bytes.length}`,\n\t\t\t);\n\t\t}\n\t\tthis.offset = offset;\n\t\treturn this;\n\t}\n\n\t// ========== Primitive Types ==========\n\n\treadU8(): number {\n\t\tthis.ensureAvailable(1);\n\t\tconst value = this.view.getUint8(this.offset);\n\t\tthis.offset += 1;\n\t\treturn value;\n\t}\n\n\treadU16(): number {\n\t\tthis.ensureAvailable(2);\n\t\tconst value = this.view.getUint16(this.offset, true);\n\t\tthis.offset += 2;\n\t\treturn value;\n\t}\n\n\treadU32(): number {\n\t\tthis.ensureAvailable(4);\n\t\tconst value = this.view.getUint32(this.offset, true);\n\t\tthis.offset += 4;\n\t\treturn value;\n\t}\n\n\treadU64(): bigint {\n\t\tthis.ensureAvailable(8);\n\t\tconst low = this.view.getUint32(this.offset, true);\n\t\tconst high = this.view.getUint32(this.offset + 4, true);\n\t\tthis.offset += 8;\n\t\treturn BigInt(low) | (BigInt(high) << 32n);\n\t}\n\n\treadU128(): bigint {\n\t\tthis.ensureAvailable(16);\n\t\tconst low = this.readU64();\n\t\tconst high = this.readU64();\n\t\treturn low | (high << 64n);\n\t}\n\n\treadI8(): number {\n\t\tthis.ensureAvailable(1);\n\t\tconst value = this.view.getInt8(this.offset);\n\t\tthis.offset += 1;\n\t\treturn value;\n\t}\n\n\treadI16(): number {\n\t\tthis.ensureAvailable(2);\n\t\tconst value = this.view.getInt16(this.offset, true);\n\t\tthis.offset += 2;\n\t\treturn value;\n\t}\n\n\treadI32(): number {\n\t\tthis.ensureAvailable(4);\n\t\tconst value = this.view.getInt32(this.offset, true);\n\t\tthis.offset += 4;\n\t\treturn value;\n\t}\n\n\treadI64(): bigint {\n\t\tthis.ensureAvailable(8);\n\t\tconst low = this.view.getUint32(this.offset, true);\n\t\tconst high = this.view.getInt32(this.offset + 4, true);\n\t\tthis.offset += 8;\n\t\t// Use BigInt arithmetic to properly handle sign extension\n\t\treturn BigInt(low) | (BigInt(high) << 32n);\n\t}\n\n\treadI128(): bigint {\n\t\t// Read as unsigned first, then convert to signed\n\t\tconst unsigned = this.readU128();\n\t\t// If sign bit (bit 127) is set, convert to negative\n\t\tconst signBit = 1n << 127n;\n\t\tif ((unsigned & signBit) !== 0n) {\n\t\t\treturn unsigned - (1n << 128n);\n\t\t}\n\t\treturn unsigned;\n\t}\n\n\treadF32(): number {\n\t\tthis.ensureAvailable(4);\n\t\tconst value = this.view.getFloat32(this.offset, true);\n\t\tthis.offset += 4;\n\t\treturn value;\n\t}\n\n\treadF64(): number {\n\t\tthis.ensureAvailable(8);\n\t\tconst value = this.view.getFloat64(this.offset, true);\n\t\tthis.offset += 8;\n\t\treturn value;\n\t}\n\n\treadBool(): boolean {\n\t\tconst value = this.readU8();\n\t\tif (value > 1) {\n\t\t\tthrow new Error(`Invalid boolean value: ${value}`);\n\t\t}\n\t\treturn value === 1;\n\t}\n\n\t// ========== Compound Types ==========\n\n\treadBytes(length: number): Uint8Array {\n\t\tthis.ensureAvailable(length);\n\t\tconst bytes = this.bytes.slice(this.offset, this.offset + length);\n\t\tthis.offset += length;\n\t\treturn bytes;\n\t}\n\n\treadFixedArray(length: number): Uint8Array {\n\t\treturn this.readBytes(length);\n\t}\n\n\treadVecBytes(): Uint8Array {\n\t\tconst length = this.readLength();\n\t\treturn this.readBytes(length);\n\t}\n\n\treadString(): string {\n\t\tconst bytes = this.readVecBytes();\n\t\treturn new TextDecoder().decode(bytes);\n\t}\n\n\treadVariant(): number {\n\t\treturn this.readU32();\n\t}\n\n\treadOption<T>(readValue: () => T): T | null {\n\t\tconst hasValue = this.readU8();\n\t\tif (hasValue === 0) {\n\t\t\treturn null;\n\t\t}\n\t\tif (hasValue !== 1) {\n\t\t\tthrow new Error(`Invalid option discriminant: ${hasValue}`);\n\t\t}\n\t\treturn readValue();\n\t}\n\n\treadVec<T>(readElement: () => T): T[] {\n\t\tconst length = this.readLength();\n\t\tconst result: T[] = [];\n\t\tfor (let i = 0; i < length; i++) {\n\t\t\tresult.push(readElement());\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * Read a tuple of fixed size with heterogeneous types\n\t */\n\treadTuple<T extends unknown[]>(readers: { [K in keyof T]: () => T[K] }): T {\n\t\treturn readers.map((read) => read()) as T;\n\t}\n\n\treadMap<K, V>(readKey: () => K, readValue: () => V): Map<K, V> {\n\t\tconst length = this.readLength();\n\t\tconst map = new Map<K, V>();\n\t\tfor (let i = 0; i < length; i++) {\n\t\t\tconst key = readKey();\n\t\t\tconst value = readValue();\n\t\t\tmap.set(key, value);\n\t\t}\n\t\treturn map;\n\t}\n\n\t// ========== Helpers ==========\n\n\t/**\n\t * Read length as u64 but validate it's within safe integer range\n\t */\n\tprivate readLength(): number {\n\t\tconst length = this.readU64();\n\t\tif (length > BigInt(Number.MAX_SAFE_INTEGER)) {\n\t\t\tthrow new Error(`Length ${length} exceeds maximum safe integer`);\n\t\t}\n\t\tconst numLength = Number(length);\n\t\t// Additional sanity check: length shouldn't exceed remaining bytes\n\t\tif (numLength > this.remaining()) {\n\t\t\tthrow new Error(\n\t\t\t\t`Length ${numLength} exceeds remaining bytes ${this.remaining()}`,\n\t\t\t);\n\t\t}\n\t\treturn numLength;\n\t}\n\n\tprivate ensureAvailable(bytes: number): void {\n\t\tif (this.offset + bytes > this.bytes.length) {\n\t\t\tthrow new Error(\n\t\t\t\t`Unexpected end of data: need ${bytes} bytes at offset ${this.offset}, ` +\n\t\t\t\t\t`but only ${this.bytes.length - this.offset} available`,\n\t\t\t);\n\t\t}\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Bincode serialization writer\n *\n * Matches Rust's bincode crate with default configuration:\n * - Little-endian byte order\n * - Fixed-size integer encoding (no varint)\n * - u64 length prefixes for dynamic collections\n * - u32 enum variant indices\n */\nexport class BincodeWriter {\n\tprivate buffer: Uint8Array;\n\tprivate offset: number;\n\tprivate view: DataView;\n\n\tconstructor(initialCapacity = 256) {\n\t\tthis.buffer = new Uint8Array(initialCapacity);\n\t\tthis.view = new DataView(this.buffer.buffer);\n\t\tthis.offset = 0;\n\t}\n\n\t// ========== Primitive Types ==========\n\n\twriteU8(value: number): this {\n\t\tif (value < 0 || value > 0xff) {\n\t\t\tthrow new Error(`u8 value out of range: ${value}`);\n\t\t}\n\t\tthis.ensureCapacity(1);\n\t\tthis.buffer[this.offset++] = value;\n\t\treturn this;\n\t}\n\n\twriteU16(value: number): this {\n\t\tif (value < 0 || value > 0xffff) {\n\t\t\tthrow new Error(`u16 value out of range: ${value}`);\n\t\t}\n\t\tthis.ensureCapacity(2);\n\t\tthis.view.setUint16(this.offset, value, true);\n\t\tthis.offset += 2;\n\t\treturn this;\n\t}\n\n\twriteU32(value: number): this {\n\t\tif (value < 0 || value > 0xffffffff) {\n\t\t\tthrow new Error(`u32 value out of range: ${value}`);\n\t\t}\n\t\tthis.ensureCapacity(4);\n\t\tthis.view.setUint32(this.offset, value, true);\n\t\tthis.offset += 4;\n\t\treturn this;\n\t}\n\n\twriteU64(value: bigint | number): this {\n\t\tconst val = BigInt(value);\n\t\tif (val < 0n || val > 0xffff_ffff_ffff_ffffn) {\n\t\t\tthrow new Error(`u64 value out of range: ${val}`);\n\t\t}\n\t\tthis.ensureCapacity(8);\n\t\t// Write as two u32s for better performance\n\t\tthis.view.setUint32(this.offset, Number(val & 0xffff_ffffn), true);\n\t\tthis.view.setUint32(\n\t\t\tthis.offset + 4,\n\t\t\tNumber((val >> 32n) & 0xffff_ffffn),\n\t\t\ttrue,\n\t\t);\n\t\tthis.offset += 8;\n\t\treturn this;\n\t}\n\n\twriteU128(value: bigint): this {\n\t\tif (value < 0n || value > (1n << 128n) - 1n) {\n\t\t\tthrow new Error(`u128 value out of range: ${value}`);\n\t\t}\n\t\tthis.writeU64(value & ((1n << 64n) - 1n));\n\t\tthis.writeU64(value >> 64n);\n\t\treturn this;\n\t}\n\n\twriteI8(value: number): this {\n\t\tif (value < -128 || value > 127) {\n\t\t\tthrow new Error(`i8 value out of range: ${value}`);\n\t\t}\n\t\tthis.ensureCapacity(1);\n\t\tthis.view.setInt8(this.offset, value);\n\t\tthis.offset += 1;\n\t\treturn this;\n\t}\n\n\twriteI16(value: number): this {\n\t\tif (value < -32768 || value > 32767) {\n\t\t\tthrow new Error(`i16 value out of range: ${value}`);\n\t\t}\n\t\tthis.ensureCapacity(2);\n\t\tthis.view.setInt16(this.offset, value, true);\n\t\tthis.offset += 2;\n\t\treturn this;\n\t}\n\n\twriteI32(value: number): this {\n\t\tif (value < -2147483648 || value > 2147483647) {\n\t\t\tthrow new Error(`i32 value out of range: ${value}`);\n\t\t}\n\t\tthis.ensureCapacity(4);\n\t\tthis.view.setInt32(this.offset, value, true);\n\t\tthis.offset += 4;\n\t\treturn this;\n\t}\n\n\twriteI64(value: bigint): this {\n\t\tconst min = -(1n << 63n);\n\t\tconst max = (1n << 63n) - 1n;\n\t\tif (value < min || value > max) {\n\t\t\tthrow new Error(`i64 value out of range: ${value}`);\n\t\t}\n\t\tthis.ensureCapacity(8);\n\t\t// For signed integers, we write the bit pattern directly\n\t\t// JavaScript's BigInt handles two's complement correctly\n\t\tconst unsigned = value < 0n ? value + (1n << 64n) : value;\n\t\tthis.view.setUint32(this.offset, Number(unsigned & 0xffff_ffffn), true);\n\t\tthis.view.setUint32(\n\t\t\tthis.offset + 4,\n\t\t\tNumber((unsigned >> 32n) & 0xffff_ffffn),\n\t\t\ttrue,\n\t\t);\n\t\tthis.offset += 8;\n\t\treturn this;\n\t}\n\n\twriteI128(value: bigint): this {\n\t\tconst min = -(1n << 127n);\n\t\tconst max = (1n << 127n) - 1n;\n\t\tif (value < min || value > max) {\n\t\t\tthrow new Error(`i128 value out of range: ${value}`);\n\t\t}\n\t\t// Convert to unsigned representation for writing\n\t\tconst unsigned = value < 0n ? value + (1n << 128n) : value;\n\t\tthis.writeU64(unsigned & ((1n << 64n) - 1n));\n\t\tthis.writeU64(unsigned >> 64n);\n\t\treturn this;\n\t}\n\n\twriteF32(value: number): this {\n\t\tthis.ensureCapacity(4);\n\t\tthis.view.setFloat32(this.offset, value, true);\n\t\tthis.offset += 4;\n\t\treturn this;\n\t}\n\n\twriteF64(value: number): this {\n\t\tthis.ensureCapacity(8);\n\t\tthis.view.setFloat64(this.offset, value, true);\n\t\tthis.offset += 8;\n\t\treturn this;\n\t}\n\n\twriteBool(value: boolean): this {\n\t\tthis.ensureCapacity(1);\n\t\tthis.buffer[this.offset++] = value ? 1 : 0;\n\t\treturn this;\n\t}\n\n\t// ========== Compound Types ==========\n\n\twriteBytes(bytes: Uint8Array): this {\n\t\tthis.ensureCapacity(bytes.length);\n\t\tthis.buffer.set(bytes, this.offset);\n\t\tthis.offset += bytes.length;\n\t\treturn this;\n\t}\n\n\twriteFixedArray(bytes: Uint8Array, expectedLength?: number): this {\n\t\tif (expectedLength !== undefined && bytes.length !== expectedLength) {\n\t\t\tthrow new Error(\n\t\t\t\t`Fixed array length mismatch: expected ${expectedLength}, got ${bytes.length}`,\n\t\t\t);\n\t\t}\n\t\treturn this.writeBytes(bytes);\n\t}\n\n\twriteVecBytes(bytes: Uint8Array): this {\n\t\tthis.writeU64(BigInt(bytes.length));\n\t\treturn this.writeBytes(bytes);\n\t}\n\n\twriteString(str: string): this {\n\t\tconst bytes = new TextEncoder().encode(str);\n\t\treturn this.writeVecBytes(bytes);\n\t}\n\n\twriteVariant(index: number): this {\n\t\treturn this.writeU32(index);\n\t}\n\n\twriteOption<T>(\n\t\tvalue: T | null | undefined,\n\t\twriteValue: (writer: BincodeWriter, val: T) => void,\n\t): this {\n\t\tif (value === null || value === undefined) {\n\t\t\tthis.writeU8(0);\n\t\t} else {\n\t\t\tthis.writeU8(1);\n\t\t\twriteValue(this, value);\n\t\t}\n\t\treturn this;\n\t}\n\n\twriteVec<T>(\n\t\titems: T[],\n\t\twriteItem: (writer: BincodeWriter, item: T) => void,\n\t): this {\n\t\tthis.writeU64(BigInt(items.length));\n\t\tfor (const item of items) {\n\t\t\twriteItem(this, item);\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Write a tuple (fixed-size heterogeneous collection)\n\t */\n\twriteTuple<T extends unknown[]>(\n\t\titems: T,\n\t\twriters: { [K in keyof T]: (writer: BincodeWriter, val: T[K]) => void },\n\t): this {\n\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\t(writers[i] as (writer: BincodeWriter, val: unknown) => void)(\n\t\t\t\tthis,\n\t\t\t\titems[i],\n\t\t\t);\n\t\t}\n\t\treturn this;\n\t}\n\n\twriteMap<K, V>(\n\t\tmap: Map<K, V>,\n\t\twriteKey: (writer: BincodeWriter, key: K) => void,\n\t\twriteValue: (writer: BincodeWriter, value: V) => void,\n\t): this {\n\t\tthis.writeU64(BigInt(map.size));\n\t\tfor (const [key, value] of map) {\n\t\t\twriteKey(this, key);\n\t\t\twriteValue(this, value);\n\t\t}\n\t\treturn this;\n\t}\n\n\t// ========== Output ==========\n\n\ttoBytes(): Uint8Array {\n\t\treturn this.buffer.slice(0, this.offset);\n\t}\n\n\t/**\n\t * Get a view of the written bytes WITHOUT copying.\n\t *\n\t * ⚠️ WARNING: This returns a view into the internal buffer.\n\t * The view becomes INVALID if:\n\t * - The writer continues writing (may trigger resize)\n\t * - The writer is cleared via clear()\n\t *\n\t * Use toBytes() for a safe copy, or use this only for immediate\n\t * read-only access when performance is critical.\n\t */\n\ttoView(): Uint8Array {\n\t\treturn this.buffer.subarray(0, this.offset);\n\t}\n\n\tlength(): number {\n\t\treturn this.offset;\n\t}\n\n\tclear(): this {\n\t\tthis.offset = 0;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Reserve additional capacity\n\t */\n\treserve(additionalBytes: number): this {\n\t\tthis.ensureCapacity(additionalBytes);\n\t\treturn this;\n\t}\n\n\t// ========== Internal ==========\n\n\tprivate ensureCapacity(needed: number): void {\n\t\tconst required = this.offset + needed;\n\t\tif (required <= this.buffer.length) {\n\t\t\treturn;\n\t\t}\n\t\t// Grow by at least 2x or to required size\n\t\tlet newCapacity = this.buffer.length * 2;\n\t\twhile (newCapacity < required) {\n\t\t\tnewCapacity *= 2;\n\t\t}\n\t\tconst newBuffer = new Uint8Array(newCapacity);\n\t\tnewBuffer.set(this.buffer);\n\t\tthis.buffer = newBuffer;\n\t\tthis.view = new DataView(this.buffer.buffer);\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { BincodeReader } from \"./reader\";\nimport { BincodeWriter } from \"./writer\";\n\n/**\n * Type definitions for bincode schemas\n *\n * IMPORTANT: For structs and enums, field/variant order MUST match Rust definition order.\n * Use arrays of tuples instead of objects to guarantee order preservation.\n */\nexport type BincodeSchema =\n\t| { type: \"u8\" }\n\t| { type: \"u16\" }\n\t| { type: \"u32\" }\n\t| { type: \"u64\" }\n\t| { type: \"u128\" }\n\t| { type: \"i8\" }\n\t| { type: \"i16\" }\n\t| { type: \"i32\" }\n\t| { type: \"i64\" }\n\t| { type: \"i128\" }\n\t| { type: \"f32\" }\n\t| { type: \"f64\" }\n\t| { type: \"bool\" }\n\t| { type: \"string\" }\n\t| { type: \"bytes\" }\n\t| { type: \"unit\" } // Rust's () type - zero size\n\t| { type: \"fixedArray\"; length: number }\n\t| { type: \"vec\"; element: BincodeSchema }\n\t| { type: \"option\"; inner: BincodeSchema }\n\t| { type: \"tuple\"; elements: BincodeSchema[] }\n\t| { type: \"struct\"; fields: StructField[] } // Ordered array, not object!\n\t| { type: \"enum\"; variants: EnumVariant[] } // Ordered array, not object!\n\t| { type: \"map\"; key: BincodeSchema; value: BincodeSchema }\n\t| { type: \"pubkey\" }; // 32-byte public key (Solana specific)\n\n/**\n * Struct field definition - order matters!\n */\nexport interface StructField {\n\tname: string;\n\tschema: BincodeSchema;\n}\n\n/**\n * Enum variant definition - order matters!\n */\nexport interface EnumVariant {\n\tname: string;\n\tschema: BincodeSchema | null; // null for unit variants\n}\n\n// ========== Schema Builder Helpers ==========\n\nexport const Schema = {\n\tu8: (): BincodeSchema => ({ type: \"u8\" }),\n\tu16: (): BincodeSchema => ({ type: \"u16\" }),\n\tu32: (): BincodeSchema => ({ type: \"u32\" }),\n\tu64: (): BincodeSchema => ({ type: \"u64\" }),\n\tu128: (): BincodeSchema => ({ type: \"u128\" }),\n\ti8: (): BincodeSchema => ({ type: \"i8\" }),\n\ti16: (): BincodeSchema => ({ type: \"i16\" }),\n\ti32: (): BincodeSchema => ({ type: \"i32\" }),\n\ti64: (): BincodeSchema => ({ type: \"i64\" }),\n\ti128: (): BincodeSchema => ({ type: \"i128\" }),\n\tf32: (): BincodeSchema => ({ type: \"f32\" }),\n\tf64: (): BincodeSchema => ({ type: \"f64\" }),\n\tbool: (): BincodeSchema => ({ type: \"bool\" }),\n\tstring: (): BincodeSchema => ({ type: \"string\" }),\n\tbytes: (): BincodeSchema => ({ type: \"bytes\" }),\n\tunit: (): BincodeSchema => ({ type: \"unit\" }),\n\n\tfixedArray: (length: number): BincodeSchema => ({\n\t\ttype: \"fixedArray\",\n\t\tlength,\n\t}),\n\n\tvec: (element: BincodeSchema): BincodeSchema => ({\n\t\ttype: \"vec\",\n\t\telement,\n\t}),\n\n\toption: (inner: BincodeSchema): BincodeSchema => ({\n\t\ttype: \"option\",\n\t\tinner,\n\t}),\n\n\ttuple: (...elements: BincodeSchema[]): BincodeSchema => ({\n\t\ttype: \"tuple\",\n\t\telements,\n\t}),\n\n\t/**\n\t * Define a struct with ordered fields\n\t * @example\n\t * Schema.struct([\n\t * [\"id\", Schema.u64()],\n\t * [\"name\", Schema.string()],\n\t * [\"active\", Schema.bool()],\n\t * ])\n\t */\n\tstruct: (fields: [string, BincodeSchema][]): BincodeSchema => ({\n\t\ttype: \"struct\",\n\t\tfields: fields.map(([name, schema]) => ({ name, schema })),\n\t}),\n\n\t/**\n\t * Define an enum with ordered variants\n\t * @example\n\t * Schema.enum([\n\t * [\"None\", null],\n\t * [\"Some\", Schema.u64()],\n\t * [\"Error\", Schema.string()],\n\t * ])\n\t */\n\tenum: (variants: [string, BincodeSchema | null][]): BincodeSchema => ({\n\t\ttype: \"enum\",\n\t\tvariants: variants.map(([name, schema]) => ({ name, schema })),\n\t}),\n\n\tmap: (key: BincodeSchema, value: BincodeSchema): BincodeSchema => ({\n\t\ttype: \"map\",\n\t\tkey,\n\t\tvalue,\n\t}),\n\n\tpubkey: (): BincodeSchema => ({ type: \"pubkey\" }),\n} as const;\n\n// ========== Serialization ==========\n\n/**\n * Serialize a value according to a schema\n */\nexport function serialize(schema: BincodeSchema, value: unknown): Uint8Array {\n\tconst writer = new BincodeWriter();\n\twriteValue(writer, schema, value);\n\treturn writer.toBytes();\n}\n\n/**\n * Deserialize bytes according to a schema\n */\nexport function deserialize<T>(schema: BincodeSchema, data: Uint8Array): T {\n\tconst reader = new BincodeReader(data);\n\tconst result = readValue(reader, schema) as T;\n\n\t// Verify all bytes were consumed (optional strict mode)\n\tif (!reader.isExhausted()) {\n\t\tconsole.warn(\n\t\t\t`Bincode deserialize: ${reader.remaining()} bytes remaining after parsing`,\n\t\t);\n\t}\n\n\treturn result;\n}\n\n/**\n * Deserialize bytes with strict validation\n */\nexport function deserializeStrict<T>(\n\tschema: BincodeSchema,\n\tdata: Uint8Array,\n): T {\n\tconst reader = new BincodeReader(data);\n\tconst result = readValue(reader, schema) as T;\n\n\tif (!reader.isExhausted()) {\n\t\tthrow new Error(\n\t\t\t`Unexpected data: ${reader.remaining()} bytes remaining after parsing`,\n\t\t);\n\t}\n\n\treturn result;\n}\n\nfunction writeValue(\n\twriter: BincodeWriter,\n\tschema: BincodeSchema,\n\tvalue: unknown,\n): void {\n\tswitch (schema.type) {\n\t\tcase \"u8\":\n\t\t\twriter.writeU8(value as number);\n\t\t\tbreak;\n\t\tcase \"u16\":\n\t\t\twriter.writeU16(value as number);\n\t\t\tbreak;\n\t\tcase \"u32\":\n\t\t\twriter.writeU32(value as number);\n\t\t\tbreak;\n\t\tcase \"u64\":\n\t\t\twriter.writeU64(value as bigint);\n\t\t\tbreak;\n\t\tcase \"u128\":\n\t\t\twriter.writeU128(value as bigint);\n\t\t\tbreak;\n\t\tcase \"i8\":\n\t\t\twriter.writeI8(value as number);\n\t\t\tbreak;\n\t\tcase \"i16\":\n\t\t\twriter.writeI16(value as number);\n\t\t\tbreak;\n\t\tcase \"i32\":\n\t\t\twriter.writeI32(value as number);\n\t\t\tbreak;\n\t\tcase \"i64\":\n\t\t\twriter.writeI64(value as bigint);\n\t\t\tbreak;\n\t\tcase \"i128\":\n\t\t\twriter.writeI128(value as bigint);\n\t\t\tbreak;\n\t\tcase \"f32\":\n\t\t\twriter.writeF32(value as number);\n\t\t\tbreak;\n\t\tcase \"f64\":\n\t\t\twriter.writeF64(value as number);\n\t\t\tbreak;\n\t\tcase \"bool\":\n\t\t\twriter.writeBool(value as boolean);\n\t\t\tbreak;\n\t\tcase \"string\":\n\t\t\twriter.writeString(value as string);\n\t\t\tbreak;\n\t\tcase \"bytes\":\n\t\t\twriter.writeVecBytes(value as Uint8Array);\n\t\t\tbreak;\n\t\tcase \"unit\":\n\t\t\t// Nothing to write for unit type\n\t\t\tbreak;\n\t\tcase \"fixedArray\": {\n\t\t\tconst arr = value as Uint8Array;\n\t\t\tif (arr.length !== schema.length) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Fixed array length mismatch: expected ${schema.length}, got ${arr.length}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\twriter.writeFixedArray(arr);\n\t\t\tbreak;\n\t\t}\n\t\tcase \"pubkey\": {\n\t\t\tconst arr = value as Uint8Array;\n\t\t\tif (arr.length !== 32) {\n\t\t\t\tthrow new Error(`Pubkey must be exactly 32 bytes, got ${arr.length}`);\n\t\t\t}\n\t\t\twriter.writeFixedArray(arr);\n\t\t\tbreak;\n\t\t}\n\t\tcase \"vec\": {\n\t\t\tconst arr = value as unknown[];\n\t\t\twriter.writeU64(BigInt(arr.length));\n\t\t\tfor (const item of arr) {\n\t\t\t\twriteValue(writer, schema.element, item);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase \"option\": {\n\t\t\tif (value === null || value === undefined) {\n\t\t\t\twriter.writeU8(0);\n\t\t\t} else {\n\t\t\t\twriter.writeU8(1);\n\t\t\t\twriteValue(writer, schema.inner, value);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase \"tuple\": {\n\t\t\tconst arr = value as unknown[];\n\t\t\tif (arr.length !== schema.elements.length) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Tuple length mismatch: expected ${schema.elements.length}, got ${arr.length}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tfor (let i = 0; i < schema.elements.length; i++) {\n\t\t\t\twriteValue(writer, schema.elements[i], arr[i]);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase \"struct\": {\n\t\t\tconst obj = value as Record<string, unknown>;\n\t\t\tfor (const field of schema.fields) {\n\t\t\t\tif (!(field.name in obj)) {\n\t\t\t\t\tthrow new Error(`Missing struct field: ${field.name}`);\n\t\t\t\t}\n\t\t\t\twriteValue(writer, field.schema, obj[field.name]);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase \"enum\": {\n\t\t\tconst enumValue = value as { variant: string; value?: unknown };\n\t\t\tconst variantIndex = schema.variants.findIndex(\n\t\t\t\t(v) => v.name === enumValue.variant,\n\t\t\t);\n\t\t\tif (variantIndex === -1) {\n\t\t\t\tconst validVariants = schema.variants.map((v) => v.name).join(\", \");\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Unknown variant: ${enumValue.variant}. Valid variants: ${validVariants}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\twriter.writeVariant(variantIndex);\n\t\t\tconst variantSchema = schema.variants[variantIndex].schema;\n\t\t\tif (variantSchema !== null) {\n\t\t\t\twriteValue(writer, variantSchema, enumValue.value);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase \"map\": {\n\t\t\tconst map = value as Map<unknown, unknown>;\n\t\t\twriter.writeU64(BigInt(map.size));\n\t\t\tfor (const [k, v] of map) {\n\t\t\t\twriteValue(writer, schema.key, k);\n\t\t\t\twriteValue(writer, schema.value, v);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tdefault: {\n\t\t\tthrow new Error(`Unknown schema type: ${JSON.stringify(schema)}`);\n\t\t}\n\t}\n}\n\nfunction readValue(reader: BincodeReader, schema: BincodeSchema): unknown {\n\tswitch (schema.type) {\n\t\tcase \"u8\":\n\t\t\treturn reader.readU8();\n\t\tcase \"u16\":\n\t\t\treturn reader.readU16();\n\t\tcase \"u32\":\n\t\t\treturn reader.readU32();\n\t\tcase \"u64\":\n\t\t\treturn reader.readU64();\n\t\tcase \"u128\":\n\t\t\treturn reader.readU128();\n\t\tcase \"i8\":\n\t\t\treturn reader.readI8();\n\t\tcase \"i16\":\n\t\t\treturn reader.readI16();\n\t\tcase \"i32\":\n\t\t\treturn reader.readI32();\n\t\tcase \"i64\":\n\t\t\treturn reader.readI64();\n\t\tcase \"i128\":\n\t\t\treturn reader.readI128();\n\t\tcase \"f32\":\n\t\t\treturn reader.readF32();\n\t\tcase \"f64\":\n\t\t\treturn reader.readF64();\n\t\tcase \"bool\":\n\t\t\treturn reader.readBool();\n\t\tcase \"string\":\n\t\t\treturn reader.readString();\n\t\tcase \"bytes\":\n\t\t\treturn reader.readVecBytes();\n\t\tcase \"unit\":\n\t\t\treturn undefined;\n\t\tcase \"fixedArray\":\n\t\t\treturn reader.readFixedArray(schema.length);\n\t\tcase \"pubkey\":\n\t\t\treturn reader.readFixedArray(32);\n\t\tcase \"vec\": {\n\t\t\tconst lengthBigInt = reader.readU64();\n\t\t\tif (lengthBigInt > BigInt(Number.MAX_SAFE_INTEGER)) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Vec length ${lengthBigInt} exceeds safe integer range`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst length = Number(lengthBigInt);\n\t\t\tconst result: unknown[] = [];\n\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\tresult.push(readValue(reader, schema.element));\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t\tcase \"option\": {\n\t\t\tconst hasValue = reader.readU8();\n\t\t\tif (hasValue === 0) return null;\n\t\t\tif (hasValue !== 1) {\n\t\t\t\tthrow new Error(`Invalid option discriminant: ${hasValue}`);\n\t\t\t}\n\t\t\treturn readValue(reader, schema.inner);\n\t\t}\n\t\tcase \"tuple\": {\n\t\t\tconst result: unknown[] = [];\n\t\t\tfor (const elementSchema of schema.elements) {\n\t\t\t\tresult.push(readValue(reader, elementSchema));\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t\tcase \"struct\": {\n\t\t\tconst result: Record<string, unknown> = {};\n\t\t\tfor (const field of schema.fields) {\n\t\t\t\tresult[field.name] = readValue(reader, field.schema);\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t\tcase \"enum\": {\n\t\t\tconst variantIndex = reader.readVariant();\n\t\t\tif (variantIndex >= schema.variants.length) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Invalid variant index: ${variantIndex}, max: ${schema.variants.length - 1}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst variant = schema.variants[variantIndex];\n\t\t\tif (variant.schema === null) {\n\t\t\t\treturn { variant: variant.name };\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tvariant: variant.name,\n\t\t\t\tvalue: readValue(reader, variant.schema),\n\t\t\t};\n\t\t}\n\t\tcase \"map\": {\n\t\t\tconst lengthBigInt = reader.readU64();\n\t\t\tif (lengthBigInt > BigInt(Number.MAX_SAFE_INTEGER)) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Map length ${lengthBigInt} exceeds safe integer range`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst length = Number(lengthBigInt);\n\t\t\tconst map = new Map<unknown, unknown>();\n\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\tconst key = readValue(reader, schema.key);\n\t\t\t\tconst value = readValue(reader, schema.value);\n\t\t\t\tmap.set(key, value);\n\t\t\t}\n\t\t\treturn map;\n\t\t}\n\t\tdefault: {\n\t\t\t// Exhaustive check - TypeScript will error if a case is missing\n\t\t\tconst _exhaustive: never = schema;\n\t\t\tthrow new Error(\n\t\t\t\t`Unknown schema type: ${(_exhaustive as BincodeSchema).type}`,\n\t\t\t);\n\t\t}\n\t}\n}\n\n// ========== Type Inference Helpers ==========\n\n/**\n * Infer TypeScript type from schema (for documentation purposes)\n *\n * Usage:\n * const mySchema = Schema.struct([...]);\n * type MyType = InferSchema<typeof mySchema>;\n */\nexport type InferSchema<S extends BincodeSchema> = S extends { type: \"u8\" }\n\t? number\n\t: S extends { type: \"u16\" }\n\t\t? number\n\t\t: S extends { type: \"u32\" }\n\t\t\t? number\n\t\t\t: S extends { type: \"u64\" }\n\t\t\t\t? bigint\n\t\t\t\t: S extends { type: \"u128\" }\n\t\t\t\t\t? bigint\n\t\t\t\t\t: S extends { type: \"i8\" }\n\t\t\t\t\t\t? number\n\t\t\t\t\t\t: S extends { type: \"i16\" }\n\t\t\t\t\t\t\t? number\n\t\t\t\t\t\t\t: S extends { type: \"i32\" }\n\t\t\t\t\t\t\t\t? number\n\t\t\t\t\t\t\t\t: S extends { type: \"i64\" }\n\t\t\t\t\t\t\t\t\t? bigint\n\t\t\t\t\t\t\t\t\t: S extends { type: \"i128\" }\n\t\t\t\t\t\t\t\t\t\t? bigint\n\t\t\t\t\t\t\t\t\t\t: S extends { type: \"f32\" }\n\t\t\t\t\t\t\t\t\t\t\t? number\n\t\t\t\t\t\t\t\t\t\t\t: S extends { type: \"f64\" }\n\t\t\t\t\t\t\t\t\t\t\t\t? number\n\t\t\t\t\t\t\t\t\t\t\t\t: S extends { type: \"bool\" }\n\t\t\t\t\t\t\t\t\t\t\t\t\t? boolean\n\t\t\t\t\t\t\t\t\t\t\t\t\t: S extends { type: \"string\" }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? string\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: S extends { type: \"bytes\" }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? Uint8Array\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: S extends { type: \"unit\" }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: S extends { type: \"fixedArray\" }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? Uint8Array\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: S extends { type: \"pubkey\" }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? Uint8Array\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: S extends {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype: \"vec\";\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\telement: infer E;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? E extends BincodeSchema\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? InferSchema<E>[]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: S extends {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype: \"option\";\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tinner: infer I;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? I extends BincodeSchema\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? InferSchema<I> | null\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: unknown;\n",null,null,null,null,null,"// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n\tdeserialize,\n\tfield,\n\tfixedArray,\n\toption,\n\tserialize,\n\tvec,\n} from \"@dao-xyz/borsh\";\n\n/**\n * Serializes data using Borsh (Binary Object Representation Serializer for Hashing) encoding.\n *\n * Borsh is efficient for complex types like enums, Options, vectors, and nested structs.\n * Use the exported decorators (@field, @option, @vec) to define your data structures.\n *\n * @param data - Data object to serialize\n * @returns Serialized bytes\n *\n * @example\n * ```typescript\n * import { serializeBorsh, field, option } from '@rialo/ts-cdk';\n *\n * class SwapInstruction {\n * @field({ type: 'u8' })\n * instruction: number;\n *\n * @field({ type: 'u64' })\n * amountIn: bigint;\n *\n * @field({ type: option('u64') })\n * minAmountOut?: bigint;\n * }\n *\n * const data = serializeBorsh(new SwapInstruction({\n * instruction: 1,\n * amountIn: 1000n,\n * minAmountOut: 900n,\n * }));\n * ```\n */\nexport function serializeBorsh<T>(data: T): Uint8Array {\n\treturn serialize(data);\n}\n\n/**\n * Deserializes Borsh-encoded data into a typed object.\n *\n * @param data - Borsh-encoded bytes\n * @param type - Class constructor for the target type\n * @returns Deserialized object instance\n */\nexport function deserializeBorsh<T>(data: Uint8Array, type: new () => T): T {\n\treturn deserialize(data, type);\n}\n\n// Re-export Borsh decorators for convenience\nexport { field, fixedArray, option, vec };\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Account metadata table for deduplication and sorting.\n * Avoids: Complex account sorting logic scattered throughout builder\n */\n\nimport type { PublicKey } from \"../crypto\";\nimport type { AccountMeta, MessageHeader } from \"./types\";\n\n/**\n * Internal account entry with aggregated metadata.\n */\ninterface AccountEntry {\n\tpubkey: PublicKey;\n\tisSigner: boolean;\n\tisWritable: boolean;\n}\n\n/**\n * Manages account deduplication and sorting for transaction messages.\n *\n * Accounts are sorted according to these rules:\n * 1. Signer + writable accounts first\n * 2. Then signer + readonly accounts\n * 3. Then non-signer + writable accounts\n * 4. Finally non-signer + readonly accounts\n * 5. Within each group, sort by public key bytes\n *\n * This matches Solana's account sorting rules for compatibility.\n */\nexport class AccountMetaTable {\n\tprivate readonly accounts: Map<string, AccountEntry> = new Map();\n\tprivate readonly accountOrder: string[] = [];\n\tprivate payerKey: string | null = null;\n\n\t/**\n\t * Set the fee payer for this transaction.\n\t * The fee payer is always pinned at index 0 in the sorted account list,\n\t * regardless of lexicographic ordering. This matches Solana's invariant\n\t * that account_keys[0] is always the fee payer.\n\t */\n\tsetFeePayer(pubkey: PublicKey): void {\n\t\tthis.payerKey = pubkey.toString();\n\t\tthis.add({ pubkey, isSigner: true, isWritable: true });\n\t}\n\n\t/**\n\t * Add or update an account in the table.\n\t * If account already exists, merges signer/writable flags (OR operation).\n\t */\n\tadd(meta: AccountMeta): void {\n\t\tconst key = meta.pubkey.toString();\n\n\t\tif (this.accounts.has(key)) {\n\t\t\t// Merge with existing entry (OR flags)\n\t\t\t// biome-ignore lint/style/noNonNullAssertion: we know the key is in the map\n\t\t\tconst existing = this.accounts.get(key)!;\n\t\t\texisting.isSigner ||= meta.isSigner;\n\t\t\texisting.isWritable ||= meta.isWritable;\n\t\t} else {\n\t\t\t// New entry\n\t\t\tthis.accounts.set(key, {\n\t\t\t\tpubkey: meta.pubkey,\n\t\t\t\tisSigner: meta.isSigner,\n\t\t\t\tisWritable: meta.isWritable,\n\t\t\t});\n\t\t\tthis.accountOrder.push(key);\n\t\t}\n\t}\n\n\t/**\n\t * Add multiple accounts at once.\n\t */\n\taddAll(metas: readonly AccountMeta[]): void {\n\t\tfor (const meta of metas) {\n\t\t\tthis.add(meta);\n\t\t}\n\t}\n\n\t/**\n\t * Get the index of an account in the sorted order.\n\t * Returns -1 if account not found.\n\t */\n\tgetIndex(pubkey: PublicKey): number {\n\t\tconst sorted = this.getSortedAccounts();\n\t\treturn sorted.findIndex((entry) => entry.pubkey.equals(pubkey));\n\t}\n\n\t/**\n\t * Get sorted accounts according to transaction rules.\n\t */\n\tgetSortedAccounts(): readonly AccountEntry[] {\n\t\t// biome-ignore lint/style/noNonNullAssertion: we know the key is in the map\n\t\tconst entries = this.accountOrder.map((key) => this.accounts.get(key)!);\n\n\t\t// Separate fee payer from the rest so it can be pinned at index 0.\n\t\t// This matches the Rust CDK and Solana's invariant: account_keys[0] == fee_payer.\n\t\tlet payerEntry: AccountEntry | null = null;\n\t\tconst rest: AccountEntry[] = [];\n\t\tfor (const entry of entries) {\n\t\t\tif (this.payerKey !== null && entry.pubkey.toString() === this.payerKey) {\n\t\t\t\tpayerEntry = entry;\n\t\t\t} else {\n\t\t\t\trest.push(entry);\n\t\t\t}\n\t\t}\n\n\t\trest.sort((a, b): number => {\n\t\t\t// Priority 1: Signer + writable\n\t\t\tconst aPriority =\n\t\t\t\ta.isSigner && a.isWritable ? 0 : a.isSigner ? 1 : a.isWritable ? 2 : 3;\n\t\t\tconst bPriority =\n\t\t\t\tb.isSigner && b.isWritable ? 0 : b.isSigner ? 1 : b.isWritable ? 2 : 3;\n\n\t\t\tif (aPriority !== bPriority) {\n\t\t\t\treturn aPriority - bPriority;\n\t\t\t}\n\n\t\t\t// Priority 2: Sort by public key bytes\n\t\t\tconst aBytes = a.pubkey.toBytes();\n\t\t\tconst bBytes = b.pubkey.toBytes();\n\n\t\t\tfor (let i = 0; i < 32; i++) {\n\t\t\t\tif (aBytes[i] !== bBytes[i]) {\n\t\t\t\t\treturn aBytes[i] - bBytes[i];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t});\n\n\t\t// Pin fee payer at index 0\n\t\tif (payerEntry !== null) {\n\t\t\treturn [payerEntry, ...rest];\n\t\t}\n\t\treturn rest;\n\t}\n\n\t/**\n\t * Get the message header based on sorted accounts.\n\t */\n\tgetHeader(): MessageHeader {\n\t\tconst sorted = this.getSortedAccounts();\n\n\t\tlet numRequiredSignatures = 0;\n\t\tlet numReadonlySignedAccounts = 0;\n\t\tlet numReadonlyUnsignedAccounts = 0;\n\n\t\tfor (const entry of sorted) {\n\t\t\tif (entry.isSigner) {\n\t\t\t\tnumRequiredSignatures++;\n\t\t\t\tif (!entry.isWritable) {\n\t\t\t\t\tnumReadonlySignedAccounts++;\n\t\t\t\t}\n\t\t\t} else if (!entry.isWritable) {\n\t\t\t\tnumReadonlyUnsignedAccounts++;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tnumRequiredSignatures,\n\t\t\tnumReadonlySignedAccounts,\n\t\t\tnumReadonlyUnsignedAccounts,\n\t\t};\n\t}\n\n\t/**\n\t * Get sorted public keys.\n\t */\n\tgetPublicKeys(): readonly PublicKey[] {\n\t\treturn this.getSortedAccounts().map((entry) => entry.pubkey);\n\t}\n\n\t/**\n\t * Get number of accounts in table.\n\t */\n\tsize(): number {\n\t\treturn this.accounts.size;\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Error codes for transaction operations.\n */\nexport enum TransactionErrorCode {\n\t// Building errors\n\tINVALID_INSTRUCTION = \"INVALID_INSTRUCTION\",\n\tINVALID_ACCOUNT_META = \"INVALID_ACCOUNT_META\",\n\tNO_INSTRUCTIONS = \"NO_INSTRUCTIONS\",\n\tDUPLICATE_ACCOUNT = \"DUPLICATE_ACCOUNT\",\n\n\t// Signing errors\n\tMISSING_SIGNATURE = \"MISSING_SIGNATURE\",\n\tINVALID_SIGNATURE = \"INVALID_SIGNATURE\",\n\tSIGNATURE_OUT_OF_BOUNDS = \"SIGNATURE_OUT_OF_BOUNDS\",\n\tSIGNER_NOT_FOUND = \"SIGNER_NOT_FOUND\",\n\tALREADY_SIGNED = \"ALREADY_SIGNED\",\n\n\t// Serialization errors\n\tINVALID_MESSAGE_FORMAT = \"INVALID_MESSAGE_FORMAT\",\n\tINSUFFICIENT_DATA = \"INSUFFICIENT_DATA\",\n\tSERIALIZATION_FAILED = \"SERIALIZATION_FAILED\",\n\n\t// Simulation errors\n\tSIMULATION_FAILED = \"SIMULATION_FAILED\",\n\tINSUFFICIENT_FUNDS = \"INSUFFICIENT_FUNDS\",\n\tBLOCKHASH_EXPIRED = \"BLOCKHASH_EXPIRED\",\n}\n\n/**\n * Error class for transaction operations with structured error information.\n */\nexport class TransactionError extends Error {\n\tconstructor(\n\t\tpublic readonly code: TransactionErrorCode,\n\t\tmessage: string,\n\t\tpublic readonly details?: Record<string, unknown>,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"TransactionError\";\n\t}\n\n\tstatic noInstructions(): TransactionError {\n\t\treturn new TransactionError(\n\t\t\tTransactionErrorCode.NO_INSTRUCTIONS,\n\t\t\t\"Transaction must contain at least one instruction. Use addInstruction() to add instructions.\",\n\t\t);\n\t}\n\n\tstatic signerNotFound(pubkey: string): TransactionError {\n\t\treturn new TransactionError(\n\t\t\tTransactionErrorCode.SIGNER_NOT_FOUND,\n\t\t\t`Public key ${pubkey} is not a required signer for this transaction. Check that the account is marked as a signer in the instruction.`,\n\t\t\t{ pubkey },\n\t\t);\n\t}\n\n\tstatic missingSignature(index: number, pubkey: string): TransactionError {\n\t\treturn new TransactionError(\n\t\t\tTransactionErrorCode.MISSING_SIGNATURE,\n\t\t\t`Missing signature for signer ${index} (${pubkey}). Transaction requires ${index + 1} signatures.`,\n\t\t\t{ index, pubkey },\n\t\t);\n\t}\n\n\tstatic simulationFailed(logs: string[], error: string): TransactionError {\n\t\treturn new TransactionError(\n\t\t\tTransactionErrorCode.SIMULATION_FAILED,\n\t\t\t`Transaction simulation failed: ${error}`,\n\t\t\t{ logs, error },\n\t\t);\n\t}\n\n\tstatic insufficientFunds(\n\t\trequired: bigint,\n\t\tavailable: bigint,\n\t): TransactionError {\n\t\treturn new TransactionError(\n\t\t\tTransactionErrorCode.INSUFFICIENT_FUNDS,\n\t\t\t`Insufficient funds: need ${required}, have ${available}`,\n\t\t\t{ required: required.toString(), available: available.toString() },\n\t\t);\n\t}\n\n\ttoJSON(): {\n\t\tcode: TransactionErrorCode;\n\t\tmessage: string;\n\t\tdetails?: Record<string, unknown>;\n\t} {\n\t\treturn {\n\t\t\tcode: this.code,\n\t\t\tmessage: this.message,\n\t\t\tdetails: this.details,\n\t\t};\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { PublicKey } from \"../../crypto\";\nimport { serializeBorsh } from \"../../serialization\";\nimport type { AccountMeta, Instruction } from \"../types\";\n\n/**\n * Create an instruction with Borsh-encoded data.\n *\n * @example\n * ```typescript\n * // Define your instruction data class\n * class MyInstructionData {\n * @field({ type: 'u8' })\n * instruction: number;\n *\n * @field({ type: 'u64' })\n * amount: bigint;\n *\n * @field({ type: option('string') })\n * memo?: string;\n * }\n *\n * // Create instruction\n * const instruction = createBorshInstruction({\n * programId: myProgramId,\n * accounts: [\n * { pubkey: account1, isSigner: true, isWritable: true },\n * { pubkey: account2, isSigner: false, isWritable: false },\n * ],\n * data: new MyInstructionData({\n * instruction: 5,\n * amount: 1000n,\n * memo: \"Hello, Rialo!\",\n * }),\n * });\n * ```\n */\nexport function createBorshInstruction<T>(params: {\n\tprogramId: PublicKey;\n\taccounts: AccountMeta[];\n\tdata: T;\n}): Instruction {\n\treturn {\n\t\tprogramId: params.programId,\n\t\taccounts: params.accounts,\n\t\tdata: serializeBorsh(params.data),\n\t};\n}\n\n/**\n * Helper for creating Borsh-serialized instruction data from a plain object.\n *\n * This is useful when you don't want to define a class with decorators.\n *\n * @example\n * ```typescript\n * const data = encodeBorshData({\n * instruction: { type: 'u8', value: 1 },\n * amount: { type: 'u64', value: 1000n },\n * recipient: { type: fixedArray('u8', 32), value: recipientBytes },\n * });\n * ```\n */\nexport function encodeBorshData(\n\t_schema: Record<string, { type: unknown; value: unknown }>,\n): Uint8Array {\n\t// TODO: Implement this\n\tthrow new Error(\"Use class-based Borsh serialization with decorators\");\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { SYSTEM_PROGRAM_ID } from \"../../constants\";\nimport { PublicKey } from \"../../crypto\";\nimport { BincodeWriter } from \"../../serialization/bincode\";\nimport type { Instruction } from \"../types\";\n\n/**\n * System program instruction types.\n */\nexport enum SystemInstruction {\n\tCreateAccount = 0,\n\tAssign = 1,\n\tTransfer = 2,\n\tCreateAccountWithSeed = 3,\n\tAdvanceNonceAccount = 4,\n\tWithdrawNonceAccount = 5,\n\tInitializeNonceAccount = 6,\n\tAuthorizeNonceAccount = 7,\n\tAllocate = 8,\n\tAllocateWithSeed = 9,\n\tAssignWithSeed = 10,\n\tTransferWithSeed = 11,\n}\n\n/**\n * Create a transfer instruction.\n *\n * Transfers native tokens from one account to another.\n *\n * @param from - Source account (must be signer)\n * @param to - Destination account\n * @param amount - Amount to transfer in smallest denomination (kelvins)\n *\n * @example\n * ```typescript\n * const instruction = transferInstruction(fromPubkey, toPubkey, 1_000_000n);\n *\n * const tx = TransactionBuilder.create()\n * .setPayer(fromPubkey)\n * .addInstruction(instruction)\n * .build();\n * ```\n */\nexport function transferInstruction(\n\tfrom: PublicKey,\n\tto: PublicKey,\n\tamount: bigint,\n): Instruction {\n\t// Instruction data: bincode serialization format\n\t// - 4 bytes: variant index as u32 little-endian (2 for Transfer)\n\t// - 8 bytes: amount as u64 little-endian\n\tconst writer = new BincodeWriter(12);\n\twriter.writeVariant(SystemInstruction.Transfer);\n\twriter.writeU64(amount);\n\n\treturn {\n\t\tprogramId: PublicKey.fromString(SYSTEM_PROGRAM_ID),\n\t\taccounts: [\n\t\t\t{ pubkey: from, isSigner: true, isWritable: true },\n\t\t\t{ pubkey: to, isSigner: false, isWritable: true },\n\t\t],\n\t\tdata: writer.toBytes(),\n\t};\n}\n\n/**\n * Create an account creation instruction.\n *\n * @param from - Funding account (must be signer)\n * @param newAccount - New account to create (must be signer)\n * @param kelvins - Initial balance for new account\n * @param space - Number of bytes to allocate for account data\n * @param owner - Program that will own the new account\n */\nexport function createAccount(\n\tfrom: PublicKey,\n\tnewAccount: PublicKey,\n\tkelvins: bigint,\n\tspace: bigint,\n\towner: PublicKey,\n): Instruction {\n\t// Instruction data: bincode serialization format\n\t// - 4 bytes: variant index as u32 little-endian (0 for CreateAccount)\n\t// - 8 bytes: kelvins as u64 little-endian\n\t// - 8 bytes: space as u64 little-endian\n\t// - 32 bytes: owner public key\n\tconst writer = new BincodeWriter(52);\n\twriter.writeVariant(SystemInstruction.CreateAccount);\n\twriter.writeU64(kelvins);\n\twriter.writeU64(space);\n\twriter.writeBytes(owner.toBytes());\n\n\treturn {\n\t\tprogramId: PublicKey.fromString(SYSTEM_PROGRAM_ID),\n\t\taccounts: [\n\t\t\t{ pubkey: from, isSigner: true, isWritable: true },\n\t\t\t{ pubkey: newAccount, isSigner: true, isWritable: true },\n\t\t],\n\t\tdata: writer.toBytes(),\n\t};\n}\n\n/**\n * Create an allocate instruction.\n *\n * Allocates space for an account's data. The account must be owned by\n * the system program and must sign the transaction.\n *\n * @param account - Account to allocate space for (must be signer)\n * @param space - Number of bytes to allocate\n */\nexport function allocateInstruction(\n\taccount: PublicKey,\n\tspace: bigint,\n): Instruction {\n\t// Instruction data: bincode serialization format\n\t// - 4 bytes: variant index as u32 little-endian (8 for Allocate)\n\t// - 8 bytes: space as u64 little-endian\n\tconst writer = new BincodeWriter(12);\n\twriter.writeVariant(SystemInstruction.Allocate);\n\twriter.writeU64(space);\n\n\treturn {\n\t\tprogramId: PublicKey.fromString(SYSTEM_PROGRAM_ID),\n\t\taccounts: [\n\t\t\t{ pubkey: account, isSigner: true, isWritable: true },\n\t\t],\n\t\tdata: writer.toBytes(),\n\t};\n}\n\n/**\n * Create an assign instruction.\n *\n * Changes the owner of an account. The account must currently be owned\n * by the system program and must sign the transaction.\n *\n * @param account - Account to reassign (must be signer)\n * @param owner - New owner program\n */\nexport function assignInstruction(\n\taccount: PublicKey,\n\towner: PublicKey,\n): Instruction {\n\t// Instruction data: bincode serialization format\n\t// - 4 bytes: variant index as u32 little-endian (1 for Assign)\n\t// - 32 bytes: owner public key\n\tconst writer = new BincodeWriter(36);\n\twriter.writeVariant(SystemInstruction.Assign);\n\twriter.writeBytes(owner.toBytes());\n\n\treturn {\n\t\tprogramId: PublicKey.fromString(SYSTEM_PROGRAM_ID),\n\t\taccounts: [\n\t\t\t{ pubkey: account, isSigner: true, isWritable: true },\n\t\t],\n\t\tdata: writer.toBytes(),\n\t};\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { PublicKey } from \"../crypto\";\nimport { TransactionError, TransactionErrorCode } from \"./errors\";\nimport type { CompiledInstruction, MessageHeader } from \"./types\";\n\n/**\n * An unsigned transaction message ready to be signed.\n *\n * This is the data that gets signed by transaction signers.\n * It's immutable to prevent accidental modification after creation.\n *\n * @example\n * ```typescript\n * const message = MessageBuilder.create()\n * .setPayer(payer)\n * .setValidFrom(validFrom)\n * .addInstruction(transferInstruction)\n * .build();\n *\n * // Serialize for signing\n * const messageBytes = message.serialize();\n * ```\n */\nexport class Message {\n\t/** Message header with signature requirements */\n\tpublic readonly header: MessageHeader;\n\n\t/** All account public keys referenced in the transaction */\n\tpublic readonly accountKeys: readonly PublicKey[];\n\n\t/** Transaction valid from (milliseconds since Unix epoch) */\n\tvalidFrom?: bigint;\n\n\t/** Config hash prefix for replay protection across chains */\n\tpublic readonly configHashPrefix: bigint;\n\n\t/** Whether the transaction should use OCC (optimistic concurrency control) scheduling */\n\tpublic readonly occ: boolean;\n\n\t/** Compiled instructions with account indices */\n\tpublic readonly instructions: readonly CompiledInstruction[];\n\n\t/** Cached serialized bytes */\n\tprivate serializedCache?: Uint8Array;\n\n\tconstructor(\n\t\theader: MessageHeader,\n\t\taccountKeys: readonly PublicKey[],\n\t\tvalidFrom: bigint,\n\t\tconfigHashPrefix: bigint,\n\t\tocc: boolean,\n\t\tinstructions: readonly CompiledInstruction[],\n\t) {\n\t\tthis.header = Object.freeze({ ...header });\n\t\tthis.accountKeys = Object.freeze([...accountKeys]);\n\t\tthis.validFrom = validFrom;\n\t\tthis.configHashPrefix = configHashPrefix;\n\t\tthis.occ = occ;\n\t\tthis.instructions = Object.freeze(\n\t\t\tinstructions.map((ix) => Object.freeze({ ...ix })),\n\t\t);\n\t}\n\n\t/**\n\t * Serialize message to bytes for signing.\n\t * Result is cached for performance.\n\t */\n\tserialize(): Uint8Array {\n\t\tif (!this.serializedCache) {\n\t\t\tthis.serializedCache = this.serializeInternal();\n\t\t}\n\t\treturn new Uint8Array(this.serializedCache); // Return copy\n\t}\n\n\t/**\n\t * Deserialize a message from wire format.\n\t *\n\t * @param data - Serialized message bytes\n\t * @returns Deserialized Message\n\t */\n\tstatic deserialize(data: Uint8Array): Message {\n\t\tif (data.length < 3) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\t\"Insufficient data for message header\",\n\t\t\t);\n\t\t}\n\n\t\tlet cursor = 0;\n\n\t\t// Deserialize header (3 bytes)\n\t\tconst header: MessageHeader = {\n\t\t\tnumRequiredSignatures: data[cursor++],\n\t\t\tnumReadonlySignedAccounts: data[cursor++],\n\t\t\tnumReadonlyUnsignedAccounts: data[cursor++],\n\t\t};\n\n\t\t// Deserialize account keys with compact-u16 length prefix\n\t\tconst [accountKeysLength, newCursor1] = deserializeCompactU16(data, cursor);\n\t\tcursor = newCursor1;\n\n\t\tconst accountKeys: PublicKey[] = [];\n\t\tfor (let i = 0; i < accountKeysLength; i++) {\n\t\t\tif (data.length < cursor + 32) {\n\t\t\t\tthrow new TransactionError(\n\t\t\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\t\t`Insufficient data for account key ${i}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst keyBytes = data.slice(cursor, cursor + 32);\n\t\t\taccountKeys.push(PublicKey.fromBytes(keyBytes));\n\t\t\tcursor += 32;\n\t\t}\n\n\t\t// Deserialize recent valid from (8 bytes)\n\t\tif (data.length < cursor + 8) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\t\"Insufficient data for validFrom\",\n\t\t\t);\n\t\t}\n\t\tconst validFromBytes = data.slice(cursor, cursor + 8);\n\t\tconst validFrom = BigInt.asUintN(\n\t\t\t64,\n\t\t\tnew DataView(validFromBytes.buffer).getBigUint64(0, true),\n\t\t);\n\t\tcursor += 8;\n\n\t\t// Deserialize config hash prefix (8 bytes)\n\t\tif (data.length < cursor + 8) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\t\"Insufficient data for configHashPrefix\",\n\t\t\t);\n\t\t}\n\t\tconst configHashPrefixBytes = data.slice(cursor, cursor + 8);\n\t\tconst configHashPrefix = BigInt.asUintN(\n\t\t\t64,\n\t\t\tnew DataView(configHashPrefixBytes.buffer).getBigUint64(0, true),\n\t\t);\n\t\tcursor += 8;\n\n\t\t// Deserialize occ flag (1 byte)\n\t\tif (data.length < cursor + 1) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\t\"Insufficient data for occ flag\",\n\t\t\t);\n\t\t}\n\t\tconst occ = data[cursor++] !== 0;\n\n\t\t// Deserialize instructions with compact-u16 length prefix\n\t\tconst [instructionsLength, newCursor2] = deserializeCompactU16(\n\t\t\tdata,\n\t\t\tcursor,\n\t\t);\n\t\tcursor = newCursor2;\n\n\t\tconst instructions: CompiledInstruction[] = [];\n\t\tfor (let i = 0; i < instructionsLength; i++) {\n\t\t\t// Read program ID index\n\t\t\tif (data.length < cursor + 1) {\n\t\t\t\tthrow new TransactionError(\n\t\t\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\t\t`Insufficient data for instruction ${i} program index`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst programIdIndex = data[cursor++];\n\n\t\t\t// Read account key indexes array\n\t\t\tconst [accountIndexesLength, newCursor3] = deserializeCompactU16(\n\t\t\t\tdata,\n\t\t\t\tcursor,\n\t\t\t);\n\t\t\tcursor = newCursor3;\n\n\t\t\tconst accountKeyIndexes: number[] = [];\n\t\t\tfor (let j = 0; j < accountIndexesLength; j++) {\n\t\t\t\tif (data.length < cursor + 1) {\n\t\t\t\t\tthrow new TransactionError(\n\t\t\t\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\t\t\t`Insufficient data for instruction ${i} account index ${j}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\taccountKeyIndexes.push(data[cursor++]);\n\t\t\t}\n\n\t\t\t// Read instruction data array\n\t\t\tconst [dataLength, newCursor4] = deserializeCompactU16(data, cursor);\n\t\t\tcursor = newCursor4;\n\n\t\t\tif (data.length < cursor + dataLength) {\n\t\t\t\tthrow new TransactionError(\n\t\t\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\t\t`Insufficient data for instruction ${i} data`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst instructionData = data.slice(cursor, cursor + dataLength);\n\t\t\tcursor += dataLength;\n\n\t\t\tinstructions.push({\n\t\t\t\tprogramIdIndex,\n\t\t\t\taccountKeyIndexes: Object.freeze(accountKeyIndexes),\n\t\t\t\tdata: instructionData,\n\t\t\t});\n\t\t}\n\n\t\treturn new Message(header, accountKeys, validFrom, configHashPrefix, occ, instructions);\n\t}\n\n\tprivate serializeInternal(): Uint8Array {\n\t\tconst buffer: number[] = [];\n\n\t\t// Serialize header (3 bytes)\n\t\tbuffer.push(this.header.numRequiredSignatures);\n\t\tbuffer.push(this.header.numReadonlySignedAccounts);\n\t\tbuffer.push(this.header.numReadonlyUnsignedAccounts);\n\n\t\t// Serialize account keys with compact-u16 length prefix\n\t\tthis.serializeCompactArray(buffer, this.accountKeys, (buf, key) => {\n\t\t\tbuf.push(...key.toBytes());\n\t\t});\n\n\t\t// Serialize recent valid from (8 bytes, little-endian to match Rust's bincode)\n\t\tconst validFromBuffer = new ArrayBuffer(8);\n\t\tnew DataView(validFromBuffer).setBigUint64(\n\t\t\t0,\n\t\t\tthis.validFrom ?? BigInt(0),\n\t\t\ttrue,\n\t\t);\n\t\tbuffer.push(...new Uint8Array(validFromBuffer));\n\n\t\t// Serialize config hash prefix (8 bytes, little-endian)\n\t\tconst configHashPrefixBuffer = new ArrayBuffer(8);\n\t\tnew DataView(configHashPrefixBuffer).setBigUint64(\n\t\t\t0,\n\t\t\tthis.configHashPrefix,\n\t\t\ttrue,\n\t\t);\n\t\tbuffer.push(...new Uint8Array(configHashPrefixBuffer));\n\n\t\t// Serialize occ flag (1 byte, bincode bool)\n\t\tbuffer.push(this.occ ? 1 : 0);\n\n\t\t// Serialize instructions with compact-u16 length prefix\n\t\tthis.serializeCompactArray(buffer, this.instructions, (buf, ix) => {\n\t\t\t// Program ID index (1 byte)\n\t\t\tbuf.push(ix.programIdIndex);\n\n\t\t\t// Account indexes array\n\t\t\tthis.serializeCompactArray(buf, ix.accountKeyIndexes, (b, idx) => {\n\t\t\t\tb.push(idx);\n\t\t\t});\n\n\t\t\t// Instruction data array\n\t\t\tthis.serializeCompactArray(buf, Array.from(ix.data), (b, byte) => {\n\t\t\t\tb.push(byte);\n\t\t\t});\n\t\t});\n\n\t\treturn new Uint8Array(buffer);\n\t}\n\n\tprivate serializeCompactArray<T>(\n\t\tbuffer: number[],\n\t\titems: readonly T[],\n\t\tserializeItem: (buf: number[], item: T) => void,\n\t): void {\n\t\t// Serialize length as compact-u16\n\t\tthis.serializeCompactU16(buffer, items.length);\n\n\t\t// Serialize each item\n\t\tfor (const item of items) {\n\t\t\tserializeItem(buffer, item);\n\t\t}\n\t}\n\n\tprivate serializeCompactU16(buffer: number[], value: number): void {\n\t\tif (value < 0 || value > 0xffff) {\n\t\t\tthrow new Error(`Value out of range for compact-u16: ${value}`);\n\t\t}\n\n\t\t// Single byte (0-127)\n\t\tif (value <= 0x7f) {\n\t\t\tbuffer.push(value);\n\t\t\treturn;\n\t\t}\n\n\t\t// Two bytes (128-16383)\n\t\tif (value <= 0x3fff) {\n\t\t\tbuffer.push((value & 0x7f) | 0x80);\n\t\t\tbuffer.push((value >> 7) & 0x7f);\n\t\t\treturn;\n\t\t}\n\n\t\t// Three bytes (16384-65535)\n\t\tbuffer.push((value & 0x7f) | 0x80);\n\t\tbuffer.push(((value >> 7) & 0x7f) | 0x80);\n\t\tbuffer.push((value >> 14) & 0xff);\n\t}\n\n\t/**\n\t * Get all signers required for this message.\n\t */\n\tgetSigners(): readonly PublicKey[] {\n\t\treturn this.accountKeys.slice(0, this.header.numRequiredSignatures);\n\t}\n\n\t/**\n\t * Check if a public key is a required signer.\n\t */\n\tisSignerRequired(pubkey: PublicKey): boolean {\n\t\treturn this.getSigners().some((signer) => signer.equals(pubkey));\n\t}\n\n\t/**\n\t * Get the index of a signer in the signers array.\n\t * Returns -1 if not a signer.\n\t */\n\tgetSignerIndex(pubkey: PublicKey): number {\n\t\treturn this.getSigners().findIndex((signer) => signer.equals(pubkey));\n\t}\n}\n\nfunction deserializeCompactU16(\n\tdata: Uint8Array,\n\tcurrentCursor: number,\n): [number, number] {\n\tlet cursor = currentCursor;\n\tif (cursor >= data.length) {\n\t\tthrow new TransactionError(\n\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\"Insufficient data for compact-u16\",\n\t\t);\n\t}\n\n\tconst firstByte = data[cursor++];\n\n\t// Single byte encoding (0-127)\n\tif ((firstByte & 0x80) === 0) {\n\t\treturn [firstByte, cursor];\n\t}\n\n\t// Multi-byte encoding\n\tif (cursor >= data.length) {\n\t\tthrow new TransactionError(\n\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\"Incomplete compact-u16 encoding\",\n\t\t);\n\t}\n\n\tconst secondByte = data[cursor++];\n\n\t// Two-byte encoding (128-16383)\n\tif ((secondByte & 0x80) === 0) {\n\t\treturn [(firstByte & 0x7f) | (secondByte << 7), cursor];\n\t}\n\n\t// Three-byte encoding (16384-65535)\n\tif (cursor >= data.length) {\n\t\tthrow new TransactionError(\n\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\"Incomplete compact-u16 encoding\",\n\t\t);\n\t}\n\n\tconst thirdByte = data[cursor++];\n\tconst value =\n\t\t(firstByte & 0x7f) | ((secondByte & 0x7f) << 7) | (thirdByte << 14);\n\n\treturn [value, cursor];\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n// transaction/transaction.ts\n// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { SIGNATURE_LENGTH } from \"../constants\";\nimport type { Keypair, PublicKey, Signature } from \"../crypto\";\nimport { deserializeCompactU16, writeCompactU16 } from \"../serialization\";\nimport type { Signer } from \"../signer\";\nimport { TransactionError, TransactionErrorCode } from \"./errors\";\nimport { Message } from \"./message\";\n\n/**\n * A transaction with zero or more signatures.\n *\n * Transactions are immutable - signing methods return new instances.\n * This prevents accidental modification and signature tampering.\n *\n * @example\n * ```typescript\n * // Simple signing\n * const tx = builder.build();\n * const signed = tx.sign(keypair);\n *\n * // Method chaining\n * const signed = tx\n * .sign(keypair1)\n * .sign(keypair2)\n * .sign(keypair3);\n *\n * // Multi-sig convenience\n * const signed = tx.signAll([keypair1, keypair2, keypair3]);\n * ```\n */\nexport class Transaction {\n\t/** The unsigned message */\n\tprivate readonly message: Message;\n\n\t/** Signatures (64 bytes each), aligned with message.header.numRequiredSignatures */\n\tprivate readonly signatures: readonly Uint8Array[];\n\n\t// Private constructor - use static factories\n\tprivate constructor(message: Message, signatures: readonly Uint8Array[]) {\n\t\tthis.message = message;\n\n\t\t// Deep copy signatures to prevent external mutation\n\t\tthis.signatures = signatures.map((sig) => new Uint8Array(sig));\n\n\t\t// Validate signature count matches required signers\n\t\tif (signatures.length !== message.header.numRequiredSignatures) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.INVALID_SIGNATURE,\n\t\t\t\t`Signature count (${signatures.length}) doesn't match required signers (${message.header.numRequiredSignatures})`,\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Create an unsigned transaction from a message.\n\t * All signature slots are initialized to zero.\n\t *\n\t * @internal - Users should use TransactionBuilder instead\n\t */\n\tstatic fromMessage(message: Message): Transaction {\n\t\tconst numSignatures = message.header.numRequiredSignatures;\n\t\tconst signatures = Array.from(\n\t\t\t{ length: numSignatures },\n\t\t\t() => new Uint8Array(SIGNATURE_LENGTH),\n\t\t);\n\n\t\treturn new Transaction(message, signatures);\n\t}\n\n\t/**\n\t * Create transaction from message and existing signatures.\n\t * @internal\n\t */\n\tstatic fromMessageAndSignatures(\n\t\tmessage: Message,\n\t\tsignatures: readonly Uint8Array[],\n\t): Transaction {\n\t\treturn new Transaction(message, signatures);\n\t}\n\n\t/**\n\t * Deserialize a transaction from wire format.\n\t */\n\tstatic deserialize(data: Uint8Array): Transaction {\n\t\tif (data.length === 0) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.SERIALIZATION_FAILED,\n\t\t\t\t\"Cannot deserialize empty transaction data\",\n\t\t\t);\n\t\t}\n\n\t\tlet cursor = 0;\n\n\t\t// Deserialize signatures with compact-u16 length prefix\n\t\tconst [signaturesLength, newCursor] = deserializeCompactU16(data, cursor);\n\t\tcursor = newCursor;\n\n\t\tconst signatures: Uint8Array[] = [];\n\t\tfor (let i = 0; i < signaturesLength; i++) {\n\t\t\tif (data.length < cursor + SIGNATURE_LENGTH) {\n\t\t\t\tthrow new TransactionError(\n\t\t\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\t\t`Insufficient data for signature ${i}: need ${SIGNATURE_LENGTH} bytes at offset ${cursor}`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst signature = data.slice(cursor, cursor + SIGNATURE_LENGTH);\n\t\t\tsignatures.push(signature);\n\t\t\tcursor += SIGNATURE_LENGTH;\n\t\t}\n\n\t\t// Remaining data is the message\n\t\tif (cursor >= data.length) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\t\"No message data found after signatures\",\n\t\t\t);\n\t\t}\n\n\t\tconst messageBytes = data.slice(cursor);\n\t\tconst message = Message.deserialize(messageBytes);\n\n\t\treturn new Transaction(message, signatures);\n\t}\n\n\tgetMessage(): Message {\n\t\treturn this.message;\n\t}\n\n\t/**\n\t * Sign the transaction with a keypair.\n\t * Returns a NEW Transaction instance.\n\t *\n\t * @param keypair - Keypair to sign with\n\t * @returns New Transaction instance with signature added\n\t *\n\t * @example\n\t * ```typescript\n\t * const signedTx = tx.sign(keypair);\n\t * await client.sendTransaction(signedTx.serialize());\n\t * ```\n\t */\n\tsign(keypair: Keypair): Transaction {\n\t\tconst messageBytes = this.message.serialize();\n\t\tconst signature = keypair.sign(messageBytes);\n\t\treturn this.addSignatureForPubkey(keypair.publicKey, signature);\n\t}\n\n\t/**\n\t * Sign with multiple keypairs at once.\n\t * Returns a NEW Transaction instance.\n\t *\n\t * @example\n\t * ```typescript\n\t * const signed = tx.signAll([keypair1, keypair2, keypair3]);\n\t * ```\n\t */\n\tsignAll(keypairs: Keypair[]): Transaction {\n\t\tlet result: Transaction = this;\n\t\tfor (const keypair of keypairs) {\n\t\t\tresult = result.sign(keypair);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * Sign the transaction with a Signer interface (async).\n\t * Returns a NEW Transaction instance.\n\t *\n\t * @example\n\t * ```typescript\n\t * const signedTx = await tx.signWith(browserWallet);\n\t * ```\n\t */\n\tasync signWith(signer: Signer): Promise<Transaction> {\n\t\tconst pubkey = await signer.getPublicKey();\n\t\tconst messageBytes = this.message.serialize();\n\t\tconst signature = await signer.signMessage(messageBytes);\n\t\treturn this.addSignatureForPubkey(pubkey, signature);\n\t}\n\n\t/**\n\t * Sign with multiple signers.\n\t * Returns a NEW Transaction instance.\n\t */\n\tasync signAllWith(signers: Signer[]): Promise<Transaction> {\n\t\tlet result: Transaction = this;\n\t\tfor (const signer of signers) {\n\t\t\tresult = await result.signWith(signer);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * Partially sign the transaction (for multi-sig transactions).\n\t * Returns a NEW Transaction instance.\n\t *\n\t * @example\n\t * ```typescript\n\t * const signedTx = tx\n\t * .partialSign(signer1)\n\t * .partialSign(signer2);\n\t * ```\n\t */\n\tpartialSign(keypair: Keypair): Transaction {\n\t\treturn this.sign(keypair);\n\t}\n\n\t/**\n\t * Partially sign with a Signer interface (async).\n\t * Returns a NEW Transaction instance.\n\t */\n\tasync partialSignWith(signer: Signer): Promise<Transaction> {\n\t\treturn this.signWith(signer);\n\t}\n\n\t/**\n\t * Add a signature at a specific index.\n\t * Returns a NEW Transaction instance.\n\t *\n\t * Most users should use sign() or signAll() instead.\n\t */\n\taddSignature(index: number, signature: Signature | Uint8Array): Transaction {\n\t\tif (index < 0 || index >= this.signatures.length) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.SIGNATURE_OUT_OF_BOUNDS,\n\t\t\t\t`Signature index ${index} out of bounds (must be 0-${this.signatures.length - 1})`,\n\t\t\t);\n\t\t}\n\n\t\tconst sigBytes =\n\t\t\tsignature instanceof Uint8Array ? signature : signature.toBytes();\n\n\t\tif (sigBytes.length !== SIGNATURE_LENGTH) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.INVALID_SIGNATURE,\n\t\t\t\t`Signature must be ${SIGNATURE_LENGTH} bytes, got ${sigBytes.length}`,\n\t\t\t);\n\t\t}\n\n\t\t// Create NEW signatures array (immutable update)\n\t\tconst newSignatures = this.signatures.map((sig, i) =>\n\t\t\ti === index ? new Uint8Array(sigBytes) : new Uint8Array(sig),\n\t\t);\n\n\t\t// Return NEW Transaction instance\n\t\treturn new Transaction(this.message, newSignatures);\n\t}\n\n\t/**\n\t * Add a signature for a specific public key.\n\t * Returns a NEW Transaction instance.\n\t *\n\t * Most users should use sign() or signAll() instead.\n\t */\n\taddSignatureForPubkey(\n\t\tpubkey: PublicKey,\n\t\tsignature: Signature | Uint8Array,\n\t): Transaction {\n\t\tconst signerIndex = this.message.getSignerIndex(pubkey);\n\n\t\tif (signerIndex === -1) {\n\t\t\tthrow TransactionError.signerNotFound(pubkey.toString());\n\t\t}\n\n\t\treturn this.addSignature(signerIndex, signature);\n\t}\n\n\t/**\n\t * Check if transaction is fully signed (all signatures present).\n\t */\n\tisSigned(): boolean {\n\t\treturn this.signatures.every((sig) => sig.some((byte) => byte !== 0));\n\t}\n\n\t/**\n\t * Check if a specific signature slot is filled.\n\t */\n\tisSignaturePresent(index: number): boolean {\n\t\tif (index < 0 || index >= this.signatures.length) {\n\t\t\treturn false;\n\t\t}\n\t\treturn this.signatures[index].some((byte) => byte !== 0);\n\t}\n\n\t/**\n\t * Get all signatures (returns copies to prevent mutation).\n\t */\n\tgetSignatures(): readonly Uint8Array[] {\n\t\treturn this.signatures.map((sig) => new Uint8Array(sig));\n\t}\n\n\t/**\n\t * Get a specific signature (returns copy).\n\t */\n\tgetSignature(index: number): Uint8Array {\n\t\tif (index < 0 || index >= this.signatures.length) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.SIGNATURE_OUT_OF_BOUNDS,\n\t\t\t\t`Signature index ${index} out of bounds`,\n\t\t\t);\n\t\t}\n\t\treturn new Uint8Array(this.signatures[index]);\n\t}\n\n\t/**\n\t * Get a specific signature for a public key.\n\t */\n\tgetSignatureForPubkey(pubkey: PublicKey): Uint8Array {\n\t\tconst signerIndex = this.message.getSignerIndex(pubkey);\n\t\tif (signerIndex === -1) {\n\t\t\tthrow TransactionError.signerNotFound(pubkey.toString());\n\t\t}\n\t\treturn this.getSignature(signerIndex);\n\t}\n\n\t\n\n\t/**\n\t * Get required signers for this transaction.\n\t */\n\tgetSigners(): readonly PublicKey[] {\n\t\treturn this.message.getSigners();\n\t}\n\n\t/**\n\t * Get the number of required signatures.\n\t */\n\tgetRequiredSignatureCount(): number {\n\t\treturn this.message.header.numRequiredSignatures;\n\t}\n\n\t/**\n\t * Throw an error if the transaction is not fully signed.\n\t *\n\t * @throws {TransactionError} If transaction is not fully signed\n\t *\n\t * @example\n\t * ```typescript\n\t * signedTx.ensureSigned(); // Throws if not signed\n\t * await client.sendTransaction(signedTx.serialize());\n\t * ```\n\t */\n\tensureSigned(): void {\n\t\tif (!this.isSigned()) {\n\t\t\tconst missingIndices = this.signatures\n\t\t\t\t.map((sig, i) => ({ sig, i }))\n\t\t\t\t.filter(({ sig }) => !sig.some((byte) => byte !== 0))\n\t\t\t\t.map(({ i }) => i);\n\n\t\t\tconst signers = this.getSigners();\n\t\t\tconst missingSigners = missingIndices.map((i) => signers[i].toString());\n\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.MISSING_SIGNATURE,\n\t\t\t\t`Transaction is not fully signed. Missing signatures for: ${missingSigners.join(\", \")}`,\n\t\t\t\t{ missingIndices, missingSigners },\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Serialize transaction to wire format.\n\t */\n\tserialize(): Uint8Array {\n\t\t// Calculate exact size\n\t\tconst compactU16Size = this.signatures.length < 128 ? 1 : 2;\n\t\tconst sigsSize = compactU16Size + this.signatures.length * SIGNATURE_LENGTH;\n\t\tconst messageBytes = this.message.serialize();\n\t\tconst totalSize = sigsSize + messageBytes.length;\n\n\t\t// Pre-allocate buffer\n\t\tconst buffer = new Uint8Array(totalSize);\n\t\tlet offset = 0;\n\n\t\t// Write signature count\n\t\toffset = writeCompactU16(buffer, offset, this.signatures.length);\n\n\t\t// Write signatures\n\t\tfor (const sig of this.signatures) {\n\t\t\tbuffer.set(sig, offset);\n\t\t\toffset += SIGNATURE_LENGTH;\n\t\t}\n\n\t\t// Write message\n\t\tbuffer.set(messageBytes, offset);\n\n\t\treturn buffer;\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Fluent API for building transactions.\n * Returns Transaction directly (not Message).\n */\n\nimport type { PublicKey } from \"../crypto\";\nimport { AccountMetaTable } from \"./account-meta-table\";\nimport { TransactionError, TransactionErrorCode } from \"./errors\";\nimport { Message } from \"./message\";\nimport { Transaction } from \"./transaction\";\nimport type { CompiledInstruction, Instruction } from \"./types\";\n\n/**\n * Builder for creating transactions with a fluent API.\n *\n * Provides an intuitive interface for constructing transactions.\n * Call build() to get an unsigned Transaction ready for signing.\n *\n * @example\n * ```typescript\n * // Simple transfer\n * const tx = TransactionBuilder.create()\n * .setPayer(payer)\n * .setValidFrom(validFrom)\n * .addInstruction(transfer(from, to, 1_000_000n))\n * .build();\n *\n * const signedTx = tx.sign(keypair);\n * await client.transaction.sendTransaction(signedTx.serialize());\n * ```\n *\n * @example\n * ```typescript\n * // Multi-instruction transaction\n * const tx = TransactionBuilder.create()\n * .setPayer(payer)\n * .setValidFrom(validFrom)\n * .addInstruction(transfer(from, to, 1_000_000n))\n * .addInstruction(memoInstruction(\"Payment for invoice #123\"))\n * .build();\n * ```\n */\nexport class TransactionBuilder {\n\tprivate payer?: PublicKey;\n private validFrom?: bigint;\n private configHashPrefix?: bigint;\n private occ = false;\n\tprivate readonly instructions: Instruction[] = [];\n\n\tprivate constructor() {}\n\n\t/**\n\t * Create a new transaction builder.\n\t */\n\tstatic create(): TransactionBuilder {\n\t\treturn new TransactionBuilder();\n\t}\n\n\t/**\n\t * Set the fee payer for this transaction.\n\t *\n\t * The payer will be the first account and must sign the transaction.\n\t * The payer pays for transaction fees.\n\t *\n\t * @param payer - Public key of the fee payer\n\t */\n\tsetPayer(payer: PublicKey): this {\n\t\tthis.payer = payer;\n\t\treturn this;\n\t}\n\n /**\n * Set the Transaction valid from.\n *\n * This is the time the transaction is valid from, in milliseconds since Unix epoch.\n * It can be used for additional replay protection or auditing.\n *\n * @param validFrom - Transaction valid from in milliseconds since Unix epoch\n */\n setValidFrom(validFrom: bigint): this {\n this.validFrom = validFrom;\n return this;\n }\n\n /**\n * Set the config hash prefix for replay protection.\n *\n * This is the first 64 bits of the config hash, used to ensure\n * transactions cannot be replayed on different chains.\n *\n * @param configHashPrefix - config hash prefix as a u64\n */\n setConfigHashPrefix(configHashPrefix: bigint): this {\n this.configHashPrefix = configHashPrefix;\n return this;\n }\n\n /**\n * Enable OCC (optimistic concurrency control) scheduling for this transaction.\n *\n * @param occ - Whether to use OCC scheduling (default: false)\n */\n setOcc(occ: boolean): this {\n this.occ = occ;\n return this;\n }\n\n\t/**\n\t * Add an instruction to the transaction.\n\t *\n\t * @param instruction - Instruction to add\n\t */\n\taddInstruction(instruction: Instruction): this {\n\t\tthis.instructions.push(instruction);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Add multiple instructions at once.\n\t *\n\t * @param instructions - Array of instructions to add\n\t */\n\taddInstructions(instructions: readonly Instruction[]): this {\n\t\tthis.instructions.push(...instructions);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Build the transaction (unsigned).\n\t *\n\t * Returns an unsigned Transaction that's ready to be signed.\n\t *\n\t * @returns Unsigned Transaction\n\t * @throws {TransactionError} If payer, valid_from, or instructions are missing\n\t *\n\t * @example\n\t * ```typescript\n\t * const tx = builder.build();\n\t * const signedTx = tx.sign(keypair);\n\t * ```\n\t */\n\tbuild(): Transaction {\n\t\t// Validate required fields\n\t\tif (!this.payer) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.INVALID_ACCOUNT_META,\n\t\t\t\t\"Transaction must have a fee payer. Use setPayer() to set the fee payer.\",\n\t\t\t);\n\t\t}\n\n if (!this.validFrom) {\n throw new TransactionError(\n TransactionErrorCode.INVALID_MESSAGE_FORMAT,\n \"Transaction must have a valid from. Use setValidFrom() to set the valid from.\",\n );\n }\n\n if (this.configHashPrefix === undefined) {\n throw new TransactionError(\n TransactionErrorCode.INVALID_MESSAGE_FORMAT,\n \"Transaction must have a config hash prefix. Use setConfigHashPrefix() to set the config hash prefix.\",\n );\n }\n\n\t\tif (this.instructions.length === 0) {\n\t\t\tthrow TransactionError.noInstructions();\n\t\t}\n\n\t\t// Build account meta table\n\t\tconst accountTable = new AccountMetaTable();\n\n\t\t// Pin payer at index 0 (signer + writable)\n\t\taccountTable.setFeePayer(this.payer);\n\n\t\t// Add all accounts from instructions\n\t\tfor (const instruction of this.instructions) {\n\t\t\taccountTable.addAll(instruction.accounts);\n\n\t\t\t// Add program ID as readonly non-signer\n\t\t\taccountTable.add({\n\t\t\t\tpubkey: instruction.programId,\n\t\t\t\tisSigner: false,\n\t\t\t\tisWritable: false,\n\t\t\t});\n\t\t}\n\n\t\t// Get sorted accounts and header\n\t\tconst accountKeys = accountTable.getPublicKeys();\n\t\tconst header = accountTable.getHeader();\n\n\t\t// Compile instructions (convert pubkeys to indices)\n\t\tconst compiledInstructions = this.instructions.map((instruction) => {\n\t\t\tconst programIdIndex = accountTable.getIndex(instruction.programId);\n\t\t\tif (programIdIndex === -1) {\n\t\t\t\tthrow new TransactionError(\n\t\t\t\t\tTransactionErrorCode.INVALID_INSTRUCTION,\n\t\t\t\t\t`Program ID ${instruction.programId.toString()} not found in account table`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst accountKeyIndexes = instruction.accounts.map((meta) => {\n\t\t\t\tconst index = accountTable.getIndex(meta.pubkey);\n\t\t\t\tif (index === -1) {\n\t\t\t\t\tthrow new TransactionError(\n\t\t\t\t\t\tTransactionErrorCode.INVALID_INSTRUCTION,\n\t\t\t\t\t\t`Account ${meta.pubkey.toString()} not found in account table`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn index;\n\t\t\t});\n\n\t\t\tconst compiled: CompiledInstruction = {\n\t\t\t\tprogramIdIndex,\n\t\t\t\taccountKeyIndexes: Object.freeze(accountKeyIndexes),\n\t\t\t\tdata: instruction.data,\n\t\t\t};\n\n\t\t\treturn compiled;\n\t\t});\n\n\t\t// Create message\n\t\tconst message = new Message(\n\t\t\theader,\n\t\t\taccountKeys,\n this.validFrom,\n this.configHashPrefix,\n this.occ,\n\t\t\tcompiledInstructions,\n\t\t);\n\n\t\t// Return unsigned transaction\n\t\treturn Transaction.fromMessage(message);\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Compact-u16 encoding for efficient variable-length integer serialization.\n *\n * Uses 1-3 bytes depending on value size:\n * - 0-127: 1 byte (7 bits)\n * - 128-16,383: 2 bytes (14 bits)\n * - 16,384-65,535: 3 bytes (16 bits)\n *\n * This encoding saves space for small numbers while supporting the full u16 range.\n */\nimport {\n\tTransactionError,\n\tTransactionErrorCode,\n} from \"../transaction/index.js\";\n\n/**\n * Serializes a u16 value into compact encoding.\n *\n * @param buffer - Output buffer to append bytes to\n * @param value - Value to encode (0-65535)\n * @throws {TransactionError} If value is out of range\n */\nexport function serializeCompactU16(buffer: number[], value: number): void {\n\tif (value < 0 || value > 0xffff) {\n\t\tthrow new TransactionError(\n\t\t\tTransactionErrorCode.SERIALIZATION_FAILED,\n\t\t\t`Value out of range for compact-u16: ${value}`,\n\t\t);\n\t}\n\n\t// Single byte (0-127)\n\tif (value <= 0x7f) {\n\t\tbuffer.push(value);\n\t\treturn;\n\t}\n\n\t// Two bytes (128-16383)\n\tif (value <= 0x3fff) {\n\t\tbuffer.push((value & 0x7f) | 0x80);\n\t\tbuffer.push((value >> 7) & 0x7f);\n\t\treturn;\n\t}\n\n\t// Three bytes (16384-65535)\n\tbuffer.push((value & 0x7f) | 0x80);\n\tbuffer.push(((value >> 7) & 0x7f) | 0x80);\n\tbuffer.push((value >> 14) & 0xff);\n}\n\n/**\n * Deserializes a compact-u16 value from bytes.\n *\n * @param data - Input byte array\n * @param currentCursor - Starting position in the array\n * @returns Tuple of [decoded value, new cursor position]\n * @throws {TransactionError} If data is insufficient or malformed\n */\nexport function deserializeCompactU16(\n\tdata: Uint8Array,\n\tcurrentCursor: number,\n): [number, number] {\n\tlet cursor = currentCursor;\n\tif (cursor >= data.length) {\n\t\tthrow new TransactionError(\n\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\"Insufficient data for compact-u16\",\n\t\t);\n\t}\n\n\tconst firstByte = data[cursor++];\n\n\t// Single byte encoding (0-127)\n\tif ((firstByte & 0x80) === 0) {\n\t\treturn [firstByte, cursor];\n\t}\n\n\t// Multi-byte encoding\n\tif (cursor >= data.length) {\n\t\tthrow new TransactionError(\n\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\"Incomplete compact-u16 encoding\",\n\t\t);\n\t}\n\n\tconst secondByte = data[cursor++];\n\n\t// Two-byte encoding (128-16383)\n\tif ((secondByte & 0x80) === 0) {\n\t\treturn [(firstByte & 0x7f) | (secondByte << 7), cursor];\n\t}\n\n\t// Three-byte encoding (16384-65535)\n\tif (cursor >= data.length) {\n\t\tthrow new TransactionError(\n\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\"Incomplete compact-u16 encoding\",\n\t\t);\n\t}\n\n\tconst thirdByte = data[cursor++];\n\tconst value =\n\t\t(firstByte & 0x7f) | ((secondByte & 0x7f) << 7) | (thirdByte << 14);\n\n\treturn [value, cursor];\n}\n\n/**\n * Writes a compact-u16 value directly to a buffer (zero-copy).\n *\n * Optimized version for in-place writing without intermediate allocations.\n *\n * @param buffer - Target buffer\n * @param offset - Starting position to write at\n * @param value - Value to encode (0-127 only, uses 1-2 bytes)\n * @returns New offset after writing\n */\nexport function writeCompactU16(\n\tbuffer: Uint8Array,\n\toffset: number,\n\tvalue: number,\n): number {\n\tif (value < 0x80) {\n\t\tbuffer[offset] = value;\n\t\treturn offset + 1;\n\t}\n\tbuffer[offset] = (value & 0x7f) | 0x80;\n\tbuffer[offset + 1] = value >> 7;\n\treturn offset + 2;\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { Keypair, PublicKey, Signature } from \"../crypto\";\nimport type { Signer } from \"./signer\";\n\n/**\n * Signer implementation using a local Ed25519 keypair.\n *\n * Provides synchronous signing without external dependencies.\n * Suitable for server-side applications, CLIs, and testing.\n *\n * @example\n * ```typescript\n * import { Keypair, KeypairSigner } from '@rialo/ts-cdk';\n *\n * // Generate new keypair\n * const keypair = Keypair.generate();\n * const signer = new KeypairSigner(keypair);\n *\n * // Or from mnemonic\n * const mnemonic = Mnemonic.generate();\n * const keypair = await mnemonic.toKeypair(0);\n * const signer = new KeypairSigner(keypair);\n *\n * // Sign messages\n * const publicKey = await signer.getPublicKey();\n * const signature = await signer.signMessage(message);\n * ```\n */\nexport class KeypairSigner implements Signer {\n\tconstructor(private readonly keypair: Keypair) {}\n\n\t/**\n\t * Returns the keypair's public key.\n\t */\n\tasync getPublicKey(): Promise<PublicKey> {\n\t\treturn this.keypair.publicKey;\n\t}\n\n\t/**\n\t * Signs a message using the keypair's private key.\n\t */\n\tasync signMessage(message: Uint8Array): Promise<Signature> {\n\t\treturn this.keypair.sign(message);\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n// AUTO-GENERATED FROM spec.wit — DO NOT EDIT\n\nimport type { DerivedKeypairInfo, PublicKey } from \"./types.js\";\n\n/**\n * A keyring managing one or more derived keypairs.\n * Secret material stays inside the keyring — callers interact via\n * indices and public metadata. No freely-passed keypair resources.\n * \n * No direct constructor — keyrings are created via KeyringProvider\n * (create, create-with-mnemonic, recover-from-mnemonic, load).\n * Active keypair contract: the active keypair is always index 0 at\n * creation time. Active-keypair switching is a facade operation not\n * in the generated contract.\n */\n/**\n * Resource `keyring` — generated from spec.wit.\n *\n * Extend this class to provide a concrete `Keyring` implementation.\n * Instance methods are abstract; static methods throw by default (override in subclass).\n */\nexport abstract class Keyring {\n /**\n * Sign a message with the active keypair.\n * Returns 64-byte Ed25519 signature.\n */\n abstract sign(message: Uint8Array): Uint8Array;\n\n /**\n * Verify a signature with the active keypair.\n */\n abstract verify(message: Uint8Array, sig: Uint8Array): boolean;\n\n /**\n * Active keypair's public key as base58 string.\n */\n abstract pubkeyString(): string;\n\n /**\n * Active keypair's public key (32 bytes).\n */\n abstract pubkey(): PublicKey;\n\n /**\n * Get public metadata for a keypair by index.\n */\n abstract getKeypairInfo(index: number): DerivedKeypairInfo | undefined;\n\n /**\n * List all keypair indices, sorted ascending.\n */\n abstract listKeypairs(): number[];\n\n /**\n * Get public metadata for all keypairs, sorted by ascending index.\n */\n abstract getKeypairsInfo(): DerivedKeypairInfo[];\n\n /**\n * Sign with a specific keypair by index.\n */\n abstract signWithKeypair(message: Uint8Array, index: number): Uint8Array;\n\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { RialoError, RialoErrorType } from \"../error.js\";\n\nconst U32_MAX = 0xFFFFFFFF;\n\n/**\n * Validates that a keypair index is a valid WIT u32 value.\n * Rejects negative, fractional, NaN, and values above 0xFFFFFFFF.\n */\nexport function validateKeypairIndex(index: number): void {\n\tif (!Number.isInteger(index) || index < 0 || index > U32_MAX) {\n\t\tthrow new RialoError(\n\t\t\tRialoErrorType.INVALID_INPUT,\n\t\t\t`Invalid keypair index: ${index}. Must be a non-negative integer <= ${U32_MAX}.`,\n\t\t);\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Keyring as KeyringBase } from \"../generated/keyring.js\";\nimport type { DerivedKeypairInfo, PublicKey } from \"../generated/types.js\";\nimport { Keypair } from \"../crypto/keypair.js\";\nimport { Signature } from \"../crypto/signature.js\";\nimport { RialoError, RialoErrorType } from \"../error.js\";\nimport { validateKeypairIndex } from \"./validation.js\";\n\n/**\n * Concrete keyring implementation backed by an in-memory map of derived keypairs.\n *\n * Keyrings are created via {@link InMemoryKeyringProvider}, not directly.\n * The active keypair defaults to index 0. Use {@link setActiveKeypair} to change it.\n * Secret material stays inside the keyring — callers interact via indices and public metadata.\n */\nexport class RialoKeyring extends KeyringBase {\n\tprivate readonly keypairs: Map<number, Keypair>;\n\tprivate readonly derivationPaths: Map<number, string | undefined>;\n\tprivate activeIndex: number;\n\n\tconstructor(\n\t\tkeypairs: Map<number, Keypair>,\n\t\tderivationPaths: Map<number, string | undefined>,\n\t) {\n\t\tsuper();\n\t\tthis.keypairs = keypairs;\n\t\tthis.derivationPaths = derivationPaths;\n\t\tthis.activeIndex = 0;\n\t}\n\n\t/**\n\t * Sets the active keypair index (facade operation, not in WIT contract).\n\t *\n\t * @param index - The keypair index to make active\n\t * @throws {RialoError} If the index does not exist in this keyring\n\t */\n\tsetActiveKeypair(index: number): void {\n\t\tvalidateKeypairIndex(index);\n\t\tif (!this.keypairs.has(index)) {\n\t\t\tthrow new RialoError(\n\t\t\t\tRialoErrorType.WALLET,\n\t\t\t\t`Keypair ${index} not found in keyring`,\n\t\t\t);\n\t\t}\n\t\tthis.activeIndex = index;\n\t}\n\n\tprivate activeKeypair(): Keypair {\n\t\tconst kp = this.keypairs.get(this.activeIndex);\n\t\tif (!kp) {\n\t\t\tthrow new RialoError(RialoErrorType.WALLET, \"Active keypair does not exist\");\n\t\t}\n\t\treturn kp;\n\t}\n\n\tsign(message: Uint8Array): Uint8Array {\n\t\treturn this.activeKeypair().sign(message).toBytes();\n\t}\n\n\tverify(message: Uint8Array, sig: Uint8Array): boolean {\n\t\treturn this.activeKeypair().verify(message, Signature.fromBytes(sig));\n\t}\n\n\tpubkeyString(): string {\n\t\treturn this.activeKeypair().publicKey.toString();\n\t}\n\n\tpubkey(): PublicKey {\n\t\treturn this.activeKeypair().publicKey;\n\t}\n\n\tgetKeypairInfo(index: number): DerivedKeypairInfo | undefined {\n\t\tvalidateKeypairIndex(index);\n\t\tconst kp = this.keypairs.get(index);\n\t\tif (!kp) return undefined;\n\t\treturn {\n\t\t\tindex,\n\t\t\tpubkey: kp.publicKey,\n\t\t\tpubkeyString: kp.publicKey.toString(),\n\t\t\tderivationPath: this.derivationPaths.get(index) ?? undefined,\n\t\t};\n\t}\n\n\tlistKeypairs(): number[] {\n\t\treturn Array.from(this.keypairs.keys()).sort((a, b) => a - b);\n\t}\n\n\tgetKeypairsInfo(): DerivedKeypairInfo[] {\n\t\treturn this.listKeypairs().map((index) => this.getKeypairInfo(index)!);\n\t}\n\n\tsignWithKeypair(message: Uint8Array, index: number): Uint8Array {\n\t\tvalidateKeypairIndex(index);\n\t\tconst kp = this.keypairs.get(index);\n\t\tif (!kp) {\n\t\t\tthrow new RialoError(\n\t\t\t\tRialoErrorType.WALLET,\n\t\t\t\t`Keypair ${index} not found in keyring`,\n\t\t\t);\n\t\t}\n\t\treturn kp.sign(message).toBytes();\n\t}\n\n\t/**\n\t * Securely erases all secret key material from this keyring snapshot.\n\t *\n\t * Calls {@link Keypair.dispose} on every keypair, zeroing private key bytes.\n\t * After disposal, signing and secret-key export will throw. Verification\n\t * still works (uses only the public key). Does not affect provider-stored\n\t * state or other snapshots.\n\t */\n\tdispose(): void {\n\t\tfor (const kp of this.keypairs.values()) {\n\t\t\tkp.dispose();\n\t\t}\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n// AUTO-GENERATED FROM spec.wit — DO NOT EDIT\n\nimport type { DerivedKeypairInfo, PublicKey } from \"./types.js\";\nimport type { Keyring } from \"./keyring.js\";\n\n/**\n * Storage and lifecycle management for keyrings. All methods async (I/O).\n * No WIT constructor — concrete providers are language-specific\n * (e.g., InMemoryKeyringProvider::new(), new InMemoryKeyringProvider()).\n */\n/**\n * Resource `keyring-provider` — generated from spec.wit.\n *\n * Extend this class to provide a concrete `KeyringProvider` implementation.\n * Instance methods are abstract; static methods throw by default (override in subclass).\n */\nexport abstract class KeyringProvider {\n /**\n * Create a new keyring with a random keypair at index 0.\n */\n abstract create(name: string, password: string): Promise<Keyring>;\n\n /**\n * Create a keyring with a generated BIP39 mnemonic.\n * strength-bits: 128 (12 words) or 256 (24 words).\n * Initializes exactly one keypair at index 0 derived from the mnemonic.\n * Returns (keyring, mnemonic_phrase). The mnemonic is returned ONCE\n * for backup — it is NOT stored on the keyring contract.\n */\n abstract createWithMnemonic(name: string, strengthBits: number, password: string): Promise<[Keyring, string]>;\n\n /**\n * Recover a keyring from an existing BIP39 mnemonic phrase.\n * Initializes one keypair at index 0 derived from the mnemonic.\n */\n abstract recoverFromMnemonic(name: string, mnemonic: string, password: string): Promise<Keyring>;\n\n /**\n * Load an existing keyring by name. Active keypair defaults to index 0.\n */\n abstract load(name: string, password: string): Promise<Keyring>;\n\n /**\n * List all keyring names, sorted alphabetically.\n */\n abstract list(): Promise<string[]>;\n\n /**\n * Check if a keyring exists by name.\n */\n abstract exists(name: string): Promise<boolean>;\n\n /**\n * Get the active keypair's public key for a keyring (without loading).\n */\n abstract getPublicKey(name: string): Promise<PublicKey>;\n\n /**\n * List all keyrings with their active keypair's public info,\n * sorted alphabetically by keyring name.\n */\n abstract listPublicKeys(): Promise<[string, DerivedKeypairInfo][]>;\n\n /**\n * List keypair metadata for a specific keyring, sorted by ascending index.\n */\n abstract listKeypairs(keyringName: string): Promise<DerivedKeypairInfo[]>;\n\n /**\n * Derive a new keypair at the specified index.\n * Errors with DUPLICATE_KEYPAIR_INDEX if the index already exists.\n */\n abstract deriveKeypair(keyringName: string, keypairIndex: number, password: string): Promise<DerivedKeypairInfo>;\n\n /**\n * Import an existing 32-byte Ed25519 secret key into a keyring.\n * Assigns the next available index (max(existing) + 1).\n */\n abstract importSecretKey(keyringName: string, secretKey: Uint8Array, derivationPath: string | undefined, password: string): Promise<DerivedKeypairInfo>;\n\n /**\n * Get metadata for all keypairs in a keyring, sorted by ascending index.\n */\n abstract getKeypairsInfo(name: string): Promise<DerivedKeypairInfo[]>;\n\n /**\n * Get metadata for a specific keypair by index.\n */\n abstract getKeypairInfo(name: string, keypairIndex: number): Promise<DerivedKeypairInfo>;\n\n /**\n * Returns max(existing indices) + 1, or 0 if empty.\n * With sparse indices (e.g., 0 and 5 exist), returns 6, not 2.\n */\n abstract nextKeypairIndex(name: string): Promise<number>;\n\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { KeyringProvider as KeyringProviderBase } from \"../generated/keyring-provider.js\";\nimport type { Keyring } from \"../generated/keyring.js\";\nimport type { DerivedKeypairInfo, PublicKey } from \"../generated/types.js\";\nimport { Keypair } from \"../crypto/keypair.js\";\nimport { Mnemonic, type MnemonicStrength } from \"../crypto/mnemonic.js\";\nimport { RialoError, RialoErrorType } from \"../error.js\";\nimport { BASE_DERIVATION_PATH } from \"../constants.js\";\nimport { RialoKeyring } from \"./keyring.js\";\nimport { validateKeypairIndex } from \"./validation.js\";\n\ninterface StoredKeyring {\n\tkeypairs: Map<number, Keypair>;\n\tderivationPaths: Map<number, string | undefined>;\n\tmnemonic: string | undefined;\n\tpassword: string;\n}\n\n/**\n * In-memory keyring provider for testing and ephemeral use.\n *\n * **Security note:** This provider stores keyrings, passwords, and mnemonic\n * phrases in plaintext memory. It is designed for development, testing, and\n * ephemeral use cases — NOT for production secret storage. Key material\n * persists in the JS heap until garbage collected. For production use,\n * implement a provider backed by encrypted storage or a hardware security module.\n *\n * Keyrings are stored in memory only — not persisted between restarts.\n * Implements the full keyring-provider contract from the WIT spec.\n */\nexport class InMemoryKeyringProvider extends KeyringProviderBase {\n\tprivate readonly keyrings = new Map<string, StoredKeyring>();\n\n\tprivate getStored(name: string): StoredKeyring {\n\t\tconst stored = this.keyrings.get(name);\n\t\tif (!stored) {\n\t\t\tthrow new RialoError(RialoErrorType.WALLET, `Keyring not found: ${name}`);\n\t\t}\n\t\treturn stored;\n\t}\n\n\tprivate checkPassword(stored: StoredKeyring, password: string): void {\n\t\tif (stored.password !== password) {\n\t\t\tthrow new RialoError(RialoErrorType.PASSWORD, \"Invalid password\");\n\t\t}\n\t}\n\n\tprivate buildKeyring(stored: StoredKeyring): RialoKeyring {\n\t\tconst keypairsCopy = new Map<number, Keypair>();\n\t\tfor (const [idx, kp] of stored.keypairs) {\n\t\t\tkeypairsCopy.set(idx, Keypair.fromSecretKey(kp.secretKeyBytes()));\n\t\t}\n\t\tconst pathsCopy = new Map(stored.derivationPaths);\n\t\treturn new RialoKeyring(keypairsCopy, pathsCopy);\n\t}\n\n\tprivate toInfo(index: number, kp: Keypair, derivationPath: string | undefined): DerivedKeypairInfo {\n\t\treturn {\n\t\t\tindex,\n\t\t\tpubkey: kp.publicKey,\n\t\t\tpubkeyString: kp.publicKey.toString(),\n\t\t\tderivationPath,\n\t\t};\n\t}\n\n\tprivate nextIndex(stored: StoredKeyring): number {\n\t\tif (stored.keypairs.size === 0) return 0;\n\t\treturn Math.max(...stored.keypairs.keys()) + 1;\n\t}\n\n\tasync create(name: string, password: string): Promise<Keyring> {\n\t\tif (this.keyrings.has(name)) {\n\t\t\tthrow new RialoError(RialoErrorType.WALLET, `Keyring already exists: ${name}`);\n\t\t}\n\n\t\tconst kp = Keypair.generate();\n\t\tconst keypairs = new Map<number, Keypair>([[0, kp]]);\n\t\tconst derivationPaths = new Map<number, string | undefined>([[0, undefined]]);\n\n\t\tthis.keyrings.set(name, { keypairs, derivationPaths, mnemonic: undefined, password });\n\t\treturn this.buildKeyring(this.getStored(name));\n\t}\n\n\tasync createWithMnemonic(\n\t\tname: string,\n\t\tstrengthBits: number,\n\t\tpassword: string,\n\t): Promise<[Keyring, string]> {\n\t\tif (this.keyrings.has(name)) {\n\t\t\tthrow new RialoError(RialoErrorType.WALLET, `Keyring already exists: ${name}`);\n\t\t}\n\t\tif (strengthBits !== 128 && strengthBits !== 256) {\n\t\t\tthrow new RialoError(\n\t\t\t\tRialoErrorType.INVALID_INPUT,\n\t\t\t\t`Invalid mnemonic strength: ${strengthBits}. Must be 128 or 256.`,\n\t\t\t);\n\t\t}\n\n\t\tconst mnemonic = Mnemonic.generate(strengthBits as MnemonicStrength);\n\t\tconst kp = await mnemonic.toKeypair(0);\n\t\tconst path = `${BASE_DERIVATION_PATH}0'/0'`;\n\n\t\tconst keypairs = new Map<number, Keypair>([[0, kp]]);\n\t\tconst derivationPaths = new Map<number, string | undefined>([[0, path]]);\n\n\t\tthis.keyrings.set(name, {\n\t\t\tkeypairs,\n\t\t\tderivationPaths,\n\t\t\tmnemonic: mnemonic.toString(),\n\t\t\tpassword,\n\t\t});\n\n\t\treturn [this.buildKeyring(this.getStored(name)), mnemonic.toString()];\n\t}\n\n\tasync recoverFromMnemonic(\n\t\tname: string,\n\t\tmnemonicPhrase: string,\n\t\tpassword: string,\n\t): Promise<Keyring> {\n\t\tif (this.keyrings.has(name)) {\n\t\t\tthrow new RialoError(RialoErrorType.WALLET, `Keyring already exists: ${name}`);\n\t\t}\n\t\tif (!Mnemonic.isValid(mnemonicPhrase)) {\n\t\t\tthrow new RialoError(RialoErrorType.INVALID_INPUT, \"Invalid BIP39 mnemonic phrase\");\n\t\t}\n\n\t\tconst mnemonic = Mnemonic.fromPhrase(mnemonicPhrase);\n\t\tconst kp = await mnemonic.toKeypair(0);\n\t\tconst path = `${BASE_DERIVATION_PATH}0'/0'`;\n\n\t\tconst keypairs = new Map<number, Keypair>([[0, kp]]);\n\t\tconst derivationPaths = new Map<number, string | undefined>([[0, path]]);\n\n\t\tthis.keyrings.set(name, {\n\t\t\tkeypairs,\n\t\t\tderivationPaths,\n\t\t\tmnemonic: mnemonicPhrase,\n\t\t\tpassword,\n\t\t});\n\n\t\treturn this.buildKeyring(this.getStored(name));\n\t}\n\n\tasync load(name: string, password: string): Promise<Keyring> {\n\t\tconst stored = this.getStored(name);\n\t\tthis.checkPassword(stored, password);\n\t\treturn this.buildKeyring(stored);\n\t}\n\n\tasync list(): Promise<string[]> {\n\t\treturn Array.from(this.keyrings.keys()).sort();\n\t}\n\n\tasync exists(name: string): Promise<boolean> {\n\t\treturn this.keyrings.has(name);\n\t}\n\n\tasync getPublicKey(name: string): Promise<PublicKey> {\n\t\tconst stored = this.getStored(name);\n\t\tconst kp = stored.keypairs.get(0);\n\t\tif (!kp) throw new RialoError(RialoErrorType.WALLET, `Keyring ${name} has no keypair at index 0`);\n\t\treturn kp.publicKey;\n\t}\n\n\tasync listPublicKeys(): Promise<[string, DerivedKeypairInfo][]> {\n\t\tconst results: [string, DerivedKeypairInfo][] = [];\n\t\tfor (const [name, stored] of this.keyrings) {\n\t\t\tconst kp = stored.keypairs.get(0);\n\t\t\tif (kp) {\n\t\t\t\tresults.push([name, this.toInfo(0, kp, stored.derivationPaths.get(0))]);\n\t\t\t}\n\t\t}\n\t\tresults.sort((a, b) => a[0].localeCompare(b[0]));\n\t\treturn results;\n\t}\n\n\tasync listKeypairs(keyringName: string): Promise<DerivedKeypairInfo[]> {\n\t\tconst stored = this.getStored(keyringName);\n\t\tconst indices = Array.from(stored.keypairs.keys()).sort((a, b) => a - b);\n\t\treturn indices.map((idx) => {\n\t\t\tconst kp = stored.keypairs.get(idx)!;\n\t\t\treturn this.toInfo(idx, kp, stored.derivationPaths.get(idx));\n\t\t});\n\t}\n\n\tasync deriveKeypair(\n\t\tkeyringName: string,\n\t\tkeypairIndex: number,\n\t\tpassword: string,\n\t): Promise<DerivedKeypairInfo> {\n\t\tvalidateKeypairIndex(keypairIndex);\n\n\t\tconst stored = this.getStored(keyringName);\n\t\tthis.checkPassword(stored, password);\n\n\t\tif (stored.keypairs.has(keypairIndex)) {\n\t\t\tthrow new RialoError(\n\t\t\t\tRialoErrorType.WALLET,\n\t\t\t\t`Keypair with index ${keypairIndex} already exists`,\n\t\t\t);\n\t\t}\n\n\t\tlet kp: Keypair;\n\t\tlet derivationPath: string | undefined;\n\n\t\tif (stored.mnemonic) {\n\t\t\tconst mnemonic = Mnemonic.fromPhrase(stored.mnemonic);\n\t\t\tkp = await mnemonic.toKeypair(keypairIndex);\n\t\t\tderivationPath = `${BASE_DERIVATION_PATH}${keypairIndex}'/0'`;\n\t\t} else {\n\t\t\tkp = Keypair.generate();\n\t\t\tderivationPath = undefined;\n\t\t}\n\n\t\tstored.keypairs.set(keypairIndex, kp);\n\t\tstored.derivationPaths.set(keypairIndex, derivationPath);\n\n\t\treturn this.toInfo(keypairIndex, kp, derivationPath);\n\t}\n\n\tasync importSecretKey(\n\t\tkeyringName: string,\n\t\tsecretKey: Uint8Array,\n\t\tderivationPath: string | undefined,\n\t\tpassword: string,\n\t): Promise<DerivedKeypairInfo> {\n\t\tif (secretKey.length !== 32) {\n\t\t\tthrow new RialoError(\n\t\t\t\tRialoErrorType.INVALID_INPUT,\n\t\t\t\t`Invalid secret key length: expected 32 bytes, got ${secretKey.length}`,\n\t\t\t);\n\t\t}\n\n\t\tconst stored = this.getStored(keyringName);\n\t\tthis.checkPassword(stored, password);\n\n\t\tconst kp = Keypair.fromSecretKey(secretKey);\n\t\tconst nextIdx = this.nextIndex(stored);\n\n\t\tstored.keypairs.set(nextIdx, kp);\n\t\tstored.derivationPaths.set(nextIdx, derivationPath);\n\n\t\treturn this.toInfo(nextIdx, kp, derivationPath);\n\t}\n\n\tasync getKeypairsInfo(name: string): Promise<DerivedKeypairInfo[]> {\n\t\treturn this.listKeypairs(name);\n\t}\n\n\tasync getKeypairInfo(name: string, keypairIndex: number): Promise<DerivedKeypairInfo> {\n\t\tvalidateKeypairIndex(keypairIndex);\n\t\tconst stored = this.getStored(name);\n\t\tconst kp = stored.keypairs.get(keypairIndex);\n\t\tif (!kp) {\n\t\t\tthrow new RialoError(\n\t\t\t\tRialoErrorType.WALLET,\n\t\t\t\t`Keypair ${keypairIndex} not found in keyring ${name}`,\n\t\t\t);\n\t\t}\n\t\treturn this.toInfo(keypairIndex, kp, stored.derivationPaths.get(keypairIndex));\n\t}\n\n\tasync nextKeypairIndex(name: string): Promise<number> {\n\t\tconst stored = this.getStored(name);\n\t\treturn this.nextIndex(stored);\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/** RISC-V loader program ID (PolkaVM bytecode). */\nexport const RISCV_LOADER_PROGRAM_ID = \"RiscVLoader11111111111111111111111111111111\";\n\n/** LoaderV4 program ID (eBPF programs). */\nexport const LOADER_V4_PROGRAM_ID = \"LoaderV411111111111111111111111111111111111\";\n\n/** Default chunk size for writing program data (bytes). */\nexport const DEFAULT_CHUNK_SIZE = 3700;\n\n/** Default max retries when polling for confirmation. */\nexport const DEFAULT_MAX_RETRIES = 350;\n\n/** Default base delay between retries (ms). */\nexport const DEFAULT_RETRY_BASE_DELAY_MS = 50;\n\n/** Default max delay between retries (ms). */\nexport const DEFAULT_RETRY_MAX_DELAY_MS = 1000;\n\n/** Number of chunks to confirm per batch. */\nexport const DEFAULT_CONFIRMATION_BATCH_SIZE = 25;\n\n/** Safety factor for rent-exempt balance calculation. */\nexport const BUFFER_BALANCE_FACTOR = 1.2;\n\n/** Byte offset where program data begins in a loader account (size of LoaderState header). */\nexport const PROGRAM_DATA_OFFSET = 48;\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { base58 } from \"@scure/base\";\nimport { PublicKey, type Keypair } from \"../crypto\";\nimport type { RialoClient } from \"../rpc/clients/client\";\nimport { RpcError, RpcErrorCode } from \"../rpc/errors\";\nimport { createAccount, transferInstruction } from \"../transaction/instructions/system\";\nimport { TransactionBuilder } from \"../transaction/transaction-builder\";\nimport type { Instruction } from \"../transaction/types\";\nimport { sleep } from \"../utils\";\nimport {\n BUFFER_BALANCE_FACTOR,\n DEFAULT_CHUNK_SIZE,\n DEFAULT_CONFIRMATION_BATCH_SIZE,\n DEFAULT_MAX_RETRIES,\n DEFAULT_RETRY_BASE_DELAY_MS,\n DEFAULT_RETRY_MAX_DELAY_MS,\n PROGRAM_DATA_OFFSET,\n RISCV_LOADER_PROGRAM_ID,\n} from \"./constants\";\nimport { DeploymentError } from \"./errors\";\nimport {\n deployInstruction,\n retractInstruction,\n setProgramLengthInstruction,\n writeInstruction,\n} from \"./instructions\";\n\nexport interface DeploymentConfig {\n chunkSize?: number;\n maxRetries?: number;\n retryBaseDelayMs?: number;\n retryMaxDelayMs?: number;\n confirmationBatchSize?: number;\n}\n\nexport interface ProgramDeploymentOptions {\n programData: Uint8Array;\n programKeypair: Keypair;\n config?: DeploymentConfig;\n}\n\n/**\n * Calculate exponential backoff delay (matching Rust: base_ms * 1.15^attempt, capped).\n */\nexport function calculateBackoff(attempt: number, baseDelayMs: number, maxDelayMs: number): number {\n const delay = baseDelayMs * 1.15 ** attempt;\n return Math.min(delay, maxDelayMs);\n}\n\n\n/**\n * Deploys PolkaVM programs to Rialo chains.\n *\n * Matches the Rust CDK's ProgramDeployment behavior:\n * 1. Create/prepare program account\n * 2. Write bytecode in chunks with batched confirmation\n * 3. Deploy (make executable)\n */\nexport class ProgramDeployment {\n private readonly programData: Uint8Array;\n private readonly programKeypair: Keypair;\n private readonly chunkSize: number;\n private readonly maxRetries: number;\n private readonly retryBaseDelayMs: number;\n private readonly retryMaxDelayMs: number;\n private readonly confirmationBatchSize: number;\n\n constructor(options: ProgramDeploymentOptions) {\n if (options.programData.length === 0) {\n throw DeploymentError.emptyProgramData();\n }\n\n this.programData = options.programData;\n this.programKeypair = options.programKeypair;\n\n const chunkSize = options.config?.chunkSize ?? DEFAULT_CHUNK_SIZE;\n if (chunkSize <= 0) {\n throw DeploymentError.invalidChunkSize(chunkSize);\n }\n this.chunkSize = chunkSize;\n this.maxRetries = options.config?.maxRetries ?? DEFAULT_MAX_RETRIES;\n this.retryBaseDelayMs = options.config?.retryBaseDelayMs ?? DEFAULT_RETRY_BASE_DELAY_MS;\n this.retryMaxDelayMs = options.config?.retryMaxDelayMs ?? DEFAULT_RETRY_MAX_DELAY_MS;\n this.confirmationBatchSize =\n options.config?.confirmationBatchSize ?? DEFAULT_CONFIRMATION_BATCH_SIZE;\n }\n\n /**\n * Deploy the program to the blockchain.\n *\n * @param client - RPC client\n * @param payerKeypair - Keypair that pays for transactions and becomes the program authority\n * @returns The program's public key (derived from programKeypair)\n */\n async deploy(client: RialoClient, payerKeypair: Keypair): Promise<PublicKey> {\n const programPubkey = this.programKeypair.publicKey;\n const payerPubkey = payerKeypair.publicKey;\n const loaderPubkey = PublicKey.fromString(RISCV_LOADER_PROGRAM_ID);\n\n // Get config hash prefix for replay protection\n const configHashPrefix = await client.getConfigHashPrefix();\n\n // Calculate rent-exempt balance with safety factor\n const rentExempt = await client.getMinimumBalanceForRentExemption(\n BigInt(PROGRAM_DATA_OFFSET + this.programData.length),\n );\n const bufferBalance = BigInt(Math.floor(Number(rentExempt) * BUFFER_BALANCE_FACTOR));\n\n // --- Phase 1: Create or prepare program account ---\n const validFrom = BigInt(Date.now());\n\n const existing = await client.getAccountInfo(programPubkey).catch((e: unknown) => {\n // RialoClient.getAccountInfo throws \"Account does not exist: ...\" for missing accounts.\n // Any other error (network, rate-limit, server) must propagate — not silently\n // route into the account-creation path.\n if (e instanceof Error && e.message.startsWith(\"Account does not exist\")) {\n return null;\n }\n throw e;\n });\n\n if (existing) {\n // --- Redeployment path ---\n\n // Validate owner matches RISC-V loader (same check as Rust CDK)\n if (existing.owner.toString() !== RISCV_LOADER_PROGRAM_ID) {\n throw DeploymentError.ownerMismatch(existing.owner.toString());\n }\n\n const ixs: Instruction[] = [];\n\n // Top up funds if needed\n if (existing.kelvin < bufferBalance) {\n const deficit = bufferBalance - existing.kelvin;\n ixs.push(transferInstruction(payerPubkey, programPubkey, deficit));\n }\n\n // Retract if currently executable\n if (existing.executable) {\n ixs.push(retractInstruction(programPubkey, payerPubkey));\n }\n\n // Resize (always needed for redeployment)\n ixs.push(\n setProgramLengthInstruction(\n programPubkey,\n payerPubkey,\n this.programData.length,\n payerPubkey,\n ),\n );\n\n const builder = TransactionBuilder.create()\n .setPayer(payerPubkey)\n .setValidFrom(validFrom)\n .setConfigHashPrefix(configHashPrefix);\n\n for (const ix of ixs) {\n builder.addInstruction(ix);\n }\n\n const tx = builder.build().sign(payerKeypair);\n await this.sendAndConfirm(client, tx.serialize());\n } else {\n // --- Initial deployment path ---\n const createIx = createAccount(\n payerPubkey,\n programPubkey,\n bufferBalance,\n 0n, // space=0, the loader manages sizing via SetProgramLength\n loaderPubkey,\n );\n const setLengthIx = setProgramLengthInstruction(\n programPubkey,\n payerPubkey,\n this.programData.length,\n payerPubkey,\n );\n\n const tx = TransactionBuilder.create()\n .setPayer(payerPubkey)\n .setValidFrom(validFrom)\n .setConfigHashPrefix(configHashPrefix)\n .addInstruction(createIx)\n .addInstruction(setLengthIx)\n .build()\n .signAll([payerKeypair, this.programKeypair]);\n\n await this.sendAndConfirm(client, tx.serialize());\n }\n\n // Wait for buffer account to be ready\n await this.waitForBufferReady(client, programPubkey);\n\n // --- Phase 2: Write bytecode in chunks ---\n const chunks = this.splitIntoChunks(this.programData);\n const batchSignatures: string[] = [];\n\n for (let i = 0; i < chunks.length; i++) {\n const offset = i * this.chunkSize;\n const ix = writeInstruction(programPubkey, payerPubkey, offset, chunks[i]);\n\n const chunkValidFrom = BigInt(Date.now());\n const tx = TransactionBuilder.create()\n .setPayer(payerPubkey)\n .setValidFrom(chunkValidFrom)\n .setConfigHashPrefix(configHashPrefix)\n .addInstruction(ix)\n .build()\n .sign(payerKeypair);\n\n let sig: Uint8Array;\n try {\n sig = await client.sendTransaction(tx.serialize());\n } catch (e: unknown) {\n throw this.toDeploymentError(e);\n }\n batchSignatures.push(base58.encode(sig));\n\n // Confirm batch when full or on last chunk\n const isBatchComplete = batchSignatures.length >= this.confirmationBatchSize;\n const isLastChunk = i === chunks.length - 1;\n\n if (isBatchComplete || isLastChunk) {\n await this.confirmBatch(client, batchSignatures);\n batchSignatures.length = 0;\n }\n }\n\n // --- Phase 3: Deploy ---\n const deployIx = deployInstruction(programPubkey, payerPubkey);\n const deployValidFrom = BigInt(Date.now());\n const deployTx = TransactionBuilder.create()\n .setPayer(payerPubkey)\n .setValidFrom(deployValidFrom)\n .setConfigHashPrefix(configHashPrefix)\n .addInstruction(deployIx)\n .build()\n .sign(payerKeypair);\n\n await this.sendAndConfirm(client, deployTx.serialize());\n\n return programPubkey;\n }\n\n private splitIntoChunks(data: Uint8Array): Uint8Array[] {\n const chunks: Uint8Array[] = [];\n for (let offset = 0; offset < data.length; offset += this.chunkSize) {\n chunks.push(data.subarray(offset, offset + this.chunkSize));\n }\n return chunks;\n }\n\n private async sendAndConfirm(client: RialoClient, transaction: Uint8Array): Promise<void> {\n let result;\n try {\n result = await client.sendAndConfirmTransaction(transaction, {\n confirmMaxRetries: this.maxRetries,\n confirmRetryDelayMs: this.retryBaseDelayMs,\n });\n } catch (e: unknown) {\n throw this.toDeploymentError(e);\n }\n if (!result.executed) {\n throw DeploymentError.transactionFailed(result.err ?? \"unknown error\");\n }\n }\n\n private async confirmBatch(client: RialoClient, signatures: string[]): Promise<void> {\n let results;\n try {\n results = await Promise.all(\n signatures.map(sig => client.confirmTransaction(sig, {\n maxRetries: this.maxRetries,\n retryDelayMs: this.retryBaseDelayMs,\n })),\n );\n } catch (e: unknown) {\n throw this.toDeploymentError(e);\n }\n for (const result of results) {\n if (!result.executed) {\n throw DeploymentError.transactionFailed(result.err ?? \"unknown error\", {\n signature: result.signature,\n });\n }\n }\n }\n\n private toDeploymentError(e: unknown): DeploymentError {\n if (e instanceof DeploymentError) return e;\n if (e instanceof RpcError) {\n const details = { rpcCode: e.code, retryable: e.retryable, ...e.details };\n switch (e.code) {\n case RpcErrorCode.TRANSACTION_CONFIRMATION_TIMEOUT:\n return DeploymentError.transactionTimeout(e.message, details);\n case RpcErrorCode.TRANSACTION_REJECTED:\n case RpcErrorCode.INSUFFICIENT_FUNDS:\n return DeploymentError.transactionFailed(e.message, details);\n default:\n return DeploymentError.rpcError(e.message, details);\n }\n }\n const message = e instanceof Error ? e.message : String(e);\n return DeploymentError.rpcError(message, {\n cause: e instanceof Error ? e.constructor.name : undefined,\n });\n }\n\n private async waitForBufferReady(client: RialoClient, programPubkey: PublicKey): Promise<void> {\n const expectedSize = PROGRAM_DATA_OFFSET + this.programData.length;\n\n for (let attempt = 0; attempt < this.maxRetries; attempt++) {\n try {\n const account = await client.getAccountInfo(programPubkey);\n if (\n account.owner.toString() === RISCV_LOADER_PROGRAM_ID &&\n account.space >= BigInt(expectedSize)\n ) {\n return;\n }\n } catch (e: unknown) {\n // \"Account does not exist\" is expected while waiting — keep polling.\n // Any other error (network, server) should propagate.\n if (!(e instanceof Error && e.message.startsWith(\"Account does not exist\"))) {\n throw e;\n }\n }\n\n const delay = calculateBackoff(attempt, this.retryBaseDelayMs, this.retryMaxDelayMs);\n await sleep(delay);\n }\n throw DeploymentError.bufferNotReady(this.maxRetries);\n }\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Error codes for program deployment operations.\n */\nexport enum DeploymentErrorCode {\n\t// Validation errors\n\tEMPTY_PROGRAM_DATA = \"EMPTY_PROGRAM_DATA\",\n\tINVALID_CHUNK_SIZE = \"INVALID_CHUNK_SIZE\",\n\n\t// Deployment errors\n\tOWNER_MISMATCH = \"OWNER_MISMATCH\",\n\tTRANSACTION_FAILED = \"TRANSACTION_FAILED\",\n\tTRANSACTION_TIMEOUT = \"TRANSACTION_TIMEOUT\",\n\tRPC_ERROR = \"RPC_ERROR\",\n\tBUFFER_NOT_READY = \"BUFFER_NOT_READY\",\n}\n\n/**\n * Error class for program deployment operations with structured error information.\n */\nexport class DeploymentError extends Error {\n\tconstructor(\n\t\tpublic readonly code: DeploymentErrorCode,\n\t\tmessage: string,\n\t\tpublic readonly details?: Record<string, unknown>,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"DeploymentError\";\n\t}\n\n\tstatic emptyProgramData(): DeploymentError {\n\t\treturn new DeploymentError(\n\t\t\tDeploymentErrorCode.EMPTY_PROGRAM_DATA,\n\t\t\t\"Program data must not be empty.\",\n\t\t);\n\t}\n\n\tstatic invalidChunkSize(chunkSize: number): DeploymentError {\n\t\treturn new DeploymentError(\n\t\t\tDeploymentErrorCode.INVALID_CHUNK_SIZE,\n\t\t\t`chunkSize must be greater than 0, got ${chunkSize}.`,\n\t\t\t{ chunkSize },\n\t\t);\n\t}\n\n\tstatic ownerMismatch(owner: string): DeploymentError {\n\t\treturn new DeploymentError(\n\t\t\tDeploymentErrorCode.OWNER_MISMATCH,\n\t\t\t`Existing account is not owned by RISC-V Loader (owner: ${owner}).`,\n\t\t\t{ owner },\n\t\t);\n\t}\n\n\tstatic transactionFailed(err: string, details?: Record<string, unknown>): DeploymentError {\n\t\treturn new DeploymentError(\n\t\t\tDeploymentErrorCode.TRANSACTION_FAILED,\n\t\t\t`Transaction failed: ${err}`,\n\t\t\tdetails,\n\t\t);\n\t}\n\n\tstatic transactionTimeout(message: string, details?: Record<string, unknown>): DeploymentError {\n\t\treturn new DeploymentError(\n\t\t\tDeploymentErrorCode.TRANSACTION_TIMEOUT,\n\t\t\t`Transaction confirmation timed out: ${message}`,\n\t\t\tdetails,\n\t\t);\n\t}\n\n\tstatic rpcError(message: string, details?: Record<string, unknown>): DeploymentError {\n\t\treturn new DeploymentError(\n\t\t\tDeploymentErrorCode.RPC_ERROR,\n\t\t\t`RPC error during deployment: ${message}`,\n\t\t\tdetails,\n\t\t);\n\t}\n\n\tstatic bufferNotReady(maxRetries: number): DeploymentError {\n\t\treturn new DeploymentError(\n\t\t\tDeploymentErrorCode.BUFFER_NOT_READY,\n\t\t\t`Buffer account not ready after ${maxRetries} attempts.`,\n\t\t\t{ maxRetries },\n\t\t);\n\t}\n\n\ttoJSON(): {\n\t\tcode: DeploymentErrorCode;\n\t\tmessage: string;\n\t\tdetails?: Record<string, unknown>;\n\t} {\n\t\treturn {\n\t\t\tcode: this.code,\n\t\t\tmessage: this.message,\n\t\t\tdetails: this.details,\n\t\t};\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { PublicKey } from \"../crypto\";\nimport { BincodeWriter } from \"../serialization/bincode\";\nimport type { Instruction } from \"../transaction/types\";\nimport { RISCV_LOADER_PROGRAM_ID } from \"./constants\";\n\n/**\n * RISC-V loader instruction variant indices.\n * Must match `RiscVLoaderInstruction` enum order in Rust (bincode u32 encoding).\n */\nexport enum RiscVLoaderInstruction {\n Write = 0,\n Copy = 1,\n SetProgramLength = 2,\n Deploy = 3,\n Retract = 4,\n TransferAuthority = 5,\n Finalize = 6,\n}\n\nconst LOADER_PROGRAM_ID = PublicKey.fromString(RISCV_LOADER_PROGRAM_ID);\n\n/**\n * Create a Write instruction to write bytecode into an undeployed program account.\n * Accounts: [program (writable), authority (signer)]\n */\nexport function writeInstruction(\n programAddress: PublicKey,\n authority: PublicKey,\n offset: number,\n bytes: Uint8Array,\n): Instruction {\n const writer = new BincodeWriter(4 + 4 + 8 + bytes.length);\n writer.writeVariant(RiscVLoaderInstruction.Write);\n writer.writeU32(offset);\n writer.writeVecBytes(bytes);\n\n return {\n programId: LOADER_PROGRAM_ID,\n accounts: [\n { pubkey: programAddress, isSigner: false, isWritable: true },\n { pubkey: authority, isSigner: true, isWritable: false },\n ],\n data: writer.toBytes(),\n };\n}\n\n/**\n * Create a SetProgramLength instruction to resize a program account.\n * Accounts: [program (writable), authority (signer), recipient (writable)]\n */\nexport function setProgramLengthInstruction(\n programAddress: PublicKey,\n authority: PublicKey,\n newSize: number,\n recipientAddress: PublicKey,\n): Instruction {\n const writer = new BincodeWriter(8);\n writer.writeVariant(RiscVLoaderInstruction.SetProgramLength);\n writer.writeU32(newSize);\n\n return {\n programId: LOADER_PROGRAM_ID,\n accounts: [\n { pubkey: programAddress, isSigner: false, isWritable: true },\n { pubkey: authority, isSigner: true, isWritable: false },\n { pubkey: recipientAddress, isSigner: false, isWritable: true },\n ],\n data: writer.toBytes(),\n };\n}\n\n/**\n * Create a Deploy instruction to make a program executable.\n * Accounts: [program (writable), authority (signer)]\n */\nexport function deployInstruction(programAddress: PublicKey, authority: PublicKey): Instruction {\n const writer = new BincodeWriter(4);\n writer.writeVariant(RiscVLoaderInstruction.Deploy);\n\n return {\n programId: LOADER_PROGRAM_ID,\n accounts: [\n { pubkey: programAddress, isSigner: false, isWritable: true },\n { pubkey: authority, isSigner: true, isWritable: false },\n ],\n data: writer.toBytes(),\n };\n}\n\n/**\n * Create a Retract instruction to undo deployment (enters maintenance mode).\n * Accounts: [program (writable), authority (signer)]\n */\nexport function retractInstruction(programAddress: PublicKey, authority: PublicKey): Instruction {\n const writer = new BincodeWriter(4);\n writer.writeVariant(RiscVLoaderInstruction.Retract);\n\n return {\n programId: LOADER_PROGRAM_ID,\n accounts: [\n { pubkey: programAddress, isSigner: false, isWritable: true },\n { pubkey: authority, isSigner: true, isWritable: false },\n ],\n data: writer.toBytes(),\n };\n}\n"]}