Skip to content

Commit 5f9d9da

Browse files
committed
(fix): use lp tokens and fix burns not working correctly
1 parent 56714d3 commit 5f9d9da

File tree

7 files changed

+44
-13
lines changed

7 files changed

+44
-13
lines changed

Diff for: Controllers/Cli/Blockchain.php

+15-3
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ public function uniswap_user()
153153
$username = $this->getOpt('username');
154154
$user = new \Minds\Entities\User($username);
155155
//$address = '0x177fd9efd24535e73b81e99e7f838cdef265e6cb';
156-
$address = strtolower('0x1c4830fD39a9C7B72f0F745Bb16026225744E966');
156+
$address = strtolower('0x678e47Ad94eF3bBBc306374f6418fD6193B179D4');
157157

158158
$uniswap = Di::_()->get('Blockchain\Uniswap\Client');
159159
$response = $uniswap->getUser($address);
@@ -174,18 +174,30 @@ public function uniswap_mints()
174174
public function liquidity_share()
175175
{
176176
$username = $this->getOpt('username');
177-
$user = new \Minds\Entities\User($username);
177+
$user = Di::_()->get('EntitiesBuilder')->getByUserByIndex($username);
178178

179179
$liquidityManager = Di::_()->get('Blockchain\LiquidityPositions\Manager')
180180
->setUser($user);
181181

182182
var_dump($liquidityManager->getLiquidityTokenShare());
183183
}
184184

185+
public function liquidity_summary()
186+
{
187+
$username = $this->getOpt('username');
188+
$user = Di::_()->get('EntitiesBuilder')->getByUserByIndex($username);
189+
190+
$liquidityManager = Di::_()->get('Blockchain\LiquidityPositions\Manager')
191+
->setUser($user)
192+
->setChainId(Util::ETHEREUM_CHAIN_ID);
193+
194+
var_dump($liquidityManager->getSummary());
195+
}
196+
185197
public function liquidity_providers_summaries()
186198
{
187199
$liquidityManager = Di::_()->get('Blockchain\LiquidityPositions\Manager');
188-
$summaries = $liquidityManager->getAllProvidersSummaries();
200+
$summaries = $liquidityManager->setChainId(Util::ETHEREUM_CHAIN_ID)->getAllProvidersSummaries();
189201
var_dump($summaries);
190202
}
191203

Diff for: Core/Blockchain/LiquidityPositions/LiquidityPositionSummary.php

+4
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
* @method self setLiquiditySpotOptOut(bool $optOut)
2525
* @method bool getLiquiditySpotOptOut()
2626
* @method bool isLiquiditySpotOptOut()
27+
* @method self setLpPosition(BigDecimal $lpPosition)
28+
* @method BigDecimal getLpPosition()
2729
*/
2830
class LiquidityPositionSummary
2931
{
@@ -52,6 +54,8 @@ class LiquidityPositionSummary
5254

5355
/** @var LiquidityCurrencyValues */
5456
protected $shareOfLiquidity;
57+
58+
protected BigDecimal $lpPosition;
5559

5660
/** @var bool */
5761
protected $liquiditySpotOptOut = false;

Diff for: Core/Blockchain/LiquidityPositions/Manager.php

+16
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,8 @@ public function getSummary(): LiquidityPositionSummary
148148

149149
$tokenSharePct = $providedLiquidityMINDS->dividedBy($totalLiquidityTokens, null, RoundingMode::FLOOR);
150150

151+
$mintsToLPPosition = BigDecimal::sum(...(array_map([$this, 'uniswapMintsToLPPosition'], $approvedMints) ?: [0]));
152+
$burnsToLPPosition = BigDecimal::sum(...(array_map([$this, 'uniswapMintsToLPPosition'], $approvedBurns) ?: [0]));
151153

152154
//
153155
// Total liquidity
@@ -165,6 +167,9 @@ public function getSummary(): LiquidityPositionSummary
165167
// Share of liquidity
166168
//
167169

170+
// This is the number of LP tokens a user holders. We use this for rewards.
171+
$lpPosition = $mintsToLPPosition->minus($burnsToLPPosition);
172+
168173
$shareOfLiquidityMINDS = $providedLiquidityMINDS->dividedBy($totalLiquidityMINDS, null, RoundingMode::FLOOR);
169174
$shareOfLiquidityUSD = $providedLiquidityUSD->dividedBy($totalLiquidityUSD, null, RoundingMode::FLOOR);
170175

@@ -187,6 +192,7 @@ public function getSummary(): LiquidityPositionSummary
187192
->setUsd($shareOfLiquidityUSD)
188193
->setMinds($shareOfLiquidityMINDS)
189194
)
195+
->setLpPosition($lpPosition)
190196
->setLiquiditySpotOptOut($this->user->isLiquiditySpotOptOut() || count($this->user->getNsfw()));
191197

192198
// How to calculate a multiplier
@@ -299,4 +305,14 @@ private function uniswapMintsToMINDS(UniswapMintEntity $uniswapMint): BigDecimal
299305
// Verifying ->getPair()->getToken0()->getId() should be able to do this?
300306
return $uniswapMint->getAmount0();
301307
}
308+
309+
/**
310+
* To be used by PHP array_map as callback
311+
* @param UniswapMintEntity $uniswapMint
312+
* @return BigDecimal
313+
*/
314+
private function uniswapMintsToLPPosition(UniswapMintEntity $uniswapMint): BigDecimal
315+
{
316+
return $uniswapMint->getLiquidity();
317+
}
302318
}

Diff for: Core/Blockchain/Uniswap/Client.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ public function getUser(string $id, int $asOf = null): UniswapUserEntity
7070
reserveUSD
7171
}
7272
}
73-
burns(where: { to: $id}) {
73+
burns(where: { sender: $id}) {
7474
id
7575
to
7676
amount0

Diff for: Core/Rewards/Manager.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ public function calculate(RewardsQueryOpts $opts = null): void
239239
$liquidityScores[$liquiditySummary->getUserGuid()] = BigDecimal::of(0);
240240
}
241241

242-
$liquidityScores[$liquiditySummary->getUserGuid()] = $liquidityScores[$liquiditySummary->getUserGuid()]->plus($liquiditySummary->getProvidedLiquidity()->getUsd());
242+
$liquidityScores[$liquiditySummary->getUserGuid()] = $liquidityScores[$liquiditySummary->getUserGuid()]->plus($liquiditySummary->getLpPosition());
243243
}
244244
}
245245

Diff for: Spec/Core/Blockchain/LiquidityPositions/ManagerSpec.php

+3
Original file line numberDiff line numberDiff line change
@@ -96,11 +96,13 @@ public function it_should_return_liquidity_share(User $user)
9696
// so we calculate a 100% yield
9797
$uniswapUser->setMints([
9898
(new UniswapMintEntity()) // 20% of pool
99+
->setLiquidity(BigDecimal::of(0.5))
99100
->setAmount0(BigDecimal::of(0.25))
100101
->setAmount1(BigDecimal::of(0.5))
101102
->setAmountUSD(BigDecimal::of(0.5))
102103
->setPair($pairs[0]),
103104
(new UniswapMintEntity()) // 5% of pool
105+
->setLiquidity(BigDecimal::of(0.5))
104106
->setAmount0(BigDecimal::of(0.125)) // 50% of 0.5 (the pair2 amount)
105107
->setAmount1(BigDecimal::of(0.25))
106108
->setAmountUSD(BigDecimal::of(0.25))
@@ -110,6 +112,7 @@ public function it_should_return_liquidity_share(User $user)
110112
// We burn 5% of our initially provided supply, giving us 20% in total
111113
$uniswapUser->setBurns([
112114
(new UniswapBurnEntity()) // 5% of pool
115+
->setLiquidity(BigDecimal::of(0.5))
113116
->setAmount0(BigDecimal::of(0.125)) // 50% of 0.5 (the pair2 amount)
114117
->setAmount1(BigDecimal::of(0.25))
115118
->setAmountUSD(BigDecimal::of(0.25))

Diff for: Spec/Core/Rewards/ManagerSpec.php

+4-8
Original file line numberDiff line numberDiff line change
@@ -144,10 +144,8 @@ public function it_should_calculate_rewards()
144144
->willReturn([
145145
(new LiquidityPositionSummary())
146146
->setUserGuid('123')
147-
->setProvidedLiquidity(
148-
(new LiquidityCurrencyValues())
149-
->setUsd(BigDecimal::of(10))
150-
->setMinds(BigDecimal::of(10))
147+
->setLpPosition(
148+
BigDecimal::of(10)
151149
),
152150
]);
153151

@@ -240,10 +238,8 @@ public function it_should_calculate_holding_rewards_when_balance_already_populat
240238
->willReturn([
241239
(new LiquidityPositionSummary())
242240
->setUserGuid('123')
243-
->setProvidedLiquidity(
244-
(new LiquidityCurrencyValues())
245-
->setUsd(BigDecimal::of(10))
246-
->setMinds(BigDecimal::of(10))
241+
->setLpPosition(
242+
BigDecimal::of(10)
247243
),
248244
]);
249245

0 commit comments

Comments
 (0)