0.0.1 • Published 4 years ago
@aragon/court-backend-server v0.0.1
Court Backend server
This server aims to provide different kind of services to complement the logic implemented at the smart contracts level.
Setup
First clone this repo and install dependencies:
git clone https://github.com/aragonone/court-backend/
cd court-backend
npm i
npx lerna bootstrap
cd packages/server
To run the server simply create your own .env
file, feel free to follow the template provided in .env.sample
.
Once you have done that, spin up a docker container with:
docker-compose up -d
If you had run it before, make sure to remove it first:
docker-compose down
and simply run the following commands:
npx sequelize db:create
npx sequelize db:migrate
npx sequelize db:seed:all
npm start
Remember to append NODE_ENV=production
if needed.
Endpoints
All the provided endpoints are Content-Type: application/json
1. Subscriptions
1.1. Create
- URL: /subscriptions
- Method: POST
- Body:
email
: Email address, string mandatoryaddress
: Ethereum address, string not mandatory
- Response:
- Code: 200
- Content example:
{ "id": 4, "email": "bla@gmail.com", "address": "0xd5931f0a36FE76845a5330f6D0cd7a378401e34d", "updatedAt":"2019-12-19T16:00:18.208Z", "createdAt":"2019-12-19T16:00:18.208Z" }
1.2. All
- URL: /subscriptions
- Method: GET
- Query:
token
: JSON web tokenlimit
: Number of items to be fetchedpage
: Page number to be used for the items to be fetched based on the limit requested
- Response:
- Code: 200
- Content example:
{ "subscriptions":[ { "id": 9, "email": "juan@aragon.one", "address": "0xd5931f0a36FE76845a5330f6D0cd7a378401", "createdAt": "2019-12-25T14:58:58.705Z", "updatedAt":"2019-12-25T14:58:58.705Z" }, { "id": 8, "email": "delfi@aragon.one", "address": "0xd5931f0a36FE76845a5330f6D0cd7a378401", "createdAt": "2019-12-25T14:58:52.433Z", "updatedAt": "2019-12-25T14:58:52.433Z" } ], "total": 9 }
2. Reveals
2.1. Create
- URL: /reveals
- Method: POST
- Body:
juror
: Ethereum address of the juror requesting for the revealvoteId
: Vote ID to be revealed for the given juroroutcome
: Outcome voted in favor ofsalt
: Salt used for the committed vote to be revealed
- Response:
- Code: 200
- Content example:
{ "reveal": { "id": 1, "juror": "0xd5931f0a36FE76845a5330f6D0cd7a378401", "voteId": "0", "disputeId": "0", "roundNumber": "0", "createdAt": "2019-12-25T14:58:58.705Z", "updatedAt":"2019-12-25T14:58:58.705Z" } }
2.2. Show
- URL: /reveal
- Method: GET
- Body:
juror
: Ethereum address of the juror requesting for the revealvoteId
: Vote ID to be revealed for the given juror
- Response:
- Code: 200
- Content example:
{ "reveal": { "id": 1, "juror": "0xd5931f0a36FE76845a5330f6D0cd7a378401", "voteId": "0", "disputeId": "0", "roundNumber": "0", "createdAt": "2019-12-25T14:58:58.705Z", "updatedAt":"2019-12-25T14:58:58.705Z" } }
2.3. All
- URL: /reveals
- Method: GET
- Query:
token
: JSON web tokenlimit
: Number of items to be fetchedpage
: Page number to be used for the items to be fetched based on the limit requested
- Response:
- Code: 200
- Content example:
{ "reveals":[ { "id": 9, "juror": "0xd5931f0a36FE76845a5330f6D0cd7a378401", "voteId": "0", "disputeId": "0", "roundNumber": "0", "outcome": "4", "salt": "0x609a2445eb34bc29b4d87aea2cae24fba90a1583b14df2d765ae1f89d32b4beb", "revealed": false, "tries": 3, "errorId": 41, "createdAt": "2019-12-25T14:58:58.705Z", "updatedAt":"2019-12-25T14:58:58.705Z" } ], "total": 1 }
3. Admins
3.1. Login
- URL: /login
- Method: POST
- Body:
email
: Admin emailpassword
: Admin password
- Response:
- Code: 200
Content example:
{ "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhZG1pbiI6ImZhY3VAYXJhZ29uLm9uZSIsImlhdCI6MTU3ODA4MTI5NCwiZXhwIjoxNTc4MDg0ODk0fQ.lmcJOE0eblD_maqXqyK0_H2swXnvG9lfEm1aJRGiAVw" }
3.2. Me
- URL: /me
- Method: GET
- Query:
token
: JSON web token
- Response:
- Code: 200
- Content example:
{ "admin": { "id": 1, "email": "admin@aragon.one" } }
3.3. All
- URL: /admins
- Method: GET
- Query:
token
: JSON web tokenlimit
: Number of items to be fetchedpage
: Page number to be used for the items to be fetched based on the limit requested
- Response:
- Code: 200
- Content example:
{ "reveals":[ { "id": 9, "juror": "0xd5931f0a36FE76845a5330f6D0cd7a378401", "voteId": "0", "disputeId": "0", "roundNumber": "0", "outcome": "4", "salt": "0x609a2445eb34bc29b4d87aea2cae24fba90a1583b14df2d765ae1f89d32b4beb", "revealed": false, "tries": 3, "createdAt": "2019-12-25T14:58:58.705Z", "updatedAt":"2019-12-25T14:58:58.705Z", "error": { "id": 41, "context": "Worker 'reveal' job #1 revealing vote ID 0 for juror 0xd5931f0a36fe76845a5330f6d0cd7a378401e34d", "message": "Transaction: 0x8752864b6fd59ec6365855fe17bbfc2382632e27e9d9e92e8d817e626582a757 exited with an error (status 0). Reason given: DM_INVALID_ADJUDICATION_STATE.\n Please check that the transaction:\n - satisfies all conditions set by Solidity `require` statements.\n - does not trigger a Solidity `revert` statement.\n", "stack": "Error: Transaction: 0x8752864b6fd59ec6365855fe17bbfc2382632e27e9d9e92e8d817e626582a757 exited with an error (status 0). Reason given: DM_INVALID_ADJUDICATION_STATE. at PromiEvent (~/court-backend/packages/shared/node_modules/@truffle/contract/lib/promievent.js:9:30)\n at TruffleContract.reveal (~/court-backend/packages/shared/node_modules/@truffle/contract/lib/execute.js:169:26)\n at module.exports.revealFor (~/court-backend/packages/shared/models/Court.js:261:19)\n at process._tickCallback (internal/process/next_tick.js:68:7)", "createdAt": "2019-12-25T16:06:42.304Z", "updatedAt": "2019-12-25T16:06:42.304Z" } } ], "total": 1 }
3.4. Create
- URL: /admins
- Method: POST
- Body:
token
: JSON web tokenemail
: Admin emailpassword
: Admin password
- Response:
- Code: 200
- Content example:
{ "admin": { "id": 2, "email": "admin@aragon.one" } }
3.5. Delete
- URL: /admins/:id
- Method: DELETE
- Query:
token
: JSON web token
- Response:
- Code: 200
- Content example: empty
4. Errors
4.1. Show
- URL: /error/:id
- Method: GET
- Query:
token
: JSON web token
- Response:
- Code: 200
- Content example:
{ "error": { "id": 45, "context": "Worker 'settlements' job #2 settling dispute #0", "message": "fetch is not defined", "stack": "ReferenceError: fetch is not defined\n at TruffleEnvironment.query (~/court-backend/packages/shared/models/evironments/Environment.js:19:22)\n at module.exports.getJurors (~/court-backend/packages/shared/models/Court.js:95:43)\n at module.exports.settle (~/court-backend/packages/shared/models/Court.js:346:33)\n at process._tickCallback (internal/process/next_tick.js:68:7)", "createdAt": "2019-12-27T13:09:04.204Z", "updatedAt": "2019-12-27T13:09:04.204Z" } }
4.2. All
- URL: /errors
- Method: GET
- Query:
token
: JSON web tokenlimit
: Number of items to be fetchedpage
: Page number to be used for the items to be fetched based on the limit requested
- Response:
- Code: 200
- Content example:
{ "errors": [ { "id": 45, "context": "Worker 'settlements' job #2 settling dispute #0", "message": "fetch is not defined", "stack": "ReferenceError: fetch is not defined\n at TruffleEnvironment.query (~/court-backend/packages/shared/models/evironments/Environment.js:19:22)\n at module.exports.getJurors (~/court-backend/packages/shared/models/Court.js:95:43)\n at module.exports.settle (~/court-backend/packages/shared/models/Court.js:346:33)\n at process._tickCallback (internal/process/next_tick.js:68:7)", "createdAt": "2019-12-27T13:09:04.204Z", "updatedAt": "2019-12-27T13:09:04.204Z" }, { "id": 44, "context": "Worker 'settlements' job #1 settling dispute #0", "message": "Cannot read property 'rounds' of undefined", "stack": "TypeError: Cannot read property 'rounds' of undefined\n at module.exports.getJurors (~/court-backend/packages/shared/models/Court.js:100:27)\n at module.exports.settle (~/court-backend/packages/shared/models/Court.js:346:33)\n at process._tickCallback (internal/process/next_tick.js:68:7)", "createdAt": "2019-12-27T13:00:34.091Z", "updatedAt": "2019-12-27T13:00:34.091Z" } ], "total": 45 }
0.0.1
4 years ago