@instadapp/avocado-base 0.0.0-dev.dcc8252 → 0.0.0-dev.dd1950d

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.
@@ -3,7 +3,7 @@ name: NPM Publish(Dev)
3
3
  on:
4
4
  push:
5
5
  branches:
6
- - 'main'
6
+ - "main"
7
7
 
8
8
  jobs:
9
9
  dev-npm-publish:
@@ -18,7 +18,7 @@ jobs:
18
18
 
19
19
  - uses: actions/setup-node@v3
20
20
  with:
21
- node-version: 16
21
+ node-version: ">=v18.18.0"
22
22
 
23
23
  - uses: actions/cache@v3
24
24
  with:
@@ -48,6 +48,3 @@ jobs:
48
48
  token: ${{ secrets.NPM_AUTH_TOKEN }}
49
49
  tag: dev
50
50
  access: public
51
-
52
-
53
-
@@ -0,0 +1,4 @@
1
+ <svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M11.3112 1.14526L12.8087 5.19216L16.8556 6.68965L12.8087 8.18714L11.3112 12.234L9.8137 8.18714L5.76681 6.68965L9.8137 5.19216L11.3112 1.14526Z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
3
+ <path d="M4.38071 10.3859L5.68884 12.312L7.61493 13.6201L5.68884 14.9283L4.38071 16.8544L3.07258 14.9283L1.14648 13.6201L3.07258 12.312L4.38071 10.3859Z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
4
+ </svg>
@@ -1,19 +1,20 @@
1
1
  <script setup lang="ts">
2
- import RefreshSVG from '~/assets/images/icons/refresh.svg'
3
- import BridgeSVG from '~/assets/images/icons/bridge.svg'
4
- import CrossTransferSVG from '~/assets/images/icons/cross-transfer.svg'
5
- import TransferSVG from '~/assets/images/icons/transfer.svg'
6
- import PlusCircleSVG from '~/assets/images/icons/plus-circle.svg'
7
- import Trash2SVG from '~/assets/images/icons/trash-2.svg'
8
- import ChangeThresholdSVG from '~/assets/images/icons/change-threshold.svg'
9
- import DappSVG from '~/assets/images/icons/dapp.svg'
10
- import DeploySVG from '~/assets/images/icons/deploy.svg'
11
- import GasSVG from '~/assets/images/icons/gas.svg'
12
- import InstadappProSVG from '~/assets/images/icons/instadapp-pro.svg'
13
- import PermitSignSVG from '~/assets/images/icons/permit-sign.svg'
14
- import RejectProposalSVG from '~/assets/images/icons/reject-proposal.svg'
15
- import UpgradeSVG from '~/assets/images/icons/upgrade.svg'
16
- import HammerSVG from '~/assets/images/icons/hammer.svg'
2
+ import RefreshSVG from '../assets/images/icons/refresh.svg'
3
+ import BridgeSVG from '../assets/images/icons/bridge.svg'
4
+ import CrossTransferSVG from '../assets/images/icons/cross-transfer.svg'
5
+ import TransferSVG from '../assets/images/icons/transfer.svg'
6
+ import PlusCircleSVG from '../assets/images/icons/plus-circle.svg'
7
+ import StarsSVG from '../assets/images/icons/stars.svg'
8
+ import Trash2SVG from '../assets/images/icons/trash-2.svg'
9
+ import ChangeThresholdSVG from '../assets/images/icons/change-threshold.svg'
10
+ import DappSVG from '../assets/images/icons/dapp.svg'
11
+ import DeploySVG from '../assets/images/icons/deploy.svg'
12
+ import GasSVG from '../assets/images/icons/gas.svg'
13
+ import InstadappProSVG from '../assets/images/icons/instadapp-pro.svg'
14
+ import PermitSignSVG from '../assets/images/icons/permit-sign.svg'
15
+ import RejectProposalSVG from '../assets/images/icons/reject-proposal.svg'
16
+ import UpgradeSVG from '../assets/images/icons/upgrade.svg'
17
+ import HammerSVG from '../assets/images/icons/hammer.svg'
17
18
 
18
19
  defineProps<{
19
20
  action: MetadataTypes
@@ -22,19 +23,20 @@ defineProps<{
22
23
  </script>
23
24
 
24
25
  <template>
25
- <RefreshSVG class="text-primary" v-if="action === 'swap'"/>
26
- <BridgeSVG class="text-primary" v-else-if="action === 'bridge'"/>
27
- <CrossTransferSVG class="text-primary" v-else-if="action === 'cross-transfer'"/>
28
- <TransferSVG class="text-primary" v-else-if="action === 'transfer'"/>
29
- <PlusCircleSVG class="text-primary" v-else-if="action === 'add-signers' || (action === 'auth' && !remove)"/>
30
- <Trash2SVG class="text-[#EB5757]" v-else-if="action === 'remove-signers' || (action === 'auth' && remove)"/>
31
- <RejectProposalSVG class="text-[#EB5757]" v-else-if="action === 'rejection'"/>
32
- <ChangeThresholdSVG v-else-if="action === 'change-threshold'"/>
33
- <DappSVG v-else-if="action === 'dapp'"/>
34
- <DeploySVG v-else-if="action === 'deploy'"/>
35
- <GasSVG v-else-if="action === 'gas-topup'"/>
36
- <InstadappProSVG v-else-if="action === 'instadapp-pro'"/>
37
- <PermitSignSVG v-else-if="action === 'permit2'"/>
38
- <UpgradeSVG v-else-if="action === 'upgrade'"/>
39
- <HammerSVG v-else-if="action === 'tx-builder'"/>
26
+ <RefreshSVG class="text-primary" v-if="action === 'swap'" />
27
+ <BridgeSVG class="text-primary" v-else-if="action === 'bridge'" />
28
+ <CrossTransferSVG class="text-primary" v-else-if="action === 'cross-transfer'" />
29
+ <TransferSVG class="text-primary" v-else-if="action === 'transfer'" />
30
+ <PlusCircleSVG class="text-primary" v-else-if="action === 'add-signers' || (action === 'auth' && !remove)" />
31
+ <Trash2SVG class="text-[#EB5757]" v-else-if="action === 'remove-signers' || (action === 'auth' && remove)" />
32
+ <RejectProposalSVG class="text-[#EB5757]" v-else-if="action === 'rejection'" />
33
+ <ChangeThresholdSVG v-else-if="action === 'change-threshold'" />
34
+ <DappSVG v-else-if="action === 'dapp'" />
35
+ <DeploySVG v-else-if="action === 'deploy'" />
36
+ <GasSVG v-else-if="action === 'gas-topup'" />
37
+ <InstadappProSVG v-else-if="action === 'instadapp-pro'" />
38
+ <PermitSignSVG v-else-if="action === 'permit2'" />
39
+ <UpgradeSVG v-else-if="action === 'upgrade'" />
40
+ <HammerSVG v-else-if="action === 'tx-builder'" />
41
+ <StarsSVG v-else-if="action === 'mass'" />
40
42
  </template>
@@ -20,9 +20,13 @@ provide('tokens', props.tokens);
20
20
  <MetadataCrossTransfer v-if="metadata.type === 'cross-transfer'" :metadata="metadata" :chain_id="chain_id" />
21
21
  <MetadataGasTopup v-if="metadata.type === 'gas-topup'" :metadata="metadata" :chain_id="chain_id" />
22
22
  <MetadataSwap v-if="metadata.type === 'swap'" :metadata="metadata" :chain_id="chain_id" />
23
- <MetadataBridge v-if="metadata.type === 'bridge'" :metadata="metadata" :chain_id="chain_id" />
23
+ <MetadataBridge v-if="metadata.type === 'bridge' || metadata.type === 'bridge-v2'" :metadata="metadata" :chain_id="chain_id" />
24
24
  <MetadataPermit2 v-if="metadata.type === 'permit2'" :metadata="metadata" :chain_id="chain_id" />
25
25
 
26
+ <div v-if="metadata.type === 'mass'">
27
+ Chain Agnostic Payments
28
+ </div>
29
+
26
30
  <div class="text-left w-fit capitalize" v-if="metadata.type === 'import'">
27
31
  Import from {{ metadata.protocol }} ({{ (formatUsd(fromWei(metadata.valueInUsd, 10))) }})
28
32
  </div>
@@ -1,4 +1,5 @@
1
1
  <script setup lang="ts">
2
+ // @ts-expect-error
2
3
  import * as XXH from 'xxhashjs';
3
4
 
4
5
  defineProps<{
@@ -19,11 +20,9 @@ function generateColor(address: string): string {
19
20
  </script>
20
21
 
21
22
  <template>
22
- <svg
23
- :style="{
24
- color: generateColor(address),
25
- }" width="30" height="30" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 30 30"
26
- >
23
+ <svg :style="{
24
+ color: generateColor(address),
25
+ }" width="30" height="30" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 30 30">
27
26
  <g fill="currentColor" :clip-path="`url(#${randomId})`">
28
27
  <rect width="30" height="30" fill-opacity=".4" rx="15" />
29
28
  <ellipse cx="15.004" cy="26.399" rx="11.4" ry="6.6" />
@@ -1,22 +1,15 @@
1
1
  <template>
2
- <template v-if="isNetworkNotAvailable">
3
- <svg v-bind="$attrs" class="dark:hidden block" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 20 20">
4
- <rect width="20" height="20" fill="#CBD5E1" rx="10" />
5
- <path fill="#fff" fill-rule="evenodd"
6
- d="M10 3.999A6 6 0 1 0 10 16a6 6 0 0 0 0-12.001Zm0 10.8a4.8 4.8 0 1 1 0-9.6 4.8 4.8 0 0 1 0 9.6ZM6.399 9.67A3.6 3.6 0 0 1 9.68 6.4a.3.3 0 0 1 .318.318v.6a.294.294 0 0 1-.264.282A2.4 2.4 0 0 0 7.6 9.735a.294.294 0 0 1-.3.264h-.6a.312.312 0 0 1-.222-.096.336.336 0 0 1-.078-.234Z"
7
- clip-rule="evenodd" />
8
- </svg>
9
- <svg v-bind="$attrs" class="dark:block hidden" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 20 20">
10
- <rect width="20" height="20" fill="#334155" rx="10" />
11
- <path fill="#97A2B7" fill-rule="evenodd"
12
- d="M10 3.999A6 6 0 1 0 10 16a6 6 0 0 0 0-12.001Zm0 10.8a4.8 4.8 0 1 1 0-9.6 4.8 4.8 0 0 1 0 9.6ZM6.399 9.67A3.6 3.6 0 0 1 9.68 6.4a.3.3 0 0 1 .318.318v.6a.294.294 0 0 1-.264.282A2.4 2.4 0 0 0 7.6 9.735a.294.294 0 0 1-.3.264h-.6a.312.312 0 0 1-.222-.096.336.336 0 0 1-.078-.234Z"
13
- clip-rule="evenodd" />
14
- </svg>
15
- </template>
16
- <span v-else-if="stroke" class="outline stroke-color dark:outline-[#161E2D] outline-[#F8FAFC] outline-2 shrink-0 outline outline-offset-[-1.5px] rounded-full">
17
- <img class="w-full h-full" :src="`https://cdn.instadapp.io/avocado/networks/${chain}.svg`"/>
2
+ <svg v-if="isNetworkNotAvailable" v-bind="$attrs" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 20 20">
3
+ <rect width="20" height="20" fill="#334155" rx="10" />
4
+ <path fill="#97A2B7" fill-rule="evenodd"
5
+ d="M10 3.999A6 6 0 1 0 10 16a6 6 0 0 0 0-12.001Zm0 10.8a4.8 4.8 0 1 1 0-9.6 4.8 4.8 0 0 1 0 9.6ZM6.399 9.67A3.6 3.6 0 0 1 9.68 6.4a.3.3 0 0 1 .318.318v.6a.294.294 0 0 1-.264.282A2.4 2.4 0 0 0 7.6 9.735a.294.294 0 0 1-.3.264h-.6a.312.312 0 0 1-.222-.096.336.336 0 0 1-.078-.234Z"
6
+ clip-rule="evenodd" />
7
+ </svg>
8
+ <span v-else-if="stroke"
9
+ class="outline stroke-color outline-[#161E2D] outline-2 shrink-0 outline outline-offset-[-1.5px] rounded-full">
10
+ <img class="w-full h-full" :src="`https://cdn.instadapp.io/avocado/networks/${chain}.svg`" />
18
11
  </span>
19
- <img v-else :src="`https://cdn.instadapp.io/avocado/networks/${chain}.svg`"/>
12
+ <img v-else :src="`https://cdn.instadapp.io/avocado/networks/${chain}.svg`" />
20
13
  </template>
21
14
 
22
15
  <script lang="ts" setup>
@@ -1,6 +1,6 @@
1
1
  <script setup lang="ts">
2
- import CopySVG from '~/assets/images/icons/copy.svg'
3
- import CheckCircle from '~/assets/images/icons/check-circle.svg'
2
+ import CopySVG from '../assets/images/icons/copy.svg'
3
+ import CheckCircle from '../assets/images/icons/check-circle.svg'
4
4
 
5
5
  defineProps<{
6
6
  text: string
@@ -12,22 +12,16 @@ const slots = useSlots()
12
12
  </script>
13
13
 
14
14
  <template>
15
- <button
16
- class="text-slate-400 font-semibold inline-flex items-center gap-2.5"
17
- @click.stop="copy(text)"
18
- >
15
+ <button class="text-slate-400 font-semibold inline-flex items-center gap-2.5" @click.stop="copy(text)">
19
16
  <Transition mode="out-in" name="slide-left">
20
- <span v-if="copied && !iconOnly"> {{ successText || 'Copied' }} </span>
17
+ <span v-if="copied && !iconOnly"> {{ successText || 'Copied' }} </span>
21
18
  <span v-else-if="slots.content">
22
19
  <slot name="content" />
23
20
  </span>
24
21
  </Transition>
25
22
 
26
23
  <Transition mode="out-in" name="slide">
27
- <CheckCircle
28
- v-if="copied"
29
- class="w-4 h-4 shrink-0 dark:text-slate-900 text-white svg-circle"
30
- />
24
+ <CheckCircle v-if="copied" class="w-4 h-4 shrink-0 dark:text-slate-900 text-white svg-circle" />
31
25
  <slot v-else-if="slots.copy" name="copy" />
32
26
  <slot v-else name="copy-icon">
33
27
  <CopySVG />
@@ -1,6 +1,6 @@
1
1
  <script setup lang="ts">
2
2
  import { Tippy } from 'vue-tippy'
3
- import Info2 from '~/assets/images/icons/info-2.svg'
3
+ import Info2 from '../../assets/images/icons/info-2.svg'
4
4
 
5
5
  defineProps<{
6
6
  metadata: {
@@ -14,44 +14,47 @@ defineProps<{
14
14
  <template>
15
15
  <div class="font-medium">
16
16
  <div v-if="!compact || metadata.addresses.length < 3" class="flex gap-[14px] flex-wrap items-end">
17
- <p v-if="!compact" class="text-xs"> {{ formatTxType(metadata.type) }} </p>
18
- <div v-for="address of metadata.addresses" :key="address" class="flex gap-2 rounded-full bg-slate-100 dark:bg-slate-800 justify-start items-center px-2 py-1.5">
19
- <AuthorityAvatar :address="address" class="w-[18px] h-[18px]" />
20
- <Tippy max-width="none" interactive>
21
- <template #default>
22
- <p class="text-xs leading-5 text-slate-500 dark:text-slate-400">
17
+ <p v-if="!compact" class="text-xs"> {{ formatTxType(metadata.type) }} </p>
18
+ <div v-for="address of metadata.addresses" :key="address"
19
+ class="flex gap-2 rounded-full bg-slate-100 dark:bg-slate-800 justify-start items-center px-2 py-1.5">
20
+ <AuthorityAvatar :address="address" class="w-[18px] h-[18px]" />
21
+ <Tippy max-width="none" interactive>
22
+ <template #default>
23
+ <p class="text-xs leading-5 text-slate-500 dark:text-slate-400">
23
24
  {{ shortenHash(address, compact ? 2 : 4) }}
24
25
  </p>
25
- </template>
26
- <template #content>
26
+ </template>
27
+ <template #content>
27
28
  {{ address }}
28
- </template>
29
- </Tippy>
30
- </div>
29
+ </template>
30
+ </Tippy>
31
+ </div>
31
32
  </div>
32
33
  <div v-else class="flex gap-2 flex-wrap items-center">
33
- <div v-for="address of [metadata.addresses[0], metadata.addresses[1]].filter(Boolean)" :key="address" class="flex gap-2 rounded-full bg-slate-100 dark:bg-slate-800 justify-start items-center px-2 py-1.5">
34
+ <div v-for="address of [metadata.addresses[0], metadata.addresses[1]].filter(Boolean)" :key="address"
35
+ class="flex gap-2 rounded-full bg-slate-100 dark:bg-slate-800 justify-start items-center px-2 py-1.5">
34
36
  <AuthorityAvatar :address="address" class="w-[18px] h-[18px]" />
35
37
 
36
38
  <Tippy max-width="none" interactive>
37
- <template #default>
38
- <p class="text-xs leading-5 text-slate-400">
39
- {{ shortenHash(address, 2) }}
40
- </p>
41
- </template>
42
- <template #content>
39
+ <template #default>
40
+ <p class="text-xs leading-5 text-slate-400">
41
+ {{ shortenHash(address, 2) }}
42
+ </p>
43
+ </template>
44
+ <template #content>
43
45
  {{ address }}
44
- </template>
45
- </Tippy>
46
+ </template>
47
+ </Tippy>
46
48
  </div>
47
-
49
+
48
50
  <Tippy max-width="none" interactive tag="button" content-tag="div" content-class="content-wrapper">
49
51
  <template #default>
50
52
  <Info2 class="w-[16px] h-[16px] text-slate-500 rounded-full" />
51
53
  </template>
52
54
  <template #content>
53
55
  <ul class="flex flex-col gap-2.5">
54
- <li v-for="address in metadata.addresses" :key="address" class="flex text-xs text-slate-400 items-center gap-2.5">
56
+ <li v-for="address in metadata.addresses" :key="address"
57
+ class="flex text-xs text-slate-400 items-center gap-2.5">
55
58
  <AuthorityAvatar class="shrink-0 w-5 h-5" :address="address" />
56
59
  {{ address }}
57
60
  </li>
@@ -8,17 +8,15 @@ const props = defineProps<{
8
8
  const compact = inject('compact');
9
9
  const tokens = inject<ITokenPrice[]>('tokens');
10
10
 
11
- const buyToken = asyncComputed(() =>
12
- {
11
+ const buyToken = asyncComputed(() => {
13
12
  if (Array.isArray(tokens) && !tokens.length) return null;
14
- return fetchTokenByAddress(props.metadata?.buyToken, props?.chain_id, tokens)
15
- }
13
+ return fetchTokenByAddress(props.metadata?.buyToken, props?.chain_id, tokens)
14
+ }
16
15
  );
17
- const sellToken = asyncComputed(() =>
18
- {
16
+ const sellToken = asyncComputed(() => {
19
17
  if (Array.isArray(tokens) && !tokens.length) return null;
20
- return fetchTokenByAddress(props.metadata?.sellToken, props?.chain_id, tokens)
21
- }
18
+ return fetchTokenByAddress(props.metadata?.sellToken, props?.chain_id, tokens)
19
+ }
22
20
  );
23
21
 
24
22
  const sellAmountFormatted = computed(() =>
@@ -49,26 +47,21 @@ const formatProtocol = (protocol: string) => {
49
47
 
50
48
  <template>
51
49
  <div v-if="!sellToken || !buyToken" class="rounded-5 w-24 h-4 loading-box" />
52
- <div
53
- class="flex items-center gap-5"
54
- v-else
55
- >
56
- <span v-if="!compact" class="capitalize text-xs sm:text-sm">{{ metadata.type }}</span>
57
- <span class="inline-flex gap-2.5 items-center">
58
- <img width="20" height="20" class="w-5 h-5" :src="sellToken?.logo_url" />
59
- {{ sellAmountFormatted }}
60
- <span class="uppercase">{{ sellToken?.symbol }}</span>
61
- <SvgoRefresh class="w-4 h-4 text-slate-400 mx-2" />
62
- <img width="20" height="20" class="w-5 h-5" :src="buyToken?.logo_url" />
63
- {{ buyAmountFormatted }}
64
- <span class="uppercase">{{ buyToken?.symbol }}</span>
65
- <span
66
- class="capitalize hidden sm:flex items-center gap-2.5"
67
- v-if="metadata.protocol && !compact"
68
- >
69
- On <ProtocolLogo class="w-5 h-5" :name="metadata.protocol" />
70
- {{ formatProtocol(metadata.protocol) }}
71
- </span>
50
+ <div class="flex items-center gap-5" v-else>
51
+ <span v-if="!compact" class="capitalize text-xs sm:text-sm">{{ metadata.type }}</span>
52
+ <span class="inline-flex gap-2.5 items-center">
53
+ <img width="20" height="20" class="w-5 h-5" :src="sellToken?.logo_url" />
54
+ {{ sellAmountFormatted }}
55
+ <span class="uppercase">{{ sellToken?.symbol }}</span>
56
+ <SvgoRefresh class="w-4 h-4 text-slate-400 mx-2" />
57
+ <img width="20" height="20" class="w-5 h-5" :src="buyToken?.logo_url" />
58
+ ~ {{ buyAmountFormatted }}
59
+ <span class="uppercase">{{ buyToken?.symbol }}</span>
60
+ <span class="capitalize hidden sm:flex items-center gap-2.5" v-if="metadata.protocol && !compact">
61
+ On
62
+ <ProtocolLogo class="w-5 h-5" :name="metadata.protocol" />
63
+ {{ formatProtocol(metadata.protocol) }}
72
64
  </span>
73
- </div>
65
+ </span>
66
+ </div>
74
67
  </template>
package/package.json CHANGED
@@ -1,23 +1,25 @@
1
1
  {
2
2
  "name": "@instadapp/avocado-base",
3
- "version": "0.0.0-dev.dcc8252",
3
+ "version": "0.0.0-dev.dd1950d",
4
4
  "type": "module",
5
5
  "main": "./nuxt.config.ts",
6
6
  "types": "global.d.ts",
7
+ "engines": {
8
+ "node": ">=v18.18.0"
9
+ },
7
10
  "scripts": {
8
11
  "build": "nuxt build",
9
12
  "dev": "nuxt dev",
10
13
  "generate": "nuxt generate",
11
14
  "preview": "nuxt preview",
12
- "generate:contracts": "rimraf contracts && typechain --target=ethers-v5 'abi/*.json' --out-dir 'contracts'"
15
+ "generate:contracts": "rimraf contracts && typechain --target=ethers-v5 'abi/*.json' --out-dir 'contracts'",
16
+ "typecheck": "nuxi typecheck"
13
17
  },
14
18
  "devDependencies": {
15
- "@instadapp/avocado": "^0.1.10",
16
- "@instadapp/avocado-dev": "npm:@instadapp/avocado@dev",
17
- "@nuxtjs/tailwindcss": "^6.6.5",
19
+ "@nuxtjs/tailwindcss": "^6.11.3",
18
20
  "@typechain/ethers-v5": "^10.2.0",
19
- "nuxt": "^3.6.1",
20
- "nuxt-svgo": "^3.1.0",
21
+ "nuxt": "^3.10.1",
22
+ "nuxt-svgo": "^4.0.0",
21
23
  "rimraf": "^3.0.2",
22
24
  "typechain": "^8.1.1",
23
25
  "unplugin-vue-components": "^0.25.1",
@@ -27,6 +29,7 @@
27
29
  "@vueuse/nuxt": "^10.2.0",
28
30
  "bignumber.js": "^9.1.1",
29
31
  "ethers": "^5.7.2",
32
+ "viem": "^2.10.5",
30
33
  "xxhashjs": "^0.2.2"
31
34
  }
32
35
  }
@@ -19,7 +19,7 @@ export function formatPercent(
19
19
  return formatter.format(valueAsNumber);
20
20
  }
21
21
 
22
- export function shortenHash(hash: string, length: number = 4) {
22
+ export function shortenHash(hash: string | `0x${string}`, length: number = 4) {
23
23
  if (!hash) return;
24
24
  if (hash.length < 12) return hash;
25
25
  const beginningChars = hash.startsWith("0x") ? length + 2 : length;
package/utils/metadata.ts CHANGED
@@ -5,6 +5,7 @@ import { toBN } from "./bignumber";
5
5
  export const MetadataEnums = {
6
6
  transfer: "transfer",
7
7
  bridge: "bridge",
8
+ 'bridge-v2': 'bridge-v2',
8
9
  swap: "swap",
9
10
  "gas-topup": "gas-topup",
10
11
  upgrade: "upgrade",
@@ -19,7 +20,9 @@ export const MetadataEnums = {
19
20
  "remove-signers": "remove-signers",
20
21
  "change-threshold": "change-threshold",
21
22
  import: "import",
23
+ mass: "mass",
22
24
  "tx-builder": "tx-builder",
25
+ "avocado-bridge": "avocado-bridge",
23
26
  } as const;
24
27
 
25
28
  const multiMetadataTypes = ["bytes[]"];
@@ -44,6 +47,16 @@ const actionMetadataTypes: Record<MetadataTypes, string[]> = {
44
47
  "uint256 bridgeFee",
45
48
  "address nativeToken",
46
49
  ],
50
+ 'bridge-v2': [
51
+ "uint256 amount",
52
+ "address receiver",
53
+ "address fromToken",
54
+ "address toToken",
55
+ "uint256 toChainId",
56
+ "uint256 bridgeFee",
57
+ "address nativeToken",
58
+ "bytes32 provider",
59
+ ],
47
60
  swap: [
48
61
  "address sellToken",
49
62
  "address buyToken",
@@ -70,6 +83,8 @@ const actionMetadataTypes: Record<MetadataTypes, string[]> = {
70
83
  "remove-signers": ["address[] signers"],
71
84
  "change-threshold": ["uint8 count"],
72
85
  rejection: ["bytes32 id"],
86
+ "avocado-bridge": ["bytes32 id", "uint256 toChainId"],
87
+ mass: ["bool isMass"],
73
88
  };
74
89
 
75
90
  const encodeMetadata = (props: MetadataProps) => {
@@ -97,6 +112,24 @@ export const encodeDappMetadata = (
97
112
  return single ? encodeMultipleActions(data) : data;
98
113
  };
99
114
 
115
+ export const encodeAvocadoBridgeMetadata = (
116
+ id: string,
117
+ toChainId: string | number,
118
+ single = true
119
+ ) => {
120
+ const encodedData = ethers.utils.defaultAbiCoder.encode(
121
+ actionMetadataTypes["avocado-bridge"],
122
+ [id, toChainId]
123
+ );
124
+
125
+ const data = encodeMetadata({
126
+ type: MetadataEnums["avocado-bridge"],
127
+ encodedData,
128
+ });
129
+
130
+ return single ? encodeMultipleActions(data) : data;
131
+ };
132
+
100
133
  export const encodeTransferMetadata = (
101
134
  params: SendMetadataProps,
102
135
  single = true
@@ -273,7 +306,21 @@ export const encodeBridgeMetadata = (
273
306
  params: BridgeMetadataProps,
274
307
  single = true
275
308
  ) => {
276
- const encodedData = ethers.utils.defaultAbiCoder.encode(
309
+ const type = params.version === '2' ? MetadataEnums.bridge : MetadataEnums["bridge-v2"]
310
+
311
+ const encodedData = params.version === '2' ? ethers.utils.defaultAbiCoder.encode(
312
+ actionMetadataTypes["bridge-v2"],
313
+ [
314
+ params.amount,
315
+ params.receiver,
316
+ params.fromToken,
317
+ params.toToken,
318
+ params.toChainId,
319
+ params.bridgeFee,
320
+ params.nativeToken,
321
+ params.provider
322
+ ]
323
+ ): ethers.utils.defaultAbiCoder.encode(
277
324
  actionMetadataTypes.bridge,
278
325
  [
279
326
  params.amount,
@@ -287,7 +334,7 @@ export const encodeBridgeMetadata = (
287
334
  );
288
335
 
289
336
  const data = encodeMetadata({
290
- type: MetadataEnums.bridge,
337
+ type,
291
338
  encodedData,
292
339
  });
293
340
 
@@ -346,6 +393,15 @@ export const encodeImportMetadata = (
346
393
  return single ? encodeMultipleActions(data) : data;
347
394
  };
348
395
 
396
+ export const encodeMassMetadata = (single = true) => {
397
+ const data = encodeMetadata({
398
+ type: MetadataEnums.mass,
399
+ encodedData: '0x',
400
+ });
401
+
402
+ return single ? encodeMultipleActions(data) : data;
403
+ }
404
+
349
405
  export const encodeAddSignersMetadata = (
350
406
  addresses: string[],
351
407
  single = true
@@ -448,6 +504,16 @@ const typesPayload: IPayload = {
448
504
  toChainId: data.toChainId ? data.toChainId.toString() : null,
449
505
  bridgeFee: toBN(data.bridgeFee).toFixed(),
450
506
  }),
507
+ 'bridge-v2': (data, type) => ({
508
+ type,
509
+ amount: toBN(data.amount).toFixed(),
510
+ receiver: data.receiver,
511
+ toToken: data.toToken,
512
+ fromToken: data.fromToken,
513
+ toChainId: data.toChainId ? data.toChainId.toString() : null,
514
+ bridgeFee: toBN(data.bridgeFee).toFixed(),
515
+ provider: data.provider,
516
+ }),
451
517
  swap: (data, type) => ({
452
518
  type,
453
519
  buyAmount: toBN(data.buyAmount).toFixed(),
@@ -521,6 +587,15 @@ const typesPayload: IPayload = {
521
587
  type,
522
588
  count: data.count,
523
589
  }),
590
+ "avocado-bridge": (data, type) => ({
591
+ type,
592
+ id: data.id,
593
+ toChainId: data.toChainId ? data.toChainId.toString() : null,
594
+ }),
595
+ mass: (data, type) => ({
596
+ type,
597
+ data,
598
+ }),
524
599
  };
525
600
 
526
601
  const parseMetadata = (metadata: string) => {
@@ -542,7 +617,7 @@ const parseMetadata = (metadata: string) => {
542
617
  decodedMetadata.type
543
618
  ) as keyof typeof actionMetadataTypes;
544
619
 
545
- const decodedData = ethers.utils.defaultAbiCoder.decode(
620
+ const decodedData = decodedMetadata?.data === '0x' ? '' : ethers.utils.defaultAbiCoder.decode(
546
621
  actionMetadataTypes[type],
547
622
  decodedMetadata.data
548
623
  );
@@ -565,6 +640,10 @@ const parseMetadata = (metadata: string) => {
565
640
  * @returns {string} - The modified sentence with hyphens replaced with spaces and the first letter of each word capitalized.
566
641
  */
567
642
  export const formatTxType = (txType: string) => {
643
+ if(txType === 'mass') {
644
+ return 'Chain Agnostic Payments'
645
+ }
646
+
568
647
  const finalSentence = txType
569
648
  .replace("-", " ")
570
649
  .replace(/(^\w{1})|(\s+\w{1})/g, (letter) => letter.toUpperCase());
package/utils/network.ts CHANGED
@@ -1,4 +1,22 @@
1
1
  import { ethers } from "ethers";
2
+ import {
3
+ polygon,
4
+ arbitrum,
5
+ mainnet,
6
+ base,
7
+ optimism,
8
+ polygonZkEvm,
9
+ bsc,
10
+ avalanche,
11
+ fantom,
12
+ gnosis,
13
+ aurora,
14
+ fuse,
15
+ scroll,
16
+ opBNB,
17
+ mode,
18
+ blast
19
+ } from "viem/chains";
2
20
  import {
3
21
  AVO_PROD_CHAIN_NAME,
4
22
  AVO_PROD_CHAIN_ID,
@@ -9,11 +27,44 @@ import {
9
27
  AVO_STAGING_RPC_URL,
10
28
  AVO_STAGING_EXPLORER_URL,
11
29
  } from "./avocado";
30
+ import { defineChain } from "viem";
12
31
 
13
32
  export const bridgeDisabledNetworks = [];
14
33
 
15
34
  export const networksSimulationNotSupported = [1313161554, 1101];
16
35
 
36
+ const avocado = defineChain({
37
+ id: AVO_PROD_CHAIN_ID,
38
+ name: AVO_PROD_CHAIN_NAME,
39
+ nativeCurrency: {
40
+ name: "Avocado",
41
+ symbol: "USDC",
42
+ decimals: 18,
43
+ },
44
+ rpcUrls: {
45
+ default: { http: [AVO_PROD_RPC_URL] },
46
+ },
47
+ blockExplorers: {
48
+ default: { name: "Avoscan", url: AVO_PROD_EXPLORER_URL },
49
+ },
50
+ });
51
+
52
+ const avocadoStaging = defineChain({
53
+ id: AVO_STAGING_CHAIN_ID,
54
+ name: AVO_STAGING_CHAIN_NAME,
55
+ nativeCurrency: {
56
+ name: "Avocado",
57
+ symbol: "USDC",
58
+ decimals: 18,
59
+ },
60
+ rpcUrls: {
61
+ default: { http: [AVO_STAGING_RPC_URL] },
62
+ },
63
+ blockExplorers: {
64
+ default: { name: "Avoscan", url: AVO_STAGING_EXPLORER_URL },
65
+ },
66
+ });
67
+
17
68
  export const networks: Network[] = [
18
69
  {
19
70
  name: "Polygon",
@@ -22,10 +73,13 @@ export const networks: Network[] = [
22
73
  zerionName: "polygon",
23
74
  color: "#7A4ADD",
24
75
  chainId: 137,
76
+ viemChain: polygon,
25
77
  balanceResolverAddress: "0x58632D23120b20650262b8A629a14e4F4043E0D9",
26
78
  usdcAddress: "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174",
27
79
  explorerUrl: "https://polygonscan.com",
28
80
  apiURL: "https://api.polygonscan.com",
81
+ fakeTransactionHash:
82
+ "0x906c551abd5873a428505b6530ac14d91367820706c7ee525f6d7313265d1c92",
29
83
  get serverRpcUrl() {
30
84
  return process.env?.POLYGON_RPC_URL || this.params.rpcUrls[0];
31
85
  },
@@ -44,10 +98,13 @@ export const networks: Network[] = [
44
98
  debankName: "arb",
45
99
  ankrName: "arbitrum",
46
100
  zerionName: "arbitrum",
101
+ viemChain: arbitrum,
47
102
  color: "#2D374B",
48
103
  chainId: 42161,
49
104
  usdcAddress: "0xff970a61a04b1ca14834a43f5de4533ebddb5cc8",
50
105
  balanceResolverAddress: "0xca5f37e6D8bB24c5A7958d5eccE7Bd9Aacc944f2",
106
+ fakeTransactionHash:
107
+ "0x9fa291c3b09d31f19b1fa5dd05f30169d1364036d5f7c14b026410bc07bd8843",
51
108
  explorerUrl: "https://arbiscan.io",
52
109
  apiURL: "https://api.arbiscan.io",
53
110
  get serverRpcUrl() {
@@ -68,8 +125,11 @@ export const networks: Network[] = [
68
125
  debankName: "eth",
69
126
  ankrName: "eth",
70
127
  zerionName: "ethereum",
128
+ viemChain: mainnet,
71
129
  chainId: 1,
72
130
  explorerUrl: "https://etherscan.io",
131
+ fakeTransactionHash:
132
+ "0x13232dd32cef2f641ead890a507710c96560c8c9c3d5fab6facb5ec563c49433",
73
133
  apiURL: "https://api.etherscan.io",
74
134
  color: "#5D5FEF",
75
135
  get serverRpcUrl() {
@@ -91,7 +151,10 @@ export const networks: Network[] = [
91
151
  chainId: 8453,
92
152
  color: "#1E2024",
93
153
  ankrName: "base",
154
+ viemChain: base,
94
155
  explorerUrl: "https://basescan.org",
156
+ fakeTransactionHash:
157
+ "0xf7833d80da33730c4fc5d4c64151f0eaa64c0c0535be022af0228a44cc4e9c8e",
95
158
  apiURL: "https://api.basescan.org",
96
159
  get serverRpcUrl() {
97
160
  return process.env?.BASE_RPC_URL || this.params.rpcUrls[0];
@@ -114,10 +177,13 @@ export const networks: Network[] = [
114
177
  ankrName: "optimism",
115
178
  zerionName: "optimism",
116
179
  color: "#FF0420",
180
+ viemChain: optimism,
117
181
  chainId: 10,
118
182
  apiURL: "https://api-optimistic.etherscan.io",
119
183
  usdcAddress: "0x7f5c764cbc14f9669b88837ca1490cca17c31607",
120
184
  balanceResolverAddress: "0xca5f37e6D8bB24c5A7958d5eccE7Bd9Aacc944f2",
185
+ fakeTransactionHash:
186
+ "0xee7311d68059732b05088f2144dfec6c7a4f5fd0433eb85306afcd6bdf17cebc",
121
187
  explorerUrl: "https://optimistic.etherscan.io",
122
188
  get serverRpcUrl() {
123
189
  return process.env?.OPTIMISM_RPC_URL || this.params.rpcUrls[0];
@@ -137,9 +203,12 @@ export const networks: Network[] = [
137
203
  chainId: 1101,
138
204
  color: "#8544f6",
139
205
  ankrName: "polygon_zkevm",
206
+ viemChain: polygonZkEvm,
140
207
  explorerUrl: "https://zkevm.polygonscan.com",
141
208
  apiURL: "https://api-zkevm.polygonscan.com",
142
209
  balanceResolverAddress: "0x48D1Fa5Ee6691a1E0B45d2B515650997BEA27a01",
210
+ fakeTransactionHash:
211
+ "0x1077130463ade91ad4e9c43c3195298e26a99970975238128912490eea12bf41",
143
212
  usdcAddress: "0xa8ce8aee21bc2a48a5ef670afcc9274c7bbbc035",
144
213
  get serverRpcUrl() {
145
214
  return process.env?.POLYGON_ZKEVM_RPC_URL || this.params.rpcUrls[0];
@@ -162,6 +231,9 @@ export const networks: Network[] = [
162
231
  color: "#F3BA2F",
163
232
  chainId: 56,
164
233
  explorerUrl: "https://bscscan.com",
234
+ viemChain: bsc,
235
+ fakeTransactionHash:
236
+ "0x897d54bf8e492f840bd4d8f1e743bfcab8226ab4d5a899e47ee433dcd6d6abf7",
165
237
  apiURL: "https://api.bscscan.com",
166
238
  usdcAddress: "0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d",
167
239
  balanceResolverAddress: "0xb808cff38706e267067b0af427726aa099f69f89",
@@ -184,10 +256,13 @@ export const networks: Network[] = [
184
256
  ankrName: "avalanche",
185
257
  zerionName: "avalanche",
186
258
  color: "#EB5757",
259
+ viemChain: avalanche,
187
260
  chainId: 43114,
188
261
  usdcAddress: "0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e",
189
262
  balanceResolverAddress: "0x63009f31D054E0ac9F321Cf0D642375236A4Bf1E",
190
263
  explorerUrl: "https://snowtrace.io",
264
+ fakeTransactionHash:
265
+ "0x233aac7402558dd4e23f938a50f983e67f5c9604233981c7ac74e63737b8294e",
191
266
  apiURL: "https://api.snowtrace.io",
192
267
  get serverRpcUrl() {
193
268
  return process.env?.AVALANCHE_RPC_URL || this.params.rpcUrls[0];
@@ -209,11 +284,14 @@ export const networks: Network[] = [
209
284
  explorerUrl: "https://ftmscan.com",
210
285
  ankrName: "fantom",
211
286
  color: "#1969ff",
287
+ viemChain: fantom,
212
288
  get serverRpcUrl() {
213
289
  return process.env?.FANTOM_RPC_URL || this.params.rpcUrls[0];
214
290
  },
215
291
  usdcAddress: "0x04068da6c83afcfa0e13ba15a6696662335d5b75",
216
292
  balanceResolverAddress: "0x929376c77a2fb8152375a089a4fccf84ff481479",
293
+ fakeTransactionHash:
294
+ "0x1e9a8405d660172314124e06896212c0786d7fb1550b89410d4bc87e9e8054e4",
217
295
  params: {
218
296
  rpcUrls: ["https://rpc.ankr.com/fantom"],
219
297
  chainName: "Fantom",
@@ -230,9 +308,12 @@ export const networks: Network[] = [
230
308
  zerionName: "xdai",
231
309
  color: "#04795C",
232
310
  ankrName: "gnosis",
311
+ viemChain: gnosis,
233
312
  chainId: 100,
234
313
  balanceResolverAddress: "0xfaa244e276b1597f663975ed007ee4ff70d27849",
235
314
  explorerUrl: "https://gnosisscan.io",
315
+ fakeTransactionHash:
316
+ "0x1513033806310a2c3b29f2276f8aa7388461b0ef9f8499c297e68c12187c179b",
236
317
  apiURL: "https://api.gnosisscan.io",
237
318
  usdcAddress: "0xddafbb505ad214d7b80b1f830fccc89b60fb7a83",
238
319
  get serverRpcUrl() {
@@ -253,7 +334,10 @@ export const networks: Network[] = [
253
334
  chainId: 1313161554,
254
335
  zerionName: "aurora",
255
336
  color: "#78d64b",
337
+ viemChain: aurora,
256
338
  explorerUrl: "https://explorer.mainnet.aurora.dev",
339
+ fakeTransactionHash:
340
+ "0x0923401c5a80c39a5cd57c098a6c4729edbefd0db6894def7d349493f4ff3ec6",
257
341
  get serverRpcUrl() {
258
342
  return process.env?.AURORA_RPC_URL || this.params.rpcUrls[0];
259
343
  },
@@ -275,6 +359,9 @@ export const networks: Network[] = [
275
359
  zerionName: "fuse",
276
360
  color: "#78d64b",
277
361
  explorerUrl: "https://explorer.fuse.io",
362
+ viemChain: fuse,
363
+ fakeTransactionHash:
364
+ "0xf22a8031de9b978a57c728e18c6b54633356c39db4d0466e53b9b7c3ee7f8def",
278
365
  get serverRpcUrl() {
279
366
  return process.env?.FUSE_RPC_URL || this.params.rpcUrls[0];
280
367
  },
@@ -290,11 +377,115 @@ export const networks: Network[] = [
290
377
  },
291
378
  },
292
379
  },
380
+ {
381
+ name: "Scroll",
382
+ chainId: 534352,
383
+ color: "#78d64b",
384
+ ankrName: 'scroll',
385
+ explorerUrl: "https://scrollscan.com",
386
+ viemChain: scroll,
387
+ fakeTransactionHash:
388
+ "0x6bf297c414264fc8cddd47224632b4426a02138df2f50fe891eca87f6aefea01",
389
+ get serverRpcUrl() {
390
+ return process.env?.SCROLL_RPC_URL || this.params.rpcUrls[0];
391
+ },
392
+ params: {
393
+ rpcUrls: ["https://rpc.scroll.io"],
394
+ chainName: "Scroll",
395
+ nativeCurrency: {
396
+ name: "Ethereum",
397
+ symbol: "ETH",
398
+ decimals: 18,
399
+ },
400
+ },
401
+ },
402
+ {
403
+ name: "opBNB",
404
+ chainId: 204,
405
+ color: "#78d64b",
406
+ explorerUrl: "https://opbnbscan.com",
407
+ viemChain: opBNB,
408
+ fakeTransactionHash:
409
+ "0xb9438a3eae61442bc7d419d79930370ce09ac0f46e0695025751e3bfe1a931e7",
410
+ get serverRpcUrl() {
411
+ return process.env?.OPBNB_RPC_URL || this.params.rpcUrls[0];
412
+ },
413
+ params: {
414
+ rpcUrls: ["https://opbnb-mainnet-rpc.bnbchain.org"],
415
+ chainName: "opBNB",
416
+ nativeCurrency: {
417
+ name: "BNB",
418
+ symbol: "BNB",
419
+ decimals: 18,
420
+ },
421
+ },
422
+ },
423
+ // {
424
+ // chainId: 34443,
425
+ // name: "Mode",
426
+ // color: "#d7ff00",
427
+ // explorerUrl: 'https://explorer.mode.network',
428
+ // fakeTransactionHash: '0xb58002db3481f2c51855a91280ec940d0bebec075c4b362b9f90c21a2b14edbe',
429
+ // params: {
430
+ // rpcUrls: ["https://1rpc.io/mode"],
431
+ // chainName: "Mode",
432
+ // nativeCurrency: {
433
+ // name: "Ethereum",
434
+ // symbol: "ETH",
435
+ // decimals: 18,
436
+ // }
437
+ // },
438
+ // get serverRpcUrl() {
439
+ // return process.env?.MODE_RPC_URL || this.params.rpcUrls[0];
440
+ // },
441
+ // viemChain: mode,
442
+ // },
443
+ // {
444
+ // chainId: 81457,
445
+ // name: "Blast",
446
+ // color: "#78d64b",
447
+ // explorerUrl: 'https://blastscan.io',
448
+ // fakeTransactionHash: '0x934ed8516242f8c08bb9e0e90bb1f989d92ceb6b0333e86ac2d555f25ac27e58',
449
+ // params: {
450
+ // rpcUrls: ['https://rpc.ankr.com/blast'],
451
+ // chainName: "Blast",
452
+ // nativeCurrency: {
453
+ // name: "Ethereum",
454
+ // symbol: "ETH",
455
+ // decimals: 18,
456
+ // }
457
+ // },
458
+ // get serverRpcUrl() {
459
+ // return process.env?.BLAST_RPC_URL || this.params.rpcUrls[0];
460
+ // },
461
+ // viemChain: blast,
462
+ // },
463
+ // {
464
+ // name: "Manta Pacific",
465
+ // chainId: 169,
466
+ // explorerUrl: "https://pacific-explorer.manta.network",
467
+ // params: {
468
+ // rpcUrls: ["https://pacific-rpc.manta.network/http"],
469
+ // chainName: "Manta Pacific",
470
+ // nativeCurrency: {
471
+ // name: "Ethereum",
472
+ // symbol: "ETH",
473
+ // decimals: 18,
474
+ // },
475
+ // },
476
+ // color: "#78d64b",
477
+ // fakeTransactionHash: "0x3fB128aA5AC254C8539996B11C587E521AE0d3ab",
478
+ // get serverRpcUrl() {
479
+ // return process.env?.MANTA_RPC_URL || this.params.rpcUrls[0];
480
+ // },
481
+ // },
293
482
  {
294
483
  name: AVO_PROD_CHAIN_NAME,
295
484
  chainId: AVO_PROD_CHAIN_ID,
296
485
  isAvocado: true,
297
486
  balanceResolverAddress: "",
487
+ fakeTransactionHash: "",
488
+ viemChain: avocado,
298
489
  color: "#16A34A",
299
490
  usdcAddress: "",
300
491
  serverRpcUrl: AVO_PROD_RPC_URL,
@@ -316,6 +507,8 @@ export const networks: Network[] = [
316
507
  serverRpcUrl: AVO_STAGING_RPC_URL,
317
508
  color: "#16A34A",
318
509
  explorerUrl: AVO_STAGING_EXPLORER_URL,
510
+ viemChain: avocadoStaging,
511
+ fakeTransactionHash: "",
319
512
  isAvocado: true,
320
513
  balanceResolverAddress: "",
321
514
  usdcAddress: "",
@@ -338,6 +531,7 @@ export const chainUsdcAddresses = [
338
531
  { chainId: 56, address: "0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d" },
339
532
  { chainId: 100, address: "0xddafbb505ad214d7b80b1f830fccc89b60fb7a83" },
340
533
  { chainId: 137, address: "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174" },
534
+ { chainId: 137, address: "0x3c499c542cef5e3811e1192ce70d8cc03d5c3359" },
341
535
  { chainId: 250, address: "0x04068da6c83afcfa0e13ba15a6696662335d5b75" },
342
536
  { chainId: 42161, address: "0xff970a61a04b1ca14834a43f5de4533ebddb5cc8" },
343
537
  { chainId: 42161, address: "0xaf88d065e77c8cc2239327c5edb3a432268e5831" },
@@ -414,5 +608,6 @@ export const getExplorerUrl = (
414
608
  suffix: `/${string}` = "/"
415
609
  ) => {
416
610
  const network = getNetworkByChainId(chainId);
611
+ if (!network) return "";
417
612
  return `${network.explorerUrl}${suffix}`;
418
613
  };
package/utils/utils.d.ts CHANGED
@@ -1,3 +1,5 @@
1
+ import type { Chain } from "viem";
2
+
1
3
  declare global {
2
4
  type ChainId =
3
5
  | 1
@@ -13,7 +15,12 @@ declare global {
13
15
  | 1313161554
14
16
  | 8453
15
17
  | 122
16
- | 63400;
18
+ | 534352
19
+ | 204
20
+ | 63400
21
+ | 169
22
+ | 34443
23
+ | 81457
17
24
 
18
25
  type ISlackMessageType = "danger" | "error" | "success" | "banner";
19
26
 
@@ -33,8 +40,10 @@ declare global {
33
40
  isAvocado?: boolean;
34
41
  serverRpcUrl: string | undefined;
35
42
  balanceResolverAddress?: string;
36
- usdcAddress: string;
43
+ usdcAddress?: string;
37
44
  explorerUrl: string;
45
+ fakeTransactionHash: string;
46
+ viemChain: Chain;
38
47
  apiURL?: string;
39
48
  params: {
40
49
  chainName?: string;
@@ -99,6 +108,8 @@ declare global {
99
108
  toChainId: string;
100
109
  bridgeFee: string;
101
110
  nativeToken: string;
111
+ version?: string;
112
+ provider: string;
102
113
  };
103
114
 
104
115
  type SwapMetadataProps = {