Packages
elixium_core
0.4.3
0.6.3
0.6.2
0.6.1
0.6.0
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.12
0.4.11
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.19
0.3.18
0.3.17
0.3.16
0.3.15
0.3.14
0.3.13
0.3.12
0.3.11
0.3.10
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.1
0.2.13
0.2.12
0.2.11
0.2.10
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.4
0.1.3
The core package for the Elixium blockchain, containing all the modules needed to run the chain
Current section
Files
Jump to
Current section
Files
lib/pool/orphan.ex
defmodule Elixium.Pool.Orphan do
@moduledoc """
Convinient interface functions for interacting with fork blocks
"""
@pool_name :orphan_pool
def initialize, do: :ets.new(@pool_name, [:bag, :public, :named_table])
@spec add(Elixium.Block) :: none
def add(block), do: :ets.insert(@pool_name, {:binary.decode_unsigned(block.index), block})
def remove(block) do
exact_object =
block.index
|> :binary.decode_unsigned()
|> blocks_at_height()
|> Enum.find(& &1.hash == block.hash)
if exact_object do
:ets.delete_object(@pool_name, {:binary.decode_unsigned(exact_object.index), exact_object})
end
end
@doc """
Returns a list of all blocks forked at a given height
"""
@spec blocks_at_height(number) :: list
def blocks_at_height(height) when is_binary(height) do
height
|> :binary.decode_unsigned()
|> blocks_at_height()
end
def blocks_at_height(height) when is_number(height) do
@pool_name
|> :ets.lookup(height)
|> Enum.map(fn {_i, blk} -> blk end)
end
end