@tempoxyz/id 0.0.0-pr-293.sha-db2bcd0 → 0.0.0-pr-293.sha-e314a6e
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/app/client/assets/Account-BYLpNFf3.css +1 -0
- package/dist/app/client/assets/Account-DKlYpUaF.js +1 -0
- package/dist/app/client/assets/Amount-ZdtluGf-.css +1 -0
- package/dist/app/client/assets/Amount-uCaXmEC1.js +1 -0
- package/dist/app/client/assets/{Approval-lMS61Hor.js → Approval-_VTK0bIA.js} +1 -1
- package/dist/app/client/assets/{Authentication-CNU_hdsE.js → Authentication-CcZraW4V.js} +1 -1
- package/dist/app/client/assets/Callout-Cpp2tekO.js +1 -0
- package/dist/app/client/assets/Callout-DBfEmP7q.css +1 -0
- package/dist/app/client/assets/{Chain-CgM0gkul.js → Chain-BaJbQHEq.js} +1 -1
- package/dist/app/client/assets/{Check-l6Xt-h8M.js → Check-T-Kf-w2J.js} +1 -1
- package/dist/app/client/assets/{ChevronRight-Dgx1CBfS.js → ChevronRight-Cb0izsfB.js} +1 -1
- package/dist/app/client/assets/{ChooseAccount-DKQvWYym.js → ChooseAccount-BbdtokuQ.js} +1 -1
- package/dist/app/client/assets/{Client-B3HiaUR7.js → Client-XdlKOIjT.js} +1 -1
- package/dist/app/client/assets/{Close-CHeDbDyp.js → Close-9qiwSZoT.js} +1 -1
- package/dist/app/client/assets/{Cloud-BnBzwFJQ.js → Cloud-yU0Kxv28.js} +1 -1
- package/dist/app/client/assets/CodeInput-BqRteSwD.css +1 -0
- package/dist/app/client/assets/CodeInput-C8ad0edh.js +1 -0
- package/dist/app/client/assets/Deposit-CclrAoXL.css +1 -0
- package/dist/app/client/assets/Deposit-b5yx-L71.js +1 -0
- package/dist/app/client/assets/DevTools-BYkmtuV5.css +1 -0
- package/dist/app/client/assets/DevTools-Cgd0Ogan.js +1 -0
- package/dist/app/client/assets/{DeviceApproval-DKQklicf.js → DeviceApproval-CGdmL9U5.js} +1 -1
- package/dist/app/client/assets/{Fingerprint-CVLZp0fE.js → Fingerprint-081gQp_i.js} +1 -1
- package/dist/app/client/assets/{Globe-RAkdkLVn.js → Globe-D4HEnXoi.js} +1 -1
- package/dist/app/client/assets/Grant-5a-n1gJH.css +1 -0
- package/dist/app/client/assets/Grant-C-7ibHJb.js +1 -0
- package/dist/app/client/assets/Hex-C9KeV7_9.css +1 -0
- package/dist/app/client/assets/Hex-COpLAksw.js +10 -0
- package/dist/app/client/assets/IconChip-Cr71cqFZ.js +1 -0
- package/dist/app/client/assets/IconChip-yqaQ2y_d.css +1 -0
- package/dist/app/client/assets/InputGroup-BMExR1w7.js +1 -0
- package/dist/app/client/assets/InputGroup-BlZvt9In.css +1 -0
- package/dist/app/client/assets/Inter-cyrillic-e3OmmzmJ.woff2 +0 -0
- package/dist/app/client/assets/Inter-cyrillic-ext-DOWZeO4Q.woff2 +0 -0
- package/dist/app/client/assets/Inter-greek-BD3ujQlX.woff2 +0 -0
- package/dist/app/client/assets/Inter-greek-ext-CXEwbus4.woff2 +0 -0
- package/dist/app/client/assets/Inter-latin-BDFm4vTb.woff2 +0 -0
- package/dist/app/client/assets/Inter-latin-ext-E7a9JEPe.woff2 +0 -0
- package/dist/app/client/assets/Inter-symbols-DEch7Rxr.woff2 +0 -0
- package/dist/app/client/assets/Inter-vietnamese-Bg9723vR.woff2 +0 -0
- package/dist/app/client/assets/Loader-CVy-jQh9.js +1 -0
- package/dist/app/client/assets/{PopoverPopup-AaR182Lw.js → PopoverPopup-CQv00nl_.js} +1 -1
- package/dist/app/client/assets/Rows-CT3nC-Gp.js +1 -0
- package/dist/app/client/assets/Rows-DPGTUdA8.css +1 -0
- package/dist/app/client/assets/{Separator-C1NRk_mW.js → Separator-Doxz2kha.js} +1 -1
- package/dist/app/client/assets/SignIn-D2D3rbzT.js +1 -0
- package/dist/app/client/assets/SignIn-mlBTwUq4.css +1 -0
- package/dist/app/client/assets/Stack-D7Yt22Ed.css +1 -0
- package/dist/app/client/assets/Stack-qm24zmlV.js +1 -0
- package/dist/app/client/assets/ToolbarRootContext-Ctu7JTLk.js +1 -0
- package/dist/app/client/assets/Tooltip-arQraM0D.js +1 -0
- package/dist/app/client/assets/Tooltip-d3y9ESUJ.css +1 -0
- package/dist/app/client/assets/___-I98bns4o.css +1 -0
- package/dist/app/client/assets/___.flows-8Dmgeehd.js +5 -0
- package/dist/app/client/assets/{authorize-BQ1QbDZ8.js → authorize-DAtsqrNM.js} +1 -1
- package/dist/app/client/assets/{choose-account-Da0fLaYb.js → choose-account-DEFRgijo.js} +1 -1
- package/dist/app/client/assets/{deposit-CwKR_KjX.js → deposit--QiYWQfo.js} +1 -1
- package/dist/app/client/assets/{device-CCwq2oAs.js → device-Bq9xs5K6.js} +1 -1
- package/dist/app/client/assets/{error-Dj24A5n4.js → error-IQXxc1eM.js} +1 -1
- package/dist/app/client/assets/{getPseudoElementBounds-DH_jjqMh.js → getPseudoElementBounds-4olojy3W.js} +1 -1
- package/dist/app/client/assets/index-CyFheDuU.js +13 -0
- package/dist/app/client/assets/index-DSkPoKOK.css +1 -0
- package/dist/app/client/assets/{lazyRouteComponent-108fI1-o.js → lazyRouteComponent-Dz0rIGYN.js} +1 -1
- package/dist/app/client/assets/{login--cK4-SN_.js → login-B0BjHqjo.js} +1 -1
- package/dist/app/client/assets/pathUSD-BMh6ajrW.css +1 -0
- package/dist/app/client/assets/pathUSD-DuAfAKZZ.js +1 -0
- package/dist/app/client/assets/{removable-CZFK4Sbw.js → removable-CbJQgeuY.js} +1 -1
- package/dist/app/client/assets/{routes-BEKA6M9o.js → routes-BkBTe_Iu.js} +1 -1
- package/dist/app/client/assets/{suspense-ClIj0Mjn.js → suspense-Djz3yPi6.js} +1 -1
- package/dist/app/client/assets/useNavigate-B3GfD6JV.js +1 -0
- package/dist/app/client/assets/{useRegisterFieldControl-r_mKBm9D.js → useRegisterFieldControl-C8uwO_R4.js} +1 -1
- package/dist/app/client/assets/zyzz-DYC-X0_B.css +1 -0
- package/dist/app/client/assets/zyzz.config-DJRBo25J.js +2 -0
- package/dist/app/server/.vite/manifest.json +640 -608
- package/dist/app/server/assets/Account-BYLpNFf3.css +1 -0
- package/dist/app/server/assets/Account-g1_Uaj86.js +2 -0
- package/dist/app/server/assets/Account-g1_Uaj86.js.map +1 -0
- package/dist/app/server/assets/Amount-BXSuv2fx.js +2 -0
- package/dist/app/server/assets/Amount-BXSuv2fx.js.map +1 -0
- package/dist/app/server/assets/Amount-ZdtluGf-.css +1 -0
- package/dist/app/server/assets/{Approval-DhLkTvkI.js → Approval-DA8fDZIl.js} +2 -2
- package/dist/app/server/assets/{Approval-DhLkTvkI.js.map → Approval-DA8fDZIl.js.map} +1 -1
- package/dist/app/server/assets/{Authentication-Odm8-gfs.js → Authentication-BJgy8lyC.js} +2 -2
- package/dist/app/server/assets/{Authentication-Odm8-gfs.js.map → Authentication-BJgy8lyC.js.map} +1 -1
- package/dist/app/server/assets/{Authentication-DLWMd2mA.js → Authentication-CsSh3HGu.js} +2 -2
- package/dist/app/server/assets/{Authentication-DLWMd2mA.js.map → Authentication-CsSh3HGu.js.map} +1 -1
- package/dist/app/server/assets/Callout-DBfEmP7q.css +1 -0
- package/dist/app/server/assets/Callout-DlcQ5BUo.js +2 -0
- package/dist/app/server/assets/Callout-DlcQ5BUo.js.map +1 -0
- package/dist/app/server/assets/{Chain-CQgBRAXx.js → Chain-C9RGZDJm.js} +2 -2
- package/dist/app/server/assets/{Chain-CQgBRAXx.js.map → Chain-C9RGZDJm.js.map} +1 -1
- package/dist/app/server/assets/{Check-BwwQ6kDn.js → Check-CQIa-Y5d.js} +2 -2
- package/dist/app/server/assets/{Check-BwwQ6kDn.js.map → Check-CQIa-Y5d.js.map} +1 -1
- package/dist/app/server/assets/{ChevronRight-B_ft-uyS.js → ChevronRight-wzF9Mh2e.js} +2 -2
- package/dist/app/server/assets/{ChevronRight-B_ft-uyS.js.map → ChevronRight-wzF9Mh2e.js.map} +1 -1
- package/dist/app/server/assets/{ChooseAccount-FJJ2kRPk.js → ChooseAccount-De_YweJM.js} +2 -2
- package/dist/app/server/assets/{ChooseAccount-FJJ2kRPk.js.map → ChooseAccount-De_YweJM.js.map} +1 -1
- package/dist/app/server/assets/{Client-D3gnMDTr.js → Client-BAXSFa9e.js} +2 -2
- package/dist/app/server/assets/{Client-D3gnMDTr.js.map → Client-BAXSFa9e.js.map} +1 -1
- package/dist/app/server/assets/{ClientOnly-CbQVNHub.js → ClientOnly-B8k5xDwz.js} +2 -2
- package/dist/app/server/assets/{ClientOnly-CbQVNHub.js.map → ClientOnly-B8k5xDwz.js.map} +1 -1
- package/dist/app/server/assets/{Close-ChRMz-uR.js → Close-C74hwnOn.js} +2 -2
- package/dist/app/server/assets/{Close-ChRMz-uR.js.map → Close-C74hwnOn.js.map} +1 -1
- package/dist/app/server/assets/{Cloud-C3_mtq_Y.js → Cloud-CYXeneSe.js} +2 -2
- package/dist/app/server/assets/{Cloud-C3_mtq_Y.js.map → Cloud-CYXeneSe.js.map} +1 -1
- package/dist/app/server/assets/CodeInput-BqRteSwD.css +1 -0
- package/dist/app/server/assets/CodeInput-DdkMKOyq.js +2 -0
- package/dist/app/server/assets/CodeInput-DdkMKOyq.js.map +1 -0
- package/dist/app/server/assets/{Credential-D82PNwyx.js → Credential-DXcfPJEP.js} +2 -2
- package/dist/app/server/assets/{Credential-D82PNwyx.js.map → Credential-DXcfPJEP.js.map} +1 -1
- package/dist/app/server/assets/Deposit-CclrAoXL.css +1 -0
- package/dist/app/server/assets/Deposit-DOp5HCDX.js +2 -0
- package/dist/app/server/assets/Deposit-DOp5HCDX.js.map +1 -0
- package/dist/app/server/assets/DevTools-BYkmtuV5.css +1 -0
- package/dist/app/server/assets/DevTools-CxdPUN3V.js +2 -0
- package/dist/app/server/assets/DevTools-CxdPUN3V.js.map +1 -0
- package/dist/app/server/assets/{DeviceApproval-BhWgrv9l.js → DeviceApproval-o7T8XlX3.js} +2 -2
- package/dist/app/server/assets/{DeviceApproval-BhWgrv9l.js.map → DeviceApproval-o7T8XlX3.js.map} +1 -1
- package/dist/app/server/assets/{ExecutionError-DSSCSoHl.js → ExecutionError-DoRNvh3D.js} +2 -2
- package/dist/app/server/assets/{ExecutionError-DSSCSoHl.js.map → ExecutionError-DoRNvh3D.js.map} +1 -1
- package/dist/app/server/assets/{Faucet-Cv-nQMBR.js → Faucet-jp6zNWHE.js} +2 -2
- package/dist/app/server/assets/{Faucet-Cv-nQMBR.js.map → Faucet-jp6zNWHE.js.map} +1 -1
- package/dist/app/server/assets/{Fingerprint-B0Iay4Ws.js → Fingerprint-CAqjOS3T.js} +2 -2
- package/dist/app/server/assets/{Fingerprint-B0Iay4Ws.js.map → Fingerprint-CAqjOS3T.js.map} +1 -1
- package/dist/app/server/assets/{Globe-C6rnzTY0.js → Globe-BZ_5dGqa.js} +2 -2
- package/dist/app/server/assets/{Globe-C6rnzTY0.js.map → Globe-BZ_5dGqa.js.map} +1 -1
- package/dist/app/server/assets/Grant-5a-n1gJH.css +1 -0
- package/dist/app/{client/assets/Grant-DurkleN7.js → server/assets/Grant-BwOC2P94.js} +2 -1
- package/dist/app/server/assets/Grant-BwOC2P94.js.map +1 -0
- package/dist/app/server/assets/Hex-67thYs-f.js +11 -0
- package/dist/app/server/assets/Hex-67thYs-f.js.map +1 -0
- package/dist/app/server/assets/Hex-C9KeV7_9.css +1 -0
- package/dist/app/server/assets/IconChip-Cmufss8d.js +2 -0
- package/dist/app/server/assets/IconChip-Cmufss8d.js.map +1 -0
- package/dist/app/server/assets/IconChip-yqaQ2y_d.css +1 -0
- package/dist/app/server/assets/InputGroup-BlZvt9In.css +1 -0
- package/dist/app/server/assets/InputGroup-Bn2KM9pd.js +2 -0
- package/dist/app/server/assets/InputGroup-Bn2KM9pd.js.map +1 -0
- package/dist/app/server/assets/Inter-cyrillic-e3OmmzmJ.woff2 +0 -0
- package/dist/app/server/assets/Inter-cyrillic-ext-DOWZeO4Q.woff2 +0 -0
- package/dist/app/server/assets/Inter-greek-BD3ujQlX.woff2 +0 -0
- package/dist/app/server/assets/Inter-greek-ext-CXEwbus4.woff2 +0 -0
- package/dist/app/server/assets/Inter-latin-BDFm4vTb.woff2 +0 -0
- package/dist/app/server/assets/Inter-latin-ext-E7a9JEPe.woff2 +0 -0
- package/dist/app/server/assets/Inter-symbols-DEch7Rxr.woff2 +0 -0
- package/dist/app/server/assets/Inter-vietnamese-Bg9723vR.woff2 +0 -0
- package/dist/app/server/assets/Loader-DvDbd8kj.js +2 -0
- package/dist/app/server/assets/{Loader-Ivf5dWFl.js.map → Loader-DvDbd8kj.js.map} +1 -1
- package/dist/app/server/assets/{Match-DusFDz9D.js → Match-C65vhhhD.js} +2 -2
- package/dist/app/server/assets/{Match-DusFDz9D.js.map → Match-C65vhhhD.js.map} +1 -1
- package/dist/app/server/assets/PopoverPopup-kuWGUSYM.js +2 -0
- package/dist/app/server/assets/{PopoverPopup-D98JOZVe.js.map → PopoverPopup-kuWGUSYM.js.map} +1 -1
- package/dist/app/server/assets/Rows-DPGTUdA8.css +1 -0
- package/dist/app/server/assets/Rows-eTPur_py.js +2 -0
- package/dist/app/server/assets/Rows-eTPur_py.js.map +1 -0
- package/dist/app/server/assets/{Separator-B6od-9JY.js → Separator-BPNenixO.js} +2 -2
- package/dist/app/server/assets/{Separator-B6od-9JY.js.map → Separator-BPNenixO.js.map} +1 -1
- package/dist/app/server/assets/SignIn-CVPZSR-8.js +2 -0
- package/dist/app/server/assets/SignIn-CVPZSR-8.js.map +1 -0
- package/dist/app/server/assets/SignIn-mlBTwUq4.css +1 -0
- package/dist/app/server/assets/Stack-D7Yt22Ed.css +1 -0
- package/dist/app/server/assets/Stack-DQMZBUUB.js +2 -0
- package/dist/app/server/assets/Stack-DQMZBUUB.js.map +1 -0
- package/dist/app/server/assets/ToolbarRootContext-5168W3t4.js +2 -0
- package/dist/app/server/assets/{ToolbarRootContext-BCmWBQ7n.js.map → ToolbarRootContext-5168W3t4.js.map} +1 -1
- package/dist/app/server/assets/Tooltip-DR3nssae.js +2 -0
- package/dist/app/server/assets/Tooltip-DR3nssae.js.map +1 -0
- package/dist/app/server/assets/Tooltip-d3y9ESUJ.css +1 -0
- package/dist/app/server/assets/___-I98bns4o.css +1 -0
- package/dist/app/server/assets/___.flows-D_J822MU.js +6 -0
- package/dist/app/server/assets/___.flows-D_J822MU.js.map +1 -0
- package/dist/app/server/assets/_tanstack-start-manifest_v-DQjMcFpU.js +1 -0
- package/dist/app/server/assets/{_zyzz__2Fhome_2Frunner_2Fwork_2Fid_2Fid_2Fsrc_2Fapp_2Froutes_2F_5B__5D.flows.tsx-Drf_Iqhc.js → _zyzz__2Fhome_2Frunner_2Fwork_2Fid_2Fid_2Fsrc_2Fapp_2Froutes_2F_5B__5D.flows.tsx-EmCsnNUQ.js} +2 -2
- package/dist/app/server/assets/{_zyzz__2Fhome_2Frunner_2Fwork_2Fid_2Fid_2Fsrc_2Fapp_2Froutes_2F_5B__5D.flows.tsx-Drf_Iqhc.js.map → _zyzz__2Fhome_2Frunner_2Fwork_2Fid_2Fid_2Fsrc_2Fapp_2Froutes_2F_5B__5D.flows.tsx-EmCsnNUQ.js.map} +1 -1
- package/dist/app/server/assets/{accessKey-CxNqjouy.js → accessKey-DlBe71R7.js} +4 -4
- package/dist/app/server/assets/{accessKey-CxNqjouy.js.map → accessKey-DlBe71R7.js.map} +1 -1
- package/dist/app/server/assets/{authorize-D_5EG0WN.js → authorize-C3nY01zc.js} +2 -2
- package/dist/app/server/assets/{authorize-D_5EG0WN.js.map → authorize-C3nY01zc.js.map} +1 -1
- package/dist/app/server/assets/{authorize-pZETCSux.js → authorize-C9tfZ34z.js} +2 -2
- package/dist/app/server/assets/{authorize-pZETCSux.js.map → authorize-C9tfZ34z.js.map} +1 -1
- package/dist/app/server/assets/{authorize-DXYo-K2n-08rIhXFT.js → authorize-DXYo-K2n-Bc8o9t1x.js} +2 -2
- package/dist/app/server/assets/{authorize-DXYo-K2n-08rIhXFT.js.map → authorize-DXYo-K2n-Bc8o9t1x.js.map} +1 -1
- package/dist/app/server/assets/{choose-account-BOPrs9l7.js → choose-account-DNfcLweT.js} +2 -2
- package/dist/app/server/assets/{choose-account-BOPrs9l7.js.map → choose-account-DNfcLweT.js.map} +1 -1
- package/dist/app/server/assets/{choose-account-MDW4jp29.js → choose-account-Lq0qFqBr.js} +2 -2
- package/dist/app/server/assets/{choose-account-MDW4jp29.js.map → choose-account-Lq0qFqBr.js.map} +1 -1
- package/dist/app/server/assets/{core-Dxqe4Tzf.js → core-Ci_AVqAl.js} +2 -2
- package/dist/app/server/assets/{core-Dxqe4Tzf.js.map → core-Ci_AVqAl.js.map} +1 -1
- package/dist/app/server/assets/default-u_dwuiYb-D3URkhAV.js +2 -0
- package/dist/app/server/assets/{default-u_dwuiYb-BZX-cEte.js.map → default-u_dwuiYb-D3URkhAV.js.map} +1 -1
- package/dist/app/server/assets/{deposit-AgLrOoA3.js → deposit-Ch8VqCtG.js} +2 -2
- package/dist/app/server/assets/{deposit-AgLrOoA3.js.map → deposit-Ch8VqCtG.js.map} +1 -1
- package/dist/app/server/assets/{deposit-Cjt69KmJ.js → deposit-xQrouL3f.js} +2 -2
- package/dist/app/server/assets/{deposit-Cjt69KmJ.js.map → deposit-xQrouL3f.js.map} +1 -1
- package/dist/app/server/assets/{device-TEgIth9V.js → device-BAsgIC7D.js} +2 -2
- package/dist/app/server/assets/{device-TEgIth9V.js.map → device-BAsgIC7D.js.map} +1 -1
- package/dist/app/server/assets/{device-DO_RH0Or.js → device-BV99aHMG.js} +2 -2
- package/dist/app/server/assets/{device-DO_RH0Or.js.map → device-BV99aHMG.js.map} +1 -1
- package/dist/app/server/assets/dist-BhIyCFP8.js +1 -0
- package/dist/app/server/assets/{dist-C9wLcfH8.js → dist-C-Rzwa6V.js} +2 -2
- package/dist/app/server/assets/{dist-C9wLcfH8.js.map → dist-C-Rzwa6V.js.map} +1 -1
- package/dist/app/server/assets/{dist-SBl0rlY-.js → dist-CJN10pUl.js} +2 -2
- package/dist/app/server/assets/{dist-SBl0rlY-.js.map → dist-CJN10pUl.js.map} +1 -1
- package/dist/app/server/assets/{effect-QlVUlMFu-aB2jdYth.js → effect-QlVUlMFu-svPBY1dH.js} +2 -2
- package/dist/app/server/assets/{effect-QlVUlMFu-aB2jdYth.js.map → effect-QlVUlMFu-svPBY1dH.js.map} +1 -1
- package/dist/app/server/assets/{error-BDVg4EUJ.js → error-CHeOE_lh.js} +2 -2
- package/dist/app/server/assets/{error-BDVg4EUJ.js.map → error-CHeOE_lh.js.map} +1 -1
- package/dist/app/server/assets/{error-Yg6jqry-.js → error-PecJkSHO.js} +2 -2
- package/dist/app/server/assets/{error-Yg6jqry-.js.map → error-PecJkSHO.js.map} +1 -1
- package/dist/app/server/assets/{factory-BPswjDEW.js → factory-Bs0vLkBr.js} +2 -2
- package/dist/app/server/assets/{factory-BPswjDEW.js.map → factory-Bs0vLkBr.js.map} +1 -1
- package/dist/app/server/assets/getPseudoElementBounds-DIn3v91B.js +2 -0
- package/dist/app/server/assets/{getPseudoElementBounds-BdqJhx6M.js.map → getPseudoElementBounds-DIn3v91B.js.map} +1 -1
- package/dist/app/server/assets/{index-CLddUTqr-Bavq3Qss.js → index-CLddUTqr-CmUyZRXY.js} +2 -2
- package/dist/app/server/assets/{index-CLddUTqr-Bavq3Qss.js.map → index-CLddUTqr-CmUyZRXY.js.map} +1 -1
- package/dist/app/server/assets/{index-DZEfthgZ--TkOBRwP.js → index-DZEfthgZ-Bkf7F_aP.js} +2 -2
- package/dist/app/server/assets/{index-DZEfthgZ--TkOBRwP.js.map → index-DZEfthgZ-Bkf7F_aP.js.map} +1 -1
- package/dist/app/server/assets/{kysely-adapter-BVql8na5.js → kysely-adapter-DhztbDJz.js} +1 -1
- package/dist/app/server/assets/{lazyRouteComponent-BXabRVTE.js → lazyRouteComponent-DOSE663E.js} +2 -2
- package/dist/app/server/assets/{lazyRouteComponent-BXabRVTE.js.map → lazyRouteComponent-DOSE663E.js.map} +1 -1
- package/dist/app/server/assets/{login-BR3Vh4Jw.js → login-6K4ND-gN.js} +2 -2
- package/dist/app/server/assets/{login-BR3Vh4Jw.js.map → login-6K4ND-gN.js.map} +1 -1
- package/dist/app/server/assets/{login-DtRzF4FQ.js → login-CGq85v-9.js} +2 -2
- package/dist/app/server/assets/{login-DtRzF4FQ.js.map → login-CGq85v-9.js.map} +1 -1
- package/dist/app/server/assets/{matchContext-Cuq8aYzA.js → matchContext-BHbopc_c.js} +2 -2
- package/dist/app/server/assets/{matchContext-Cuq8aYzA.js.map → matchContext-BHbopc_c.js.map} +1 -1
- package/dist/app/server/assets/{mutation-BseSOMT8.js → mutation-D0MCZKRo.js} +2 -2
- package/dist/app/server/assets/{mutation-BseSOMT8.js.map → mutation-D0MCZKRo.js.map} +1 -1
- package/dist/app/server/assets/pathUSD-BMh6ajrW.css +1 -0
- package/dist/app/server/assets/pathUSD-DqRWfB70.js +2 -0
- package/dist/app/server/assets/pathUSD-DqRWfB70.js.map +1 -0
- package/dist/app/server/assets/{query-lzX3sTGO.js → query-BfAOtP6H.js} +2 -2
- package/dist/app/server/assets/{query-lzX3sTGO.js.map → query-BfAOtP6H.js.map} +1 -1
- package/dist/app/server/assets/react-dom-BbDIEd_j.css +1 -0
- package/dist/app/server/assets/{react-dom-DtwtyQPy.js → react-dom-pSpaua7D.js} +1 -1
- package/dist/app/server/assets/{react-dom-DtwtyQPy.js.map → react-dom-pSpaua7D.js.map} +1 -1
- package/dist/app/server/assets/{removable-HVB1MGzn.js → removable-BIS_RRBc.js} +2 -2
- package/dist/app/server/assets/{removable-HVB1MGzn.js.map → removable-BIS_RRBc.js.map} +1 -1
- package/dist/app/server/assets/{resolveError-DSqzEjUE.js → resolveError-DPXmbkOB.js} +2 -2
- package/dist/app/server/assets/{resolveError-DSqzEjUE.js.map → resolveError-DPXmbkOB.js.map} +1 -1
- package/dist/app/server/assets/{router-uhTdTHZE.js → router-nrTsbXpb.js} +2 -2
- package/dist/app/server/assets/router-nrTsbXpb.js.map +1 -0
- package/dist/app/server/assets/routes-BgiIzrOt.css +1 -0
- package/dist/app/server/assets/{routes-CeDOMpI-.js → routes-ClVSwEtU.js} +2 -2
- package/dist/app/server/assets/{routes-CeDOMpI-.js.map → routes-ClVSwEtU.js.map} +1 -1
- package/dist/app/server/assets/routes-DM3C9lXZ.js +2 -0
- package/dist/app/server/assets/routes-DM3C9lXZ.js.map +1 -0
- package/dist/app/server/assets/{schemas-fV27l6kI.js → schemas-CFw4XgfH.js} +2 -2
- package/dist/app/server/assets/{schemas-fV27l6kI.js.map → schemas-CFw4XgfH.js.map} +1 -1
- package/dist/app/server/assets/{secp256k1-5tp4GQIt.js → secp256k1-BmATpikU.js} +2 -2
- package/dist/app/server/assets/{secp256k1-5tp4GQIt.js.map → secp256k1-BmATpikU.js.map} +1 -1
- package/dist/app/server/assets/{sury-CWZTCd75-BPXRo6iz.js → sury-CWZTCd75-B2_9nmQ-.js} +2 -2
- package/dist/app/server/assets/{sury-CWZTCd75-BPXRo6iz.js.map → sury-CWZTCd75-B2_9nmQ-.js.map} +1 -1
- package/dist/app/server/assets/{suspense-CVCU9Kbi.js → suspense-gv0MCXZ8.js} +2 -2
- package/dist/app/server/assets/{suspense-CVCU9Kbi.js.map → suspense-gv0MCXZ8.js.map} +1 -1
- package/dist/app/server/assets/{useNavigate-D9psnozp.js → useNavigate-gn6-bYOz.js} +2 -2
- package/dist/app/server/assets/{useNavigate-D9psnozp.js.map → useNavigate-gn6-bYOz.js.map} +1 -1
- package/dist/app/server/assets/useRegisterFieldControl-DMeVvRtG.js +2 -0
- package/dist/app/server/assets/{useRegisterFieldControl-UOdCWAKS.js.map → useRegisterFieldControl-DMeVvRtG.js.map} +1 -1
- package/dist/app/server/assets/{utils-Dst7Jy9U.js → utils-CJnLBS6t.js} +2 -2
- package/dist/app/server/assets/{utils-Dst7Jy9U.js.map → utils-CJnLBS6t.js.map} +1 -1
- package/dist/app/server/assets/{valibot--1zFm7rT-LDsJca69.js → valibot--1zFm7rT-DAm9l6Yd.js} +2 -2
- package/dist/app/server/assets/{valibot--1zFm7rT-LDsJca69.js.map → valibot--1zFm7rT-DAm9l6Yd.js.map} +1 -1
- package/dist/app/server/assets/{valibot-D_HTw1Gn-DY-tIZ72.js → valibot-D_HTw1Gn-B_uu9X0a.js} +2 -2
- package/dist/app/server/assets/{valibot-D_HTw1Gn-DY-tIZ72.js.map → valibot-D_HTw1Gn-B_uu9X0a.js.map} +1 -1
- package/dist/app/server/assets/{zod-Bwrt9trS-Cf4c1iF8.js → zod-Bwrt9trS-DDq3sdx6.js} +2 -2
- package/dist/app/server/assets/{zod-Bwrt9trS-Cf4c1iF8.js.map → zod-Bwrt9trS-DDq3sdx6.js.map} +1 -1
- package/dist/app/server/assets/{zod-DSgpEGAE-IkLVlUaZ.js → zod-DSgpEGAE-Dzlub58Z.js} +2 -2
- package/dist/app/server/assets/{zod-DSgpEGAE-IkLVlUaZ.js.map → zod-DSgpEGAE-Dzlub58Z.js.map} +1 -1
- package/dist/app/server/assets/zyzz-6R2K52xP.css +1 -0
- package/dist/app/server/assets/{zyzz.config-DYq-16_0.js → zyzz.config-CW977vYL.js} +3 -3
- package/dist/app/server/assets/zyzz.config-CW977vYL.js.map +1 -0
- package/dist/app/server/index.js +3 -3
- package/package.json +1 -1
- package/dist/app/client/assets/Account-DiXbQ7gq.css +0 -1
- package/dist/app/client/assets/Account-JXT-dSA8.js +0 -1
- package/dist/app/client/assets/Amount-C5uw89Ge.js +0 -1
- package/dist/app/client/assets/Amount-Ck6sPRDT.css +0 -1
- package/dist/app/client/assets/Callout-DE0CvxbE.css +0 -1
- package/dist/app/client/assets/Callout-D_dLrptL.js +0 -1
- package/dist/app/client/assets/CodeInput-CXbj-o_B.js +0 -1
- package/dist/app/client/assets/CodeInput-C_clyqA2.css +0 -1
- package/dist/app/client/assets/Deposit-CAkrtNYZ.css +0 -1
- package/dist/app/client/assets/Deposit-Cv7IQBO0.js +0 -1
- package/dist/app/client/assets/DevTools-CnWAfvO2.js +0 -1
- package/dist/app/client/assets/DevTools-DLG9O0YT.css +0 -1
- package/dist/app/client/assets/Grant-B6bmC4rh.css +0 -1
- package/dist/app/client/assets/Hex-BR5nHbFT.js +0 -10
- package/dist/app/client/assets/Hex-CriDfcNg.css +0 -1
- package/dist/app/client/assets/IconChip-BVqRSUpG.css +0 -1
- package/dist/app/client/assets/IconChip-ClKbN-8M.js +0 -1
- package/dist/app/client/assets/InputGroup-4QFqa-T2.css +0 -1
- package/dist/app/client/assets/InputGroup-CEI6gBId.js +0 -1
- package/dist/app/client/assets/Inter-Variable-DiVDrmQJ.woff2 +0 -0
- package/dist/app/client/assets/Loader-CtzJeMeX.js +0 -1
- package/dist/app/client/assets/Rows-DgpXomcK.js +0 -1
- package/dist/app/client/assets/Rows-oSTffNii.css +0 -1
- package/dist/app/client/assets/SignIn-CjGB1wk9.js +0 -1
- package/dist/app/client/assets/SignIn-Dz1G9XNf.css +0 -1
- package/dist/app/client/assets/Stack-90EFgtQe.js +0 -1
- package/dist/app/client/assets/Stack-CKvHhjzW.css +0 -1
- package/dist/app/client/assets/ToolbarRootContext-dnisUzmP.js +0 -1
- package/dist/app/client/assets/Tooltip-9TI_rDvs.css +0 -1
- package/dist/app/client/assets/Tooltip-C3H_9mgz.js +0 -1
- package/dist/app/client/assets/___-7yUISk6H.css +0 -1
- package/dist/app/client/assets/___.flows-DwoJPGMf.js +0 -5
- package/dist/app/client/assets/index-BXTO-7dr.css +0 -1
- package/dist/app/client/assets/index-CkKM7xlX.js +0 -13
- package/dist/app/client/assets/pathUSD-DY3ycgMd.js +0 -1
- package/dist/app/client/assets/pathUSD-Dn2NadYx.css +0 -1
- package/dist/app/client/assets/useNavigate-DsbQ8bTr.js +0 -1
- package/dist/app/client/assets/zyzz-MTPfhrAv.css +0 -1
- package/dist/app/client/assets/zyzz.config-ENEfJGzk.js +0 -2
- package/dist/app/server/assets/Account-BqjoGTzm.js +0 -2
- package/dist/app/server/assets/Account-BqjoGTzm.js.map +0 -1
- package/dist/app/server/assets/Account-DiXbQ7gq.css +0 -1
- package/dist/app/server/assets/Amount-Ck6sPRDT.css +0 -1
- package/dist/app/server/assets/Amount-CmypanEu.js +0 -2
- package/dist/app/server/assets/Amount-CmypanEu.js.map +0 -1
- package/dist/app/server/assets/Callout-DE0CvxbE.css +0 -1
- package/dist/app/server/assets/Callout-_eafmkya.js +0 -2
- package/dist/app/server/assets/Callout-_eafmkya.js.map +0 -1
- package/dist/app/server/assets/CodeInput-CRxIP0KX.js +0 -2
- package/dist/app/server/assets/CodeInput-CRxIP0KX.js.map +0 -1
- package/dist/app/server/assets/CodeInput-C_clyqA2.css +0 -1
- package/dist/app/server/assets/Deposit-CAkrtNYZ.css +0 -1
- package/dist/app/server/assets/Deposit-CiWidviP.js +0 -2
- package/dist/app/server/assets/Deposit-CiWidviP.js.map +0 -1
- package/dist/app/server/assets/DevTools-BJcNvNjx.js +0 -2
- package/dist/app/server/assets/DevTools-BJcNvNjx.js.map +0 -1
- package/dist/app/server/assets/DevTools-DLG9O0YT.css +0 -1
- package/dist/app/server/assets/Grant-B6bmC4rh.css +0 -1
- package/dist/app/server/assets/Grant-N8RQy7lZ.js +0 -2
- package/dist/app/server/assets/Grant-N8RQy7lZ.js.map +0 -1
- package/dist/app/server/assets/Hex-CriDfcNg.css +0 -1
- package/dist/app/server/assets/Hex-vNjxlXvk.js +0 -11
- package/dist/app/server/assets/Hex-vNjxlXvk.js.map +0 -1
- package/dist/app/server/assets/IconChip-BQdjH8i6.js +0 -2
- package/dist/app/server/assets/IconChip-BQdjH8i6.js.map +0 -1
- package/dist/app/server/assets/IconChip-BVqRSUpG.css +0 -1
- package/dist/app/server/assets/InputGroup-4QFqa-T2.css +0 -1
- package/dist/app/server/assets/InputGroup-BhUIBTgI.js +0 -2
- package/dist/app/server/assets/InputGroup-BhUIBTgI.js.map +0 -1
- package/dist/app/server/assets/Inter-Variable-DiVDrmQJ.woff2 +0 -0
- package/dist/app/server/assets/Loader-Ivf5dWFl.js +0 -2
- package/dist/app/server/assets/PopoverPopup-D98JOZVe.js +0 -2
- package/dist/app/server/assets/Rows-BuyZXkPa.js +0 -2
- package/dist/app/server/assets/Rows-BuyZXkPa.js.map +0 -1
- package/dist/app/server/assets/Rows-oSTffNii.css +0 -1
- package/dist/app/server/assets/SignIn-D7jl6zbw.js +0 -2
- package/dist/app/server/assets/SignIn-D7jl6zbw.js.map +0 -1
- package/dist/app/server/assets/SignIn-Dz1G9XNf.css +0 -1
- package/dist/app/server/assets/Stack-C3ecM7vx.js +0 -2
- package/dist/app/server/assets/Stack-C3ecM7vx.js.map +0 -1
- package/dist/app/server/assets/Stack-CKvHhjzW.css +0 -1
- package/dist/app/server/assets/ToolbarRootContext-BCmWBQ7n.js +0 -2
- package/dist/app/server/assets/Tooltip-9TI_rDvs.css +0 -1
- package/dist/app/server/assets/Tooltip-D3NLigmC.js +0 -2
- package/dist/app/server/assets/Tooltip-D3NLigmC.js.map +0 -1
- package/dist/app/server/assets/___-7yUISk6H.css +0 -1
- package/dist/app/server/assets/___.flows-DRvHKxBR.js +0 -6
- package/dist/app/server/assets/___.flows-DRvHKxBR.js.map +0 -1
- package/dist/app/server/assets/_tanstack-start-manifest_v-BIobT_5u.js +0 -1
- package/dist/app/server/assets/default-u_dwuiYb-BZX-cEte.js +0 -2
- package/dist/app/server/assets/dist-k0uWU-Rh.js +0 -1
- package/dist/app/server/assets/getPseudoElementBounds-BdqJhx6M.js +0 -2
- package/dist/app/server/assets/pathUSD-CVs71wGH.js +0 -2
- package/dist/app/server/assets/pathUSD-CVs71wGH.js.map +0 -1
- package/dist/app/server/assets/pathUSD-Dn2NadYx.css +0 -1
- package/dist/app/server/assets/react-dom-bupMaze0.css +0 -1
- package/dist/app/server/assets/router-uhTdTHZE.js.map +0 -1
- package/dist/app/server/assets/routes-ZveUsG66.js +0 -2
- package/dist/app/server/assets/routes-ZveUsG66.js.map +0 -1
- package/dist/app/server/assets/routes-dxKeFXjL.css +0 -1
- package/dist/app/server/assets/useRegisterFieldControl-UOdCWAKS.js +0 -2
- package/dist/app/server/assets/zyzz-DuvTIyXM.css +0 -1
- package/dist/app/server/assets/zyzz.config-DYq-16_0.js.map +0 -1
package/dist/app/server/assets/{ExecutionError-DSSCSoHl.js.map → ExecutionError-DoRNvh3D.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExecutionError-DSSCSoHl.js","names":["serialize","Hash.keccak256","Hex.fromString","Value.from","Abis.tip20","internal_Token.toBaseUnits","Hex.padLeft","Addresses.pathUsd","Hex.random","Addresses.tip20Factory","Abis.tip20Factory","internal_Token.toAmount","TokenId.fromAddress","TokenRole.serialize","Addresses.tip403Registry","Abis.tip403Registry","Abis.coreErrors","tip20Factory","pathUsd","tip403Registry$1","sendTransaction","coreErrors","parseEventLogs","fromAddress","formatUnits","tip20Factory$1","getAction","AccountNotFoundError","readContract","isTip20","resolveToken","estimateGas","findDeclaredToken","tip403Registry","resolveTokenWithDecimals","TempoExecutionError","pickWriteParameters","withExecutionError","getContractError","writeContract","defineCall","resolveCallParameters","formatAmount","tip20","padLeft","random","fromString","keccak256","AbiDecodingZeroDataError","RawContractError","decodeErrorResult","parseAccount","decodeFunctionResult","getChainContractAddress","stringify","multicall3Abi","createBatchScheduler","formatAbiItem","toFunctionSelector","BaseError","from$1","call","multicall3Bytecode","encodeFunctionData","toPreHashed","serialize$1","role","estimateContractGas","client","request","parameters","data","dataSuffix","address","error","account","simulateContract","callRequest","calldata","abi","abiItem","parseUnits","value","decimals","multicall","contracts","batch","batchSize","deployless","multicallAddress","chunkedCalls","currentChunk","currentChunkSize","i","callData","err","allowFailure","batching","batches","calls","aggregate3Results","scheduleMulticall","result","results","j","aggregate3Result","success","returnData","rest","size","schedule","zeroAddress","toAmount","amount","toBaseUnits","resolved","requireTokenDecimals","approve","inner","action","args","spender","simulate","extractEvent","log","burnBlocked","from","burn","callArgs","memo","changeTransferPolicy","policyId","create","admin_","admin","logoURI","name","symbol","currency","quoteToken","salt","getAllowance","getBalance","account_","getMetadata","declared","token","overrides","readMetadataContracts","totalSupply","unwrapMulticallResult","paused","supplyCap","transferPolicyId","contract","fallback","response","getTotalSupply","getRoleAdmin","hasRole","grantRoles","roleHash","to","extractEvents","events","mint","pause","renounceRoles","revokeRoles","_","setSupplyCap","setRoleAdmin","adminRoleHash","adminRole","transfer","unpause","prepareUpdateQuoteToken","updateQuoteToken","TokenInsufficientBalanceError","available","required","TokenInsufficientAllowanceError","allowance","owner","TokenSupplyCapExceededError","TokenPolicyForbidsError","party","senderAuthorized","recipientAuthorized","TokenPausedError","TokenUnauthorizedError","requiredRoles","errorResolvers","base","context","signer","registry","sender","recipient","messages","hints","interpolate","template","v","source","decoded","parse","descriptors","key","descriptor","serialize","preimage","extractRevertData","seen","e","raw","item","debugMatch","nameMatch","templates","signature"],"sources":["../../../../../node_modules/.pnpm/ox@0.14.57_typescript@7.0.2_zod@4.6.7/node_modules/ox/_esm/tempo/TokenRole.js","../../../../../node_modules/.pnpm/viem@2.57.10_typescript@7.0.2_zod@4.6.7/node_modules/viem/_esm/actions/public/estimateContractGas.js","../../../../../node_modules/.pnpm/viem@2.57.10_typescript@7.0.2_zod@4.6.7/node_modules/viem/_esm/actions/public/simulateContract.js","../../../../../node_modules/.pnpm/viem@2.57.10_typescript@7.0.2_zod@4.6.7/node_modules/viem/_esm/utils/unit/parseUnits.js","../../../../../node_modules/.pnpm/viem@2.57.10_typescript@7.0.2_zod@4.6.7/node_modules/viem/_esm/actions/public/multicall.js","../../../../../node_modules/.pnpm/viem@2.57.10_typescript@7.0.2_zod@4.6.7/node_modules/viem/_esm/constants/address.js","../../../../../node_modules/.pnpm/viem@2.57.10_typescript@7.0.2_zod@4.6.7/node_modules/viem/_esm/actions/token/internal.js","../../../../../node_modules/.pnpm/viem@2.57.10_typescript@7.0.2_zod@4.6.7/node_modules/viem/_esm/tempo/actions/token.js","../../../../../node_modules/.pnpm/viem@2.57.10_typescript@7.0.2_zod@4.6.7/node_modules/viem/_esm/tempo/ExecutionError.js"],"sourcesContent":["import * as Hash from '../core/Hash.js';\nimport * as Hex from '../core/Hex.js';\nexport const roles = [\n 'defaultAdmin',\n 'pause',\n 'unpause',\n 'issuer',\n 'burnBlocked',\n 'burnAt',\n];\nexport const toPreHashed = {\n defaultAdmin: 'DEFAULT_ADMIN_ROLE',\n pause: 'PAUSE_ROLE',\n unpause: 'UNPAUSE_ROLE',\n issuer: 'ISSUER_ROLE',\n burnBlocked: 'BURN_BLOCKED_ROLE',\n burnAt: 'BURN_AT_ROLE',\n};\n/**\n * Serializes a token role to its keccak256 hash representation.\n *\n * TIP-20 includes a built-in RBAC system with roles like `ISSUER_ROLE` (mint/burn),\n * `PAUSE_ROLE`/`UNPAUSE_ROLE` (emergency controls), `BURN_BLOCKED_ROLE` (compliance), and\n * `BURN_AT_ROLE` (burn from any unprotected account, T12+).\n *\n * [TIP-20 RBAC](https://docs.tempo.xyz/protocol/tip20/overview#role-based-access-control-rbac)\n *\n * @example\n * ```ts twoslash\n * import { TokenRole } from 'ox/tempo'\n *\n * const hash = TokenRole.serialize('issuer')\n * ```\n *\n * @param role - The token role to serialize.\n * @returns The keccak256 hash of the role.\n */\nexport function serialize(role) {\n if (role === 'defaultAdmin')\n return '0x0000000000000000000000000000000000000000000000000000000000000000';\n return Hash.keccak256(Hex.fromString(toPreHashed[role] ?? role));\n}\n//# sourceMappingURL=TokenRole.js.map","import { parseAccount, } from '../../accounts/utils/parseAccount.js';\nimport { encodeFunctionData, } from '../../utils/abi/encodeFunctionData.js';\nimport { getContractError, } from '../../utils/errors/getContractError.js';\nimport { getAction } from '../../utils/getAction.js';\nimport { estimateGas, } from './estimateGas.js';\n/**\n * Estimates the gas required to successfully execute a contract write function call.\n *\n * - Docs: https://viem.sh/docs/contract/estimateContractGas\n *\n * Internally, uses a [Public Client](https://viem.sh/docs/clients/public) to call the [`estimateGas` action](https://viem.sh/docs/actions/public/estimateGas) with [ABI-encoded `data`](https://viem.sh/docs/contract/encodeFunctionData).\n *\n * @param client - Client to use\n * @param parameters - {@link EstimateContractGasParameters}\n * @returns The gas estimate (in wei). {@link EstimateContractGasReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { estimateContractGas } from 'viem/contract'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const gas = await estimateContractGas(client, {\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * abi: parseAbi(['function mint() public']),\n * functionName: 'mint',\n * account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',\n * })\n */\nexport async function estimateContractGas(client, parameters) {\n const { abi, address, args, functionName, dataSuffix = typeof client.dataSuffix === 'string'\n ? client.dataSuffix\n : client.dataSuffix?.value, ...request } = parameters;\n const data = encodeFunctionData({\n abi,\n args,\n functionName,\n });\n try {\n const gas = await getAction(client, estimateGas, 'estimateGas')({\n data: `${data}${dataSuffix ? dataSuffix.replace('0x', '') : ''}`,\n to: address,\n ...request,\n });\n return gas;\n }\n catch (error) {\n const account = request.account ? parseAccount(request.account) : undefined;\n throw getContractError(error, {\n abi,\n address,\n args,\n docsPath: '/docs/contract/estimateContractGas',\n functionName,\n sender: account?.address,\n });\n }\n}\n//# sourceMappingURL=estimateContractGas.js.map","import { parseAccount, } from '../../accounts/utils/parseAccount.js';\nimport { decodeFunctionResult, } from '../../utils/abi/decodeFunctionResult.js';\nimport { encodeFunctionData, } from '../../utils/abi/encodeFunctionData.js';\nimport { getContractError, } from '../../utils/errors/getContractError.js';\nimport { getAction } from '../../utils/getAction.js';\nimport { call } from './call.js';\n/**\n * Simulates/validates a contract interaction. This is useful for retrieving **return data** and **revert reasons** of contract write functions.\n *\n * - Docs: https://viem.sh/docs/contract/simulateContract\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/contracts_writing-to-contracts\n *\n * This function does not require gas to execute and _**does not**_ change the state of the blockchain. It is almost identical to [`readContract`](https://viem.sh/docs/contract/readContract), but also supports contract write functions.\n *\n * Internally, uses a [Public Client](https://viem.sh/docs/clients/public) to call the [`call` action](https://viem.sh/docs/actions/public/call) with [ABI-encoded `data`](https://viem.sh/docs/contract/encodeFunctionData).\n *\n * @param client - Client to use\n * @param parameters - {@link SimulateContractParameters}\n * @returns The simulation result and write request. {@link SimulateContractReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { simulateContract } from 'viem/contract'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const result = await simulateContract(client, {\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * abi: parseAbi(['function mint(uint32) view returns (uint32)']),\n * functionName: 'mint',\n * args: ['69420'],\n * account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * })\n */\nexport async function simulateContract(client, parameters) {\n const { abi, address, args, functionName, dataSuffix = typeof client.dataSuffix === 'string'\n ? client.dataSuffix\n : client.dataSuffix?.value, ...callRequest } = parameters;\n const account = callRequest.account\n ? parseAccount(callRequest.account)\n : client.account;\n const calldata = encodeFunctionData({ abi, args, functionName });\n try {\n const { data } = await getAction(client, call, 'call')({\n batch: false,\n data: `${calldata}${dataSuffix ? dataSuffix.replace('0x', '') : ''}`,\n to: address,\n ...callRequest,\n account,\n });\n const result = decodeFunctionResult({\n abi,\n args,\n functionName,\n data: data || '0x',\n });\n const minimizedAbi = abi.filter((abiItem) => 'name' in abiItem && abiItem.name === parameters.functionName);\n return {\n result,\n request: {\n abi: minimizedAbi,\n address,\n args,\n dataSuffix,\n functionName,\n ...callRequest,\n account,\n },\n };\n }\n catch (error) {\n throw getContractError(error, {\n abi,\n address,\n args,\n docsPath: '/docs/contract/simulateContract',\n functionName,\n sender: account?.address,\n });\n }\n}\n//# sourceMappingURL=simulateContract.js.map","import * as Value from './Value.js';\n/**\n * Multiplies a string representation of a number by a given exponent of base 10 (10exponent).\n *\n * - Docs: https://viem.sh/docs/utilities/parseUnits\n *\n * @example\n * import { parseUnits } from 'viem'\n *\n * parseUnits('420', 9)\n * // 420000000000n\n */\nexport function parseUnits(value, decimals) {\n return Value.from(value, decimals);\n}\n//# sourceMappingURL=parseUnits.js.map","import { multicall3Abi } from '../../constants/abis.js';\nimport { multicall3Bytecode } from '../../constants/contracts.js';\nimport { AbiDecodingZeroDataError } from '../../errors/abi.js';\nimport { BaseError } from '../../errors/base.js';\nimport { RawContractError } from '../../errors/contract.js';\nimport { decodeFunctionResult, } from '../../utils/abi/decodeFunctionResult.js';\nimport { encodeFunctionData, } from '../../utils/abi/encodeFunctionData.js';\nimport { getChainContractAddress, } from '../../utils/chain/getChainContractAddress.js';\nimport { getContractError, } from '../../utils/errors/getContractError.js';\nimport { getAction } from '../../utils/getAction.js';\nimport { createBatchScheduler, } from '../../utils/promise/createBatchScheduler.js';\nimport { stringify } from '../../utils/stringify.js';\nimport { readContract } from './readContract.js';\n/**\n * Similar to [`readContract`](https://viem.sh/docs/contract/readContract), but batches up multiple functions on a contract in a single RPC call via the [`multicall3` contract](https://github.com/mds1/multicall).\n *\n * - Docs: https://viem.sh/docs/contract/multicall\n *\n * @param client - Client to use\n * @param parameters - {@link MulticallParameters}\n * @returns An array of results with accompanying status. {@link MulticallReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { multicall } from 'viem/contract'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const abi = parseAbi([\n * 'function balanceOf(address) view returns (uint256)',\n * 'function totalSupply() view returns (uint256)',\n * ])\n * const results = await multicall(client, {\n * contracts: [\n * {\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * abi,\n * functionName: 'balanceOf',\n * args: ['0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'],\n * },\n * {\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * abi,\n * functionName: 'totalSupply',\n * },\n * ],\n * })\n * // [{ result: 424122n, status: 'success' }, { result: 1000000n, status: 'success' }]\n */\nexport async function multicall(client, parameters) {\n const { account, authorizationList, allowFailure = true, blockHash, blockNumber, blockOverrides, blockTag, requireCanonical, stateOverride, } = parameters;\n const contracts = parameters.contracts;\n const batch = typeof client.batch?.multicall === 'object' ? client.batch.multicall : {};\n const batchSize = parameters.batchSize ?? batch.batchSize ?? 1024;\n const deployless = parameters.deployless ?? batch.deployless ?? false;\n const multicallAddress = (() => {\n if (parameters.multicallAddress)\n return parameters.multicallAddress;\n if (deployless)\n return null;\n if (client.chain) {\n return getChainContractAddress({\n blockNumber,\n chain: client.chain,\n contract: 'multicall3',\n });\n }\n throw new Error('client chain not configured. multicallAddress is required.');\n })();\n const chunkedCalls = [[]];\n let currentChunk = 0;\n let currentChunkSize = 0;\n for (let i = 0; i < contracts.length; i++) {\n const { abi, address, args, functionName } = contracts[i];\n try {\n const callData = encodeFunctionData({ abi, args, functionName });\n currentChunkSize += (callData.length - 2) / 2;\n // Check to see if we need to create a new chunk.\n if (\n // Check if batching is enabled.\n batchSize > 0 &&\n // Check if the current size of the batch exceeds the size limit.\n currentChunkSize > batchSize &&\n // Check if the current chunk is not already empty.\n chunkedCalls[currentChunk].length > 0) {\n currentChunk++;\n currentChunkSize = (callData.length - 2) / 2;\n chunkedCalls[currentChunk] = [];\n }\n chunkedCalls[currentChunk] = [\n ...chunkedCalls[currentChunk],\n {\n allowFailure: true,\n callData,\n target: address,\n },\n ];\n }\n catch (err) {\n const error = getContractError(err, {\n abi,\n address,\n args,\n docsPath: '/docs/contract/multicall',\n functionName,\n sender: account,\n });\n if (!allowFailure)\n throw error;\n chunkedCalls[currentChunk] = [\n ...chunkedCalls[currentChunk],\n {\n allowFailure: true,\n callData: '0x',\n target: address,\n },\n ];\n }\n }\n const batching = Boolean(client.batch?.multicall);\n const batches = batching\n ? chunkedCalls.flatMap((calls) => calls.map((call) => [call]))\n : chunkedCalls;\n const aggregate3Results = await Promise.allSettled(batches.map((calls) => {\n if (batching)\n return scheduleMulticall(client, {\n account,\n authorizationList,\n batchSize,\n blockHash,\n blockNumber,\n blockOverrides,\n blockTag,\n call: calls[0],\n multicallAddress,\n requireCanonical,\n stateOverride,\n }).then((result) => [result]);\n return getAction(client, readContract, 'readContract')({\n ...(multicallAddress === null\n ? { code: multicall3Bytecode }\n : { address: multicallAddress }),\n abi: multicall3Abi,\n account,\n args: [calls],\n authorizationList,\n blockHash,\n blockNumber,\n blockOverrides,\n blockTag,\n functionName: 'aggregate3',\n requireCanonical,\n stateOverride,\n });\n }));\n const results = [];\n for (let i = 0; i < aggregate3Results.length; i++) {\n const result = aggregate3Results[i];\n // If an error occurred in a `readContract` invocation (ie. network error),\n // then append the failure reason to each contract result.\n if (result.status === 'rejected') {\n if (!allowFailure)\n throw result.reason;\n for (let j = 0; j < batches[i].length; j++) {\n results.push({\n status: 'failure',\n error: result.reason,\n result: undefined,\n });\n }\n continue;\n }\n // If the `readContract` call was successful, then decode the results.\n const aggregate3Result = result.value;\n for (let j = 0; j < aggregate3Result.length; j++) {\n // Extract the response from `readContract`\n const { returnData, success } = aggregate3Result[j];\n // Extract the request call data from the original call.\n const { callData } = batches[i][j];\n // Extract the contract config for this call from the `contracts` argument\n // for decoding.\n const { abi, address, functionName, args } = contracts[results.length];\n try {\n if (callData === '0x')\n throw new AbiDecodingZeroDataError();\n if (!success)\n throw new RawContractError({ data: returnData });\n const result = decodeFunctionResult({\n abi,\n args,\n data: returnData,\n functionName,\n });\n results.push(allowFailure ? { result, status: 'success' } : result);\n }\n catch (err) {\n const error = getContractError(err, {\n abi,\n address,\n args,\n docsPath: '/docs/contract/multicall',\n functionName,\n });\n if (!allowFailure)\n throw error;\n results.push({ error, result: undefined, status: 'failure' });\n }\n }\n }\n if (results.length !== contracts.length)\n throw new BaseError('multicall results mismatch');\n return results;\n}\nasync function scheduleMulticall(client, parameters) {\n const { batchSize, call, multicallAddress, ...rest } = parameters;\n const { wait = 0 } = typeof client.batch?.multicall === 'object' ? client.batch.multicall : {};\n const { schedule } = createBatchScheduler({\n id: stringify(['multicall', client.uid, batchSize, multicallAddress, rest]),\n wait,\n shouldSplitBatch(calls) {\n if (batchSize === 0)\n return false;\n const size = calls.reduce((size, { callData }) => size + (callData.length - 2) / 2, 0);\n return size > batchSize;\n },\n fn: (calls) => getAction(client, readContract, 'readContract')({\n ...(multicallAddress === null\n ? { code: multicall3Bytecode }\n : { address: multicallAddress }),\n ...rest,\n abi: multicall3Abi,\n args: [calls],\n functionName: 'aggregate3',\n }),\n });\n const [result] = await schedule(call);\n return result;\n}\n//# sourceMappingURL=multicall.js.map","export const ethAddress = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee';\nexport const zeroAddress = '0x0000000000000000000000000000000000000000';\n//# sourceMappingURL=address.js.map","import { erc20Abi } from '../../constants/abis.js';\nimport { isAddress } from '../../utils/address/isAddress.js';\nimport { isAddressEqual } from '../../utils/address/isAddressEqual.js';\nimport { encodeFunctionData } from '../../utils/index.js';\nimport { formatUnits } from '../../utils/unit/formatUnits.js';\nimport { parseUnits } from '../../utils/unit/parseUnits.js';\nimport { readContract } from '../public/readContract.js';\n/**\n * Shapes a base-unit value into an {@link Amount} (base units, `decimals`, and\n * human-readable `formatted` string).\n *\n * @param amount - Amount in base units.\n * @param decimals - Token decimals used to format the amount.\n * @returns The {@link Amount}.\n */\nexport function toAmount(amount, decimals) {\n return { amount, decimals, formatted: formatUnits(amount, decimals) };\n}\n/**\n * Resolves a write amount to base units.\n *\n * @param amount - Base-unit amount, or formatted helper.\n * @param decimals - Token decimals used to parse formatted amounts.\n * @returns Amount in base units.\n */\nexport function toBaseUnits(amount, decimals) {\n if (typeof amount === 'bigint')\n return amount;\n const resolved = amount.decimals ?? decimals;\n return parseUnits(amount.formatted, requireTokenDecimals(resolved));\n}\n/**\n * Requires resolved token decimals for parsing or formatting amounts.\n *\n * @param decimals - Token decimals.\n * @returns Token decimals.\n * @internal\n */\nexport function requireTokenDecimals(decimals) {\n if (decimals === undefined)\n throw new Error('Token decimals are required. Pass `amount.decimals` or select a declared token.');\n return decimals;\n}\n/**\n * Resolves the decimals used for formatting a write amount.\n *\n * @param amount - Base-unit amount, or formatted helper.\n * @param decimals - Token decimals.\n * @returns Token decimals, overridden by the formatted helper when present.\n */\nexport function resolveAmountDecimals(amount, decimals) {\n if (typeof amount === 'bigint')\n return decimals;\n return amount.decimals ?? decimals;\n}\n/**\n * Resolves the token contract `address` and `decimals` from a `token`, which is\n * either the symbol of a token declared on the client's `tokens` array or a\n * contract `address`.\n *\n * When `token` is a declared symbol, the `address` and `decimals` are resolved\n * from the Client's `tokens` array for the Client's `chain.id` (`decimals` can\n * be overridden via the explicit `decimals`). When `token` is an address, its\n * `decimals` is inferred from the Client's `tokens` array when the address\n * matches a declared token, otherwise taken from the explicit `decimals`.\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The resolved `address` and `decimals`.\n */\nexport function resolveToken(client, parameters) {\n const { decimals, token } = parameters;\n const declared = findDeclaredToken(client, token);\n if (declared)\n return {\n address: declared.address,\n decimals: decimals ?? declared.decimals,\n };\n if (isAddress(token, { strict: false }))\n return {\n address: token,\n decimals: decimals ?? inferDecimals(client, token),\n };\n throw new Error(`Token \"${token}\" is not a declared ERC-20 token on the client's \\`tokens\\` array (with an address for the client's chain), and is not a valid address.`);\n}\n/**\n * Finds the declared token on the Client's `tokens` array matching `token`\n * (either a token symbol or contract `address`), resolved to a {@link ResolvedToken}\n * for the Client's `chain.id`. Returns `undefined` when no declared token\n * matches, or the matching token has no address for the Client's chain.\n *\n * @param client - Client.\n * @param token - Token symbol (declared on the client's `tokens` array) or contract address.\n * @returns The matching resolved token config, or `undefined`.\n */\nexport function findDeclaredToken(client, token) {\n const tokens = client.tokens;\n const chainId = client.chain?.id;\n if (!tokens || chainId === undefined)\n return undefined;\n const bySymbol = findTokenBySymbol(tokens, token);\n if (bySymbol)\n return resolveTokenForChain(bySymbol, chainId);\n if (isAddress(token, { strict: false }))\n for (const token_ of tokens) {\n const resolved = resolveTokenForChain(token_, chainId);\n if (resolved && isAddressEqual(resolved.address, token))\n return resolved;\n }\n return undefined;\n}\n/**\n * Resolves a {@link Token} to a {@link ResolvedToken} for `chainId`, or\n * `undefined` when the token has no address for `chainId`. @internal\n */\nfunction resolveTokenForChain(token, chainId) {\n const address = token.addresses[chainId];\n if (!address)\n return undefined;\n return {\n address,\n currency: token.currency,\n decimals: token.decimals,\n name: token.name,\n popular: token.popular,\n symbol: token.symbol,\n };\n}\n/** Finds a {@link Token} by symbol (case-insensitively) on a `tokens` array. @internal */\nfunction findTokenBySymbol(tokens, symbol) {\n const lowerSymbol = symbol.toLowerCase();\n for (const token of tokens) {\n if (token.symbol?.toLowerCase() === lowerSymbol)\n return token;\n }\n return undefined;\n}\n/**\n * Infers a token's `decimals` from the Client's `tokens` array by matching\n * `address` against each token's address for the Client's `chain.id`.\n * @internal\n */\nfunction inferDecimals(client, address) {\n const tokens = client.tokens;\n const chainId = client.chain?.id;\n if (tokens && chainId !== undefined)\n for (const token of tokens) {\n const resolved = resolveTokenForChain(token, chainId);\n if (resolved && isAddressEqual(resolved.address, address))\n return resolved.decimals;\n }\n return undefined;\n}\n/**\n * Resolves token decimals, fetching from the token contract when they are not\n * provided explicitly or declared on the client.\n * @internal\n */\nexport async function resolveTokenWithDecimals(client, parameters) {\n const { address, decimals } = resolveToken(client, parameters);\n if (decimals !== undefined)\n return { address, decimals };\n return {\n address,\n decimals: await readContract(client, {\n abi: erc20Abi,\n address,\n functionName: 'decimals',\n }),\n };\n}\n/**\n * Picks the transaction-override fields shared by write actions, so the\n * action-specific args (`token`, `amount`, `to`, etc.) don't leak into\n * `estimateContractGas` / `simulateContract` requests. @internal\n */\nexport function pickWriteParameters(parameters) {\n const { account, chain, gas, maxFeePerGas, maxPriorityFeePerGas, nonce } = parameters;\n return { account, chain, gas, maxFeePerGas, maxPriorityFeePerGas, nonce };\n}\nexport function defineCall(call) {\n return {\n ...call,\n data: encodeFunctionData(call),\n to: call.address,\n };\n}\n//# sourceMappingURL=internal.js.map","import * as Hex from 'ox/Hex';\nimport { TokenId, TokenRole } from 'ox/tempo';\nimport { parseAccount } from '../../accounts/utils/parseAccount.js';\nimport { estimateContractGas } from '../../actions/public/estimateContractGas.js';\nimport { multicall, } from '../../actions/public/multicall.js';\nimport { readContract, } from '../../actions/public/readContract.js';\nimport { simulateContract, } from '../../actions/public/simulateContract.js';\nimport { watchContractEvent } from '../../actions/public/watchContractEvent.js';\nimport * as internal_Token from '../../actions/token/internal.js';\nimport { sendTransaction } from '../../actions/wallet/sendTransaction.js';\nimport { sendTransactionSync, } from '../../actions/wallet/sendTransactionSync.js';\nimport { writeContract } from '../../actions/wallet/writeContract.js';\nimport { writeContractSync } from '../../actions/wallet/writeContractSync.js';\nimport { zeroAddress } from '../../constants/address.js';\nimport { AccountNotFoundError } from '../../errors/account.js';\nimport { encodeFunctionData } from '../../utils/abi/encodeFunctionData.js';\nimport { parseEventLogs } from '../../utils/abi/parseEventLogs.js';\nimport { formatUnits } from '../../utils/unit/formatUnits.js';\nimport * as Abis from '../Abis.js';\nimport * as Addresses from '../Addresses.js';\nimport { TempoExecutionError } from '../errors.js';\nimport { formatAmount, withExecutionError, } from '../internal/errors.js';\nimport { defineCall, findDeclaredToken, isTip20, pickWriteParameters, resolveCallParameters, resolveToken, resolveTokenWithDecimals, } from '../internal/utils.js';\n/**\n * Approves a spender to transfer TIP20 tokens on behalf of the caller.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.approve(client, {\n * spender: '0x...',\n * amount: 100n,\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction hash.\n */\nexport async function approve(client, parameters) {\n return approve.inner(writeContract, client, parameters);\n}\n(function (approve) {\n /** @internal */\n async function inner(action, client, parameters) {\n return (await withExecutionError(action)(client, {\n ...parameters,\n ...approve.call(client, parameters),\n }));\n }\n approve.inner = inner;\n /**\n * Defines a call to the `approve` function.\n *\n * Can be passed as a parameter to `estimateContractGas`, `simulateContract`,\n * `sendCalls`, `sendTransaction` (`calls`), or `multicall`. The token is\n * selected by `token`, which is either a TIP20 token id or a contract\n * `address`; `amount.decimals` is inferred from the client's declared\n * `tokens` when omitted.\n *\n * @param parameters - Client (optional), followed by the call arguments.\n * @returns The call.\n */\n function call(...parameters) {\n const [client, args] = resolveCallParameters(parameters);\n const { amount, spender, token } = args;\n const { address, decimals } = resolveToken(client, { token });\n return defineCall({\n address,\n abi: Abis.tip20,\n functionName: 'approve',\n args: [spender, internal_Token.toBaseUnits(amount, decimals)],\n });\n }\n approve.call = call;\n /**\n * Estimates the gas required to approve a spender. `amount.decimals` is\n * inferred from the client's declared `tokens` when omitted.\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The gas estimate.\n */\n async function estimateGas(client, parameters) {\n return estimateContractGas(client, {\n ...pickWriteParameters(parameters),\n ...approve.call(client, parameters),\n });\n }\n approve.estimateGas = estimateGas;\n /**\n * Simulates an approval of a spender. `amount.decimals` is inferred from\n * the client's declared `tokens` when omitted.\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The simulation result and write request.\n */\n async function simulate(client, parameters) {\n return simulateContract(client, {\n ...pickWriteParameters(parameters),\n ...approve.call(client, parameters),\n });\n }\n approve.simulate = simulate;\n /**\n * Extracts the `Approval` event from logs.\n *\n * @param logs - The logs.\n * @returns The `Approval` event.\n */\n function extractEvent(logs) {\n const [log] = parseEventLogs({\n abi: Abis.tip20,\n logs,\n eventName: 'Approval',\n });\n if (!log)\n throw new Error('`Approval` event not found.');\n return log;\n }\n approve.extractEvent = extractEvent;\n})(approve || (approve = {}));\n/**\n * Approves a spender to transfer TIP20 tokens on behalf of the caller.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.approveSync(client, {\n * spender: '0x...',\n * amount: 100n,\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction receipt and event data.\n */\nexport async function approveSync(client, parameters) {\n const { amount, token, throwOnReceiptRevert = true } = parameters;\n const { decimals } = resolveToken(client, { token });\n const resolved = internal_Token.resolveAmountDecimals(amount, decimals);\n const receipt = await approve.inner(writeContractSync, client, {\n ...parameters,\n throwOnReceiptRevert,\n });\n if (receipt.status === 'pending')\n return { receipt };\n const { args } = approve.extractEvent(receipt.logs);\n return {\n ...args,\n ...(resolved === undefined\n ? {}\n : { decimals: resolved, formatted: formatUnits(args.amount, resolved) }),\n receipt,\n };\n}\n/**\n * Burns TIP20 tokens from a blocked address.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.burnBlocked(client, {\n * from: '0x...',\n * amount: 100n,\n * token: '0x...',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction hash.\n */\nexport async function burnBlocked(client, parameters) {\n return burnBlocked.inner(writeContract, client, parameters);\n}\n(function (burnBlocked) {\n /** @internal */\n async function inner(action, client, parameters) {\n const { amount, from, token, ...rest } = parameters;\n const call = burnBlocked.call(client, { amount, from, token });\n return (await withExecutionError(action)(client, {\n ...rest,\n ...call,\n }));\n }\n burnBlocked.inner = inner;\n /**\n * Defines a call to the `burnBlocked` function.\n *\n * Can be passed as a parameter to:\n * - [`estimateContractGas`](https://viem.sh/docs/contract/estimateContractGas): estimate the gas cost of the call\n * - [`simulateContract`](https://viem.sh/docs/contract/simulateContract): simulate the call\n * - [`sendCalls`](https://viem.sh/docs/actions/wallet/sendCalls): send multiple calls\n *\n * @example\n * ```ts\n * import { createClient, http, walletActions } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * }).extend(walletActions)\n *\n * const { result } = await client.sendCalls({\n * calls: [\n * actions.token.burnBlocked.call(client, {\n * from: '0x20c0...beef',\n * amount: 100n,\n * token: '0x20c0...babe',\n * }),\n * ]\n * })\n * ```\n *\n * `amount.decimals` is inferred from the client's declared `tokens` when omitted.\n *\n * @param parameters - Client (optional), followed by the call arguments.\n * @returns The call.\n */\n function call(...parameters) {\n const [client, args] = resolveCallParameters(parameters);\n const { from, amount, token } = args;\n const { address, decimals } = resolveToken(client, { token });\n return defineCall({\n address,\n abi: Abis.tip20,\n functionName: 'burnBlocked',\n args: [from, internal_Token.toBaseUnits(amount, decimals)],\n });\n }\n burnBlocked.call = call;\n /**\n * Extracts the event from the logs.\n *\n * @param logs - Logs.\n * @returns The event.\n */\n function extractEvent(logs) {\n const [log] = parseEventLogs({\n abi: Abis.tip20,\n logs,\n eventName: 'BurnBlocked',\n });\n if (!log)\n throw new Error('`BurnBlocked` event not found.');\n return log;\n }\n burnBlocked.extractEvent = extractEvent;\n})(burnBlocked || (burnBlocked = {}));\n/**\n * Burns TIP20 tokens from a blocked address.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.burnBlockedSync(client, {\n * from: '0x...',\n * amount: 100n,\n * token: '0x...',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction receipt and event data.\n */\nexport async function burnBlockedSync(client, parameters) {\n const { throwOnReceiptRevert = true, ...rest } = parameters;\n const receipt = await burnBlocked.inner(writeContractSync, client, {\n ...rest,\n throwOnReceiptRevert,\n });\n if (receipt.status === 'pending')\n return { receipt };\n const { args } = burnBlocked.extractEvent(receipt.logs);\n return {\n ...args,\n receipt,\n };\n}\n/**\n * Burns TIP20 tokens from the caller's balance.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.burn(client, {\n * amount: 100n,\n * token: '0x...',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction hash.\n */\nexport async function burn(client, parameters) {\n return burn.inner(writeContract, client, parameters);\n}\n(function (burn) {\n /** @internal */\n async function inner(action, client, parameters) {\n const { amount, from, memo, token, ...rest } = parameters;\n const call = burn.call(client, { amount, from, memo, token });\n return (await withExecutionError(action)(client, {\n ...rest,\n ...call,\n }));\n }\n burn.inner = inner;\n /**\n * Defines a call to the `burn`, `burnWithMemo`, or `burnAt` function.\n *\n * Can be passed as a parameter to:\n * - [`estimateContractGas`](https://viem.sh/docs/contract/estimateContractGas): estimate the gas cost of the call\n * - [`simulateContract`](https://viem.sh/docs/contract/simulateContract): simulate the call\n * - [`sendCalls`](https://viem.sh/docs/actions/wallet/sendCalls): send multiple calls\n *\n * @example\n * ```ts\n * import { createClient, http, walletActions } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * }).extend(walletActions)\n *\n * const { result } = await client.sendCalls({\n * calls: [\n * actions.token.burn.call(client, {\n * amount: 100n,\n * token: '0x20c0...babe',\n * }),\n * ]\n * })\n * ```\n *\n * `amount.decimals` is inferred from the client's declared `tokens` when omitted.\n *\n * @param parameters - Client (optional), followed by the call arguments.\n * @returns The call.\n */\n function call(...parameters) {\n const [client, args] = resolveCallParameters(parameters);\n const { amount, from, memo, token } = args;\n const { address, decimals } = resolveToken(client, { token });\n const value = internal_Token.toBaseUnits(amount, decimals);\n if (from)\n return defineCall({\n address,\n abi: Abis.tip20,\n functionName: 'burnAt',\n args: [from, value],\n });\n const callArgs = memo\n ? {\n functionName: 'burnWithMemo',\n args: [value, Hex.padLeft(memo, 32)],\n }\n : {\n functionName: 'burn',\n args: [value],\n };\n return defineCall({\n address,\n abi: Abis.tip20,\n ...callArgs,\n });\n }\n burn.call = call;\n /**\n * Extracts the event from the logs.\n *\n * @param logs - Logs.\n * @returns The event.\n */\n function extractEvent(logs) {\n const [log] = parseEventLogs({\n abi: Abis.tip20,\n logs,\n eventName: ['Burn', 'BurnAt'],\n });\n if (!log)\n throw new Error('`Burn` or `BurnAt` event not found.');\n return log;\n }\n burn.extractEvent = extractEvent;\n})(burn || (burn = {}));\n/**\n * Burns TIP20 tokens from the caller's balance.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.burnSync(client, {\n * amount: 100n,\n * token: '0x...',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction receipt and event data.\n */\nexport async function burnSync(client, parameters) {\n const { throwOnReceiptRevert = true, ...rest } = parameters;\n const receipt = await burn.inner(writeContractSync, client, {\n ...rest,\n throwOnReceiptRevert,\n });\n if (receipt.status === 'pending')\n return { receipt };\n const { args } = burn.extractEvent(receipt.logs);\n return {\n ...args,\n receipt,\n };\n}\n/**\n * Changes the transfer policy ID for a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.changeTransferPolicy(client, {\n * token: '0x...',\n * policyId: 1n,\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction hash.\n */\nexport async function changeTransferPolicy(client, parameters) {\n return changeTransferPolicy.inner(writeContract, client, parameters);\n}\n(function (changeTransferPolicy) {\n /** @internal */\n async function inner(action, client, parameters) {\n const { policyId, token, ...rest } = parameters;\n const call = changeTransferPolicy.call(client, { policyId, token });\n return (await withExecutionError(action)(client, {\n ...rest,\n ...call,\n }));\n }\n changeTransferPolicy.inner = inner;\n /**\n * Defines a call to the `changeTransferPolicyId` function.\n *\n * Can be passed as a parameter to:\n * - [`estimateContractGas`](https://viem.sh/docs/contract/estimateContractGas): estimate the gas cost of the call\n * - [`simulateContract`](https://viem.sh/docs/contract/simulateContract): simulate the call\n * - [`sendCalls`](https://viem.sh/docs/actions/wallet/sendCalls): send multiple calls\n *\n * @example\n * ```ts\n * import { createClient, http, walletActions } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * }).extend(walletActions)\n *\n * const { result } = await client.sendCalls({\n * calls: [\n * actions.token.changeTransferPolicy.call(client, {\n * token: '0x20c0...babe',\n * policyId: 1n,\n * }),\n * ]\n * })\n * ```\n *\n * @param parameters - Client (optional), followed by the call arguments.\n * @returns The call.\n */\n function call(...parameters) {\n const [client, args] = resolveCallParameters(parameters);\n const { token, policyId } = args;\n return defineCall({\n address: resolveToken(client, { token }).address,\n abi: Abis.tip20,\n functionName: 'changeTransferPolicyId',\n args: [policyId],\n });\n }\n changeTransferPolicy.call = call;\n /**\n * Extracts the event from the logs.\n *\n * @param logs - Logs.\n * @returns The event.\n */\n function extractEvent(logs) {\n const [log] = parseEventLogs({\n abi: Abis.tip20,\n logs,\n eventName: 'TransferPolicyUpdate',\n });\n if (!log)\n throw new Error('`TransferPolicyUpdate` event not found.');\n return log;\n }\n changeTransferPolicy.extractEvent = extractEvent;\n})(changeTransferPolicy || (changeTransferPolicy = {}));\n/**\n * Changes the transfer policy ID for a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.changeTransferPolicySync(client, {\n * token: '0x...',\n * policyId: 1n,\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction receipt and event data.\n */\nexport async function changeTransferPolicySync(client, parameters) {\n const { throwOnReceiptRevert = true, ...rest } = parameters;\n const receipt = await changeTransferPolicy.inner(writeContractSync, client, {\n ...rest,\n throwOnReceiptRevert,\n });\n if (receipt.status === 'pending')\n return { receipt };\n const { args } = changeTransferPolicy.extractEvent(receipt.logs);\n return {\n ...args,\n receipt,\n };\n}\n/**\n * Creates a new TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.create(client, {\n * name: 'My Token',\n * symbol: 'MTK',\n * currency: 'USD',\n * logoURI: 'https://example.com/token.svg',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction hash.\n */\nexport async function create(client, parameters) {\n return create.inner(writeContract, client, parameters);\n}\n(function (create) {\n /** @internal */\n async function inner(action, client, parameters) {\n const { account = client.account, admin: admin_ = client.account, chain = client.chain, ...rest } = parameters;\n const admin = admin_ ? parseAccount(admin_) : undefined;\n if (!admin)\n throw new Error('admin is required.');\n const call = create.call(client, { ...rest, admin: admin.address });\n return (await withExecutionError(action)(client, {\n ...parameters,\n account,\n chain,\n ...call,\n }));\n }\n create.inner = inner;\n /**\n * Defines a call to the `createToken` function.\n *\n * Can be passed as a parameter to:\n * - [`estimateContractGas`](https://viem.sh/docs/contract/estimateContractGas): estimate the gas cost of the call\n * - [`simulateContract`](https://viem.sh/docs/contract/simulateContract): simulate the call\n * - [`sendCalls`](https://viem.sh/docs/actions/wallet/sendCalls): send multiple calls\n *\n * @example\n * ```ts\n * import { createClient, http, walletActions } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * }).extend(walletActions)\n *\n * const { result } = await client.sendCalls({\n * calls: [\n * actions.token.create.call(client, {\n * name: 'My Token',\n * symbol: 'MTK',\n * currency: 'USD',\n * logoURI: 'https://example.com/token.svg',\n * admin: '0xfeed...fede',\n * }),\n * ]\n * })\n * ```\n *\n * @param parameters - Client (optional), followed by the call arguments.\n * @returns The call.\n */\n function call(...parameters) {\n const [client, args] = resolveCallParameters(parameters);\n const { name, symbol, currency, logoURI, quoteToken = Addresses.pathUsd, admin, salt = Hex.random(32), } = args;\n return defineCall({\n address: Addresses.tip20Factory,\n abi: Abis.tip20Factory,\n args: typeof logoURI === 'string'\n ? [\n name,\n symbol,\n currency,\n resolveToken(client, { token: quoteToken }).address,\n admin,\n salt,\n logoURI,\n ]\n : [\n name,\n symbol,\n currency,\n resolveToken(client, { token: quoteToken }).address,\n admin,\n salt,\n ],\n functionName: 'createToken',\n });\n }\n create.call = call;\n /**\n * Extracts the `TokenCreated` event from logs.\n *\n * @param logs - The logs.\n * @returns The `TokenCreated` event.\n */\n function extractEvent(logs) {\n const [log] = parseEventLogs({\n abi: Abis.tip20Factory,\n logs,\n eventName: 'TokenCreated',\n strict: true,\n });\n if (!log)\n throw new Error('`TokenCreated` event not found.');\n return log;\n }\n create.extractEvent = extractEvent;\n})(create || (create = {}));\n/**\n * Creates a new TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.createSync(client, {\n * name: 'My Token',\n * symbol: 'MTK',\n * currency: 'USD',\n * logoURI: 'https://example.com/token.svg',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction receipt and event data.\n */\nexport async function createSync(client, parameters) {\n const { throwOnReceiptRevert = true, ...rest } = parameters;\n const receipt = await create.inner(writeContractSync, client, {\n ...rest,\n throwOnReceiptRevert,\n });\n if (receipt.status === 'pending')\n return { receipt };\n const { args } = create.extractEvent(receipt.logs);\n const tokenId = TokenId.fromAddress(args.token);\n return {\n ...args,\n receipt,\n tokenId,\n };\n}\n/**\n * Gets TIP20 token allowance.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const allowance = await Actions.token.getAllowance(client, {\n * account: '0x...',\n * spender: '0x...',\n * token: '0x...',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The token allowance, in base units and human-readable form.\n */\nexport async function getAllowance(client, parameters) {\n const { account, decimals, spender, token, ...rest } = parameters;\n const [amount, { decimals: resolved }] = await Promise.all([\n withExecutionError(readContract)(client, {\n ...rest,\n ...getAllowance.call(client, { account, spender, token }),\n }),\n resolveTokenWithDecimals(client, {\n decimals,\n token,\n }),\n ]);\n return internal_Token.toAmount(amount, resolved);\n}\n(function (getAllowance) {\n /**\n * Defines a call to the `allowance` function.\n *\n * Can be passed as a parameter to `multicall`, `simulateContract`, or any\n * other action that accepts a contract call. The token is selected by `token`,\n * which is either a TIP20 token id or a contract address.\n *\n * @param parameters - Client (optional), followed by the call arguments.\n * @returns The call.\n */\n function call(...parameters) {\n const [client, args] = resolveCallParameters(parameters);\n return defineCall({\n address: resolveToken(client, args).address,\n abi: Abis.tip20,\n functionName: 'allowance',\n args: [args.account, args.spender],\n });\n }\n getAllowance.call = call;\n})(getAllowance || (getAllowance = {}));\n/**\n * Gets TIP20 token balance for an address.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const balance = await Actions.token.getBalance(client, {\n * account: '0x...',\n * token: '0x...',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The token balance, in base units and human-readable form.\n */\nexport async function getBalance(client, parameters) {\n const { account: account_ = client.account, decimals, token, ...rest } = parameters;\n if (!account_)\n throw new AccountNotFoundError();\n const account = parseAccount(account_).address;\n const [amount, { decimals: resolved }] = await Promise.all([\n withExecutionError(readContract)(client, {\n ...rest,\n ...getBalance.call(client, { account, token }),\n }),\n resolveTokenWithDecimals(client, {\n decimals,\n token,\n }),\n ]);\n return internal_Token.toAmount(amount, resolved);\n}\n(function (getBalance) {\n /**\n * Defines a call to the `balanceOf` function.\n *\n * Can be passed as a parameter to `multicall`, `simulateContract`, or any\n * other action that accepts a contract call. The token is selected by `token`,\n * which is either a TIP20 token id or a contract address.\n *\n * @param parameters - Client (optional), followed by the call arguments.\n * @returns The call.\n */\n function call(...parameters) {\n const [client, args] = resolveCallParameters(parameters);\n const account_ = args.account ?? client?.account;\n if (!account_)\n throw new AccountNotFoundError();\n const account = parseAccount(account_).address;\n return defineCall({\n address: resolveToken(client, args).address,\n abi: Abis.tip20,\n functionName: 'balanceOf',\n args: [account],\n });\n }\n getBalance.call = call;\n})(getBalance || (getBalance = {}));\n/**\n * Gets TIP20 token metadata including name, symbol, logo URI, currency, decimals, and total supply.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const metadata = await Actions.token.getMetadata(client, {\n * token: '0x...',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The token metadata.\n */\nexport async function getMetadata(client, parameters) {\n const { token, ...rest } = parameters;\n const { address } = resolveToken(client, { token });\n const abi = Abis.tip20;\n const declared = findDeclaredToken(client, token);\n const overrides = {\n ...(declared?.decimals != null ? { decimals: declared.decimals } : {}),\n ...(declared?.name != null ? { name: declared.name } : {}),\n ...(declared?.symbol != null ? { symbol: declared.symbol } : {}),\n };\n if (TokenId.fromAddress(address) === TokenId.fromAddress(Addresses.pathUsd))\n return readMetadataContracts(client, {\n ...rest,\n contracts: [\n {\n address,\n abi,\n functionName: 'currency',\n },\n {\n address,\n abi,\n functionName: 'decimals',\n },\n {\n address,\n abi,\n functionName: 'logoURI',\n },\n {\n address,\n abi,\n functionName: 'name',\n },\n {\n address,\n abi,\n functionName: 'symbol',\n },\n {\n address,\n abi,\n functionName: 'totalSupply',\n },\n ],\n }).then(([currency, decimals, logoURI, name, symbol, totalSupply]) => ({\n name: unwrapMulticallResult(name),\n symbol: unwrapMulticallResult(symbol),\n currency: unwrapMulticallResult(currency),\n decimals: unwrapMulticallResult(decimals),\n logoURI: unwrapMulticallResult(logoURI, ''),\n totalSupply: unwrapMulticallResult(totalSupply),\n ...overrides,\n }));\n return readMetadataContracts(client, {\n ...rest,\n contracts: [\n {\n address,\n abi,\n functionName: 'currency',\n },\n {\n address,\n abi,\n functionName: 'decimals',\n },\n {\n address,\n abi,\n functionName: 'logoURI',\n },\n {\n address,\n abi,\n functionName: 'quoteToken',\n },\n {\n address,\n abi,\n functionName: 'name',\n },\n {\n address,\n abi,\n functionName: 'paused',\n },\n {\n address,\n abi,\n functionName: 'supplyCap',\n },\n {\n address,\n abi,\n functionName: 'symbol',\n },\n {\n address,\n abi,\n functionName: 'totalSupply',\n },\n {\n address,\n abi,\n functionName: 'transferPolicyId',\n },\n ],\n }).then(([currency, decimals, logoURI, quoteToken, name, paused, supplyCap, symbol, totalSupply, transferPolicyId,]) => ({\n name: unwrapMulticallResult(name),\n symbol: unwrapMulticallResult(symbol),\n currency: unwrapMulticallResult(currency),\n decimals: unwrapMulticallResult(decimals),\n logoURI: unwrapMulticallResult(logoURI, ''),\n quoteToken: unwrapMulticallResult(quoteToken),\n totalSupply: unwrapMulticallResult(totalSupply),\n paused: unwrapMulticallResult(paused),\n supplyCap: unwrapMulticallResult(supplyCap),\n transferPolicyId: unwrapMulticallResult(transferPolicyId),\n ...overrides,\n }));\n}\nasync function readMetadataContracts(client, parameters) {\n // Preserve the action's deployless default unless the client overrides it.\n if (client.batch?.multicall === undefined)\n return multicall(client, {\n ...parameters,\n allowFailure: true,\n deployless: true,\n });\n const { contracts, ...rest } = parameters;\n const results = await Promise.allSettled(contracts.map((contract) => withExecutionError(readContract)(client, {\n ...rest,\n ...contract,\n })));\n return results.map((result) => result.status === 'fulfilled'\n ? { result: result.value, status: 'success' }\n : { error: result.reason, status: 'failure' });\n}\nfunction unwrapMulticallResult(response, ...fallback) {\n if (response.status === 'failure') {\n if (fallback.length > 0)\n return fallback[0];\n throw response.error;\n }\n return response.result;\n}\n/**\n * Gets the total supply of a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const totalSupply = await Actions.token.getTotalSupply(client, {\n * token: '0x...',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The token total supply, in base units and human-readable form.\n */\nexport async function getTotalSupply(client, parameters) {\n const { decimals, token, ...rest } = parameters;\n const [amount, { decimals: resolved }] = await Promise.all([\n withExecutionError(readContract)(client, {\n ...rest,\n ...getTotalSupply.call(client, { token }),\n }),\n resolveTokenWithDecimals(client, {\n decimals,\n token,\n }),\n ]);\n return internal_Token.toAmount(amount, resolved);\n}\n(function (getTotalSupply) {\n /**\n * Defines a call to the `totalSupply` function.\n *\n * Can be passed as a parameter to `multicall`, `simulateContract`, or any\n * other action that accepts a contract call. The token is selected by `token`,\n * which is either a TIP20 token id or a contract address.\n *\n * @param parameters - Client (optional), followed by the call arguments.\n * @returns The call.\n */\n function call(...parameters) {\n const [client, args] = resolveCallParameters(parameters);\n return defineCall({\n address: resolveToken(client, args).address,\n abi: Abis.tip20,\n args: [],\n functionName: 'totalSupply',\n });\n }\n getTotalSupply.call = call;\n})(getTotalSupply || (getTotalSupply = {}));\n/**\n * Gets the admin role for a specific role in a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const adminRole = await Actions.token.getRoleAdmin(client, {\n * role: 'issuer',\n * token: '0x...',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The admin role hash.\n */\nexport async function getRoleAdmin(client, parameters) {\n return withExecutionError(readContract)(client, {\n ...parameters,\n ...getRoleAdmin.call(client, parameters),\n });\n}\n(function (getRoleAdmin) {\n /**\n * Defines a call to the `getRoleAdmin` function.\n *\n * @param parameters - Client (optional), followed by the call arguments.\n * @returns The call.\n */\n function call(...parameters) {\n const [client, args] = resolveCallParameters(parameters);\n const { role, token } = args;\n return defineCall({\n address: resolveToken(client, { token }).address,\n abi: Abis.tip20,\n functionName: 'getRoleAdmin',\n args: [TokenRole.serialize(role)],\n });\n }\n getRoleAdmin.call = call;\n})(getRoleAdmin || (getRoleAdmin = {}));\n/**\n * Checks if an account has a specific role for a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const hasRole = await Actions.token.hasRole(client, {\n * account: '0x...',\n * role: 'issuer',\n * token: '0x...',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns Whether the account has the role.\n */\nexport async function hasRole(client, parameters) {\n const { account = client.account } = parameters;\n const address = account ? parseAccount(account).address : undefined;\n if (!address)\n throw new Error('account is required.');\n return withExecutionError(readContract)(client, {\n ...parameters,\n ...hasRole.call(client, { ...parameters, account: address }),\n });\n}\n(function (hasRole) {\n /**\n * Defines a call to the `hasRole` function.\n *\n * @param parameters - Client (optional), followed by the call arguments.\n * @returns The call.\n */\n function call(...parameters) {\n const [client, args] = resolveCallParameters(parameters);\n const { account, role, token } = args;\n return defineCall({\n address: resolveToken(client, { token }).address,\n abi: Abis.tip20,\n functionName: 'hasRole',\n args: [account, TokenRole.serialize(role)],\n });\n }\n hasRole.call = call;\n})(hasRole || (hasRole = {}));\n/**\n * Grants a role for a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.grantRoles(client, {\n * token: '0x...',\n * to: '0x...',\n * roles: ['issuer'],\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction hash.\n */\nexport async function grantRoles(client, parameters) {\n return grantRoles.inner(sendTransaction, client, parameters);\n}\n(function (grantRoles) {\n /** @internal */\n async function inner(action, client, parameters) {\n return (await withExecutionError(action)(client, {\n ...parameters,\n calls: parameters.roles.map((role) => {\n const call = grantRoles.call(client, { ...parameters, role });\n return {\n ...call,\n data: encodeFunctionData(call),\n };\n }),\n }));\n }\n grantRoles.inner = inner;\n /**\n * Defines a call to the `grantRole` function.\n *\n * Can be passed as a parameter to:\n * - [`estimateContractGas`](https://viem.sh/docs/contract/estimateContractGas): estimate the gas cost of the call\n * - [`simulateContract`](https://viem.sh/docs/contract/simulateContract): simulate the call\n * - [`sendCalls`](https://viem.sh/docs/actions/wallet/sendCalls): send multiple calls\n *\n * @example\n * ```ts\n * import { createClient, http, walletActions } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * }).extend(walletActions)\n *\n * const { result } = await client.sendCalls({\n * calls: [\n * actions.token.grantRoles.call(client, {\n * token: '0x20c0...babe',\n * to: '0x20c0...beef',\n * role: 'issuer',\n * }),\n * ]\n * })\n * ```\n *\n * @param parameters - Client (optional), followed by the call arguments.\n * @returns The call.\n */\n function call(...parameters) {\n const [client, args] = resolveCallParameters(parameters);\n const { token, to, role } = args;\n const roleHash = TokenRole.serialize(role);\n return defineCall({\n address: resolveToken(client, { token }).address,\n abi: Abis.tip20,\n functionName: 'grantRole',\n args: [roleHash, to],\n });\n }\n grantRoles.call = call;\n /**\n * Extracts the events from the logs.\n *\n * @param logs - Logs.\n * @returns The events.\n */\n function extractEvents(logs) {\n const events = parseEventLogs({\n abi: Abis.tip20,\n logs,\n eventName: 'RoleMembershipUpdated',\n });\n if (events.length === 0)\n throw new Error('`RoleMembershipUpdated` events not found.');\n return events;\n }\n grantRoles.extractEvents = extractEvents;\n})(grantRoles || (grantRoles = {}));\n/**\n * Grants a role for a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.grantRolesSync(client, {\n * token: '0x...',\n * to: '0x...',\n * roles: ['issuer'],\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction receipt and event data.\n */\nexport async function grantRolesSync(client, parameters) {\n const { throwOnReceiptRevert = true, ...rest } = parameters;\n const receipt = await grantRoles.inner(sendTransactionSync, client, {\n ...rest,\n throwOnReceiptRevert,\n });\n if (receipt.status === 'pending')\n return { receipt };\n const events = grantRoles.extractEvents(receipt.logs);\n const value = events.map((event) => event.args);\n return {\n receipt,\n value,\n };\n}\n/**\n * Mints TIP20 tokens to an address.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.mint(client, {\n * to: '0x...',\n * amount: 100n,\n * token: '0x...',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction hash.\n */\nexport async function mint(client, parameters) {\n return mint.inner(writeContract, client, parameters);\n}\n(function (mint) {\n /** @internal */\n async function inner(action, client, parameters) {\n const { amount, memo, to, token, ...rest } = parameters;\n const call = mint.call(client, { amount, memo, to, token });\n return (await withExecutionError(action, {\n hints: {\n Unauthorized: [\n 'Minting requires the issuer role. Grant it to this account first.',\n ],\n },\n })(client, {\n ...rest,\n ...call,\n }));\n }\n mint.inner = inner;\n /**\n * Defines a call to the `mint` or `mintWithMemo` function.\n *\n * Can be passed as a parameter to:\n * - [`estimateContractGas`](https://viem.sh/docs/contract/estimateContractGas): estimate the gas cost of the call\n * - [`simulateContract`](https://viem.sh/docs/contract/simulateContract): simulate the call\n * - [`sendCalls`](https://viem.sh/docs/actions/wallet/sendCalls): send multiple calls\n *\n * @example\n * ```ts\n * import { createClient, http, walletActions } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * }).extend(walletActions)\n *\n * const { result } = await client.sendCalls({\n * calls: [\n * actions.token.mint.call(client, {\n * to: '0x20c0...beef',\n * amount: 100n,\n * token: '0x20c0...babe',\n * }),\n * ]\n * })\n * ```\n *\n * `amount.decimals` is inferred from the client's declared `tokens` when omitted.\n *\n * @param parameters - Client (optional), followed by the call arguments.\n * @returns The call.\n */\n function call(...parameters) {\n const [client, args] = resolveCallParameters(parameters);\n const { to, amount, memo, token } = args;\n const { address, decimals } = resolveToken(client, { token });\n const value = internal_Token.toBaseUnits(amount, decimals);\n const callArgs = memo\n ? {\n functionName: 'mintWithMemo',\n args: [to, value, Hex.padLeft(memo, 32)],\n }\n : {\n functionName: 'mint',\n args: [to, value],\n };\n return defineCall({\n address,\n abi: Abis.tip20,\n ...callArgs,\n });\n }\n mint.call = call;\n /**\n * Extracts the event from the logs.\n *\n * @param logs - Logs.\n * @returns The event.\n */\n function extractEvent(logs) {\n const [log] = parseEventLogs({\n abi: Abis.tip20,\n logs,\n eventName: 'Mint',\n });\n if (!log)\n throw new Error('`Mint` event not found.');\n return log;\n }\n mint.extractEvent = extractEvent;\n})(mint || (mint = {}));\n/**\n * Mints TIP20 tokens to an address.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.mintSync(client, {\n * to: '0x...',\n * amount: 100n,\n * token: '0x...',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction receipt and event data.\n */\nexport async function mintSync(client, parameters) {\n const { throwOnReceiptRevert = true, ...rest } = parameters;\n const receipt = await mint.inner(writeContractSync, client, {\n ...rest,\n throwOnReceiptRevert,\n });\n if (receipt.status === 'pending')\n return { receipt };\n const { args } = mint.extractEvent(receipt.logs);\n return {\n ...args,\n receipt,\n };\n}\n/**\n * Pauses a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.pause(client, {\n * token: '0x...',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction hash.\n */\nexport async function pause(client, parameters) {\n return pause.inner(writeContract, client, parameters);\n}\n(function (pause) {\n /** @internal */\n async function inner(action, client, parameters) {\n const { token, ...rest } = parameters;\n const call = pause.call(client, { token });\n return (await withExecutionError(action)(client, {\n ...rest,\n ...call,\n }));\n }\n pause.inner = inner;\n /**\n * Defines a call to the `pause` function.\n *\n * Can be passed as a parameter to:\n * - [`estimateContractGas`](https://viem.sh/docs/contract/estimateContractGas): estimate the gas cost of the call\n * - [`simulateContract`](https://viem.sh/docs/contract/simulateContract): simulate the call\n * - [`sendCalls`](https://viem.sh/docs/actions/wallet/sendCalls): send multiple calls\n *\n * @example\n * ```ts\n * import { createClient, http, walletActions } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * }).extend(walletActions)\n *\n * const { result } = await client.sendCalls({\n * calls: [\n * actions.token.pause.call(client, {\n * token: '0x20c0...babe',\n * }),\n * ]\n * })\n * ```\n *\n * @param parameters - Client (optional), followed by the call arguments.\n * @returns The call.\n */\n function call(...parameters) {\n const [client, args] = resolveCallParameters(parameters);\n const { token } = args;\n return defineCall({\n address: resolveToken(client, { token }).address,\n abi: Abis.tip20,\n functionName: 'pause',\n args: [],\n });\n }\n pause.call = call;\n /**\n * Extracts the event from the logs.\n *\n * @param logs - Logs.\n * @returns The event.\n */\n function extractEvent(logs) {\n const [log] = parseEventLogs({\n abi: Abis.tip20,\n logs,\n eventName: 'PauseStateUpdate',\n });\n if (!log)\n throw new Error('`PauseStateUpdate` event not found.');\n return log;\n }\n pause.extractEvent = extractEvent;\n})(pause || (pause = {}));\n/**\n * Pauses a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.pauseSync(client, {\n * token: '0x...',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction receipt and event data.\n */\nexport async function pauseSync(client, parameters) {\n const { throwOnReceiptRevert = true, ...rest } = parameters;\n const receipt = await pause.inner(writeContractSync, client, {\n ...rest,\n throwOnReceiptRevert,\n });\n if (receipt.status === 'pending')\n return { receipt };\n const { args } = pause.extractEvent(receipt.logs);\n return {\n ...args,\n receipt,\n };\n}\n/**\n * Renounces a role for a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.renounceRoles(client, {\n * token: '0x...',\n * roles: ['issuer'],\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction hash.\n */\nexport async function renounceRoles(client, parameters) {\n return renounceRoles.inner(sendTransaction, client, parameters);\n}\n(function (renounceRoles) {\n /** @internal */\n async function inner(action, client, parameters) {\n return (await withExecutionError(action)(client, {\n ...parameters,\n calls: parameters.roles.map((role) => {\n const call = renounceRoles.call(client, { ...parameters, role });\n return {\n ...call,\n data: encodeFunctionData(call),\n };\n }),\n }));\n }\n renounceRoles.inner = inner;\n /**\n * Defines a call to the `renounceRole` function.\n *\n * Can be passed as a parameter to:\n * - [`estimateContractGas`](https://viem.sh/docs/contract/estimateContractGas): estimate the gas cost of the call\n * - [`simulateContract`](https://viem.sh/docs/contract/simulateContract): simulate the call\n * - [`sendCalls`](https://viem.sh/docs/actions/wallet/sendCalls): send multiple calls\n *\n * @example\n * ```ts\n * import { createClient, http, walletActions } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * }).extend(walletActions)\n *\n * const { result } = await client.sendCalls({\n * calls: [\n * actions.token.renounceRoles.call(client, {\n * token: '0x20c0...babe',\n * role: 'issuer',\n * }),\n * ]\n * })\n * ```\n *\n * @param parameters - Client (optional), followed by the call arguments.\n * @returns The call.\n */\n function call(...parameters) {\n const [client, args] = resolveCallParameters(parameters);\n const { token, role } = args;\n const roleHash = TokenRole.serialize(role);\n return defineCall({\n address: resolveToken(client, { token }).address,\n abi: Abis.tip20,\n functionName: 'renounceRole',\n args: [roleHash],\n });\n }\n renounceRoles.call = call;\n /**\n * Extracts the events from the logs.\n *\n * @param logs - Logs.\n * @returns The events.\n */\n function extractEvents(logs) {\n const events = parseEventLogs({\n abi: Abis.tip20,\n logs,\n eventName: 'RoleMembershipUpdated',\n });\n if (events.length === 0)\n throw new Error('`RoleMembershipUpdated` events not found.');\n return events;\n }\n renounceRoles.extractEvents = extractEvents;\n})(renounceRoles || (renounceRoles = {}));\n/**\n * Renounces a role for a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.renounceRolesSync(client, {\n * token: '0x...',\n * roles: ['issuer'],\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction receipt and event data.\n */\nexport async function renounceRolesSync(client, parameters) {\n const { throwOnReceiptRevert = true, ...rest } = parameters;\n const receipt = await renounceRoles.inner(sendTransactionSync, client, {\n ...rest,\n throwOnReceiptRevert,\n });\n if (receipt.status === 'pending')\n return { receipt };\n const events = renounceRoles.extractEvents(receipt.logs);\n const value = events.map((event) => event.args);\n return {\n receipt,\n value,\n };\n}\n/**\n * Revokes a role for a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.revokeRoles(client, {\n * token: '0x...',\n * from: '0x...',\n * roles: ['issuer'],\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction hash.\n */\nexport async function revokeRoles(client, parameters) {\n return revokeRoles.inner(sendTransaction, client, parameters);\n}\n(function (revokeRoles) {\n /** @internal */\n async function inner(action, client, parameters) {\n const { from: _, ...rest } = parameters;\n return (await withExecutionError(action)(client, {\n ...rest,\n calls: parameters.roles.map((role) => {\n const call = revokeRoles.call(client, { ...parameters, role });\n return {\n ...call,\n data: encodeFunctionData(call),\n };\n }),\n }));\n }\n revokeRoles.inner = inner;\n /**\n * Defines a call to the `revokeRole` function.\n *\n * Can be passed as a parameter to:\n * - [`estimateContractGas`](https://viem.sh/docs/contract/estimateContractGas): estimate the gas cost of the call\n * - [`simulateContract`](https://viem.sh/docs/contract/simulateContract): simulate the call\n * - [`sendCalls`](https://viem.sh/docs/actions/wallet/sendCalls): send multiple calls\n *\n * @example\n * ```ts\n * import { createClient, http, walletActions } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * }).extend(walletActions)\n *\n * const { result } = await client.sendCalls({\n * calls: [\n * actions.token.revokeRoles.call(client, {\n * token: '0x20c0...babe',\n * from: '0x20c0...beef',\n * role: 'issuer',\n * }),\n * ]\n * })\n * ```\n *\n * @param parameters - Client (optional), followed by the call arguments.\n * @returns The call.\n */\n function call(...parameters) {\n const [client, args] = resolveCallParameters(parameters);\n const { token, from, role } = args;\n const roleHash = TokenRole.serialize(role);\n return defineCall({\n address: resolveToken(client, { token }).address,\n abi: Abis.tip20,\n functionName: 'revokeRole',\n args: [roleHash, from],\n });\n }\n revokeRoles.call = call;\n /**\n * Extracts the events from the logs.\n *\n * @param logs - Logs.\n * @returns The events.\n */\n function extractEvents(logs) {\n const events = parseEventLogs({\n abi: Abis.tip20,\n logs,\n eventName: 'RoleMembershipUpdated',\n });\n if (events.length === 0)\n throw new Error('`RoleMembershipUpdated` events not found.');\n return events;\n }\n revokeRoles.extractEvents = extractEvents;\n})(revokeRoles || (revokeRoles = {}));\n/**\n * Revokes a role for a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.revokeRolesSync(client, {\n * token: '0x...',\n * from: '0x...',\n * roles: ['issuer'],\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction receipt and event data.\n */\nexport async function revokeRolesSync(client, parameters) {\n const { throwOnReceiptRevert = true, ...rest } = parameters;\n const receipt = await revokeRoles.inner(sendTransactionSync, client, {\n ...rest,\n throwOnReceiptRevert,\n });\n if (receipt.status === 'pending')\n return { receipt };\n const events = revokeRoles.extractEvents(receipt.logs);\n const value = events.map((event) => event.args);\n return {\n receipt,\n value,\n };\n}\n/**\n * Sets the supply cap for a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.setSupplyCap(client, {\n * token: '0x...',\n * supplyCap: 1000000n,\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction hash.\n */\nexport async function setSupplyCap(client, parameters) {\n return setSupplyCap.inner(writeContract, client, parameters);\n}\n(function (setSupplyCap) {\n /** @internal */\n async function inner(action, client, parameters) {\n const { supplyCap, token, ...rest } = parameters;\n const call = setSupplyCap.call(client, { supplyCap, token });\n return (await withExecutionError(action)(client, {\n ...rest,\n ...call,\n }));\n }\n setSupplyCap.inner = inner;\n /**\n * Defines a call to the `setSupplyCap` function.\n *\n * Can be passed as a parameter to:\n * - [`estimateContractGas`](https://viem.sh/docs/contract/estimateContractGas): estimate the gas cost of the call\n * - [`simulateContract`](https://viem.sh/docs/contract/simulateContract): simulate the call\n * - [`sendCalls`](https://viem.sh/docs/actions/wallet/sendCalls): send multiple calls\n *\n * @example\n * ```ts\n * import { createClient, http, walletActions } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * }).extend(walletActions)\n *\n * const { result } = await client.sendCalls({\n * calls: [\n * actions.token.setSupplyCap.call(client, {\n * token: '0x20c0...babe',\n * supplyCap: 1000000n,\n * }),\n * ]\n * })\n * ```\n *\n * @param parameters - Client (optional), followed by the call arguments.\n * @returns The call.\n */\n function call(...parameters) {\n const [client, args] = resolveCallParameters(parameters);\n const { token, supplyCap } = args;\n return defineCall({\n address: resolveToken(client, { token }).address,\n abi: Abis.tip20,\n functionName: 'setSupplyCap',\n args: [supplyCap],\n });\n }\n setSupplyCap.call = call;\n /**\n * Extracts the event from the logs.\n *\n * @param logs - Logs.\n * @returns The event.\n */\n function extractEvent(logs) {\n const [log] = parseEventLogs({\n abi: Abis.tip20,\n logs,\n eventName: 'SupplyCapUpdate',\n });\n if (!log)\n throw new Error('`SupplyCapUpdate` event not found.');\n return log;\n }\n setSupplyCap.extractEvent = extractEvent;\n})(setSupplyCap || (setSupplyCap = {}));\n/**\n * Sets the supply cap for a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.setSupplyCapSync(client, {\n * token: '0x...',\n * supplyCap: 1000000n,\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction receipt and event data.\n */\nexport async function setSupplyCapSync(client, parameters) {\n const { throwOnReceiptRevert = true, ...rest } = parameters;\n const receipt = await setSupplyCap.inner(writeContractSync, client, {\n ...rest,\n throwOnReceiptRevert,\n });\n if (receipt.status === 'pending')\n return { receipt };\n const { args } = setSupplyCap.extractEvent(receipt.logs);\n return {\n ...args,\n receipt,\n };\n}\n/**\n * Sets the admin role for a specific role in a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.setRoleAdmin(client, {\n * token: '0x...',\n * role: 'issuer',\n * adminRole: 'admin',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction hash.\n */\nexport async function setRoleAdmin(client, parameters) {\n return setRoleAdmin.inner(writeContract, client, parameters);\n}\n(function (setRoleAdmin) {\n /** @internal */\n async function inner(action, client, parameters) {\n const { adminRole, role, token, ...rest } = parameters;\n const call = setRoleAdmin.call(client, { adminRole, role, token });\n return (await withExecutionError(action)(client, {\n ...rest,\n ...call,\n }));\n }\n setRoleAdmin.inner = inner;\n /**\n * Defines a call to the `setRoleAdmin` function.\n *\n * Can be passed as a parameter to:\n * - [`estimateContractGas`](https://viem.sh/docs/contract/estimateContractGas): estimate the gas cost of the call\n * - [`simulateContract`](https://viem.sh/docs/contract/simulateContract): simulate the call\n * - [`sendCalls`](https://viem.sh/docs/actions/wallet/sendCalls): send multiple calls\n *\n * @example\n * ```ts\n * import { createClient, http, walletActions } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * }).extend(walletActions)\n *\n * const { result } = await client.sendCalls({\n * calls: [\n * actions.token.setRoleAdmin.call(client, {\n * token: '0x20c0...babe',\n * role: 'issuer',\n * adminRole: 'admin',\n * }),\n * ]\n * })\n * ```\n *\n * @param parameters - Client (optional), followed by the call arguments.\n * @returns The call.\n */\n function call(...parameters) {\n const [client, args] = resolveCallParameters(parameters);\n const { token, role, adminRole } = args;\n const roleHash = TokenRole.serialize(role);\n const adminRoleHash = TokenRole.serialize(adminRole);\n return defineCall({\n address: resolveToken(client, { token }).address,\n abi: Abis.tip20,\n functionName: 'setRoleAdmin',\n args: [roleHash, adminRoleHash],\n });\n }\n setRoleAdmin.call = call;\n /**\n * Extracts the event from the logs.\n *\n * @param logs - Logs.\n * @returns The event.\n */\n function extractEvent(logs) {\n const [log] = parseEventLogs({\n abi: Abis.tip20,\n logs,\n eventName: 'RoleAdminUpdated',\n });\n if (!log)\n throw new Error('`RoleAdminUpdated` event not found.');\n return log;\n }\n setRoleAdmin.extractEvent = extractEvent;\n})(setRoleAdmin || (setRoleAdmin = {}));\n/**\n * Sets the admin role for a specific role in a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.setRoleAdminSync(client, {\n * token: '0x...',\n * role: 'issuer',\n * adminRole: 'admin',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction receipt and event data.\n */\nexport async function setRoleAdminSync(client, parameters) {\n const { throwOnReceiptRevert = true, ...rest } = parameters;\n const receipt = await setRoleAdmin.inner(writeContractSync, client, {\n ...rest,\n throwOnReceiptRevert,\n });\n if (receipt.status === 'pending')\n return { receipt };\n const { args } = setRoleAdmin.extractEvent(receipt.logs);\n return {\n ...args,\n receipt,\n };\n}\n/**\n * Transfers TIP20 tokens to another address.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.transfer(client, {\n * to: '0x...',\n * amount: 100n,\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction hash.\n */\nexport async function transfer(client, parameters) {\n return transfer.inner(writeContract, client, parameters);\n}\n(function (transfer) {\n /** @internal */\n async function inner(action, client, parameters) {\n return (await withExecutionError(action)(client, {\n ...parameters,\n ...transfer.call(client, parameters),\n }));\n }\n transfer.inner = inner;\n /**\n * Defines a call to the `transfer`, `transferFrom`, `transferWithMemo`, or\n * `transferFromWithMemo` function.\n *\n * Can be passed as a parameter to `estimateContractGas`, `simulateContract`,\n * `sendCalls`, `sendTransaction` (`calls`), or `multicall`. The token is\n * selected by `token`, which is either a TIP20 token id or a contract\n * `address`; `amount.decimals` is inferred from the client's declared\n * `tokens` when omitted.\n *\n * @param parameters - Client (optional), followed by the call arguments.\n * @returns The call.\n */\n function call(...parameters) {\n const [client, args] = resolveCallParameters(parameters);\n const { from, memo, to, token } = args;\n const { address, decimals } = resolveToken(client, { token });\n const value = internal_Token.toBaseUnits(args.amount, decimals);\n const callArgs = (() => {\n if (memo && from)\n return {\n functionName: 'transferFromWithMemo',\n args: [from, to, value, Hex.padLeft(memo, 32)],\n };\n if (memo)\n return {\n functionName: 'transferWithMemo',\n args: [to, value, Hex.padLeft(memo, 32)],\n };\n if (from)\n return {\n functionName: 'transferFrom',\n args: [from, to, value],\n };\n return {\n functionName: 'transfer',\n args: [to, value],\n };\n })();\n return defineCall({\n address,\n abi: Abis.tip20,\n ...callArgs,\n });\n }\n transfer.call = call;\n /**\n * Estimates the gas required to transfer TIP20 tokens. `amount.decimals` is\n * inferred from the client's declared `tokens` when omitted.\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The gas estimate.\n */\n async function estimateGas(client, parameters) {\n return estimateContractGas(client, {\n ...pickWriteParameters(parameters),\n ...transfer.call(client, parameters),\n });\n }\n transfer.estimateGas = estimateGas;\n /**\n * Simulates a transfer of TIP20 tokens. `amount.decimals` is inferred from\n * the client's declared `tokens` when omitted.\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The simulation result and write request.\n */\n async function simulate(client, parameters) {\n return simulateContract(client, {\n ...pickWriteParameters(parameters),\n ...transfer.call(client, parameters),\n });\n }\n transfer.simulate = simulate;\n /**\n * Extracts the `Transfer` event from logs.\n *\n * @param logs - Logs.\n * @returns The `Transfer` event.\n */\n function extractEvent(logs) {\n const [log] = parseEventLogs({\n abi: Abis.tip20,\n logs,\n eventName: 'Transfer',\n });\n if (!log)\n throw new Error('`Transfer` event not found.');\n return log;\n }\n transfer.extractEvent = extractEvent;\n})(transfer || (transfer = {}));\n/**\n * Transfers TIP20 tokens to another address.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.transferSync(client, {\n * to: '0x...',\n * amount: 100n,\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction receipt and event data.\n */\nexport async function transferSync(client, parameters) {\n const { amount, token, throwOnReceiptRevert = true } = parameters;\n const { decimals } = resolveToken(client, { token });\n const resolved = internal_Token.resolveAmountDecimals(amount, decimals);\n const receipt = await transfer.inner(writeContractSync, client, {\n ...parameters,\n throwOnReceiptRevert,\n });\n if (receipt.status === 'pending')\n return { receipt };\n const { args } = transfer.extractEvent(receipt.logs);\n return {\n ...args,\n ...(resolved === undefined\n ? {}\n : { decimals: resolved, formatted: formatUnits(args.amount, resolved) }),\n receipt,\n };\n}\n/**\n * Unpauses a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.unpause(client, {\n * token: '0x...',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction hash.\n */\nexport async function unpause(client, parameters) {\n return unpause.inner(writeContract, client, parameters);\n}\n(function (unpause) {\n /** @internal */\n async function inner(action, client, parameters) {\n const { token, ...rest } = parameters;\n const call = unpause.call(client, { token });\n return (await withExecutionError(action)(client, {\n ...rest,\n ...call,\n }));\n }\n unpause.inner = inner;\n /**\n * Defines a call to the `unpause` function.\n *\n * Can be passed as a parameter to:\n * - [`estimateContractGas`](https://viem.sh/docs/contract/estimateContractGas): estimate the gas cost of the call\n * - [`simulateContract`](https://viem.sh/docs/contract/simulateContract): simulate the call\n * - [`sendCalls`](https://viem.sh/docs/actions/wallet/sendCalls): send multiple calls\n *\n * @example\n * ```ts\n * import { createClient, http, walletActions } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * }).extend(walletActions)\n *\n * const { result } = await client.sendCalls({\n * calls: [\n * actions.token.unpause.call(client, {\n * token: '0x20c0...babe',\n * }),\n * ]\n * })\n * ```\n *\n * @param parameters - Client (optional), followed by the call arguments.\n * @returns The call.\n */\n function call(...parameters) {\n const [client, args] = resolveCallParameters(parameters);\n const { token } = args;\n return defineCall({\n address: resolveToken(client, { token }).address,\n abi: Abis.tip20,\n functionName: 'unpause',\n args: [],\n });\n }\n unpause.call = call;\n /**\n * Extracts the event from the logs.\n *\n * @param logs - Logs.\n * @returns The event.\n */\n function extractEvent(logs) {\n const [log] = parseEventLogs({\n abi: Abis.tip20,\n logs,\n eventName: 'PauseStateUpdate',\n });\n if (!log)\n throw new Error('`PauseStateUpdate` event not found.');\n return log;\n }\n unpause.extractEvent = extractEvent;\n})(unpause || (unpause = {}));\n/**\n * Unpauses a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.unpauseSync(client, {\n * token: '0x...',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction receipt and event data.\n */\nexport async function unpauseSync(client, parameters) {\n const { throwOnReceiptRevert = true, ...rest } = parameters;\n const receipt = await unpause.inner(writeContractSync, client, {\n ...rest,\n throwOnReceiptRevert,\n });\n if (receipt.status === 'pending')\n return { receipt };\n const { args } = unpause.extractEvent(receipt.logs);\n return {\n ...args,\n receipt,\n };\n}\n/**\n * Updates the quote token for a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.prepareUpdateQuoteToken(client, {\n * token: '0x...',\n * quoteToken: '0x...',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction hash.\n */\nexport async function prepareUpdateQuoteToken(client, parameters) {\n return prepareUpdateQuoteToken.inner(writeContract, client, parameters);\n}\n(function (prepareUpdateQuoteToken) {\n /** @internal */\n async function inner(action, client, parameters) {\n const { quoteToken, token, ...rest } = parameters;\n const call = prepareUpdateQuoteToken.call(client, { quoteToken, token });\n return (await withExecutionError(action)(client, {\n ...rest,\n ...call,\n }));\n }\n prepareUpdateQuoteToken.inner = inner;\n /**\n * Defines a call to the `prepareUpdateQuoteToken` function.\n *\n * Can be passed as a parameter to:\n * - [`estimateContractGas`](https://viem.sh/docs/contract/estimateContractGas): estimate the gas cost of the call\n * - [`simulateContract`](https://viem.sh/docs/contract/simulateContract): simulate the call\n * - [`sendCalls`](https://viem.sh/docs/actions/wallet/sendCalls): send multiple calls\n *\n * @example\n * ```ts\n * import { createClient, http, walletActions } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * }).extend(walletActions)\n *\n * const { result } = await client.sendCalls({\n * calls: [\n * actions.token.prepareUpdateQuoteToken.call(client, {\n * token: '0x20c0...babe',\n * quoteToken: '0x20c0...cafe',\n * }),\n * ]\n * })\n * ```\n *\n * @param parameters - Client (optional), followed by the call arguments.\n * @returns The call.\n */\n function call(...parameters) {\n const [client, args] = resolveCallParameters(parameters);\n const { token, quoteToken } = args;\n return defineCall({\n address: resolveToken(client, { token }).address,\n abi: Abis.tip20,\n functionName: 'setNextQuoteToken',\n args: [resolveToken(client, { token: quoteToken }).address],\n });\n }\n prepareUpdateQuoteToken.call = call;\n /**\n * Extracts the event from the logs.\n *\n * @param logs - Logs.\n * @returns The event.\n */\n function extractEvent(logs) {\n const [log] = parseEventLogs({\n abi: Abis.tip20,\n logs,\n eventName: 'NextQuoteTokenSet',\n });\n if (!log)\n throw new Error('`NextQuoteTokenSet` event not found.');\n return log;\n }\n prepareUpdateQuoteToken.extractEvent = extractEvent;\n})(prepareUpdateQuoteToken || (prepareUpdateQuoteToken = {}));\n/**\n * Updates the quote token for a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.prepareUpdateQuoteTokenSync(client, {\n * token: '0x...',\n * quoteToken: '0x...',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction receipt and event data.\n */\nexport async function prepareUpdateQuoteTokenSync(client, parameters) {\n const receipt = await prepareUpdateQuoteToken.inner(writeContractSync, client, parameters);\n if (receipt.status === 'pending')\n return { receipt };\n const { args } = prepareUpdateQuoteToken.extractEvent(receipt.logs);\n return {\n ...args,\n receipt,\n };\n}\n/**\n * Updates the quote token for a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.updateQuoteToken(client, {\n * token: '0x...',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction hash.\n */\nexport async function updateQuoteToken(client, parameters) {\n return updateQuoteToken.inner(writeContract, client, parameters);\n}\n(function (updateQuoteToken) {\n /** @internal */\n async function inner(action, client, parameters) {\n const { token, ...rest } = parameters;\n const call = updateQuoteToken.call(client, { token });\n return (await withExecutionError(action)(client, {\n ...rest,\n ...call,\n }));\n }\n updateQuoteToken.inner = inner;\n /**\n * Defines a call to the `updateQuoteToken` function.\n *\n * Can be passed as a parameter to:\n * - [`estimateContractGas`](https://viem.sh/docs/contract/estimateContractGas): estimate the gas cost of the call\n * - [`simulateContract`](https://viem.sh/docs/contract/simulateContract): simulate the call\n * - [`sendCalls`](https://viem.sh/docs/actions/wallet/sendCalls): send multiple calls\n *\n * @example\n * ```ts\n * import { createClient, http, walletActions } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * }).extend(walletActions)\n *\n * const { result } = await client.sendCalls({\n * calls: [\n * actions.token.updateQuoteToken.call(client, {\n * token: '0x20c0...babe',\n * }),\n * ]\n * })\n * ```\n *\n * @param parameters - Client (optional), followed by the call arguments.\n * @returns The call.\n */\n function call(...parameters) {\n const [client, args] = resolveCallParameters(parameters);\n const { token } = args;\n return defineCall({\n address: resolveToken(client, { token }).address,\n abi: Abis.tip20,\n functionName: 'completeQuoteTokenUpdate',\n args: [],\n });\n }\n updateQuoteToken.call = call;\n /**\n * Extracts the event from the logs.\n *\n * @param logs - Logs.\n * @returns The event.\n */\n function extractEvent(logs) {\n const [log] = parseEventLogs({\n abi: Abis.tip20,\n logs,\n eventName: 'QuoteTokenUpdate',\n });\n if (!log)\n throw new Error('`QuoteTokenUpdateCompleted` event not found.');\n return log;\n }\n updateQuoteToken.extractEvent = extractEvent;\n})(updateQuoteToken || (updateQuoteToken = {}));\n/**\n * Updates the quote token for a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.updateQuoteTokenSync(client, {\n * token: '0x...',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction receipt and event data.\n */\nexport async function updateQuoteTokenSync(client, parameters) {\n const receipt = await updateQuoteToken.inner(writeContractSync, client, parameters);\n if (receipt.status === 'pending')\n return { receipt };\n const { args } = updateQuoteToken.extractEvent(receipt.logs);\n return {\n ...args,\n receipt,\n };\n}\n/**\n * Watches for TIP20 token approval events.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const unwatch = actions.token.watchApprove(client, {\n * onApproval: (args, log) => {\n * console.log('Approval:', args)\n * },\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns A function to unsubscribe from the event.\n */\nexport function watchApprove(client, parameters) {\n const { onApproval, token, ...rest } = parameters;\n return watchContractEvent(client, {\n ...rest,\n address: resolveToken(client, { token }).address,\n abi: Abis.tip20,\n eventName: 'Approval',\n onLogs: (logs) => {\n for (const log of logs)\n onApproval(log.args, log);\n },\n strict: true,\n });\n}\n/**\n * Watches for TIP20 token burn events.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const unwatch = actions.token.watchBurn(client, {\n * onBurn: (args, log) => {\n * console.log('Burn:', args)\n * },\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns A function to unsubscribe from the event.\n */\nexport function watchBurn(client, parameters) {\n const { onBurn, token, ...rest } = parameters;\n return watchContractEvent(client, {\n ...rest,\n address: resolveToken(client, { token }).address,\n abi: Abis.tip20,\n eventName: 'Burn',\n onLogs: (logs) => {\n for (const log of logs)\n onBurn(log.args, log);\n },\n strict: true,\n });\n}\n/**\n * Watches for new TIP20 tokens created.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const unwatch = actions.token.watchCreate(client, {\n * onTokenCreated: (args, log) => {\n * console.log('Token created:', args)\n * },\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns A function to unsubscribe from the event.\n */\nexport function watchCreate(client, parameters) {\n const { onTokenCreated, ...rest } = parameters;\n return watchContractEvent(client, {\n ...rest,\n address: Addresses.tip20Factory,\n abi: Abis.tip20Factory,\n eventName: 'TokenCreated',\n onLogs: (logs) => {\n for (const log of logs)\n onTokenCreated(log.args, log);\n },\n strict: true,\n });\n}\n/**\n * Watches for TIP20 token mint events.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const unwatch = actions.token.watchMint(client, {\n * onMint: (args, log) => {\n * console.log('Mint:', args)\n * },\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns A function to unsubscribe from the event.\n */\nexport function watchMint(client, parameters) {\n const { onMint, token, ...rest } = parameters;\n return watchContractEvent(client, {\n ...rest,\n address: resolveToken(client, { token }).address,\n abi: Abis.tip20,\n eventName: 'Mint',\n onLogs: (logs) => {\n for (const log of logs)\n onMint(log.args, log);\n },\n strict: true,\n });\n}\n/**\n * Watches for TIP20 token role admin updates.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const unwatch = actions.token.watchAdminRole(client, {\n * onRoleAdminUpdated: (args, log) => {\n * console.log('Role admin updated:', args)\n * },\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns A function to unsubscribe from the event.\n */\nexport function watchAdminRole(client, parameters) {\n const { onRoleAdminUpdated, token, ...rest } = parameters;\n return watchContractEvent(client, {\n ...rest,\n address: resolveToken(client, { token }).address,\n abi: Abis.tip20,\n eventName: 'RoleAdminUpdated',\n onLogs: (logs) => {\n for (const log of logs)\n onRoleAdminUpdated(log.args, log);\n },\n strict: true,\n });\n}\n/**\n * Watches for TIP20 token role membership updates.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const unwatch = actions.token.watchRole(client, {\n * onRoleUpdated: (args, log) => {\n * console.log('Role updated:', args)\n * },\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns A function to unsubscribe from the event.\n */\nexport function watchRole(client, parameters) {\n const { onRoleUpdated, token, ...rest } = parameters;\n return watchContractEvent(client, {\n ...rest,\n address: resolveToken(client, { token }).address,\n abi: Abis.tip20,\n eventName: 'RoleMembershipUpdated',\n onLogs: (logs) => {\n for (const log of logs) {\n const type = log.args.hasRole ? 'granted' : 'revoked';\n onRoleUpdated({ ...log.args, type }, log);\n }\n },\n strict: true,\n });\n}\n/**\n * Watches for TIP20 token transfer events.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const unwatch = actions.token.watchTransfer(client, {\n * onTransfer: (args, log) => {\n * console.log('Transfer:', args)\n * },\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns A function to unsubscribe from the event.\n */\nexport function watchTransfer(client, parameters) {\n const { onTransfer, token, ...rest } = parameters;\n return watchContractEvent(client, {\n ...rest,\n address: resolveToken(client, { token }).address,\n abi: Abis.tip20,\n eventName: 'Transfer',\n onLogs: (logs) => {\n for (const log of logs)\n onTransfer(log.args, log);\n },\n strict: true,\n });\n}\n/**\n * Watches for TIP20 token quote token update events.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const unwatch = actions.token.watchUpdateQuoteToken(client, {\n * onUpdateQuoteToken: (args, log) => {\n * if (args.completed)\n * console.log('quote token update completed:', args.newQuoteToken)\n * else\n * console.log('quote token update proposed:', args.newQuoteToken)\n * },\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns A function to unsubscribe from the event.\n */\nexport function watchUpdateQuoteToken(client, parameters) {\n const { onUpdateQuoteToken, token, ...rest } = parameters;\n const address = resolveToken(client, { token }).address;\n return watchContractEvent(client, {\n ...rest,\n address,\n abi: Abis.tip20,\n onLogs: (logs) => {\n for (const log of logs) {\n if (log.eventName !== 'NextQuoteTokenSet' &&\n log.eventName !== 'QuoteTokenUpdate')\n continue;\n onUpdateQuoteToken({\n ...log.args,\n completed: log.eventName === 'QuoteTokenUpdate',\n }, log);\n }\n },\n strict: true,\n });\n}\n/** Thrown when an account's TIP-20 balance is lower than the amount a call needs. */\nexport class TokenInsufficientBalanceError extends TempoExecutionError {\n constructor(parameters) {\n const { decimals } = parameters;\n const [available, required, token] = parameters.error.args;\n super(parameters, {\n details: {\n token,\n available: formatAmount(available, decimals),\n required: formatAmount(required, decimals),\n shortfall: formatAmount(required - available, decimals),\n },\n name: 'TokenInsufficientBalanceError',\n shortMessage: `Insufficient balance of token \"${token}\".`,\n });\n /** Balance available. */\n Object.defineProperty(this, \"available\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /** Token decimals, when known. */\n Object.defineProperty(this, \"decimals\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /** Amount required. */\n Object.defineProperty(this, \"required\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /** Token address. */\n Object.defineProperty(this, \"token\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this.available = available;\n this.decimals = decimals;\n this.required = required;\n this.token = token;\n }\n}\n/** Thrown when a spender's TIP-20 allowance is lower than the amount it tries to transfer. */\nexport class TokenInsufficientAllowanceError extends TempoExecutionError {\n constructor(parameters) {\n const { allowance, amount, decimals, owner, spender, token } = parameters;\n super(parameters, {\n details: {\n token,\n owner,\n spender,\n allowance: formatAmount(allowance, decimals),\n amount: formatAmount(amount, decimals),\n },\n name: 'TokenInsufficientAllowanceError',\n shortMessage: `Spender \"${spender}\" has an insufficient allowance from \"${owner}\" for token \"${token}\".`,\n });\n /** Current allowance, when known. */\n Object.defineProperty(this, \"allowance\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /** Amount the spender tried to transfer. */\n Object.defineProperty(this, \"amount\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /** Token decimals, when known. */\n Object.defineProperty(this, \"decimals\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /** Token owner. */\n Object.defineProperty(this, \"owner\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /** Spender. */\n Object.defineProperty(this, \"spender\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /** Token address. */\n Object.defineProperty(this, \"token\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this.allowance = allowance;\n this.amount = amount;\n this.decimals = decimals;\n this.owner = owner;\n this.spender = spender;\n this.token = token;\n }\n}\n/** Thrown when minting would exceed a TIP-20 token's supply cap. */\nexport class TokenSupplyCapExceededError extends TempoExecutionError {\n constructor(parameters) {\n const { amount, decimals, supplyCap, token, totalSupply } = parameters;\n super(parameters, {\n details: {\n token,\n amount: formatAmount(amount, decimals),\n 'total supply': formatAmount(totalSupply, decimals),\n 'supply cap': formatAmount(supplyCap, decimals),\n 'mintable amount': supplyCap !== undefined && totalSupply !== undefined\n ? formatAmount(supplyCap - totalSupply, decimals)\n : undefined,\n },\n name: 'TokenSupplyCapExceededError',\n shortMessage: `Minting exceeds the supply cap of token \"${token}\".`,\n });\n /** Amount to mint. */\n Object.defineProperty(this, \"amount\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /** Token decimals, when known. */\n Object.defineProperty(this, \"decimals\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /** Supply cap, when known. */\n Object.defineProperty(this, \"supplyCap\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /** Token address. */\n Object.defineProperty(this, \"token\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /** Current total supply, when known. */\n Object.defineProperty(this, \"totalSupply\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this.amount = amount;\n this.decimals = decimals;\n this.supplyCap = supplyCap;\n this.token = token;\n this.totalSupply = totalSupply;\n }\n}\n/** Thrown when a TIP-20 token's transfer policy forbids the sender or recipient. */\nexport class TokenPolicyForbidsError extends TempoExecutionError {\n constructor(parameters) {\n const { from, policyId, recipientAuthorized, senderAuthorized, to, token } = parameters;\n const party = senderAuthorized === false\n ? `sender \"${from}\"`\n : recipientAuthorized === false\n ? `recipient \"${to}\"`\n : 'this transfer';\n super(parameters, {\n details: {\n token,\n policy: policyId,\n from,\n to,\n 'sender authorized': senderAuthorized?.toString(),\n 'recipient authorized': recipientAuthorized?.toString(),\n },\n name: 'TokenPolicyForbidsError',\n shortMessage: `The transfer policy of token \"${token}\" forbids ${party}.`,\n });\n /** Sender, when known. */\n Object.defineProperty(this, \"from\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /** Transfer policy ID, when known. */\n Object.defineProperty(this, \"policyId\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /** Whether the policy authorizes the recipient, when known. */\n Object.defineProperty(this, \"recipientAuthorized\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /** Whether the policy authorizes the sender, when known. */\n Object.defineProperty(this, \"senderAuthorized\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /** Recipient, when known. */\n Object.defineProperty(this, \"to\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /** Token address. */\n Object.defineProperty(this, \"token\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this.from = from;\n this.policyId = policyId;\n this.recipientAuthorized = recipientAuthorized;\n this.senderAuthorized = senderAuthorized;\n this.to = to;\n this.token = token;\n }\n}\n/** Thrown when calling a paused TIP-20 token. */\nexport class TokenPausedError extends TempoExecutionError {\n constructor(parameters) {\n super(parameters, {\n name: 'TokenPausedError',\n shortMessage: `Token \"${parameters.token}\" is paused.`,\n });\n /** Token address. */\n Object.defineProperty(this, \"token\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this.token = parameters.token;\n }\n}\n/** Thrown when an account lacks the TIP-20 role a call requires. */\nexport class TokenUnauthorizedError extends TempoExecutionError {\n constructor(parameters) {\n const { account, role, token } = parameters;\n super(parameters, {\n details: { token, account, role },\n name: 'TokenUnauthorizedError',\n shortMessage: `Account \"${account}\" does not have the \"${role}\" role on token \"${token}\".`,\n });\n /** Account that made the call. */\n Object.defineProperty(this, \"account\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /** Role the call requires. */\n Object.defineProperty(this, \"role\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /** Token address. */\n Object.defineProperty(this, \"token\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this.account = account;\n this.role = role;\n this.token = token;\n }\n}\n/** Roles required by TIP-20 functions. */\nconst requiredRoles = {\n burn: 'issuer',\n burnAt: 'burnAt',\n burnBlocked: 'burnBlocked',\n burnWithMemo: 'issuer',\n changeTransferPolicyId: 'defaultAdmin',\n completeQuoteTokenUpdate: 'defaultAdmin',\n mint: 'issuer',\n mintWithMemo: 'issuer',\n pause: 'pause',\n setLogoURI: 'defaultAdmin',\n setNextQuoteToken: 'defaultAdmin',\n setSupplyCap: 'defaultAdmin',\n unpause: 'unpause',\n};\n/** @internal */\nexport const errorResolvers = {\n 'ContractPaused()': ({ base, call }) => isTip20(call?.address)\n ? new TokenPausedError({ ...base, token: call.address })\n : undefined,\n 'InsufficientAllowance()': async (context) => {\n const { base, call, signer } = context;\n const owner = call?.arg('from');\n if (!isTip20(call?.address) || !owner || !signer)\n return undefined;\n const token = call.address;\n const [allowance, decimals] = await context.read([\n {\n address: token,\n abi: Abis.tip20,\n functionName: 'allowance',\n args: [owner, signer.address],\n },\n { address: token, abi: Abis.tip20, functionName: 'decimals' },\n ]);\n return new TokenInsufficientAllowanceError({\n ...base,\n allowance: allowance?.result,\n amount: call.arg('amount'),\n decimals: decimals?.result,\n owner,\n spender: signer.address,\n token,\n });\n },\n 'InsufficientBalance(uint256,uint256,address)': async (context) => {\n // Selector-only revert data carries no arguments.\n const token = context.base.error.args?.[2];\n if (!token)\n return undefined;\n const [decimals] = await context.read([\n { address: token, abi: Abis.tip20, functionName: 'decimals' },\n ]);\n return new TokenInsufficientBalanceError({\n ...context.base,\n decimals: decimals?.result,\n });\n },\n 'PolicyForbids()': async (context) => {\n const { base, call, signer } = context;\n if (!isTip20(call?.address))\n return undefined;\n const token = call.address;\n // Mints only check the recipient.\n const mint = call.functionName.startsWith('mint');\n const from = mint\n ? undefined\n : (call.arg('from') ?? signer?.address);\n const to = call.arg('to');\n const [policyId] = await context.read([\n { address: token, abi: Abis.tip20, functionName: 'transferPolicyId' },\n ]);\n const registry = {\n address: Addresses.tip403Registry,\n abi: Abis.tip403Registry,\n };\n const [sender, recipient] = policyId?.result === undefined\n ? []\n : await context.read([\n {\n ...registry,\n functionName: 'isAuthorizedSender',\n args: [policyId.result, from ?? zeroAddress],\n },\n {\n ...registry,\n functionName: mint\n ? 'isAuthorizedMintRecipient'\n : 'isAuthorizedRecipient',\n args: [policyId.result, to ?? zeroAddress],\n },\n ]);\n return new TokenPolicyForbidsError({\n ...base,\n from,\n policyId: policyId?.result,\n recipientAuthorized: to ? recipient?.result : undefined,\n senderAuthorized: from ? sender?.result : undefined,\n to,\n token,\n });\n },\n 'SupplyCapExceeded()': async (context) => {\n const { base, call } = context;\n if (!isTip20(call?.address))\n return undefined;\n const token = call.address;\n const [supplyCap, totalSupply, decimals] = await context.read([\n { address: token, abi: Abis.tip20, functionName: 'supplyCap' },\n { address: token, abi: Abis.tip20, functionName: 'totalSupply' },\n { address: token, abi: Abis.tip20, functionName: 'decimals' },\n ]);\n return new TokenSupplyCapExceededError({\n ...base,\n amount: call.arg('amount'),\n decimals: decimals?.result,\n supplyCap: supplyCap?.result,\n token,\n totalSupply: totalSupply?.result,\n });\n },\n 'Unauthorized()': ({ base, call, signer }) => {\n const role = call && requiredRoles[call.functionName];\n if (!isTip20(call?.address) || !role || !signer)\n return undefined;\n return new TokenUnauthorizedError({\n ...base,\n account: signer.address,\n role,\n token: call.address,\n });\n },\n};\n//# sourceMappingURL=token.js.map","import { decodeErrorResult, } from '../utils/abi/decodeErrorResult.js';\nimport { formatAbiItem } from '../utils/abi/formatAbiItem.js';\nimport { toFunctionSelector } from '../utils/hash/toFunctionSelector.js';\nimport * as Abis from './Abis.js';\n/** Human-readable templates keyed by error signature in `Abis.core`, with positional `{0}` placeholders. */\nexport const messages = {\n 'AbdicationAlreadyScheduled(uint8)': 'Abdication is already scheduled for capability {0}.',\n 'AccountAlreadyConfigurable()': 'The account is already a configurable account.',\n 'AccountHasCode()': 'Accounts with code cannot be upgraded.',\n 'AccountNotAllowed(address)': 'Account {0} is not allowed.',\n 'ActiveLeaderRemoved()': 'The active leader cannot be removed.',\n 'AddressAlreadyHasValidator()': 'This address already has a validator.',\n 'AddressNotReserved()': 'Address is not reserved.',\n 'AddressReserved()': 'Address is reserved.',\n 'AlreadyInitialized()': 'Already initialized.',\n 'AmountExceedsDeposit()': 'Amount exceeds deposit.',\n 'AmountNotIncreasing()': 'Amount is not increasing.',\n 'BelowMinimumOrderSize(uint128)': 'Order size is below the minimum allowed ({0}).',\n 'CallNotAllowed()': 'This call is not allowed.',\n 'CallbackDidNotReturnToZone()': 'The callback did not return to the zone.',\n 'CallbackRejected()': 'The callback was rejected.',\n 'CannotChangeWithinBlock()': 'Cannot change within the same block.',\n 'CapabilityAbdicated(uint8)': 'Capability {0} has been abdicated.',\n 'CaptureAmountInvalid()': 'Capture amount is invalid.',\n 'ChannelAlreadyExists()': 'Channel already exists.',\n 'ChannelNotFound()': 'Channel not found.',\n 'CloseNotReady()': 'Channel is not ready to close.',\n 'ContractPaused()': 'Contract is paused.',\n 'DepositBlockCapacityExceeded(uint64)': 'The deposit capacity per block exceeds the maximum ({0}).',\n 'DepositOverflow()': 'Deposit overflow.',\n 'DepositTooSmall()': 'The deposit is too small.',\n 'DepositsNotActive()': 'Deposits are not active.',\n 'DivisionByZero()': 'Division by zero.',\n 'DuplicateAllowedAccount()': 'The allowed account is duplicated.',\n 'DuplicateOwner()': 'The owner is duplicated.',\n 'DuplicateZoneGateway()': 'The zone gateway is duplicated.',\n 'EmptyV1ValidatorSet()': 'Validator set is empty.',\n 'EncryptionKeyExpired(uint256,uint64,uint64)': 'Encryption key {0} has expired.',\n 'ExpiringNonceHashNotSet()': 'Expiring nonce hash is not set.',\n 'ExpiringNonceReplay()': 'Expiring nonce has already been used.',\n 'ExpiringNonceSetFull()': 'Expiring nonce set is full.',\n 'ExpiryInPast()': 'Expiry is in the past.',\n 'GasFeeRateTooHigh()': 'The gas fee rate is too high.',\n 'IdenticalAddresses()': 'Addresses must be different.',\n 'IdenticalTokens()': 'Cannot swap a token for itself — input and output tokens must be different.',\n 'IncompatiblePolicyType()': 'Incompatible policy type.',\n 'IndexAlreadySet()': 'The index is already set.',\n 'IngressAlreadyExists(string)': 'Ingress \"{0}\" already exists.',\n 'InsufficientAllowance()': 'Insufficient allowance.',\n 'InsufficientBalance()': 'Insufficient balance.',\n 'InsufficientBalance(uint256,uint256,address)': 'Insufficient balance. Required: {1}, available: {0}.',\n 'InsufficientFeeTokenBalance()': 'Insufficient fee token balance.',\n 'InsufficientLiquidity()': 'Not enough liquidity in the order book to fill this trade.',\n 'InsufficientOutput()': 'The output amount is below the slippage minimum — try increasing slippage tolerance.',\n 'InsufficientReserves()': 'Insufficient reserves.',\n 'InvalidAccount()': 'Invalid account.',\n 'InvalidAdmin()': 'Invalid administrator.',\n 'InvalidAmount()': 'Invalid amount.',\n 'InvalidBaseToken()': 'This token is not a valid base token for the requested pair.',\n 'InvalidBouncebackRecipient()': 'Invalid bounceback recipient.',\n 'InvalidCallScope()': 'Invalid call scope.',\n 'InvalidCallbackTarget()': 'Invalid callback target.',\n 'InvalidCiphertextLength(uint256,uint256)': 'Invalid ciphertext length. Expected {1}, got {0}.',\n 'InvalidClaimAddress()': 'Invalid claim address.',\n 'InvalidClosedLoopConfig()': 'Invalid closed-loop configuration.',\n 'InvalidConfig()': 'Invalid configuration.',\n 'InvalidConfigurableAccountOwner()': 'Invalid owner.',\n 'InvalidCurrency()': 'Invalid currency.',\n 'InvalidDepositTransition()': 'Invalid deposit transition.',\n 'InvalidEncryptionKeyIndex(uint256)': 'Invalid encryption key index ({0}).',\n 'InvalidEphemeralPubkey()': 'Invalid ephemeral public key.',\n 'InvalidExpiringNonceExpiry()': 'Invalid expiring nonce expiry.',\n 'InvalidFlipTick()': 'The flip-order price tick is invalid.',\n 'InvalidFormat()': 'Invalid format.',\n 'InvalidKeyAuthorizationWitness()': 'Invalid key authorization witness.',\n 'InvalidKeyId()': 'Invalid key ID.',\n 'InvalidLeader()': 'Invalid leader.',\n 'InvalidLogoURI()': 'Invalid logo URI.',\n 'InvalidMasterAddress()': 'Invalid master address.',\n 'InvalidMigrationIndex()': 'Invalid migration index.',\n 'InvalidMode()': 'Invalid mode.',\n 'InvalidNonceKey()': 'Invalid nonce key.',\n 'InvalidOwner()': 'Invalid owner.',\n 'InvalidOwnerOrder()': 'Invalid owner order.',\n 'InvalidPayee()': 'Invalid payee.',\n 'InvalidPayload()': 'Invalid payload.',\n 'InvalidPolicyType()': 'Invalid policy type.',\n 'InvalidProof()': 'Invalid proof.',\n 'InvalidProofOfPossession()': 'Invalid proof of possession.',\n 'InvalidPublicKey()': 'Invalid public key.',\n 'InvalidQuorumCertificate()': 'Invalid quorum certificate.',\n 'InvalidQuoteToken()': 'Invalid quote token.',\n 'InvalidReceipt()': 'Invalid receipt.',\n 'InvalidReceivePolicyType()': 'Invalid receive policy type.',\n 'InvalidRecipient()': 'Invalid recipient.',\n 'InvalidRecoveryAuthority()': 'Invalid recovery authority.',\n 'InvalidSequencerSet()': 'Invalid sequencer set.',\n 'InvalidSignature()': 'Invalid signature.',\n 'InvalidSignatureFormat()': 'Invalid signature format.',\n 'InvalidSignatureType()': 'Invalid signature type.',\n 'InvalidSpendingLimit()': 'Invalid spending limit.',\n 'InvalidSupplyCap()': 'Invalid supply cap.',\n 'InvalidSwapCalculation()': 'Invalid swap calculation.',\n 'InvalidTempoBlockNumber()': 'Invalid Tempo block number.',\n 'InvalidThreshold()': 'Invalid threshold.',\n 'InvalidTick()': 'The price tick is invalid.',\n 'InvalidToken()': 'This token is not supported on the exchange.',\n 'InvalidTokenEnablementTransition()': 'Invalid token enablement transition.',\n 'InvalidTransferPolicyId()': 'Invalid transfer policy.',\n 'InvalidValidatorAddress()': 'Invalid validator address.',\n 'InvalidWeight()': 'Invalid weight.',\n 'KeyAlreadyExists()': 'Key already exists.',\n 'KeyAlreadyRevoked()': 'Key has already been revoked.',\n 'KeyAuthorizationWitnessAlreadyBurned()': 'Key authorization witness has already been burned.',\n 'KeyExpired()': 'Key has expired.',\n 'KeyNotFound()': 'Key not found.',\n 'LeaderAlreadyUpdatedThisBlock()': 'The leader has already been updated in this block.',\n 'LegacyAuthorizeKeySelectorChanged(bytes4)': 'Legacy authorize key selector changed to {0}.',\n 'LogoURITooLong()': 'Logo URI is too long.',\n 'MasterIdCollision(address)': 'Master ID collision with {0}.',\n 'MaxInputExceeded()': 'The required input exceeds the slippage maximum — try increasing slippage tolerance.',\n 'MigrationNotComplete()': 'Migration is not complete.',\n 'MustDelegateCall()': 'A delegate call is required.',\n 'NoEncryptionKeyAtBlock(uint64)': 'No encryption key exists at block {0}.',\n 'NoEncryptionKeySet()': 'No encryption key is set.',\n 'NoOptedInSupply()': 'No opted-in supply.',\n 'NonceOverflow()': 'Nonce overflow.',\n 'NotAdmin()': 'The caller is not the administrator.',\n 'NotFactory()': 'The caller is not the factory.',\n 'NotHostPort(string,string,string)': '\"{1}\" is not a valid host:port for {0}.',\n 'NotInitialized()': 'Not initialized.',\n 'NotIp(string,string)': '\"{0}\" is not a valid IP address.',\n 'NotIpPort(string,string)': '\"{0}\" is not a valid IP:port.',\n 'NotIpPort(string,string,string)': '\"{1}\" is not a valid IP:port for {0}.',\n 'NotOwner()': 'The caller is not an owner.',\n 'NotPauseAuthority()': 'The caller is not the pause authority.',\n 'NotPayeeOrOperator()': 'Not payee or operator.',\n 'NotPayer()': 'Not payer.',\n 'NotPendingAdmin()': 'The caller is not the pending administrator.',\n 'NotSelf()': 'The caller must be the contract itself.',\n 'NotSequencer()': 'The caller is not a sequencer.',\n 'OnlyDirectCall()': 'A direct call is required.',\n 'OrderDoesNotExist()': 'No order exists with the given ID.',\n 'OrderNotStale()': 'This order is not yet eligible for stale-cleanup.',\n 'PairAlreadyExists()': 'A trading pair for these tokens has already been created.',\n 'PairDoesNotExist()': 'No trading pair exists for these tokens.',\n 'PermitExpired()': 'Permit has expired.',\n 'PolicyForbids()': 'Forbidden by policy.',\n 'PolicyNotFound()': 'Policy not found.',\n 'PolicyNotSimple()': 'Policy is not a simple policy.',\n 'PortalIsPaused()': 'The portal is paused.',\n 'PrimitiveRootRequired()': 'The root key must sign the upgrade transaction.',\n 'ProofOfWorkFailed()': 'Proof of work failed.',\n 'ProtectedAddress()': 'Address is protected.',\n 'ProtocolNonceNotSupported()': 'Protocol nonce is not supported.',\n 'PublicKeyAlreadyExists()': 'Public key already exists.',\n 'ReentrantWithdrawal()': 'Reentrant withdrawals are not allowed.',\n 'RootKeyRetired(address)': 'The root key of {0} is retired.',\n 'SequencerConfigurationUnchanged()': 'The sequencer configuration is unchanged.',\n 'SignatureTypeMismatch(uint8,uint8)': 'Signature type mismatch. Expected {0}, got {1}.',\n 'SpendingLimitExceeded()': 'Spending limit exceeded.',\n 'StaleLeadershipEpoch(uint64,uint64)': 'Stale leadership epoch. Expected {0}, got {1}.',\n 'SupplyCapExceeded()': 'Supply cap exceeded.',\n 'TickOutOfBounds(int16)': 'Price tick {0} is outside the allowed range.',\n 'TokenAlreadyEnabled()': 'The token is already enabled.',\n 'TokenAlreadyExists(address)': 'Token {0} already exists.',\n 'TokenEnablementBlockCapacityExceeded(uint64)': 'The token enablement capacity per block exceeds the maximum ({0}).',\n 'TokenEnablementCursorNotInitialized()': 'The token enablement cursor is not initialized.',\n 'TokenMetadataTooLong()': 'Token metadata is too long.',\n 'TokenNotEnabled()': 'The token is not enabled.',\n 'TokenTransferPolicyNotSet()': 'The token transfer policy is not set.',\n 'TooManyOwners()': 'There are too many owners.',\n 'TransferFailed()': 'The transfer failed.',\n 'Unauthorized()': 'Unauthorized.',\n 'UnauthorizedCaller()': 'Unauthorized caller.',\n 'UnauthorizedClaimer()': 'Unauthorized claimer.',\n 'UnauthorizedConfigurableAccountCaller()': 'Unauthorized configurable account caller.',\n 'Uninitialized()': 'Uninitialized.',\n 'UpgradeMustBeOnlyCall()': 'The upgrade must be the only call in the transaction.',\n 'ValidatorAlreadyDeactivated()': 'Validator is already deactivated.',\n 'ValidatorAlreadyExists()': 'Validator already exists.',\n 'ValidatorNotFound()': 'Validator not found.',\n 'VirtualAddressNotAllowed()': 'Virtual address is not allowed.',\n 'VirtualAddressUnregistered()': 'Virtual address is not registered.',\n 'ZeroDeposit()': 'Deposit cannot be zero.',\n 'ZeroPublicKey()': 'Public key cannot be zero.',\n};\n/** Steps to resolve an error, keyed by error signature in `Abis.core`. */\nexport const hints = {\n 'CallNotAllowed()': [\n \"The access key's scopes do not allow this target, selector, or recipient.\",\n 'Authorize an access key whose scopes include this call.',\n ],\n 'ContractPaused()': [\n 'The token is paused. An account with the unpause role can unpause it.',\n ],\n 'ExpiringNonceReplay()': ['Resend the transaction with a new nonce.'],\n 'ExpiryInPast()': ['Set the expiry to a future time.'],\n 'InsufficientAllowance()': [\n 'Approve the spender for at least this amount.',\n ],\n 'InsufficientBalance(uint256,uint256,address)': [\n 'Fund the account or lower the amount.',\n ],\n 'InsufficientFeeTokenBalance()': [\n 'Fund the account with the fee token, or pay fees with another token.',\n ],\n 'KeyAlreadyExists()': ['Use a new access key, or revoke the existing one.'],\n 'KeyAlreadyRevoked()': [\n 'Revoked access keys cannot be used or re-authorized. Authorize a new access key.',\n ],\n 'KeyExpired()': ['Authorize a new access key.'],\n 'KeyNotFound()': [\n 'Authorize the access key first, or authorize it in the same transaction with a key authorization.',\n ],\n 'PolicyForbids()': [\n 'The token transfer policy forbids this sender or recipient.',\n ],\n 'SpendingLimitExceeded()': [\n 'Raise the spending limit, or wait for a periodic limit to reset.',\n ],\n 'UnauthorizedCaller()': ['Sign with the root key or an admin access key.'],\n 'AmountExceedsDeposit()': [\n 'Top up the channel, or use a voucher for a smaller amount.',\n ],\n 'AmountNotIncreasing()': [\n 'Use a voucher with a higher cumulative amount than the amount already settled.',\n ],\n 'BelowMinimumOrderSize(uint128)': ['Place a larger order.'],\n 'ChannelNotFound()': [\n 'Check the channel details, or open the channel first.',\n ],\n 'CloseNotReady()': [\n 'Request a close, then wait for the grace period to end before withdrawing.',\n ],\n 'InsufficientBalance()': [\n 'Deposit more of the token, or lower the amount.',\n ],\n 'InsufficientLiquidity()': ['Use a smaller amount.'],\n 'InsufficientOutput()': [\n 'Lower the minimum output amount, or sell a smaller amount.',\n ],\n 'InsufficientReserves()': ['Use a smaller amount.'],\n 'InvalidExpiringNonceExpiry()': [\n 'Set the transaction expiry to a time in the near future.',\n ],\n 'InvalidFlipTick()': [\n 'Choose a flip tick on the correct side of the order tick.',\n ],\n 'MaxInputExceeded()': [\n 'Raise the maximum input amount, or buy a smaller amount.',\n ],\n 'OrderDoesNotExist()': [\n 'Check the order ID. Filled and cancelled orders no longer exist.',\n ],\n 'OrderNotStale()': [\n 'Only orders whose maker lost authorization can be cancelled as stale.',\n ],\n 'PairDoesNotExist()': ['Create the trading pair first.'],\n 'PolicyNotFound()': ['Check the policy ID, or create the policy first.'],\n 'SignatureTypeMismatch(uint8,uint8)': [\n 'Sign with the same key type the access key was authorized with.',\n ],\n 'SupplyCapExceeded()': ['Mint a smaller amount, or raise the supply cap.'],\n 'TickOutOfBounds(int16)': ['Use a tick within the allowed range.'],\n 'Unauthorized()': ['The account lacks the permission this call requires.'],\n 'AccountAlreadyConfigurable()': [\n 'The account is already configurable. Rotate its owners with `updateConfig` instead.',\n ],\n 'AccountHasCode()': [\n 'Only accounts without code or delegation can be upgraded in place.',\n ],\n 'PrimitiveRootRequired()': [\n \"Send the upgrade from the account's root key, not an access key or another account.\",\n ],\n 'RootKeyRetired(address)': [\n 'The account was upgraded to a configurable account. Sign with its owners instead of the retired root key.',\n ],\n 'UnauthorizedConfigurableAccountCaller()': [\n 'Only the configurable account can update its own configuration.',\n ],\n 'UpgradeMustBeOnlyCall()': [\n 'Send `upgradeAccount` as the only call, without a key authorization or authorization list.',\n ],\n};\n/** Interpolate `{0}`, `{1}`, … placeholders with args. */\nfunction interpolate(template, args) {\n if (!args)\n return template;\n return template.replace(/\\{(\\d+)\\}/g, (_, i) => {\n const v = args[Number(i)];\n return v === undefined ? `{${i}}` : String(v);\n });\n}\nexport function from(error) {\n const source = typeof error === 'string'\n ? { data: error, message: 'Unknown execution error.' }\n : error;\n const decoded = parse(source);\n const descriptors = Object.getOwnPropertyDescriptors(source);\n // Native stack accessors depend on the original error's internal state.\n if ('stack' in source)\n descriptors.stack = {\n configurable: descriptors.stack?.configurable ?? true,\n enumerable: descriptors.stack?.enumerable ?? false,\n value: source.stack,\n writable: descriptors.stack?.writable ?? true,\n };\n for (const [key, descriptor] of Object.entries(Object.getOwnPropertyDescriptors(decoded)))\n descriptors[key] = {\n ...descriptor,\n enumerable: descriptors[key]?.enumerable ?? true,\n };\n return Object.create(Object.getPrototypeOf(source), descriptors);\n}\n/**\n * Selects execution metadata for JSON serialization.\n *\n * Omits decoded arguments and original error properties, including the stack and cause.\n *\n * @example\n * ```ts\n * import { ExecutionError } from 'viem/tempo'\n *\n * const error = ExecutionError.from(new Error('execution reverted: failed'))\n * const rpc = ExecutionError.serialize(error)\n * // { errorName: 'unknown', message: 'failed' }\n * ```\n *\n * @param preimage - Decorated execution error.\n * @returns Execution error without decoded arguments.\n */\nexport function serialize(preimage) {\n if (preimage.errorName === 'unknown')\n return { errorName: 'unknown', message: preimage.message };\n return {\n errorName: preimage.errorName,\n abiItem: preimage.abiItem,\n message: preimage.message,\n data: preimage.data,\n };\n}\nfunction extractRevertData(error, seen = new Set()) {\n if (!error || typeof error !== 'object' || seen.has(error))\n return null;\n seen.add(error);\n const e = error;\n if (typeof e.data === 'string' && /^0x(?:[\\da-f]{2})*$/i.test(e.data))\n return e.data;\n for (const inner of [e.data, e.cause, e.error]) {\n const data = extractRevertData(inner, seen);\n if (data)\n return data;\n }\n if (typeof e.walk === 'function') {\n const inner = e.walk((e) => typeof e.data === 'string');\n if (inner)\n return extractRevertData(inner, seen);\n }\n return null;\n}\nfunction parse(error) {\n const raw = error.details ??\n error.shortMessage ??\n error.message;\n const data = extractRevertData(error);\n if (data) {\n try {\n const decoded = decodeErrorResult({ abi: Abis.coreErrors, data });\n const template = messages[formatAbiItem(decoded.abiItem)];\n return {\n ...decoded,\n data,\n message: template\n ? interpolate(template, decoded.args)\n : raw.replace(/^execution reverted:\\s*/i, ''),\n };\n }\n catch {\n if (data.length === 10) {\n const abiItem = Abis.coreErrors.find((item) => item.type === 'error' &&\n toFunctionSelector(formatAbiItem(item)) === data.toLowerCase());\n if (abiItem?.type === 'error')\n return {\n abiItem,\n args: undefined,\n data,\n errorName: abiItem.name,\n message: messages[formatAbiItem(abiItem)],\n };\n }\n }\n }\n // Nodes print zero-argument errors as `Name(Name)`, whose revert data is the selector alone.\n const debugMatch = /\\b(\\w+)\\(\\1\\)/.exec(raw);\n const abiItem = debugMatch\n ? Abis.coreErrors.find((item) => item.name === debugMatch[1] && item.inputs.length === 0)\n : undefined;\n if (abiItem)\n return {\n abiItem,\n args: undefined,\n data: toFunctionSelector(formatAbiItem(abiItem)),\n errorName: abiItem.name,\n message: messages[formatAbiItem(abiItem)],\n };\n // Human-readable names cannot distinguish overloads with different templates.\n const nameMatch = /:\\s*(\\w+)\\(([^)]*)\\)/.exec(raw);\n if (nameMatch) {\n const templates = Object.entries(messages).filter(([signature]) => signature.startsWith(`${nameMatch[1]}(`));\n const template = nameMatch[2] === ''\n ? messages[`${nameMatch[1]}()`]\n : templates.length === 1\n ? templates[0]?.[1]\n : undefined;\n if (template)\n return { errorName: 'unknown', message: template };\n }\n return {\n errorName: 'unknown',\n message: raw.replace(/^execution reverted:\\s*/i, ''),\n };\n}\n//# sourceMappingURL=ExecutionError.js.map"],"ignoreList":[0,1,2,3,4,5,6,7,8],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ExecutionError-DoRNvh3D.js","names":["serialize","Hash.keccak256","Hex.fromString","Value.from","Abis.tip20","internal_Token.toBaseUnits","Hex.padLeft","Addresses.pathUsd","Hex.random","Addresses.tip20Factory","Abis.tip20Factory","internal_Token.toAmount","TokenId.fromAddress","TokenRole.serialize","Addresses.tip403Registry","Abis.tip403Registry","Abis.coreErrors","tip20Factory","pathUsd","tip403Registry$1","sendTransaction","coreErrors","parseEventLogs","fromAddress","formatUnits","tip20Factory$1","getAction","AccountNotFoundError","readContract","isTip20","resolveToken","estimateGas","findDeclaredToken","tip403Registry","resolveTokenWithDecimals","TempoExecutionError","pickWriteParameters","withExecutionError","getContractError","writeContract","defineCall","resolveCallParameters","formatAmount","tip20","padLeft","random","fromString","keccak256","AbiDecodingZeroDataError","RawContractError","decodeErrorResult","parseAccount","decodeFunctionResult","getChainContractAddress","stringify","multicall3Abi","createBatchScheduler","formatAbiItem","toFunctionSelector","BaseError","from$1","call","multicall3Bytecode","encodeFunctionData","toPreHashed","serialize$1","role","estimateContractGas","client","request","parameters","data","dataSuffix","address","error","account","simulateContract","callRequest","calldata","abi","abiItem","parseUnits","value","decimals","multicall","contracts","batch","batchSize","deployless","multicallAddress","chunkedCalls","currentChunk","currentChunkSize","i","callData","err","allowFailure","batching","batches","calls","aggregate3Results","scheduleMulticall","result","results","j","aggregate3Result","success","returnData","rest","size","schedule","zeroAddress","toAmount","amount","toBaseUnits","resolved","requireTokenDecimals","approve","inner","action","args","spender","simulate","extractEvent","log","burnBlocked","from","burn","callArgs","memo","changeTransferPolicy","policyId","create","admin_","admin","logoURI","name","symbol","currency","quoteToken","salt","getAllowance","getBalance","account_","getMetadata","declared","token","overrides","readMetadataContracts","totalSupply","unwrapMulticallResult","paused","supplyCap","transferPolicyId","contract","fallback","response","getTotalSupply","getRoleAdmin","hasRole","grantRoles","roleHash","to","extractEvents","events","mint","pause","renounceRoles","revokeRoles","_","setSupplyCap","setRoleAdmin","adminRoleHash","adminRole","transfer","unpause","prepareUpdateQuoteToken","updateQuoteToken","TokenInsufficientBalanceError","available","required","TokenInsufficientAllowanceError","allowance","owner","TokenSupplyCapExceededError","TokenPolicyForbidsError","party","senderAuthorized","recipientAuthorized","TokenPausedError","TokenUnauthorizedError","requiredRoles","errorResolvers","base","context","signer","registry","sender","recipient","messages","hints","interpolate","template","v","source","decoded","parse","descriptors","key","descriptor","serialize","preimage","extractRevertData","seen","e","raw","item","debugMatch","nameMatch","templates","signature"],"sources":["../../../../../node_modules/.pnpm/ox@0.14.57_typescript@7.0.2_zod@4.6.7/node_modules/ox/_esm/tempo/TokenRole.js","../../../../../node_modules/.pnpm/viem@2.57.10_typescript@7.0.2_zod@4.6.7/node_modules/viem/_esm/actions/public/estimateContractGas.js","../../../../../node_modules/.pnpm/viem@2.57.10_typescript@7.0.2_zod@4.6.7/node_modules/viem/_esm/actions/public/simulateContract.js","../../../../../node_modules/.pnpm/viem@2.57.10_typescript@7.0.2_zod@4.6.7/node_modules/viem/_esm/utils/unit/parseUnits.js","../../../../../node_modules/.pnpm/viem@2.57.10_typescript@7.0.2_zod@4.6.7/node_modules/viem/_esm/actions/public/multicall.js","../../../../../node_modules/.pnpm/viem@2.57.10_typescript@7.0.2_zod@4.6.7/node_modules/viem/_esm/constants/address.js","../../../../../node_modules/.pnpm/viem@2.57.10_typescript@7.0.2_zod@4.6.7/node_modules/viem/_esm/actions/token/internal.js","../../../../../node_modules/.pnpm/viem@2.57.10_typescript@7.0.2_zod@4.6.7/node_modules/viem/_esm/tempo/actions/token.js","../../../../../node_modules/.pnpm/viem@2.57.10_typescript@7.0.2_zod@4.6.7/node_modules/viem/_esm/tempo/ExecutionError.js"],"sourcesContent":["import * as Hash from '../core/Hash.js';\nimport * as Hex from '../core/Hex.js';\nexport const roles = [\n 'defaultAdmin',\n 'pause',\n 'unpause',\n 'issuer',\n 'burnBlocked',\n 'burnAt',\n];\nexport const toPreHashed = {\n defaultAdmin: 'DEFAULT_ADMIN_ROLE',\n pause: 'PAUSE_ROLE',\n unpause: 'UNPAUSE_ROLE',\n issuer: 'ISSUER_ROLE',\n burnBlocked: 'BURN_BLOCKED_ROLE',\n burnAt: 'BURN_AT_ROLE',\n};\n/**\n * Serializes a token role to its keccak256 hash representation.\n *\n * TIP-20 includes a built-in RBAC system with roles like `ISSUER_ROLE` (mint/burn),\n * `PAUSE_ROLE`/`UNPAUSE_ROLE` (emergency controls), `BURN_BLOCKED_ROLE` (compliance), and\n * `BURN_AT_ROLE` (burn from any unprotected account, T12+).\n *\n * [TIP-20 RBAC](https://docs.tempo.xyz/protocol/tip20/overview#role-based-access-control-rbac)\n *\n * @example\n * ```ts twoslash\n * import { TokenRole } from 'ox/tempo'\n *\n * const hash = TokenRole.serialize('issuer')\n * ```\n *\n * @param role - The token role to serialize.\n * @returns The keccak256 hash of the role.\n */\nexport function serialize(role) {\n if (role === 'defaultAdmin')\n return '0x0000000000000000000000000000000000000000000000000000000000000000';\n return Hash.keccak256(Hex.fromString(toPreHashed[role] ?? role));\n}\n//# sourceMappingURL=TokenRole.js.map","import { parseAccount, } from '../../accounts/utils/parseAccount.js';\nimport { encodeFunctionData, } from '../../utils/abi/encodeFunctionData.js';\nimport { getContractError, } from '../../utils/errors/getContractError.js';\nimport { getAction } from '../../utils/getAction.js';\nimport { estimateGas, } from './estimateGas.js';\n/**\n * Estimates the gas required to successfully execute a contract write function call.\n *\n * - Docs: https://viem.sh/docs/contract/estimateContractGas\n *\n * Internally, uses a [Public Client](https://viem.sh/docs/clients/public) to call the [`estimateGas` action](https://viem.sh/docs/actions/public/estimateGas) with [ABI-encoded `data`](https://viem.sh/docs/contract/encodeFunctionData).\n *\n * @param client - Client to use\n * @param parameters - {@link EstimateContractGasParameters}\n * @returns The gas estimate (in wei). {@link EstimateContractGasReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { estimateContractGas } from 'viem/contract'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const gas = await estimateContractGas(client, {\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * abi: parseAbi(['function mint() public']),\n * functionName: 'mint',\n * account: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',\n * })\n */\nexport async function estimateContractGas(client, parameters) {\n const { abi, address, args, functionName, dataSuffix = typeof client.dataSuffix === 'string'\n ? client.dataSuffix\n : client.dataSuffix?.value, ...request } = parameters;\n const data = encodeFunctionData({\n abi,\n args,\n functionName,\n });\n try {\n const gas = await getAction(client, estimateGas, 'estimateGas')({\n data: `${data}${dataSuffix ? dataSuffix.replace('0x', '') : ''}`,\n to: address,\n ...request,\n });\n return gas;\n }\n catch (error) {\n const account = request.account ? parseAccount(request.account) : undefined;\n throw getContractError(error, {\n abi,\n address,\n args,\n docsPath: '/docs/contract/estimateContractGas',\n functionName,\n sender: account?.address,\n });\n }\n}\n//# sourceMappingURL=estimateContractGas.js.map","import { parseAccount, } from '../../accounts/utils/parseAccount.js';\nimport { decodeFunctionResult, } from '../../utils/abi/decodeFunctionResult.js';\nimport { encodeFunctionData, } from '../../utils/abi/encodeFunctionData.js';\nimport { getContractError, } from '../../utils/errors/getContractError.js';\nimport { getAction } from '../../utils/getAction.js';\nimport { call } from './call.js';\n/**\n * Simulates/validates a contract interaction. This is useful for retrieving **return data** and **revert reasons** of contract write functions.\n *\n * - Docs: https://viem.sh/docs/contract/simulateContract\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/contracts_writing-to-contracts\n *\n * This function does not require gas to execute and _**does not**_ change the state of the blockchain. It is almost identical to [`readContract`](https://viem.sh/docs/contract/readContract), but also supports contract write functions.\n *\n * Internally, uses a [Public Client](https://viem.sh/docs/clients/public) to call the [`call` action](https://viem.sh/docs/actions/public/call) with [ABI-encoded `data`](https://viem.sh/docs/contract/encodeFunctionData).\n *\n * @param client - Client to use\n * @param parameters - {@link SimulateContractParameters}\n * @returns The simulation result and write request. {@link SimulateContractReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { simulateContract } from 'viem/contract'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const result = await simulateContract(client, {\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * abi: parseAbi(['function mint(uint32) view returns (uint32)']),\n * functionName: 'mint',\n * args: ['69420'],\n * account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * })\n */\nexport async function simulateContract(client, parameters) {\n const { abi, address, args, functionName, dataSuffix = typeof client.dataSuffix === 'string'\n ? client.dataSuffix\n : client.dataSuffix?.value, ...callRequest } = parameters;\n const account = callRequest.account\n ? parseAccount(callRequest.account)\n : client.account;\n const calldata = encodeFunctionData({ abi, args, functionName });\n try {\n const { data } = await getAction(client, call, 'call')({\n batch: false,\n data: `${calldata}${dataSuffix ? dataSuffix.replace('0x', '') : ''}`,\n to: address,\n ...callRequest,\n account,\n });\n const result = decodeFunctionResult({\n abi,\n args,\n functionName,\n data: data || '0x',\n });\n const minimizedAbi = abi.filter((abiItem) => 'name' in abiItem && abiItem.name === parameters.functionName);\n return {\n result,\n request: {\n abi: minimizedAbi,\n address,\n args,\n dataSuffix,\n functionName,\n ...callRequest,\n account,\n },\n };\n }\n catch (error) {\n throw getContractError(error, {\n abi,\n address,\n args,\n docsPath: '/docs/contract/simulateContract',\n functionName,\n sender: account?.address,\n });\n }\n}\n//# sourceMappingURL=simulateContract.js.map","import * as Value from './Value.js';\n/**\n * Multiplies a string representation of a number by a given exponent of base 10 (10exponent).\n *\n * - Docs: https://viem.sh/docs/utilities/parseUnits\n *\n * @example\n * import { parseUnits } from 'viem'\n *\n * parseUnits('420', 9)\n * // 420000000000n\n */\nexport function parseUnits(value, decimals) {\n return Value.from(value, decimals);\n}\n//# sourceMappingURL=parseUnits.js.map","import { multicall3Abi } from '../../constants/abis.js';\nimport { multicall3Bytecode } from '../../constants/contracts.js';\nimport { AbiDecodingZeroDataError } from '../../errors/abi.js';\nimport { BaseError } from '../../errors/base.js';\nimport { RawContractError } from '../../errors/contract.js';\nimport { decodeFunctionResult, } from '../../utils/abi/decodeFunctionResult.js';\nimport { encodeFunctionData, } from '../../utils/abi/encodeFunctionData.js';\nimport { getChainContractAddress, } from '../../utils/chain/getChainContractAddress.js';\nimport { getContractError, } from '../../utils/errors/getContractError.js';\nimport { getAction } from '../../utils/getAction.js';\nimport { createBatchScheduler, } from '../../utils/promise/createBatchScheduler.js';\nimport { stringify } from '../../utils/stringify.js';\nimport { readContract } from './readContract.js';\n/**\n * Similar to [`readContract`](https://viem.sh/docs/contract/readContract), but batches up multiple functions on a contract in a single RPC call via the [`multicall3` contract](https://github.com/mds1/multicall).\n *\n * - Docs: https://viem.sh/docs/contract/multicall\n *\n * @param client - Client to use\n * @param parameters - {@link MulticallParameters}\n * @returns An array of results with accompanying status. {@link MulticallReturnType}\n *\n * @example\n * import { createPublicClient, http, parseAbi } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { multicall } from 'viem/contract'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const abi = parseAbi([\n * 'function balanceOf(address) view returns (uint256)',\n * 'function totalSupply() view returns (uint256)',\n * ])\n * const results = await multicall(client, {\n * contracts: [\n * {\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * abi,\n * functionName: 'balanceOf',\n * args: ['0xA0Cf798816D4b9b9866b5330EEa46a18382f251e'],\n * },\n * {\n * address: '0xFBA3912Ca04dd458c843e2EE08967fC04f3579c2',\n * abi,\n * functionName: 'totalSupply',\n * },\n * ],\n * })\n * // [{ result: 424122n, status: 'success' }, { result: 1000000n, status: 'success' }]\n */\nexport async function multicall(client, parameters) {\n const { account, authorizationList, allowFailure = true, blockHash, blockNumber, blockOverrides, blockTag, requireCanonical, stateOverride, } = parameters;\n const contracts = parameters.contracts;\n const batch = typeof client.batch?.multicall === 'object' ? client.batch.multicall : {};\n const batchSize = parameters.batchSize ?? batch.batchSize ?? 1024;\n const deployless = parameters.deployless ?? batch.deployless ?? false;\n const multicallAddress = (() => {\n if (parameters.multicallAddress)\n return parameters.multicallAddress;\n if (deployless)\n return null;\n if (client.chain) {\n return getChainContractAddress({\n blockNumber,\n chain: client.chain,\n contract: 'multicall3',\n });\n }\n throw new Error('client chain not configured. multicallAddress is required.');\n })();\n const chunkedCalls = [[]];\n let currentChunk = 0;\n let currentChunkSize = 0;\n for (let i = 0; i < contracts.length; i++) {\n const { abi, address, args, functionName } = contracts[i];\n try {\n const callData = encodeFunctionData({ abi, args, functionName });\n currentChunkSize += (callData.length - 2) / 2;\n // Check to see if we need to create a new chunk.\n if (\n // Check if batching is enabled.\n batchSize > 0 &&\n // Check if the current size of the batch exceeds the size limit.\n currentChunkSize > batchSize &&\n // Check if the current chunk is not already empty.\n chunkedCalls[currentChunk].length > 0) {\n currentChunk++;\n currentChunkSize = (callData.length - 2) / 2;\n chunkedCalls[currentChunk] = [];\n }\n chunkedCalls[currentChunk] = [\n ...chunkedCalls[currentChunk],\n {\n allowFailure: true,\n callData,\n target: address,\n },\n ];\n }\n catch (err) {\n const error = getContractError(err, {\n abi,\n address,\n args,\n docsPath: '/docs/contract/multicall',\n functionName,\n sender: account,\n });\n if (!allowFailure)\n throw error;\n chunkedCalls[currentChunk] = [\n ...chunkedCalls[currentChunk],\n {\n allowFailure: true,\n callData: '0x',\n target: address,\n },\n ];\n }\n }\n const batching = Boolean(client.batch?.multicall);\n const batches = batching\n ? chunkedCalls.flatMap((calls) => calls.map((call) => [call]))\n : chunkedCalls;\n const aggregate3Results = await Promise.allSettled(batches.map((calls) => {\n if (batching)\n return scheduleMulticall(client, {\n account,\n authorizationList,\n batchSize,\n blockHash,\n blockNumber,\n blockOverrides,\n blockTag,\n call: calls[0],\n multicallAddress,\n requireCanonical,\n stateOverride,\n }).then((result) => [result]);\n return getAction(client, readContract, 'readContract')({\n ...(multicallAddress === null\n ? { code: multicall3Bytecode }\n : { address: multicallAddress }),\n abi: multicall3Abi,\n account,\n args: [calls],\n authorizationList,\n blockHash,\n blockNumber,\n blockOverrides,\n blockTag,\n functionName: 'aggregate3',\n requireCanonical,\n stateOverride,\n });\n }));\n const results = [];\n for (let i = 0; i < aggregate3Results.length; i++) {\n const result = aggregate3Results[i];\n // If an error occurred in a `readContract` invocation (ie. network error),\n // then append the failure reason to each contract result.\n if (result.status === 'rejected') {\n if (!allowFailure)\n throw result.reason;\n for (let j = 0; j < batches[i].length; j++) {\n results.push({\n status: 'failure',\n error: result.reason,\n result: undefined,\n });\n }\n continue;\n }\n // If the `readContract` call was successful, then decode the results.\n const aggregate3Result = result.value;\n for (let j = 0; j < aggregate3Result.length; j++) {\n // Extract the response from `readContract`\n const { returnData, success } = aggregate3Result[j];\n // Extract the request call data from the original call.\n const { callData } = batches[i][j];\n // Extract the contract config for this call from the `contracts` argument\n // for decoding.\n const { abi, address, functionName, args } = contracts[results.length];\n try {\n if (callData === '0x')\n throw new AbiDecodingZeroDataError();\n if (!success)\n throw new RawContractError({ data: returnData });\n const result = decodeFunctionResult({\n abi,\n args,\n data: returnData,\n functionName,\n });\n results.push(allowFailure ? { result, status: 'success' } : result);\n }\n catch (err) {\n const error = getContractError(err, {\n abi,\n address,\n args,\n docsPath: '/docs/contract/multicall',\n functionName,\n });\n if (!allowFailure)\n throw error;\n results.push({ error, result: undefined, status: 'failure' });\n }\n }\n }\n if (results.length !== contracts.length)\n throw new BaseError('multicall results mismatch');\n return results;\n}\nasync function scheduleMulticall(client, parameters) {\n const { batchSize, call, multicallAddress, ...rest } = parameters;\n const { wait = 0 } = typeof client.batch?.multicall === 'object' ? client.batch.multicall : {};\n const { schedule } = createBatchScheduler({\n id: stringify(['multicall', client.uid, batchSize, multicallAddress, rest]),\n wait,\n shouldSplitBatch(calls) {\n if (batchSize === 0)\n return false;\n const size = calls.reduce((size, { callData }) => size + (callData.length - 2) / 2, 0);\n return size > batchSize;\n },\n fn: (calls) => getAction(client, readContract, 'readContract')({\n ...(multicallAddress === null\n ? { code: multicall3Bytecode }\n : { address: multicallAddress }),\n ...rest,\n abi: multicall3Abi,\n args: [calls],\n functionName: 'aggregate3',\n }),\n });\n const [result] = await schedule(call);\n return result;\n}\n//# sourceMappingURL=multicall.js.map","export const ethAddress = '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee';\nexport const zeroAddress = '0x0000000000000000000000000000000000000000';\n//# sourceMappingURL=address.js.map","import { erc20Abi } from '../../constants/abis.js';\nimport { isAddress } from '../../utils/address/isAddress.js';\nimport { isAddressEqual } from '../../utils/address/isAddressEqual.js';\nimport { encodeFunctionData } from '../../utils/index.js';\nimport { formatUnits } from '../../utils/unit/formatUnits.js';\nimport { parseUnits } from '../../utils/unit/parseUnits.js';\nimport { readContract } from '../public/readContract.js';\n/**\n * Shapes a base-unit value into an {@link Amount} (base units, `decimals`, and\n * human-readable `formatted` string).\n *\n * @param amount - Amount in base units.\n * @param decimals - Token decimals used to format the amount.\n * @returns The {@link Amount}.\n */\nexport function toAmount(amount, decimals) {\n return { amount, decimals, formatted: formatUnits(amount, decimals) };\n}\n/**\n * Resolves a write amount to base units.\n *\n * @param amount - Base-unit amount, or formatted helper.\n * @param decimals - Token decimals used to parse formatted amounts.\n * @returns Amount in base units.\n */\nexport function toBaseUnits(amount, decimals) {\n if (typeof amount === 'bigint')\n return amount;\n const resolved = amount.decimals ?? decimals;\n return parseUnits(amount.formatted, requireTokenDecimals(resolved));\n}\n/**\n * Requires resolved token decimals for parsing or formatting amounts.\n *\n * @param decimals - Token decimals.\n * @returns Token decimals.\n * @internal\n */\nexport function requireTokenDecimals(decimals) {\n if (decimals === undefined)\n throw new Error('Token decimals are required. Pass `amount.decimals` or select a declared token.');\n return decimals;\n}\n/**\n * Resolves the decimals used for formatting a write amount.\n *\n * @param amount - Base-unit amount, or formatted helper.\n * @param decimals - Token decimals.\n * @returns Token decimals, overridden by the formatted helper when present.\n */\nexport function resolveAmountDecimals(amount, decimals) {\n if (typeof amount === 'bigint')\n return decimals;\n return amount.decimals ?? decimals;\n}\n/**\n * Resolves the token contract `address` and `decimals` from a `token`, which is\n * either the symbol of a token declared on the client's `tokens` array or a\n * contract `address`.\n *\n * When `token` is a declared symbol, the `address` and `decimals` are resolved\n * from the Client's `tokens` array for the Client's `chain.id` (`decimals` can\n * be overridden via the explicit `decimals`). When `token` is an address, its\n * `decimals` is inferred from the Client's `tokens` array when the address\n * matches a declared token, otherwise taken from the explicit `decimals`.\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The resolved `address` and `decimals`.\n */\nexport function resolveToken(client, parameters) {\n const { decimals, token } = parameters;\n const declared = findDeclaredToken(client, token);\n if (declared)\n return {\n address: declared.address,\n decimals: decimals ?? declared.decimals,\n };\n if (isAddress(token, { strict: false }))\n return {\n address: token,\n decimals: decimals ?? inferDecimals(client, token),\n };\n throw new Error(`Token \"${token}\" is not a declared ERC-20 token on the client's \\`tokens\\` array (with an address for the client's chain), and is not a valid address.`);\n}\n/**\n * Finds the declared token on the Client's `tokens` array matching `token`\n * (either a token symbol or contract `address`), resolved to a {@link ResolvedToken}\n * for the Client's `chain.id`. Returns `undefined` when no declared token\n * matches, or the matching token has no address for the Client's chain.\n *\n * @param client - Client.\n * @param token - Token symbol (declared on the client's `tokens` array) or contract address.\n * @returns The matching resolved token config, or `undefined`.\n */\nexport function findDeclaredToken(client, token) {\n const tokens = client.tokens;\n const chainId = client.chain?.id;\n if (!tokens || chainId === undefined)\n return undefined;\n const bySymbol = findTokenBySymbol(tokens, token);\n if (bySymbol)\n return resolveTokenForChain(bySymbol, chainId);\n if (isAddress(token, { strict: false }))\n for (const token_ of tokens) {\n const resolved = resolveTokenForChain(token_, chainId);\n if (resolved && isAddressEqual(resolved.address, token))\n return resolved;\n }\n return undefined;\n}\n/**\n * Resolves a {@link Token} to a {@link ResolvedToken} for `chainId`, or\n * `undefined` when the token has no address for `chainId`. @internal\n */\nfunction resolveTokenForChain(token, chainId) {\n const address = token.addresses[chainId];\n if (!address)\n return undefined;\n return {\n address,\n currency: token.currency,\n decimals: token.decimals,\n name: token.name,\n popular: token.popular,\n symbol: token.symbol,\n };\n}\n/** Finds a {@link Token} by symbol (case-insensitively) on a `tokens` array. @internal */\nfunction findTokenBySymbol(tokens, symbol) {\n const lowerSymbol = symbol.toLowerCase();\n for (const token of tokens) {\n if (token.symbol?.toLowerCase() === lowerSymbol)\n return token;\n }\n return undefined;\n}\n/**\n * Infers a token's `decimals` from the Client's `tokens` array by matching\n * `address` against each token's address for the Client's `chain.id`.\n * @internal\n */\nfunction inferDecimals(client, address) {\n const tokens = client.tokens;\n const chainId = client.chain?.id;\n if (tokens && chainId !== undefined)\n for (const token of tokens) {\n const resolved = resolveTokenForChain(token, chainId);\n if (resolved && isAddressEqual(resolved.address, address))\n return resolved.decimals;\n }\n return undefined;\n}\n/**\n * Resolves token decimals, fetching from the token contract when they are not\n * provided explicitly or declared on the client.\n * @internal\n */\nexport async function resolveTokenWithDecimals(client, parameters) {\n const { address, decimals } = resolveToken(client, parameters);\n if (decimals !== undefined)\n return { address, decimals };\n return {\n address,\n decimals: await readContract(client, {\n abi: erc20Abi,\n address,\n functionName: 'decimals',\n }),\n };\n}\n/**\n * Picks the transaction-override fields shared by write actions, so the\n * action-specific args (`token`, `amount`, `to`, etc.) don't leak into\n * `estimateContractGas` / `simulateContract` requests. @internal\n */\nexport function pickWriteParameters(parameters) {\n const { account, chain, gas, maxFeePerGas, maxPriorityFeePerGas, nonce } = parameters;\n return { account, chain, gas, maxFeePerGas, maxPriorityFeePerGas, nonce };\n}\nexport function defineCall(call) {\n return {\n ...call,\n data: encodeFunctionData(call),\n to: call.address,\n };\n}\n//# sourceMappingURL=internal.js.map","import * as Hex from 'ox/Hex';\nimport { TokenId, TokenRole } from 'ox/tempo';\nimport { parseAccount } from '../../accounts/utils/parseAccount.js';\nimport { estimateContractGas } from '../../actions/public/estimateContractGas.js';\nimport { multicall, } from '../../actions/public/multicall.js';\nimport { readContract, } from '../../actions/public/readContract.js';\nimport { simulateContract, } from '../../actions/public/simulateContract.js';\nimport { watchContractEvent } from '../../actions/public/watchContractEvent.js';\nimport * as internal_Token from '../../actions/token/internal.js';\nimport { sendTransaction } from '../../actions/wallet/sendTransaction.js';\nimport { sendTransactionSync, } from '../../actions/wallet/sendTransactionSync.js';\nimport { writeContract } from '../../actions/wallet/writeContract.js';\nimport { writeContractSync } from '../../actions/wallet/writeContractSync.js';\nimport { zeroAddress } from '../../constants/address.js';\nimport { AccountNotFoundError } from '../../errors/account.js';\nimport { encodeFunctionData } from '../../utils/abi/encodeFunctionData.js';\nimport { parseEventLogs } from '../../utils/abi/parseEventLogs.js';\nimport { formatUnits } from '../../utils/unit/formatUnits.js';\nimport * as Abis from '../Abis.js';\nimport * as Addresses from '../Addresses.js';\nimport { TempoExecutionError } from '../errors.js';\nimport { formatAmount, withExecutionError, } from '../internal/errors.js';\nimport { defineCall, findDeclaredToken, isTip20, pickWriteParameters, resolveCallParameters, resolveToken, resolveTokenWithDecimals, } from '../internal/utils.js';\n/**\n * Approves a spender to transfer TIP20 tokens on behalf of the caller.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.approve(client, {\n * spender: '0x...',\n * amount: 100n,\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction hash.\n */\nexport async function approve(client, parameters) {\n return approve.inner(writeContract, client, parameters);\n}\n(function (approve) {\n /** @internal */\n async function inner(action, client, parameters) {\n return (await withExecutionError(action)(client, {\n ...parameters,\n ...approve.call(client, parameters),\n }));\n }\n approve.inner = inner;\n /**\n * Defines a call to the `approve` function.\n *\n * Can be passed as a parameter to `estimateContractGas`, `simulateContract`,\n * `sendCalls`, `sendTransaction` (`calls`), or `multicall`. The token is\n * selected by `token`, which is either a TIP20 token id or a contract\n * `address`; `amount.decimals` is inferred from the client's declared\n * `tokens` when omitted.\n *\n * @param parameters - Client (optional), followed by the call arguments.\n * @returns The call.\n */\n function call(...parameters) {\n const [client, args] = resolveCallParameters(parameters);\n const { amount, spender, token } = args;\n const { address, decimals } = resolveToken(client, { token });\n return defineCall({\n address,\n abi: Abis.tip20,\n functionName: 'approve',\n args: [spender, internal_Token.toBaseUnits(amount, decimals)],\n });\n }\n approve.call = call;\n /**\n * Estimates the gas required to approve a spender. `amount.decimals` is\n * inferred from the client's declared `tokens` when omitted.\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The gas estimate.\n */\n async function estimateGas(client, parameters) {\n return estimateContractGas(client, {\n ...pickWriteParameters(parameters),\n ...approve.call(client, parameters),\n });\n }\n approve.estimateGas = estimateGas;\n /**\n * Simulates an approval of a spender. `amount.decimals` is inferred from\n * the client's declared `tokens` when omitted.\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The simulation result and write request.\n */\n async function simulate(client, parameters) {\n return simulateContract(client, {\n ...pickWriteParameters(parameters),\n ...approve.call(client, parameters),\n });\n }\n approve.simulate = simulate;\n /**\n * Extracts the `Approval` event from logs.\n *\n * @param logs - The logs.\n * @returns The `Approval` event.\n */\n function extractEvent(logs) {\n const [log] = parseEventLogs({\n abi: Abis.tip20,\n logs,\n eventName: 'Approval',\n });\n if (!log)\n throw new Error('`Approval` event not found.');\n return log;\n }\n approve.extractEvent = extractEvent;\n})(approve || (approve = {}));\n/**\n * Approves a spender to transfer TIP20 tokens on behalf of the caller.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.approveSync(client, {\n * spender: '0x...',\n * amount: 100n,\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction receipt and event data.\n */\nexport async function approveSync(client, parameters) {\n const { amount, token, throwOnReceiptRevert = true } = parameters;\n const { decimals } = resolveToken(client, { token });\n const resolved = internal_Token.resolveAmountDecimals(amount, decimals);\n const receipt = await approve.inner(writeContractSync, client, {\n ...parameters,\n throwOnReceiptRevert,\n });\n if (receipt.status === 'pending')\n return { receipt };\n const { args } = approve.extractEvent(receipt.logs);\n return {\n ...args,\n ...(resolved === undefined\n ? {}\n : { decimals: resolved, formatted: formatUnits(args.amount, resolved) }),\n receipt,\n };\n}\n/**\n * Burns TIP20 tokens from a blocked address.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.burnBlocked(client, {\n * from: '0x...',\n * amount: 100n,\n * token: '0x...',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction hash.\n */\nexport async function burnBlocked(client, parameters) {\n return burnBlocked.inner(writeContract, client, parameters);\n}\n(function (burnBlocked) {\n /** @internal */\n async function inner(action, client, parameters) {\n const { amount, from, token, ...rest } = parameters;\n const call = burnBlocked.call(client, { amount, from, token });\n return (await withExecutionError(action)(client, {\n ...rest,\n ...call,\n }));\n }\n burnBlocked.inner = inner;\n /**\n * Defines a call to the `burnBlocked` function.\n *\n * Can be passed as a parameter to:\n * - [`estimateContractGas`](https://viem.sh/docs/contract/estimateContractGas): estimate the gas cost of the call\n * - [`simulateContract`](https://viem.sh/docs/contract/simulateContract): simulate the call\n * - [`sendCalls`](https://viem.sh/docs/actions/wallet/sendCalls): send multiple calls\n *\n * @example\n * ```ts\n * import { createClient, http, walletActions } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * }).extend(walletActions)\n *\n * const { result } = await client.sendCalls({\n * calls: [\n * actions.token.burnBlocked.call(client, {\n * from: '0x20c0...beef',\n * amount: 100n,\n * token: '0x20c0...babe',\n * }),\n * ]\n * })\n * ```\n *\n * `amount.decimals` is inferred from the client's declared `tokens` when omitted.\n *\n * @param parameters - Client (optional), followed by the call arguments.\n * @returns The call.\n */\n function call(...parameters) {\n const [client, args] = resolveCallParameters(parameters);\n const { from, amount, token } = args;\n const { address, decimals } = resolveToken(client, { token });\n return defineCall({\n address,\n abi: Abis.tip20,\n functionName: 'burnBlocked',\n args: [from, internal_Token.toBaseUnits(amount, decimals)],\n });\n }\n burnBlocked.call = call;\n /**\n * Extracts the event from the logs.\n *\n * @param logs - Logs.\n * @returns The event.\n */\n function extractEvent(logs) {\n const [log] = parseEventLogs({\n abi: Abis.tip20,\n logs,\n eventName: 'BurnBlocked',\n });\n if (!log)\n throw new Error('`BurnBlocked` event not found.');\n return log;\n }\n burnBlocked.extractEvent = extractEvent;\n})(burnBlocked || (burnBlocked = {}));\n/**\n * Burns TIP20 tokens from a blocked address.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.burnBlockedSync(client, {\n * from: '0x...',\n * amount: 100n,\n * token: '0x...',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction receipt and event data.\n */\nexport async function burnBlockedSync(client, parameters) {\n const { throwOnReceiptRevert = true, ...rest } = parameters;\n const receipt = await burnBlocked.inner(writeContractSync, client, {\n ...rest,\n throwOnReceiptRevert,\n });\n if (receipt.status === 'pending')\n return { receipt };\n const { args } = burnBlocked.extractEvent(receipt.logs);\n return {\n ...args,\n receipt,\n };\n}\n/**\n * Burns TIP20 tokens from the caller's balance.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.burn(client, {\n * amount: 100n,\n * token: '0x...',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction hash.\n */\nexport async function burn(client, parameters) {\n return burn.inner(writeContract, client, parameters);\n}\n(function (burn) {\n /** @internal */\n async function inner(action, client, parameters) {\n const { amount, from, memo, token, ...rest } = parameters;\n const call = burn.call(client, { amount, from, memo, token });\n return (await withExecutionError(action)(client, {\n ...rest,\n ...call,\n }));\n }\n burn.inner = inner;\n /**\n * Defines a call to the `burn`, `burnWithMemo`, or `burnAt` function.\n *\n * Can be passed as a parameter to:\n * - [`estimateContractGas`](https://viem.sh/docs/contract/estimateContractGas): estimate the gas cost of the call\n * - [`simulateContract`](https://viem.sh/docs/contract/simulateContract): simulate the call\n * - [`sendCalls`](https://viem.sh/docs/actions/wallet/sendCalls): send multiple calls\n *\n * @example\n * ```ts\n * import { createClient, http, walletActions } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * }).extend(walletActions)\n *\n * const { result } = await client.sendCalls({\n * calls: [\n * actions.token.burn.call(client, {\n * amount: 100n,\n * token: '0x20c0...babe',\n * }),\n * ]\n * })\n * ```\n *\n * `amount.decimals` is inferred from the client's declared `tokens` when omitted.\n *\n * @param parameters - Client (optional), followed by the call arguments.\n * @returns The call.\n */\n function call(...parameters) {\n const [client, args] = resolveCallParameters(parameters);\n const { amount, from, memo, token } = args;\n const { address, decimals } = resolveToken(client, { token });\n const value = internal_Token.toBaseUnits(amount, decimals);\n if (from)\n return defineCall({\n address,\n abi: Abis.tip20,\n functionName: 'burnAt',\n args: [from, value],\n });\n const callArgs = memo\n ? {\n functionName: 'burnWithMemo',\n args: [value, Hex.padLeft(memo, 32)],\n }\n : {\n functionName: 'burn',\n args: [value],\n };\n return defineCall({\n address,\n abi: Abis.tip20,\n ...callArgs,\n });\n }\n burn.call = call;\n /**\n * Extracts the event from the logs.\n *\n * @param logs - Logs.\n * @returns The event.\n */\n function extractEvent(logs) {\n const [log] = parseEventLogs({\n abi: Abis.tip20,\n logs,\n eventName: ['Burn', 'BurnAt'],\n });\n if (!log)\n throw new Error('`Burn` or `BurnAt` event not found.');\n return log;\n }\n burn.extractEvent = extractEvent;\n})(burn || (burn = {}));\n/**\n * Burns TIP20 tokens from the caller's balance.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.burnSync(client, {\n * amount: 100n,\n * token: '0x...',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction receipt and event data.\n */\nexport async function burnSync(client, parameters) {\n const { throwOnReceiptRevert = true, ...rest } = parameters;\n const receipt = await burn.inner(writeContractSync, client, {\n ...rest,\n throwOnReceiptRevert,\n });\n if (receipt.status === 'pending')\n return { receipt };\n const { args } = burn.extractEvent(receipt.logs);\n return {\n ...args,\n receipt,\n };\n}\n/**\n * Changes the transfer policy ID for a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.changeTransferPolicy(client, {\n * token: '0x...',\n * policyId: 1n,\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction hash.\n */\nexport async function changeTransferPolicy(client, parameters) {\n return changeTransferPolicy.inner(writeContract, client, parameters);\n}\n(function (changeTransferPolicy) {\n /** @internal */\n async function inner(action, client, parameters) {\n const { policyId, token, ...rest } = parameters;\n const call = changeTransferPolicy.call(client, { policyId, token });\n return (await withExecutionError(action)(client, {\n ...rest,\n ...call,\n }));\n }\n changeTransferPolicy.inner = inner;\n /**\n * Defines a call to the `changeTransferPolicyId` function.\n *\n * Can be passed as a parameter to:\n * - [`estimateContractGas`](https://viem.sh/docs/contract/estimateContractGas): estimate the gas cost of the call\n * - [`simulateContract`](https://viem.sh/docs/contract/simulateContract): simulate the call\n * - [`sendCalls`](https://viem.sh/docs/actions/wallet/sendCalls): send multiple calls\n *\n * @example\n * ```ts\n * import { createClient, http, walletActions } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * }).extend(walletActions)\n *\n * const { result } = await client.sendCalls({\n * calls: [\n * actions.token.changeTransferPolicy.call(client, {\n * token: '0x20c0...babe',\n * policyId: 1n,\n * }),\n * ]\n * })\n * ```\n *\n * @param parameters - Client (optional), followed by the call arguments.\n * @returns The call.\n */\n function call(...parameters) {\n const [client, args] = resolveCallParameters(parameters);\n const { token, policyId } = args;\n return defineCall({\n address: resolveToken(client, { token }).address,\n abi: Abis.tip20,\n functionName: 'changeTransferPolicyId',\n args: [policyId],\n });\n }\n changeTransferPolicy.call = call;\n /**\n * Extracts the event from the logs.\n *\n * @param logs - Logs.\n * @returns The event.\n */\n function extractEvent(logs) {\n const [log] = parseEventLogs({\n abi: Abis.tip20,\n logs,\n eventName: 'TransferPolicyUpdate',\n });\n if (!log)\n throw new Error('`TransferPolicyUpdate` event not found.');\n return log;\n }\n changeTransferPolicy.extractEvent = extractEvent;\n})(changeTransferPolicy || (changeTransferPolicy = {}));\n/**\n * Changes the transfer policy ID for a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.changeTransferPolicySync(client, {\n * token: '0x...',\n * policyId: 1n,\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction receipt and event data.\n */\nexport async function changeTransferPolicySync(client, parameters) {\n const { throwOnReceiptRevert = true, ...rest } = parameters;\n const receipt = await changeTransferPolicy.inner(writeContractSync, client, {\n ...rest,\n throwOnReceiptRevert,\n });\n if (receipt.status === 'pending')\n return { receipt };\n const { args } = changeTransferPolicy.extractEvent(receipt.logs);\n return {\n ...args,\n receipt,\n };\n}\n/**\n * Creates a new TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.create(client, {\n * name: 'My Token',\n * symbol: 'MTK',\n * currency: 'USD',\n * logoURI: 'https://example.com/token.svg',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction hash.\n */\nexport async function create(client, parameters) {\n return create.inner(writeContract, client, parameters);\n}\n(function (create) {\n /** @internal */\n async function inner(action, client, parameters) {\n const { account = client.account, admin: admin_ = client.account, chain = client.chain, ...rest } = parameters;\n const admin = admin_ ? parseAccount(admin_) : undefined;\n if (!admin)\n throw new Error('admin is required.');\n const call = create.call(client, { ...rest, admin: admin.address });\n return (await withExecutionError(action)(client, {\n ...parameters,\n account,\n chain,\n ...call,\n }));\n }\n create.inner = inner;\n /**\n * Defines a call to the `createToken` function.\n *\n * Can be passed as a parameter to:\n * - [`estimateContractGas`](https://viem.sh/docs/contract/estimateContractGas): estimate the gas cost of the call\n * - [`simulateContract`](https://viem.sh/docs/contract/simulateContract): simulate the call\n * - [`sendCalls`](https://viem.sh/docs/actions/wallet/sendCalls): send multiple calls\n *\n * @example\n * ```ts\n * import { createClient, http, walletActions } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * }).extend(walletActions)\n *\n * const { result } = await client.sendCalls({\n * calls: [\n * actions.token.create.call(client, {\n * name: 'My Token',\n * symbol: 'MTK',\n * currency: 'USD',\n * logoURI: 'https://example.com/token.svg',\n * admin: '0xfeed...fede',\n * }),\n * ]\n * })\n * ```\n *\n * @param parameters - Client (optional), followed by the call arguments.\n * @returns The call.\n */\n function call(...parameters) {\n const [client, args] = resolveCallParameters(parameters);\n const { name, symbol, currency, logoURI, quoteToken = Addresses.pathUsd, admin, salt = Hex.random(32), } = args;\n return defineCall({\n address: Addresses.tip20Factory,\n abi: Abis.tip20Factory,\n args: typeof logoURI === 'string'\n ? [\n name,\n symbol,\n currency,\n resolveToken(client, { token: quoteToken }).address,\n admin,\n salt,\n logoURI,\n ]\n : [\n name,\n symbol,\n currency,\n resolveToken(client, { token: quoteToken }).address,\n admin,\n salt,\n ],\n functionName: 'createToken',\n });\n }\n create.call = call;\n /**\n * Extracts the `TokenCreated` event from logs.\n *\n * @param logs - The logs.\n * @returns The `TokenCreated` event.\n */\n function extractEvent(logs) {\n const [log] = parseEventLogs({\n abi: Abis.tip20Factory,\n logs,\n eventName: 'TokenCreated',\n strict: true,\n });\n if (!log)\n throw new Error('`TokenCreated` event not found.');\n return log;\n }\n create.extractEvent = extractEvent;\n})(create || (create = {}));\n/**\n * Creates a new TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.createSync(client, {\n * name: 'My Token',\n * symbol: 'MTK',\n * currency: 'USD',\n * logoURI: 'https://example.com/token.svg',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction receipt and event data.\n */\nexport async function createSync(client, parameters) {\n const { throwOnReceiptRevert = true, ...rest } = parameters;\n const receipt = await create.inner(writeContractSync, client, {\n ...rest,\n throwOnReceiptRevert,\n });\n if (receipt.status === 'pending')\n return { receipt };\n const { args } = create.extractEvent(receipt.logs);\n const tokenId = TokenId.fromAddress(args.token);\n return {\n ...args,\n receipt,\n tokenId,\n };\n}\n/**\n * Gets TIP20 token allowance.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const allowance = await Actions.token.getAllowance(client, {\n * account: '0x...',\n * spender: '0x...',\n * token: '0x...',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The token allowance, in base units and human-readable form.\n */\nexport async function getAllowance(client, parameters) {\n const { account, decimals, spender, token, ...rest } = parameters;\n const [amount, { decimals: resolved }] = await Promise.all([\n withExecutionError(readContract)(client, {\n ...rest,\n ...getAllowance.call(client, { account, spender, token }),\n }),\n resolveTokenWithDecimals(client, {\n decimals,\n token,\n }),\n ]);\n return internal_Token.toAmount(amount, resolved);\n}\n(function (getAllowance) {\n /**\n * Defines a call to the `allowance` function.\n *\n * Can be passed as a parameter to `multicall`, `simulateContract`, or any\n * other action that accepts a contract call. The token is selected by `token`,\n * which is either a TIP20 token id or a contract address.\n *\n * @param parameters - Client (optional), followed by the call arguments.\n * @returns The call.\n */\n function call(...parameters) {\n const [client, args] = resolveCallParameters(parameters);\n return defineCall({\n address: resolveToken(client, args).address,\n abi: Abis.tip20,\n functionName: 'allowance',\n args: [args.account, args.spender],\n });\n }\n getAllowance.call = call;\n})(getAllowance || (getAllowance = {}));\n/**\n * Gets TIP20 token balance for an address.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const balance = await Actions.token.getBalance(client, {\n * account: '0x...',\n * token: '0x...',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The token balance, in base units and human-readable form.\n */\nexport async function getBalance(client, parameters) {\n const { account: account_ = client.account, decimals, token, ...rest } = parameters;\n if (!account_)\n throw new AccountNotFoundError();\n const account = parseAccount(account_).address;\n const [amount, { decimals: resolved }] = await Promise.all([\n withExecutionError(readContract)(client, {\n ...rest,\n ...getBalance.call(client, { account, token }),\n }),\n resolveTokenWithDecimals(client, {\n decimals,\n token,\n }),\n ]);\n return internal_Token.toAmount(amount, resolved);\n}\n(function (getBalance) {\n /**\n * Defines a call to the `balanceOf` function.\n *\n * Can be passed as a parameter to `multicall`, `simulateContract`, or any\n * other action that accepts a contract call. The token is selected by `token`,\n * which is either a TIP20 token id or a contract address.\n *\n * @param parameters - Client (optional), followed by the call arguments.\n * @returns The call.\n */\n function call(...parameters) {\n const [client, args] = resolveCallParameters(parameters);\n const account_ = args.account ?? client?.account;\n if (!account_)\n throw new AccountNotFoundError();\n const account = parseAccount(account_).address;\n return defineCall({\n address: resolveToken(client, args).address,\n abi: Abis.tip20,\n functionName: 'balanceOf',\n args: [account],\n });\n }\n getBalance.call = call;\n})(getBalance || (getBalance = {}));\n/**\n * Gets TIP20 token metadata including name, symbol, logo URI, currency, decimals, and total supply.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const metadata = await Actions.token.getMetadata(client, {\n * token: '0x...',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The token metadata.\n */\nexport async function getMetadata(client, parameters) {\n const { token, ...rest } = parameters;\n const { address } = resolveToken(client, { token });\n const abi = Abis.tip20;\n const declared = findDeclaredToken(client, token);\n const overrides = {\n ...(declared?.decimals != null ? { decimals: declared.decimals } : {}),\n ...(declared?.name != null ? { name: declared.name } : {}),\n ...(declared?.symbol != null ? { symbol: declared.symbol } : {}),\n };\n if (TokenId.fromAddress(address) === TokenId.fromAddress(Addresses.pathUsd))\n return readMetadataContracts(client, {\n ...rest,\n contracts: [\n {\n address,\n abi,\n functionName: 'currency',\n },\n {\n address,\n abi,\n functionName: 'decimals',\n },\n {\n address,\n abi,\n functionName: 'logoURI',\n },\n {\n address,\n abi,\n functionName: 'name',\n },\n {\n address,\n abi,\n functionName: 'symbol',\n },\n {\n address,\n abi,\n functionName: 'totalSupply',\n },\n ],\n }).then(([currency, decimals, logoURI, name, symbol, totalSupply]) => ({\n name: unwrapMulticallResult(name),\n symbol: unwrapMulticallResult(symbol),\n currency: unwrapMulticallResult(currency),\n decimals: unwrapMulticallResult(decimals),\n logoURI: unwrapMulticallResult(logoURI, ''),\n totalSupply: unwrapMulticallResult(totalSupply),\n ...overrides,\n }));\n return readMetadataContracts(client, {\n ...rest,\n contracts: [\n {\n address,\n abi,\n functionName: 'currency',\n },\n {\n address,\n abi,\n functionName: 'decimals',\n },\n {\n address,\n abi,\n functionName: 'logoURI',\n },\n {\n address,\n abi,\n functionName: 'quoteToken',\n },\n {\n address,\n abi,\n functionName: 'name',\n },\n {\n address,\n abi,\n functionName: 'paused',\n },\n {\n address,\n abi,\n functionName: 'supplyCap',\n },\n {\n address,\n abi,\n functionName: 'symbol',\n },\n {\n address,\n abi,\n functionName: 'totalSupply',\n },\n {\n address,\n abi,\n functionName: 'transferPolicyId',\n },\n ],\n }).then(([currency, decimals, logoURI, quoteToken, name, paused, supplyCap, symbol, totalSupply, transferPolicyId,]) => ({\n name: unwrapMulticallResult(name),\n symbol: unwrapMulticallResult(symbol),\n currency: unwrapMulticallResult(currency),\n decimals: unwrapMulticallResult(decimals),\n logoURI: unwrapMulticallResult(logoURI, ''),\n quoteToken: unwrapMulticallResult(quoteToken),\n totalSupply: unwrapMulticallResult(totalSupply),\n paused: unwrapMulticallResult(paused),\n supplyCap: unwrapMulticallResult(supplyCap),\n transferPolicyId: unwrapMulticallResult(transferPolicyId),\n ...overrides,\n }));\n}\nasync function readMetadataContracts(client, parameters) {\n // Preserve the action's deployless default unless the client overrides it.\n if (client.batch?.multicall === undefined)\n return multicall(client, {\n ...parameters,\n allowFailure: true,\n deployless: true,\n });\n const { contracts, ...rest } = parameters;\n const results = await Promise.allSettled(contracts.map((contract) => withExecutionError(readContract)(client, {\n ...rest,\n ...contract,\n })));\n return results.map((result) => result.status === 'fulfilled'\n ? { result: result.value, status: 'success' }\n : { error: result.reason, status: 'failure' });\n}\nfunction unwrapMulticallResult(response, ...fallback) {\n if (response.status === 'failure') {\n if (fallback.length > 0)\n return fallback[0];\n throw response.error;\n }\n return response.result;\n}\n/**\n * Gets the total supply of a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const totalSupply = await Actions.token.getTotalSupply(client, {\n * token: '0x...',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The token total supply, in base units and human-readable form.\n */\nexport async function getTotalSupply(client, parameters) {\n const { decimals, token, ...rest } = parameters;\n const [amount, { decimals: resolved }] = await Promise.all([\n withExecutionError(readContract)(client, {\n ...rest,\n ...getTotalSupply.call(client, { token }),\n }),\n resolveTokenWithDecimals(client, {\n decimals,\n token,\n }),\n ]);\n return internal_Token.toAmount(amount, resolved);\n}\n(function (getTotalSupply) {\n /**\n * Defines a call to the `totalSupply` function.\n *\n * Can be passed as a parameter to `multicall`, `simulateContract`, or any\n * other action that accepts a contract call. The token is selected by `token`,\n * which is either a TIP20 token id or a contract address.\n *\n * @param parameters - Client (optional), followed by the call arguments.\n * @returns The call.\n */\n function call(...parameters) {\n const [client, args] = resolveCallParameters(parameters);\n return defineCall({\n address: resolveToken(client, args).address,\n abi: Abis.tip20,\n args: [],\n functionName: 'totalSupply',\n });\n }\n getTotalSupply.call = call;\n})(getTotalSupply || (getTotalSupply = {}));\n/**\n * Gets the admin role for a specific role in a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const adminRole = await Actions.token.getRoleAdmin(client, {\n * role: 'issuer',\n * token: '0x...',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The admin role hash.\n */\nexport async function getRoleAdmin(client, parameters) {\n return withExecutionError(readContract)(client, {\n ...parameters,\n ...getRoleAdmin.call(client, parameters),\n });\n}\n(function (getRoleAdmin) {\n /**\n * Defines a call to the `getRoleAdmin` function.\n *\n * @param parameters - Client (optional), followed by the call arguments.\n * @returns The call.\n */\n function call(...parameters) {\n const [client, args] = resolveCallParameters(parameters);\n const { role, token } = args;\n return defineCall({\n address: resolveToken(client, { token }).address,\n abi: Abis.tip20,\n functionName: 'getRoleAdmin',\n args: [TokenRole.serialize(role)],\n });\n }\n getRoleAdmin.call = call;\n})(getRoleAdmin || (getRoleAdmin = {}));\n/**\n * Checks if an account has a specific role for a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const hasRole = await Actions.token.hasRole(client, {\n * account: '0x...',\n * role: 'issuer',\n * token: '0x...',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns Whether the account has the role.\n */\nexport async function hasRole(client, parameters) {\n const { account = client.account } = parameters;\n const address = account ? parseAccount(account).address : undefined;\n if (!address)\n throw new Error('account is required.');\n return withExecutionError(readContract)(client, {\n ...parameters,\n ...hasRole.call(client, { ...parameters, account: address }),\n });\n}\n(function (hasRole) {\n /**\n * Defines a call to the `hasRole` function.\n *\n * @param parameters - Client (optional), followed by the call arguments.\n * @returns The call.\n */\n function call(...parameters) {\n const [client, args] = resolveCallParameters(parameters);\n const { account, role, token } = args;\n return defineCall({\n address: resolveToken(client, { token }).address,\n abi: Abis.tip20,\n functionName: 'hasRole',\n args: [account, TokenRole.serialize(role)],\n });\n }\n hasRole.call = call;\n})(hasRole || (hasRole = {}));\n/**\n * Grants a role for a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.grantRoles(client, {\n * token: '0x...',\n * to: '0x...',\n * roles: ['issuer'],\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction hash.\n */\nexport async function grantRoles(client, parameters) {\n return grantRoles.inner(sendTransaction, client, parameters);\n}\n(function (grantRoles) {\n /** @internal */\n async function inner(action, client, parameters) {\n return (await withExecutionError(action)(client, {\n ...parameters,\n calls: parameters.roles.map((role) => {\n const call = grantRoles.call(client, { ...parameters, role });\n return {\n ...call,\n data: encodeFunctionData(call),\n };\n }),\n }));\n }\n grantRoles.inner = inner;\n /**\n * Defines a call to the `grantRole` function.\n *\n * Can be passed as a parameter to:\n * - [`estimateContractGas`](https://viem.sh/docs/contract/estimateContractGas): estimate the gas cost of the call\n * - [`simulateContract`](https://viem.sh/docs/contract/simulateContract): simulate the call\n * - [`sendCalls`](https://viem.sh/docs/actions/wallet/sendCalls): send multiple calls\n *\n * @example\n * ```ts\n * import { createClient, http, walletActions } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * }).extend(walletActions)\n *\n * const { result } = await client.sendCalls({\n * calls: [\n * actions.token.grantRoles.call(client, {\n * token: '0x20c0...babe',\n * to: '0x20c0...beef',\n * role: 'issuer',\n * }),\n * ]\n * })\n * ```\n *\n * @param parameters - Client (optional), followed by the call arguments.\n * @returns The call.\n */\n function call(...parameters) {\n const [client, args] = resolveCallParameters(parameters);\n const { token, to, role } = args;\n const roleHash = TokenRole.serialize(role);\n return defineCall({\n address: resolveToken(client, { token }).address,\n abi: Abis.tip20,\n functionName: 'grantRole',\n args: [roleHash, to],\n });\n }\n grantRoles.call = call;\n /**\n * Extracts the events from the logs.\n *\n * @param logs - Logs.\n * @returns The events.\n */\n function extractEvents(logs) {\n const events = parseEventLogs({\n abi: Abis.tip20,\n logs,\n eventName: 'RoleMembershipUpdated',\n });\n if (events.length === 0)\n throw new Error('`RoleMembershipUpdated` events not found.');\n return events;\n }\n grantRoles.extractEvents = extractEvents;\n})(grantRoles || (grantRoles = {}));\n/**\n * Grants a role for a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.grantRolesSync(client, {\n * token: '0x...',\n * to: '0x...',\n * roles: ['issuer'],\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction receipt and event data.\n */\nexport async function grantRolesSync(client, parameters) {\n const { throwOnReceiptRevert = true, ...rest } = parameters;\n const receipt = await grantRoles.inner(sendTransactionSync, client, {\n ...rest,\n throwOnReceiptRevert,\n });\n if (receipt.status === 'pending')\n return { receipt };\n const events = grantRoles.extractEvents(receipt.logs);\n const value = events.map((event) => event.args);\n return {\n receipt,\n value,\n };\n}\n/**\n * Mints TIP20 tokens to an address.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.mint(client, {\n * to: '0x...',\n * amount: 100n,\n * token: '0x...',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction hash.\n */\nexport async function mint(client, parameters) {\n return mint.inner(writeContract, client, parameters);\n}\n(function (mint) {\n /** @internal */\n async function inner(action, client, parameters) {\n const { amount, memo, to, token, ...rest } = parameters;\n const call = mint.call(client, { amount, memo, to, token });\n return (await withExecutionError(action, {\n hints: {\n Unauthorized: [\n 'Minting requires the issuer role. Grant it to this account first.',\n ],\n },\n })(client, {\n ...rest,\n ...call,\n }));\n }\n mint.inner = inner;\n /**\n * Defines a call to the `mint` or `mintWithMemo` function.\n *\n * Can be passed as a parameter to:\n * - [`estimateContractGas`](https://viem.sh/docs/contract/estimateContractGas): estimate the gas cost of the call\n * - [`simulateContract`](https://viem.sh/docs/contract/simulateContract): simulate the call\n * - [`sendCalls`](https://viem.sh/docs/actions/wallet/sendCalls): send multiple calls\n *\n * @example\n * ```ts\n * import { createClient, http, walletActions } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * }).extend(walletActions)\n *\n * const { result } = await client.sendCalls({\n * calls: [\n * actions.token.mint.call(client, {\n * to: '0x20c0...beef',\n * amount: 100n,\n * token: '0x20c0...babe',\n * }),\n * ]\n * })\n * ```\n *\n * `amount.decimals` is inferred from the client's declared `tokens` when omitted.\n *\n * @param parameters - Client (optional), followed by the call arguments.\n * @returns The call.\n */\n function call(...parameters) {\n const [client, args] = resolveCallParameters(parameters);\n const { to, amount, memo, token } = args;\n const { address, decimals } = resolveToken(client, { token });\n const value = internal_Token.toBaseUnits(amount, decimals);\n const callArgs = memo\n ? {\n functionName: 'mintWithMemo',\n args: [to, value, Hex.padLeft(memo, 32)],\n }\n : {\n functionName: 'mint',\n args: [to, value],\n };\n return defineCall({\n address,\n abi: Abis.tip20,\n ...callArgs,\n });\n }\n mint.call = call;\n /**\n * Extracts the event from the logs.\n *\n * @param logs - Logs.\n * @returns The event.\n */\n function extractEvent(logs) {\n const [log] = parseEventLogs({\n abi: Abis.tip20,\n logs,\n eventName: 'Mint',\n });\n if (!log)\n throw new Error('`Mint` event not found.');\n return log;\n }\n mint.extractEvent = extractEvent;\n})(mint || (mint = {}));\n/**\n * Mints TIP20 tokens to an address.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.mintSync(client, {\n * to: '0x...',\n * amount: 100n,\n * token: '0x...',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction receipt and event data.\n */\nexport async function mintSync(client, parameters) {\n const { throwOnReceiptRevert = true, ...rest } = parameters;\n const receipt = await mint.inner(writeContractSync, client, {\n ...rest,\n throwOnReceiptRevert,\n });\n if (receipt.status === 'pending')\n return { receipt };\n const { args } = mint.extractEvent(receipt.logs);\n return {\n ...args,\n receipt,\n };\n}\n/**\n * Pauses a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.pause(client, {\n * token: '0x...',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction hash.\n */\nexport async function pause(client, parameters) {\n return pause.inner(writeContract, client, parameters);\n}\n(function (pause) {\n /** @internal */\n async function inner(action, client, parameters) {\n const { token, ...rest } = parameters;\n const call = pause.call(client, { token });\n return (await withExecutionError(action)(client, {\n ...rest,\n ...call,\n }));\n }\n pause.inner = inner;\n /**\n * Defines a call to the `pause` function.\n *\n * Can be passed as a parameter to:\n * - [`estimateContractGas`](https://viem.sh/docs/contract/estimateContractGas): estimate the gas cost of the call\n * - [`simulateContract`](https://viem.sh/docs/contract/simulateContract): simulate the call\n * - [`sendCalls`](https://viem.sh/docs/actions/wallet/sendCalls): send multiple calls\n *\n * @example\n * ```ts\n * import { createClient, http, walletActions } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * }).extend(walletActions)\n *\n * const { result } = await client.sendCalls({\n * calls: [\n * actions.token.pause.call(client, {\n * token: '0x20c0...babe',\n * }),\n * ]\n * })\n * ```\n *\n * @param parameters - Client (optional), followed by the call arguments.\n * @returns The call.\n */\n function call(...parameters) {\n const [client, args] = resolveCallParameters(parameters);\n const { token } = args;\n return defineCall({\n address: resolveToken(client, { token }).address,\n abi: Abis.tip20,\n functionName: 'pause',\n args: [],\n });\n }\n pause.call = call;\n /**\n * Extracts the event from the logs.\n *\n * @param logs - Logs.\n * @returns The event.\n */\n function extractEvent(logs) {\n const [log] = parseEventLogs({\n abi: Abis.tip20,\n logs,\n eventName: 'PauseStateUpdate',\n });\n if (!log)\n throw new Error('`PauseStateUpdate` event not found.');\n return log;\n }\n pause.extractEvent = extractEvent;\n})(pause || (pause = {}));\n/**\n * Pauses a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.pauseSync(client, {\n * token: '0x...',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction receipt and event data.\n */\nexport async function pauseSync(client, parameters) {\n const { throwOnReceiptRevert = true, ...rest } = parameters;\n const receipt = await pause.inner(writeContractSync, client, {\n ...rest,\n throwOnReceiptRevert,\n });\n if (receipt.status === 'pending')\n return { receipt };\n const { args } = pause.extractEvent(receipt.logs);\n return {\n ...args,\n receipt,\n };\n}\n/**\n * Renounces a role for a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.renounceRoles(client, {\n * token: '0x...',\n * roles: ['issuer'],\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction hash.\n */\nexport async function renounceRoles(client, parameters) {\n return renounceRoles.inner(sendTransaction, client, parameters);\n}\n(function (renounceRoles) {\n /** @internal */\n async function inner(action, client, parameters) {\n return (await withExecutionError(action)(client, {\n ...parameters,\n calls: parameters.roles.map((role) => {\n const call = renounceRoles.call(client, { ...parameters, role });\n return {\n ...call,\n data: encodeFunctionData(call),\n };\n }),\n }));\n }\n renounceRoles.inner = inner;\n /**\n * Defines a call to the `renounceRole` function.\n *\n * Can be passed as a parameter to:\n * - [`estimateContractGas`](https://viem.sh/docs/contract/estimateContractGas): estimate the gas cost of the call\n * - [`simulateContract`](https://viem.sh/docs/contract/simulateContract): simulate the call\n * - [`sendCalls`](https://viem.sh/docs/actions/wallet/sendCalls): send multiple calls\n *\n * @example\n * ```ts\n * import { createClient, http, walletActions } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * }).extend(walletActions)\n *\n * const { result } = await client.sendCalls({\n * calls: [\n * actions.token.renounceRoles.call(client, {\n * token: '0x20c0...babe',\n * role: 'issuer',\n * }),\n * ]\n * })\n * ```\n *\n * @param parameters - Client (optional), followed by the call arguments.\n * @returns The call.\n */\n function call(...parameters) {\n const [client, args] = resolveCallParameters(parameters);\n const { token, role } = args;\n const roleHash = TokenRole.serialize(role);\n return defineCall({\n address: resolveToken(client, { token }).address,\n abi: Abis.tip20,\n functionName: 'renounceRole',\n args: [roleHash],\n });\n }\n renounceRoles.call = call;\n /**\n * Extracts the events from the logs.\n *\n * @param logs - Logs.\n * @returns The events.\n */\n function extractEvents(logs) {\n const events = parseEventLogs({\n abi: Abis.tip20,\n logs,\n eventName: 'RoleMembershipUpdated',\n });\n if (events.length === 0)\n throw new Error('`RoleMembershipUpdated` events not found.');\n return events;\n }\n renounceRoles.extractEvents = extractEvents;\n})(renounceRoles || (renounceRoles = {}));\n/**\n * Renounces a role for a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.renounceRolesSync(client, {\n * token: '0x...',\n * roles: ['issuer'],\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction receipt and event data.\n */\nexport async function renounceRolesSync(client, parameters) {\n const { throwOnReceiptRevert = true, ...rest } = parameters;\n const receipt = await renounceRoles.inner(sendTransactionSync, client, {\n ...rest,\n throwOnReceiptRevert,\n });\n if (receipt.status === 'pending')\n return { receipt };\n const events = renounceRoles.extractEvents(receipt.logs);\n const value = events.map((event) => event.args);\n return {\n receipt,\n value,\n };\n}\n/**\n * Revokes a role for a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.revokeRoles(client, {\n * token: '0x...',\n * from: '0x...',\n * roles: ['issuer'],\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction hash.\n */\nexport async function revokeRoles(client, parameters) {\n return revokeRoles.inner(sendTransaction, client, parameters);\n}\n(function (revokeRoles) {\n /** @internal */\n async function inner(action, client, parameters) {\n const { from: _, ...rest } = parameters;\n return (await withExecutionError(action)(client, {\n ...rest,\n calls: parameters.roles.map((role) => {\n const call = revokeRoles.call(client, { ...parameters, role });\n return {\n ...call,\n data: encodeFunctionData(call),\n };\n }),\n }));\n }\n revokeRoles.inner = inner;\n /**\n * Defines a call to the `revokeRole` function.\n *\n * Can be passed as a parameter to:\n * - [`estimateContractGas`](https://viem.sh/docs/contract/estimateContractGas): estimate the gas cost of the call\n * - [`simulateContract`](https://viem.sh/docs/contract/simulateContract): simulate the call\n * - [`sendCalls`](https://viem.sh/docs/actions/wallet/sendCalls): send multiple calls\n *\n * @example\n * ```ts\n * import { createClient, http, walletActions } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * }).extend(walletActions)\n *\n * const { result } = await client.sendCalls({\n * calls: [\n * actions.token.revokeRoles.call(client, {\n * token: '0x20c0...babe',\n * from: '0x20c0...beef',\n * role: 'issuer',\n * }),\n * ]\n * })\n * ```\n *\n * @param parameters - Client (optional), followed by the call arguments.\n * @returns The call.\n */\n function call(...parameters) {\n const [client, args] = resolveCallParameters(parameters);\n const { token, from, role } = args;\n const roleHash = TokenRole.serialize(role);\n return defineCall({\n address: resolveToken(client, { token }).address,\n abi: Abis.tip20,\n functionName: 'revokeRole',\n args: [roleHash, from],\n });\n }\n revokeRoles.call = call;\n /**\n * Extracts the events from the logs.\n *\n * @param logs - Logs.\n * @returns The events.\n */\n function extractEvents(logs) {\n const events = parseEventLogs({\n abi: Abis.tip20,\n logs,\n eventName: 'RoleMembershipUpdated',\n });\n if (events.length === 0)\n throw new Error('`RoleMembershipUpdated` events not found.');\n return events;\n }\n revokeRoles.extractEvents = extractEvents;\n})(revokeRoles || (revokeRoles = {}));\n/**\n * Revokes a role for a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.revokeRolesSync(client, {\n * token: '0x...',\n * from: '0x...',\n * roles: ['issuer'],\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction receipt and event data.\n */\nexport async function revokeRolesSync(client, parameters) {\n const { throwOnReceiptRevert = true, ...rest } = parameters;\n const receipt = await revokeRoles.inner(sendTransactionSync, client, {\n ...rest,\n throwOnReceiptRevert,\n });\n if (receipt.status === 'pending')\n return { receipt };\n const events = revokeRoles.extractEvents(receipt.logs);\n const value = events.map((event) => event.args);\n return {\n receipt,\n value,\n };\n}\n/**\n * Sets the supply cap for a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.setSupplyCap(client, {\n * token: '0x...',\n * supplyCap: 1000000n,\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction hash.\n */\nexport async function setSupplyCap(client, parameters) {\n return setSupplyCap.inner(writeContract, client, parameters);\n}\n(function (setSupplyCap) {\n /** @internal */\n async function inner(action, client, parameters) {\n const { supplyCap, token, ...rest } = parameters;\n const call = setSupplyCap.call(client, { supplyCap, token });\n return (await withExecutionError(action)(client, {\n ...rest,\n ...call,\n }));\n }\n setSupplyCap.inner = inner;\n /**\n * Defines a call to the `setSupplyCap` function.\n *\n * Can be passed as a parameter to:\n * - [`estimateContractGas`](https://viem.sh/docs/contract/estimateContractGas): estimate the gas cost of the call\n * - [`simulateContract`](https://viem.sh/docs/contract/simulateContract): simulate the call\n * - [`sendCalls`](https://viem.sh/docs/actions/wallet/sendCalls): send multiple calls\n *\n * @example\n * ```ts\n * import { createClient, http, walletActions } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * }).extend(walletActions)\n *\n * const { result } = await client.sendCalls({\n * calls: [\n * actions.token.setSupplyCap.call(client, {\n * token: '0x20c0...babe',\n * supplyCap: 1000000n,\n * }),\n * ]\n * })\n * ```\n *\n * @param parameters - Client (optional), followed by the call arguments.\n * @returns The call.\n */\n function call(...parameters) {\n const [client, args] = resolveCallParameters(parameters);\n const { token, supplyCap } = args;\n return defineCall({\n address: resolveToken(client, { token }).address,\n abi: Abis.tip20,\n functionName: 'setSupplyCap',\n args: [supplyCap],\n });\n }\n setSupplyCap.call = call;\n /**\n * Extracts the event from the logs.\n *\n * @param logs - Logs.\n * @returns The event.\n */\n function extractEvent(logs) {\n const [log] = parseEventLogs({\n abi: Abis.tip20,\n logs,\n eventName: 'SupplyCapUpdate',\n });\n if (!log)\n throw new Error('`SupplyCapUpdate` event not found.');\n return log;\n }\n setSupplyCap.extractEvent = extractEvent;\n})(setSupplyCap || (setSupplyCap = {}));\n/**\n * Sets the supply cap for a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.setSupplyCapSync(client, {\n * token: '0x...',\n * supplyCap: 1000000n,\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction receipt and event data.\n */\nexport async function setSupplyCapSync(client, parameters) {\n const { throwOnReceiptRevert = true, ...rest } = parameters;\n const receipt = await setSupplyCap.inner(writeContractSync, client, {\n ...rest,\n throwOnReceiptRevert,\n });\n if (receipt.status === 'pending')\n return { receipt };\n const { args } = setSupplyCap.extractEvent(receipt.logs);\n return {\n ...args,\n receipt,\n };\n}\n/**\n * Sets the admin role for a specific role in a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.setRoleAdmin(client, {\n * token: '0x...',\n * role: 'issuer',\n * adminRole: 'admin',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction hash.\n */\nexport async function setRoleAdmin(client, parameters) {\n return setRoleAdmin.inner(writeContract, client, parameters);\n}\n(function (setRoleAdmin) {\n /** @internal */\n async function inner(action, client, parameters) {\n const { adminRole, role, token, ...rest } = parameters;\n const call = setRoleAdmin.call(client, { adminRole, role, token });\n return (await withExecutionError(action)(client, {\n ...rest,\n ...call,\n }));\n }\n setRoleAdmin.inner = inner;\n /**\n * Defines a call to the `setRoleAdmin` function.\n *\n * Can be passed as a parameter to:\n * - [`estimateContractGas`](https://viem.sh/docs/contract/estimateContractGas): estimate the gas cost of the call\n * - [`simulateContract`](https://viem.sh/docs/contract/simulateContract): simulate the call\n * - [`sendCalls`](https://viem.sh/docs/actions/wallet/sendCalls): send multiple calls\n *\n * @example\n * ```ts\n * import { createClient, http, walletActions } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * }).extend(walletActions)\n *\n * const { result } = await client.sendCalls({\n * calls: [\n * actions.token.setRoleAdmin.call(client, {\n * token: '0x20c0...babe',\n * role: 'issuer',\n * adminRole: 'admin',\n * }),\n * ]\n * })\n * ```\n *\n * @param parameters - Client (optional), followed by the call arguments.\n * @returns The call.\n */\n function call(...parameters) {\n const [client, args] = resolveCallParameters(parameters);\n const { token, role, adminRole } = args;\n const roleHash = TokenRole.serialize(role);\n const adminRoleHash = TokenRole.serialize(adminRole);\n return defineCall({\n address: resolveToken(client, { token }).address,\n abi: Abis.tip20,\n functionName: 'setRoleAdmin',\n args: [roleHash, adminRoleHash],\n });\n }\n setRoleAdmin.call = call;\n /**\n * Extracts the event from the logs.\n *\n * @param logs - Logs.\n * @returns The event.\n */\n function extractEvent(logs) {\n const [log] = parseEventLogs({\n abi: Abis.tip20,\n logs,\n eventName: 'RoleAdminUpdated',\n });\n if (!log)\n throw new Error('`RoleAdminUpdated` event not found.');\n return log;\n }\n setRoleAdmin.extractEvent = extractEvent;\n})(setRoleAdmin || (setRoleAdmin = {}));\n/**\n * Sets the admin role for a specific role in a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.setRoleAdminSync(client, {\n * token: '0x...',\n * role: 'issuer',\n * adminRole: 'admin',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction receipt and event data.\n */\nexport async function setRoleAdminSync(client, parameters) {\n const { throwOnReceiptRevert = true, ...rest } = parameters;\n const receipt = await setRoleAdmin.inner(writeContractSync, client, {\n ...rest,\n throwOnReceiptRevert,\n });\n if (receipt.status === 'pending')\n return { receipt };\n const { args } = setRoleAdmin.extractEvent(receipt.logs);\n return {\n ...args,\n receipt,\n };\n}\n/**\n * Transfers TIP20 tokens to another address.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.transfer(client, {\n * to: '0x...',\n * amount: 100n,\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction hash.\n */\nexport async function transfer(client, parameters) {\n return transfer.inner(writeContract, client, parameters);\n}\n(function (transfer) {\n /** @internal */\n async function inner(action, client, parameters) {\n return (await withExecutionError(action)(client, {\n ...parameters,\n ...transfer.call(client, parameters),\n }));\n }\n transfer.inner = inner;\n /**\n * Defines a call to the `transfer`, `transferFrom`, `transferWithMemo`, or\n * `transferFromWithMemo` function.\n *\n * Can be passed as a parameter to `estimateContractGas`, `simulateContract`,\n * `sendCalls`, `sendTransaction` (`calls`), or `multicall`. The token is\n * selected by `token`, which is either a TIP20 token id or a contract\n * `address`; `amount.decimals` is inferred from the client's declared\n * `tokens` when omitted.\n *\n * @param parameters - Client (optional), followed by the call arguments.\n * @returns The call.\n */\n function call(...parameters) {\n const [client, args] = resolveCallParameters(parameters);\n const { from, memo, to, token } = args;\n const { address, decimals } = resolveToken(client, { token });\n const value = internal_Token.toBaseUnits(args.amount, decimals);\n const callArgs = (() => {\n if (memo && from)\n return {\n functionName: 'transferFromWithMemo',\n args: [from, to, value, Hex.padLeft(memo, 32)],\n };\n if (memo)\n return {\n functionName: 'transferWithMemo',\n args: [to, value, Hex.padLeft(memo, 32)],\n };\n if (from)\n return {\n functionName: 'transferFrom',\n args: [from, to, value],\n };\n return {\n functionName: 'transfer',\n args: [to, value],\n };\n })();\n return defineCall({\n address,\n abi: Abis.tip20,\n ...callArgs,\n });\n }\n transfer.call = call;\n /**\n * Estimates the gas required to transfer TIP20 tokens. `amount.decimals` is\n * inferred from the client's declared `tokens` when omitted.\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The gas estimate.\n */\n async function estimateGas(client, parameters) {\n return estimateContractGas(client, {\n ...pickWriteParameters(parameters),\n ...transfer.call(client, parameters),\n });\n }\n transfer.estimateGas = estimateGas;\n /**\n * Simulates a transfer of TIP20 tokens. `amount.decimals` is inferred from\n * the client's declared `tokens` when omitted.\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The simulation result and write request.\n */\n async function simulate(client, parameters) {\n return simulateContract(client, {\n ...pickWriteParameters(parameters),\n ...transfer.call(client, parameters),\n });\n }\n transfer.simulate = simulate;\n /**\n * Extracts the `Transfer` event from logs.\n *\n * @param logs - Logs.\n * @returns The `Transfer` event.\n */\n function extractEvent(logs) {\n const [log] = parseEventLogs({\n abi: Abis.tip20,\n logs,\n eventName: 'Transfer',\n });\n if (!log)\n throw new Error('`Transfer` event not found.');\n return log;\n }\n transfer.extractEvent = extractEvent;\n})(transfer || (transfer = {}));\n/**\n * Transfers TIP20 tokens to another address.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.transferSync(client, {\n * to: '0x...',\n * amount: 100n,\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction receipt and event data.\n */\nexport async function transferSync(client, parameters) {\n const { amount, token, throwOnReceiptRevert = true } = parameters;\n const { decimals } = resolveToken(client, { token });\n const resolved = internal_Token.resolveAmountDecimals(amount, decimals);\n const receipt = await transfer.inner(writeContractSync, client, {\n ...parameters,\n throwOnReceiptRevert,\n });\n if (receipt.status === 'pending')\n return { receipt };\n const { args } = transfer.extractEvent(receipt.logs);\n return {\n ...args,\n ...(resolved === undefined\n ? {}\n : { decimals: resolved, formatted: formatUnits(args.amount, resolved) }),\n receipt,\n };\n}\n/**\n * Unpauses a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.unpause(client, {\n * token: '0x...',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction hash.\n */\nexport async function unpause(client, parameters) {\n return unpause.inner(writeContract, client, parameters);\n}\n(function (unpause) {\n /** @internal */\n async function inner(action, client, parameters) {\n const { token, ...rest } = parameters;\n const call = unpause.call(client, { token });\n return (await withExecutionError(action)(client, {\n ...rest,\n ...call,\n }));\n }\n unpause.inner = inner;\n /**\n * Defines a call to the `unpause` function.\n *\n * Can be passed as a parameter to:\n * - [`estimateContractGas`](https://viem.sh/docs/contract/estimateContractGas): estimate the gas cost of the call\n * - [`simulateContract`](https://viem.sh/docs/contract/simulateContract): simulate the call\n * - [`sendCalls`](https://viem.sh/docs/actions/wallet/sendCalls): send multiple calls\n *\n * @example\n * ```ts\n * import { createClient, http, walletActions } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * }).extend(walletActions)\n *\n * const { result } = await client.sendCalls({\n * calls: [\n * actions.token.unpause.call(client, {\n * token: '0x20c0...babe',\n * }),\n * ]\n * })\n * ```\n *\n * @param parameters - Client (optional), followed by the call arguments.\n * @returns The call.\n */\n function call(...parameters) {\n const [client, args] = resolveCallParameters(parameters);\n const { token } = args;\n return defineCall({\n address: resolveToken(client, { token }).address,\n abi: Abis.tip20,\n functionName: 'unpause',\n args: [],\n });\n }\n unpause.call = call;\n /**\n * Extracts the event from the logs.\n *\n * @param logs - Logs.\n * @returns The event.\n */\n function extractEvent(logs) {\n const [log] = parseEventLogs({\n abi: Abis.tip20,\n logs,\n eventName: 'PauseStateUpdate',\n });\n if (!log)\n throw new Error('`PauseStateUpdate` event not found.');\n return log;\n }\n unpause.extractEvent = extractEvent;\n})(unpause || (unpause = {}));\n/**\n * Unpauses a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.unpauseSync(client, {\n * token: '0x...',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction receipt and event data.\n */\nexport async function unpauseSync(client, parameters) {\n const { throwOnReceiptRevert = true, ...rest } = parameters;\n const receipt = await unpause.inner(writeContractSync, client, {\n ...rest,\n throwOnReceiptRevert,\n });\n if (receipt.status === 'pending')\n return { receipt };\n const { args } = unpause.extractEvent(receipt.logs);\n return {\n ...args,\n receipt,\n };\n}\n/**\n * Updates the quote token for a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.prepareUpdateQuoteToken(client, {\n * token: '0x...',\n * quoteToken: '0x...',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction hash.\n */\nexport async function prepareUpdateQuoteToken(client, parameters) {\n return prepareUpdateQuoteToken.inner(writeContract, client, parameters);\n}\n(function (prepareUpdateQuoteToken) {\n /** @internal */\n async function inner(action, client, parameters) {\n const { quoteToken, token, ...rest } = parameters;\n const call = prepareUpdateQuoteToken.call(client, { quoteToken, token });\n return (await withExecutionError(action)(client, {\n ...rest,\n ...call,\n }));\n }\n prepareUpdateQuoteToken.inner = inner;\n /**\n * Defines a call to the `prepareUpdateQuoteToken` function.\n *\n * Can be passed as a parameter to:\n * - [`estimateContractGas`](https://viem.sh/docs/contract/estimateContractGas): estimate the gas cost of the call\n * - [`simulateContract`](https://viem.sh/docs/contract/simulateContract): simulate the call\n * - [`sendCalls`](https://viem.sh/docs/actions/wallet/sendCalls): send multiple calls\n *\n * @example\n * ```ts\n * import { createClient, http, walletActions } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * }).extend(walletActions)\n *\n * const { result } = await client.sendCalls({\n * calls: [\n * actions.token.prepareUpdateQuoteToken.call(client, {\n * token: '0x20c0...babe',\n * quoteToken: '0x20c0...cafe',\n * }),\n * ]\n * })\n * ```\n *\n * @param parameters - Client (optional), followed by the call arguments.\n * @returns The call.\n */\n function call(...parameters) {\n const [client, args] = resolveCallParameters(parameters);\n const { token, quoteToken } = args;\n return defineCall({\n address: resolveToken(client, { token }).address,\n abi: Abis.tip20,\n functionName: 'setNextQuoteToken',\n args: [resolveToken(client, { token: quoteToken }).address],\n });\n }\n prepareUpdateQuoteToken.call = call;\n /**\n * Extracts the event from the logs.\n *\n * @param logs - Logs.\n * @returns The event.\n */\n function extractEvent(logs) {\n const [log] = parseEventLogs({\n abi: Abis.tip20,\n logs,\n eventName: 'NextQuoteTokenSet',\n });\n if (!log)\n throw new Error('`NextQuoteTokenSet` event not found.');\n return log;\n }\n prepareUpdateQuoteToken.extractEvent = extractEvent;\n})(prepareUpdateQuoteToken || (prepareUpdateQuoteToken = {}));\n/**\n * Updates the quote token for a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.prepareUpdateQuoteTokenSync(client, {\n * token: '0x...',\n * quoteToken: '0x...',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction receipt and event data.\n */\nexport async function prepareUpdateQuoteTokenSync(client, parameters) {\n const receipt = await prepareUpdateQuoteToken.inner(writeContractSync, client, parameters);\n if (receipt.status === 'pending')\n return { receipt };\n const { args } = prepareUpdateQuoteToken.extractEvent(receipt.logs);\n return {\n ...args,\n receipt,\n };\n}\n/**\n * Updates the quote token for a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.updateQuoteToken(client, {\n * token: '0x...',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction hash.\n */\nexport async function updateQuoteToken(client, parameters) {\n return updateQuoteToken.inner(writeContract, client, parameters);\n}\n(function (updateQuoteToken) {\n /** @internal */\n async function inner(action, client, parameters) {\n const { token, ...rest } = parameters;\n const call = updateQuoteToken.call(client, { token });\n return (await withExecutionError(action)(client, {\n ...rest,\n ...call,\n }));\n }\n updateQuoteToken.inner = inner;\n /**\n * Defines a call to the `updateQuoteToken` function.\n *\n * Can be passed as a parameter to:\n * - [`estimateContractGas`](https://viem.sh/docs/contract/estimateContractGas): estimate the gas cost of the call\n * - [`simulateContract`](https://viem.sh/docs/contract/simulateContract): simulate the call\n * - [`sendCalls`](https://viem.sh/docs/actions/wallet/sendCalls): send multiple calls\n *\n * @example\n * ```ts\n * import { createClient, http, walletActions } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * }).extend(walletActions)\n *\n * const { result } = await client.sendCalls({\n * calls: [\n * actions.token.updateQuoteToken.call(client, {\n * token: '0x20c0...babe',\n * }),\n * ]\n * })\n * ```\n *\n * @param parameters - Client (optional), followed by the call arguments.\n * @returns The call.\n */\n function call(...parameters) {\n const [client, args] = resolveCallParameters(parameters);\n const { token } = args;\n return defineCall({\n address: resolveToken(client, { token }).address,\n abi: Abis.tip20,\n functionName: 'completeQuoteTokenUpdate',\n args: [],\n });\n }\n updateQuoteToken.call = call;\n /**\n * Extracts the event from the logs.\n *\n * @param logs - Logs.\n * @returns The event.\n */\n function extractEvent(logs) {\n const [log] = parseEventLogs({\n abi: Abis.tip20,\n logs,\n eventName: 'QuoteTokenUpdate',\n });\n if (!log)\n throw new Error('`QuoteTokenUpdateCompleted` event not found.');\n return log;\n }\n updateQuoteToken.extractEvent = extractEvent;\n})(updateQuoteToken || (updateQuoteToken = {}));\n/**\n * Updates the quote token for a TIP20 token.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n * import { privateKeyToAccount } from 'viem/accounts'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const result = await Actions.token.updateQuoteTokenSync(client, {\n * token: '0x...',\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns The transaction receipt and event data.\n */\nexport async function updateQuoteTokenSync(client, parameters) {\n const receipt = await updateQuoteToken.inner(writeContractSync, client, parameters);\n if (receipt.status === 'pending')\n return { receipt };\n const { args } = updateQuoteToken.extractEvent(receipt.logs);\n return {\n ...args,\n receipt,\n };\n}\n/**\n * Watches for TIP20 token approval events.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const unwatch = actions.token.watchApprove(client, {\n * onApproval: (args, log) => {\n * console.log('Approval:', args)\n * },\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns A function to unsubscribe from the event.\n */\nexport function watchApprove(client, parameters) {\n const { onApproval, token, ...rest } = parameters;\n return watchContractEvent(client, {\n ...rest,\n address: resolveToken(client, { token }).address,\n abi: Abis.tip20,\n eventName: 'Approval',\n onLogs: (logs) => {\n for (const log of logs)\n onApproval(log.args, log);\n },\n strict: true,\n });\n}\n/**\n * Watches for TIP20 token burn events.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const unwatch = actions.token.watchBurn(client, {\n * onBurn: (args, log) => {\n * console.log('Burn:', args)\n * },\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns A function to unsubscribe from the event.\n */\nexport function watchBurn(client, parameters) {\n const { onBurn, token, ...rest } = parameters;\n return watchContractEvent(client, {\n ...rest,\n address: resolveToken(client, { token }).address,\n abi: Abis.tip20,\n eventName: 'Burn',\n onLogs: (logs) => {\n for (const log of logs)\n onBurn(log.args, log);\n },\n strict: true,\n });\n}\n/**\n * Watches for new TIP20 tokens created.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const unwatch = actions.token.watchCreate(client, {\n * onTokenCreated: (args, log) => {\n * console.log('Token created:', args)\n * },\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns A function to unsubscribe from the event.\n */\nexport function watchCreate(client, parameters) {\n const { onTokenCreated, ...rest } = parameters;\n return watchContractEvent(client, {\n ...rest,\n address: Addresses.tip20Factory,\n abi: Abis.tip20Factory,\n eventName: 'TokenCreated',\n onLogs: (logs) => {\n for (const log of logs)\n onTokenCreated(log.args, log);\n },\n strict: true,\n });\n}\n/**\n * Watches for TIP20 token mint events.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const unwatch = actions.token.watchMint(client, {\n * onMint: (args, log) => {\n * console.log('Mint:', args)\n * },\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns A function to unsubscribe from the event.\n */\nexport function watchMint(client, parameters) {\n const { onMint, token, ...rest } = parameters;\n return watchContractEvent(client, {\n ...rest,\n address: resolveToken(client, { token }).address,\n abi: Abis.tip20,\n eventName: 'Mint',\n onLogs: (logs) => {\n for (const log of logs)\n onMint(log.args, log);\n },\n strict: true,\n });\n}\n/**\n * Watches for TIP20 token role admin updates.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const unwatch = actions.token.watchAdminRole(client, {\n * onRoleAdminUpdated: (args, log) => {\n * console.log('Role admin updated:', args)\n * },\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns A function to unsubscribe from the event.\n */\nexport function watchAdminRole(client, parameters) {\n const { onRoleAdminUpdated, token, ...rest } = parameters;\n return watchContractEvent(client, {\n ...rest,\n address: resolveToken(client, { token }).address,\n abi: Abis.tip20,\n eventName: 'RoleAdminUpdated',\n onLogs: (logs) => {\n for (const log of logs)\n onRoleAdminUpdated(log.args, log);\n },\n strict: true,\n });\n}\n/**\n * Watches for TIP20 token role membership updates.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const unwatch = actions.token.watchRole(client, {\n * onRoleUpdated: (args, log) => {\n * console.log('Role updated:', args)\n * },\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns A function to unsubscribe from the event.\n */\nexport function watchRole(client, parameters) {\n const { onRoleUpdated, token, ...rest } = parameters;\n return watchContractEvent(client, {\n ...rest,\n address: resolveToken(client, { token }).address,\n abi: Abis.tip20,\n eventName: 'RoleMembershipUpdated',\n onLogs: (logs) => {\n for (const log of logs) {\n const type = log.args.hasRole ? 'granted' : 'revoked';\n onRoleUpdated({ ...log.args, type }, log);\n }\n },\n strict: true,\n });\n}\n/**\n * Watches for TIP20 token transfer events.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * account: privateKeyToAccount('0x...'),\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const unwatch = actions.token.watchTransfer(client, {\n * onTransfer: (args, log) => {\n * console.log('Transfer:', args)\n * },\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns A function to unsubscribe from the event.\n */\nexport function watchTransfer(client, parameters) {\n const { onTransfer, token, ...rest } = parameters;\n return watchContractEvent(client, {\n ...rest,\n address: resolveToken(client, { token }).address,\n abi: Abis.tip20,\n eventName: 'Transfer',\n onLogs: (logs) => {\n for (const log of logs)\n onTransfer(log.args, log);\n },\n strict: true,\n });\n}\n/**\n * Watches for TIP20 token quote token update events.\n *\n * @example\n * ```ts\n * import { createClient, http } from 'viem'\n * import { tempo } from 'viem/chains'\n * import { Actions } from 'viem/tempo'\n *\n * const client = createClient({\n * chain: tempo.extend({ feeToken: '0x20c0000000000000000000000000000000000001' })\n * transport: http(),\n * })\n *\n * const unwatch = actions.token.watchUpdateQuoteToken(client, {\n * onUpdateQuoteToken: (args, log) => {\n * if (args.completed)\n * console.log('quote token update completed:', args.newQuoteToken)\n * else\n * console.log('quote token update proposed:', args.newQuoteToken)\n * },\n * })\n * ```\n *\n * @param client - Client.\n * @param parameters - Parameters.\n * @returns A function to unsubscribe from the event.\n */\nexport function watchUpdateQuoteToken(client, parameters) {\n const { onUpdateQuoteToken, token, ...rest } = parameters;\n const address = resolveToken(client, { token }).address;\n return watchContractEvent(client, {\n ...rest,\n address,\n abi: Abis.tip20,\n onLogs: (logs) => {\n for (const log of logs) {\n if (log.eventName !== 'NextQuoteTokenSet' &&\n log.eventName !== 'QuoteTokenUpdate')\n continue;\n onUpdateQuoteToken({\n ...log.args,\n completed: log.eventName === 'QuoteTokenUpdate',\n }, log);\n }\n },\n strict: true,\n });\n}\n/** Thrown when an account's TIP-20 balance is lower than the amount a call needs. */\nexport class TokenInsufficientBalanceError extends TempoExecutionError {\n constructor(parameters) {\n const { decimals } = parameters;\n const [available, required, token] = parameters.error.args;\n super(parameters, {\n details: {\n token,\n available: formatAmount(available, decimals),\n required: formatAmount(required, decimals),\n shortfall: formatAmount(required - available, decimals),\n },\n name: 'TokenInsufficientBalanceError',\n shortMessage: `Insufficient balance of token \"${token}\".`,\n });\n /** Balance available. */\n Object.defineProperty(this, \"available\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /** Token decimals, when known. */\n Object.defineProperty(this, \"decimals\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /** Amount required. */\n Object.defineProperty(this, \"required\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /** Token address. */\n Object.defineProperty(this, \"token\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this.available = available;\n this.decimals = decimals;\n this.required = required;\n this.token = token;\n }\n}\n/** Thrown when a spender's TIP-20 allowance is lower than the amount it tries to transfer. */\nexport class TokenInsufficientAllowanceError extends TempoExecutionError {\n constructor(parameters) {\n const { allowance, amount, decimals, owner, spender, token } = parameters;\n super(parameters, {\n details: {\n token,\n owner,\n spender,\n allowance: formatAmount(allowance, decimals),\n amount: formatAmount(amount, decimals),\n },\n name: 'TokenInsufficientAllowanceError',\n shortMessage: `Spender \"${spender}\" has an insufficient allowance from \"${owner}\" for token \"${token}\".`,\n });\n /** Current allowance, when known. */\n Object.defineProperty(this, \"allowance\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /** Amount the spender tried to transfer. */\n Object.defineProperty(this, \"amount\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /** Token decimals, when known. */\n Object.defineProperty(this, \"decimals\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /** Token owner. */\n Object.defineProperty(this, \"owner\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /** Spender. */\n Object.defineProperty(this, \"spender\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /** Token address. */\n Object.defineProperty(this, \"token\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this.allowance = allowance;\n this.amount = amount;\n this.decimals = decimals;\n this.owner = owner;\n this.spender = spender;\n this.token = token;\n }\n}\n/** Thrown when minting would exceed a TIP-20 token's supply cap. */\nexport class TokenSupplyCapExceededError extends TempoExecutionError {\n constructor(parameters) {\n const { amount, decimals, supplyCap, token, totalSupply } = parameters;\n super(parameters, {\n details: {\n token,\n amount: formatAmount(amount, decimals),\n 'total supply': formatAmount(totalSupply, decimals),\n 'supply cap': formatAmount(supplyCap, decimals),\n 'mintable amount': supplyCap !== undefined && totalSupply !== undefined\n ? formatAmount(supplyCap - totalSupply, decimals)\n : undefined,\n },\n name: 'TokenSupplyCapExceededError',\n shortMessage: `Minting exceeds the supply cap of token \"${token}\".`,\n });\n /** Amount to mint. */\n Object.defineProperty(this, \"amount\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /** Token decimals, when known. */\n Object.defineProperty(this, \"decimals\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /** Supply cap, when known. */\n Object.defineProperty(this, \"supplyCap\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /** Token address. */\n Object.defineProperty(this, \"token\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /** Current total supply, when known. */\n Object.defineProperty(this, \"totalSupply\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this.amount = amount;\n this.decimals = decimals;\n this.supplyCap = supplyCap;\n this.token = token;\n this.totalSupply = totalSupply;\n }\n}\n/** Thrown when a TIP-20 token's transfer policy forbids the sender or recipient. */\nexport class TokenPolicyForbidsError extends TempoExecutionError {\n constructor(parameters) {\n const { from, policyId, recipientAuthorized, senderAuthorized, to, token } = parameters;\n const party = senderAuthorized === false\n ? `sender \"${from}\"`\n : recipientAuthorized === false\n ? `recipient \"${to}\"`\n : 'this transfer';\n super(parameters, {\n details: {\n token,\n policy: policyId,\n from,\n to,\n 'sender authorized': senderAuthorized?.toString(),\n 'recipient authorized': recipientAuthorized?.toString(),\n },\n name: 'TokenPolicyForbidsError',\n shortMessage: `The transfer policy of token \"${token}\" forbids ${party}.`,\n });\n /** Sender, when known. */\n Object.defineProperty(this, \"from\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /** Transfer policy ID, when known. */\n Object.defineProperty(this, \"policyId\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /** Whether the policy authorizes the recipient, when known. */\n Object.defineProperty(this, \"recipientAuthorized\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /** Whether the policy authorizes the sender, when known. */\n Object.defineProperty(this, \"senderAuthorized\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /** Recipient, when known. */\n Object.defineProperty(this, \"to\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /** Token address. */\n Object.defineProperty(this, \"token\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this.from = from;\n this.policyId = policyId;\n this.recipientAuthorized = recipientAuthorized;\n this.senderAuthorized = senderAuthorized;\n this.to = to;\n this.token = token;\n }\n}\n/** Thrown when calling a paused TIP-20 token. */\nexport class TokenPausedError extends TempoExecutionError {\n constructor(parameters) {\n super(parameters, {\n name: 'TokenPausedError',\n shortMessage: `Token \"${parameters.token}\" is paused.`,\n });\n /** Token address. */\n Object.defineProperty(this, \"token\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this.token = parameters.token;\n }\n}\n/** Thrown when an account lacks the TIP-20 role a call requires. */\nexport class TokenUnauthorizedError extends TempoExecutionError {\n constructor(parameters) {\n const { account, role, token } = parameters;\n super(parameters, {\n details: { token, account, role },\n name: 'TokenUnauthorizedError',\n shortMessage: `Account \"${account}\" does not have the \"${role}\" role on token \"${token}\".`,\n });\n /** Account that made the call. */\n Object.defineProperty(this, \"account\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /** Role the call requires. */\n Object.defineProperty(this, \"role\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /** Token address. */\n Object.defineProperty(this, \"token\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this.account = account;\n this.role = role;\n this.token = token;\n }\n}\n/** Roles required by TIP-20 functions. */\nconst requiredRoles = {\n burn: 'issuer',\n burnAt: 'burnAt',\n burnBlocked: 'burnBlocked',\n burnWithMemo: 'issuer',\n changeTransferPolicyId: 'defaultAdmin',\n completeQuoteTokenUpdate: 'defaultAdmin',\n mint: 'issuer',\n mintWithMemo: 'issuer',\n pause: 'pause',\n setLogoURI: 'defaultAdmin',\n setNextQuoteToken: 'defaultAdmin',\n setSupplyCap: 'defaultAdmin',\n unpause: 'unpause',\n};\n/** @internal */\nexport const errorResolvers = {\n 'ContractPaused()': ({ base, call }) => isTip20(call?.address)\n ? new TokenPausedError({ ...base, token: call.address })\n : undefined,\n 'InsufficientAllowance()': async (context) => {\n const { base, call, signer } = context;\n const owner = call?.arg('from');\n if (!isTip20(call?.address) || !owner || !signer)\n return undefined;\n const token = call.address;\n const [allowance, decimals] = await context.read([\n {\n address: token,\n abi: Abis.tip20,\n functionName: 'allowance',\n args: [owner, signer.address],\n },\n { address: token, abi: Abis.tip20, functionName: 'decimals' },\n ]);\n return new TokenInsufficientAllowanceError({\n ...base,\n allowance: allowance?.result,\n amount: call.arg('amount'),\n decimals: decimals?.result,\n owner,\n spender: signer.address,\n token,\n });\n },\n 'InsufficientBalance(uint256,uint256,address)': async (context) => {\n // Selector-only revert data carries no arguments.\n const token = context.base.error.args?.[2];\n if (!token)\n return undefined;\n const [decimals] = await context.read([\n { address: token, abi: Abis.tip20, functionName: 'decimals' },\n ]);\n return new TokenInsufficientBalanceError({\n ...context.base,\n decimals: decimals?.result,\n });\n },\n 'PolicyForbids()': async (context) => {\n const { base, call, signer } = context;\n if (!isTip20(call?.address))\n return undefined;\n const token = call.address;\n // Mints only check the recipient.\n const mint = call.functionName.startsWith('mint');\n const from = mint\n ? undefined\n : (call.arg('from') ?? signer?.address);\n const to = call.arg('to');\n const [policyId] = await context.read([\n { address: token, abi: Abis.tip20, functionName: 'transferPolicyId' },\n ]);\n const registry = {\n address: Addresses.tip403Registry,\n abi: Abis.tip403Registry,\n };\n const [sender, recipient] = policyId?.result === undefined\n ? []\n : await context.read([\n {\n ...registry,\n functionName: 'isAuthorizedSender',\n args: [policyId.result, from ?? zeroAddress],\n },\n {\n ...registry,\n functionName: mint\n ? 'isAuthorizedMintRecipient'\n : 'isAuthorizedRecipient',\n args: [policyId.result, to ?? zeroAddress],\n },\n ]);\n return new TokenPolicyForbidsError({\n ...base,\n from,\n policyId: policyId?.result,\n recipientAuthorized: to ? recipient?.result : undefined,\n senderAuthorized: from ? sender?.result : undefined,\n to,\n token,\n });\n },\n 'SupplyCapExceeded()': async (context) => {\n const { base, call } = context;\n if (!isTip20(call?.address))\n return undefined;\n const token = call.address;\n const [supplyCap, totalSupply, decimals] = await context.read([\n { address: token, abi: Abis.tip20, functionName: 'supplyCap' },\n { address: token, abi: Abis.tip20, functionName: 'totalSupply' },\n { address: token, abi: Abis.tip20, functionName: 'decimals' },\n ]);\n return new TokenSupplyCapExceededError({\n ...base,\n amount: call.arg('amount'),\n decimals: decimals?.result,\n supplyCap: supplyCap?.result,\n token,\n totalSupply: totalSupply?.result,\n });\n },\n 'Unauthorized()': ({ base, call, signer }) => {\n const role = call && requiredRoles[call.functionName];\n if (!isTip20(call?.address) || !role || !signer)\n return undefined;\n return new TokenUnauthorizedError({\n ...base,\n account: signer.address,\n role,\n token: call.address,\n });\n },\n};\n//# sourceMappingURL=token.js.map","import { decodeErrorResult, } from '../utils/abi/decodeErrorResult.js';\nimport { formatAbiItem } from '../utils/abi/formatAbiItem.js';\nimport { toFunctionSelector } from '../utils/hash/toFunctionSelector.js';\nimport * as Abis from './Abis.js';\n/** Human-readable templates keyed by error signature in `Abis.core`, with positional `{0}` placeholders. */\nexport const messages = {\n 'AbdicationAlreadyScheduled(uint8)': 'Abdication is already scheduled for capability {0}.',\n 'AccountAlreadyConfigurable()': 'The account is already a configurable account.',\n 'AccountHasCode()': 'Accounts with code cannot be upgraded.',\n 'AccountNotAllowed(address)': 'Account {0} is not allowed.',\n 'ActiveLeaderRemoved()': 'The active leader cannot be removed.',\n 'AddressAlreadyHasValidator()': 'This address already has a validator.',\n 'AddressNotReserved()': 'Address is not reserved.',\n 'AddressReserved()': 'Address is reserved.',\n 'AlreadyInitialized()': 'Already initialized.',\n 'AmountExceedsDeposit()': 'Amount exceeds deposit.',\n 'AmountNotIncreasing()': 'Amount is not increasing.',\n 'BelowMinimumOrderSize(uint128)': 'Order size is below the minimum allowed ({0}).',\n 'CallNotAllowed()': 'This call is not allowed.',\n 'CallbackDidNotReturnToZone()': 'The callback did not return to the zone.',\n 'CallbackRejected()': 'The callback was rejected.',\n 'CannotChangeWithinBlock()': 'Cannot change within the same block.',\n 'CapabilityAbdicated(uint8)': 'Capability {0} has been abdicated.',\n 'CaptureAmountInvalid()': 'Capture amount is invalid.',\n 'ChannelAlreadyExists()': 'Channel already exists.',\n 'ChannelNotFound()': 'Channel not found.',\n 'CloseNotReady()': 'Channel is not ready to close.',\n 'ContractPaused()': 'Contract is paused.',\n 'DepositBlockCapacityExceeded(uint64)': 'The deposit capacity per block exceeds the maximum ({0}).',\n 'DepositOverflow()': 'Deposit overflow.',\n 'DepositTooSmall()': 'The deposit is too small.',\n 'DepositsNotActive()': 'Deposits are not active.',\n 'DivisionByZero()': 'Division by zero.',\n 'DuplicateAllowedAccount()': 'The allowed account is duplicated.',\n 'DuplicateOwner()': 'The owner is duplicated.',\n 'DuplicateZoneGateway()': 'The zone gateway is duplicated.',\n 'EmptyV1ValidatorSet()': 'Validator set is empty.',\n 'EncryptionKeyExpired(uint256,uint64,uint64)': 'Encryption key {0} has expired.',\n 'ExpiringNonceHashNotSet()': 'Expiring nonce hash is not set.',\n 'ExpiringNonceReplay()': 'Expiring nonce has already been used.',\n 'ExpiringNonceSetFull()': 'Expiring nonce set is full.',\n 'ExpiryInPast()': 'Expiry is in the past.',\n 'GasFeeRateTooHigh()': 'The gas fee rate is too high.',\n 'IdenticalAddresses()': 'Addresses must be different.',\n 'IdenticalTokens()': 'Cannot swap a token for itself — input and output tokens must be different.',\n 'IncompatiblePolicyType()': 'Incompatible policy type.',\n 'IndexAlreadySet()': 'The index is already set.',\n 'IngressAlreadyExists(string)': 'Ingress \"{0}\" already exists.',\n 'InsufficientAllowance()': 'Insufficient allowance.',\n 'InsufficientBalance()': 'Insufficient balance.',\n 'InsufficientBalance(uint256,uint256,address)': 'Insufficient balance. Required: {1}, available: {0}.',\n 'InsufficientFeeTokenBalance()': 'Insufficient fee token balance.',\n 'InsufficientLiquidity()': 'Not enough liquidity in the order book to fill this trade.',\n 'InsufficientOutput()': 'The output amount is below the slippage minimum — try increasing slippage tolerance.',\n 'InsufficientReserves()': 'Insufficient reserves.',\n 'InvalidAccount()': 'Invalid account.',\n 'InvalidAdmin()': 'Invalid administrator.',\n 'InvalidAmount()': 'Invalid amount.',\n 'InvalidBaseToken()': 'This token is not a valid base token for the requested pair.',\n 'InvalidBouncebackRecipient()': 'Invalid bounceback recipient.',\n 'InvalidCallScope()': 'Invalid call scope.',\n 'InvalidCallbackTarget()': 'Invalid callback target.',\n 'InvalidCiphertextLength(uint256,uint256)': 'Invalid ciphertext length. Expected {1}, got {0}.',\n 'InvalidClaimAddress()': 'Invalid claim address.',\n 'InvalidClosedLoopConfig()': 'Invalid closed-loop configuration.',\n 'InvalidConfig()': 'Invalid configuration.',\n 'InvalidConfigurableAccountOwner()': 'Invalid owner.',\n 'InvalidCurrency()': 'Invalid currency.',\n 'InvalidDepositTransition()': 'Invalid deposit transition.',\n 'InvalidEncryptionKeyIndex(uint256)': 'Invalid encryption key index ({0}).',\n 'InvalidEphemeralPubkey()': 'Invalid ephemeral public key.',\n 'InvalidExpiringNonceExpiry()': 'Invalid expiring nonce expiry.',\n 'InvalidFlipTick()': 'The flip-order price tick is invalid.',\n 'InvalidFormat()': 'Invalid format.',\n 'InvalidKeyAuthorizationWitness()': 'Invalid key authorization witness.',\n 'InvalidKeyId()': 'Invalid key ID.',\n 'InvalidLeader()': 'Invalid leader.',\n 'InvalidLogoURI()': 'Invalid logo URI.',\n 'InvalidMasterAddress()': 'Invalid master address.',\n 'InvalidMigrationIndex()': 'Invalid migration index.',\n 'InvalidMode()': 'Invalid mode.',\n 'InvalidNonceKey()': 'Invalid nonce key.',\n 'InvalidOwner()': 'Invalid owner.',\n 'InvalidOwnerOrder()': 'Invalid owner order.',\n 'InvalidPayee()': 'Invalid payee.',\n 'InvalidPayload()': 'Invalid payload.',\n 'InvalidPolicyType()': 'Invalid policy type.',\n 'InvalidProof()': 'Invalid proof.',\n 'InvalidProofOfPossession()': 'Invalid proof of possession.',\n 'InvalidPublicKey()': 'Invalid public key.',\n 'InvalidQuorumCertificate()': 'Invalid quorum certificate.',\n 'InvalidQuoteToken()': 'Invalid quote token.',\n 'InvalidReceipt()': 'Invalid receipt.',\n 'InvalidReceivePolicyType()': 'Invalid receive policy type.',\n 'InvalidRecipient()': 'Invalid recipient.',\n 'InvalidRecoveryAuthority()': 'Invalid recovery authority.',\n 'InvalidSequencerSet()': 'Invalid sequencer set.',\n 'InvalidSignature()': 'Invalid signature.',\n 'InvalidSignatureFormat()': 'Invalid signature format.',\n 'InvalidSignatureType()': 'Invalid signature type.',\n 'InvalidSpendingLimit()': 'Invalid spending limit.',\n 'InvalidSupplyCap()': 'Invalid supply cap.',\n 'InvalidSwapCalculation()': 'Invalid swap calculation.',\n 'InvalidTempoBlockNumber()': 'Invalid Tempo block number.',\n 'InvalidThreshold()': 'Invalid threshold.',\n 'InvalidTick()': 'The price tick is invalid.',\n 'InvalidToken()': 'This token is not supported on the exchange.',\n 'InvalidTokenEnablementTransition()': 'Invalid token enablement transition.',\n 'InvalidTransferPolicyId()': 'Invalid transfer policy.',\n 'InvalidValidatorAddress()': 'Invalid validator address.',\n 'InvalidWeight()': 'Invalid weight.',\n 'KeyAlreadyExists()': 'Key already exists.',\n 'KeyAlreadyRevoked()': 'Key has already been revoked.',\n 'KeyAuthorizationWitnessAlreadyBurned()': 'Key authorization witness has already been burned.',\n 'KeyExpired()': 'Key has expired.',\n 'KeyNotFound()': 'Key not found.',\n 'LeaderAlreadyUpdatedThisBlock()': 'The leader has already been updated in this block.',\n 'LegacyAuthorizeKeySelectorChanged(bytes4)': 'Legacy authorize key selector changed to {0}.',\n 'LogoURITooLong()': 'Logo URI is too long.',\n 'MasterIdCollision(address)': 'Master ID collision with {0}.',\n 'MaxInputExceeded()': 'The required input exceeds the slippage maximum — try increasing slippage tolerance.',\n 'MigrationNotComplete()': 'Migration is not complete.',\n 'MustDelegateCall()': 'A delegate call is required.',\n 'NoEncryptionKeyAtBlock(uint64)': 'No encryption key exists at block {0}.',\n 'NoEncryptionKeySet()': 'No encryption key is set.',\n 'NoOptedInSupply()': 'No opted-in supply.',\n 'NonceOverflow()': 'Nonce overflow.',\n 'NotAdmin()': 'The caller is not the administrator.',\n 'NotFactory()': 'The caller is not the factory.',\n 'NotHostPort(string,string,string)': '\"{1}\" is not a valid host:port for {0}.',\n 'NotInitialized()': 'Not initialized.',\n 'NotIp(string,string)': '\"{0}\" is not a valid IP address.',\n 'NotIpPort(string,string)': '\"{0}\" is not a valid IP:port.',\n 'NotIpPort(string,string,string)': '\"{1}\" is not a valid IP:port for {0}.',\n 'NotOwner()': 'The caller is not an owner.',\n 'NotPauseAuthority()': 'The caller is not the pause authority.',\n 'NotPayeeOrOperator()': 'Not payee or operator.',\n 'NotPayer()': 'Not payer.',\n 'NotPendingAdmin()': 'The caller is not the pending administrator.',\n 'NotSelf()': 'The caller must be the contract itself.',\n 'NotSequencer()': 'The caller is not a sequencer.',\n 'OnlyDirectCall()': 'A direct call is required.',\n 'OrderDoesNotExist()': 'No order exists with the given ID.',\n 'OrderNotStale()': 'This order is not yet eligible for stale-cleanup.',\n 'PairAlreadyExists()': 'A trading pair for these tokens has already been created.',\n 'PairDoesNotExist()': 'No trading pair exists for these tokens.',\n 'PermitExpired()': 'Permit has expired.',\n 'PolicyForbids()': 'Forbidden by policy.',\n 'PolicyNotFound()': 'Policy not found.',\n 'PolicyNotSimple()': 'Policy is not a simple policy.',\n 'PortalIsPaused()': 'The portal is paused.',\n 'PrimitiveRootRequired()': 'The root key must sign the upgrade transaction.',\n 'ProofOfWorkFailed()': 'Proof of work failed.',\n 'ProtectedAddress()': 'Address is protected.',\n 'ProtocolNonceNotSupported()': 'Protocol nonce is not supported.',\n 'PublicKeyAlreadyExists()': 'Public key already exists.',\n 'ReentrantWithdrawal()': 'Reentrant withdrawals are not allowed.',\n 'RootKeyRetired(address)': 'The root key of {0} is retired.',\n 'SequencerConfigurationUnchanged()': 'The sequencer configuration is unchanged.',\n 'SignatureTypeMismatch(uint8,uint8)': 'Signature type mismatch. Expected {0}, got {1}.',\n 'SpendingLimitExceeded()': 'Spending limit exceeded.',\n 'StaleLeadershipEpoch(uint64,uint64)': 'Stale leadership epoch. Expected {0}, got {1}.',\n 'SupplyCapExceeded()': 'Supply cap exceeded.',\n 'TickOutOfBounds(int16)': 'Price tick {0} is outside the allowed range.',\n 'TokenAlreadyEnabled()': 'The token is already enabled.',\n 'TokenAlreadyExists(address)': 'Token {0} already exists.',\n 'TokenEnablementBlockCapacityExceeded(uint64)': 'The token enablement capacity per block exceeds the maximum ({0}).',\n 'TokenEnablementCursorNotInitialized()': 'The token enablement cursor is not initialized.',\n 'TokenMetadataTooLong()': 'Token metadata is too long.',\n 'TokenNotEnabled()': 'The token is not enabled.',\n 'TokenTransferPolicyNotSet()': 'The token transfer policy is not set.',\n 'TooManyOwners()': 'There are too many owners.',\n 'TransferFailed()': 'The transfer failed.',\n 'Unauthorized()': 'Unauthorized.',\n 'UnauthorizedCaller()': 'Unauthorized caller.',\n 'UnauthorizedClaimer()': 'Unauthorized claimer.',\n 'UnauthorizedConfigurableAccountCaller()': 'Unauthorized configurable account caller.',\n 'Uninitialized()': 'Uninitialized.',\n 'UpgradeMustBeOnlyCall()': 'The upgrade must be the only call in the transaction.',\n 'ValidatorAlreadyDeactivated()': 'Validator is already deactivated.',\n 'ValidatorAlreadyExists()': 'Validator already exists.',\n 'ValidatorNotFound()': 'Validator not found.',\n 'VirtualAddressNotAllowed()': 'Virtual address is not allowed.',\n 'VirtualAddressUnregistered()': 'Virtual address is not registered.',\n 'ZeroDeposit()': 'Deposit cannot be zero.',\n 'ZeroPublicKey()': 'Public key cannot be zero.',\n};\n/** Steps to resolve an error, keyed by error signature in `Abis.core`. */\nexport const hints = {\n 'CallNotAllowed()': [\n \"The access key's scopes do not allow this target, selector, or recipient.\",\n 'Authorize an access key whose scopes include this call.',\n ],\n 'ContractPaused()': [\n 'The token is paused. An account with the unpause role can unpause it.',\n ],\n 'ExpiringNonceReplay()': ['Resend the transaction with a new nonce.'],\n 'ExpiryInPast()': ['Set the expiry to a future time.'],\n 'InsufficientAllowance()': [\n 'Approve the spender for at least this amount.',\n ],\n 'InsufficientBalance(uint256,uint256,address)': [\n 'Fund the account or lower the amount.',\n ],\n 'InsufficientFeeTokenBalance()': [\n 'Fund the account with the fee token, or pay fees with another token.',\n ],\n 'KeyAlreadyExists()': ['Use a new access key, or revoke the existing one.'],\n 'KeyAlreadyRevoked()': [\n 'Revoked access keys cannot be used or re-authorized. Authorize a new access key.',\n ],\n 'KeyExpired()': ['Authorize a new access key.'],\n 'KeyNotFound()': [\n 'Authorize the access key first, or authorize it in the same transaction with a key authorization.',\n ],\n 'PolicyForbids()': [\n 'The token transfer policy forbids this sender or recipient.',\n ],\n 'SpendingLimitExceeded()': [\n 'Raise the spending limit, or wait for a periodic limit to reset.',\n ],\n 'UnauthorizedCaller()': ['Sign with the root key or an admin access key.'],\n 'AmountExceedsDeposit()': [\n 'Top up the channel, or use a voucher for a smaller amount.',\n ],\n 'AmountNotIncreasing()': [\n 'Use a voucher with a higher cumulative amount than the amount already settled.',\n ],\n 'BelowMinimumOrderSize(uint128)': ['Place a larger order.'],\n 'ChannelNotFound()': [\n 'Check the channel details, or open the channel first.',\n ],\n 'CloseNotReady()': [\n 'Request a close, then wait for the grace period to end before withdrawing.',\n ],\n 'InsufficientBalance()': [\n 'Deposit more of the token, or lower the amount.',\n ],\n 'InsufficientLiquidity()': ['Use a smaller amount.'],\n 'InsufficientOutput()': [\n 'Lower the minimum output amount, or sell a smaller amount.',\n ],\n 'InsufficientReserves()': ['Use a smaller amount.'],\n 'InvalidExpiringNonceExpiry()': [\n 'Set the transaction expiry to a time in the near future.',\n ],\n 'InvalidFlipTick()': [\n 'Choose a flip tick on the correct side of the order tick.',\n ],\n 'MaxInputExceeded()': [\n 'Raise the maximum input amount, or buy a smaller amount.',\n ],\n 'OrderDoesNotExist()': [\n 'Check the order ID. Filled and cancelled orders no longer exist.',\n ],\n 'OrderNotStale()': [\n 'Only orders whose maker lost authorization can be cancelled as stale.',\n ],\n 'PairDoesNotExist()': ['Create the trading pair first.'],\n 'PolicyNotFound()': ['Check the policy ID, or create the policy first.'],\n 'SignatureTypeMismatch(uint8,uint8)': [\n 'Sign with the same key type the access key was authorized with.',\n ],\n 'SupplyCapExceeded()': ['Mint a smaller amount, or raise the supply cap.'],\n 'TickOutOfBounds(int16)': ['Use a tick within the allowed range.'],\n 'Unauthorized()': ['The account lacks the permission this call requires.'],\n 'AccountAlreadyConfigurable()': [\n 'The account is already configurable. Rotate its owners with `updateConfig` instead.',\n ],\n 'AccountHasCode()': [\n 'Only accounts without code or delegation can be upgraded in place.',\n ],\n 'PrimitiveRootRequired()': [\n \"Send the upgrade from the account's root key, not an access key or another account.\",\n ],\n 'RootKeyRetired(address)': [\n 'The account was upgraded to a configurable account. Sign with its owners instead of the retired root key.',\n ],\n 'UnauthorizedConfigurableAccountCaller()': [\n 'Only the configurable account can update its own configuration.',\n ],\n 'UpgradeMustBeOnlyCall()': [\n 'Send `upgradeAccount` as the only call, without a key authorization or authorization list.',\n ],\n};\n/** Interpolate `{0}`, `{1}`, … placeholders with args. */\nfunction interpolate(template, args) {\n if (!args)\n return template;\n return template.replace(/\\{(\\d+)\\}/g, (_, i) => {\n const v = args[Number(i)];\n return v === undefined ? `{${i}}` : String(v);\n });\n}\nexport function from(error) {\n const source = typeof error === 'string'\n ? { data: error, message: 'Unknown execution error.' }\n : error;\n const decoded = parse(source);\n const descriptors = Object.getOwnPropertyDescriptors(source);\n // Native stack accessors depend on the original error's internal state.\n if ('stack' in source)\n descriptors.stack = {\n configurable: descriptors.stack?.configurable ?? true,\n enumerable: descriptors.stack?.enumerable ?? false,\n value: source.stack,\n writable: descriptors.stack?.writable ?? true,\n };\n for (const [key, descriptor] of Object.entries(Object.getOwnPropertyDescriptors(decoded)))\n descriptors[key] = {\n ...descriptor,\n enumerable: descriptors[key]?.enumerable ?? true,\n };\n return Object.create(Object.getPrototypeOf(source), descriptors);\n}\n/**\n * Selects execution metadata for JSON serialization.\n *\n * Omits decoded arguments and original error properties, including the stack and cause.\n *\n * @example\n * ```ts\n * import { ExecutionError } from 'viem/tempo'\n *\n * const error = ExecutionError.from(new Error('execution reverted: failed'))\n * const rpc = ExecutionError.serialize(error)\n * // { errorName: 'unknown', message: 'failed' }\n * ```\n *\n * @param preimage - Decorated execution error.\n * @returns Execution error without decoded arguments.\n */\nexport function serialize(preimage) {\n if (preimage.errorName === 'unknown')\n return { errorName: 'unknown', message: preimage.message };\n return {\n errorName: preimage.errorName,\n abiItem: preimage.abiItem,\n message: preimage.message,\n data: preimage.data,\n };\n}\nfunction extractRevertData(error, seen = new Set()) {\n if (!error || typeof error !== 'object' || seen.has(error))\n return null;\n seen.add(error);\n const e = error;\n if (typeof e.data === 'string' && /^0x(?:[\\da-f]{2})*$/i.test(e.data))\n return e.data;\n for (const inner of [e.data, e.cause, e.error]) {\n const data = extractRevertData(inner, seen);\n if (data)\n return data;\n }\n if (typeof e.walk === 'function') {\n const inner = e.walk((e) => typeof e.data === 'string');\n if (inner)\n return extractRevertData(inner, seen);\n }\n return null;\n}\nfunction parse(error) {\n const raw = error.details ??\n error.shortMessage ??\n error.message;\n const data = extractRevertData(error);\n if (data) {\n try {\n const decoded = decodeErrorResult({ abi: Abis.coreErrors, data });\n const template = messages[formatAbiItem(decoded.abiItem)];\n return {\n ...decoded,\n data,\n message: template\n ? interpolate(template, decoded.args)\n : raw.replace(/^execution reverted:\\s*/i, ''),\n };\n }\n catch {\n if (data.length === 10) {\n const abiItem = Abis.coreErrors.find((item) => item.type === 'error' &&\n toFunctionSelector(formatAbiItem(item)) === data.toLowerCase());\n if (abiItem?.type === 'error')\n return {\n abiItem,\n args: undefined,\n data,\n errorName: abiItem.name,\n message: messages[formatAbiItem(abiItem)],\n };\n }\n }\n }\n // Nodes print zero-argument errors as `Name(Name)`, whose revert data is the selector alone.\n const debugMatch = /\\b(\\w+)\\(\\1\\)/.exec(raw);\n const abiItem = debugMatch\n ? Abis.coreErrors.find((item) => item.name === debugMatch[1] && item.inputs.length === 0)\n : undefined;\n if (abiItem)\n return {\n abiItem,\n args: undefined,\n data: toFunctionSelector(formatAbiItem(abiItem)),\n errorName: abiItem.name,\n message: messages[formatAbiItem(abiItem)],\n };\n // Human-readable names cannot distinguish overloads with different templates.\n const nameMatch = /:\\s*(\\w+)\\(([^)]*)\\)/.exec(raw);\n if (nameMatch) {\n const templates = Object.entries(messages).filter(([signature]) => signature.startsWith(`${nameMatch[1]}(`));\n const template = nameMatch[2] === ''\n ? messages[`${nameMatch[1]}()`]\n : templates.length === 1\n ? templates[0]?.[1]\n : undefined;\n if (template)\n return { errorName: 'unknown', message: template };\n }\n return {\n errorName: 'unknown',\n message: raw.replace(/^execution reverted:\\s*/i, ''),\n };\n}\n//# sourceMappingURL=ExecutionError.js.map"],"ignoreList":[0,1,2,3,4,5,6,7,8],"mappings":"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"}
|