WIP
This commit is contained in:
parent
7c78aa00d7
commit
c03a2d1f41
@ -12,7 +12,7 @@
|
||||
|
||||
-behavior(gen_server).
|
||||
-export([show_ui/1,
|
||||
open_wallet/2, close_wallet/0, password/2,
|
||||
open_wallet/2, close_wallet/0, password/2, refresh/0,
|
||||
nonce/1, spend/2, chain/1, grids/1,
|
||||
make_key/6, recover_key/1, mnemonic/1, rename_key/2, drop_key/1,
|
||||
add_node/1, set_sole_node/1]).
|
||||
@ -80,13 +80,19 @@ password(Old, New) ->
|
||||
gen_server:cast(?MODULE, {password, Old, New}).
|
||||
|
||||
|
||||
-spec refresh() -> ok.
|
||||
|
||||
refresh() ->
|
||||
gen_server:cast(?MODULE, refresh).
|
||||
|
||||
|
||||
-spec nonce(ID) -> {ok, Nonce} | {error, Reason}
|
||||
when ID :: clutch:id(),
|
||||
Nonce :: integer(),
|
||||
Reason :: term(). % FIXME
|
||||
% FIXME
|
||||
|
||||
nonce(_) -> {ok, 42}.
|
||||
nonce(ID) ->
|
||||
gen_server:call(?MODULE, {nonce, ID}).
|
||||
|
||||
|
||||
-spec spend(KeyID, TX) -> ok
|
||||
@ -253,6 +259,9 @@ read_prefs() ->
|
||||
%% The gen_server:handle_call/3 callback.
|
||||
%% See: http://erlang.org/doc/man/gen_server.html#Module:handle_call-3
|
||||
|
||||
handle_call({nonce, ID}, _, State) ->
|
||||
Response = do_nonce(ID),
|
||||
{reply, Response, State};
|
||||
handle_call({save, Prefs}, _, State) ->
|
||||
Response = do_save(State#s{prefs = Prefs}),
|
||||
{reply, Response, State};
|
||||
@ -284,6 +293,9 @@ handle_cast({open_wallet, Path, Phrase}, State) ->
|
||||
handle_cast({password, Old, New}, State) ->
|
||||
NewState = do_password(Old, New, State),
|
||||
{noreply, NewState};
|
||||
handle_cast(refresh, State) ->
|
||||
NewState = do_refresh(State),
|
||||
{noreply, NewState};
|
||||
handle_cast({spend, KeyID, TX}, State) ->
|
||||
ok = do_spend(KeyID, TX, State),
|
||||
{noreply, State};
|
||||
@ -525,12 +537,50 @@ do_add_node(New, State) ->
|
||||
% FIXME: This will, of course, totally explode if anything goes wrong
|
||||
do_set_sole_node(TOTN = #node{external = none}, State) ->
|
||||
do_set_sole_node(TOTN#node{external = 3013}, State);
|
||||
do_set_sole_node(#node{ip = Address, external = Port}, State) ->
|
||||
ok = hz:chain_nodes([{Address, Port}]),
|
||||
{ok, Status = #{"network_id" := NetworkID}} = hz:status(),
|
||||
ok = hz:network_id(NetworkID),
|
||||
tell("Status: ~p", [Status]),
|
||||
State.
|
||||
do_set_sole_node(New, State = #s{wallet = W}) ->
|
||||
ChainID = ensure_hz_set(New),
|
||||
Net = #net{id = ChainID, chains = [#chain{id = ChainID, nodes = [New]}]},
|
||||
NewWallet = W#wallet{chain_id = ChainID, endpoint = New, nets = [Net]},
|
||||
NewState = State#s{wallet = NewWallet},
|
||||
do_refresh(NewState).
|
||||
|
||||
|
||||
do_refresh(State = #s{wallet = W = #wallet{poas = POAs, endpoint = Node}}) ->
|
||||
ChainID = ensure_hz_set(Node),
|
||||
CheckBalance =
|
||||
fun(This = #poa{id = ID}) ->
|
||||
Pucks =
|
||||
case hz:acc(ID) of
|
||||
{ok, #{"balance" := P}} -> P;
|
||||
{error, "Account not found"} -> 0
|
||||
end,
|
||||
Dist = [{ChainID, Pucks}],
|
||||
Gaju = #balance{coin = "gaju", total = Pucks, dist = Dist},
|
||||
This#poa{balances = [Gaju]}
|
||||
end,
|
||||
NewPOAs = lists:map(CheckBalance, POAs),
|
||||
ok = gmc_gui:show(NewPOAs),
|
||||
NewW = W#wallet{chain_id = ChainID, poas = NewPOAs},
|
||||
State#s{wallet = NewW}.
|
||||
|
||||
|
||||
ensure_hz_set(Node = #node{ip = IP, external = Port}) ->
|
||||
case hz:status() of
|
||||
{ok, #{"network_id" := ChainID}} ->
|
||||
list_to_binary(ChainID);
|
||||
{error, no_nodes} ->
|
||||
ok = hz:chain_nodes([{IP, Port}]),
|
||||
{ok, #{"network_id" := C}} = hz:status(),
|
||||
ChainID = list_to_binary(C),
|
||||
ok = hz:network_id(ChainID),
|
||||
ok = gmc_gui:chain(ChainID, Node),
|
||||
ChainID
|
||||
end.
|
||||
|
||||
|
||||
%ensure_connected(ChainID, IP, Port) ->
|
||||
% ok = hz:chain_nodes([{IP, Port}]),
|
||||
% ok = hz:network_id(ChainID).
|
||||
|
||||
|
||||
encrypt(Pass, Binary) ->
|
||||
@ -599,6 +649,7 @@ do_password(Old, New, State = #s{wallet = #wallet{pass = Pass}}) ->
|
||||
|
||||
|
||||
do_spend(KeyID, TX, State = #s{wallet = #wallet{keys = Keys}}) ->
|
||||
tell("SpendTX: ~p", [TX]),
|
||||
case lists:keyfind(KeyID, #key.id, Keys) of
|
||||
#key{pair = #{secret := PrivKey}} ->
|
||||
do_spend2(PrivKey, TX, State);
|
||||
@ -649,7 +700,13 @@ do_spend2(PrivKey,
|
||||
{transaction, NetworkTX}],
|
||||
SignedTX = aeser_chain_objects:serialize(SigTxType, SigTxVsn, SigTemplate, TX_Data),
|
||||
Encoded = aeser_api_encoder:encode(transaction, SignedTX),
|
||||
tell("SpendTX: ~p", [Encoded]).
|
||||
tell("SpendTX: ~p", [Encoded]),
|
||||
Outcome = hz:post_tx(Encoded),
|
||||
tell("Outcome: ~p", [Outcome]).
|
||||
|
||||
|
||||
do_nonce(ID) ->
|
||||
hz:next_nonce(ID).
|
||||
|
||||
|
||||
do_save(Label, Pref, State = #s{prefs = Prefs}) ->
|
||||
|
@ -301,6 +301,7 @@ handle_event(#wx{event = #wxCommand{type = command_button_clicked},
|
||||
#w{name = www} -> www(State);
|
||||
#w{name = send} -> spend(State);
|
||||
#w{name = grids} -> grids_dialogue(State);
|
||||
#w{name = refresh} -> refresh(State);
|
||||
#w{name = Name} -> handle_button(Name, State);
|
||||
false -> State
|
||||
end,
|
||||
@ -344,6 +345,11 @@ terminate(Reason, State) ->
|
||||
|
||||
%%% Doers
|
||||
|
||||
refresh(State) ->
|
||||
ok = gmc_con:refresh(),
|
||||
State.
|
||||
|
||||
|
||||
netman(State) ->
|
||||
ok = gmc_con:show_ui(gmc_v_netman),
|
||||
State.
|
||||
|
Loading…
x
Reference in New Issue
Block a user