xrpl 4.4.0 → 4.5.0-smartescrow.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/xrpl-latest-min.js +1 -1
- package/build/xrpl-latest-min.js.map +1 -1
- package/build/xrpl-latest.js +242 -216
- package/build/xrpl-latest.js.map +1 -1
- package/dist/npm/Wallet/defaultFaucets.d.ts +2 -1
- package/dist/npm/Wallet/defaultFaucets.d.ts.map +1 -1
- package/dist/npm/Wallet/defaultFaucets.js +3 -0
- package/dist/npm/Wallet/defaultFaucets.js.map +1 -1
- package/dist/npm/models/ledger/Escrow.d.ts +2 -0
- package/dist/npm/models/ledger/Escrow.d.ts.map +1 -1
- package/dist/npm/models/ledger/FeeSettings.d.ts +2 -0
- package/dist/npm/models/ledger/FeeSettings.d.ts.map +1 -1
- package/dist/npm/models/methods/serverInfo.d.ts +6 -0
- package/dist/npm/models/methods/serverInfo.d.ts.map +1 -1
- package/dist/npm/models/methods/serverState.d.ts +6 -0
- package/dist/npm/models/methods/serverState.d.ts.map +1 -1
- package/dist/npm/models/transactions/escrowCreate.d.ts +2 -0
- package/dist/npm/models/transactions/escrowCreate.d.ts.map +1 -1
- package/dist/npm/models/transactions/escrowCreate.js +4 -2
- package/dist/npm/models/transactions/escrowCreate.js.map +1 -1
- package/dist/npm/models/transactions/escrowFinish.d.ts +6 -0
- package/dist/npm/models/transactions/escrowFinish.d.ts.map +1 -1
- package/dist/npm/models/transactions/escrowFinish.js.map +1 -1
- package/dist/npm/models/transactions/metadata.d.ts +2 -1
- package/dist/npm/models/transactions/metadata.d.ts.map +1 -1
- package/dist/npm/models/transactions/metadata.js.map +1 -1
- package/dist/npm/snippets/tsconfig.tsbuildinfo +1 -1
- package/dist/npm/src/Wallet/defaultFaucets.d.ts +2 -1
- package/dist/npm/src/Wallet/defaultFaucets.d.ts.map +1 -1
- package/dist/npm/src/Wallet/defaultFaucets.js +3 -0
- package/dist/npm/src/Wallet/defaultFaucets.js.map +1 -1
- package/dist/npm/src/models/ledger/Escrow.d.ts +2 -0
- package/dist/npm/src/models/ledger/Escrow.d.ts.map +1 -1
- package/dist/npm/src/models/ledger/FeeSettings.d.ts +2 -0
- package/dist/npm/src/models/ledger/FeeSettings.d.ts.map +1 -1
- package/dist/npm/src/models/methods/serverInfo.d.ts +6 -0
- package/dist/npm/src/models/methods/serverInfo.d.ts.map +1 -1
- package/dist/npm/src/models/methods/serverState.d.ts +6 -0
- package/dist/npm/src/models/methods/serverState.d.ts.map +1 -1
- package/dist/npm/src/models/transactions/escrowCreate.d.ts +2 -0
- package/dist/npm/src/models/transactions/escrowCreate.d.ts.map +1 -1
- package/dist/npm/src/models/transactions/escrowCreate.js +4 -2
- package/dist/npm/src/models/transactions/escrowCreate.js.map +1 -1
- package/dist/npm/src/models/transactions/escrowFinish.d.ts +6 -0
- package/dist/npm/src/models/transactions/escrowFinish.d.ts.map +1 -1
- package/dist/npm/src/models/transactions/escrowFinish.js.map +1 -1
- package/dist/npm/src/models/transactions/metadata.d.ts +2 -1
- package/dist/npm/src/models/transactions/metadata.d.ts.map +1 -1
- package/dist/npm/src/models/transactions/metadata.js.map +1 -1
- package/dist/npm/src/sugar/autofill.d.ts.map +1 -1
- package/dist/npm/src/sugar/autofill.js +32 -11
- package/dist/npm/src/sugar/autofill.js.map +1 -1
- package/dist/npm/sugar/autofill.d.ts.map +1 -1
- package/dist/npm/sugar/autofill.js +32 -11
- package/dist/npm/sugar/autofill.js.map +1 -1
- package/package.json +3 -3
- package/src/Wallet/defaultFaucets.ts +5 -0
- package/src/models/ledger/Escrow.ts +4 -1
- package/src/models/ledger/FeeSettings.ts +4 -0
- package/src/models/methods/serverInfo.ts +9 -0
- package/src/models/methods/serverState.ts +10 -0
- package/src/models/transactions/escrowCreate.ts +10 -2
- package/src/models/transactions/escrowFinish.ts +9 -0
- package/src/models/transactions/metadata.ts +3 -0
- package/src/sugar/autofill.ts +39 -25
@@ -85,6 +85,11 @@ export interface ServerInfoResponse extends BaseResponse {
|
|
85
85
|
hash: string
|
86
86
|
reserve_base_xrp: number
|
87
87
|
reserve_inc_xrp: number
|
88
|
+
|
89
|
+
extension_compute: number
|
90
|
+
extension_size: number
|
91
|
+
gas_price: number
|
92
|
+
|
88
93
|
seq: number
|
89
94
|
}
|
90
95
|
/**
|
@@ -252,6 +257,10 @@ export interface ServerInfoResponse extends BaseResponse {
|
|
252
257
|
* object an account owns in the ledger.
|
253
258
|
*/
|
254
259
|
reserve_inc_xrp: number
|
260
|
+
|
261
|
+
extension_compute: number
|
262
|
+
extension_size: number
|
263
|
+
gas_price: number
|
255
264
|
/** The ledger index of the latest validated ledger. */
|
256
265
|
seq: number
|
257
266
|
}
|
@@ -30,6 +30,11 @@ export interface ServerStateResponse extends BaseResponse {
|
|
30
30
|
hash: string
|
31
31
|
reserve_base: number
|
32
32
|
reserve_inc: number
|
33
|
+
|
34
|
+
extension_compute: number
|
35
|
+
extension_size: number
|
36
|
+
gas_price: number
|
37
|
+
|
33
38
|
seq: number
|
34
39
|
}
|
35
40
|
io_latency_ms: number
|
@@ -69,6 +74,11 @@ export interface ServerStateResponse extends BaseResponse {
|
|
69
74
|
hash: string
|
70
75
|
reserve_base: number
|
71
76
|
reserve_inc: number
|
77
|
+
|
78
|
+
extension_compute: number
|
79
|
+
extension_size: number
|
80
|
+
gas_price: number
|
81
|
+
|
72
82
|
seq: number
|
73
83
|
}
|
74
84
|
validation_quorum: number
|
@@ -50,6 +50,10 @@ export interface EscrowCreate extends BaseTransaction {
|
|
50
50
|
* payment, such as a hosted recipient at the destination address.
|
51
51
|
*/
|
52
52
|
DestinationTag?: number
|
53
|
+
|
54
|
+
FinishFunction?: string
|
55
|
+
|
56
|
+
Data?: string
|
53
57
|
}
|
54
58
|
|
55
59
|
/**
|
@@ -71,9 +75,13 @@ export function validateEscrowCreate(tx: Record<string, unknown>): void {
|
|
71
75
|
)
|
72
76
|
}
|
73
77
|
|
74
|
-
if (
|
78
|
+
if (
|
79
|
+
tx.FinishAfter === undefined &&
|
80
|
+
tx.Condition === undefined &&
|
81
|
+
tx.FinishFunction === undefined
|
82
|
+
) {
|
75
83
|
throw new ValidationError(
|
76
|
-
'EscrowCreate: Either Condition or
|
84
|
+
'EscrowCreate: Either FinishAfter, Condition, or FinishFunction must be specified',
|
77
85
|
)
|
78
86
|
}
|
79
87
|
|
@@ -9,6 +9,7 @@ import {
|
|
9
9
|
validateRequiredField,
|
10
10
|
MAX_AUTHORIZED_CREDENTIALS,
|
11
11
|
} from './common'
|
12
|
+
import { TransactionMetadataBase } from './metadata'
|
12
13
|
|
13
14
|
/**
|
14
15
|
* Deliver XRP from a held payment to the recipient.
|
@@ -38,6 +39,14 @@ export interface EscrowFinish extends BaseTransaction {
|
|
38
39
|
* The credentials included must not be expired.
|
39
40
|
*/
|
40
41
|
CredentialIDs?: string[]
|
42
|
+
|
43
|
+
ComputationAllowance?: number
|
44
|
+
}
|
45
|
+
|
46
|
+
export interface EscrowFinishMetadata extends TransactionMetadataBase {
|
47
|
+
// if ComputationAllowance is present and the Smart Escrow runs
|
48
|
+
GasUsed?: number
|
49
|
+
WasmReturnCode?: number
|
41
50
|
}
|
42
51
|
|
43
52
|
/**
|
@@ -1,6 +1,7 @@
|
|
1
1
|
import { Amount, MPTAmount } from '../common'
|
2
2
|
|
3
3
|
import { BaseTransaction } from './common'
|
4
|
+
import { EscrowFinish, EscrowFinishMetadata } from './escrowFinish'
|
4
5
|
import {
|
5
6
|
MPTokenIssuanceCreate,
|
6
7
|
MPTokenIssuanceCreateMetadata,
|
@@ -105,4 +106,6 @@ export type TransactionMetadata<T extends BaseTransaction = Transaction> =
|
|
105
106
|
? NFTokenCancelOfferMetadata
|
106
107
|
: T extends MPTokenIssuanceCreate
|
107
108
|
? MPTokenIssuanceCreateMetadata
|
109
|
+
: T extends EscrowFinish
|
110
|
+
? EscrowFinishMetadata
|
108
111
|
: TransactionMetadataBase
|
package/src/sugar/autofill.ts
CHANGED
@@ -19,6 +19,8 @@ const LEDGER_OFFSET = 20
|
|
19
19
|
const RESTRICTED_NETWORKS = 1024
|
20
20
|
const REQUIRED_NETWORKID_VERSION = '1.11.0'
|
21
21
|
|
22
|
+
const MICRO_DROPS_PER_DROP = 1_000_000
|
23
|
+
|
22
24
|
/**
|
23
25
|
* Determines whether the source rippled version is not later than the target rippled version.
|
24
26
|
* Example usage: isNotLaterRippledVersion('1.10.0', '1.11.0') returns true.
|
@@ -258,6 +260,17 @@ async function fetchOwnerReserveFee(client: Client): Promise<BigNumber> {
|
|
258
260
|
return new BigNumber(fee)
|
259
261
|
}
|
260
262
|
|
263
|
+
async function fetchGasPrice(client: Client): Promise<BigNumber> {
|
264
|
+
const response = await client.request({ command: 'server_state' })
|
265
|
+
const gasPrice = response.result.state.validated_ledger?.gas_price
|
266
|
+
|
267
|
+
if (gasPrice == null) {
|
268
|
+
return Promise.reject(new Error('Could not fetch Owner Reserve.'))
|
269
|
+
}
|
270
|
+
|
271
|
+
return new BigNumber(gasPrice)
|
272
|
+
}
|
273
|
+
|
261
274
|
/**
|
262
275
|
* Calculates the fee per transaction type.
|
263
276
|
*
|
@@ -266,30 +279,40 @@ async function fetchOwnerReserveFee(client: Client): Promise<BigNumber> {
|
|
266
279
|
* @param [signersCount=0] - The number of signers (default is 0). Only used for multisigning.
|
267
280
|
* @returns A promise that returns the fee.
|
268
281
|
*/
|
269
|
-
|
282
|
+
// eslint-disable-next-line max-lines-per-function -- needed here due to the complexity of the fee calculation
|
270
283
|
async function calculateFeePerTransactionType(
|
271
284
|
client: Client,
|
272
285
|
tx: Transaction,
|
273
286
|
signersCount = 0,
|
274
287
|
): Promise<BigNumber> {
|
275
288
|
const netFeeXRP = await getFeeXrp(client)
|
276
|
-
const netFeeDrops = xrpToDrops(netFeeXRP)
|
277
|
-
let baseFee =
|
289
|
+
const netFeeDrops = new BigNumber(xrpToDrops(netFeeXRP))
|
290
|
+
let baseFee = netFeeDrops
|
278
291
|
|
279
292
|
const isSpecialTxCost = ['AccountDelete', 'AMMCreate'].includes(
|
280
293
|
tx.TransactionType,
|
281
294
|
)
|
282
295
|
|
283
|
-
//
|
284
|
-
if (tx.TransactionType === '
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
296
|
+
// EscrowCreate transaction with FinishFunction
|
297
|
+
if (tx.TransactionType === 'EscrowCreate' && tx.FinishFunction != null) {
|
298
|
+
baseFee = baseFee.plus(1000)
|
299
|
+
} else if (tx.TransactionType === 'EscrowFinish') {
|
300
|
+
// EscrowFinish Transaction with Fulfillment/ComputationAllowance
|
301
|
+
if (tx.Fulfillment != null) {
|
302
|
+
const fulfillmentBytesSize: number = Math.ceil(tx.Fulfillment.length / 2)
|
303
|
+
// BaseFee × (33 + (Fulfillment size in bytes / 16))
|
304
|
+
baseFee = netFeeDrops.multipliedBy(
|
305
|
+
// eslint-disable-next-line @typescript-eslint/no-magic-numbers -- expected use of magic numbers
|
306
|
+
33 + fulfillmentBytesSize / 16,
|
307
|
+
)
|
308
|
+
}
|
309
|
+
if (tx.ComputationAllowance != null) {
|
310
|
+
const gasPrice = await fetchGasPrice(client)
|
311
|
+
const extraFee: BigNumber = gasPrice
|
312
|
+
.multipliedBy(tx.ComputationAllowance)
|
313
|
+
.dividedBy(MICRO_DROPS_PER_DROP)
|
314
|
+
baseFee = baseFee.plus(extraFee)
|
315
|
+
}
|
293
316
|
} else if (tx.TransactionType === 'Batch') {
|
294
317
|
const rawTxFees = await tx.RawTransactions.reduce(async (acc, rawTxn) => {
|
295
318
|
const resolvedAcc = await acc
|
@@ -300,6 +323,8 @@ async function calculateFeePerTransactionType(
|
|
300
323
|
return BigNumber.sum(resolvedAcc, fee)
|
301
324
|
}, Promise.resolve(new BigNumber(0)))
|
302
325
|
baseFee = BigNumber.sum(baseFee.times(2), rawTxFees)
|
326
|
+
} else if (isSpecialTxCost) {
|
327
|
+
baseFee = await fetchOwnerReserveFee(client)
|
303
328
|
}
|
304
329
|
|
305
330
|
/*
|
@@ -307,7 +332,7 @@ async function calculateFeePerTransactionType(
|
|
307
332
|
* BaseFee × (1 + Number of Signatures Provided)
|
308
333
|
*/
|
309
334
|
if (signersCount > 0) {
|
310
|
-
baseFee = BigNumber.sum(baseFee,
|
335
|
+
baseFee = BigNumber.sum(baseFee, netFeeDrops.multipliedBy(signersCount))
|
311
336
|
}
|
312
337
|
|
313
338
|
const maxFeeDrops = xrpToDrops(client.maxFeeXRP)
|
@@ -337,17 +362,6 @@ export async function getTransactionFee(
|
|
337
362
|
tx.Fee = fee.toString(10)
|
338
363
|
}
|
339
364
|
|
340
|
-
/**
|
341
|
-
* Scales the given value by multiplying it with the provided multiplier.
|
342
|
-
*
|
343
|
-
* @param value - The value to be scaled.
|
344
|
-
* @param multiplier - The multiplier to scale the value.
|
345
|
-
* @returns The scaled value as a string.
|
346
|
-
*/
|
347
|
-
function scaleValue(value, multiplier): string {
|
348
|
-
return new BigNumber(value).times(multiplier).toString()
|
349
|
-
}
|
350
|
-
|
351
365
|
/**
|
352
366
|
* Sets the latest validated ledger sequence for the transaction.
|
353
367
|
*
|