Compare commits
No commits in common. "ccd9a8c83d360f9a05885e4cce763f77f5799e1c" and "c713053efd19c15c6a22e038d6bf09cf6a860c0f" have entirely different histories.
ccd9a8c83d
...
c713053efd
49
src/hz.erl
49
src/hz.erl
@ -66,8 +66,6 @@
|
|||||||
contract_create/8,
|
contract_create/8,
|
||||||
prepare_contract/1,
|
prepare_contract/1,
|
||||||
prepare_aaci/1,
|
prepare_aaci/1,
|
||||||
cache_aaci/2,
|
|
||||||
lookup_aaci/1,
|
|
||||||
aaci_lookup_spec/2,
|
aaci_lookup_spec/2,
|
||||||
contract_call/5,
|
contract_call/5,
|
||||||
contract_call/6,
|
contract_call/6,
|
||||||
@ -1075,7 +1073,7 @@ contract_create2(CreatorID, Nonce, Amount, TTL, Gas, GasPrice, Source, Options,
|
|||||||
InitArgs :: [string()],
|
InitArgs :: [string()],
|
||||||
Result :: {ok, CreateTX} | {error, Reason},
|
Result :: {ok, CreateTX} | {error, Reason},
|
||||||
CreateTX :: binary(),
|
CreateTX :: binary(),
|
||||||
Reason :: file:posix() | bad_fun_name | aaci_not_found | term().
|
Reason :: file:posix() | term().
|
||||||
%% @doc
|
%% @doc
|
||||||
%% This function takes the compiler output (instead of starting from source),
|
%% This function takes the compiler output (instead of starting from source),
|
||||||
%% and returns the unsigned create contract call data with default values.
|
%% and returns the unsigned create contract call data with default values.
|
||||||
@ -1189,7 +1187,7 @@ read_aci(Path) ->
|
|||||||
|
|
||||||
-spec contract_call(CallerID, AACI, ConID, Fun, Args) -> Result
|
-spec contract_call(CallerID, AACI, ConID, Fun, Args) -> Result
|
||||||
when CallerID :: unicode:chardata(),
|
when CallerID :: unicode:chardata(),
|
||||||
AACI :: aaci() | {aaci, Label :: term()},
|
AACI :: aaci(),
|
||||||
ConID :: unicode:chardata(),
|
ConID :: unicode:chardata(),
|
||||||
Fun :: string(),
|
Fun :: string(),
|
||||||
Args :: [string()],
|
Args :: [string()],
|
||||||
@ -1224,7 +1222,7 @@ contract_call(CallerID, AACI, ConID, Fun, Args) ->
|
|||||||
-spec contract_call(CallerID, Gas, AACI, ConID, Fun, Args) -> Result
|
-spec contract_call(CallerID, Gas, AACI, ConID, Fun, Args) -> Result
|
||||||
when CallerID :: unicode:chardata(),
|
when CallerID :: unicode:chardata(),
|
||||||
Gas :: pos_integer(),
|
Gas :: pos_integer(),
|
||||||
AACI :: aaci() | {aaci, Label :: term()},
|
AACI :: aaci(),
|
||||||
ConID :: unicode:chardata(),
|
ConID :: unicode:chardata(),
|
||||||
Fun :: string(),
|
Fun :: string(),
|
||||||
Args :: [string()],
|
Args :: [string()],
|
||||||
@ -1262,7 +1260,7 @@ contract_call(CallerID, Gas, AACI, ConID, Fun, Args) ->
|
|||||||
GasPrice :: pos_integer(),
|
GasPrice :: pos_integer(),
|
||||||
Amount :: non_neg_integer(),
|
Amount :: non_neg_integer(),
|
||||||
TTL :: non_neg_integer(),
|
TTL :: non_neg_integer(),
|
||||||
AACI :: aaci() | {aaci, Label :: term()},
|
AACI :: aaci(),
|
||||||
ConID :: unicode:chardata(),
|
ConID :: unicode:chardata(),
|
||||||
Fun :: string(),
|
Fun :: string(),
|
||||||
Args :: [string()],
|
Args :: [string()],
|
||||||
@ -2209,34 +2207,11 @@ zip_record_field({Name, Type}, {Remaining, Missing}) ->
|
|||||||
{missing, {Remaining, [Name | Missing]}}
|
{missing, {Remaining, [Name | Missing]}}
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
|
||||||
-spec cache_aaci(Label, AACI) -> ok
|
|
||||||
when Label :: term(),
|
|
||||||
AACI :: aaci().
|
|
||||||
%% @doc
|
|
||||||
%% Caches an AACI for future reference in calls that would otherwise require
|
|
||||||
%% the AACI as an argument. Once cached, a pre-built AACI can be referenced in
|
|
||||||
%% later calls by substituting the AACI argument with `{aaci, Label}'.
|
|
||||||
|
|
||||||
cache_aaci(Label, AACI) ->
|
|
||||||
hz_man:cache_aaci(Label, AACI).
|
|
||||||
|
|
||||||
|
|
||||||
-spec lookup_aaci(Label) -> Result
|
|
||||||
when Label :: term(),
|
|
||||||
Result :: {ok, aaci()} | error.
|
|
||||||
%% @doc
|
|
||||||
%% Retrieve a previously prepared and cached AACI.
|
|
||||||
|
|
||||||
lookup_aaci(Label) ->
|
|
||||||
hz_man:lookup_aaci(Label).
|
|
||||||
|
|
||||||
|
|
||||||
-spec aaci_lookup_spec(AACI, Fun) -> {ok, Type} | {error, Reason}
|
-spec aaci_lookup_spec(AACI, Fun) -> {ok, Type} | {error, Reason}
|
||||||
when AACI :: aaci() | {aaci, Label :: term()},
|
when AACI :: aaci(),
|
||||||
Fun :: binary() | string(),
|
Fun :: binary() | string(),
|
||||||
Type :: {term(), term()}, % FIXME
|
Type :: {term(), term()}, % FIXME
|
||||||
Reason :: bad_fun_name | aaci_not_found.
|
Reason :: bad_fun_name.
|
||||||
|
|
||||||
%% @doc
|
%% @doc
|
||||||
%% Look up the type information of a given function, in the AACI provided by
|
%% Look up the type information of a given function, in the AACI provided by
|
||||||
@ -2247,11 +2222,6 @@ aaci_lookup_spec({aaci, _, FunDefs, _}, Fun) ->
|
|||||||
case maps:find(Fun, FunDefs) of
|
case maps:find(Fun, FunDefs) of
|
||||||
A = {ok, _} -> A;
|
A = {ok, _} -> A;
|
||||||
error -> {error, bad_fun_name}
|
error -> {error, bad_fun_name}
|
||||||
end;
|
|
||||||
aaci_lookup_spec({aaci, Label}, Fun) ->
|
|
||||||
case hz_man:lookup_aaci(Label) of
|
|
||||||
{ok, AACI} -> aaci_lookup_spec(AACI, Fun);
|
|
||||||
error -> {error, aaci_not_found}
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
-spec min_gas_price() -> integer().
|
-spec min_gas_price() -> integer().
|
||||||
@ -2281,12 +2251,7 @@ min_gas() ->
|
|||||||
encode_call_data({aaci, _ContractName, FunDefs, _TypeDefs}, Fun, Args) ->
|
encode_call_data({aaci, _ContractName, FunDefs, _TypeDefs}, Fun, Args) ->
|
||||||
case maps:find(Fun, FunDefs) of
|
case maps:find(Fun, FunDefs) of
|
||||||
{ok, {ArgDef, _ResultDef}} -> encode_call_data2(ArgDef, Fun, Args);
|
{ok, {ArgDef, _ResultDef}} -> encode_call_data2(ArgDef, Fun, Args);
|
||||||
error -> {error, bad_fun_name}
|
error -> {error, bad_fun_name}
|
||||||
end;
|
|
||||||
encode_call_data({aaci, Label}, Fun, Args) ->
|
|
||||||
case hz_man:lookup_aaci(Label) of
|
|
||||||
{ok, AACI} -> encode_call_data(AACI, Fun, Args);
|
|
||||||
error -> {error, aaci_not_found}
|
|
||||||
end.
|
end.
|
||||||
|
|
||||||
encode_call_data2(ArgDef, Fun, Args) ->
|
encode_call_data2(ArgDef, Fun, Args) ->
|
||||||
|
|||||||
@ -20,9 +20,6 @@
|
|||||||
chain_nodes/0, chain_nodes/1,
|
chain_nodes/0, chain_nodes/1,
|
||||||
timeout/0, timeout/1]).
|
timeout/0, timeout/1]).
|
||||||
|
|
||||||
%% Contract caching
|
|
||||||
-export([cache_aaci/2, lookup_aaci/1]).
|
|
||||||
|
|
||||||
%% The whole point of this module:
|
%% The whole point of this module:
|
||||||
-export([request_sticky/1, request_sticky/2, request/1, request/2]).
|
-export([request_sticky/1, request_sticky/2, request/1, request/2]).
|
||||||
|
|
||||||
@ -47,8 +44,7 @@
|
|||||||
chain_nodes = {[], []} :: {[hz:chain_node()], [hz:chain_node()]},
|
chain_nodes = {[], []} :: {[hz:chain_node()], [hz:chain_node()]},
|
||||||
sticky = none :: none | hz:chain_node(),
|
sticky = none :: none | hz:chain_node(),
|
||||||
fetchers = [] :: [#fetcher{}],
|
fetchers = [] :: [#fetcher{}],
|
||||||
timeout = 5000 :: pos_integer(),
|
timeout = 5000 :: pos_integer()}).
|
||||||
cache = #{} :: #{Label :: term() := AACI :: hz:aaci()}}).
|
|
||||||
|
|
||||||
|
|
||||||
-type state() :: #s{}.
|
-type state() :: #s{}.
|
||||||
@ -98,22 +94,6 @@ timeout(Value) when 0 < Value, Value =< 120000 ->
|
|||||||
gen_server:cast(?MODULE, {timeout, Value}).
|
gen_server:cast(?MODULE, {timeout, Value}).
|
||||||
|
|
||||||
|
|
||||||
-spec cache_aaci(Label, AACI) -> ok
|
|
||||||
when Label :: term(),
|
|
||||||
AACI :: hz:aaci().
|
|
||||||
|
|
||||||
cache_aaci(Label, AACI) ->
|
|
||||||
gen_server:call(?MODULE, {cache, Label, AACI}).
|
|
||||||
|
|
||||||
|
|
||||||
-spec lookup_aaci(Label) -> Result
|
|
||||||
when Label :: term(),
|
|
||||||
Result :: {ok, hz:aaci()} | error.
|
|
||||||
|
|
||||||
lookup_aaci(Label) ->
|
|
||||||
gen_server:call(?MODULE, {lookup, Label}).
|
|
||||||
|
|
||||||
|
|
||||||
-spec request_sticky(Path) -> {ok, Value} | {error, Reason}
|
-spec request_sticky(Path) -> {ok, Value} | {error, Reason}
|
||||||
when Path :: unicode:charlist(),
|
when Path :: unicode:charlist(),
|
||||||
Value :: map(),
|
Value :: map(),
|
||||||
@ -187,12 +167,6 @@ handle_call({request, Request}, From, State) ->
|
|||||||
handle_call({request_sticky, Request}, From, State) ->
|
handle_call({request_sticky, Request}, From, State) ->
|
||||||
NewState = do_request_sticky(Request, From, State),
|
NewState = do_request_sticky(Request, From, State),
|
||||||
{noreply, NewState};
|
{noreply, NewState};
|
||||||
handle_call({lookup, Label}, _, State) ->
|
|
||||||
Result = do_lookup(Label, State),
|
|
||||||
{reply, Result, State};
|
|
||||||
handle_call({cache, Label, AACI}, _, State) ->
|
|
||||||
NewState = do_cache_aaci(Label, AACI, State),
|
|
||||||
{reply, ok, NewState};
|
|
||||||
handle_call(tls, _, State = #s{tls = TLS}) ->
|
handle_call(tls, _, State = #s{tls = TLS}) ->
|
||||||
{reply, TLS, State};
|
{reply, TLS, State};
|
||||||
handle_call(chain_nodes, _, State) ->
|
handle_call(chain_nodes, _, State) ->
|
||||||
@ -291,15 +265,6 @@ do_tls(_, State) ->
|
|||||||
State.
|
State.
|
||||||
|
|
||||||
|
|
||||||
do_cache_aaci(Label, AACI, State = #s{cache = Cache}) ->
|
|
||||||
NewCache = maps:put(Label, AACI, Cache),
|
|
||||||
State#s{cache = NewCache}.
|
|
||||||
|
|
||||||
|
|
||||||
do_lookup(Label, #s{cache = Cache}) ->
|
|
||||||
maps:find(Label, Cache).
|
|
||||||
|
|
||||||
|
|
||||||
do_request_sticky(_, From, State = #s{sticky = none}) ->
|
do_request_sticky(_, From, State = #s{sticky = none}) ->
|
||||||
ok = gen_server:reply(From, {error, no_nodes}),
|
ok = gen_server:reply(From, {error, no_nodes}),
|
||||||
State;
|
State;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user