mirror of
https://github.com/haveno-dex/haveno-ts.git
synced 2024-10-01 01:35:42 -04:00
switch to atomic units as native units
This commit is contained in:
parent
05b666d6b9
commit
c376be67e2
@ -156,11 +156,11 @@ const TestConfig = {
|
|||||||
takeOffer: true,
|
takeOffer: true,
|
||||||
awaitFundsToMakeOffer: true,
|
awaitFundsToMakeOffer: true,
|
||||||
direction: "buy", // buy or sell xmr
|
direction: "buy", // buy or sell xmr
|
||||||
amount: BigInt("200000000000"), // amount of xmr to trade
|
amount: BigInt("200000000000"), // amount of xmr to trade (0.2 XMR)
|
||||||
minAmount: undefined,
|
minAmount: undefined,
|
||||||
assetCode: "usd", // counter asset to trade
|
assetCode: "usd", // counter asset to trade
|
||||||
makerPaymentAccountId: undefined,
|
makerPaymentAccountId: undefined,
|
||||||
buyerSecurityDeposit: 0.15,
|
buyerSecurityDepositPct: 0.15,
|
||||||
price: undefined, // use market price if undefined
|
price: undefined, // use market price if undefined
|
||||||
priceMargin: 0.0,
|
priceMargin: 0.0,
|
||||||
triggerPrice: undefined,
|
triggerPrice: undefined,
|
||||||
@ -219,7 +219,7 @@ interface TradeContext {
|
|||||||
amount?: bigint,
|
amount?: bigint,
|
||||||
minAmount?: bigint,
|
minAmount?: bigint,
|
||||||
makerPaymentAccountId?: string,
|
makerPaymentAccountId?: string,
|
||||||
buyerSecurityDeposit?: number,
|
buyerSecurityDepositPct?: number,
|
||||||
price?: number,
|
price?: number,
|
||||||
priceMargin?: number,
|
priceMargin?: number,
|
||||||
triggerPrice?: number,
|
triggerPrice?: number,
|
||||||
@ -1474,7 +1474,7 @@ test("Can resolve disputes (CI)", async () => {
|
|||||||
disputeWinner: DisputeResult.Winner.BUYER,
|
disputeWinner: DisputeResult.Winner.BUYER,
|
||||||
disputeReason: DisputeResult.Reason.SELLER_NOT_RESPONDING,
|
disputeReason: DisputeResult.Reason.SELLER_NOT_RESPONDING,
|
||||||
disputeSummary: "Split trade amount",
|
disputeSummary: "Split trade amount",
|
||||||
disputeWinnerAmount: HavenoUtils.centinerosToAtomicUnits(trade1.getAmountAsLong()) / BigInt(2) + HavenoUtils.centinerosToAtomicUnits(trade1.getBuyerSecurityDeposit())
|
disputeWinnerAmount: BigInt(trade1.getAmountAsLong()) / BigInt(2) + BigInt(trade1.getBuyerSecurityDeposit())
|
||||||
});
|
});
|
||||||
Object.assign(ctxs[2], {
|
Object.assign(ctxs[2], {
|
||||||
resolveDispute: false,
|
resolveDispute: false,
|
||||||
@ -1482,7 +1482,7 @@ test("Can resolve disputes (CI)", async () => {
|
|||||||
disputeWinner: DisputeResult.Winner.SELLER,
|
disputeWinner: DisputeResult.Winner.SELLER,
|
||||||
disputeReason: DisputeResult.Reason.TRADE_ALREADY_SETTLED,
|
disputeReason: DisputeResult.Reason.TRADE_ALREADY_SETTLED,
|
||||||
disputeSummary: "Seller gets everything",
|
disputeSummary: "Seller gets everything",
|
||||||
disputeWinnerAmount: HavenoUtils.centinerosToAtomicUnits(trade2.getAmountAsLong() + trade2.getBuyerSecurityDeposit() + trade2.getSellerSecurityDeposit())
|
disputeWinnerAmount: BigInt(trade2.getAmountAsLong()) + BigInt(trade2.getBuyerSecurityDeposit()) + BigInt(trade2.getSellerSecurityDeposit())
|
||||||
});
|
});
|
||||||
Object.assign(ctxs[3], {
|
Object.assign(ctxs[3], {
|
||||||
resolveDispute: false,
|
resolveDispute: false,
|
||||||
@ -2264,7 +2264,7 @@ async function makeOffer(ctx?: TradeContext): Promise<OfferInfo> {
|
|||||||
ctx.amount!,
|
ctx.amount!,
|
||||||
ctx.assetCode!,
|
ctx.assetCode!,
|
||||||
ctx.makerPaymentAccountId!,
|
ctx.makerPaymentAccountId!,
|
||||||
ctx.buyerSecurityDeposit!,
|
ctx.buyerSecurityDepositPct!,
|
||||||
ctx.price,
|
ctx.price,
|
||||||
ctx.priceMargin,
|
ctx.priceMargin,
|
||||||
ctx.triggerPrice,
|
ctx.triggerPrice,
|
||||||
@ -2507,7 +2507,7 @@ async function resolveDispute(ctx: TradeContext) {
|
|||||||
|
|
||||||
// award too little to loser
|
// award too little to loser
|
||||||
const tradeAmount: bigint = BigInt(ctx.offer!.getAmount());
|
const tradeAmount: bigint = BigInt(ctx.offer!.getAmount());
|
||||||
const customWinnerAmount = tradeAmount + BigInt(ctx.offer!.getBuyerSecurityDeposit() + ctx.offer!.getSellerSecurityDeposit()) - BigInt("10000");
|
const customWinnerAmount = tradeAmount + BigInt(ctx.offer!.getBuyerSecurityDeposit()) + BigInt(ctx.offer!.getSellerSecurityDeposit()) - BigInt("10000");
|
||||||
try {
|
try {
|
||||||
await arbitrator.resolveDispute(ctx.offerId!, ctx.disputeWinner!, ctx.disputeReason!, "Loser gets too little", customWinnerAmount);
|
await arbitrator.resolveDispute(ctx.offerId!, ctx.disputeWinner!, ctx.disputeReason!, "Loser gets too little", customWinnerAmount);
|
||||||
throw new Error("Should have failed resolving dispute with insufficient loser payout");
|
throw new Error("Should have failed resolving dispute with insufficient loser payout");
|
||||||
@ -3261,8 +3261,8 @@ function testOffer(offer: OfferInfo, config?: TradeContext) {
|
|||||||
expect(offer.getId().length).toBeGreaterThan(0);
|
expect(offer.getId().length).toBeGreaterThan(0);
|
||||||
if (config) {
|
if (config) {
|
||||||
expect(BigInt(offer.getAmount())).toEqual(config.amount);
|
expect(BigInt(offer.getAmount())).toEqual(config.amount);
|
||||||
expect(offer.getBuyerSecurityDeposit() / offer.getAmount()).toEqual(config.buyerSecurityDeposit);
|
expect(HavenoUtils.divideBI(BigInt(offer.getBuyerSecurityDeposit()), BigInt(offer.getAmount()))).toEqual(config.buyerSecurityDepositPct);
|
||||||
expect(offer.getSellerSecurityDeposit() / offer.getAmount()).toEqual(config.buyerSecurityDeposit); // TODO: use same config.securityDeposit for buyer and seller?
|
expect(HavenoUtils.divideBI(BigInt(offer.getSellerSecurityDeposit()), BigInt(offer.getAmount()))).toEqual(config.buyerSecurityDepositPct); // TODO: using same security deposit config for buyer and seller
|
||||||
}
|
}
|
||||||
// TODO: test rest of offer
|
// TODO: test rest of offer
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,6 @@ import { PaymentAccountForm, PaymentAccountFormField } from "../protobuf/pb_pb";
|
|||||||
export default class HavenoUtils {
|
export default class HavenoUtils {
|
||||||
|
|
||||||
static logLevel = 0;
|
static logLevel = 0;
|
||||||
static centinerosToAUMultiplier = 10000;
|
|
||||||
static months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
|
static months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
|
||||||
static lastLogTimeMs = 0;
|
static lastLogTimeMs = 0;
|
||||||
|
|
||||||
@ -74,16 +73,6 @@ export default class HavenoUtils {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Convert centineros to atomic units.
|
|
||||||
*
|
|
||||||
* @param {number} centineros - denominates an amount of XMR in centineros
|
|
||||||
* @return {BigInt} the amount denominated in atomic units
|
|
||||||
*/
|
|
||||||
static centinerosToAtomicUnits(centineros: number): bigint {
|
|
||||||
return BigInt(centineros) * BigInt(HavenoUtils.centinerosToAUMultiplier);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Stringify a payment account form.
|
* Stringify a payment account form.
|
||||||
*
|
*
|
||||||
@ -139,4 +128,15 @@ export default class HavenoUtils {
|
|||||||
static async waitFor(durationMs: number) {
|
static async waitFor(durationMs: number) {
|
||||||
return new Promise(function(resolve) { setTimeout(resolve, durationMs); });
|
return new Promise(function(resolve) { setTimeout(resolve, durationMs); });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Divide one bigint by another.
|
||||||
|
*
|
||||||
|
* @param {bigint} a dividend
|
||||||
|
* @param {bigint} b divisor
|
||||||
|
* @returns {number} the result
|
||||||
|
*/
|
||||||
|
static divideBI(a: bigint, b: bigint): number {
|
||||||
|
return Number(a * 100n / b) / 100
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user