Skip to content

Instantly share code, notes, and snippets.

@yoshihiro503
Last active June 3, 2020 05:53
Show Gist options
  • Save yoshihiro503/5ac3ae6fbf07aabb57f4c770496dcb57 to your computer and use it in GitHub Desktop.
Save yoshihiro503/5ac3ae6fbf07aabb57f4c770496dcb57 to your computer and use it in GitHub Desktop.

Environment

  • Tezos 28309c81c on mainnnet

Example: Add /hoge RPC API

--- a/src/lib_shell_services/p2p_services.ml
+++ b/src/lib_shell_services/p2p_services.ml
@@ -69,6 +69,13 @@ module S = struct
module S = struct
  ...
       ~output:Network_version.encoding
       RPC_path.(root / "network" / "version")
 
+  let hoge =
+    RPC_service.get_service
+      ~description:"HOGE-HOGE."
+      ~query:RPC_query.empty
+      ~output:Data_encoding.string
+      RPC_path.(root / "hoge")
+
   (* DEPRECATED: use [version] instead. *)
--- a/src/lib_p2p/p2p.ml
+++ b/src/lib_p2p/p2p.ml
@@ -431,6 +431,8 @@ type ('msg, 'peer_meta, 'conn_meta) net = ('msg, 'peer_meta, 'conn_meta) t
 
 let announced_version net = net.announced_version
 
+let hoge _net = "---HOGE---"
+
 let pool net = net.pool
--- a/src/lib_p2p/p2p.mli
+++ b/src/lib_p2p/p2p.mli
@@ -191,6 +191,8 @@ type ('msg, 'peer_meta, 'conn_meta) net = ('msg, 'peer_meta, 'conn_meta) t
 
 val announced_version : ('msg, 'peer_meta, 'conn_meta) net -> Network_version.t
 
+val hoge : ('msg, 'peer_meta, 'conn_meta) net -> string
+
--- a/src/lib_shell/p2p_directory.ml
+++ b/src/lib_shell/p2p_directory.ml
@@ -108,6 +108,10 @@ let build_rpc_directory net =
     RPC_directory.register0 dir P2p_services.S.versions (fun () () ->
         return [P2p.announced_version net])
   in
+  let dir =
+    RPC_directory.register0 dir P2p_services.S.hoge (fun () () ->
+        return (P2p.hoge net))
+  in
   let dir =
--- a/src/lib_shell_services/p2p_services.mli
+++ b/src/lib_shell_services/p2p_services.mli
@@ -49,6 +49,9 @@ module S : sig
   val version :
     ([`GET], unit, unit, unit, unit, Network_version.t) RPC_service.t
 
+  val hoge :
+    ([`GET], unit, unit, unit, unit, string) RPC_service.t
+
   (* DEPRECATED: use [version] instead. *)
   val versions :
     ([`GET], unit, unit, unit, unit, Network_version.t list) RPC_service.t

Run

Run node

./tezos-node identity --data-dir ./tezos-data generate
./tezos-node run --data-dir ./tezos-data --rpc-addr localhost

Call the RPC

yosh:tezos $ ./tezos-client rpc get /hoge
"---HOGE---"
@yoshihiro503
Copy link
Author

yoshihiro503 commented Jun 3, 2020

FAQ

RPC API 一覧のサイトで Protocol Alphaでの ../ ってなに?

../は長すぎてプリントを省略している
/chains/main/blocks/head/context/..... みたいなのの左側がプリントされてないのです
chains/<chain_id>/blocks/<block_id> (<dyn>) の dyn の部分をそのへんが説明しています

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment