Commit Graph

32 Commits

Author SHA1 Message Date
Felix Lange 245f3146c2
rpc: implement full bi-directional communication (#18471)
New APIs added:

    client.RegisterName(namespace, service) // makes service available to server
    client.Notify(ctx, method, args...)     // sends a notification
    ClientFromContext(ctx)                  // to get a client in handler method

This is essentially a rewrite of the server-side code. JSON-RPC
processing code is now the same on both server and client side. Many
minor issues were fixed in the process and there is a new test suite for
JSON-RPC spec compliance (and non-compliance in some cases).

List of behavior changes:

- Method handlers are now called with a per-request context instead of a
  per-connection context. The context is canceled right after the method
  returns.
- Subscription error channels are always closed when the connection
  ends. There is no need to also wait on the Notifier's Closed channel
  to detect whether the subscription has ended.
- Client now omits "params" instead of sending "params": null when there
  are no arguments to a call. The previous behavior was not compliant
  with the spec. The server still accepts "params": null.
- Floating point numbers are allowed as "id". The spec doesn't allow
  them, but we handle request "id" as json.RawMessage and guarantee that
  the same number will be sent back.
- Logging is improved significantly. There is now a message at DEBUG
  level for each RPC call served.
2019-02-04 13:47:34 +01:00
Ralph Caraveo III 5d30be412b all: switch out defunct set library to different one (#16873)
* keystore, ethash, eth, miner, rpc, whisperv6: tech debt with now defunct set.

* whisperv5: swap out gopkg.in/fatih/set.v0 with supported set
2018-07-16 10:54:19 +03:00
Egon Elbre e063d538b8 rpc: fix megacheck warnings 2017-08-08 11:08:37 +02:00
Bas van Kervel 37e3f561f1
rpc: support subscriptions under custom namespaces 2017-04-25 11:13:22 +02:00
Bas van Kervel 7d0ac94809
rpc: improve BlockNumber unmarshal parsing 2017-04-13 13:20:19 +02:00
Péter Szilágyi 18c77744ff
all: fix spelling errors 2017-01-06 19:44:35 +02:00
Felix Lange cf71f5cd60 rpc: remove HexNumber, replace all uses with hexutil types
This change couldn't be automated because HexNumber was used for numbers
of all sizes.
2016-12-20 14:41:58 +01:00
Felix Lange adab2e16bd rpc: remove HexBytes, replace all uses with hexutil.Bytes 2016-12-20 14:35:26 +01:00
Felix Lange b0d9f7372a internal/ethapi: add missing output fields
- returned headers didn't include mixHash
- returned transactions didn't include signature fields
- empty transaction input was returned as "", but should be "0x"
- returned receipts didn't include the bloom filter
- "root" in receipts was missing 0x prefix
2016-08-04 01:40:50 +02:00
Bas van Kervel 47ff813012 rpc: refactor subscriptions and filters 2016-08-17 12:59:58 +02:00
Felix Lange 91b7690428 rpc: add new client, use it everywhere
The new client implementation supports concurrent requests,
subscriptions and replaces the various ad hoc RPC clients
throughout go-ethereum.
2016-07-22 23:21:27 +02:00
Felix Lange bb01bea4e2 rpc: fix bad method error for batch requests
If a batch request contained an invalid method, the server would reply
with a non-batch error response. Fix this by tracking an error for each
batch element.
2016-07-22 23:21:27 +02:00
Bas van Kervel aa9fff3e68 rpc: various fixes/enhancements
rpc: be less restrictive on the request id
rpc: improved documentation
console: upgrade web3.js to version 0.16.0
rpc: cache http connections
rpc: rename wsDomains parameter to wsOrigins
2016-04-12 11:02:39 +02:00
Bas van Kervel f7328c5ecb rpc: add pub/sub support 2016-04-01 18:26:35 +02:00
Péter Szilágyi 5da7ec7c18 cmd, eth, rpc: fix some RPC issues with pending blocks 2016-02-03 10:35:59 +02:00
Bas van Kervel 19b2640e89 rpc: migrated the RPC insterface to a new reflection based RPC layer 2016-01-26 13:51:50 +01:00
Bas van Kervel a4a4e9fcf8 removed old rpc structure and added new inproc api client 2015-06-22 09:17:09 +02:00
Gustav Simonsson 037772fc07 fix hex conversion bug in RPC for byte slices 2015-05-12 17:22:17 +02:00
Péter Szilágyi 0ad5898c0f rpc, xeth: fix #881, gracefully handle offline whisper 2015-05-11 11:53:53 +03:00
Bas van Kervel 61885aa965 Don't export types/functions 2015-04-19 10:01:50 +02:00
Bas van Kervel 2c229bac00 Replaced channel pointer field with non pointer channel 2015-04-19 09:55:41 +02:00
Bas van Kervel ead3dd9759 Stop accepted and alive connections (http keep-alive) when the rpc service is stopped 2015-04-16 19:23:57 +02:00
Bas van Kervel 57f93d25bd admin.stopRPC support added which stops the RPC HTTP listener 2015-04-16 12:56:51 +02:00
Taylor Gerring 435378e953 Improved test coverage for rpc types 2015-04-04 15:09:30 +02:00
Taylor Gerring 2efb89d544 Guard for nil *big.Int 2015-04-02 13:04:58 +02:00
Taylor Gerring edfd2757d9 Better decoding of uint* 2015-04-02 12:52:25 +02:00
Taylor Gerring b10e33c040 More types supported 2015-04-02 12:31:10 +02:00
Taylor Gerring cc45b4d8b5 Trim left only, not right 2015-04-02 12:30:42 +02:00
Taylor Gerring c71ca1a089 Better nil handling 2015-04-02 11:32:50 +02:00
Taylor Gerring 5d8be9c30d Fixed decoding for uint64 into bytes 2015-04-01 23:08:00 +02:00
Taylor Gerring eac4d582d7 Patches 2015-04-01 17:49:22 +02:00
Taylor Gerring 55b9689950 rename messages to types 2015-04-01 15:53:48 +02:00