-
Notifications
You must be signed in to change notification settings - Fork 3
/
block.ex
40 lines (34 loc) · 1 KB
/
block.ex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
defmodule Models.Block do
use Ecto.Schema
import Ecto.Changeset
import Ecto.Query, only: [from: 1, from: 2]
schema "blocks" do
field(:parent_block, :binary)
field(:number, :integer)
field(:total_burned, :integer)
field(:winner, :binary)
field(:state_changes_hash, :binary)
timestamps
end
def max_burned(query \\ __MODULE__), do: from(q in query, order_by: q.total_burned)
def latest(query \\ __MODULE__, count), do: from(q in query, order_by: q.number, limit: ^count)
def changeset(user, params \\ %{}) do
user
|> cast(params, [:name, :email, :age])
|> validate_required([
:number,
:parent_block,
:state_changes_hash,
:winner
])
end
def hash(block), do: Crypto.hash(to_binary(block))
defp to_binary(%{
parent_block: parent_block,
number: number,
winner: winner,
state_changes_hash: state_changes_hash
}) do
parent_block <> <<number::size(256)>> <> winner <> state_changes_hash
end
end