如何从 Clojure 调用 json-rpc?
How to a json-rpc call from Clojure?
我在端口 8545 上有一个本地服务器 运行,它侦听 JSON-RPC 请求。我可以像这样使用 curl 调用它:
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0xf54c19d9ef3873bfd1f7a622d02d86249a328f06", "latest"],"id":1}' http://localhost:8545
Clojure 的等效调用是什么?我是否需要向 project.clj 添加一些外部库?
我认为你应该试试 http-kit。
此外,您还需要一些 json (data.json or cheshire)
的库
所以添加到您的 project.clj
以下依赖项:
- [http-kit "2.1.18"]
- [org.clojure/data.json "0.2.6"]
然后试试这个
(ns your-ns
(:require [org.httpkit.client :as http]
[clojure.data.json :as json]))
(let [url "http://localhost:8545"
body (json/write-str
{:jsonrpc "2.0"
:method "eth_getBalance"
:params ["0xf54c19d9ef3873bfd1f7a622d02d86249a328f06" "latest"]
:id 1})
options {:body body}
result @(http/post url options)]
(prn result))
我有一个类似的用例,所以我创建了一个小的 Clojure library 来进行 JSON-RPC 调用。有了这个,你可以做到,
(ns example.core
(:require [json-rpc.core :as rpc]))
(with-open [channel (rpc/open "http://localhost:8545")]
(rpc/send! channel "eth_blockNumber" ["latest"]))
;; => {:result "0x14eca", :id "6fd9a7a8-c774-4b76-a61e-6802ae64e212"}
,样板文件将为您处理。
我在端口 8545 上有一个本地服务器 运行,它侦听 JSON-RPC 请求。我可以像这样使用 curl 调用它:
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0xf54c19d9ef3873bfd1f7a622d02d86249a328f06", "latest"],"id":1}' http://localhost:8545
Clojure 的等效调用是什么?我是否需要向 project.clj 添加一些外部库?
我认为你应该试试 http-kit。 此外,您还需要一些 json (data.json or cheshire)
的库所以添加到您的 project.clj
以下依赖项:
- [http-kit "2.1.18"]
- [org.clojure/data.json "0.2.6"]
然后试试这个
(ns your-ns
(:require [org.httpkit.client :as http]
[clojure.data.json :as json]))
(let [url "http://localhost:8545"
body (json/write-str
{:jsonrpc "2.0"
:method "eth_getBalance"
:params ["0xf54c19d9ef3873bfd1f7a622d02d86249a328f06" "latest"]
:id 1})
options {:body body}
result @(http/post url options)]
(prn result))
我有一个类似的用例,所以我创建了一个小的 Clojure library 来进行 JSON-RPC 调用。有了这个,你可以做到,
(ns example.core
(:require [json-rpc.core :as rpc]))
(with-open [channel (rpc/open "http://localhost:8545")]
(rpc/send! channel "eth_blockNumber" ["latest"]))
;; => {:result "0x14eca", :id "6fd9a7a8-c774-4b76-a61e-6802ae64e212"}
,样板文件将为您处理。