@vechain/vechain-kit 2.5.1 → 2.6.1
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/assets/index.d.cts +1 -1
- package/dist/assets/index.d.mts +1 -1
- package/dist/de-BFiyX1GF.cjs +2 -0
- package/dist/de-BFiyX1GF.cjs.map +1 -0
- package/dist/de-CL456uk2.mjs +2 -0
- package/dist/de-CL456uk2.mjs.map +1 -0
- package/dist/es-BqNNKHB0.mjs +2 -0
- package/dist/es-BqNNKHB0.mjs.map +1 -0
- package/dist/es-lVekqJvu.cjs +2 -0
- package/dist/es-lVekqJvu.cjs.map +1 -0
- package/dist/fr-C5OuuOPh.cjs +2 -0
- package/dist/fr-C5OuuOPh.cjs.map +1 -0
- package/dist/fr-PQTnQtHc.mjs +2 -0
- package/dist/fr-PQTnQtHc.mjs.map +1 -0
- package/dist/hi-BQ2VZQlz.mjs +2 -0
- package/dist/hi-BQ2VZQlz.mjs.map +1 -0
- package/dist/hi-DyR8xd6m.cjs +2 -0
- package/dist/hi-DyR8xd6m.cjs.map +1 -0
- package/dist/{index-BQSKWDL8.d.cts → index-B71-RkVd.d.cts} +157 -151
- package/dist/index-B71-RkVd.d.cts.map +1 -0
- package/dist/{index-I8fe7GR2.d.cts → index-Dc-RB9c2.d.mts} +4 -4
- package/dist/{index-I8fe7GR2.d.cts.map → index-Dc-RB9c2.d.mts.map} +1 -1
- package/dist/{index--hSO7Xv4.d.mts → index-s3ccs5Id.d.cts} +4 -4
- package/dist/{index--hSO7Xv4.d.mts.map → index-s3ccs5Id.d.cts.map} +1 -1
- package/dist/{index-CpmIWCFY.d.mts → index-yh6UaaBN.d.mts} +109 -103
- package/dist/index-yh6UaaBN.d.mts.map +1 -0
- package/dist/index.cjs +8 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -3
- package/dist/index.d.mts +3 -3
- package/dist/index.mjs +8 -8
- package/dist/index.mjs.map +1 -1
- package/dist/it-CcvV1IlX.mjs +2 -0
- package/dist/it-CcvV1IlX.mjs.map +1 -0
- package/dist/it-CtyGT5hV.cjs +2 -0
- package/dist/it-CtyGT5hV.cjs.map +1 -0
- package/dist/ja-EfHF9V_o.cjs +2 -0
- package/dist/ja-EfHF9V_o.cjs.map +1 -0
- package/dist/ja-_mAa1fdP.mjs +2 -0
- package/dist/ja-_mAa1fdP.mjs.map +1 -0
- package/dist/ko-BeUiFlha.cjs +2 -0
- package/dist/ko-BeUiFlha.cjs.map +1 -0
- package/dist/ko-CfT-gn4I.mjs +2 -0
- package/dist/ko-CfT-gn4I.mjs.map +1 -0
- package/dist/nl-BqGKf8N1.cjs +2 -0
- package/dist/nl-BqGKf8N1.cjs.map +1 -0
- package/dist/nl-ls_GRrv6.mjs +2 -0
- package/dist/nl-ls_GRrv6.mjs.map +1 -0
- package/dist/pt-B-R-6Hdt.mjs +2 -0
- package/dist/pt-B-R-6Hdt.mjs.map +1 -0
- package/dist/pt-I1a6tTFu.cjs +2 -0
- package/dist/pt-I1a6tTFu.cjs.map +1 -0
- package/dist/ro-Ba8tFBmh.cjs +2 -0
- package/dist/ro-Ba8tFBmh.cjs.map +1 -0
- package/dist/ro-BoGXUy66.mjs +2 -0
- package/dist/ro-BoGXUy66.mjs.map +1 -0
- package/dist/ru-C0bvvCc8.cjs +2 -0
- package/dist/ru-C0bvvCc8.cjs.map +1 -0
- package/dist/ru-D-Dfg2x-.mjs +2 -0
- package/dist/ru-D-Dfg2x-.mjs.map +1 -0
- package/dist/sv-BBsWb8O5.mjs +2 -0
- package/dist/sv-BBsWb8O5.mjs.map +1 -0
- package/dist/sv-CDqUg0Wg.cjs +2 -0
- package/dist/sv-CDqUg0Wg.cjs.map +1 -0
- package/dist/tr-CUjmBjJO.cjs +2 -0
- package/dist/tr-CUjmBjJO.cjs.map +1 -0
- package/dist/tr-DRmU0qqA.mjs +2 -0
- package/dist/tr-DRmU0qqA.mjs.map +1 -0
- package/dist/tw-CGmTbBO2.mjs +2 -0
- package/dist/tw-CGmTbBO2.mjs.map +1 -0
- package/dist/tw-Ci_2P7in.cjs +2 -0
- package/dist/tw-Ci_2P7in.cjs.map +1 -0
- package/dist/utils/index.cjs +1 -1
- package/dist/utils/index.d.cts +2 -2
- package/dist/utils/index.d.mts +2 -2
- package/dist/utils/index.mjs +1 -1
- package/dist/utils-CzaSErgL.cjs +2 -0
- package/dist/utils-CzaSErgL.cjs.map +1 -0
- package/dist/utils-D6wgzl57.mjs +2 -0
- package/dist/utils-D6wgzl57.mjs.map +1 -0
- package/dist/vi-D6xwAgyf.cjs +2 -0
- package/dist/vi-D6xwAgyf.cjs.map +1 -0
- package/dist/vi-tNWk5jJK.mjs +2 -0
- package/dist/vi-tNWk5jJK.mjs.map +1 -0
- package/dist/zh-BY6GpEW-.cjs +2 -0
- package/dist/zh-BY6GpEW-.cjs.map +1 -0
- package/dist/zh-DqPPuL6F.mjs +2 -0
- package/dist/zh-DqPPuL6F.mjs.map +1 -0
- package/package.json +2 -1
- package/dist/index-BQSKWDL8.d.cts.map +0 -1
- package/dist/index-CpmIWCFY.d.mts.map +0 -1
- package/dist/utils-DeETrpws.cjs +0 -2
- package/dist/utils-DeETrpws.cjs.map +0 -1
- package/dist/utils-ctNraYqK.mjs +0 -2
- package/dist/utils-ctNraYqK.mjs.map +0 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require(`./assets-DNJsQD7_.cjs`);let t=require(`@chakra-ui/react`),n=require(`react`);n=e.Q(n);let r=require(`react/jsx-runtime`),i=require(`@vechain/picasso`),a=require(`bignumber.js`),o=require(`ethers`),s=require(`viem/accounts`),ee=require(`@vechain/sdk-core`);const te={ipfsFetchingService:`https://api.dev.gateway-proxy.vechain.org/ipfs`,ipfsPinningService:`https://api.dev.gateway-proxy.vechain.org/api/v1/pinning/pinFileToIPFS`,vthoContractAddress:`0x0000000000000000000000000000456E65726779`,b3trContractAddress:`0xd31A6f2DBa8785cE41AB68Ea192791B5175309F4`,vot3ContractAddress:`0x028Af33230576c1e073C8245F72a7A4aa53564E4`,b3trGovernorAddress:`0x36E0e9b46D56dF12Dd69fD560e41954C73cE9ded`,timelockContractAddress:`0x125389845c93Efcf6471BA8BE1AC19c11e128603`,xAllocationPoolContractAddress:`0xC8232c91E2f744E533322B99F95f809b9f7ec446`,xAllocationVotingContractAddress:`0x074F093f4C534a16cDD09cb4b2669713218A762a`,emissionsContractAddress:`0x6a084E85f38400790043788FcCee39595616aa3A`,voterRewardsContractAddress:`0xbAb852081C459c0060960287aDcf9a0C2c1dc4b8`,galaxyMemberContractAddress:`0xbdA1cff75d2D43AB9186Ada41fECF79e25c49Ba3`,treasuryContractAddress:`0xe9414513Fe0e3b9bf7a61eC5c1AC7Df943fB3e77`,x2EarnAppsContractAddress:`0x432C46476f4970575C43B19588A170D237dC4929`,x2EarnRewardsPoolContractAddress:`0x134E4Fce6761f660401808CF86aE0e62cE52a81E`,nodeManagementContractAddress:`0xa96B5057171D797298A71178b48449A7bC615D8E`,veBetterPassportContractAddress:`0x8db6D14452fE36ba86C341AfEFaC0f90A0Db2bcb`,x2EarnCreatorContractAddress:`0x4e5f7eb452e9ecd75c0B29e3540014cBe01bBF52`,veDelegate:`0xfc32a9895C78CE00A1047d602Bd81Ea8134CC32b`,veDelegateVotes:`0xeb71148c9B3cd57e228c2152d79f6e78F5F1ef9a`,veDelegateTokenContractAddress:`0xD3f7b82Df5705D34f64C634d2dEf6B1cB3116950`,oracleContractAddress:`0x49eC7192BF804Abc289645ca86F1eD01a6C17713`,accountFactoryAddress:`0xC06Ad8573022e2BE416CA89DA47E8c592971679A`,cleanifyCampaignsContractAddress:`0x7a11D63338576aE8c038868433ea199d7E5319A6`,cleanifyChallengesContractAddress:`0xa58681692AdDD2e8E37f9113D40Bb9253C03F65e`,veWorldSubdomainClaimerContractAddress:`0x0000000000000000000000000000000000000000`,vetDomainsContractAddress:`0x0000000000000000000000000000000000000000`,vetDomainsPublicResolverAddress:`0x0000000000000000000000000000000000000000`,vetDomainsReverseRegistrarAddress:`0x5c970901a587BA3932C835D4ae5FAE2BEa7e78Bc`,vnsResolverAddress:`0x0000000000000000000000000000000000000000`,sassContractAddress:`0x0000000000000000000000000000000000000000`,vetDomainAvatarUrl:`https://testnet.vet.domains/api/avatar`,indexerUrl:`https://b3tr.testnet.vechain.org/api/v1`,b3trIndexerUrl:`https://b3tr.testnet.vechain.org/api/v1`,graphQlIndexerUrl:`https://graph.vet/subgraphs/name/vns`,nodeUrl:`http://localhost:8669`,network:{id:`solo`,name:`solo`,type:`solo`,defaultNet:!0,urls:[`http://localhost:8669`],explorerUrl:`https://explore-testnet.vechain.org`,blockTime:1e4,genesis:{number:0,id:`0x00000000c05a20fbca2bf6ae3affba6af4a74b800b585bf7a4988aba7aea69f6`,size:170,parentID:`0xffffffff53616c757465202620526573706563742c20457468657265756d2100`,timestamp:1530316800,gasLimit:1e7,beneficiary:`0x0000000000000000000000000000000000000000`,gasUsed:0,totalScore:0,txsRoot:`0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0`,txsFeatures:0,stateRoot:`0x93de0ffb1f33bc0af053abc2a87c4af44594f5dcb1cb879dd823686a15d68550`,receiptsRoot:`0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0`,signer:`0x0000000000000000000000000000000000000000`,isTrunk:!0,transactions:[]}},explorerUrl:`https://explore-testnet.vechain.org`};var c=te;const l={ipfsFetchingService:`https://api.dev.gateway-proxy.vechain.org/ipfs`,ipfsPinningService:`https://api.dev.gateway-proxy.vechain.org/api/v1/pinning/pinFileToIPFS`,vthoContractAddress:`0x0000000000000000000000000000456E65726779`,b3trContractAddress:`0x95761346d18244bb91664181bf91193376197088`,vot3ContractAddress:`0x6e8b4a88d37897fc11f6ba12c805695f1c41f40e`,b3trGovernorAddress:`0xc30b4d0837f7e3706749655d8bde0c0f265dd81b`,timelockContractAddress:`0x835509222aa67c333a1cbf29bd341e014aba86c9`,xAllocationPoolContractAddress:`0x6f7b4bc19b4dc99005b473b9c45ce2815bbe7533`,xAllocationVotingContractAddress:`0x8800592c463f0b21ae08732559ee8e146db1d7b2`,emissionsContractAddress:`0x66898f98409db20ed6a1bf0021334b7897eb0688`,voterRewardsContractAddress:`0x851ef91801899a4e7e4a3174a9300b3e20c957e8`,galaxyMemberContractAddress:`0x38a59fa7fd7039884465a0ff285b8c4b6fe394ca`,x2EarnCreatorContractAddress:`0xb89f0ecdaf9987f87912d6c77756435fe4085b05`,nodeManagementContractAddress:`0xde17d0a516c38c168d37685bb71465f656aa256e`,x2EarnAppsContractAddress:`0x0b54a094b877a25bdc95b4431eaa1e2206b1ddfe`,treasuryContractAddress:`0x3d531a80c05099c71b02585031f86a2988e0caca`,x2EarnRewardsPoolContractAddress:`0x2d2a2207c68a46fc79325d7718e639d1047b0d8b`,veBetterPassportContractAddress:`0x592c756df7a5d39de1735030e8b9c18b7417e6c4`,veDelegate:`0xfc32a9895C78CE00A1047d602Bd81Ea8134CC32b`,veDelegateVotes:`0xeb71148c9B3cd57e228c2152d79f6e78F5F1ef9a`,veDelegateTokenContractAddress:`0xD3f7b82Df5705D34f64C634d2dEf6B1cB3116950`,oracleContractAddress:`0xdcCAaBd81B38e0dEEf4c202bC7F1261A4D9192C6`,accountFactoryAddress:`0x713b908Bcf77f3E00EFEf328E50b657a1A23AeaF`,cleanifyCampaignsContractAddress:`0x22d19ACBD2cBf6b2B6C546395c26B9Cb448248BF`,cleanifyChallengesContractAddress:`0x8Cc885DC3e5c376632CCEA0e8e1a51F1B3572442`,veWorldSubdomainClaimerContractAddress:`0xe5af50e7ad1aaab4fbe4efbb2b30f764013918b3`,vetDomainsContractAddress:`0xcBFB30c1F267914816668d53AcBA7bA7c9806D13`,vetDomainsPublicResolverAddress:`0xA6eFd130085a127D090ACb0b100294aD1079EA6f`,vetDomainsReverseRegistrarAddress:`0x6878f1aD5e3015310CfE5B38d7B7071C5D8818Ca`,vnsResolverAddress:`0xc403b8EA53F707d7d4de095f0A20bC491Cf2bc94`,sassContractAddress:`0x1b299f501bce347893f5a3a10e625c9a3345365e`,vetDomainAvatarUrl:`https://testnet.vet.domains/api/avatar`,indexerUrl:`https://indexer.testnet.vechain.org/api/v1`,b3trIndexerUrl:`https://indexer.testnet.vechain.org/api/v1`,graphQlIndexerUrl:`https://graph.vet/subgraphs/name/vns`,nodeUrl:`https://testnet.vechain.org`,network:{id:`testnet`,name:`testnet`,type:`test`,defaultNet:!0,urls:[`https://testnet.vechain.org`,`https://vethor-node-test.vechaindev.com`,`https://sync-testnet.veblocks.net`,`https://testnet.vecha.in`],explorerUrl:`https://insight.vecha.in/#/test`,blockTime:1e4,genesis:{number:0,id:`0x000000000b2bce3c70bc649a02749e8687721b09ed2e15997f466536b20bb127`,size:170,parentID:`0xffffffff00000000000000000000000000000000000000000000000000000000`,timestamp:1530014400,gasLimit:1e7,beneficiary:`0x0000000000000000000000000000000000000000`,gasUsed:0,totalScore:0,txsRoot:`0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0`,txsFeatures:0,stateRoot:`0x4ec3af0acbad1ae467ad569337d2fe8576fe303928d35b8cdd91de47e9ac84bb`,receiptsRoot:`0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0`,signer:`0x0000000000000000000000000000000000000000`,isTrunk:!0,transactions:[]}},explorerUrl:`https://explore-testnet.vechain.org/transactions`};var u=l;const d={ipfsFetchingService:`https://api.gateway-proxy.vechain.org/ipfs`,indexerUrl:`https://indexer.mainnet.vechain.org/api/v1`,ipfsPinningService:`https://api.gateway-proxy.vechain.org/api/v1/pinning/pinFileToIPFS`,b3trIndexerUrl:`https://indexer.mainnet.vechain.org/api/v1`,graphQlIndexerUrl:`https://graph.vet/subgraphs/name/vns`,nodeUrl:`https://mainnet.vechain.org`,network:{id:`main`,name:`main`,type:`main`,defaultNet:!0,urls:[`https://mainnet.vechain.org`,`https://vethor-node.vechain.com`,`https://mainnet.veblocks.net`,`https://mainnet.vecha.in`],explorerUrl:`https://vechainstats.com`,blockTime:1e4,genesis:{number:0,id:`0x00000000851caf3cfdb6e899cf5958bfb1ac3413d346d43539627e6be7ec1b4a`,size:170,parentID:`0xffffffff53616c757465202620526573706563742c20457468657265756d2100`,timestamp:1530316800,gasLimit:1e7,beneficiary:`0x0000000000000000000000000000000000000000`,gasUsed:0,totalScore:0,txsRoot:`0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0`,txsFeatures:0,stateRoot:`0x09bfdf9e24dd5cd5b63f3c1b5d58b97ff02ca0490214a021ed7d99b93867839c`,receiptsRoot:`0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0`,signer:`0x0000000000000000000000000000000000000000`,isTrunk:!0,transactions:[]}},explorerUrl:`https://vechainstats.com/transaction`,vthoContractAddress:`0x0000000000000000000000000000456E65726779`,b3trContractAddress:`0x5ef79995FE8a89e0812330E4378eB2660ceDe699`,vot3ContractAddress:`0x76Ca782B59C74d088C7D2Cce2f211BC00836c602`,b3trGovernorAddress:`0x1c65C25fABe2fc1bCb82f253fA0C916a322f777C`,timelockContractAddress:`0x7B7EaF620d88E38782c6491D7Ce0B8D8cF3227e4`,xAllocationPoolContractAddress:`0x4191776F05f4bE4848d3f4d587345078B439C7d3`,xAllocationVotingContractAddress:`0x89A00Bb0947a30FF95BEeF77a66AEdE3842Fe5B7`,emissionsContractAddress:`0xDf94739bd169C84fe6478D8420Bb807F1f47b135`,voterRewardsContractAddress:`0x838A33AF756a6366f93e201423E1425f67eC0Fa7`,galaxyMemberContractAddress:`0x93B8cD34A7Fc4f53271b9011161F7A2B5fEA9D1F`,treasuryContractAddress:`0xD5903BCc66e439c753e525F8AF2FeC7be2429593`,x2EarnAppsContractAddress:`0x8392B7CCc763dB03b47afcD8E8f5e24F9cf0554D`,x2EarnRewardsPoolContractAddress:`0x6Bee7DDab6c99d5B2Af0554EaEA484CE18F52631`,x2EarnCreatorContractAddress:`0xe8e96a768ffd00417d4bd985bec9EcfC6F732a7f`,nodeManagementContractAddress:`0xB0EF9D89C6b49CbA6BBF86Bf2FDf0Eee4968c6AB`,veBetterPassportContractAddress:`0x35a267671d8EDD607B2056A9a13E7ba7CF53c8b3`,veDelegate:`0xfc32a9895C78CE00A1047d602Bd81Ea8134CC32b`,veDelegateVotes:`0xeb71148c9B3cd57e228c2152d79f6e78F5F1ef9a`,veDelegateTokenContractAddress:`0xD3f7b82Df5705D34f64C634d2dEf6B1cB3116950`,oracleContractAddress:`0x49eC7192BF804Abc289645ca86F1eD01a6C17713`,accountFactoryAddress:`0xC06Ad8573022e2BE416CA89DA47E8c592971679A`,cleanifyCampaignsContractAddress:`0x7a11D63338576aE8c038868433ea199d7E5319A6`,cleanifyChallengesContractAddress:`0xa58681692AdDD2e8E37f9113D40Bb9253C03F65e`,veWorldSubdomainClaimerContractAddress:`0xa4173c32fe8a61a8fd0d0234675b559fc360446a`,vetDomainsContractAddress:`0xa9231da8BF8D10e2df3f6E03Dd5449caD600129b`,vetDomainsPublicResolverAddress:`0xabac49445584C8b6c1472b030B1076Ac3901D7cf`,vetDomainsReverseRegistrarAddress:`0x5c970901a587BA3932C835D4ae5FAE2BEa7e78Bc`,vnsResolverAddress:`0xA11413086e163e41901bb81fdc5617c975Fa5a1A`,vetDomainAvatarUrl:`https://vet.domains/api/avatar`,sassContractAddress:`0x84b0caf6436aace4e21d10f126963fdd53ac31ea`};var f=d;const p=e=>{if(e===`solo`)return c;if(e===`test`)return u;if(e===`main`)return f;throw Error(`Unsupported NETWORK_TYPE ${e}`)},m=({...e})=>(0,r.jsxs)(t.Icon,{viewBox:`0 0 1684.56 1684.56`,...e,children:[(0,r.jsx)(`rect`,{fill:`#b1f16c`,width:`1684.56`,height:`1684.56`,rx:`157.74`,ry:`157.74`}),(0,r.jsx)(`path`,{fill:`#1d1d1d`,d:`M844.98,1386.28c-41.46,0-75.1-33.9-75.1-75.67,0-142.78-86.35-274.05-158.8-359.01-89.72-105.25-197.89-186.19-265.28-219.75-37.18-18.54-52.43-63.88-34.09-101.35,18.39-37.47,63.39-52.83,100.58-34.35,75.09,37.41,202.11,127.08,312.7,256.82,32.24,37.81,66.77,83.5,97.66,135.35,34.2-108.83,79.98-205.07,121.61-280.12,91.8-165.56,214.37-317.13,319.84-395.63,33.36-24.83,80.39-17.68,105.02,15.93,24.64,33.61,17.55,81-15.81,105.82-88.03,65.47-197.1,201.95-277.93,347.68-70.82,127.7-155.25,323.08-155.25,528.6,0,41.78-33.64,75.67-75.1,75.67h-.06Z`})]}),h=e=>{try{return typeof window>`u`?null:localStorage.getItem(e)}catch(t){return console.warn(`Error accessing localStorage for key "${e}":`,t),null}},ne=(e,t)=>{try{if(typeof window>`u`)return;localStorage.setItem(e,t)}catch(t){console.warn(`Error setting localStorage for key "${e}":`,t)}},re=e=>{try{if(typeof window>`u`)return;localStorage.removeItem(e)}catch(t){console.warn(`Error removing localStorage for key "${e}":`,t)}},ie=()=>{try{return typeof document<`u`?document.title:``}catch{return``}},ae=()=>{try{return typeof window<`u`&&window.location?window.location.origin:``}catch{return``}},g=()=>typeof window<`u`&&typeof document<`u`,oe=(e,t,n)=>{g()&&window.open(e,t,n)},se=e=>typeof document<`u`?document.querySelector(e):null,_=()=>typeof navigator<`u`,ce=()=>_()&&navigator.onLine,le=async e=>{try{return _()&&navigator.clipboard?(await navigator.clipboard.writeText(e),!0):!1}catch(e){return console.warn(`Error copying to clipboard:`,e),!1}},v=[`VOT3`],y={VET:new URL(`/static/img/coins/64x64/3077.png`,e.c).toString(),VTHO:new URL(`/static/img/coins/64x64/3012.png`,e.c).toString(),B3TR:new URL(`/static/img/coins/64x64/33509.png`,e.c).toString(),VOT3:new URL(`/17ff70aa1d898bc97ad690dbfad1a3b5643f7e0b.png`,e.c).toString(),veDelegate:new URL(`1c641b86096d56bf13d49f38388accd6db8b8b2e.png`,e.D).toString(),SASS:new URL(`https://prod-vechainkit-docs-images-bucket.s3.eu-west-1.amazonaws.com/sass-token-image.png`).toString()},b={VET:(0,r.jsx)(e.P,{}),VTHO:(0,r.jsx)(e.N,{}),B3TR:(0,r.jsx)(e.F,{}),VOT3:(0,r.jsx)(m,{})},ue=`cm4wxxujb022fyujl7g0thb21`,x=e.p;let S=function(e){return e[e.WhitelistCheck=1]=`WhitelistCheck`,e[e.BlacklistCheck=2]=`BlacklistCheck`,e[e.SignalingCheck=3]=`SignalingCheck`,e[e.ParticipationScoreCheck=4]=`ParticipationScoreCheck`,e[e.GmOwnershipCheck=5]=`GmOwnershipCheck`,e}({});const C={NETWORK:`vechain-kit:network`},w=()=>{if(typeof window>`u`)return{isDevelopment:!1,isProduction:!0};let e=h(C.NETWORK);return{isDevelopment:e===`test`,isProduction:e===`main`}},T={get isDevelopment(){return w().isDevelopment},get isProduction(){return w().isProduction}},E=()=>w().isProduction?`${e.u}/api/v1/`:`${e.d}/api/v1/`,D=[{id:`clz41gcg00e4ay75dmq3uzzgr`,name:`Cleanify`,website:e.s},{id:`cm153hrup0817axti38avlfyg`,name:`GreenCart`,website:e.f},{id:`clv9sfos20j6x1431ga80d95f`,name:`Mughsot`,website:e.m},{id:`cm4l8tiai070i108zo17oieyc`,name:`EVearn`,website:e.l}],O={url:new URL(`terms`,e.T).toString(),version:1,required:!0,displayName:`Vechain Kit Terms`},k={url:new URL(`cookies`,e.T).toString(),version:1,required:!1,displayName:`Vechain Kit Cookies`},A={tokenPriority:[`VET`,`B3TR`,`VTHO`],availableGasTokens:[`VET`,`B3TR`,`VTHO`],excludedTokens:[],alwaysConfirm:!1,gasTokenToUse:`VET`},j={B3TR:{type:`B3TR`,name:`B3TR Token`,symbol:`B3TR`,address:p(process.env.NEXT_PUBLIC_NETWORK_TYPE||`test`).b3trContractAddress,description:`Pay gas with B3TR`},VET:{type:`VET`,name:`VET Token`,symbol:`VET`,description:`Pay gas with VET`},VTHO:{type:`VTHO`,name:`VTHO Token`,symbol:`VTHO`,address:p(process.env.NEXT_PUBLIC_NETWORK_TYPE||`test`).vthoContractAddress,description:`Pay gas with VTHO`}},M=(e,t=6,n=4)=>`${e.slice(0,t)}•••${e.slice(-n)}`,N=(e,t=8,n=6)=>e.length<=t+n?e:`${e.substring(0,t)}•••${e.substring(e.length-n)}`,P=(e,t,n=null)=>{let r=n?` `+n:``;t||=e;let i=new Intl.NumberFormat(`en-US`,{style:`decimal`,minimumFractionDigits:Number.parseFloat(e.toString())%1==0?0:2}).format(L(Number(e),2));return!F(t)&&F(i)&&(i=`< 0.01`),i+r},F=e=>!e&&e!==0?!1:new a.BigNumber(e).isZero(),I=(e,t=!1)=>{let n=(0,i.picasso)(e.toLowerCase());return t?`data:image/svg+xml;base64,${Buffer.from(n,`utf8`).toString(`base64`)}`:`data:image/svg+xml;utf8,${n}`};function L(e,t=0){if(typeof e!=`number`||typeof t!=`number`)throw Error(`Invalid input: number and decimals must be of type number`);let n=parseInt(e.toExponential().split(`e-`)[1]||`0`,10),r=10**Math.max(0,t+n);return Math.floor(e*r)/r}const R=e=>{let t=(0,o.formatEther)(e),n=t===`0`?`0`:P(t);return{original:e.toString(),scaled:t,formatted:n}},z=(()=>{let e=(0,s.generatePrivateKey)(),t=(0,s.privateKeyToAccount)(e);return{privateKey:e,account:t,address:t.address}})(),de=`0x`,B=/^0[xX]/,V=/^(0[xX])?[a-fA-F0-9]+$/,H=e=>(W(e),e.replace(B,``)),U=e=>(W(e),B.test(e)?e.replace(B,`0x`):`0x${e}`),W=e=>{if(!G(e))throw Error(`Provided hex value is not valid`)},G=e=>!!e&&V.test(e),fe=e=>!G(e),K=e=>U(e.toLowerCase().trim()),pe=(e,t)=>{try{return H(e).toLowerCase()===H(t).toLowerCase()}catch{return!1}},q=(e,t)=>{if(!e||!t)return!1;if(t===e)return!0;try{return K(e)===K(t)}catch{return!1}},me=(e,t)=>{if(e.length!==t.length)return!1;let n=[...e].map(e=>e.toLowerCase()).sort((e,t)=>e.localeCompare(t)),r=[...t].map(e=>e.toLowerCase()).sort((e,t)=>e.localeCompare(t));for(let e=0;e<n.length;e++)if(!q(n[e],r[e]))return!1;return!0},he=()=>/^0x[a-fA-F0-9]{40}$/,ge=ee.Address.isValid,_e=(e,t)=>{let n=e.startsWith(`0x`)?e.slice(2):e;if(n.length>t)throw Error(`Input string is longer than the specified length`);return`0x${n.padStart(t,`0`)}`},J=e=>{let t=e.trim();return/^ipfs:\/\/[a-zA-Z0-9]+(\/[^/]+)*\/?$/.test(t)};function ve(e,t){return`ipfs://${e}/${t??``}`}async function ye(e,t,n){try{let r=new FormData;r.append(`file`,e,t);let i=await fetch(p(n).ipfsPinningService,{method:`POST`,headers:{"X-Project-Id":`vechain-kit`},body:r});if(!i.ok)throw Error(`HTTP error! status: ${i.status}`);return(await i.json()).IpfsHash}catch(e){throw console.error(`Error uploading blob:`,e),Error(`Failed to upload blob to IPFS`)}}let Y=function(e){return e.IMAGE=`image`,e.VIDEO=`video`,e.UNKNOWN=`unknown`,e.TEXT=`text`,e}({}),be=function(e){return e.NONE=`NONE`,e.WHITELIST=`WHITELIST`,e.BLACKLIST=`BLACKLIST`,e}({});const xe={usd:`$`,gbp:`£`,eur:`€`},Se=[`display`,`avatar`,`description`,`keywords`,`email`,`url`,`header`,`notice`,`location`,`phone`,`com.x`];function Ce(e,t){return e*(1+t)}function we(e,t=4){return Number(e).toLocaleString(void 0,{minimumFractionDigits:t,maximumFractionDigits:t})}let Te=function(e){return e.TERMS=`terms`,e.PRIVACY=`privacy`,e.COOKIES=`cookies`,e}({}),Ee=function(e){return e.VECHAIN_KIT=`vechain-kit`,e.APPLICATION=`application`,e}({});const X=(e,t)=>!!t.find(t=>{if(e?.split(`/`)[0]===t)return!0}),De=e=>X(e,[Y.IMAGE])?Y.IMAGE:X(e,[Y.VIDEO])?Y.VIDEO:Y.UNKNOWN,Oe=(e,t)=>{if(e.startsWith(`data:`))return e;let n=e?.split(`://`);if(n.length!==2)return null;let r=n?.[0]?.trim(),i=n[1];switch(r){case`ipfs`:if(!J(e))throw Error(`Invalid IPFS URI ${e}`);return`${p(t).ipfsFetchingService}/${i}`;case`ar`:return`https://arweave.net/${i}`;default:return e}},ke=[{level:`1`,name:`Earth`,image:`/images/nft-levels/0.png`,multiplier:1,b3trToUpgrade:0},{level:`2`,name:`Moon`,image:`/images/nft-levels/1.png`,multiplier:1.1,b3trToUpgrade:1e4},{level:`3`,name:`Mercury`,image:`/images/nft-levels/2.png`,multiplier:1.2,b3trToUpgrade:25e3},{level:`4`,name:`Venus`,image:`/images/nft-levels/3.png`,multiplier:1.5,b3trToUpgrade:5e4},{level:`5`,name:`Mars`,image:`/images/nft-levels/4.png`,multiplier:2,b3trToUpgrade:1e5},{level:`6`,name:`Jupiter`,image:`/images/nft-levels/5.png`,multiplier:2.5,b3trToUpgrade:25e4},{level:`7`,name:`Saturn`,image:`/images/nft-levels/6.png`,multiplier:3,b3trToUpgrade:5e5},{level:`8`,name:`Uranus`,image:`/images/nft-levels/7.png`,multiplier:5,b3trToUpgrade:25e5},{level:`9`,name:`Neptune`,image:`/images/nft-levels/8.png`,multiplier:10,b3trToUpgrade:5e6},{level:`10`,name:`Galaxy`,image:`/images/nft-levels/9.png`,multiplier:25,b3trToUpgrade:25e6}],Z={1:2,2:4,3:6,4:2,5:4,6:6,7:7},Ae=e=>{let t=new URLSearchParams;return Object.keys(e).forEach(n=>{let r=e[n];r!=null&&t.append(n,String(r))}),t.toString()},je={0:`/images/vnt/00-noNode.webp`,1:`/images/vnt/01-strength.webp`,2:`/images/vnt/02-thunder.webp`,3:`/images/vnt/03-mjolnir.webp`,4:`/images/vnt/04-vethorX.webp`,5:`/images/vnt/05-strengthX.webp`,6:`/images/vnt/06-thunderX.webp`,7:`/images/vnt/07-mjolnirX.webp`},Me=4,Q={1:`Strength`,2:`Thunder`,3:`Mjolnir`},$={4:`VeThorX`,5:`StrengthX`,6:`ThunderX`,7:`MjolnirX`},Ne={...Q,...$},Pe={SECOND:1e3,MINUTE:1e3*60,HOUR:1e3*60*60,DAY:1e3*60*60*24,WEEK:1e3*60*60*24*7,MONTH:1e3*60*60*24*30,YEAR:1e3*60*60*24*365},Fe=e=>e?[`rejected`,`cancelled`,`user denied`,`closed`].some(t=>e.toLowerCase().includes(t.toLowerCase())):!1,Ie=e=>{let t=0;for(let n=0;n<e.length;n++){let r=e.charCodeAt(n);t=(t<<5)-t+r,t&=t}return t.toString(36)},Le=e=>{try{return new URL(e),!0}catch{return!1}},Re=async({thor:e,contractAddress:t,abi:n,method:r,args:i})=>await e.contracts.load(t,n).read[r](...i),ze=async({thor:e,calls:t})=>{if(!Array.isArray(t))throw Error(`calls must be an array`);let n=t.map(t=>e.contracts.load(t.address,t.abi).clause[t.functionName](...t.args)),r=await e.transactions.executeMultipleClausesCall(n);if(!r.every(e=>e.success))throw Error(`Failed to execute multiple clauses call`);return r.map(e=>e.result.plain)},Be=({thor:e,calls:t})=>{if(!Array.isArray(t))throw Error(`calls must be an array`);return t.map(t=>e.contracts.load(t.address,t.abi).clause[t.functionName](...t.args))};Object.defineProperty(exports,`$`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`A`,{enumerable:!0,get:function(){return me}}),Object.defineProperty(exports,`B`,{enumerable:!0,get:function(){return W}}),Object.defineProperty(exports,`C`,{enumerable:!0,get:function(){return xe}}),Object.defineProperty(exports,`D`,{enumerable:!0,get:function(){return ye}}),Object.defineProperty(exports,`E`,{enumerable:!0,get:function(){return ve}}),Object.defineProperty(exports,`F`,{enumerable:!0,get:function(){return pe}}),Object.defineProperty(exports,`G`,{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,`H`,{enumerable:!0,get:function(){return R}}),Object.defineProperty(exports,`I`,{enumerable:!0,get:function(){return fe}}),Object.defineProperty(exports,`J`,{enumerable:!0,get:function(){return A}}),Object.defineProperty(exports,`K`,{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,`L`,{enumerable:!0,get:function(){return G}}),Object.defineProperty(exports,`M`,{enumerable:!0,get:function(){return _e}}),Object.defineProperty(exports,`N`,{enumerable:!0,get:function(){return he}}),Object.defineProperty(exports,`O`,{enumerable:!0,get:function(){return J}}),Object.defineProperty(exports,`P`,{enumerable:!0,get:function(){return U}}),Object.defineProperty(exports,`Q`,{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,`R`,{enumerable:!0,get:function(){return K}}),Object.defineProperty(exports,`S`,{enumerable:!0,get:function(){return Se}}),Object.defineProperty(exports,`T`,{enumerable:!0,get:function(){return be}}),Object.defineProperty(exports,`U`,{enumerable:!0,get:function(){return I}}),Object.defineProperty(exports,`V`,{enumerable:!0,get:function(){return z}}),Object.defineProperty(exports,`W`,{enumerable:!0,get:function(){return M}}),Object.defineProperty(exports,`X`,{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,`Y`,{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,`Z`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return De}}),Object.defineProperty(exports,`_t`,{enumerable:!0,get:function(){return se}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return Fe}}),Object.defineProperty(exports,`at`,{enumerable:!0,get:function(){return`cm4wxxujb022fyujl7g0thb21`}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return Ce}}),Object.defineProperty(exports,`bt`,{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return Q}}),Object.defineProperty(exports,`ct`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return $}}),Object.defineProperty(exports,`dt`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`et`,{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return Ne}}),Object.defineProperty(exports,`ft`,{enumerable:!0,get:function(){return ae}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return Oe}}),Object.defineProperty(exports,`gt`,{enumerable:!0,get:function(){return re}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return Z}}),Object.defineProperty(exports,`ht`,{enumerable:!0,get:function(){return ce}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return Le}}),Object.defineProperty(exports,`it`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`j`,{enumerable:!0,get:function(){return ge}}),Object.defineProperty(exports,`k`,{enumerable:!0,get:function(){return q}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return 4}}),Object.defineProperty(exports,`lt`,{enumerable:!0,get:function(){return le}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return ke}}),Object.defineProperty(exports,`mt`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return Re}}),Object.defineProperty(exports,`nt`,{enumerable:!0,get:function(){return k}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return Ie}}),Object.defineProperty(exports,`ot`,{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return Ae}}),Object.defineProperty(exports,`pt`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`q`,{enumerable:!0,get:function(){return F}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return ze}}),Object.defineProperty(exports,`rt`,{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return Pe}}),Object.defineProperty(exports,`st`,{enumerable:!0,get:function(){return E}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return Be}}),Object.defineProperty(exports,`tt`,{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return je}}),Object.defineProperty(exports,`ut`,{enumerable:!0,get:function(){return ie}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return Ee}}),Object.defineProperty(exports,`vt`,{enumerable:!0,get:function(){return oe}}),Object.defineProperty(exports,`w`,{enumerable:!0,get:function(){return Y}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return we}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return Te}}),Object.defineProperty(exports,`yt`,{enumerable:!0,get:function(){return ne}}),Object.defineProperty(exports,`z`,{enumerable:!0,get:function(){return H}});
|
|
2
|
+
//# sourceMappingURL=utils-CzaSErgL.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils-CzaSErgL.cjs","names":["config: AppConfig","config","config: AppConfig","config","config: AppConfig","localConfig","testnetConfig","mainnetConfig","VOT3Logo: React.FC<Props>","Icon","NON_TRANSFERABLE_TOKEN_SYMBOLS: readonly string[]","TOKEN_LOGOS: Record<string, string>","COINMARKETCAP_STATIC_BASE_URL","VECHAIN_TOKEN_REGISTRY_ASSETS_BASE_URL","TOKEN_LOGO_COMPONENTS: Record<string, JSX.Element>","VETLogo","VTHOLogo","VeBetterIcon","IMAGE_NOT_FOUND_URL","GENERIC_DELEGATOR_MAINNET_URL","GENERIC_DELEGATOR_TESTNET_URL","DEFAULT_PRIVY_ECOSYSTEM_APPS: PrivyEcosystemApp[]","CLEANIFY_APP_BASE_URL","GREENCART_BASE_URL","MUGSHOT_BASE_URL","EVEARN_BASE_URL","VECHAIN_KIT_WEBSITE_BASE_URL","DEFAULT_GAS_TOKEN_PREFERENCES: GasTokenPreferences","SUPPORTED_GAS_TOKENS: Record<GasTokenType, GasTokenInfo>","BigNumber","randomTransactionUser: {\n privateKey: string;\n account: Account;\n address: string;\n}","HexUtils.normalize","Address","CURRENCY_SYMBOLS: Record<CURRENCY, string>","xNodeToGMstartingLevel: Record<number, number>","NodeStrengthLevelToImage: { [key: string]: string }","EconomicNodeStrengthLevelToName: { [key: string]: string }","XNodeStrengthLevelToName: { [key: string]: string }","allNodeStrengthLevelToName: { [key: string]: string }"],"sources":["../src/config/solo.ts","../src/config/testnet.ts","../src/config/mainnet.ts","../src/config/index.ts","../src/assets/icons/VechainLogo/VOT3Logo.tsx","../src/utils/ssrUtils.ts","../src/utils/constants.tsx","../src/utils/formattingUtils.tsx","../src/utils/randomTxForwarder.tsx","../src/utils/hexUtils.ts","../src/utils/addressUtils.ts","../src/utils/ipfs.ts","../src/types/types.ts","../src/types/ensTextRecords.ts","../src/types/gasEstimation.ts","../src/types/index.ts","../src/utils/media.ts","../src/utils/uri.ts","../src/utils/gmNfts.ts","../src/utils/buildQueryString.ts","../src/utils/xNode.ts","../src/utils/time.ts","../src/utils/stringUtils.ts","../src/utils/url.ts","../src/utils/thorUtils.ts"],"sourcesContent":["import { AppConfig } from '.';\nconst config: AppConfig = {\n ipfsFetchingService: 'https://api.dev.gateway-proxy.vechain.org/ipfs',\n ipfsPinningService:\n 'https://api.dev.gateway-proxy.vechain.org/api/v1/pinning/pinFileToIPFS',\n vthoContractAddress: '0x0000000000000000000000000000456E65726779',\n b3trContractAddress: '0xd31A6f2DBa8785cE41AB68Ea192791B5175309F4',\n vot3ContractAddress: '0x028Af33230576c1e073C8245F72a7A4aa53564E4',\n b3trGovernorAddress: '0x36E0e9b46D56dF12Dd69fD560e41954C73cE9ded',\n timelockContractAddress: '0x125389845c93Efcf6471BA8BE1AC19c11e128603',\n xAllocationPoolContractAddress:\n '0xC8232c91E2f744E533322B99F95f809b9f7ec446',\n xAllocationVotingContractAddress:\n '0x074F093f4C534a16cDD09cb4b2669713218A762a',\n emissionsContractAddress: '0x6a084E85f38400790043788FcCee39595616aa3A',\n voterRewardsContractAddress: '0xbAb852081C459c0060960287aDcf9a0C2c1dc4b8',\n galaxyMemberContractAddress: '0xbdA1cff75d2D43AB9186Ada41fECF79e25c49Ba3',\n treasuryContractAddress: '0xe9414513Fe0e3b9bf7a61eC5c1AC7Df943fB3e77',\n x2EarnAppsContractAddress: '0x432C46476f4970575C43B19588A170D237dC4929',\n x2EarnRewardsPoolContractAddress:\n '0x134E4Fce6761f660401808CF86aE0e62cE52a81E',\n nodeManagementContractAddress: '0xa96B5057171D797298A71178b48449A7bC615D8E',\n veBetterPassportContractAddress:\n '0x8db6D14452fE36ba86C341AfEFaC0f90A0Db2bcb',\n x2EarnCreatorContractAddress: '0x4e5f7eb452e9ecd75c0B29e3540014cBe01bBF52',\n veDelegate: '0xfc32a9895C78CE00A1047d602Bd81Ea8134CC32b',\n veDelegateVotes: '0xeb71148c9B3cd57e228c2152d79f6e78F5F1ef9a',\n veDelegateTokenContractAddress:\n '0xD3f7b82Df5705D34f64C634d2dEf6B1cB3116950',\n oracleContractAddress: '0x49eC7192BF804Abc289645ca86F1eD01a6C17713',\n accountFactoryAddress: '0xC06Ad8573022e2BE416CA89DA47E8c592971679A',\n cleanifyCampaignsContractAddress:\n '0x7a11D63338576aE8c038868433ea199d7E5319A6',\n cleanifyChallengesContractAddress:\n '0xa58681692AdDD2e8E37f9113D40Bb9253C03F65e',\n veWorldSubdomainClaimerContractAddress:\n '0x0000000000000000000000000000000000000000',\n vetDomainsContractAddress: '0x0000000000000000000000000000000000000000',\n vetDomainsPublicResolverAddress:\n '0x0000000000000000000000000000000000000000',\n vetDomainsReverseRegistrarAddress:\n '0x5c970901a587BA3932C835D4ae5FAE2BEa7e78Bc',\n vnsResolverAddress: '0x0000000000000000000000000000000000000000',\n sassContractAddress: '0x0000000000000000000000000000000000000000',\n vetDomainAvatarUrl: 'https://testnet.vet.domains/api/avatar',\n indexerUrl: 'https://b3tr.testnet.vechain.org/api/v1',\n b3trIndexerUrl: 'https://b3tr.testnet.vechain.org/api/v1',\n graphQlIndexerUrl: 'https://graph.vet/subgraphs/name/vns',\n nodeUrl: 'http://localhost:8669',\n network: {\n id: 'solo',\n name: 'solo',\n type: 'solo',\n defaultNet: true,\n urls: ['http://localhost:8669'],\n explorerUrl: 'https://explore-testnet.vechain.org',\n blockTime: 10000,\n genesis: {\n number: 0,\n id: '0x00000000c05a20fbca2bf6ae3affba6af4a74b800b585bf7a4988aba7aea69f6',\n size: 170,\n parentID:\n '0xffffffff53616c757465202620526573706563742c20457468657265756d2100',\n timestamp: 1530316800,\n gasLimit: 10000000,\n beneficiary: '0x0000000000000000000000000000000000000000',\n gasUsed: 0,\n totalScore: 0,\n txsRoot:\n '0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0',\n txsFeatures: 0,\n stateRoot:\n '0x93de0ffb1f33bc0af053abc2a87c4af44594f5dcb1cb879dd823686a15d68550',\n receiptsRoot:\n '0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0',\n signer: '0x0000000000000000000000000000000000000000',\n isTrunk: true,\n transactions: [],\n },\n },\n explorerUrl: 'https://explore-testnet.vechain.org',\n};\nexport default config;\n","import { AppConfig } from '.';\n\nconst config: AppConfig = {\n ipfsFetchingService: 'https://api.dev.gateway-proxy.vechain.org/ipfs',\n ipfsPinningService:\n 'https://api.dev.gateway-proxy.vechain.org/api/v1/pinning/pinFileToIPFS',\n vthoContractAddress: '0x0000000000000000000000000000456E65726779',\n b3trContractAddress: '0x95761346d18244bb91664181bf91193376197088',\n vot3ContractAddress: '0x6e8b4a88d37897fc11f6ba12c805695f1c41f40e',\n b3trGovernorAddress: '0xc30b4d0837f7e3706749655d8bde0c0f265dd81b',\n timelockContractAddress: '0x835509222aa67c333a1cbf29bd341e014aba86c9',\n xAllocationPoolContractAddress:\n '0x6f7b4bc19b4dc99005b473b9c45ce2815bbe7533',\n xAllocationVotingContractAddress:\n '0x8800592c463f0b21ae08732559ee8e146db1d7b2',\n emissionsContractAddress: '0x66898f98409db20ed6a1bf0021334b7897eb0688',\n voterRewardsContractAddress: '0x851ef91801899a4e7e4a3174a9300b3e20c957e8',\n galaxyMemberContractAddress: '0x38a59fa7fd7039884465a0ff285b8c4b6fe394ca',\n x2EarnCreatorContractAddress: '0xb89f0ecdaf9987f87912d6c77756435fe4085b05',\n nodeManagementContractAddress: '0xde17d0a516c38c168d37685bb71465f656aa256e',\n x2EarnAppsContractAddress: '0x0b54a094b877a25bdc95b4431eaa1e2206b1ddfe',\n treasuryContractAddress: '0x3d531a80c05099c71b02585031f86a2988e0caca',\n x2EarnRewardsPoolContractAddress:\n '0x2d2a2207c68a46fc79325d7718e639d1047b0d8b',\n veBetterPassportContractAddress:\n '0x592c756df7a5d39de1735030e8b9c18b7417e6c4',\n veDelegate: '0xfc32a9895C78CE00A1047d602Bd81Ea8134CC32b',\n veDelegateVotes: '0xeb71148c9B3cd57e228c2152d79f6e78F5F1ef9a',\n veDelegateTokenContractAddress:\n '0xD3f7b82Df5705D34f64C634d2dEf6B1cB3116950',\n oracleContractAddress: '0xdcCAaBd81B38e0dEEf4c202bC7F1261A4D9192C6',\n accountFactoryAddress: '0x713b908Bcf77f3E00EFEf328E50b657a1A23AeaF',\n cleanifyCampaignsContractAddress:\n '0x22d19ACBD2cBf6b2B6C546395c26B9Cb448248BF',\n cleanifyChallengesContractAddress:\n '0x8Cc885DC3e5c376632CCEA0e8e1a51F1B3572442',\n veWorldSubdomainClaimerContractAddress:\n '0xe5af50e7ad1aaab4fbe4efbb2b30f764013918b3',\n vetDomainsContractAddress: '0xcBFB30c1F267914816668d53AcBA7bA7c9806D13',\n vetDomainsPublicResolverAddress:\n '0xA6eFd130085a127D090ACb0b100294aD1079EA6f',\n vetDomainsReverseRegistrarAddress:\n '0x6878f1aD5e3015310CfE5B38d7B7071C5D8818Ca',\n vnsResolverAddress: '0xc403b8EA53F707d7d4de095f0A20bC491Cf2bc94',\n sassContractAddress: '0x1b299f501bce347893f5a3a10e625c9a3345365e',\n vetDomainAvatarUrl: 'https://testnet.vet.domains/api/avatar',\n indexerUrl: 'https://indexer.testnet.vechain.org/api/v1',\n b3trIndexerUrl: 'https://indexer.testnet.vechain.org/api/v1',\n graphQlIndexerUrl: 'https://graph.vet/subgraphs/name/vns',\n nodeUrl: 'https://testnet.vechain.org',\n network: {\n id: 'testnet',\n name: 'testnet',\n type: 'test',\n defaultNet: true,\n urls: [\n 'https://testnet.vechain.org',\n 'https://vethor-node-test.vechaindev.com',\n 'https://sync-testnet.veblocks.net',\n 'https://testnet.vecha.in',\n ],\n explorerUrl: 'https://insight.vecha.in/#/test',\n blockTime: 10000,\n genesis: {\n number: 0,\n id: '0x000000000b2bce3c70bc649a02749e8687721b09ed2e15997f466536b20bb127',\n size: 170,\n parentID:\n '0xffffffff00000000000000000000000000000000000000000000000000000000',\n timestamp: 1530014400,\n gasLimit: 10000000,\n beneficiary: '0x0000000000000000000000000000000000000000',\n gasUsed: 0,\n totalScore: 0,\n txsRoot:\n '0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0',\n txsFeatures: 0,\n stateRoot:\n '0x4ec3af0acbad1ae467ad569337d2fe8576fe303928d35b8cdd91de47e9ac84bb',\n receiptsRoot:\n '0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0',\n signer: '0x0000000000000000000000000000000000000000',\n isTrunk: true,\n transactions: [],\n },\n },\n explorerUrl: 'https://explore-testnet.vechain.org/transactions',\n};\nexport default config;\n","import { AppConfig } from '.';\nconst config: AppConfig = {\n ipfsFetchingService: 'https://api.gateway-proxy.vechain.org/ipfs',\n indexerUrl: 'https://indexer.mainnet.vechain.org/api/v1',\n ipfsPinningService:\n 'https://api.gateway-proxy.vechain.org/api/v1/pinning/pinFileToIPFS',\n b3trIndexerUrl: 'https://indexer.mainnet.vechain.org/api/v1',\n graphQlIndexerUrl: 'https://graph.vet/subgraphs/name/vns',\n nodeUrl: 'https://mainnet.vechain.org',\n network: {\n id: 'main',\n name: 'main',\n type: 'main',\n defaultNet: true,\n urls: [\n 'https://mainnet.vechain.org',\n 'https://vethor-node.vechain.com',\n 'https://mainnet.veblocks.net',\n 'https://mainnet.vecha.in',\n ],\n explorerUrl: 'https://vechainstats.com',\n blockTime: 10000,\n genesis: {\n number: 0,\n id: '0x00000000851caf3cfdb6e899cf5958bfb1ac3413d346d43539627e6be7ec1b4a',\n size: 170,\n parentID:\n '0xffffffff53616c757465202620526573706563742c20457468657265756d2100',\n timestamp: 1530316800,\n gasLimit: 10000000,\n beneficiary: '0x0000000000000000000000000000000000000000',\n gasUsed: 0,\n totalScore: 0,\n txsRoot:\n '0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0',\n txsFeatures: 0,\n stateRoot:\n '0x09bfdf9e24dd5cd5b63f3c1b5d58b97ff02ca0490214a021ed7d99b93867839c',\n receiptsRoot:\n '0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0',\n signer: '0x0000000000000000000000000000000000000000',\n isTrunk: true,\n transactions: [],\n },\n },\n explorerUrl: 'https://vechainstats.com/transaction',\n // general\n vthoContractAddress: '0x0000000000000000000000000000456E65726779',\n //VeBetterDAO\n b3trContractAddress: '0x5ef79995FE8a89e0812330E4378eB2660ceDe699',\n vot3ContractAddress: '0x76Ca782B59C74d088C7D2Cce2f211BC00836c602',\n b3trGovernorAddress: '0x1c65C25fABe2fc1bCb82f253fA0C916a322f777C',\n timelockContractAddress: '0x7B7EaF620d88E38782c6491D7Ce0B8D8cF3227e4',\n xAllocationPoolContractAddress:\n '0x4191776F05f4bE4848d3f4d587345078B439C7d3',\n xAllocationVotingContractAddress:\n '0x89A00Bb0947a30FF95BEeF77a66AEdE3842Fe5B7',\n emissionsContractAddress: '0xDf94739bd169C84fe6478D8420Bb807F1f47b135',\n voterRewardsContractAddress: '0x838A33AF756a6366f93e201423E1425f67eC0Fa7',\n galaxyMemberContractAddress: '0x93B8cD34A7Fc4f53271b9011161F7A2B5fEA9D1F',\n treasuryContractAddress: '0xD5903BCc66e439c753e525F8AF2FeC7be2429593',\n x2EarnAppsContractAddress: '0x8392B7CCc763dB03b47afcD8E8f5e24F9cf0554D',\n x2EarnRewardsPoolContractAddress:\n '0x6Bee7DDab6c99d5B2Af0554EaEA484CE18F52631',\n x2EarnCreatorContractAddress: '0xe8e96a768ffd00417d4bd985bec9EcfC6F732a7f',\n nodeManagementContractAddress: '0xB0EF9D89C6b49CbA6BBF86Bf2FDf0Eee4968c6AB',\n veBetterPassportContractAddress:\n '0x35a267671d8EDD607B2056A9a13E7ba7CF53c8b3',\n //veDelegate\n veDelegate: '0xfc32a9895C78CE00A1047d602Bd81Ea8134CC32b',\n veDelegateVotes: '0xeb71148c9B3cd57e228c2152d79f6e78F5F1ef9a',\n veDelegateTokenContractAddress:\n '0xD3f7b82Df5705D34f64C634d2dEf6B1cB3116950',\n //utility\n oracleContractAddress: '0x49eC7192BF804Abc289645ca86F1eD01a6C17713',\n accountFactoryAddress: '0xC06Ad8573022e2BE416CA89DA47E8c592971679A',\n //cleanify\n cleanifyCampaignsContractAddress:\n '0x7a11D63338576aE8c038868433ea199d7E5319A6',\n cleanifyChallengesContractAddress:\n '0xa58681692AdDD2e8E37f9113D40Bb9253C03F65e',\n veWorldSubdomainClaimerContractAddress:\n '0xa4173c32fe8a61a8fd0d0234675b559fc360446a',\n vetDomainsContractAddress: '0xa9231da8BF8D10e2df3f6E03Dd5449caD600129b',\n vetDomainsPublicResolverAddress:\n '0xabac49445584C8b6c1472b030B1076Ac3901D7cf',\n vetDomainsReverseRegistrarAddress:\n '0x5c970901a587BA3932C835D4ae5FAE2BEa7e78Bc',\n vnsResolverAddress: '0xA11413086e163e41901bb81fdc5617c975Fa5a1A',\n vetDomainAvatarUrl: 'https://vet.domains/api/avatar',\n sassContractAddress: '0x84b0caf6436aace4e21d10f126963fdd53ac31ea',\n};\nexport default config;\n","import localConfig from './solo';\nimport testnetConfig from './testnet';\nimport mainnetConfig from './mainnet';\nimport { Network, NETWORK_TYPE } from './network';\n\nexport type AppConfig = {\n ipfsFetchingService: string;\n ipfsPinningService: string;\n vthoContractAddress: string;\n b3trContractAddress: string;\n vot3ContractAddress: string;\n b3trGovernorAddress: string;\n timelockContractAddress: string;\n xAllocationPoolContractAddress: string;\n xAllocationVotingContractAddress: string;\n emissionsContractAddress: string;\n voterRewardsContractAddress: string;\n galaxyMemberContractAddress: string;\n treasuryContractAddress: string;\n x2EarnAppsContractAddress: string;\n x2EarnCreatorContractAddress: string;\n x2EarnRewardsPoolContractAddress: string;\n nodeManagementContractAddress: string;\n veBetterPassportContractAddress: string;\n veDelegate: string;\n veDelegateVotes: string;\n veDelegateTokenContractAddress: string;\n oracleContractAddress: string;\n accountFactoryAddress: string;\n cleanifyCampaignsContractAddress: string;\n cleanifyChallengesContractAddress: string;\n veWorldSubdomainClaimerContractAddress: string;\n vetDomainsContractAddress: string;\n vetDomainsPublicResolverAddress: string;\n vetDomainsReverseRegistrarAddress: string;\n vnsResolverAddress: string;\n sassContractAddress: string;\n vetDomainAvatarUrl: string;\n nodeUrl: string;\n indexerUrl: string;\n b3trIndexerUrl: string;\n graphQlIndexerUrl: string;\n network: Network;\n explorerUrl: string;\n};\n\nexport const getConfig = (env: NETWORK_TYPE): AppConfig => {\n if (env === 'solo') return localConfig;\n if (env === 'test') return testnetConfig;\n if (env === 'main') return mainnetConfig;\n throw new Error(`Unsupported NETWORK_TYPE ${env}`);\n};\n","import { Icon, IconProps } from '@chakra-ui/react';\nimport React from 'react';\n\ntype Props = Omit<IconProps, 'dangerouslySetInnerHTML'>;\n\nexport const VOT3Logo: React.FC<Props> = ({ ...props }) => {\n return (\n <Icon viewBox=\"0 0 1684.56 1684.56\" {...props}>\n <rect\n fill=\"#b1f16c\"\n width=\"1684.56\"\n height=\"1684.56\"\n rx=\"157.74\"\n ry=\"157.74\"\n />\n <path\n fill=\"#1d1d1d\"\n d=\"M844.98,1386.28c-41.46,0-75.1-33.9-75.1-75.67,0-142.78-86.35-274.05-158.8-359.01-89.72-105.25-197.89-186.19-265.28-219.75-37.18-18.54-52.43-63.88-34.09-101.35,18.39-37.47,63.39-52.83,100.58-34.35,75.09,37.41,202.11,127.08,312.7,256.82,32.24,37.81,66.77,83.5,97.66,135.35,34.2-108.83,79.98-205.07,121.61-280.12,91.8-165.56,214.37-317.13,319.84-395.63,33.36-24.83,80.39-17.68,105.02,15.93,24.64,33.61,17.55,81-15.81,105.82-88.03,65.47-197.1,201.95-277.93,347.68-70.82,127.7-155.25,323.08-155.25,528.6,0,41.78-33.64,75.67-75.1,75.67h-.06Z\"\n />\n </Icon>\n );\n};\n","/**\n * SSR-safe utilities for browser API access\n */\n\n/**\n * SSR-safe localStorage getter\n */\nexport const getLocalStorageItem = (key: string): string | null => {\n try {\n if (typeof window === 'undefined') {\n return null;\n }\n return localStorage.getItem(key);\n } catch (error) {\n console.warn(`Error accessing localStorage for key \"${key}\":`, error);\n return null;\n }\n};\n\n/**\n * SSR-safe localStorage setter\n */\nexport const setLocalStorageItem = (key: string, value: string): void => {\n try {\n if (typeof window === 'undefined') {\n return;\n }\n localStorage.setItem(key, value);\n } catch (error) {\n console.warn(`Error setting localStorage for key \"${key}\":`, error);\n }\n};\n\n/**\n * SSR-safe localStorage remover\n */\nexport const removeLocalStorageItem = (key: string): void => {\n try {\n if (typeof window === 'undefined') {\n return;\n }\n localStorage.removeItem(key);\n } catch (error) {\n console.warn(`Error removing localStorage for key \"${key}\":`, error);\n }\n};\n\n/**\n * SSR-safe document.title getter\n */\nexport const getDocumentTitle = (): string => {\n try {\n return typeof document !== 'undefined' ? document.title : '';\n } catch {\n return '';\n }\n};\n\n/**\n * SSR-safe window.location.origin getter\n */\nexport const getWindowOrigin = (): string => {\n try {\n return typeof window !== 'undefined' && window.location\n ? window.location.origin\n : '';\n } catch {\n return '';\n }\n};\n\n/**\n * Check if we're in a browser environment\n */\nexport const isBrowser = (): boolean => {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n};\n\n/**\n * SSR-safe window.open\n */\nexport const safeWindowOpen = (url?: string, target?: string, features?: string): void => {\n if (isBrowser()) {\n window.open(url, target, features);\n }\n};\n\n/**\n * SSR-safe document.querySelector\n */\nexport const safeQuerySelector = <T extends Element>(selector: string): T | null => {\n if (typeof document !== 'undefined') {\n return document.querySelector<T>(selector);\n }\n return null;\n};\n\n/**\n * SSR-safe navigator check\n */\nexport const hasNavigator = (): boolean => {\n return typeof navigator !== 'undefined';\n};\n\n/**\n * SSR-safe navigator.onLine check\n */\nexport const isOnline = (): boolean => {\n return hasNavigator() && navigator.onLine;\n};\n\n/**\n * SSR-safe clipboard write\n */\nexport const copyToClipboard = async (text: string): Promise<boolean> => {\n try {\n if (hasNavigator() && navigator.clipboard) {\n await navigator.clipboard.writeText(text);\n return true;\n }\n return false;\n } catch (error) {\n console.warn('Error copying to clipboard:', error);\n return false;\n }\n};\n","import { VeBetterIcon, VTHOLogo } from '@/assets';\nimport { VETLogo } from '@/assets/icons/VechainLogo/VETLogo';\nimport { VOT3Logo } from '@/assets/icons/VechainLogo/VOT3Logo';\nimport { getLocalStorageItem } from './ssrUtils';\nimport {\n GasTokenPreferences,\n GasTokenType,\n GasTokenInfo,\n} from '@/types/gasToken';\nimport { getConfig } from '@/config';\nimport {\n GENERIC_DELEGATOR_MAINNET_URL,\n GENERIC_DELEGATOR_TESTNET_URL,\n VECHAIN_KIT_WEBSITE_BASE_URL,\n COINMARKETCAP_STATIC_BASE_URL,\n VECHAIN_TOKEN_REGISTRY_ASSETS_BASE_URL,\n IMAGE_NOT_FOUND_URL,\n CLEANIFY_APP_BASE_URL,\n EVEARN_BASE_URL,\n GREENCART_BASE_URL,\n MUGSHOT_BASE_URL,\n} from '@/constants';\n\n/** Tokens that cannot be swapped or transferred (e.g. governance voting tokens) */\nexport const NON_TRANSFERABLE_TOKEN_SYMBOLS: readonly string[] = ['VOT3'];\n\nexport const TOKEN_LOGOS: Record<string, string> = {\n VET: new URL(\n '/static/img/coins/64x64/3077.png',\n COINMARKETCAP_STATIC_BASE_URL,\n ).toString(),\n VTHO: new URL(\n '/static/img/coins/64x64/3012.png',\n COINMARKETCAP_STATIC_BASE_URL,\n ).toString(),\n B3TR: new URL(\n '/static/img/coins/64x64/33509.png',\n COINMARKETCAP_STATIC_BASE_URL,\n ).toString(),\n VOT3: new URL(\n '/17ff70aa1d898bc97ad690dbfad1a3b5643f7e0b.png',\n COINMARKETCAP_STATIC_BASE_URL,\n ).toString(),\n veDelegate: new URL(\n '1c641b86096d56bf13d49f38388accd6db8b8b2e.png',\n VECHAIN_TOKEN_REGISTRY_ASSETS_BASE_URL,\n ).toString(),\n SASS: new URL(\n 'https://prod-vechainkit-docs-images-bucket.s3.eu-west-1.amazonaws.com/sass-token-image.png',\n ).toString(),\n};\n\nexport const TOKEN_LOGO_COMPONENTS: Record<string, JSX.Element> = {\n VET: <VETLogo />,\n VTHO: <VTHOLogo />,\n B3TR: <VeBetterIcon />,\n VOT3: <VOT3Logo />,\n};\n\nexport const VECHAIN_PRIVY_APP_ID = 'cm4wxxujb022fyujl7g0thb21';\n\nexport const notFoundImage = IMAGE_NOT_FOUND_URL;\n\nexport enum TogglePassportCheck {\n WhitelistCheck = 1,\n BlacklistCheck = 2,\n SignalingCheck = 3,\n ParticipationScoreCheck = 4,\n GmOwnershipCheck = 5,\n}\n\nexport const VECHAIN_KIT_STORAGE_KEYS = {\n NETWORK: 'vechain-kit:network',\n};\n\n// SSR-safe ENV getter function\nexport const getENV = () => {\n // During SSR, always return safe defaults\n if (typeof window === 'undefined') {\n return {\n isDevelopment: false,\n isProduction: true,\n };\n }\n\n // In browser, check localStorage using SSR-safe utility\n const network = getLocalStorageItem(VECHAIN_KIT_STORAGE_KEYS.NETWORK);\n return {\n isDevelopment: network === 'test',\n isProduction: network === 'main',\n };\n};\n\n// For backward compatibility, create a getter-based ENV object\n// This ensures ENV properties are evaluated lazily and won't crash during SSR\nexport const ENV = {\n get isDevelopment() {\n return getENV().isDevelopment;\n },\n get isProduction() {\n return getENV().isProduction;\n },\n};\n\nexport const getGenericDelegatorUrl = () => {\n const env = getENV();\n return env.isProduction\n ? `${GENERIC_DELEGATOR_MAINNET_URL}/api/v1/`\n : `${GENERIC_DELEGATOR_TESTNET_URL}/api/v1/`; // or url to your delegator\n};\n\nexport type PrivyEcosystemApp = {\n id: string;\n name: string;\n website: string;\n};\n\nexport const DEFAULT_PRIVY_ECOSYSTEM_APPS: PrivyEcosystemApp[] = [\n {\n id: 'clz41gcg00e4ay75dmq3uzzgr',\n name: 'Cleanify',\n website: CLEANIFY_APP_BASE_URL,\n },\n {\n id: 'cm153hrup0817axti38avlfyg',\n name: 'GreenCart',\n website: GREENCART_BASE_URL,\n },\n {\n id: 'clv9sfos20j6x1431ga80d95f',\n name: 'Mughsot',\n website: MUGSHOT_BASE_URL,\n },\n {\n id: 'cm4l8tiai070i108zo17oieyc',\n name: 'EVearn',\n website: EVEARN_BASE_URL,\n },\n];\n\n//Hardcoded for displaying in the \"Terms and Privacy\" agreements modal\nexport const VECHAIN_KIT_TERMS_CONFIG = {\n url: new URL('terms', VECHAIN_KIT_WEBSITE_BASE_URL).toString(),\n version: 1,\n required: true,\n displayName: 'Vechain Kit Terms',\n};\n\n//Hardcoded for showing up if allowAnalytics is true\n//So we ask users if they agree with data tracking\nexport const VECHAIN_KIT_COOKIES_CONFIG = {\n url: new URL('cookies', VECHAIN_KIT_WEBSITE_BASE_URL).toString(),\n version: 1,\n required: false,\n displayName: 'Vechain Kit Cookies',\n};\n\nexport const DEFAULT_GAS_TOKEN_PREFERENCES: GasTokenPreferences = {\n tokenPriority: ['VET', 'B3TR', 'VTHO'],\n availableGasTokens: ['VET', 'B3TR', 'VTHO'],\n excludedTokens: [],\n alwaysConfirm: false,\n gasTokenToUse: 'VET',\n};\n\nexport const SUPPORTED_GAS_TOKENS: Record<GasTokenType, GasTokenInfo> = {\n B3TR: {\n type: 'B3TR',\n name: 'B3TR Token',\n symbol: 'B3TR',\n address: getConfig(\n (process.env.NEXT_PUBLIC_NETWORK_TYPE as any) || 'test',\n ).b3trContractAddress,\n description: 'Pay gas with B3TR',\n },\n VET: {\n type: 'VET',\n name: 'VET Token',\n symbol: 'VET',\n description: 'Pay gas with VET',\n },\n VTHO: {\n type: 'VTHO',\n name: 'VTHO Token',\n symbol: 'VTHO',\n address: getConfig(\n (process.env.NEXT_PUBLIC_NETWORK_TYPE as any) || 'test',\n ).vthoContractAddress,\n description: 'Pay gas with VTHO',\n },\n};\n","import { picasso } from '@vechain/picasso';\nimport { BigNumber } from 'bignumber.js';\nimport { formatEther } from 'ethers';\n\nexport const humanAddress = (\n address: string,\n charAtStart = 6,\n charAtEnd = 4,\n): string => `${address.slice(0, charAtStart)}•••${address.slice(-charAtEnd)}`;\n\nexport const humanDomain = (\n domain: string,\n lengthBefore = 8,\n lengthAfter = 6,\n) => {\n // if domain is smaller than lengthBefore + lengthAfter, return the domain\n if (domain.length <= lengthBefore + lengthAfter) return domain;\n\n const before = domain.substring(0, lengthBefore);\n const after = domain.substring(domain.length - lengthAfter);\n return `${before}•••${after}`;\n};\n\nexport const humanNumber = (\n formattedValue: BigNumber.Value,\n originalValue?: BigNumber.Value,\n symbol: string | null = null,\n) => {\n const suffix = symbol ? ' ' + symbol : '';\n\n originalValue = originalValue || formattedValue;\n const formatter = new Intl.NumberFormat('en-US', {\n style: 'decimal',\n minimumFractionDigits:\n Number.parseFloat(formattedValue.toString()) % 1 === 0 ? 0 : 2,\n });\n\n let value = formatter.format(\n roundDownSignificantDigits(Number(formattedValue), 2),\n );\n\n //If the original number got scaled down to 0\n if (!isZero(originalValue) && isZero(value)) {\n value = '< 0.01';\n }\n\n return value + suffix;\n};\n\nexport const isZero = (value?: BigNumber.Value) => {\n if (!value && value !== 0) return false;\n return new BigNumber(value).isZero();\n};\n\nexport const getPicassoImage = (address: string, base64 = false): string => {\n const image = picasso(address.toLowerCase());\n if (base64) {\n const base64data = Buffer.from(image, 'utf8').toString('base64');\n return `data:image/svg+xml;base64,${base64data}`;\n }\n return `data:image/svg+xml;utf8,${image}`;\n};\n\n/**\n * Format the number human friendly\n * @param formattedValue - value in string or number\n * @param originalValue - value in string or number to determine if the original value is 0\n * @param symbol - (optional) symbol to append at end of number (with a space)\n * @returns the formatted number\n */\n\nfunction roundDownSignificantDigits(numbers: number, decimals: number = 0) {\n if (typeof numbers !== 'number' || typeof decimals !== 'number') {\n throw new Error(\n 'Invalid input: number and decimals must be of type number',\n );\n }\n\n const significantDigits = parseInt(\n numbers.toExponential().split('e-')[1] || '0',\n 10,\n );\n\n const effectiveDecimals = Math.max(0, decimals + significantDigits);\n const scaleFactor = Math.pow(10, effectiveDecimals);\n\n return Math.floor(numbers * scaleFactor) / scaleFactor;\n}\n\n/**\n * Format the token balance human friendly\n * @param balance - balance in bigint\n * @returns the formatted balance in the form of {@link TokenBalance} (original, scaled down and formatted)\n */\nexport const formatTokenBalance = (balance: bigint) => {\n const scaled = formatEther(balance);\n const formatted = scaled === '0' ? '0' : humanNumber(scaled);\n return {\n original: balance.toString(),\n scaled,\n formatted,\n };\n};\n","import {\n generatePrivateKey,\n privateKeyToAccount,\n Account,\n} from 'viem/accounts';\n\nexport const randomTransactionUser: {\n privateKey: string;\n account: Account;\n address: string;\n} = (() => {\n const privateKey = generatePrivateKey();\n const account = privateKeyToAccount(privateKey);\n return {\n privateKey,\n account,\n address: account.address,\n };\n})();\n","const PREFIX = '0x';\nconst PREFIX_REGEX = /^0[xX]/;\nconst HEX_REGEX = /^(0[xX])?[a-fA-F0-9]+$/;\n\n/**\n * Returns the provied hex string with the hex prefix removed.\n * If the prefix doesn't exist the hex is returned unmodified\n * @param hex - the input hex string\n * @returns the input hex string with the hex prefix removed\n * @throws an error if the input is not a valid hex string\n */\nexport const removePrefix = (hex: string): string => {\n validate(hex);\n return hex.replace(PREFIX_REGEX, '');\n};\n\n/**\n * Returns the provided hex string with the hex prefix added.\n * If the prefix already exists the string is returned unmodified.\n * If the string contains an UPPER case `X` in the prefix it will be replaced with a lower case `x`\n * @param hex - the input hex string\n * @returns the input hex string with the hex prefix added\n * @throws an error if the input is not a valid hex string\n */\nexport const addPrefix = (hex: string): string => {\n validate(hex);\n return PREFIX_REGEX.test(hex)\n ? hex.replace(PREFIX_REGEX, PREFIX)\n : `${PREFIX}${hex}`;\n};\n\n/**\n * Validate the hex string. Throws an Error if not valid\n * @param hex - the input hex string\n * @throws an error if the input is not a valid hex string\n */\nexport const validate = (hex: string) => {\n if (!isValid(hex)) throw Error('Provided hex value is not valid');\n};\n\n/**\n * Check if input string is valid\n * @param hex - the input hex string\n * @returns boolean representing whether the input hex is valid\n */\nexport const isValid = (hex?: string | null): boolean => {\n return !!hex && HEX_REGEX.test(hex);\n};\n\nexport const isInvalid = (hex?: string | null): boolean => {\n return !isValid(hex);\n};\n\nexport const normalize = (hex: string): string => {\n return addPrefix(hex.toLowerCase().trim());\n};\n\nexport const compare = (hex1: string, hex2: string): boolean => {\n try {\n return (\n removePrefix(hex1).toLowerCase() ===\n removePrefix(hex2).toLowerCase()\n );\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (e) {\n return false;\n }\n};\n","import * as HexUtils from './hexUtils';\nimport { Address } from '@vechain/sdk-core';\n\n/**\n * Checks if two addresses are equal. Returns true if both values are strings AND:\n * - The two values are equal OR\n * - The checksumed addresses are equal\n *\n * @param address1\n * @param address2\n */\nexport const compareAddresses = (\n address1?: string,\n address2?: string,\n): boolean => {\n if (!address1 || !address2) return false;\n\n if (address2 === address1) {\n return true;\n }\n\n try {\n return HexUtils.normalize(address1) === HexUtils.normalize(address2);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (e) {\n return false;\n }\n};\n\nexport const compareListOfAddresses = (add1: string[], add2: string[]) => {\n if (add1.length !== add2.length) return false;\n const sortedAdd1 = [...add1]\n .map((e) => e.toLowerCase())\n .sort((a, b) => a.localeCompare(b));\n const sortedAdd2 = [...add2]\n .map((e) => e.toLowerCase())\n .sort((a, b) => a.localeCompare(b));\n\n for (let i = 0; i < sortedAdd1.length; i++) {\n if (!compareAddresses(sortedAdd1[i], sortedAdd2[i])) return false;\n }\n\n return true;\n};\n\nexport const regexPattern = () => {\n return /^0x[a-fA-F0-9]{40}$/;\n};\n\nexport const isValidAddress = Address.isValid;\n\nexport const leftPadWithZeros = (str: string, length: number): string => {\n // Remove '0x' prefix if it exists\n const cleanStr = str.startsWith('0x') ? str.slice(2) : str;\n if (cleanStr.length > length) {\n throw new Error('Input string is longer than the specified length');\n }\n // Pad the string to the specified length\n const paddedStr = cleanStr.padStart(length, '0');\n return `0x${paddedStr}`;\n};\n","import { getConfig } from '@/config';\nimport { NETWORK_TYPE } from '@/config/network';\n\n/**\n * Validate IPFS URI strings. An example of a valid IPFS URI is:\n * - ipfs://QmfSTia1TJUiKQ2fyW9NTPzEKNdjMGzbUgrC3QPSTpkum6/406.json\n * - ipfs://QmVPqKfwRXjg5Fqwy6RNRbKR2ZP4pKKVLvmfjmhQfdM3MH/4\n * - ipfs://QmVPqKfwRXjg5Fqwy6RNRbKR2ZP4pKKVLvmfjmhQfdM3MH\n * @param uri\n * @returns\n */\nexport const validateIpfsUri = (uri: string): boolean => {\n const trimmedUri = uri.trim();\n return /^ipfs:\\/\\/[a-zA-Z0-9]+(\\/[^/]+)*\\/?$/.test(trimmedUri);\n};\n\n/**\n * Converts a CID to an IPFS native URL.\n *\n * @param cid - The CID to convert.\n * @param fileName - The name of the file to append to the URL.\n *\n * @returns The IPFS URL in the format `ipfs://${cid}/${fileName}`.\n */\nexport function toIPFSURL(cid: string, fileName?: string): string {\n return `ipfs://${cid}/${fileName ?? ''}`;\n}\n\n/**\n * Uploads a blob to IPFS.\n * @param blob The Blob object to upload.\n * @param filename A name for the file in the FormData payload.\n * @param networkType The network type to use for the IPFS pinning service.\n * @returns The IPFS hash of the uploaded blob.\n */\nexport async function uploadBlobToIPFS(\n blob: Blob,\n filename: string,\n networkType: NETWORK_TYPE,\n): Promise<string> {\n try {\n const form = new FormData();\n form.append('file', blob, filename);\n const response = await fetch(\n getConfig(networkType).ipfsPinningService,\n {\n method: 'POST',\n headers: {\n 'X-Project-Id': 'vechain-kit',\n },\n body: form,\n },\n );\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n const data = await response.json();\n return data.IpfsHash;\n } catch (error) {\n console.error('Error uploading blob:', error);\n throw new Error('Failed to upload blob to IPFS');\n }\n}\n","import { LoginMethodOrderOption } from '@privy-io/react-auth';\nimport { TransactionClause } from '@vechain/sdk-core';\n\nexport type TokenBalance = {\n original: string;\n scaled: string;\n formatted: string;\n};\n\nexport type ENSRecords = {\n display?: string;\n description?: string;\n email?: string;\n url?: string;\n header?: string;\n notice?: string;\n location?: string;\n phone?: string;\n [key: string]: string | undefined;\n};\n\nexport type Wallet = {\n address: string;\n domain?: string;\n image?: string;\n isLoadingMetadata?: boolean;\n metadata?: ENSRecords;\n} | null;\n\nexport type SmartAccount = Wallet & {\n isDeployed: boolean;\n isActive: boolean;\n version: number | null;\n};\n\nexport type ConnectionSource = {\n type: 'privy' | 'wallet' | 'privy-cross-app';\n displayName: string;\n};\n\n/**\n * Data that the Privy user must sign in order to execute a transaction\n * by authorizing the Smart Account contract\n */\nexport type ExecuteWithAuthorizationSignData = {\n domain: {\n name: string;\n version: string;\n chainId: number;\n verifyingContract: string;\n };\n types: {\n ExecuteWithAuthorization: {\n name: string;\n type: string;\n }[];\n EIP712Domain: {\n name: string;\n type: string;\n }[];\n };\n primaryType: string;\n message: {\n validAfter: number;\n validBefore: number;\n to: string | null | undefined;\n value: string;\n data: string;\n };\n};\n\nexport type ExecuteBatchWithAuthorizationSignData = {\n domain: {\n name: string;\n version: string;\n chainId: number;\n verifyingContract: string;\n };\n types: {\n ExecuteBatchWithAuthorization: {\n name: string;\n type: string;\n }[];\n EIP712Domain: {\n name: string;\n type: string;\n }[];\n };\n primaryType: string;\n message: {\n to: string[] | null | undefined;\n value: string[] | null | undefined;\n data: string[] | null | undefined;\n validAfter: number;\n validBefore: number;\n nonce: string;\n };\n};\n\n/**\n * ready: the user has not clicked on the button yet\n * pending: the user has clicked on the button and we're waiting for the transaction to be sent\n * waitingConfirmation: the transaction has been sent and we're waiting for the transaction to be confirmed by the chain\n * success: the transaction has been confirmed by the chain\n * error: the transaction has failed\n * unknown: the transaction receipt has failed to load\n */\nexport type TransactionStatus =\n | 'ready'\n | 'pending'\n | 'waitingConfirmation'\n | 'success'\n | 'error'\n | 'unknown';\n\nexport type TransactionStatusErrorType = {\n type:\n | 'SendTransactionError'\n | 'TxReceiptError'\n | 'RevertReasonError'\n | 'UserRejectedError';\n reason?: string;\n};\n\n/**\n * An enhanced clause with a comment and an abi\n * @param comment a comment to add to the clause\n * @param abi the abi of the contract to call\n */\nexport type EnhancedClause = TransactionClause;\n\nexport type PrivyAppInfo = {\n id: string;\n name: string;\n logo_url: string;\n icon_url: string | null;\n terms_and_conditions_url: string;\n privacy_policy_url: string;\n theme: string;\n accent_color: string;\n wallet_auth: boolean;\n email_auth: boolean;\n google_oauth: boolean;\n twitter_oauth: boolean;\n url: string;\n website?: string;\n};\n\nexport type PrivyLoginMethod = LoginMethodOrderOption;\n\nexport interface CrossAppConnectionCache {\n timestamp: number;\n ecosystemApp: {\n name: string;\n logoUrl?: string;\n appId: string;\n website?: string;\n };\n}\n\nexport enum NFTMediaType {\n IMAGE = 'image',\n VIDEO = 'video',\n UNKNOWN = 'unknown',\n TEXT = 'text', // mp4 appears as text sometimes\n}\n\nexport enum VePassportUserStatus {\n NONE = 'NONE',\n WHITELIST = 'WHITELIST',\n BLACKLIST = 'BLACKLIST',\n}\n\nexport type CURRENCY = 'usd' | 'gbp' | 'eur';\n\nexport const CURRENCY_SYMBOLS: Record<CURRENCY, string> = {\n usd: '$',\n gbp: '£',\n eur: '€',\n};\n","export const ENS_TEXT_RECORDS = [\n 'display',\n 'avatar',\n 'description',\n 'keywords',\n 'email',\n 'url',\n 'header',\n 'notice',\n 'location',\n 'phone',\n 'com.x',\n] as const;\n\nexport type TextRecords = {\n [K in (typeof ENS_TEXT_RECORDS)[number]]?: string;\n};\n","export interface VthoPerGasAtSpeed {\n regular: number;\n medium: number;\n high: number;\n legacy: number;\n}\n\nexport interface EstimatedGas {\n vtho: number;\n vet: number;\n b3tr: number;\n smartAccount: number;\n}\n\nexport interface Rate {\n vtho: number;\n vet: number;\n b3tr: number;\n}\n\nexport interface CostLevel {\n vtho: number;\n vet: number;\n b3tr: number;\n vetWithSmartAccount: number;\n b3trWithSmartAccount: number;\n}\n\nexport interface TransactionCost {\n regular: CostLevel;\n medium: CostLevel;\n high: CostLevel;\n legacy: CostLevel;\n}\n\nexport interface EstimationResponse {\n vthoPerGasAtSpeed?: number;\n estimatedGas?: number;\n rate?: number;\n transactionCost?: number;\n serviceFee?: number;\n totalGasUsed?: number;\n}\n\nexport interface DepositAccount {\n depositAccount: string;\n}\n\nexport function calculateTotalCost(\n baseCost: number,\n serviceFeeRate: number,\n): number {\n return baseCost * (1 + serviceFeeRate);\n}\n\nexport function formatGasCost(amount: number, decimals: number = 4): string {\n return Number(amount).toLocaleString(undefined, {\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n });\n}\n","export * from './types';\nexport * from './ensTextRecords';\nexport * from './gasToken';\nexport * from './gasEstimation';\n\nimport { LegalDocument } from '@/providers';\n\nexport enum LegalDocumentType {\n TERMS = 'terms',\n PRIVACY = 'privacy',\n COOKIES = 'cookies',\n}\n\nexport enum LegalDocumentSource {\n VECHAIN_KIT = 'vechain-kit',\n APPLICATION = 'application',\n}\n\n// Base type for all legal documents (terms, privacy policy, cookies)\nexport type EnrichedLegalDocument = LegalDocument & {\n id: string;\n documentType: LegalDocumentType;\n documentSource: LegalDocumentSource;\n};\n\n// Agreement record stored in localStorage\nexport type LegalDocumentAgreement = EnrichedLegalDocument & {\n walletAddress: string;\n timestamp: number;\n};\n","import { NFTMediaType } from \"@/types\"\n\nconst isValidMimeType = (mime: string, type: NFTMediaType[]) => {\n const found = type.find(t => {\n if (mime?.split(\"/\")[0] === t) {\n return true\n }\n })\n\n return !!found\n}\n\nexport const resolveMediaTypeFromMimeType = (mimeType: string): NFTMediaType => {\n if (isValidMimeType(mimeType, [NFTMediaType.IMAGE])) return NFTMediaType.IMAGE\n else if (isValidMimeType(mimeType, [NFTMediaType.VIDEO])) return NFTMediaType.VIDEO\n\n return NFTMediaType.UNKNOWN\n}\n","import { NETWORK_TYPE } from '@/config/network';\nimport { validateIpfsUri } from './ipfs';\nimport { getConfig } from '@/config';\n\n/**\n * Convert a URI to a URL\n * We support both IPFS and Arweave URIs. Both should be converted to their https gateway URLs.\n * All other URIs should pass through unchanged.\n *\n * @param uri\n */\nexport const convertUriToUrl = (uri: string, networkType: NETWORK_TYPE) => {\n // if it is a data uri just return it\n if (uri.startsWith('data:')) return uri;\n\n const splitUri = uri?.split('://');\n if (splitUri.length !== 2) return null;\n // if (splitUri.length !== 2) throw new Error(`Invalid URI ${uri}`);\n\n const protocol = splitUri?.[0]?.trim();\n const uriWithoutProtocol = splitUri[1];\n\n switch (protocol) {\n case 'ipfs':\n if (!validateIpfsUri(uri))\n throw new Error(`Invalid IPFS URI ${uri}`);\n\n // Check cache for IPFS document\n return `${\n getConfig(networkType).ipfsFetchingService\n }/${uriWithoutProtocol}`;\n\n case 'ar':\n return `https://arweave.net/${uriWithoutProtocol}`;\n\n default:\n return uri;\n }\n};\n","export const gmNfts = [\n {\n level: '1',\n name: 'Earth',\n image: '/images/nft-levels/0.png',\n multiplier: 1,\n b3trToUpgrade: 0,\n },\n {\n level: '2',\n name: 'Moon',\n image: '/images/nft-levels/1.png',\n multiplier: 1.1,\n b3trToUpgrade: 10_000,\n },\n {\n level: '3',\n name: 'Mercury',\n image: '/images/nft-levels/2.png',\n multiplier: 1.2,\n b3trToUpgrade: 25_000,\n },\n {\n level: '4',\n name: 'Venus',\n image: '/images/nft-levels/3.png',\n multiplier: 1.5,\n b3trToUpgrade: 50_000,\n },\n {\n level: '5',\n name: 'Mars',\n image: '/images/nft-levels/4.png',\n multiplier: 2,\n b3trToUpgrade: 100_000,\n },\n {\n level: '6',\n name: 'Jupiter',\n image: '/images/nft-levels/5.png',\n multiplier: 2.5,\n b3trToUpgrade: 250_000,\n },\n {\n level: '7',\n name: 'Saturn',\n image: '/images/nft-levels/6.png',\n multiplier: 3,\n b3trToUpgrade: 500_000,\n },\n {\n level: '8',\n name: 'Uranus',\n image: '/images/nft-levels/7.png',\n multiplier: 5,\n b3trToUpgrade: 2_500_000,\n },\n {\n level: '9',\n name: 'Neptune',\n image: '/images/nft-levels/8.png',\n multiplier: 10,\n b3trToUpgrade: 5_000_000,\n },\n {\n level: '10',\n name: 'Galaxy',\n image: '/images/nft-levels/9.png',\n multiplier: 25,\n b3trToUpgrade: 25_000_000,\n },\n];\n\n/**\n * Maps the XNode level to the GM starting level.\n */\nexport const xNodeToGMstartingLevel: Record<number, number> = {\n 1: 2,\n 2: 4,\n 3: 6,\n 4: 2,\n 5: 4,\n 6: 6,\n 7: 7,\n};\n","// Function to build query string dynamically\nexport const buildQueryString = (params: { [key: string]: any }) => {\n const searchParams = new URLSearchParams()\n\n // Iterate over the parameters and append only the defined values\n Object.keys(params).forEach(key => {\n const value = params[key]\n if (value !== undefined && value !== null) {\n searchParams.append(key, String(value))\n }\n })\n\n return searchParams.toString()\n}\n","/**\n * Map strength level coming from contract to hq image\n */\nexport const NodeStrengthLevelToImage: { [key: string]: string } = {\n \"0\": \"/images/vnt/00-noNode.webp\",\n \"1\": \"/images/vnt/01-strength.webp\",\n \"2\": \"/images/vnt/02-thunder.webp\",\n \"3\": \"/images/vnt/03-mjolnir.webp\",\n \"4\": \"/images/vnt/04-vethorX.webp\",\n \"5\": \"/images/vnt/05-strengthX.webp\",\n \"6\": \"/images/vnt/06-thunderX.webp\",\n \"7\": \"/images/vnt/07-mjolnirX.webp\",\n}\n\n//after this level the nfts are considered xNode\nexport const MinXNodeLevel = 4\nexport const EconomicNodeStrengthLevelToName: { [key: string]: string } = {\n \"1\": \"Strength\",\n \"2\": \"Thunder\",\n \"3\": \"Mjolnir\",\n}\n\nexport const XNodeStrengthLevelToName: { [key: string]: string } = {\n \"4\": \"VeThorX\",\n \"5\": \"StrengthX\",\n \"6\": \"ThunderX\",\n \"7\": \"MjolnirX\",\n}\n\nexport const allNodeStrengthLevelToName: { [key: string]: string } = {\n ...EconomicNodeStrengthLevelToName,\n ...XNodeStrengthLevelToName,\n}\n","export const TIME = {\n SECOND: 1000,\n MINUTE: 1000 * 60,\n HOUR: 1000 * 60 * 60,\n DAY: 1000 * 60 * 60 * 24,\n WEEK: 1000 * 60 * 60 * 24 * 7,\n MONTH: 1000 * 60 * 60 * 24 * 30,\n YEAR: 1000 * 60 * 60 * 24 * 365,\n}\n","/**\n * Checks if a string contains common rejection-related terms\n * @param errorMessage The error message to check\n * @returns boolean indicating if the message contains rejection terms\n */\nexport const isRejectionError = (errorMessage: string): boolean => {\n if (!errorMessage) return false;\n const rejectionTerms = ['rejected', 'cancelled', 'user denied', 'closed'];\n return rejectionTerms.some((term) =>\n errorMessage.toLowerCase().includes(term.toLowerCase()),\n );\n};\n\n/**\n * Generates a simple hash from a string using a 32-bit hash algorithm\n * @param input The string to hash\n * @returns A base-36 string representation of the hash\n */\nexport const simpleHash = (input: string): string => {\n let hash = 0;\n for (let i = 0; i < input.length; i++) {\n const char = input.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash; // Convert to 32bit integer\n }\n return hash.toString(36);\n};\n","export const isValidUrl = (value: string) => {\n try {\n new URL(value);\n return true;\n } catch {\n return false;\n }\n};\n","import { ThorClient } from '@vechain/sdk-network';\nimport {\n ExtractAbiFunctionNames,\n AbiParametersToPrimitiveTypes,\n ExtractAbiFunction,\n} from 'abitype';\nimport { Abi, ContractFunctionParameters } from 'viem';\nimport type {\n MulticallParameters as viem_MulticallParameters,\n MulticallReturnType as viem_MulticallReturnType,\n} from 'viem';\n\ntype ExtractViewFunction<\n TAbi extends Abi,\n TMethod extends ExtractAbiFunctionNames<TAbi, 'pure' | 'view'>,\n> = Extract<\n TAbi[number],\n { type: 'function'; stateMutability: 'pure' | 'view'; name: TMethod }\n>;\n\nexport type ViewFunctionResult<\n TAbi extends Abi,\n TMethod extends ExtractAbiFunctionNames<TAbi, 'pure' | 'view'>,\n> = AbiParametersToPrimitiveTypes<\n ExtractViewFunction<TAbi, TMethod>['outputs'],\n 'outputs'\n>;\n\nexport type MultipleClausesCallParameters<\n contracts extends readonly unknown[] = readonly ContractFunctionParameters[],\n allowFailure extends boolean = true,\n> = viem_MulticallParameters<contracts, allowFailure>['contracts'];\n\nexport type MultipleClausesCallReturnType<\n contracts extends readonly unknown[] = readonly ContractFunctionParameters[],\n allowFailure extends boolean = true,\n> = viem_MulticallReturnType<contracts, allowFailure>;\n\nexport const executeCallClause = async <\n TAbi extends Abi,\n TMethod extends ExtractAbiFunctionNames<TAbi, 'pure' | 'view'>,\n>({\n thor,\n contractAddress,\n abi,\n method,\n args,\n}: {\n thor: ThorClient;\n contractAddress: string;\n abi: TAbi;\n method: TMethod;\n args: AbiParametersToPrimitiveTypes<\n ExtractAbiFunction<TAbi, TMethod>['inputs'],\n 'inputs'\n >;\n}) => {\n const contract = thor.contracts.load(contractAddress, abi);\n const res = await contract.read[method](...args);\n return res as ViewFunctionResult<TAbi, TMethod>;\n};\n\nexport const executeMultipleClausesCall = async <\n contracts extends readonly ContractFunctionParameters[],\n allowFailure extends boolean = false,\n>({\n thor,\n calls,\n}: {\n thor: ThorClient;\n calls: MultipleClausesCallParameters<contracts, allowFailure>;\n}) => {\n if (!Array.isArray(calls)) throw new Error('calls must be an array');\n\n const clauses = calls.map((call) =>\n thor.contracts\n .load(call.address, call.abi)\n .clause[call.functionName](...call.args),\n );\n const res = await thor.transactions.executeMultipleClausesCall(clauses);\n\n if (!res.every((r) => r.success))\n throw new Error('Failed to execute multiple clauses call');\n\n return res.map((r) => r.result.plain) as MultipleClausesCallReturnType<\n contracts,\n allowFailure\n >;\n};\n\nexport const buildCallClauses = <\n contracts extends readonly ContractFunctionParameters[],\n allowFailure extends boolean = false,\n>({\n thor,\n calls,\n}: {\n thor: ThorClient;\n calls: MultipleClausesCallParameters<contracts, allowFailure>;\n}) => {\n if (!Array.isArray(calls)) throw new Error('calls must be an array');\n\n return calls.map((call) =>\n thor.contracts\n .load(call.address, call.abi)\n .clause[call.functionName](...call.args),\n );\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{D as e,F as t,N as n,P as r,T as i,c as a,d as ee,f as te,l as ne,m as o,p as s,s as c,u as l}from"./assets-BL24r-Yp.mjs";import{Icon as re}from"@chakra-ui/react";import ie from"react";import{jsx as u,jsxs as ae}from"react/jsx-runtime";import{picasso as oe}from"@vechain/picasso";import{BigNumber as se}from"bignumber.js";import{formatEther as ce}from"ethers";import{generatePrivateKey as le,privateKeyToAccount as ue}from"viem/accounts";import{Address as de}from"@vechain/sdk-core";var fe={ipfsFetchingService:`https://api.dev.gateway-proxy.vechain.org/ipfs`,ipfsPinningService:`https://api.dev.gateway-proxy.vechain.org/api/v1/pinning/pinFileToIPFS`,vthoContractAddress:`0x0000000000000000000000000000456E65726779`,b3trContractAddress:`0xd31A6f2DBa8785cE41AB68Ea192791B5175309F4`,vot3ContractAddress:`0x028Af33230576c1e073C8245F72a7A4aa53564E4`,b3trGovernorAddress:`0x36E0e9b46D56dF12Dd69fD560e41954C73cE9ded`,timelockContractAddress:`0x125389845c93Efcf6471BA8BE1AC19c11e128603`,xAllocationPoolContractAddress:`0xC8232c91E2f744E533322B99F95f809b9f7ec446`,xAllocationVotingContractAddress:`0x074F093f4C534a16cDD09cb4b2669713218A762a`,emissionsContractAddress:`0x6a084E85f38400790043788FcCee39595616aa3A`,voterRewardsContractAddress:`0xbAb852081C459c0060960287aDcf9a0C2c1dc4b8`,galaxyMemberContractAddress:`0xbdA1cff75d2D43AB9186Ada41fECF79e25c49Ba3`,treasuryContractAddress:`0xe9414513Fe0e3b9bf7a61eC5c1AC7Df943fB3e77`,x2EarnAppsContractAddress:`0x432C46476f4970575C43B19588A170D237dC4929`,x2EarnRewardsPoolContractAddress:`0x134E4Fce6761f660401808CF86aE0e62cE52a81E`,nodeManagementContractAddress:`0xa96B5057171D797298A71178b48449A7bC615D8E`,veBetterPassportContractAddress:`0x8db6D14452fE36ba86C341AfEFaC0f90A0Db2bcb`,x2EarnCreatorContractAddress:`0x4e5f7eb452e9ecd75c0B29e3540014cBe01bBF52`,veDelegate:`0xfc32a9895C78CE00A1047d602Bd81Ea8134CC32b`,veDelegateVotes:`0xeb71148c9B3cd57e228c2152d79f6e78F5F1ef9a`,veDelegateTokenContractAddress:`0xD3f7b82Df5705D34f64C634d2dEf6B1cB3116950`,oracleContractAddress:`0x49eC7192BF804Abc289645ca86F1eD01a6C17713`,accountFactoryAddress:`0xC06Ad8573022e2BE416CA89DA47E8c592971679A`,cleanifyCampaignsContractAddress:`0x7a11D63338576aE8c038868433ea199d7E5319A6`,cleanifyChallengesContractAddress:`0xa58681692AdDD2e8E37f9113D40Bb9253C03F65e`,veWorldSubdomainClaimerContractAddress:`0x0000000000000000000000000000000000000000`,vetDomainsContractAddress:`0x0000000000000000000000000000000000000000`,vetDomainsPublicResolverAddress:`0x0000000000000000000000000000000000000000`,vetDomainsReverseRegistrarAddress:`0x5c970901a587BA3932C835D4ae5FAE2BEa7e78Bc`,vnsResolverAddress:`0x0000000000000000000000000000000000000000`,sassContractAddress:`0x0000000000000000000000000000000000000000`,vetDomainAvatarUrl:`https://testnet.vet.domains/api/avatar`,indexerUrl:`https://b3tr.testnet.vechain.org/api/v1`,b3trIndexerUrl:`https://b3tr.testnet.vechain.org/api/v1`,graphQlIndexerUrl:`https://graph.vet/subgraphs/name/vns`,nodeUrl:`http://localhost:8669`,network:{id:`solo`,name:`solo`,type:`solo`,defaultNet:!0,urls:[`http://localhost:8669`],explorerUrl:`https://explore-testnet.vechain.org`,blockTime:1e4,genesis:{number:0,id:`0x00000000c05a20fbca2bf6ae3affba6af4a74b800b585bf7a4988aba7aea69f6`,size:170,parentID:`0xffffffff53616c757465202620526573706563742c20457468657265756d2100`,timestamp:1530316800,gasLimit:1e7,beneficiary:`0x0000000000000000000000000000000000000000`,gasUsed:0,totalScore:0,txsRoot:`0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0`,txsFeatures:0,stateRoot:`0x93de0ffb1f33bc0af053abc2a87c4af44594f5dcb1cb879dd823686a15d68550`,receiptsRoot:`0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0`,signer:`0x0000000000000000000000000000000000000000`,isTrunk:!0,transactions:[]}},explorerUrl:`https://explore-testnet.vechain.org`},pe={ipfsFetchingService:`https://api.dev.gateway-proxy.vechain.org/ipfs`,ipfsPinningService:`https://api.dev.gateway-proxy.vechain.org/api/v1/pinning/pinFileToIPFS`,vthoContractAddress:`0x0000000000000000000000000000456E65726779`,b3trContractAddress:`0x95761346d18244bb91664181bf91193376197088`,vot3ContractAddress:`0x6e8b4a88d37897fc11f6ba12c805695f1c41f40e`,b3trGovernorAddress:`0xc30b4d0837f7e3706749655d8bde0c0f265dd81b`,timelockContractAddress:`0x835509222aa67c333a1cbf29bd341e014aba86c9`,xAllocationPoolContractAddress:`0x6f7b4bc19b4dc99005b473b9c45ce2815bbe7533`,xAllocationVotingContractAddress:`0x8800592c463f0b21ae08732559ee8e146db1d7b2`,emissionsContractAddress:`0x66898f98409db20ed6a1bf0021334b7897eb0688`,voterRewardsContractAddress:`0x851ef91801899a4e7e4a3174a9300b3e20c957e8`,galaxyMemberContractAddress:`0x38a59fa7fd7039884465a0ff285b8c4b6fe394ca`,x2EarnCreatorContractAddress:`0xb89f0ecdaf9987f87912d6c77756435fe4085b05`,nodeManagementContractAddress:`0xde17d0a516c38c168d37685bb71465f656aa256e`,x2EarnAppsContractAddress:`0x0b54a094b877a25bdc95b4431eaa1e2206b1ddfe`,treasuryContractAddress:`0x3d531a80c05099c71b02585031f86a2988e0caca`,x2EarnRewardsPoolContractAddress:`0x2d2a2207c68a46fc79325d7718e639d1047b0d8b`,veBetterPassportContractAddress:`0x592c756df7a5d39de1735030e8b9c18b7417e6c4`,veDelegate:`0xfc32a9895C78CE00A1047d602Bd81Ea8134CC32b`,veDelegateVotes:`0xeb71148c9B3cd57e228c2152d79f6e78F5F1ef9a`,veDelegateTokenContractAddress:`0xD3f7b82Df5705D34f64C634d2dEf6B1cB3116950`,oracleContractAddress:`0xdcCAaBd81B38e0dEEf4c202bC7F1261A4D9192C6`,accountFactoryAddress:`0x713b908Bcf77f3E00EFEf328E50b657a1A23AeaF`,cleanifyCampaignsContractAddress:`0x22d19ACBD2cBf6b2B6C546395c26B9Cb448248BF`,cleanifyChallengesContractAddress:`0x8Cc885DC3e5c376632CCEA0e8e1a51F1B3572442`,veWorldSubdomainClaimerContractAddress:`0xe5af50e7ad1aaab4fbe4efbb2b30f764013918b3`,vetDomainsContractAddress:`0xcBFB30c1F267914816668d53AcBA7bA7c9806D13`,vetDomainsPublicResolverAddress:`0xA6eFd130085a127D090ACb0b100294aD1079EA6f`,vetDomainsReverseRegistrarAddress:`0x6878f1aD5e3015310CfE5B38d7B7071C5D8818Ca`,vnsResolverAddress:`0xc403b8EA53F707d7d4de095f0A20bC491Cf2bc94`,sassContractAddress:`0x1b299f501bce347893f5a3a10e625c9a3345365e`,vetDomainAvatarUrl:`https://testnet.vet.domains/api/avatar`,indexerUrl:`https://indexer.testnet.vechain.org/api/v1`,b3trIndexerUrl:`https://indexer.testnet.vechain.org/api/v1`,graphQlIndexerUrl:`https://graph.vet/subgraphs/name/vns`,nodeUrl:`https://testnet.vechain.org`,network:{id:`testnet`,name:`testnet`,type:`test`,defaultNet:!0,urls:[`https://testnet.vechain.org`,`https://vethor-node-test.vechaindev.com`,`https://sync-testnet.veblocks.net`,`https://testnet.vecha.in`],explorerUrl:`https://insight.vecha.in/#/test`,blockTime:1e4,genesis:{number:0,id:`0x000000000b2bce3c70bc649a02749e8687721b09ed2e15997f466536b20bb127`,size:170,parentID:`0xffffffff00000000000000000000000000000000000000000000000000000000`,timestamp:1530014400,gasLimit:1e7,beneficiary:`0x0000000000000000000000000000000000000000`,gasUsed:0,totalScore:0,txsRoot:`0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0`,txsFeatures:0,stateRoot:`0x4ec3af0acbad1ae467ad569337d2fe8576fe303928d35b8cdd91de47e9ac84bb`,receiptsRoot:`0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0`,signer:`0x0000000000000000000000000000000000000000`,isTrunk:!0,transactions:[]}},explorerUrl:`https://explore-testnet.vechain.org/transactions`},me={ipfsFetchingService:`https://api.gateway-proxy.vechain.org/ipfs`,indexerUrl:`https://indexer.mainnet.vechain.org/api/v1`,ipfsPinningService:`https://api.gateway-proxy.vechain.org/api/v1/pinning/pinFileToIPFS`,b3trIndexerUrl:`https://indexer.mainnet.vechain.org/api/v1`,graphQlIndexerUrl:`https://graph.vet/subgraphs/name/vns`,nodeUrl:`https://mainnet.vechain.org`,network:{id:`main`,name:`main`,type:`main`,defaultNet:!0,urls:[`https://mainnet.vechain.org`,`https://vethor-node.vechain.com`,`https://mainnet.veblocks.net`,`https://mainnet.vecha.in`],explorerUrl:`https://vechainstats.com`,blockTime:1e4,genesis:{number:0,id:`0x00000000851caf3cfdb6e899cf5958bfb1ac3413d346d43539627e6be7ec1b4a`,size:170,parentID:`0xffffffff53616c757465202620526573706563742c20457468657265756d2100`,timestamp:1530316800,gasLimit:1e7,beneficiary:`0x0000000000000000000000000000000000000000`,gasUsed:0,totalScore:0,txsRoot:`0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0`,txsFeatures:0,stateRoot:`0x09bfdf9e24dd5cd5b63f3c1b5d58b97ff02ca0490214a021ed7d99b93867839c`,receiptsRoot:`0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0`,signer:`0x0000000000000000000000000000000000000000`,isTrunk:!0,transactions:[]}},explorerUrl:`https://vechainstats.com/transaction`,vthoContractAddress:`0x0000000000000000000000000000456E65726779`,b3trContractAddress:`0x5ef79995FE8a89e0812330E4378eB2660ceDe699`,vot3ContractAddress:`0x76Ca782B59C74d088C7D2Cce2f211BC00836c602`,b3trGovernorAddress:`0x1c65C25fABe2fc1bCb82f253fA0C916a322f777C`,timelockContractAddress:`0x7B7EaF620d88E38782c6491D7Ce0B8D8cF3227e4`,xAllocationPoolContractAddress:`0x4191776F05f4bE4848d3f4d587345078B439C7d3`,xAllocationVotingContractAddress:`0x89A00Bb0947a30FF95BEeF77a66AEdE3842Fe5B7`,emissionsContractAddress:`0xDf94739bd169C84fe6478D8420Bb807F1f47b135`,voterRewardsContractAddress:`0x838A33AF756a6366f93e201423E1425f67eC0Fa7`,galaxyMemberContractAddress:`0x93B8cD34A7Fc4f53271b9011161F7A2B5fEA9D1F`,treasuryContractAddress:`0xD5903BCc66e439c753e525F8AF2FeC7be2429593`,x2EarnAppsContractAddress:`0x8392B7CCc763dB03b47afcD8E8f5e24F9cf0554D`,x2EarnRewardsPoolContractAddress:`0x6Bee7DDab6c99d5B2Af0554EaEA484CE18F52631`,x2EarnCreatorContractAddress:`0xe8e96a768ffd00417d4bd985bec9EcfC6F732a7f`,nodeManagementContractAddress:`0xB0EF9D89C6b49CbA6BBF86Bf2FDf0Eee4968c6AB`,veBetterPassportContractAddress:`0x35a267671d8EDD607B2056A9a13E7ba7CF53c8b3`,veDelegate:`0xfc32a9895C78CE00A1047d602Bd81Ea8134CC32b`,veDelegateVotes:`0xeb71148c9B3cd57e228c2152d79f6e78F5F1ef9a`,veDelegateTokenContractAddress:`0xD3f7b82Df5705D34f64C634d2dEf6B1cB3116950`,oracleContractAddress:`0x49eC7192BF804Abc289645ca86F1eD01a6C17713`,accountFactoryAddress:`0xC06Ad8573022e2BE416CA89DA47E8c592971679A`,cleanifyCampaignsContractAddress:`0x7a11D63338576aE8c038868433ea199d7E5319A6`,cleanifyChallengesContractAddress:`0xa58681692AdDD2e8E37f9113D40Bb9253C03F65e`,veWorldSubdomainClaimerContractAddress:`0xa4173c32fe8a61a8fd0d0234675b559fc360446a`,vetDomainsContractAddress:`0xa9231da8BF8D10e2df3f6E03Dd5449caD600129b`,vetDomainsPublicResolverAddress:`0xabac49445584C8b6c1472b030B1076Ac3901D7cf`,vetDomainsReverseRegistrarAddress:`0x5c970901a587BA3932C835D4ae5FAE2BEa7e78Bc`,vnsResolverAddress:`0xA11413086e163e41901bb81fdc5617c975Fa5a1A`,vetDomainAvatarUrl:`https://vet.domains/api/avatar`,sassContractAddress:`0x84b0caf6436aace4e21d10f126963fdd53ac31ea`};const d=e=>{if(e===`solo`)return fe;if(e===`test`)return pe;if(e===`main`)return me;throw Error(`Unsupported NETWORK_TYPE ${e}`)},he=({...e})=>ae(re,{viewBox:`0 0 1684.56 1684.56`,...e,children:[u(`rect`,{fill:`#b1f16c`,width:`1684.56`,height:`1684.56`,rx:`157.74`,ry:`157.74`}),u(`path`,{fill:`#1d1d1d`,d:`M844.98,1386.28c-41.46,0-75.1-33.9-75.1-75.67,0-142.78-86.35-274.05-158.8-359.01-89.72-105.25-197.89-186.19-265.28-219.75-37.18-18.54-52.43-63.88-34.09-101.35,18.39-37.47,63.39-52.83,100.58-34.35,75.09,37.41,202.11,127.08,312.7,256.82,32.24,37.81,66.77,83.5,97.66,135.35,34.2-108.83,79.98-205.07,121.61-280.12,91.8-165.56,214.37-317.13,319.84-395.63,33.36-24.83,80.39-17.68,105.02,15.93,24.64,33.61,17.55,81-15.81,105.82-88.03,65.47-197.1,201.95-277.93,347.68-70.82,127.7-155.25,323.08-155.25,528.6,0,41.78-33.64,75.67-75.1,75.67h-.06Z`})]}),f=e=>{try{return typeof window>`u`?null:localStorage.getItem(e)}catch(t){return console.warn(`Error accessing localStorage for key "${e}":`,t),null}},p=(e,t)=>{try{if(typeof window>`u`)return;localStorage.setItem(e,t)}catch(t){console.warn(`Error setting localStorage for key "${e}":`,t)}},m=e=>{try{if(typeof window>`u`)return;localStorage.removeItem(e)}catch(t){console.warn(`Error removing localStorage for key "${e}":`,t)}},h=()=>{try{return typeof document<`u`?document.title:``}catch{return``}},g=()=>{try{return typeof window<`u`&&window.location?window.location.origin:``}catch{return``}},_=()=>typeof window<`u`&&typeof document<`u`,v=(e,t,n)=>{_()&&window.open(e,t,n)},y=e=>typeof document<`u`?document.querySelector(e):null,b=()=>typeof navigator<`u`,x=()=>b()&&navigator.onLine,S=async e=>{try{return b()&&navigator.clipboard?(await navigator.clipboard.writeText(e),!0):!1}catch(e){return console.warn(`Error copying to clipboard:`,e),!1}},C=[`VOT3`],w={VET:new URL(`/static/img/coins/64x64/3077.png`,a).toString(),VTHO:new URL(`/static/img/coins/64x64/3012.png`,a).toString(),B3TR:new URL(`/static/img/coins/64x64/33509.png`,a).toString(),VOT3:new URL(`/17ff70aa1d898bc97ad690dbfad1a3b5643f7e0b.png`,a).toString(),veDelegate:new URL(`1c641b86096d56bf13d49f38388accd6db8b8b2e.png`,e).toString(),SASS:new URL(`https://prod-vechainkit-docs-images-bucket.s3.eu-west-1.amazonaws.com/sass-token-image.png`).toString()},T={VET:u(r,{}),VTHO:u(n,{}),B3TR:u(t,{}),VOT3:u(he,{})},E=`cm4wxxujb022fyujl7g0thb21`,D=s;let O=function(e){return e[e.WhitelistCheck=1]=`WhitelistCheck`,e[e.BlacklistCheck=2]=`BlacklistCheck`,e[e.SignalingCheck=3]=`SignalingCheck`,e[e.ParticipationScoreCheck=4]=`ParticipationScoreCheck`,e[e.GmOwnershipCheck=5]=`GmOwnershipCheck`,e}({});const k={NETWORK:`vechain-kit:network`},A=()=>{if(typeof window>`u`)return{isDevelopment:!1,isProduction:!0};let e=f(k.NETWORK);return{isDevelopment:e===`test`,isProduction:e===`main`}},j={get isDevelopment(){return A().isDevelopment},get isProduction(){return A().isProduction}},M=()=>A().isProduction?`${l}/api/v1/`:`${ee}/api/v1/`,N=[{id:`clz41gcg00e4ay75dmq3uzzgr`,name:`Cleanify`,website:c},{id:`cm153hrup0817axti38avlfyg`,name:`GreenCart`,website:te},{id:`clv9sfos20j6x1431ga80d95f`,name:`Mughsot`,website:o},{id:`cm4l8tiai070i108zo17oieyc`,name:`EVearn`,website:ne}],P={url:new URL(`terms`,i).toString(),version:1,required:!0,displayName:`Vechain Kit Terms`},F={url:new URL(`cookies`,i).toString(),version:1,required:!1,displayName:`Vechain Kit Cookies`},I={tokenPriority:[`VET`,`B3TR`,`VTHO`],availableGasTokens:[`VET`,`B3TR`,`VTHO`],excludedTokens:[],alwaysConfirm:!1,gasTokenToUse:`VET`},L={B3TR:{type:`B3TR`,name:`B3TR Token`,symbol:`B3TR`,address:d(process.env.NEXT_PUBLIC_NETWORK_TYPE||`test`).b3trContractAddress,description:`Pay gas with B3TR`},VET:{type:`VET`,name:`VET Token`,symbol:`VET`,description:`Pay gas with VET`},VTHO:{type:`VTHO`,name:`VTHO Token`,symbol:`VTHO`,address:d(process.env.NEXT_PUBLIC_NETWORK_TYPE||`test`).vthoContractAddress,description:`Pay gas with VTHO`}},R=(e,t=6,n=4)=>`${e.slice(0,t)}•••${e.slice(-n)}`,ge=(e,t=8,n=6)=>e.length<=t+n?e:`${e.substring(0,t)}•••${e.substring(e.length-n)}`,z=(e,t,n=null)=>{let r=n?` `+n:``;t||=e;let i=new Intl.NumberFormat(`en-US`,{style:`decimal`,minimumFractionDigits:Number.parseFloat(e.toString())%1==0?0:2}).format(ve(Number(e),2));return!B(t)&&B(i)&&(i=`< 0.01`),i+r},B=e=>!e&&e!==0?!1:new se(e).isZero(),_e=(e,t=!1)=>{let n=oe(e.toLowerCase());return t?`data:image/svg+xml;base64,${Buffer.from(n,`utf8`).toString(`base64`)}`:`data:image/svg+xml;utf8,${n}`};function ve(e,t=0){if(typeof e!=`number`||typeof t!=`number`)throw Error(`Invalid input: number and decimals must be of type number`);let n=parseInt(e.toExponential().split(`e-`)[1]||`0`,10),r=10**Math.max(0,t+n);return Math.floor(e*r)/r}const ye=e=>{let t=ce(e),n=t===`0`?`0`:z(t);return{original:e.toString(),scaled:t,formatted:n}},be=(()=>{let e=le(),t=ue(e);return{privateKey:e,account:t,address:t.address}})(),V=/^0[xX]/,xe=/^(0[xX])?[a-fA-F0-9]+$/,H=e=>(W(e),e.replace(V,``)),U=e=>(W(e),V.test(e)?e.replace(V,`0x`):`0x${e}`),W=e=>{if(!G(e))throw Error(`Provided hex value is not valid`)},G=e=>!!e&&xe.test(e),Se=e=>!G(e),K=e=>U(e.toLowerCase().trim()),Ce=(e,t)=>{try{return H(e).toLowerCase()===H(t).toLowerCase()}catch{return!1}},q=(e,t)=>{if(!e||!t)return!1;if(t===e)return!0;try{return K(e)===K(t)}catch{return!1}},we=(e,t)=>{if(e.length!==t.length)return!1;let n=[...e].map(e=>e.toLowerCase()).sort((e,t)=>e.localeCompare(t)),r=[...t].map(e=>e.toLowerCase()).sort((e,t)=>e.localeCompare(t));for(let e=0;e<n.length;e++)if(!q(n[e],r[e]))return!1;return!0},Te=()=>/^0x[a-fA-F0-9]{40}$/,Ee=de.isValid,De=(e,t)=>{let n=e.startsWith(`0x`)?e.slice(2):e;if(n.length>t)throw Error(`Input string is longer than the specified length`);return`0x${n.padStart(t,`0`)}`},J=e=>{let t=e.trim();return/^ipfs:\/\/[a-zA-Z0-9]+(\/[^/]+)*\/?$/.test(t)};function Oe(e,t){return`ipfs://${e}/${t??``}`}async function ke(e,t,n){try{let r=new FormData;r.append(`file`,e,t);let i=await fetch(d(n).ipfsPinningService,{method:`POST`,headers:{"X-Project-Id":`vechain-kit`},body:r});if(!i.ok)throw Error(`HTTP error! status: ${i.status}`);return(await i.json()).IpfsHash}catch(e){throw console.error(`Error uploading blob:`,e),Error(`Failed to upload blob to IPFS`)}}let Y=function(e){return e.IMAGE=`image`,e.VIDEO=`video`,e.UNKNOWN=`unknown`,e.TEXT=`text`,e}({}),Ae=function(e){return e.NONE=`NONE`,e.WHITELIST=`WHITELIST`,e.BLACKLIST=`BLACKLIST`,e}({});const je={usd:`$`,gbp:`£`,eur:`€`},Me=[`display`,`avatar`,`description`,`keywords`,`email`,`url`,`header`,`notice`,`location`,`phone`,`com.x`];function Ne(e,t){return e*(1+t)}function Pe(e,t=4){return Number(e).toLocaleString(void 0,{minimumFractionDigits:t,maximumFractionDigits:t})}let Fe=function(e){return e.TERMS=`terms`,e.PRIVACY=`privacy`,e.COOKIES=`cookies`,e}({}),Ie=function(e){return e.VECHAIN_KIT=`vechain-kit`,e.APPLICATION=`application`,e}({});const X=(e,t)=>!!t.find(t=>{if(e?.split(`/`)[0]===t)return!0}),Le=e=>X(e,[Y.IMAGE])?Y.IMAGE:X(e,[Y.VIDEO])?Y.VIDEO:Y.UNKNOWN,Re=(e,t)=>{if(e.startsWith(`data:`))return e;let n=e?.split(`://`);if(n.length!==2)return null;let r=n?.[0]?.trim(),i=n[1];switch(r){case`ipfs`:if(!J(e))throw Error(`Invalid IPFS URI ${e}`);return`${d(t).ipfsFetchingService}/${i}`;case`ar`:return`https://arweave.net/${i}`;default:return e}},ze=[{level:`1`,name:`Earth`,image:`/images/nft-levels/0.png`,multiplier:1,b3trToUpgrade:0},{level:`2`,name:`Moon`,image:`/images/nft-levels/1.png`,multiplier:1.1,b3trToUpgrade:1e4},{level:`3`,name:`Mercury`,image:`/images/nft-levels/2.png`,multiplier:1.2,b3trToUpgrade:25e3},{level:`4`,name:`Venus`,image:`/images/nft-levels/3.png`,multiplier:1.5,b3trToUpgrade:5e4},{level:`5`,name:`Mars`,image:`/images/nft-levels/4.png`,multiplier:2,b3trToUpgrade:1e5},{level:`6`,name:`Jupiter`,image:`/images/nft-levels/5.png`,multiplier:2.5,b3trToUpgrade:25e4},{level:`7`,name:`Saturn`,image:`/images/nft-levels/6.png`,multiplier:3,b3trToUpgrade:5e5},{level:`8`,name:`Uranus`,image:`/images/nft-levels/7.png`,multiplier:5,b3trToUpgrade:25e5},{level:`9`,name:`Neptune`,image:`/images/nft-levels/8.png`,multiplier:10,b3trToUpgrade:5e6},{level:`10`,name:`Galaxy`,image:`/images/nft-levels/9.png`,multiplier:25,b3trToUpgrade:25e6}],Be={1:2,2:4,3:6,4:2,5:4,6:6,7:7},Ve=e=>{let t=new URLSearchParams;return Object.keys(e).forEach(n=>{let r=e[n];r!=null&&t.append(n,String(r))}),t.toString()},He={0:`/images/vnt/00-noNode.webp`,1:`/images/vnt/01-strength.webp`,2:`/images/vnt/02-thunder.webp`,3:`/images/vnt/03-mjolnir.webp`,4:`/images/vnt/04-vethorX.webp`,5:`/images/vnt/05-strengthX.webp`,6:`/images/vnt/06-thunderX.webp`,7:`/images/vnt/07-mjolnirX.webp`},Ue=4,Z={1:`Strength`,2:`Thunder`,3:`Mjolnir`},Q={4:`VeThorX`,5:`StrengthX`,6:`ThunderX`,7:`MjolnirX`},We={...Z,...Q},$={SECOND:1e3,MINUTE:1e3*60,HOUR:1e3*60*60,DAY:1e3*60*60*24,WEEK:1e3*60*60*24*7,MONTH:1e3*60*60*24*30,YEAR:1e3*60*60*24*365},Ge=e=>e?[`rejected`,`cancelled`,`user denied`,`closed`].some(t=>e.toLowerCase().includes(t.toLowerCase())):!1,Ke=e=>{let t=0;for(let n=0;n<e.length;n++){let r=e.charCodeAt(n);t=(t<<5)-t+r,t&=t}return t.toString(36)},qe=e=>{try{return new URL(e),!0}catch{return!1}},Je=async({thor:e,contractAddress:t,abi:n,method:r,args:i})=>await e.contracts.load(t,n).read[r](...i),Ye=async({thor:e,calls:t})=>{if(!Array.isArray(t))throw Error(`calls must be an array`);let n=t.map(t=>e.contracts.load(t.address,t.abi).clause[t.functionName](...t.args)),r=await e.transactions.executeMultipleClausesCall(n);if(!r.every(e=>e.success))throw Error(`Failed to execute multiple clauses call`);return r.map(e=>e.result.plain)},Xe=({thor:e,calls:t})=>{if(!Array.isArray(t))throw Error(`calls must be an array`);return t.map(t=>e.contracts.load(t.address,t.abi).clause[t.functionName](...t.args))};export{w as $,we as A,W as B,je as C,ke as D,Oe as E,Ce as F,ge as G,ye as H,Se as I,I as J,z as K,G as L,De as M,Te as N,J as O,U as P,L as Q,K as R,Me as S,Ae as T,_e as U,be as V,R as W,j as X,N as Y,C as Z,Le as _,y as _t,Ge as a,E as at,Ne as b,d as bt,Z as c,D as ct,Q as d,f as dt,T as et,We as f,g as ft,Re as g,m as gt,Be as h,x as ht,qe as i,P as it,Ee as j,q as k,Ue as l,S as lt,ze as m,_ as mt,Je as n,F as nt,Ke as o,A as ot,Ve as p,b as pt,B as q,Ye as r,k as rt,$ as s,M as st,Xe as t,O as tt,He as u,h as ut,Ie as v,v as vt,Y as w,Pe as x,Fe as y,p as yt,H as z};
|
|
2
|
+
//# sourceMappingURL=utils-D6wgzl57.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils-D6wgzl57.mjs","names":["config: AppConfig","config","config: AppConfig","config","config: AppConfig","localConfig","testnetConfig","mainnetConfig","VOT3Logo: React.FC<Props>","NON_TRANSFERABLE_TOKEN_SYMBOLS: readonly string[]","TOKEN_LOGOS: Record<string, string>","TOKEN_LOGO_COMPONENTS: Record<string, JSX.Element>","DEFAULT_PRIVY_ECOSYSTEM_APPS: PrivyEcosystemApp[]","DEFAULT_GAS_TOKEN_PREFERENCES: GasTokenPreferences","SUPPORTED_GAS_TOKENS: Record<GasTokenType, GasTokenInfo>","randomTransactionUser: {\n privateKey: string;\n account: Account;\n address: string;\n}","HexUtils.normalize","CURRENCY_SYMBOLS: Record<CURRENCY, string>","xNodeToGMstartingLevel: Record<number, number>","NodeStrengthLevelToImage: { [key: string]: string }","EconomicNodeStrengthLevelToName: { [key: string]: string }","XNodeStrengthLevelToName: { [key: string]: string }","allNodeStrengthLevelToName: { [key: string]: string }"],"sources":["../src/config/solo.ts","../src/config/testnet.ts","../src/config/mainnet.ts","../src/config/index.ts","../src/assets/icons/VechainLogo/VOT3Logo.tsx","../src/utils/ssrUtils.ts","../src/utils/constants.tsx","../src/utils/formattingUtils.tsx","../src/utils/randomTxForwarder.tsx","../src/utils/hexUtils.ts","../src/utils/addressUtils.ts","../src/utils/ipfs.ts","../src/types/types.ts","../src/types/ensTextRecords.ts","../src/types/gasEstimation.ts","../src/types/index.ts","../src/utils/media.ts","../src/utils/uri.ts","../src/utils/gmNfts.ts","../src/utils/buildQueryString.ts","../src/utils/xNode.ts","../src/utils/time.ts","../src/utils/stringUtils.ts","../src/utils/url.ts","../src/utils/thorUtils.ts"],"sourcesContent":["import { AppConfig } from '.';\nconst config: AppConfig = {\n ipfsFetchingService: 'https://api.dev.gateway-proxy.vechain.org/ipfs',\n ipfsPinningService:\n 'https://api.dev.gateway-proxy.vechain.org/api/v1/pinning/pinFileToIPFS',\n vthoContractAddress: '0x0000000000000000000000000000456E65726779',\n b3trContractAddress: '0xd31A6f2DBa8785cE41AB68Ea192791B5175309F4',\n vot3ContractAddress: '0x028Af33230576c1e073C8245F72a7A4aa53564E4',\n b3trGovernorAddress: '0x36E0e9b46D56dF12Dd69fD560e41954C73cE9ded',\n timelockContractAddress: '0x125389845c93Efcf6471BA8BE1AC19c11e128603',\n xAllocationPoolContractAddress:\n '0xC8232c91E2f744E533322B99F95f809b9f7ec446',\n xAllocationVotingContractAddress:\n '0x074F093f4C534a16cDD09cb4b2669713218A762a',\n emissionsContractAddress: '0x6a084E85f38400790043788FcCee39595616aa3A',\n voterRewardsContractAddress: '0xbAb852081C459c0060960287aDcf9a0C2c1dc4b8',\n galaxyMemberContractAddress: '0xbdA1cff75d2D43AB9186Ada41fECF79e25c49Ba3',\n treasuryContractAddress: '0xe9414513Fe0e3b9bf7a61eC5c1AC7Df943fB3e77',\n x2EarnAppsContractAddress: '0x432C46476f4970575C43B19588A170D237dC4929',\n x2EarnRewardsPoolContractAddress:\n '0x134E4Fce6761f660401808CF86aE0e62cE52a81E',\n nodeManagementContractAddress: '0xa96B5057171D797298A71178b48449A7bC615D8E',\n veBetterPassportContractAddress:\n '0x8db6D14452fE36ba86C341AfEFaC0f90A0Db2bcb',\n x2EarnCreatorContractAddress: '0x4e5f7eb452e9ecd75c0B29e3540014cBe01bBF52',\n veDelegate: '0xfc32a9895C78CE00A1047d602Bd81Ea8134CC32b',\n veDelegateVotes: '0xeb71148c9B3cd57e228c2152d79f6e78F5F1ef9a',\n veDelegateTokenContractAddress:\n '0xD3f7b82Df5705D34f64C634d2dEf6B1cB3116950',\n oracleContractAddress: '0x49eC7192BF804Abc289645ca86F1eD01a6C17713',\n accountFactoryAddress: '0xC06Ad8573022e2BE416CA89DA47E8c592971679A',\n cleanifyCampaignsContractAddress:\n '0x7a11D63338576aE8c038868433ea199d7E5319A6',\n cleanifyChallengesContractAddress:\n '0xa58681692AdDD2e8E37f9113D40Bb9253C03F65e',\n veWorldSubdomainClaimerContractAddress:\n '0x0000000000000000000000000000000000000000',\n vetDomainsContractAddress: '0x0000000000000000000000000000000000000000',\n vetDomainsPublicResolverAddress:\n '0x0000000000000000000000000000000000000000',\n vetDomainsReverseRegistrarAddress:\n '0x5c970901a587BA3932C835D4ae5FAE2BEa7e78Bc',\n vnsResolverAddress: '0x0000000000000000000000000000000000000000',\n sassContractAddress: '0x0000000000000000000000000000000000000000',\n vetDomainAvatarUrl: 'https://testnet.vet.domains/api/avatar',\n indexerUrl: 'https://b3tr.testnet.vechain.org/api/v1',\n b3trIndexerUrl: 'https://b3tr.testnet.vechain.org/api/v1',\n graphQlIndexerUrl: 'https://graph.vet/subgraphs/name/vns',\n nodeUrl: 'http://localhost:8669',\n network: {\n id: 'solo',\n name: 'solo',\n type: 'solo',\n defaultNet: true,\n urls: ['http://localhost:8669'],\n explorerUrl: 'https://explore-testnet.vechain.org',\n blockTime: 10000,\n genesis: {\n number: 0,\n id: '0x00000000c05a20fbca2bf6ae3affba6af4a74b800b585bf7a4988aba7aea69f6',\n size: 170,\n parentID:\n '0xffffffff53616c757465202620526573706563742c20457468657265756d2100',\n timestamp: 1530316800,\n gasLimit: 10000000,\n beneficiary: '0x0000000000000000000000000000000000000000',\n gasUsed: 0,\n totalScore: 0,\n txsRoot:\n '0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0',\n txsFeatures: 0,\n stateRoot:\n '0x93de0ffb1f33bc0af053abc2a87c4af44594f5dcb1cb879dd823686a15d68550',\n receiptsRoot:\n '0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0',\n signer: '0x0000000000000000000000000000000000000000',\n isTrunk: true,\n transactions: [],\n },\n },\n explorerUrl: 'https://explore-testnet.vechain.org',\n};\nexport default config;\n","import { AppConfig } from '.';\n\nconst config: AppConfig = {\n ipfsFetchingService: 'https://api.dev.gateway-proxy.vechain.org/ipfs',\n ipfsPinningService:\n 'https://api.dev.gateway-proxy.vechain.org/api/v1/pinning/pinFileToIPFS',\n vthoContractAddress: '0x0000000000000000000000000000456E65726779',\n b3trContractAddress: '0x95761346d18244bb91664181bf91193376197088',\n vot3ContractAddress: '0x6e8b4a88d37897fc11f6ba12c805695f1c41f40e',\n b3trGovernorAddress: '0xc30b4d0837f7e3706749655d8bde0c0f265dd81b',\n timelockContractAddress: '0x835509222aa67c333a1cbf29bd341e014aba86c9',\n xAllocationPoolContractAddress:\n '0x6f7b4bc19b4dc99005b473b9c45ce2815bbe7533',\n xAllocationVotingContractAddress:\n '0x8800592c463f0b21ae08732559ee8e146db1d7b2',\n emissionsContractAddress: '0x66898f98409db20ed6a1bf0021334b7897eb0688',\n voterRewardsContractAddress: '0x851ef91801899a4e7e4a3174a9300b3e20c957e8',\n galaxyMemberContractAddress: '0x38a59fa7fd7039884465a0ff285b8c4b6fe394ca',\n x2EarnCreatorContractAddress: '0xb89f0ecdaf9987f87912d6c77756435fe4085b05',\n nodeManagementContractAddress: '0xde17d0a516c38c168d37685bb71465f656aa256e',\n x2EarnAppsContractAddress: '0x0b54a094b877a25bdc95b4431eaa1e2206b1ddfe',\n treasuryContractAddress: '0x3d531a80c05099c71b02585031f86a2988e0caca',\n x2EarnRewardsPoolContractAddress:\n '0x2d2a2207c68a46fc79325d7718e639d1047b0d8b',\n veBetterPassportContractAddress:\n '0x592c756df7a5d39de1735030e8b9c18b7417e6c4',\n veDelegate: '0xfc32a9895C78CE00A1047d602Bd81Ea8134CC32b',\n veDelegateVotes: '0xeb71148c9B3cd57e228c2152d79f6e78F5F1ef9a',\n veDelegateTokenContractAddress:\n '0xD3f7b82Df5705D34f64C634d2dEf6B1cB3116950',\n oracleContractAddress: '0xdcCAaBd81B38e0dEEf4c202bC7F1261A4D9192C6',\n accountFactoryAddress: '0x713b908Bcf77f3E00EFEf328E50b657a1A23AeaF',\n cleanifyCampaignsContractAddress:\n '0x22d19ACBD2cBf6b2B6C546395c26B9Cb448248BF',\n cleanifyChallengesContractAddress:\n '0x8Cc885DC3e5c376632CCEA0e8e1a51F1B3572442',\n veWorldSubdomainClaimerContractAddress:\n '0xe5af50e7ad1aaab4fbe4efbb2b30f764013918b3',\n vetDomainsContractAddress: '0xcBFB30c1F267914816668d53AcBA7bA7c9806D13',\n vetDomainsPublicResolverAddress:\n '0xA6eFd130085a127D090ACb0b100294aD1079EA6f',\n vetDomainsReverseRegistrarAddress:\n '0x6878f1aD5e3015310CfE5B38d7B7071C5D8818Ca',\n vnsResolverAddress: '0xc403b8EA53F707d7d4de095f0A20bC491Cf2bc94',\n sassContractAddress: '0x1b299f501bce347893f5a3a10e625c9a3345365e',\n vetDomainAvatarUrl: 'https://testnet.vet.domains/api/avatar',\n indexerUrl: 'https://indexer.testnet.vechain.org/api/v1',\n b3trIndexerUrl: 'https://indexer.testnet.vechain.org/api/v1',\n graphQlIndexerUrl: 'https://graph.vet/subgraphs/name/vns',\n nodeUrl: 'https://testnet.vechain.org',\n network: {\n id: 'testnet',\n name: 'testnet',\n type: 'test',\n defaultNet: true,\n urls: [\n 'https://testnet.vechain.org',\n 'https://vethor-node-test.vechaindev.com',\n 'https://sync-testnet.veblocks.net',\n 'https://testnet.vecha.in',\n ],\n explorerUrl: 'https://insight.vecha.in/#/test',\n blockTime: 10000,\n genesis: {\n number: 0,\n id: '0x000000000b2bce3c70bc649a02749e8687721b09ed2e15997f466536b20bb127',\n size: 170,\n parentID:\n '0xffffffff00000000000000000000000000000000000000000000000000000000',\n timestamp: 1530014400,\n gasLimit: 10000000,\n beneficiary: '0x0000000000000000000000000000000000000000',\n gasUsed: 0,\n totalScore: 0,\n txsRoot:\n '0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0',\n txsFeatures: 0,\n stateRoot:\n '0x4ec3af0acbad1ae467ad569337d2fe8576fe303928d35b8cdd91de47e9ac84bb',\n receiptsRoot:\n '0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0',\n signer: '0x0000000000000000000000000000000000000000',\n isTrunk: true,\n transactions: [],\n },\n },\n explorerUrl: 'https://explore-testnet.vechain.org/transactions',\n};\nexport default config;\n","import { AppConfig } from '.';\nconst config: AppConfig = {\n ipfsFetchingService: 'https://api.gateway-proxy.vechain.org/ipfs',\n indexerUrl: 'https://indexer.mainnet.vechain.org/api/v1',\n ipfsPinningService:\n 'https://api.gateway-proxy.vechain.org/api/v1/pinning/pinFileToIPFS',\n b3trIndexerUrl: 'https://indexer.mainnet.vechain.org/api/v1',\n graphQlIndexerUrl: 'https://graph.vet/subgraphs/name/vns',\n nodeUrl: 'https://mainnet.vechain.org',\n network: {\n id: 'main',\n name: 'main',\n type: 'main',\n defaultNet: true,\n urls: [\n 'https://mainnet.vechain.org',\n 'https://vethor-node.vechain.com',\n 'https://mainnet.veblocks.net',\n 'https://mainnet.vecha.in',\n ],\n explorerUrl: 'https://vechainstats.com',\n blockTime: 10000,\n genesis: {\n number: 0,\n id: '0x00000000851caf3cfdb6e899cf5958bfb1ac3413d346d43539627e6be7ec1b4a',\n size: 170,\n parentID:\n '0xffffffff53616c757465202620526573706563742c20457468657265756d2100',\n timestamp: 1530316800,\n gasLimit: 10000000,\n beneficiary: '0x0000000000000000000000000000000000000000',\n gasUsed: 0,\n totalScore: 0,\n txsRoot:\n '0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0',\n txsFeatures: 0,\n stateRoot:\n '0x09bfdf9e24dd5cd5b63f3c1b5d58b97ff02ca0490214a021ed7d99b93867839c',\n receiptsRoot:\n '0x45b0cfc220ceec5b7c1c62c4d4193d38e4eba48e8815729ce75f9c0ab0e4c1c0',\n signer: '0x0000000000000000000000000000000000000000',\n isTrunk: true,\n transactions: [],\n },\n },\n explorerUrl: 'https://vechainstats.com/transaction',\n // general\n vthoContractAddress: '0x0000000000000000000000000000456E65726779',\n //VeBetterDAO\n b3trContractAddress: '0x5ef79995FE8a89e0812330E4378eB2660ceDe699',\n vot3ContractAddress: '0x76Ca782B59C74d088C7D2Cce2f211BC00836c602',\n b3trGovernorAddress: '0x1c65C25fABe2fc1bCb82f253fA0C916a322f777C',\n timelockContractAddress: '0x7B7EaF620d88E38782c6491D7Ce0B8D8cF3227e4',\n xAllocationPoolContractAddress:\n '0x4191776F05f4bE4848d3f4d587345078B439C7d3',\n xAllocationVotingContractAddress:\n '0x89A00Bb0947a30FF95BEeF77a66AEdE3842Fe5B7',\n emissionsContractAddress: '0xDf94739bd169C84fe6478D8420Bb807F1f47b135',\n voterRewardsContractAddress: '0x838A33AF756a6366f93e201423E1425f67eC0Fa7',\n galaxyMemberContractAddress: '0x93B8cD34A7Fc4f53271b9011161F7A2B5fEA9D1F',\n treasuryContractAddress: '0xD5903BCc66e439c753e525F8AF2FeC7be2429593',\n x2EarnAppsContractAddress: '0x8392B7CCc763dB03b47afcD8E8f5e24F9cf0554D',\n x2EarnRewardsPoolContractAddress:\n '0x6Bee7DDab6c99d5B2Af0554EaEA484CE18F52631',\n x2EarnCreatorContractAddress: '0xe8e96a768ffd00417d4bd985bec9EcfC6F732a7f',\n nodeManagementContractAddress: '0xB0EF9D89C6b49CbA6BBF86Bf2FDf0Eee4968c6AB',\n veBetterPassportContractAddress:\n '0x35a267671d8EDD607B2056A9a13E7ba7CF53c8b3',\n //veDelegate\n veDelegate: '0xfc32a9895C78CE00A1047d602Bd81Ea8134CC32b',\n veDelegateVotes: '0xeb71148c9B3cd57e228c2152d79f6e78F5F1ef9a',\n veDelegateTokenContractAddress:\n '0xD3f7b82Df5705D34f64C634d2dEf6B1cB3116950',\n //utility\n oracleContractAddress: '0x49eC7192BF804Abc289645ca86F1eD01a6C17713',\n accountFactoryAddress: '0xC06Ad8573022e2BE416CA89DA47E8c592971679A',\n //cleanify\n cleanifyCampaignsContractAddress:\n '0x7a11D63338576aE8c038868433ea199d7E5319A6',\n cleanifyChallengesContractAddress:\n '0xa58681692AdDD2e8E37f9113D40Bb9253C03F65e',\n veWorldSubdomainClaimerContractAddress:\n '0xa4173c32fe8a61a8fd0d0234675b559fc360446a',\n vetDomainsContractAddress: '0xa9231da8BF8D10e2df3f6E03Dd5449caD600129b',\n vetDomainsPublicResolverAddress:\n '0xabac49445584C8b6c1472b030B1076Ac3901D7cf',\n vetDomainsReverseRegistrarAddress:\n '0x5c970901a587BA3932C835D4ae5FAE2BEa7e78Bc',\n vnsResolverAddress: '0xA11413086e163e41901bb81fdc5617c975Fa5a1A',\n vetDomainAvatarUrl: 'https://vet.domains/api/avatar',\n sassContractAddress: '0x84b0caf6436aace4e21d10f126963fdd53ac31ea',\n};\nexport default config;\n","import localConfig from './solo';\nimport testnetConfig from './testnet';\nimport mainnetConfig from './mainnet';\nimport { Network, NETWORK_TYPE } from './network';\n\nexport type AppConfig = {\n ipfsFetchingService: string;\n ipfsPinningService: string;\n vthoContractAddress: string;\n b3trContractAddress: string;\n vot3ContractAddress: string;\n b3trGovernorAddress: string;\n timelockContractAddress: string;\n xAllocationPoolContractAddress: string;\n xAllocationVotingContractAddress: string;\n emissionsContractAddress: string;\n voterRewardsContractAddress: string;\n galaxyMemberContractAddress: string;\n treasuryContractAddress: string;\n x2EarnAppsContractAddress: string;\n x2EarnCreatorContractAddress: string;\n x2EarnRewardsPoolContractAddress: string;\n nodeManagementContractAddress: string;\n veBetterPassportContractAddress: string;\n veDelegate: string;\n veDelegateVotes: string;\n veDelegateTokenContractAddress: string;\n oracleContractAddress: string;\n accountFactoryAddress: string;\n cleanifyCampaignsContractAddress: string;\n cleanifyChallengesContractAddress: string;\n veWorldSubdomainClaimerContractAddress: string;\n vetDomainsContractAddress: string;\n vetDomainsPublicResolverAddress: string;\n vetDomainsReverseRegistrarAddress: string;\n vnsResolverAddress: string;\n sassContractAddress: string;\n vetDomainAvatarUrl: string;\n nodeUrl: string;\n indexerUrl: string;\n b3trIndexerUrl: string;\n graphQlIndexerUrl: string;\n network: Network;\n explorerUrl: string;\n};\n\nexport const getConfig = (env: NETWORK_TYPE): AppConfig => {\n if (env === 'solo') return localConfig;\n if (env === 'test') return testnetConfig;\n if (env === 'main') return mainnetConfig;\n throw new Error(`Unsupported NETWORK_TYPE ${env}`);\n};\n","import { Icon, IconProps } from '@chakra-ui/react';\nimport React from 'react';\n\ntype Props = Omit<IconProps, 'dangerouslySetInnerHTML'>;\n\nexport const VOT3Logo: React.FC<Props> = ({ ...props }) => {\n return (\n <Icon viewBox=\"0 0 1684.56 1684.56\" {...props}>\n <rect\n fill=\"#b1f16c\"\n width=\"1684.56\"\n height=\"1684.56\"\n rx=\"157.74\"\n ry=\"157.74\"\n />\n <path\n fill=\"#1d1d1d\"\n d=\"M844.98,1386.28c-41.46,0-75.1-33.9-75.1-75.67,0-142.78-86.35-274.05-158.8-359.01-89.72-105.25-197.89-186.19-265.28-219.75-37.18-18.54-52.43-63.88-34.09-101.35,18.39-37.47,63.39-52.83,100.58-34.35,75.09,37.41,202.11,127.08,312.7,256.82,32.24,37.81,66.77,83.5,97.66,135.35,34.2-108.83,79.98-205.07,121.61-280.12,91.8-165.56,214.37-317.13,319.84-395.63,33.36-24.83,80.39-17.68,105.02,15.93,24.64,33.61,17.55,81-15.81,105.82-88.03,65.47-197.1,201.95-277.93,347.68-70.82,127.7-155.25,323.08-155.25,528.6,0,41.78-33.64,75.67-75.1,75.67h-.06Z\"\n />\n </Icon>\n );\n};\n","/**\n * SSR-safe utilities for browser API access\n */\n\n/**\n * SSR-safe localStorage getter\n */\nexport const getLocalStorageItem = (key: string): string | null => {\n try {\n if (typeof window === 'undefined') {\n return null;\n }\n return localStorage.getItem(key);\n } catch (error) {\n console.warn(`Error accessing localStorage for key \"${key}\":`, error);\n return null;\n }\n};\n\n/**\n * SSR-safe localStorage setter\n */\nexport const setLocalStorageItem = (key: string, value: string): void => {\n try {\n if (typeof window === 'undefined') {\n return;\n }\n localStorage.setItem(key, value);\n } catch (error) {\n console.warn(`Error setting localStorage for key \"${key}\":`, error);\n }\n};\n\n/**\n * SSR-safe localStorage remover\n */\nexport const removeLocalStorageItem = (key: string): void => {\n try {\n if (typeof window === 'undefined') {\n return;\n }\n localStorage.removeItem(key);\n } catch (error) {\n console.warn(`Error removing localStorage for key \"${key}\":`, error);\n }\n};\n\n/**\n * SSR-safe document.title getter\n */\nexport const getDocumentTitle = (): string => {\n try {\n return typeof document !== 'undefined' ? document.title : '';\n } catch {\n return '';\n }\n};\n\n/**\n * SSR-safe window.location.origin getter\n */\nexport const getWindowOrigin = (): string => {\n try {\n return typeof window !== 'undefined' && window.location\n ? window.location.origin\n : '';\n } catch {\n return '';\n }\n};\n\n/**\n * Check if we're in a browser environment\n */\nexport const isBrowser = (): boolean => {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n};\n\n/**\n * SSR-safe window.open\n */\nexport const safeWindowOpen = (url?: string, target?: string, features?: string): void => {\n if (isBrowser()) {\n window.open(url, target, features);\n }\n};\n\n/**\n * SSR-safe document.querySelector\n */\nexport const safeQuerySelector = <T extends Element>(selector: string): T | null => {\n if (typeof document !== 'undefined') {\n return document.querySelector<T>(selector);\n }\n return null;\n};\n\n/**\n * SSR-safe navigator check\n */\nexport const hasNavigator = (): boolean => {\n return typeof navigator !== 'undefined';\n};\n\n/**\n * SSR-safe navigator.onLine check\n */\nexport const isOnline = (): boolean => {\n return hasNavigator() && navigator.onLine;\n};\n\n/**\n * SSR-safe clipboard write\n */\nexport const copyToClipboard = async (text: string): Promise<boolean> => {\n try {\n if (hasNavigator() && navigator.clipboard) {\n await navigator.clipboard.writeText(text);\n return true;\n }\n return false;\n } catch (error) {\n console.warn('Error copying to clipboard:', error);\n return false;\n }\n};\n","import { VeBetterIcon, VTHOLogo } from '@/assets';\nimport { VETLogo } from '@/assets/icons/VechainLogo/VETLogo';\nimport { VOT3Logo } from '@/assets/icons/VechainLogo/VOT3Logo';\nimport { getLocalStorageItem } from './ssrUtils';\nimport {\n GasTokenPreferences,\n GasTokenType,\n GasTokenInfo,\n} from '@/types/gasToken';\nimport { getConfig } from '@/config';\nimport {\n GENERIC_DELEGATOR_MAINNET_URL,\n GENERIC_DELEGATOR_TESTNET_URL,\n VECHAIN_KIT_WEBSITE_BASE_URL,\n COINMARKETCAP_STATIC_BASE_URL,\n VECHAIN_TOKEN_REGISTRY_ASSETS_BASE_URL,\n IMAGE_NOT_FOUND_URL,\n CLEANIFY_APP_BASE_URL,\n EVEARN_BASE_URL,\n GREENCART_BASE_URL,\n MUGSHOT_BASE_URL,\n} from '@/constants';\n\n/** Tokens that cannot be swapped or transferred (e.g. governance voting tokens) */\nexport const NON_TRANSFERABLE_TOKEN_SYMBOLS: readonly string[] = ['VOT3'];\n\nexport const TOKEN_LOGOS: Record<string, string> = {\n VET: new URL(\n '/static/img/coins/64x64/3077.png',\n COINMARKETCAP_STATIC_BASE_URL,\n ).toString(),\n VTHO: new URL(\n '/static/img/coins/64x64/3012.png',\n COINMARKETCAP_STATIC_BASE_URL,\n ).toString(),\n B3TR: new URL(\n '/static/img/coins/64x64/33509.png',\n COINMARKETCAP_STATIC_BASE_URL,\n ).toString(),\n VOT3: new URL(\n '/17ff70aa1d898bc97ad690dbfad1a3b5643f7e0b.png',\n COINMARKETCAP_STATIC_BASE_URL,\n ).toString(),\n veDelegate: new URL(\n '1c641b86096d56bf13d49f38388accd6db8b8b2e.png',\n VECHAIN_TOKEN_REGISTRY_ASSETS_BASE_URL,\n ).toString(),\n SASS: new URL(\n 'https://prod-vechainkit-docs-images-bucket.s3.eu-west-1.amazonaws.com/sass-token-image.png',\n ).toString(),\n};\n\nexport const TOKEN_LOGO_COMPONENTS: Record<string, JSX.Element> = {\n VET: <VETLogo />,\n VTHO: <VTHOLogo />,\n B3TR: <VeBetterIcon />,\n VOT3: <VOT3Logo />,\n};\n\nexport const VECHAIN_PRIVY_APP_ID = 'cm4wxxujb022fyujl7g0thb21';\n\nexport const notFoundImage = IMAGE_NOT_FOUND_URL;\n\nexport enum TogglePassportCheck {\n WhitelistCheck = 1,\n BlacklistCheck = 2,\n SignalingCheck = 3,\n ParticipationScoreCheck = 4,\n GmOwnershipCheck = 5,\n}\n\nexport const VECHAIN_KIT_STORAGE_KEYS = {\n NETWORK: 'vechain-kit:network',\n};\n\n// SSR-safe ENV getter function\nexport const getENV = () => {\n // During SSR, always return safe defaults\n if (typeof window === 'undefined') {\n return {\n isDevelopment: false,\n isProduction: true,\n };\n }\n\n // In browser, check localStorage using SSR-safe utility\n const network = getLocalStorageItem(VECHAIN_KIT_STORAGE_KEYS.NETWORK);\n return {\n isDevelopment: network === 'test',\n isProduction: network === 'main',\n };\n};\n\n// For backward compatibility, create a getter-based ENV object\n// This ensures ENV properties are evaluated lazily and won't crash during SSR\nexport const ENV = {\n get isDevelopment() {\n return getENV().isDevelopment;\n },\n get isProduction() {\n return getENV().isProduction;\n },\n};\n\nexport const getGenericDelegatorUrl = () => {\n const env = getENV();\n return env.isProduction\n ? `${GENERIC_DELEGATOR_MAINNET_URL}/api/v1/`\n : `${GENERIC_DELEGATOR_TESTNET_URL}/api/v1/`; // or url to your delegator\n};\n\nexport type PrivyEcosystemApp = {\n id: string;\n name: string;\n website: string;\n};\n\nexport const DEFAULT_PRIVY_ECOSYSTEM_APPS: PrivyEcosystemApp[] = [\n {\n id: 'clz41gcg00e4ay75dmq3uzzgr',\n name: 'Cleanify',\n website: CLEANIFY_APP_BASE_URL,\n },\n {\n id: 'cm153hrup0817axti38avlfyg',\n name: 'GreenCart',\n website: GREENCART_BASE_URL,\n },\n {\n id: 'clv9sfos20j6x1431ga80d95f',\n name: 'Mughsot',\n website: MUGSHOT_BASE_URL,\n },\n {\n id: 'cm4l8tiai070i108zo17oieyc',\n name: 'EVearn',\n website: EVEARN_BASE_URL,\n },\n];\n\n//Hardcoded for displaying in the \"Terms and Privacy\" agreements modal\nexport const VECHAIN_KIT_TERMS_CONFIG = {\n url: new URL('terms', VECHAIN_KIT_WEBSITE_BASE_URL).toString(),\n version: 1,\n required: true,\n displayName: 'Vechain Kit Terms',\n};\n\n//Hardcoded for showing up if allowAnalytics is true\n//So we ask users if they agree with data tracking\nexport const VECHAIN_KIT_COOKIES_CONFIG = {\n url: new URL('cookies', VECHAIN_KIT_WEBSITE_BASE_URL).toString(),\n version: 1,\n required: false,\n displayName: 'Vechain Kit Cookies',\n};\n\nexport const DEFAULT_GAS_TOKEN_PREFERENCES: GasTokenPreferences = {\n tokenPriority: ['VET', 'B3TR', 'VTHO'],\n availableGasTokens: ['VET', 'B3TR', 'VTHO'],\n excludedTokens: [],\n alwaysConfirm: false,\n gasTokenToUse: 'VET',\n};\n\nexport const SUPPORTED_GAS_TOKENS: Record<GasTokenType, GasTokenInfo> = {\n B3TR: {\n type: 'B3TR',\n name: 'B3TR Token',\n symbol: 'B3TR',\n address: getConfig(\n (process.env.NEXT_PUBLIC_NETWORK_TYPE as any) || 'test',\n ).b3trContractAddress,\n description: 'Pay gas with B3TR',\n },\n VET: {\n type: 'VET',\n name: 'VET Token',\n symbol: 'VET',\n description: 'Pay gas with VET',\n },\n VTHO: {\n type: 'VTHO',\n name: 'VTHO Token',\n symbol: 'VTHO',\n address: getConfig(\n (process.env.NEXT_PUBLIC_NETWORK_TYPE as any) || 'test',\n ).vthoContractAddress,\n description: 'Pay gas with VTHO',\n },\n};\n","import { picasso } from '@vechain/picasso';\nimport { BigNumber } from 'bignumber.js';\nimport { formatEther } from 'ethers';\n\nexport const humanAddress = (\n address: string,\n charAtStart = 6,\n charAtEnd = 4,\n): string => `${address.slice(0, charAtStart)}•••${address.slice(-charAtEnd)}`;\n\nexport const humanDomain = (\n domain: string,\n lengthBefore = 8,\n lengthAfter = 6,\n) => {\n // if domain is smaller than lengthBefore + lengthAfter, return the domain\n if (domain.length <= lengthBefore + lengthAfter) return domain;\n\n const before = domain.substring(0, lengthBefore);\n const after = domain.substring(domain.length - lengthAfter);\n return `${before}•••${after}`;\n};\n\nexport const humanNumber = (\n formattedValue: BigNumber.Value,\n originalValue?: BigNumber.Value,\n symbol: string | null = null,\n) => {\n const suffix = symbol ? ' ' + symbol : '';\n\n originalValue = originalValue || formattedValue;\n const formatter = new Intl.NumberFormat('en-US', {\n style: 'decimal',\n minimumFractionDigits:\n Number.parseFloat(formattedValue.toString()) % 1 === 0 ? 0 : 2,\n });\n\n let value = formatter.format(\n roundDownSignificantDigits(Number(formattedValue), 2),\n );\n\n //If the original number got scaled down to 0\n if (!isZero(originalValue) && isZero(value)) {\n value = '< 0.01';\n }\n\n return value + suffix;\n};\n\nexport const isZero = (value?: BigNumber.Value) => {\n if (!value && value !== 0) return false;\n return new BigNumber(value).isZero();\n};\n\nexport const getPicassoImage = (address: string, base64 = false): string => {\n const image = picasso(address.toLowerCase());\n if (base64) {\n const base64data = Buffer.from(image, 'utf8').toString('base64');\n return `data:image/svg+xml;base64,${base64data}`;\n }\n return `data:image/svg+xml;utf8,${image}`;\n};\n\n/**\n * Format the number human friendly\n * @param formattedValue - value in string or number\n * @param originalValue - value in string or number to determine if the original value is 0\n * @param symbol - (optional) symbol to append at end of number (with a space)\n * @returns the formatted number\n */\n\nfunction roundDownSignificantDigits(numbers: number, decimals: number = 0) {\n if (typeof numbers !== 'number' || typeof decimals !== 'number') {\n throw new Error(\n 'Invalid input: number and decimals must be of type number',\n );\n }\n\n const significantDigits = parseInt(\n numbers.toExponential().split('e-')[1] || '0',\n 10,\n );\n\n const effectiveDecimals = Math.max(0, decimals + significantDigits);\n const scaleFactor = Math.pow(10, effectiveDecimals);\n\n return Math.floor(numbers * scaleFactor) / scaleFactor;\n}\n\n/**\n * Format the token balance human friendly\n * @param balance - balance in bigint\n * @returns the formatted balance in the form of {@link TokenBalance} (original, scaled down and formatted)\n */\nexport const formatTokenBalance = (balance: bigint) => {\n const scaled = formatEther(balance);\n const formatted = scaled === '0' ? '0' : humanNumber(scaled);\n return {\n original: balance.toString(),\n scaled,\n formatted,\n };\n};\n","import {\n generatePrivateKey,\n privateKeyToAccount,\n Account,\n} from 'viem/accounts';\n\nexport const randomTransactionUser: {\n privateKey: string;\n account: Account;\n address: string;\n} = (() => {\n const privateKey = generatePrivateKey();\n const account = privateKeyToAccount(privateKey);\n return {\n privateKey,\n account,\n address: account.address,\n };\n})();\n","const PREFIX = '0x';\nconst PREFIX_REGEX = /^0[xX]/;\nconst HEX_REGEX = /^(0[xX])?[a-fA-F0-9]+$/;\n\n/**\n * Returns the provied hex string with the hex prefix removed.\n * If the prefix doesn't exist the hex is returned unmodified\n * @param hex - the input hex string\n * @returns the input hex string with the hex prefix removed\n * @throws an error if the input is not a valid hex string\n */\nexport const removePrefix = (hex: string): string => {\n validate(hex);\n return hex.replace(PREFIX_REGEX, '');\n};\n\n/**\n * Returns the provided hex string with the hex prefix added.\n * If the prefix already exists the string is returned unmodified.\n * If the string contains an UPPER case `X` in the prefix it will be replaced with a lower case `x`\n * @param hex - the input hex string\n * @returns the input hex string with the hex prefix added\n * @throws an error if the input is not a valid hex string\n */\nexport const addPrefix = (hex: string): string => {\n validate(hex);\n return PREFIX_REGEX.test(hex)\n ? hex.replace(PREFIX_REGEX, PREFIX)\n : `${PREFIX}${hex}`;\n};\n\n/**\n * Validate the hex string. Throws an Error if not valid\n * @param hex - the input hex string\n * @throws an error if the input is not a valid hex string\n */\nexport const validate = (hex: string) => {\n if (!isValid(hex)) throw Error('Provided hex value is not valid');\n};\n\n/**\n * Check if input string is valid\n * @param hex - the input hex string\n * @returns boolean representing whether the input hex is valid\n */\nexport const isValid = (hex?: string | null): boolean => {\n return !!hex && HEX_REGEX.test(hex);\n};\n\nexport const isInvalid = (hex?: string | null): boolean => {\n return !isValid(hex);\n};\n\nexport const normalize = (hex: string): string => {\n return addPrefix(hex.toLowerCase().trim());\n};\n\nexport const compare = (hex1: string, hex2: string): boolean => {\n try {\n return (\n removePrefix(hex1).toLowerCase() ===\n removePrefix(hex2).toLowerCase()\n );\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (e) {\n return false;\n }\n};\n","import * as HexUtils from './hexUtils';\nimport { Address } from '@vechain/sdk-core';\n\n/**\n * Checks if two addresses are equal. Returns true if both values are strings AND:\n * - The two values are equal OR\n * - The checksumed addresses are equal\n *\n * @param address1\n * @param address2\n */\nexport const compareAddresses = (\n address1?: string,\n address2?: string,\n): boolean => {\n if (!address1 || !address2) return false;\n\n if (address2 === address1) {\n return true;\n }\n\n try {\n return HexUtils.normalize(address1) === HexUtils.normalize(address2);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (e) {\n return false;\n }\n};\n\nexport const compareListOfAddresses = (add1: string[], add2: string[]) => {\n if (add1.length !== add2.length) return false;\n const sortedAdd1 = [...add1]\n .map((e) => e.toLowerCase())\n .sort((a, b) => a.localeCompare(b));\n const sortedAdd2 = [...add2]\n .map((e) => e.toLowerCase())\n .sort((a, b) => a.localeCompare(b));\n\n for (let i = 0; i < sortedAdd1.length; i++) {\n if (!compareAddresses(sortedAdd1[i], sortedAdd2[i])) return false;\n }\n\n return true;\n};\n\nexport const regexPattern = () => {\n return /^0x[a-fA-F0-9]{40}$/;\n};\n\nexport const isValidAddress = Address.isValid;\n\nexport const leftPadWithZeros = (str: string, length: number): string => {\n // Remove '0x' prefix if it exists\n const cleanStr = str.startsWith('0x') ? str.slice(2) : str;\n if (cleanStr.length > length) {\n throw new Error('Input string is longer than the specified length');\n }\n // Pad the string to the specified length\n const paddedStr = cleanStr.padStart(length, '0');\n return `0x${paddedStr}`;\n};\n","import { getConfig } from '@/config';\nimport { NETWORK_TYPE } from '@/config/network';\n\n/**\n * Validate IPFS URI strings. An example of a valid IPFS URI is:\n * - ipfs://QmfSTia1TJUiKQ2fyW9NTPzEKNdjMGzbUgrC3QPSTpkum6/406.json\n * - ipfs://QmVPqKfwRXjg5Fqwy6RNRbKR2ZP4pKKVLvmfjmhQfdM3MH/4\n * - ipfs://QmVPqKfwRXjg5Fqwy6RNRbKR2ZP4pKKVLvmfjmhQfdM3MH\n * @param uri\n * @returns\n */\nexport const validateIpfsUri = (uri: string): boolean => {\n const trimmedUri = uri.trim();\n return /^ipfs:\\/\\/[a-zA-Z0-9]+(\\/[^/]+)*\\/?$/.test(trimmedUri);\n};\n\n/**\n * Converts a CID to an IPFS native URL.\n *\n * @param cid - The CID to convert.\n * @param fileName - The name of the file to append to the URL.\n *\n * @returns The IPFS URL in the format `ipfs://${cid}/${fileName}`.\n */\nexport function toIPFSURL(cid: string, fileName?: string): string {\n return `ipfs://${cid}/${fileName ?? ''}`;\n}\n\n/**\n * Uploads a blob to IPFS.\n * @param blob The Blob object to upload.\n * @param filename A name for the file in the FormData payload.\n * @param networkType The network type to use for the IPFS pinning service.\n * @returns The IPFS hash of the uploaded blob.\n */\nexport async function uploadBlobToIPFS(\n blob: Blob,\n filename: string,\n networkType: NETWORK_TYPE,\n): Promise<string> {\n try {\n const form = new FormData();\n form.append('file', blob, filename);\n const response = await fetch(\n getConfig(networkType).ipfsPinningService,\n {\n method: 'POST',\n headers: {\n 'X-Project-Id': 'vechain-kit',\n },\n body: form,\n },\n );\n\n if (!response.ok) {\n throw new Error(`HTTP error! status: ${response.status}`);\n }\n\n const data = await response.json();\n return data.IpfsHash;\n } catch (error) {\n console.error('Error uploading blob:', error);\n throw new Error('Failed to upload blob to IPFS');\n }\n}\n","import { LoginMethodOrderOption } from '@privy-io/react-auth';\nimport { TransactionClause } from '@vechain/sdk-core';\n\nexport type TokenBalance = {\n original: string;\n scaled: string;\n formatted: string;\n};\n\nexport type ENSRecords = {\n display?: string;\n description?: string;\n email?: string;\n url?: string;\n header?: string;\n notice?: string;\n location?: string;\n phone?: string;\n [key: string]: string | undefined;\n};\n\nexport type Wallet = {\n address: string;\n domain?: string;\n image?: string;\n isLoadingMetadata?: boolean;\n metadata?: ENSRecords;\n} | null;\n\nexport type SmartAccount = Wallet & {\n isDeployed: boolean;\n isActive: boolean;\n version: number | null;\n};\n\nexport type ConnectionSource = {\n type: 'privy' | 'wallet' | 'privy-cross-app';\n displayName: string;\n};\n\n/**\n * Data that the Privy user must sign in order to execute a transaction\n * by authorizing the Smart Account contract\n */\nexport type ExecuteWithAuthorizationSignData = {\n domain: {\n name: string;\n version: string;\n chainId: number;\n verifyingContract: string;\n };\n types: {\n ExecuteWithAuthorization: {\n name: string;\n type: string;\n }[];\n EIP712Domain: {\n name: string;\n type: string;\n }[];\n };\n primaryType: string;\n message: {\n validAfter: number;\n validBefore: number;\n to: string | null | undefined;\n value: string;\n data: string;\n };\n};\n\nexport type ExecuteBatchWithAuthorizationSignData = {\n domain: {\n name: string;\n version: string;\n chainId: number;\n verifyingContract: string;\n };\n types: {\n ExecuteBatchWithAuthorization: {\n name: string;\n type: string;\n }[];\n EIP712Domain: {\n name: string;\n type: string;\n }[];\n };\n primaryType: string;\n message: {\n to: string[] | null | undefined;\n value: string[] | null | undefined;\n data: string[] | null | undefined;\n validAfter: number;\n validBefore: number;\n nonce: string;\n };\n};\n\n/**\n * ready: the user has not clicked on the button yet\n * pending: the user has clicked on the button and we're waiting for the transaction to be sent\n * waitingConfirmation: the transaction has been sent and we're waiting for the transaction to be confirmed by the chain\n * success: the transaction has been confirmed by the chain\n * error: the transaction has failed\n * unknown: the transaction receipt has failed to load\n */\nexport type TransactionStatus =\n | 'ready'\n | 'pending'\n | 'waitingConfirmation'\n | 'success'\n | 'error'\n | 'unknown';\n\nexport type TransactionStatusErrorType = {\n type:\n | 'SendTransactionError'\n | 'TxReceiptError'\n | 'RevertReasonError'\n | 'UserRejectedError';\n reason?: string;\n};\n\n/**\n * An enhanced clause with a comment and an abi\n * @param comment a comment to add to the clause\n * @param abi the abi of the contract to call\n */\nexport type EnhancedClause = TransactionClause;\n\nexport type PrivyAppInfo = {\n id: string;\n name: string;\n logo_url: string;\n icon_url: string | null;\n terms_and_conditions_url: string;\n privacy_policy_url: string;\n theme: string;\n accent_color: string;\n wallet_auth: boolean;\n email_auth: boolean;\n google_oauth: boolean;\n twitter_oauth: boolean;\n url: string;\n website?: string;\n};\n\nexport type PrivyLoginMethod = LoginMethodOrderOption;\n\nexport interface CrossAppConnectionCache {\n timestamp: number;\n ecosystemApp: {\n name: string;\n logoUrl?: string;\n appId: string;\n website?: string;\n };\n}\n\nexport enum NFTMediaType {\n IMAGE = 'image',\n VIDEO = 'video',\n UNKNOWN = 'unknown',\n TEXT = 'text', // mp4 appears as text sometimes\n}\n\nexport enum VePassportUserStatus {\n NONE = 'NONE',\n WHITELIST = 'WHITELIST',\n BLACKLIST = 'BLACKLIST',\n}\n\nexport type CURRENCY = 'usd' | 'gbp' | 'eur';\n\nexport const CURRENCY_SYMBOLS: Record<CURRENCY, string> = {\n usd: '$',\n gbp: '£',\n eur: '€',\n};\n","export const ENS_TEXT_RECORDS = [\n 'display',\n 'avatar',\n 'description',\n 'keywords',\n 'email',\n 'url',\n 'header',\n 'notice',\n 'location',\n 'phone',\n 'com.x',\n] as const;\n\nexport type TextRecords = {\n [K in (typeof ENS_TEXT_RECORDS)[number]]?: string;\n};\n","export interface VthoPerGasAtSpeed {\n regular: number;\n medium: number;\n high: number;\n legacy: number;\n}\n\nexport interface EstimatedGas {\n vtho: number;\n vet: number;\n b3tr: number;\n smartAccount: number;\n}\n\nexport interface Rate {\n vtho: number;\n vet: number;\n b3tr: number;\n}\n\nexport interface CostLevel {\n vtho: number;\n vet: number;\n b3tr: number;\n vetWithSmartAccount: number;\n b3trWithSmartAccount: number;\n}\n\nexport interface TransactionCost {\n regular: CostLevel;\n medium: CostLevel;\n high: CostLevel;\n legacy: CostLevel;\n}\n\nexport interface EstimationResponse {\n vthoPerGasAtSpeed?: number;\n estimatedGas?: number;\n rate?: number;\n transactionCost?: number;\n serviceFee?: number;\n totalGasUsed?: number;\n}\n\nexport interface DepositAccount {\n depositAccount: string;\n}\n\nexport function calculateTotalCost(\n baseCost: number,\n serviceFeeRate: number,\n): number {\n return baseCost * (1 + serviceFeeRate);\n}\n\nexport function formatGasCost(amount: number, decimals: number = 4): string {\n return Number(amount).toLocaleString(undefined, {\n minimumFractionDigits: decimals,\n maximumFractionDigits: decimals,\n });\n}\n","export * from './types';\nexport * from './ensTextRecords';\nexport * from './gasToken';\nexport * from './gasEstimation';\n\nimport { LegalDocument } from '@/providers';\n\nexport enum LegalDocumentType {\n TERMS = 'terms',\n PRIVACY = 'privacy',\n COOKIES = 'cookies',\n}\n\nexport enum LegalDocumentSource {\n VECHAIN_KIT = 'vechain-kit',\n APPLICATION = 'application',\n}\n\n// Base type for all legal documents (terms, privacy policy, cookies)\nexport type EnrichedLegalDocument = LegalDocument & {\n id: string;\n documentType: LegalDocumentType;\n documentSource: LegalDocumentSource;\n};\n\n// Agreement record stored in localStorage\nexport type LegalDocumentAgreement = EnrichedLegalDocument & {\n walletAddress: string;\n timestamp: number;\n};\n","import { NFTMediaType } from \"@/types\"\n\nconst isValidMimeType = (mime: string, type: NFTMediaType[]) => {\n const found = type.find(t => {\n if (mime?.split(\"/\")[0] === t) {\n return true\n }\n })\n\n return !!found\n}\n\nexport const resolveMediaTypeFromMimeType = (mimeType: string): NFTMediaType => {\n if (isValidMimeType(mimeType, [NFTMediaType.IMAGE])) return NFTMediaType.IMAGE\n else if (isValidMimeType(mimeType, [NFTMediaType.VIDEO])) return NFTMediaType.VIDEO\n\n return NFTMediaType.UNKNOWN\n}\n","import { NETWORK_TYPE } from '@/config/network';\nimport { validateIpfsUri } from './ipfs';\nimport { getConfig } from '@/config';\n\n/**\n * Convert a URI to a URL\n * We support both IPFS and Arweave URIs. Both should be converted to their https gateway URLs.\n * All other URIs should pass through unchanged.\n *\n * @param uri\n */\nexport const convertUriToUrl = (uri: string, networkType: NETWORK_TYPE) => {\n // if it is a data uri just return it\n if (uri.startsWith('data:')) return uri;\n\n const splitUri = uri?.split('://');\n if (splitUri.length !== 2) return null;\n // if (splitUri.length !== 2) throw new Error(`Invalid URI ${uri}`);\n\n const protocol = splitUri?.[0]?.trim();\n const uriWithoutProtocol = splitUri[1];\n\n switch (protocol) {\n case 'ipfs':\n if (!validateIpfsUri(uri))\n throw new Error(`Invalid IPFS URI ${uri}`);\n\n // Check cache for IPFS document\n return `${\n getConfig(networkType).ipfsFetchingService\n }/${uriWithoutProtocol}`;\n\n case 'ar':\n return `https://arweave.net/${uriWithoutProtocol}`;\n\n default:\n return uri;\n }\n};\n","export const gmNfts = [\n {\n level: '1',\n name: 'Earth',\n image: '/images/nft-levels/0.png',\n multiplier: 1,\n b3trToUpgrade: 0,\n },\n {\n level: '2',\n name: 'Moon',\n image: '/images/nft-levels/1.png',\n multiplier: 1.1,\n b3trToUpgrade: 10_000,\n },\n {\n level: '3',\n name: 'Mercury',\n image: '/images/nft-levels/2.png',\n multiplier: 1.2,\n b3trToUpgrade: 25_000,\n },\n {\n level: '4',\n name: 'Venus',\n image: '/images/nft-levels/3.png',\n multiplier: 1.5,\n b3trToUpgrade: 50_000,\n },\n {\n level: '5',\n name: 'Mars',\n image: '/images/nft-levels/4.png',\n multiplier: 2,\n b3trToUpgrade: 100_000,\n },\n {\n level: '6',\n name: 'Jupiter',\n image: '/images/nft-levels/5.png',\n multiplier: 2.5,\n b3trToUpgrade: 250_000,\n },\n {\n level: '7',\n name: 'Saturn',\n image: '/images/nft-levels/6.png',\n multiplier: 3,\n b3trToUpgrade: 500_000,\n },\n {\n level: '8',\n name: 'Uranus',\n image: '/images/nft-levels/7.png',\n multiplier: 5,\n b3trToUpgrade: 2_500_000,\n },\n {\n level: '9',\n name: 'Neptune',\n image: '/images/nft-levels/8.png',\n multiplier: 10,\n b3trToUpgrade: 5_000_000,\n },\n {\n level: '10',\n name: 'Galaxy',\n image: '/images/nft-levels/9.png',\n multiplier: 25,\n b3trToUpgrade: 25_000_000,\n },\n];\n\n/**\n * Maps the XNode level to the GM starting level.\n */\nexport const xNodeToGMstartingLevel: Record<number, number> = {\n 1: 2,\n 2: 4,\n 3: 6,\n 4: 2,\n 5: 4,\n 6: 6,\n 7: 7,\n};\n","// Function to build query string dynamically\nexport const buildQueryString = (params: { [key: string]: any }) => {\n const searchParams = new URLSearchParams()\n\n // Iterate over the parameters and append only the defined values\n Object.keys(params).forEach(key => {\n const value = params[key]\n if (value !== undefined && value !== null) {\n searchParams.append(key, String(value))\n }\n })\n\n return searchParams.toString()\n}\n","/**\n * Map strength level coming from contract to hq image\n */\nexport const NodeStrengthLevelToImage: { [key: string]: string } = {\n \"0\": \"/images/vnt/00-noNode.webp\",\n \"1\": \"/images/vnt/01-strength.webp\",\n \"2\": \"/images/vnt/02-thunder.webp\",\n \"3\": \"/images/vnt/03-mjolnir.webp\",\n \"4\": \"/images/vnt/04-vethorX.webp\",\n \"5\": \"/images/vnt/05-strengthX.webp\",\n \"6\": \"/images/vnt/06-thunderX.webp\",\n \"7\": \"/images/vnt/07-mjolnirX.webp\",\n}\n\n//after this level the nfts are considered xNode\nexport const MinXNodeLevel = 4\nexport const EconomicNodeStrengthLevelToName: { [key: string]: string } = {\n \"1\": \"Strength\",\n \"2\": \"Thunder\",\n \"3\": \"Mjolnir\",\n}\n\nexport const XNodeStrengthLevelToName: { [key: string]: string } = {\n \"4\": \"VeThorX\",\n \"5\": \"StrengthX\",\n \"6\": \"ThunderX\",\n \"7\": \"MjolnirX\",\n}\n\nexport const allNodeStrengthLevelToName: { [key: string]: string } = {\n ...EconomicNodeStrengthLevelToName,\n ...XNodeStrengthLevelToName,\n}\n","export const TIME = {\n SECOND: 1000,\n MINUTE: 1000 * 60,\n HOUR: 1000 * 60 * 60,\n DAY: 1000 * 60 * 60 * 24,\n WEEK: 1000 * 60 * 60 * 24 * 7,\n MONTH: 1000 * 60 * 60 * 24 * 30,\n YEAR: 1000 * 60 * 60 * 24 * 365,\n}\n","/**\n * Checks if a string contains common rejection-related terms\n * @param errorMessage The error message to check\n * @returns boolean indicating if the message contains rejection terms\n */\nexport const isRejectionError = (errorMessage: string): boolean => {\n if (!errorMessage) return false;\n const rejectionTerms = ['rejected', 'cancelled', 'user denied', 'closed'];\n return rejectionTerms.some((term) =>\n errorMessage.toLowerCase().includes(term.toLowerCase()),\n );\n};\n\n/**\n * Generates a simple hash from a string using a 32-bit hash algorithm\n * @param input The string to hash\n * @returns A base-36 string representation of the hash\n */\nexport const simpleHash = (input: string): string => {\n let hash = 0;\n for (let i = 0; i < input.length; i++) {\n const char = input.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash; // Convert to 32bit integer\n }\n return hash.toString(36);\n};\n","export const isValidUrl = (value: string) => {\n try {\n new URL(value);\n return true;\n } catch {\n return false;\n }\n};\n","import { ThorClient } from '@vechain/sdk-network';\nimport {\n ExtractAbiFunctionNames,\n AbiParametersToPrimitiveTypes,\n ExtractAbiFunction,\n} from 'abitype';\nimport { Abi, ContractFunctionParameters } from 'viem';\nimport type {\n MulticallParameters as viem_MulticallParameters,\n MulticallReturnType as viem_MulticallReturnType,\n} from 'viem';\n\ntype ExtractViewFunction<\n TAbi extends Abi,\n TMethod extends ExtractAbiFunctionNames<TAbi, 'pure' | 'view'>,\n> = Extract<\n TAbi[number],\n { type: 'function'; stateMutability: 'pure' | 'view'; name: TMethod }\n>;\n\nexport type ViewFunctionResult<\n TAbi extends Abi,\n TMethod extends ExtractAbiFunctionNames<TAbi, 'pure' | 'view'>,\n> = AbiParametersToPrimitiveTypes<\n ExtractViewFunction<TAbi, TMethod>['outputs'],\n 'outputs'\n>;\n\nexport type MultipleClausesCallParameters<\n contracts extends readonly unknown[] = readonly ContractFunctionParameters[],\n allowFailure extends boolean = true,\n> = viem_MulticallParameters<contracts, allowFailure>['contracts'];\n\nexport type MultipleClausesCallReturnType<\n contracts extends readonly unknown[] = readonly ContractFunctionParameters[],\n allowFailure extends boolean = true,\n> = viem_MulticallReturnType<contracts, allowFailure>;\n\nexport const executeCallClause = async <\n TAbi extends Abi,\n TMethod extends ExtractAbiFunctionNames<TAbi, 'pure' | 'view'>,\n>({\n thor,\n contractAddress,\n abi,\n method,\n args,\n}: {\n thor: ThorClient;\n contractAddress: string;\n abi: TAbi;\n method: TMethod;\n args: AbiParametersToPrimitiveTypes<\n ExtractAbiFunction<TAbi, TMethod>['inputs'],\n 'inputs'\n >;\n}) => {\n const contract = thor.contracts.load(contractAddress, abi);\n const res = await contract.read[method](...args);\n return res as ViewFunctionResult<TAbi, TMethod>;\n};\n\nexport const executeMultipleClausesCall = async <\n contracts extends readonly ContractFunctionParameters[],\n allowFailure extends boolean = false,\n>({\n thor,\n calls,\n}: {\n thor: ThorClient;\n calls: MultipleClausesCallParameters<contracts, allowFailure>;\n}) => {\n if (!Array.isArray(calls)) throw new Error('calls must be an array');\n\n const clauses = calls.map((call) =>\n thor.contracts\n .load(call.address, call.abi)\n .clause[call.functionName](...call.args),\n );\n const res = await thor.transactions.executeMultipleClausesCall(clauses);\n\n if (!res.every((r) => r.success))\n throw new Error('Failed to execute multiple clauses call');\n\n return res.map((r) => r.result.plain) as MultipleClausesCallReturnType<\n contracts,\n allowFailure\n >;\n};\n\nexport const buildCallClauses = <\n contracts extends readonly ContractFunctionParameters[],\n allowFailure extends boolean = false,\n>({\n thor,\n calls,\n}: {\n thor: ThorClient;\n calls: MultipleClausesCallParameters<contracts, allowFailure>;\n}) => {\n if (!Array.isArray(calls)) throw new Error('calls must be an array');\n\n return calls.map((call) =>\n thor.contracts\n .load(call.address, call.abi)\n .clause[call.functionName](...call.args),\n );\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vi-D6xwAgyf.cjs","names":[],"sources":["../src/languages/vi.json"],"sourcesContent":["{\n \" and \": \" và \",\n \"'{{policyName}}' on connect\": \"'{{policyName}}' khi kết nối\",\n \"'{{policyName}}' on {{date}}\": \"'{{policyName}}' vào {{date}}\",\n \"A .vet domain is required to customize your profile. Choose an account name to get started.\": \"Cần có tên miền .vet để tùy chỉnh hồ sơ. Chọn tên tài khoản để bắt đầu.\",\n \"A Smart Account is a smart contract wallet that provides enhanced security and functionality. It allows for features like social recovery, transaction batching, and more.\": \"Smart Account là ví hợp đồng thông minh cung cấp bảo mật và chức năng nâng cao. Nó hỗ trợ các tính năng như khôi phục xã hội, gộp giao dịch và nhiều hơn nữa.\",\n \"A domain name is a sort of nickname for your wallet address. It allows you to easily identify your wallet and interact with dApps using a human-readable name. For example, if your wallet address is 0x1234567890, your nickname could be \\\"alice.vechain\\\".\": \"Tên miền là một dạng biệt danh cho địa chỉ ví của bạn. Nó cho phép bạn dễ dàng nhận dạng ví và tương tác với dApps bằng tên dễ đọc. Ví dụ, nếu địa chỉ ví của bạn là 0x1234567890, biệt danh có thể là \\\"alice.vechain\\\".\",\n \"A network in blockchain refers to the environment where transactions take place. VeChain has two main networks: Mainnet (the live network where real transactions occur) and Testnet (a testing environment for developers). The network you're connected to is displayed at the top of this modal.\": \"Mạng trong blockchain là môi trường diễn ra các giao dịch. VeChain có hai mạng chính: Mainnet (mạng chính nơi diễn ra giao dịch thật) và Testnet (môi trường thử nghiệm cho nhà phát triển). Mạng bạn đang kết nối được hiển thị ở đầu hộp thoại này.\",\n \"A new upgrade is available for your smart account. Please head over to the 'Access and Security' section to upgrade it.\": \"Có bản nâng cấp mới cho Smart Account. Vui lòng đến phần 'Truy cập và Bảo mật' để nâng cấp.\",\n \"A new version is available for your account\": \"Có phiên bản mới cho tài khoản của bạn\",\n \"A wallet is your gateway to the VeChain blockchain. It stores your private keys and allows you to securely manage your digital assets, send and receive tokens, and interact with decentralized applications. Think of it as your digital bank account for blockchain transactions.\": \"Ví là cổng truy cập blockchain VeChain của bạn. Nó lưu trữ khóa riêng và cho phép bạn quản lý an toàn tài sản số, gửi và nhận token, tương tác với ứng dụng phi tập trung. Hãy coi nó như tài khoản ngân hàng số cho các giao dịch blockchain.\",\n \"AVAILABLE\": \"KHẢ DỤNG\",\n \"Accept\": \"Chấp nhận\",\n \"Accept all\": \"Chấp nhận tất cả\",\n \"Accept selected\": \"Chấp nhận đã chọn\",\n \"Access and security\": \"Truy cập và bảo mật\",\n \"Account Upgrade Required\": \"Yêu cầu nâng cấp tài khoản\",\n \"Account already upgraded\": \"Tài khoản đã được nâng cấp\",\n \"Account upgrade required\": \"Yêu cầu nâng cấp tài khoản\",\n \"Active\": \"Đang hoạt động\",\n \"Active Wallet\": \"Ví đang hoạt động\",\n \"Add Login Method\": \"Thêm phương thức đăng nhập\",\n \"Add New Wallet\": \"Thêm ví mới\",\n \"Add Token\": \"Thêm token\",\n \"Add to shortcuts\": \"Thêm vào lối tắt\",\n \"Adding more linked accounts increases security against loss of access, but also introduces additional potential attack vectors. For enhanced security, we recommend enabling MFA.\": \"Thêm nhiều tài khoản liên kết tăng bảo mật chống mất quyền truy cập, nhưng cũng tạo thêm các vector tấn công tiềm năng. Để tăng cường bảo mật, chúng tôi khuyến nghị bật MFA.\",\n \"Address is required\": \"Cần nhập địa chỉ\",\n \"All\": \"Tất cả\",\n \"All apps\": \"Tất cả ứng dụng\",\n \"All policies you have accepted\": \"Tất cả chính sách bạn đã chấp nhận\",\n \"All tokens\": \"Tất cả token\",\n \"Already have an x2earn app wallet?\": \"Đã có ví ứng dụng x2earn?\",\n \"Amount\": \"Số lượng\",\n \"Amount is required\": \"Cần nhập số lượng\",\n \"An X2Earn application in VeBetterDAO is a sustainable app that rewards users with B3TR tokens for eco-friendly actions. These apps must distribute B3TR, link user wallets, and provide proof of sustainable actions. They join VeBetterDAO through endorsement and participate in weekly token allocation rounds.\": \"Ứng dụng X2Earn trong VeBetterDAO là ứng dụng bền vững thưởng cho người dùng token B3TR cho các hành động thân thiện với môi trường. Các ứng dụng này phải phân phối B3TR, liên kết ví người dùng và cung cấp bằng chứng hành động bền vững. Chúng tham gia VeBetterDAO thông qua sự chứng thực và tham gia các vòng phân bổ token hàng tuần.\",\n \"An unexpected error occurred.\": \"Đã xảy ra lỗi không mong muốn.\",\n \"Apple\": \"Apple\",\n \"Apply\": \"Áp dụng\",\n \"Archived\": \"Đã lưu trữ\",\n \"Archived Notifications\": \"Thông báo đã lưu trữ\",\n \"Are you sure you want to disconnect your wallet?\": \"Bạn có chắc muốn ngắt kết nối ví?\",\n \"Are you sure you want to reject the policies and disconnect?\": \"Bạn có chắc muốn từ chối chính sách và ngắt kết nối?\",\n \"Are you sure you want to remove this wallet?\": \"Bạn có chắc muốn xóa ví này?\",\n \"Are you sure you want to set your domain name to\": \"Bạn có chắc muốn đặt tên miền thành\",\n \"Are you sure you want to unlink {{accountType}} as a login method linked to {{accountDescription}}?\": \"Bạn có chắc muốn hủy liên kết {{accountType}} là phương thức đăng nhập liên kết với {{accountDescription}}?\",\n \"Are you sure you want to unset your current domain?\": \"Bạn có chắc muốn hủy tên miền hiện tại?\",\n \"Assets\": \"Tài sản\",\n \"At\": \"Tại\",\n \"B3TR is the incentive token of VeBetterDAO, built on VechainThor blockchain. It has a capped supply of 1 billion tokens, emitted weekly over 12 years. B3TR is used for rewards, governance, and backing VOT3 tokens 1:1. It supports sustainability applications and DAO treasury management.\": \"B3TR là token khuyến khích của VeBetterDAO, được xây dựng trên blockchain VechainThor. Nó có tổng cung giới hạn 1 tỷ token, phát hành hàng tuần trong 12 năm. B3TR được sử dụng cho phần thưởng, quản trị và hỗ trợ token VOT3 theo tỷ lệ 1:1. Nó hỗ trợ các ứng dụng bền vững và quản lý kho bạc DAO.\",\n \"Backing up your wallet is crucial as you are the only one with access to your private keys. If something goes wrong, having your private key is the only way to recover your assets. How to backup depends on how you access your wallet: If using VeWorld, the backup option is available within the app. For social login users, you can find backup options in the Wallet section. If you're connected through VeChain or another ecosystem app, you'll need to visit the original website, log in, and access the Wallet section from there.\": \"Sao lưu ví rất quan trọng vì chỉ bạn mới có quyền truy cập khóa riêng. Nếu có sự cố, khóa riêng là cách duy nhất để khôi phục tài sản. Cách sao lưu phụ thuộc vào cách bạn truy cập ví: Nếu dùng VeWorld, tùy chọn sao lưu có trong ứng dụng. Người dùng đăng nhập xã hội có thể tìm tùy chọn sao lưu trong phần Ví. Nếu kết nối qua VeChain hoặc ứng dụng hệ sinh thái khác, bạn cần truy cập trang web gốc, đăng nhập và vào phần Ví từ đó.\",\n \"Backup\": \"Sao lưu\",\n \"Backup your wallet\": \"Sao lưu ví của bạn\",\n \"Backup your wallet, configure MFA and set recovery options\": \"Sao lưu ví, cấu hình MFA và thiết lập tùy chọn khôi phục\",\n \"Balance\": \"Số dư\",\n \"Benefits of this upgrade:\": \"Lợi ích của bản nâng cấp này:\",\n \"Best\": \"Tốt nhất\",\n \"Better transaction handling\": \"Xử lý giao dịch tốt hơn\",\n \"Bridge\": \"Cầu nối\",\n \"By confirming, the following details attached to your name ({{domain}}) will be updated\": \"Khi xác nhận, các chi tiết sau gắn với tên bạn ({{domain}}) sẽ được cập nhật\",\n \"By confirming, your address will be set to {{domain}}\": \"Khi xác nhận, địa chỉ của bạn sẽ được đặt thành {{domain}}\",\n \"By confirming, your current domain will be unset\": \"Khi xác nhận, tên miền hiện tại của bạn sẽ bị hủy\",\n \"By continuing, you agree to\": \"Khi tiếp tục, bạn đồng ý với\",\n \"Cancel\": \"Hủy\",\n \"Checking...\": \"Đang kiểm tra...\",\n \"Choose Name\": \"Chọn tên\",\n \"Choose a name for your account.\": \"Chọn tên cho tài khoản của bạn.\",\n \"Choose a unique .vet domain name for your account.\": \"Chọn tên miền .vet duy nhất cho tài khoản của bạn.\",\n \"Choose account name\": \"Chọn tên tài khoản\",\n \"Choose name\": \"Chọn tên\",\n \"Choose which tokens to use for transaction fees when the app is not covering them.\": \"Chọn token nào để trả phí giao dịch khi ứng dụng không chi trả.\",\n \"Choose your account name\": \"Chọn tên tài khoản của bạn\",\n \"Claim your vet domain!\": \"Nhận tên miền vet của bạn!\",\n \"Claiming name...\": \"Đang nhận tên...\",\n \"Clear all\": \"Xóa tất cả\",\n \"Cleared notifications will appear here\": \"Thông báo đã xóa sẽ xuất hiện ở đây\",\n \"Click\": \"Nhấp\",\n \"Click below to access {{ name }} and explore its features.\": \"Nhấp bên dưới để truy cập {{ name }} và khám phá các tính năng.\",\n \"Close\": \"Đóng\",\n \"Close and do this later\": \"Đóng và làm sau\",\n \"Close announcement\": \"Đóng thông báo\",\n \"Coming Soon!\": \"Sắp ra mắt!\",\n \"Coming soon\": \"Sắp ra mắt\",\n \"Confirm\": \"Xác nhận\",\n \"Confirm Changes\": \"Xác nhận thay đổi\",\n \"Confirm Name\": \"Xác nhận tên\",\n \"Confirm Unset Domain\": \"Xác nhận hủy tên miền\",\n \"Confirm the transaction in your wallet to complete it.\": \"Xác nhận giao dịch trong ví để hoàn tất.\",\n \"Confirm transaction\": \"Xác nhận giao dịch\",\n \"Connect an external wallet for easier access\": \"Kết nối ví bên ngoài để truy cập dễ hơn\",\n \"Connect wallet\": \"Kết nối ví\",\n \"Connect with VeWorld wallet\": \"Kết nối với ví VeWorld\",\n \"Connect your Apple account for easier access\": \"Kết nối tài khoản Apple để truy cập dễ hơn\",\n \"Connect your Discord account for easier access\": \"Kết nối tài khoản Discord để truy cập dễ hơn\",\n \"Connect your Farcaster account for easier access\": \"Kết nối tài khoản Farcaster để truy cập dễ hơn\",\n \"Connect your Github account for easier access\": \"Kết nối tài khoản Github để truy cập dễ hơn\",\n \"Connect your Google account for easier access\": \"Kết nối tài khoản Google để truy cập dễ hơn\",\n \"Connect your Instagram account for easier access\": \"Kết nối tài khoản Instagram để truy cập dễ hơn\",\n \"Connect your LinkedIn account for easier access\": \"Kết nối tài khoản LinkedIn để truy cập dễ hơn\",\n \"Connect your Spotify account for easier access\": \"Kết nối tài khoản Spotify để truy cập dễ hơn\",\n \"Connect your Telegram account for easier access\": \"Kết nối tài khoản Telegram để truy cập dễ hơn\",\n \"Connect your Tiktok account for easier access\": \"Kết nối tài khoản Tiktok để truy cập dễ hơn\",\n \"Connect your Twitter account for easier access\": \"Kết nối tài khoản Twitter để truy cập dễ hơn\",\n \"Connect your email for easier access\": \"Kết nối email để truy cập dễ hơn\",\n \"Connect your phone number for easier access\": \"Kết nối số điện thoại để truy cập dễ hơn\",\n \"Connecting to VeChain\": \"Đang kết nối với VeChain\",\n \"Connecting with\": \"Đang kết nối với\",\n \"Connecting with Passkey\": \"Đang kết nối với Passkey\",\n \"Connecting...\": \"Đang kết nối...\",\n \"Connection Details\": \"Chi tiết kết nối\",\n \"Connection Failed\": \"Kết nối thất bại\",\n \"Connection Type\": \"Loại kết nối\",\n \"Connection details\": \"Chi tiết kết nối\",\n \"Continue\": \"Tiếp tục\",\n \"Continue with Github\": \"Tiếp tục với Github\",\n \"Continue with Google\": \"Tiếp tục với Google\",\n \"Cookie Policy\": \"Chính sách cookie\",\n \"Cookie policy outlining the use of cookies and tracking technologies.\": \"Chính sách cookie mô tả việc sử dụng cookie và công nghệ theo dõi.\",\n \"Copied!\": \"Đã sao chép!\",\n \"Copy your address or scan this QR code\": \"Sao chép địa chỉ hoặc quét mã QR này\",\n \"Currency\": \"Tiền tệ\",\n \"Current\": \"Hiện tại\",\n \"Current domain\": \"Tên miền hiện tại\",\n \"Customization\": \"Tùy chỉnh\",\n \"Customize\": \"Tùy chỉnh\",\n \"Customize profile\": \"Tùy chỉnh hồ sơ\",\n \"Customize the appearance of your wallet.\": \"Tùy chỉnh giao diện ví của bạn.\",\n \"Description\": \"Mô tả\",\n \"Description must be less than 100 characters\": \"Mô tả phải ít hơn 100 ký tự\",\n \"Didn't get an email?\": \"Không nhận được email?\",\n \"Discord\": \"Discord\",\n \"Display Name\": \"Tên hiển thị\",\n \"Display name must be less than 25 characters\": \"Tên hiển thị phải ít hơn 25 ký tự\",\n \"Domain set\": \"Đã đặt tên miền\",\n \"Domain unset\": \"Đã hủy tên miền\",\n \"Done\": \"Hoàn tất\",\n \"Drag to reorder. The system will automatically use the highest priority token with sufficient balance.\": \"Kéo để sắp xếp lại. Hệ thống sẽ tự động sử dụng token có ưu tiên cao nhất với số dư đủ.\",\n \"Ecosystem\": \"Hệ sinh thái\",\n \"Eg: DevRel @ ENS Labs\": \"VD: DevRel @ ENS Labs\",\n \"Email\": \"Email\",\n \"Email address\": \"Địa chỉ email\",\n \"Embedded wallet\": \"Ví tích hợp\",\n \"Enhanced compatibility with dApps\": \"Tương thích nâng cao với dApps\",\n \"Enter confirmation code\": \"Nhập mã xác nhận\",\n \"Enter your display name\": \"Nhập tên hiển thị\",\n \"Enter your name\": \"Nhập tên của bạn\",\n \"Exchange your digital assets between VeChain and other blockchain networks easily and securely. Swaps are executed through partners that leverage both decentralized and centralized exchanges to convert tokens.\": \"Trao đổi tài sản số giữa VeChain và các mạng blockchain khác một cách dễ dàng và an toàn. Giao dịch hoán đổi được thực hiện qua các đối tác sử dụng cả sàn phi tập trung và tập trung để chuyển đổi token.\",\n \"Existing Custom Tokens\": \"Token tùy chỉnh hiện có\",\n \"Explore ecosystem\": \"Khám phá hệ sinh thái\",\n \"Failed to connect with Passkey\": \"Kết nối với Passkey thất bại\",\n \"Failed to connect with VeChain\": \"Kết nối với VeChain thất bại\",\n \"Failed to connect with ecosystem app\": \"Kết nối với ứng dụng hệ sinh thái thất bại\",\n \"Failed to load App Hub apps\": \"Không tải được ứng dụng App Hub\",\n \"Farcaster\": \"Farcaster\",\n \"Fee\": \"Phí\",\n \"Fee delegation is a unique feature of VeChain that allows someone else (a delegator) to pay for your transaction fees. While many dApps and service providers act as delegators to make it easier for new users to get started, some transactions may still require you to pay fees using your own VTHO. Fees are necessary to prevent network spam and compensate the nodes that process and validate transactions on the blockchain. When paying fees yourself, you'll be able to select VTHO from your assets to cover the transaction cost.\": \"Ủy quyền phí là tính năng độc đáo của VeChain cho phép người khác (người ủy quyền) trả phí giao dịch cho bạn. Nhiều dApps và nhà cung cấp dịch vụ đóng vai trò người ủy quyền để giúp người dùng mới bắt đầu dễ hơn, nhưng một số giao dịch vẫn có thể yêu cầu bạn trả phí bằng VTHO của mình. Phí cần thiết để ngăn spam mạng và bù đắp cho các nút xử lý và xác thực giao dịch trên blockchain. Khi tự trả phí, bạn có thể chọn VTHO từ tài sản của mình để trang trải chi phí giao dịch.\",\n \"Fee token\": \"Token phí\",\n \"Filter by category\": \"Lọc theo danh mục\",\n \"Finally say goodbye to 0x addresses\": \"Cuối cùng cũng tạm biệt địa chỉ 0x\",\n \"For developers\": \"Dành cho nhà phát triển\",\n \"For security reasons, you can manage your embedded wallet settings only on the {{appName}} platform.\": \"Vì lý do bảo mật, bạn chỉ có thể quản lý cài đặt ví tích hợp trên nền tảng {{appName}}.\",\n \"Found following rates\": \"Đã tìm thấy các tỷ giá sau\",\n \"Frequently asked questions\": \"Câu hỏi thường gặp\",\n \"From\": \"Từ\",\n \"Gas Token Preferences\": \"Tùy chọn token gas\",\n \"Gas fee\": \"Phí gas\",\n \"General\": \"Chung\",\n \"Github\": \"Github\",\n \"Good news! Multiclause transactions are now fully supported for smart accounts. You can now enjoy a better user experience, lower gas costs, and enchanced security.\": \"Tin tốt! Giao dịch đa mệnh đề giờ đã được hỗ trợ đầy đủ cho tài khoản thông minh. Bạn có thể tận hưởng trải nghiệm tốt hơn, chi phí gas thấp hơn và bảo mật nâng cao.\",\n \"Google\": \"Google\",\n \"Help\": \"Trợ giúp\",\n \"Hide\": \"Ẩn\",\n \"How do I backup my wallet?\": \"Làm thế nào để sao lưu ví?\",\n \"How do I send tokens?\": \"Làm thế nào để gửi token?\",\n \"How is my wallet secured?\": \"Ví của tôi được bảo mật như thế nào?\",\n \"I have read and agree to \": \"Tôi đã đọc và đồng ý với \",\n \"Ignore and continue\": \"Bỏ qua và tiếp tục\",\n \"Improved security features\": \"Tính năng bảo mật được cải thiện\",\n \"Instagram\": \"Instagram\",\n \"Insufficient balance\": \"Số dư không đủ\",\n \"Insufficient balance to claim this domain and cover gas fees.\": \"Số dư không đủ để nhận tên miền này và trả phí gas.\",\n \"Insufficient balance to complete this transaction and cover gas fees.\": \"Số dư không đủ để hoàn tất giao dịch này và trả phí gas.\",\n \"Insufficient balance to complete this transfer and cover gas fees.\": \"Số dư không đủ để hoàn tất chuyển khoản này và trả phí gas.\",\n \"Insufficient balance to update your profile and cover gas fees.\": \"Số dư không đủ để cập nhật hồ sơ và trả phí gas.\",\n \"Insufficient {{symbol}} balance\": \"Số dư {{symbol}} không đủ\",\n \"Invalid address or domain\": \"Địa chỉ hoặc tên miền không hợp lệ\",\n \"Invalid contract address\": \"Địa chỉ hợp đồng không hợp lệ\",\n \"Invalid token address\": \"Địa chỉ token không hợp lệ\",\n \"Language\": \"Ngôn ngữ\",\n \"Launch vechain.energy\": \"Mở vechain.energy\",\n \"Launch {{name}}\": \"Mở {{name}}\",\n \"Legal agreement between you, Vechain Kit and the current app, outlining the rules for using wallet services.\": \"Thỏa thuận pháp lý giữa bạn, Vechain Kit và ứng dụng hiện tại, nêu rõ các quy tắc sử dụng dịch vụ ví.\",\n \"Link Apple Account\": \"Liên kết tài khoản Apple\",\n \"Link Discord Account\": \"Liên kết tài khoản Discord\",\n \"Link Email Account\": \"Liên kết tài khoản email\",\n \"Link External Wallet\": \"Liên kết ví bên ngoài\",\n \"Link Farcaster Account\": \"Liên kết tài khoản Farcaster\",\n \"Link Github Account\": \"Liên kết tài khoản Github\",\n \"Link Google Account\": \"Liên kết tài khoản Google\",\n \"Link Instagram Account\": \"Liên kết tài khoản Instagram\",\n \"Link LinkedIn Account\": \"Liên kết tài khoản LinkedIn\",\n \"Link Phone Number\": \"Liên kết số điện thoại\",\n \"Link Spotify Account\": \"Liên kết tài khoản Spotify\",\n \"Link Telegram Account\": \"Liên kết tài khoản Telegram\",\n \"Link Tiktok Account\": \"Liên kết tài khoản Tiktok\",\n \"Link Twitter Account\": \"Liên kết tài khoản Twitter\",\n \"LinkedIn\": \"LinkedIn\",\n \"Loading quote...\": \"Đang tải báo giá...\",\n \"Loading your domains...\": \"Đang tải tên miền...\",\n \"Loading...\": \"Đang tải...\",\n \"Log in or sign up\": \"Đăng nhập hoặc đăng ký\",\n \"Logged in with\": \"Đã đăng nhập với\",\n \"Login\": \"Đăng nhập\",\n \"Login failed:\": \"Đăng nhập thất bại:\",\n \"Login methods\": \"Phương thức đăng nhập\",\n \"Login methods and Passkeys\": \"Phương thức đăng nhập và Passkeys\",\n \"Logout\": \"Đăng xuất\",\n \"Manage Custom Tokens\": \"Quản lý token tùy chỉnh\",\n \"Manage MFA\": \"Quản lý MFA\",\n \"Manage Recovery\": \"Quản lý khôi phục\",\n \"Manage on {{appName}}\": \"Quản lý trên {{appName}}\",\n \"Manage your embedded wallet security settings: handle your login methods, add a passkey or back up your wallet to never lose access to your assets.\": \"Quản lý cài đặt bảo mật ví tích hợp: thiết lập phương thức đăng nhập, thêm passkey hoặc sao lưu ví để không bao giờ mất quyền truy cập tài sản.\",\n \"Manage your login methods and passkeys\": \"Quản lý phương thức đăng nhập và passkeys\",\n \"Manage your preferences for currency, language, and appearance.\": \"Quản lý tùy chọn tiền tệ, ngôn ngữ và giao diện.\",\n \"Minimum {{symbol}} transfer is {{min}}\": \"Chuyển {{symbol}} tối thiểu là {{min}}\",\n \"More\": \"Thêm\",\n \"Multiclause Transactions Are Now Supported\": \"Giao dịch đa mệnh đề giờ đã được hỗ trợ\",\n \"Name must be at least 3 characters long\": \"Tên phải có ít nhất 3 ký tự\",\n \"Name your account to make it easier to exchange assets\": \"Đặt tên tài khoản để dễ dàng trao đổi tài sản\",\n \"Network\": \"Mạng\",\n \"New\": \"Mới\",\n \"New image selected\": \"Đã chọn hình ảnh mới\",\n \"No additional accounts available to link\": \"Không có tài khoản bổ sung để liên kết\",\n \"No application from VeChain ecosystem is available to login.\": \"Không có ứng dụng nào từ hệ sinh thái VeChain để đăng nhập.\",\n \"No apps found in this category\": \"Không tìm thấy ứng dụng trong danh mục này\",\n \"No archived notifications\": \"Không có thông báo đã lưu trữ\",\n \"No assets\": \"Không có tài sản\",\n \"No notifications\": \"Không có thông báo\",\n \"No policies accepted\": \"Chưa chấp nhận chính sách nào\",\n \"No questions found\": \"Không tìm thấy câu hỏi\",\n \"No quotes available\": \"Không có báo giá\",\n \"No tokens found\": \"Không tìm thấy token\",\n \"Node URL\": \"URL nút\",\n \"Notifications\": \"Thông báo\",\n \"Only letters, numbers, and hyphens are allowed\": \"Chỉ cho phép chữ cái, số và dấu gạch ngang\",\n \"Optional\": \"Tùy chọn\",\n \"Other Wallets\": \"Ví khác\",\n \"Other options\": \"Tùy chọn khác\",\n \"Passkey\": \"Passkey\",\n \"Phone Number\": \"Số điện thoại\",\n \"Please approve the request in the connection request window...\": \"Vui lòng chấp nhận yêu cầu trong cửa sổ kết nối...\",\n \"Please be sure to keep this wallet safe and backed up.\": \"Hãy đảm bảo giữ ví an toàn và có bản sao lưu.\",\n \"Please check {{email}} for an email from privy.io and enter your code below.\": \"Vui lòng kiểm tra {{email}} để tìm email từ privy.io và nhập mã bên dưới.\",\n \"Please complete the passkey authentication...\": \"Vui lòng hoàn tất xác thực passkey...\",\n \"Please confirm the transaction in your wallet.\": \"Vui lòng xác nhận giao dịch trong ví.\",\n \"Please enter a valid Twitter handle without @\": \"Vui lòng nhập tên Twitter hợp lệ không có @\",\n \"Please enter a valid contract address\": \"Vui lòng nhập địa chỉ hợp đồng hợp lệ\",\n \"Please enter a valid email address\": \"Vui lòng nhập địa chỉ email hợp lệ\",\n \"Please enter a valid number\": \"Vui lòng nhập số hợp lệ\",\n \"Please take a moment to review all the policies, with acceptance being mandatory to continue.\": \"Vui lòng dành thời gian xem xét tất cả chính sách, việc chấp nhận là bắt buộc để tiếp tục.\",\n \"Policy\": \"Chính sách\",\n \"Preparing changes...\": \"Đang chuẩn bị thay đổi...\",\n \"Privacy Policy\": \"Chính sách bảo mật\",\n \"Privacy policy outlining the data collection and processing practices.\": \"Chính sách bảo mật mô tả các hoạt động thu thập và xử lý dữ liệu.\",\n \"Privy Status\": \"Trạng thái Privy\",\n \"Privy builds user onboarding and embedded wallet infrastructure to enable better products built on crypto rails. This means embedding asset control within applications themselves to enable users, businesses or machines to use digital assets through seamless product experiences.\": \"Privy xây dựng cơ sở hạ tầng onboarding người dùng và ví tích hợp để tạo ra sản phẩm tốt hơn trên nền tảng crypto. Điều này có nghĩa là tích hợp kiểm soát tài sản vào chính ứng dụng để cho phép người dùng, doanh nghiệp hoặc máy móc sử dụng tài sản số thông qua trải nghiệm sản phẩm liền mạch.\",\n \"Processing transaction...\": \"Đang xử lý giao dịch...\",\n \"Profile\": \"Hồ sơ\",\n \"Profile Image\": \"Ảnh hồ sơ\",\n \"Profile Picture\": \"Ảnh đại diện\",\n \"Profile Updated\": \"Đã cập nhật hồ sơ\",\n \"Read More\": \"Đọc thêm\",\n \"Receive\": \"Nhận\",\n \"Receive tokens\": \"Nhận token\",\n \"Reduced gas costs for operations\": \"Giảm chi phí gas cho các hoạt động\",\n \"Reject and logout\": \"Từ chối và đăng xuất\",\n \"Remove\": \"Xóa\",\n \"Remove Login Method\": \"Xóa phương thức đăng nhập\",\n \"Remove Wallet\": \"Xóa ví\",\n \"Remove from shortcuts\": \"Xóa khỏi lối tắt\",\n \"Remove wallet\": \"Xóa ví\",\n \"Remove your current domain name\": \"Xóa tên miền hiện tại\",\n \"Resend code\": \"Gửi lại mã\",\n \"Retry\": \"Thử lại\",\n \"Save Changes\": \"Lưu thay đổi\",\n \"Saving changes...\": \"Đang lưu thay đổi...\",\n \"Say goodbye to 0x addresses, claim your .veworld.vet subdomain now for free!\": \"Tạm biệt địa chỉ 0x, nhận tên miền phụ .veworld.vet miễn phí ngay!\",\n \"Search Apps\": \"Tìm ứng dụng\",\n \"Search FAQ\": \"Tìm trong FAQ\",\n \"Security preferences\": \"Tùy chọn bảo mật\",\n \"Security settings\": \"Cài đặt bảo mật\",\n \"Select Additional Login Method\": \"Chọn phương thức đăng nhập bổ sung\",\n \"Select Token\": \"Chọn token\",\n \"Select Wallet\": \"Chọn ví\",\n \"Select currency\": \"Chọn tiền tệ\",\n \"Select language\": \"Chọn ngôn ngữ\",\n \"Select the token to pay the fee with\": \"Chọn token để trả phí\",\n \"Select token\": \"Chọn token\",\n \"Send\": \"Gửi\",\n \"Send all\": \"Gửi tất cả\",\n \"Sending Transaction...\": \"Đang gửi giao dịch...\",\n \"Sending to OceanX or other exchanges may result in loss of funds.\": \"Gửi đến OceanX hoặc sàn giao dịch khác có thể dẫn đến mất tiền.\",\n \"Sending...\": \"Đang gửi...\",\n \"Set a domain first\": \"Đặt tên miền trước\",\n \"Set up Passkey\": \"Thiết lập Passkey\",\n \"Set up a passkey for easier access\": \"Thiết lập passkey để truy cập dễ hơn\",\n \"Settings\": \"Cài đặt\",\n \"Share on\": \"Chia sẻ trên\",\n \"Shortcuts\": \"Lối tắt\",\n \"Show Advanced Options\": \"Hiện tùy chọn nâng cao\",\n \"Show Less\": \"Hiện ít hơn\",\n \"Show More\": \"Hiện thêm\",\n \"Slippage tolerance\": \"Dung sai trượt giá\",\n \"Smart Account\": \"Smart Account\",\n \"Smart Account detected\": \"Phát hiện Smart Account\",\n \"Something went wrong\": \"Đã xảy ra lỗi\",\n \"Something went wrong. Please try again.\": \"Đã xảy ra lỗi. Vui lòng thử lại.\",\n \"Source\": \"Nguồn\",\n \"Spotify\": \"Spotify\",\n \"Stay tuned for our upcoming Activity feature\": \"Hãy theo dõi tính năng Hoạt động sắp ra mắt\",\n \"Stay tuned for our upcoming NFT feature\": \"Hãy theo dõi tính năng NFT sắp ra mắt\",\n \"Submit\": \"Gửi\",\n \"Swap\": \"Hoán đổi\",\n \"Swap all\": \"Hoán đổi tất cả\",\n \"Swapping...\": \"Đang hoán đổi...\",\n \"Switch\": \"Chuyển\",\n \"Account Changed\": \"Đã đổi tài khoản\",\n \"Telegram\": \"Telegram\",\n \"Terms and Conditions\": \"Điều khoản và điều kiện\",\n \"Terms and Policies\": \"Điều khoản và chính sách\",\n \"These accounts are linked to your embedded wallet and can be used to login to your wallet and access your private key.\": \"Các tài khoản này được liên kết với ví tích hợp và có thể dùng để đăng nhập ví và truy cập khóa riêng.\",\n \"This address only supports VeChain assets.\": \"Địa chỉ này chỉ hỗ trợ tài sản VeChain.\",\n \"This domain is already taken\": \"Tên miền này đã được sử dụng\",\n \"This domain is protected\": \"Tên miền này được bảo vệ\",\n \"This is taking longer than expected.\": \"Việc này mất nhiều thời gian hơn dự kiến.\",\n \"This is your main wallet, created by {{element}} and secured by Privy.\": \"Đây là ví chính của bạn, được tạo bởi {{element}} và bảo mật bởi Privy.\",\n \"This wallet is the owner of your smart account, which is used as your identity and as a gateway for your blockchain interactions.\": \"Ví này là chủ sở hữu Smart Account, được sử dụng làm danh tính và cổng truy cập cho các tương tác blockchain.\",\n \"Tiktok\": \"Tiktok\",\n \"To\": \"Đến\",\n \"To continue interacting with VeChain blockchain and complete your operation, your smart account needs to be upgraded to the latest version (v3).\": \"Để tiếp tục tương tác với blockchain VeChain và hoàn tất thao tác, Smart Account cần được nâng cấp lên phiên bản mới nhất (v3).\",\n \"Token Contract Address\": \"Địa chỉ hợp đồng token\",\n \"Token Priority Order\": \"Thứ tự ưu tiên token\",\n \"Token already added\": \"Token đã được thêm\",\n \"Tools\": \"Công cụ\",\n \"Transaction failed\": \"Giao dịch thất bại\",\n \"Transaction failed:\": \"Giao dịch thất bại:\",\n \"Transaction is being processed, it can take up to 15 seconds.\": \"Giao dịch đang được xử lý, có thể mất đến 15 giây.\",\n \"Transaction successful\": \"Giao dịch thành công\",\n \"Transaction successful!\": \"Giao dịch thành công!\",\n \"Try again\": \"Thử lại\",\n \"Try searching with a different term\": \"Thử tìm kiếm với từ khóa khác\",\n \"Twitter\": \"Twitter\",\n \"Twitter username\": \"Tên người dùng Twitter\",\n \"Type the receiver address or domain\": \"Nhập địa chỉ người nhận hoặc tên miền\",\n \"UNAVAILABLE\": \"KHÔNG KHẢ DỤNG\",\n \"Unable to fetch the price\": \"Không thể lấy giá\",\n \"Unset current domain\": \"Hủy tên miền hiện tại\",\n \"Unsetting current domain...\": \"Đang hủy tên miền hiện tại...\",\n \"Upgrade Smart Account to V3\": \"Nâng cấp Smart Account lên V3\",\n \"Upgrade Successful!\": \"Nâng cấp thành công!\",\n \"Upgrade account\": \"Nâng cấp tài khoản\",\n \"Upgrading...\": \"Đang nâng cấp...\",\n \"Use social login with VeChain\": \"Đăng nhập xã hội với VeChain\",\n \"Use this token for future transactions\": \"Sử dụng token này cho giao dịch trong tương lai\",\n \"VET is the primary cryptocurrency of the VeChain network. It represents value and ownership in the VeChain ecosystem, similar to how stocks represent ownership in a company. Holding VET automatically generates VTHO, which is needed to pay for transactions on the network.\": \"VET là tiền điện tử chính của mạng VeChain. Nó đại diện cho giá trị và quyền sở hữu trong hệ sinh thái VeChain, tương tự như cổ phiếu đại diện cho quyền sở hữu trong công ty. Nắm giữ VET tự động tạo ra VTHO, cần thiết để trả phí giao dịch trên mạng.\",\n \"VTHO (VeThor) is the energy or 'gas' token of the VeChain network. It's used to pay for transaction fees when interacting with the blockchain. VTHO is automatically generated by holding VET tokens, creating a two-token system that helps maintain network stability and manage transaction costs.\": \"VTHO (VeThor) là token năng lượng hay 'gas' của mạng VeChain. Nó được sử dụng để trả phí giao dịch khi tương tác với blockchain. VTHO được tạo tự động khi nắm giữ token VET, tạo ra hệ thống hai token giúp duy trì ổn định mạng và quản lý chi phí giao dịch.\",\n \"VeBetterDAO is a decentralized organization on VeChain blockchain focused on sustainability. Members participate in the governance of the DAO using B3TR tokens for rewards and VOT3 for voting in proposals and weekly token allocation rounds.\": \"VeBetterDAO là tổ chức phi tập trung trên blockchain VeChain tập trung vào phát triển bền vững. Thành viên tham gia quản trị DAO sử dụng token B3TR cho phần thưởng và VOT3 để bỏ phiếu trong các đề xuất và vòng phân bổ token hàng tuần.\",\n \"VeChain Kit\": \"VeChain Kit\",\n \"VeChain, headquartered in San Marino, Europe, is a pioneering blockchain ecosystem and creator of VeChainThor, a world-class smart contract platform driving real-world blockchain adoption. Founded in 2015 by Sunny Lu, VeChain has consistently worked to deliver a transparent, efficient, scalable, and adaptable blockchain solution.\": \"VeChain, có trụ sở tại San Marino, Châu Âu, là hệ sinh thái blockchain tiên phong và là nhà sáng tạo VeChainThor, nền tảng hợp đồng thông minh đẳng cấp thế giới thúc đẩy việc áp dụng blockchain trong thực tế. Được thành lập năm 2015 bởi Sunny Lu, VeChain liên tục nỗ lực cung cấp giải pháp blockchain minh bạch, hiệu quả, có khả năng mở rộng và thích ứng.\",\n \"VeWorld Wallet\": \"Ví VeWorld\",\n \"Vechain Kit Policy\": \"Chính sách Vechain Kit\",\n \"View Current Policy\": \"Xem chính sách hiện tại\",\n \"View on explorer\": \"Xem trên trình khám phá\",\n \"View transaction on the explorer\": \"Xem giao dịch trên trình khám phá\",\n \"Waiting for confirmation\": \"Đang chờ xác nhận\",\n \"Waiting for confirmation...\": \"Đang chờ xác nhận...\",\n \"Waiting wallet confirmation...\": \"Đang chờ xác nhận ví...\",\n \"Wallet\": \"Ví\",\n \"Wallet secured by\": \"Ví được bảo mật bởi\",\n \"We highly recommend exporting your private key to back up your wallet. This ensures you can restore it if needed or transfer it to self-custody using\": \"Chúng tôi khuyến nghị xuất khóa riêng để sao lưu ví. Điều này đảm bảo bạn có thể khôi phục nếu cần hoặc chuyển sang tự quản lý bằng\",\n \"Website\": \"Trang web\",\n \"Website URL\": \"URL trang web\",\n \"Website URL must start with https://\": \"URL trang web phải bắt đầu bằng https://\",\n \"What is B3TR?\": \"B3TR là gì?\",\n \"What is Privy?\": \"Privy là gì?\",\n \"What is VET?\": \"VET là gì?\",\n \"What is VTHO?\": \"VTHO là gì?\",\n \"What is VeBetterDAO?\": \"VeBetterDAO là gì?\",\n \"What is VeChain?\": \"VeChain là gì?\",\n \"What is a Smart Account?\": \"Smart Account là gì?\",\n \"What is a domain name?\": \"Tên miền là gì?\",\n \"What is a network?\": \"Mạng là gì?\",\n \"What is a wallet?\": \"Ví là gì?\",\n \"What is an x2earn application?\": \"Ứng dụng x2earn là gì?\",\n \"What is fee delegation?\": \"Ủy quyền phí là gì?\",\n \"When you have accepted a policy, it will appear here\": \"Khi bạn đã chấp nhận chính sách, nó sẽ xuất hiện ở đây\",\n \"When you have notifications, they will appear here\": \"Khi bạn có thông báo, chúng sẽ xuất hiện ở đây\",\n \"YOU OWN THIS\": \"BẠN SỞ HỮU CÁI NÀY\",\n \"You accepted current policy on {{date}}\": \"Bạn đã chấp nhận chính sách hiện tại vào {{date}}\",\n \"You are using an Embedded Wallet secured by your social login method, ensuring a seamless VeChain experience.\": \"Bạn đang sử dụng Ví tích hợp được bảo mật bằng phương thức đăng nhập xã hội, đảm bảo trải nghiệm VeChain liền mạch.\",\n \"You can send tokens by clicking the send icon in the Quick Actions section. Enter the recipient's address or VeChain domain name, select the token, and specify the amount you want to send.\": \"Bạn có thể gửi token bằng cách nhấp vào biểu tượng gửi trong phần Thao tác nhanh. Nhập địa chỉ người nhận hoặc tên miền VeChain, chọn token và chỉ định số lượng muốn gửi.\",\n \"You don't have any gas tokens enabled. Please enable at least one gas token in Gas Token Preferences.\": \"Bạn chưa bật token gas nào. Vui lòng bật ít nhất một token gas trong Tùy chọn token gas.\",\n \"You have an active smart account associated to this wallet. It has been set as your main identity.\": \"Bạn có Smart Account đang hoạt động liên kết với ví này. Nó đã được đặt làm danh tính chính của bạn.\",\n \"You may want to try establishing the connection again.\": \"Bạn có thể thử thiết lập kết nối lại.\",\n \"You must enable at least one token to perform transactions. Without any enabled tokens, you will not be able to pay for gas fees.\": \"Bạn phải bật ít nhất một token để thực hiện giao dịch. Không có token nào được bật, bạn sẽ không thể trả phí gas.\",\n \"Your account has been successfully upgraded to the latest version. You can now enjoy a better user experience, lower gas costs, and enhanced security.\": \"Tài khoản đã được nâng cấp thành công lên phiên bản mới nhất. Bạn có thể tận hưởng trải nghiệm tốt hơn, chi phí gas thấp hơn và bảo mật nâng cao.\",\n \"Your address has been successfully set to {{name}}\": \"Địa chỉ của bạn đã được đặt thành công thành {{name}}\",\n \"Your changes have been saved successfully.\": \"Thay đổi của bạn đã được lưu thành công.\",\n \"Your domain has been unset successfully.\": \"Tên miền của bạn đã được hủy thành công.\",\n \"Your embedded wallet\": \"Ví tích hợp của bạn\",\n \"Your existing domains\": \"Tên miền hiện có của bạn\",\n \"Your smart account is already upgraded to this version.\": \"Smart Account đã được nâng cấp lên phiên bản này.\",\n \"Your smart account needs to be upgraded to the latest version (v3).\": \"Smart Account cần được nâng cấp lên phiên bản mới nhất (v3).\",\n \"Your tokens\": \"Token của bạn\",\n \"Your wallet security depends on how you access it. With self-custody options like the VeWorld extension, mobile app, or hardware wallet, you have complete control over your private keys. This extension itself has no access to your private keys. When logging in with social accounts or VeChain, your wallet is created and secured by Privy and managed by VeChain, providing an easier onboarding experience while maintaining security.\": \"Bảo mật ví phụ thuộc vào cách bạn truy cập. Với các tùy chọn tự quản lý như tiện ích VeWorld, ứng dụng di động hoặc ví phần cứng, bạn hoàn toàn kiểm soát khóa riêng. Tiện ích này không có quyền truy cập khóa riêng. Khi đăng nhập bằng tài khoản xã hội hoặc VeChain, ví được tạo và bảo mật bởi Privy, quản lý bởi VeChain, cung cấp trải nghiệm onboarding dễ dàng hơn trong khi vẫn duy trì bảo mật.\",\n \"collectibles\": \"Bộ sưu tập\",\n \"defi\": \"DeFi\",\n \"games\": \"Trò chơi\",\n \"here\": \"tại đây\",\n \"marketplaces\": \"Sàn giao dịch\",\n \"rate\": \"tỷ giá\",\n \"to learn more about embedded wallets.\": \"để tìm hiểu thêm về ví tích hợp.\",\n \"unavailable\": \"không khả dụng\",\n \"utilities\": \"Tiện ích\",\n \"vebetter\": \"VeBetter\",\n \"your@email.com\": \"your@email.com\",\n \"<bold>Your privacy matters.</bold> You’re in control, accept to enable optional features like cookies that help us enhance your experience.\": \"<bold>Quyền riêng tư của bạn rất quan trọng.</bold> Bạn nắm quyền kiểm soát, chấp nhận để bật các tính năng tùy chọn như cookie giúp chúng tôi nâng cao trải nghiệm của bạn.\"\n}\n"],"mappings":""}
|