mirror of
				https://github.com/Xahau/xahau.js.git
				synced 2025-11-04 04:55:48 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			182 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			182 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
const { encode, decode } = require('./../src/index')
 | 
						|
const fixtures = require('./fixtures/x-codec-fixtures.json')
 | 
						|
 | 
						|
let json_x1 = {
 | 
						|
  OwnerCount: 0,
 | 
						|
  Account: 'XVXdn5wEVm5G4UhEHWDPqjvdeH361P7BsapL4m2D2XnPSwT',
 | 
						|
  PreviousTxnLgrSeq: 7,
 | 
						|
  LedgerEntryType: 'AccountRoot',
 | 
						|
  PreviousTxnID:
 | 
						|
    'DF530FB14C5304852F20080B0A8EEF3A6BDD044F41F4EBBD68B8B321145FE4FF',
 | 
						|
  Flags: 0,
 | 
						|
  Sequence: 1,
 | 
						|
  Balance: '10000000000',
 | 
						|
}
 | 
						|
 | 
						|
let json_r1 = {
 | 
						|
  OwnerCount: 0,
 | 
						|
  Account: 'rLs1MzkFWCxTbuAHgjeTZK4fcCDDnf2KRv',
 | 
						|
  PreviousTxnLgrSeq: 7,
 | 
						|
  LedgerEntryType: 'AccountRoot',
 | 
						|
  PreviousTxnID:
 | 
						|
    'DF530FB14C5304852F20080B0A8EEF3A6BDD044F41F4EBBD68B8B321145FE4FF',
 | 
						|
  Flags: 0,
 | 
						|
  Sequence: 1,
 | 
						|
  Balance: '10000000000',
 | 
						|
  SourceTag: 12345,
 | 
						|
}
 | 
						|
 | 
						|
let json_null_x = {
 | 
						|
  OwnerCount: 0,
 | 
						|
  Account: 'rLs1MzkFWCxTbuAHgjeTZK4fcCDDnf2KRv',
 | 
						|
  Destination: 'rLs1MzkFWCxTbuAHgjeTZK4fcCDDnf2KRv',
 | 
						|
  Issuer: 'XVXdn5wEVm5G4UhEHWDPqjvdeH361P4GETfNyyXGaoqBj71',
 | 
						|
  PreviousTxnLgrSeq: 7,
 | 
						|
  LedgerEntryType: 'AccountRoot',
 | 
						|
  PreviousTxnID:
 | 
						|
    'DF530FB14C5304852F20080B0A8EEF3A6BDD044F41F4EBBD68B8B321145FE4FF',
 | 
						|
  Flags: 0,
 | 
						|
  Sequence: 1,
 | 
						|
  Balance: '10000000000',
 | 
						|
}
 | 
						|
 | 
						|
let json_invalid_x = {
 | 
						|
  OwnerCount: 0,
 | 
						|
  Account: 'rLs1MzkFWCxTbuAHgjeTZK4fcCDDnf2KRv',
 | 
						|
  Destination: 'rLs1MzkFWCxTbuAHgjeTZK4fcCDDnf2KRv',
 | 
						|
  Issuer: 'XVXdn5wEVm5g4UhEHWDPqjvdeH361P4GETfNyyXGaoqBj71',
 | 
						|
  PreviousTxnLgrSeq: 7,
 | 
						|
  LedgerEntryType: 'AccountRoot',
 | 
						|
  PreviousTxnID:
 | 
						|
    'DF530FB14C5304852F20080B0A8EEF3A6BDD044F41F4EBBD68B8B321145FE4FF',
 | 
						|
  Flags: 0,
 | 
						|
  Sequence: 1,
 | 
						|
  Balance: '10000000000',
 | 
						|
}
 | 
						|
 | 
						|
let json_null_r = {
 | 
						|
  OwnerCount: 0,
 | 
						|
  Account: 'rLs1MzkFWCxTbuAHgjeTZK4fcCDDnf2KRv',
 | 
						|
  Destination: 'rLs1MzkFWCxTbuAHgjeTZK4fcCDDnf2KRv',
 | 
						|
  Issuer: 'rLs1MzkFWCxTbuAHgjeTZK4fcCDDnf2KRv',
 | 
						|
  PreviousTxnLgrSeq: 7,
 | 
						|
  LedgerEntryType: 'AccountRoot',
 | 
						|
  PreviousTxnID:
 | 
						|
    'DF530FB14C5304852F20080B0A8EEF3A6BDD044F41F4EBBD68B8B321145FE4FF',
 | 
						|
  Flags: 0,
 | 
						|
  Sequence: 1,
 | 
						|
  Balance: '10000000000',
 | 
						|
}
 | 
						|
 | 
						|
let invalid_json_issuer_tagged = {
 | 
						|
  OwnerCount: 0,
 | 
						|
  Account: 'rLs1MzkFWCxTbuAHgjeTZK4fcCDDnf2KRv',
 | 
						|
  Destination: 'rLs1MzkFWCxTbuAHgjeTZK4fcCDDnf2KRv',
 | 
						|
  Issuer: 'XVXdn5wEVm5G4UhEHWDPqjvdeH361P7BsapL4m2D2XnPSwT',
 | 
						|
  PreviousTxnLgrSeq: 7,
 | 
						|
  LedgerEntryType: 'AccountRoot',
 | 
						|
  PreviousTxnID:
 | 
						|
    'DF530FB14C5304852F20080B0A8EEF3A6BDD044F41F4EBBD68B8B321145FE4FF',
 | 
						|
  Flags: 0,
 | 
						|
  Sequence: 1,
 | 
						|
  Balance: '10000000000',
 | 
						|
}
 | 
						|
 | 
						|
let invalid_json_x_and_tagged = {
 | 
						|
  OwnerCount: 0,
 | 
						|
  Account: 'XVXdn5wEVm5G4UhEHWDPqjvdeH361P7BsapL4m2D2XnPSwT',
 | 
						|
  PreviousTxnLgrSeq: 7,
 | 
						|
  LedgerEntryType: 'AccountRoot',
 | 
						|
  PreviousTxnID:
 | 
						|
    'DF530FB14C5304852F20080B0A8EEF3A6BDD044F41F4EBBD68B8B321145FE4FF',
 | 
						|
  Flags: 0,
 | 
						|
  Sequence: 1,
 | 
						|
  Balance: '10000000000',
 | 
						|
  SourceTag: 12345,
 | 
						|
}
 | 
						|
 | 
						|
let json_issued_x = {
 | 
						|
  TakerPays: {
 | 
						|
    currency: 'USD',
 | 
						|
    issuer: 'X7WZKEeNVS2p9Tire9DtNFkzWBZbFtJHWxDjN9fCrBGqVA4',
 | 
						|
    value: '7072.8',
 | 
						|
  },
 | 
						|
}
 | 
						|
 | 
						|
let json_issued_r = {
 | 
						|
  TakerPays: {
 | 
						|
    currency: 'USD',
 | 
						|
    issuer: 'rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B',
 | 
						|
    value: '7072.8',
 | 
						|
  },
 | 
						|
}
 | 
						|
 | 
						|
let json_issued_with_tag = {
 | 
						|
  TakerPays: {
 | 
						|
    currency: 'USD',
 | 
						|
    issuer: 'X7WZKEeNVS2p9Tire9DtNFkzWBZbFtSiS2eDBib7svZXuc2',
 | 
						|
    value: '7072.8',
 | 
						|
  },
 | 
						|
}
 | 
						|
 | 
						|
describe('X-Address Account is equivalent to a classic address w/ SourceTag', () => {
 | 
						|
  let encoded_x = encode(json_x1)
 | 
						|
  let encoded_r = encode(json_r1)
 | 
						|
  test('Can encode with x-Address', () => {
 | 
						|
    expect(encoded_x).toEqual(encoded_r)
 | 
						|
  })
 | 
						|
 | 
						|
  test('decoded X-address is object w/ source and tag', () => {
 | 
						|
    let decoded_x = decode(encoded_x)
 | 
						|
    expect(decoded_x).toEqual(json_r1)
 | 
						|
  })
 | 
						|
 | 
						|
  test('Encoding issuer X-Address w/ undefined destination tag', () => {
 | 
						|
    expect(encode(json_null_x)).toEqual(encode(json_null_r))
 | 
						|
  })
 | 
						|
 | 
						|
  test('Throws when X-Address is invalid', () => {
 | 
						|
    expect(() => encode(json_invalid_x)).toThrow('checksum_invalid')
 | 
						|
  })
 | 
						|
 | 
						|
  test('Encodes issued currency w/ x-address', () => {
 | 
						|
    expect(encode(json_issued_x)).toEqual(encode(json_issued_r))
 | 
						|
  })
 | 
						|
})
 | 
						|
 | 
						|
describe('Invalid X-Address behavior', () => {
 | 
						|
  test('X-Address with tag throws value for invalid field', () => {
 | 
						|
    expect(() => encode(invalid_json_issuer_tagged)).toThrow(
 | 
						|
      new Error('Issuer cannot have an associated tag'),
 | 
						|
    )
 | 
						|
  })
 | 
						|
 | 
						|
  test('Throws when Account has both X-Addr and Destination Tag', () => {
 | 
						|
    expect(() => encode(invalid_json_x_and_tagged)).toThrow(
 | 
						|
      new Error('Cannot have Account X-Address and SourceTag'),
 | 
						|
    )
 | 
						|
  })
 | 
						|
 | 
						|
  test('Throws when issued currency has tag', () => {
 | 
						|
    expect(() => encode(json_issued_with_tag)).toThrow(
 | 
						|
      'Only allowed to have tag on Account or Destination',
 | 
						|
    )
 | 
						|
  })
 | 
						|
})
 | 
						|
 | 
						|
describe('ripple-binary-codec x-address test', function () {
 | 
						|
  function makeSuite(name, entries) {
 | 
						|
    describe(name, function () {
 | 
						|
      entries.forEach((t, testN) => {
 | 
						|
        test(`${name}[${testN}] encodes X-address json equivalent to classic address json`, () => {
 | 
						|
          expect(encode(t.rjson)).toEqual(encode(t.xjson))
 | 
						|
        })
 | 
						|
        test(`${name}[${testN}] decodes X-address json equivalent to classic address json`, () => {
 | 
						|
          expect(decode(encode(t.xjson))).toEqual(t.rjson)
 | 
						|
        })
 | 
						|
      })
 | 
						|
    })
 | 
						|
  }
 | 
						|
  makeSuite('transactions', fixtures.transactions)
 | 
						|
})
 |