@avalanche-sdk/client
Version:
A TypeScript SDK for interacting with the Avalanche network through JSON-RPC APIs. This SDK provides a comprehensive set of tools to interact with all Avalanche chains (P-Chain, X-Chain, C-Chain) and various APIs, including wallet functionality for transa
2 lines (1 loc) • 12.1 kB
JavaScript
;var e=require("@avalabs/avalanchejs");function t(e){return function(e,{strict:t=!0}={}){return!!e&&"string"==typeof e&&(t?/^0x[0-9a-fA-F]*$/.test(e):e.startsWith("0x"))}(e,{strict:!1})?Math.ceil((e.length-2)/2):e.length}require("viem");const n="2.38.6";let r=({docsBaseUrl:e,docsPath:t="",docsSlug:n})=>t?`${e??"https://viem.sh"}${t}${n?`#${n}`:""}`:void 0,i=`viem@${n}`;class s extends Error{constructor(e,t={}){const a=t.cause instanceof s?t.cause.details:t.cause?.message?t.cause.message:t.details,o=t.cause instanceof s&&t.cause.docsPath||t.docsPath,c=r?.({...t,docsPath:o});super([e||"An error occurred.","",...t.metaMessages?[...t.metaMessages,""]:[],...c?[`Docs: ${c}`]:[],...a?[`Details: ${a}`]:[],...i?[`Version: ${i}`]:[]].join("\n"),t.cause?{cause:t.cause}:void 0),Object.defineProperty(this,"details",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"docsPath",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"metaMessages",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"shortMessage",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"version",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"name",{enumerable:!0,configurable:!0,writable:!0,value:"BaseError"}),this.details=a,this.docsPath=o,this.metaMessages=t.metaMessages,this.name=t.name??this.name,this.shortMessage=e,this.version=n}walk(e){return a(this,e)}}function a(e,t){return t?.(e)?e:e&&"object"==typeof e&&"cause"in e&&void 0!==e.cause?a(e.cause,t):t?null:e}class o extends s{constructor({size:e,targetSize:t,type:n}){super(`${n.charAt(0).toUpperCase()}${n.slice(1).toLowerCase()} size (${e}) exceeds padding size (${t}).`,{name:"SizeExceedsPaddingSizeError"})}}function c(e,{dir:t,size:n=32}={}){return"string"==typeof e?function(e,{dir:t,size:n=32}={}){if(null===n)return e;const r=e.replace("0x","");if(r.length>2*n)throw new o({size:Math.ceil(r.length/2),targetSize:n,type:"hex"});return`0x${r["right"===t?"padEnd":"padStart"](2*n,"0")}`}(e,{dir:t,size:n}):function(e,{dir:t,size:n=32}={}){if(null===n)return e;if(e.length>n)throw new o({size:e.length,targetSize:n,type:"bytes"});const r=new Uint8Array(n);for(let i=0;i<n;i++){const s="right"===t;r[s?i:n-i-1]=e[s?i:e.length-i-1]}return r}(e,{dir:t,size:n})}class u extends s{constructor({max:e,min:t,signed:n,size:r,value:i}){super(`Number "${i}" is not in safe ${r?`${8*r}-bit ${n?"signed":"unsigned"} `:""}integer range ${e?`(${t} to ${e})`:`(above ${t})`}`,{name:"IntegerOutOfRangeError"})}}class l extends s{constructor({givenSize:e,maxSize:t}){super(`Size cannot exceed ${t} bytes. Given size: ${e} bytes.`,{name:"SizeOverflowError"})}}function d(e,{size:n}){if(t(e)>n)throw new l({givenSize:t(e),maxSize:n})}function f(e,t={}){return Number(function(e,t={}){const{signed:n}=t;t.size&&d(e,{size:t.size});const r=BigInt(e);if(!n)return r;const i=(e.length-2)/2;return r<=(1n<<8n*BigInt(i)-1n)-1n?r:r-BigInt(`0x${"f".padStart(2*i,"f")}`)-1n}(e,t))}function h(e,t={}){const{signed:n,size:r}=t,i=BigInt(e);let s;r?s=n?(1n<<8n*BigInt(r)-1n)-1n:2n**(8n*BigInt(r))-1n:"number"==typeof e&&(s=BigInt(Number.MAX_SAFE_INTEGER));const a="bigint"==typeof s&&n?-s-1n:0;if(s&&i>s||i<a){const t="bigint"==typeof e?"n":"";throw new u({max:s?`${s}${t}`:void 0,min:`${a}${t}`,signed:n,size:r,value:`${e}${t}`})}const o=`0x${(n&&i<0?(1n<<BigInt(8*r))+BigInt(i):i).toString(16)}`;return r?c(o,{size:r}):o}function p(e){return"string"==typeof e?{address:e,type:"json-rpc"}:e}async function m(e,{address:t,blockTag:n="latest",blockNumber:r}){return f(await e.request({method:"eth_getTransactionCount",params:[t,"bigint"==typeof r?h(r):n]},{dedupe:Boolean(r)}))}async function g(e){return e.request({method:"eth_baseFee",params:[]})}async function x(e,t){return e.request({method:"info.getBlockchainID",params:t})}new e.Id(new Uint8Array(32)),new e.Id(new Uint8Array(32));const b=1,y=2,w=3,v=4,I=5,B=10,$=12345,z={[b]:"avax",[y]:"cascade",[w]:"denali",[v]:"everest",[I]:"fuji",[B]:"testing",[$]:"local"},A=e=>z[e]??"custom",C=async(e,t="AVAX")=>{const{assetID:n}=await async function(e,t){return e.request({method:"avm.getAssetDescription",params:t})}(e.xChainClient,{assetID:t}),{txFee:r,createAssetTxFee:i}=await async function(e){return e.request({method:"avm.getTxFee",params:{}})}(e.xChainClient),{blockchainID:s}=await x(e.infoClient,{alias:"X"}),{blockchainID:a}=await x(e.infoClient,{alias:"P"}),{blockchainID:o}=await x(e.infoClient,{alias:"C"}),{networkID:c}=await async function(e){return e.request({method:"info.getNetworkID",params:{}})}(e.infoClient),u=Number(c),l=await async function(e){const t=await e.request({method:"platform.getFeeConfig",params:{}});return{...t,maxCapacity:BigInt(t.maxCapacity),maxPerSecond:BigInt(t.maxPerSecond),minPrice:BigInt(t.minPrice),targetPerSecond:BigInt(t.targetPerSecond),excessConversionConstant:BigInt(t.excessConversionConstant)}}(e.pChainClient);return Object.freeze({xBlockchainID:s,pBlockchainID:a,cBlockchainID:o,avaxAssetID:n,baseTxFee:BigInt(r),createAssetTxFee:BigInt(i),networkID:u,hrp:A(u),platformFeeConfig:l})},P=2n**256n,k=P-0x1000003d1n,S=P-0x14551231950b75fc4402da1732fc9bebfn,E={a:0n,b:7n},T=e=>F(F(e*e)*e+E.b),D=(e="")=>{throw new Error(e)},N=e=>"bigint"==typeof e,j=e=>"string"==typeof e,q=e=>N(e)&&0n<e&&e<k,M=e=>N(e)&&0n<e&&e<S,U=e=>new Uint8Array(e),O=(e,t)=>((e,t)=>!(e instanceof Uint8Array)||"number"==typeof t&&t>0&&e.length!==t?D("Uint8Array expected"):e)(j(e)?Y(e):U(e),t),F=(e,t=k)=>{let n=e%t;return n>=0n?n:t+n},V=e=>e instanceof H?e:D("Point expected");let R;class H{constructor(e,t,n){this.px=e,this.py=t,this.pz=n}static fromAffine(e){return new H(e.x,e.y,1n)}static fromHex(e){let t;const n=(e=O(e))[0],r=e.subarray(1),i=L(r,0,32),s=e.length;if(33===s&&[2,3].includes(n)){q(i)||D("Point hex invalid: x not FE");let e=G(T(i));!(1&~n)!==(1n==(1n&e))&&(e=F(-e)),t=new H(i,e,1n)}return 65===s&&4===n&&(t=new H(i,L(r,32,64),1n)),t?t.ok():D("Point is not on curve")}static fromPrivateKey(e){return K.mul(ee(e))}get x(){return this.aff().x}get y(){return this.aff().y}equals(e){const{px:t,py:n,pz:r}=this,{px:i,py:s,pz:a}=V(e),o=F(t*a),c=F(i*r),u=F(n*a),l=F(s*r);return o===c&&u===l}negate(){return new H(this.px,F(-this.py),this.pz)}double(){return this.add(this)}add(e){const{px:t,py:n,pz:r}=this,{px:i,py:s,pz:a}=V(e),{a:o,b:c}=E;let u=0n,l=0n,d=0n;const f=F(3n*c);let h=F(t*i),p=F(n*s),m=F(r*a),g=F(t+n),x=F(i+s);g=F(g*x),x=F(h+p),g=F(g-x),x=F(t+r);let b=F(i+a);return x=F(x*b),b=F(h+m),x=F(x-b),b=F(n+r),u=F(s+a),b=F(b*u),u=F(p+m),b=F(b-u),d=F(o*x),u=F(f*m),d=F(u+d),u=F(p-d),d=F(p+d),l=F(u*d),p=F(h+h),p=F(p+h),m=F(o*m),x=F(f*x),p=F(p+m),m=F(h-m),m=F(o*m),x=F(x+m),h=F(p*x),l=F(l+h),h=F(b*x),u=F(g*u),u=F(u-h),h=F(g*p),d=F(b*d),d=F(d+h),new H(u,l,d)}mul(e,t=!0){if(!t&&0n===e)return J;if(M(e)||D("invalid scalar"),this.equals(K))return te(e).p;let n=J,r=K;for(let i=this;e>0n;i=i.double(),e>>=1n)1n&e?n=n.add(i):t&&(r=r.add(i));return n}mulAddQUns(e,t,n){return this.mul(t,!1).add(e.mul(n,!1)).ok()}toAffine(){const{px:e,py:t,pz:n}=this;if(this.equals(J))return{x:0n,y:0n};if(1n===n)return{x:e,y:t};const r=Z(n);return 1n!==F(n*r)&&D("invalid inverse"),{x:F(e*r),y:F(t*r)}}assertValidity(){const{x:e,y:t}=this.aff();return q(e)&&q(t)||D("Point invalid: x or y"),F(t*t)===T(e)?this:D("Point invalid: not on curve")}multiply(e){return this.mul(e)}aff(){return this.toAffine()}ok(){return this.assertValidity()}toHex(e=!0){const{x:t,y:n}=this.aff();return(e?0n==(1n&n)?"02":"03":"04")+W(t)+(e?"":W(n))}toRawBytes(e=!0){return Y(this.toHex(e))}}H.BASE=new H(0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798n,0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8n,1n),H.ZERO=new H(0n,1n,0n);const{BASE:K,ZERO:J}=H,Q=(e,t)=>e.toString(16).padStart(t,"0"),X=e=>Array.from(e).map(e=>Q(e,2)).join(""),Y=e=>{const t=e.length;(!j(e)||t%2)&&D("hex invalid 1");const n=U(t/2);for(let t=0;t<n.length;t++){const r=2*t,i=e.slice(r,r+2),s=Number.parseInt(i,16);(Number.isNaN(s)||s<0)&&D("hex invalid 2"),n[t]=s}return n},_=e=>BigInt("0x"+(X(e)||"0")),L=(e,t,n)=>_(e.slice(t,n)),W=e=>X((e=>N(e)&&e>=0n&&e<P?Y(Q(e,64)):D("bigint expected"))(e)),Z=(e,t=k)=>{(0n===e||t<=0n)&&D("no inverse n="+e+" mod="+t);let n=F(e,t),r=t,i=0n,s=1n;for(;0n!==n;){const e=r%n,t=i-s*(r/n);r=n,n=e,i=s,s=t}return 1n===r?F(i,t):D("no inverse")},G=e=>{let t=1n;for(let n=e,r=(k+1n)/4n;r>0n;r>>=1n)1n&r&&(t=t*n%k),n=n*n%k;return F(t*t)===e?t:D("sqrt invalid")},ee=e=>(N(e)||(e=_(O(e,32))),M(e)?e:D("private key out of range")),te=e=>{const t=R||(R=(()=>{const e=[];let t=K,n=t;for(let r=0;r<33;r++){n=t,e.push(n);for(let r=1;r<128;r++)n=n.add(t),e.push(n);t=n.double()}return e})()),n=(e,t)=>{let n=t.negate();return e?n:t};let r=J,i=K;const s=BigInt(255),a=BigInt(8);for(let o=0;o<33;o++){const c=128*o;let u=Number(e&s);e>>=a,u>128&&(u-=256,e+=1n);const l=c,d=c+Math.abs(u)-1,f=o%2!=0,h=u<0;0===u?i=i.add(n(f,t[l])):r=r.add(n(h,t[d]))}return{p:r,f:i}};function ne(t,n){const r=H.fromHex(e.utils.strip0x(t)),i=new Uint8Array(r.toRawBytes(!0)),s=e.secp256k1.publicKeyBytesToAddress(i);return e.utils.formatBech32(n,s)}function re(e){return"string"==typeof e?{evmAccount:p(e)}:e}function ie(t,n){let r;r="string"==typeof t?e.utils.hexToBuffer(t):t;return e.utils.getManagerForVM("EVM").unpack(r,e.Utxo)}const se="C";function ae(t){return t.includes("-")?e.utils.bech32ToBytes(t):e.utils.bech32ToBytes(`P-${t}`)}function oe(e){return e/BigInt(1e9)}function ce(e,t){if(1!==t&&5!==t)throw new Error(`Invalid network ID: ${t}`);switch(e){case"X":return 1===t?"2oYMBNV4eNHyqk2fjjV5nVQLDbtmNJzq5s3qs3Lo6ftnC6FByM":"2JVSBoinj9C2J33VntvzYtVJNZdN2NKiwwKjcumHUWEb5DbBrm";case se:return 1===t?"2q9e4r6Mu3U68nU1fYjgbR6JvwrRx36CohpAX5UQxse55x1Q5":"yH8D7ThNJkxmtkuv2jgBa4P1Rn3Qpr4pPr7QYNfcdoS6k6HWp";case"P":return"11111111111111111111111111111111LpoYY";default:throw new Error(`Invalid chain alias: ${e}`)}}function ue(t,n,r,i,s,a=0n){const o=function(t,n,r,i,s,a=0n,o){const c=e.evm.newImportTx(t,n,r,i,s,a,o);return a*e.utils.costCorethTx(c)}(t,n,r,i,s,a);let c=oe(o);return 0n===c&&(c=1n),e.evm.newImportTx(t,n,r,i,s,c)}exports.prepareExportTxn=async function(t,n){const r=n.context||await C(t),[i,s]=await Promise.all([m(t,{address:`0x${e.utils.strip0x(n.fromAddress)}`}),g(t)]),a=n.exportedOutput.addresses.map(e=>ae(e)),o=function(t,n,r,i,s,a,o){let c=oe(e.evm.estimateExportCost(t,n,r,i,s,a,o));return 0n===c&&(c=1n),e.evm.newExportTx(t,r,i,s,a,c,o)}(r,BigInt(s),n.exportedOutput.amount,ce(n.destinationChain,r.networkID),e.utils.hexToBuffer(n.fromAddress),a,BigInt(i));return{tx:o,exportTx:o.getTx(),chainAlias:"C"}},exports.prepareImportTxn=async function(t,n){const{account:r}=n,i=n.context||await C(t),s=await g(t),a=function(e,t){if(e)return e.map(e=>function(e,t){if(e)return e.startsWith(t)?e:`${t}-${1===e.split("-").length?e:e.split("-")[1]}`}(e,t)).filter(e=>void 0!==e)}(n.fromAddresses,se)||[];if(0===a.length){const e=re(r),n=await async function(e,t,n,r){const i=re(t)?.xpAccount||e.xpAccount,s=re(t)?.evmAccount||e.account;if(!i||!s){const{xp:t,evm:i}=await async function(e){return e.request({method:"avalanche_getAccountPubKey",params:{}})}(e);return`${n}-${ne(i,r)}`}if(!s.publicKey)throw new Error("EVM public key not found for evm account");return`${n}-${ne(s.publicKey,r)}`}(t,e,se,i.hrp);a.push(n)}const o=a.map(e=>ae(e));let c=n.utxos||[];c.length||(c=(await Promise.all(a.map(async e=>await async function(e,t){const n=t=>async function(e,t){return e.request({method:"avax.getUTXOs",params:t})}(e.cChainClient,t),r=[];let i,s=!1;do{const e=await n({addresses:[t.address],...t.sourceChain?{sourceChain:t.sourceChain}:{},...void 0===i?{}:{startIndex:i}});if(r.push(...e.utxos.map(e=>ie(e))),Number(e.numFetched)>=1024?(s=!0,i={address:e.endIndex.address,utxo:e.endIndex.utxo}):s=!1,r.length>=5e3)break}while(s);return r}(t,{address:e,sourceChain:ce(n.sourceChain,i.networkID)})))).flat());const u=ue(i,e.utils.hexToBuffer(n.toAddress),o,c,ce(n.sourceChain,i.networkID),BigInt(s));return{tx:u,importTx:u.getTx(),chainAlias:se}};