forked from TrueCloudLab/neoneo-go
110 lines
3.6 KiB
Markdown
110 lines
3.6 KiB
Markdown
# RPC
|
|
|
|
## What
|
|
|
|
* Structs used by `JSON-RPC` server and for interacting with a `JSON-RPC` endpoint.
|
|
* Server for running the `JSON-RPC` protocol based on port in configuration.
|
|
|
|
> This package is currently in `alpha` and is subject to change.
|
|
|
|
## Reference
|
|
|
|
* [JSON-RPC 2.0 Specification](http://www.jsonrpc.org/specification)
|
|
* [NEO JSON-RPC 2.0 docs](https://docs.neo.org/en-us/node/cli/apigen.html)
|
|
|
|
## Client
|
|
|
|
You can create a new client and start interacting with any NEO node that exposes their
|
|
`JSON-RPC` endpoint. See [godocs](https://godoc.org/github.com/CityOfZion/neo-go/pkg/rpc) for example.
|
|
|
|
> Not all methods are currently supported in the client, please see table below for supported methods.
|
|
|
|
### TODO
|
|
|
|
* Merge structs so can be used by both server and client.
|
|
* Add missing methods to client.
|
|
* Allow client to connect using client cert.
|
|
|
|
### Supported methods
|
|
|
|
| Method | Implemented | Required to implement |
|
|
| ------- | ------------| --------------------- |
|
|
| `getblock` | Yes | - |
|
|
| `getaccountstate` | Yes | - |
|
|
| `invokescript` | Yes | - |
|
|
| `invokefunction` | Yes | - |
|
|
| `sendrawtransaction` | Yes | - |
|
|
| `invoke` | Yes | - |
|
|
| `getrawtransaction` | Yes | - |
|
|
| `validateaddress` | No | Handler and result struct |
|
|
| `getblocksysfee` | No | Handler and result struct |
|
|
| `getcontractstate` | No | Handler and result struct |
|
|
| `getrawmempool` | No | Handler and result struct |
|
|
| `getstorage` | No | Handler and result struct |
|
|
| `submitblock` | No | Handler and result struct |
|
|
| `gettxout` | No | Handler and result struct |
|
|
| `getassetstate` | No | Handler and result struct |
|
|
| `getpeers` | No | Handler and result struct |
|
|
| `getversion` | No | Handler and result struct |
|
|
| `getconnectioncount` | No | Handler and result struct |
|
|
| `getblockhash` | No | Handler and result struct |
|
|
| `getblockcount` | No | Handler and result struct |
|
|
| `getbestblockhash` | No | Handler and result struct |
|
|
|
|
## Server
|
|
|
|
The server is written to support as much of the [JSON-RPC 2.0 Spec](http://www.jsonrpc.org/specification) as possible. The server is run as part of the node currently.
|
|
|
|
### TODO
|
|
|
|
* Implement HTTPS server.
|
|
* Add remaining methods (Documented below).
|
|
* Add Swagger spec and test using dredd in circleCI.
|
|
|
|
### Example call
|
|
|
|
An example would be viewing the version of the node:
|
|
|
|
```bash
|
|
$ curl -X POST -d '{"jsonrpc": "2.0", "method": "getversion", "params": [], "id": 1}' http://localhost:20332
|
|
```
|
|
|
|
which would yield the response:
|
|
|
|
```json
|
|
{
|
|
"jsonrpc" : "2.0",
|
|
"id" : 1,
|
|
"result" : {
|
|
"port" : 20333,
|
|
"useragent" : "/NEO-GO:0.36.0-dev/",
|
|
"nonce" : 9318417
|
|
}
|
|
}
|
|
```
|
|
|
|
### Supported methods
|
|
|
|
| Method | Implemented | Required to implement |
|
|
| ------- | ------------| --------------------- |
|
|
| `getblock` | Yes | - |
|
|
| `getaccountstate` | Yes | - |
|
|
| `invokescript` | No | VM |
|
|
| `invokefunction` | No | VM |
|
|
| `sendrawtransaction` | No | Needs to be implemented in `pkg/core/blockchain.go` |
|
|
| `validateaddress` | Yes | - |
|
|
| `getblocksysfee` | No | N/A |
|
|
| `getcontractstate` | No | Needs to be implemented in `pkg/core/blockchain.go` |
|
|
| `getrawmempool` | No | Needs to be implemented on in `pkg/network/server.go` |
|
|
| `getrawtransaction` | No | Needs to be implemented in `pkg/core/blockchain.go` |
|
|
| `getstorage` | No | VM |
|
|
| `submitblock` | No | Needs to be implemented in `pkg/core/blockchain.go` |
|
|
| `gettxout` | No | Needs to be implemented in `pkg/core/blockchain.go` |
|
|
| `invoke` | No | VM |
|
|
| `getassetstate` | Yes |-|
|
|
| `getpeers` | Yes | - |
|
|
| `getversion` | Yes | - |
|
|
| `getconnectioncount` | Yes | - |
|
|
| `getblockhash` | Yes | - |
|
|
| `getblockcount` | Yes | - |
|
|
| `getbestblockhash` | Yes | - |
|