Packages
elixium_core
0.4.6
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/store/peer.ex
defmodule Elixium.Store.Peer do
use Elixium.Store
@moduledoc """
Store and load data related to peers that a node has communicated with.
This includes authentication data
"""
@store_dir ".peers"
def initialize do
initialize(@store_dir)
end
def register_peer({identifier, salt, prime, generator, verifier}) do
transact @store_dir do
&Exleveldb.put(&1, identifier, :erlang.term_to_binary({salt, prime, generator, verifier}))
end
end
def load_peer(identifier) do
transact @store_dir do
fn ref ->
case Exleveldb.get(ref, identifier) do
{:ok, peer} -> :erlang.binary_to_term(peer)
:not_found -> :not_found
end
end
end
end
#Removes peer if no response was heard
def remove_peer(identifier) do
transact @store_dir do
&Exleveldb.delete(&1, identifier)
end
end
def reorder_peers(ip) do
transact @store_dir do
fn ref ->
{:ok, peers} = Exleveldb.get(ref, "known_peers")
peers = :erlang.binary_to_term(peers)
peer = Enum.find(peers, &(elem(&1, 0) == ip))
Exleveldb.put(ref, "known_peers", :erlang.term_to_binary([peer | peers -- [peer]]))
end
end
end
def save_self(identifier, password, ip) do
transact @store_dir do
&Exleveldb.put(&1, "self_#{ip}", :erlang.term_to_binary({identifier, password}))
end
end
def load_self(ip) do
transact @store_dir do
fn ref ->
case Exleveldb.get(ref, "self_#{ip}") do
{:ok, self} -> :erlang.binary_to_term(self)
:not_found -> :not_found
end
end
end
end
@spec save_known_peer({charlist, integer}) :: none
def save_known_peer(peer) do
transact @store_dir do
fn ref ->
case Exleveldb.get(ref, "known_peers") do
{:ok, peers} ->
peers = Enum.uniq([peer | :erlang.binary_to_term(peers)])
Exleveldb.put(ref, "known_peers", :erlang.term_to_binary(peers))
:not_found ->
Exleveldb.put(ref, "known_peers", :erlang.term_to_binary([peer]))
end
end
end
end
def load_known_peers do
transact @store_dir do
fn ref ->
case Exleveldb.get(ref, "known_peers") do
{:ok, peers} -> :erlang.binary_to_term(peers)
:not_found -> []
end
end
end
end
end