From b48ed6fd390262d650e7ae0b391bd9116780d3cf Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Mon, 29 Jul 2024 12:51:52 -0400 Subject: [PATCH 01/13] add simulate model --- packages/xrpl/src/models/methods/index.ts | 14 ++++ packages/xrpl/src/models/methods/simulate.ts | 80 ++++++++++++++++++++ 2 files changed, 94 insertions(+) create mode 100644 packages/xrpl/src/models/methods/simulate.ts diff --git a/packages/xrpl/src/models/methods/index.ts b/packages/xrpl/src/models/methods/index.ts index a0259167b2..f1df73050b 100644 --- a/packages/xrpl/src/models/methods/index.ts +++ b/packages/xrpl/src/models/methods/index.ts @@ -148,6 +148,14 @@ import { StateAccountingFinal, } from './serverInfo' import { ServerStateRequest, ServerStateResponse } from './serverState' +import { + SimulateBinaryRequest, + SimulateBinaryResponse, + SimulateJsonRequest, + SimulateJsonResponse, + SimulateRequest, + SimulateResponse, +} from './simulate' import { SubmitRequest, SubmitResponse } from './submit' import { SubmitMultisignedRequest, @@ -398,6 +406,10 @@ export type RequestResponseMap< ? LedgerDataResponse : T extends LedgerEntryRequest ? LedgerEntryResponse + : T extends SimulateBinaryRequest + ? SimulateBinaryResponse + : T extends SimulateJsonRequest + ? SimulateJsonResponse : T extends SubmitRequest ? SubmitResponse : T extends SubmitMultisignedRequest @@ -544,6 +556,8 @@ export { LedgerEntryRequest, LedgerEntryResponse, // transaction methods with types + SimulateRequest, + SimulateResponse, SubmitRequest, SubmitResponse, SubmitMultisignedRequest, diff --git a/packages/xrpl/src/models/methods/simulate.ts b/packages/xrpl/src/models/methods/simulate.ts new file mode 100644 index 0000000000..49d65a93a2 --- /dev/null +++ b/packages/xrpl/src/models/methods/simulate.ts @@ -0,0 +1,80 @@ +import { + BaseTransaction, + Transaction, + TransactionMetadata, +} from '../transactions' + +import { BaseRequest, BaseResponse } from './baseMethod' + +/** + * The `simulate` method simulates a transaction without submitting it to the network. + * Returns a {@link SimulateResponse}. + * + * @category Requests + */ +export type SimulateRequest = SimulateBinaryRequest | SimulateJsonRequest + +export type SimulateBinaryRequest = BaseRequest & { + command: 'simulate' + + binary: true +} & ( + | { + tx_blob: string + } + | { + tx_json: Transaction + } + ) + +export type SimulateJsonRequest = BaseRequest & { + command: 'simulate' + + binary?: false +} & ( + | { + tx_blob: string + } + | { + tx_json: Transaction + } + ) + +export type SimulateResponse = SimulateBinaryResponse | SimulateJsonResponse + +export interface SimulateBinaryResponse extends BaseResponse { + result: { + tx_blob: string + + meta_blob: string + + /** + * The ledger index of the ledger version that was used to generate this + * response. + */ + ledger_index: number + } +} + +export interface SimulateJsonResponse + extends BaseResponse { + result: { + applied: false + + engine_result: string + + engine_result_code: number + + engine_result_message: string + + /** + * The ledger index of the ledger version that was used to generate this + * response. + */ + ledger_index: number + + tx_json: T + + meta?: TransactionMetadata + } +} From 96d2a715ba1761511acc66b7887647fddaa2edf1 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Thu, 2 Jan 2025 17:36:29 -0500 Subject: [PATCH 02/13] update history --- packages/xrpl/HISTORY.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/xrpl/HISTORY.md b/packages/xrpl/HISTORY.md index b834707f69..0e4b9765fb 100644 --- a/packages/xrpl/HISTORY.md +++ b/packages/xrpl/HISTORY.md @@ -4,6 +4,9 @@ Subscribe to [the **xrpl-announce** mailing list](https://groups.google.com/g/xr ## Unreleased Changes +### Added +* Support for the `simulate` RPC + ## 4.1.0 (2024-12-23) ### Added From 78b1c2076b3f7fee697e6673ebe48508ce920dd7 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Mon, 6 Jan 2025 17:02:16 -0500 Subject: [PATCH 03/13] add sugar method --- packages/xrpl/src/client/index.ts | 68 +++++++++++++++++++- packages/xrpl/src/models/methods/index.ts | 2 + packages/xrpl/src/models/methods/simulate.ts | 28 ++++---- packages/xrpl/src/sugar/submit.ts | 5 +- 4 files changed, 83 insertions(+), 20 deletions(-) diff --git a/packages/xrpl/src/client/index.ts b/packages/xrpl/src/client/index.ts index 722b169f2a..4272773812 100644 --- a/packages/xrpl/src/client/index.ts +++ b/packages/xrpl/src/client/index.ts @@ -40,6 +40,8 @@ import type { MarkerRequest, MarkerResponse, SubmitResponse, + SimulateResponse, + SimulateRequest, } from '../models/methods' import type { BookOffer, BookOfferCurrency } from '../models/methods/bookOffers' import type { @@ -74,7 +76,7 @@ import { separateBuySellOrders, sortAndLimitOffers, } from '../sugar/getOrderbook' -import { dropsToXrp, hashes, isValidClassicAddress } from '../utils' +import { decode, dropsToXrp, hashes, isValidClassicAddress } from '../utils' import { Wallet } from '../Wallet' import { type FaucetRequestBody, @@ -764,6 +766,70 @@ class Client extends EventEmitter { return submitRequest(this, signedTx, opts?.failHard) } + /** + * Simulates an unsigned transaction. + * Steps performed on a transaction: + * 1. Autofill. + * 2. Sign & Encode. + * 3. Submit. + * + * @category Core + * + * @param transaction - A transaction to autofill, sign & encode, and submit. + * @param opts - (Optional) Options used to sign and submit a transaction. + * @param opts.binary - If true, return the metadata in a binary encoding. + * + * @returns A promise that contains SimulateResponse. + * @throws RippledError if the simulate request fails. + */ + public async simulate( + transaction: SubmittableTransaction | string, + opts?: { + // If true, return the binary-encoded representation of the results. + binary?: boolean + }, + ): Promise { + // verify that the transaction isn't signed + const decodedTx = + typeof transaction === 'string' + ? // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- needed for typing + (decode(transaction) as unknown as SubmittableTransaction) + : transaction + if (typeof decodedTx === 'string') { + throw new ValidationError( + 'Provided transaction is not a valid transaction.', + ) + } + if (decodedTx.TxnSignature !== '' && decodedTx.TxnSignature != null) { + throw new ValidationError('Transaction must not be signed.') + } + if ( + decodedTx.Signers?.some( + (signer) => + signer.Signer.TxnSignature !== '' && + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- needed for JS + signer.Signer.TxnSignature != null, + ) + ) { + throw new ValidationError('Transaction must not be signed.') + } + + setValidAddresses(decodedTx) + setTransactionFlagsToNumber(decodedTx) + + if (decodedTx.NetworkID == null) { + decodedTx.NetworkID = txNeedsNetworkID(this) ? this.networkID : undefined + } + + // send request + const binary = opts?.binary ?? false + const request: SimulateRequest = + typeof transaction === 'string' + ? { command: 'simulate', tx_blob: transaction, binary } + : { command: 'simulate', tx_json: transaction, binary } + return this.request(request) + } + /** * Asynchronously submits a transaction and verifies that it has been included in a * validated ledger (or has errored/will not be included for some reason). diff --git a/packages/xrpl/src/models/methods/index.ts b/packages/xrpl/src/models/methods/index.ts index f1df73050b..e055658a8b 100644 --- a/packages/xrpl/src/models/methods/index.ts +++ b/packages/xrpl/src/models/methods/index.ts @@ -211,6 +211,7 @@ type Request = | LedgerDataRequest | LedgerEntryRequest // transaction methods + | SimulateRequest | SubmitRequest | SubmitMultisignedRequest | TransactionEntryRequest @@ -269,6 +270,7 @@ type Response = | LedgerDataResponse | LedgerEntryResponse // transaction methods + | SimulateResponse | SubmitResponse | SubmitMultisignedVersionResponseMap | TransactionEntryResponse diff --git a/packages/xrpl/src/models/methods/simulate.ts b/packages/xrpl/src/models/methods/simulate.ts index 49d65a93a2..1acf8ff4af 100644 --- a/packages/xrpl/src/models/methods/simulate.ts +++ b/packages/xrpl/src/models/methods/simulate.ts @@ -12,13 +12,8 @@ import { BaseRequest, BaseResponse } from './baseMethod' * * @category Requests */ -export type SimulateRequest = SimulateBinaryRequest | SimulateJsonRequest - -export type SimulateBinaryRequest = BaseRequest & { - command: 'simulate' - - binary: true -} & ( +export type SimulateRequest = SimulateRequestBase & + ( | { tx_blob: string } @@ -27,18 +22,19 @@ export type SimulateBinaryRequest = BaseRequest & { } ) -export type SimulateJsonRequest = BaseRequest & { +export interface SimulateRequestBase extends BaseRequest { command: 'simulate' + binary?: boolean +} + +export type SimulateBinaryRequest = SimulateRequest & { + binary: true +} + +export type SimulateJsonRequest = SimulateRequest & { binary?: false -} & ( - | { - tx_blob: string - } - | { - tx_json: Transaction - } - ) +} export type SimulateResponse = SimulateBinaryResponse | SimulateJsonResponse diff --git a/packages/xrpl/src/sugar/submit.ts b/packages/xrpl/src/sugar/submit.ts index 423a863cf8..b14f68d945 100644 --- a/packages/xrpl/src/sugar/submit.ts +++ b/packages/xrpl/src/sugar/submit.ts @@ -1,5 +1,3 @@ -import { decode, encode } from 'ripple-binary-codec' - import type { Client, SubmitRequest, @@ -12,6 +10,7 @@ import { ValidationError, XrplError } from '../errors' import { Signer } from '../models/common' import { TxResponse } from '../models/methods' import { BaseTransaction } from '../models/transactions/common' +import { decode, encode } from '../utils' /** Approximate time for a ledger to close, in milliseconds */ const LEDGER_CLOSE_TIME = 1000 @@ -52,7 +51,7 @@ export async function submitRequest( failHard = false, ): Promise { if (!isSigned(signedTransaction)) { - throw new ValidationError('Transaction must be signed') + throw new ValidationError('Transaction must be signed.') } const signedTxEncoded = From 7ac75ffa0442cfe1d42f437e6fc28f84046259e8 Mon Sep 17 00:00:00 2001 From: tequ Date: Tue, 28 Jan 2025 09:29:29 +0900 Subject: [PATCH 04/13] Make the simulate response more type-strict (#2878) --- packages/xrpl/src/client/index.ts | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/packages/xrpl/src/client/index.ts b/packages/xrpl/src/client/index.ts index 4272773812..9cfe1e1a6c 100644 --- a/packages/xrpl/src/client/index.ts +++ b/packages/xrpl/src/client/index.ts @@ -40,10 +40,13 @@ import type { MarkerRequest, MarkerResponse, SubmitResponse, - SimulateResponse, SimulateRequest, } from '../models/methods' import type { BookOffer, BookOfferCurrency } from '../models/methods/bookOffers' +import { + SimulateBinaryResponse, + SimulateJsonResponse, +} from '../models/methods/simulate' import type { EventTypes, OnEventToListenerMap, @@ -782,13 +785,16 @@ class Client extends EventEmitter { * @returns A promise that contains SimulateResponse. * @throws RippledError if the simulate request fails. */ - public async simulate( + // eslint-disable-next-line max-lines-per-function -- simulate needs a bit complex logic + public async simulate( transaction: SubmittableTransaction | string, opts?: { // If true, return the binary-encoded representation of the results. - binary?: boolean + binary?: Binary }, - ): Promise { + ): Promise< + Binary extends false ? SimulateJsonResponse : SimulateBinaryResponse + > { // verify that the transaction isn't signed const decodedTx = typeof transaction === 'string' From d08343be73ca94709d9438e7cf83e35a1003d3c9 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Mon, 27 Jan 2025 20:22:20 -0500 Subject: [PATCH 05/13] [WIP] integration tests --- packages/xrpl/src/client/index.ts | 2 +- packages/xrpl/src/models/methods/index.ts | 2 + packages/xrpl/src/models/methods/ledger.ts | 4 +- packages/xrpl/src/models/methods/simulate.ts | 28 +++++--- .../integration/requests/simulate.test.ts | 64 +++++++++++++++++++ 5 files changed, 89 insertions(+), 11 deletions(-) create mode 100644 packages/xrpl/test/integration/requests/simulate.test.ts diff --git a/packages/xrpl/src/client/index.ts b/packages/xrpl/src/client/index.ts index 9cfe1e1a6c..cdabc1bd0f 100644 --- a/packages/xrpl/src/client/index.ts +++ b/packages/xrpl/src/client/index.ts @@ -793,7 +793,7 @@ class Client extends EventEmitter { binary?: Binary }, ): Promise< - Binary extends false ? SimulateJsonResponse : SimulateBinaryResponse + Binary extends true ? SimulateBinaryResponse : SimulateJsonResponse > { // verify that the transaction isn't signed const decodedTx = diff --git a/packages/xrpl/src/models/methods/index.ts b/packages/xrpl/src/models/methods/index.ts index e055658a8b..1aa7e2f683 100644 --- a/packages/xrpl/src/models/methods/index.ts +++ b/packages/xrpl/src/models/methods/index.ts @@ -412,6 +412,8 @@ export type RequestResponseMap< ? SimulateBinaryResponse : T extends SimulateJsonRequest ? SimulateJsonResponse + : T extends SimulateRequest + ? SimulateResponse : T extends SubmitRequest ? SubmitResponse : T extends SubmitMultisignedRequest diff --git a/packages/xrpl/src/models/methods/ledger.ts b/packages/xrpl/src/models/methods/ledger.ts index 07c72cc27e..a4f657786c 100644 --- a/packages/xrpl/src/models/methods/ledger.ts +++ b/packages/xrpl/src/models/methods/ledger.ts @@ -203,13 +203,13 @@ export interface LedgerQueueData { } export interface LedgerBinary - extends Omit, 'accountState'> { + extends Omit { accountState?: string[] transactions?: string[] } export interface LedgerBinaryV1 - extends Omit, 'accountState'> { + extends Omit { accountState?: string[] transactions?: string[] } diff --git a/packages/xrpl/src/models/methods/simulate.ts b/packages/xrpl/src/models/methods/simulate.ts index 1acf8ff4af..7ac8d6f212 100644 --- a/packages/xrpl/src/models/methods/simulate.ts +++ b/packages/xrpl/src/models/methods/simulate.ts @@ -12,22 +12,21 @@ import { BaseRequest, BaseResponse } from './baseMethod' * * @category Requests */ -export type SimulateRequest = SimulateRequestBase & - ( +export type SimulateRequest = BaseRequest & { + command: 'simulate' + + binary?: boolean +} & ( | { tx_blob: string + tx_json?: never } | { tx_json: Transaction + tx_blob?: never } ) -export interface SimulateRequestBase extends BaseRequest { - command: 'simulate' - - binary?: boolean -} - export type SimulateBinaryRequest = SimulateRequest & { binary: true } @@ -36,10 +35,23 @@ export type SimulateJsonRequest = SimulateRequest & { binary?: false } +/** + * Response expected from an {@link SimulateRequest}. + * + * @category Responses + */ export type SimulateResponse = SimulateBinaryResponse | SimulateJsonResponse export interface SimulateBinaryResponse extends BaseResponse { result: { + applied: false + + engine_result: string + + engine_result_code: number + + engine_result_message: string + tx_blob: string meta_blob: string diff --git a/packages/xrpl/test/integration/requests/simulate.test.ts b/packages/xrpl/test/integration/requests/simulate.test.ts new file mode 100644 index 0000000000..642e7f4a00 --- /dev/null +++ b/packages/xrpl/test/integration/requests/simulate.test.ts @@ -0,0 +1,64 @@ +import { assert } from 'chai' + +import { SimulateRequest } from '../../../src' +import serverUrl from '../serverUrl' +import { + setupClient, + teardownClient, + type XrplIntegrationTestContext, +} from '../setup' + +// how long before each test case times out +const TIMEOUT = 20000 + +describe('simulate', function () { + let testContext: XrplIntegrationTestContext + + beforeEach(async () => { + testContext = await setupClient(serverUrl) + }) + afterEach(async () => teardownClient(testContext)) + + it( + 'json', + async () => { + const simulateRequest: SimulateRequest = { + command: 'simulate', + tx_json: { + TransactionType: 'AccountSet', + Account: testContext.wallet.address, + NFTokenMinter: testContext.wallet.address, + }, + } + const simulateResponse = await testContext.client.request(simulateRequest) + + assert.equal(simulateResponse.type, 'response') + assert.typeOf(simulateResponse.result.meta, 'object') + assert.equal(simulateResponse.result.engine_result, 'tesSUCCESS') + assert.isFalse(simulateResponse.result.applied) + }, + TIMEOUT, + ) + + it( + 'binary', + async () => { + const simulateRequest: SimulateRequest = { + command: 'simulate', + tx_json: { + TransactionType: 'AccountSet', + Account: testContext.wallet.address, + }, + binary: true, + } + const simulateResponse = await testContext.client.request(simulateRequest) + + assert.equal(simulateResponse.type, 'response') + assert.typeOf(simulateResponse.result.meta_blob, 'string') + assert.equal(simulateResponse.result.tx_blob, 'string') + assert.equal(simulateResponse.result.engine_result, 'tesSUCCESS') + assert.isFalse(simulateResponse.result.applied) + }, + TIMEOUT, + ) +}) From dd8676b9cbedb46ea7bb800f67c37ccb4fd91fc8 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 5 Feb 2025 07:20:46 -0800 Subject: [PATCH 06/13] fix integration tests/typing issues --- .github/workflows/nodejs.yml | 2 +- packages/xrpl/src/models/methods/index.ts | 2 +- packages/xrpl/src/models/methods/simulate.ts | 2 +- .../integration/requests/simulate.test.ts | 25 +++++++++++++++++-- 4 files changed, 26 insertions(+), 5 deletions(-) diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 012537fa3f..1b8531b826 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -4,7 +4,7 @@ name: Node.js CI env: - RIPPLED_DOCKER_IMAGE: rippleci/rippled:2.3.0-rc1 + RIPPLED_DOCKER_IMAGE: rippleci/rippled:develop on: push: diff --git a/packages/xrpl/src/models/methods/index.ts b/packages/xrpl/src/models/methods/index.ts index 1aa7e2f683..e54c56141a 100644 --- a/packages/xrpl/src/models/methods/index.ts +++ b/packages/xrpl/src/models/methods/index.ts @@ -413,7 +413,7 @@ export type RequestResponseMap< : T extends SimulateJsonRequest ? SimulateJsonResponse : T extends SimulateRequest - ? SimulateResponse + ? SimulateJsonResponse : T extends SubmitRequest ? SubmitResponse : T extends SubmitMultisignedRequest diff --git a/packages/xrpl/src/models/methods/simulate.ts b/packages/xrpl/src/models/methods/simulate.ts index 7ac8d6f212..ed27212eb8 100644 --- a/packages/xrpl/src/models/methods/simulate.ts +++ b/packages/xrpl/src/models/methods/simulate.ts @@ -40,7 +40,7 @@ export type SimulateJsonRequest = SimulateRequest & { * * @category Responses */ -export type SimulateResponse = SimulateBinaryResponse | SimulateJsonResponse +export type SimulateResponse = SimulateJsonResponse | SimulateBinaryResponse export interface SimulateBinaryResponse extends BaseResponse { result: { diff --git a/packages/xrpl/test/integration/requests/simulate.test.ts b/packages/xrpl/test/integration/requests/simulate.test.ts index 642e7f4a00..7f3ed13cdb 100644 --- a/packages/xrpl/test/integration/requests/simulate.test.ts +++ b/packages/xrpl/test/integration/requests/simulate.test.ts @@ -1,6 +1,7 @@ import { assert } from 'chai' -import { SimulateRequest } from '../../../src' +import { AccountSet, SimulateRequest } from '../../../src' +import { SimulateBinaryRequest } from '../../../src/models/methods/simulate' import serverUrl from '../serverUrl' import { setupClient, @@ -34,6 +35,7 @@ describe('simulate', function () { assert.equal(simulateResponse.type, 'response') assert.typeOf(simulateResponse.result.meta, 'object') + assert.equal(simulateResponse.result.tx_json, simulateRequest.tx_json) assert.equal(simulateResponse.result.engine_result, 'tesSUCCESS') assert.isFalse(simulateResponse.result.applied) }, @@ -43,7 +45,7 @@ describe('simulate', function () { it( 'binary', async () => { - const simulateRequest: SimulateRequest = { + const simulateRequest: SimulateBinaryRequest = { command: 'simulate', tx_json: { TransactionType: 'AccountSet', @@ -61,4 +63,23 @@ describe('simulate', function () { }, TIMEOUT, ) + + it( + 'sugar', + async () => { + const tx: AccountSet = { + TransactionType: 'AccountSet', + Account: testContext.wallet.address, + NFTokenMinter: testContext.wallet.address, + } + const simulateResponse = await testContext.client.simulate(tx) + + assert.equal(simulateResponse.type, 'response') + assert.typeOf(simulateResponse.result.meta, 'object') + assert.equal(simulateResponse.result.tx_json, tx) + assert.equal(simulateResponse.result.engine_result, 'tesSUCCESS') + assert.isFalse(simulateResponse.result.applied) + }, + TIMEOUT, + ) }) From 705f2ddb4e0c95c17ee24f5c009950ad6f1254d6 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 5 Feb 2025 07:38:25 -0800 Subject: [PATCH 07/13] fix build issue --- packages/xrpl/src/client/index.ts | 34 +------------------------------ 1 file changed, 1 insertion(+), 33 deletions(-) diff --git a/packages/xrpl/src/client/index.ts b/packages/xrpl/src/client/index.ts index cdabc1bd0f..4d6ebe5972 100644 --- a/packages/xrpl/src/client/index.ts +++ b/packages/xrpl/src/client/index.ts @@ -785,7 +785,7 @@ class Client extends EventEmitter { * @returns A promise that contains SimulateResponse. * @throws RippledError if the simulate request fails. */ - // eslint-disable-next-line max-lines-per-function -- simulate needs a bit complex logic + public async simulate( transaction: SubmittableTransaction | string, opts?: { @@ -795,38 +795,6 @@ class Client extends EventEmitter { ): Promise< Binary extends true ? SimulateBinaryResponse : SimulateJsonResponse > { - // verify that the transaction isn't signed - const decodedTx = - typeof transaction === 'string' - ? // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- needed for typing - (decode(transaction) as unknown as SubmittableTransaction) - : transaction - if (typeof decodedTx === 'string') { - throw new ValidationError( - 'Provided transaction is not a valid transaction.', - ) - } - if (decodedTx.TxnSignature !== '' && decodedTx.TxnSignature != null) { - throw new ValidationError('Transaction must not be signed.') - } - if ( - decodedTx.Signers?.some( - (signer) => - signer.Signer.TxnSignature !== '' && - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- needed for JS - signer.Signer.TxnSignature != null, - ) - ) { - throw new ValidationError('Transaction must not be signed.') - } - - setValidAddresses(decodedTx) - setTransactionFlagsToNumber(decodedTx) - - if (decodedTx.NetworkID == null) { - decodedTx.NetworkID = txNeedsNetworkID(this) ? this.networkID : undefined - } - // send request const binary = opts?.binary ?? false const request: SimulateRequest = From 44787a09bfcbaf35cd00c73c712e9ce0934b50e0 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 5 Feb 2025 07:41:02 -0800 Subject: [PATCH 08/13] more build issues --- packages/xrpl/src/client/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/xrpl/src/client/index.ts b/packages/xrpl/src/client/index.ts index 4d6ebe5972..cbffa01311 100644 --- a/packages/xrpl/src/client/index.ts +++ b/packages/xrpl/src/client/index.ts @@ -79,7 +79,7 @@ import { separateBuySellOrders, sortAndLimitOffers, } from '../sugar/getOrderbook' -import { decode, dropsToXrp, hashes, isValidClassicAddress } from '../utils' +import { dropsToXrp, hashes, isValidClassicAddress } from '../utils' import { Wallet } from '../Wallet' import { type FaucetRequestBody, From 2226a0e888cc9119e0b284b8b6f45aa6291da1b3 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 5 Feb 2025 09:07:00 -0800 Subject: [PATCH 09/13] fix tests --- packages/xrpl/test/integration/requests/simulate.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/xrpl/test/integration/requests/simulate.test.ts b/packages/xrpl/test/integration/requests/simulate.test.ts index 7f3ed13cdb..5fa645043f 100644 --- a/packages/xrpl/test/integration/requests/simulate.test.ts +++ b/packages/xrpl/test/integration/requests/simulate.test.ts @@ -35,7 +35,7 @@ describe('simulate', function () { assert.equal(simulateResponse.type, 'response') assert.typeOf(simulateResponse.result.meta, 'object') - assert.equal(simulateResponse.result.tx_json, simulateRequest.tx_json) + assert.typeOf(simulateResponse.result.tx_json, 'object') assert.equal(simulateResponse.result.engine_result, 'tesSUCCESS') assert.isFalse(simulateResponse.result.applied) }, @@ -57,7 +57,7 @@ describe('simulate', function () { assert.equal(simulateResponse.type, 'response') assert.typeOf(simulateResponse.result.meta_blob, 'string') - assert.equal(simulateResponse.result.tx_blob, 'string') + assert.typeOf(simulateResponse.result.tx_blob, 'string') assert.equal(simulateResponse.result.engine_result, 'tesSUCCESS') assert.isFalse(simulateResponse.result.applied) }, From a421062c97992b3c2619f9e2933993b47211bbbf Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Wed, 5 Feb 2025 09:14:00 -0800 Subject: [PATCH 10/13] more fixes --- packages/xrpl/test/integration/requests/simulate.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/xrpl/test/integration/requests/simulate.test.ts b/packages/xrpl/test/integration/requests/simulate.test.ts index 5fa645043f..d6ea013996 100644 --- a/packages/xrpl/test/integration/requests/simulate.test.ts +++ b/packages/xrpl/test/integration/requests/simulate.test.ts @@ -76,7 +76,7 @@ describe('simulate', function () { assert.equal(simulateResponse.type, 'response') assert.typeOf(simulateResponse.result.meta, 'object') - assert.equal(simulateResponse.result.tx_json, tx) + assert.typeOf(simulateResponse.result.tx_json, 'object') assert.equal(simulateResponse.result.engine_result, 'tesSUCCESS') assert.isFalse(simulateResponse.result.applied) }, From ee06587bd10e79ee97349a1f68425c13c97f1d20 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Thu, 6 Feb 2025 13:27:27 -0800 Subject: [PATCH 11/13] update history --- packages/xrpl/HISTORY.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/xrpl/HISTORY.md b/packages/xrpl/HISTORY.md index 74c5cdfc0d..2ba0f9b9f8 100644 --- a/packages/xrpl/HISTORY.md +++ b/packages/xrpl/HISTORY.md @@ -11,7 +11,7 @@ Subscribe to [the **xrpl-announce** mailing list](https://groups.google.com/g/xr * Deprecated `setTransactionFlagsToNumber`. Start using convertTxFlagsToNumber instead ### Added -* Support for the `simulate` RPC +* Support for the `simulate` RPC ([XLS-69d](https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-0069d-simulate)) ## 4.1.0 (2024-12-23) From 67e0967eb670c1384cb7cbad180ea82182c0dc41 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Thu, 6 Feb 2025 13:37:13 -0800 Subject: [PATCH 12/13] fix tests --- packages/xrpl/test/integration/requests/serverInfo.test.ts | 1 + packages/xrpl/test/integration/requests/serverState.test.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/xrpl/test/integration/requests/serverInfo.test.ts b/packages/xrpl/test/integration/requests/serverInfo.test.ts index 465301abd6..848f8dab9c 100644 --- a/packages/xrpl/test/integration/requests/serverInfo.test.ts +++ b/packages/xrpl/test/integration/requests/serverInfo.test.ts @@ -125,6 +125,7 @@ describe('server_info (rippled)', function () { 'build_version', 'node_size', 'initial_sync_duration_us', + 'git', ] assert.deepEqual( omit(response.result.info, removeKeys), diff --git a/packages/xrpl/test/integration/requests/serverState.test.ts b/packages/xrpl/test/integration/requests/serverState.test.ts index a5ceeee31e..9848a803b0 100644 --- a/packages/xrpl/test/integration/requests/serverState.test.ts +++ b/packages/xrpl/test/integration/requests/serverState.test.ts @@ -116,6 +116,7 @@ describe('server_state', function () { 'node_size', 'initial_sync_duration_us', 'ports', + 'git', ] assert.deepEqual( omit(response.result.state, removeKeys), From fc2decabf1b5d1ae09c850f84ebf9180e92d6765 Mon Sep 17 00:00:00 2001 From: Mayukha Vadari Date: Fri, 7 Feb 2025 09:27:26 -0800 Subject: [PATCH 13/13] fix history --- packages/xrpl/HISTORY.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/xrpl/HISTORY.md b/packages/xrpl/HISTORY.md index 2ba0f9b9f8..a290c38383 100644 --- a/packages/xrpl/HISTORY.md +++ b/packages/xrpl/HISTORY.md @@ -11,7 +11,7 @@ Subscribe to [the **xrpl-announce** mailing list](https://groups.google.com/g/xr * Deprecated `setTransactionFlagsToNumber`. Start using convertTxFlagsToNumber instead ### Added -* Support for the `simulate` RPC ([XLS-69d](https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-0069d-simulate)) +* Support for the `simulate` RPC ([XLS-69](https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-0069-simulate)) ## 4.1.0 (2024-12-23)