Ran forge fmt + solved client bug with amounts being much too high due to change in contract calculations
This commit is contained in:
parent
a5f1bc7a57
commit
7a32129f7e
@ -8,14 +8,12 @@ const calculateBalance = (balance: bigint, perSecond: bigint, lastRaidedAt: bigi
|
|||||||
(new Date()).getTime() - parseInt(lastRaidedAt.toString()) * 1000;
|
(new Date()).getTime() - parseInt(lastRaidedAt.toString()) * 1000;
|
||||||
return (
|
return (
|
||||||
balance +
|
balance +
|
||||||
(BigInt(millisecondsSinceLastRaid) * (perSecond * BigInt(10000) /* decimals */)
|
(BigInt(millisecondsSinceLastRaid) * perSecond
|
||||||
/ BigInt(1000) /* deduct milliseconds*/))
|
/ BigInt(1000) /* deduct milliseconds*/))
|
||||||
}
|
}
|
||||||
|
|
||||||
export const toReadable = (value: bigint, applyTokenDivision?: boolean) => {
|
export const toReadable = (value: bigint) => {
|
||||||
if (applyTokenDivision) {
|
|
||||||
value = value / BigInt(10000);
|
value = value / BigInt(10000);
|
||||||
}
|
|
||||||
const suffixes = [
|
const suffixes = [
|
||||||
{ value: BigInt('1000'), suffix: 'thousand' },
|
{ value: BigInt('1000'), suffix: 'thousand' },
|
||||||
{ value: BigInt('1000000'), suffix: 'million' },
|
{ value: BigInt('1000000'), suffix: 'million' },
|
||||||
@ -64,8 +62,8 @@ const Counter = () => {
|
|||||||
balance,
|
balance,
|
||||||
army?.profit_per_second ?? BigInt(0),
|
army?.profit_per_second ?? BigInt(0),
|
||||||
player?.last_raided_at ?? BigInt(0)
|
player?.last_raided_at ?? BigInt(0)
|
||||||
), true);
|
));
|
||||||
availableBalance.current = toReadable(balance, true);
|
availableBalance.current = toReadable(balance);
|
||||||
render();
|
render();
|
||||||
}, 100);
|
}, 100);
|
||||||
return () => clearInterval(tickInterval)
|
return () => clearInterval(tickInterval)
|
||||||
|
|||||||
@ -91,7 +91,7 @@ const PlayerProvider = ({ children }: { children: ReactNode }) => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log(player)
|
console.log(player, army)
|
||||||
|
|
||||||
const register = useCallback(() => {
|
const register = useCallback(() => {
|
||||||
writeContract({
|
writeContract({
|
||||||
|
|||||||
@ -1,8 +1,6 @@
|
|||||||
// SPDX-License-Identifier: MIT
|
// SPDX-License-Identifier: MIT
|
||||||
pragma solidity ^0.8.13;
|
pragma solidity ^0.8.13;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
struct Raider {
|
struct Raider {
|
||||||
uint16 level;
|
uint16 level;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,16 +4,13 @@ pragma solidity ^0.8.13;
|
|||||||
import {Army} from "../src/RaidGeldStructs.sol";
|
import {Army} from "../src/RaidGeldStructs.sol";
|
||||||
|
|
||||||
library RaidGeldUtils {
|
library RaidGeldUtils {
|
||||||
|
|
||||||
uint256 public constant PRECISION = 10000;
|
uint256 public constant PRECISION = 10000;
|
||||||
|
|
||||||
uint256 constant BASE_PRICE = 380000;
|
uint256 constant BASE_PRICE = 380000;
|
||||||
uint256 constant PRICE_FACTOR = 11500;
|
uint256 constant PRICE_FACTOR = 11500;
|
||||||
uint256 constant APPRENTICE_PROFIT = 61000;
|
uint256 constant APPRENTICE_PROFIT = 61000;
|
||||||
uint256 constant ANOINTED_PROFIT = 6 * 64000;
|
uint256 constant ANOINTED_PROFIT = 6 * 64000;
|
||||||
uint256 constant CHAMPION_PROFIT = 67000 * 61000 * 64000 / PRECISION / PRECISION;
|
uint256 constant CHAMPION_PROFIT = 67000 * 61000 * 64000 / PRECISION / PRECISION;
|
||||||
|
|
||||||
|
|
||||||
function calculateUnitPrice(uint8 unit, uint16 currentLevel, uint16 units) internal pure returns (uint256) {
|
function calculateUnitPrice(uint8 unit, uint16 currentLevel, uint16 units) internal pure returns (uint256) {
|
||||||
require(unit <= 3, "No matching unit found");
|
require(unit <= 3, "No matching unit found");
|
||||||
|
|
||||||
|
|||||||
@ -6,7 +6,7 @@ import {Army, Raider} from "../src/RaidGeld.sol";
|
|||||||
import "../src/RaidGeldUtils.sol";
|
import "../src/RaidGeldUtils.sol";
|
||||||
|
|
||||||
contract raid_geldTest is Test {
|
contract raid_geldTest is Test {
|
||||||
function test_0_unit_price() pure public {
|
function test_0_unit_price() public pure {
|
||||||
// buying 1 unit of moloch_denier
|
// buying 1 unit of moloch_denier
|
||||||
uint256 basePriceMolochDenier = RaidGeldUtils.calculateUnitPrice(0, 0, 1);
|
uint256 basePriceMolochDenier = RaidGeldUtils.calculateUnitPrice(0, 0, 1);
|
||||||
assertEq(basePriceMolochDenier, RaidGeldUtils.BASE_PRICE);
|
assertEq(basePriceMolochDenier, RaidGeldUtils.BASE_PRICE);
|
||||||
@ -47,11 +47,8 @@ contract raid_geldTest is Test {
|
|||||||
profit_per_second: 0 // irrelevant for this test
|
profit_per_second: 0 // irrelevant for this test
|
||||||
});
|
});
|
||||||
profits_per_second = RaidGeldUtils.calculateProfitsPerSecond(army);
|
profits_per_second = RaidGeldUtils.calculateProfitsPerSecond(army);
|
||||||
uint256 expected =
|
uint256 expected = _dLvl * RaidGeldUtils.PRECISION + _apLvl * RaidGeldUtils.APPRENTICE_PROFIT
|
||||||
_dLvl * RaidGeldUtils.PRECISION +
|
+ _anLvl * RaidGeldUtils.ANOINTED_PROFIT + _cLvl * RaidGeldUtils.CHAMPION_PROFIT;
|
||||||
_apLvl * RaidGeldUtils.APPRENTICE_PROFIT +
|
|
||||||
_anLvl * RaidGeldUtils.ANOINTED_PROFIT +
|
|
||||||
_cLvl * RaidGeldUtils.CHAMPION_PROFIT;
|
|
||||||
assertEq(profits_per_second, expected);
|
assertEq(profits_per_second, expected);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user