Skip to content

Latest commit

 

History

History

two-phase-many

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

Many Two-Phase Transfers Node.js Sample

Code for this sample is in ./main.js.

Prerequisites

Linux >= 5.6 is the only production environment we support. But for ease of development we also support macOS and Windows.

  • NodeJS >= 18

Setup

First, clone this repo and cd into tigerbeetle/src/clients/node/samples/two-phase-many.

Then, install the TigerBeetle client:

npm install tigerbeetle-node

Start the TigerBeetle server

Follow steps in the repo README to run TigerBeetle.

If you are not running on port localhost:3000, set the environment variable TB_ADDRESS to the full address of the TigerBeetle server you started.

Run this sample

Now you can run this sample:

node main.js

Walkthrough

Here's what this project does.

1. Create accounts

This project starts by creating two accounts (1 and 2).

2. Create pending transfers

Then it begins 5 pending transfers of amounts 100 to 500, incrementing by 100 for each transfer.

3. Fetch and validate pending account balances

Then it fetches both accounts and validates that account 1 has:

  • debits_posted = 0
  • credits_posted = 0
  • debits_pending = 1500
  • and credits_pending = 0

And that account 2 has:

  • debits_posted = 0
  • credits_posted = 0
  • debits_pending = 0
  • and credits_pending = 1500

(This is because a pending transfer only affects pending credits and debits on accounts, not posted credits and debits.)

4. Post and void alternating transfers

Then it alternatively posts and voids each transfer, checking account balances after each transfer.

6. Fetch and validate final account balances

Finally, it fetches both accounts, validates they both exist, and checks that credits and debits for both account are now solely posted, not pending.

Specifically, that account 1 has:

  • debits_posted = 1500
  • credits_posted = 0
  • debits_pending = 0
  • and credits_pending = 0

And that account 2 has:

  • debits_posted = 0
  • credits_posted = 1500
  • debits_pending = 0
  • and credits_pending = 0