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",
"version": "1.6.6-beta.1",
"version": "1.6.6-beta.2",
"license": "ISC",
"description": "A TypeScript/JavaScript API for interacting with the XRP Ledger in Node.js and the browser",
"files": [

View File

@@ -38,6 +38,23 @@ export interface 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.
* 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.
*/
class LedgerHistory {
private availableVersions = new RangeSet()
latestVersion: null | number = null
feeBase: 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.
@@ -143,25 +161,22 @@ class LedgerHistory {
* of whether ledger history data exists or not. If relevant ledger data
* is found, we'll update our history (ex: from a "ledgerClosed" event).
*/
update(responseData: {
ledger_index?: string
validated_ledgers?: string
fee_base?: string
fee_ref?: string
}) {
this.latestVersion = Number(responseData.ledger_index)
if (responseData.validated_ledgers) {
update(ledgerMessage: LedgerStreamMessage) {
// type: ignored
this.feeBase = ledgerMessage.fee_base
this.feeRef = ledgerMessage.fee_ref
// ledger_hash: ignored
this.latestVersion = ledgerMessage.ledger_index
// ledger_time: ignored
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.parseAndAddRanges(responseData.validated_ledgers)
this.availableVersions.parseAndAddRanges(ledgerMessage.validated_ledgers)
} else {
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()
}
async getLedgerVersion(): Promise<number> {
await this._waitForReady()
return this._ledger.latestVersion!
}
async getFeeBase(): Promise<number> {
await this._waitForReady()
return this._ledger.feeBase!
@@ -578,6 +588,16 @@ export class Connection extends EventEmitter {
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
* (inclusive).

View File

@@ -98,6 +98,7 @@ describe('Connection', function() {
)
assert.strictEqual(await this.api.connection.getFeeBase(), 10)
assert.strictEqual(await this.api.connection.getFeeRef(), 10)
assert.strictEqual(await this.api.connection.getReserveBase(), 20000000) // 20 XRP
})
it('with proxy', function(done) {
@@ -378,7 +379,7 @@ describe('Connection', function() {
throw new Error('error on reconnect')
}
// 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') {
return done()
}