mirror of
https://github.com/Retropex/bitfeed.git
synced 2025-05-28 04:52:29 +02:00
Fix block file, error handling
This commit is contained in:
parent
e293307975
commit
aa2ba1c03c
@ -95,7 +95,7 @@ defmodule BitcoinStream.Bridge do
|
|||||||
[_topic, payload, _size] = message;
|
[_topic, payload, _size] = message;
|
||||||
|
|
||||||
# keep last block on disk for preloading
|
# keep last block on disk for preloading
|
||||||
:ok = File.write("block.dat", payload, [:append, :binary])
|
:ok = File.write("block.dat", payload, [:binary])
|
||||||
|
|
||||||
case BitcoinBlock.decode(payload) do
|
case BitcoinBlock.decode(payload) do
|
||||||
{:ok, block} ->
|
{:ok, block} ->
|
||||||
|
@ -26,25 +26,32 @@ defstruct [
|
|||||||
]
|
]
|
||||||
|
|
||||||
def decode(block_binary) do
|
def decode(block_binary) do
|
||||||
bytes = byte_size(block_binary)
|
with bytes <- byte_size(block_binary),
|
||||||
hex = Base.encode16(block_binary, case: :lower);
|
hex <- Base.encode16(block_binary, case: :lower),
|
||||||
{:ok, raw_block} = Bitcoinex.Block.decode(hex)
|
{:ok, raw_block} <- Bitcoinex.Block.decode(hex),
|
||||||
id = Bitcoinex.Block.block_id(block_binary)
|
id <- Bitcoinex.Block.block_id(block_binary),
|
||||||
|
{summarised_txns, total_value} <- summarise_txns(raw_block.txns)
|
||||||
{summarised_txns, total_value} = summarise_txns(raw_block.txns)
|
do
|
||||||
|
{:ok, %__MODULE__{
|
||||||
{:ok, %__MODULE__{
|
version: raw_block.version,
|
||||||
version: raw_block.version,
|
prev_block: raw_block.prev_block,
|
||||||
prev_block: raw_block.prev_block,
|
merkle_root: raw_block.merkle_root,
|
||||||
merkle_root: raw_block.merkle_root,
|
timestamp: raw_block.timestamp,
|
||||||
timestamp: raw_block.timestamp,
|
bits: raw_block.bits,
|
||||||
bits: raw_block.bits,
|
bytes: bytes,
|
||||||
bytes: bytes,
|
txn_count: raw_block.txn_count,
|
||||||
txn_count: raw_block.txn_count,
|
txns: summarised_txns,
|
||||||
txns: summarised_txns,
|
value: total_value,
|
||||||
value: total_value,
|
id: id
|
||||||
id: id
|
}}
|
||||||
}}
|
else
|
||||||
|
{:error, reason} ->
|
||||||
|
IO.puts("Error decoding data for BitcoinBlock: #{reason}")
|
||||||
|
:error
|
||||||
|
_ ->
|
||||||
|
IO.puts("Error decoding data for BitcoinBlock: (unknown reason)")
|
||||||
|
:error
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
defp summarise_txns(txns) do
|
defp summarise_txns(txns) do
|
||||||
|
@ -15,36 +15,17 @@ defmodule BitcoinStream.SocketHandler do
|
|||||||
end
|
end
|
||||||
|
|
||||||
def load_block() do
|
def load_block() do
|
||||||
case File.read("block.dat") do
|
with {:ok, blockData} <- File.read("block.dat"),
|
||||||
{:ok, blockData } ->
|
{:ok, block} <- BitcoinBlock.decode(blockData),
|
||||||
case BitcoinBlock.decode(blockData) do
|
{:ok, payload} <- Jason.encode(%{type: "block", block: block})
|
||||||
{:ok, block} ->
|
do
|
||||||
IO.puts('file decoded ok')
|
{:ok, payload}
|
||||||
case Jason.encode(%{type: "block", block: block}) do
|
else
|
||||||
{:ok, payload} ->
|
|
||||||
IO.puts("block encoded ok");
|
|
||||||
{ :ok, payload };
|
|
||||||
{:error, reason} ->
|
|
||||||
IO.puts("Error json encoding block: #{reason}");
|
|
||||||
:error
|
|
||||||
_ ->
|
|
||||||
IO.puts("json encoding failed: (unknown reason)")
|
|
||||||
:error
|
|
||||||
end
|
|
||||||
{:error, reason} ->
|
|
||||||
IO.puts("Block decoding failed: #{reason}");
|
|
||||||
:error
|
|
||||||
_ ->
|
|
||||||
IO.puts("Block decoding failed: (unknown reason)")
|
|
||||||
:error
|
|
||||||
end
|
|
||||||
|
|
||||||
{:error, reason} ->
|
{:error, reason} ->
|
||||||
IO.puts("Reading block file failed: #{reason}");
|
IO.puts("Block decoding failed: #{reason}");
|
||||||
:error
|
:error
|
||||||
|
|
||||||
_ ->
|
_ ->
|
||||||
IO.puts("Reading block file failed (unknown reason)")
|
IO.puts("Block decoding failed: (unknown reason)");
|
||||||
:error
|
:error
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user