@ -26,7 +26,8 @@ the Kevacoin Core software, see [https://kevacoin.org](https://kevacoin.org).
@@ -26,7 +26,8 @@ the Kevacoin Core software, see [https://kevacoin.org](https://kevacoin.org).
Documentation
--------------
[Command line and RPC documentation](https://kevacoin.org/documentation.html)
* [Command line and RPC documentation](https://kevacoin.org/documentation.html)
@ -76,7 +76,15 @@ notification `-zmqpubhashtx` the topic is `hashtx` (no null
@@ -76,7 +76,15 @@ notification `-zmqpubhashtx` the topic is `hashtx` (no null
terminator) and the body is the transaction hash (32
bytes).
These options can also be provided in kevacoin.conf.
These options can also be provided in kevacoin.conf. The following is an sample
kevacoin.conf file that support notification to Keva events:
```
rpcport=9332
rpcuser=user
rpcpassword=userpassword
zmqpubkeva=tcp://127.0.0.1:29000
```
ZeroMQ endpoint specifiers for TCP (and others) are documented in the
[ZeroMQ API](http://api.zeromq.org/4-0:_start).
@ -86,6 +94,80 @@ ZMQ_SUBSCRIBE option set to one or either of these prefixes (for
@@ -86,6 +94,80 @@ ZMQ_SUBSCRIBE option set to one or either of these prefixes (for
instance, just `hash`); without doing so will result in no messages
arriving. Please see `contrib/zmq/zmq_sub.py` for a working example.
## Kevacoin Specific Events
Once ZMQ notification is enabled for Keva events, it is easy to subscribe
to the events. The following is a NodeJS example:
```js
var zmq = require('zeromq');
async function run() {
// Create a subscriber socket.
var sock = new zmq.Subscriber;
var addr = 'tcp://127.0.0.1:29000';
// Initiate connection to TCP socket.
sock.connect(addr);
// Subscribe to receive messages for a specific topic.
// This can be "rawblock", "hashblock", "rawtx", or "hashtx".
sock.subscribe('keva');
for await (const [topic, message] of sock) {
if (topic.toString() === 'keva') {
let json = JSON.parse(message);
console.log('received keva:');
console.log(json);
}
}
}
run();
```
Keva messages are in JSON format. This is an example of the `keva_update` messsage:
When developing applications on Kevacoin, it is convenient to be able to subscribe to certain Keva events. For example, a Twitter-like application on Keva blockchain can listen to the event that a user follows the other user. Assume that the follower adds a key to her own namespace (`N_follower`) to indicate that she is following the other user whose namespace is `N_celeb`:
```
keva_put <N_follower><N_celeb> true
```
The application listening to this kind of event will be notified, and then when `N_celeb` publishes a new update, the application will notify the follower.
Similarly, if the follower stops following, she can set the value to `false`:
```
keva_put <N_follower><N_celeb> true
```
The application will also receive this event and stop send her the updates.
Note that the data is completely on the blockchain and the application can be written by anyone. The developer of the application has no monopoly on the data. The pub/sub APIs make it easier to develop applications, though technically the data on the blockchain provides sufficient information and is the single source of truth.
## Remarks
From the perspective of kevacoind, the ZeroMQ socket is write-only; PUB