Compare commits

...

2 Commits

View File

@ -892,7 +892,10 @@ result(Received) -> Received.
-spec contract_create(CreatorID, Path, InitArgs) -> Result -spec contract_create(CreatorID, Path, InitArgs) -> Result
when CreatorID :: unicode:chardata(), when CreatorID :: unicode:chardata(),
Path :: file:filename(), Path :: file:filename(),
InitArgs :: [string()], InitArgs :: [string()]
| {erlang, [term()]}
| {fate, [term()]}
| {sophia, [string()]},
Result :: {ok, CreateTX} | {error, Reason}, Result :: {ok, CreateTX} | {error, Reason},
CreateTX :: binary(), CreateTX :: binary(),
Reason :: file:posix() | term(). Reason :: file:posix() | term().
@ -927,7 +930,10 @@ contract_create(CreatorID, Path, InitArgs) ->
Gas :: pos_integer(), Gas :: pos_integer(),
GasPrice :: pos_integer(), GasPrice :: pos_integer(),
Path :: file:filename(), Path :: file:filename(),
InitArgs :: [string()], InitArgs :: [string()]
| {erlang, [term()]}
| {fate, [term()]}
| {sophia, [string()]},
Result :: {ok, CreateTX} | {error, Reason}, Result :: {ok, CreateTX} | {error, Reason},
CreateTX :: binary(), CreateTX :: binary(),
Reason :: term(). Reason :: term().
@ -1072,7 +1078,10 @@ contract_create2(CreatorID, Nonce, Amount, TTL, Gas, GasPrice, Source, Options,
-spec contract_create_built(CreatorID, Compiled, InitArgs) -> Result -spec contract_create_built(CreatorID, Compiled, InitArgs) -> Result
when CreatorID :: unicode:chardata(), when CreatorID :: unicode:chardata(),
Compiled :: map(), Compiled :: map(),
InitArgs :: [string()], InitArgs :: [string()]
| {erlang, [term()]}
| {fate, [term()]}
| {sophia, [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() | bad_fun_name | aaci_not_found | term().
@ -1097,12 +1106,31 @@ contract_create_built(CreatorID, Compiled, InitArgs) ->
end. end.
-spec contract_create_built(CreatorID, Nonce, Amount, TTL, Gas, GasPrice, Compiled, InitArgs) -> Result
when CreatorID :: unicode:chardata(),
Nonce :: pos_integer(),
Amount :: non_neg_integer(),
TTL :: non_neg_integer(),
Gas :: pos_integer(),
GasPrice :: pos_integer(),
Compiled :: map(),
InitArgs :: [string()]
| {erlang, [term()]}
| {fate, [term()]}
| {sophia, [string()]},
Result :: {ok, CreateTX} | {error, Reason},
CreateTX :: binary(),
Reason :: file:posix() | bad_fun_name | aaci_not_found | term().
%% @doc
%% See `contract_create/8' for detailed information on argument types.
%% The `Compiled' argument is the output of contract compilation and replaces the `File'
%% argument in `contract_create/8'.
contract_create_built(CreatorID, Nonce, Amount, TTL, Gas, GasPrice, Compiled, InitArgs) -> contract_create_built(CreatorID, Nonce, Amount, TTL, Gas, GasPrice, Compiled, InitArgs) ->
AACI = hz_aaci:prepare(maps:get(aci, Compiled)), AACI = hz_aaci:prepare(maps:get(aci, Compiled)),
case encode_call_data(AACI, "init", InitArgs) of case encode_call_data(AACI, "init", InitArgs) of
{ok, CallData} -> {ok, CallData} ->
assemble_calldata(CreatorID, Nonce, Amount, TTL, Gas, GasPrice, assemble_calldata(CreatorID, Nonce, Amount, TTL, Gas, GasPrice, Compiled, CallData);
Compiled, CallData);
Error -> Error ->
Error Error
end. end.
@ -1192,7 +1220,10 @@ read_aci(Path) ->
AACI :: aaci() | {aaci, Label :: term()}, AACI :: aaci() | {aaci, Label :: term()},
ConID :: unicode:chardata(), ConID :: unicode:chardata(),
Fun :: string(), Fun :: string(),
Args :: [string()] | {erlang, [term()]}, Args :: [string()]
| {erlang, [term()]}
| {fate, [term()]}
| {sophia, [string()]},
Result :: {ok, CallTX} | {error, Reason}, Result :: {ok, CallTX} | {error, Reason},
CallTX :: binary(), CallTX :: binary(),
Reason :: term(). Reason :: term().
@ -1227,7 +1258,10 @@ contract_call(CallerID, AACI, ConID, Fun, Args) ->
AACI :: aaci() | {aaci, Label :: term()}, AACI :: aaci() | {aaci, Label :: term()},
ConID :: unicode:chardata(), ConID :: unicode:chardata(),
Fun :: string(), Fun :: string(),
Args :: [string()] | {erlang, [term()]}, Args :: [string()]
| {erlang, [term()]}
| {fate, [term()]}
| {sophia, [string()]},
Result :: {ok, CallTX} | {error, Reason}, Result :: {ok, CallTX} | {error, Reason},
CallTX :: binary(), CallTX :: binary(),
Reason :: term(). Reason :: term().
@ -1265,7 +1299,10 @@ contract_call(CallerID, Gas, AACI, ConID, Fun, Args) ->
AACI :: aaci() | {aaci, Label :: term()}, AACI :: aaci() | {aaci, Label :: term()},
ConID :: unicode:chardata(), ConID :: unicode:chardata(),
Fun :: string(), Fun :: string(),
Args :: [string()] | {erlang, [term()]}, Args :: [string()]
| {erlang, [term()]}
| {fate, [term()]}
| {sophia, [string()]},
Result :: {ok, CallTX} | {error, Reason}, Result :: {ok, CallTX} | {error, Reason},
CallTX :: binary(), CallTX :: binary(),
Reason :: term(). Reason :: term().
@ -1503,7 +1540,7 @@ min_gas_price() ->
%% This function always returns 200,000 in the current version. %% This function always returns 200,000 in the current version.
min_gas() -> min_gas() ->
200000. 200_000.
encode_call_data({aaci, _ContractName, FunDefs, _TypeDefs}, Fun, Args) -> encode_call_data({aaci, _ContractName, FunDefs, _TypeDefs}, Fun, Args) ->
@ -1517,16 +1554,22 @@ encode_call_data({aaci, Label}, Fun, Args) ->
error -> {error, aaci_not_found} error -> {error, aaci_not_found}
end. end.
encode_call_data2(ArgDef, Fun, {sophia, Args}) ->
case convert(ArgDef, Args) of
{ok, Converted} -> gmb_fate_abi:create_calldata(Fun, Converted);
Errors -> Errors
end;
encode_call_data2(ArgDef, Fun, {erlang, Args}) -> encode_call_data2(ArgDef, Fun, {erlang, Args}) ->
case hz_aaci:erlang_args_to_fate(ArgDef, Args) of case hz_aaci:erlang_args_to_fate(ArgDef, Args) of
{ok, Coerced} -> gmb_fate_abi:create_calldata(Fun, Coerced); {ok, Coerced} -> gmb_fate_abi:create_calldata(Fun, Coerced);
Errors -> Errors Errors -> Errors
end; end;
encode_call_data2(ArgDef, Fun, SophiaArgs) -> encode_call_data2(_, Fun, {fate, Args}) ->
case convert(ArgDef, SophiaArgs) of % TODO: This should probably be moved back closer to the initiating call.
{ok, Args} -> gmb_fate_abi:create_calldata(Fun, Args); % 2026-02-13: Craig
Errors -> Errors gmb_fate_abi:create_calldata(Fun, Args);
end. encode_call_data2(ArgDef, Fun, Args) ->
encode_call_data2(ArgDef, Fun, {sophia, Args}).
convert(Defs, Args) -> convert(Defs, Args, 1, [], []). convert(Defs, Args) -> convert(Defs, Args, 1, [], []).