general: fixes

This commit is contained in:
k
2024-09-14 11:47:02 +02:00
parent 59f04c96c5
commit f3197c1af7
3 changed files with 120 additions and 89 deletions
+35 -7
View File
@@ -55,6 +55,7 @@ This project is in a very early stage. Until more people look at the code and ch
- 1 TB of free space (will use 60-80% of that) - 1 TB of free space (will use 60-80% of that)
- A running instance of bitcoin-core with txindex=1 and rpc credentials - A running instance of bitcoin-core with txindex=1 and rpc credentials
- Git
### Docker ### Docker
@@ -62,28 +63,49 @@ Coming soon
### Manual ### Manual
#### Prepare #### 1. Dependencies
First we need to install Rust
```bash ```bash
# https://www.rust-lang.org/tools/install # Source: https://www.rust-lang.org/tools/install
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# https://github.com/watchexec/cargo-watch?tab=readme-ov-file#install ```
Then we need to `cargo-watch` for the server
```bash
# Source: https://github.com/watchexec/cargo-watch?tab=readme-ov-file#install
cargo install cargo-watch --locked cargo install cargo-watch --locked
``` ```
#### Parser #### 2. Git
```bash ```bash
git clone https://github.com/satonomics-org/satonomics.git
cd satonomics
```
#### 3. Parser
```bash
cd parser
# The first run needs several information about your bitcoin-core config # The first run needs several information about your bitcoin-core config
./run.sh --datadir=$HOME/Developer/bitcoin --rpcuser=satoshi --rpcpassword=nakamoto ./run.sh --datadir=$HOME/Developer/bitcoin --rpcuser=satoshi --rpcpassword=nakamoto
# Next time you can just do: ./run.sh # Next time you can just do: ./run.sh
# As everything is saved in # As everything is saved in
cd ..
``` ```
#### Server #### Server
```bash ```bash
cd server
./run.sh ./run.sh
``` ```
@@ -103,11 +125,17 @@ Then the easiest to let others access your server is with `cloudflared` which wi
- **Versatile**: You can view the data in charts, you can download the data, you can fetch the data via an API - **Versatile**: You can view the data in charts, you can download the data, you can fetch the data via an API
- **Accessible**: Free Website and API with all the datasets for everyone - **Accessible**: Free Website and API with all the datasets for everyone
## Logo ## Brand
The dove (borrowed from [svgrepo](https://www.svgrepo.com/svg/351969/dove) for now) represents _**hope**_ (kibō in japanese). ### Name
The orange background represents Bitcoin and when in a circle, it also represents the sun, which means that while it's our hope for a better future, we still have to be careful with our collective goals and actions, to not end up like Icarus. kibō means _**hope**_ in japanese which is what Bitcoin ultimately is for many, hope for a better future.
### Logo
The dove (borrowed from [svgrepo](https://www.svgrepo.com/svg/351969/dove) for now) is known to represent hope in many cultures.
The orange background is a wink to Bitcoin and when in a circle, it also represents the sun, which means that while it's our hope for a better future, we still have to be careful with our collective goals and actions, to not end up like Icarus.
## Roadmap ## Roadmap
+19 -7
View File
@@ -411,18 +411,22 @@
position: absolute; position: absolute;
bottom: 0; bottom: 0;
right: 0; right: 0;
left: 0;
display: flex; display: flex;
padding: 1.5rem /* 24px */; padding: 1.5rem /* 24px */;
z-index: 10; z-index: 20;
pointer-events: none;
justify-content: end;
& > * + * { &:has(> * + *) {
margin-left: 1rem /* 16px */; justify-content: space-between;
} }
& > button { & > button {
box-shadow: 0 0 1rem 0.5rem var(--background-color); box-shadow: 0 0 1rem 0.5rem var(--background-color);
border-radius: 9999px; border-radius: 9999px;
border-width: 1px; border-width: 1px;
pointer-events: auto;
} }
} }
} }
@@ -908,6 +912,10 @@
} }
#selected-frame { #selected-frame {
/* display: flex; Set in script */
flex-direction: column;
display: none;
> header { > header {
button { button {
margin: -0.5rem 0; margin: -0.5rem 0;
@@ -1662,6 +1670,13 @@
/> />
</svg> </svg>
</button> </button>
<button id="button-go-to-selected" title="Go to selected">
<svg viewBox="0 0 20 20">
<path
d="M4.25 2A2.25 2.25 0 0 0 2 4.25v2a.75.75 0 0 0 1.5 0v-2a.75.75 0 0 1 .75-.75h2a.75.75 0 0 0 0-1.5h-2ZM13.75 2a.75.75 0 0 0 0 1.5h2a.75.75 0 0 1 .75.75v2a.75.75 0 0 0 1.5 0v-2A2.25 2.25 0 0 0 15.75 2h-2ZM3.5 13.75a.75.75 0 0 0-1.5 0v2A2.25 2.25 0 0 0 4.25 18h2a.75.75 0 0 0 0-1.5h-2a.75.75 0 0 1-.75-.75v-2ZM18 13.75a.75.75 0 0 0-1.5 0v2a.75.75 0 0 1-.75.75h-2a.75.75 0 0 0 0 1.5h2A2.25 2.25 0 0 0 18 15.75v-2ZM7 10a3 3 0 1 1 6 0 3 3 0 0 1-6 0Z"
/>
</svg>
</button>
</footer> </footer>
</section> </section>
<section id="search-frame" hidden> <section id="search-frame" hidden>
@@ -1873,10 +1888,7 @@
<div class="shadow-left"></div> <div class="shadow-left"></div>
<div class="shadow-right"></div> <div class="shadow-right"></div>
<section <section id="selected-frame">
id="selected-frame"
style="display: flex; flex-direction: column"
>
<header> <header>
<div> <div>
<div style="display: flex; align-items: center"> <div style="display: flex; align-items: center">
+66 -75
View File
@@ -506,31 +506,19 @@ function createColors() {
return dark() ? tailwindRose900 : tailwindRose100; return dark() ? tailwindRose900 : tailwindRose100;
} }
function darkWhite() { function off() {
const _ = dark(); const _ = dark();
return bodyStyle.getPropertyValue("--off-color"); return bodyStyle.getPropertyValue("--off-color");
} }
function gray() { function textColor() {
const _ = dark();
return bodyStyle.getPropertyValue("--border-color");
}
function white() {
const _ = dark(); const _ = dark();
return bodyStyle.getPropertyValue("--color"); return bodyStyle.getPropertyValue("--color");
} }
function black() {
const _ = dark();
return bodyStyle.getPropertyValue("--background-color");
}
return { return {
white, default: textColor,
black, off,
darkWhite,
gray,
lightBitcoin: yellow, lightBitcoin: yellow,
bitcoin: orange, bitcoin: orange,
darkBitcoin: darkOrange, darkBitcoin: darkOrange,
@@ -596,7 +584,7 @@ function createColors() {
ust: red, ust: red,
busd: yellow, busd: yellow,
usdd: emerald, usdd: emerald,
frax: gray, frax: off,
dai: amber, dai: amber,
tusd: indigo, tusd: indigo,
pyusd: blue, pyusd: blue,
@@ -1502,7 +1490,7 @@ function initEverythingRelatedToPresets() {
}, },
{ {
title: `Even`, title: `Even`,
color: colors.white, color: colors.off,
datasetPath: `${scale}-to-1`, datasetPath: `${scale}-to-1`,
options: { options: {
lineStyle: 3, lineStyle: 3,
@@ -1543,12 +1531,12 @@ function initEverythingRelatedToPresets() {
}, },
{ {
title: `Raw`, title: `Raw`,
color: colors.white, color: colors.default,
datasetPath: ratioDatasetPath, datasetPath: ratioDatasetPath,
}, },
{ {
title: `Even`, title: `Even`,
color: colors.gray, color: colors.off,
datasetPath: `${scale}-to-1`, datasetPath: `${scale}-to-1`,
options: { options: {
lineStyle: 3, lineStyle: 3,
@@ -1581,7 +1569,7 @@ function initEverythingRelatedToPresets() {
}, },
{ {
title: `Base`, title: `Base`,
color: colors.white, color: colors.off,
datasetPath: `${scale}-to-0`, datasetPath: `${scale}-to-0`,
options: { options: {
lineStyle: 3, lineStyle: 3,
@@ -1622,7 +1610,7 @@ function initEverythingRelatedToPresets() {
}, },
{ {
title: `Raw`, title: `Raw`,
color: colors.white, color: colors.default,
datasetPath: ratioDatasetPath, datasetPath: ratioDatasetPath,
}, },
], ],
@@ -1643,9 +1631,9 @@ function initEverythingRelatedToPresets() {
], ],
bottom: [ bottom: [
{ {
title: `1%`, title: `0.1%`,
color: colors.probability1p, color: colors.probability0_1p,
datasetPath: /** @type {any} */ (`${ratioDatasetPath}-1p`), datasetPath: `${ratioDatasetPath}-0-1p`,
}, },
{ {
title: `0.5%`, title: `0.5%`,
@@ -1653,13 +1641,13 @@ function initEverythingRelatedToPresets() {
datasetPath: `${ratioDatasetPath}-0-5p`, datasetPath: `${ratioDatasetPath}-0-5p`,
}, },
{ {
title: `0.1%`, title: `1%`,
color: colors.probability0_1p, color: colors.probability1p,
datasetPath: `${ratioDatasetPath}-0-1p`, datasetPath: /** @type {any} */ (`${ratioDatasetPath}-1p`),
}, },
{ {
title: `Raw`, title: `Raw`,
color: colors.white, color: colors.default,
datasetPath: ratioDatasetPath, datasetPath: ratioDatasetPath,
}, },
], ],
@@ -1673,17 +1661,17 @@ function initEverythingRelatedToPresets() {
unit: "US Dollars", unit: "US Dollars",
top: [ top: [
{ {
title: `0.1%`, title: `99.9%`,
color: colors.probability0_1p, color: colors.probability0_1p,
datasetPath: /** @type {any} */ (`${valueDatasetPath}-99-9p`), datasetPath: /** @type {any} */ (`${valueDatasetPath}-99-9p`),
}, },
{ {
title: `0.5%`, title: `99.5%`,
color: colors.probability0_5p, color: colors.probability0_5p,
datasetPath: `${valueDatasetPath}-99-5p`, datasetPath: `${valueDatasetPath}-99-5p`,
}, },
{ {
title: `1%`, title: `99%`,
color: colors.probability1p, color: colors.probability1p,
datasetPath: `${valueDatasetPath}-99p`, datasetPath: `${valueDatasetPath}-99p`,
}, },
@@ -1698,17 +1686,17 @@ function initEverythingRelatedToPresets() {
unit: "US Dollars", unit: "US Dollars",
top: [ top: [
{ {
title: `0.1%`, title: `99.9%`,
color: colors.probability0_1p, color: colors.probability0_1p,
datasetPath: `${valueDatasetPath}-0-1p`, datasetPath: `${valueDatasetPath}-0-1p`,
}, },
{ {
title: `0.5%`, title: `99.5%`,
color: colors.probability0_5p, color: colors.probability0_5p,
datasetPath: `${valueDatasetPath}-0-5p`, datasetPath: `${valueDatasetPath}-0-5p`,
}, },
{ {
title: `1%`, title: `99%`,
color: colors.probability1p, color: colors.probability1p,
datasetPath: `${valueDatasetPath}-1p`, datasetPath: `${valueDatasetPath}-1p`,
}, },
@@ -1943,7 +1931,7 @@ function initEverythingRelatedToPresets() {
bottom: [ bottom: [
{ {
title: "Target", title: "Target",
color: colors.white, color: colors.off,
datasetPath: `date-to-blocks-mined-1d-target`, datasetPath: `date-to-blocks-mined-1d-target`,
options: { options: {
lineStyle: 3, lineStyle: 3,
@@ -1977,7 +1965,7 @@ function initEverythingRelatedToPresets() {
bottom: [ bottom: [
{ {
title: "Target", title: "Target",
color: colors.white, color: colors.off,
datasetPath: `date-to-blocks-mined-1w-target`, datasetPath: `date-to-blocks-mined-1w-target`,
options: { options: {
lineStyle: 3, lineStyle: 3,
@@ -2000,7 +1988,7 @@ function initEverythingRelatedToPresets() {
bottom: [ bottom: [
{ {
title: "Target", title: "Target",
color: colors.white, color: colors.off,
datasetPath: `date-to-blocks-mined-1m-target`, datasetPath: `date-to-blocks-mined-1m-target`,
options: { options: {
lineStyle: 3, lineStyle: 3,
@@ -2023,7 +2011,7 @@ function initEverythingRelatedToPresets() {
bottom: [ bottom: [
{ {
title: "Target", title: "Target",
color: colors.white, color: colors.off,
datasetPath: `date-to-blocks-mined-1y-target`, datasetPath: `date-to-blocks-mined-1y-target`,
options: { options: {
lineStyle: 3, lineStyle: 3,
@@ -2059,7 +2047,7 @@ function initEverythingRelatedToPresets() {
tree: createRecapPresets({ tree: createRecapPresets({
scale, scale,
title: "Block Size", title: "Block Size",
color: colors.darkWhite, color: colors.off,
unit: "Megabytes", unit: "Megabytes",
keySum: "date-to-block-size-1d-sum", keySum: "date-to-block-size-1d-sum",
keyAverage: "date-to-block-size-1d-average", keyAverage: "date-to-block-size-1d-average",
@@ -2078,7 +2066,7 @@ function initEverythingRelatedToPresets() {
tree: createRecapPresets({ tree: createRecapPresets({
scale, scale,
title: "Block Weight", title: "Block Weight",
color: colors.darkWhite, color: colors.off,
unit: "Weight", unit: "Weight",
keyAverage: "date-to-block-weight-1d-average", keyAverage: "date-to-block-weight-1d-average",
keyMax: "date-to-block-weight-1d-max", keyMax: "date-to-block-weight-1d-max",
@@ -2096,7 +2084,7 @@ function initEverythingRelatedToPresets() {
tree: createRecapPresets({ tree: createRecapPresets({
scale, scale,
title: "Block VBytes", title: "Block VBytes",
color: colors.darkWhite, color: colors.off,
unit: "Virtual Bytes", unit: "Virtual Bytes",
keyAverage: "date-to-block-vbytes-1d-average", keyAverage: "date-to-block-vbytes-1d-average",
keyMax: "date-to-block-vbytes-1d-max", keyMax: "date-to-block-vbytes-1d-max",
@@ -2114,7 +2102,7 @@ function initEverythingRelatedToPresets() {
tree: createRecapPresets({ tree: createRecapPresets({
scale, scale,
title: "Block Interval", title: "Block Interval",
color: colors.darkWhite, color: colors.off,
unit: "Seconds", unit: "Seconds",
keyAverage: "date-to-block-interval-1d-average", keyAverage: "date-to-block-interval-1d-average",
keyMax: "date-to-block-interval-1d-max", keyMax: "date-to-block-interval-1d-max",
@@ -2138,7 +2126,7 @@ function initEverythingRelatedToPresets() {
bottom: [ bottom: [
{ {
title: "Size", title: "Size",
color: colors.darkWhite, color: colors.off,
datasetPath: `height-to-block-size`, datasetPath: `height-to-block-size`,
}, },
], ],
@@ -2153,7 +2141,7 @@ function initEverythingRelatedToPresets() {
bottom: [ bottom: [
{ {
title: "Weight", title: "Weight",
color: colors.darkWhite, color: colors.off,
datasetPath: `height-to-block-weight`, datasetPath: `height-to-block-weight`,
}, },
], ],
@@ -2168,7 +2156,7 @@ function initEverythingRelatedToPresets() {
bottom: [ bottom: [
{ {
title: "VBytes", title: "VBytes",
color: colors.darkWhite, color: colors.off,
datasetPath: `height-to-block-vbytes`, datasetPath: `height-to-block-vbytes`,
}, },
], ],
@@ -2183,7 +2171,7 @@ function initEverythingRelatedToPresets() {
bottom: [ bottom: [
{ {
title: "Interval", title: "Interval",
color: colors.darkWhite, color: colors.off,
datasetPath: `height-to-block-interval`, datasetPath: `height-to-block-interval`,
}, },
], ],
@@ -2199,7 +2187,7 @@ function initEverythingRelatedToPresets() {
bottom: [ bottom: [
{ {
title: "Size", title: "Size",
color: colors.darkWhite, color: colors.off,
datasetPath: `${scale}-to-cumulative-block-size`, datasetPath: `${scale}-to-cumulative-block-size`,
}, },
], ],
@@ -3480,12 +3468,12 @@ function initEverythingRelatedToPresets() {
}, },
{ {
title: "Total", title: "Total",
color: colors.white, color: colors.default,
datasetPath: `${scale}-to-${datasetPrefix}supply`, datasetPath: `${scale}-to-${datasetPrefix}supply`,
}, },
{ {
title: "Halved Total", title: "Halved Total",
color: colors.gray, color: colors.off,
datasetPath: `${scale}-to-${datasetPrefix}halved-supply`, datasetPath: `${scale}-to-${datasetPrefix}halved-supply`,
options: { options: {
lineStyle: 4, lineStyle: 4,
@@ -3563,12 +3551,12 @@ function initEverythingRelatedToPresets() {
}, },
{ {
title: "100%", title: "100%",
color: colors.white, color: colors.default,
datasetPath: `${scale}-to-${datasetPrefix}supply-to-circulating-supply-ratio`, datasetPath: `${scale}-to-${datasetPrefix}supply-to-circulating-supply-ratio`,
}, },
{ {
title: "50%", title: "50%",
color: colors.gray, color: colors.off,
datasetPath: `${scale}-to-${datasetPrefix}halved-supply-to-circulating-supply-ratio`, datasetPath: `${scale}-to-${datasetPrefix}halved-supply-to-circulating-supply-ratio`,
options: { options: {
lineStyle: 4, lineStyle: 4,
@@ -3646,7 +3634,7 @@ function initEverythingRelatedToPresets() {
}, },
{ {
title: "100%", title: "100%",
color: colors.white, color: colors.default,
datasetPath: `${scale}-to-100`, datasetPath: `${scale}-to-100`,
options: { options: {
lastValueVisible: false, lastValueVisible: false,
@@ -3654,7 +3642,7 @@ function initEverythingRelatedToPresets() {
}, },
{ {
title: "50%", title: "50%",
color: colors.gray, color: colors.off,
datasetPath: `${scale}-to-50`, datasetPath: `${scale}-to-50`,
options: { options: {
lineStyle: 4, lineStyle: 4,
@@ -4128,7 +4116,7 @@ function initEverythingRelatedToPresets() {
bottom: [ bottom: [
{ {
title: `Total Empty Addresses`, title: `Total Empty Addresses`,
color: colors.darkWhite, color: colors.off,
datasetPath: `${scale}-to-empty-addresses`, datasetPath: `${scale}-to-empty-addresses`,
}, },
], ],
@@ -4330,7 +4318,7 @@ function initEverythingRelatedToPresets() {
bottom: [ bottom: [
{ {
title: "Market Cap", title: "Market Cap",
color: colors.white, color: colors.default,
datasetPath: `${scale}-to-market-cap`, datasetPath: `${scale}-to-market-cap`,
}, },
{ {
@@ -5300,11 +5288,12 @@ function initEverythingRelatedToPresets() {
const details = window.document.createElement("details"); const details = window.document.createElement("details");
const folderOpenLocalStorageKey = `${folderId}-open`; const folderOpenLocalStorageKey = `${folderId}-open`;
details.open = !!localStorage.getItem(folderOpenLocalStorageKey); details.open = !!localStorage.getItem(folderOpenLocalStorageKey);
details.id = folderId;
detailsList.push(details); detailsList.push(details);
li.appendChild(details); li.appendChild(details);
const summary = window.document.createElement("summary"); const summary = window.document.createElement("summary");
summary.id = folderId; details.appendChild(summary);
const spanMarker = window.document.createElement("span"); const spanMarker = window.document.createElement("span");
spanMarker.classList.add("marker"); spanMarker.classList.add("marker");
@@ -5320,8 +5309,6 @@ function initEverythingRelatedToPresets() {
smallCount.hidden = details.open; smallCount.hidden = details.open;
summary.append(smallCount); summary.append(smallCount);
details.appendChild(summary);
const thisPath = { const thisPath = {
name: anyPartial.name, name: anyPartial.name,
id: restFolder.id, id: restFolder.id,
@@ -5539,14 +5526,8 @@ function initEverythingRelatedToPresets() {
const selectedId = selected().id; const selectedId = selected().id;
selected().path.forEach(({ id }) => { selected().path.forEach(({ id }) => {
const summary = getElementById(id); const details = /** @type {HTMLDetailsElement} */ (getElementById(id));
const details = /** @type {HTMLDetailsElement | undefined} */ ( details.open = true;
summary.parentElement
);
if (!details) throw "Parent details should exist";
if (!details.open) {
summary.click();
}
}); });
setTimeout(() => { setTimeout(() => {
@@ -5556,10 +5537,14 @@ function initEverythingRelatedToPresets() {
}); });
}, 0); }, 0);
} }
goToSelected();
if (firstTime) { async function initGoToSelectedButton() {
goToSelected(); getElementById("button-go-to-selected").addEventListener("click", () => {
goToSelected();
});
} }
initGoToSelectedButton();
function createUpdateSelectedHeaderEffect() { function createUpdateSelectedHeaderEffect() {
createEffect(() => { createEffect(() => {
@@ -5570,6 +5555,11 @@ function initEverythingRelatedToPresets() {
} }
createUpdateSelectedHeaderEffect(); createUpdateSelectedHeaderEffect();
function changeSeletedFrameDisplayToFlex() {
selectedFrame.style.display = "flex";
}
changeSeletedFrameDisplayToFlex();
const LOCAL_STORAGE_TIME_RANGE_KEY = "chart-range"; const LOCAL_STORAGE_TIME_RANGE_KEY = "chart-range";
const URL_PARAMS_TIME_RANGE_FROM_KEY = "from"; const URL_PARAMS_TIME_RANGE_FROM_KEY = "from";
const URL_PARAMS_TIME_RANGE_TO_KEY = "to"; const URL_PARAMS_TIME_RANGE_TO_KEY = "to";
@@ -6024,13 +6014,13 @@ function initEverythingRelatedToPresets() {
}); });
createEffect(() => { createEffect(() => {
const { white, darkWhite } = colors; const { default: white, off: gray } = colors;
const color = white(); const color = white();
chart.applyOptions({ chart.applyOptions({
layout: { layout: {
textColor: darkWhite(), textColor: gray(),
}, },
rightPriceScale: { rightPriceScale: {
borderVisible: false, borderVisible: false,
@@ -6621,7 +6611,8 @@ function initEverythingRelatedToPresets() {
const datasets = createDatasets(); const datasets = createDatasets();
/** @type {DeepPartial<SeriesOptionsCommon>} */ /**
* @type {DeepPartial<SeriesOptionsCommon>} */
const defaultSeriesOptions = { const defaultSeriesOptions = {
// @ts-ignore // @ts-ignore
lineWidth: 1.5, lineWidth: 1.5,
@@ -7129,7 +7120,7 @@ function initEverythingRelatedToPresets() {
seriesBlueprint = { seriesBlueprint = {
datasetPath, datasetPath,
title, title,
color: colors.white, color: colors.default,
}; };
} }
@@ -7304,7 +7295,7 @@ function initEverythingRelatedToPresets() {
minMarker = { minMarker = {
weight: min.weight, weight: min.weight,
time: min.time, time: min.time,
color: colors.white(), color: colors.default(),
position: "belowBar", position: "belowBar",
shape: "arrowUp", shape: "arrowUp",
size: 0, size: 0,
@@ -7316,7 +7307,7 @@ function initEverythingRelatedToPresets() {
maxMarker = { maxMarker = {
weight: max.weight, weight: max.weight,
time: max.time, time: max.time,
color: colors.white(), color: colors.default(),
position: "aboveBar", position: "aboveBar",
shape: "arrowDown", shape: "arrowDown",
size: 0, size: 0,