What does it do?
Bitsocket is a powerful bitcoin push notification service for building realtime bitcoin applications.
Bitsocket lets you subscribe to any pattern of realtime bitcoin transactions through
Bitquery and build apps that are driven by the event.
It is 100% open source and designed to be decentralized.
Using bitsocket as a bitcoin message bus, it is possible to
construct various bitcoin application architectures through message piping:
- Bitcoin App
Build applications that listen to and run on various Bitcoin events
- Bitcoin App 3rd party API
Build applications that listen to Bitcoin events and trigger 3rd party APIs
- Bitcoin App Bitcoin
Build apps that listen to certain patterns of transactions, and then trigger another bitcoin transaction in response. Create a looping program on Bitcoin.
- App1 Bitcoin App2
Create apps that communicate with one another through Bitcoin transactions. To communicate, App1 can send an immutable message to App2 by making a bitocin transaction, to which App2 is listening and triggers its own custom action in response. Like
Inter-process calls (IPC), but for Bitcoin.
How does it work?
1. Transform
Bitsocket transforms every incoming raw bitcoin transaction into a structured format that can be filtered, transformed, and programmed, in realtime.
2. Eventify
All the clients plugged into bitsocket subscribe with their own application-specific filter powered by
Bitquery, a Turing complete bitcoin query language. Bitsocket takes the transformed transaction object from the previous step and programmatically turns it into application-specific events in realtime.
3. Push
Each transformed event from the previous step is pushed to the corresponding application via
SSE (Server Sent Events). The apps can be anything from a mobile app to web app to server side app to a hardware device.
Why is it powerful?
1. The Most Powerful Way to Listen to Bitcoin
Bitsocket lets you monitor realtime Bitcoin network like never before
- Write a query to filter EXACTLY the events you want
- From the ENTIRE bitcoin universe (not just a single wallet address or a transaction id. Everything.)
And it's as easy as using websockets (Actually it's SSE). Here's an example of an actual functional code:
// Write a bitquery
var query = {
"v": 3, "q": { "find": {} }
}
// Encode it in base64 format
var b64 = btoa(JSON.stringify(query))
// Subscribe
var bitsocket = new EventSource('https://genesis.bitdb.network/s/1FnauZ9aUH2Bex6JzdcV4eNX7oLSSEbxtN/'+b64)
// Event handler
bitsocket.onmessage = function(e) {
console.log(e.data)
}
Whenever there's a new transaction in bitcoin universe that matches the
query filter specified by the
query
object, bitsocket pushes you the notification via
SSE (server sent events).
2. Portable
Notice from above code that, the EventSource
is openinng a connection to a base64-encoded JSON query object
{
"v": 3,
"q": { "find": { "out.h1": "6d02" } }
}
Basically, you're subscribing to that unique base64 encoded string instead of a specific URL.
If a bitsocket node goes down, all apps plugged into that node can seamlessly migrate to another bitsocket node, providing application portability and decentralization.
3. Programmable
The query language is not just for simple filtering.
It's powered by
Bitquery, a Turing complete Bitcoin query language, which means you can build a programming logic into the query itself to build a custom push API.
For example, you can build your own custom push API for ONLY listening to a certain pattern (memo.cash posts) and then process the raw event to only return the part you need, by adding an additional "processing" step to the query (r.f
). Here's an example:
{
"v": 3,
"q": {
"find": { "out.h1": "6d02" }
},
"r": {
"f": ".[] | .out[] | select(.b0.op? == 106) | .s2"
}
}
You can also use bitsocket to programmatically trigger ANYTHING.
- send mobile push notifications
- trigger an event for a 3rd party application
- trigger certain action for a hardware device
- trigger another bitcoin transaction
- send event to another bitcoin app through bitcoin transaction
All you need to do is write an event handler:
bitsocket.on("message", function(event) {
// Use the 'event' to run whatever logic you want here!
})
What's possible is only bound by your imagination.
4. BitDB Compatible
Bitsocket uses the same query language as BitDB (
Bitquery).
You can think of
BitDB as a "pull" service, whereas Bitsocket is a "push" service.
You can use both in a single appplication to complement each other