@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.
- package/.github/workflows/npm-publish-dev.yml +2 -5
- package/assets/images/icons/stars.svg +4 -0
- package/components/ActionLogo.vue +32 -30
- package/components/ActionMetadata.vue +5 -1
- package/components/AuthorityAvatar.vue +4 -5
- package/components/ChainLogo.vue +10 -17
- package/components/CopyClipboard.vue +5 -11
- package/components/metadata/Signers.vue +26 -23
- package/components/metadata/Swap.vue +22 -29
- package/package.json +10 -7
- package/utils/formatter.ts +1 -1
- package/utils/metadata.ts +82 -3
- package/utils/network.ts +195 -0
- package/utils/utils.d.ts +13 -2
|
@@ -3,7 +3,7 @@ name: NPM Publish(Dev)
|
|
|
3
3
|
on:
|
|
4
4
|
push:
|
|
5
5
|
branches:
|
|
6
|
-
-
|
|
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:
|
|
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 '
|
|
3
|
-
import BridgeSVG from '
|
|
4
|
-
import CrossTransferSVG from '
|
|
5
|
-
import TransferSVG from '
|
|
6
|
-
import PlusCircleSVG from '
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import
|
|
14
|
-
import
|
|
15
|
-
import
|
|
16
|
-
import
|
|
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
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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
|
-
:
|
|
24
|
-
|
|
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" />
|
package/components/ChainLogo.vue
CHANGED
|
@@ -1,22 +1,15 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<
|
|
3
|
-
<
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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
|
-
|
|
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 '
|
|
3
|
-
import CheckCircle from '
|
|
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' }}
|
|
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 '
|
|
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
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
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
|
-
|
|
26
|
-
|
|
26
|
+
</template>
|
|
27
|
+
<template #content>
|
|
27
28
|
{{ address }}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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"
|
|
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
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
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
|
-
|
|
45
|
-
|
|
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"
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
<span class="
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
<
|
|
65
|
-
|
|
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
|
-
</
|
|
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.
|
|
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
|
-
"@
|
|
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.
|
|
20
|
-
"nuxt-svgo": "^
|
|
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
|
}
|
package/utils/formatter.ts
CHANGED
|
@@ -19,7 +19,7 @@ export function formatPercent(
|
|
|
19
19
|
return formatter.format(valueAsNumber);
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
export function shortenHash(hash: string
|
|
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
|
|
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
|
|
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
|
-
|
|
|
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
|
|
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 = {
|