Skip to content

Commit 818ba1d

Browse files
committed
Improve Diode CLI compatibility
1 parent 924783a commit 818ba1d

2 files changed

Lines changed: 28 additions & 10 deletions

File tree

lib/network/edge_v2.ex

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ defmodule Network.EdgeV2 do
1919
inbuffer: nil | {integer(), binary()},
2020
last_message: Time.t(),
2121
last_ticket: Time.t(),
22-
last_warning: Time.t(),
22+
last_warning: nil | {:ticket, Time.t()},
2323
node_address: :inet.ip_address(),
2424
node_id: Wallet.t(),
2525
version: integer(),
@@ -593,6 +593,20 @@ defmodule Network.EdgeV2 do
593593

594594
true ->
595595
dl = Ticket.server_sign(dl, Wallet.privkey!(Diode.wallet()))
596+
597+
# If the version is 1000 and this is the first ticket of this session
598+
# we need to reset the device usage to the last ticket
599+
if state.version == 1000 and state.last_ticket == nil do
600+
last_ticket =
601+
TicketStore.find(device_address(state), Ticket.fleet_contract(dl), Ticket.epoch(dl))
602+
603+
if last_ticket != nil do
604+
TicketStore.reset_device_usage(device_address(state), Ticket.total_bytes(last_ticket))
605+
else
606+
TicketStore.reset_device_usage(device_address(state), 0)
607+
end
608+
end
609+
596610
ret = TicketStore.add(dl, device_id(state), state.version)
597611
total = Ticket.total_bytes(dl)
598612
log(state, "ticket total: #{total} ret => #{inspect(ret, limit: 32)}")

lib/ticketstore.ex

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,12 @@ defmodule TicketStore do
3737
:ets.update_counter(:device_usage_tracker, {device, epoch}, value, {:key, 0})
3838
end
3939

40+
def reset_device_usage(device, value) do
41+
epoch = epoch()
42+
key = {device, epoch}
43+
:ets.insert(:device_usage_tracker, {key, value})
44+
end
45+
4046
def device_usage(device) do
4147
epoch = epoch()
4248

@@ -47,7 +53,11 @@ defmodule TicketStore do
4753
end
4854

4955
def device_paid_bytes(device, fleet) do
50-
case find(device, fleet, epoch()) do
56+
Enum.find_value(RemoteChain.chains(), fn chain ->
57+
epoch = RemoteChain.epoch(chain)
58+
find(device, fleet, epoch)
59+
end)
60+
|> case do
5161
nil -> 0
5262
tck -> Ticket.total_bytes(tck)
5363
end
@@ -200,21 +210,15 @@ defmodule TicketStore do
200210
@doc """
201211
Handling a ConnectionTicket
202212
"""
203-
def add(tck, wallet, version \\ 1000) do
213+
def add(tck, wallet, _version \\ 1000) do
204214
chain_id = Ticket.chain_id(tck)
205215
tepoch = Ticket.epoch(tck)
206216
epoch = RemoteChain.epoch(chain_id)
207217
address = Wallet.address!(wallet)
208218
fleet = Ticket.fleet_contract(tck)
209219
last = find(address, fleet, tepoch)
210220
ticket_usage = if last == nil, do: 0, else: Ticket.total_bytes(last)
211-
212-
usage =
213-
if version > 1_000 do
214-
max(ticket_usage, device_usage(address))
215-
else
216-
ticket_usage
217-
end
221+
usage = max(ticket_usage, device_usage(address))
218222

219223
cond do
220224
tepoch not in recent_epochs(chain_id) ->

0 commit comments

Comments
 (0)