xrpl 4.3.0-smartescrow.1 → 4.3.0-smartescrow.3

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.
Files changed (102) hide show
  1. package/build/xrpl-latest.js +5269 -1599
  2. package/build/xrpl-latest.js.map +1 -1
  3. package/dist/npm/models/common/index.d.ts +4 -1
  4. package/dist/npm/models/common/index.d.ts.map +1 -1
  5. package/dist/npm/models/ledger/Delegate.d.ts +11 -0
  6. package/dist/npm/models/ledger/Delegate.d.ts.map +1 -0
  7. package/dist/npm/models/ledger/Delegate.js +3 -0
  8. package/dist/npm/models/ledger/Delegate.js.map +1 -0
  9. package/dist/npm/models/ledger/LedgerEntry.d.ts +3 -2
  10. package/dist/npm/models/ledger/LedgerEntry.d.ts.map +1 -1
  11. package/dist/npm/models/ledger/index.d.ts +2 -1
  12. package/dist/npm/models/ledger/index.d.ts.map +1 -1
  13. package/dist/npm/models/ledger/index.js.map +1 -1
  14. package/dist/npm/models/methods/ledgerEntry.d.ts +4 -0
  15. package/dist/npm/models/methods/ledgerEntry.d.ts.map +1 -1
  16. package/dist/npm/models/methods/serverInfo.d.ts +6 -0
  17. package/dist/npm/models/methods/serverInfo.d.ts.map +1 -1
  18. package/dist/npm/models/methods/serverState.d.ts +6 -0
  19. package/dist/npm/models/methods/serverState.d.ts.map +1 -1
  20. package/dist/npm/models/transactions/NFTokenMint.d.ts +5 -0
  21. package/dist/npm/models/transactions/NFTokenMint.d.ts.map +1 -1
  22. package/dist/npm/models/transactions/NFTokenMint.js +8 -0
  23. package/dist/npm/models/transactions/NFTokenMint.js.map +1 -1
  24. package/dist/npm/models/transactions/common.d.ts +1 -0
  25. package/dist/npm/models/transactions/common.d.ts.map +1 -1
  26. package/dist/npm/models/transactions/common.js +5 -0
  27. package/dist/npm/models/transactions/common.js.map +1 -1
  28. package/dist/npm/models/transactions/delegateSet.d.ts +13 -0
  29. package/dist/npm/models/transactions/delegateSet.d.ts.map +1 -0
  30. package/dist/npm/models/transactions/delegateSet.js +53 -0
  31. package/dist/npm/models/transactions/delegateSet.js.map +1 -0
  32. package/dist/npm/models/transactions/escrowFinish.d.ts +1 -0
  33. package/dist/npm/models/transactions/escrowFinish.d.ts.map +1 -1
  34. package/dist/npm/models/transactions/escrowFinish.js.map +1 -1
  35. package/dist/npm/models/transactions/index.d.ts +1 -0
  36. package/dist/npm/models/transactions/index.d.ts.map +1 -1
  37. package/dist/npm/models/transactions/index.js.map +1 -1
  38. package/dist/npm/models/transactions/transaction.d.ts +2 -1
  39. package/dist/npm/models/transactions/transaction.d.ts.map +1 -1
  40. package/dist/npm/models/transactions/transaction.js +4 -0
  41. package/dist/npm/models/transactions/transaction.js.map +1 -1
  42. package/dist/npm/snippets/tsconfig.tsbuildinfo +1 -1
  43. package/dist/npm/src/models/common/index.d.ts +4 -1
  44. package/dist/npm/src/models/common/index.d.ts.map +1 -1
  45. package/dist/npm/src/models/ledger/Delegate.d.ts +11 -0
  46. package/dist/npm/src/models/ledger/Delegate.d.ts.map +1 -0
  47. package/dist/npm/src/models/ledger/Delegate.js +3 -0
  48. package/dist/npm/src/models/ledger/Delegate.js.map +1 -0
  49. package/dist/npm/src/models/ledger/LedgerEntry.d.ts +3 -2
  50. package/dist/npm/src/models/ledger/LedgerEntry.d.ts.map +1 -1
  51. package/dist/npm/src/models/ledger/index.d.ts +2 -1
  52. package/dist/npm/src/models/ledger/index.d.ts.map +1 -1
  53. package/dist/npm/src/models/ledger/index.js.map +1 -1
  54. package/dist/npm/src/models/methods/ledgerEntry.d.ts +4 -0
  55. package/dist/npm/src/models/methods/ledgerEntry.d.ts.map +1 -1
  56. package/dist/npm/src/models/methods/serverInfo.d.ts +6 -0
  57. package/dist/npm/src/models/methods/serverInfo.d.ts.map +1 -1
  58. package/dist/npm/src/models/methods/serverState.d.ts +6 -0
  59. package/dist/npm/src/models/methods/serverState.d.ts.map +1 -1
  60. package/dist/npm/src/models/transactions/NFTokenMint.d.ts +5 -0
  61. package/dist/npm/src/models/transactions/NFTokenMint.d.ts.map +1 -1
  62. package/dist/npm/src/models/transactions/NFTokenMint.js +8 -0
  63. package/dist/npm/src/models/transactions/NFTokenMint.js.map +1 -1
  64. package/dist/npm/src/models/transactions/common.d.ts +1 -0
  65. package/dist/npm/src/models/transactions/common.d.ts.map +1 -1
  66. package/dist/npm/src/models/transactions/common.js +5 -0
  67. package/dist/npm/src/models/transactions/common.js.map +1 -1
  68. package/dist/npm/src/models/transactions/delegateSet.d.ts +13 -0
  69. package/dist/npm/src/models/transactions/delegateSet.d.ts.map +1 -0
  70. package/dist/npm/src/models/transactions/delegateSet.js +53 -0
  71. package/dist/npm/src/models/transactions/delegateSet.js.map +1 -0
  72. package/dist/npm/src/models/transactions/escrowFinish.d.ts +1 -0
  73. package/dist/npm/src/models/transactions/escrowFinish.d.ts.map +1 -1
  74. package/dist/npm/src/models/transactions/escrowFinish.js.map +1 -1
  75. package/dist/npm/src/models/transactions/index.d.ts +1 -0
  76. package/dist/npm/src/models/transactions/index.d.ts.map +1 -1
  77. package/dist/npm/src/models/transactions/index.js.map +1 -1
  78. package/dist/npm/src/models/transactions/transaction.d.ts +2 -1
  79. package/dist/npm/src/models/transactions/transaction.d.ts.map +1 -1
  80. package/dist/npm/src/models/transactions/transaction.js +4 -0
  81. package/dist/npm/src/models/transactions/transaction.js.map +1 -1
  82. package/dist/npm/src/sugar/autofill.d.ts.map +1 -1
  83. package/dist/npm/src/sugar/autofill.js +33 -16
  84. package/dist/npm/src/sugar/autofill.js.map +1 -1
  85. package/dist/npm/sugar/autofill.d.ts.map +1 -1
  86. package/dist/npm/sugar/autofill.js +33 -16
  87. package/dist/npm/sugar/autofill.js.map +1 -1
  88. package/package.json +3 -3
  89. package/src/models/common/index.ts +5 -1
  90. package/src/models/ledger/Delegate.ts +39 -0
  91. package/src/models/ledger/LedgerEntry.ts +3 -0
  92. package/src/models/ledger/index.ts +2 -0
  93. package/src/models/methods/ledgerEntry.ts +5 -0
  94. package/src/models/methods/serverInfo.ts +9 -0
  95. package/src/models/methods/serverState.ts +10 -0
  96. package/src/models/transactions/NFTokenMint.ts +37 -0
  97. package/src/models/transactions/common.ts +14 -0
  98. package/src/models/transactions/delegateSet.ts +111 -0
  99. package/src/models/transactions/escrowFinish.ts +2 -0
  100. package/src/models/transactions/index.ts +1 -0
  101. package/src/models/transactions/transaction.ts +6 -0
  102. package/src/sugar/autofill.ts +51 -41
@@ -42,6 +42,7 @@ export { CredentialCreate } from './CredentialCreate'
42
42
  export { CredentialDelete } from './CredentialDelete'
43
43
  export { DIDDelete } from './DIDDelete'
44
44
  export { DIDSet } from './DIDSet'
45
+ export { DelegateSet, Permission } from './delegateSet'
45
46
  export { DepositPreauth } from './depositPreauth'
46
47
  export { EscrowCancel } from './escrowCancel'
47
48
  export { EscrowCreate } from './escrowCreate'
@@ -23,6 +23,7 @@ import { BaseTransaction, isIssuedCurrency } from './common'
23
23
  import { CredentialAccept, validateCredentialAccept } from './CredentialAccept'
24
24
  import { CredentialCreate, validateCredentialCreate } from './CredentialCreate'
25
25
  import { CredentialDelete, validateCredentialDelete } from './CredentialDelete'
26
+ import { DelegateSet, validateDelegateSet } from './delegateSet'
26
27
  import { DepositPreauth, validateDepositPreauth } from './depositPreauth'
27
28
  import { DIDDelete, validateDIDDelete } from './DIDDelete'
28
29
  import { DIDSet, validateDIDSet } from './DIDSet'
@@ -141,6 +142,7 @@ export type SubmittableTransaction =
141
142
  | CredentialDelete
142
143
  | DIDDelete
143
144
  | DIDSet
145
+ | DelegateSet
144
146
  | DepositPreauth
145
147
  | EscrowCancel
146
148
  | EscrowCreate
@@ -343,6 +345,10 @@ export function validate(transaction: Record<string, unknown>): void {
343
345
  validateDIDSet(tx)
344
346
  break
345
347
 
348
+ case 'DelegateSet':
349
+ validateDelegateSet(tx)
350
+ break
351
+
346
352
  case 'DepositPreauth':
347
353
  validateDepositPreauth(tx)
348
354
  break
@@ -18,6 +18,8 @@ const LEDGER_OFFSET = 20
18
18
  const RESTRICTED_NETWORKS = 1024
19
19
  const REQUIRED_NETWORKID_VERSION = '1.11.0'
20
20
 
21
+ const MICRO_DROPS_PER_DROP = 1_000_000
22
+
21
23
  /**
22
24
  * Determines whether the source rippled version is not later than the target rippled version.
23
25
  * Example usage: isNotLaterRippledVersion('1.10.0', '1.11.0') returns true.
@@ -230,13 +232,13 @@ export async function setNextValidSequenceNumber(
230
232
  }
231
233
 
232
234
  /**
233
- * Fetches the account deletion fee from the server state using the provided client.
235
+ * Fetches the owner reserve fee from the server state using the provided client.
234
236
  *
235
237
  * @param client - The client object used to make the request.
236
- * @returns A Promise that resolves to the account deletion fee as a BigNumber.
237
- * @throws {Error} Throws an error if the account deletion fee cannot be fetched.
238
+ * @returns A Promise that resolves to the owner reserve fee as a BigNumber.
239
+ * @throws {Error} Throws an error if the owner reserve fee cannot be fetched.
238
240
  */
239
- async function fetchAccountDeleteFee(client: Client): Promise<BigNumber> {
241
+ async function fetchOwnerReserveFee(client: Client): Promise<BigNumber> {
240
242
  const response = await client.request({ command: 'server_state' })
241
243
  const fee = response.result.state.validated_ledger?.reserve_inc
242
244
 
@@ -247,6 +249,17 @@ async function fetchAccountDeleteFee(client: Client): Promise<BigNumber> {
247
249
  return new BigNumber(fee)
248
250
  }
249
251
 
252
+ async function fetchGasPrice(client: Client): Promise<BigNumber> {
253
+ const response = await client.request({ command: 'server_state' })
254
+ const gasPrice = response.result.state.validated_ledger?.gas_price
255
+
256
+ if (gasPrice == null) {
257
+ return Promise.reject(new Error('Could not fetch Owner Reserve.'))
258
+ }
259
+
260
+ return new BigNumber(gasPrice)
261
+ }
262
+
250
263
  /**
251
264
  * Calculates the fee per transaction type.
252
265
  *
@@ -255,68 +268,65 @@ async function fetchAccountDeleteFee(client: Client): Promise<BigNumber> {
255
268
  * @param [signersCount=0] - The number of signers (default is 0). Only used for multisigning.
256
269
  * @returns A promise that resolves with void. Modifies the `tx` parameter to give it the calculated fee.
257
270
  */
271
+ // eslint-disable-next-line max-lines-per-function -- okay here
258
272
  export async function calculateFeePerTransactionType(
259
273
  client: Client,
260
274
  tx: Transaction,
261
275
  signersCount = 0,
262
276
  ): Promise<void> {
263
- // netFee is usually 0.00001 XRP (10 drops)
264
277
  const netFeeXRP = await getFeeXrp(client)
265
- const netFeeDrops = xrpToDrops(netFeeXRP)
266
- let baseFee = new BigNumber(netFeeDrops)
267
-
268
- // EscrowFinish Transaction with Fulfillment
269
- if (tx.TransactionType === 'EscrowFinish' && tx.Fulfillment != null) {
270
- const fulfillmentBytesSize: number = Math.ceil(tx.Fulfillment.length / 2)
271
- // 10 drops × (33 + (Fulfillment size in bytes / 16))
272
- const product = new BigNumber(
273
- // eslint-disable-next-line @typescript-eslint/no-magic-numbers -- expected use of magic numbers
274
- scaleValue(netFeeDrops, 33 + fulfillmentBytesSize / 16),
275
- )
276
- baseFee = product.dp(0, BigNumber.ROUND_CEIL)
278
+ const netFeeDrops = new BigNumber(xrpToDrops(netFeeXRP))
279
+ let baseFee = netFeeDrops
280
+
281
+ // EscrowFinish Transaction with Fulfillment/ComputationAllowance
282
+ if (tx.TransactionType === 'EscrowFinish') {
283
+ if (tx.Fulfillment != null) {
284
+ const fulfillmentBytesSize: number = Math.ceil(tx.Fulfillment.length / 2)
285
+ // BaseFee × (33 + (Fulfillment size in bytes / 16))
286
+ baseFee = netFeeDrops.multipliedBy(
287
+ // eslint-disable-next-line @typescript-eslint/no-magic-numbers -- expected use of magic numbers
288
+ 33 + fulfillmentBytesSize / 16,
289
+ )
290
+ }
291
+ if (tx.ComputationAllowance != null) {
292
+ const gasPrice = await fetchGasPrice(client)
293
+ const extraFee: BigNumber = gasPrice
294
+ .multipliedBy(tx.ComputationAllowance)
295
+ .dividedBy(MICRO_DROPS_PER_DROP)
296
+ baseFee = baseFee.plus(extraFee)
297
+ }
277
298
  }
278
299
  // EscrowCreate transaction with FinishFunction
279
300
  if (tx.TransactionType === 'EscrowCreate' && tx.FinishFunction != null) {
280
- baseFee = BigNumber.sum(baseFee, 1000)
301
+ baseFee = baseFee.plus(1000)
281
302
  }
282
303
 
283
- if (
284
- tx.TransactionType === 'AccountDelete' ||
285
- tx.TransactionType === 'AMMCreate'
286
- ) {
287
- baseFee = await fetchAccountDeleteFee(client)
304
+ const isSpecialTxCost = ['AccountDelete', 'AMMCreate'].includes(
305
+ tx.TransactionType,
306
+ )
307
+
308
+ if (isSpecialTxCost) {
309
+ baseFee = await fetchOwnerReserveFee(client)
288
310
  }
289
311
 
290
312
  /*
291
313
  * Multi-signed Transaction
292
- * 10 drops × (1 + Number of Signatures Provided)
314
+ * BaseFee × (1 + Number of Signatures Provided)
293
315
  */
294
316
  if (signersCount > 0) {
295
- baseFee = BigNumber.sum(baseFee, scaleValue(netFeeDrops, 1 + signersCount))
317
+ baseFee = BigNumber.sum(baseFee, netFeeDrops.multipliedBy(1 + signersCount))
296
318
  }
297
319
 
298
320
  const maxFeeDrops = xrpToDrops(client.maxFeeXRP)
299
- const totalFee =
300
- tx.TransactionType === 'AccountDelete'
301
- ? baseFee
302
- : BigNumber.min(baseFee, maxFeeDrops)
321
+ const totalFee = isSpecialTxCost
322
+ ? baseFee
323
+ : BigNumber.min(baseFee, maxFeeDrops)
303
324
 
304
325
  // Round up baseFee and return it as a string
305
- // eslint-disable-next-line no-param-reassign, @typescript-eslint/no-magic-numbers -- param reassign is safe, base 10 magic num
326
+ // eslint-disable-next-line no-param-reassign, @typescript-eslint/no-magic-numbers, require-atomic-updates -- safe reassignment.
306
327
  tx.Fee = totalFee.dp(0, BigNumber.ROUND_CEIL).toString(10)
307
328
  }
308
329
 
309
- /**
310
- * Scales the given value by multiplying it with the provided multiplier.
311
- *
312
- * @param value - The value to be scaled.
313
- * @param multiplier - The multiplier to scale the value.
314
- * @returns The scaled value as a string.
315
- */
316
- function scaleValue(value, multiplier): string {
317
- return new BigNumber(value).times(multiplier).toString()
318
- }
319
-
320
330
  /**
321
331
  * Sets the latest validated ledger sequence for the transaction.
322
332
  *