11import { BigNumber } from "ethers"
2- import { formatUnits } from "ethers/lib/utils" ;
32import { dataByBlockIdAndIndex } from 'loopring36-block-parser' ;
43
54export const getBlock = ( blockId : number ) => fetch ( `https://api3.loopring.io/api/v3/block/getBlock?id=${ blockId } ` )
@@ -11,6 +10,9 @@ export const getAccount = (accountId: number) => fetch(`https://api3.loopring.io
1110export const getTokens = ( ) => fetch ( `https://api3.loopring.io/api/v3/exchange/tokens` )
1211 . then ( x => x . json ( ) )
1312
13+ export const getPools = ( ) => fetch ( `https://api3.loopring.io/api/v3/amm/pools` )
14+ . then ( x => x . json ( ) )
15+
1416const convertTransactionData_Transfer = async ( origin : any ) => {
1517 const fromAddress = ( await getAccount ( origin . accountFromID ) ) . owner
1618 const toAddress = ( await getAccount ( origin . accountToID ) ) . owner
@@ -67,30 +69,19 @@ const convertTransactionData_Withdraw = async (origin: any) => {
6769 }
6870 }
6971}
70- // todo
72+
7173const convertTransactionData_Swap = async ( origin : any ) => {
7274 const tokens = await getTokens ( )
73- // const tokenInfo = tokens.find(x => x.tokenId === origin.tokenID)
74- const tokenAInfo = tokens . find ( x => x . tokenId === origin . tokenAB )
75- const tokenBInfo = tokens . find ( x => x . tokenId === origin . tokenBB )
76-
75+ const { pools } = await getPools ( )
76+ const tokenAInfo = tokens . find ( x => x . tokenId === origin . tokenAS )
77+ const tokenBInfo = tokens . find ( x => x . tokenId === origin . tokenBS )
78+ const found = pools . find ( x => {
79+ const [ t1Id , t2Id ] = x . tokens . pooled
80+ return ( origin . tokenAB === t1Id && origin . tokenBB === t2Id )
81+ || ( origin . tokenAB === t2Id && origin . tokenBB === t1Id )
82+ } )
83+ // debugger
7784 const accountAddress = ( await getAccount ( origin . accountIdA ) ) . owner
78- // const {
79- // block,
80- // account,
81- // tokenA,
82- // tokenB,
83- // data,
84- // fillSA,
85- // fillSB,
86- // tokenAPrice,
87- // tokenBPrice,
88- // pair,
89- // feeA,
90- // feeB,
91- // pool,
92- // __typename,
93- // }
9485 return {
9586 transaction : {
9687 account : {
@@ -107,14 +98,19 @@ const convertTransactionData_Swap = async (origin: any) => {
10798 } ,
10899 fillSA : origin . fillSA ,
109100 fillSB : origin . fillSB ,
110-
111- tokenAPrice : formatUnits ( origin . fillSA . toString ( ) , tokenAInfo . decimals ) , //todo
112- tokenBPrice : formatUnits ( origin . fillSB . toString ( ) , tokenBInfo . decimals ) , //todo
113- pair : '0x0000000000000000000000000000000000000000' , //todo
114- feeA : origin . feeA ,
101+ tokenBPrice : BigNumber . from ( origin . fillSA . toString ( ) )
102+ . mul ( '1' + '0' . repeat ( tokenBInfo . decimals ) )
103+ . div ( origin . fillSB . toString ( ) ) ,
104+ tokenAPrice : BigNumber . from ( origin . fillSB . toString ( ) )
105+ . mul ( '1' + '0' . repeat ( tokenAInfo . decimals ) )
106+ . div ( origin . fillSA . toString ( ) ) ,
107+ pair : {
108+ id : found . tokens . pooled . join ( '-' )
109+ } ,
110+ feeA : origin . feeA ,
115111 feeB : origin . feeB ,
116112 pool : {
117- address : '0x0000000000000000000000000000000000000000' , //todo
113+ address : found . address ,
118114 } ,
119115 __typename : "Swap" ,
120116 data : origin . txData ,
@@ -123,27 +119,12 @@ const convertTransactionData_Swap = async (origin: any) => {
123119}
124120const convertTransactionData_Trade = async ( origin : any ) => {
125121 const tokens = await getTokens ( )
126- // const tokenInfo = tokens.find(x => x.tokenId === origin.tokenID)
127122 const tokenAInfo = tokens . find ( x => x . tokenId === origin . tokenAS )
128123 const tokenBInfo = tokens . find ( x => x . tokenId === origin . tokenBS )
129124
130125 const accountAddressA = ( await getAccount ( origin . accountIdA ) ) . owner
131126 const accountAddressB = ( await getAccount ( origin . accountIdB ) ) . owner
132127
133- // const {
134- // block,
135- // accountA,
136- // accountB,
137- // tokenA,
138- // tokenB,
139- // data,
140- // fillSA,
141- // fillSB,
142- // feeA,
143- // feeB,
144- // tokenAPrice,
145- // tokenBPrice,
146- // } = transaction;
147128 return {
148129 transaction : {
149130 accountA : {
@@ -164,28 +145,20 @@ const convertTransactionData_Trade = async (origin: any) => {
164145 } ,
165146 fillSA : origin . fillSA ,
166147 fillSB : origin . fillSB ,
167- // BN
168148 tokenBPrice : BigNumber . from ( origin . fillSA . toString ( ) )
169149 . mul ( '1' + '0' . repeat ( tokenBInfo . decimals ) )
170- . div ( origin . fillSB . toString ( ) ) , //todo
150+ . div ( origin . fillSB . toString ( ) ) ,
171151 tokenAPrice : BigNumber . from ( origin . fillSB . toString ( ) )
172152 . mul ( '1' + '0' . repeat ( tokenAInfo . decimals ) )
173- . div ( origin . fillSA . toString ( ) ) , //todo
174- // tokenBPrice: origin.fillSB.mul('1' + '0'.repeat(tokenAInfo.decimals)).div(origin.fillSA), //todo
175- // tokenAPrice: formatUnits(origin.fillSA.toString(), tokenAInfo.decimals), //todo
176- // tokenBPrice: formatUnits(origin.fillSB.toString(), tokenBInfo.decimals), //todo
177- // pair: '0x0000000000000000000000000000000000000000', //todo
178- feeA : origin . feeA ,
179- feeB : origin . feeB ,
180- // pool: {
181- // address: '0x0000000000000000000000000000000000000000', //todo
182- // },
153+ . div ( origin . fillSA . toString ( ) ) ,
154+ feeA : origin . feeA ,
155+ feeB : origin . feeB ,
183156 __typename : "OrderbookTrade" ,
184157 data : origin . txData ,
185158 }
186159 }
187160}
188- // 040002a6ea000e62d800002cff000267e00006000019aee56156c61900000000000000000000000000000000000000000000000000000000000000000000000000000000
161+
189162const convertTransactionData_Deposit = async ( origin : any ) => {
190163 const tokens = await getTokens ( )
191164 const tokenInfo = tokens . find ( x => x . tokenId === origin . tokenID )
@@ -305,7 +278,6 @@ const convertTransactionData_Pre = (origin: any) => {
305278 }
306279}
307280export const convertTransactionData = async ( origin : any ) => {
308- // debugger
309281 const nextOrigin = convertTransactionData_Pre ( origin )
310282 if ( nextOrigin . type === 'TRANSFER' ) {
311283 return convertTransactionData_Transfer ( nextOrigin )
@@ -332,7 +304,7 @@ export const convertTransactionData = async (origin: any) => {
332304export const getTransactionData = ( blockId : number , index : number ) => {
333305 return Promise . all ( [
334306 getBlock ( blockId ) ,
335- dataByBlockIdAndIndex ( 'mainnet' ) ( blockId , Number ( index ) )
307+ dataByBlockIdAndIndex ( 'mainnet' , 'https://mainnet.infura.io/v3/a06ed9c6b5424b61beafff27ecc3abf3' ) ( blockId , Number ( index ) )
336308 . then ( convertTransactionData )
337309 ] ) . then ( ( [ blockRaw , data ] ) => {
338310 const block = {
0 commit comments