Skip to content

Commit 2ebc64a

Browse files
authored
Merge pull request #36 from mars-protocol/v1.5.3
V1.5.3
2 parents 397a1bf + 44133f7 commit 2ebc64a

File tree

11 files changed

+83
-58
lines changed

11 files changed

+83
-58
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "mars",
33
"homepage": "./",
4-
"version": "1.5.1",
4+
"version": "1.5.3",
55
"license": "SEE LICENSE IN LICENSE FILE",
66
"private": false,
77
"scripts": {

src/components/common/Footer/Footer.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ export const Footer = () => {
8282
</a>
8383
<a
8484
className={styles.item}
85-
href={DocURL.TERMS_OF_SERVICE_URL}
85+
href={DocURL.TERMS_OF_SERVICE}
8686
rel='noopener noreferrer'
8787
target='_blank'
8888
title={t('global.termsOfService')}
@@ -91,7 +91,7 @@ export const Footer = () => {
9191
</a>
9292
<a
9393
className={styles.item}
94-
href={DocURL.COOKIE_POLICY_URL}
94+
href={DocURL.COOKIE_POLICY}
9595
rel='noopener noreferrer'
9696
target='_blank'
9797
title={t('global.cookiePolicy')}
@@ -100,7 +100,7 @@ export const Footer = () => {
100100
</a>
101101
<a
102102
className={styles.item}
103-
href={DocURL.PRIVACY_POLICY_URL}
103+
href={DocURL.PRIVACY_POLICY}
104104
rel='noopener noreferrer'
105105
target='_blank'
106106
title={t('global.privacyPolicy')}

src/components/common/TermsOfService/TermsOfService.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ export const TermsOfService = () => {
2929
Please check the boxes below to confirm your agreement to the{' '}
3030
</span>
3131
<a
32-
href={DocURL.TERMS_OF_SERVICE_URL}
32+
href={DocURL.TERMS_OF_SERVICE}
3333
rel='noreferrer'
3434
target='_blank'
3535
className={classNames('xs')}

src/constants/appConstants.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
import { ChainInfoID } from '@marsprotocol/wallet-connector'
22

3-
/* cosmos:network */
4-
export const FORUM_URL = 'https://forum.marsprotocol.io/'
5-
63
/* asset:unit */
74
export const MARS_SYMBOL = 'MARS'
85
export const MARS_DECIMALS = 6

src/functions/fields/getClosePositionActions.ts

Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1+
import BigNumber from 'bignumber.js'
12
import { Action, ActionAmount } from 'types/generated/mars-credit-manager/MarsCreditManager.types'
23

34
export const getClosePositionActions = (
45
vault: ActiveVault,
5-
exchangeRate: number,
6+
primaryToSecondaryRate: number,
67
slippage: number,
78
): Action[] => {
89
const swapMessage: Action[] = []
@@ -12,20 +13,33 @@ export const getClosePositionActions = (
1213
Math.max(vault.position.amounts.borrowedPrimary, vault.position.amounts.borrowedSecondary) *
1314
1.001,
1415
)
15-
const secondaryAmount = vault.position.amounts.lp.secondary
16+
const borrowType =
17+
vault.position.amounts.borrowedPrimary > vault.position.amounts.borrowedSecondary
18+
? 'primary'
19+
: 'secondary'
20+
21+
const availableAmountForRepay = vault.position.amounts.lp[borrowType]
22+
23+
if (availableAmountForRepay < borrowAmount) {
24+
const swapTargetAmount = borrowAmount - availableAmountForRepay
25+
const exchangeRate =
26+
borrowType === 'secondary'
27+
? new BigNumber(1).div(primaryToSecondaryRate)
28+
: new BigNumber(primaryToSecondaryRate)
29+
const swapAmount = Math.max(
30+
exchangeRate.times(swapTargetAmount).integerValue(BigNumber.ROUND_CEIL).toNumber(),
31+
10,
32+
)
1633

17-
if (secondaryAmount < borrowAmount) {
18-
const swapTargetAmount = borrowAmount - secondaryAmount
19-
const swapAmount = Math.max(Math.ceil(swapTargetAmount / exchangeRate), 10)
2034
swapMessage.push({
2135
swap_exact_in: {
2236
coin_in: {
2337
amount: {
2438
exact: swapAmount.toString(),
2539
},
26-
denom: vault.denoms.primary,
40+
denom: borrowType === 'secondary' ? vault.denoms.primary : vault.denoms.secondary,
2741
},
28-
denom_out: vault.denoms.secondary,
42+
denom_out: vault.denoms[borrowType],
2943
slippage: slippage.toString(),
3044
},
3145
})

src/hooks/queries/useClosePosition.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@ export const useClosePosition = (props: Props) => {
1515

1616
const actions = useMemo(() => {
1717
if (!props.activeVault) return []
18-
const exchangeRate = getExchangeRate(
18+
const primaryToSecondaryRate = getExchangeRate(
1919
props.activeVault.denoms.primary,
2020
props.activeVault.denoms.secondary,
2121
)
22-
return getClosePositionActions(props.activeVault, exchangeRate, slippage)
22+
return getClosePositionActions(props.activeVault, primaryToSecondaryRate, slippage)
2323
}, [props.activeVault, getExchangeRate, slippage])
2424

2525
const { data: fee } = useEstimateFarmFee({

src/hooks/queries/useEditPosition.tsx

Lines changed: 37 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -23,24 +23,26 @@ export const useEditPosition = (props: Props) => {
2323
const slippage = useStore((s) => s.slippage)
2424

2525
const [editPosition, coinsAfterSwap] = useMemo<[Position, Coin[]]>(() => {
26-
const primaryAmount =
27-
props.position.amounts.primary - (props.prevPosition?.amounts.primary || 0)
28-
const secondaryAmount =
29-
props.position.amounts.secondary - (props.prevPosition?.amounts.secondary || 0)
30-
const borrowedPrimaryAmount =
31-
props.position.amounts.borrowedPrimary - (props.prevPosition?.amounts.borrowedPrimary || 0)
32-
33-
const borrowedSecondaryAmount =
34-
props.position.amounts.borrowedSecondary -
35-
(props.prevPosition?.amounts.borrowedSecondary || 0)
26+
const primaryAmount = new BigNumber(props.position.amounts.primary)
27+
.minus(props.prevPosition?.amounts.primary || 0)
28+
.integerValue(BigNumber.ROUND_CEIL)
29+
const secondaryAmount = new BigNumber(props.position.amounts.secondary)
30+
.minus(props.prevPosition?.amounts.secondary || 0)
31+
.integerValue(BigNumber.ROUND_CEIL)
32+
const borrowedPrimaryAmount = new BigNumber(props.position.amounts.borrowedPrimary)
33+
.minus(props.prevPosition?.amounts.borrowedPrimary || 0)
34+
.integerValue(BigNumber.ROUND_CEIL)
35+
const borrowedSecondaryAmount = new BigNumber(props.position.amounts.borrowedSecondary)
36+
.minus(props.prevPosition?.amounts.borrowedSecondary || 0)
37+
.integerValue(BigNumber.ROUND_CEIL)
3638

3739
const editPosition = {
3840
...props.position,
3941
amounts: {
40-
primary: primaryAmount,
41-
secondary: secondaryAmount,
42-
borrowedPrimary: borrowedPrimaryAmount,
43-
borrowedSecondary: borrowedSecondaryAmount,
42+
primary: primaryAmount.toNumber(),
43+
secondary: secondaryAmount.toNumber(),
44+
borrowedPrimary: borrowedPrimaryAmount.toNumber(),
45+
borrowedSecondary: borrowedSecondaryAmount.toNumber(),
4446
lp: {
4547
amount: '0',
4648
primary: 0,
@@ -52,11 +54,11 @@ export const useEditPosition = (props: Props) => {
5254

5355
const primaryBaseAmount = convertToBaseCurrency({
5456
denom: props.vault.denoms.primary,
55-
amount: (primaryAmount + borrowedPrimaryAmount).toString(),
57+
amount: primaryAmount.plus(borrowedPrimaryAmount).toString(),
5658
})
5759
const secondaryBaseAmount = convertToBaseCurrency({
5860
denom: props.vault.denoms.secondary,
59-
amount: (secondaryAmount + borrowedSecondaryAmount).toString(),
61+
amount: secondaryAmount.plus(borrowedSecondaryAmount).toString(),
6062
})
6163

6264
let primaryAfterSwap = new BigNumber(primaryAmount).plus(borrowedPrimaryAmount)
@@ -71,7 +73,7 @@ export const useEditPosition = (props: Props) => {
7173
const amount = Math.floor(
7274
convertValueToAmount({
7375
denom: props.vault.denoms[swapTarget],
74-
amount: inputAmount.toString(),
76+
amount: new BigNumber(inputAmount).toString(),
7577
}),
7678
)
7779

@@ -126,12 +128,12 @@ export const useEditPosition = (props: Props) => {
126128

127129
const primary = editPosition.amounts.primary && {
128130
denom: props.vault.denoms.primary,
129-
amount: editPosition.amounts.primary.toString(),
131+
amount: new BigNumber(editPosition.amounts.primary).toString(),
130132
}
131133

132134
const secondary = editPosition.amounts.secondary && {
133135
denom: props.vault.denoms.secondary,
134-
amount: editPosition.amounts.secondary.toString(),
136+
amount: new BigNumber(editPosition.amounts.secondary).toString(),
135137
}
136138

137139
const borrow = editPosition.borrowDenom && {
@@ -148,12 +150,16 @@ export const useEditPosition = (props: Props) => {
148150

149151
const primaryBaseAmount = convertToBaseCurrency({
150152
denom: props.vault.denoms.primary,
151-
amount: (editPosition.amounts.primary + editPosition.amounts.borrowedPrimary).toString(),
153+
amount: new BigNumber(editPosition.amounts.primary)
154+
.plus(editPosition.amounts.borrowedPrimary)
155+
.toString(),
152156
})
153157

154158
const secondaryBaseAmount = convertToBaseCurrency({
155159
denom: props.vault.denoms.secondary,
156-
amount: (editPosition.amounts.secondary + editPosition.amounts.borrowedSecondary).toString(),
160+
amount: new BigNumber(editPosition.amounts.secondary)
161+
.plus(editPosition.amounts.borrowedSecondary)
162+
.toString(),
157163
})
158164

159165
const swapMessage: Action[] = []
@@ -164,15 +170,21 @@ export const useEditPosition = (props: Props) => {
164170
if (Math.abs(difference) > SWAP_THRESHOLD) {
165171
const inputDenom = difference > 0 ? props.vault.denoms.primary : props.vault.denoms.secondary
166172
const outputDenom = difference < 0 ? props.vault.denoms.primary : props.vault.denoms.secondary
167-
const amount = new BigNumber(difference).abs().div(2).toString()
168-
const swapAmount = Math.ceil(convertValueToAmount({ denom: inputDenom, amount: amount }))
173+
const amount = new BigNumber(difference)
174+
.abs()
175+
.div(2)
176+
.integerValue(BigNumber.ROUND_CEIL)
177+
.toString()
178+
const swapAmount = new BigNumber(
179+
Math.ceil(convertValueToAmount({ denom: inputDenom, amount: amount })),
180+
).toString()
169181

170182
swapMessage.push({
171183
swap_exact_in: {
172184
coin_in: {
173185
denom: inputDenom,
174186
amount: {
175-
exact: swapAmount.toString(),
187+
exact: swapAmount,
176188
},
177189
},
178190
denom_out: outputDenom,
@@ -184,7 +196,7 @@ export const useEditPosition = (props: Props) => {
184196
BigNumber.config({ EXPONENTIAL_AT: [-7, 30] })
185197
const minimumReceive = new BigNumber(minLpToReceive)
186198
.times(1 - slippage)
187-
.dp(0)
199+
.integerValue(BigNumber.ROUND_CEIL)
188200
.toString()
189201

190202
const actions: Action[] = [

src/libs/council.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,18 @@ export function getCouncilLink(currentNetwork: ChainInfoID, currentProvider?: Wa
66
const isTestnet =
77
SUPPORTED_CHAINS.find((chain) => chain.chainId === currentNetwork)?.type === 'testnet'
88

9-
if (isTestnet) return DocURL.COUNCIL_TESTNET_URL
9+
if (isTestnet) return DocURL.COUNCIL_TESTNET
1010

11-
if (!currentProvider) return DocURL.COUNCIL_URL
11+
if (!currentProvider) return DocURL.COUNCIL
1212

1313
switch (currentProvider) {
1414
case WalletID.Leap:
15-
return DocURL.COUNCIL_LEAP_URL
15+
return DocURL.COUNCIL_LEAP
1616

1717
case WalletID.StationWallet || WalletID.StationWalletMobile:
18-
return DocURL.COUNCIL_STATION_URL
18+
return DocURL.COUNCIL_STATION
1919

2020
default:
21-
return DocURL.COUNCIL_KEPLR_URL
21+
return DocURL.COUNCIL_KEPLR
2222
}
2323
}

src/pages/farm/vault/[address]/account/[id]/unlock/index.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { useUpdateAccount } from 'hooks/mutations'
66
import { useRequestUnlockPosition } from 'hooks/queries/useRequestUnlockPosition'
77
import { useRouter } from 'next/router'
88
import { useTranslation } from 'react-i18next'
9+
import { DocURL } from 'types/enums/docURL'
910

1011
import styles from './UnlockDisclaimer.module.scss'
1112

@@ -59,7 +60,7 @@ const Unlock = () => {
5960
<p className={`${styles.title} xxlCaps`}>{t('fields.disclaimers.unlock.title')}</p>
6061
<p>
6162
{t('fields.disclaimers.unlock.description')}{' '}
62-
<a href='' rel='noreferrer' target='_blank'>
63+
<a href={DocURL.UNLOCK_POSITION} rel='noreferrer' target='_blank'>
6364
{t('common.learnMore')}
6465
</a>
6566
</p>

src/styles/_master.scss

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -633,8 +633,8 @@ $borderRadiusRound: 50%;
633633
/* Dimensions */
634634
$headerHeight: rem-calc(86);
635635
$mobileNavHeight: rem-calc(64);
636-
$footerHeight: rem-calc(300);
637-
$footerHeightMedium: rem-calc(300);
636+
$footerHeight: rem-calc(380);
637+
$footerHeightMedium: rem-calc(380);
638638
$footerHeightSmall: rem-calc(800);
639639
$contentWidth: 1248px;
640640

src/types/enums/docURL.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
export enum DocURL {
2-
COOKIE_POLICY_URL = 'https://docs.marsprotocol.io/docs/overview/legal/cookie-policy',
3-
COUNCIL_URL = 'https://council.marsprotocol.io',
4-
COUNCIL_LEAP_URL = 'https://cosmos.leapwallet.io/chains/mars/governance',
5-
COUNCIL_STATION_URL = 'https://station.terra.money/gov#PROPOSAL_STATUS_VOTING_PERIOD',
6-
COUNCIL_TESTNET_URL = 'https://testnet.keplr.app/chains/mars-hub-testnet',
7-
COUNCIL_KEPLR_URL = 'https://wallet.keplr.app/chains/mars-hub',
2+
COOKIE_POLICY = 'https://docs.marsprotocol.io/docs/overview/legal/cookie-policy',
3+
COUNCIL = 'https://council.marsprotocol.io',
4+
COUNCIL_LEAP = 'https://cosmos.leapwallet.io/chains/mars/governance',
5+
COUNCIL_STATION = 'https://station.terra.money/gov#PROPOSAL_STATUS_VOTING_PERIOD',
6+
COUNCIL_TESTNET = 'https://testnet.keplr.app/chains/mars-hub-testnet',
7+
COUNCIL_KEPLR = 'https://wallet.keplr.app/chains/mars-hub',
88
FIELDS = 'https://docs.marsprotocol.io/docs/learn/rover/rover-intro',
99
LANDING = 'https://docs.marsprotocol.io/',
10-
PRIVACY_POLICY_URL = 'https://docs.marsprotocol.io/docs/overview/legal/privacy-policy',
10+
PRIVACY_POLICY = 'https://docs.marsprotocol.io/docs/overview/legal/privacy-policy',
1111
RED_BANK = 'https://docs.marsprotocol.io/docs/learn/red-bank/red-bank-intro',
1212
RED_BANK_LIQUIDATIONS = 'https://docs.marsprotocol.io/docs/learn/red-bank/red-bank-liquidations',
1313
SECURITY = 'https://docs.marsprotocol.io/docs/overview/security/audits',
14-
TERMS_OF_SERVICE_URL = 'https://docs.marsprotocol.io/docs/overview/legal/terms-of-service',
14+
TERMS_OF_SERVICE = 'https://docs.marsprotocol.io/docs/overview/legal/terms-of-service',
15+
UNLOCK_POSITION = 'https://docs.marsprotocol.io/docs/learn/workstation/vaults/unlocking',
1516
}

0 commit comments

Comments
 (0)