signet.js 0.0.12-beta.1 → 0.0.12-beta.2
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/browser/index.browser.cjs +2 -2
- package/browser/index.browser.cjs.map +1 -1
- package/browser/index.browser.js +2 -2
- package/browser/index.browser.js.map +1 -1
- package/node/index.node.cjs +2 -2
- package/node/index.node.cjs.map +1 -1
- package/node/index.node.js +2 -2
- package/node/index.node.js.map +1 -1
- package/package.json +1 -1
- package/types/index.d.cts +2 -1
- package/types/index.d.ts +2 -1
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
'use strict';var base=require('@scure/base'),elliptic=require('elliptic'),jsSha3=require('js-sha3'),viem=require('viem'),P=require('bitcoinjs-lib'),pt=require('coinselect'),amino=require('@cosmjs/amino'),crypto=require('@cosmjs/crypto'),encoding=require('@cosmjs/encoding'),protoSigning=require('@cosmjs/proto-signing'),stargate=require('@cosmjs/stargate'),bech32=require('bech32'),signing=require('cosmjs-types/cosmos/tx/signing/v1beta1/signing'),tx=require('cosmjs-types/cosmos/tx/v1beta1/tx'),chainRegistry=require('chain-registry'),accounts=require('@near-js/accounts'),crypto$1=require('@near-js/crypto'),keystores=require('@near-js/keystores'),Pt=require('bn.js'),transactions=require('@near-js/transactions'),nearApiJs=require('near-api-js'),providers=require('near-api-js/lib/providers');require('viem/chains');var anchor=require('@coral-xyz/anchor'),web3_js=require('@solana/web3.js');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var P__namespace=/*#__PURE__*/_interopNamespace(P);var pt__default=/*#__PURE__*/_interopDefault(pt);var Pt__default=/*#__PURE__*/_interopDefault(Pt);var Qe=Object.defineProperty;var y=(n,e)=>{for(var t in e)Qe(n,t,{get:e[t],enumerable:true});};var ke={};y(ke,{CHAINS:()=>f,CONTRACT_ADDRESSES:()=>de,ENVS:()=>h,KDF_CHAIN_IDS:()=>S,ROOT_PUBLIC_KEYS:()=>ue});var h={TESTNET_DEV:"TESTNET_DEV",TESTNET:"TESTNET",MAINNET:"MAINNET"},f={ETHEREUM:"ETHEREUM",NEAR:"NEAR",SOLANA:"SOLANA"},ue={[h.TESTNET_DEV]:"secp256k1:54hU5wcCmVUPFWLDALXMh1fFToZsVXrx9BbTbHzSfQq1Kd1rJZi52iPa4QQxo6s5TgjWqgpY8HamYuUDzG6fAaUq",[h.TESTNET]:"secp256k1:3Ww8iFjqTHufye5aRGUvrQqETegR4gVUcW8FX5xzscaN9ENhpkffojsxJwi6N1RbbHMTxYa9UyKeqK3fsMuwxjR5",[h.MAINNET]:"secp256k1:4tY4qMzusmgX5wYdG35663Y3Qar3CTbpApotwk9ZKLoF79XA4DjG8XoByaKdNHKQX9Lz5hd7iJqsWdTKyA7dKa6Z"},S={[f.ETHEREUM]:"0x1",[f.NEAR]:"0x18d",[f.SOLANA]:"0x800001f5"},de={[f.NEAR]:{[h.TESTNET_DEV]:"dev.sig-net.testnet",[h.TESTNET]:"v1.sig-net.testnet",[h.MAINNET]:"v1.sig-net.near"},[f.ETHEREUM]:{[h.TESTNET_DEV]:"0x69C6b28Fdc74618817fa380De29a653060e14009",[h.TESTNET]:"0x83458E8Bf8206131Fe5c05127007FA164c0948A2",[h.MAINNET]:"0xf8bdC0612361a1E49a8E01423d4C0cFc5dF4791A"},[f.SOLANA]:{[h.TESTNET_DEV]:"",[h.TESTNET]:"",[h.MAINNET]:""}};var Be={};y(Be,{cryptography:()=>l});var l={};y(l,{compressPubKey:()=>nt,deriveChildPublicKey:()=>at,najToUncompressedPubKeySEC1:()=>C,toRSV:()=>rt});var rt=n=>{if("big_r"in n&&typeof n.big_r=="object"&&"affine_point"in n.big_r&&"s"in n&&typeof n.s=="object"&&"scalar"in n.s)return {r:n.big_r.affine_point.substring(2),s:n.s.scalar,v:n.recovery_id+27};if("big_r"in n&&typeof n.big_r=="string"&&"s"in n&&typeof n.s=="string")return {r:n.big_r.substring(2),s:n.s,v:n.recovery_id+27};if("bigR"in n&&"x"in n.bigR&&"s"in n&&typeof n.s=="bigint")return {r:n.bigR.x.toString(16).padStart(64,"0"),s:n.s.toString(16).padStart(64,"0"),v:n.recoveryId+27};throw new Error("Invalid signature format")},nt=n=>{let e=n.slice(2);if(e.length!==128)throw new Error("Invalid uncompressed public key length");let t=e.slice(0,64),r=e.slice(64);return (parseInt(r.slice(-1),16)%2===0?"02":"03")+t},C=n=>{let e=base.base58.decode(n.split(":")[1]);return `04${Buffer.from(e).toString("hex")}`};function at(n,e,t="",r){let a=new elliptic.ec("secp256k1"),s=`sig.network v1.0.0 epsilon derivation,${r},${e},${t}`,o="";if(r===S.ETHEREUM)o=viem.keccak256(Buffer.from(s)).slice(2);else if(r===S.NEAR)o=jsSha3.sha3_256(s);else if(r===S.SOLANA)o=viem.keccak256(Buffer.from(s)).slice(2);else throw new Error("Invalid chain ID");let c=n.substring(2,66),p=n.substring(66),m=a.curve.point(c,p),u=a.g.mul(o),g=m.add(u),d=g.getX().toString("hex").padStart(64,"0"),b=g.getY().toString("hex").padStart(64,"0");return `04${d}${b}`}var R={};y(R,{ChainAdapter:()=>T,btc:()=>z,cosmos:()=>j,evm:()=>q});var T=class{};var q={};y(q,{EVM:()=>te,fetchEVMFeeProperties:()=>Q});async function Q(n,e){let[t,r]=await Promise.all([n.estimateGas(e),n.estimateFeesPerGas()]),a=r.maxFeePerGas??BigInt(1e10),i=r.maxPriorityFeePerGas??BigInt(1e10);return {gas:t,maxFeePerGas:a,maxPriorityFeePerGas:i}}var te=class extends T{constructor({publicClient:e,contract:t}){super(),this.contract=t,this.client=e;}async attachGasAndNonce(e){let t=await Q(this.client,e),r=await this.client.getTransactionCount({address:e.from}),{from:a,...i}=e;return {...t,nonce:r,chainId:Number(await this.client.getChainId()),type:"eip1559",...i}}transformRSVSignature(e){return {r:`0x${e.r}`,s:`0x${e.s}`,yParity:e.v-27}}assembleSignature(e){let{r:t,s:r,yParity:a}=this.transformRSVSignature(e);if(a===void 0)throw new Error("Missing yParity");return viem.concatHex([t,r,viem.numberToHex(a+27,{size:1})])}async deriveAddressAndPublicKey(e,t){let r=await this.contract.getDerivedPublicKey({path:t,predecessor:e});if(!r)throw new Error("Failed to get derived public key");let a=r.startsWith("04")?r.slice(2):r,i=viem.keccak256(Buffer.from(a,"hex"));return {address:viem.getAddress(`0x${i.slice(-40)}`),publicKey:r}}async getBalance(e){return {balance:await this.client.getBalance({address:e}),decimals:18}}serializeTransaction(e){return viem.serializeTransaction(e)}deserializeTransaction(e){return viem.parseTransaction(e)}async prepareTransactionForSigning(e){let t=await this.attachGasAndNonce(e),r=viem.serializeTransaction(t),a=viem.toBytes(viem.keccak256(r));return {transaction:t,hashesToSign:[Array.from(a)]}}async prepareMessageForSigning(e){return {hashToSign:Array.from(viem.toBytes(viem.hashMessage(e)))}}async prepareTypedDataForSigning(e){return {hashToSign:Array.from(viem.toBytes(viem.hashTypedData(e)))}}async prepareUserOpForSigning(e,t,r){let a=r??await this.client.getChainId(),i=t||"0x0000000071727De22E5E9d8BAf0edAc6f37da032",s=viem.encodeAbiParameters([{type:"bytes32"},{type:"address"},{type:"uint256"}],[viem.keccak256(viem.encodeAbiParameters([{type:"address"},{type:"uint256"},{type:"bytes32"},{type:"bytes32"},{type:"bytes32"},{type:"uint256"},{type:"bytes32"},{type:"bytes32"}],[e.sender,viem.hexToBigInt(e.nonce),viem.keccak256("factory"in e&&"factoryData"in e&&e.factory&&e.factoryData?viem.concat([e.factory,e.factoryData]):"initCode"in e?e.initCode:"0x"),viem.keccak256(e.callData),viem.concat([viem.pad(e.verificationGasLimit,{size:16}),viem.pad(e.callGasLimit,{size:16})]),viem.hexToBigInt(e.preVerificationGas),viem.concat([viem.pad(e.maxPriorityFeePerGas,{size:16}),viem.pad(e.maxFeePerGas,{size:16})]),viem.keccak256("paymaster"in e&&e.paymaster&&viem.isAddress(e.paymaster)?viem.concat([e.paymaster,viem.pad(e.paymasterVerificationGasLimit,{size:16}),viem.pad(e.paymasterPostOpGasLimit,{size:16}),e.paymasterData]):"paymasterAndData"in e?e.paymasterAndData:"0x")])),i,BigInt(a)]),o=viem.keccak256(s);return {userOp:e,hashToSign:Array.from(viem.toBytes(viem.hashMessage({raw:o})))}}finalizeTransactionSigning({transaction:e,rsvSignatures:t}){let r=this.transformRSVSignature(t[0]);return viem.serializeTransaction(e,r)}finalizeMessageSigning({rsvSignature:e}){return this.assembleSignature(e)}finalizeTypedDataSigning({rsvSignature:e}){return this.assembleSignature(e)}finalizeUserOpSigning({userOp:e,rsvSignature:t}){let{r,s:a,yParity:i}=this.transformRSVSignature(t);if(i===void 0)throw new Error("Missing yParity");return {...e,signature:viem.concatHex(["0x00",r,a,viem.numberToHex(Number(i+27),{size:1})])}}async broadcastTx(e){try{return await this.client.sendRawTransaction({serializedTransaction:e})}catch(t){throw console.error("Transaction broadcast failed:",t),new Error("Failed to broadcast transaction.")}}};var z={};y(z,{BTCRpcAdapter:()=>I,BTCRpcAdapters:()=>ae,Bitcoin:()=>ne});function ye(n){switch(n.toLowerCase()){case "mainnet":return P__namespace.networks.bitcoin;case "testnet":return P__namespace.networks.testnet;case "regtest":return P__namespace.networks.regtest;default:throw new Error(`Unknown Bitcoin network: ${n}`)}}var ne=class n extends T{static{this.SATOSHIS_PER_BTC=1e8;}constructor({network:e,contract:t,btcRpcAdapter:r}){super(),this.network=e,this.btcRpcAdapter=r,this.contract=t;}static toBTC(e){return e/n.SATOSHIS_PER_BTC}static toSatoshi(e){return Math.round(e*n.SATOSHIS_PER_BTC)}async fetchTransaction(e){let t=await this.btcRpcAdapter.getTransaction(e),r=new P__namespace.Transaction;return t.vout.forEach(a=>{let i=Buffer.from(a.scriptpubkey,"hex");r.addOutput(i,Number(a.value));}),r}static transformRSVSignature(e){let t=e.r.padStart(64,"0"),r=e.s.padStart(64,"0"),a=Buffer.from(t+r,"hex");if(a.length!==64)throw new Error("Invalid signature length.");return a}async createPSBT({transactionRequest:e}){let{inputs:t,outputs:r}=e.inputs&&e.outputs?e:await this.btcRpcAdapter.selectUTXOs(e.from,[{address:e.to,value:parseFloat(e.value)}]),a=new P__namespace.Psbt({network:ye(this.network)});return await Promise.all(t.map(async i=>{if(!i.scriptPubKey){let o=(await this.fetchTransaction(i.txid)).outs[i.vout];i.scriptPubKey=o.script;}a.addInput({hash:i.txid,index:i.vout,witnessUtxo:{script:i.scriptPubKey,value:i.value}});})),r.forEach(i=>{"address"in i?a.addOutput({address:i.address,value:i.value}):"script"in i?a.addOutput({script:i.script,value:i.value}):e.from!==void 0&&a.addOutput({value:Number(i.value),address:e.from});}),a}async getBalance(e){return {balance:BigInt(await this.btcRpcAdapter.getBalance(e)),decimals:8}}async deriveAddressAndPublicKey(e,t){let r=await this.contract.getDerivedPublicKey({path:t,predecessor:e});if(!r)throw new Error("Failed to get derived public key");let a=l.compressPubKey(r),i=Buffer.from(a,"hex"),s=ye(this.network),o=P__namespace.payments.p2wpkh({pubkey:i,network:s}),{address:c}=o;if(!c)throw new Error("Failed to generate Bitcoin address");return {address:c,publicKey:a}}serializeTransaction(e){return JSON.stringify({psbt:e.psbt.toHex(),publicKey:e.publicKey})}deserializeTransaction(e){let t=JSON.parse(e);return {psbt:P__namespace.Psbt.fromHex(t.psbt),publicKey:t.publicKey}}async prepareTransactionForSigning(e){let t=Buffer.from(e.publicKey,"hex"),r=await this.createPSBT({transactionRequest:e}),a=r.toHex(),i=[],s=o=>({publicKey:t,sign:c=>(i[o]=Array.from(c),Buffer.alloc(64))});for(let o=0;o<r.inputCount;o++)r.signInput(o,s(o));return {transaction:{psbt:P__namespace.Psbt.fromHex(a),publicKey:e.publicKey},hashesToSign:i}}finalizeTransactionSigning({transaction:{psbt:e,publicKey:t},rsvSignatures:r}){let a=Buffer.from(t,"hex"),i=s=>({publicKey:a,sign:()=>{let o=r[s];return n.transformRSVSignature(o)}});for(let s=0;s<e.inputCount;s++)e.signInput(s,i(s));return e.finalizeAllInputs(),e.extractTransaction().toHex()}async broadcastTx(e){return await this.btcRpcAdapter.broadcastTransaction(e)}};var I=class{};var $=class extends I{constructor(e){super(),this.providerUrl=e;}async fetchFeeRate(e=6){let r=await(await fetch(`${this.providerUrl}/v1/fees/recommended`)).json();return e<=1?r.fastestFee:e<=3?r.halfHourFee:e<=6?r.hourFee:r.economyFee}async fetchUTXOs(e){try{return await(await fetch(`${this.providerUrl}/address/${e}/utxo`)).json()}catch(t){return console.error("Failed to fetch UTXOs:",t),[]}}async selectUTXOs(e,t,r=6){let a=await this.fetchUTXOs(e),i=await this.fetchFeeRate(r),s=pt__default.default(a,t,Math.ceil(i+1));if(!s.inputs||!s.outputs)throw new Error("Invalid transaction: coinselect failed to find a suitable set of inputs and outputs. This could be due to insufficient funds, or no inputs being available that meet the criteria.");return {inputs:s.inputs,outputs:s.outputs}}async broadcastTransaction(e){let t=await fetch(`${this.providerUrl}/tx`,{method:"POST",body:e});if(t.ok)return await t.text();throw new Error(`Failed to broadcast transaction: ${await t.text()}`)}async getBalance(e){let r=await(await fetch(`${this.providerUrl}/address/${e}`)).json();return r.chain_stats.funded_txo_sum-r.chain_stats.spent_txo_sum}async getTransaction(e){return await(await fetch(`${this.providerUrl}/tx/${e}`)).json()}};var ae={Mempool:$};var j={};y(j,{Cosmos:()=>se});var He=async n=>{let e=chainRegistry.chains.find(u=>u.chain_id===n);if(!e)throw new Error(`Chain info not found for chainId: ${n}`);let{bech32_prefix:t,chain_id:r}=e,a=e.staking?.staking_tokens?.[0]?.denom,i=e.apis?.rpc?.[0]?.address,s=e.apis?.rest?.[0]?.address,o=e.fees?.fee_tokens?.[0]?.average_gas_price;if(!t||!a||!i||!s||!r||o===void 0)throw new Error(`Missing required chain information for ${e.chain_name}`);let p=chainRegistry.assets.find(u=>u.chain_name===e.chain_name)?.assets.find(u=>u.base===a),m=p?.denom_units.find(u=>u.denom===p.display)?.exponent;if(m===void 0)throw new Error(`Could not find decimals for ${a} on chain ${e.chain_name}`);return {prefix:t,denom:a,rpcUrl:i,restUrl:s,expectedChainId:r,gasPrice:o,decimals:m}};var se=class extends T{constructor({chainId:e,contract:t,endpoints:r}){super(),this.contract=t,this.registry=new protoSigning.Registry,this.chainId=e,this.endpoints=r;}transformRSVSignature(e){return new Uint8Array([...encoding.fromHex(e.r),...encoding.fromHex(e.s)])}async getChainInfo(){return {...await He(this.chainId),...this.endpoints}}async getBalance(e){try{let{restUrl:t,denom:r,decimals:a}=await this.getChainInfo(),i=await fetch(`${t}/cosmos/bank/v1beta1/balances/${e}`);if(!i.ok)throw new Error(`HTTP error! status: ${i.status}`);let c=(await i.json()).balances.find(p=>p.denom===r)?.amount??"0";return {balance:BigInt(c),decimals:a}}catch(t){throw console.error("Failed to fetch Cosmos balance:",t),new Error("Failed to fetch Cosmos balance")}}async deriveAddressAndPublicKey(e,t){let{prefix:r}=await this.getChainInfo(),a=await this.contract.getDerivedPublicKey({path:t,predecessor:e});if(!a)throw new Error("Failed to get derived public key");let i=l.compressPubKey(a),s=crypto.sha256(encoding.fromHex(i)),o=crypto.ripemd160(s);return {address:bech32.bech32.encode(r,bech32.bech32.toWords(o)),publicKey:i}}serializeTransaction(e){let t=tx.TxRaw.encode(e).finish();return encoding.toBase64(t)}deserializeTransaction(e){return tx.TxRaw.decode(encoding.fromBase64(e))}async prepareTransactionForSigning(e){let{denom:t,rpcUrl:r,gasPrice:a}=await this.getChainInfo(),i=encoding.fromHex(e.publicKey),s=e.gas||2e5,o=stargate.calculateFee(s,stargate.GasPrice.fromString(`${a}${t}`)),p=await(await stargate.StargateClient.connect(r)).getAccount(e.address);if(!p)throw new Error(`Account ${e.address} does not exist on chain`);let{accountNumber:m,sequence:u}=p,g={typeUrl:"/cosmos.tx.v1beta1.TxBody",value:{messages:e.messages,memo:e.memo||""}},d=this.registry.encode(g),b=protoSigning.encodePubkey(amino.encodeSecp256k1Pubkey(i)),_=protoSigning.makeAuthInfoBytes([{pubkey:b,sequence:u}],o.amount,Number(o.gas),void 0,void 0,signing.SignMode.SIGN_MODE_DIRECT),E=protoSigning.makeSignDoc(d,_,this.chainId,m),O=protoSigning.makeSignBytes(E),B=Array.from(crypto.sha256(O));return {transaction:tx.TxRaw.fromPartial({bodyBytes:d,authInfoBytes:_,signatures:[]}),hashesToSign:[B]}}finalizeTransactionSigning({transaction:e,rsvSignatures:t}){e.signatures=t.map(a=>this.transformRSVSignature(a));let r=tx.TxRaw.encode(e).finish();return Buffer.from(r).toString("hex")}async broadcastTx(e){try{let{rpcUrl:t}=await this.getChainInfo(),r=await stargate.StargateClient.connect(t),a=encoding.fromHex(e),i=await r.broadcastTx(a);if(i.code!==0)throw new Error(`Broadcast error: ${i.rawLog}`);return i.transactionHash}catch(t){throw console.error("Transaction broadcast failed:",t),new Error("Failed to broadcast transaction.")}}};var We={};y(We,{ChainSignatureContract:()=>w,evm:()=>Pe,near:()=>Te,solana:()=>Ke});var ge=class{},w=class extends ge{};var Te={};y(Te,{ChainSignatureContract:()=>x,utils:()=>zt});var Se={};y(Se,{keypair:()=>be});var be={};y(be,{BTCTransaction:()=>qt,CosmosTransaction:()=>$t,EVMTransaction:()=>Ot});var oe=new Pt__default.default("300000000000000"),G="dontcare";var U=async({networkId:n,accountId:e=G,keypair:t=crypto$1.KeyPair.fromRandom("ed25519")})=>{let r=new keystores.InMemoryKeyStore;await r.setKey(n,e,t);let a=accounts.Connection.fromConfig({networkId:n,provider:{type:"JsonRpcProvider",args:{url:{testnet:"https://rpc.testnet.near.org",mainnet:"https://rpc.mainnet.near.org"}[n]}},signer:{type:"InMemorySigner",keyStore:r}});return new accounts.Account(a,e)};var V=(n,e)=>{let t=Object.entries(de[e]).find(([r,a])=>a.toLowerCase()===n.toLowerCase())?.[0];if(t)return ue[t]};var fe={};y(fe,{mpcPayloadsToChainSigTransaction:()=>Nt,responseToMpcSignature:()=>le,sendTransactionUntil:()=>he});var Nt=async({networkId:n,contractId:e,hashesToSign:t,path:r})=>{let i=await new x({networkId:n,contractId:e}).getCurrentSignatureDeposit();return {receiverId:e,actions:t.map(s=>({type:"FunctionCall",params:{methodName:"sign",args:{request:{payload:Array.from(s),path:r,key_version:0}},gas:oe.div(new Pt__default.default(t.length)).toString(),deposit:i?.toString()||"1"}}))}},le=({response:n})=>{let e=providers.getTransactionLastResult(n);if(e)return l.toRSV(e)},he=async({accountId:n,keypair:e,networkId:t,receiverId:r,actions:a,nonce:i,options:s={until:"EXECUTED_OPTIMISTIC",retryCount:3,delay:5e3,nodeUrl:t==="testnet"?"https://test.rpc.fastnear.com":"https://free.rpc.fastnear.com"}})=>{let o=new keystores.InMemoryKeyStore;await o.setKey(t,n,e);let c=await nearApiJs.connect({networkId:t,keyStore:o,nodeUrl:s.nodeUrl}),{signer:p}=c.connection,m=await p.getPublicKey(n,c.connection.networkId),u=await c.connection.provider.query(`access_key/${n}/${m.toString()}`,""),g=nearApiJs.utils.serialize.base_decode(u.block_hash),d=nearApiJs.transactions.createTransaction(n,m,r,i??++u.nonce,a,g),b=nearApiJs.utils.serialize.serialize(nearApiJs.transactions.SCHEMA.Transaction,d),_=await p.signMessage(b,n,c.connection.networkId),E=new nearApiJs.transactions.SignedTransaction({transaction:d,signature:new nearApiJs.transactions.Signature({keyType:d.publicKey.keyType,data:_.signature})}),{transaction:O}=await c.connection.provider.sendTransactionUntil(E,"INCLUDED_FINAL"),B=O.hash;if(!B)throw new Error("No transaction hash found");return await viem.withRetry(async()=>{let Y=await c.connection.provider.txStatus(B,n,s.until);if(Y)return Y;throw new Error("Transaction not found")},{retryCount:s.retryCount,delay:s.delay})};var x=class extends w{constructor({networkId:e,contractId:t,accountId:r=G,keypair:a=crypto$1.KeyPair.fromRandom("ed25519"),rootPublicKey:i,sendTransactionOptions:s}){super(),this.networkId=e,this.contractId=t,this.accountId=r,this.keypair=a,this.sendTransactionOptions=s,this.rootPublicKey=i||V(this.contractId,f.NEAR);}async getContract(){let e=await U({networkId:this.networkId,accountId:this.accountId,keypair:this.keypair});return new accounts.Contract(e,this.contractId,{viewMethods:["public_key","experimental_signature_deposit","derived_public_key"],changeMethods:[],useLocalViewExecution:false})}async getCurrentSignatureDeposit(){let e=await this.getContract();return new Pt__default.default((await e.experimental_signature_deposit()).toLocaleString("fullwide",{useGrouping:false}))}async getDerivedPublicKey(e){if(this.rootPublicKey)return l.deriveChildPublicKey(await this.getPublicKey(),e.predecessor.toLowerCase(),e.path,S.NEAR);{let r=await(await this.getContract()).derived_public_key(e);return C(r)}}async getPublicKey(){if(this.rootPublicKey)return C(this.rootPublicKey);{let t=await(await this.getContract()).public_key();return C(t)}}async sign(e,t){this.requireAccount();let r=await this.getCurrentSignatureDeposit(),a=await he({accountId:this.accountId,keypair:this.keypair,networkId:this.networkId,receiverId:this.contractId,actions:[transactions.actionCreators.functionCall("sign",{request:e},BigInt(oe.toString()),BigInt(r.toString()))],nonce:t?.nonce,options:this.sendTransactionOptions}),i=le({response:a});if(!i)throw new Error("Transaction failed");return i}requireAccount(){if(this.accountId===G)throw new Error("A valid account ID and keypair are required for change methods. Please instantiate a new contract with valid credentials.")}};var Ot=async(n,e)=>{try{let t=await U({networkId:n.nearAuthentication.networkId,accountId:n.nearAuthentication.accountId,keypair:e}),r=new x({networkId:n.nearAuthentication.networkId,contractId:n.chainConfig.contract,accountId:t.accountId,keypair:e}),a=new q.EVM({publicClient:viem.createPublicClient({transport:viem.http(n.chainConfig.providerUrl)}),contract:r}),{transaction:i,hashesToSign:s}=await a.prepareTransactionForSigning(n.transaction),o=await r.sign({payload:s[0],path:n.derivationPath,key_version:0}),c=a.finalizeTransactionSigning({transaction:i,rsvSignatures:[o]});return {transactionHash:await a.broadcastTx(c),success:!0}}catch(t){return console.error(t),{success:false,errorMessage:t instanceof Error?t.message:String(t)}}},qt=async(n,e)=>{try{let t=await U({networkId:n.nearAuthentication.networkId,accountId:n.nearAuthentication.accountId,keypair:e}),r=new x({networkId:n.nearAuthentication.networkId,contractId:n.chainConfig.contract,accountId:t.accountId,keypair:e}),a=new z.Bitcoin({btcRpcAdapter:new ae.Mempool(n.chainConfig.providerUrl),contract:r,network:n.chainConfig.network}),{transaction:i,hashesToSign:s}=await a.prepareTransactionForSigning(n.transaction),o=await Promise.all(s.map(async m=>await r.sign({payload:m,path:n.derivationPath,key_version:0}))),c=a.finalizeTransactionSigning({transaction:i,rsvSignatures:o});return {transactionHash:await a.broadcastTx(c),success:!0}}catch(t){return {success:false,errorMessage:t instanceof Error?t.message:String(t)}}},$t=async(n,e)=>{try{let t=await U({networkId:n.nearAuthentication.networkId,accountId:n.nearAuthentication.accountId,keypair:e}),r=new x({networkId:n.nearAuthentication.networkId,contractId:n.chainConfig.contract,accountId:t.accountId,keypair:e}),a=new j.Cosmos({contract:r,chainId:n.chainConfig.chainId}),{transaction:i,hashesToSign:s}=await a.prepareTransactionForSigning(n.transaction),o=await Promise.all(s.map(async m=>await r.sign({payload:m,path:n.derivationPath,key_version:0}))),c=a.finalizeTransactionSigning({transaction:i,rsvSignatures:o});return {transactionHash:await a.broadcastTx(c),success:!0}}catch(t){return console.error(t),{success:false,errorMessage:t instanceof Error?t.message:String(t)}}};var zt={transaction:fe,signAndSend:Se};var Pe={};y(Pe,{ChainSignatureContract:()=>xe,utils:()=>Qt});var we={};y(we,{abi:()=>K});var K=[{inputs:[{internalType:"address",name:"_mpc_network",type:"address"},{internalType:"uint256",name:"_signatureDeposit",type:"uint256"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"AccessControlBadConfirmation",type:"error"},{inputs:[{internalType:"address",name:"account",type:"address"},{internalType:"bytes32",name:"neededRole",type:"bytes32"}],name:"AccessControlUnauthorizedAccount",type:"error"},{anonymous:false,inputs:[{indexed:true,internalType:"bytes32",name:"role",type:"bytes32"},{indexed:true,internalType:"bytes32",name:"previousAdminRole",type:"bytes32"},{indexed:true,internalType:"bytes32",name:"newAdminRole",type:"bytes32"}],name:"RoleAdminChanged",type:"event"},{anonymous:false,inputs:[{indexed:true,internalType:"bytes32",name:"role",type:"bytes32"},{indexed:true,internalType:"address",name:"account",type:"address"},{indexed:true,internalType:"address",name:"sender",type:"address"}],name:"RoleGranted",type:"event"},{anonymous:false,inputs:[{indexed:true,internalType:"bytes32",name:"role",type:"bytes32"},{indexed:true,internalType:"address",name:"account",type:"address"},{indexed:true,internalType:"address",name:"sender",type:"address"}],name:"RoleRevoked",type:"event"},{anonymous:false,inputs:[{indexed:true,internalType:"bytes32",name:"requestId",type:"bytes32"},{indexed:false,internalType:"address",name:"responder",type:"address"},{indexed:false,internalType:"string",name:"error",type:"string"}],name:"SignatureError",type:"event"},{anonymous:false,inputs:[{indexed:false,internalType:"address",name:"sender",type:"address"},{indexed:false,internalType:"bytes32",name:"payload",type:"bytes32"},{indexed:false,internalType:"uint32",name:"keyVersion",type:"uint32"},{indexed:false,internalType:"uint256",name:"deposit",type:"uint256"},{indexed:false,internalType:"uint256",name:"chainId",type:"uint256"},{indexed:false,internalType:"string",name:"path",type:"string"},{indexed:false,internalType:"string",name:"algo",type:"string"},{indexed:false,internalType:"string",name:"dest",type:"string"},{indexed:false,internalType:"string",name:"params",type:"string"}],name:"SignatureRequested",type:"event"},{anonymous:false,inputs:[{indexed:true,internalType:"bytes32",name:"requestId",type:"bytes32"},{indexed:false,internalType:"address",name:"responder",type:"address"},{components:[{components:[{internalType:"uint256",name:"x",type:"uint256"},{internalType:"uint256",name:"y",type:"uint256"}],internalType:"struct ChainSignatures.AffinePoint",name:"bigR",type:"tuple"},{internalType:"uint256",name:"s",type:"uint256"},{internalType:"uint8",name:"recoveryId",type:"uint8"}],indexed:false,internalType:"struct ChainSignatures.Signature",name:"signature",type:"tuple"}],name:"SignatureResponded",type:"event"},{anonymous:false,inputs:[{indexed:true,internalType:"address",name:"owner",type:"address"},{indexed:false,internalType:"uint256",name:"amount",type:"uint256"}],name:"Withdraw",type:"event"},{inputs:[],name:"DEFAULT_ADMIN_ROLE",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"}],name:"getRoleAdmin",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getSignatureDeposit",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"},{internalType:"address",name:"account",type:"address"}],name:"grantRole",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"},{internalType:"address",name:"account",type:"address"}],name:"hasRole",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"},{internalType:"address",name:"callerConfirmation",type:"address"}],name:"renounceRole",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"bytes32",name:"requestId",type:"bytes32"},{components:[{components:[{internalType:"uint256",name:"x",type:"uint256"},{internalType:"uint256",name:"y",type:"uint256"}],internalType:"struct ChainSignatures.AffinePoint",name:"bigR",type:"tuple"},{internalType:"uint256",name:"s",type:"uint256"},{internalType:"uint8",name:"recoveryId",type:"uint8"}],internalType:"struct ChainSignatures.Signature",name:"signature",type:"tuple"}],internalType:"struct ChainSignatures.Response[]",name:"_responses",type:"tuple[]"}],name:"respond",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"bytes32",name:"requestId",type:"bytes32"},{internalType:"string",name:"errorMessage",type:"string"}],internalType:"struct ChainSignatures.ErrorResponse[]",name:"_errors",type:"tuple[]"}],name:"respondError",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"},{internalType:"address",name:"account",type:"address"}],name:"revokeRole",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_amount",type:"uint256"}],name:"setSignatureDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"bytes32",name:"payload",type:"bytes32"},{internalType:"string",name:"path",type:"string"},{internalType:"uint32",name:"keyVersion",type:"uint32"},{internalType:"string",name:"algo",type:"string"},{internalType:"string",name:"dest",type:"string"},{internalType:"string",name:"params",type:"string"}],internalType:"struct ChainSignatures.SignRequest",name:"_request",type:"tuple"}],name:"sign",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"bytes4",name:"interfaceId",type:"bytes4"}],name:"supportsInterface",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_amount",type:"uint256"},{internalType:"address",name:"_receiver",type:"address"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"}];var Ce={};y(Ce,{ChainSignatureError:()=>D,SignatureContractError:()=>H,SignatureNotFoundError:()=>M,SigningError:()=>X});var D=class extends Error{constructor(e,t,r){super(e),this.name="ChainSignatureError",this.requestId=t,this.receipt=r;}},M=class extends D{constructor(e,t){super("Signature not found after maximum retries",e,t),this.name="SignatureNotFoundError";}},H=class extends D{constructor(e,t,r){super(`Signature error: ${e}`,t,r),this.name="SignatureContractError",this.errorCode=e;}},X=class extends D{constructor(e,t,r){super("Error signing request",e,t),this.name="SigningError",this.originalError=r;}};var ze=n=>{let e=viem.encodeAbiParameters([{type:"address"},{type:"bytes"},{type:"string"},{type:"uint32"},{type:"uint256"},{type:"string"},{type:"string"},{type:"string"}],[n.address,n.payload,n.path,Number(n.keyVersion),n.chainId,n.algo,n.dest,n.params]);return viem.keccak256(e)};var xe=class extends w{constructor(e){super(),this.publicClient=e.publicClient,this.walletClient=e.walletClient,this.contractAddress=e.contractAddress;let t=e.rootPublicKey||V(this.contractAddress,f.ETHEREUM);if(!t)throw new Error("Invalid public key, please provide a valid root public key or contract address");this.rootPublicKey=t;}async getCurrentSignatureDeposit(){let e=await this.publicClient.readContract({address:this.contractAddress,abi:K,functionName:"getSignatureDeposit"});return new Pt__default.default(e.toString())}async getDerivedPublicKey(e){return l.deriveChildPublicKey(await this.getPublicKey(),e.predecessor.toLowerCase(),e.path,S.ETHEREUM)}async getPublicKey(){return C(this.rootPublicKey)}async getLatestKeyVersion(){let e=await this.publicClient.readContract({address:this.contractAddress,abi:K,functionName:"latestKeyVersion"});return Number(e)}async createSignatureRequest(e,t={sign:{algo:"",dest:"",params:""}}){if(!this.walletClient?.account)throw new Error("Wallet client required for signing operations");let r=await this.getSignRequestParams(e,t.sign),a=this.getRequestId(e,t.sign);return {txHash:await this.walletClient.sendTransaction({...t.transaction,account:this.walletClient.account,to:r.target,data:r.data,value:r.value,chain:this.walletClient.chain}),requestId:a}}async sign(e,t={sign:{algo:"",dest:"",params:""},retry:{delay:5e3,retryCount:12}}){let{txHash:r,requestId:a}=await this.createSignatureRequest(e,t),i=await this.publicClient.waitForTransactionReceipt({hash:r});try{let s=await this.pollForRequestId({requestId:a,payload:e.payload,path:e.path,fromBlock:i.blockNumber,options:t.retry});if(!s)throw new M(a,i);if("error"in s)throw new H(s.error,a,i);return s}catch(s){throw s instanceof M||s instanceof H?s:new X(a,i,s instanceof Error?s:void 0)}}async pollForRequestId({requestId:e,payload:t,path:r,fromBlock:a,options:i}){let s=i?.delay??5e3,o=i?.retryCount??12,c=await viem.withRetry(async()=>{let p=await this.getSignatureFromEvents(e,a);if(p){let m=viem.concat([viem.padHex(`0x${p.r}`,{size:32}),viem.padHex(`0x${p.s}`,{size:32}),`0x${p.v.toString(16)}`]),u=await viem.recoverAddress({hash:new Uint8Array(t),signature:m}),g=new R.evm.EVM({publicClient:this.publicClient,contract:this}),{address:d}=await g.deriveAddressAndPublicKey(this.walletClient.account?.address,r);if(u.toLowerCase()!==d.toLowerCase())throw new Error("Signature not found yet");return p}else throw new Error("Signature not found yet")},{delay:s,retryCount:o,shouldRetry:({count:p,error:m})=>(console.log(`Retrying get signature: ${p}/${o}`),m.message==="Signature not found yet")});return c||await this.getErrorFromEvents(e,a)}async getSignRequestParams(e,t={algo:"",dest:"",params:""}){let r={payload:`0x${Buffer.from(e.payload).toString("hex")}`,path:e.path,keyVersion:e.key_version,algo:t.algo??"",dest:t.dest??"",params:t.params??""};return {target:this.contractAddress,data:viem.encodeFunctionData({abi:K,functionName:"sign",args:[r]}),value:BigInt((await this.getCurrentSignatureDeposit()).toString())}}getRequestId(e,t={algo:"",dest:"",params:""}){if(!this.walletClient.account)throw new Error("Wallet client account required to compute requestId");if(!this.publicClient.chain?.id)throw new Error("Public client chain required to compute requestId");return ze({payload:`0x${Buffer.from(e.payload).toString("hex")}`,path:e.path,keyVersion:e.key_version,algo:t.algo??"",dest:t.dest??"",params:t.params??"",address:this.walletClient.account.address,chainId:BigInt(this.publicClient.chain.id)})}async getErrorFromEvents(e,t){let r=await this.publicClient.getContractEvents({address:this.contractAddress,abi:K,eventName:"SignatureError",args:{requestId:e},fromBlock:t,toBlock:"latest"});if(r.length>0){let{args:a}=r[r.length-1];return a}}async getSignatureFromEvents(e,t){let r=await this.publicClient.getContractEvents({address:this.contractAddress,abi:K,eventName:"SignatureResponded",args:{requestId:e},fromBlock:t,toBlock:"latest"});if(r.length>0){let{args:a}=r[r.length-1];return l.toRSV(a.signature)}}};var Qt={ChainSignaturesContractABI:we,errors:Ce};var Ke={};y(Ke,{ChainSignatureContract:()=>Re,utils:()=>hr});var ve={};y(ve,{accounts:()=>rr,address:()=>Zt,default:()=>Ee,errors:()=>ar,events:()=>nr,instructions:()=>tr,metadata:()=>er,types:()=>ir});var Zt="4uvZW8K4g4jBg7dzPNbb9XDxJLFBK7V6iC76uofmYvEU",er={name:"chain_signatures_project",version:"0.1.0",spec:"0.1.0",description:"Created with Anchor"},tr=[{name:"initialize",discriminator:[175,175,109,31,13,152,155,237],accounts:[{name:"program_state",writable:true,pda:{seeds:[{kind:"const",value:[112,114,111,103,114,97,109,45,115,116,97,116,101]}]}},{name:"admin",writable:true,signer:true},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"signature_deposit",type:"u64"}]},{name:"respond",discriminator:[72,65,227,97,42,255,147,12],accounts:[{name:"responder",signer:true}],args:[{name:"request_ids",type:{vec:{array:["u8",32]}}},{name:"signatures",type:{vec:{defined:{name:"Signature"}}}}]},{name:"respond_error",discriminator:[3,170,41,132,72,184,252,69],accounts:[{name:"responder",signer:true}],args:[{name:"request_ids",type:{vec:{array:["u8",32]}}},{name:"errors",type:{vec:"string"}}]},{name:"sign",discriminator:[5,221,155,46,237,91,28,236],accounts:[{name:"program_state",writable:true,pda:{seeds:[{kind:"const",value:[112,114,111,103,114,97,109,45,115,116,97,116,101]}]}},{name:"requester",writable:true,signer:true},{name:"fee_payer",writable:true,signer:true,optional:true},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"payload",type:{array:["u8",32]}},{name:"key_version",type:"u32"},{name:"path",type:"string"},{name:"algo",type:"string"},{name:"dest",type:"string"},{name:"params",type:"string"}]},{name:"update_deposit",discriminator:[126,116,15,164,238,179,155,59],accounts:[{name:"program_state",writable:true,pda:{seeds:[{kind:"const",value:[112,114,111,103,114,97,109,45,115,116,97,116,101]}]}},{name:"admin",writable:true,signer:true,relations:["program_state"]},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"new_deposit",type:"u64"}]},{name:"withdraw_funds",discriminator:[241,36,29,111,208,31,104,217],accounts:[{name:"program_state",writable:true,pda:{seeds:[{kind:"const",value:[112,114,111,103,114,97,109,45,115,116,97,116,101]}]}},{name:"admin",writable:true,signer:true,relations:["program_state"]},{name:"recipient",docs:["function by checking it is not the zero address."],writable:true},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"amount",type:"u64"}]}],rr=[{name:"ProgramState",discriminator:[77,209,137,229,149,67,167,230]}],nr=[{name:"DepositUpdatedEvent",discriminator:[215,193,53,27,221,101,249,108]},{name:"FundsWithdrawnEvent",discriminator:[86,232,194,4,211,69,172,202]},{name:"SignatureErrorEvent",discriminator:[42,28,210,105,9,196,189,51]},{name:"SignatureRequestedEvent",discriminator:[171,129,105,91,154,49,160,34]},{name:"SignatureRespondedEvent",discriminator:[118,146,248,151,194,93,18,86]}],ar=[{code:6e3,name:"InsufficientDeposit",msg:"Insufficient deposit amount"},{code:6001,name:"InvalidInputLength",msg:"Arrays must have the same length"},{code:6002,name:"Unauthorized",msg:"Unauthorized access"},{code:6003,name:"InsufficientFunds",msg:"Insufficient funds for withdrawal"},{code:6004,name:"InvalidRecipient",msg:"Invalid recipient address"}],ir=[{name:"AffinePoint",type:{kind:"struct",fields:[{name:"x",type:{array:["u8",32]}},{name:"y",type:{array:["u8",32]}}]}},{name:"DepositUpdatedEvent",type:{kind:"struct",fields:[{name:"old_deposit",type:"u64"},{name:"new_deposit",type:"u64"}]}},{name:"FundsWithdrawnEvent",type:{kind:"struct",fields:[{name:"amount",type:"u64"},{name:"recipient",type:"pubkey"}]}},{name:"ProgramState",type:{kind:"struct",fields:[{name:"admin",type:"pubkey"},{name:"signature_deposit",type:"u64"}]}},{name:"Signature",type:{kind:"struct",fields:[{name:"big_r",type:{defined:{name:"AffinePoint"}}},{name:"s",type:{array:["u8",32]}},{name:"recovery_id",type:"u8"}]}},{name:"SignatureErrorEvent",type:{kind:"struct",fields:[{name:"request_id",type:{array:["u8",32]}},{name:"responder",type:"pubkey"},{name:"error",type:"string"}]}},{name:"SignatureRequestedEvent",type:{kind:"struct",fields:[{name:"sender",type:"pubkey"},{name:"payload",type:{array:["u8",32]}},{name:"key_version",type:"u32"},{name:"deposit",type:"u64"},{name:"chain_id",type:"u64"},{name:"path",type:"string"},{name:"algo",type:"string"},{name:"dest",type:"string"},{name:"params",type:"string"},{name:"fee_payer",type:{option:"pubkey"}}]}},{name:"SignatureRespondedEvent",type:{kind:"struct",fields:[{name:"request_id",type:{array:["u8",32]}},{name:"responder",type:"pubkey"},{name:"signature",type:{defined:{name:"Signature"}}}]}}],Ee={address:Zt,metadata:er,instructions:tr,accounts:rr,events:nr,errors:ar,types:ir};var Ie={};y(Ie,{ResponseError:()=>Ae,SignatureContractError:()=>F,SignatureNotFoundError:()=>k,SigningError:()=>W});var k=class extends Error{constructor(e,t){let r=e?`Signature not found for request ID: ${e}`:"Signature not found";super(r),this.name="SignatureNotFoundError",this.requestId=e,this.hash=t?.hash;}},F=class extends Error{constructor(e,t,r){super(e),this.name="SignatureContractError",this.requestId=t,this.hash=r?.hash;}},W=class extends Error{constructor(e,t,r){super(`Signing error for request ID: ${e}`),this.name="SigningError",this.requestId=e,this.hash=t?.hash,this.originalError=r;}},Ae=class extends Error{constructor(e){super(e),this.name="ResponseError";}};function je({address:n,payload:e,path:t,keyVersion:r,algo:a,dest:i,params:s}){let o="0x"+Buffer.from(e).toString("hex"),c=viem.encodeAbiParameters(viem.parseAbiParameters("string, bytes, string, uint32, uint256, string, string, string"),[n,o,t,r,0n,a,i,s]);return viem.keccak256(c)}var Re=class extends w{constructor(e){super(),this.provider=e.provider,this.requesterAddress=e.requesterAddress??this.provider.wallet.publicKey.toString(),this.programId=typeof e.programId=="string"?new web3_js.PublicKey(e.programId):e.programId,this.program=new anchor.Program({...Ee,address:this.programId.toString()},this.provider);let t=e.rootPublicKey||V(this.programId.toString(),f.SOLANA);if(!t)throw new Error("Invalid public key, please provide a valid root public key or program ID");this.rootPublicKey=t;}get connection(){return this.provider.connection}async getCurrentSignatureDeposit(){try{let e=await this.getProgramStatePDA(),t=await this.program.account.programState.fetch(e);return new Pt__default.default(t.signatureDeposit.toString())}catch(e){throw new Error(`Failed to get signature deposit: ${e}`)}}async getProgramStatePDA(){let[e]=web3_js.PublicKey.findProgramAddressSync([Buffer.from("program-state")],this.programId);return e}async getDerivedPublicKey(e){return l.deriveChildPublicKey(await this.getPublicKey(),e.predecessor,e.path,S.SOLANA)}async getPublicKey(){return C(this.rootPublicKey)}async getSignRequestInstruction(e,t){return this.program.methods.sign(Array.from(e.payload),e.key_version,e.path,t?.sign?.algo||"",t?.sign?.dest||"",t?.sign?.params||"").accounts({requester:this.requesterAddress,feePayer:this.provider.wallet.publicKey}).remainingAccounts(t?.remainingAccounts??[]).instruction()}async sign(e,t){let r=t?.sign?.algo??"",a=t?.sign?.dest??"",i=t?.sign?.params??"",s=t?.retry?.delay??5e3,o=t?.retry?.retryCount??12,c=this.getRequestId(e,{algo:r,dest:a,params:i}),p=this.listenForSignatureEvents({requestId:c,payload:e.payload,path:e.path,options:{delay:s,retryCount:o}}),m=await this.getSignRequestInstruction(e,{sign:{algo:r,dest:a,params:i},remainingAccounts:t?.remainingAccounts}),u=new web3_js.Transaction().add(m);u.feePayer=this.provider.wallet.publicKey;let g=await this.provider.sendAndConfirm(u);try{let d=await p;if(!d)throw new k(c,{hash:g});if("error"in d)throw new F(d.error,c,{hash:g});return d}catch(d){throw d instanceof k||d instanceof F?d:new W(c,{hash:g},d instanceof Error?d:void 0)}}async listenForSignatureEvents({requestId:e,payload:t,path:r,options:a}){let i=a?.delay??5e3,s=a?.retryCount??12,o=i*s;return new Promise((c,p)=>{let m=false,u,g,d=setTimeout(()=>{m||(this.program.removeEventListener(u),this.program.removeEventListener(g),p(new k(e)));},o);u=this.program.addEventListener("signatureRespondedEvent",b=>{if("0x"+Buffer.from(b.requestId).toString("hex")===e){let E=b.signature,O=Buffer.from(E.bigR.x).toString("hex"),B=Buffer.from(E.s).toString("hex"),Y=E.recoveryId,J={r:O,s:B,v:Y+27},Ye=viem.concat([viem.padHex(`0x${J.r}`,{size:32}),viem.padHex(`0x${J.s}`,{size:32}),`0x${J.v.toString(16)}`]);(async()=>{try{let pe=new R.evm.EVM({publicClient:viem.createPublicClient({transport:viem.http("https://dontcare.com")}),contract:this}),{address:Je}=await pe.deriveAddressAndPublicKey(this.requesterAddress,r);(await viem.recoverAddress({hash:new Uint8Array(t),signature:Ye})).toLowerCase()===Je.toLowerCase()?(m=!0,clearTimeout(d),this.program.removeEventListener(u),this.program.removeEventListener(g),c(J)):console.warn("Signature verification failed, ignoring event");}catch(pe){console.error("Error verifying signature:",pe);}})();}}),g=this.program.addEventListener("signatureErrorEvent",b=>{"0x"+Buffer.from(b.requestId).toString("hex")===e&&(m=true,clearTimeout(d),this.program.removeEventListener(u),this.program.removeEventListener(g),c({requestId:"0x"+Buffer.from(b.requestId).toString("hex"),error:b.error}));});})}getRequestId(e,t={algo:"",dest:"",params:""}){return je({payload:e.payload,path:e.path,keyVersion:e.key_version,algo:t.algo||"",dest:t.dest||"",params:t.params||"",address:this.requesterAddress})}};var hr={ChainSignaturesContractIdl:ve,errors:Ie};
|
|
2
|
-
exports.chainAdapters=
|
|
1
|
+
'use strict';var base=require('@scure/base'),elliptic=require('elliptic'),jsSha3=require('js-sha3'),viem=require('viem'),v=require('bitcoinjs-lib'),pt=require('coinselect'),amino=require('@cosmjs/amino'),crypto=require('@cosmjs/crypto'),encoding=require('@cosmjs/encoding'),protoSigning=require('@cosmjs/proto-signing'),stargate=require('@cosmjs/stargate'),bech32=require('bech32'),signing=require('cosmjs-types/cosmos/tx/signing/v1beta1/signing'),tx=require('cosmjs-types/cosmos/tx/v1beta1/tx'),chainRegistry=require('chain-registry'),accounts=require('@near-js/accounts'),crypto$1=require('@near-js/crypto'),keystores=require('@near-js/keystores'),Pt=require('bn.js'),transactions=require('@near-js/transactions'),nearApiJs=require('near-api-js'),providers=require('near-api-js/lib/providers');require('viem/chains');var anchor=require('@coral-xyz/anchor'),web3_js=require('@solana/web3.js');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}function _interopNamespace(e){if(e&&e.__esModule)return e;var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var v__namespace=/*#__PURE__*/_interopNamespace(v);var pt__default=/*#__PURE__*/_interopDefault(pt);var Pt__default=/*#__PURE__*/_interopDefault(Pt);var Ze=Object.defineProperty;var y=(n,e)=>{for(var t in e)Ze(n,t,{get:e[t],enumerable:true});};var ke={};y(ke,{CHAINS:()=>b,CONTRACT_ADDRESSES:()=>de,ENVS:()=>f,KDF_CHAIN_IDS:()=>S,ROOT_PUBLIC_KEYS:()=>ue});var f={TESTNET_DEV:"TESTNET_DEV",TESTNET:"TESTNET",MAINNET:"MAINNET"},b={ETHEREUM:"ETHEREUM",NEAR:"NEAR",SOLANA:"SOLANA"},ue={[f.TESTNET_DEV]:"secp256k1:54hU5wcCmVUPFWLDALXMh1fFToZsVXrx9BbTbHzSfQq1Kd1rJZi52iPa4QQxo6s5TgjWqgpY8HamYuUDzG6fAaUq",[f.TESTNET]:"secp256k1:3Ww8iFjqTHufye5aRGUvrQqETegR4gVUcW8FX5xzscaN9ENhpkffojsxJwi6N1RbbHMTxYa9UyKeqK3fsMuwxjR5",[f.MAINNET]:"secp256k1:4tY4qMzusmgX5wYdG35663Y3Qar3CTbpApotwk9ZKLoF79XA4DjG8XoByaKdNHKQX9Lz5hd7iJqsWdTKyA7dKa6Z"},S={[b.ETHEREUM]:"0x1",[b.NEAR]:"0x18d",[b.SOLANA]:"0x800001f5"},de={[b.NEAR]:{[f.TESTNET_DEV]:"dev.sig-net.testnet",[f.TESTNET]:"v1.sig-net.testnet",[f.MAINNET]:"v1.sig-net.near"},[b.ETHEREUM]:{[f.TESTNET_DEV]:"0x69C6b28Fdc74618817fa380De29a653060e14009",[f.TESTNET]:"0x83458E8Bf8206131Fe5c05127007FA164c0948A2",[f.MAINNET]:"0xf8bdC0612361a1E49a8E01423d4C0cFc5dF4791A"},[b.SOLANA]:{[f.TESTNET_DEV]:"BtGZEs9ZJX3hAQuY5er8iyWrGsrPRZYupEtVSS129XKo",[f.TESTNET]:"",[f.MAINNET]:""}};var Be={};y(Be,{cryptography:()=>h});var h={};y(h,{compressPubKey:()=>nt,deriveChildPublicKey:()=>at,najToUncompressedPubKeySEC1:()=>C,toRSV:()=>rt});var rt=n=>{if("big_r"in n&&typeof n.big_r=="object"&&"affine_point"in n.big_r&&"s"in n&&typeof n.s=="object"&&"scalar"in n.s)return {r:n.big_r.affine_point.substring(2),s:n.s.scalar,v:n.recovery_id+27};if("big_r"in n&&typeof n.big_r=="string"&&"s"in n&&typeof n.s=="string")return {r:n.big_r.substring(2),s:n.s,v:n.recovery_id+27};if("bigR"in n&&"x"in n.bigR&&"s"in n&&typeof n.s=="bigint")return {r:n.bigR.x.toString(16).padStart(64,"0"),s:n.s.toString(16).padStart(64,"0"),v:n.recoveryId+27};throw new Error("Invalid signature format")},nt=n=>{let e=n.slice(2);if(e.length!==128)throw new Error("Invalid uncompressed public key length");let t=e.slice(0,64),r=e.slice(64);return (parseInt(r.slice(-1),16)%2===0?"02":"03")+t},C=n=>{let e=base.base58.decode(n.split(":")[1]);return `04${Buffer.from(e).toString("hex")}`};function at(n,e,t="",r){let a=new elliptic.ec("secp256k1"),s=`sig.network v1.0.0 epsilon derivation,${r},${e},${t}`,o="";if(r===S.ETHEREUM)o=viem.keccak256(Buffer.from(s)).slice(2);else if(r===S.NEAR)o=jsSha3.sha3_256(s);else if(r===S.SOLANA)o=viem.keccak256(Buffer.from(s)).slice(2);else throw new Error("Invalid chain ID");let c=n.substring(2,66),p=n.substring(66),d=a.curve.point(c,p),m=a.g.mul(o),l=d.add(m),g=l.getX().toString("hex").padStart(64,"0"),u=l.getY().toString("hex").padStart(64,"0");return `04${g}${u}`}var K={};y(K,{ChainAdapter:()=>T,btc:()=>z,cosmos:()=>j,evm:()=>q});var T=class{};var q={};y(q,{EVM:()=>te,fetchEVMFeeProperties:()=>Z});async function Z(n,e){let[t,r]=await Promise.all([n.estimateGas(e),n.estimateFeesPerGas()]),a=r.maxFeePerGas??BigInt(1e10),i=r.maxPriorityFeePerGas??BigInt(1e10);return {gas:t,maxFeePerGas:a,maxPriorityFeePerGas:i}}var te=class extends T{constructor({publicClient:e,contract:t}){super(),this.contract=t,this.client=e;}async attachGasAndNonce(e){let t=await Z(this.client,e),r=await this.client.getTransactionCount({address:e.from}),{from:a,...i}=e;return {...t,nonce:r,chainId:Number(await this.client.getChainId()),type:"eip1559",...i}}transformRSVSignature(e){return {r:`0x${e.r}`,s:`0x${e.s}`,yParity:e.v-27}}assembleSignature(e){let{r:t,s:r,yParity:a}=this.transformRSVSignature(e);if(a===void 0)throw new Error("Missing yParity");return viem.concatHex([t,r,viem.numberToHex(a+27,{size:1})])}async deriveAddressAndPublicKey(e,t){let r=await this.contract.getDerivedPublicKey({path:t,predecessor:e});if(!r)throw new Error("Failed to get derived public key");let a=r.startsWith("04")?r.slice(2):r,i=viem.keccak256(Buffer.from(a,"hex"));return {address:viem.getAddress(`0x${i.slice(-40)}`),publicKey:r}}async getBalance(e){return {balance:await this.client.getBalance({address:e}),decimals:18}}serializeTransaction(e){return viem.serializeTransaction(e)}deserializeTransaction(e){return viem.parseTransaction(e)}async prepareTransactionForSigning(e){let t=await this.attachGasAndNonce(e),r=viem.serializeTransaction(t),a=viem.toBytes(viem.keccak256(r));return {transaction:t,hashesToSign:[Array.from(a)]}}async prepareMessageForSigning(e){return {hashToSign:Array.from(viem.toBytes(viem.hashMessage(e)))}}async prepareTypedDataForSigning(e){return {hashToSign:Array.from(viem.toBytes(viem.hashTypedData(e)))}}async prepareUserOpForSigning(e,t,r){let a=r??await this.client.getChainId(),i=t||"0x0000000071727De22E5E9d8BAf0edAc6f37da032",s=viem.encodeAbiParameters([{type:"bytes32"},{type:"address"},{type:"uint256"}],[viem.keccak256(viem.encodeAbiParameters([{type:"address"},{type:"uint256"},{type:"bytes32"},{type:"bytes32"},{type:"bytes32"},{type:"uint256"},{type:"bytes32"},{type:"bytes32"}],[e.sender,viem.hexToBigInt(e.nonce),viem.keccak256("factory"in e&&"factoryData"in e&&e.factory&&e.factoryData?viem.concat([e.factory,e.factoryData]):"initCode"in e?e.initCode:"0x"),viem.keccak256(e.callData),viem.concat([viem.pad(e.verificationGasLimit,{size:16}),viem.pad(e.callGasLimit,{size:16})]),viem.hexToBigInt(e.preVerificationGas),viem.concat([viem.pad(e.maxPriorityFeePerGas,{size:16}),viem.pad(e.maxFeePerGas,{size:16})]),viem.keccak256("paymaster"in e&&e.paymaster&&viem.isAddress(e.paymaster)?viem.concat([e.paymaster,viem.pad(e.paymasterVerificationGasLimit,{size:16}),viem.pad(e.paymasterPostOpGasLimit,{size:16}),e.paymasterData]):"paymasterAndData"in e?e.paymasterAndData:"0x")])),i,BigInt(a)]),o=viem.keccak256(s);return {userOp:e,hashToSign:Array.from(viem.toBytes(viem.hashMessage({raw:o})))}}finalizeTransactionSigning({transaction:e,rsvSignatures:t}){let r=this.transformRSVSignature(t[0]);return viem.serializeTransaction(e,r)}finalizeMessageSigning({rsvSignature:e}){return this.assembleSignature(e)}finalizeTypedDataSigning({rsvSignature:e}){return this.assembleSignature(e)}finalizeUserOpSigning({userOp:e,rsvSignature:t}){let{r,s:a,yParity:i}=this.transformRSVSignature(t);if(i===void 0)throw new Error("Missing yParity");return {...e,signature:viem.concatHex(["0x00",r,a,viem.numberToHex(Number(i+27),{size:1})])}}async broadcastTx(e){try{return await this.client.sendRawTransaction({serializedTransaction:e})}catch(t){throw console.error("Transaction broadcast failed:",t),new Error("Failed to broadcast transaction.")}}};var z={};y(z,{BTCRpcAdapter:()=>R,BTCRpcAdapters:()=>ae,Bitcoin:()=>ne});function ye(n){switch(n.toLowerCase()){case "mainnet":return v__namespace.networks.bitcoin;case "testnet":return v__namespace.networks.testnet;case "regtest":return v__namespace.networks.regtest;default:throw new Error(`Unknown Bitcoin network: ${n}`)}}var ne=class n extends T{static{this.SATOSHIS_PER_BTC=1e8;}constructor({network:e,contract:t,btcRpcAdapter:r}){super(),this.network=e,this.btcRpcAdapter=r,this.contract=t;}static toBTC(e){return e/n.SATOSHIS_PER_BTC}static toSatoshi(e){return Math.round(e*n.SATOSHIS_PER_BTC)}async fetchTransaction(e){let t=await this.btcRpcAdapter.getTransaction(e),r=new v__namespace.Transaction;return t.vout.forEach(a=>{let i=Buffer.from(a.scriptpubkey,"hex");r.addOutput(i,Number(a.value));}),r}static transformRSVSignature(e){let t=e.r.padStart(64,"0"),r=e.s.padStart(64,"0"),a=Buffer.from(t+r,"hex");if(a.length!==64)throw new Error("Invalid signature length.");return a}async createPSBT({transactionRequest:e}){let{inputs:t,outputs:r}=e.inputs&&e.outputs?e:await this.btcRpcAdapter.selectUTXOs(e.from,[{address:e.to,value:parseFloat(e.value)}]),a=new v__namespace.Psbt({network:ye(this.network)});return await Promise.all(t.map(async i=>{if(!i.scriptPubKey){let o=(await this.fetchTransaction(i.txid)).outs[i.vout];i.scriptPubKey=o.script;}a.addInput({hash:i.txid,index:i.vout,witnessUtxo:{script:i.scriptPubKey,value:i.value}});})),r.forEach(i=>{"address"in i?a.addOutput({address:i.address,value:i.value}):"script"in i?a.addOutput({script:i.script,value:i.value}):e.from!==void 0&&a.addOutput({value:Number(i.value),address:e.from});}),a}async getBalance(e){return {balance:BigInt(await this.btcRpcAdapter.getBalance(e)),decimals:8}}async deriveAddressAndPublicKey(e,t){let r=await this.contract.getDerivedPublicKey({path:t,predecessor:e});if(!r)throw new Error("Failed to get derived public key");let a=h.compressPubKey(r),i=Buffer.from(a,"hex"),s=ye(this.network),o=v__namespace.payments.p2wpkh({pubkey:i,network:s}),{address:c}=o;if(!c)throw new Error("Failed to generate Bitcoin address");return {address:c,publicKey:a}}serializeTransaction(e){return JSON.stringify({psbt:e.psbt.toHex(),publicKey:e.publicKey})}deserializeTransaction(e){let t=JSON.parse(e);return {psbt:v__namespace.Psbt.fromHex(t.psbt),publicKey:t.publicKey}}async prepareTransactionForSigning(e){let t=Buffer.from(e.publicKey,"hex"),r=await this.createPSBT({transactionRequest:e}),a=r.toHex(),i=[],s=o=>({publicKey:t,sign:c=>(i[o]=Array.from(c),Buffer.alloc(64))});for(let o=0;o<r.inputCount;o++)r.signInput(o,s(o));return {transaction:{psbt:v__namespace.Psbt.fromHex(a),publicKey:e.publicKey},hashesToSign:i}}finalizeTransactionSigning({transaction:{psbt:e,publicKey:t},rsvSignatures:r}){let a=Buffer.from(t,"hex"),i=s=>({publicKey:a,sign:()=>{let o=r[s];return n.transformRSVSignature(o)}});for(let s=0;s<e.inputCount;s++)e.signInput(s,i(s));return e.finalizeAllInputs(),e.extractTransaction().toHex()}async broadcastTx(e){return await this.btcRpcAdapter.broadcastTransaction(e)}};var R=class{};var $=class extends R{constructor(e){super(),this.providerUrl=e;}async fetchFeeRate(e=6){let r=await(await fetch(`${this.providerUrl}/v1/fees/recommended`)).json();return e<=1?r.fastestFee:e<=3?r.halfHourFee:e<=6?r.hourFee:r.economyFee}async fetchUTXOs(e){try{return await(await fetch(`${this.providerUrl}/address/${e}/utxo`)).json()}catch(t){return console.error("Failed to fetch UTXOs:",t),[]}}async selectUTXOs(e,t,r=6){let a=await this.fetchUTXOs(e),i=await this.fetchFeeRate(r),s=pt__default.default(a,t,Math.ceil(i+1));if(!s.inputs||!s.outputs)throw new Error("Invalid transaction: coinselect failed to find a suitable set of inputs and outputs. This could be due to insufficient funds, or no inputs being available that meet the criteria.");return {inputs:s.inputs,outputs:s.outputs}}async broadcastTransaction(e){let t=await fetch(`${this.providerUrl}/tx`,{method:"POST",body:e});if(t.ok)return await t.text();throw new Error(`Failed to broadcast transaction: ${await t.text()}`)}async getBalance(e){let r=await(await fetch(`${this.providerUrl}/address/${e}`)).json();return r.chain_stats.funded_txo_sum-r.chain_stats.spent_txo_sum}async getTransaction(e){return await(await fetch(`${this.providerUrl}/tx/${e}`)).json()}};var ae={Mempool:$};var j={};y(j,{Cosmos:()=>se});var He=async n=>{let e=chainRegistry.chains.find(m=>m.chain_id===n);if(!e)throw new Error(`Chain info not found for chainId: ${n}`);let{bech32_prefix:t,chain_id:r}=e,a=e.staking?.staking_tokens?.[0]?.denom,i=e.apis?.rpc?.[0]?.address,s=e.apis?.rest?.[0]?.address,o=e.fees?.fee_tokens?.[0]?.average_gas_price;if(!t||!a||!i||!s||!r||o===void 0)throw new Error(`Missing required chain information for ${e.chain_name}`);let p=chainRegistry.assets.find(m=>m.chain_name===e.chain_name)?.assets.find(m=>m.base===a),d=p?.denom_units.find(m=>m.denom===p.display)?.exponent;if(d===void 0)throw new Error(`Could not find decimals for ${a} on chain ${e.chain_name}`);return {prefix:t,denom:a,rpcUrl:i,restUrl:s,expectedChainId:r,gasPrice:o,decimals:d}};var se=class extends T{constructor({chainId:e,contract:t,endpoints:r}){super(),this.contract=t,this.registry=new protoSigning.Registry,this.chainId=e,this.endpoints=r;}transformRSVSignature(e){return new Uint8Array([...encoding.fromHex(e.r),...encoding.fromHex(e.s)])}async getChainInfo(){return {...await He(this.chainId),...this.endpoints}}async getBalance(e){try{let{restUrl:t,denom:r,decimals:a}=await this.getChainInfo(),i=await fetch(`${t}/cosmos/bank/v1beta1/balances/${e}`);if(!i.ok)throw new Error(`HTTP error! status: ${i.status}`);let c=(await i.json()).balances.find(p=>p.denom===r)?.amount??"0";return {balance:BigInt(c),decimals:a}}catch(t){throw console.error("Failed to fetch Cosmos balance:",t),new Error("Failed to fetch Cosmos balance")}}async deriveAddressAndPublicKey(e,t){let{prefix:r}=await this.getChainInfo(),a=await this.contract.getDerivedPublicKey({path:t,predecessor:e});if(!a)throw new Error("Failed to get derived public key");let i=h.compressPubKey(a),s=crypto.sha256(encoding.fromHex(i)),o=crypto.ripemd160(s);return {address:bech32.bech32.encode(r,bech32.bech32.toWords(o)),publicKey:i}}serializeTransaction(e){let t=tx.TxRaw.encode(e).finish();return encoding.toBase64(t)}deserializeTransaction(e){return tx.TxRaw.decode(encoding.fromBase64(e))}async prepareTransactionForSigning(e){let{denom:t,rpcUrl:r,gasPrice:a}=await this.getChainInfo(),i=encoding.fromHex(e.publicKey),s=e.gas||2e5,o=stargate.calculateFee(s,stargate.GasPrice.fromString(`${a}${t}`)),p=await(await stargate.StargateClient.connect(r)).getAccount(e.address);if(!p)throw new Error(`Account ${e.address} does not exist on chain`);let{accountNumber:d,sequence:m}=p,l={typeUrl:"/cosmos.tx.v1beta1.TxBody",value:{messages:e.messages,memo:e.memo||""}},g=this.registry.encode(l),u=protoSigning.encodePubkey(amino.encodeSecp256k1Pubkey(i)),P=protoSigning.makeAuthInfoBytes([{pubkey:u,sequence:m}],o.amount,Number(o.gas),void 0,void 0,signing.SignMode.SIGN_MODE_DIRECT),A=protoSigning.makeSignDoc(g,P,this.chainId,d),O=protoSigning.makeSignBytes(A),B=Array.from(crypto.sha256(O));return {transaction:tx.TxRaw.fromPartial({bodyBytes:g,authInfoBytes:P,signatures:[]}),hashesToSign:[B]}}finalizeTransactionSigning({transaction:e,rsvSignatures:t}){e.signatures=t.map(a=>this.transformRSVSignature(a));let r=tx.TxRaw.encode(e).finish();return Buffer.from(r).toString("hex")}async broadcastTx(e){try{let{rpcUrl:t}=await this.getChainInfo(),r=await stargate.StargateClient.connect(t),a=encoding.fromHex(e),i=await r.broadcastTx(a);if(i.code!==0)throw new Error(`Broadcast error: ${i.rawLog}`);return i.transactionHash}catch(t){throw console.error("Transaction broadcast failed:",t),new Error("Failed to broadcast transaction.")}}};var We={};y(We,{ChainSignatureContract:()=>w,evm:()=>Pe,near:()=>Te,solana:()=>Ke});var ge=class{},w=class extends ge{};var Te={};y(Te,{ChainSignatureContract:()=>x,utils:()=>zt});var Se={};y(Se,{keypair:()=>be});var be={};y(be,{BTCTransaction:()=>qt,CosmosTransaction:()=>$t,EVMTransaction:()=>Ot});var oe=new Pt__default.default("300000000000000"),G="dontcare";var U=async({networkId:n,accountId:e=G,keypair:t=crypto$1.KeyPair.fromRandom("ed25519")})=>{let r=new keystores.InMemoryKeyStore;await r.setKey(n,e,t);let a=accounts.Connection.fromConfig({networkId:n,provider:{type:"JsonRpcProvider",args:{url:{testnet:"https://rpc.testnet.near.org",mainnet:"https://rpc.mainnet.near.org"}[n]}},signer:{type:"InMemorySigner",keyStore:r}});return new accounts.Account(a,e)};var V=(n,e)=>{let t=Object.entries(de[e]).find(([r,a])=>a.toLowerCase()===n.toLowerCase())?.[0];if(t)return ue[t]};var fe={};y(fe,{mpcPayloadsToChainSigTransaction:()=>Nt,responseToMpcSignature:()=>le,sendTransactionUntil:()=>he});var Nt=async({networkId:n,contractId:e,hashesToSign:t,path:r})=>{let i=await new x({networkId:n,contractId:e}).getCurrentSignatureDeposit();return {receiverId:e,actions:t.map(s=>({type:"FunctionCall",params:{methodName:"sign",args:{request:{payload:Array.from(s),path:r,key_version:0}},gas:oe.div(new Pt__default.default(t.length)).toString(),deposit:i?.toString()||"1"}}))}},le=({response:n})=>{let e=providers.getTransactionLastResult(n);if(e)return h.toRSV(e)},he=async({accountId:n,keypair:e,networkId:t,receiverId:r,actions:a,nonce:i,options:s={until:"EXECUTED_OPTIMISTIC",retryCount:3,delay:5e3,nodeUrl:t==="testnet"?"https://test.rpc.fastnear.com":"https://free.rpc.fastnear.com"}})=>{let o=new keystores.InMemoryKeyStore;await o.setKey(t,n,e);let c=await nearApiJs.connect({networkId:t,keyStore:o,nodeUrl:s.nodeUrl}),{signer:p}=c.connection,d=await p.getPublicKey(n,c.connection.networkId),m=await c.connection.provider.query(`access_key/${n}/${d.toString()}`,""),l=nearApiJs.utils.serialize.base_decode(m.block_hash),g=nearApiJs.transactions.createTransaction(n,d,r,i??++m.nonce,a,l),u=nearApiJs.utils.serialize.serialize(nearApiJs.transactions.SCHEMA.Transaction,g),P=await p.signMessage(u,n,c.connection.networkId),A=new nearApiJs.transactions.SignedTransaction({transaction:g,signature:new nearApiJs.transactions.Signature({keyType:g.publicKey.keyType,data:P.signature})}),{transaction:O}=await c.connection.provider.sendTransactionUntil(A,"INCLUDED_FINAL"),B=O.hash;if(!B)throw new Error("No transaction hash found");return await viem.withRetry(async()=>{let Y=await c.connection.provider.txStatus(B,n,s.until);if(Y)return Y;throw new Error("Transaction not found")},{retryCount:s.retryCount,delay:s.delay})};var x=class extends w{constructor({networkId:e,contractId:t,accountId:r=G,keypair:a=crypto$1.KeyPair.fromRandom("ed25519"),rootPublicKey:i,sendTransactionOptions:s}){super(),this.networkId=e,this.contractId=t,this.accountId=r,this.keypair=a,this.sendTransactionOptions=s,this.rootPublicKey=i||V(this.contractId,b.NEAR);}async getContract(){let e=await U({networkId:this.networkId,accountId:this.accountId,keypair:this.keypair});return new accounts.Contract(e,this.contractId,{viewMethods:["public_key","experimental_signature_deposit","derived_public_key"],changeMethods:[],useLocalViewExecution:false})}async getCurrentSignatureDeposit(){let e=await this.getContract();return new Pt__default.default((await e.experimental_signature_deposit()).toLocaleString("fullwide",{useGrouping:false}))}async getDerivedPublicKey(e){if(this.rootPublicKey)return h.deriveChildPublicKey(await this.getPublicKey(),e.predecessor.toLowerCase(),e.path,S.NEAR);{let r=await(await this.getContract()).derived_public_key(e);return C(r)}}async getPublicKey(){if(this.rootPublicKey)return C(this.rootPublicKey);{let t=await(await this.getContract()).public_key();return C(t)}}async sign(e,t){this.requireAccount();let r=await this.getCurrentSignatureDeposit(),a=await he({accountId:this.accountId,keypair:this.keypair,networkId:this.networkId,receiverId:this.contractId,actions:[transactions.actionCreators.functionCall("sign",{request:e},BigInt(oe.toString()),BigInt(r.toString()))],nonce:t?.nonce,options:this.sendTransactionOptions}),i=le({response:a});if(!i)throw new Error("Transaction failed");return i}requireAccount(){if(this.accountId===G)throw new Error("A valid account ID and keypair are required for change methods. Please instantiate a new contract with valid credentials.")}};var Ot=async(n,e)=>{try{let t=await U({networkId:n.nearAuthentication.networkId,accountId:n.nearAuthentication.accountId,keypair:e}),r=new x({networkId:n.nearAuthentication.networkId,contractId:n.chainConfig.contract,accountId:t.accountId,keypair:e}),a=new q.EVM({publicClient:viem.createPublicClient({transport:viem.http(n.chainConfig.providerUrl)}),contract:r}),{transaction:i,hashesToSign:s}=await a.prepareTransactionForSigning(n.transaction),o=await r.sign({payload:s[0],path:n.derivationPath,key_version:0}),c=a.finalizeTransactionSigning({transaction:i,rsvSignatures:[o]});return {transactionHash:await a.broadcastTx(c),success:!0}}catch(t){return console.error(t),{success:false,errorMessage:t instanceof Error?t.message:String(t)}}},qt=async(n,e)=>{try{let t=await U({networkId:n.nearAuthentication.networkId,accountId:n.nearAuthentication.accountId,keypair:e}),r=new x({networkId:n.nearAuthentication.networkId,contractId:n.chainConfig.contract,accountId:t.accountId,keypair:e}),a=new z.Bitcoin({btcRpcAdapter:new ae.Mempool(n.chainConfig.providerUrl),contract:r,network:n.chainConfig.network}),{transaction:i,hashesToSign:s}=await a.prepareTransactionForSigning(n.transaction),o=await Promise.all(s.map(async d=>await r.sign({payload:d,path:n.derivationPath,key_version:0}))),c=a.finalizeTransactionSigning({transaction:i,rsvSignatures:o});return {transactionHash:await a.broadcastTx(c),success:!0}}catch(t){return {success:false,errorMessage:t instanceof Error?t.message:String(t)}}},$t=async(n,e)=>{try{let t=await U({networkId:n.nearAuthentication.networkId,accountId:n.nearAuthentication.accountId,keypair:e}),r=new x({networkId:n.nearAuthentication.networkId,contractId:n.chainConfig.contract,accountId:t.accountId,keypair:e}),a=new j.Cosmos({contract:r,chainId:n.chainConfig.chainId}),{transaction:i,hashesToSign:s}=await a.prepareTransactionForSigning(n.transaction),o=await Promise.all(s.map(async d=>await r.sign({payload:d,path:n.derivationPath,key_version:0}))),c=a.finalizeTransactionSigning({transaction:i,rsvSignatures:o});return {transactionHash:await a.broadcastTx(c),success:!0}}catch(t){return console.error(t),{success:false,errorMessage:t instanceof Error?t.message:String(t)}}};var zt={transaction:fe,signAndSend:Se};var Pe={};y(Pe,{ChainSignatureContract:()=>xe,utils:()=>Zt});var we={};y(we,{abi:()=>k});var k=[{inputs:[{internalType:"address",name:"_mpc_network",type:"address"},{internalType:"uint256",name:"_signatureDeposit",type:"uint256"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"AccessControlBadConfirmation",type:"error"},{inputs:[{internalType:"address",name:"account",type:"address"},{internalType:"bytes32",name:"neededRole",type:"bytes32"}],name:"AccessControlUnauthorizedAccount",type:"error"},{anonymous:false,inputs:[{indexed:true,internalType:"bytes32",name:"role",type:"bytes32"},{indexed:true,internalType:"bytes32",name:"previousAdminRole",type:"bytes32"},{indexed:true,internalType:"bytes32",name:"newAdminRole",type:"bytes32"}],name:"RoleAdminChanged",type:"event"},{anonymous:false,inputs:[{indexed:true,internalType:"bytes32",name:"role",type:"bytes32"},{indexed:true,internalType:"address",name:"account",type:"address"},{indexed:true,internalType:"address",name:"sender",type:"address"}],name:"RoleGranted",type:"event"},{anonymous:false,inputs:[{indexed:true,internalType:"bytes32",name:"role",type:"bytes32"},{indexed:true,internalType:"address",name:"account",type:"address"},{indexed:true,internalType:"address",name:"sender",type:"address"}],name:"RoleRevoked",type:"event"},{anonymous:false,inputs:[{indexed:true,internalType:"bytes32",name:"requestId",type:"bytes32"},{indexed:false,internalType:"address",name:"responder",type:"address"},{indexed:false,internalType:"string",name:"error",type:"string"}],name:"SignatureError",type:"event"},{anonymous:false,inputs:[{indexed:false,internalType:"address",name:"sender",type:"address"},{indexed:false,internalType:"bytes32",name:"payload",type:"bytes32"},{indexed:false,internalType:"uint32",name:"keyVersion",type:"uint32"},{indexed:false,internalType:"uint256",name:"deposit",type:"uint256"},{indexed:false,internalType:"uint256",name:"chainId",type:"uint256"},{indexed:false,internalType:"string",name:"path",type:"string"},{indexed:false,internalType:"string",name:"algo",type:"string"},{indexed:false,internalType:"string",name:"dest",type:"string"},{indexed:false,internalType:"string",name:"params",type:"string"}],name:"SignatureRequested",type:"event"},{anonymous:false,inputs:[{indexed:true,internalType:"bytes32",name:"requestId",type:"bytes32"},{indexed:false,internalType:"address",name:"responder",type:"address"},{components:[{components:[{internalType:"uint256",name:"x",type:"uint256"},{internalType:"uint256",name:"y",type:"uint256"}],internalType:"struct ChainSignatures.AffinePoint",name:"bigR",type:"tuple"},{internalType:"uint256",name:"s",type:"uint256"},{internalType:"uint8",name:"recoveryId",type:"uint8"}],indexed:false,internalType:"struct ChainSignatures.Signature",name:"signature",type:"tuple"}],name:"SignatureResponded",type:"event"},{anonymous:false,inputs:[{indexed:true,internalType:"address",name:"owner",type:"address"},{indexed:false,internalType:"uint256",name:"amount",type:"uint256"}],name:"Withdraw",type:"event"},{inputs:[],name:"DEFAULT_ADMIN_ROLE",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"}],name:"getRoleAdmin",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"getSignatureDeposit",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"},{internalType:"address",name:"account",type:"address"}],name:"grantRole",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"},{internalType:"address",name:"account",type:"address"}],name:"hasRole",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"},{internalType:"address",name:"callerConfirmation",type:"address"}],name:"renounceRole",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"bytes32",name:"requestId",type:"bytes32"},{components:[{components:[{internalType:"uint256",name:"x",type:"uint256"},{internalType:"uint256",name:"y",type:"uint256"}],internalType:"struct ChainSignatures.AffinePoint",name:"bigR",type:"tuple"},{internalType:"uint256",name:"s",type:"uint256"},{internalType:"uint8",name:"recoveryId",type:"uint8"}],internalType:"struct ChainSignatures.Signature",name:"signature",type:"tuple"}],internalType:"struct ChainSignatures.Response[]",name:"_responses",type:"tuple[]"}],name:"respond",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"bytes32",name:"requestId",type:"bytes32"},{internalType:"string",name:"errorMessage",type:"string"}],internalType:"struct ChainSignatures.ErrorResponse[]",name:"_errors",type:"tuple[]"}],name:"respondError",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes32",name:"role",type:"bytes32"},{internalType:"address",name:"account",type:"address"}],name:"revokeRole",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"_amount",type:"uint256"}],name:"setSignatureDeposit",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"bytes32",name:"payload",type:"bytes32"},{internalType:"string",name:"path",type:"string"},{internalType:"uint32",name:"keyVersion",type:"uint32"},{internalType:"string",name:"algo",type:"string"},{internalType:"string",name:"dest",type:"string"},{internalType:"string",name:"params",type:"string"}],internalType:"struct ChainSignatures.SignRequest",name:"_request",type:"tuple"}],name:"sign",outputs:[],stateMutability:"payable",type:"function"},{inputs:[{internalType:"bytes4",name:"interfaceId",type:"bytes4"}],name:"supportsInterface",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"_amount",type:"uint256"},{internalType:"address",name:"_receiver",type:"address"}],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"}];var Ce={};y(Ce,{ChainSignatureError:()=>D,SignatureContractError:()=>H,SignatureNotFoundError:()=>M,SigningError:()=>X});var D=class extends Error{constructor(e,t,r){super(e),this.name="ChainSignatureError",this.requestId=t,this.receipt=r;}},M=class extends D{constructor(e,t){super("Signature not found after maximum retries",e,t),this.name="SignatureNotFoundError";}},H=class extends D{constructor(e,t,r){super(`Signature error: ${e}`,t,r),this.name="SignatureContractError",this.errorCode=e;}},X=class extends D{constructor(e,t,r){super("Error signing request",e,t),this.name="SigningError",this.originalError=r;}};var ze=n=>{let e=viem.encodeAbiParameters([{type:"address"},{type:"bytes"},{type:"string"},{type:"uint32"},{type:"uint256"},{type:"string"},{type:"string"},{type:"string"}],[n.address,n.payload,n.path,Number(n.keyVersion),n.chainId,n.algo,n.dest,n.params]);return viem.keccak256(e)};var xe=class extends w{constructor(e){super(),this.publicClient=e.publicClient,this.walletClient=e.walletClient,this.contractAddress=e.contractAddress;let t=e.rootPublicKey||V(this.contractAddress,b.ETHEREUM);if(!t)throw new Error("Invalid public key, please provide a valid root public key or contract address");this.rootPublicKey=t;}async getCurrentSignatureDeposit(){let e=await this.publicClient.readContract({address:this.contractAddress,abi:k,functionName:"getSignatureDeposit"});return new Pt__default.default(e.toString())}async getDerivedPublicKey(e){return h.deriveChildPublicKey(await this.getPublicKey(),e.predecessor.toLowerCase(),e.path,S.ETHEREUM)}async getPublicKey(){return C(this.rootPublicKey)}async getLatestKeyVersion(){let e=await this.publicClient.readContract({address:this.contractAddress,abi:k,functionName:"latestKeyVersion"});return Number(e)}async createSignatureRequest(e,t={sign:{algo:"",dest:"",params:""}}){if(!this.walletClient?.account)throw new Error("Wallet client required for signing operations");let r=await this.getSignRequestParams(e,t.sign),a=this.getRequestId(e,t.sign);return {txHash:await this.walletClient.sendTransaction({...t.transaction,account:this.walletClient.account,to:r.target,data:r.data,value:r.value,chain:this.walletClient.chain}),requestId:a}}async sign(e,t={sign:{algo:"",dest:"",params:""},retry:{delay:5e3,retryCount:12}}){let{txHash:r,requestId:a}=await this.createSignatureRequest(e,t),i=await this.publicClient.waitForTransactionReceipt({hash:r});try{let s=await this.pollForRequestId({requestId:a,payload:e.payload,path:e.path,fromBlock:i.blockNumber,options:t.retry});if(!s)throw new M(a,i);if("error"in s)throw new H(s.error,a,i);return s}catch(s){throw s instanceof M||s instanceof H?s:new X(a,i,s instanceof Error?s:void 0)}}async pollForRequestId({requestId:e,payload:t,path:r,fromBlock:a,options:i}){let s=i?.delay??5e3,o=i?.retryCount??12,c=await viem.withRetry(async()=>{let p=await this.getSignatureFromEvents(e,a);if(p){let d=viem.concat([viem.padHex(`0x${p.r}`,{size:32}),viem.padHex(`0x${p.s}`,{size:32}),`0x${p.v.toString(16)}`]),m=await viem.recoverAddress({hash:new Uint8Array(t),signature:d}),l=new K.evm.EVM({publicClient:this.publicClient,contract:this}),{address:g}=await l.deriveAddressAndPublicKey(this.walletClient.account?.address,r);if(m.toLowerCase()!==g.toLowerCase())throw new Error("Signature not found yet");return p}else throw new Error("Signature not found yet")},{delay:s,retryCount:o,shouldRetry:({count:p,error:d})=>(console.log(`Retrying get signature: ${p}/${o}`),d.message==="Signature not found yet")});return c||await this.getErrorFromEvents(e,a)}async getSignRequestParams(e,t={algo:"",dest:"",params:""}){let r={payload:`0x${Buffer.from(e.payload).toString("hex")}`,path:e.path,keyVersion:e.key_version,algo:t.algo??"",dest:t.dest??"",params:t.params??""};return {target:this.contractAddress,data:viem.encodeFunctionData({abi:k,functionName:"sign",args:[r]}),value:BigInt((await this.getCurrentSignatureDeposit()).toString())}}getRequestId(e,t={algo:"",dest:"",params:""}){if(!this.walletClient.account)throw new Error("Wallet client account required to compute requestId");if(!this.publicClient.chain?.id)throw new Error("Public client chain required to compute requestId");return ze({payload:`0x${Buffer.from(e.payload).toString("hex")}`,path:e.path,keyVersion:e.key_version,algo:t.algo??"",dest:t.dest??"",params:t.params??"",address:this.walletClient.account.address,chainId:BigInt(this.publicClient.chain.id)})}async getErrorFromEvents(e,t){let r=await this.publicClient.getContractEvents({address:this.contractAddress,abi:k,eventName:"SignatureError",args:{requestId:e},fromBlock:t,toBlock:"latest"});if(r.length>0){let{args:a}=r[r.length-1];return a}}async getSignatureFromEvents(e,t){let r=await this.publicClient.getContractEvents({address:this.contractAddress,abi:k,eventName:"SignatureResponded",args:{requestId:e},fromBlock:t,toBlock:"latest"});if(r.length>0){let{args:a}=r[r.length-1];return h.toRSV(a.signature)}}};var Zt={ChainSignaturesContractABI:we,errors:Ce};var Ke={};y(Ke,{ChainSignatureContract:()=>Re,utils:()=>hr});var ve={};y(ve,{accounts:()=>rr,address:()=>Qt,default:()=>Ee,errors:()=>ar,events:()=>nr,instructions:()=>tr,metadata:()=>er,types:()=>ir});var Qt="4uvZW8K4g4jBg7dzPNbb9XDxJLFBK7V6iC76uofmYvEU",er={name:"chain_signatures_project",version:"0.1.0",spec:"0.1.0",description:"Created with Anchor"},tr=[{name:"initialize",discriminator:[175,175,109,31,13,152,155,237],accounts:[{name:"program_state",writable:true,pda:{seeds:[{kind:"const",value:[112,114,111,103,114,97,109,45,115,116,97,116,101]}]}},{name:"admin",writable:true,signer:true},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"signature_deposit",type:"u64"}]},{name:"respond",discriminator:[72,65,227,97,42,255,147,12],accounts:[{name:"responder",signer:true}],args:[{name:"request_ids",type:{vec:{array:["u8",32]}}},{name:"signatures",type:{vec:{defined:{name:"Signature"}}}}]},{name:"respond_error",discriminator:[3,170,41,132,72,184,252,69],accounts:[{name:"responder",signer:true}],args:[{name:"request_ids",type:{vec:{array:["u8",32]}}},{name:"errors",type:{vec:"string"}}]},{name:"sign",discriminator:[5,221,155,46,237,91,28,236],accounts:[{name:"program_state",writable:true,pda:{seeds:[{kind:"const",value:[112,114,111,103,114,97,109,45,115,116,97,116,101]}]}},{name:"requester",writable:true,signer:true},{name:"fee_payer",writable:true,signer:true,optional:true},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"payload",type:{array:["u8",32]}},{name:"key_version",type:"u32"},{name:"path",type:"string"},{name:"algo",type:"string"},{name:"dest",type:"string"},{name:"params",type:"string"}]},{name:"update_deposit",discriminator:[126,116,15,164,238,179,155,59],accounts:[{name:"program_state",writable:true,pda:{seeds:[{kind:"const",value:[112,114,111,103,114,97,109,45,115,116,97,116,101]}]}},{name:"admin",writable:true,signer:true,relations:["program_state"]},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"new_deposit",type:"u64"}]},{name:"withdraw_funds",discriminator:[241,36,29,111,208,31,104,217],accounts:[{name:"program_state",writable:true,pda:{seeds:[{kind:"const",value:[112,114,111,103,114,97,109,45,115,116,97,116,101]}]}},{name:"admin",writable:true,signer:true,relations:["program_state"]},{name:"recipient",docs:["function by checking it is not the zero address."],writable:true},{name:"system_program",address:"11111111111111111111111111111111"}],args:[{name:"amount",type:"u64"}]}],rr=[{name:"ProgramState",discriminator:[77,209,137,229,149,67,167,230]}],nr=[{name:"DepositUpdatedEvent",discriminator:[215,193,53,27,221,101,249,108]},{name:"FundsWithdrawnEvent",discriminator:[86,232,194,4,211,69,172,202]},{name:"SignatureErrorEvent",discriminator:[42,28,210,105,9,196,189,51]},{name:"SignatureRequestedEvent",discriminator:[171,129,105,91,154,49,160,34]},{name:"SignatureRespondedEvent",discriminator:[118,146,248,151,194,93,18,86]}],ar=[{code:6e3,name:"InsufficientDeposit",msg:"Insufficient deposit amount"},{code:6001,name:"InvalidInputLength",msg:"Arrays must have the same length"},{code:6002,name:"Unauthorized",msg:"Unauthorized access"},{code:6003,name:"InsufficientFunds",msg:"Insufficient funds for withdrawal"},{code:6004,name:"InvalidRecipient",msg:"Invalid recipient address"}],ir=[{name:"AffinePoint",type:{kind:"struct",fields:[{name:"x",type:{array:["u8",32]}},{name:"y",type:{array:["u8",32]}}]}},{name:"DepositUpdatedEvent",type:{kind:"struct",fields:[{name:"old_deposit",type:"u64"},{name:"new_deposit",type:"u64"}]}},{name:"FundsWithdrawnEvent",type:{kind:"struct",fields:[{name:"amount",type:"u64"},{name:"recipient",type:"pubkey"}]}},{name:"ProgramState",type:{kind:"struct",fields:[{name:"admin",type:"pubkey"},{name:"signature_deposit",type:"u64"}]}},{name:"Signature",type:{kind:"struct",fields:[{name:"big_r",type:{defined:{name:"AffinePoint"}}},{name:"s",type:{array:["u8",32]}},{name:"recovery_id",type:"u8"}]}},{name:"SignatureErrorEvent",type:{kind:"struct",fields:[{name:"request_id",type:{array:["u8",32]}},{name:"responder",type:"pubkey"},{name:"error",type:"string"}]}},{name:"SignatureRequestedEvent",type:{kind:"struct",fields:[{name:"sender",type:"pubkey"},{name:"payload",type:{array:["u8",32]}},{name:"key_version",type:"u32"},{name:"deposit",type:"u64"},{name:"chain_id",type:"u64"},{name:"path",type:"string"},{name:"algo",type:"string"},{name:"dest",type:"string"},{name:"params",type:"string"},{name:"fee_payer",type:{option:"pubkey"}}]}},{name:"SignatureRespondedEvent",type:{kind:"struct",fields:[{name:"request_id",type:{array:["u8",32]}},{name:"responder",type:"pubkey"},{name:"signature",type:{defined:{name:"Signature"}}}]}}],Ee={address:Qt,metadata:er,instructions:tr,accounts:rr,events:nr,errors:ar,types:ir};var Ie={};y(Ie,{ResponseError:()=>Ae,SignatureContractError:()=>F,SignatureNotFoundError:()=>_,SigningError:()=>W});var _=class extends Error{constructor(e,t){let r=e?`Signature not found for request ID: ${e}`:"Signature not found";super(r),this.name="SignatureNotFoundError",this.requestId=e,this.hash=t?.hash;}},F=class extends Error{constructor(e,t,r){super(e),this.name="SignatureContractError",this.requestId=t,this.hash=r?.hash;}},W=class extends Error{constructor(e,t,r){super(`Signing error for request ID: ${e}`),this.name="SigningError",this.requestId=e,this.hash=t?.hash,this.originalError=r;}},Ae=class extends Error{constructor(e){super(e),this.name="ResponseError";}};function je({address:n,payload:e,path:t,keyVersion:r,algo:a,dest:i,params:s}){let o="0x"+Buffer.from(e).toString("hex"),c=viem.encodeAbiParameters(viem.parseAbiParameters("string, bytes, string, uint32, uint256, string, string, string"),[n,o,t,r,0n,a,i,s]);return viem.keccak256(c)}var Re=class extends w{constructor(e){super(),this.provider=e.provider,this.requesterAddress=e.requesterAddress??this.provider.wallet.publicKey.toString(),this.programId=typeof e.programId=="string"?new web3_js.PublicKey(e.programId):e.programId,this.program=new anchor.Program({...Ee,address:this.programId.toString()},this.provider);let t=e.rootPublicKey||V(this.programId.toString(),b.SOLANA);if(!t)throw new Error("Invalid public key, please provide a valid root public key or program ID");this.rootPublicKey=t;}get connection(){return this.provider.connection}async getCurrentSignatureDeposit(){try{let e=await this.getProgramStatePDA(),t=await this.program.account.programState.fetch(e);return new Pt__default.default(t.signatureDeposit.toString())}catch(e){throw new Error(`Failed to get signature deposit: ${e}`)}}async getProgramStatePDA(){let[e]=web3_js.PublicKey.findProgramAddressSync([Buffer.from("program-state")],this.programId);return e}async getDerivedPublicKey(e){return h.deriveChildPublicKey(await this.getPublicKey(),e.predecessor,e.path,S.SOLANA)}async getPublicKey(){return C(this.rootPublicKey)}async getSignRequestInstruction(e,t){return this.program.methods.sign(Array.from(e.payload),e.key_version,e.path,t?.sign?.algo||"",t?.sign?.dest||"",t?.sign?.params||"").accounts({requester:this.requesterAddress,feePayer:this.provider.wallet.publicKey}).remainingAccounts(t?.remainingAccounts??[]).instruction()}async sign(e,t){let r=t?.sign?.algo??"",a=t?.sign?.dest??"",i=t?.sign?.params??"",s=t?.retry?.delay??5e3,o=t?.retry?.retryCount??12;if(t?.remainingAccounts?.filter(u=>u.isSigner)?.some(u=>!t?.remainingSigners?.some(P=>P.publicKey.equals(u.pubkey))))throw new Error("All accounts marked as signers must have a corresponding signer");let p=this.getRequestId(e,{algo:r,dest:a,params:i}),d=this.listenForSignatureEvents({requestId:p,payload:e.payload,path:e.path,options:{delay:s,retryCount:o}}),m=await this.getSignRequestInstruction(e,{sign:{algo:r,dest:a,params:i},remainingAccounts:t?.remainingAccounts}),l=new web3_js.Transaction().add(m);l.feePayer=this.provider.wallet.publicKey;let g=await this.provider.sendAndConfirm(l,t?.remainingSigners);try{let u=await d;if(!u)throw new _(p,{hash:g});if("error"in u)throw new F(u.error,p,{hash:g});return u}catch(u){throw u instanceof _||u instanceof F?u:new W(p,{hash:g},u instanceof Error?u:void 0)}}async listenForSignatureEvents({requestId:e,payload:t,path:r,options:a}){let i=a?.delay??5e3,s=a?.retryCount??12,o=i*s;return new Promise((c,p)=>{let d=false,m,l,g=setTimeout(()=>{d||(this.program.removeEventListener(m),this.program.removeEventListener(l),p(new _(e)));},o);m=this.program.addEventListener("signatureRespondedEvent",u=>{if("0x"+Buffer.from(u.requestId).toString("hex")===e){let A=u.signature,O=Buffer.from(A.bigR.x).toString("hex"),B=Buffer.from(A.s).toString("hex"),Y=A.recoveryId,J={r:O,s:B,v:Y+27},Ye=viem.concat([viem.padHex(`0x${J.r}`,{size:32}),viem.padHex(`0x${J.s}`,{size:32}),`0x${J.v.toString(16)}`]);(async()=>{try{let pe=new K.evm.EVM({publicClient:viem.createPublicClient({transport:viem.http("https://dontcare.com")}),contract:this}),{address:Je}=await pe.deriveAddressAndPublicKey(this.requesterAddress,r);(await viem.recoverAddress({hash:new Uint8Array(t),signature:Ye})).toLowerCase()===Je.toLowerCase()?(d=!0,clearTimeout(g),this.program.removeEventListener(m),this.program.removeEventListener(l),c(J)):console.warn("Signature verification failed, ignoring event");}catch(pe){console.error("Error verifying signature:",pe);}})();}}),l=this.program.addEventListener("signatureErrorEvent",u=>{"0x"+Buffer.from(u.requestId).toString("hex")===e&&(d=true,clearTimeout(g),this.program.removeEventListener(m),this.program.removeEventListener(l),c({requestId:"0x"+Buffer.from(u.requestId).toString("hex"),error:u.error}));});})}getRequestId(e,t={algo:"",dest:"",params:""}){return je({payload:e.payload,path:e.path,keyVersion:e.key_version,algo:t.algo||"",dest:t.dest||"",params:t.params||"",address:this.requesterAddress})}};var hr={ChainSignaturesContractIdl:ve,errors:Ie};
|
|
2
|
+
exports.chainAdapters=K;exports.constants=ke;exports.contracts=We;exports.utils=Be;//# sourceMappingURL=index.browser.cjs.map
|
|
3
3
|
//# sourceMappingURL=index.browser.cjs.map
|