mirror of
https://github.com/Xahau/xahau.js.git
synced 2025-11-26 23:25:49 +00:00
* update definitions.json * add AMMInstanceCreate * renamed LPTokens to LPToken in definitions.json * update HISTORY.md * add amm_info RPC command * add AMMDeposit * use null check for missing fields * add AMMWithdraw * add AMMVote * fix lint error * add max trading fee check to AMMVote * refactor MAX_TRADING_FEE to be in one place * add AMMBid * add AuthAccount interface to AMMBid * refactor tests * add AMMID to AMMInfoResponse * update amm_info docstrings * fix EPrice type to be Amount * update EPrice validation error message and add missing tests * update definitions to fix AMM in LEDGER_ENTRY_TYPES * add missing test case Asset1In and Asset2In valid * add missing test case Asset1Out and Asset2Out valid * add negative FeeVal check * update HISTORY.md to specify XLS-30 * update wording on AMMDeposit & AMMWithdraw validation errors * add negative TradingFee check * fix ammInfo response * add AMMID as optional param in ammInfo response * fix EPrice validation checks in AMMDeposit & AMMWithdraw * add VoteSlots as optional param in AMMInfoResponse * update VoteEntry interface * fix deposit and withdraw tests * fix AMMBid ValidationError * update definitions.json with different AuthAccounts number * Change amm_info asset parameters to Currency type * API name changes with updated definitions.json * rename amm_info param asset1 -> asset * fix typo * change AMM_MAX_TRADING_FEE to 1% * Use Asset/Asset2 instead of AMMID for Deposit/Withdraw/Bid/Vote * add Deposit/Withdraw flags * rename FeeVal -> TradingFee in VoteEntry * rename MinBidPrice -> BidMin and MaxBidPrice -> BidMax * update definitions to change Asset & Asset2 nth values to 3 & 4 * update definitions * add Issue type and tests for Asset/Asset2 * remove AMMID from amm_info and use Issue type * update amm_info fields * fix lint errors * update unit tests * add AMM codec-fixtures * update Issue type * add one asset and withdraw all tests * refactor amm_info response fields to match AMMDevnet * update definitions.json with refactored error codes * update ammInfo.ts response model * remove invalid fields from ammInfo.ts response model * update time_interval description * rename test model names and fix lint errors * add Owner Reserve Fee for AMMCreate transaction * add missing asset_frozen field * replace Issue with IssuedCurrency * refactor: convert flags to number * update asset pair to use Currency type * refactor isIssue to isCurrency * add AMM ledger entry object, lsfAMM flag, amm fields to LedgerEntryRequest * update definitions.json * WIP defintions * update codec-fixtures * fix definitions test * update DiscountedFee definition * update definitions * update codec-fixtures * update definitions * update unit tests * update amm_info response * sort imports/exports * update jsdoc * update amm_info jsdoc * update jsdoc * convert caution to all caps * add validation for AuthAccounts * refactor and export interfaces * use Currency type * update definitions * add AMMDelete * rename Issue to Currency in error message * mark asset frozen as optional fields * refactor isAuthAccounts * add AMMDelete jsdoc * rename to validateAuthAccounts * fix typo * fix typo in unit test --------- Co-authored-by: Caleb Kniffen <ckniffen@ripple.com>
161 lines
4.9 KiB
JavaScript
161 lines
4.9 KiB
JavaScript
const { encode, decode, XrplDefinitions } = require('../src')
|
|
const normalDefinitionsJson = require('../src/enums/definitions.json')
|
|
const { UInt32 } = require('../dist/types/uint-32')
|
|
|
|
const txJson = {
|
|
Account: 'r9LqNeG6qHxjeUocjvVki2XR35weJ9mZgQ',
|
|
Amount: '1000',
|
|
Destination: 'rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh',
|
|
Fee: '10',
|
|
Flags: 0,
|
|
Sequence: 1,
|
|
TransactionType: 'Payment',
|
|
}
|
|
|
|
describe('encode and decode using new types as a parameter', function () {
|
|
test('can encode and decode a new TransactionType', function () {
|
|
const tx = { ...txJson, TransactionType: 'NewTestTransaction' }
|
|
// Before updating the types, this should not be encodable
|
|
expect(() => encode(tx)).toThrow()
|
|
|
|
// Normally this would be generated directly from rippled with something like `server_definitions`.
|
|
// Added here to make it easier to see what is actually changing in the definitions.json file.
|
|
const definitions = JSON.parse(JSON.stringify(normalDefinitionsJson))
|
|
definitions.TRANSACTION_TYPES['NewTestTransaction'] = 75
|
|
|
|
const newDefs = new XrplDefinitions(definitions)
|
|
|
|
const encoded = encode(tx, newDefs)
|
|
expect(() => decode(encoded)).toThrow()
|
|
const decoded = decode(encoded, newDefs)
|
|
expect(decoded).toStrictEqual(tx)
|
|
})
|
|
|
|
test('can encode and decode a new Field', function () {
|
|
const tx = { ...txJson, NewFieldDefinition: 10 }
|
|
|
|
// Before updating the types, undefined fields will be ignored on encode
|
|
expect(decode(encode(tx))).not.toStrictEqual(tx)
|
|
|
|
// Normally this would be generated directly from rippled with something like `server_definitions`.
|
|
// Added here to make it easier to see what is actually changing in the definitions.json file.
|
|
const definitions = JSON.parse(JSON.stringify(normalDefinitionsJson))
|
|
|
|
definitions.FIELDS.push([
|
|
'NewFieldDefinition',
|
|
{
|
|
nth: 100,
|
|
isVLEncoded: false,
|
|
isSerialized: true,
|
|
isSigningField: true,
|
|
type: 'UInt32',
|
|
},
|
|
])
|
|
|
|
const newDefs = new XrplDefinitions(definitions)
|
|
|
|
const encoded = encode(tx, newDefs)
|
|
expect(() => decode(encoded)).toThrow()
|
|
const decoded = decode(encoded, newDefs)
|
|
expect(decoded).toStrictEqual(tx)
|
|
})
|
|
|
|
test('can encode and decode a new Field nested in STObject in STArray in STObject', function () {
|
|
const tx = {
|
|
...txJson,
|
|
NewFieldArray: [
|
|
{
|
|
NewField: {
|
|
NewFieldValue: 10,
|
|
},
|
|
},
|
|
],
|
|
}
|
|
|
|
// Before updating the types, undefined fields will be ignored on encode
|
|
expect(decode(encode(tx))).not.toStrictEqual(tx)
|
|
|
|
// Normally this would be generated directly from rippled with something like `server_definitions`.
|
|
// Added here to make it easier to see what is actually changing in the definitions.json file.
|
|
const definitions = JSON.parse(JSON.stringify(normalDefinitionsJson))
|
|
|
|
definitions.FIELDS.push([
|
|
'NewFieldArray',
|
|
{
|
|
nth: 100,
|
|
isVLEncoded: false,
|
|
isSerialized: true,
|
|
isSigningField: true,
|
|
type: 'STArray',
|
|
},
|
|
])
|
|
|
|
definitions.FIELDS.push([
|
|
'NewField',
|
|
{
|
|
nth: 101,
|
|
isVLEncoded: false,
|
|
isSerialized: true,
|
|
isSigningField: true,
|
|
type: 'STObject',
|
|
},
|
|
])
|
|
|
|
definitions.FIELDS.push([
|
|
'NewFieldValue',
|
|
{
|
|
nth: 102,
|
|
isVLEncoded: false,
|
|
isSerialized: true,
|
|
isSigningField: true,
|
|
type: 'UInt32',
|
|
},
|
|
])
|
|
|
|
const newDefs = new XrplDefinitions(definitions)
|
|
|
|
const encoded = encode(tx, newDefs)
|
|
expect(() => decode(encoded)).toThrow()
|
|
const decoded = decode(encoded, newDefs)
|
|
expect(decoded).toStrictEqual(tx)
|
|
})
|
|
|
|
test('can encode and decode a new Type', function () {
|
|
const tx = {
|
|
...txJson,
|
|
TestField: 10, // Should work the same as a UInt32
|
|
}
|
|
|
|
// Normally this would be generated directly from rippled with something like `server_definitions`.
|
|
// Added here to make it easier to see what is actually changing in the definitions.json file.
|
|
const definitions = JSON.parse(JSON.stringify(normalDefinitionsJson))
|
|
definitions.TYPES.NewType = 31
|
|
definitions.FIELDS.push([
|
|
'TestField',
|
|
{
|
|
nth: 100,
|
|
isVLEncoded: true,
|
|
isSerialized: true,
|
|
isSigningField: true,
|
|
type: 'NewType',
|
|
},
|
|
])
|
|
|
|
// Test that before updating the types this tx fails to decode correctly. Note that undefined fields are ignored on encode.
|
|
expect(decode(encode(tx))).not.toStrictEqual(tx)
|
|
|
|
class NewType extends UInt32 {
|
|
// Should be the same as UInt32
|
|
}
|
|
|
|
const extendedCoreTypes = { NewType }
|
|
|
|
const newDefs = new XrplDefinitions(definitions, extendedCoreTypes)
|
|
|
|
const encoded = encode(tx, newDefs)
|
|
expect(() => decode(encoded)).toThrow()
|
|
const decoded = decode(encoded, newDefs)
|
|
expect(decoded).toStrictEqual(tx)
|
|
})
|
|
})
|