Add api.connection.getReserveBase() (#1259)

* Returns the current minimum reserve, in drops of XRP, that is required
for an account.

* Release 1.6.6-beta.2
This commit is contained in:
Elliot Lee
2020-04-27 09:57:35 -07:00
parent 2e81cfb56f
commit c26ddb497e
3 changed files with 45 additions and 24 deletions

View File

@@ -1,6 +1,6 @@
{ {
"name": "ripple-lib", "name": "ripple-lib",
"version": "1.6.6-beta.1", "version": "1.6.6-beta.2",
"license": "ISC", "license": "ISC",
"description": "A TypeScript/JavaScript API for interacting with the XRP Ledger in Node.js and the browser", "description": "A TypeScript/JavaScript API for interacting with the XRP Ledger in Node.js and the browser",
"files": [ "files": [

View File

@@ -38,6 +38,23 @@ export interface ConnectionOptions {
*/ */
export type ConnectionUserOptions = Partial<ConnectionOptions> export type ConnectionUserOptions = Partial<ConnectionOptions>
/**
* Ledger Stream Message
* https://xrpl.org/subscribe.html#ledger-stream
*/
interface LedgerStreamMessage {
type?: 'ledgerClosed' // not present in initial `subscribe` response
fee_base: number
fee_ref: number
ledger_hash: string
ledger_index: number
ledger_time: number
reserve_base: number
reserve_inc: number
txn_count?: number // not present in initial `subscribe` response
validated_ledgers?: string
}
/** /**
* Represents an intentionally triggered web-socket disconnect code. * Represents an intentionally triggered web-socket disconnect code.
* WebSocket spec allows 4xxx codes for app/library specific codes. * WebSocket spec allows 4xxx codes for app/library specific codes.
@@ -118,10 +135,11 @@ function websocketSendAsync(ws: WebSocket, message: string) {
* captured by the Connection class over time. * captured by the Connection class over time.
*/ */
class LedgerHistory { class LedgerHistory {
private availableVersions = new RangeSet()
latestVersion: null | number = null
feeBase: null | number = null feeBase: null | number = null
feeRef: null | number = null feeRef: null | number = null
latestVersion: null | number = null
reserveBase: null | number = null
private availableVersions = new RangeSet()
/** /**
* Returns true if the given version exists. * Returns true if the given version exists.
@@ -143,25 +161,22 @@ class LedgerHistory {
* of whether ledger history data exists or not. If relevant ledger data * of whether ledger history data exists or not. If relevant ledger data
* is found, we'll update our history (ex: from a "ledgerClosed" event). * is found, we'll update our history (ex: from a "ledgerClosed" event).
*/ */
update(responseData: { update(ledgerMessage: LedgerStreamMessage) {
ledger_index?: string // type: ignored
validated_ledgers?: string this.feeBase = ledgerMessage.fee_base
fee_base?: string this.feeRef = ledgerMessage.fee_ref
fee_ref?: string // ledger_hash: ignored
}) { this.latestVersion = ledgerMessage.ledger_index
this.latestVersion = Number(responseData.ledger_index) // ledger_time: ignored
if (responseData.validated_ledgers) { this.reserveBase = ledgerMessage.reserve_base
// reserve_inc: ignored (may be useful for advanced use cases)
// txn_count: ignored
if (ledgerMessage.validated_ledgers) {
this.availableVersions.reset() this.availableVersions.reset()
this.availableVersions.parseAndAddRanges(responseData.validated_ledgers) this.availableVersions.parseAndAddRanges(ledgerMessage.validated_ledgers)
} else { } else {
this.availableVersions.addValue(this.latestVersion) this.availableVersions.addValue(this.latestVersion)
} }
if (responseData.fee_base) {
this.feeBase = Number(responseData.fee_base)
}
if (responseData.fee_ref) {
this.feeRef = Number(responseData.fee_ref)
}
} }
} }
@@ -563,11 +578,6 @@ export class Connection extends EventEmitter {
await this.connect() await this.connect()
} }
async getLedgerVersion(): Promise<number> {
await this._waitForReady()
return this._ledger.latestVersion!
}
async getFeeBase(): Promise<number> { async getFeeBase(): Promise<number> {
await this._waitForReady() await this._waitForReady()
return this._ledger.feeBase! return this._ledger.feeBase!
@@ -578,6 +588,16 @@ export class Connection extends EventEmitter {
return this._ledger.feeRef! return this._ledger.feeRef!
} }
async getLedgerVersion(): Promise<number> {
await this._waitForReady()
return this._ledger.latestVersion!
}
async getReserveBase(): Promise<number> {
await this._waitForReady()
return this._ledger.reserveBase!
}
/** /**
* Returns true if the given range of ledger versions exist in history * Returns true if the given range of ledger versions exist in history
* (inclusive). * (inclusive).

View File

@@ -98,6 +98,7 @@ describe('Connection', function() {
) )
assert.strictEqual(await this.api.connection.getFeeBase(), 10) assert.strictEqual(await this.api.connection.getFeeBase(), 10)
assert.strictEqual(await this.api.connection.getFeeRef(), 10) assert.strictEqual(await this.api.connection.getFeeRef(), 10)
assert.strictEqual(await this.api.connection.getReserveBase(), 20000000) // 20 XRP
}) })
it('with proxy', function(done) { it('with proxy', function(done) {
@@ -378,7 +379,7 @@ describe('Connection', function() {
throw new Error('error on reconnect') throw new Error('error on reconnect')
} }
// Hook up a listener for the reconnect error event // Hook up a listener for the reconnect error event
this.api.on('error', (error, message) => { this.api.on('error', (error, message) => {
if(error === 'reconnect' && message === 'error on reconnect') { if(error === 'reconnect' && message === 'error on reconnect') {
return done() return done()
} }