Skip to content

Commit 43f2c5f

Browse files
authored
Merge pull request #311 from ava-labs/dev
master update: multisig
2 parents c114d56 + 9a96e1f commit 43f2c5f

File tree

13 files changed

+209
-103
lines changed

13 files changed

+209
-103
lines changed

src/components/SidePanels/TxHistoryRow.vue

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,17 @@
1313
<fa icon="search"></fa>
1414
</a>
1515
</p>
16+
1617
<div v-if="memo" class="memo">
1718
<p>Memo</p>
1819
<p>{{ memo }}</p>
1920
</div>
2021
</div>
2122
<component :is="viewComponent" :transaction="transaction"></component>
23+
<p v-if="hasMultisig" class="multisig_warn">
24+
<fa icon="exclamation-triangle"></fa>
25+
Contains Shared Balance (Multisig)
26+
</p>
2227
</div>
2328
</template>
2429
<script lang="ts">
@@ -54,6 +59,10 @@ export default class TxHistoryRow extends Vue {
5459
return null
5560
}
5661
62+
get hasMultisig() {
63+
return this.transaction.outputs.filter((utxo) => utxo.addresses.length > 1).length > 0
64+
}
65+
5766
get memo(): string | null {
5867
const memo = this.transaction.memo
5968
return getMemoFromByteString(memo)
@@ -179,6 +188,11 @@ export default class TxHistoryRow extends Vue {
179188
}
180189
}
181190
191+
.multisig_warn {
192+
color: var(--error);
193+
font-size: 0.8em;
194+
}
195+
182196
@include main.medium-device {
183197
.icons {
184198
justify-self: left;

src/components/wallet/TopCards/BalanceCard/BalanceCard.vue

Lines changed: 54 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,14 @@
5353
<label>{{ $t('top.balance.available') }}</label>
5454
<p>{{ unlockedText }} AVAX</p>
5555
</div>
56-
<div>
56+
<div v-if="hasLocked">
5757
<label>{{ $t('top.locked') }}</label>
5858
<p>{{ balanceTextLocked }} AVAX</p>
5959
</div>
60+
<div v-if="hasMultisig">
61+
<label>Multisig</label>
62+
<p>{{ balanceTextMultisig }} AVAX</p>
63+
</div>
6064
<div>
6165
<label>{{ $t('top.balance.stake') }}</label>
6266
<p>{{ stakingText }} AVAX</p>
@@ -71,14 +75,20 @@
7175
<label>{{ $t('top.balance.available') }} (C)</label>
7276
<p>{{ evmUnlocked | cleanAvaxBN }} AVAX</p>
7377
</div>
74-
<div>
78+
<div v-if="hasLocked">
7579
<label>{{ $t('top.balance.locked') }} (X)</label>
7680
<p>{{ avmLocked | cleanAvaxBN }} AVAX</p>
7781
<label>{{ $t('top.balance.locked') }} (P)</label>
7882
<p>{{ platformLocked | cleanAvaxBN }} AVAX</p>
7983
<label>{{ $t('top.balance.locked_stake') }} (P)</label>
8084
<p>{{ platformLockedStakeable | cleanAvaxBN }} AVAX</p>
8185
</div>
86+
<div v-if="hasMultisig">
87+
<label>Multisig (X)</label>
88+
<p>{{ avmMultisig | cleanAvaxBN }} AVAX</p>
89+
<label>Multisig (P)</label>
90+
<p>{{ platformMultisig | cleanAvaxBN }} AVAX</p>
91+
</div>
8292
<div>
8393
<label>{{ $t('top.balance.stake') }}</label>
8494
<p>{{ stakingText }} AVAX</p>
@@ -241,16 +251,43 @@ export default class BalanceCard extends Vue {
241251
}
242252
}
243253
244-
get platformUnlocked(): BN {
254+
get balanceTextMultisig() {
255+
if (this.isUpdateBalance) return '--'
256+
257+
if (this.ava_asset !== null) {
258+
let denom = this.ava_asset.denomination
259+
return bnToBig(this.avmMultisig.add(this.platformMultisig), denom).toLocaleString()
260+
} else {
261+
return '--'
262+
}
263+
}
264+
265+
get avmMultisig(): BN {
266+
if (this.ava_asset !== null) {
267+
return this.ava_asset.amountMultisig
268+
} else {
269+
return new BN(0)
270+
}
271+
}
272+
273+
get platformBalance() {
245274
return this.$store.getters['Assets/walletPlatformBalance']
246275
}
247276
277+
get platformUnlocked(): BN {
278+
return this.platformBalance.available
279+
}
280+
281+
get platformMultisig(): BN {
282+
return this.platformBalance.multisig
283+
}
284+
248285
get platformLocked(): BN {
249-
return this.$store.getters['Assets/walletPlatformBalanceLocked']
286+
return this.platformBalance.locked
250287
}
251288
252289
get platformLockedStakeable(): BN {
253-
return this.$store.getters['Assets/walletPlatformBalanceLockedStakeable']
290+
return this.platformBalance.lockedStakeable
254291
}
255292
256293
get unlockedText() {
@@ -320,6 +357,17 @@ export default class BalanceCard extends Vue {
320357
get priceDict(): priceDict {
321358
return this.$store.state.prices
322359
}
360+
361+
get hasLocked(): boolean {
362+
return (
363+
!this.avmLocked.isZero() ||
364+
!this.platformLocked.isZero() ||
365+
!this.platformLockedStakeable.isZero()
366+
)
367+
}
368+
get hasMultisig(): boolean {
369+
return !this.avmMultisig.isZero() || !this.platformMultisig.isZero()
370+
}
323371
}
324372
</script>
325373
<style scoped lang="scss">
@@ -440,7 +488,7 @@ h4 {
440488
441489
.alt_info > div {
442490
display: grid;
443-
grid-template-columns: repeat(3, max-content);
491+
grid-template-columns: repeat(4, max-content);
444492
column-gap: 0px;
445493
margin-top: 12px;
446494
> div {

src/components/wallet/activity/TxRow.vue

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@
2727
</div>
2828
<div class="tx_detail">
2929
<component :is="tx_comp" :transaction="source"></component>
30+
<p v-if="hasMultisig" class="multisig_warn">
31+
<fa icon="exclamation-triangle"></fa>
32+
Contains Shared Balance (Multisig)
33+
</p>
3034
</div>
3135
</div>
3236
</div>
@@ -64,6 +68,10 @@ export default class TxRow extends Vue {
6468
return null
6569
}
6670
71+
get hasMultisig() {
72+
return this.source.outputs.filter((utxo) => utxo.addresses.length > 1).length > 0
73+
}
74+
6775
get date() {
6876
return new Date(this.source.timestamp)
6977
}
@@ -209,6 +217,10 @@ label {
209217
color: var(--primary-color-light);
210218
}
211219
220+
.multisig_warn {
221+
color: var(--error);
222+
}
223+
212224
@include main.mobile-device {
213225
.tx_cols {
214226
grid-template-columns: max-content 1fr;

src/components/wallet/earn/ChainTransfer/ChainCard.vue

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,7 @@ export default class ChainCard extends Vue {
6767
}
6868
6969
get platformUnlocked(): BN {
70-
// return this.$store.getters.walletPlatformBalance
71-
return this.$store.getters['Assets/walletPlatformBalance']
70+
return this.$store.getters['Assets/walletPlatformBalance'].available
7271
}
7372
7473
get avmUnlocked(): BN {

src/components/wallet/earn/ChainTransfer/ChainTransfer.vue

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -202,12 +202,12 @@ export default class ChainTransfer extends Vue {
202202
return ava
203203
}
204204
205-
get platformUnlocked(): BN {
205+
get platformBalance() {
206206
return this.$store.getters['Assets/walletPlatformBalance']
207207
}
208208
209-
get platformLocked(): BN {
210-
return this.$store.getters['Assets/walletPlatformBalanceLocked']
209+
get platformUnlocked(): BN {
210+
return this.platformBalance.available
211211
}
212212
213213
get avmUnlocked(): BN {

src/components/wallet/earn/UtxoSelectForm.vue

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import { WalletType } from '@/js/wallets/types'
3535
import { CurrencyType } from '@/components/misc/CurrencySelect/types'
3636
import { BN } from 'avalanche'
3737
import { bnToBig } from '@/helpers/helper'
38+
import { UnixNow } from 'avalanche/dist/utils'
3839
@Component({
3940
components: {
4041
UtxoSelectModal,
@@ -82,7 +83,16 @@ export default class UtxoSelectForm extends Vue {
8283
get platformUtxos(): UTXO[] {
8384
let wallet: WalletType | null = this.$store.state.activeWallet
8485
if (!wallet) return []
85-
return wallet.getPlatformUTXOSet().getAllUTXOs()
86+
const utxos = wallet.getPlatformUTXOSet().getAllUTXOs()
87+
const now = UnixNow()
88+
return utxos.filter((utxo) => {
89+
// Filter out locked and multisig utxos
90+
const locktime = utxo.getOutput().getLocktime()
91+
const threshold = utxo.getOutput().getThreshold()
92+
if (locktime.gt(now)) return false
93+
if (threshold > 1) return false
94+
return true
95+
})
8696
}
8797
8898
get selectedBalance(): BN {

src/components/wallet/earn/Validate/AddValidator.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,7 @@ export default class AddValidator extends Vue {
356356
}
357357
358358
get platformUnlocked(): BN {
359-
return this.$store.getters['Assets/walletPlatformBalance']
359+
return this.$store.getters['Assets/walletPlatformBalance'].available
360360
}
361361
362362
get platformLockedStakeable(): BN {

src/helpers/wallet_helper.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ class WalletHelper {
3939

4040
let minterAddress = wallet.getCurrentAddressAvm()
4141

42-
let utxoSet = wallet.utxoset
42+
let utxoSet = wallet.getUTXOSet()
4343

4444
let unsignedTx = await buildCreateNftFamilyTx(
4545
name,
@@ -66,7 +66,7 @@ class WalletHelper {
6666

6767
let sourceAddresses = wallet.getDerivedAddresses()
6868

69-
let utxoSet = wallet.utxoset
69+
let utxoSet = wallet.getUTXOSet()
7070
let tx = await buildMintNftTx(
7171
mintUtxo,
7272
payload,

src/js/AvaAsset.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ class AvaAsset {
99
denomination: number
1010
amount: BN
1111
amountLocked: BN
12+
amountMultisig: BN
1213
// AVAX P chain, Wallet Staking
1314
amountExtra: BN
1415
private readonly pow: Big
@@ -20,6 +21,7 @@ class AvaAsset {
2021
this.amount = new BN(0, 10)
2122
this.amountLocked = new BN(0, 10)
2223
this.amountExtra = new BN(0, 10)
24+
this.amountMultisig = new BN(0, 10)
2325
this.pow = Big(10).pow(denomination)
2426
}
2527

@@ -30,6 +32,9 @@ class AvaAsset {
3032
addBalanceLocked(val: BN): void {
3133
this.amountLocked = this.amountLocked.add(val)
3234
}
35+
addBalanceMultisig(val: BN): void {
36+
this.amountMultisig = this.amountMultisig.add(val)
37+
}
3338

3439
addExtra(val: BN): void {
3540
this.amountExtra = this.amountExtra.add(val)
@@ -39,6 +44,7 @@ class AvaAsset {
3944
this.amount = new BN(0, 10)
4045
this.amountLocked = new BN(0, 10)
4146
this.amountExtra = new BN(0, 10)
47+
this.amountMultisig = new BN(0, 10)
4248
}
4349

4450
getAmount(locked: boolean = false): Big {
@@ -58,7 +64,7 @@ class AvaAsset {
5864
}
5965

6066
getTotalAmount(): BN {
61-
return this.amount.add(this.amountLocked).add(this.amountExtra)
67+
return this.amount.add(this.amountLocked).add(this.amountExtra).add(this.amountMultisig)
6268
}
6369

6470
toStringTotal(): string {
@@ -69,12 +75,6 @@ class AvaAsset {
6975
toString() {
7076
let big: Big = Big(this.amount.toString(10)).div(this.pow)
7177
return big.toLocaleString(this.denomination)
72-
// if(big.lt(Big('0.001'))){
73-
// return big.toLocaleString(this.denomination);
74-
// }else{
75-
// let min = Math.min(this.denomination, 2);
76-
// return big.toLocaleString(min);
77-
// }
7878
}
7979
}
8080

0 commit comments

Comments
 (0)