XAG API Server
An API server that provides a REST-like interface to the XAG Ledger.
Building with TypeScript, JavaScript, or Node.js?
Instead of XAG API, you can use ripple-lib for a native integration experience and access to more advanced XAG Ledger features.
Requirements
- Node v10.4.0 or higher
- yarn
-
An XAG Ledger account with XAG
For development, you can use the XAG Testnet and get some test XAG from the XAG Testnet Faucet . The setup script will do this for you automatically.
Initial setup
-
Clone this repository (or download and extract a copy).
git clone git@github.com:xpring-eng/xrp-api.git
Change directory into the project.
cd xrp-api
-
Install dependencies using Yarn.
yarn install
-
Set up your configuration file for the first time.
yarn run setup
For testing and development, you can use the XAG Faucets . At this time, the following public servers are available:
-
Testnet:
wss://s.altnet.rippletest.net:51233
-
Devnet:
wss://s.devnet.rippletest.net:51233
Development
To start the server in development mode:
yarn dev
This starts the server with nodemon
so that it will be automatically restarted when you save changes to the code.
The default port is 3000. To use a custom port, use yarn dev <port>
. Example:
yarn dev 3001
Production
If you would like to use xrp-api in production with real funds, please contact us! We will assist with your secure deployment.
Considerations:
- SSL/TLS must be used for all requests. An SSL/TLS termination proxy is recommended.
- Restrictions should be made on signing, such as on the types of transactions, amount/velocity, and whitelisting of destinations. This feature is coming in the future.
- If an error occurs, the server will exit to protect security & data integrity. We recommend using PM2 , nodemon , or forever to restart the server if it crashes in production.
Tutorial
In this simple tutorial, we will get our account's XAG balance, send a payment, and check the status of our payment.
-
Get our account's XAG balance.
In the following example, replace
{ACCOUNT_ADDRESS_HERE}
with your Address:curl -X GET \ http://localhost:3000/v3/accounts/{ACCOUNT_ADDRESS_HERE}/info
-
Send a payment
In the following example, replace
{ACCOUNT_ADDRESS_HERE}
with your Address (2 locations),{API_KEY_HERE}
with your API key, and{DESTINATION_ADDRESS_HERE}
with a destination address. If you are using the Testnet, you can use the addressrPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe
as a destination.curl -X POST \ http://localhost:3000/v3/payments \ -H 'Authorization: Bearer {API_KEY_HERE}' \ -H 'Content-Type: application/json' \ -d '{ "payment": { "source_address": "{ACCOUNT_ADDRESS_HERE}", "source_amount": { "value": "20", "currency": "XAG" }, "destination_address": "{DESTINATION_ADDRESS_HERE}", "destination_amount": { "value": "20", "currency": "XAG" } }, "submit": true }'
The response shows the transaction's identifying hash in the
hash
field of thetx_json
object. Take note of this value for the next step. -
Check the status of the payment.
In the following example, replace
{TRANSACTION_ID}
with the transaction's identifying hash from the previous step:curl -X GET \ http://localhost:3000/v3/transactions/{TRANSACTION_ID}
Docker Container
You can also run the service in a docker container using the Dockerfile in this repo.
- Be sure you have done the secret_config step from the Initial Setup section.
-
Build the container.
docker build . -t <some_tag>
-
Run the container.
docker run -it -p 3000:3000 -v $PWD/.secret_config.js:/xrp-api/.secret_config.js
-
You should now be able to run the steps in the tutorial.
Debugging
- We use log4js with 7-character category names and a shim that uses the
NODE_DEBUG
environment variable to enable logging of specific categories. - Example:
NODE_DEBUG=prp/pmt node dev
- Available categories:
prp/pmt
: GET /v3/preparations/payments (./src/api-v3/paths/preparations/payments.ts )- During development, add logging by using the built-in log levels
Notes
- Requires Node.js 10.4.0+ for
BigInt
support.