Add contract call and dry run params interface
This commit is contained in:
parent
af69159eb5
commit
4af3367784
@ -756,7 +756,7 @@ do_sign_call(#s{wallet = #wallet{keys = Keys, chain_id = ChainID}},
|
||||
SignedTX = sign_tx_hash(TX, SecKey, ChainID),
|
||||
case hz:post_tx(SignedTX) of
|
||||
{ok, Data = #{"tx_hash" := TXHash}} ->
|
||||
ok = tell("Contract deploy TX succeded with: ~p", [TXHash]),
|
||||
ok = tell("TX succeded with: ~p", [TXHash]),
|
||||
do_sign_call2(ConID, Data);
|
||||
{ok, WTF} ->
|
||||
gmc_v_devman:trouble({error, WTF});
|
||||
|
@ -312,51 +312,106 @@ clicked2(State, Contract, Name) ->
|
||||
end.
|
||||
|
||||
clicked3(State = #s{frame = Frame, j = J}, Contract, Name, Selected, Keys) ->
|
||||
{ok, Height} = hz:top_height(),
|
||||
DefTTL = Height + 10000,
|
||||
DefGasP = hz:min_gas_price(),
|
||||
DefGas = 5000000,
|
||||
DefAmount = 0,
|
||||
Dialog = wxDialog:new(Frame, ?wxID_ANY, J("Deploy Contract")),
|
||||
Sizer = wxBoxSizer:new(?wxVERTICAL),
|
||||
KeySz = wxStaticBoxSizer:new(?wxVERTICAL, Dialog, [{label, J("Signature Key")}]),
|
||||
KeyPicker = wxChoice:new(Dialog, ?wxID_ANY, [{choices, Keys}]),
|
||||
_ = wxStaticBoxSizer:add(KeySz, KeyPicker, zxw:flags(wide)),
|
||||
ok = wxChoice:setSelection(KeyPicker, Selected - 1),
|
||||
ParamSz = wxStaticBoxSizer:new(?wxVERTICAL, Dialog, [{label, J("TX Parameters")}]),
|
||||
GridSz = wxFlexGridSizer:new(2, 4, 4),
|
||||
ok = wxFlexGridSizer:setFlexibleDirection(GridSz, ?wxHORIZONTAL),
|
||||
ok = wxFlexGridSizer:addGrowableCol(GridSz, 1),
|
||||
TTL_L = wxStaticText:new(Dialog, ?wxID_ANY, "TTL"),
|
||||
TTL_Tx = wxTextCtrl:new(Dialog, ?wxID_ANY),
|
||||
ok = wxTextCtrl:setValue(TTL_Tx, integer_to_list(DefTTL)),
|
||||
GasP_L = wxStaticText:new(Dialog, ?wxID_ANY, J("Gas Price")),
|
||||
GasP_Tx = wxTextCtrl:new(Dialog, ?wxID_ANY),
|
||||
ok = wxTextCtrl:setValue(GasP_Tx, integer_to_list(DefGasP)),
|
||||
Gas_L = wxStaticText:new(Dialog, ?wxID_ANY, J("Gas")),
|
||||
Gas_Tx = wxTextCtrl:new(Dialog, ?wxID_ANY),
|
||||
ok = wxTextCtrl:setValue(Gas_Tx, integer_to_list(DefGas)),
|
||||
Amount_L = wxStaticText:new(Dialog, ?wxID_ANY, J("TX Amount")),
|
||||
Amount_Tx = wxTextCtrl:new(Dialog, ?wxID_ANY),
|
||||
ok = wxTextCtrl:setValue(Amount_Tx, integer_to_list(DefAmount)),
|
||||
_ = wxFlexGridSizer:add(GridSz, TTL_L, zxw:flags(base)),
|
||||
_ = wxFlexGridSizer:add(GridSz, TTL_Tx, zxw:flags(wide)),
|
||||
_ = wxFlexGridSizer:add(GridSz, GasP_L, zxw:flags(base)),
|
||||
_ = wxFlexGridSizer:add(GridSz, GasP_Tx, zxw:flags(wide)),
|
||||
_ = wxFlexGridSizer:add(GridSz, Gas_L, zxw:flags(base)),
|
||||
_ = wxFlexGridSizer:add(GridSz, Gas_Tx, zxw:flags(wide)),
|
||||
_ = wxFlexGridSizer:add(GridSz, Amount_L, zxw:flags(base)),
|
||||
_ = wxFlexGridSizer:add(GridSz, Amount_Tx, zxw:flags(wide)),
|
||||
_ = wxSizer:add(ParamSz, GridSz, zxw:flags(wide)),
|
||||
ButtSz = wxBoxSizer:new(?wxHORIZONTAL),
|
||||
Affirm = wxButton:new(Dialog, ?wxID_OK),
|
||||
Cancel = wxButton:new(Dialog, ?wxID_CANCEL),
|
||||
_ = wxBoxSizer:add(ButtSz, Affirm, zxw:flags(wide)),
|
||||
_ = wxBoxSizer:add(ButtSz, Cancel, zxw:flags(wide)),
|
||||
_ = wxSizer:add(Sizer, KeySz, [{proportion, 0}, {flag, ?wxEXPAND}]),
|
||||
_ = wxSizer:add(Sizer, ButtSz, [{proportion, 1}, {flag, ?wxEXPAND}]),
|
||||
_ = wxSizer:add(Sizer, KeySz, zxw:flags(wide)),
|
||||
_ = wxSizer:add(Sizer, ParamSz, zxw:flags(wide)),
|
||||
_ = wxSizer:add(Sizer, ButtSz, zxw:flags(wide)),
|
||||
ok = wxDialog:setSizer(Dialog, Sizer),
|
||||
ok = wxBoxSizer:layout(Sizer),
|
||||
ok = wxDialog:setSize(Dialog, {500, 300}),
|
||||
ok = wxDialog:center(Dialog),
|
||||
Outcome =
|
||||
case wxDialog:showModal(Dialog) of
|
||||
?wxID_OK ->
|
||||
ID = wxChoice:getString(KeyPicker, wxChoice:getSelection(KeyPicker)),
|
||||
BinID = unicode:characters_to_binary(ID),
|
||||
{ok, BinID};
|
||||
PK = unicode:characters_to_binary(ID),
|
||||
Controls =
|
||||
[{"TTL", TTL_Tx},
|
||||
{"Gas Price", GasP_Tx},
|
||||
{"Gas", Gas_Tx},
|
||||
{"Amount", Amount_Tx}],
|
||||
case call_params(Controls) of
|
||||
{ok, [TTL, GasP, Gas, Amount]} ->
|
||||
{ok, Nonce} = hz:next_nonce(PK),
|
||||
{ok, {PK, Nonce, TTL, GasP, Gas, Amount}};
|
||||
E ->
|
||||
E
|
||||
end;
|
||||
?wxID_CANCEL ->
|
||||
cancel
|
||||
end,
|
||||
ok = wxDialog:destroy(Dialog),
|
||||
case Outcome of
|
||||
{ok, CallerID} -> clicked4(State, Contract, Name, CallerID);
|
||||
cancel -> State
|
||||
{ok, Params} -> clicked4(State, Contract, Name, Params);
|
||||
cancel -> State;
|
||||
Error -> handle_troubling(State, Error)
|
||||
end.
|
||||
|
||||
call_params(Controls) ->
|
||||
call_params(Controls, []).
|
||||
|
||||
call_params([], A) ->
|
||||
{ok, lists:reverse(A)};
|
||||
call_params([{L, C} | T], A) ->
|
||||
O =
|
||||
try
|
||||
{ok, list_to_integer(wxTextCtrl:getValue(C))}
|
||||
catch
|
||||
error:badarg -> {error, {L, not_an_integer}}
|
||||
end,
|
||||
case O of
|
||||
{ok, N} -> call_params(T, [N | A]);
|
||||
Error -> Error
|
||||
end.
|
||||
|
||||
clicked4(State,
|
||||
#c{id = ConID, build = #{aci := ACI}, funs = {_, Funs}},
|
||||
{Name, Type},
|
||||
PK) ->
|
||||
{PK, Nonce, TTL, GasP, Gas, Amount}) ->
|
||||
AACI = hz:prepare_aaci(ACI),
|
||||
#f{args = ArgFields} = lists:keyfind(Name, #f.name, Funs),
|
||||
Args = lists:map(fun get_arg/1, ArgFields),
|
||||
FunName = binary_to_list(Name),
|
||||
{ok, Nonce} = hz:next_nonce(PK),
|
||||
{ok, Height} = hz:top_height(),
|
||||
TTL = Height + 10000,
|
||||
GasP = hz:min_gas_price(),
|
||||
Gas = 5000000,
|
||||
Amount = 0,
|
||||
case hz:contract_call(PK, Nonce, Gas, GasP, Amount, TTL, AACI, ConID, FunName, Args) of
|
||||
{ok, UnsignedTX} ->
|
||||
case Type of
|
||||
|
Loading…
x
Reference in New Issue
Block a user