The central ledger is a series of services that facilitate clearing and settlement of transfers between DFSPs, including the following functions:
The following documentation represents the services, APIs and endpoints responsible for various ledger functions.
Please follow the instruction in Onboarding Document to setup and run the service locally.
The Central Ledger has many options that can be configured through environment variables.
|Environment variable||Description||Example values|
|CLEDG_DATABASE_URI||The connection string for the database the central ledger will use. Postgres is currently the only supported database.||postgres://\:\@localhost:5432/central_ledger|
|CLEDG_PORT||The port the API server will run on.||3000|
|CLEDG_ADMIN_PORT||The port the Admin server will run on.||3001|
|CLEDG_HOSTNAME||The URI that will be used to create and validate links to resources on the central ledger.||http://central-ledger|
|CLEDG_ENABLE_BASIC_AUTH||Flag to enable basic auth protection on endpoints that require authorization. Username and password would be the account name and password.||false|
|CLEDG_ENABLE_TOKEN_AUTH||Flag to enable token protection on endpoints that require authorization. To create a token, reference the API documentation.||false|
|CLEDG_LEDGER_ACCOUNT_NAME||Name of the account setup to receive fees owed to the central ledger. If the account doesn't exist, it will be created on start up.||LedgerName|
|CLEDG_LEDGER_ACCOUNT_PASSWORD||Password of the account setup to receive fees owed to the central ledger.||LedgerPassword|
|CLEDG_ADMIN_KEY||Key used for admin access to endpoints that require validation.||AdminKey|
|CLEDG_ADMIN_SECRET||Secret used for admin access to endpoints that require validation. Secret also used to sign JWTs used for Admin API.||AdminSecret|
|CLEDG_TOKEN_EXPIRATION||Time in milliseconds for Admin API tokens to expire.||3600000|
|CLEDG_EXPIRES_TIMEOUT||Time in milliseconds to determine how often transfer expiration process runs.||5000|
|CLEDG_AMOUNT__PRECISION||Numeric value used to determine precision recorded for transfer amounts on this ledger.||10|
|CLEDG_AMOUNT__SCALE||Numeric value used to determine scale recorded for transfer amounts on this ledger.||2|
For endpoint documentation, see the API documentation.
For help preparing and executing transfers, see the Transfer Guide
Logs are sent to standard output by default.
Tests include unit, functional, and integration.
Running the tests:
npm run test:all
Tests include code coverage via istanbul. See the test/ folder for testing scripts.
If you want to run integration tests in a repetitive manner, you can startup the test containers using
docker-compose, login to running
central-ledger container like so:
docker-compose -f docker-compose.yml -f docker-compose.integration.yml up kafka mysql central-ledger #in a new shell docker exec -it cl_central-ledger sh npm run migrate #first time only npm run test:int
npm-audit-resolver along with
npm audit to check dependencies for node vulnerabilities, and keep track of resolved dependencies with an
To start a new resolution process, run:
npm run audit:resolve
You can then check to see if the CI will pass based on the current dependencies with:
npm run audit:check
And commit the changed
audit-resolve.json to ensure that CircleCI will build correctly.
As part of our CI/CD process, we use anchore-cli to scan our built docker container for vulnerabilities upon release.
If you find your release builds are failing, refer to the container scanning in our shared Mojaloop CI config repo. There is a good chance you simply need to update the
mojaloop-policy-generator.js file and re-run the circleci workflow.
For more information on anchore and anchore-cli, refer to: