Neil Booth
cdcd4d7215
Fix 'tuple' object has no attribute 'copy'
...
Occurred when switching interfaces and there were unanswered
requests that need resending. This bug isn't new; it's been
there since at least 3rd June.
2015-09-02 11:56:53 +09:00
Neil Booth
119aa5bf2e
Move message so it doesn't repeat when connecting
2015-09-01 17:30:22 +09:00
Neil Booth
72f429c353
Remove unused callback
2015-09-01 14:41:06 +09:00
Neil Booth
a5e0265010
Make exchange rate plugin a network thread job
...
This fixes a lot of thread error noise when closing down electrum.
2015-08-31 20:33:39 +09:00
Neil Booth
2ee506ac03
Fix typo.
2015-08-31 14:05:38 +09:00
Neil Booth
2d05e7d891
Merge the network and network_proxy
2015-08-31 12:00:38 +09:00
Neil Booth
a056f9804b
Notify when a chunk of headers is validated
...
And a couple of cosmetic changes.
This should fix #1379 .
2015-08-25 14:27:53 +09:00
Neil Booth
49a48d52ac
Use select.
2015-08-22 14:03:08 +02:00
ThomasV
713fa00d86
fix estimatefee for daemon
2015-08-07 10:54:32 +02:00
ThomasV
43880d452e
dynamic fees
2015-08-05 15:45:28 +02:00
Eagle[TM]
4578777c29
network: Update default servers
2015-07-10 19:35:02 +02:00
Neil Booth
5acbe00cbf
Suggested auto_connect daemon mode fix for #1336
2015-07-03 11:50:53 +09:00
ThomasV
604d5d432c
sanitize server at the interface level (follow up to issue #1330 )
2015-07-01 09:09:00 +02:00
ThomasV
0ac3aebb88
fix proxy setting issue #1330
2015-07-01 08:45:47 +02:00
ThomasV
118052d815
v2.4 will require protocol v0.10
2015-06-27 15:22:34 +02:00
ThomasV
fdd43bd5ad
fix issue in f307b18546
2015-06-24 09:35:54 +02:00
ThomasV
f307b18546
Merge pull request #1268 from kyuupichan/blockchain_nothread
...
Make the blockchain class not a thread
2015-06-24 09:00:52 +02:00
ThomasV
f894af90d7
fix deserialize_proxy. fixes #1309
2015-06-23 14:22:10 +02:00
ThomasV
d6cdc085ea
fix #1283
2015-06-11 10:03:26 +02:00
ThomasV
e31ac7905d
Clear address cache when interface changes. Send requests only if interface is connected.
2015-06-11 02:10:06 +02:00
Neil Booth
28f440350d
Fix request handling.
...
Handle local requests immediately.
Defer those requiring connectivity until we have an interface.
2015-06-11 08:31:19 +09:00
ThomasV
e517321f76
Network: fix handle_requests, must process requests even if we are not connected
2015-06-10 18:26:03 +02:00
ThomasV
6ea04e2d47
Network: Fix switch_to_interface (check that interface is connected)
2015-06-10 18:24:57 +02:00
Neil Booth
caebdd0819
Need an interface to process a request.
...
Occasionally triggered with a race at start up, typically from
the verifier requesting a merkle root.
2015-06-04 11:22:57 +09:00
Neil Booth
d16714a1db
Make the blockchain class not a thread
...
Remove interface communication out of blockchain.py
into network.py. network.py handles protocol requests
for headers and chunks. blockchain.py continues to
handle their analysis and verification.
If an interface provides a header chain that doesn't
connect, it is dismissed, as per a previous TODO comment.
This removes a thread and another source of timeouts.
I see no performance issues with this when truncating the
blockchain.
Rename 'result' to 'header' for clarity.
2015-06-01 20:53:42 +09:00
Neil Booth
76355e66c8
Make interface status tri-state.
...
This allows us to distinguish between connecting and connected
state in interface.py (used to be done in network.py but that
had other issues).
This means we don't switch to a connecting server, and get_interfaces()
does not report connecting ones.
2015-06-01 18:22:03 +09:00
Neil Booth
2b66f0d459
Remove pending_servers, self.interfaces is now the complete set of
...
interfaces we have created.
Existing code has the concept of pending servers, where a connection
thread is started but has not sent a connection notification, and
and interfaces which have received the notification.
This separation caused a couple of minor bugs, and given the cleaner
semantics of unifying the two I don't think the separation is beneficial.
The bugs:
1) When stopping the network, we only stopped the connected interface
threads, not the pending ones. This would leave Python hanging
on exit if we don't make them daemon threads.
2) start_interface() did not check pending servers before starting
a new thread. Some of its callers did, but not all, so it was
possible to initiate two threads to one server and "lose" one thread.
Apart form fixing the above two issues, unification causes one more
change in semantics: we are now willing to switch to a connection
that is pending (we don't switch to failed interfaces). I don't
think that is a problem: if it times out we'll just switch
again when we receive the disconnect notification, and previously the
fact that an interface was in the interaces dictionary wasn't a
guarantee the connection was good anyway: we might not have processed
a pending disconnection notification.
2015-05-30 17:42:11 +09:00
Neil Booth
45a8740755
Common stale interface testing and switching
...
Three places used to test for lagging and switch. Commonize the
code. We test for lagging before autoconnect so lagging
diagnostics are output if not auto-connect.
Lagging diagnotics moved to server_is_lagging().
2015-05-27 00:42:43 +09:00
Neil Booth
39fe24b4d3
Rename auto_cycle to auto_connect in config
...
User config is updated if appropriate.
Add tests behaviour is as expected.
Just the one rename-it reference to auto_cycle remains.
2015-05-25 16:18:52 +09:00
Neil Booth
4f6d2f3d32
Put getting of auto_cycle into one place.
...
Default to False consistently; this may change the behaviour of
network.py's get_parameters().
2015-05-25 14:09:43 +09:00
Neil Booth
01d8f79a75
Clean up pick_random_server() and filter_protocol() and their
...
call sites.
Remove unused imports and redundant random pick of server
2015-05-24 21:07:35 +09:00
Neil Booth
89c1a1a0ab
Improve logic in network.py's set_parameters()
...
1) For new proxy or protocol, restart the network and default to
the requested server.
2) Otherwise if we aren't using the requested server, switch to it
3) Otherwise choose a random server if the requested server is
stale and auto_connect is True
As switch_to_interface() now has another user, move the logic
there whereby we close the old interface in order to terminate
subscriptions, in order to have it in one place.
2015-05-23 23:33:17 +09:00
ThomasV
0fbbeb16be
Merge pull request #1232 from kyuupichan/switch-or-start
...
switch_to_interface() to start interface if not connected
2015-05-23 07:30:00 +02:00
ThomasV
b029589fc1
fix issue #1233
2015-05-22 20:47:51 +02:00
Neil Booth
2f34f3db21
Only start if not already in pending_servers
...
This was only in one call site previously, not both.
2015-05-22 16:29:56 +09:00
Neil Booth
31ffd4b381
switch_to_interface() to start interface if not connected
...
Two places currently have switch-to-or-start-interface logic.
Put that common logic into switch_to_interface().
2015-05-22 16:24:58 +09:00
Neil Booth
346e38674b
Absorb add_interface and remove_interface
...
They are now only called from the same place; it's simpler
and clearer to put them inline.
2015-05-22 15:26:17 +09:00
ThomasV
0b201d98ab
Merge pull request #1230 from kyuupichan/switch-random-if
...
Remove interfaces in one place only
2015-05-22 08:13:14 +02:00
Neil Booth
274965468e
Remove interfaces in one place only
...
switch_to_random_interface used to do is_connected()
checks and remove interfaces when switching. This
is redundant: interfaces are only added to self.interfaces
once in is_connected() state from process_if_notification().
When they are disconnected, a notification is also received
and process_if_notification() performs the removal. Furthermore,
two other callers of switch_to_interface do not do explicit
is_connected() checks before calling it.
2015-05-22 15:01:11 +09:00
Neil Booth
4873c455b9
Add documentation string. Fix uninitialized f error.
...
Traceback (most recent call last):
File "src/electrum/lib/network.py", line 411, in process_request
out['result'] = f(*params)
UnboundLocalError: local variable 'f' referenced before assignment
[Network] network error local variable 'f' referenced before assignment
2015-05-22 14:14:06 +09:00
Neil Booth
05dd310431
Set 'connecting' status in one place.
...
Also means when switching to an already connected server our
status doesn't quickly change to connecting and back again.
2015-05-22 14:05:58 +09:00
Neil Booth
86626d8080
Consistency in handling of self.interface
...
switch_to_interface() becomes the common place where
self.interface is set; therefore self.interface is not None
precisely when self.default_server is connected. Previously some
places required it to be connected and some didn't. Also an
interface change now sends the 'updated' notification
consistently - previously some did and some didn't.
Have network_start() call start_interfaces() - this also means
network restarts now do this.
Fix apparent off-by-one in start_interfaces()
2015-05-22 09:13:09 +09:00
Neil Booth
c918e74039
Put common network start and stop code in one place.
...
Prefer to use safer self.is_connected() as it checks interface
is not None.
Using common code gives small observable changes in behaviour:
- slightly different print_error() messages
- network restarts now enter status 'connecting' which they
didn't before, which seems correct
- status 'connecting' is done with set_status() rather than
simply assigning the status, which seems more correct. Now
that the response_queue is available in the constructor this
works; it used to fail with 'response_queue is not defined'
2015-05-22 07:52:59 +09:00
ThomasV
8620019f92
Merge pull request #1222 from kyuupichan/if_notification
...
Put interface notification handling in its own function.
2015-05-21 15:05:07 +02:00
ThomasV
5bd22d2378
follow-up to bd781d600b8ce2bc9dcebebbdb0fb60ad2fb892e: use pipe
2015-05-21 12:50:26 +02:00
Neil Booth
c9a30eb5f2
Put interface notification handling in its own function.
2015-05-21 17:45:37 +09:00
Neil Booth
bd781d600b
Have queues passed to the network constructor.
...
This is somewhat cleaner as the proxy's pipe and network setup
was awkwardly interleaved. It also means network's constructor
is free to use both; currently some code is working around the
fact that the response queue doesn't exist in the constructor.
2015-05-21 12:49:39 +09:00
ThomasV
2104e96a66
network: use get_nowait on one of the two queues
2015-05-19 10:22:25 +02:00
Neil Booth
63733ccd2a
No need for thread to handle requests
...
Handle requests in the main loop.
Remove unused lock.
interface.py was reworked and send_request() no longer throws.
2015-05-19 14:29:10 +09:00
ThomasV
e33bc2473b
network: don't store unanswered request if result is in cache
2015-05-17 09:00:36 +02:00
ThomasV
6d0bc5d9b3
fix: nodes retry
2015-05-17 08:41:01 +02:00
ThomasV
44f06de796
network: when interface is disconnected, clear cache and resend unanswered requests
2015-05-15 14:47:59 +02:00
ThomasV
a1d1999545
move interfaces maintenance to its own function
2015-05-08 20:13:18 +02:00
ThomasV
f2c2f9d738
network: fix confusion between addresses and cached responses
2015-05-08 17:59:33 +02:00
ThomasV
233fd8ed77
revert 175bfae9e6
. store last known height in wallet instead
2015-05-08 13:43:42 +02:00
ThomasV
ffda5cd866
Merge pull request #1187 from kyuupichan/local_height
...
Move away from requiring network and blockchain objects to be able to re...
2015-05-06 17:45:42 +02:00
Neil Booth
c07e956127
Pass the response_queue to the constructor, not start().
...
Removes an unnecessary Thread base-class override. The python
documentation also strongly discourages overriding anything other
than run().
2015-05-05 20:37:25 +09:00
Neil Booth
9cf2eff16b
Make is_connected into a member function. No change in logic.
2015-05-05 20:00:10 +09:00
Neil Booth
175bfae9e6
Move away from requiring network and blockchain objects to be able to request local height.
...
We store it in the config object instead of in the blockchain object.
The blockchain object now refers to its config, and calls refresh_height() to update it.
The network objects also refer to the config rather than the blockchain.
This is the first of many small steps to untangle the verifier from stored state and so
permit the history tab to work in offline mode. The refactoring will simultaneously clean
up a lot of accumulated cruft.
2015-05-03 15:19:29 +09:00
ThomasV
cdd5d6e130
fix #1136
2015-04-09 19:05:11 +02:00
ThomasV
911a60c02d
separate timeouts for server and nodes retry
2015-04-02 15:12:01 +02:00
ThomasV
98cc9c53d1
do not write config file from network class
2015-04-02 10:50:09 +02:00
ThomasV
a805afa900
save recent_servers in separate file
2015-04-02 10:12:51 +02:00
ThomasV
cf0fcac9fa
fix deserialize_server bug
2015-03-28 19:17:07 +01:00
ThomasV
a4cb70649d
fix synchronizer hanging when not connected.
2015-03-14 08:43:43 +01:00
ThomasV
72688a5cfa
clean implementation of daemon threads
2015-03-13 23:04:29 +01:00
ThomasV
9e4eda24b5
fix #1082
2015-03-13 12:00:08 +01:00
ThomasV
f32f1183fc
print_error methods. request timeout for interface
2015-03-12 21:39:05 +01:00
ThomasV
1569cd0420
serialize/deserialize methods for servers
2015-03-12 18:06:28 +01:00
ThomasV
c4d0314817
network: separate interface management from reconnection logic
2015-03-12 17:44:16 +01:00
ThomasV
799a08514b
move proxy logic to network.py. reload socket module if proxy is disabled
2015-03-12 12:56:06 +01:00
ThomasV
0947eb7960
should test proxy_str. fixes issue #1073
2015-03-10 09:05:44 +01:00
ThomasV
73d8ba24d9
fix network connection issues
2015-03-07 22:47:25 +01:00
ThomasV
e9b06f494d
abort set_parameters if changes are not allowed by config
2015-03-01 07:27:05 +01:00
ThomasV
7a9141e509
deserialize network.proxy to prevent variability
2015-02-28 20:04:03 +01:00
ThomasV
510934d545
do not store protocol explicitly
2015-02-28 15:37:50 +01:00
ThomasV
f489466709
fix: notify proxy when switching server
2015-02-28 14:08:58 +01:00
ThomasV
761871b900
sanitize server and protocol
2015-02-25 17:14:31 +01:00
ThomasV
e389745491
remove appdata_dir and data_dir
2015-02-18 18:48:32 +01:00
ThomasV
03a88743a3
fix typo: stdout
2015-02-11 21:05:33 +01:00
ThomasV
3c6cfc8b70
disable server selector if server is passed from cmd line
2015-01-29 13:35:19 +01:00
ThomasV
8ca17a3e70
print traceback is an exception occurs in network.process_request
2015-01-29 11:32:58 +01:00
ThomasV
30763a6555
fix config: serialize/deserialize proxy
2015-01-29 11:21:17 +01:00
Tafelpoot
d9c5250a6f
removed trailing whitespace and fixed indentation in history widget
2014-10-21 19:05:51 +02:00
ThomasV
b8f971fcd6
force reconnect after delay
2014-09-16 12:21:01 +02:00
ThomasV
90590f70ab
reconnect to main server after timeout
2014-09-14 14:27:39 +02:00
Eagle[TM]
a7cd8b5e9f
Update default server list
2014-08-19 14:41:27 +02:00
ThomasV
854f49fbed
fix number of interfaces being opened
2014-08-17 11:48:46 +02:00
ThomasV
ecdb90b0b7
re-use pending_servers to avoid sending unnecessary notifications
2014-08-04 11:29:58 +02:00
ThomasV
642258ebaa
notify about interfaces
2014-07-30 11:27:52 +02:00
ThomasV
858ff86660
network: disconnected retry interval
2014-07-30 10:43:15 +02:00
ThomasV
ec5478c328
don't use pending_servers
2014-07-30 10:19:15 +02:00
ThomasV
517f649532
fix: missing break
2014-07-29 17:53:31 +02:00
ThomasV
0240b8c924
fix switch_to_random_interface
2014-07-29 14:26:19 +02:00
ThomasV
411a87e0a3
fix disconnection error
2014-07-29 14:19:23 +02:00
ThomasV
1c707d05d3
rm wrong assert clause
2014-07-29 12:48:05 +02:00
ThomasV
58c817f81a
close interfaces on shutdown
2014-07-29 12:13:21 +02:00
ThomasV
ed8f9666df
remove interface.synchronous_get
2014-07-29 00:15:21 +02:00
ThomasV
312051a242
one more daemon thread
2014-07-28 15:49:41 +02:00
ThomasV
fb0574c5a0
fix callbacks
2014-07-28 07:53:02 +02:00
ThomasV
1ee4af8686
fix #778
2014-07-28 06:42:05 +02:00
ThomasV
28df27fba2
update interface.py
2014-07-28 00:13:40 +02:00
ThomasV
035ecbc7cd
redo inter-thread communication using pipes
2014-07-27 17:13:46 +02:00
ThomasV
7abbf329b6
fix
2014-07-25 20:14:08 +02:00
ThomasV
af3fd62fd4
send server height and server lag with daemon
2014-07-25 16:32:19 +02:00
ThomasV
2120b1a573
command line: wait until daemon is connected
2014-07-25 13:30:27 +02:00
ThomasV
8196bc5779
adapt network dialog to daemon
2014-07-25 09:11:56 +02:00
ThomasV
09e4efc439
daemon notifications (network.status)
2014-07-24 23:17:06 +02:00
ThomasV
9ee0614edb
make daemon usable with the GUI
2014-07-24 16:12:18 +02:00
Chris Glass
8997c760a2
Do not use mutables as default values!
...
This blog article explains why (just an example, many other articles
discuss this ad nauseam):
http://pythonconquerstheuniverse.wordpress.com/2012/02/15/mutable-default-arguments/
2014-06-25 17:43:45 +02:00
ThomasV
173c034e26
on_header: return early if block_height is missing
2014-06-12 15:49:53 +02:00
ThomasV
80a988e337
slightly better notifications. at least, it fixes #652
2014-04-17 17:38:21 +02:00
Eagle[TM]
e81385fc05
update server list
2014-03-16 12:18:38 +01:00
ThomasV
32cca276fe
don't use recent_servers if list from irc is available
2014-03-13 19:23:26 +01:00
ThomasV
f3b728989a
update default servers
2014-03-13 14:07:36 +01:00
ThomasV
960e7bc3df
fix reference to verifier
2014-03-11 09:38:08 +01:00
ThomasV
b4bed1ccaa
remove blockchain object from verifier
2014-03-10 20:53:05 +01:00
ThomasV
6e30894af6
daemon; initial commit
2014-03-10 16:16:27 +01:00
ThomasV
3c4fa06c10
parse_servers
2014-02-11 09:48:02 +01:00
ThomasV
268a099f87
sync_get
2014-01-29 16:48:00 +01:00
ThomasV
d15c4f1046
store merkle roots and utxo roots
2014-01-27 10:37:39 +01:00
ThomasV
7c6bc72cb4
daemon
2014-01-27 10:37:39 +01:00
ThomasV
d4fbe85d7d
json rpc daemon
2014-01-27 10:37:39 +01:00
ThomasV
36a6deaee7
renamed server. fixes issue #508
2013-12-25 16:26:15 +01:00
ThomasV
de94eaadeb
fix issue occuring with set_server
2013-12-17 18:20:54 +01:00
ecdsa
ae654b30b9
fix: pending_servers
2013-12-16 20:07:35 +01:00
ecdsa
8140d6c78e
fix typo
2013-12-16 20:04:59 +01:00
ecdsa
d140383d03
exit wait_until_connected() when all servers have been tried
2013-12-16 19:59:35 +01:00
ThomasV
4446cf44c7
don't set network.interface to None when disconnetced
2013-12-16 19:18:57 +01:00
thomasv
942d009661
network.pending_servers, to avoid connecting the same server multiple times
2013-12-16 18:17:44 +01:00
thomasv
c7694a87e7
cleanup code in network.py
2013-12-16 17:37:32 +01:00
ecdsa
8b4410d86a
detect if electrum is offline during wallet creation
2013-12-14 10:20:40 +01:00
Jud Stephenson
03a6791bcb
Set initial 'running' attribute in Network class
...
This was causing a AttributeError when network.is_running() was called before the network was started.
2013-12-08 17:08:06 -05:00
ThomasV
1f13b2f4f3
network.send method
2013-11-11 16:18:40 +01:00
ThomasV
ff647c79fd
Merge pull request #374 from nolith/master
...
allow to connect to one server only
2013-11-10 02:55:33 -08:00
Bryan Stitt
225d8b83a3
don't use bare except
2013-11-09 21:23:57 -08:00
Eagle[TM]
ba9782eec6
Update default server list (disable servers with failed/expired certs)
2013-11-10 01:26:06 +01:00
Alessio Caiazza
423ed77305
allow to connect to one server only
...
This changeset allow to disable block headers retrieval from multiple
servers.
2013-11-06 18:02:37 +01:00
ThomasV
c2f2ec2a8c
rm debug message
2013-11-03 11:06:57 +01:00
Eagle[TM]
dca000568f
Update default server list
2013-10-17 01:44:21 +02:00
ThomasV
116b10cc11
replace blockchain.height with height(), and fix server_lag issue
2013-10-09 10:04:32 +02:00
ThomasV
491aab4afc
network.default_server shouldnever be None
2013-10-08 16:52:50 +02:00
thomasv
e256bae89c
re-add pick_random_server
2013-10-07 16:07:44 +02:00
ThomasV
66f224eab4
update a few scripts
2013-10-06 12:28:45 +02:00
ThomasV
f74aa9ed3a
smaller timeout if disconnected
2013-10-05 15:31:39 +02:00
ThomasV
45b111e14c
enable changes of protocol, proxy at runtime
2013-10-05 13:48:02 +02:00
ThomasV
a6934f6796
support for all protocols
2013-10-05 11:16:09 +02:00
ThomasV
9c1b688e4f
fix: server lag
2013-10-05 11:02:17 +02:00
ThomasV
bc15caa84c
network: fix server lag detection
2013-10-05 10:01:33 +02:00
ThomasV
c0abd3c34e
show lag in status line
2013-10-05 00:49:24 +02:00
ThomasV
a38298c5ee
handle network.interface being None when network is disconnected
2013-10-04 19:27:50 +02:00
ThomasV
c63948b314
update default servers
2013-10-04 14:37:15 +02:00
ThomasV
c0b3aed48b
store a list of recently encountered servers
2013-10-04 14:30:23 +02:00
ThomasV
b1273d3900
network.is_connected()
2013-10-04 13:51:46 +02:00
ThomasV
a9fb0a9d19
resend subscriptions after disconnect
2013-10-04 11:13:05 +02:00
ThomasV
81f24b66c4
maintain NUM_SERVERS interfaces
2013-10-04 10:38:03 +02:00
ThomasV
7a5016ec42
move synchronous_get to network.py, fix get_balance script
2013-10-03 10:05:01 +02:00
ThomasV
56917780f1
server name change (hachre)
2013-10-02 13:50:56 +02:00
ThomasV
40e393187a
manage subscriptions in network.py
2013-10-02 13:00:02 +02:00
ThomasV
a22ae33a81
set_server: resend subscriptions
2013-10-02 12:13:07 +02:00
ThomasV
27cc09e8e2
prevent dns leaks when using proxy. fixes issue #147
2013-10-01 11:24:55 +02:00
ThomasV
7658b2ade1
interface: call socket.connect before sll.wrap_socket, for proxy. (fixes bug #207 )
2013-10-01 09:01:46 +02:00
thomasv
a6002cf71c
SSL certificate validation
2013-09-30 14:01:49 +02:00
ThomasV
d502b93872
network.set_server: test if server is the same
2013-09-27 13:15:57 +02:00
rofl0r
854802122c
fix error to create a wallet due to missing pick_random_server decl
2013-09-18 16:55:19 +00:00
thomasv
b75f8d795a
new command: getrawtransaction
2013-09-15 11:19:48 +02:00
ThomasV
41878dc5e0
rename menu: create tx
2013-09-15 09:03:45 +02:00
ThomasV
d51a8d0f25
create a class for transaction dialog
2013-09-14 21:07:54 +02:00
thomasv
dcedb2d74f
minor fixes
2013-09-13 13:56:33 +02:00
thomasv
6b6c508976
replace wallet.interface everywhere
2013-09-12 14:58:42 +02:00
ThomasV
907dca6eb9
simplify interface: use callbacks
2013-09-12 08:41:27 +02:00
thomasv
77871b97af
fixes, resend_subscriptions
2013-09-10 19:59:58 +02:00
thomasv
73901a001a
pass network to NetworkDialog and Blockchain
2013-09-10 18:27:32 +02:00
thomasv
2df129cfbf
connect to random servers, reconnect if connection is lost
2013-09-10 17:52:43 +02:00
thomasv
0ec436c02c
fix: network start was calling __init__
2013-09-10 16:42:11 +02:00
thomasv
047e4b3478
move callbacks to the network class
2013-09-09 13:33:25 +02:00
ThomasV
328315f94b
separate blockchain and network
2013-09-08 17:23:01 +02:00