@0x/0x-parser
Advanced tools
Comparing version 2.1.1 to 2.1.2
@@ -1,1 +0,1 @@ | ||
"use strict";var x=Object.defineProperty;var M=Object.getOwnPropertyDescriptor;var U=Object.getOwnPropertyNames;var F=Object.prototype.hasOwnProperty;var Y=(t,r)=>{for(var i in r)x(t,i,{get:r[i],enumerable:true})};var V=(t,r,i,s)=>{if(r&&typeof r==="object"||typeof r==="function"){for(let d of U(r))if(!F.call(t,d)&&d!==i)x(t,d,{get:()=>r[d],enumerable:!(s=M(r,d))||s.enumerable})}return t};var P=t=>V(x({},"__esModule",{value:true}),t);var W={};Y(W,{parseSwap:()=>X});module.exports=P(W);var f=require("viem");var N=[{inputs:[{components:[{internalType:"address",name:"recipient",type:"address"},{internalType:"contract IERC20",name:"buyToken",type:"address"},{internalType:"uint256",name:"minAmountOut",type:"uint256"}],internalType:"struct SettlerBase.AllowedSlippage",name:"slippage",type:"tuple"},{internalType:"bytes[]",name:"actions",type:"bytes[]"},{internalType:"bytes32",name:"",type:"bytes32"},{internalType:"address",name:"msgSender",type:"address"},{internalType:"bytes",name:"sig",type:"bytes"}],name:"executeMetaTxn",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}];var w={EXECUTE_META_TXN:"0xfd3ad6d4"};var A={1:"ETH",10:"ETH",56:"BNB",137:"MATIC",8453:"ETH",42161:"ETH",43114:"AVAX"};var h=`0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE`;var k=`0xcA11bde05977b3631167028862bE2a173976CA11`;var R=`0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789`;var u=require("viem");function D(t){return[1,10,56,137,8453,42161,43114].includes(t)}function C(t,r){const{recipient:i,direction:s="to"}=r;let d=0n;const o=i.toLowerCase();function a(e){if(!e.value)return;const n=s==="from"?e.from:e.to;if(n.toLowerCase()===o){d+=(0,u.fromHex)(e.value,"bigint")}}function p(e){for(const n of e){a(n);if(n.calls&&n.calls.length>0){p(n.calls)}}}p(t.calls);return(0,u.formatEther)(d)}async function O({publicClient:t,transactionReceipt:r}){const i={Transfer:`0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef`};const s=r.logs.filter(e=>e.topics[0]===i.Transfer).map(e=>({...e,address:(0,u.getAddress)(e.address)}));const d=[...s.map(e=>({abi:u.erc20Abi,address:e.address,functionName:"symbol"})),...s.map(e=>({abi:u.erc20Abi,address:e.address,functionName:"decimals"}))];const o=await t.multicall({contracts:d});const a=Math.floor(o.length/2);const p=s.map((e,n)=>{const E=o[n].result;const g=o[a+n].result;const S=e.data==="0x"?"0":(0,u.formatUnits)(BigInt(e.data),g);const{address:_,topics:T}=e;const{1:I,2:L}=T;const c=(0,u.getAddress)(v(I));const l=(0,u.getAddress)(v(L));return{to:l,from:c,symbol:E,amount:S,address:_,decimals:g}}).filter(e=>e.amount!=="0");return p}function v(t){return`0x${t.slice(-40)}`}function H({logs:t,trace:r,chainId:i,smartContractWallet:s}){const d=t.reduce((n,E)=>{if(E.to===s)return{...n,output:E};if(E.from===s)return{...n,input:E};return n},{});let{input:o,output:a}=d;const p=C(r,{recipient:s});const e=C(r,{recipient:s,direction:"from"});if(!a&&p!=="0"){if(o){return{tokenIn:{address:o.address,amount:o.amount,symbol:o.symbol},tokenOut:{address:h,amount:p,symbol:A[i]}}}else{return null}}if(!o&&e!=="0"){const n=i===56?"WBNB":i===137?"WMATIC":"WETH";const E=t.find(g=>g.symbol===n);if(E){return{tokenIn:{address:h,amount:E.amount,symbol:A[i]},tokenOut:{address:a?.address,amount:a?.amount,symbol:a?.symbol}}}else{return null}}if(o&&a){return{tokenIn:{address:o.address,amount:o.amount,symbol:o.symbol},tokenOut:{address:a.address,amount:a.amount,symbol:a.symbol}}}return null}async function X({publicClient:t,transactionHash:r,smartContractWallet:i}){const s=await t.getChainId();if(!D(s)){throw new Error(`chainId ${s} is unsupported\u2026`)}const d=t.extend(l=>({async traceCall(y){return l.request({method:"debug_traceTransaction",params:[y.hash,{tracer:"callTracer"}]})}}));const o=await d.traceCall({hash:r});const a=await t.getTransaction({hash:r});const{from:p,value:e,to:n}=a;const E=n===R.toLowerCase();const g=C(o,{recipient:p});const S=await t.getTransactionReceipt({hash:r});const _=e>0n;const T=await O({publicClient:t,transactionReceipt:S});if(E){if(!i){throw new Error("This is an ERC-4337 transaction. You must provide a smart contract wallet address to 0x-parser.")}return H({logs:T,trace:o,chainId:s,smartContractWallet:i})}const I=T.filter(l=>l.from.toLowerCase()===p.toLowerCase());let L=I.length?I[0]:T[0];let c=g==="0"?T.find(l=>{return l.to.toLowerCase()===p.toLowerCase()}):{symbol:A[s],amount:g,address:h};if(n?.toLowerCase()===k.toLowerCase()){const{args:l}=(0,f.decodeFunctionData)({abi:f.multicall3Abi,data:a.input});const{args:y}=(0,f.decodeFunctionData)({abi:N,data:l[0][1].callData});const b=y[0].recipient.toLowerCase();const m=C(o,{recipient:b});if(m==="0"){c=c=T[T.length-1]}else{c={symbol:A[s],amount:m,address:h}}}if(a.input.startsWith(w.EXECUTE_META_TXN)){const{args:l}=(0,f.decodeFunctionData)({abi:N,data:a.input});const{3:y}=l;const b=C(o,{recipient:y});if(b==="0"){c=T[T.length-1];const m=T.filter(B=>B.to.toLowerCase()===y.toLowerCase());if(m.length===1){c={symbol:m[0].symbol,amount:m[0].amount,address:m[0].address}}else{c={symbol:"",amount:"",address:""};console.error("File a bug report here, including the expected results (URL to a block explorer) and the unexpected results: https://github.com/0xProject/0x-parser/issues/new/choose.")}}else{c={symbol:A[s],amount:b,address:h}}}if(_){const l=(0,f.formatEther)(e);const y=T.filter(b=>b.to.toLowerCase()===p).reduce((b,m)=>({symbol:m.symbol,amount:(0,f.formatUnits)(BigInt(b.amount)+(0,f.parseUnits)(m.amount,m.decimals),m.decimals),address:m.address}),{symbol:"",amount:"",address:""});return{tokenIn:{symbol:A[s],address:h,amount:l},tokenOut:y}}if(!c){console.error("File a bug report here, including the expected results (URL to a block explorer) and the unexpected results: https://github.com/0xProject/0x-parser/issues/new/choose.");return null}return{tokenIn:{symbol:L.symbol,amount:L.amount,address:L.address},tokenOut:{symbol:c.symbol,amount:c.amount,address:c.address}}}0&&(module.exports={parseSwap}); | ||
"use strict";var x=Object.defineProperty;var M=Object.getOwnPropertyDescriptor;var U=Object.getOwnPropertyNames;var F=Object.prototype.hasOwnProperty;var Y=(t,r)=>{for(var i in r)x(t,i,{get:r[i],enumerable:true})};var V=(t,r,i,s)=>{if(r&&typeof r==="object"||typeof r==="function"){for(let d of U(r))if(!F.call(t,d)&&d!==i)x(t,d,{get:()=>r[d],enumerable:!(s=M(r,d))||s.enumerable})}return t};var P=t=>V(x({},"__esModule",{value:true}),t);var W={};Y(W,{parseSwap:()=>X});module.exports=P(W);var f=require("viem");var N=[{inputs:[{components:[{internalType:"address",name:"recipient",type:"address"},{internalType:"contract IERC20",name:"buyToken",type:"address"},{internalType:"uint256",name:"minAmountOut",type:"uint256"}],internalType:"struct SettlerBase.AllowedSlippage",name:"slippage",type:"tuple"},{internalType:"bytes[]",name:"actions",type:"bytes[]"},{internalType:"bytes32",name:"",type:"bytes32"},{internalType:"address",name:"msgSender",type:"address"},{internalType:"bytes",name:"sig",type:"bytes"}],name:"executeMetaTxn",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}];var w={EXECUTE_META_TXN:"0xfd3ad6d4"};var A={1:"ETH",10:"ETH",56:"BNB",137:"MATIC",8453:"ETH",42161:"ETH",43114:"AVAX"};var h=`0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE`;var k=`0xcA11bde05977b3631167028862bE2a173976CA11`;var R=`0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789`;var u=require("viem");function D(t){return[1,10,56,137,8453,42161,43114].includes(t)}function C(t,r){const{recipient:i,direction:s="to"}=r;let d=0n;const o=i.toLowerCase();function n(e){if(!e.value)return;const a=s==="from"?e.from:e.to;if(a.toLowerCase()===o){d+=(0,u.fromHex)(e.value,"bigint")}}function p(e){for(const a of e){n(a);if(a.calls&&a.calls.length>0){p(a.calls)}}}p(t.calls);return(0,u.formatEther)(d)}async function O({publicClient:t,transactionReceipt:r}){const i={Transfer:`0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef`};const s=r.logs.filter(e=>e.topics[0]===i.Transfer).map(e=>({...e,address:(0,u.getAddress)(e.address)}));const d=[...s.map(e=>({abi:u.erc20Abi,address:e.address,functionName:"symbol"})),...s.map(e=>({abi:u.erc20Abi,address:e.address,functionName:"decimals"}))];const o=await t.multicall({contracts:d});const n=Math.floor(o.length/2);const p=s.map((e,a)=>{const E=o[a].result;const g=o[n+a].result;const S=e.data==="0x"?"0":(0,u.formatUnits)(BigInt(e.data),g);const{address:_,topics:T}=e;const{1:I,2:L}=T;const c=(0,u.getAddress)(v(I));const l=(0,u.getAddress)(v(L));return{to:l,from:c,symbol:E,amount:S,address:_,decimals:g}}).filter(e=>e.amount!=="0");return p}function v(t){return`0x${t.slice(-40)}`}function H({logs:t,trace:r,chainId:i,smartContractWallet:s}){const d=t.reduce((a,E)=>{if(E.to===s)return{...a,output:E};if(E.from===s)return{...a,input:E};return a},{});let{input:o,output:n}=d;const p=C(r,{recipient:s});const e=C(r,{recipient:s,direction:"from"});if(!n&&p!=="0"){if(o){return{tokenIn:{address:o.address,amount:o.amount,symbol:o.symbol},tokenOut:{address:h,amount:p,symbol:A[i]}}}else{return null}}if(!o&&e!=="0"){const a=i===56?"WBNB":i===137?"WMATIC":"WETH";const E=t.find(g=>g.symbol===a);if(E&&n){return{tokenIn:{address:h,amount:E.amount,symbol:A[i]},tokenOut:{address:n.address,amount:n.amount,symbol:n.symbol}}}else{return null}}if(o&&n){return{tokenIn:{address:o.address,amount:o.amount,symbol:o.symbol},tokenOut:{address:n.address,amount:n.amount,symbol:n.symbol}}}return null}async function X({publicClient:t,transactionHash:r,smartContractWallet:i}){const s=await t.getChainId();if(!D(s)){throw new Error(`chainId ${s} is unsupported\u2026`)}const d=t.extend(l=>({async traceCall(y){return l.request({method:"debug_traceTransaction",params:[y.hash,{tracer:"callTracer"}]})}}));const o=await d.traceCall({hash:r});const n=await t.getTransaction({hash:r});const{from:p,value:e,to:a}=n;const E=a===R.toLowerCase();const g=C(o,{recipient:p});const S=await t.getTransactionReceipt({hash:r});const _=e>0n;const T=await O({publicClient:t,transactionReceipt:S});if(E){if(!i){throw new Error("This is an ERC-4337 transaction. You must provide a smart contract wallet address to 0x-parser.")}return H({logs:T,trace:o,chainId:s,smartContractWallet:i})}const I=T.filter(l=>l.from.toLowerCase()===p.toLowerCase());let L=I.length?I[0]:T[0];let c=g==="0"?T.find(l=>{return l.to.toLowerCase()===p.toLowerCase()}):{symbol:A[s],amount:g,address:h};if(a?.toLowerCase()===k.toLowerCase()){const{args:l}=(0,f.decodeFunctionData)({abi:f.multicall3Abi,data:n.input});const{args:y}=(0,f.decodeFunctionData)({abi:N,data:l[0][1].callData});const b=y[0].recipient.toLowerCase();const m=C(o,{recipient:b});if(m==="0"){c=c=T[T.length-1]}else{c={symbol:A[s],amount:m,address:h}}}if(n.input.startsWith(w.EXECUTE_META_TXN)){const{args:l}=(0,f.decodeFunctionData)({abi:N,data:n.input});const{3:y}=l;const b=C(o,{recipient:y});if(b==="0"){c=T[T.length-1];const m=T.filter(B=>B.to.toLowerCase()===y.toLowerCase());if(m.length===1){c={symbol:m[0].symbol,amount:m[0].amount,address:m[0].address}}else{c={symbol:"",amount:"",address:""};console.error("File a bug report here, including the expected results (URL to a block explorer) and the unexpected results: https://github.com/0xProject/0x-parser/issues/new/choose.")}}else{c={symbol:A[s],amount:b,address:h}}}if(_){const l=(0,f.formatEther)(e);const y=T.filter(b=>b.to.toLowerCase()===p).reduce((b,m)=>({symbol:m.symbol,amount:(0,f.formatUnits)(BigInt(b.amount)+(0,f.parseUnits)(m.amount,m.decimals),m.decimals),address:m.address}),{symbol:"",amount:"",address:""});return{tokenIn:{symbol:A[s],address:h,amount:l},tokenOut:y}}if(!c){console.error("File a bug report here, including the expected results (URL to a block explorer) and the unexpected results: https://github.com/0xProject/0x-parser/issues/new/choose.");return null}return{tokenIn:{symbol:L.symbol,amount:L.amount,address:L.address},tokenOut:{symbol:c.symbol,amount:c.amount,address:c.address}}}0&&(module.exports={parseSwap}); |
@@ -8,14 +8,3 @@ import type { Chain, Address, Transport, PublicClient } from "viem"; | ||
tokenIn: { | ||
address: string; | ||
amount: string; | ||
symbol: string; | ||
}; | ||
tokenOut: { | ||
address: `0x${string}` | undefined; | ||
amount: string | undefined; | ||
symbol: string | undefined; | ||
}; | ||
} | { | ||
tokenIn: { | ||
symbol: string; | ||
address: string; | ||
@@ -22,0 +11,0 @@ amount: string; |
@@ -1,1 +0,1 @@ | ||
import{parseUnits as Y,formatUnits as V,formatEther as P,multicall3Abi as X,decodeFunctionData as x}from"viem";var S=[{inputs:[{components:[{internalType:"address",name:"recipient",type:"address"},{internalType:"contract IERC20",name:"buyToken",type:"address"},{internalType:"uint256",name:"minAmountOut",type:"uint256"}],internalType:"struct SettlerBase.AllowedSlippage",name:"slippage",type:"tuple"},{internalType:"bytes[]",name:"actions",type:"bytes[]"},{internalType:"bytes32",name:"",type:"bytes32"},{internalType:"address",name:"msgSender",type:"address"},{internalType:"bytes",name:"sig",type:"bytes"}],name:"executeMetaTxn",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}];var N={EXECUTE_META_TXN:"0xfd3ad6d4"};var y={1:"ETH",10:"ETH",56:"BNB",137:"MATIC",8453:"ETH",42161:"ETH",43114:"AVAX"};var b=`0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE`;var w=`0xcA11bde05977b3631167028862bE2a173976CA11`;var k=`0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789`;import{fromHex as M,erc20Abi as R,getAddress as _,formatUnits as U,formatEther as F}from"viem";function D(n){return[1,10,56,137,8453,42161,43114].includes(n)}function h(n,p){const{recipient:m,direction:s="to"}=p;let T=0n;const t=m.toLowerCase();function o(e){if(!e.value)return;const r=s==="from"?e.from:e.to;if(r.toLowerCase()===t){T+=M(e.value,"bigint")}}function c(e){for(const r of e){o(r);if(r.calls&&r.calls.length>0){c(r.calls)}}}c(n.calls);return F(T)}async function O({publicClient:n,transactionReceipt:p}){const m={Transfer:`0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef`};const s=p.logs.filter(e=>e.topics[0]===m.Transfer).map(e=>({...e,address:_(e.address)}));const T=[...s.map(e=>({abi:R,address:e.address,functionName:"symbol"})),...s.map(e=>({abi:R,address:e.address,functionName:"decimals"}))];const t=await n.multicall({contracts:T});const o=Math.floor(t.length/2);const c=s.map((e,r)=>{const u=t[r].result;const A=t[o+r].result;const L=e.data==="0x"?"0":U(BigInt(e.data),A);const{address:I,topics:l}=e;const{1:C,2:g}=l;const a=_(v(C));const i=_(v(g));return{to:i,from:a,symbol:u,amount:L,address:I,decimals:A}}).filter(e=>e.amount!=="0");return c}function v(n){return`0x${n.slice(-40)}`}function H({logs:n,trace:p,chainId:m,smartContractWallet:s}){const T=n.reduce((r,u)=>{if(u.to===s)return{...r,output:u};if(u.from===s)return{...r,input:u};return r},{});let{input:t,output:o}=T;const c=h(p,{recipient:s});const e=h(p,{recipient:s,direction:"from"});if(!o&&c!=="0"){if(t){return{tokenIn:{address:t.address,amount:t.amount,symbol:t.symbol},tokenOut:{address:b,amount:c,symbol:y[m]}}}else{return null}}if(!t&&e!=="0"){const r=m===56?"WBNB":m===137?"WMATIC":"WETH";const u=n.find(A=>A.symbol===r);if(u){return{tokenIn:{address:b,amount:u.amount,symbol:y[m]},tokenOut:{address:o?.address,amount:o?.amount,symbol:o?.symbol}}}else{return null}}if(t&&o){return{tokenIn:{address:t.address,amount:t.amount,symbol:t.symbol},tokenOut:{address:o.address,amount:o.amount,symbol:o.symbol}}}return null}async function J({publicClient:n,transactionHash:p,smartContractWallet:m}){const s=await n.getChainId();if(!D(s)){throw new Error(`chainId ${s} is unsupported\u2026`)}const T=n.extend(i=>({async traceCall(f){return i.request({method:"debug_traceTransaction",params:[f.hash,{tracer:"callTracer"}]})}}));const t=await T.traceCall({hash:p});const o=await n.getTransaction({hash:p});const{from:c,value:e,to:r}=o;const u=r===k.toLowerCase();const A=h(t,{recipient:c});const L=await n.getTransactionReceipt({hash:p});const I=e>0n;const l=await O({publicClient:n,transactionReceipt:L});if(u){if(!m){throw new Error("This is an ERC-4337 transaction. You must provide a smart contract wallet address to 0x-parser.")}return H({logs:l,trace:t,chainId:s,smartContractWallet:m})}const C=l.filter(i=>i.from.toLowerCase()===c.toLowerCase());let g=C.length?C[0]:l[0];let a=A==="0"?l.find(i=>{return i.to.toLowerCase()===c.toLowerCase()}):{symbol:y[s],amount:A,address:b};if(r?.toLowerCase()===w.toLowerCase()){const{args:i}=x({abi:X,data:o.input});const{args:f}=x({abi:S,data:i[0][1].callData});const E=f[0].recipient.toLowerCase();const d=h(t,{recipient:E});if(d==="0"){a=a=l[l.length-1]}else{a={symbol:y[s],amount:d,address:b}}}if(o.input.startsWith(N.EXECUTE_META_TXN)){const{args:i}=x({abi:S,data:o.input});const{3:f}=i;const E=h(t,{recipient:f});if(E==="0"){a=l[l.length-1];const d=l.filter(B=>B.to.toLowerCase()===f.toLowerCase());if(d.length===1){a={symbol:d[0].symbol,amount:d[0].amount,address:d[0].address}}else{a={symbol:"",amount:"",address:""};console.error("File a bug report here, including the expected results (URL to a block explorer) and the unexpected results: https://github.com/0xProject/0x-parser/issues/new/choose.")}}else{a={symbol:y[s],amount:E,address:b}}}if(I){const i=P(e);const f=l.filter(E=>E.to.toLowerCase()===c).reduce((E,d)=>({symbol:d.symbol,amount:V(BigInt(E.amount)+Y(d.amount,d.decimals),d.decimals),address:d.address}),{symbol:"",amount:"",address:""});return{tokenIn:{symbol:y[s],address:b,amount:i},tokenOut:f}}if(!a){console.error("File a bug report here, including the expected results (URL to a block explorer) and the unexpected results: https://github.com/0xProject/0x-parser/issues/new/choose.");return null}return{tokenIn:{symbol:g.symbol,amount:g.amount,address:g.address},tokenOut:{symbol:a.symbol,amount:a.amount,address:a.address}}}export{J as parseSwap}; | ||
import{parseUnits as Y,formatUnits as V,formatEther as P,multicall3Abi as X,decodeFunctionData as x}from"viem";var S=[{inputs:[{components:[{internalType:"address",name:"recipient",type:"address"},{internalType:"contract IERC20",name:"buyToken",type:"address"},{internalType:"uint256",name:"minAmountOut",type:"uint256"}],internalType:"struct SettlerBase.AllowedSlippage",name:"slippage",type:"tuple"},{internalType:"bytes[]",name:"actions",type:"bytes[]"},{internalType:"bytes32",name:"",type:"bytes32"},{internalType:"address",name:"msgSender",type:"address"},{internalType:"bytes",name:"sig",type:"bytes"}],name:"executeMetaTxn",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}];var N={EXECUTE_META_TXN:"0xfd3ad6d4"};var y={1:"ETH",10:"ETH",56:"BNB",137:"MATIC",8453:"ETH",42161:"ETH",43114:"AVAX"};var b=`0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE`;var w=`0xcA11bde05977b3631167028862bE2a173976CA11`;var k=`0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789`;import{fromHex as M,erc20Abi as R,getAddress as _,formatUnits as U,formatEther as F}from"viem";function D(n){return[1,10,56,137,8453,42161,43114].includes(n)}function h(n,p){const{recipient:m,direction:s="to"}=p;let T=0n;const t=m.toLowerCase();function r(e){if(!e.value)return;const o=s==="from"?e.from:e.to;if(o.toLowerCase()===t){T+=M(e.value,"bigint")}}function c(e){for(const o of e){r(o);if(o.calls&&o.calls.length>0){c(o.calls)}}}c(n.calls);return F(T)}async function O({publicClient:n,transactionReceipt:p}){const m={Transfer:`0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef`};const s=p.logs.filter(e=>e.topics[0]===m.Transfer).map(e=>({...e,address:_(e.address)}));const T=[...s.map(e=>({abi:R,address:e.address,functionName:"symbol"})),...s.map(e=>({abi:R,address:e.address,functionName:"decimals"}))];const t=await n.multicall({contracts:T});const r=Math.floor(t.length/2);const c=s.map((e,o)=>{const u=t[o].result;const A=t[r+o].result;const L=e.data==="0x"?"0":U(BigInt(e.data),A);const{address:I,topics:l}=e;const{1:C,2:g}=l;const a=_(v(C));const i=_(v(g));return{to:i,from:a,symbol:u,amount:L,address:I,decimals:A}}).filter(e=>e.amount!=="0");return c}function v(n){return`0x${n.slice(-40)}`}function H({logs:n,trace:p,chainId:m,smartContractWallet:s}){const T=n.reduce((o,u)=>{if(u.to===s)return{...o,output:u};if(u.from===s)return{...o,input:u};return o},{});let{input:t,output:r}=T;const c=h(p,{recipient:s});const e=h(p,{recipient:s,direction:"from"});if(!r&&c!=="0"){if(t){return{tokenIn:{address:t.address,amount:t.amount,symbol:t.symbol},tokenOut:{address:b,amount:c,symbol:y[m]}}}else{return null}}if(!t&&e!=="0"){const o=m===56?"WBNB":m===137?"WMATIC":"WETH";const u=n.find(A=>A.symbol===o);if(u&&r){return{tokenIn:{address:b,amount:u.amount,symbol:y[m]},tokenOut:{address:r.address,amount:r.amount,symbol:r.symbol}}}else{return null}}if(t&&r){return{tokenIn:{address:t.address,amount:t.amount,symbol:t.symbol},tokenOut:{address:r.address,amount:r.amount,symbol:r.symbol}}}return null}async function J({publicClient:n,transactionHash:p,smartContractWallet:m}){const s=await n.getChainId();if(!D(s)){throw new Error(`chainId ${s} is unsupported\u2026`)}const T=n.extend(i=>({async traceCall(f){return i.request({method:"debug_traceTransaction",params:[f.hash,{tracer:"callTracer"}]})}}));const t=await T.traceCall({hash:p});const r=await n.getTransaction({hash:p});const{from:c,value:e,to:o}=r;const u=o===k.toLowerCase();const A=h(t,{recipient:c});const L=await n.getTransactionReceipt({hash:p});const I=e>0n;const l=await O({publicClient:n,transactionReceipt:L});if(u){if(!m){throw new Error("This is an ERC-4337 transaction. You must provide a smart contract wallet address to 0x-parser.")}return H({logs:l,trace:t,chainId:s,smartContractWallet:m})}const C=l.filter(i=>i.from.toLowerCase()===c.toLowerCase());let g=C.length?C[0]:l[0];let a=A==="0"?l.find(i=>{return i.to.toLowerCase()===c.toLowerCase()}):{symbol:y[s],amount:A,address:b};if(o?.toLowerCase()===w.toLowerCase()){const{args:i}=x({abi:X,data:r.input});const{args:f}=x({abi:S,data:i[0][1].callData});const E=f[0].recipient.toLowerCase();const d=h(t,{recipient:E});if(d==="0"){a=a=l[l.length-1]}else{a={symbol:y[s],amount:d,address:b}}}if(r.input.startsWith(N.EXECUTE_META_TXN)){const{args:i}=x({abi:S,data:r.input});const{3:f}=i;const E=h(t,{recipient:f});if(E==="0"){a=l[l.length-1];const d=l.filter(B=>B.to.toLowerCase()===f.toLowerCase());if(d.length===1){a={symbol:d[0].symbol,amount:d[0].amount,address:d[0].address}}else{a={symbol:"",amount:"",address:""};console.error("File a bug report here, including the expected results (URL to a block explorer) and the unexpected results: https://github.com/0xProject/0x-parser/issues/new/choose.")}}else{a={symbol:y[s],amount:E,address:b}}}if(I){const i=P(e);const f=l.filter(E=>E.to.toLowerCase()===c).reduce((E,d)=>({symbol:d.symbol,amount:V(BigInt(E.amount)+Y(d.amount,d.decimals),d.decimals),address:d.address}),{symbol:"",amount:"",address:""});return{tokenIn:{symbol:y[s],address:b,amount:i},tokenOut:f}}if(!a){console.error("File a bug report here, including the expected results (URL to a block explorer) and the unexpected results: https://github.com/0xProject/0x-parser/issues/new/choose.");return null}return{tokenIn:{symbol:g.symbol,amount:g.amount,address:g.address},tokenOut:{symbol:a.symbol,amount:a.amount,address:a.address}}}export{J as parseSwap}; |
@@ -32,6 +32,6 @@ import type { Address } from "viem"; | ||
tokenOut: { | ||
address: `0x${string}` | undefined; | ||
amount: string | undefined; | ||
symbol: string | undefined; | ||
address: `0x${string}`; | ||
amount: string; | ||
symbol: string; | ||
}; | ||
} | null; |
{ | ||
"name": "@0x/0x-parser", | ||
"version": "2.1.1", | ||
"version": "2.1.2", | ||
"description": "🧾 Designed for 0x integrators: This library parses 0x transactions on EVM blockchains into a format that is both user-friendly and easy to understand.", | ||
@@ -5,0 +5,0 @@ "keywords": [ |
@@ -152,3 +152,3 @@ import { fromHex, erc20Abi, getAddress, formatUnits, formatEther } from "viem"; | ||
if (inputLog) { | ||
if (inputLog && output) { | ||
return { | ||
@@ -161,5 +161,5 @@ tokenIn: { | ||
tokenOut: { | ||
address: output?.address, | ||
amount: output?.amount, | ||
symbol: output?.symbol, | ||
address: output.address, | ||
amount: output.amount, | ||
symbol: output.symbol, | ||
}, | ||
@@ -166,0 +166,0 @@ }; |
65604
1447