1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
let msg : string =
"In proxy mode, all RPCs of protocol genesis should be forwarded to the \
node. Hence this code should not be reached, because the RPC directory is \
empty."
module ProtoRpc : Tezos_proxy.Proxy_proto.PROTO_RPC = struct
let split_key _ _ = None
let failure_is_permanent _ = false
let do_rpc (pgi : Tezos_proxy.Proxy.proxy_getter_input)
(key : Tezos_protocol_environment.Proxy_context.M.key) =
let chain = pgi.chain in
let block = pgi.block in
Tezos_proxy.Logger.emit
Tezos_proxy.Logger.proxy_block_rpc
( Tezos_shell_services.Block_services.chain_to_string chain,
Tezos_shell_services.Block_services.to_string block,
key )
>>= fun () ->
Protocol_client_context.Genesis_block_services.Context.read
pgi.rpc_context
~chain
~block
key
>>=? fun (raw_context : Tezos_context_sigs.Context.Proof_types.raw_context)
->
Tezos_proxy.Logger.emit Tezos_proxy.Logger.tree_received
@@ Int64.of_int (Tezos_proxy.Proxy_getter.raw_context_size raw_context)
>>= fun () -> return raw_context
end
let () =
let open Tezos_proxy.Registration in
let module M : Proxy_sig = struct
module Protocol = Protocol_client_context.Lifted_protocol
let protocol_hash = Protocol.hash
let directory = Tezos_rpc.Directory.empty
let initial_context (ctx : Tezos_proxy.Proxy_getter.rpc_context_args)
(hash : Context_hash.t) =
let open Lwt_result_syntax in
let p_rpc = (module ProtoRpc : Tezos_proxy.Proxy_proto.PROTO_RPC) in
let* (module ProxyDelegation) =
Tezos_proxy.Proxy_getter.make_delegate ctx p_rpc hash
in
return
(Tezos_protocol_environment.Proxy_context.empty
@@ Some (module ProxyDelegation))
let merkle_tree _ _ _ = failwith "%s" msg
let time_between_blocks _ _ _ = failwith "%s" msg
end in
register_proxy_context (module M)