Skip to content

Commit 7a2d334

Browse files
committed
feat: add support for xrp nodes with amendment blocked
1 parent b52127b commit 7a2d334

File tree

4 files changed

+38
-8
lines changed

4 files changed

+38
-8
lines changed

packages/fasset-indexer-xrp/.env.template

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ DB_PASSWORD=
99
# rpc
1010
XRP_RPC_URL=
1111
XRP_RPC_API_KEY=
12+
# if node doesn't sync full history there
13+
# are differences in server responses
14+
XRP_RPC_AMENDMENT_BLOCKED=false
1215

1316
# indexing params
1417
XRP_MIN_BLOCK_NUMBER=

packages/fasset-indexer-xrp/src/client/interface.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,20 @@ export interface IXrpMemo {
2929
}
3030
}
3131

32-
export interface IXrpInfoResponse {
32+
export interface IXrpLedgerCurrentResponse {
3333
result: {
3434
ledger_current_index: number
3535
status: string
3636
}
37+
}
38+
39+
export interface IXrpServerInfoResponse {
40+
result: {
41+
info: {
42+
validated_ledger: {
43+
seq: number
44+
}
45+
}
46+
status: string
47+
}
3748
}

packages/fasset-indexer-xrp/src/client/xrp-client.ts

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { XrpConfigLoader } from "../config/config"
2-
import { IXrpBlock, IXrpBlockQueryResponse, IXrpInfoResponse } from "./interface"
2+
import { IXrpBlock, IXrpBlockQueryResponse, IXrpLedgerCurrentResponse, IXrpServerInfoResponse } from "./interface"
33

44
export class XrpClient {
55

@@ -12,15 +12,27 @@ export class XrpClient {
1212
}
1313

1414
async blockHeight(): Promise<number> {
15-
const resp = await this.getLedgerCurrent()
16-
this.ensureSuccess(resp)
17-
return resp.result.ledger_current_index
15+
let current_block = 0
16+
if (this.config.xrpNodeIsAmendmentBlocked) {
17+
const resp = await this.getServerInfo()
18+
this.ensureSuccess(resp)
19+
current_block = resp.result.info.validated_ledger.seq
20+
} else {
21+
const resp = await this.getLedgerCurrent()
22+
this.ensureSuccess(resp)
23+
current_block = resp.result.ledger_current_index
24+
}
25+
return current_block
1826
}
1927

20-
private async getLedgerCurrent(): Promise<IXrpInfoResponse> {
28+
private async getLedgerCurrent(): Promise<IXrpLedgerCurrentResponse> {
2129
return this.request('ledger_current', [])
2230
}
2331

32+
private async getServerInfo(): Promise<IXrpServerInfoResponse> {
33+
return this.request('server_info', [{}])
34+
}
35+
2436
private async getLedger(n: number): Promise<IXrpBlockQueryResponse> {
2537
return this.request('ledger', [{
2638
id: 1,
@@ -39,9 +51,9 @@ export class XrpClient {
3951
return resp.json()
4052
}
4153

42-
private ensureSuccess(resp: { result: { status: string }}): any {
54+
private ensureSuccess(resp: { result: { status: string, error_message?: string }}): any {
4355
if (resp.result.status != 'success') {
44-
throw new Error(`rpc returned ${resp}`)
56+
throw new Error(`rpc returned ${JSON.stringify(resp.result.error_message)}`)
4557
}
4658
}
4759
}

packages/fasset-indexer-xrp/src/config/config.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,8 @@ export class XrpConfigLoader extends ConfigLoader {
1313
get xrpMinBlockNumber(): number {
1414
return parseInt(this.required('XRP_MIN_BLOCK_NUMBER'))
1515
}
16+
17+
get xrpNodeIsAmendmentBlocked(): boolean {
18+
return process.env.XRP_RPC_AMENDMENT_BLOCKED === "true"
19+
}
1620
}

0 commit comments

Comments
 (0)