Fix block layout bug

This commit is contained in:
Mononaut 2022-04-25 14:21:18 -06:00
parent 707abbc075
commit 34d991a998
4 changed files with 23 additions and 10 deletions

View File

@ -1,4 +1,12 @@
import TxMondrianPoolScene from './TxMondrianPoolScene.js' import TxMondrianPoolScene from './TxMondrianPoolScene.js'
import { settings } from '../stores.js'
import { logTxSize, byteTxSize } from '../utils/misc.js'
import config from '../config.js'
let settingsValue
settings.subscribe(v => {
settingsValue = v
})
export default class TxBlockScene extends TxMondrianPoolScene { export default class TxBlockScene extends TxMondrianPoolScene {
constructor ({ width, height, unit = 4, padding = 1, blockId, controller, heightStore, colorMode }) { constructor ({ width, height, unit = 4, padding = 1, blockId, controller, heightStore, colorMode }) {
@ -47,6 +55,12 @@ export default class TxBlockScene extends TxMondrianPoolScene {
this.resetLayout() this.resetLayout()
} }
// calculates and returns the size of the tx in multiples of the grid size
txSize (tx={ value: 1, vbytes: 1 }) {
if (settingsValue.vbytes) return byteTxSize(tx.vbytes, Math.Infinity)
else return logTxSize(tx.value, Math.Infinity)
}
setTxOnScreen (tx, pixelPosition) { setTxOnScreen (tx, pixelPosition) {
if (!tx.view.initialised) { if (!tx.view.initialised) {
tx.view.update({ tx.view.update({

View File

@ -498,7 +498,6 @@ defmodule BitcoinStream.Mempool do
end end
end end
defp cache_spend(txid, index, input) do defp cache_spend(txid, index, input) do
:ets.insert(:spend_cache, {[input.prev_txid, input.prev_vout], [txid, index]}) :ets.insert(:spend_cache, {[input.prev_txid, input.prev_vout], [txid, index]})
end end

View File

@ -65,7 +65,7 @@ defmodule BitcoinStream.Router do
|> send_resp(200, spends) |> send_resp(200, spends)
_ -> _ ->
Logger.debug("Error getting tx spends"); Logger.debug("Error getting tx spends");
send_resp(conn, 404, "Transaction not found") send_resp(conn, 200, "[]")
end end
end end

View File

@ -22,7 +22,7 @@ defmodule BitcoinStream.Index.Spend do
Process.send_after(self(), :sync, 2000); Process.send_after(self(), :sync, 2000);
{:ok, [dbref, indexed, false]} {:ok, [dbref, indexed, false]}
else else
{:ok, nil} {:ok, [nil, indexed, false]}
end end
end end
@ -57,7 +57,7 @@ defmodule BitcoinStream.Index.Spend do
@impl true @impl true
def handle_call({:get_tx_spends, txid}, _from, [dbref, indexed, done]) do def handle_call({:get_tx_spends, txid}, _from, [dbref, indexed, done]) do
case get_transaction_spends(dbref, txid) do case get_transaction_spends(dbref, txid, (indexed != nil)) do
{:ok, spends} -> {:ok, spends} ->
{:reply, {:ok, spends}, [dbref, indexed, done]} {:reply, {:ok, spends}, [dbref, indexed, done]}
@ -207,7 +207,7 @@ defmodule BitcoinStream.Index.Spend do
defp index_block_inputs(dbref, batch, txns) do defp index_block_inputs(dbref, batch, txns) do
spends = index_txs(txns, %{}); spends = index_txs(txns, %{});
Enum.each(spends, fn {binid, outputs} -> Enum.each(spends, fn {binid, outputs} ->
case get_chain_spends(dbref, binid) do case get_chain_spends(dbref, binid, true) do
false -> false ->
Logger.error("uninitialised tx in input index: #{Base.encode16(binid, [case: :lower])}") Logger.error("uninitialised tx in input index: #{Base.encode16(binid, [case: :lower])}")
:ok :ok
@ -296,8 +296,8 @@ defmodule BitcoinStream.Index.Spend do
end end
end end
defp get_chain_spends(dbref, binary_txid) do defp get_chain_spends(dbref, binary_txid, use_index) do
case :rocksdb.get(dbref, binary_txid, []) do case (if use_index do :rocksdb.get(dbref, binary_txid, []) else :not_found end) do
{:ok, spends} -> {:ok, spends} ->
spends spends
@ -337,9 +337,9 @@ defmodule BitcoinStream.Index.Spend do
unpack_spends(bin, []) unpack_spends(bin, [])
end end
defp get_transaction_spends(dbref, txid) do defp get_transaction_spends(dbref, txid, use_index) do
binary_txid = Base.decode16!(txid, [case: :lower]); binary_txid = Base.decode16!(txid, [case: :lower]);
chain_spends = get_chain_spends(dbref, binary_txid); chain_spends = get_chain_spends(dbref, binary_txid, use_index);
spend_list = unpack_spends(chain_spends); spend_list = unpack_spends(chain_spends);
spend_list = add_mempool_spends(txid, spend_list); spend_list = add_mempool_spends(txid, spend_list);
{:ok, spend_list} {:ok, spend_list}
@ -380,7 +380,7 @@ defmodule BitcoinStream.Index.Spend do
defp drop_block_inputs(dbref, batch, txns) do defp drop_block_inputs(dbref, batch, txns) do
spends = index_txs(txns, %{}); spends = index_txs(txns, %{});
Enum.each(spends, fn {binid, outputs} -> Enum.each(spends, fn {binid, outputs} ->
case get_chain_spends(dbref, binid) do case get_chain_spends(dbref, binid, true) do
false -> false ->
Logger.error("uninitialised tx in input index: #{Base.encode16(binid, [case: :lower])}") Logger.error("uninitialised tx in input index: #{Base.encode16(binid, [case: :lower])}")
:ok :ok