[{"data":1,"prerenderedAt":1751},["ShallowReactive",2],{"navigation_docs":3,"-utilities-unerc20":137,"-utilities-unerc20-surround":1746},[4,27,57,79,97,115],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":26},"Getting Started","i-lucide-rocket","\u002Fgetting-started","1.getting-started",[10,14,18,22],{"title":11,"path":12,"stem":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction",{"title":15,"path":16,"stem":17},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation",{"title":19,"path":20,"stem":21},"Quick start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start",{"title":23,"path":24,"stem":25},"Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F4.architecture",false,{"title":28,"icon":29,"path":30,"stem":31,"children":32,"page":26},"Mini Apps","i-lucide-smartphone","\u002Fmini-apps","2.mini-apps",[33,37,41,45,49,53],{"title":34,"path":35,"stem":36},"Provider runtime","\u002Fmini-apps\u002Fprovider-runtime","2.mini-apps\u002F1.provider-runtime",{"title":38,"path":39,"stem":40},"Ethereum provider","\u002Fmini-apps\u002Fethereum-provider","2.mini-apps\u002F2.ethereum-provider",{"title":42,"path":43,"stem":44},"Language and i18n","\u002Fmini-apps\u002Flanguage-i18n","2.mini-apps\u002F3.language-i18n",{"title":46,"path":47,"stem":48},"Local simulator","\u002Fmini-apps\u002Flocal-simulator","2.mini-apps\u002F4.local-simulator",{"title":50,"path":51,"stem":52},"Nuxt module","\u002Fmini-apps\u002Fnuxt-module","2.mini-apps\u002F5.nuxt-module",{"title":54,"path":55,"stem":56},"Host runtime","\u002Fmini-apps\u002Fhost-runtime","2.mini-apps\u002F6.host-runtime",{"title":58,"icon":59,"path":60,"stem":61,"children":62,"page":26},"Auth","i-lucide-key-round","\u002Fauth","3.auth",[63,67,71,75],{"title":64,"path":65,"stem":66},"Nimiq Better Auth","\u002Fauth\u002Fnimiq-better-auth","3.auth\u002F1.nimiq-better-auth",{"title":68,"path":69,"stem":70},"Cross-device approval","\u002Fauth\u002Fcross-device","3.auth\u002F2.cross-device",{"title":72,"path":73,"stem":74},"Nimiq cross-device adapter","\u002Fauth\u002Fnimiq-adapter","3.auth\u002F3.nimiq-adapter",{"title":76,"path":77,"stem":78},"Security model","\u002Fauth\u002Fsecurity-model","3.auth\u002F4.security-model",{"title":80,"icon":81,"path":82,"stem":83,"children":84,"page":26},"Utilities","i-lucide-wrench","\u002Futilities","4.utilities",[85,89,93],{"title":86,"path":87,"stem":88},"Universal Nimiq facade","\u002Futilities\u002Funimiq","4.utilities\u002F1.unimiq",{"title":90,"path":91,"stem":92},"ERC-20 helpers","\u002Futilities\u002Funerc20","4.utilities\u002F2.unerc20",{"title":94,"path":95,"stem":96},"Better Auth ledger","\u002Futilities\u002Fledger","4.utilities\u002F3.ledger",{"title":98,"icon":99,"path":100,"stem":101,"children":102,"page":26},"Testing","i-lucide-test-tube-2","\u002Ftesting","5.testing",[103,107,111],{"title":104,"path":105,"stem":106},"Local scenarios","\u002Ftesting\u002Flocal-scenarios","5.testing\u002F1.local-scenarios",{"title":108,"path":109,"stem":110},"Vitest helpers","\u002Ftesting\u002Fvitest-helpers","5.testing\u002F2.vitest-helpers",{"title":112,"path":113,"stem":114},"Bridge mode","\u002Ftesting\u002Fbridge-mode","5.testing\u002F3.bridge-mode",{"title":116,"icon":117,"path":118,"stem":119,"children":120,"page":26},"Reference","i-lucide-book-open","\u002Freference","6.reference",[121,125,129,133],{"title":122,"path":123,"stem":124},"Packages","\u002Freference\u002Fpackages","6.reference\u002F1.packages",{"title":126,"path":127,"stem":128},"Endpoints","\u002Freference\u002Fendpoints","6.reference\u002F2.endpoints",{"title":130,"path":131,"stem":132},"Runtime support","\u002Freference\u002Fruntime-support","6.reference\u002F3.runtime-support",{"title":134,"path":135,"stem":136},"Public API exports","\u002Freference\u002Fpublic-api","6.reference\u002F4.public-api",{"id":138,"title":90,"body":139,"description":1740,"extension":1741,"links":1742,"meta":1743,"navigation":469,"path":91,"seo":1744,"stem":92,"__hash__":1745},"docs\u002F4.utilities\u002F2.unerc20.md",{"type":140,"value":141,"toc":1731},"minimark",[142,151,154,159,165,276,409,426,430,436,535,539,542,795,798,810,828,832,842,990,992,1007,1010,1014,1024,1172,1174,1189,1195,1279,1281,1295,1299,1305,1508,1510,1519,1537,1541,1547,1727],[143,144,145,146,150],"p",{},"Use ",[147,148,149],"code",{},"@onmax\u002Funerc20"," when you already have an EIP-1193 provider and need portable ERC-20 calls without taking on wallet discovery, chain switching, or token-list policy.",[143,152,153],{},"Do not use it for native ETH\u002FMATIC transfers, NFT transfers, allowance management, token registries, fiat pricing, or payout approvals. Those decisions belong in your app.",[155,156,158],"h2",{"id":157},"nuxt-server-backed-composables","Nuxt server-backed composables",[143,160,145,161,164],{},[147,162,163],{},"@onmax\u002Funerc20\u002Fnuxt"," when a Nuxt app should keep the RPC URL on the server.",[166,167,173],"pre",{"className":168,"code":169,"filename":170,"language":171,"meta":172,"style":172},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtConfig({\n  modules: ['@onmax\u002Funerc20\u002Fnuxt'],\n  unerc20: {\n    rpcUrl: process.env.ERC20_RPC_URL,\n  },\n})\n","nuxt.config.ts","ts","",[147,174,175,199,226,237,261,267],{"__ignoreMap":172},[176,177,180,184,187,191,195],"span",{"class":178,"line":179},"line",1,[176,181,183],{"class":182},"s7zQu","export",[176,185,186],{"class":182}," default",[176,188,190],{"class":189},"s2Zo4"," defineNuxtConfig",[176,192,194],{"class":193},"sTEyZ","(",[176,196,198],{"class":197},"sMK4o","{\n",[176,200,202,206,209,212,215,218,220,223],{"class":178,"line":201},2,[176,203,205],{"class":204},"swJcz","  modules",[176,207,208],{"class":197},":",[176,210,211],{"class":193}," [",[176,213,214],{"class":197},"'",[176,216,163],{"class":217},"sfazB",[176,219,214],{"class":197},[176,221,222],{"class":193},"]",[176,224,225],{"class":197},",\n",[176,227,229,232,234],{"class":178,"line":228},3,[176,230,231],{"class":204},"  unerc20",[176,233,208],{"class":197},[176,235,236],{"class":197}," {\n",[176,238,240,243,245,248,251,254,256,259],{"class":178,"line":239},4,[176,241,242],{"class":204},"    rpcUrl",[176,244,208],{"class":197},[176,246,247],{"class":193}," process",[176,249,250],{"class":197},".",[176,252,253],{"class":193},"env",[176,255,250],{"class":197},[176,257,258],{"class":193},"ERC20_RPC_URL",[176,260,225],{"class":197},[176,262,264],{"class":178,"line":263},5,[176,265,266],{"class":197},"  },\n",[176,268,270,273],{"class":178,"line":269},6,[176,271,272],{"class":197},"}",[176,274,275],{"class":193},")\n",[166,277,282],{"className":278,"code":279,"filename":280,"language":281,"meta":172,"style":172},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cscript setup lang=\"ts\">\nconst network = useEvmNetwork({ refreshIntervalMs: 15_000 })\nconst account = useErc20Account({\n  account: '0x1234567890abcdef1234567890abcdef12345678',\n  token: '0xc2132D05D31c914a87C6611C10748AEb04B58e8F',\n})\n\u003C\u002Fscript>\n","app.vue","vue",[147,283,284,312,344,360,377,393,399],{"__ignoreMap":172},[176,285,286,289,292,296,299,302,305,307,309],{"class":178,"line":179},[176,287,288],{"class":197},"\u003C",[176,290,291],{"class":204},"script",[176,293,295],{"class":294},"spNyl"," setup",[176,297,298],{"class":294}," lang",[176,300,301],{"class":197},"=",[176,303,304],{"class":197},"\"",[176,306,171],{"class":217},[176,308,304],{"class":197},[176,310,311],{"class":197},">\n",[176,313,314,317,320,322,325,327,330,333,335,339,342],{"class":178,"line":201},[176,315,316],{"class":294},"const",[176,318,319],{"class":193}," network ",[176,321,301],{"class":197},[176,323,324],{"class":189}," useEvmNetwork",[176,326,194],{"class":193},[176,328,329],{"class":197},"{",[176,331,332],{"class":204}," refreshIntervalMs",[176,334,208],{"class":197},[176,336,338],{"class":337},"sbssI"," 15_000",[176,340,341],{"class":197}," }",[176,343,275],{"class":193},[176,345,346,348,351,353,356,358],{"class":178,"line":228},[176,347,316],{"class":294},[176,349,350],{"class":193}," account ",[176,352,301],{"class":197},[176,354,355],{"class":189}," useErc20Account",[176,357,194],{"class":193},[176,359,198],{"class":197},[176,361,362,365,367,370,373,375],{"class":178,"line":239},[176,363,364],{"class":204},"  account",[176,366,208],{"class":197},[176,368,369],{"class":197}," '",[176,371,372],{"class":217},"0x1234567890abcdef1234567890abcdef12345678",[176,374,214],{"class":197},[176,376,225],{"class":197},[176,378,379,382,384,386,389,391],{"class":178,"line":263},[176,380,381],{"class":204},"  token",[176,383,208],{"class":197},[176,385,369],{"class":197},[176,387,388],{"class":217},"0xc2132D05D31c914a87C6611C10748AEb04B58e8F",[176,390,214],{"class":197},[176,392,225],{"class":197},[176,394,395,397],{"class":178,"line":269},[176,396,272],{"class":197},[176,398,275],{"class":193},[176,400,402,405,407],{"class":178,"line":401},7,[176,403,404],{"class":197},"\u003C\u002F",[176,406,291],{"class":204},[176,408,311],{"class":197},[143,410,411,414,415,418,419,422,423,425],{},[147,412,413],{},"useEvmNetwork()"," and ",[147,416,417],{},"useErc20Account()"," call internal Nitro routes by default. Pass an explicit ",[147,420,421],{},"provider"," to ",[147,424,417],{}," only when you intentionally want direct provider access.",[155,427,429],{"id":428},"read-network-status","Read network status",[143,431,145,432,435],{},[147,433,434],{},"readEvmNetwork()"," when shared TypeScript code needs a single EVM summary instead of probing JSON-RPC methods one by one.",[166,437,440],{"className":168,"code":438,"filename":439,"language":171,"meta":172,"style":172},"import { readEvmNetwork } from '@onmax\u002Funerc20'\n\nconst summary = await readEvmNetwork(window.ethereum)\n\nconsole.log(summary.chainId, summary.blockNumber, summary.syncing)\n","app\u002Fnetwork.ts",[147,441,442,465,471,493,497],{"__ignoreMap":172},[176,443,444,447,450,453,455,458,460,462],{"class":178,"line":179},[176,445,446],{"class":182},"import",[176,448,449],{"class":197}," {",[176,451,452],{"class":193}," readEvmNetwork",[176,454,341],{"class":197},[176,456,457],{"class":182}," from",[176,459,369],{"class":197},[176,461,149],{"class":217},[176,463,464],{"class":197},"'\n",[176,466,467],{"class":178,"line":201},[176,468,470],{"emptyLinePlaceholder":469},true,"\n",[176,472,473,475,478,480,483,485,488,490],{"class":178,"line":228},[176,474,316],{"class":294},[176,476,477],{"class":193}," summary ",[176,479,301],{"class":197},[176,481,482],{"class":182}," await",[176,484,452],{"class":189},[176,486,487],{"class":193},"(window",[176,489,250],{"class":197},[176,491,492],{"class":193},"ethereum)\n",[176,494,495],{"class":178,"line":239},[176,496,470],{"emptyLinePlaceholder":469},[176,498,499,502,504,507,510,512,515,518,521,523,526,528,530,532],{"class":178,"line":263},[176,500,501],{"class":193},"console",[176,503,250],{"class":197},[176,505,506],{"class":189},"log",[176,508,509],{"class":193},"(summary",[176,511,250],{"class":197},[176,513,514],{"class":193},"chainId",[176,516,517],{"class":197},",",[176,519,520],{"class":193}," summary",[176,522,250],{"class":197},[176,524,525],{"class":193},"blockNumber",[176,527,517],{"class":197},[176,529,520],{"class":193},[176,531,250],{"class":197},[176,533,534],{"class":193},"syncing)\n",[155,536,538],{"id":537},"read-a-balance","Read a balance",[143,540,541],{},"Use the read helpers when the provider already points at the chain that hosts the token.",[166,543,546],{"className":168,"code":544,"filename":545,"language":171,"meta":172,"style":172},"import {\n  formatTokenAmountAtomic,\n  readErc20Balance,\n  readErc20Decimals,\n  readErc20Symbol,\n} from '@onmax\u002Funerc20'\n\nconst provider = window.ethereum\nconst token = '0xc2132D05D31c914a87C6611C10748AEb04B58e8F'\nconst account = '0x1234567890abcdef1234567890abcdef12345678'\n\nconst [symbol, decimals, atomicBalance] = await Promise.all([\n  readErc20Symbol(provider, token),\n  readErc20Decimals(provider, token),\n  readErc20Balance(provider, { token, account }),\n])\n\nconsole.log(`${symbol}: ${formatTokenAmountAtomic(atomicBalance, decimals)}`)\n","app\u002Fread-usdt.ts",[147,547,548,554,561,568,575,582,594,598,616,632,647,652,691,706,719,744,750,755],{"__ignoreMap":172},[176,549,550,552],{"class":178,"line":179},[176,551,446],{"class":182},[176,553,236],{"class":197},[176,555,556,559],{"class":178,"line":201},[176,557,558],{"class":193},"  formatTokenAmountAtomic",[176,560,225],{"class":197},[176,562,563,566],{"class":178,"line":228},[176,564,565],{"class":193},"  readErc20Balance",[176,567,225],{"class":197},[176,569,570,573],{"class":178,"line":239},[176,571,572],{"class":193},"  readErc20Decimals",[176,574,225],{"class":197},[176,576,577,580],{"class":178,"line":263},[176,578,579],{"class":193},"  readErc20Symbol",[176,581,225],{"class":197},[176,583,584,586,588,590,592],{"class":178,"line":269},[176,585,272],{"class":197},[176,587,457],{"class":182},[176,589,369],{"class":197},[176,591,149],{"class":217},[176,593,464],{"class":197},[176,595,596],{"class":178,"line":401},[176,597,470],{"emptyLinePlaceholder":469},[176,599,601,603,606,608,611,613],{"class":178,"line":600},8,[176,602,316],{"class":294},[176,604,605],{"class":193}," provider ",[176,607,301],{"class":197},[176,609,610],{"class":193}," window",[176,612,250],{"class":197},[176,614,615],{"class":193},"ethereum\n",[176,617,619,621,624,626,628,630],{"class":178,"line":618},9,[176,620,316],{"class":294},[176,622,623],{"class":193}," token ",[176,625,301],{"class":197},[176,627,369],{"class":197},[176,629,388],{"class":217},[176,631,464],{"class":197},[176,633,635,637,639,641,643,645],{"class":178,"line":634},10,[176,636,316],{"class":294},[176,638,350],{"class":193},[176,640,301],{"class":197},[176,642,369],{"class":197},[176,644,372],{"class":217},[176,646,464],{"class":197},[176,648,650],{"class":178,"line":649},11,[176,651,470],{"emptyLinePlaceholder":469},[176,653,655,657,659,662,664,667,669,672,674,677,679,683,685,688],{"class":178,"line":654},12,[176,656,316],{"class":294},[176,658,211],{"class":197},[176,660,661],{"class":193},"symbol",[176,663,517],{"class":197},[176,665,666],{"class":193}," decimals",[176,668,517],{"class":197},[176,670,671],{"class":193}," atomicBalance",[176,673,222],{"class":197},[176,675,676],{"class":197}," =",[176,678,482],{"class":182},[176,680,682],{"class":681},"sBMFI"," Promise",[176,684,250],{"class":197},[176,686,687],{"class":189},"all",[176,689,690],{"class":193},"([\n",[176,692,694,696,699,701,704],{"class":178,"line":693},13,[176,695,579],{"class":189},[176,697,698],{"class":193},"(provider",[176,700,517],{"class":197},[176,702,703],{"class":193}," token)",[176,705,225],{"class":197},[176,707,709,711,713,715,717],{"class":178,"line":708},14,[176,710,572],{"class":189},[176,712,698],{"class":193},[176,714,517],{"class":197},[176,716,703],{"class":193},[176,718,225],{"class":197},[176,720,722,724,726,728,730,733,735,737,739,742],{"class":178,"line":721},15,[176,723,565],{"class":189},[176,725,698],{"class":193},[176,727,517],{"class":197},[176,729,449],{"class":197},[176,731,732],{"class":193}," token",[176,734,517],{"class":197},[176,736,350],{"class":193},[176,738,272],{"class":197},[176,740,741],{"class":193},")",[176,743,225],{"class":197},[176,745,747],{"class":178,"line":746},16,[176,748,749],{"class":193},"])\n",[176,751,753],{"class":178,"line":752},17,[176,754,470],{"emptyLinePlaceholder":469},[176,756,758,760,762,764,766,769,771,773,776,779,782,785,787,790,793],{"class":178,"line":757},18,[176,759,501],{"class":193},[176,761,250],{"class":197},[176,763,506],{"class":189},[176,765,194],{"class":193},[176,767,768],{"class":197},"`${",[176,770,661],{"class":193},[176,772,272],{"class":197},[176,774,775],{"class":217},": ",[176,777,778],{"class":197},"${",[176,780,781],{"class":189},"formatTokenAmountAtomic",[176,783,784],{"class":193},"(atomicBalance",[176,786,517],{"class":197},[176,788,789],{"class":193}," decimals)",[176,791,792],{"class":197},"}`",[176,794,275],{"class":193},[143,796,797],{},"Expected behavior:",[166,799,804],{"className":800,"code":801,"filename":802,"language":803,"meta":172,"style":172},"language-txt shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","USDT: 1.2345\n","output","txt",[147,805,806],{"__ignoreMap":172},[176,807,808],{"class":178,"line":179},[176,809,801],{},[143,811,812,813,816,817,820,821,824,825,250],{},"The package calls ",[147,814,815],{},"eth_call"," for ",[147,818,819],{},"symbol()",", ",[147,822,823],{},"decimals()",", and ",[147,826,827],{},"balanceOf(address)",[155,829,831],{"id":830},"skip-metadata-calls-when-you-already-know-it","Skip metadata calls when you already know it",[143,833,834,835,414,838,841],{},"Use a token object when the app has trusted metadata. ",[147,836,837],{},"readErc20Symbol()",[147,839,840],{},"readErc20Decimals()"," return the provided metadata without calling the provider.",[166,843,846],{"className":168,"code":844,"filename":845,"language":171,"meta":172,"style":172},"import { readErc20Decimals, readErc20Symbol } from '@onmax\u002Funerc20'\n\nconst usdt = {\n  address: '0xc2132D05D31c914a87C6611C10748AEb04B58e8F',\n  symbol: 'USDT',\n  decimals: 6,\n}\n\nconsole.log(await readErc20Symbol(window.ethereum, usdt))\nconsole.log(await readErc20Decimals(window.ethereum, usdt))\n","app\u002Fknown-token.ts",[147,847,848,872,876,887,902,918,930,935,939,966],{"__ignoreMap":172},[176,849,850,852,854,857,859,862,864,866,868,870],{"class":178,"line":179},[176,851,446],{"class":182},[176,853,449],{"class":197},[176,855,856],{"class":193}," readErc20Decimals",[176,858,517],{"class":197},[176,860,861],{"class":193}," readErc20Symbol",[176,863,341],{"class":197},[176,865,457],{"class":182},[176,867,369],{"class":197},[176,869,149],{"class":217},[176,871,464],{"class":197},[176,873,874],{"class":178,"line":201},[176,875,470],{"emptyLinePlaceholder":469},[176,877,878,880,883,885],{"class":178,"line":228},[176,879,316],{"class":294},[176,881,882],{"class":193}," usdt ",[176,884,301],{"class":197},[176,886,236],{"class":197},[176,888,889,892,894,896,898,900],{"class":178,"line":239},[176,890,891],{"class":204},"  address",[176,893,208],{"class":197},[176,895,369],{"class":197},[176,897,388],{"class":217},[176,899,214],{"class":197},[176,901,225],{"class":197},[176,903,904,907,909,911,914,916],{"class":178,"line":263},[176,905,906],{"class":204},"  symbol",[176,908,208],{"class":197},[176,910,369],{"class":197},[176,912,913],{"class":217},"USDT",[176,915,214],{"class":197},[176,917,225],{"class":197},[176,919,920,923,925,928],{"class":178,"line":269},[176,921,922],{"class":204},"  decimals",[176,924,208],{"class":197},[176,926,927],{"class":337}," 6",[176,929,225],{"class":197},[176,931,932],{"class":178,"line":401},[176,933,934],{"class":197},"}\n",[176,936,937],{"class":178,"line":600},[176,938,470],{"emptyLinePlaceholder":469},[176,940,941,943,945,947,949,952,954,956,958,961,963],{"class":178,"line":618},[176,942,501],{"class":193},[176,944,250],{"class":197},[176,946,506],{"class":189},[176,948,194],{"class":193},[176,950,951],{"class":182},"await",[176,953,861],{"class":189},[176,955,487],{"class":193},[176,957,250],{"class":197},[176,959,960],{"class":193},"ethereum",[176,962,517],{"class":197},[176,964,965],{"class":193}," usdt))\n",[176,967,968,970,972,974,976,978,980,982,984,986,988],{"class":178,"line":634},[176,969,501],{"class":193},[176,971,250],{"class":197},[176,973,506],{"class":189},[176,975,194],{"class":193},[176,977,951],{"class":182},[176,979,856],{"class":189},[176,981,487],{"class":193},[176,983,250],{"class":197},[176,985,960],{"class":193},[176,987,517],{"class":197},[176,989,965],{"class":193},[143,991,797],{},[166,993,995],{"className":800,"code":994,"filename":802,"language":803,"meta":172,"style":172},"USDT\n6\n",[147,996,997,1002],{"__ignoreMap":172},[176,998,999],{"class":178,"line":179},[176,1000,1001],{},"USDT\n",[176,1003,1004],{"class":178,"line":201},[176,1005,1006],{},"6\n",[143,1008,1009],{},"Use this for app-owned token allowlists. Do not trust user-provided token metadata for transfer screens.",[155,1011,1013],{"id":1012},"parse-user-input-once","Parse user input once",[143,1015,145,1016,1019,1020,1023],{},[147,1017,1018],{},"parseTokenAmountToAtomic()"," at the form boundary, then pass the returned ",[147,1021,1022],{},"bigint"," through the rest of the flow.",[166,1025,1028],{"className":168,"code":1026,"filename":1027,"language":171,"meta":172,"style":172},"import { formatTokenAmountAtomic, parseTokenAmountToAtomic } from '@onmax\u002Funerc20'\n\nconst decimals = 6\nconst amount = parseTokenAmountToAtomic('1,234.50', decimals)\n\nif (amount === null)\n  throw new Error('Enter a valid token amount')\n\nconsole.log(amount)\nconsole.log(formatTokenAmountAtomic(amount, decimals))\n","app\u002Famount.ts",[147,1029,1030,1054,1058,1070,1095,1099,1115,1137,1141,1152],{"__ignoreMap":172},[176,1031,1032,1034,1036,1039,1041,1044,1046,1048,1050,1052],{"class":178,"line":179},[176,1033,446],{"class":182},[176,1035,449],{"class":197},[176,1037,1038],{"class":193}," formatTokenAmountAtomic",[176,1040,517],{"class":197},[176,1042,1043],{"class":193}," parseTokenAmountToAtomic",[176,1045,341],{"class":197},[176,1047,457],{"class":182},[176,1049,369],{"class":197},[176,1051,149],{"class":217},[176,1053,464],{"class":197},[176,1055,1056],{"class":178,"line":201},[176,1057,470],{"emptyLinePlaceholder":469},[176,1059,1060,1062,1065,1067],{"class":178,"line":228},[176,1061,316],{"class":294},[176,1063,1064],{"class":193}," decimals ",[176,1066,301],{"class":197},[176,1068,1069],{"class":337}," 6\n",[176,1071,1072,1074,1077,1079,1081,1083,1085,1088,1090,1092],{"class":178,"line":239},[176,1073,316],{"class":294},[176,1075,1076],{"class":193}," amount ",[176,1078,301],{"class":197},[176,1080,1043],{"class":189},[176,1082,194],{"class":193},[176,1084,214],{"class":197},[176,1086,1087],{"class":217},"1,234.50",[176,1089,214],{"class":197},[176,1091,517],{"class":197},[176,1093,1094],{"class":193}," decimals)\n",[176,1096,1097],{"class":178,"line":263},[176,1098,470],{"emptyLinePlaceholder":469},[176,1100,1101,1104,1107,1110,1113],{"class":178,"line":269},[176,1102,1103],{"class":182},"if",[176,1105,1106],{"class":193}," (amount ",[176,1108,1109],{"class":197},"===",[176,1111,1112],{"class":197}," null",[176,1114,275],{"class":193},[176,1116,1117,1120,1123,1126,1128,1130,1133,1135],{"class":178,"line":401},[176,1118,1119],{"class":182},"  throw",[176,1121,1122],{"class":197}," new",[176,1124,1125],{"class":189}," Error",[176,1127,194],{"class":193},[176,1129,214],{"class":197},[176,1131,1132],{"class":217},"Enter a valid token amount",[176,1134,214],{"class":197},[176,1136,275],{"class":193},[176,1138,1139],{"class":178,"line":600},[176,1140,470],{"emptyLinePlaceholder":469},[176,1142,1143,1145,1147,1149],{"class":178,"line":618},[176,1144,501],{"class":193},[176,1146,250],{"class":197},[176,1148,506],{"class":189},[176,1150,1151],{"class":193},"(amount)\n",[176,1153,1154,1156,1158,1160,1162,1164,1167,1169],{"class":178,"line":634},[176,1155,501],{"class":193},[176,1157,250],{"class":197},[176,1159,506],{"class":189},[176,1161,194],{"class":193},[176,1163,781],{"class":189},[176,1165,1166],{"class":193},"(amount",[176,1168,517],{"class":197},[176,1170,1171],{"class":193}," decimals))\n",[143,1173,797],{},[166,1175,1177],{"className":800,"code":1176,"filename":802,"language":803,"meta":172,"style":172},"1234500000n\n1234.5\n",[147,1178,1179,1184],{"__ignoreMap":172},[176,1180,1181],{"class":178,"line":179},[176,1182,1183],{},"1234500000n\n",[176,1185,1186],{"class":178,"line":201},[176,1187,1188],{},"1234.5\n",[143,1190,1191,1192,250],{},"Inputs with more fraction digits than the token supports return ",[147,1193,1194],{},"null",[166,1196,1199],{"className":168,"code":1197,"filename":1198,"language":171,"meta":172,"style":172},"import { parseTokenAmountToAtomic } from '@onmax\u002Funerc20'\n\nconsole.log(parseTokenAmountToAtomic('1.2345678', 6))\nconsole.log(parseTokenAmountToAtomic('1.23 USDT', 6))\n","app\u002Finvalid-amount.ts",[147,1200,1201,1219,1223,1252],{"__ignoreMap":172},[176,1202,1203,1205,1207,1209,1211,1213,1215,1217],{"class":178,"line":179},[176,1204,446],{"class":182},[176,1206,449],{"class":197},[176,1208,1043],{"class":193},[176,1210,341],{"class":197},[176,1212,457],{"class":182},[176,1214,369],{"class":197},[176,1216,149],{"class":217},[176,1218,464],{"class":197},[176,1220,1221],{"class":178,"line":201},[176,1222,470],{"emptyLinePlaceholder":469},[176,1224,1225,1227,1229,1231,1233,1236,1238,1240,1243,1245,1247,1249],{"class":178,"line":228},[176,1226,501],{"class":193},[176,1228,250],{"class":197},[176,1230,506],{"class":189},[176,1232,194],{"class":193},[176,1234,1235],{"class":189},"parseTokenAmountToAtomic",[176,1237,194],{"class":193},[176,1239,214],{"class":197},[176,1241,1242],{"class":217},"1.2345678",[176,1244,214],{"class":197},[176,1246,517],{"class":197},[176,1248,927],{"class":337},[176,1250,1251],{"class":193},"))\n",[176,1253,1254,1256,1258,1260,1262,1264,1266,1268,1271,1273,1275,1277],{"class":178,"line":239},[176,1255,501],{"class":193},[176,1257,250],{"class":197},[176,1259,506],{"class":189},[176,1261,194],{"class":193},[176,1263,1235],{"class":189},[176,1265,194],{"class":193},[176,1267,214],{"class":197},[176,1269,1270],{"class":217},"1.23 USDT",[176,1272,214],{"class":197},[176,1274,517],{"class":197},[176,1276,927],{"class":337},[176,1278,1251],{"class":193},[143,1280,797],{},[166,1282,1284],{"className":800,"code":1283,"filename":802,"language":803,"meta":172,"style":172},"null\nnull\n",[147,1285,1286,1291],{"__ignoreMap":172},[176,1287,1288],{"class":178,"line":179},[176,1289,1290],{},"null\n",[176,1292,1293],{"class":178,"line":201},[176,1294,1290],{},[155,1296,1298],{"id":1297},"submit-a-transfer","Submit a transfer",[143,1300,145,1301,1304],{},[147,1302,1303],{},"transferErc20()"," after your app has selected the token, account, recipient, amount, and chain.",[166,1306,1309],{"className":168,"code":1307,"filename":1308,"language":171,"meta":172,"style":172},"import { parseTokenAmountToAtomic, transferErc20 } from '@onmax\u002Funerc20'\n\nconst provider = window.ethereum\nconst amount = parseTokenAmountToAtomic('10', 6)\n\nif (amount === null)\n  throw new Error('Invalid amount')\n\nconst hash = await transferErc20(provider, {\n  token: '0xc2132D05D31c914a87C6611C10748AEb04B58e8F',\n  from: '0x1234567890abcdef1234567890abcdef12345678',\n  to: '0xabcdefabcdefabcdefabcdefabcdefabcdefabcd',\n  amount,\n})\n\nconsole.log(hash)\n","app\u002Fsend-usdt.ts",[147,1310,1311,1334,1338,1352,1377,1381,1393,1412,1416,1435,1449,1464,1480,1487,1493,1497],{"__ignoreMap":172},[176,1312,1313,1315,1317,1319,1321,1324,1326,1328,1330,1332],{"class":178,"line":179},[176,1314,446],{"class":182},[176,1316,449],{"class":197},[176,1318,1043],{"class":193},[176,1320,517],{"class":197},[176,1322,1323],{"class":193}," transferErc20",[176,1325,341],{"class":197},[176,1327,457],{"class":182},[176,1329,369],{"class":197},[176,1331,149],{"class":217},[176,1333,464],{"class":197},[176,1335,1336],{"class":178,"line":201},[176,1337,470],{"emptyLinePlaceholder":469},[176,1339,1340,1342,1344,1346,1348,1350],{"class":178,"line":228},[176,1341,316],{"class":294},[176,1343,605],{"class":193},[176,1345,301],{"class":197},[176,1347,610],{"class":193},[176,1349,250],{"class":197},[176,1351,615],{"class":193},[176,1353,1354,1356,1358,1360,1362,1364,1366,1369,1371,1373,1375],{"class":178,"line":239},[176,1355,316],{"class":294},[176,1357,1076],{"class":193},[176,1359,301],{"class":197},[176,1361,1043],{"class":189},[176,1363,194],{"class":193},[176,1365,214],{"class":197},[176,1367,1368],{"class":217},"10",[176,1370,214],{"class":197},[176,1372,517],{"class":197},[176,1374,927],{"class":337},[176,1376,275],{"class":193},[176,1378,1379],{"class":178,"line":263},[176,1380,470],{"emptyLinePlaceholder":469},[176,1382,1383,1385,1387,1389,1391],{"class":178,"line":269},[176,1384,1103],{"class":182},[176,1386,1106],{"class":193},[176,1388,1109],{"class":197},[176,1390,1112],{"class":197},[176,1392,275],{"class":193},[176,1394,1395,1397,1399,1401,1403,1405,1408,1410],{"class":178,"line":401},[176,1396,1119],{"class":182},[176,1398,1122],{"class":197},[176,1400,1125],{"class":189},[176,1402,194],{"class":193},[176,1404,214],{"class":197},[176,1406,1407],{"class":217},"Invalid amount",[176,1409,214],{"class":197},[176,1411,275],{"class":193},[176,1413,1414],{"class":178,"line":600},[176,1415,470],{"emptyLinePlaceholder":469},[176,1417,1418,1420,1423,1425,1427,1429,1431,1433],{"class":178,"line":618},[176,1419,316],{"class":294},[176,1421,1422],{"class":193}," hash ",[176,1424,301],{"class":197},[176,1426,482],{"class":182},[176,1428,1323],{"class":189},[176,1430,698],{"class":193},[176,1432,517],{"class":197},[176,1434,236],{"class":197},[176,1436,1437,1439,1441,1443,1445,1447],{"class":178,"line":634},[176,1438,381],{"class":204},[176,1440,208],{"class":197},[176,1442,369],{"class":197},[176,1444,388],{"class":217},[176,1446,214],{"class":197},[176,1448,225],{"class":197},[176,1450,1451,1454,1456,1458,1460,1462],{"class":178,"line":649},[176,1452,1453],{"class":204},"  from",[176,1455,208],{"class":197},[176,1457,369],{"class":197},[176,1459,372],{"class":217},[176,1461,214],{"class":197},[176,1463,225],{"class":197},[176,1465,1466,1469,1471,1473,1476,1478],{"class":178,"line":654},[176,1467,1468],{"class":204},"  to",[176,1470,208],{"class":197},[176,1472,369],{"class":197},[176,1474,1475],{"class":217},"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd",[176,1477,214],{"class":197},[176,1479,225],{"class":197},[176,1481,1482,1485],{"class":178,"line":693},[176,1483,1484],{"class":193},"  amount",[176,1486,225],{"class":197},[176,1488,1489,1491],{"class":178,"line":708},[176,1490,272],{"class":197},[176,1492,275],{"class":193},[176,1494,1495],{"class":178,"line":721},[176,1496,470],{"emptyLinePlaceholder":469},[176,1498,1499,1501,1503,1505],{"class":178,"line":746},[176,1500,501],{"class":193},[176,1502,250],{"class":197},[176,1504,506],{"class":189},[176,1506,1507],{"class":193},"(hash)\n",[143,1509,797],{},[166,1511,1513],{"className":800,"code":1512,"filename":802,"language":803,"meta":172,"style":172},"0x...\n",[147,1514,1515],{"__ignoreMap":172},[176,1516,1517],{"class":178,"line":179},[176,1518,1512],{},[143,1520,1521,1522,1525,1526,1529,1530,1533,1534,250],{},"The helper sends ",[147,1523,1524],{},"eth_sendTransaction"," with ERC-20 ",[147,1527,1528],{},"transfer(address,uint256)"," calldata, ",[147,1531,1532],{},"value: '0x0'",", and optional ",[147,1535,1536],{},"gas",[155,1538,1540],{"id":1539},"reuse-the-abi-in-simulations","Reuse the ABI in simulations",[143,1542,145,1543,1546],{},[147,1544,1545],{},"ERC20_ABI"," when a test, simulator, or decoder needs the same standard ERC-20 shape as the helpers.",[166,1548,1551],{"className":168,"code":1549,"filename":1550,"language":171,"meta":172,"style":172},"import { expect, it } from 'vitest'\nimport { ERC20_ABI } from '@onmax\u002Funerc20'\n\nit('keeps the helper ABI small', () => {\n  expect(ERC20_ABI.map(entry => entry.name).sort()).toEqual([\n    'balanceOf',\n    'decimals',\n    'symbol',\n    'transfer',\n  ])\n})\n","test\u002Ferc20-abi.test.ts",[147,1552,1553,1578,1597,1601,1625,1672,1684,1695,1705,1716,1721],{"__ignoreMap":172},[176,1554,1555,1557,1559,1562,1564,1567,1569,1571,1573,1576],{"class":178,"line":179},[176,1556,446],{"class":182},[176,1558,449],{"class":197},[176,1560,1561],{"class":193}," expect",[176,1563,517],{"class":197},[176,1565,1566],{"class":193}," it",[176,1568,341],{"class":197},[176,1570,457],{"class":182},[176,1572,369],{"class":197},[176,1574,1575],{"class":217},"vitest",[176,1577,464],{"class":197},[176,1579,1580,1582,1584,1587,1589,1591,1593,1595],{"class":178,"line":201},[176,1581,446],{"class":182},[176,1583,449],{"class":197},[176,1585,1586],{"class":193}," ERC20_ABI",[176,1588,341],{"class":197},[176,1590,457],{"class":182},[176,1592,369],{"class":197},[176,1594,149],{"class":217},[176,1596,464],{"class":197},[176,1598,1599],{"class":178,"line":228},[176,1600,470],{"emptyLinePlaceholder":469},[176,1602,1603,1606,1608,1610,1613,1615,1617,1620,1623],{"class":178,"line":239},[176,1604,1605],{"class":189},"it",[176,1607,194],{"class":193},[176,1609,214],{"class":197},[176,1611,1612],{"class":217},"keeps the helper ABI small",[176,1614,214],{"class":197},[176,1616,517],{"class":197},[176,1618,1619],{"class":197}," ()",[176,1621,1622],{"class":294}," =>",[176,1624,236],{"class":197},[176,1626,1627,1630,1632,1634,1636,1639,1641,1645,1647,1650,1652,1655,1657,1659,1662,1665,1667,1670],{"class":178,"line":263},[176,1628,1629],{"class":189},"  expect",[176,1631,194],{"class":204},[176,1633,1545],{"class":193},[176,1635,250],{"class":197},[176,1637,1638],{"class":189},"map",[176,1640,194],{"class":204},[176,1642,1644],{"class":1643},"sHdIc","entry",[176,1646,1622],{"class":294},[176,1648,1649],{"class":193}," entry",[176,1651,250],{"class":197},[176,1653,1654],{"class":193},"name",[176,1656,741],{"class":204},[176,1658,250],{"class":197},[176,1660,1661],{"class":189},"sort",[176,1663,1664],{"class":204},"())",[176,1666,250],{"class":197},[176,1668,1669],{"class":189},"toEqual",[176,1671,690],{"class":204},[176,1673,1674,1677,1680,1682],{"class":178,"line":269},[176,1675,1676],{"class":197},"    '",[176,1678,1679],{"class":217},"balanceOf",[176,1681,214],{"class":197},[176,1683,225],{"class":197},[176,1685,1686,1688,1691,1693],{"class":178,"line":401},[176,1687,1676],{"class":197},[176,1689,1690],{"class":217},"decimals",[176,1692,214],{"class":197},[176,1694,225],{"class":197},[176,1696,1697,1699,1701,1703],{"class":178,"line":600},[176,1698,1676],{"class":197},[176,1700,661],{"class":217},[176,1702,214],{"class":197},[176,1704,225],{"class":197},[176,1706,1707,1709,1712,1714],{"class":178,"line":618},[176,1708,1676],{"class":197},[176,1710,1711],{"class":217},"transfer",[176,1713,214],{"class":197},[176,1715,225],{"class":197},[176,1717,1718],{"class":178,"line":634},[176,1719,1720],{"class":204},"  ])\n",[176,1722,1723,1725],{"class":178,"line":649},[176,1724,272],{"class":197},[176,1726,275],{"class":193},[1728,1729,1730],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":172,"searchDepth":201,"depth":201,"links":1732},[1733,1734,1735,1736,1737,1738,1739],{"id":157,"depth":201,"text":158},{"id":428,"depth":201,"text":429},{"id":537,"depth":201,"text":538},{"id":830,"depth":201,"text":831},{"id":1012,"depth":201,"text":1013},{"id":1297,"depth":201,"text":1298},{"id":1539,"depth":201,"text":1540},"Read ERC-20 balances, metadata, and transfers through any EIP-1193 provider.","md",null,{},{"title":90,"description":1740},"v7mzKd4oi-_-P7SLL8KI4vcDYq3nhpn86EHy7Fe3oyg",[1747,1749],{"title":86,"path":87,"stem":88,"description":1748,"children":-1},"Use @onmax\u002Funimiq across browser, Nuxt, Vite, Node.js, Workers, and tests.",{"title":94,"path":95,"stem":96,"description":1750,"children":-1},"Add app-local virtual balances to Better Auth.",1778838255734]