mirror of
				https://github.com/Xahau/xahau.js.git
				synced 2025-11-04 04:55:48 +00:00 
			
		
		
		
	- Removes need for bundlers to polyfill the `Buffer` class. `UInt8Array` are used instead which are native to the browser and node. - Reduces bundle size 7.1kb gzipped and eliminates 4 runtime dependencies: `base-x`, `base64-js`, `buffer`, and `ieee754`. BREAKING CHANGE: All methods that previously took a `Buffer` now accept a `UInt8Array`. --------- Co-authored-by: Jackson Mills <jmills@ripple.com>
		
			
				
	
	
		
			97 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { hexToBytes } from '@xrplf/isomorphic/utils'
 | 
						|
import { deriveAddress, deriveKeypair, generateSeed } from 'ripple-keypairs'
 | 
						|
 | 
						|
import { Account, secretToEntropy } from '../src'
 | 
						|
 | 
						|
describe('API: XRPL Secret Numbers', () => {
 | 
						|
  describe('Generate new account', () => {
 | 
						|
    const account = new Account()
 | 
						|
    it('Output sanity checks', () => {
 | 
						|
      expect(account.getAddress()).toMatch(/^r[a-zA-Z0-9]{19,}$/u)
 | 
						|
      const entropy = secretToEntropy(`${account.toString()}`.split(' '))
 | 
						|
      const familySeed = generateSeed({ entropy })
 | 
						|
      const keypair = deriveKeypair(familySeed)
 | 
						|
      const address = deriveAddress(keypair.publicKey)
 | 
						|
      expect(address).toEqual(account.getAddress())
 | 
						|
      expect(familySeed).toEqual(account.getFamilySeed())
 | 
						|
    })
 | 
						|
  })
 | 
						|
 | 
						|
  describe('Account based on entropy', () => {
 | 
						|
    const entropy = hexToBytes('0123456789ABCDEF0123456789ABCDEF')
 | 
						|
    const account = new Account(entropy)
 | 
						|
 | 
						|
    it('familySeed as expected', () => {
 | 
						|
      expect(account.getFamilySeed()).toEqual('sp5DmDCut79BpgumfHhvRzdxXYQyU')
 | 
						|
    })
 | 
						|
    it('address as expected', () => {
 | 
						|
      expect(account.getAddress()).toEqual('rMCcybKHfwCSkDHd3M36PAeUniEoygwjR3')
 | 
						|
    })
 | 
						|
    it('Account object to string as expected', () => {
 | 
						|
      const accountAsStr =
 | 
						|
        '002913 177673 352434 527196 002910 177672 352435 527190'
 | 
						|
      expect(`${account.toString()}`).toEqual(accountAsStr)
 | 
						|
    })
 | 
						|
  })
 | 
						|
 | 
						|
  describe('Account based on existing secret', () => {
 | 
						|
    const secret = [
 | 
						|
      '084677',
 | 
						|
      '005323',
 | 
						|
      '580272',
 | 
						|
      '282388',
 | 
						|
      '626800',
 | 
						|
      '105300',
 | 
						|
      '560913',
 | 
						|
      '071783',
 | 
						|
    ]
 | 
						|
 | 
						|
    const account = new Account(secret)
 | 
						|
 | 
						|
    it('familySeed as expected', () => {
 | 
						|
      expect(account.getFamilySeed()).toEqual('sswpWwri7Y11dNCSmXdphgcoPZk3y')
 | 
						|
    })
 | 
						|
    it('publicKey as expected', () => {
 | 
						|
      const pubkey =
 | 
						|
        '020526A0EDC9123F7FBB7588402518B80FCD2C8D8AB4C45F5A68A2F220098EA06F'
 | 
						|
      expect(account.getKeypair().publicKey).toEqual(pubkey)
 | 
						|
    })
 | 
						|
    it('privateKey as expected', () => {
 | 
						|
      const privkey =
 | 
						|
        '005122B2127B4635FEE7D242FA6EC9B02B611C04494D0D7D49764374D90C8BC8D3'
 | 
						|
      expect(account.getKeypair().privateKey).toEqual(privkey)
 | 
						|
    })
 | 
						|
    it('address as expected', () => {
 | 
						|
      expect(account.getAddress()).toEqual('rfqJsRLLmr7wdWnEzW1mP6AVaPSdzmso9Z')
 | 
						|
    })
 | 
						|
    it('Account object to string as expected', () => {
 | 
						|
      const accountAsStr =
 | 
						|
        '084677 005323 580272 282388 626800 105300 560913 071783'
 | 
						|
      expect(`${account.toString()}`).toEqual(accountAsStr)
 | 
						|
    })
 | 
						|
  })
 | 
						|
 | 
						|
  describe('Checksum error', () => {
 | 
						|
    const secret = [
 | 
						|
      '084677',
 | 
						|
      '005324',
 | 
						|
      '580272',
 | 
						|
      '626800',
 | 
						|
      '282388',
 | 
						|
      '105300',
 | 
						|
      '560913',
 | 
						|
      '071783',
 | 
						|
    ]
 | 
						|
    it('Should throw an Checksum Error', () => {
 | 
						|
      expect(() => {
 | 
						|
        // eslint-disable-next-line no-new -- Don't want unused variable
 | 
						|
        new Account(secret)
 | 
						|
      })
 | 
						|
        // TODO: Remove if jest is removed.
 | 
						|
        // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- Jest and Jasmine have two different signatures.
 | 
						|
        // @ts-expect-error
 | 
						|
        .toThrowError(Error, 'Invalid secret part: checksum invalid')
 | 
						|
    })
 | 
						|
  })
 | 
						|
})
 |