Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/decentraland/ethalarm
⏰ Get notifications whenever an Ethereum smart contract triggers an event.
https://github.com/decentraland/ethalarm
Last synced: about 2 months ago
JSON representation
⏰ Get notifications whenever an Ethereum smart contract triggers an event.
- Host: GitHub
- URL: https://github.com/decentraland/ethalarm
- Owner: decentraland
- Created: 2017-11-04T19:34:06.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2018-01-09T00:34:41.000Z (over 6 years ago)
- Last Synced: 2024-07-12T22:14:34.423Z (2 months ago)
- Language: JavaScript
- Size: 425 KB
- Stars: 56
- Watchers: 28
- Forks: 19
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# ethalarm
Get notified of events triggered by Ethereum contracts.
## Running
Run the server using:
```
npm install
npm start
```Now, go to http://localhost:3000 and the frontend should be displayed to you.
## TODO
* [ ] Add some security to `fetch`
* [ ] Optimize scanner so it doesn't read the whole database each time
* [ ] Add tests## API
### `POST /alarms`
Creates a new alarm, based on data posted through a JSON.
To activate email alerts, an email should be dispatched to the user with a unique hash that should be confirmed (see the `POST /emails/:email/confirmation` endpoint).The request content should follow this [schema](http://json-schema.org/):
```
{
"id": "https://github.com/decentraland/eventlog#POST-Request",
"$schema": "http://json-schema.org/draft-06/schema#",
"description": "Schema for a POST request to /alarm",
"type": "object",
"required": [ "address", "abi", "events", "confirmations" ],
"properties": {
"address": {
"description": "The contract's address",
"type": "string"
},
"abi": {
"description": "The contract's ABI",
"type": "string"
},
"events": {
"description": "List of event names to watch for",
"type": "array",
"items": { "type": "string" }
},
"hook": {
"description": "The URL to query when a new event is generated",
"type": "string"
},
"email": {
"description": "Email to send a notification",
"type": "string"
},
"confirmations": {
"description": "Amount of confirmations to wait before notifying",
"type": "number"
}
}
}
```Example request body:
```
{
"address": "0xcca95e580bbbd04851ebfb85f77fd46c9b91f11c",
"events": ["LockedBalance"],
"hook": "https://decentraland.org/",
"confirmations": 6,
"abi": "[{\"constant\":false,\"inputs\":[{\"name\":\"target\",\"type\":\"address\"}],\"name\":\"setTargetContract\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalLocked\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_acceptingDeposits\",\"type\":\"bool\"}],\"name\":\"changeContractState\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"mana\",\"type\":\"uint256\"}],\"name\":\"lockMana\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"manaToken\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"landClaim\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"lockedBalance\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"acceptingDeposits\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"inputs\":[{\"name\":\"_token\",\"type\":\"address\"}],\"payable\":false,\"type\":\"constructor\"},{\"payable\":true,\"type\":\"fallback\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"mana\",\"type\":\"uint256\"}],\"name\":\"LockedBalance\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"target\",\"type\":\"address\"}],\"name\":\"LandClaimContractSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"user\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"LandClaimExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"_acceptingDeposits\",\"type\":\"bool\"}"
}
```The response body for this method follows a simple schema:
```
{
"id": "https://github.com/decentraland/ethalarm#POST-Response",
"$schema": "http://json-schema.org/draft-06/schema#",
"description": "Schema for a POST response of /alarm",
"type": "object",
"properties": {
"ok": {
"description": "Whether the request was successfull or not",
"type": "bool"
},
"error": {
"description": "If there was an error, a human-readable error explaining it",
"type": "string"
},
"result": {
"type": "object",
"properties": {
"id": {
"description": "An ID to identify the recently created alarm",
"type": "string"
}
}
}
}
}
```### `GET /alarms/:id`
This method should return the data stored in the database for this alarm. It could also return information about triggered alerts for those alarms.
### `DELETE /alarms/:id`
Stop watching the alarm referenced.
### `POST /confirmations/:hash`
Confirmation to start sending emails for the given hash.