Dagger client library
Dagger is the library for dagger project written for node.js and browser. It uses dagger server to get realtime updates from Ethereum and Matic Network.
About dagger
Dagger helps users to develop faster and better Ethereum DApps. For more information:
Installation
NPM
yarn add @maticnetwork/dagger
npm install @maticnetwork/dagger --save
Direct <script>
Include
Simply download lib/dagger.min.js
and include with a script tag. Dagger
will be registered as a global variable.
Usage:
var Dagger = window.Dagger
Network
Mainnet
Websocket: wss://mainnet.dagger.matic.network
Socket: mqtts://mainnet.dagger.matic.network (You can also use `ssl://` protocol)
Kovan
Websocket: wss://kovan.dagger.matic.network
Socket: mqtts://kovan.dagger.matic.network (You can also use `ssl://` protocol)
Ropsten
Websocket: wss://ropsten.dagger.matic.network
Socket: mqtts://ropsten.dagger.matic.network (You can also use `ssl://` protocol)
Matic testnet
Websocket: wss://matic.dagger2.matic.network
Socket: mqtts://matic.dagger2.matic.network (You can also use `ssl://` protocol)
Example
var Dagger = require(" @maticnetwork/dagger");
var dagger = new Dagger("wss://mainnet.dagger.matic.network");
dagger.on("latest:block", function(result) {
console.log("New block created: ", result);
});
dagger.on("latest:block.number", function(result) {
console.log("Current block number: ", result);
});
Test dagger server
This library consists woodendagger
executable which is test dagger server on your local machine. So you can test with TestRPC.
Please do not use woodendagger
in production. It's only for development purpose. It doesn't support removed
flag.
$ woodendagger --url=https://mainnet.infura.io
$ woodendagger --url=http://localhost:8545 --sockport=1883 --wsport=1884
var dagger = new Dagger('mqtt://localhost:1883')
Events
Ethereum events
Every ethereum event has room, and there are two rooms: latest
and confirmed
. latest
events are fired immediately block included in chain. confirmed
events are fired after 12 confirmations.
If you want to show updates on UI in your DApp, use latest
events. It will help to make UI/UX better and user friendly.
Use confirmed
events for irreversible tasks from server or on UI. Like sending email, notifications or allow user to do subsequent task on UI after one transaction gets confirmed.
Every event has to start with room:
dagger.on("latest:block.number", function(result) {
console.log("Current block number: ", result.data);
});
dagger.on("confirmed:addr/0xa7447.../tx/in", function(result) {
});
dagger.on("confirmed:tx/0xd66169d..../receipt", function(result) {
});
You can use wildcard for events too. There are two type of wildcards: +
(for single) and #
(for multiple). Use with caution as it will fetch more data then you need, and can bombard with data to your DApp.
dagger.on('latest:addr/+/tx/out', ...)
dagger.on('latest:log/0xa74476443119a942de498590fe1f2454d7d4ac0d/filter/0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef/+/0x7da82c7ab4771ff031b66538d2fb9b0b047f6cf9/#', ...)
dagger.on('latest:log/0xa74476443119a942de498590fe1f2454d7d4ac0d/filter/0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef/0x7da82c7ab4771ff031b66538d2fb9b0b047f6cf9/#', ...)
dagger.on('latest:log/0xa74476443119a942de498590fe1f2454d7d4ac0d/filter/0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef/#', ...)
Ethereum event | When? | removed flag |
---|
block.number | For every new block number created | |
block.hash | For every new block hash created | Yes |
block | For every new block created | Yes |
block/number | When particular block in future included in chain | Yes |
addr/address /tx | On every new transaction for address | Yes |
addr/address /tx/out | On every new outgoing transaction for address | Yes |
addr/address /tx/in | On every new incoming transaction for address | Yes |
tx/txId | When given txId included in block | Yes |
tx/txId /success | When tx status is success (included in block) for txId | Yes |
tx/txId /fail | When tx fails (included in block) for txId | Yes |
tx/txId /receipt | When receipt is generated (included in block) for txId | Yes |
addr/contractAddress /deployed | When new contractAddress included in block | Yes |
log/contractAddress | When new log generated for contractAddress | Yes |
log/contractAddress /filter/topic0 /topic1 | When new log with topic0 and topic1 generated for contractAddress | Yes |
Dagger events
Dagger event | When? | args |
---|
connection.status | When connection status changes | value: Boolean |
Event names are case-sensitive. address
, txId
and topics
must be in lowercase.
API
Dagger.connect(url, options)
Connects to the dagger specified by the given url and options. It returns a Dagger object.
dagger.on(event, fn)
Subscribe to a topic
event
is a String
topic to subscribe to. event
wildcard characters are supported (+
- for single level and #
- for multi level)fn
- function (data, removed)
fn will be executed when event occurred:
data
data from eventremoved
flag saying if data is removed from blockchain due to re-organization.
dagger.once(event, fn)
Same as on
but will be fired only once.
dagger.off(event, fn)
Unsubscribe from a topic
event
is a String
topic to unsubscribe fromfn
- function (data, removed)
dagger.of(room)
Create room out of dagger. room
has to be one out of two values: latest
and confirmed
room
object has following methods:
on
same as dagger on
once
same as dagger once
off
same as dagger off
dagger.end([force])
Close the dagger, accepts the following options:
force
: passing it to true will close the dagger right away. This parameter is optional.
dagger.contract(web3Contract)
Creates web3 contract wrapper to support dagger.
-
web3Contract
: contract object web3. Example: new web3.eth.Contract(abi, address)
var web3Contract = new web3.eth.Contract(abi, address);
var contract = dagger.contract(web3Contract);
var filter = contract.events.Transfer({
filter: { from: "0x123456..." },
room: "latest"
});
filter.watch(function(data, removed) {
});
filter.watchOnce(function(data, removed) {
});
filter.stopWatching();
Examples
To listen ERC20 transfer event
Use following topic to listen ERC20 transfer event. Use +
instead of or or if you want to listen for any
value.
For latest events:
latest:log/<contract-address>/filter/0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef/<from-address>/<to-address>
For confirmed events:
confirmed:log/<contract-address>/filter/0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef/<from-address>/<to-address>
Support
If you have any queries, feedback or feature requests, feel free to reach out to us on telegram: https://t.me/maticnetwork
License
MIT