@avalabs/core-paraswap-sdk 3.1.0-alpha.7 → 3.1.0-alpha.71
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +1 -0
- package/dist/index.d.ts +2 -1
- package/esm/erc20.abi.js +1 -0
- package/esm/models.d.ts +2 -1
- package/esm/performSwap.d.ts +2 -1
- package/esm/performSwap.js +1 -1
- package/esm/types/TransactionSender.d.ts +1 -1
- package/esm/types/TransactionSigner.d.ts +1 -1
- package/package.json +19 -6
- package/dist/index.js +0 -1
package/dist/index.cjs
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var e=require("big.js"),t=require("bn.js"),n=require("paraswap"),a=require("@avalabs/core-utils-sdk"),r=require("@avalabs/core-chains-sdk"),s=require("web3"),i=require("assert"),o=require("ethers");var p=[{inputs:[{internalType:"string",name:"name_",type:"string"},{internalType:"string",name:"symbol_",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}];const d=new n.ParaSwap(r.ChainId.AVALANCHE_MAINNET_ID,void 0,new s);exports.PARASWAP_RETRYABLE_ERRORS=["Price Timeout","An error has occurred, please try again later or contact our support"],exports.hasParaswapError=e=>"string"==typeof e.error,exports.performSwap=async function({srcTokenAddress:s,isSrcTokenNative:u,destTokenAddress:l,isDestTokenNative:y,priceRoute:c,gasLimit:m,maxFeePerGas:w,maxPriorityFeePerGas:T,slippage:f,activeNetwork:v,provider:A,transactionSend:b,transactionSign:h,userAddress:g,networkGasPrice:E}){i(s,"no source token on request"),i(l,"no destination token on request"),i(c,"request requires the paraswap priceRoute"),i(m,"request requires gas limit from paraswap response"),i(g,"Wallet Error: address not defined"),i(E,"network gas price not defined"),i(v,"Network Init Error: Wrong network"),i(!v.isTestnet,"Network Init Error: Wrong network");const k=await async function(){const e=await fetch(`${d.apiURL}/adapters/contracts?network=${r.ChainId.AVALANCHE_MAINNET_ID}`);return(await e.json()).TokenTransferProxy}(),x=u?n.ETHER_ADDRESS:s,S=y?n.ETHER_ADDRESS:l,R=E;let P;const D=new e(c.destAmount).times(1-f/100).toFixed(0),I=new e(c.srcAmount).times(1+f/100).toFixed(0),q="SELL"===c.side?c.srcAmount:I,M="SELL"===c.side?D:c.destAmount;let N=await A.getTransactionCount(g);if(!u){const e=new o.Contract(x,p,A),[t,n]=await a.resolve(e.allowance(g,k));if(n||null===t)throw new Error(`Allowance Error: ${n}`);if(t<BigInt(q)){const[t]=await a.resolve(e.approve.estimateGas(k,q)),{data:n}=await e.approve.populateTransaction(k,q),[r,s]=await a.resolve(h({nonce:N,chainId:v.chainId,maxFeePerGas:R,gasPrice:R,gasLimit:t||BigInt(m),data:n,to:x}));if(!r||s)throw new Error(`Approve Error: ${s}`);const[o,p]=await a.resolve(b(r));if(p)throw new Error(`Approve Error: ${p}`);i(o,"Tx hash empty"),N++,P=o}else P=void 0}const[L,$]=await a.resolve(a.promiseResolveWithBackoff((()=>async function({network:e,srcToken:t,destToken:n,srcAmount:a,destAmount:r,priceRoute:s,userAddress:i,partner:o,partnerAddress:p,partnerFeeBps:u,receiver:l,options:y,srcDecimals:c,destDecimals:m,permit:w,deadline:T}){const f=new URLSearchParams(y),v=`${d.apiURL}/transactions/${e}/?${f.toString()}`,A={priceRoute:s,srcToken:t,destToken:n,srcAmount:a,destAmount:r,userAddress:i,partner:o,partnerAddress:p,partnerFeeBps:u,receiver:l,srcDecimals:c,destDecimals:m,permit:w,deadline:T},b=await fetch(v,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(A)});return await b.json()}({network:v.chainId.toString(),srcToken:x,destToken:S,srcAmount:q,destAmount:M,priceRoute:c,userAddress:g,partner:"Avalanche",partnerAddress:undefined,partnerFeeBps:undefined,receiver:undefined,options:undefined,srcDecimals:c.srcDecimals,destDecimals:c.destDecimals,permit:undefined,deadline:undefined})),(function(e){return"Server too busy"===e.message||e.error}),0,10));if(!L||$||"message"in L)throw new Error(`Data Error: ${$}`);const[F,_]=await a.resolve(h({nonce:N,chainId:v.chainId,maxFeePerGas:w??R,maxPriorityFeePerGas:T,gasLimit:Number(L.gas),data:L.data,to:L.to,value:u?`0x${new t.BN(q).toString("hex")}`:void 0}));if(!F||_)throw new Error(`Tx Error: ${_}`);const[B,C]=await a.resolve(b(F));if(C)throw new Error(`Tx Error: ${C}`);return i(B,"Tx hash empty"),{swapTxHash:B,approveTxHash:P}};
|
package/dist/index.d.ts
CHANGED
|
@@ -59,4 +59,5 @@ declare function performSwap({ srcTokenAddress, isSrcTokenNative, destTokenAddre
|
|
|
59
59
|
approveTxHash: string | undefined;
|
|
60
60
|
}>;
|
|
61
61
|
|
|
62
|
-
export {
|
|
62
|
+
export { PARASWAP_RETRYABLE_ERRORS, hasParaswapError, performSwap };
|
|
63
|
+
export type { AvalancheTransactionRequest, BtcTransactionRequest, ParaswapPricesResponse, ParaswapPricesResponseWithError, ParaswapPricesSuccessResponse, PerformSwapParams, SignTransactionRequest, TransactionSender, TransactionSigner };
|
package/esm/erc20.abi.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e=[{inputs:[{internalType:"string",name:"name_",type:"string"},{internalType:"string",name:"symbol_",type:"string"}],stateMutability:"nonpayable",type:"constructor"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"subtractedValue",type:"uint256"}],name:"decreaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"addedValue",type:"uint256"}],name:"increaseAllowance",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}];export{e as default};
|
package/esm/models.d.ts
CHANGED
|
@@ -32,4 +32,5 @@ interface AvalancheTransactionRequest {
|
|
|
32
32
|
chain: 'X' | 'P' | 'C';
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
export {
|
|
35
|
+
export { PARASWAP_RETRYABLE_ERRORS, hasParaswapError };
|
|
36
|
+
export type { AvalancheTransactionRequest, BtcTransactionRequest, ParaswapPricesResponse, ParaswapPricesResponseWithError, ParaswapPricesSuccessResponse, SignTransactionRequest };
|
package/esm/performSwap.d.ts
CHANGED
package/esm/performSwap.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import e from"
|
|
1
|
+
import e from"big.js";import{BN as r}from"bn.js";import{ETHER_ADDRESS as t}from"paraswap";import{resolve as o,promiseResolveWithBackoff as a}from"@avalabs/core-utils-sdk";import s from"./erc20.abi.js";import{getParaswapSpender as n,buildTx as i}from"./paraswapUtils.js";import d from"assert";import{Contract as c}from"ethers";async function p({srcTokenAddress:p,isSrcTokenNative:m,destTokenAddress:w,isDestTokenNative:u,priceRoute:f,gasLimit:l,maxFeePerGas:h,maxPriorityFeePerGas:g,slippage:k,activeNetwork:E,provider:v,transactionSend:x,transactionSign:A,userAddress:T,networkGasPrice:I}){d(p,"no source token on request"),d(w,"no destination token on request"),d(f,"request requires the paraswap priceRoute"),d(l,"request requires gas limit from paraswap response"),d(T,"Wallet Error: address not defined"),d(I,"network gas price not defined"),d(E,"Network Init Error: Wrong network"),d(!E.isTestnet,"Network Init Error: Wrong network");const P=await n(),F=m?t:p,S=u?t:w,G=I;let L;const $=new e(f.destAmount).times(1-k/100).toFixed(0),b=new e(f.srcAmount).times(1+k/100).toFixed(0),q="SELL"===f.side?f.srcAmount:b,y="SELL"===f.side?$:f.destAmount;let D=await v.getTransactionCount(T);if(!m){const e=new c(F,s,v),[r,t]=await o(e.allowance(T,P));if(t||null===r)throw new Error(`Allowance Error: ${t}`);if(r<BigInt(q)){const[r]=await o(e.approve.estimateGas(P,q)),{data:t}=await e.approve.populateTransaction(P,q),[a,s]=await o(A({nonce:D,chainId:E.chainId,maxFeePerGas:G,gasPrice:G,gasLimit:r||BigInt(l),data:t,to:F}));if(!a||s)throw new Error(`Approve Error: ${s}`);const[n,i]=await o(x(a));if(i)throw new Error(`Approve Error: ${i}`);d(n,"Tx hash empty"),D++,L=n}else L=void 0}const[N,j]=await o(a((()=>i({network:E.chainId.toString(),srcToken:F,destToken:S,srcAmount:q,destAmount:y,priceRoute:f,userAddress:T,partner:"Avalanche",partnerAddress:undefined,partnerFeeBps:undefined,receiver:undefined,options:undefined,srcDecimals:f.srcDecimals,destDecimals:f.destDecimals,permit:undefined,deadline:undefined})),(function(e){return"Server too busy"===e.message||e.error}),0,10));if(!N||j||"message"in N)throw new Error(`Data Error: ${j}`);const[B,R]=await o(A({nonce:D,chainId:E.chainId,maxFeePerGas:h??G,maxPriorityFeePerGas:g,gasLimit:Number(N.gas),data:N.data,to:N.to,value:m?`0x${new r(q).toString("hex")}`:void 0}));if(!B||R)throw new Error(`Tx Error: ${R}`);const[W,H]=await o(x(B));if(H)throw new Error(`Tx Error: ${H}`);return d(W,"Tx hash empty"),{swapTxHash:W,approveTxHash:L}}export{p as performSwap};
|
package/package.json
CHANGED
|
@@ -1,11 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@avalabs/core-paraswap-sdk",
|
|
3
|
-
"version": "3.1.0-alpha.
|
|
3
|
+
"version": "3.1.0-alpha.71",
|
|
4
4
|
"license": "Limited Ecosystem License",
|
|
5
5
|
"private": false,
|
|
6
|
-
"
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "dist/index.cjs",
|
|
7
8
|
"module": "esm/index.js",
|
|
8
9
|
"typings": "dist/index.d.ts",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"types": "./esm/index.d.ts",
|
|
13
|
+
"import": "./esm/index.js",
|
|
14
|
+
"require": "./dist/index.cjs",
|
|
15
|
+
"default": "./esm/index.js"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
9
18
|
"files": [
|
|
10
19
|
"dist",
|
|
11
20
|
"esm"
|
|
@@ -14,7 +23,7 @@
|
|
|
14
23
|
"scripts": {
|
|
15
24
|
"start": "rollup -c --watch",
|
|
16
25
|
"build": "rollup -c",
|
|
17
|
-
"lint": "eslint --fix -c ./.eslintrc.
|
|
26
|
+
"lint": "eslint --fix -c ./.eslintrc.cjs \"src/**/*.ts*\""
|
|
18
27
|
},
|
|
19
28
|
"devDependencies": {
|
|
20
29
|
"@types/big.js": "6.1.6",
|
|
@@ -23,6 +32,7 @@
|
|
|
23
32
|
"@types/react": "18.0.26",
|
|
24
33
|
"big.js": "6.2.1",
|
|
25
34
|
"bitcoinjs-lib": "5.2.0",
|
|
35
|
+
"bn.js": "5.2.1",
|
|
26
36
|
"coinselect": "3.1.13",
|
|
27
37
|
"ethers": "6.7.1",
|
|
28
38
|
"jest": "29.7.0",
|
|
@@ -32,12 +42,15 @@
|
|
|
32
42
|
"ts-jest": "29.0.5"
|
|
33
43
|
},
|
|
34
44
|
"dependencies": {
|
|
35
|
-
"@avalabs/core-
|
|
36
|
-
"@avalabs/core-
|
|
45
|
+
"@avalabs/core-chains-sdk": "3.1.0-alpha.71",
|
|
46
|
+
"@avalabs/core-utils-sdk": "3.1.0-alpha.71",
|
|
47
|
+
"@avalabs/core-wallets-sdk": "3.1.0-alpha.71",
|
|
48
|
+
"web3": "4.16.0"
|
|
37
49
|
},
|
|
38
50
|
"peerDependencies": {
|
|
39
51
|
"big.js": "^6.2.1",
|
|
40
52
|
"bitcoinjs-lib": "^5.2.0",
|
|
53
|
+
"bn.js": "^5.2.1",
|
|
41
54
|
"coinselect": "^3.1.12",
|
|
42
55
|
"ethers": "^6.7.1",
|
|
43
56
|
"paraswap": "5.2.0",
|
|
@@ -47,5 +60,5 @@
|
|
|
47
60
|
"node": "16.13.1",
|
|
48
61
|
"yarn": "1.22.17"
|
|
49
62
|
},
|
|
50
|
-
"gitHead": "
|
|
63
|
+
"gitHead": "00aa0d58bc264ebac22156dd7619f34b96a75424"
|
|
51
64
|
}
|
package/dist/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";var e=require("@openzeppelin/contracts/build/contracts/ERC20.json"),r=require("big.js"),t=require("bn.js"),s=require("paraswap"),a=require("@avalabs/core-utils-sdk"),n=require("@avalabs/core-chains-sdk"),o=require("web3"),i=require("assert"),c=require("ethers");const d=new s.ParaSwap(n.ChainId.AVALANCHE_MAINNET_ID,void 0,new o);exports.PARASWAP_RETRYABLE_ERRORS=["Price Timeout","An error has occurred, please try again later or contact our support"],exports.hasParaswapError=e=>"string"==typeof e.error,exports.performSwap=async function({srcTokenAddress:o,isSrcTokenNative:p,destTokenAddress:u,isDestTokenNative:w,priceRoute:m,gasLimit:l,maxFeePerGas:A,maxPriorityFeePerGas:h,slippage:E,activeNetwork:f,provider:v,transactionSend:T,transactionSign:k,userAddress:g,networkGasPrice:R}){i(o,"no source token on request"),i(u,"no destination token on request"),i(m,"request requires the paraswap priceRoute"),i(l,"request requires gas limit from paraswap response"),i(g,"Wallet Error: address not defined"),i(R,"network gas price not defined"),i(f,"Network Init Error: Wrong network"),i(!f.isTestnet,"Network Init Error: Wrong network");const S=await async function(){const e=await fetch(`${d.apiURL}/adapters/contracts?network=${n.ChainId.AVALANCHE_MAINNET_ID}`);return(await e.json()).TokenTransferProxy}(),x=p?s.ETHER_ADDRESS:o,P=w?s.ETHER_ADDRESS:u,D=R;let q;const I=new r(m.destAmount).times(1-E/100).toFixed(0),y=new r(m.srcAmount).times(1+E/100).toFixed(0),N="SELL"===m.side?m.srcAmount:y,L="SELL"===m.side?I:m.destAmount;let $=await v.getTransactionCount(g);if(!p){const r=new c.Contract(x,e.abi,v),[t,s]=await a.resolve(r.allowance(g,S));if(s||null===t)throw new Error(`Allowance Error: ${s}`);if(t<BigInt(N)){const[e]=await a.resolve(r.approve.estimateGas(S,N)),{data:t}=await r.approve.populateTransaction(S,N),[s,n]=await a.resolve(k({nonce:$,chainId:f.chainId,maxFeePerGas:D,gasPrice:D,gasLimit:e||BigInt(l),data:t,to:x}));if(!s||n)throw new Error(`Approve Error: ${n}`);const[o,c]=await a.resolve(T(s));if(c)throw new Error(`Approve Error: ${c}`);i(o,"Tx hash empty"),$++,q=o}else q=void 0}const[b,F]=await a.resolve(a.promiseResolveWithBackoff((()=>async function({network:e,srcToken:r,destToken:t,srcAmount:s,destAmount:a,priceRoute:n,userAddress:o,partner:i,partnerAddress:c,partnerFeeBps:p,receiver:u,options:w,srcDecimals:m,destDecimals:l,permit:A,deadline:h}){const E=new URLSearchParams(w),f=`${d.apiURL}/transactions/${e}/?${E.toString()}`,v={priceRoute:n,srcToken:r,destToken:t,srcAmount:s,destAmount:a,userAddress:o,partner:i,partnerAddress:c,partnerFeeBps:p,receiver:u,srcDecimals:m,destDecimals:l,permit:A,deadline:h},T=await fetch(f,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(v)});return await T.json()}({network:f.chainId.toString(),srcToken:x,destToken:P,srcAmount:N,destAmount:L,priceRoute:m,userAddress:g,partner:"Avalanche",partnerAddress:undefined,partnerFeeBps:undefined,receiver:undefined,options:undefined,srcDecimals:m.srcDecimals,destDecimals:m.destDecimals,permit:undefined,deadline:undefined})),(function(e){return"Server too busy"===e.message||e.error}),0,10));if(!b||F||"message"in b)throw new Error(`Data Error: ${F}`);const[B,C]=await a.resolve(k({nonce:$,chainId:f.chainId,maxFeePerGas:A??D,maxPriorityFeePerGas:h,gasLimit:Number(b.gas),data:b.data,to:b.to,value:p?`0x${new t.BN(N).toString("hex")}`:void 0}));if(!B||C)throw new Error(`Tx Error: ${C}`);const[_,G]=await a.resolve(T(B));if(G)throw new Error(`Tx Error: ${G}`);return i(_,"Tx hash empty"),{swapTxHash:_,approveTxHash:q}};
|