1
1
import * as AUCT from 'types/generated/auctioneerrpc/auctioneer_pb' ;
2
2
import * as POOL from 'types/generated/trader_pb' ;
3
3
import { Trader } from 'types/generated/trader_pb_service' ;
4
+ import Big from 'big.js' ;
4
5
import { b64 } from 'util/strings' ;
5
6
import { OrderType , Tier } from 'store/models/order' ;
6
7
import BaseApi from './base' ;
@@ -43,11 +44,11 @@ class PoolApi extends BaseApi<PoolEvents> {
43
44
* call the pool `QuoteAccount` RPC and return the response
44
45
*/
45
46
async quoteAccount (
46
- amount : number ,
47
+ amount : Big ,
47
48
confTarget : number ,
48
49
) : Promise < POOL . QuoteAccountResponse . AsObject > {
49
50
const req = new POOL . QuoteAccountRequest ( ) ;
50
- req . setAccountValue ( amount ) ;
51
+ req . setAccountValue ( amount . toString ( ) ) ;
51
52
req . setConfTarget ( confTarget ) ;
52
53
const res = await this . _grpc . request ( Trader . QuoteAccount , req , this . _meta ) ;
53
54
return res . toObject ( ) ;
@@ -57,12 +58,12 @@ class PoolApi extends BaseApi<PoolEvents> {
57
58
* call the pool `InitAccount` RPC and return the response
58
59
*/
59
60
async initAccount (
60
- amount : number ,
61
+ amount : Big ,
61
62
expiryBlocks : number ,
62
63
confTarget = 6 ,
63
64
) : Promise < POOL . Account . AsObject > {
64
65
const req = new POOL . InitAccountRequest ( ) ;
65
- req . setAccountValue ( amount ) ;
66
+ req . setAccountValue ( amount . toString ( ) ) ;
66
67
req . setRelativeHeight ( expiryBlocks ) ;
67
68
req . setConfTarget ( confTarget ) ;
68
69
req . setInitiator ( POOL_INITIATOR ) ;
@@ -76,12 +77,12 @@ class PoolApi extends BaseApi<PoolEvents> {
76
77
async renewAccount (
77
78
traderKey : string ,
78
79
expiryBlocks : number ,
79
- feeRateSatPerKw : number ,
80
+ feeRateSatPerKw : Big ,
80
81
) : Promise < POOL . RenewAccountResponse . AsObject > {
81
82
const req = new POOL . RenewAccountRequest ( ) ;
82
83
req . setAccountKey ( b64 ( traderKey ) ) ;
83
84
req . setRelativeExpiry ( expiryBlocks ) ;
84
- req . setFeeRateSatPerKw ( feeRateSatPerKw ) ;
85
+ req . setFeeRateSatPerKw ( feeRateSatPerKw . toString ( ) ) ;
85
86
86
87
const res = await this . _grpc . request ( Trader . RenewAccount , req , this . _meta ) ;
87
88
return res . toObject ( ) ;
@@ -99,7 +100,7 @@ class PoolApi extends BaseApi<PoolEvents> {
99
100
req . setTraderKey ( b64 ( traderKey ) ) ;
100
101
101
102
const output = new POOL . OutputWithFee ( ) ;
102
- output . setFeeRateSatPerKw ( feeRateSatPerKw ) ;
103
+ output . setFeeRateSatPerKw ( feeRateSatPerKw . toString ( ) ) ;
103
104
if ( destinationAddr ) {
104
105
output . setAddress ( destinationAddr ) ;
105
106
}
@@ -123,13 +124,13 @@ class PoolApi extends BaseApi<PoolEvents> {
123
124
*/
124
125
async deposit (
125
126
traderKey : string ,
126
- amount : number ,
127
+ amount : Big ,
127
128
feeRateSatPerKw = 253 ,
128
129
) : Promise < POOL . DepositAccountResponse . AsObject > {
129
130
const req = new POOL . DepositAccountRequest ( ) ;
130
131
req . setTraderKey ( Buffer . from ( traderKey , 'hex' ) . toString ( 'base64' ) ) ;
131
- req . setAmountSat ( amount ) ;
132
- req . setFeeRateSatPerKw ( feeRateSatPerKw ) ;
132
+ req . setAmountSat ( amount . toString ( ) ) ;
133
+ req . setFeeRateSatPerKw ( feeRateSatPerKw . toString ( ) ) ;
133
134
const res = await this . _grpc . request ( Trader . DepositAccount , req , this . _meta ) ;
134
135
return res . toObject ( ) ;
135
136
}
@@ -139,14 +140,14 @@ class PoolApi extends BaseApi<PoolEvents> {
139
140
*/
140
141
async withdraw (
141
142
traderKey : string ,
142
- amount : number ,
143
+ amount : Big ,
143
144
feeRateSatPerKw = 253 ,
144
145
) : Promise < POOL . WithdrawAccountResponse . AsObject > {
145
146
const req = new POOL . WithdrawAccountRequest ( ) ;
146
147
req . setTraderKey ( Buffer . from ( traderKey , 'hex' ) . toString ( 'base64' ) ) ;
147
- req . setFeeRateSatPerKw ( feeRateSatPerKw ) ;
148
+ req . setFeeRateSatPerKw ( feeRateSatPerKw . toString ( ) ) ;
148
149
const output = new POOL . Output ( ) ;
149
- output . setValueSat ( amount ) ;
150
+ output . setValueSat ( amount . toString ( ) ) ;
150
151
req . setOutputsList ( [ output ] ) ;
151
152
const res = await this . _grpc . request ( Trader . WithdrawAccount , req , this . _meta ) ;
152
153
return res . toObject ( ) ;
@@ -165,18 +166,18 @@ class PoolApi extends BaseApi<PoolEvents> {
165
166
* call the pool `QuoteOrder` RPC and return the response
166
167
*/
167
168
async quoteOrder (
168
- amount : number ,
169
+ amount : Big ,
169
170
rateFixed : number ,
170
171
duration : number ,
171
172
minUnitsMatch : number ,
172
- feeRateSatPerKw : number ,
173
+ feeRateSatPerKw = 253 ,
173
174
) : Promise < POOL . QuoteOrderResponse . AsObject > {
174
175
const req = new POOL . QuoteOrderRequest ( ) ;
175
- req . setAmt ( amount ) ;
176
+ req . setAmt ( amount . toString ( ) ) ;
176
177
req . setRateFixed ( rateFixed ) ;
177
178
req . setLeaseDurationBlocks ( duration ) ;
178
179
req . setMinUnitsMatch ( minUnitsMatch ) ;
179
- req . setMaxBatchFeeRateSatPerKw ( feeRateSatPerKw ) ;
180
+ req . setMaxBatchFeeRateSatPerKw ( feeRateSatPerKw . toString ( ) ) ;
180
181
181
182
const res = await this . _grpc . request ( Trader . QuoteOrder , req , this . _meta ) ;
182
183
return res . toObject ( ) ;
@@ -188,11 +189,11 @@ class PoolApi extends BaseApi<PoolEvents> {
188
189
async submitOrder (
189
190
traderKey : string ,
190
191
type : OrderType ,
191
- amount : number ,
192
+ amount : Big ,
192
193
rateFixed : number ,
193
194
duration : number ,
194
195
minUnitsMatch : number ,
195
- feeRateSatPerKw : number ,
196
+ feeRateSatPerKw = 253 ,
196
197
minNodeTier ?: Tier ,
197
198
) : Promise < POOL . SubmitOrderResponse . AsObject > {
198
199
if ( rateFixed < 1 ) {
@@ -204,10 +205,10 @@ class PoolApi extends BaseApi<PoolEvents> {
204
205
205
206
const order = new POOL . Order ( ) ;
206
207
order . setTraderKey ( b64 ( traderKey ) ) ;
207
- order . setAmt ( amount ) ;
208
+ order . setAmt ( amount . toString ( ) ) ;
208
209
order . setRateFixed ( rateFixed ) ;
209
210
order . setMinUnitsMatch ( minUnitsMatch ) ;
210
- order . setMaxBatchFeeRateSatPerKw ( feeRateSatPerKw ) ;
211
+ order . setMaxBatchFeeRateSatPerKw ( feeRateSatPerKw . toString ( ) ) ;
211
212
212
213
switch ( type ) {
213
214
case OrderType . Bid :
@@ -324,36 +325,37 @@ class PoolApi extends BaseApi<PoolEvents> {
324
325
* Converts from sats per kilo-weight to sats per vByte
325
326
* @param satsPerVByte the number of sats per kilo-weight
326
327
*/
327
- satsPerKWeightToVByte ( satsPerKWeight : number ) {
328
+ satsPerKWeightToVByte ( satsPerKWeight : Big ) {
328
329
// convert to kilo-vbyte
329
- const satsPerKVByte = satsPerKWeight * 4 ;
330
+ const satsPerKVByte = satsPerKWeight . mul ( 4 ) ;
330
331
// convert to vbyte
331
- return satsPerKVByte / 1000 ;
332
+ return satsPerKVByte . div ( 1000 ) ;
332
333
}
333
334
334
335
/**
335
336
* Calculates the per block fixed rate given an amount and premium
336
337
* @param amount the amount of the order
337
338
* @param premium the premium being paid
339
+ * @param duration the lease duration in blocks
338
340
*/
339
- calcFixedRate ( amount : number , premium : number , duration : number ) {
340
- const ratePct = ( premium * 100 ) / amount ;
341
+ calcFixedRate ( amount : Big , premium : Big , duration : number ) {
342
+ const ratePct = premium . mul ( 100 ) . div ( amount ) ;
341
343
// rate = % / 100
342
344
// rate = rateFixed / totalParts
343
345
// rateFixed = rate * totalParts
344
- const interestRate = ratePct / 100 ;
345
- const rateFixedFloat = interestRate * FEE_RATE_TOTAL_PARTS ;
346
+ const interestRate = ratePct . div ( 100 ) ;
347
+ const rateFixedFloat = interestRate . mul ( FEE_RATE_TOTAL_PARTS ) ;
346
348
// We then take this rate fixed, and divide it by the number of blocks
347
349
// as the user wants this rate to be the final lump sum they pay.
348
- return Math . floor ( rateFixedFloat / duration ) ;
350
+ return + rateFixedFloat . div ( duration ) . round ( 0 , Big . roundDown ) ;
349
351
}
350
352
351
353
/**
352
354
* Calculates the percentage interest rate for a given fixed rate
353
355
* @param fixedRate the per block fixed rate
354
356
*/
355
- calcPctRate ( fixedRate : number , duration : number ) {
356
- return ( fixedRate * duration ) / FEE_RATE_TOTAL_PARTS ;
357
+ calcPctRate ( fixedRate : Big , duration : Big ) {
358
+ return + fixedRate . mul ( duration ) . div ( FEE_RATE_TOTAL_PARTS ) ;
357
359
}
358
360
}
359
361
0 commit comments