@swapkit/wallet-hardware 4.9.12 → 4.9.13
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/ledger/index.cjs +2 -2
- package/dist/ledger/index.cjs.map +3 -3
- package/dist/ledger/index.js +2 -2
- package/dist/ledger/index.js.map +3 -3
- package/dist/types/keepkey/index.d.ts +1 -1
- package/dist/types/ledger/clients/evm.d.ts +1 -0
- package/dist/types/ledger/clients/evm.d.ts.map +1 -1
- package/dist/types/ledger/index.d.ts +1 -1
- package/dist/types/trezor/index.d.ts +1 -1
- package/package.json +4 -4
- package/src/ledger/clients/evm.ts +19 -7
package/dist/ledger/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{c as C}from"../chunk-3yr76n9s.js";import{d as Z}from"../chunk-n05bv2n5.js";import{Chain as B,derivationPathToString as y0,FeeOption as BL,filterSupportedChains as pL,getRPCUrl as aL,NetworkDerivationPath as tL,SwapKitError as x,WalletOption as Q0}from"@swapkit/helpers";import{addInputsAndOutputs as eL,assertDerivationIndex as NL,compileMemo as rL,createHDWalletHelpers as sL,getNetworkForChain as XL,getUTXOAccountIndexFromPath as Y0,getUTXOAccountPath as q0,getUTXOAddressPath as Ly,getUtxoApi as yy}from"@swapkit/toolboxes/utxo";import{createWallet as _y,getWalletSupportedChains as Ry}from"@swapkit/wallet-core";import{Chain as Y,SwapKitError as jL,WalletOption as ML}from"@swapkit/helpers";var P=async({chain:L,ledgerClient:y})=>{if(!y)return"";switch(L){case Y.Cosmos:case Y.THORChain:return y.connect();case Y.Ethereum:case Y.BinanceSmartChain:case Y.Avalanche:case Y.Polygon:case Y.Arbitrum:case Y.Berachain:case Y.Optimism:case Y.Base:case Y.Aurora:case Y.Gnosis:case Y.Monad:case Y.XLayer:return y.getAddress();case Y.Bitcoin:case Y.BitcoinCash:case Y.Dash:case Y.Dogecoin:case Y.Litecoin:case Y.Zcash:{let _=y;await _.connect();let w=await _.getAddress();return L===Y.BitcoinCash?w.replace("bitcoincash:",""):w}case Y.Near:return await y.getAddress();case Y.Ripple:return y.getAddress();case Y.Tron:return y.getAddress();case Y.Sui:return y.connect();default:throw new jL("wallet_chain_not_supported",{chain:L,wallet:ML.LEDGER})}};import{Chain as J,SwapKitError as oL,WalletOption as nL}from"@swapkit/helpers";import{derivationPathToString as DL,NetworkDerivationPath as HL,SwapKitError as A0}from"@swapkit/helpers";import{LedgerErrorCode as F0,NetworkDerivationPath as qL,SwapKitError as W0}from"@swapkit/helpers";import{SwapKitError as V0}from"@swapkit/helpers";var g=85,N0=250;var l={GET_ADDR_SECP256K1:4,GET_VERSION:0,INS_PUBLIC_KEY_SECP256K1:1,SIGN_SECP256K1:2},e={ADD:1,INIT:0,LAST:2},X0={ONLY_RETRIEVE:0,SHOW_ADDRESS_IN_DEVICE:1},c={JSON:0},E={NoError:36864},U0={1:"U2F: Unknown",2:"U2F: Bad request",3:"U2F: Configuration unsupported",4:"U2F: Device Ineligible",5:"U2F: Timeout",14:"Timeout",25600:"Execution Error",26368:"Wrong Length",26626:"Error deriving keys",27010:"Empty Buffer",27011:"Output buffer too small",27012:"Data is invalid",27013:"Conditions not satisfied",27014:"Transaction rejected",27264:"Bad key handle",27392:"Invalid P1/P2",27904:"Instruction not supported",28160:"App does not seem to be open",28416:"Unknown error",28417:"Sign/verify error",36864:"No errors",36865:"Device is busy"};function A(L){if(L in U0)return U0[L];return`Unknown Status Code: ${L}`}function QL(L){return typeof L==="object"&&L!==null&&!Array.isArray(L)&&!(L instanceof Date)}function m(L){if(L){if(QL(L)){if(Object.hasOwn(L,"statusCode"))return{error_message:A(L.statusCode),return_code:L.statusCode};if(Object.hasOwn(L,"return_code")&&Object.hasOwn(L,"error_message"))return L}return{error_message:L.toString(),return_code:65535}}return{error_message:L.toString(),return_code:65535}}function O0(L){return L.send(85,l.GET_VERSION,0,0).then((y)=>{let _=y.slice(-2),w=_[0]*256+_[1],R=0;if(y.length>=9)R=(y[5]<<24)+(y[6]<<16)+(y[7]<<8)+(y[8]<<0);return{device_locked:y[4]===1,error_message:A(w),major:y[1],minor:y[2],patch:y[3],return_code:w,target_id:R.toString(16),test_mode:y[0]!==0}},m)}import{SwapKitError as r}from"@swapkit/helpers";function z0(L){if(L==null||L.length<3)throw new r("wallet_ledger_invalid_params",{reason:"Path too short"});if(L.length>10)throw new r("wallet_ledger_invalid_params",{reason:"Path too long"});let y=Buffer.alloc(1+4*L.length);y.writeUInt8(L.length,0);for(let _=0;_<L.length;_+=1){let w=L[_]||0;if(_<3)w|=2147483648;y.writeInt32LE(w,1+_*4)}return y}function T0(L,y,_,w,R=c.JSON){return L.transport.send(g,l.SIGN_SECP256K1,y,R,w,[E.NoError,27012,27264]).then((G)=>{let N=G.slice(-2),X=N[0]*256+N[1],O=A(X);if(X===27264||X===27012)O=`${O} : ${G.slice(0,G.length-2).toString("ascii")}`;let W=null;if(G.length>2)W=G.slice(0,G.length-2);return{error_message:O,return_code:X,signature:W}},m)}function YL(L){if(L.length!==65)throw new r("wallet_ledger_invalid_params",{reason:"decompressed public key length should be 65 bytes"});let y=L.slice(33,65),_=Buffer.from([2+(y[y.length-1]&1)]);return Buffer.concat([_,L.slice(1,33)])}function k0(L,y){return L.transport.send(g,l.INS_PUBLIC_KEY_SECP256K1,0,0,y,[E.NoError]).then((_)=>{let w=_.slice(-2),R=w[0]*256+w[1],G=Buffer.from(_.slice(0,65));return{compressed_pk:YL(G),error_message:A(R),pk:G,return_code:R}},m)}function m0(L){if(!L||L.length!==5)throw new r("wallet_ledger_invalid_params",{reason:"Path must be exactly 5 elements"});let y=Buffer.alloc(20);return y.writeUInt32LE(2147483648+L[0],0),y.writeUInt32LE(2147483648+L[1],4),y.writeUInt32LE(2147483648+L[2],8),y.writeUInt32LE(L[3],12),y.writeUInt32LE(L[4],16),y}function K0(L,y,_,w,R=c.JSON){let G=e.ADD;if(y===1)G=e.INIT;if(y===_)G=e.LAST;return T0(L,G,0,w,R)}function S0(L,y){return L.transport.send(g,l.GET_ADDR_SECP256K1,0,0,y,[E.NoError]).then((_)=>{let w=_.slice(-2),R=w[0]*256+w[1];return{compressed_pk:Buffer.from(_.slice(0,33)),error_message:A(R),pk:"OBSOLETE PROPERTY",return_code:R}},m)}class d{transport;versionResponse;constructor(L){if(!L)throw new V0("wallet_ledger_transport_not_defined");this.transport=L}static serializeHRP(L){if(L==null||L.length<3||L.length>83)throw new V0("wallet_ledger_invalid_params",{reason:"Invalid HRP"});let y=Buffer.alloc(1+L.length);return y.writeUInt8(L.length,0),y.write(L,1),y}async serializePath(L){if(this.versionResponse=await O0(this.transport),this.versionResponse.return_code!==E.NoError)throw this.versionResponse;switch(this.versionResponse.major){case 1:return z0(L);case 2:return m0(L);default:return Buffer.alloc(0)}}async signGetChunks(L,y){let _=await this.serializePath(L),w=[];w.push(_);for(let R=0;R<y.length;R+=N0){let G=R+N0;if(R>y.length)G=y.length;w.push(y.slice(R,G))}return w}async getVersion(){try{return this.versionResponse=await O0(this.transport),this.versionResponse}catch(L){return m(L)}}appInfo(){return this.transport.send(176,1,0,0).then((L)=>{let y=L.readUInt16BE(L.length-2),_="",w="",R=0,G=0;if(L[0]!==1)return{error_message:"response format ID not recognized",return_code:36865};let N=L[1];_=L.slice(2,2+N).toString("ascii");let X=2+N,O=L[X];X+=1,w=L.slice(X,X+O).toString("ascii"),X+=O;let W=L[X];return X+=1,R=W,G=L[X],{appName:_,appVersion:w,error_message:A(y),flag_onboarded:(G&4)!==0,flag_pin_validated:(G&128)!==0,flag_recovery:(G&1)!==0,flag_signed_mcu_code:(G&2)!==0,flagLen:R,flagsValue:G,return_code:y}},m)}deviceInfo(){return this.transport.send(224,1,0,0,Buffer.from([]),[E.NoError,28160]).then((L)=>{let y=L.slice(-2),_=y[0]*256+y[1];if(_===28160)return{error_message:"This command is only available in the Dashboard",return_code:_};let w=L.slice(0,4).toString("hex"),R=4,G=L[R];R+=1;let N=L.slice(R,R+G).toString();R+=G;let X=L[R];R+=1;let O=L.slice(R,R+X).toString("hex");R+=X;let W=L[R];R+=1;let T=L.slice(R,R+W);if(T[W-1]===0)T=L.slice(R,R+W-1);let F=T.toString();return{error_message:A(_),flag:O,mcuVersion:F,return_code:_,seVersion:N,targetId:w}},m)}async publicKey(L){try{let y=await this.serializePath(L);switch(this.versionResponse.major){case 1:return k0(this,y);case 2:{let _=Buffer.concat([d.serializeHRP("thor"),y]);return S0(this,_)}default:return{error_message:"App Version is not supported",return_code:25600}}}catch(y){return m(y)}}async getAddressAndPubKey(L,y,_=!1){try{let w=await this.serializePath(L),R=Buffer.concat([d.serializeHRP(y),w]),G=await this.transport.send(g,l.GET_ADDR_SECP256K1,_?X0.SHOW_ADDRESS_IN_DEVICE:X0.ONLY_RETRIEVE,0,R,[E.NoError]),N=Buffer.from(G.slice(0,33)),X=Buffer.from(G.slice(33,-2)).toString(),O=G.readUInt16BE(G.length-2);return{bech32_address:X,compressed_pk:N,error_message:A(O),return_code:O}}catch(w){return m(w)}}showAddressAndPubKey(L,y){return this.getAddressAndPubKey(L,y,!0)}signSendChunk(L,y,_,w=c.JSON){switch(this.versionResponse.major){case 1:return T0(this,L,y,_,w);case 2:return K0(this,L,y,_,w);default:return{error_message:"App Version is not supported",return_code:25600}}}async sign(L,y,_=c.JSON){let w=Buffer.from(y),R=[],G;try{R=await this.signGetChunks(L,w),G=await this.signSendChunk(1,R.length,R[0],_)}catch(X){m(X)}let N={error_message:G.error_message,return_code:G.return_code,signature:null};for(let X=1;X<R.length;X+=1)if(N=await this.signSendChunk(1+X,R.length,R[X],_),N.return_code!==E.NoError)break;return{error_message:N.error_message,return_code:N.return_code,signature:N.signature}}}class u{ledgerTimeout=50000;derivationPath=qL.GAIA;transport;ledgerApp;chain="thor";injectedTransport;constructor(L){if(this.injectedTransport=L,L)this.transport=L}checkOrCreateTransportAndLedger=async(L=!1)=>{if(!L&&this.transport&&this.ledgerApp)return;try{if(!this.transport||L&&!this.injectedTransport)this.transport=this.injectedTransport??await C();switch(this.chain){case"thor":{this.ledgerApp=L||!this.ledgerApp?new d(this.transport):this.ledgerApp;break}case"cosmos":{let _=(await import("@ledgerhq/hw-app-cosmos")).default;this.ledgerApp=L||!this.ledgerApp?new _(this.transport):this.ledgerApp}}return this.ledgerApp}catch(y){throw new W0("wallet_ledger_connection_error",y)}};validateResponse=(L,y)=>{switch(L){case F0.NoError:return;case F0.LockedDevice:throw new W0("wallet_ledger_device_locked",{message:`Ledger is locked: ${y}`});case F0.TC_NotFound:throw new W0("wallet_ledger_device_not_found");default:break}}}class J0 extends u{pubKey=null;derivationPath;constructor(L=HL.GAIA,y){super(y);this.chain="cosmos",this.derivationPath=DL(L)}connect=async()=>{await this.checkOrCreateTransportAndLedger(!0);let{publicKey:L,address:y}=await this.getAddressAndPubKey();return this.pubKey=Buffer.from(L,"hex").toString("base64"),y};getAddressAndPubKey=async()=>{return await this.checkOrCreateTransportAndLedger(!0),await this.ledgerApp.getAddress(this.derivationPath,this.chain)};signTransaction=async(L,y="0")=>{await this.checkOrCreateTransportAndLedger(!0);let{return_code:_,error_message:w,signature:R}=await this.ledgerApp.sign(this.derivationPath,L);if(!this.pubKey)throw new A0("wallet_ledger_pubkey_not_found");return this.validateResponse(_,w),[{pub_key:{type:"tendermint/PubKeySecp256k1",value:this.pubKey},sequence:y,signature:R}]};signAmino=async(L,y)=>{await this.checkOrCreateTransportAndLedger(!0);let _=await this.getAccounts();if(_.findIndex((M)=>M.address===L)===-1)throw new A0("wallet_ledger_address_not_found",{address:L});let R=await import("@cosmjs/amino"),G=R.encodeSecp256k1Signature??R.default?.encodeSecp256k1Signature,N=R.serializeSignDoc??R.default?.serializeSignDoc,X=await import("@cosmjs/crypto"),O=X.Secp256k1Signature??X.default?.Secp256k1Signature,W=N(y),T=await this.ledgerApp.sign(this.derivationPath,W);this.validateResponse(T.return_code,T.error_message);let F=O.fromDer(T.signature).toFixedLength();return{signature:G(_[0].pubkey,F),signed:y}};getAccounts=async()=>{await this.checkOrCreateTransportAndLedger(!0);let L=await this.getAddressAndPubKey();return[{address:L.address,algo:"secp256k1",pubkey:Buffer.from(L.publicKey,"hex")}]}}import{ChainId as U,derivationPathToString as fL,NetworkDerivationPath as CL,SwapKitError as i}from"@swapkit/helpers";import{AbstractSigner as UL}from"ethers";class z extends UL{chainId=U.Ethereum;derivationPath="";ledgerApp=null;ledgerTimeout=50000;injectedTransport;constructor({provider:L,derivationPath:y=CL.OP,chainId:_=U.Optimism,transport:w}){super(L);this.chainId=_||U.Ethereum,this.derivationPath=typeof y==="string"?y:fL(y),this.injectedTransport=w,Object.defineProperty(this,"provider",{enumerable:!0,value:L||null,writable:!1})}connect=(L)=>new z({chainId:this.chainId,derivationPath:this.derivationPath,provider:L,transport:this.injectedTransport});checkOrCreateTransportAndLedger=async()=>{if(this.ledgerApp)return;await this.createTransportAndLedger()};createTransportAndLedger=async()=>{let L=this.injectedTransport??await C(),y=(await import("@ledgerhq/hw-app-eth")).default;this.ledgerApp=new y(L)};getAddress=async()=>{let L=await this.getAddressAndPubKey();if(!L)throw new i("wallet_ledger_failed_to_get_address");return L.address};getAddressAndPubKey=async()=>{return await this.createTransportAndLedger(),this.ledgerApp?.getAddress(this.derivationPath)};showAddressAndPubKey=async()=>{return await this.createTransportAndLedger(),this.ledgerApp?.getAddress(this.derivationPath,!0)};signMessage=async(L)=>{let{Signature:y}=await import("ethers");await this.createTransportAndLedger();let _=await this.ledgerApp?.signPersonalMessage(this.derivationPath,L);if(!_)throw new i("wallet_ledger_signing_error");return _.r=`0x${_.r}`,_.s=`0x${_.s}`,y.from(_).serialized};sendTransaction=async(L)=>{if(!this.provider)throw new i("wallet_ledger_no_provider");let y=await this.signTransaction(L);return await this.provider.broadcastTransaction(y)};signTypedData=async(L,y,_,w)=>{let{buildEIP712DomainType:R}=await import("@swapkit/toolboxes/evm"),{Signature:G,TypedDataEncoder:N}=await import("ethers");await this.createTransportAndLedger();let{EIP712Domain:X,...O}=y,W=w??N.from(O).primaryType,T;try{T=await this.ledgerApp?.signEIP712Message(this.derivationPath,{domain:L,message:_,primaryType:W,types:{EIP712Domain:R(L),...O}})}catch(F){let M=F instanceof Error&&"statusCode"in F;if(!M||M&&F.statusCode===27013)throw F;let q=N.hashDomain(L).slice(2),f=N.from(O).hash(_).slice(2);T=await this.ledgerApp?.signEIP712HashedMessage(this.derivationPath,q,f)}if(!T)throw new i("wallet_ledger_signing_error");return T.r=`0x${T.r}`,T.s=`0x${T.s}`,G.from(T).serialized};signTransaction=async(L)=>{let{Transaction:y}=await import("ethers");await this.createTransportAndLedger();let _=await this.provider?.getTransactionCount(L.from||await this.getAddress()),w={chainId:L.chainId||this.chainId,data:L.data,gasLimit:L.gasLimit,...L.gasPrice&&{gasPrice:L.gasPrice},...!L.gasPrice&&L.maxFeePerGas&&{maxFeePerGas:L.maxFeePerGas,maxPriorityFeePerGas:L.maxPriorityFeePerGas},nonce:L.nonce!==void 0?Number((L.nonce||_||0).toString()):_,to:L.to?.toString(),type:L.type&&!Number.isNaN(L.type)?L.type:L.maxFeePerGas?2:0,value:L.value},R=y.from(w).unsignedSerialized.slice(2),{ledgerService:G}=await import("@ledgerhq/hw-app-eth"),N=await G.resolveTransaction(R,{},{erc20:!0,externalPlugins:!0}),X=await this.ledgerApp?.signTransaction(this.derivationPath,R,N);if(!X)throw new i("wallet_ledger_signing_error");let{r:O,s:W,v:T}=X;return y.from({...w,signature:{r:`0x${O}`,s:`0x${W}`,v:Number(BigInt(T))}}).serialized}}var P0=(L)=>new z({...L,chainId:U.Arbitrum}),E0=(L)=>new z({...L,chainId:U.Aurora}),I0=(L)=>new z({...L,chainId:U.Avalanche}),v0=(L)=>new z({...L,chainId:U.Base}),b0=(L)=>new z({...L,chainId:U.Ethereum}),l0=(L)=>new z({...L,chainId:U.Gnosis}),g0=(L)=>new z({...L,chainId:U.Optimism}),c0=(L)=>new z({...L,chainId:U.Polygon}),h0=(L)=>new z({...L,chainId:U.BinanceSmartChain}),x0=(L)=>new z({...L,chainId:U.Monad}),d0=(L)=>new z({...L,chainId:U.XLayer}),u0=(L)=>new z({...L,chainId:U.Berachain});async function i0(L,y){let _=(await import("@ledgerhq/hw-app-near")).default,{Chain:w,NetworkDerivationPath:R,SwapKitError:G}=await import("@swapkit/helpers"),N=y??await C(),X=new _(N),O=(L||R[w.Near]).join("'/").concat("'"),{address:W,publicKey:T}=await X.getAddress(O);return{getAddress(){return Promise.resolve(W)},async getPublicKey(){let{PublicKey:M}=await import("@near-js/crypto");return M.fromString(`ed25519:${T}`)},signDelegateAction(M){return Promise.reject(new G("wallet_ledger_method_not_supported",{method:"signDelegateAction",wallet:"Ledger"}))},signNep413Message(M,q,f,D,S){return Promise.reject(new G("wallet_ledger_method_not_supported",{method:"signNep413Message",wallet:"Ledger"}))},async signTransaction(M){let{Signature:q,SignedTransaction:f}=await import("@near-js/transactions");try{let D=await X.signTransaction(M.encode(),O);if(!D)throw Error("Signature undefined");let S=new q({data:D,keyType:0}),v=new f({signature:S,transaction:M});return[D,v]}catch(D){throw new G("wallet_ledger_signing_error",{error:D})}}}}import{Chain as zL,derivationPathToString as kL,NetworkDerivationPath as mL,SwapKitError as b}from"@swapkit/helpers";class o0{derivationPath;ledgerApp=null;address=null;publicKey=null;injectedTransport;constructor(L,y){this.derivationPath=typeof L==="string"?L:kL(L||mL[zL.Sui]),this.injectedTransport=y}getLedgerPath(){return this.derivationPath.replace(/^m\//,"").replace(/\/(\d+)\/(\d+)$/,"/$1'/$2'")}async createTransportAndLedger(){if(this.ledgerApp)return;let L=this.injectedTransport??await C(),y=(await import("@ledgerhq/hw-app-sui")).default;this.ledgerApp=new y(L)}async connect(){if(await this.createTransportAndLedger(),!this.ledgerApp)throw new b("wallet_ledger_transport_error");let L=this.getLedgerPath(),y=await this.ledgerApp.getPublicKey(L);if(!y?.publicKey)throw new b("wallet_ledger_failed_to_get_address");return this.publicKey=y.publicKey,this.address=`0x${Buffer.from(y.address).toString("hex")}`,this.address}toSuiAddress(){if(!this.address)throw new b("wallet_ledger_failed_to_get_address");return this.address}async getAddress(){if(this.address)return this.address;return await this.connect()}async signTransaction(L){let y=L instanceof Uint8Array?L:L.transaction;if(await this.createTransportAndLedger(),!this.ledgerApp)throw new b("wallet_ledger_transport_error");if(!this.publicKey)throw new b("wallet_ledger_failed_to_get_address");try{let _=this.getLedgerPath(),w=new Uint8Array(3+y.length);w[0]=0,w[1]=0,w[2]=0,w.set(y,3);let R=await this.ledgerApp.signTransaction(_,w);if(!R?.signature)throw new b("wallet_ledger_signing_error");let G=this.publicKey.length===33?this.publicKey.slice(1):this.publicKey;if(G.length!==32)throw new b("wallet_ledger_signing_error",{error:"Invalid public key length"});let N=new Uint8Array(97);N[0]=0,N.set(R.signature,1),N.set(G,65);let X=Buffer.from(N).toString("base64");return{bytes:Buffer.from(y).toString("base64"),signature:X}}catch(_){throw new b("wallet_ledger_signing_error",{error:_})}}}var n0=(L,y)=>new o0(L,y);import{base64 as Z0}from"@scure/base";import{NetworkDerivationPath as SL,SwapKitError as $0}from"@swapkit/helpers";import{base64 as KL}from"@scure/base";import{SwapKitError as I}from"@swapkit/helpers";var s=(L)=>{if(L.length<64)throw new I("wallet_ledger_invalid_signature",{reason:"Too short"});if(L[0]!==48)throw new I("wallet_ledger_invalid_signature",{reason:"TLV encoding: expected first byte 0x30"});if(L[1]+2!==L.length)throw new I("wallet_ledger_invalid_signature",{reason:"signature length does not match TLV"});if(L[2]!==2)throw new I("wallet_ledger_invalid_signature",{reason:"TLV encoding: expected length type 0x02"});let y=L[3],_=L.slice(4,y+4);if(_.length===33&&_[0]===0)_=_.slice(1,33);else if(_.length===33)throw new I("wallet_ledger_invalid_signature",{reason:"r too long"});while(_.length<32)_.unshift(0);if(L[y+4]!==2)throw new I("wallet_ledger_invalid_signature",{reason:"TLV encoding: expected length type 0x02 for s"});let w=L[y+5];if(4+y+2+w!==L.length)throw new I("wallet_ledger_invalid_signature",{reason:"TLV byte lengths do not match message length"});let R=L.slice(y+6,L.length);if(R.length===33&&R[0]===0)R=R.slice(1,33);else if(R.length===33)throw new I("wallet_ledger_invalid_signature",{reason:"s too long"});while(R.length<32)R.unshift(0);if(_.length!==32||R.length!==32)throw new I("wallet_ledger_invalid_signature",{reason:"must be 32 bytes each"});return KL.encode(Buffer.concat([_,R]))};function VL(L){if(typeof L==="string")return L;let y=L.chain?.toUpperCase(),_=(L.symbol||L.ticker||"").toUpperCase();if(!(y&&_))return _||y||"";if(L.synth)return`${y}/${_}`;return`${y}.${_}`}function AL(L){return{...L,msgs:L.msgs.map((y)=>{if(!y.type.includes("MsgDeposit"))return y;let _=y.value.coins;if(!Array.isArray(_))return y;return{...y,value:{...y.value,coins:_.map((w)=>({...w,asset:VL(w.asset)}))}}})}}class j0 extends u{pubKey=null;derivationPath;constructor(L=SL.THOR,y){super(y);this.chain="thor",this.derivationPath=L}get pubkey(){return this.pubKey}connect=async()=>{await this.checkOrCreateTransportAndLedger();let{compressed_pk:L,bech32_address:y}=await this.getAddressAndPubKey();return this.pubKey=Z0.encode(L),y};getAddressAndPubKey=async()=>{await this.checkOrCreateTransportAndLedger(!0);let L=await this.ledgerApp.getAddressAndPubKey(this.derivationPath,this.chain);return this.validateResponse(L.return_code,L.error_message),L};showAddressAndPubKey=async()=>{await this.checkOrCreateTransportAndLedger(!0);let L=await this.ledgerApp.showAddressAndPubKey(this.derivationPath,this.chain);return this.validateResponse(L.return_code,L.error_message),L};signTransaction=async(L,y="0")=>{await this.checkOrCreateTransportAndLedger(!0);let{return_code:_,error_message:w,signature:R}=await this.ledgerApp.sign(this.derivationPath,L);if(!this.pubKey)throw new $0("wallet_ledger_pubkey_not_found");return this.validateResponse(_,w),[{pub_key:{type:"tendermint/PubKeySecp256k1",value:this.pubKey},sequence:y,signature:s(R)}]};signAmino=async(L,y)=>{await this.checkOrCreateTransportAndLedger(!0);let _=(await this.getAccounts()).find((T)=>T.address===L);if(!_)throw new $0("wallet_ledger_address_not_found",{address:L});let w=await import("@cosmjs/amino"),R=w.encodeSecp256k1Signature??w.default?.encodeSecp256k1Signature,G=w.serializeSignDoc??w.default?.serializeSignDoc,N=AL(y),{return_code:X,error_message:O,signature:W}=await this.ledgerApp.sign(this.derivationPath,G(N));return this.validateResponse(X,O),{signature:R(_.pubkey,Z0.decode(s(W))),signed:y}};getAccounts=async()=>{await this.checkOrCreateTransportAndLedger(!0);let{bech32_address:L,compressed_pk:y}=await this.getAddressAndPubKey();return this.pubKey=Z0.encode(y),[{address:L,algo:"secp256k1",pubkey:y}]};sign=async(L)=>{await this.checkOrCreateTransportAndLedger(!0);let{return_code:y,error_message:_,signature:w}=await this.ledgerApp.sign(this.derivationPath,L);if(!this.pubKey)throw new $0("wallet_ledger_pubkey_not_found");return this.validateResponse(y,_),s(w)}}import{derivationPathToString as PL,NetworkDerivationPath as EL,SwapKitError as o}from"@swapkit/helpers";class p0{derivationPath;ledgerApp=null;ledgerTimeout=50000;injectedTransport;constructor(L,y){this.derivationPath=typeof L==="string"?L:PL(L||EL.TRON),this.injectedTransport=y}checkOrCreateTransportAndLedger=async()=>{if(this.ledgerApp)return;await this.createTransportAndLedger()};createTransportAndLedger=async()=>{let L=this.injectedTransport??await C(),y=(await import("@ledgerhq/hw-app-trx")).default;this.ledgerApp=new y(L)};getAddress=async()=>{let L=await this.getAddressAndPubKey();if(!L)throw new o("wallet_ledger_failed_to_get_address");return L.address};getAddressAndPubKey=async()=>{await this.createTransportAndLedger();let L=await this.ledgerApp?.getAddress(this.derivationPath);if(!L)throw new o("wallet_ledger_failed_to_get_address");return{address:L.address,publicKey:L.publicKey}};showAddressAndPubKey=async()=>{return await this.createTransportAndLedger(),this.ledgerApp?.getAddress(this.derivationPath,!0)};signTransaction=async(L)=>{if(await this.createTransportAndLedger(),!this.ledgerApp)throw new o("wallet_ledger_transport_error");let y=JSON.stringify(L);try{let _=await this.ledgerApp.signTransaction(this.derivationPath,y,[]);if(!_)throw new o("wallet_ledger_signing_error");return{...L,signature:[_]}}catch(_){throw new o("wallet_ledger_signing_error",{error:_})}}}var a0=(L,y)=>new p0(L,y);import{hex as L0}from"@scure/base";import{derivationPathToString as IL,getWalletFormatFor as vL,SwapKitError as M0}from"@swapkit/helpers";var e0=["bitcoin-cash","dash","dogecoin","zcash"],t0=({tx:L,inputUtxos:y,btcApp:_,derivationPath:w,chain:R},G)=>{let N=y.map((F)=>{return[_.splitTransaction(F.txHex||"",!e0.includes(R),R==="zcash"),F.index,void 0,void 0]}),X=L0.encode(L.unsignedTx),O=_.splitTransaction(X,!0),W=_.serializeTransactionOutputs(O).toString("hex"),T={additionals:["bech32"],associatedKeysets:N.map(()=>w),inputs:N,outputScriptHex:W,segwit:!0,useTrustedInputForSegwit:!0};return _.createPaymentTransaction({...T,...G})},bL=({tx:L,inputUtxos:y,btcApp:_,derivationPaths:w,chain:R},G)=>{if(w.length!==y.length)throw new M0("wallet_ledger_invalid_params",{message:`Derivation paths count (${w.length}) must match inputs count (${y.length})`});let N=y.map((F)=>{return[_.splitTransaction(F.txHex||"",!e0.includes(R),R==="zcash"),F.index,void 0,void 0]}),X=L0.encode(L.unsignedTx),O=_.splitTransaction(X,!0),W=_.serializeTransactionOutputs(O).toString("hex"),T={additionals:["bech32"],associatedKeysets:w,inputs:N,outputScriptHex:W,segwit:!0,useTrustedInputForSegwit:!0};return _.createPaymentTransaction({...T,...G})},h=({chain:L,additionalSignParams:y})=>{return(_,w)=>{let R,G=null;async function N(){G||=w??await C();let F=(await import("@ledgerhq/hw-app-btc")).default;return R||=new F({currency:L,transport:G}),R}async function X(){return R||await N()}async function O(){if(!w)await G?.close?.();R=void 0,G=null}let W=typeof _==="string"?_:IL(_),T=vL(W);return{connect:async()=>{await X()},disconnect:O,getAddress:async()=>{let{toCashAddress:F}=await import("@swapkit/toolboxes/utxo"),M=await X(),{bitcoinAddress:q}=await M.getWalletPublicKey(W,{format:T});if(!q)throw new M0("wallet_ledger_get_address_error",{message:`Cannot get ${L} address from ledger derivation path: ${W}`});return L==="bitcoin-cash"&&T==="legacy"?F(q).replace(/(bchtest:|bitcoincash:)/,""):q},getExtendedPublicKey:async(F="84'/0'/0'",M=76067358)=>{return(await X()).getWalletXpub({path:F,xpubVersion:M})},signPCZT:async(F)=>{if(L!=="zcash")throw new M0("wallet_ledger_chain_not_supported",{message:"PCZT signing is only supported for Zcash"});let M=await X(),{ZcashTransaction:q,Script:f}=await import("@swapkit/utxo-signer"),D=F.getGlobal(),S=new q({consensusBranchId:D.consensusBranchId,expiryHeight:D.expiryHeight,lockTime:D.lockTime,version:D.txVersion,versionGroupId:D.versionGroupId}),v=[];for(let j=0;j<F.inputsLength;j++){let $=F.getInput(j);S.addInput({index:$.index,script:new Uint8Array,sequence:$.sequence??4294967295,txid:$.txid,value:$.value}),v.push({hash:L0.encode(new Uint8Array([...$.txid].reverse())),index:$.index,txHex:lL($,D),value:Number($.value),witnessUtxo:{script:$.scriptPubkey,value:Number($.value)}})}for(let j=0;j<F.outputsLength;j++){let $=F.getOutput(j);S.addOutput({amount:$.value,script:$.scriptPubkey})}let _0=await t0({btcApp:M,chain:L,derivationPath:W,inputUtxos:v,tx:S},{...y,expiryHeight:(()=>{let j=Buffer.alloc(4);return j.writeUInt32LE(D.expiryHeight),j})(),lockTime:D.lockTime}),Q=q.fromHex(_0,{allowUnknownOutputs:!0}),H=F.clone();for(let j=0;j<Q.inputsLength;j++){let $=Q.getInput(j);if($.script&&$.script.length>0){let k=f.decode($.script);if(k.length>=2)H.addSignature(j,k[1],k[0])}}return H},signTransaction:async(F,M)=>{let q=await X();return t0({btcApp:q,chain:L,derivationPath:W,inputUtxos:M,tx:F},y)},signTransactionWithMultiplePaths:async(F,M,q)=>{let f=await X();return bL({btcApp:f,chain:L,derivationPaths:q,inputUtxos:M,tx:F},y)}}}};function lL(L,y){let _=[],w=(y.txVersion|2147483648)>>>0;_.push(w&255,w>>8&255,w>>16&255,w>>24&255);let R=y.versionGroupId;_.push(R&255,R>>8&255,R>>16&255,R>>24&255),_.push(0);let G=L.index+1;if(G<253)_.push(G);else _.push(253,G&255,G>>8&255);for(let O=0;O<L.index;O++)_.push(0,0,0,0,0,0,0,0),_.push(0);let N=L.value;_.push(Number(N&0xffn),Number(N>>8n&0xffn),Number(N>>16n&0xffn),Number(N>>24n&0xffn),Number(N>>32n&0xffn),Number(N>>40n&0xffn),Number(N>>48n&0xffn),Number(N>>56n&0xffn));let X=L.scriptPubkey;if(X.length<253)_.push(X.length);else _.push(253,X.length&255,X.length>>8&255);for(let O of X)_.push(O);return _.push(y.lockTime&255,y.lockTime>>8&255,y.lockTime>>16&255,y.lockTime>>24&255),_.push(y.expiryHeight&255,y.expiryHeight>>8&255,y.expiryHeight>>16&255,y.expiryHeight>>24&255),_.push(0,0,0,0,0,0,0,0),_.push(0),_.push(0),_.push(0),L0.encode(new Uint8Array(_))}var r0=h({chain:"bitcoin"}),s0=h({chain:"litecoin"}),LL=h({additionalSignParams:{additionals:["abc"],segwit:!1,sigHashType:65},chain:"bitcoin-cash"}),yL=h({additionalSignParams:{additionals:[],segwit:!1,useTrustedInputForSegwit:!1},chain:"dogecoin"}),_L=h({additionalSignParams:{additionals:[],segwit:!1,useTrustedInputForSegwit:!1},chain:"dash"}),RL=h({additionalSignParams:{additionals:["zcash","sapling"],expiryHeight:(()=>{let L=Buffer.alloc(4);return L.writeUInt32LE(0),L})(),lockTime:0,segwit:!1,useTrustedInputForSegwit:!1},chain:"zcash"});import gL from"@ledgerhq/hw-app-xrp";import{Chain as cL,derivationPathToString as hL,NetworkDerivationPath as xL}from"@swapkit/helpers";import{encode as GL}from"ripple-binary-codec";var dL=2147483648;function uL(L){let y={};for(let _ in L)if(L[_]!==null&&L[_]!==void 0)y[_]=L[_];return y}function iL(L){return new gL(L)}var wL=async(L,y)=>{let _=hL(L||xL[cL.Ripple]),w=y??await C(),R=iL(w),{address:G,publicKey:N}=await R.getAddress(_);async function X(O){let{hashes:W}=await import("@swapkit/toolboxes/ripple"),F={...uL(O),Flags:O.Flags||dL,SigningPubKey:N.toUpperCase()},M=GL(F),q=await R.signTransaction(_,M),f=GL({...F,TxnSignature:q});return{hash:W.hashSignedTx(f),tx_blob:f}}return{getAddress:()=>G,signTransaction:X}};var K=async({chain:L,derivationPath:y,transport:_})=>{let{match:w}=await import("ts-pattern");return w(L).returnType().with(J.THORChain,()=>Promise.resolve(new j0(y,_))).with(J.Cosmos,()=>Promise.resolve(new J0(y,_))).with(J.Bitcoin,()=>Promise.resolve(r0(y,_))).with(J.BitcoinCash,()=>Promise.resolve(LL(y,_))).with(J.Dash,()=>Promise.resolve(_L(y,_))).with(J.Dogecoin,()=>Promise.resolve(yL(y,_))).with(J.Litecoin,()=>Promise.resolve(s0(y,_))).with(J.Zcash,()=>Promise.resolve(RL(y,_))).with(J.Ripple,()=>Promise.resolve(wL(y,_))).with(J.Tron,()=>Promise.resolve(a0(y,_))).with(J.Sui,()=>Promise.resolve(n0(y,_))).with(J.Near,()=>{return Promise.resolve(i0(y,_))}).with(J.Arbitrum,J.Aurora,J.Avalanche,J.Berachain,J.BinanceSmartChain,J.Ethereum,J.Gnosis,J.Monad,J.Optimism,J.Polygon,J.Base,J.XLayer,async()=>{let{getProvider:R}=await import("@swapkit/toolboxes/evm"),G={derivationPath:y,provider:await R(L),transport:_};return w(L).with(J.BinanceSmartChain,()=>h0(G)).with(J.Avalanche,()=>I0(G)).with(J.Arbitrum,()=>P0(G)).with(J.Berachain,()=>u0(G)).with(J.Optimism,()=>g0(G)).with(J.Polygon,()=>c0(G)).with(J.Base,()=>v0(G)).with(J.Aurora,()=>E0(G)).with(J.Gnosis,()=>l0(G)).with(J.Monad,()=>x0(G)).with(J.XLayer,()=>d0(G)).otherwise(()=>b0(G))}).otherwise(()=>{throw new oL("wallet_chain_not_supported",{chain:L,wallet:nL.LEDGER})})};var Gy=_y({connect:({addChain:L,supportedChains:y,walletType:_})=>async function(R,G,{address:N,transport:X}={}){let[O]=pL({chains:R,supportedChains:y,walletType:_});if(!O)return!1;let W=G??tL[O],T=await Ny({address:N,chain:O,derivationPath:W,transport:X});return L({...T,chain:O,walletType:Q0.LEDGER}),!0},directSigningSupport:{[B.Arbitrum]:!0,[B.Aurora]:!0,[B.Avalanche]:!0,[B.Base]:!0,[B.Berachain]:!0,[B.BinanceSmartChain]:!0,[B.Ethereum]:!0,[B.Gnosis]:!0,[B.Monad]:!0,[B.Bitcoin]:!0,[B.BitcoinCash]:!0,[B.Cosmos]:!0,[B.Dash]:!0,[B.Dogecoin]:!0,[B.Litecoin]:!0,[B.Near]:!0,[B.Optimism]:!0,[B.Polygon]:!0,[B.Ripple]:!0,[B.Sui]:!0,[B.THORChain]:!0,[B.Tron]:!0,[B.XLayer]:!0},getExtendedPublicKey:By,name:"connectLedger",supportedChains:[B.Arbitrum,B.Aurora,B.Avalanche,B.Base,B.Berachain,B.BinanceSmartChain,B.Bitcoin,B.BitcoinCash,B.Cosmos,B.Dash,B.Dogecoin,B.Ethereum,B.Gnosis,B.Litecoin,B.Monad,B.Near,B.Optimism,B.Polygon,B.Ripple,B.Sui,B.THORChain,B.XLayer,B.Tron,B.Zcash],walletType:Q0.LEDGER}),Q_=Ry(Gy);function wy(L,y="t"){if(!L?.includes("=:"))return L;let _=L.includes(`:${y}:`)?L.split(`:${y}:`)[0]:L;return _?.substring(0,_.lastIndexOf(":"))}async function By(L,y,{accountIndex:_}={}){if(![B.BitcoinCash,B.Bitcoin,B.Dash,B.Dogecoin,B.Litecoin,B.Zcash].includes(L))throw new x("wallet_chain_not_supported",{chain:L,wallet:Q0.LEDGER});let w=L,R=await K({chain:w,derivationPath:y});if(!R.getExtendedPublicKey)return;let G=q0({accountIndex:_,chain:w,derivationPath:y}),N=y0(G),X=L===B.Bitcoin||L===B.Litecoin?N:N.replace(/^m\//,""),O=XL(w).bip32.public;try{let W=await R.getExtendedPublicKey(X,O);return{accountIndex:Y0(G),path:N,xpub:W}}finally{await R.disconnect?.()}}async function Ny({address:L,chain:y,derivationPath:_,transport:w}){switch(y){case B.BitcoinCash:case B.Bitcoin:case B.Dash:case B.Dogecoin:case B.Litecoin:case B.Zcash:{let f=function(Q={}){return q(Q)},{getUtxoToolbox:R}=await import("@swapkit/toolboxes/utxo"),G=y,N=await K({chain:y,derivationPath:_,transport:w}),X=L??await P({chain:y,ledgerClient:N}),O,W;if(y===B.Bitcoin){let{BitcoinPsbtLedger:Q}=await import("../chunk-jttnd211.js"),H=Q(_,w);O={getAddress:H.getAddress,signTransaction:H.signTransaction}}else if(y===B.BitcoinCash||y===B.Dogecoin||y===B.Dash||y===B.Litecoin){let{createLegacyPsbtSigner:Q,signLegacyPsbtTransaction:H}=await import("../chunk-bwf31zxr.js");O=Q({address:X,chain:G,legacyClient:N}),W=async(j)=>{let $=await H({chain:G,legacyClient:N,tx:j});return T.broadcastTx($)}}let T=O?await R(G,{signer:O}):R(G),F=W??T.signAndBroadcastTransaction,M=async(Q)=>{let H=Q.feeRate||(await T.getFeeRates())[BL.Average],j=[B.Bitcoin].includes(y)?Q.memo:wy(Q.memo),{tx:$,inputs:k}=await T.createTransaction({...Q,feeRate:H,fetchTxHex:!0,memo:j,sender:X}),V=await N.signTransaction($,k);return await T.broadcastTx(V)};async function q({accountIndex:Q}={}){if(!N.getExtendedPublicKey)return;let H=q0({accountIndex:Q,chain:G,derivationPath:_}),j=y0(H),$=y===B.Bitcoin||y===B.Litecoin?j:j.replace(/^m\//,""),k=XL(G).bip32.public,V=await N.getExtendedPublicKey($,k);return{accountIndex:Y0(H),path:j,xpub:V}}async function D({accountIndex:Q,index:H,change:j=!1}){try{let $=Ly({accountIndex:Q,chain:G,change:j,derivationPath:_,index:H}),k=await K({chain:G,derivationPath:$,transport:w}),V=await P({chain:G,ledgerClient:k});return{accountIndex:Y0($),address:V,change:j,index:H,path:y0($),pubkey:""}}catch{return}}async function S({accountIndex:Q,count:H,startIndex:j=0,change:$=!1}){return NL("count",H),NL("startIndex",j),(await Promise.all(Array.from({length:H},(V,n)=>D({accountIndex:Q,change:$,index:j+n})))).filter((V)=>!!V)}let v=sL({chain:G,deriveAddress:D,getBalance:T.getBalance,getUtxos:(Q)=>yy(G).getUtxos({address:Q,fetchTxHex:!0})});async function _0({utxos:Q,recipient:H,assetValue:j,memo:$,feeRate:k,feeOptionKey:V,changeAddress:n}){if(!Q.length)throw new x("wallet_ledger_invalid_params",{message:"No UTXOs provided for multi-address transfer"});let OL=k||(await T.getFeeRates())[V||BL.Fast],R0=$?rL($):null,D0=[{address:H,value:j.getBaseValue("number")}];if(R0)D0.push({script:R0,value:0});let TL=Q.map(({hash:a,index:t,value:G0,txHex:w0,witnessUtxo:B0})=>({hash:a,index:t,txHex:w0,value:G0,witnessUtxo:B0})),{inputs:p,outputs:H0}=T.accumulative({chain:G,feeRate:OL,inputs:TL,outputs:D0});if(!(p&&H0))throw new x("wallet_ledger_connection_error",{message:"Insufficient balance for multi-address transfer"});let{Transaction:FL}=await import("@swapkit/utxo-signer"),f0=new FL({allowLegacyWitnessUtxo:!0,version:1}),WL=n||Q[0]?.address||H;eL({chain:G,compiledMemo:R0,inputs:p,outputs:H0,sender:WL,tx:f0});let JL=q0({chain:G,derivationPath:_}),ZL=p.map((a)=>{let t=Q.find((C0)=>C0.hash===a.hash&&C0.index===a.index),G0=t?.derivationIndex??0,w0=t?.isChange??!1,B0=[...JL,Number(w0),G0];return y0(B0)});if(!N.signTransactionWithMultiplePaths)throw new x("wallet_ledger_method_not_supported",{method:"signTransactionWithMultiplePaths"});let $L=await N.signTransactionWithMultiplePaths(f0,p,ZL);return T.broadcastTx($L)}return{...T,...v,address:X,deriveAddressAtIndex:D,deriveAddresses:S,getExtendedPublicKey:f,getExtendedPublicKeyInfo:q,signAndBroadcastTransaction:F,transfer:M,transferFromMultipleAddresses:_0}}case B.Ethereum:case B.Avalanche:case B.Arbitrum:case B.Berachain:case B.Optimism:case B.Polygon:case B.BinanceSmartChain:case B.Base:case B.Aurora:case B.Gnosis:case B.Monad:case B.XLayer:{let{getEvmToolboxAsync:R}=await import("@swapkit/toolboxes/evm"),G=await K({chain:y,derivationPath:_,transport:w}),N=await P({chain:y,ledgerClient:G});return{...await R(y,{signer:G}),address:N}}case B.Cosmos:{let{createSigningStargateClient:R,getMsgSendDenom:G,getCosmosToolbox:N}=await import("@swapkit/toolboxes/cosmos"),X=await K({chain:y,derivationPath:_,transport:w}),O=await P({chain:y,ledgerClient:X});return{...await N(B.Cosmos,{signer:X}),address:O,transfer:async({assetValue:F,recipient:M,memo:q})=>{if(!F)throw new x("wallet_ledger_invalid_asset");let f={amount:[{amount:F.getBaseValue("string"),denom:G(`u${F.symbol}`).toLowerCase()}],fromAddress:O,toAddress:M},D=await aL(y),S=await R(D,X,"0.007uatom"),{transactionHash:v}=await S.signAndBroadcast(O,[{typeUrl:"/cosmos.bank.v1beta1.MsgSend",value:f}],2,q);return v}}}case B.THORChain:{let R=await K({chain:y,derivationPath:_,transport:w}),{getCosmosToolbox:G}=await import("@swapkit/toolboxes/cosmos"),N=G(y,{signer:R}),X=await P({chain:y,ledgerClient:R}),{sign:O}=R;return{...N,address:X,signMessage:O}}case B.Near:{let{getNearToolbox:R}=await import("@swapkit/toolboxes/near"),G=await K({chain:y,derivationPath:_,transport:w}),N=await G.getAddress();return{...R({signer:G}),address:N}}case B.Ripple:{let{getRippleToolbox:R}=await import("@swapkit/toolboxes/ripple"),G=await K({chain:y,derivationPath:_,transport:w}),N=G.getAddress();return{...R({signer:G}),address:N}}case B.Tron:{let{getTronToolbox:R}=await import("@swapkit/toolboxes/tron"),G=await K({chain:y,derivationPath:_,transport:w}),N=await P({chain:y,ledgerClient:G});return{...R({signer:G}),address:N}}case B.Sui:{let{getSuiToolbox:R}=await import("@swapkit/toolboxes/sui"),G=await K({chain:y,derivationPath:_,transport:w}),N=await P({chain:y,ledgerClient:G});return{...R({signer:G}),address:N}}default:throw new x("wallet_ledger_chain_not_supported",{chain:y})}}export{Gy as ledgerWallet,By as getLedgerExtendedPublicKey,Q_ as LEDGER_SUPPORTED_CHAINS};
|
|
1
|
+
import{c as f}from"../chunk-3yr76n9s.js";import{d as Z}from"../chunk-n05bv2n5.js";import{Chain as B,derivationPathToString as y0,FeeOption as BL,filterSupportedChains as aL,getRPCUrl as tL,NetworkDerivationPath as eL,SwapKitError as x,WalletOption as Q0}from"@swapkit/helpers";import{addInputsAndOutputs as rL,assertDerivationIndex as NL,compileMemo as sL,createHDWalletHelpers as Ly,getNetworkForChain as XL,getUTXOAccountIndexFromPath as Y0,getUTXOAccountPath as q0,getUTXOAddressPath as yy,getUtxoApi as _y}from"@swapkit/toolboxes/utxo";import{createWallet as Ry,getWalletSupportedChains as Gy}from"@swapkit/wallet-core";import{Chain as Y,SwapKitError as jL,WalletOption as ML}from"@swapkit/helpers";var P=async({chain:L,ledgerClient:y})=>{if(!y)return"";switch(L){case Y.Cosmos:case Y.THORChain:return y.connect();case Y.Ethereum:case Y.BinanceSmartChain:case Y.Avalanche:case Y.Polygon:case Y.Arbitrum:case Y.Berachain:case Y.Optimism:case Y.Base:case Y.Aurora:case Y.Gnosis:case Y.Monad:case Y.XLayer:return y.getAddress();case Y.Bitcoin:case Y.BitcoinCash:case Y.Dash:case Y.Dogecoin:case Y.Litecoin:case Y.Zcash:{let _=y;await _.connect();let w=await _.getAddress();return L===Y.BitcoinCash?w.replace("bitcoincash:",""):w}case Y.Near:return await y.getAddress();case Y.Ripple:return y.getAddress();case Y.Tron:return y.getAddress();case Y.Sui:return y.connect();default:throw new jL("wallet_chain_not_supported",{chain:L,wallet:ML.LEDGER})}};import{Chain as J,SwapKitError as nL,WalletOption as pL}from"@swapkit/helpers";import{derivationPathToString as DL,NetworkDerivationPath as CL,SwapKitError as A0}from"@swapkit/helpers";import{LedgerErrorCode as F0,NetworkDerivationPath as qL,SwapKitError as W0}from"@swapkit/helpers";import{SwapKitError as V0}from"@swapkit/helpers";var g=85,N0=250;var l={GET_ADDR_SECP256K1:4,GET_VERSION:0,INS_PUBLIC_KEY_SECP256K1:1,SIGN_SECP256K1:2},e={ADD:1,INIT:0,LAST:2},X0={ONLY_RETRIEVE:0,SHOW_ADDRESS_IN_DEVICE:1},c={JSON:0},E={NoError:36864},U0={1:"U2F: Unknown",2:"U2F: Bad request",3:"U2F: Configuration unsupported",4:"U2F: Device Ineligible",5:"U2F: Timeout",14:"Timeout",25600:"Execution Error",26368:"Wrong Length",26626:"Error deriving keys",27010:"Empty Buffer",27011:"Output buffer too small",27012:"Data is invalid",27013:"Conditions not satisfied",27014:"Transaction rejected",27264:"Bad key handle",27392:"Invalid P1/P2",27904:"Instruction not supported",28160:"App does not seem to be open",28416:"Unknown error",28417:"Sign/verify error",36864:"No errors",36865:"Device is busy"};function A(L){if(L in U0)return U0[L];return`Unknown Status Code: ${L}`}function QL(L){return typeof L==="object"&&L!==null&&!Array.isArray(L)&&!(L instanceof Date)}function m(L){if(L){if(QL(L)){if(Object.hasOwn(L,"statusCode"))return{error_message:A(L.statusCode),return_code:L.statusCode};if(Object.hasOwn(L,"return_code")&&Object.hasOwn(L,"error_message"))return L}return{error_message:L.toString(),return_code:65535}}return{error_message:L.toString(),return_code:65535}}function O0(L){return L.send(85,l.GET_VERSION,0,0).then((y)=>{let _=y.slice(-2),w=_[0]*256+_[1],R=0;if(y.length>=9)R=(y[5]<<24)+(y[6]<<16)+(y[7]<<8)+(y[8]<<0);return{device_locked:y[4]===1,error_message:A(w),major:y[1],minor:y[2],patch:y[3],return_code:w,target_id:R.toString(16),test_mode:y[0]!==0}},m)}import{SwapKitError as r}from"@swapkit/helpers";function z0(L){if(L==null||L.length<3)throw new r("wallet_ledger_invalid_params",{reason:"Path too short"});if(L.length>10)throw new r("wallet_ledger_invalid_params",{reason:"Path too long"});let y=Buffer.alloc(1+4*L.length);y.writeUInt8(L.length,0);for(let _=0;_<L.length;_+=1){let w=L[_]||0;if(_<3)w|=2147483648;y.writeInt32LE(w,1+_*4)}return y}function T0(L,y,_,w,R=c.JSON){return L.transport.send(g,l.SIGN_SECP256K1,y,R,w,[E.NoError,27012,27264]).then((G)=>{let N=G.slice(-2),X=N[0]*256+N[1],O=A(X);if(X===27264||X===27012)O=`${O} : ${G.slice(0,G.length-2).toString("ascii")}`;let W=null;if(G.length>2)W=G.slice(0,G.length-2);return{error_message:O,return_code:X,signature:W}},m)}function YL(L){if(L.length!==65)throw new r("wallet_ledger_invalid_params",{reason:"decompressed public key length should be 65 bytes"});let y=L.slice(33,65),_=Buffer.from([2+(y[y.length-1]&1)]);return Buffer.concat([_,L.slice(1,33)])}function k0(L,y){return L.transport.send(g,l.INS_PUBLIC_KEY_SECP256K1,0,0,y,[E.NoError]).then((_)=>{let w=_.slice(-2),R=w[0]*256+w[1],G=Buffer.from(_.slice(0,65));return{compressed_pk:YL(G),error_message:A(R),pk:G,return_code:R}},m)}function m0(L){if(!L||L.length!==5)throw new r("wallet_ledger_invalid_params",{reason:"Path must be exactly 5 elements"});let y=Buffer.alloc(20);return y.writeUInt32LE(2147483648+L[0],0),y.writeUInt32LE(2147483648+L[1],4),y.writeUInt32LE(2147483648+L[2],8),y.writeUInt32LE(L[3],12),y.writeUInt32LE(L[4],16),y}function K0(L,y,_,w,R=c.JSON){let G=e.ADD;if(y===1)G=e.INIT;if(y===_)G=e.LAST;return T0(L,G,0,w,R)}function S0(L,y){return L.transport.send(g,l.GET_ADDR_SECP256K1,0,0,y,[E.NoError]).then((_)=>{let w=_.slice(-2),R=w[0]*256+w[1];return{compressed_pk:Buffer.from(_.slice(0,33)),error_message:A(R),pk:"OBSOLETE PROPERTY",return_code:R}},m)}class d{transport;versionResponse;constructor(L){if(!L)throw new V0("wallet_ledger_transport_not_defined");this.transport=L}static serializeHRP(L){if(L==null||L.length<3||L.length>83)throw new V0("wallet_ledger_invalid_params",{reason:"Invalid HRP"});let y=Buffer.alloc(1+L.length);return y.writeUInt8(L.length,0),y.write(L,1),y}async serializePath(L){if(this.versionResponse=await O0(this.transport),this.versionResponse.return_code!==E.NoError)throw this.versionResponse;switch(this.versionResponse.major){case 1:return z0(L);case 2:return m0(L);default:return Buffer.alloc(0)}}async signGetChunks(L,y){let _=await this.serializePath(L),w=[];w.push(_);for(let R=0;R<y.length;R+=N0){let G=R+N0;if(R>y.length)G=y.length;w.push(y.slice(R,G))}return w}async getVersion(){try{return this.versionResponse=await O0(this.transport),this.versionResponse}catch(L){return m(L)}}appInfo(){return this.transport.send(176,1,0,0).then((L)=>{let y=L.readUInt16BE(L.length-2),_="",w="",R=0,G=0;if(L[0]!==1)return{error_message:"response format ID not recognized",return_code:36865};let N=L[1];_=L.slice(2,2+N).toString("ascii");let X=2+N,O=L[X];X+=1,w=L.slice(X,X+O).toString("ascii"),X+=O;let W=L[X];return X+=1,R=W,G=L[X],{appName:_,appVersion:w,error_message:A(y),flag_onboarded:(G&4)!==0,flag_pin_validated:(G&128)!==0,flag_recovery:(G&1)!==0,flag_signed_mcu_code:(G&2)!==0,flagLen:R,flagsValue:G,return_code:y}},m)}deviceInfo(){return this.transport.send(224,1,0,0,Buffer.from([]),[E.NoError,28160]).then((L)=>{let y=L.slice(-2),_=y[0]*256+y[1];if(_===28160)return{error_message:"This command is only available in the Dashboard",return_code:_};let w=L.slice(0,4).toString("hex"),R=4,G=L[R];R+=1;let N=L.slice(R,R+G).toString();R+=G;let X=L[R];R+=1;let O=L.slice(R,R+X).toString("hex");R+=X;let W=L[R];R+=1;let T=L.slice(R,R+W);if(T[W-1]===0)T=L.slice(R,R+W-1);let F=T.toString();return{error_message:A(_),flag:O,mcuVersion:F,return_code:_,seVersion:N,targetId:w}},m)}async publicKey(L){try{let y=await this.serializePath(L);switch(this.versionResponse.major){case 1:return k0(this,y);case 2:{let _=Buffer.concat([d.serializeHRP("thor"),y]);return S0(this,_)}default:return{error_message:"App Version is not supported",return_code:25600}}}catch(y){return m(y)}}async getAddressAndPubKey(L,y,_=!1){try{let w=await this.serializePath(L),R=Buffer.concat([d.serializeHRP(y),w]),G=await this.transport.send(g,l.GET_ADDR_SECP256K1,_?X0.SHOW_ADDRESS_IN_DEVICE:X0.ONLY_RETRIEVE,0,R,[E.NoError]),N=Buffer.from(G.slice(0,33)),X=Buffer.from(G.slice(33,-2)).toString(),O=G.readUInt16BE(G.length-2);return{bech32_address:X,compressed_pk:N,error_message:A(O),return_code:O}}catch(w){return m(w)}}showAddressAndPubKey(L,y){return this.getAddressAndPubKey(L,y,!0)}signSendChunk(L,y,_,w=c.JSON){switch(this.versionResponse.major){case 1:return T0(this,L,y,_,w);case 2:return K0(this,L,y,_,w);default:return{error_message:"App Version is not supported",return_code:25600}}}async sign(L,y,_=c.JSON){let w=Buffer.from(y),R=[],G;try{R=await this.signGetChunks(L,w),G=await this.signSendChunk(1,R.length,R[0],_)}catch(X){m(X)}let N={error_message:G.error_message,return_code:G.return_code,signature:null};for(let X=1;X<R.length;X+=1)if(N=await this.signSendChunk(1+X,R.length,R[X],_),N.return_code!==E.NoError)break;return{error_message:N.error_message,return_code:N.return_code,signature:N.signature}}}class u{ledgerTimeout=50000;derivationPath=qL.GAIA;transport;ledgerApp;chain="thor";injectedTransport;constructor(L){if(this.injectedTransport=L,L)this.transport=L}checkOrCreateTransportAndLedger=async(L=!1)=>{if(!L&&this.transport&&this.ledgerApp)return;try{if(!this.transport||L&&!this.injectedTransport)this.transport=this.injectedTransport??await f();switch(this.chain){case"thor":{this.ledgerApp=L||!this.ledgerApp?new d(this.transport):this.ledgerApp;break}case"cosmos":{let _=(await import("@ledgerhq/hw-app-cosmos")).default;this.ledgerApp=L||!this.ledgerApp?new _(this.transport):this.ledgerApp}}return this.ledgerApp}catch(y){throw new W0("wallet_ledger_connection_error",y)}};validateResponse=(L,y)=>{switch(L){case F0.NoError:return;case F0.LockedDevice:throw new W0("wallet_ledger_device_locked",{message:`Ledger is locked: ${y}`});case F0.TC_NotFound:throw new W0("wallet_ledger_device_not_found");default:break}}}class J0 extends u{pubKey=null;derivationPath;constructor(L=CL.GAIA,y){super(y);this.chain="cosmos",this.derivationPath=DL(L)}connect=async()=>{await this.checkOrCreateTransportAndLedger(!0);let{publicKey:L,address:y}=await this.getAddressAndPubKey();return this.pubKey=Buffer.from(L,"hex").toString("base64"),y};getAddressAndPubKey=async()=>{return await this.checkOrCreateTransportAndLedger(!0),await this.ledgerApp.getAddress(this.derivationPath,this.chain)};signTransaction=async(L,y="0")=>{await this.checkOrCreateTransportAndLedger(!0);let{return_code:_,error_message:w,signature:R}=await this.ledgerApp.sign(this.derivationPath,L);if(!this.pubKey)throw new A0("wallet_ledger_pubkey_not_found");return this.validateResponse(_,w),[{pub_key:{type:"tendermint/PubKeySecp256k1",value:this.pubKey},sequence:y,signature:R}]};signAmino=async(L,y)=>{await this.checkOrCreateTransportAndLedger(!0);let _=await this.getAccounts();if(_.findIndex((M)=>M.address===L)===-1)throw new A0("wallet_ledger_address_not_found",{address:L});let R=await import("@cosmjs/amino"),G=R.encodeSecp256k1Signature??R.default?.encodeSecp256k1Signature,N=R.serializeSignDoc??R.default?.serializeSignDoc,X=await import("@cosmjs/crypto"),O=X.Secp256k1Signature??X.default?.Secp256k1Signature,W=N(y),T=await this.ledgerApp.sign(this.derivationPath,W);this.validateResponse(T.return_code,T.error_message);let F=O.fromDer(T.signature).toFixedLength();return{signature:G(_[0].pubkey,F),signed:y}};getAccounts=async()=>{await this.checkOrCreateTransportAndLedger(!0);let L=await this.getAddressAndPubKey();return[{address:L.address,algo:"secp256k1",pubkey:Buffer.from(L.publicKey,"hex")}]}}import{ChainId as U,derivationPathToString as HL,NetworkDerivationPath as fL,SwapKitError as i}from"@swapkit/helpers";import{AbstractSigner as UL}from"ethers";function zL(L){if(typeof L==="number")return L;let y=L.startsWith("0x")?L.slice(2):L;return Number.parseInt(y||"0",16)}class z extends UL{chainId=U.Ethereum;derivationPath="";ledgerApp=null;ledgerTimeout=50000;transport;injectedTransport;constructor({provider:L,derivationPath:y=fL.OP,chainId:_=U.Optimism,transport:w}){super(L);this.chainId=_||U.Ethereum,this.derivationPath=typeof y==="string"?y:HL(y),this.injectedTransport=w,Object.defineProperty(this,"provider",{enumerable:!0,value:L||null,writable:!1})}connect=(L)=>new z({chainId:this.chainId,derivationPath:this.derivationPath,provider:L,transport:this.transport??this.injectedTransport});checkOrCreateTransportAndLedger=async()=>{await this.createTransportAndLedger()};createTransportAndLedger=async()=>{if(this.ledgerApp)return;this.transport||=this.injectedTransport??await f();let L=(await import("@ledgerhq/hw-app-eth")).default;this.ledgerApp=new L(this.transport)};getAddress=async()=>{let L=await this.getAddressAndPubKey();if(!L)throw new i("wallet_ledger_failed_to_get_address");return L.address};getAddressAndPubKey=async()=>{return await this.createTransportAndLedger(),this.ledgerApp?.getAddress(this.derivationPath)};showAddressAndPubKey=async()=>{return await this.createTransportAndLedger(),this.ledgerApp?.getAddress(this.derivationPath,!0)};signMessage=async(L)=>{let{Signature:y}=await import("ethers");await this.createTransportAndLedger();let _=await this.ledgerApp?.signPersonalMessage(this.derivationPath,L);if(!_)throw new i("wallet_ledger_signing_error");return _.r=`0x${_.r}`,_.s=`0x${_.s}`,y.from(_).serialized};sendTransaction=async(L)=>{if(!this.provider)throw new i("wallet_ledger_no_provider");let y=await this.signTransaction(L);return await this.provider.broadcastTransaction(y)};signTypedData=async(L,y,_,w)=>{let{buildEIP712DomainType:R}=await import("@swapkit/toolboxes/evm"),{Signature:G,TypedDataEncoder:N}=await import("ethers");await this.createTransportAndLedger();let{EIP712Domain:X,...O}=y,W=w??N.from(O).primaryType,T;try{T=await this.ledgerApp?.signEIP712Message(this.derivationPath,{domain:L,message:_,primaryType:W,types:{EIP712Domain:R(L),...O}})}catch(F){let M=F instanceof Error&&"statusCode"in F;if(!M||M&&F.statusCode===27013)throw F;let q=N.hashDomain(L).slice(2),H=N.from(O).hash(_).slice(2);T=await this.ledgerApp?.signEIP712HashedMessage(this.derivationPath,q,H)}if(!T)throw new i("wallet_ledger_signing_error");return T.r=`0x${T.r}`,T.s=`0x${T.s}`,G.from(T).serialized};signTransaction=async(L)=>{let{Transaction:y}=await import("ethers");await this.createTransportAndLedger();let _=L.nonce??void 0,w=_===void 0?await this.provider?.getTransactionCount(L.from||await this.getAddress()):void 0,R={chainId:L.chainId||this.chainId,data:L.data,gasLimit:L.gasLimit,...L.gasPrice&&{gasPrice:L.gasPrice},...!L.gasPrice&&L.maxFeePerGas&&{maxFeePerGas:L.maxFeePerGas,maxPriorityFeePerGas:L.maxPriorityFeePerGas},nonce:_!==void 0?Number(_.toString()):w,to:L.to?.toString(),type:L.type&&!Number.isNaN(L.type)?L.type:L.maxFeePerGas?2:0,value:L.value},G=y.from(R).unsignedSerialized.slice(2),{ledgerService:N}=await import("@ledgerhq/hw-app-eth"),X=await N.resolveTransaction(G,{},{erc20:!0,externalPlugins:!0}),O=await this.ledgerApp?.signTransaction(this.derivationPath,G,X);if(!O)throw new i("wallet_ledger_signing_error");let{r:W,s:T,v:F}=O;return y.from({...R,signature:{r:`0x${W}`,s:`0x${T}`,v:zL(F)}}).serialized}}var P0=(L)=>new z({...L,chainId:U.Arbitrum}),E0=(L)=>new z({...L,chainId:U.Aurora}),I0=(L)=>new z({...L,chainId:U.Avalanche}),v0=(L)=>new z({...L,chainId:U.Base}),b0=(L)=>new z({...L,chainId:U.Ethereum}),l0=(L)=>new z({...L,chainId:U.Gnosis}),g0=(L)=>new z({...L,chainId:U.Optimism}),c0=(L)=>new z({...L,chainId:U.Polygon}),h0=(L)=>new z({...L,chainId:U.BinanceSmartChain}),x0=(L)=>new z({...L,chainId:U.Monad}),d0=(L)=>new z({...L,chainId:U.XLayer}),u0=(L)=>new z({...L,chainId:U.Berachain});async function i0(L,y){let _=(await import("@ledgerhq/hw-app-near")).default,{Chain:w,NetworkDerivationPath:R,SwapKitError:G}=await import("@swapkit/helpers"),N=y??await f(),X=new _(N),O=(L||R[w.Near]).join("'/").concat("'"),{address:W,publicKey:T}=await X.getAddress(O);return{getAddress(){return Promise.resolve(W)},async getPublicKey(){let{PublicKey:M}=await import("@near-js/crypto");return M.fromString(`ed25519:${T}`)},signDelegateAction(M){return Promise.reject(new G("wallet_ledger_method_not_supported",{method:"signDelegateAction",wallet:"Ledger"}))},signNep413Message(M,q,H,D,S){return Promise.reject(new G("wallet_ledger_method_not_supported",{method:"signNep413Message",wallet:"Ledger"}))},async signTransaction(M){let{Signature:q,SignedTransaction:H}=await import("@near-js/transactions");try{let D=await X.signTransaction(M.encode(),O);if(!D)throw Error("Signature undefined");let S=new q({data:D,keyType:0}),v=new H({signature:S,transaction:M});return[D,v]}catch(D){throw new G("wallet_ledger_signing_error",{error:D})}}}}import{Chain as kL,derivationPathToString as mL,NetworkDerivationPath as KL,SwapKitError as b}from"@swapkit/helpers";class o0{derivationPath;ledgerApp=null;address=null;publicKey=null;injectedTransport;constructor(L,y){this.derivationPath=typeof L==="string"?L:mL(L||KL[kL.Sui]),this.injectedTransport=y}getLedgerPath(){return this.derivationPath.replace(/^m\//,"").replace(/\/(\d+)\/(\d+)$/,"/$1'/$2'")}async createTransportAndLedger(){if(this.ledgerApp)return;let L=this.injectedTransport??await f(),y=(await import("@ledgerhq/hw-app-sui")).default;this.ledgerApp=new y(L)}async connect(){if(await this.createTransportAndLedger(),!this.ledgerApp)throw new b("wallet_ledger_transport_error");let L=this.getLedgerPath(),y=await this.ledgerApp.getPublicKey(L);if(!y?.publicKey)throw new b("wallet_ledger_failed_to_get_address");return this.publicKey=y.publicKey,this.address=`0x${Buffer.from(y.address).toString("hex")}`,this.address}toSuiAddress(){if(!this.address)throw new b("wallet_ledger_failed_to_get_address");return this.address}async getAddress(){if(this.address)return this.address;return await this.connect()}async signTransaction(L){let y=L instanceof Uint8Array?L:L.transaction;if(await this.createTransportAndLedger(),!this.ledgerApp)throw new b("wallet_ledger_transport_error");if(!this.publicKey)throw new b("wallet_ledger_failed_to_get_address");try{let _=this.getLedgerPath(),w=new Uint8Array(3+y.length);w[0]=0,w[1]=0,w[2]=0,w.set(y,3);let R=await this.ledgerApp.signTransaction(_,w);if(!R?.signature)throw new b("wallet_ledger_signing_error");let G=this.publicKey.length===33?this.publicKey.slice(1):this.publicKey;if(G.length!==32)throw new b("wallet_ledger_signing_error",{error:"Invalid public key length"});let N=new Uint8Array(97);N[0]=0,N.set(R.signature,1),N.set(G,65);let X=Buffer.from(N).toString("base64");return{bytes:Buffer.from(y).toString("base64"),signature:X}}catch(_){throw new b("wallet_ledger_signing_error",{error:_})}}}var n0=(L,y)=>new o0(L,y);import{base64 as Z0}from"@scure/base";import{NetworkDerivationPath as VL,SwapKitError as $0}from"@swapkit/helpers";import{base64 as SL}from"@scure/base";import{SwapKitError as I}from"@swapkit/helpers";var s=(L)=>{if(L.length<64)throw new I("wallet_ledger_invalid_signature",{reason:"Too short"});if(L[0]!==48)throw new I("wallet_ledger_invalid_signature",{reason:"TLV encoding: expected first byte 0x30"});if(L[1]+2!==L.length)throw new I("wallet_ledger_invalid_signature",{reason:"signature length does not match TLV"});if(L[2]!==2)throw new I("wallet_ledger_invalid_signature",{reason:"TLV encoding: expected length type 0x02"});let y=L[3],_=L.slice(4,y+4);if(_.length===33&&_[0]===0)_=_.slice(1,33);else if(_.length===33)throw new I("wallet_ledger_invalid_signature",{reason:"r too long"});while(_.length<32)_.unshift(0);if(L[y+4]!==2)throw new I("wallet_ledger_invalid_signature",{reason:"TLV encoding: expected length type 0x02 for s"});let w=L[y+5];if(4+y+2+w!==L.length)throw new I("wallet_ledger_invalid_signature",{reason:"TLV byte lengths do not match message length"});let R=L.slice(y+6,L.length);if(R.length===33&&R[0]===0)R=R.slice(1,33);else if(R.length===33)throw new I("wallet_ledger_invalid_signature",{reason:"s too long"});while(R.length<32)R.unshift(0);if(_.length!==32||R.length!==32)throw new I("wallet_ledger_invalid_signature",{reason:"must be 32 bytes each"});return SL.encode(Buffer.concat([_,R]))};function AL(L){if(typeof L==="string")return L;let y=L.chain?.toUpperCase(),_=(L.symbol||L.ticker||"").toUpperCase();if(!(y&&_))return _||y||"";if(L.synth)return`${y}/${_}`;return`${y}.${_}`}function PL(L){return{...L,msgs:L.msgs.map((y)=>{if(!y.type.includes("MsgDeposit"))return y;let _=y.value.coins;if(!Array.isArray(_))return y;return{...y,value:{...y.value,coins:_.map((w)=>({...w,asset:AL(w.asset)}))}}})}}class j0 extends u{pubKey=null;derivationPath;constructor(L=VL.THOR,y){super(y);this.chain="thor",this.derivationPath=L}get pubkey(){return this.pubKey}connect=async()=>{await this.checkOrCreateTransportAndLedger();let{compressed_pk:L,bech32_address:y}=await this.getAddressAndPubKey();return this.pubKey=Z0.encode(L),y};getAddressAndPubKey=async()=>{await this.checkOrCreateTransportAndLedger(!0);let L=await this.ledgerApp.getAddressAndPubKey(this.derivationPath,this.chain);return this.validateResponse(L.return_code,L.error_message),L};showAddressAndPubKey=async()=>{await this.checkOrCreateTransportAndLedger(!0);let L=await this.ledgerApp.showAddressAndPubKey(this.derivationPath,this.chain);return this.validateResponse(L.return_code,L.error_message),L};signTransaction=async(L,y="0")=>{await this.checkOrCreateTransportAndLedger(!0);let{return_code:_,error_message:w,signature:R}=await this.ledgerApp.sign(this.derivationPath,L);if(!this.pubKey)throw new $0("wallet_ledger_pubkey_not_found");return this.validateResponse(_,w),[{pub_key:{type:"tendermint/PubKeySecp256k1",value:this.pubKey},sequence:y,signature:s(R)}]};signAmino=async(L,y)=>{await this.checkOrCreateTransportAndLedger(!0);let _=(await this.getAccounts()).find((T)=>T.address===L);if(!_)throw new $0("wallet_ledger_address_not_found",{address:L});let w=await import("@cosmjs/amino"),R=w.encodeSecp256k1Signature??w.default?.encodeSecp256k1Signature,G=w.serializeSignDoc??w.default?.serializeSignDoc,N=PL(y),{return_code:X,error_message:O,signature:W}=await this.ledgerApp.sign(this.derivationPath,G(N));return this.validateResponse(X,O),{signature:R(_.pubkey,Z0.decode(s(W))),signed:y}};getAccounts=async()=>{await this.checkOrCreateTransportAndLedger(!0);let{bech32_address:L,compressed_pk:y}=await this.getAddressAndPubKey();return this.pubKey=Z0.encode(y),[{address:L,algo:"secp256k1",pubkey:y}]};sign=async(L)=>{await this.checkOrCreateTransportAndLedger(!0);let{return_code:y,error_message:_,signature:w}=await this.ledgerApp.sign(this.derivationPath,L);if(!this.pubKey)throw new $0("wallet_ledger_pubkey_not_found");return this.validateResponse(y,_),s(w)}}import{derivationPathToString as EL,NetworkDerivationPath as IL,SwapKitError as o}from"@swapkit/helpers";class p0{derivationPath;ledgerApp=null;ledgerTimeout=50000;injectedTransport;constructor(L,y){this.derivationPath=typeof L==="string"?L:EL(L||IL.TRON),this.injectedTransport=y}checkOrCreateTransportAndLedger=async()=>{if(this.ledgerApp)return;await this.createTransportAndLedger()};createTransportAndLedger=async()=>{let L=this.injectedTransport??await f(),y=(await import("@ledgerhq/hw-app-trx")).default;this.ledgerApp=new y(L)};getAddress=async()=>{let L=await this.getAddressAndPubKey();if(!L)throw new o("wallet_ledger_failed_to_get_address");return L.address};getAddressAndPubKey=async()=>{await this.createTransportAndLedger();let L=await this.ledgerApp?.getAddress(this.derivationPath);if(!L)throw new o("wallet_ledger_failed_to_get_address");return{address:L.address,publicKey:L.publicKey}};showAddressAndPubKey=async()=>{return await this.createTransportAndLedger(),this.ledgerApp?.getAddress(this.derivationPath,!0)};signTransaction=async(L)=>{if(await this.createTransportAndLedger(),!this.ledgerApp)throw new o("wallet_ledger_transport_error");let y=JSON.stringify(L);try{let _=await this.ledgerApp.signTransaction(this.derivationPath,y,[]);if(!_)throw new o("wallet_ledger_signing_error");return{...L,signature:[_]}}catch(_){throw new o("wallet_ledger_signing_error",{error:_})}}}var a0=(L,y)=>new p0(L,y);import{hex as L0}from"@scure/base";import{derivationPathToString as vL,getWalletFormatFor as bL,SwapKitError as M0}from"@swapkit/helpers";var e0=["bitcoin-cash","dash","dogecoin","zcash"],t0=({tx:L,inputUtxos:y,btcApp:_,derivationPath:w,chain:R},G)=>{let N=y.map((F)=>{return[_.splitTransaction(F.txHex||"",!e0.includes(R),R==="zcash"),F.index,void 0,void 0]}),X=L0.encode(L.unsignedTx),O=_.splitTransaction(X,!0),W=_.serializeTransactionOutputs(O).toString("hex"),T={additionals:["bech32"],associatedKeysets:N.map(()=>w),inputs:N,outputScriptHex:W,segwit:!0,useTrustedInputForSegwit:!0};return _.createPaymentTransaction({...T,...G})},lL=({tx:L,inputUtxos:y,btcApp:_,derivationPaths:w,chain:R},G)=>{if(w.length!==y.length)throw new M0("wallet_ledger_invalid_params",{message:`Derivation paths count (${w.length}) must match inputs count (${y.length})`});let N=y.map((F)=>{return[_.splitTransaction(F.txHex||"",!e0.includes(R),R==="zcash"),F.index,void 0,void 0]}),X=L0.encode(L.unsignedTx),O=_.splitTransaction(X,!0),W=_.serializeTransactionOutputs(O).toString("hex"),T={additionals:["bech32"],associatedKeysets:w,inputs:N,outputScriptHex:W,segwit:!0,useTrustedInputForSegwit:!0};return _.createPaymentTransaction({...T,...G})},h=({chain:L,additionalSignParams:y})=>{return(_,w)=>{let R,G=null;async function N(){G||=w??await f();let F=(await import("@ledgerhq/hw-app-btc")).default;return R||=new F({currency:L,transport:G}),R}async function X(){return R||await N()}async function O(){if(!w)await G?.close?.();R=void 0,G=null}let W=typeof _==="string"?_:vL(_),T=bL(W);return{connect:async()=>{await X()},disconnect:O,getAddress:async()=>{let{toCashAddress:F}=await import("@swapkit/toolboxes/utxo"),M=await X(),{bitcoinAddress:q}=await M.getWalletPublicKey(W,{format:T});if(!q)throw new M0("wallet_ledger_get_address_error",{message:`Cannot get ${L} address from ledger derivation path: ${W}`});return L==="bitcoin-cash"&&T==="legacy"?F(q).replace(/(bchtest:|bitcoincash:)/,""):q},getExtendedPublicKey:async(F="84'/0'/0'",M=76067358)=>{return(await X()).getWalletXpub({path:F,xpubVersion:M})},signPCZT:async(F)=>{if(L!=="zcash")throw new M0("wallet_ledger_chain_not_supported",{message:"PCZT signing is only supported for Zcash"});let M=await X(),{ZcashTransaction:q,Script:H}=await import("@swapkit/utxo-signer"),D=F.getGlobal(),S=new q({consensusBranchId:D.consensusBranchId,expiryHeight:D.expiryHeight,lockTime:D.lockTime,version:D.txVersion,versionGroupId:D.versionGroupId}),v=[];for(let j=0;j<F.inputsLength;j++){let $=F.getInput(j);S.addInput({index:$.index,script:new Uint8Array,sequence:$.sequence??4294967295,txid:$.txid,value:$.value}),v.push({hash:L0.encode(new Uint8Array([...$.txid].reverse())),index:$.index,txHex:gL($,D),value:Number($.value),witnessUtxo:{script:$.scriptPubkey,value:Number($.value)}})}for(let j=0;j<F.outputsLength;j++){let $=F.getOutput(j);S.addOutput({amount:$.value,script:$.scriptPubkey})}let _0=await t0({btcApp:M,chain:L,derivationPath:W,inputUtxos:v,tx:S},{...y,expiryHeight:(()=>{let j=Buffer.alloc(4);return j.writeUInt32LE(D.expiryHeight),j})(),lockTime:D.lockTime}),Q=q.fromHex(_0,{allowUnknownOutputs:!0}),C=F.clone();for(let j=0;j<Q.inputsLength;j++){let $=Q.getInput(j);if($.script&&$.script.length>0){let k=H.decode($.script);if(k.length>=2)C.addSignature(j,k[1],k[0])}}return C},signTransaction:async(F,M)=>{let q=await X();return t0({btcApp:q,chain:L,derivationPath:W,inputUtxos:M,tx:F},y)},signTransactionWithMultiplePaths:async(F,M,q)=>{let H=await X();return lL({btcApp:H,chain:L,derivationPaths:q,inputUtxos:M,tx:F},y)}}}};function gL(L,y){let _=[],w=(y.txVersion|2147483648)>>>0;_.push(w&255,w>>8&255,w>>16&255,w>>24&255);let R=y.versionGroupId;_.push(R&255,R>>8&255,R>>16&255,R>>24&255),_.push(0);let G=L.index+1;if(G<253)_.push(G);else _.push(253,G&255,G>>8&255);for(let O=0;O<L.index;O++)_.push(0,0,0,0,0,0,0,0),_.push(0);let N=L.value;_.push(Number(N&0xffn),Number(N>>8n&0xffn),Number(N>>16n&0xffn),Number(N>>24n&0xffn),Number(N>>32n&0xffn),Number(N>>40n&0xffn),Number(N>>48n&0xffn),Number(N>>56n&0xffn));let X=L.scriptPubkey;if(X.length<253)_.push(X.length);else _.push(253,X.length&255,X.length>>8&255);for(let O of X)_.push(O);return _.push(y.lockTime&255,y.lockTime>>8&255,y.lockTime>>16&255,y.lockTime>>24&255),_.push(y.expiryHeight&255,y.expiryHeight>>8&255,y.expiryHeight>>16&255,y.expiryHeight>>24&255),_.push(0,0,0,0,0,0,0,0),_.push(0),_.push(0),_.push(0),L0.encode(new Uint8Array(_))}var r0=h({chain:"bitcoin"}),s0=h({chain:"litecoin"}),LL=h({additionalSignParams:{additionals:["abc"],segwit:!1,sigHashType:65},chain:"bitcoin-cash"}),yL=h({additionalSignParams:{additionals:[],segwit:!1,useTrustedInputForSegwit:!1},chain:"dogecoin"}),_L=h({additionalSignParams:{additionals:[],segwit:!1,useTrustedInputForSegwit:!1},chain:"dash"}),RL=h({additionalSignParams:{additionals:["zcash","sapling"],expiryHeight:(()=>{let L=Buffer.alloc(4);return L.writeUInt32LE(0),L})(),lockTime:0,segwit:!1,useTrustedInputForSegwit:!1},chain:"zcash"});import cL from"@ledgerhq/hw-app-xrp";import{Chain as hL,derivationPathToString as xL,NetworkDerivationPath as dL}from"@swapkit/helpers";import{encode as GL}from"ripple-binary-codec";var uL=2147483648;function iL(L){let y={};for(let _ in L)if(L[_]!==null&&L[_]!==void 0)y[_]=L[_];return y}function oL(L){return new cL(L)}var wL=async(L,y)=>{let _=xL(L||dL[hL.Ripple]),w=y??await f(),R=oL(w),{address:G,publicKey:N}=await R.getAddress(_);async function X(O){let{hashes:W}=await import("@swapkit/toolboxes/ripple"),F={...iL(O),Flags:O.Flags||uL,SigningPubKey:N.toUpperCase()},M=GL(F),q=await R.signTransaction(_,M),H=GL({...F,TxnSignature:q});return{hash:W.hashSignedTx(H),tx_blob:H}}return{getAddress:()=>G,signTransaction:X}};var K=async({chain:L,derivationPath:y,transport:_})=>{let{match:w}=await import("ts-pattern");return w(L).returnType().with(J.THORChain,()=>Promise.resolve(new j0(y,_))).with(J.Cosmos,()=>Promise.resolve(new J0(y,_))).with(J.Bitcoin,()=>Promise.resolve(r0(y,_))).with(J.BitcoinCash,()=>Promise.resolve(LL(y,_))).with(J.Dash,()=>Promise.resolve(_L(y,_))).with(J.Dogecoin,()=>Promise.resolve(yL(y,_))).with(J.Litecoin,()=>Promise.resolve(s0(y,_))).with(J.Zcash,()=>Promise.resolve(RL(y,_))).with(J.Ripple,()=>Promise.resolve(wL(y,_))).with(J.Tron,()=>Promise.resolve(a0(y,_))).with(J.Sui,()=>Promise.resolve(n0(y,_))).with(J.Near,()=>{return Promise.resolve(i0(y,_))}).with(J.Arbitrum,J.Aurora,J.Avalanche,J.Berachain,J.BinanceSmartChain,J.Ethereum,J.Gnosis,J.Monad,J.Optimism,J.Polygon,J.Base,J.XLayer,async()=>{let{getProvider:R}=await import("@swapkit/toolboxes/evm"),G={derivationPath:y,provider:await R(L),transport:_};return w(L).with(J.BinanceSmartChain,()=>h0(G)).with(J.Avalanche,()=>I0(G)).with(J.Arbitrum,()=>P0(G)).with(J.Berachain,()=>u0(G)).with(J.Optimism,()=>g0(G)).with(J.Polygon,()=>c0(G)).with(J.Base,()=>v0(G)).with(J.Aurora,()=>E0(G)).with(J.Gnosis,()=>l0(G)).with(J.Monad,()=>x0(G)).with(J.XLayer,()=>d0(G)).otherwise(()=>b0(G))}).otherwise(()=>{throw new nL("wallet_chain_not_supported",{chain:L,wallet:pL.LEDGER})})};var wy=Ry({connect:({addChain:L,supportedChains:y,walletType:_})=>async function(R,G,{address:N,transport:X}={}){let[O]=aL({chains:R,supportedChains:y,walletType:_});if(!O)return!1;let W=G??eL[O],T=await Xy({address:N,chain:O,derivationPath:W,transport:X});return L({...T,chain:O,walletType:Q0.LEDGER}),!0},directSigningSupport:{[B.Arbitrum]:!0,[B.Aurora]:!0,[B.Avalanche]:!0,[B.Base]:!0,[B.Berachain]:!0,[B.BinanceSmartChain]:!0,[B.Ethereum]:!0,[B.Gnosis]:!0,[B.Monad]:!0,[B.Bitcoin]:!0,[B.BitcoinCash]:!0,[B.Cosmos]:!0,[B.Dash]:!0,[B.Dogecoin]:!0,[B.Litecoin]:!0,[B.Near]:!0,[B.Optimism]:!0,[B.Polygon]:!0,[B.Ripple]:!0,[B.Sui]:!0,[B.THORChain]:!0,[B.Tron]:!0,[B.XLayer]:!0},getExtendedPublicKey:Ny,name:"connectLedger",supportedChains:[B.Arbitrum,B.Aurora,B.Avalanche,B.Base,B.Berachain,B.BinanceSmartChain,B.Bitcoin,B.BitcoinCash,B.Cosmos,B.Dash,B.Dogecoin,B.Ethereum,B.Gnosis,B.Litecoin,B.Monad,B.Near,B.Optimism,B.Polygon,B.Ripple,B.Sui,B.THORChain,B.XLayer,B.Tron,B.Zcash],walletType:Q0.LEDGER}),Y_=Gy(wy);function By(L,y="t"){if(!L?.includes("=:"))return L;let _=L.includes(`:${y}:`)?L.split(`:${y}:`)[0]:L;return _?.substring(0,_.lastIndexOf(":"))}async function Ny(L,y,{accountIndex:_}={}){if(![B.BitcoinCash,B.Bitcoin,B.Dash,B.Dogecoin,B.Litecoin,B.Zcash].includes(L))throw new x("wallet_chain_not_supported",{chain:L,wallet:Q0.LEDGER});let w=L,R=await K({chain:w,derivationPath:y});if(!R.getExtendedPublicKey)return;let G=q0({accountIndex:_,chain:w,derivationPath:y}),N=y0(G),X=L===B.Bitcoin||L===B.Litecoin?N:N.replace(/^m\//,""),O=XL(w).bip32.public;try{let W=await R.getExtendedPublicKey(X,O);return{accountIndex:Y0(G),path:N,xpub:W}}finally{await R.disconnect?.()}}async function Xy({address:L,chain:y,derivationPath:_,transport:w}){switch(y){case B.BitcoinCash:case B.Bitcoin:case B.Dash:case B.Dogecoin:case B.Litecoin:case B.Zcash:{let H=function(Q={}){return q(Q)},{getUtxoToolbox:R}=await import("@swapkit/toolboxes/utxo"),G=y,N=await K({chain:y,derivationPath:_,transport:w}),X=L??await P({chain:y,ledgerClient:N}),O,W;if(y===B.Bitcoin){let{BitcoinPsbtLedger:Q}=await import("../chunk-jttnd211.js"),C=Q(_,w);O={getAddress:C.getAddress,signTransaction:C.signTransaction}}else if(y===B.BitcoinCash||y===B.Dogecoin||y===B.Dash||y===B.Litecoin){let{createLegacyPsbtSigner:Q,signLegacyPsbtTransaction:C}=await import("../chunk-bwf31zxr.js");O=Q({address:X,chain:G,legacyClient:N}),W=async(j)=>{let $=await C({chain:G,legacyClient:N,tx:j});return T.broadcastTx($)}}let T=O?await R(G,{signer:O}):R(G),F=W??T.signAndBroadcastTransaction,M=async(Q)=>{let C=Q.feeRate||(await T.getFeeRates())[BL.Average],j=[B.Bitcoin].includes(y)?Q.memo:By(Q.memo),{tx:$,inputs:k}=await T.createTransaction({...Q,feeRate:C,fetchTxHex:!0,memo:j,sender:X}),V=await N.signTransaction($,k);return await T.broadcastTx(V)};async function q({accountIndex:Q}={}){if(!N.getExtendedPublicKey)return;let C=q0({accountIndex:Q,chain:G,derivationPath:_}),j=y0(C),$=y===B.Bitcoin||y===B.Litecoin?j:j.replace(/^m\//,""),k=XL(G).bip32.public,V=await N.getExtendedPublicKey($,k);return{accountIndex:Y0(C),path:j,xpub:V}}async function D({accountIndex:Q,index:C,change:j=!1}){try{let $=yy({accountIndex:Q,chain:G,change:j,derivationPath:_,index:C}),k=await K({chain:G,derivationPath:$,transport:w}),V=await P({chain:G,ledgerClient:k});return{accountIndex:Y0($),address:V,change:j,index:C,path:y0($),pubkey:""}}catch{return}}async function S({accountIndex:Q,count:C,startIndex:j=0,change:$=!1}){return NL("count",C),NL("startIndex",j),(await Promise.all(Array.from({length:C},(V,n)=>D({accountIndex:Q,change:$,index:j+n})))).filter((V)=>!!V)}let v=Ly({chain:G,deriveAddress:D,getBalance:T.getBalance,getUtxos:(Q)=>_y(G).getUtxos({address:Q,fetchTxHex:!0})});async function _0({utxos:Q,recipient:C,assetValue:j,memo:$,feeRate:k,feeOptionKey:V,changeAddress:n}){if(!Q.length)throw new x("wallet_ledger_invalid_params",{message:"No UTXOs provided for multi-address transfer"});let OL=k||(await T.getFeeRates())[V||BL.Fast],R0=$?sL($):null,D0=[{address:C,value:j.getBaseValue("number")}];if(R0)D0.push({script:R0,value:0});let TL=Q.map(({hash:a,index:t,value:G0,txHex:w0,witnessUtxo:B0})=>({hash:a,index:t,txHex:w0,value:G0,witnessUtxo:B0})),{inputs:p,outputs:C0}=T.accumulative({chain:G,feeRate:OL,inputs:TL,outputs:D0});if(!(p&&C0))throw new x("wallet_ledger_connection_error",{message:"Insufficient balance for multi-address transfer"});let{Transaction:FL}=await import("@swapkit/utxo-signer"),H0=new FL({allowLegacyWitnessUtxo:!0,version:1}),WL=n||Q[0]?.address||C;rL({chain:G,compiledMemo:R0,inputs:p,outputs:C0,sender:WL,tx:H0});let JL=q0({chain:G,derivationPath:_}),ZL=p.map((a)=>{let t=Q.find((f0)=>f0.hash===a.hash&&f0.index===a.index),G0=t?.derivationIndex??0,w0=t?.isChange??!1,B0=[...JL,Number(w0),G0];return y0(B0)});if(!N.signTransactionWithMultiplePaths)throw new x("wallet_ledger_method_not_supported",{method:"signTransactionWithMultiplePaths"});let $L=await N.signTransactionWithMultiplePaths(H0,p,ZL);return T.broadcastTx($L)}return{...T,...v,address:X,deriveAddressAtIndex:D,deriveAddresses:S,getExtendedPublicKey:H,getExtendedPublicKeyInfo:q,signAndBroadcastTransaction:F,transfer:M,transferFromMultipleAddresses:_0}}case B.Ethereum:case B.Avalanche:case B.Arbitrum:case B.Berachain:case B.Optimism:case B.Polygon:case B.BinanceSmartChain:case B.Base:case B.Aurora:case B.Gnosis:case B.Monad:case B.XLayer:{let{getEvmToolboxAsync:R}=await import("@swapkit/toolboxes/evm"),G=await K({chain:y,derivationPath:_,transport:w}),N=await P({chain:y,ledgerClient:G});return{...await R(y,{signer:G}),address:N}}case B.Cosmos:{let{createSigningStargateClient:R,getMsgSendDenom:G,getCosmosToolbox:N}=await import("@swapkit/toolboxes/cosmos"),X=await K({chain:y,derivationPath:_,transport:w}),O=await P({chain:y,ledgerClient:X});return{...await N(B.Cosmos,{signer:X}),address:O,transfer:async({assetValue:F,recipient:M,memo:q})=>{if(!F)throw new x("wallet_ledger_invalid_asset");let H={amount:[{amount:F.getBaseValue("string"),denom:G(`u${F.symbol}`).toLowerCase()}],fromAddress:O,toAddress:M},D=await tL(y),S=await R(D,X,"0.007uatom"),{transactionHash:v}=await S.signAndBroadcast(O,[{typeUrl:"/cosmos.bank.v1beta1.MsgSend",value:H}],2,q);return v}}}case B.THORChain:{let R=await K({chain:y,derivationPath:_,transport:w}),{getCosmosToolbox:G}=await import("@swapkit/toolboxes/cosmos"),N=G(y,{signer:R}),X=await P({chain:y,ledgerClient:R}),{sign:O}=R;return{...N,address:X,signMessage:O}}case B.Near:{let{getNearToolbox:R}=await import("@swapkit/toolboxes/near"),G=await K({chain:y,derivationPath:_,transport:w}),N=await G.getAddress();return{...R({signer:G}),address:N}}case B.Ripple:{let{getRippleToolbox:R}=await import("@swapkit/toolboxes/ripple"),G=await K({chain:y,derivationPath:_,transport:w}),N=G.getAddress();return{...R({signer:G}),address:N}}case B.Tron:{let{getTronToolbox:R}=await import("@swapkit/toolboxes/tron"),G=await K({chain:y,derivationPath:_,transport:w}),N=await P({chain:y,ledgerClient:G});return{...R({signer:G}),address:N}}case B.Sui:{let{getSuiToolbox:R}=await import("@swapkit/toolboxes/sui"),G=await K({chain:y,derivationPath:_,transport:w}),N=await P({chain:y,ledgerClient:G});return{...R({signer:G}),address:N}}default:throw new x("wallet_ledger_chain_not_supported",{chain:y})}}export{wy as ledgerWallet,Ny as getLedgerExtendedPublicKey,Y_ as LEDGER_SUPPORTED_CHAINS};
|
|
2
2
|
|
|
3
|
-
//# debugId=
|
|
3
|
+
//# debugId=5EB80B38E2BF7E9264756E2164756E21
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
package/dist/ledger/index.js.map
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"import type Transport from \"@ledgerhq/hw-transport\";\nimport { SwapKitError } from \"@swapkit/helpers\";\n\nimport {\n CHUNK_SIZE,\n CLA,\n ERROR_CODE,\n errorCodeToString,\n getVersion,\n INS,\n P1_VALUES,\n P2_VALUES,\n processErrorResponse,\n} from \"./common\";\nimport {\n publicKeyv1,\n publicKeyv2,\n serializePathv1,\n serializePathv2,\n signSendChunkv1,\n signSendChunkv2,\n} from \"./helpers\";\n\nexport class THORChainApp {\n transport: Transport;\n versionResponse: any;\n\n constructor(transport: any) {\n if (!transport) {\n throw new SwapKitError(\"wallet_ledger_transport_not_defined\");\n }\n\n this.transport = transport;\n }\n\n static serializeHRP(hrp: string) {\n if (hrp == null || hrp.length < 3 || hrp.length > 83) {\n throw new SwapKitError(\"wallet_ledger_invalid_params\", { reason: \"Invalid HRP\" });\n }\n const buf = Buffer.alloc(1 + hrp.length);\n buf.writeUInt8(hrp.length, 0);\n buf.write(hrp, 1);\n return buf;\n }\n\n async serializePath(path: number[]) {\n this.versionResponse = await getVersion(this.transport);\n\n if (this.versionResponse.return_code !== ERROR_CODE.NoError) {\n throw this.versionResponse;\n }\n\n switch (this.versionResponse.major) {\n case 1:\n return serializePathv1(path);\n case 2:\n return serializePathv2(path);\n default:\n return Buffer.alloc(0);\n }\n }\n\n async signGetChunks(path: number[], buffer: Buffer) {\n const serializedPath = await this.serializePath(path);\n\n const chunks = [];\n chunks.push(serializedPath);\n\n for (let i = 0; i < buffer.length; i += CHUNK_SIZE) {\n let end = i + CHUNK_SIZE;\n if (i > buffer.length) {\n end = buffer.length;\n }\n chunks.push(buffer.slice(i, end));\n }\n\n return chunks;\n }\n\n async getVersion() {\n try {\n this.versionResponse = await getVersion(this.transport);\n return this.versionResponse;\n } catch (e) {\n return processErrorResponse(e);\n }\n }\n\n appInfo() {\n return this.transport.send(0xb0, 0x01, 0, 0).then((response: any) => {\n const returnCode = response.readUInt16BE(response.length - 2);\n\n let appName = \"\";\n let appVersion = \"\";\n let flagLen = 0;\n let flagsValue = 0;\n\n if (response[0] !== 1) {\n // Ledger responds with format ID 1. There is no spec for any format != 1\n return { error_message: \"response format ID not recognized\", return_code: 0x9001 };\n }\n\n const appNameLen = response[1];\n appName = response.slice(2, 2 + appNameLen).toString(\"ascii\");\n let idx = 2 + appNameLen;\n const appVersionLen = response[idx];\n idx += 1;\n appVersion = response.slice(idx, idx + appVersionLen).toString(\"ascii\");\n idx += appVersionLen;\n const appFlagsLen = response[idx];\n idx += 1;\n flagLen = appFlagsLen;\n flagsValue = response[idx];\n\n return {\n appName,\n appVersion,\n error_message: errorCodeToString(returnCode),\n flag_onboarded: (flagsValue & 4) !== 0,\n flag_pin_validated: (flagsValue & 128) !== 0,\n flag_recovery: (flagsValue & 1) !== 0,\n flag_signed_mcu_code: (flagsValue & 2) !== 0,\n flagLen,\n flagsValue,\n return_code: returnCode,\n };\n }, processErrorResponse);\n }\n\n deviceInfo() {\n return this.transport\n .send(0xe0, 0x01, 0, 0, Buffer.from([]), [ERROR_CODE.NoError, 0x6e00])\n .then((response: any) => {\n const errorCodeData = response.slice(-2);\n const returnCode = errorCodeData[0] * 256 + errorCodeData[1];\n\n if (returnCode === 0x6e00) {\n return { error_message: \"This command is only available in the Dashboard\", return_code: returnCode };\n }\n\n const targetId = response.slice(0, 4).toString(\"hex\");\n\n let pos = 4;\n const secureElementVersionLen = response[pos];\n pos += 1;\n const seVersion = response.slice(pos, pos + secureElementVersionLen).toString();\n pos += secureElementVersionLen;\n\n const flagsLen = response[pos];\n pos += 1;\n const flag = response.slice(pos, pos + flagsLen).toString(\"hex\");\n pos += flagsLen;\n\n const mcuVersionLen = response[pos];\n pos += 1;\n // Patch issue in mcu version\n let tmp = response.slice(pos, pos + mcuVersionLen);\n if (tmp[mcuVersionLen - 1] === 0) {\n tmp = response.slice(pos, pos + mcuVersionLen - 1);\n }\n const mcuVersion = tmp.toString();\n\n return {\n error_message: errorCodeToString(returnCode),\n flag,\n mcuVersion,\n return_code: returnCode,\n seVersion,\n // //\n targetId,\n };\n }, processErrorResponse);\n }\n\n async publicKey(path: number[]) {\n try {\n const serializedPath = await this.serializePath(path);\n\n switch (this.versionResponse.major) {\n case 1:\n return publicKeyv1(this, serializedPath);\n case 2: {\n const data = Buffer.concat([THORChainApp.serializeHRP(\"thor\"), serializedPath]);\n return publicKeyv2(this, data);\n }\n default:\n return { error_message: \"App Version is not supported\", return_code: 0x6400 };\n }\n } catch (e) {\n return processErrorResponse(e);\n }\n }\n\n async getAddressAndPubKey(path: number[], hrp: string, showInDevice = false) {\n try {\n const serializedPath = await this.serializePath(path);\n const data = Buffer.concat([THORChainApp.serializeHRP(hrp), serializedPath]);\n const response = await this.transport.send(\n CLA,\n INS.GET_ADDR_SECP256K1,\n showInDevice ? P1_VALUES.SHOW_ADDRESS_IN_DEVICE : P1_VALUES.ONLY_RETRIEVE,\n 0,\n data,\n [ERROR_CODE.NoError],\n );\n\n const compressedPk = Buffer.from(response.slice(0, 33));\n const bech32Address = Buffer.from(response.slice(33, -2)).toString();\n const returnCode = response.readUInt16BE(response.length - 2);\n\n return {\n bech32_address: bech32Address,\n compressed_pk: compressedPk,\n error_message: errorCodeToString(returnCode),\n return_code: returnCode,\n };\n } catch (err) {\n return processErrorResponse(err);\n }\n }\n\n showAddressAndPubKey(path: number[], hrp: string) {\n return this.getAddressAndPubKey(path, hrp, true);\n }\n\n signSendChunk(chunkIdx: number, chunkNum: number, chunk: Buffer, txType = P2_VALUES.JSON) {\n switch (this.versionResponse.major) {\n case 1:\n return signSendChunkv1(this, chunkIdx, chunkNum, chunk, txType);\n case 2:\n return signSendChunkv2(this, chunkIdx, chunkNum, chunk, txType);\n default:\n return { error_message: \"App Version is not supported\", return_code: 0x6400 };\n }\n }\n\n async sign(path: number[], message: string, txType = P2_VALUES.JSON) {\n const buffer = Buffer.from(message);\n let chunks: Buffer[] = [];\n let response: any;\n try {\n chunks = await this.signGetChunks(path, buffer);\n response = await this.signSendChunk(1, chunks.length, chunks[0] as Buffer, txType);\n } catch (error) {\n processErrorResponse(error);\n }\n let result = { error_message: response.error_message, return_code: response.return_code, signature: null };\n\n for (let i = 1; i < chunks.length; i += 1) {\n result = await this.signSendChunk(1 + i, chunks.length, chunks[i] as Buffer, txType);\n if (result.return_code !== ERROR_CODE.NoError) {\n break;\n }\n }\n\n return { error_message: result.error_message, return_code: result.return_code, signature: result.signature };\n }\n}\n",
|
|
11
11
|
"export const CLA = 0x55;\nexport const CHUNK_SIZE = 250;\nexport const APP_KEY = \"CSM\";\n\nexport const INS = {\n GET_ADDR_SECP256K1: 0x04,\n GET_VERSION: 0x00,\n INS_PUBLIC_KEY_SECP256K1: 0x01, // Obsolete\n SIGN_SECP256K1: 0x02,\n};\n\nexport const PAYLOAD_TYPE = { ADD: 0x01, INIT: 0x00, LAST: 0x02 };\n\nexport const P1_VALUES = { ONLY_RETRIEVE: 0x00, SHOW_ADDRESS_IN_DEVICE: 0x01 };\n\nexport const P2_VALUES = { JSON: 0x0 };\n\nexport const ERROR_CODE = { NoError: 0x9000 };\n\nconst ERROR_DESCRIPTION: any = {\n 1: \"U2F: Unknown\",\n 2: \"U2F: Bad request\",\n 3: \"U2F: Configuration unsupported\",\n 4: \"U2F: Device Ineligible\",\n 5: \"U2F: Timeout\",\n 14: \"Timeout\",\n 25600: \"Execution Error\",\n 26368: \"Wrong Length\",\n 26626: \"Error deriving keys\",\n 27010: \"Empty Buffer\",\n 27011: \"Output buffer too small\",\n 27012: \"Data is invalid\",\n 27013: \"Conditions not satisfied\",\n 27014: \"Transaction rejected\",\n 27264: \"Bad key handle\",\n 27392: \"Invalid P1/P2\",\n 27904: \"Instruction not supported\",\n 28160: \"App does not seem to be open\",\n 28416: \"Unknown error\",\n 28417: \"Sign/verify error\",\n 36864: \"No errors\",\n 36865: \"Device is busy\",\n};\n\nexport function errorCodeToString(statusCode: number) {\n if (statusCode in ERROR_DESCRIPTION) return ERROR_DESCRIPTION[statusCode];\n return `Unknown Status Code: ${statusCode}`;\n}\n\nfunction isDict(v: any) {\n return typeof v === \"object\" && v !== null && !Array.isArray(v) && !(v instanceof Date);\n}\n\nexport function processErrorResponse(response: any) {\n if (response) {\n if (isDict(response)) {\n if (Object.hasOwn(response, \"statusCode\")) {\n return { error_message: errorCodeToString(response.statusCode), return_code: response.statusCode };\n }\n\n if (Object.hasOwn(response, \"return_code\") && Object.hasOwn(response, \"error_message\")) {\n return response;\n }\n }\n return { error_message: response.toString(), return_code: 0xffff };\n }\n\n return { error_message: response.toString(), return_code: 0xffff };\n}\n\nexport function getVersion(transport: any) {\n return transport.send(CLA, INS.GET_VERSION, 0, 0).then((response: any) => {\n const errorCodeData = response.slice(-2);\n const returnCode = errorCodeData[0] * 256 + errorCodeData[1];\n\n let targetId = 0;\n if (response.length >= 9) {\n targetId = (response[5] << 24) + (response[6] << 16) + (response[7] << 8) + (response[8] << 0);\n }\n\n return {\n device_locked: response[4] === 1,\n error_message: errorCodeToString(returnCode),\n major: response[1],\n minor: response[2],\n patch: response[3],\n return_code: returnCode,\n target_id: targetId.toString(16),\n // ///\n test_mode: response[0] !== 0,\n };\n }, processErrorResponse);\n}\n",
|
|
12
12
|
"import { SwapKitError } from \"@swapkit/helpers\";\nimport { CLA, ERROR_CODE, errorCodeToString, INS, P2_VALUES, PAYLOAD_TYPE, processErrorResponse } from \"./common\";\n\nexport function serializePathv1(path: number[]) {\n if (path == null || path.length < 3) {\n throw new SwapKitError(\"wallet_ledger_invalid_params\", { reason: \"Path too short\" });\n }\n if (path.length > 10) {\n throw new SwapKitError(\"wallet_ledger_invalid_params\", { reason: \"Path too long\" });\n }\n const buf = Buffer.alloc(1 + 4 * path.length);\n buf.writeUInt8(path.length, 0);\n for (let i = 0; i < path.length; i += 1) {\n let v = path[i] || 0;\n if (i < 3) {\n // eslint-disable-next-line no-bitwise\n v |= 0x80000000; // Harden\n }\n buf.writeInt32LE(v, 1 + i * 4);\n }\n return buf;\n}\n\nexport function signSendChunkv1(app: any, chunkIdx: number, _chunkNum: number, chunk: Buffer, txType = P2_VALUES.JSON) {\n return app.transport\n .send(CLA, INS.SIGN_SECP256K1, chunkIdx, txType, chunk, [ERROR_CODE.NoError, 0x6984, 0x6a80])\n .then((response: any) => {\n const errorCodeData = response.slice(-2);\n const returnCode = errorCodeData[0] * 256 + errorCodeData[1];\n let errorMessage = errorCodeToString(returnCode);\n\n if (returnCode === 0x6a80 || returnCode === 0x6984) {\n errorMessage = `${errorMessage} : ${response.slice(0, response.length - 2).toString(\"ascii\")}`;\n }\n\n let signature: any = null;\n if (response.length > 2) {\n signature = response.slice(0, response.length - 2);\n }\n\n return { error_message: errorMessage, return_code: returnCode, signature };\n }, processErrorResponse);\n}\n\nfunction compressPublicKey(publicKey: Buffer) {\n if (publicKey.length !== 65) {\n throw new SwapKitError(\"wallet_ledger_invalid_params\", {\n reason: \"decompressed public key length should be 65 bytes\",\n });\n }\n const y = publicKey.slice(33, 65);\n\n // @ts-expect-error\n const z = Buffer.from([2 + (y[y.length - 1] & 1)]);\n return Buffer.concat([z, publicKey.slice(1, 33)]);\n}\n\nexport function publicKeyv1(app: any, data: Buffer) {\n return app.transport\n .send(CLA, INS.INS_PUBLIC_KEY_SECP256K1, 0, 0, data, [ERROR_CODE.NoError])\n .then((response: any) => {\n const errorCodeData = response.slice(-2);\n const returnCode = errorCodeData[0] * 256 + errorCodeData[1];\n const pk = Buffer.from(response.slice(0, 65));\n\n return {\n compressed_pk: compressPublicKey(pk),\n error_message: errorCodeToString(returnCode),\n pk,\n return_code: returnCode,\n };\n }, processErrorResponse);\n}\n\nexport function serializePathv2(path: number[]) {\n if (!path || path.length !== 5) {\n throw new SwapKitError(\"wallet_ledger_invalid_params\", { reason: \"Path must be exactly 5 elements\" });\n }\n\n const buf = Buffer.alloc(20);\n // @ts-expect-error\n buf.writeUInt32LE(0x80000000 + path[0], 0);\n // @ts-expect-error\n buf.writeUInt32LE(0x80000000 + path[1], 4);\n // @ts-expect-error\n buf.writeUInt32LE(0x80000000 + path[2], 8);\n // @ts-expect-error\n buf.writeUInt32LE(path[3], 12);\n // @ts-expect-error\n buf.writeUInt32LE(path[4], 16);\n\n return buf;\n}\n\nexport function signSendChunkv2(app: any, chunkIdx: number, chunkNum: number, chunk: Buffer, txType = P2_VALUES.JSON) {\n let payloadType = PAYLOAD_TYPE.ADD;\n if (chunkIdx === 1) {\n payloadType = PAYLOAD_TYPE.INIT;\n }\n if (chunkIdx === chunkNum) {\n payloadType = PAYLOAD_TYPE.LAST;\n }\n\n return signSendChunkv1(app, payloadType, 0, chunk, txType);\n}\n\nexport function publicKeyv2(app: any, data: Buffer) {\n return app.transport.send(CLA, INS.GET_ADDR_SECP256K1, 0, 0, data, [ERROR_CODE.NoError]).then((response: any) => {\n const errorCodeData = response.slice(-2);\n const returnCode = errorCodeData[0] * 256 + errorCodeData[1];\n const compressedPk = Buffer.from(response.slice(0, 33));\n\n return {\n compressed_pk: compressedPk,\n error_message: errorCodeToString(returnCode),\n pk: \"OBSOLETE PROPERTY\",\n return_code: returnCode,\n };\n }, processErrorResponse);\n}\n",
|
|
13
|
-
"import type EthereumApp from \"@ledgerhq/hw-app-eth\";\nimport type Transport from \"@ledgerhq/hw-transport\";\nimport {\n ChainId,\n type DerivationPathArray,\n derivationPathToString,\n NetworkDerivationPath,\n SwapKitError,\n} from \"@swapkit/helpers\";\nimport {\n AbstractSigner,\n type Provider,\n type TransactionRequest,\n type TypedDataDomain,\n type TypedDataField,\n} from \"ethers\";\n\nimport { getLedgerTransport } from \"../helpers/getLedgerTransport\";\n\nclass EVMLedgerInterface extends AbstractSigner {\n chainId: ChainId = ChainId.Ethereum;\n derivationPath = \"\";\n ledgerApp: InstanceType<typeof EthereumApp> | null = null;\n ledgerTimeout = 50000;\n private readonly injectedTransport?: Transport;\n\n constructor({\n provider,\n derivationPath = NetworkDerivationPath.OP,\n chainId = ChainId.Optimism,\n transport,\n }: { provider: Provider; derivationPath?: DerivationPathArray | string; chainId?: ChainId; transport?: Transport }) {\n super(provider);\n\n this.chainId = chainId || ChainId.Ethereum;\n this.derivationPath = typeof derivationPath === \"string\" ? derivationPath : derivationPathToString(derivationPath);\n this.injectedTransport = transport;\n\n Object.defineProperty(this, \"provider\", { enumerable: true, value: provider || null, writable: false });\n }\n\n connect = (provider: Provider) =>\n new EVMLedgerInterface({\n chainId: this.chainId,\n derivationPath: this.derivationPath,\n provider,\n transport: this.injectedTransport,\n });\n\n checkOrCreateTransportAndLedger = async () => {\n
|
|
13
|
+
"import type EthereumApp from \"@ledgerhq/hw-app-eth\";\nimport type Transport from \"@ledgerhq/hw-transport\";\nimport {\n ChainId,\n type DerivationPathArray,\n derivationPathToString,\n NetworkDerivationPath,\n SwapKitError,\n} from \"@swapkit/helpers\";\nimport {\n AbstractSigner,\n type Provider,\n type TransactionRequest,\n type TypedDataDomain,\n type TypedDataField,\n} from \"ethers\";\n\nimport { getLedgerTransport } from \"../helpers/getLedgerTransport\";\n\nfunction parseLedgerSignatureV(v: number | string) {\n if (typeof v === \"number\") return v;\n\n const hex = v.startsWith(\"0x\") ? v.slice(2) : v;\n return Number.parseInt(hex || \"0\", 16);\n}\n\nclass EVMLedgerInterface extends AbstractSigner {\n chainId: ChainId = ChainId.Ethereum;\n derivationPath = \"\";\n ledgerApp: InstanceType<typeof EthereumApp> | null = null;\n ledgerTimeout = 50000;\n private transport?: Transport;\n private readonly injectedTransport?: Transport;\n\n constructor({\n provider,\n derivationPath = NetworkDerivationPath.OP,\n chainId = ChainId.Optimism,\n transport,\n }: { provider: Provider; derivationPath?: DerivationPathArray | string; chainId?: ChainId; transport?: Transport }) {\n super(provider);\n\n this.chainId = chainId || ChainId.Ethereum;\n this.derivationPath = typeof derivationPath === \"string\" ? derivationPath : derivationPathToString(derivationPath);\n this.injectedTransport = transport;\n\n Object.defineProperty(this, \"provider\", { enumerable: true, value: provider || null, writable: false });\n }\n\n connect = (provider: Provider) =>\n new EVMLedgerInterface({\n chainId: this.chainId,\n derivationPath: this.derivationPath,\n provider,\n transport: this.transport ?? this.injectedTransport,\n });\n\n checkOrCreateTransportAndLedger = async () => {\n await this.createTransportAndLedger();\n };\n\n createTransportAndLedger = async () => {\n if (this.ledgerApp) return;\n\n this.transport ||= this.injectedTransport ?? (await getLedgerTransport());\n const EthereumApp = (await import(\"@ledgerhq/hw-app-eth\")).default;\n\n this.ledgerApp = new EthereumApp(this.transport);\n };\n\n getAddress = async () => {\n const response = await this.getAddressAndPubKey();\n if (!response) throw new SwapKitError(\"wallet_ledger_failed_to_get_address\");\n return response.address;\n };\n\n getAddressAndPubKey = async () => {\n await this.createTransportAndLedger();\n return this.ledgerApp?.getAddress(this.derivationPath);\n };\n\n showAddressAndPubKey = async () => {\n await this.createTransportAndLedger();\n return this.ledgerApp?.getAddress(this.derivationPath, true);\n };\n\n signMessage = async (messageHex: string) => {\n const { Signature } = await import(\"ethers\");\n await this.createTransportAndLedger();\n\n const sig = await this.ledgerApp?.signPersonalMessage(this.derivationPath, messageHex);\n\n if (!sig) throw new SwapKitError(\"wallet_ledger_signing_error\");\n\n sig.r = `0x${sig.r}`;\n sig.s = `0x${sig.s}`;\n return Signature.from(sig).serialized;\n };\n\n sendTransaction = async (tx: TransactionRequest): Promise<any> => {\n if (!this.provider) throw new SwapKitError(\"wallet_ledger_no_provider\");\n\n const signedTxHex = await this.signTransaction(tx);\n\n return await this.provider.broadcastTransaction(signedTxHex);\n };\n\n signTypedData = async (\n domain: TypedDataDomain,\n types: Record<string, TypedDataField[]>,\n value: Record<string, unknown>,\n explicitPrimaryType?: string,\n ) => {\n const { buildEIP712DomainType } = await import(\"@swapkit/toolboxes/evm\");\n const { Signature, TypedDataEncoder } = await import(\"ethers\");\n await this.createTransportAndLedger();\n\n const { EIP712Domain: _, ...filteredTypes } = types;\n const primaryType = explicitPrimaryType ?? TypedDataEncoder.from(filteredTypes).primaryType;\n\n let sig: { v: number; s: string; r: string } | undefined;\n\n try {\n sig = await this.ledgerApp?.signEIP712Message(this.derivationPath, {\n domain: domain as Record<string, unknown>,\n message: value,\n primaryType,\n types: { EIP712Domain: buildEIP712DomainType(domain), ...filteredTypes },\n });\n } catch (error) {\n const isLedgerDeviceError = error instanceof Error && \"statusCode\" in error;\n if (!isLedgerDeviceError || (isLedgerDeviceError && (error as { statusCode: number }).statusCode === 0x6985)) {\n throw error;\n }\n\n const domainSeparator = TypedDataEncoder.hashDomain(domain).slice(2);\n const messageHash = TypedDataEncoder.from(filteredTypes).hash(value).slice(2);\n\n sig = await this.ledgerApp?.signEIP712HashedMessage(this.derivationPath, domainSeparator, messageHash);\n }\n\n if (!sig) throw new SwapKitError(\"wallet_ledger_signing_error\");\n\n sig.r = `0x${sig.r}`;\n sig.s = `0x${sig.s}`;\n return Signature.from(sig).serialized;\n };\n\n signTransaction = async (tx: TransactionRequest) => {\n const { Transaction } = await import(\"ethers\");\n await this.createTransportAndLedger();\n\n const nonce = tx.nonce ?? undefined;\n const transactionCount =\n nonce === undefined ? await this.provider?.getTransactionCount(tx.from || (await this.getAddress())) : undefined;\n\n const baseTx = {\n chainId: tx.chainId || this.chainId,\n data: tx.data,\n gasLimit: tx.gasLimit,\n ...(tx.gasPrice && { gasPrice: tx.gasPrice }),\n ...(!tx.gasPrice &&\n tx.maxFeePerGas && { maxFeePerGas: tx.maxFeePerGas, maxPriorityFeePerGas: tx.maxPriorityFeePerGas }),\n nonce: nonce !== undefined ? Number(nonce.toString()) : transactionCount,\n to: tx.to?.toString(),\n type: tx.type && !Number.isNaN(tx.type) ? tx.type : tx.maxFeePerGas ? 2 : 0,\n value: tx.value,\n };\n\n // ledger expects the tx to be serialized without the 0x prefix\n const unsignedTx = Transaction.from(baseTx).unsignedSerialized.slice(2);\n\n const { ledgerService } = await import(\"@ledgerhq/hw-app-eth\");\n\n const resolution = await ledgerService.resolveTransaction(unsignedTx, {}, { erc20: true, externalPlugins: true });\n\n const signature = await this.ledgerApp?.signTransaction(this.derivationPath, unsignedTx, resolution);\n\n if (!signature) throw new SwapKitError(\"wallet_ledger_signing_error\");\n\n const { r, s, v } = signature;\n\n return Transaction.from({ ...baseTx, signature: { r: `0x${r}`, s: `0x${s}`, v: parseLedgerSignatureV(v) } })\n .serialized;\n };\n}\n\ntype LedgerParams = { provider: Provider; derivationPath?: DerivationPathArray; transport?: Transport };\n\nexport const ArbitrumLedger = (params: LedgerParams) =>\n new EVMLedgerInterface({ ...params, chainId: ChainId.Arbitrum });\nexport const AuroraLedger = (params: LedgerParams) => new EVMLedgerInterface({ ...params, chainId: ChainId.Aurora });\nexport const AvalancheLedger = (params: LedgerParams) =>\n new EVMLedgerInterface({ ...params, chainId: ChainId.Avalanche });\nexport const BaseLedger = (params: LedgerParams) => new EVMLedgerInterface({ ...params, chainId: ChainId.Base });\nexport const EthereumLedger = (params: LedgerParams) =>\n new EVMLedgerInterface({ ...params, chainId: ChainId.Ethereum });\nexport const GnosisLedger = (params: LedgerParams) => new EVMLedgerInterface({ ...params, chainId: ChainId.Gnosis });\nexport const OptimismLedger = (params: LedgerParams) =>\n new EVMLedgerInterface({ ...params, chainId: ChainId.Optimism });\nexport const PolygonLedger = (params: LedgerParams) => new EVMLedgerInterface({ ...params, chainId: ChainId.Polygon });\nexport const BinanceSmartChainLedger = (params: LedgerParams) =>\n new EVMLedgerInterface({ ...params, chainId: ChainId.BinanceSmartChain });\nexport const MonadLedger = (params: LedgerParams) => new EVMLedgerInterface({ ...params, chainId: ChainId.Monad });\nexport const XLayerLedger = (params: LedgerParams) => new EVMLedgerInterface({ ...params, chainId: ChainId.XLayer });\nexport const BerachainLedger = (params: LedgerParams) =>\n new EVMLedgerInterface({ ...params, chainId: ChainId.Berachain });\n",
|
|
14
14
|
"import type Transport from \"@ledgerhq/hw-transport\";\nimport type { SignedTransaction, Transaction } from \"@near-js/transactions\";\nimport type { DerivationPathArray } from \"@swapkit/helpers\";\nimport type { NearSigner } from \"@swapkit/toolboxes/near\";\nimport { getLedgerTransport } from \"../helpers/getLedgerTransport\";\n\nexport async function getNearLedgerClient(derivationPath?: DerivationPathArray, injectedTransport?: Transport) {\n const Near = (await import(\"@ledgerhq/hw-app-near\")).default;\n const { Chain, NetworkDerivationPath, SwapKitError } = await import(\"@swapkit/helpers\");\n const transport = injectedTransport ?? (await getLedgerTransport());\n const nearApp = new Near(transport);\n\n const path = (derivationPath || NetworkDerivationPath[Chain.Near]).join(\"'/\").concat(\"'\");\n\n const { address, publicKey: pubKeyHex } = await nearApp.getAddress(path);\n\n const signer = {\n getAddress() {\n return Promise.resolve(address);\n },\n async getPublicKey() {\n const { PublicKey } = await import(\"@near-js/crypto\");\n return PublicKey.fromString(`ed25519:${pubKeyHex}`);\n },\n\n signDelegateAction(_delegateAction: any) {\n return Promise.reject(\n new SwapKitError(\"wallet_ledger_method_not_supported\", { method: \"signDelegateAction\", wallet: \"Ledger\" }),\n );\n },\n\n signNep413Message(\n _message: string,\n _accountId: string,\n _recipient: string,\n _nonce: Uint8Array,\n _callbackUrl?: string,\n ) {\n return Promise.reject(\n new SwapKitError(\"wallet_ledger_method_not_supported\", { method: \"signNep413Message\", wallet: \"Ledger\" }),\n );\n },\n\n async signTransaction(transaction: Transaction) {\n const { Signature, SignedTransaction } = await import(\"@near-js/transactions\");\n try {\n const signatureArray = await nearApp.signTransaction(transaction.encode(), path);\n if (!signatureArray) {\n throw new Error(\"Signature undefined\");\n }\n\n const signature = new Signature({ data: signatureArray, keyType: 0 });\n\n const signedTransaction = new SignedTransaction({ signature, transaction });\n\n return [signatureArray, signedTransaction] as [Uint8Array<ArrayBufferLike>, SignedTransaction];\n } catch (error) {\n throw new SwapKitError(\"wallet_ledger_signing_error\", { error });\n }\n },\n };\n\n return signer as NearSigner;\n}\n",
|
|
15
15
|
"import type Sui from \"@ledgerhq/hw-app-sui\";\nimport type Transport from \"@ledgerhq/hw-transport\";\nimport {\n Chain,\n type DerivationPathArray,\n derivationPathToString,\n NetworkDerivationPath,\n SwapKitError,\n} from \"@swapkit/helpers\";\n\nimport { getLedgerTransport } from \"../helpers/getLedgerTransport\";\n\nexport class SuiLedgerInterface {\n derivationPath: string;\n ledgerApp: InstanceType<typeof Sui> | null = null;\n address: string | null = null;\n publicKey: Uint8Array | null = null;\n private readonly injectedTransport?: Transport;\n\n constructor(derivationPath?: DerivationPathArray | string, transport?: Transport) {\n this.derivationPath =\n typeof derivationPath === \"string\"\n ? derivationPath\n : derivationPathToString(derivationPath || NetworkDerivationPath[Chain.Sui]);\n this.injectedTransport = transport;\n }\n\n /**\n * Transform derivation path for SUI Ledger format.\n * SUI Ledger expects: 44'/784'/0'/0'/0' (all hardened, no 'm/' prefix)\n * Standard format is: m/44'/784'/0'/0/0 (only first 3 hardened, has 'm/' prefix)\n */\n private getLedgerPath(): string {\n return this.derivationPath\n .replace(/^m\\//, \"\") // Remove 'm/' prefix\n .replace(/\\/(\\d+)\\/(\\d+)$/, \"/$1'/$2'\"); // Make last two components hardened\n }\n\n private async createTransportAndLedger() {\n if (this.ledgerApp) return;\n\n const transport = this.injectedTransport ?? (await getLedgerTransport());\n const SuiApp = (await import(\"@ledgerhq/hw-app-sui\")).default;\n this.ledgerApp = new SuiApp(transport);\n }\n\n async connect(): Promise<string> {\n await this.createTransportAndLedger();\n\n if (!this.ledgerApp) {\n throw new SwapKitError(\"wallet_ledger_transport_error\");\n }\n\n const ledgerPath = this.getLedgerPath();\n const result = await this.ledgerApp.getPublicKey(ledgerPath);\n\n if (!result?.publicKey) {\n throw new SwapKitError(\"wallet_ledger_failed_to_get_address\");\n }\n\n this.publicKey = result.publicKey;\n this.address = `0x${Buffer.from(result.address).toString(\"hex\")}`;\n\n return this.address;\n }\n\n toSuiAddress(): string {\n if (!this.address) {\n throw new SwapKitError(\"wallet_ledger_failed_to_get_address\");\n }\n return this.address;\n }\n\n async getAddress(): Promise<string> {\n if (this.address) return this.address;\n return await this.connect();\n }\n\n async signTransaction(\n input: Uint8Array | { transaction: Uint8Array },\n ): Promise<{ bytes: string; signature: string }> {\n const txBytes = input instanceof Uint8Array ? input : input.transaction;\n await this.createTransportAndLedger();\n\n if (!this.ledgerApp) {\n throw new SwapKitError(\"wallet_ledger_transport_error\");\n }\n\n if (!this.publicKey) {\n throw new SwapKitError(\"wallet_ledger_failed_to_get_address\");\n }\n\n try {\n const ledgerPath = this.getLedgerPath();\n\n // SUI intent message format for TransactionData:\n // [intent_scope=0 (TransactionData), intent_version=0, app_id=0] + transaction_bytes\n // The Ledger SUI app expects the INTENT MESSAGE, not raw transaction bytes\n const intentMessage = new Uint8Array(3 + txBytes.length);\n intentMessage[0] = 0; // IntentScope: TransactionData\n intentMessage[1] = 0; // IntentVersion: V0\n intentMessage[2] = 0; // AppId: Sui\n intentMessage.set(txBytes, 3);\n\n const result = await this.ledgerApp.signTransaction(ledgerPath, intentMessage);\n\n if (!result?.signature) {\n throw new SwapKitError(\"wallet_ledger_signing_error\");\n }\n\n // SUI signature format: [scheme_flag (1 byte)] + [signature (64 bytes)] + [public_key (32 bytes)]\n // Scheme flag 0x00 = Ed25519\n const pubKey = this.publicKey.length === 33 ? this.publicKey.slice(1) : this.publicKey;\n if (pubKey.length !== 32) {\n throw new SwapKitError(\"wallet_ledger_signing_error\", { error: \"Invalid public key length\" });\n }\n\n const serializedSignature = new Uint8Array(1 + 64 + 32);\n serializedSignature[0] = 0x00; // Ed25519 scheme flag\n serializedSignature.set(result.signature, 1);\n serializedSignature.set(pubKey, 65);\n\n const signatureBase64 = Buffer.from(serializedSignature).toString(\"base64\");\n const bytesBase64 = Buffer.from(txBytes).toString(\"base64\");\n\n return { bytes: bytesBase64, signature: signatureBase64 };\n } catch (error) {\n throw new SwapKitError(\"wallet_ledger_signing_error\", { error });\n }\n }\n}\n\nexport const SuiLedger = (derivationPath?: DerivationPathArray, transport?: Transport) =>\n new SuiLedgerInterface(derivationPath, transport);\n",
|
|
16
16
|
"import type { AccountData, AminoSignResponse, StdSignDoc } from \"@cosmjs/amino\";\nimport type Transport from \"@ledgerhq/hw-transport\";\nimport { base64 } from \"@scure/base\";\nimport { type DerivationPathArray, NetworkDerivationPath, SwapKitError } from \"@swapkit/helpers\";\n\nimport { CosmosLedgerInterface } from \"../../interfaces/CosmosLedgerInterface\";\nimport type { GetAddressAndPubKeyResponse } from \"../../types\";\nimport { getSignature } from \"./utils\";\n\ntype ThorchainAssetObject = { chain?: string; symbol?: string; synth?: boolean; ticker?: string };\n\ntype ThorchainDepositCoin = { amount: string; asset: string | ThorchainAssetObject };\n\nfunction getAminoAssetDenom(asset: string | ThorchainAssetObject) {\n if (typeof asset === \"string\") return asset;\n\n const chain = asset.chain?.toUpperCase();\n const symbol = (asset.symbol || asset.ticker || \"\").toUpperCase();\n\n if (!(chain && symbol)) return symbol || chain || \"\";\n if (asset.synth) return `${chain}/${symbol}`;\n\n return `${chain}.${symbol}`;\n}\n\nexport function normalizeThorchainLedgerSignDoc(signDoc: StdSignDoc): StdSignDoc {\n return {\n ...signDoc,\n msgs: signDoc.msgs.map((msg) => {\n if (!msg.type.includes(\"MsgDeposit\")) return msg;\n\n const coins = msg.value.coins;\n if (!Array.isArray(coins)) return msg;\n\n return {\n ...msg,\n value: {\n ...msg.value,\n coins: coins.map((coin: ThorchainDepositCoin) => ({ ...coin, asset: getAminoAssetDenom(coin.asset) })),\n },\n };\n }),\n };\n}\n\nexport class THORChainLedger extends CosmosLedgerInterface {\n private pubKey: string | null = null;\n\n derivationPath: DerivationPathArray;\n\n constructor(derivationPath: DerivationPathArray = NetworkDerivationPath.THOR, transport?: Transport) {\n super(transport);\n this.chain = \"thor\";\n this.derivationPath = derivationPath;\n }\n\n get pubkey() {\n return this.pubKey;\n }\n\n connect = async () => {\n await this.checkOrCreateTransportAndLedger();\n const { compressed_pk, bech32_address }: GetAddressAndPubKeyResponse = await this.getAddressAndPubKey();\n\n this.pubKey = base64.encode(compressed_pk);\n\n return bech32_address;\n };\n\n getAddressAndPubKey = async () => {\n await this.checkOrCreateTransportAndLedger(true);\n\n const response: GetAddressAndPubKeyResponse = await this.ledgerApp.getAddressAndPubKey(\n this.derivationPath,\n this.chain,\n );\n\n this.validateResponse(response.return_code, response.error_message);\n\n return response;\n };\n\n showAddressAndPubKey = async () => {\n await this.checkOrCreateTransportAndLedger(true);\n\n const response: GetAddressAndPubKeyResponse = await this.ledgerApp.showAddressAndPubKey(\n this.derivationPath,\n this.chain,\n );\n\n this.validateResponse(response.return_code, response.error_message);\n\n return response;\n };\n\n signTransaction = async (rawTx: string, sequence = \"0\") => {\n await this.checkOrCreateTransportAndLedger(true);\n\n const { return_code, error_message, signature } = await this.ledgerApp.sign(this.derivationPath, rawTx);\n\n if (!this.pubKey) throw new SwapKitError(\"wallet_ledger_pubkey_not_found\");\n\n this.validateResponse(return_code, error_message);\n\n return [\n {\n pub_key: { type: \"tendermint/PubKeySecp256k1\", value: this.pubKey },\n sequence,\n signature: getSignature(signature),\n },\n ];\n };\n\n signAmino = async (signerAddress: string, signDoc: StdSignDoc): Promise<AminoSignResponse> => {\n await this.checkOrCreateTransportAndLedger(true);\n\n const account = (await this.getAccounts()).find((item) => item.address === signerAddress);\n if (!account) {\n throw new SwapKitError(\"wallet_ledger_address_not_found\", { address: signerAddress });\n }\n\n const importedAmino = await import(\"@cosmjs/amino\");\n const encodeSecp256k1Signature =\n importedAmino.encodeSecp256k1Signature ?? importedAmino.default?.encodeSecp256k1Signature;\n const serializeSignDoc = importedAmino.serializeSignDoc ?? importedAmino.default?.serializeSignDoc;\n const normalizedSignDoc = normalizeThorchainLedgerSignDoc(signDoc);\n\n const { return_code, error_message, signature } = await this.ledgerApp.sign(\n this.derivationPath,\n serializeSignDoc(normalizedSignDoc),\n );\n\n this.validateResponse(return_code, error_message);\n\n return {\n signature: encodeSecp256k1Signature(account.pubkey, base64.decode(getSignature(signature))),\n // CosmJS rebuilds bodyBytes from the returned `signed` doc. Keep the\n // original direct-shaped doc there so MsgDeposit protobuf assets do not\n // get round-tripped through the incomplete Amino converter.\n signed: signDoc,\n };\n };\n\n getAccounts = async (): Promise<readonly AccountData[]> => {\n await this.checkOrCreateTransportAndLedger(true);\n\n const { bech32_address, compressed_pk }: GetAddressAndPubKeyResponse = await this.getAddressAndPubKey();\n\n this.pubKey = base64.encode(compressed_pk);\n\n return [{ address: bech32_address, algo: \"secp256k1\", pubkey: compressed_pk }];\n };\n\n sign = async (message: string) => {\n await this.checkOrCreateTransportAndLedger(true);\n\n const { return_code, error_message, signature } = await this.ledgerApp.sign(this.derivationPath, message);\n\n if (!this.pubKey) throw new SwapKitError(\"wallet_ledger_pubkey_not_found\");\n\n this.validateResponse(return_code, error_message);\n\n return getSignature(signature);\n };\n}\n",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"import type BitcoinApp from \"@ledgerhq/hw-app-btc\";\nimport type { CreateTransactionArg } from \"@ledgerhq/hw-app-btc/lib-es/createTransaction\";\nimport type Transport from \"@ledgerhq/hw-transport\";\nimport { hex } from \"@scure/base\";\nimport { type DerivationPathArray, derivationPathToString, getWalletFormatFor, SwapKitError } from \"@swapkit/helpers\";\nimport type { UTXOType } from \"@swapkit/toolboxes/utxo\";\nimport type { PCZT, Transaction } from \"@swapkit/utxo-signer\";\n\nimport { getLedgerTransport } from \"../helpers/getLedgerTransport\";\n\nconst nonSegwitLedgerChains = [\"bitcoin-cash\", \"dash\", \"dogecoin\", \"zcash\"];\n\ntype Params = {\n tx: Transaction;\n inputUtxos: UTXOType[];\n btcApp: BitcoinApp;\n derivationPath: string;\n chain: \"bitcoin-cash\" | \"bitcoin\" | \"litecoin\" | \"dogecoin\" | \"dash\" | \"zcash\";\n};\n\ntype MultiPathParams = Omit<Params, \"derivationPath\"> & {\n /** Derivation paths for each input - one per input */\n derivationPaths: string[];\n};\n\nconst signUTXOTransaction = (\n { tx, inputUtxos, btcApp, derivationPath, chain }: Params,\n options?: Partial<CreateTransactionArg>,\n) => {\n const inputs = inputUtxos.map((item) => {\n const splitTx = btcApp.splitTransaction(\n item.txHex || \"\",\n !nonSegwitLedgerChains.includes(chain),\n chain === \"zcash\",\n );\n\n return [splitTx, item.index, undefined as string | null | undefined, undefined as number | null | undefined] as any;\n });\n\n const newTxHex = hex.encode(tx.unsignedTx);\n\n const splitNewTx = btcApp.splitTransaction(newTxHex, true);\n const outputScriptHex = btcApp.serializeTransactionOutputs(splitNewTx).toString(\"hex\");\n\n const params: CreateTransactionArg = {\n additionals: [\"bech32\"],\n associatedKeysets: inputs.map(() => derivationPath),\n inputs,\n outputScriptHex,\n segwit: true,\n useTrustedInputForSegwit: true,\n };\n\n return btcApp.createPaymentTransaction({ ...params, ...options });\n};\n\n/**\n * Sign a UTXO transaction with multiple derivation paths.\n * Each input can have its own derivation path for HD wallet multi-address support.\n */\nconst signUTXOTransactionWithMultiplePaths = (\n { tx, inputUtxos, btcApp, derivationPaths, chain }: MultiPathParams,\n options?: Partial<CreateTransactionArg>,\n) => {\n if (derivationPaths.length !== inputUtxos.length) {\n throw new SwapKitError(\"wallet_ledger_invalid_params\", {\n message: `Derivation paths count (${derivationPaths.length}) must match inputs count (${inputUtxos.length})`,\n });\n }\n\n const inputs = inputUtxos.map((item) => {\n const splitTx = btcApp.splitTransaction(\n item.txHex || \"\",\n !nonSegwitLedgerChains.includes(chain),\n chain === \"zcash\",\n );\n\n return [splitTx, item.index, undefined as string | null | undefined, undefined as number | null | undefined] as any;\n });\n\n const newTxHex = hex.encode(tx.unsignedTx);\n\n const splitNewTx = btcApp.splitTransaction(newTxHex, true);\n const outputScriptHex = btcApp.serializeTransactionOutputs(splitNewTx).toString(\"hex\");\n\n const params: CreateTransactionArg = {\n additionals: [\"bech32\"],\n associatedKeysets: derivationPaths,\n inputs,\n outputScriptHex,\n segwit: true,\n useTrustedInputForSegwit: true,\n };\n\n return btcApp.createPaymentTransaction({ ...params, ...options });\n};\n\nconst BaseLedgerUTXO = ({\n chain,\n additionalSignParams,\n}: {\n chain: \"bitcoin-cash\" | \"bitcoin\" | \"litecoin\" | \"dogecoin\" | \"dash\" | \"zcash\";\n additionalSignParams?: Partial<CreateTransactionArg>;\n}) => {\n return (derivationPathArray?: DerivationPathArray | string, injectedTransport?: Transport) => {\n // Per-call state — each BitcoinLedger/LitecoinLedger/... invocation has its own\n // transport + btcApp so different consumers (e.g. concurrent MCP sessions) cannot\n // cross-contaminate each other's Ledger device handle.\n let btcApp: InstanceType<typeof BitcoinApp> | undefined;\n let transport: any = null;\n\n async function createTransportWebUSB() {\n transport ||= injectedTransport ?? (await getLedgerTransport());\n const BitcoinApp = (await import(\"@ledgerhq/hw-app-btc\")).default;\n\n btcApp ||= new BitcoinApp({ currency: chain, transport });\n return btcApp;\n }\n\n async function getBtcApp() {\n return btcApp || (await createTransportWebUSB());\n }\n\n async function disconnect() {\n if (!injectedTransport) await transport?.close?.();\n btcApp = undefined;\n transport = null;\n }\n\n const derivationPath =\n typeof derivationPathArray === \"string\"\n ? derivationPathArray\n : derivationPathToString(derivationPathArray as DerivationPathArray);\n\n const format = getWalletFormatFor(derivationPath);\n\n return {\n connect: async () => {\n await getBtcApp();\n },\n disconnect,\n getAddress: async () => {\n const { toCashAddress } = await import(\"@swapkit/toolboxes/utxo\");\n\n const app = await getBtcApp();\n\n const { bitcoinAddress: address } = await app.getWalletPublicKey(derivationPath, { format });\n\n if (!address) {\n throw new SwapKitError(\"wallet_ledger_get_address_error\", {\n message: `Cannot get ${chain} address from ledger derivation path: ${derivationPath}`,\n });\n }\n\n return chain === \"bitcoin-cash\" && format === \"legacy\"\n ? toCashAddress(address).replace(/(bchtest:|bitcoincash:)/, \"\")\n : address;\n },\n getExtendedPublicKey: async (path = \"84'/0'/0'\", xpubVersion = 76067358) => {\n const app = await getBtcApp();\n\n return app.getWalletXpub({ path, xpubVersion });\n },\n\n signPCZT: async (pczt: PCZT): Promise<PCZT> => {\n if (chain !== \"zcash\") {\n throw new SwapKitError(\"wallet_ledger_chain_not_supported\", {\n message: \"PCZT signing is only supported for Zcash\",\n });\n }\n\n const app = await getBtcApp();\n\n const { ZcashTransaction, Script } = await import(\"@swapkit/utxo-signer\");\n\n const global = pczt.getGlobal();\n\n const unsignedTx = new ZcashTransaction({\n consensusBranchId: global.consensusBranchId,\n expiryHeight: global.expiryHeight,\n lockTime: global.lockTime,\n version: global.txVersion,\n versionGroupId: global.versionGroupId,\n });\n\n const inputUtxos: UTXOType[] = [];\n\n for (let i = 0; i < pczt.inputsLength; i++) {\n const input = pczt.getInput(i);\n\n unsignedTx.addInput({\n index: input.index,\n script: new Uint8Array(),\n sequence: input.sequence ?? 0xffffffff,\n txid: input.txid,\n value: input.value,\n });\n\n inputUtxos.push({\n hash: hex.encode(new Uint8Array([...input.txid].reverse())),\n index: input.index,\n txHex: buildMinimalPrevTxHex(input, global),\n value: Number(input.value),\n witnessUtxo: { script: input.scriptPubkey, value: Number(input.value) },\n } as UTXOType);\n }\n\n for (let i = 0; i < pczt.outputsLength; i++) {\n const output = pczt.getOutput(i);\n unsignedTx.addOutput({ amount: output.value, script: output.scriptPubkey });\n }\n\n const signedTxHex = await signUTXOTransaction(\n { btcApp: app, chain, derivationPath, inputUtxos, tx: unsignedTx as unknown as Transaction },\n {\n ...additionalSignParams,\n expiryHeight: (() => {\n const buf = Buffer.alloc(4);\n buf.writeUInt32LE(global.expiryHeight);\n return buf;\n })(),\n lockTime: global.lockTime,\n },\n );\n\n const signedTx = ZcashTransaction.fromHex(signedTxHex, { allowUnknownOutputs: true });\n const signedPczt = pczt.clone();\n\n for (let i = 0; i < signedTx.inputsLength; i++) {\n const signedInput = signedTx.getInput(i);\n if (signedInput.script && signedInput.script.length > 0) {\n const scriptParts = Script.decode(signedInput.script);\n if (scriptParts.length >= 2) {\n signedPczt.addSignature(i, scriptParts[1] as Uint8Array, scriptParts[0] as Uint8Array);\n }\n }\n }\n\n return signedPczt;\n },\n signTransaction: async (tx: Transaction, inputUtxos: UTXOType[]) => {\n const app = await getBtcApp();\n\n return signUTXOTransaction({ btcApp: app, chain, derivationPath, inputUtxos, tx }, additionalSignParams);\n },\n\n /**\n * Sign a transaction with multiple derivation paths for HD wallet multi-address support.\n * Each input can be signed with its own derivation path.\n */\n signTransactionWithMultiplePaths: async (tx: Transaction, inputUtxos: UTXOType[], derivationPaths: string[]) => {\n const app = await getBtcApp();\n\n return signUTXOTransactionWithMultiplePaths(\n { btcApp: app, chain, derivationPaths, inputUtxos, tx },\n additionalSignParams,\n );\n },\n };\n };\n};\n\nfunction buildMinimalPrevTxHex(\n input: { txid: Uint8Array; index: number; scriptPubkey: Uint8Array; value: bigint },\n global: { txVersion: number; versionGroupId: number; expiryHeight: number; lockTime: number },\n): string {\n const parts: number[] = [];\n\n const version = (global.txVersion | 0x80000000) >>> 0;\n parts.push(version & 0xff, (version >> 8) & 0xff, (version >> 16) & 0xff, (version >> 24) & 0xff);\n\n const vgid = global.versionGroupId;\n parts.push(vgid & 0xff, (vgid >> 8) & 0xff, (vgid >> 16) & 0xff, (vgid >> 24) & 0xff);\n\n parts.push(0);\n\n const outputCount = input.index + 1;\n if (outputCount < 0xfd) {\n parts.push(outputCount);\n } else {\n parts.push(0xfd, outputCount & 0xff, (outputCount >> 8) & 0xff);\n }\n\n for (let i = 0; i < input.index; i++) {\n parts.push(0, 0, 0, 0, 0, 0, 0, 0);\n parts.push(0);\n }\n\n const value = input.value;\n parts.push(\n Number(value & 0xffn),\n Number((value >> 8n) & 0xffn),\n Number((value >> 16n) & 0xffn),\n Number((value >> 24n) & 0xffn),\n Number((value >> 32n) & 0xffn),\n Number((value >> 40n) & 0xffn),\n Number((value >> 48n) & 0xffn),\n Number((value >> 56n) & 0xffn),\n );\n\n const script = input.scriptPubkey;\n if (script.length < 0xfd) {\n parts.push(script.length);\n } else {\n parts.push(0xfd, script.length & 0xff, (script.length >> 8) & 0xff);\n }\n for (const byte of script) {\n parts.push(byte);\n }\n\n parts.push(\n global.lockTime & 0xff,\n (global.lockTime >> 8) & 0xff,\n (global.lockTime >> 16) & 0xff,\n (global.lockTime >> 24) & 0xff,\n );\n parts.push(\n global.expiryHeight & 0xff,\n (global.expiryHeight >> 8) & 0xff,\n (global.expiryHeight >> 16) & 0xff,\n (global.expiryHeight >> 24) & 0xff,\n );\n parts.push(0, 0, 0, 0, 0, 0, 0, 0); // value balance\n parts.push(0); // empty sapling spends\n parts.push(0); // empty sapling outputs\n parts.push(0); // empty joinsplits\n\n return hex.encode(new Uint8Array(parts));\n}\n\nexport const BitcoinLedger = BaseLedgerUTXO({ chain: \"bitcoin\" });\nexport const LitecoinLedger = BaseLedgerUTXO({ chain: \"litecoin\" });\n\nexport const BitcoinCashLedger = BaseLedgerUTXO({\n additionalSignParams: { additionals: [\"abc\"], segwit: false, sigHashType: 0x41 },\n chain: \"bitcoin-cash\",\n});\n\nexport const DogecoinLedger = BaseLedgerUTXO({\n additionalSignParams: { additionals: [], segwit: false, useTrustedInputForSegwit: false },\n chain: \"dogecoin\",\n});\n\nexport const DashLedger = BaseLedgerUTXO({\n additionalSignParams: { additionals: [], segwit: false, useTrustedInputForSegwit: false },\n chain: \"dash\",\n});\n\nexport const ZcashLedger = BaseLedgerUTXO({\n additionalSignParams: {\n additionals: [\"zcash\", \"sapling\"],\n expiryHeight: (() => {\n const buf = Buffer.alloc(4);\n buf.writeUInt32LE(0);\n return buf;\n })(),\n lockTime: 0,\n segwit: false,\n useTrustedInputForSegwit: false,\n },\n chain: \"zcash\",\n});\n",
|
|
20
20
|
"import Xrp from \"@ledgerhq/hw-app-xrp\";\nimport type Transport from \"@ledgerhq/hw-transport\";\nimport { Chain, type DerivationPathArray, derivationPathToString, NetworkDerivationPath } from \"@swapkit/helpers\";\nimport type { RippleTransaction } from \"@swapkit/toolboxes/ripple\";\nimport { encode } from \"ripple-binary-codec\";\nimport type { Payment } from \"xrpl\";\nimport { getLedgerTransport } from \"../helpers/getLedgerTransport\";\n\nconst TF_FULLY_CANONICAL_SIG = 2147483648;\n\nfunction cleanTransactionObject(obj: Record<string, any>) {\n const cleaned: Record<string, any> = {};\n for (const key in obj) {\n if (obj[key] !== null && obj[key] !== undefined) {\n cleaned[key] = obj[key];\n }\n }\n return cleaned;\n}\n\nfunction establishConnection(transport: Transport) {\n return new Xrp(transport);\n}\n\nexport const XRPLedger = async (derivationPath?: DerivationPathArray, injectedTransport?: Transport) => {\n const path = derivationPathToString(derivationPath || NetworkDerivationPath[Chain.Ripple]);\n const transport = injectedTransport ?? (await getLedgerTransport());\n const xrpInstance = establishConnection(transport);\n\n const { address, publicKey } = await xrpInstance.getAddress(path);\n\n async function signTransaction(transaction: Payment | RippleTransaction) {\n const { hashes } = await import(\"@swapkit/toolboxes/ripple\");\n const cleanedTxWithPubKey = cleanTransactionObject(transaction);\n const transactionJSON = {\n ...cleanedTxWithPubKey,\n Flags: transaction.Flags || TF_FULLY_CANONICAL_SIG,\n SigningPubKey: publicKey.toUpperCase(),\n };\n\n const transactionToSignOnLedger = encode(transactionJSON);\n const txnSignature = await xrpInstance.signTransaction(path, transactionToSignOnLedger);\n const tx_blob = encode({ ...transactionJSON, TxnSignature: txnSignature });\n const hash = hashes.hashSignedTx(tx_blob);\n\n return { hash, tx_blob };\n }\n\n return { getAddress: () => address, signTransaction };\n};\n"
|
|
21
21
|
],
|
|
22
|
-
"mappings": "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",
|
|
23
|
-
"debugId": "
|
|
22
|
+
"mappings": "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",
|
|
23
|
+
"debugId": "5EB80B38E2BF7E9264756E2164756E21",
|
|
24
24
|
"names": []
|
|
25
25
|
}
|
|
@@ -4,7 +4,7 @@ export declare const keepkeyWallet: {
|
|
|
4
4
|
connectKeepkey: {
|
|
5
5
|
connectWallet: ({ addChain }: {
|
|
6
6
|
addChain: import("@swapkit/helpers").AddChainType;
|
|
7
|
-
}) => (chains: Chain[], derivationPathMap?: Record<Chain, [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 637, 0, 0, 0] | [44, 60, 0, 0, 0] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 148, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [44, 9004, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0]> | undefined) => Promise<boolean>;
|
|
7
|
+
}) => (chains: Chain[], derivationPathMap?: Record<Chain, [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 637, 0, 0, 0] | [44, 60, 0, 0, 0] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [8797555, 1, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 148, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [44, 9004, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0]> | undefined) => Promise<boolean>;
|
|
8
8
|
directSigningSupport: import("@swapkit/wallet-core").DirectSigningSupport;
|
|
9
9
|
getExtendedPublicKey?: import("@swapkit/wallet-core").GetExtendedPublicKey;
|
|
10
10
|
supportedChains: (Chain.Arbitrum | Chain.Avalanche | Chain.Base | Chain.Berachain | Chain.BinanceSmartChain | Chain.Bitcoin | Chain.BitcoinCash | Chain.Cosmos | Chain.Dash | Chain.Dogecoin | Chain.Ethereum | Chain.Gnosis | Chain.Litecoin | Chain.Maya | Chain.Monad | Chain.Optimism | Chain.Polygon | Chain.Ripple | Chain.THORChain | Chain.XLayer)[];
|
|
@@ -7,6 +7,7 @@ declare class EVMLedgerInterface extends AbstractSigner {
|
|
|
7
7
|
derivationPath: string;
|
|
8
8
|
ledgerApp: InstanceType<typeof EthereumApp> | null;
|
|
9
9
|
ledgerTimeout: number;
|
|
10
|
+
private transport?;
|
|
10
11
|
private readonly injectedTransport?;
|
|
11
12
|
constructor({ provider, derivationPath, chainId, transport, }: {
|
|
12
13
|
provider: Provider;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evm.d.ts","sourceRoot":"","sources":["../../../../src/ledger/clients/evm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,WAAW,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,SAAS,MAAM,wBAAwB,CAAC;AACpD,OAAO,EACL,OAAO,EACP,KAAK,mBAAmB,EAIzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,cAAc,EACd,KAAK,QAAQ,EACb,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,cAAc,EACpB,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"evm.d.ts","sourceRoot":"","sources":["../../../../src/ledger/clients/evm.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,WAAW,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,SAAS,MAAM,wBAAwB,CAAC;AACpD,OAAO,EACL,OAAO,EACP,KAAK,mBAAmB,EAIzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,cAAc,EACd,KAAK,QAAQ,EACb,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,cAAc,EACpB,MAAM,QAAQ,CAAC;AAWhB,cAAM,kBAAmB,SAAQ,cAAc;IAC7C,OAAO,EAAE,OAAO,CAAoB;IACpC,cAAc,SAAM;IACpB,SAAS,EAAE,YAAY,CAAC,OAAO,WAAW,CAAC,GAAG,IAAI,CAAQ;IAC1D,aAAa,SAAS;IACtB,OAAO,CAAC,SAAS,CAAC,CAAY;IAC9B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAY;gBAEnC,EACV,QAAQ,EACR,cAAyC,EACzC,OAA0B,EAC1B,SAAS,GACV,EAAE;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,cAAc,CAAC,EAAE,mBAAmB,GAAG,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,SAAS,CAAA;KAAE;IAUlH,OAAO,GAAI,UAAU,QAAQ,wBAMxB;IAEL,+BAA+B,sBAE7B;IAEF,wBAAwB,sBAOtB;IAEF,UAAU,wBAIR;IAEF,mBAAmB;;;;mBAGjB;IAEF,oBAAoB;;;;mBAGlB;IAEF,WAAW,GAAU,YAAY,MAAM,qBAWrC;IAEF,eAAe,GAAU,IAAI,kBAAkB,KAAG,OAAO,CAAC,GAAG,CAAC,CAM5D;IAEF,aAAa,GACX,QAAQ,eAAe,EACvB,OAAO,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,EACvC,OAAO,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,sBAAsB,MAAM,qBAmC5B;IAEF,eAAe,GAAU,IAAI,kBAAkB,qBAoC7C;CACH;AAED,KAAK,YAAY,GAAG;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,cAAc,CAAC,EAAE,mBAAmB,CAAC;IAAC,SAAS,CAAC,EAAE,SAAS,CAAA;CAAE,CAAC;AAExG,eAAO,MAAM,cAAc,GAAI,QAAQ,YAAY,uBACe,CAAC;AACnE,eAAO,MAAM,YAAY,GAAI,QAAQ,YAAY,uBAAmE,CAAC;AACrH,eAAO,MAAM,eAAe,GAAI,QAAQ,YAAY,uBACe,CAAC;AACpE,eAAO,MAAM,UAAU,GAAI,QAAQ,YAAY,uBAAiE,CAAC;AACjH,eAAO,MAAM,cAAc,GAAI,QAAQ,YAAY,uBACe,CAAC;AACnE,eAAO,MAAM,YAAY,GAAI,QAAQ,YAAY,uBAAmE,CAAC;AACrH,eAAO,MAAM,cAAc,GAAI,QAAQ,YAAY,uBACe,CAAC;AACnE,eAAO,MAAM,aAAa,GAAI,QAAQ,YAAY,uBAAoE,CAAC;AACvH,eAAO,MAAM,uBAAuB,GAAI,QAAQ,YAAY,uBACe,CAAC;AAC5E,eAAO,MAAM,WAAW,GAAI,QAAQ,YAAY,uBAAkE,CAAC;AACnH,eAAO,MAAM,YAAY,GAAI,QAAQ,YAAY,uBAAmE,CAAC;AACrH,eAAO,MAAM,eAAe,GAAI,QAAQ,YAAY,uBACe,CAAC"}
|
|
@@ -17,7 +17,7 @@ export declare const ledgerWallet: {
|
|
|
17
17
|
connectLedger: {
|
|
18
18
|
connectWallet: ({ addChain }: {
|
|
19
19
|
addChain: import("@swapkit/helpers").AddChainType;
|
|
20
|
-
}) => (chains: Chain[], derivationPath?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 637, 0, 0, 0] | [44, 60, 0, 0, 0] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 148, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [44, 9004, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined, params_2?: ConnectLedgerOptions | undefined) => Promise<boolean>;
|
|
20
|
+
}) => (chains: Chain[], derivationPath?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 637, 0, 0, 0] | [44, 60, 0, 0, 0] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [8797555, 1, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 148, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [44, 9004, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined, params_2?: ConnectLedgerOptions | undefined) => Promise<boolean>;
|
|
21
21
|
directSigningSupport: import("@swapkit/wallet-core").DirectSigningSupport;
|
|
22
22
|
getExtendedPublicKey?: import("@swapkit/wallet-core").GetExtendedPublicKey;
|
|
23
23
|
supportedChains: (Chain.Arbitrum | Chain.Aurora | Chain.Avalanche | Chain.Base | Chain.Berachain | Chain.BinanceSmartChain | Chain.Bitcoin | Chain.BitcoinCash | Chain.Cosmos | Chain.Dash | Chain.Dogecoin | Chain.Ethereum | Chain.Gnosis | Chain.Litecoin | Chain.Monad | Chain.Near | Chain.Optimism | Chain.Polygon | Chain.Ripple | Chain.Sui | Chain.THORChain | Chain.Tron | Chain.XLayer | Chain.Zcash)[];
|
|
@@ -12,7 +12,7 @@ export declare const trezorWallet: {
|
|
|
12
12
|
connectTrezor: {
|
|
13
13
|
connectWallet: ({ addChain }: {
|
|
14
14
|
addChain: import("@swapkit/helpers").AddChainType;
|
|
15
|
-
}) => (chains: Chain[], derivationPath: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 637, 0, 0, 0] | [44, 60, 0, 0, 0] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 148, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [44, 9004, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0], params_2?: ConnectTrezorOptions | undefined) => Promise<boolean>;
|
|
15
|
+
}) => (chains: Chain[], derivationPath: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 637, 0, 0, 0] | [44, 60, 0, 0, 0] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [8797555, 1, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 148, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [44, 9004, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0], params_2?: ConnectTrezorOptions | undefined) => Promise<boolean>;
|
|
16
16
|
directSigningSupport: import("@swapkit/wallet-core").DirectSigningSupport;
|
|
17
17
|
getExtendedPublicKey?: import("@swapkit/wallet-core").GetExtendedPublicKey;
|
|
18
18
|
supportedChains: (Chain.Arbitrum | Chain.Aurora | Chain.Avalanche | Chain.Base | Chain.Berachain | Chain.BinanceSmartChain | Chain.Bitcoin | Chain.BitcoinCash | Chain.Dash | Chain.Dogecoin | Chain.Ethereum | Chain.Gnosis | Chain.Litecoin | Chain.Monad | Chain.Optimism | Chain.Polygon | Chain.XLayer | Chain.Zcash)[];
|