forked from bitcoin/bitcoin
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* Merge bitcoin#9744: Remove unused module from rpc-tests a432aa0 Remove unused module from rpc-tests (Takashi Mitsuta) * Merge bitcoin#9696: [trivial] Fix recently introduced typos in comments 0c9b9b7 [trivial] Fix recently introduced typos in comments (practicalswift) * Merge bitcoin#9657: Improve rpc-tests.py a6a3e58 Various review markups for rpc-tests.py improvements (John Newbery) 3de3ccd Refactor rpc-tests.py (John Newbery) afd38e7 Improve rpc-tests.py arguments (John Newbery) 91bffff Use argparse in rpc_tests.py (John Newbery) 1581ecb Use configparser in rpc-tests.py (John Newbery) * Merge bitcoin#9724: Qt/Intro: Add explanation of IBD process f6d18f5 Qt/Intro: Explain a bit more what will happen first time (Luke Dashjr) 50c5657 Qt/Intro: Storage shouldn't grow significantly with pruning enabled (Luke Dashjr) 9adb694 Qt/Intro: Move sizeWarningLabel text into C++ code (Luke Dashjr) * Merge bitcoin#9794: Minor update to qrencode package builder 1bfe6b4 Use package name variable inside $(package)_file_name variable (Mitchell Cash) * Merge bitcoin#9726: netbase: Do not print an error on connection timeouts through proxy 3ddfe29 netbase: Do not print an error on connection timeouts through proxy (Wladimir J. van der Laan) 13f6085 netbase: Make InterruptibleRecv return an error code instead of bool (Wladimir J. van der Laan) * Merge bitcoin#9727: Remove fallbacks for boost_filesystem < v3 056aba2 Remove fallbacks for boost_filesystem < v3 (Wladimir J. van der Laan) * Merge bitcoin#9485: ZMQ example using python3 and asyncio b471daf Adddress nits, use asyncio signal handling, create_task (Bob McElrath) 4bb7d1b Add python version checks and 3.4 example (Bob McElrath) 5406d51 Rewrite to not use Polling wrapper for asyncio, link to python2.7 example (Bob McElrath) 5ea5368 ZMQ example using python3 and asyncio (Bob McElrath) * Merge bitcoin#9807: RPC doc fix-ups. 851f6a3 [qa][doc] Correct rpc test options in readme (fanquake) 41e7219 [trivial] Add tests_config.ini to .gitignore (fanquake) * Dashify Co-Authored-By: PastaPastaPasta <pasta@dashboost.org> * Change file permissions * update travis.yml -parallel -> --jobs
- Loading branch information
1 parent
f95aae2
commit a49f412
Showing
28 changed files
with
451 additions
and
268 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,77 +1,118 @@ | ||
#!/usr/bin/env python | ||
#!/usr/bin/env python3 | ||
# Copyright (c) 2014-2016 The Bitcoin Core developers | ||
# Distributed under the MIT software license, see the accompanying | ||
# file COPYING or http://www.opensource.org/licenses/mit-license.php. | ||
|
||
""" | ||
ZMQ example using python3's asyncio | ||
Dash should be started with the command line arguments: | ||
dashd-testnet -daemon \ | ||
-zmqpubhashblock=tcp://127.0.0.1:28332 \ | ||
-zmqpubrawtx=tcp://127.0.0.1:28332 \ | ||
-zmqpubhashtx=tcp://127.0.0.1:28332 \ | ||
-zmqpubhashblock=tcp://127.0.0.1:28332 | ||
We use the asyncio library here. `self.handle()` installs itself as a | ||
future at the end of the function. Since it never returns with the event | ||
loop having an empty stack of futures, this creates an infinite loop. An | ||
alternative is to wrap the contents of `handle` inside `while True`. | ||
A blocking example using python 2.7 can be obtained from the git history: | ||
https://github.com/bitcoin/bitcoin/blob/37a7fe9e440b83e2364d5498931253937abe9294/contrib/zmq/zmq_sub.py | ||
""" | ||
|
||
import binascii | ||
import asyncio | ||
import zmq | ||
import zmq.asyncio | ||
import signal | ||
import struct | ||
import sys | ||
|
||
if not (sys.version_info.major >= 3 and sys.version_info.minor >= 5): | ||
print("This example only works with Python 3.5 and greater") | ||
exit(1) | ||
|
||
port = 28332 | ||
|
||
zmqContext = zmq.Context() | ||
zmqSubSocket = zmqContext.socket(zmq.SUB) | ||
zmqSubSocket.setsockopt(zmq.SUBSCRIBE, b"hashblock") | ||
zmqSubSocket.setsockopt(zmq.SUBSCRIBE, b"hashtx") | ||
zmqSubSocket.setsockopt(zmq.SUBSCRIBE, b"hashtxlock") | ||
zmqSubSocket.setsockopt(zmq.SUBSCRIBE, b"hashgovernancevote") | ||
zmqSubSocket.setsockopt(zmq.SUBSCRIBE, b"hashgovernanceobject") | ||
zmqSubSocket.setsockopt(zmq.SUBSCRIBE, b"hashinstantsenddoublespend") | ||
zmqSubSocket.setsockopt(zmq.SUBSCRIBE, b"rawblock") | ||
zmqSubSocket.setsockopt(zmq.SUBSCRIBE, b"rawtx") | ||
zmqSubSocket.setsockopt(zmq.SUBSCRIBE, b"rawtxlock") | ||
zmqSubSocket.setsockopt(zmq.SUBSCRIBE, b"rawgovernancevote") | ||
zmqSubSocket.setsockopt(zmq.SUBSCRIBE, b"rawgovernanceobject") | ||
zmqSubSocket.setsockopt(zmq.SUBSCRIBE, b"rawinstantsenddoublespend") | ||
zmqSubSocket.connect("tcp://127.0.0.1:%i" % port) | ||
class ZMQHandler(): | ||
def __init__(self): | ||
self.loop = zmq.asyncio.install() | ||
self.zmqContext = zmq.asyncio.Context() | ||
|
||
self.zmqSubSocket = self.zmqContext.socket(zmq.SUB) | ||
self.zmqSubSocket.setsockopt_string(zmq.SUBSCRIBE, "hashblock") | ||
self.zmqSubSocket.setsockopt_string(zmq.SUBSCRIBE, "hashtx") | ||
self.zmqSubSocket.setsockopt_string(zmq.SUBSCRIBE, "hashtxlock") | ||
self.zmqSubSocket.setsockopt_string(zmq.SUBSCRIBE, "hashgovernancevote") | ||
self.zmqSubSocket.setsockopt_string(zmq.SUBSCRIBE, "hashgovernanceobject") | ||
self.zmqSubSocket.setsockopt_string(zmq.SUBSCRIBE, "hashinstantsenddoublespend") | ||
self.zmqSubSocket.setsockopt_string(zmq.SUBSCRIBE, "rawblock") | ||
self.zmqSubSocket.setsockopt_string(zmq.SUBSCRIBE, "rawtx") | ||
self.zmqSubSocket.setsockopt_string(zmq.SUBSCRIBE, "rawtxlock") | ||
self.zmqSubSocket.setsockopt_string(zmq.SUBSCRIBE, "rawgovernancevote") | ||
self.zmqSubSocket.setsockopt_string(zmq.SUBSCRIBE, "rawgovernanceobject") | ||
self.zmqSubSocket.setsockopt_string(zmq.SUBSCRIBE, "rawinstantsenddoublespend") | ||
self.zmqSubSocket.connect("tcp://127.0.0.1:%i" % port) | ||
|
||
try: | ||
while True: | ||
msg = zmqSubSocket.recv_multipart() | ||
topic = str(msg[0].decode("utf-8")) | ||
async def handle(self) : | ||
msg = await self.zmqSubSocket.recv_multipart() | ||
topic = msg[0] | ||
body = msg[1] | ||
sequence = "Unknown" | ||
|
||
if len(msg[-1]) == 4: | ||
msgSequence = struct.unpack('<I', msg[-1])[-1] | ||
sequence = str(msgSequence) | ||
|
||
if topic == "hashblock": | ||
if topic == b"hashblock": | ||
print('- HASH BLOCK ('+sequence+') -') | ||
print(binascii.hexlify(body).decode("utf-8")) | ||
elif topic == "hashtx": | ||
elif topic == b"hashtx": | ||
print ('- HASH TX ('+sequence+') -') | ||
print(binascii.hexlify(body).decode("utf-8")) | ||
elif topic == "hashtxlock": | ||
elif topic == b"hashtxlock": | ||
print('- HASH TX LOCK ('+sequence+') -') | ||
print(binascii.hexlify(body).decode("utf-8")) | ||
elif topic == "rawblock": | ||
elif topic == b"rawblock": | ||
print('- RAW BLOCK HEADER ('+sequence+') -') | ||
print(binascii.hexlify(body[:80]).decode("utf-8")) | ||
elif topic == "rawtx": | ||
elif topic == b"rawtx": | ||
print('- RAW TX ('+sequence+') -') | ||
print(binascii.hexlify(body).decode("utf-8")) | ||
elif topic == "rawtxlock": | ||
elif topic == b"rawtxlock": | ||
print('- RAW TX LOCK ('+sequence+') -') | ||
print(binascii.hexlify(body).decode("utf-8")) | ||
elif topic == "rawinstantsenddoublespend": | ||
elif topic == b"rawinstantsenddoublespend": | ||
print('- RAW IS DOUBLE SPEND ('+sequence+') -') | ||
print(binascii.hexlify(body).decode("utf-8")) | ||
elif topic == "hashgovernancevote": | ||
elif topic == b"hashgovernancevote": | ||
print('- HASH GOVERNANCE VOTE ('+sequence+') -') | ||
print(binascii.hexlify(body).decode("utf-8")) | ||
elif topic == "hashgovernanceobject": | ||
elif topic == b"hashgovernanceobject": | ||
print('- HASH GOVERNANCE OBJECT ('+sequence+') -') | ||
print(binascii.hexlify(body).decode("utf-8")) | ||
elif topic == "rawgovernancevote": | ||
elif topic == b"rawgovernancevote": | ||
print('- RAW GOVERNANCE VOTE ('+sequence+') -') | ||
print(binascii.hexlify(body).decode("utf-8")) | ||
elif topic == "rawgovernanceobject": | ||
elif topic == b"rawgovernanceobject": | ||
print('- RAW GOVERNANCE OBJECT ('+sequence+') -') | ||
print(binascii.hexlify(body).decode("utf-8")) | ||
elif topic == "hashinstantsenddoublespend": | ||
elif topic == b"hashinstantsenddoublespend": | ||
print('- HASH IS DOUBLE SPEND ('+sequence+') -') | ||
print(binascii.hexlify(body).decode("utf-8")) | ||
# schedule ourselves to receive the next message | ||
asyncio.ensure_future(self.handle()) | ||
|
||
def start(self): | ||
self.loop.add_signal_handler(signal.SIGINT, self.stop) | ||
self.loop.create_task(self.handle()) | ||
self.loop.run_forever() | ||
|
||
def stop(self): | ||
self.loop.stop() | ||
self.zmqContext.destroy() | ||
|
||
except KeyboardInterrupt: | ||
zmqContext.destroy() | ||
daemon = ZMQHandler() | ||
daemon.start() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,121 @@ | ||
#!/usr/bin/env python3 | ||
# Copyright (c) 2014-2016 The Bitcoin Core developers | ||
# Distributed under the MIT software license, see the accompanying | ||
# file COPYING or http://www.opensource.org/licenses/mit-license.php. | ||
|
||
""" | ||
ZMQ example using python3's asyncio | ||
Dash should be started with the command line arguments: | ||
dashd -testnet -daemon \ | ||
-zmqpubhashblock=tcp://127.0.0.1:28332 \ | ||
-zmqpubrawtx=tcp://127.0.0.1:28332 \ | ||
-zmqpubhashtx=tcp://127.0.0.1:28332 \ | ||
-zmqpubhashblock=tcp://127.0.0.1:28332 | ||
We use the asyncio library here. `self.handle()` installs itself as a | ||
future at the end of the function. Since it never returns with the event | ||
loop having an empty stack of futures, this creates an infinite loop. An | ||
alternative is to wrap the contents of `handle` inside `while True`. | ||
The `@asyncio.coroutine` decorator and the `yield from` syntax found here | ||
was introduced in python 3.4 and has been deprecated in favor of the `async` | ||
and `await` keywords respectively. | ||
A blocking example using python 2.7 can be obtained from the git history: | ||
https://github.com/bitcoin/bitcoin/blob/37a7fe9e440b83e2364d5498931253937abe9294/contrib/zmq/zmq_sub.py | ||
""" | ||
|
||
import binascii | ||
import asyncio | ||
import zmq | ||
import zmq.asyncio | ||
import signal | ||
import struct | ||
import sys | ||
|
||
if not (sys.version_info.major >= 3 and sys.version_info.minor >= 4): | ||
print("This example only works with Python 3.4 and greater") | ||
exit(1) | ||
|
||
port = 28332 | ||
|
||
class ZMQHandler(): | ||
def __init__(self): | ||
self.loop = zmq.asyncio.install() | ||
self.zmqContext = zmq.asyncio.Context() | ||
|
||
self.zmqSubSocket = self.zmqContext.socket(zmq.SUB) | ||
self.zmqSubSocket.setsockopt_string(zmq.SUBSCRIBE, "hashblock") | ||
self.zmqSubSocket.setsockopt_string(zmq.SUBSCRIBE, "hashtx") | ||
self.zmqSubSocket.setsockopt_string(zmq.SUBSCRIBE, "hashtxlock") | ||
self.zmqSubSocket.setsockopt_string(zmq.SUBSCRIBE, "hashgovernancevote") | ||
self.zmqSubSocket.setsockopt_string(zmq.SUBSCRIBE, "hashgovernanceobject") | ||
self.zmqSubSocket.setsockopt_string(zmq.SUBSCRIBE, "hashinstantsenddoublespend") | ||
self.zmqSubSocket.setsockopt_string(zmq.SUBSCRIBE, "rawblock") | ||
self.zmqSubSocket.setsockopt_string(zmq.SUBSCRIBE, "rawtx") | ||
self.zmqSubSocket.setsockopt_string(zmq.SUBSCRIBE, "rawtxlock") | ||
self.zmqSubSocket.setsockopt_string(zmq.SUBSCRIBE, "rawgovernancevote") | ||
self.zmqSubSocket.setsockopt_string(zmq.SUBSCRIBE, "rawgovernanceobject") | ||
self.zmqSubSocket.setsockopt_string(zmq.SUBSCRIBE, "rawinstantsenddoublespend") | ||
self.zmqSubSocket.connect("tcp://127.0.0.1:%i" % port) | ||
|
||
@asyncio.coroutine | ||
def handle(self) : | ||
msg = yield from self.zmqSubSocket.recv_multipart() | ||
topic = msg[0] | ||
body = msg[1] | ||
sequence = "Unknown"; | ||
if len(msg[-1]) == 4: | ||
msgSequence = struct.unpack('<I', msg[-1])[-1] | ||
sequence = str(msgSequence) | ||
if topic == b"hashblock": | ||
print('- HASH BLOCK ('+sequence+') -') | ||
print(binascii.hexlify(body).decode("utf-8")) | ||
elif topic == b"hashtx": | ||
print ('- HASH TX ('+sequence+') -') | ||
print(binascii.hexlify(body).decode("utf-8")) | ||
elif topic == b"hashtxlock": | ||
print('- HASH TX LOCK ('+sequence+') -') | ||
print(binascii.hexlify(body).decode("utf-8")) | ||
elif topic == b"rawblock": | ||
print('- RAW BLOCK HEADER ('+sequence+') -') | ||
print(binascii.hexlify(body[:80]).decode("utf-8")) | ||
elif topic == b"rawtx": | ||
print('- RAW TX ('+sequence+') -') | ||
print(binascii.hexlify(body).decode("utf-8")) | ||
elif topic == b"rawtxlock": | ||
print('- RAW TX LOCK ('+sequence+') -') | ||
print(binascii.hexlify(body).decode("utf-8")) | ||
elif topic == b"rawinstantsenddoublespend": | ||
print('- RAW IS DOUBLE SPEND ('+sequence+') -') | ||
print(binascii.hexlify(body).decode("utf-8")) | ||
elif topic == b"hashgovernancevote": | ||
print('- HASH GOVERNANCE VOTE ('+sequence+') -') | ||
print(binascii.hexlify(body).decode("utf-8")) | ||
elif topic == b"hashgovernanceobject": | ||
print('- HASH GOVERNANCE OBJECT ('+sequence+') -') | ||
print(binascii.hexlify(body).decode("utf-8")) | ||
elif topic == b"rawgovernancevote": | ||
print('- RAW GOVERNANCE VOTE ('+sequence+') -') | ||
print(binascii.hexlify(body).decode("utf-8")) | ||
elif topic == b"rawgovernanceobject": | ||
print('- RAW GOVERNANCE OBJECT ('+sequence+') -') | ||
print(binascii.hexlify(body).decode("utf-8")) | ||
elif topic == b"hashinstantsenddoublespend": | ||
print('- HASH IS DOUBLE SPEND ('+sequence+') -') | ||
print(binascii.hexlify(body).decode("utf-8")) | ||
# schedule ourselves to receive the next message | ||
asyncio.ensure_future(self.handle()) | ||
|
||
def start(self): | ||
self.loop.add_signal_handler(signal.SIGINT, self.stop) | ||
self.loop.create_task(self.handle()) | ||
self.loop.run_forever() | ||
|
||
def stop(self): | ||
self.loop.stop() | ||
self.zmqContext.destroy() | ||
|
||
daemon = ZMQHandler() | ||
daemon.start() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.