UNPKG

4.46 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../src/erc20.js"],"names":["blob","byContractAddress","contract","get","byContract","asContractAddress","list","addr","a","toLowerCase","startsWith","cache","buf","Buffer","from","entries","i","length","readUInt32BE","item","slice","j","tickerLength","readUInt8","ticker","toString","contractAddress","decimals","chainId","signature","entry","data","push","api"],"mappings":"AACA,OAAOA,IAAP,MAAiB,8CAAjB;AAEA;AACA;AACA;;AACA,OAAO,MAAMC,iBAAiB,GAAIC,QAAD,IAC/BC,GAAG,GAAGC,UAAN,CAAiBC,iBAAiB,CAACH,QAAD,CAAlC,CADK;AAGP;AACA;AACA;;AACA,OAAO,MAAMI,IAAI,GAAG,MAAmBH,GAAG,GAAGG,IAAN,EAAhC;;AAgBP,MAAMD,iBAAiB,GAAIE,IAAD,IAAkB;AAC1C,QAAMC,CAAC,GAAGD,IAAI,CAACE,WAAL,EAAV;AACA,SAAOD,CAAC,CAACE,UAAF,CAAa,IAAb,IAAqBF,CAArB,GAAyB,OAAOA,CAAvC;AACD,CAHD,C,CAKA;;;AACA,MAAML,GAAc,GAAG,CAAC,MAAM;AAC5B,MAAIQ,KAAJ;AACA,SAAO,MAAM;AACX,QAAIA,KAAJ,EAAW,OAAOA,KAAP;AACX,UAAMC,GAAG,GAAGC,MAAM,CAACC,IAAP,CAAYd,IAAZ,EAAkB,QAAlB,CAAZ;AACA,UAAMI,UAAU,GAAG,EAAnB;AACA,UAAMW,OAAO,GAAG,EAAhB;AACA,QAAIC,CAAC,GAAG,CAAR;;AACA,WAAOA,CAAC,GAAGJ,GAAG,CAACK,MAAf,EAAuB;AACrB,YAAMA,MAAM,GAAGL,GAAG,CAACM,YAAJ,CAAiBF,CAAjB,CAAf;AACAA,MAAAA,CAAC,IAAI,CAAL;AACA,YAAMG,IAAI,GAAGP,GAAG,CAACQ,KAAJ,CAAUJ,CAAV,EAAaA,CAAC,GAAGC,MAAjB,CAAb;AACA,UAAII,CAAC,GAAG,CAAR;AACA,YAAMC,YAAY,GAAGH,IAAI,CAACI,SAAL,CAAeF,CAAf,CAArB;AACAA,MAAAA,CAAC,IAAI,CAAL;AACA,YAAMG,MAAM,GAAGL,IAAI,CAACC,KAAL,CAAWC,CAAX,EAAcA,CAAC,GAAGC,YAAlB,EAAgCG,QAAhC,CAAyC,OAAzC,CAAf;AACAJ,MAAAA,CAAC,IAAIC,YAAL;AACA,YAAMI,eAAe,GAAGrB,iBAAiB,CACvCc,IAAI,CAACC,KAAL,CAAWC,CAAX,EAAcA,CAAC,GAAG,EAAlB,EAAsBI,QAAtB,CAA+B,KAA/B,CADuC,CAAzC;AAGAJ,MAAAA,CAAC,IAAI,EAAL;AACA,YAAMM,QAAQ,GAAGR,IAAI,CAACD,YAAL,CAAkBG,CAAlB,CAAjB;AACAA,MAAAA,CAAC,IAAI,CAAL;AACA,YAAMO,OAAO,GAAGT,IAAI,CAACD,YAAL,CAAkBG,CAAlB,CAAhB;AACAA,MAAAA,CAAC,IAAI,CAAL;AACA,YAAMQ,SAAS,GAAGV,IAAI,CAACC,KAAL,CAAWC,CAAX,CAAlB;AACA,YAAMS,KAAwB,GAAG;AAC/BN,QAAAA,MAD+B;AAE/BE,QAAAA,eAF+B;AAG/BC,QAAAA,QAH+B;AAI/BC,QAAAA,OAJ+B;AAK/BC,QAAAA,SAL+B;AAM/BE,QAAAA,IAAI,EAAEZ;AANyB,OAAjC;AAQAJ,MAAAA,OAAO,CAACiB,IAAR,CAAaF,KAAb;AACA1B,MAAAA,UAAU,CAACsB,eAAD,CAAV,GAA8BI,KAA9B;AACAd,MAAAA,CAAC,IAAIC,MAAL;AACD;;AACD,UAAMgB,GAAG,GAAG;AACV3B,MAAAA,IAAI,EAAE,MAAMS,OADF;AAEVX,MAAAA,UAAU,EAAGsB,eAAD,IAAqBtB,UAAU,CAACsB,eAAD;AAFjC,KAAZ;AAIAf,IAAAA,KAAK,GAAGsB,GAAR;AACA,WAAOA,GAAP;AACD,GA1CD;AA2CD,CA7CsB,GAAvB","sourcesContent":["// @flow\nimport blob from \"@ledgerhq/cryptoassets/data/erc20-signatures\";\n\n/**\n * Retrieve the token information by a given contract address if any\n */\nexport const byContractAddress = (contract: string): ?TokenInfo =>\n get().byContract(asContractAddress(contract));\n\n/**\n * list all the ERC20 tokens informations\n */\nexport const list = (): TokenInfo[] => get().list();\n\nexport type TokenInfo = {\n contractAddress: string,\n ticker: string,\n decimals: number,\n chainId: number,\n signature: Buffer,\n data: Buffer,\n};\n\nexport type API = {\n byContract: (string) => ?TokenInfo,\n list: () => TokenInfo[],\n};\n\nconst asContractAddress = (addr: string) => {\n const a = addr.toLowerCase();\n return a.startsWith(\"0x\") ? a : \"0x\" + a;\n};\n\n// this internal get() will lazy load and cache the data from the erc20 data blob\nconst get: () => API = (() => {\n let cache;\n return () => {\n if (cache) return cache;\n const buf = Buffer.from(blob, \"base64\");\n const byContract = {};\n const entries = [];\n let i = 0;\n while (i < buf.length) {\n const length = buf.readUInt32BE(i);\n i += 4;\n const item = buf.slice(i, i + length);\n let j = 0;\n const tickerLength = item.readUInt8(j);\n j += 1;\n const ticker = item.slice(j, j + tickerLength).toString(\"ascii\");\n j += tickerLength;\n const contractAddress = asContractAddress(\n item.slice(j, j + 20).toString(\"hex\")\n );\n j += 20;\n const decimals = item.readUInt32BE(j);\n j += 4;\n const chainId = item.readUInt32BE(j);\n j += 4;\n const signature = item.slice(j);\n const entry: $Exact<TokenInfo> = {\n ticker,\n contractAddress,\n decimals,\n chainId,\n signature,\n data: item,\n };\n entries.push(entry);\n byContract[contractAddress] = entry;\n i += length;\n }\n const api = {\n list: () => entries,\n byContract: (contractAddress) => byContract[contractAddress],\n };\n cache = api;\n return api;\n };\n})();\n"],"file":"erc20.js"}
\No newline at end of file