Skip to content

Commit ef28718

Browse files
authored
Merge pull request #21 from hippo-protocol/feature/denom
Add hp denom metadata
2 parents 7af6b2d + d1226e5 commit ef28718

File tree

2 files changed

+64
-50
lines changed

2 files changed

+64
-50
lines changed

lib/components/TxDialog/index.vue

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,8 +171,23 @@ async function initData() {
171171
if (coin.denom.length < 12)
172172
getBalanceMetadata(props.endpoint, coin.denom)
173173
.then((meta) => {
174-
if (meta.metadata)
174+
if (meta.metadata) {
175+
if (meta.metadata.base === 'ahp' && meta.metadata.denom_units.length === 1 && meta.metadata.denom_units[0].denom === 'ahp') {
176+
meta.metadata = {
177+
...meta.metadata,
178+
denom_units: [
179+
...meta.metadata.denom_units,
180+
{
181+
denom: 'hp',
182+
exponent: 18,
183+
aliases: [],
184+
}
185+
],
186+
display: 'hp'
187+
}
188+
}
175189
metadatas.value[coin.denom] = meta.metadata;
190+
}
176191
})
177192
.catch(() => { });
178193
if (coin.denom.startsWith('ibc/')) {
@@ -195,6 +210,19 @@ async function initData() {
195210
.fetchAssetsList(props.registryName.includes('testnet') && !props.registryName.startsWith('testnets/') ? `testnets/${props.registryName}` : props.registryName)
196211
.then((x) => {
197212
x.assets.forEach((a) => {
213+
if (a.base === 'ahp' && a.denom_units.length === 1 && a.denom_units[0].denom === 'ahp') {
214+
a = {
215+
...a,
216+
denom_units: [
217+
...a.denom_units,
218+
{
219+
denom: 'hp',
220+
exponent: 18,
221+
}
222+
],
223+
display: 'hp',
224+
}
225+
}
198226
metadatas.value[a.base] = a as CoinMetadata;
199227
});
200228
})

lib/components/TxDialog/messages/Send.vue

Lines changed: 35 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -17,30 +17,7 @@ const amount = ref('');
1717
const recipient = ref('');
1818
const denom = ref('');
1919
const amountDenom = ref('hp')
20-
const convert = new TokenUnitConverter(
21-
// below can be simplied to props.metadata if metadata api works.
22-
{
23-
ahp: {
24-
name: 'hp',
25-
description: 'The native staking token of the Hippo Protocol.',
26-
denom_units: [
27-
{
28-
denom: 'ahp',
29-
exponent: 0,
30-
aliases: [],
31-
},
32-
{
33-
denom: 'hp',
34-
exponent: 18,
35-
aliases: [],
36-
},
37-
],
38-
base: 'ahp',
39-
display: 'hp',
40-
symbol: 'hp',
41-
},
42-
}
43-
);
20+
const convert = new TokenUnitConverter(props.metadata);
4421
4522
const msgs = computed(() => {
4623
return [
@@ -61,37 +38,47 @@ const msgs = computed(() => {
6138
});
6239
6340
const available = computed(() => {
64-
const base = (
65-
props.balances?.find((x) => x.denom === denom.value) || {
66-
amount: '0',
67-
denom: '-',
68-
}
69-
)
41+
const base = props.balances?.find((x) => x.denom === denom.value) || {
42+
amount: '0',
43+
denom: '-',
44+
};
45+
const convert = new TokenUnitConverter(props.metadata);
7046
return {
7147
base,
72-
display: convert.baseToUnit(base, amountDenom.value)
48+
display: convert.baseToUnit(base, amountDenom.value),
7349
};
7450
});
7551
7652
const showBalances = computed(() => {
77-
return props.balances?.map(b => ({
78-
base: b,
79-
display: convert.baseToDisplay(b)
80-
})) || []
81-
})
53+
const convert = new TokenUnitConverter(props.metadata);
54+
return (
55+
props.balances?.map((b) => ({
56+
base: b,
57+
display: convert.baseToDisplay(b),
58+
})) || []
59+
);
60+
});
8261
8362
const units = computed(() => {
84-
return [{ denom: 'hp', exponent: 18, aliases: [] }];
85-
})
63+
if (!props.metadata || !props.metadata[denom.value]) {
64+
amountDenom.value = denom.value;
65+
return [{ denom: denom.value, exponent: 0, aliases: [] }];
66+
}
67+
const list = props.metadata[denom.value].denom_units.sort(
68+
(a, b) => b.exponent - a.exponent
69+
);
70+
if (list.length > 0) amountDenom.value = list[0].denom;
71+
return list;
72+
});
8673
8774
const isValid = computed(() => {
8875
let ok = true
8976
let error = ""
90-
if(!recipient.value) {
77+
if (!recipient.value) {
9178
ok = false
9279
error = "Recipient is empty"
9380
}
94-
if(!(Number(amount.value) > 0)) {
81+
if (!(Number(amount.value) > 0)) {
9582
ok = false
9683
error = "Amount should be great than 0"
9784
}
@@ -107,23 +94,24 @@ function formatDenom(v: any) {
10794
return String(v).substring(0, 10)
10895
}
10996
110-
defineExpose({msgs, isValid, initial})
97+
defineExpose({ msgs, isValid, initial })
11198
</script>
11299
<template>
113100
<div class="dark:text-gray-400">
114101
<div class="form-control">
115102
<label class="label">
116103
<span class="label-text">Sender</span>
117104
</label>
118-
<input :value="sender" type="text" class="text-gray-600 dark:text-white input border !border-gray-300 dark:!border-gray-600" />
105+
<input :value="sender" type="text"
106+
class="text-gray-600 dark:text-white input border !border-gray-300 dark:!border-gray-600" />
119107
</div>
120108
<div class="form-control">
121109
<label class="label">
122110
<span class="label-text">Balances</span>
123111
</label>
124112
<select v-model="denom" class="select select-bordered dark:text-white">
125113
<option value="">Select a token</option>
126-
<option v-for="{base, display} in showBalances" :value="base.denom">
114+
<option v-for="{ base, display } in showBalances" :value="base.denom">
127115
{{ display.amount }} {{ display.denom }}
128116
</option>
129117
</select>
@@ -132,19 +120,17 @@ defineExpose({msgs, isValid, initial})
132120
<label class="label">
133121
<span class="label-text">Recipient</span>
134122
</label>
135-
<input
136-
v-model="recipient"
137-
type="text"
138-
class="input border border-gray-300 dark:border-gray-600 dark:text-white"
139-
/>
123+
<input v-model="recipient" type="text"
124+
class="input border border-gray-300 dark:border-gray-600 dark:text-white" />
140125
</div>
141126
<div class="form-control">
142127
<label class="label">
143128
<span class="label-text">Amount</span>
144129
<span>{{ available.display.amount }} {{ formatDenom(available.display.denom) }}</span>
145130
</label>
146131
<label class="input-group">
147-
<input v-model="amount" type="number" :placeholder="`Available: ${available?.display.amount}`" class="input border border-gray-300 dark:border-gray-600 w-full dark:text-white" />
132+
<input v-model="amount" type="number" :placeholder="`Available: ${available?.display.amount}`"
133+
class="input border border-gray-300 dark:border-gray-600 w-full dark:text-white" />
148134
<select v-model="amountDenom" class="select select-bordered dark:text-white">
149135
<option v-for="u in units" :value="u.denom">{{ formatDenom(u.denom) }}</option>
150136
</select>

0 commit comments

Comments
 (0)