Compare commits

...
2 Commits
Author SHA1 Message Date
satoshi be31a2fe58 Bump version to 0.2.8 to add upstream security hardening 2026-09-04 14:55:16 +03:00
satoshi 27f3e0e507 Add 0.2.7 version file 2026-09-04 01:03:41 +03:00
3 changed files with 46 additions and 2 deletions

No files matched your search

+4 -2
View File
@@ -6,11 +6,13 @@ import { v0_2_3 } from './v0_2_3'
import { v0_2_4 } from './v0_2_4' import { v0_2_4 } from './v0_2_4'
import { v0_2_5 } from './v0_2_5' import { v0_2_5 } from './v0_2_5'
import { v0_2_6 } from './v0_2_6' import { v0_2_6 } from './v0_2_6'
import { v0_2_7 } from './v0_2_7'
import { v0_2_8 } from './v0_2_8'
// The current version must be listed first; `other` carries the rest of the // The current version must be listed first; `other` carries the rest of the
// graph so StartOS can find a migration path from whatever version an existing // graph so StartOS can find a migration path from whatever version an existing
// install is currently on. // install is currently on.
export const versionGraph = VersionGraph.of({ export const versionGraph = VersionGraph.of({
current: v0_2_6, current: v0_2_8,
other: [v0_2_0, v0_2_1, v0_2_2, v0_2_3, v0_2_4, v0_2_5], other: [v0_2_0, v0_2_1, v0_2_2, v0_2_3, v0_2_4, v0_2_5, v0_2_6, v0_2_7],
}) })
+21
View File
@@ -0,0 +1,21 @@
import { VersionInfo } from '@start9labs/start-sdk'
export const v0_2_7 = VersionInfo.of({
version: '0.2.7:0',
releaseNotes: {
en_US:
'Your best share and every block you find can now be shared as an image. A "Share card" button on the proof-of-work page, and on each row of the found-blocks table, opens a preview; the card can be saved as a PNG or copied straight to the clipboard, in a 9:16 story format or a 1:1 square for feed posts. The best-share card carries the difficulty, the block header hash with its leading zeros lit, and the raw 80-byte header itself, so the image is its own proof: a screenshot of a big number proves nothing, but those bytes are the share hash\'s exact preimage and anyone can hash them. A QR code carries the same header, so it can be scanned and checked without retyping 160 hex characters. The block card has a design of its own: a gold "I found a block!" headline, the block height, the reward, the difficulty of the winning share, and the chain named on a badge, so a testnet4 block is never mistaken for a mainnet one. Its QR code links to the block on an explorer, because a mined block is already public and the chain itself is the proof. Both cards carry Kamado Pool branding and the Bitcoin logo.',
es_ES:
'Su mejor participación y cada bloque que encuentre ahora se pueden compartir como imagen. Un botón «Tarjeta para compartir» en la página de prueba de trabajo, y en cada fila de la tabla de bloques encontrados, abre una vista previa; la tarjeta se puede guardar como PNG o copiar directamente al portapapeles, en formato historia 9:16 o cuadrado 1:1 para publicaciones. La tarjeta de mejor participación incluye la dificultad, el hash de la cabecera del bloque con sus ceros iniciales iluminados y la propia cabecera en bruto de 80 bytes, de modo que la imagen es su propia prueba: una captura de pantalla con un número grande no demuestra nada, pero esos bytes son la preimagen exacta del hash de la participación y cualquiera puede aplicarles el hash. Un código QR contiene la misma cabecera, así que se puede escanear y comprobar sin teclear 160 caracteres hexadecimales. La tarjeta de bloque tiene un diseño propio: un titular dorado «¡He encontrado un bloque!», la altura del bloque, la recompensa, la dificultad de la participación ganadora y la cadena indicada en una insignia, para que un bloque de testnet4 nunca se confunda con uno de mainnet. Su código QR enlaza al bloque en un explorador, porque un bloque minado ya es público y la propia cadena es la prueba. Ambas tarjetas llevan la marca de Kamado Pool y el logotipo de Bitcoin.',
de_DE:
'Ihr bester Share und jeder gefundene Block lassen sich jetzt als Bild teilen. Eine Schaltfläche „Share-Karte“ auf der Arbeitsnachweis-Seite und in jeder Zeile der Tabelle gefundener Blöcke öffnet eine Vorschau; die Karte lässt sich als PNG speichern oder direkt in die Zwischenablage kopieren, im Story-Format 9:16 oder quadratisch 1:1 für Feed-Beiträge. Die Bestwert-Karte enthält die Schwierigkeit, den Blockheader-Hash mit hervorgehobenen führenden Nullen und den rohen 80-Byte-Header selbst, sodass das Bild sein eigener Beweis ist: Ein Screenshot mit einer großen Zahl beweist nichts, aber diese Bytes sind das exakte Urbild des Share-Hashes, und jeder kann sie hashen. Ein QR-Code trägt denselben Header, sodass er gescannt und geprüft werden kann, ohne 160 Hexzeichen abzutippen. Die Block-Karte hat ein eigenes Design: eine goldene Überschrift „Ich habe einen Block gefunden!“, die Blockhöhe, die Belohnung, die Schwierigkeit des entscheidenden Shares und die Chain auf einem Abzeichen, damit ein testnet4-Block nie mit einem Mainnet-Block verwechselt wird. Sein QR-Code verweist auf den Block in einem Explorer, denn ein geschürfter Block ist bereits öffentlich und die Chain selbst ist der Beweis. Beide Karten tragen das Kamado-Pool-Branding und das Bitcoin-Logo.',
pl_PL:
'Twój najlepszy udział i każdy znaleziony blok można teraz udostępnić jako obraz. Przycisk „Karta do udostępnienia” na stronie dowodu pracy oraz w każdym wierszu tabeli znalezionych bloków otwiera podgląd; kartę można zapisać jako PNG lub skopiować wprost do schowka, w formacie story 9:16 albo kwadratowym 1:1 do wpisów w kanale. Karta najlepszego udziału zawiera trudność, hasz nagłówka bloku z podświetlonymi wiodącymi zerami oraz sam surowy 80-bajtowy nagłówek, dzięki czemu obraz jest własnym dowodem: zrzut ekranu z dużą liczbą niczego nie dowodzi, ale te bajty to dokładny przeciwobraz hasza udziału i każdy może je zahaszować. Kod QR zawiera ten sam nagłówek, więc można go zeskanować i sprawdzić bez przepisywania 160 znaków szesnastkowych. Karta bloku ma własny projekt: złoty nagłówek „Znalazłem blok!”, wysokość bloku, nagrodę, trudność zwycięskiego udziału oraz nazwę łańcucha na odznace, aby bloku z testnet4 nigdy nie pomylić z blokiem z mainnetu. Jej kod QR prowadzi do bloku w eksploratorze, ponieważ wykopany blok jest już publiczny, a sam łańcuch jest dowodem. Obie karty niosą oznaczenia Kamado Pool i logo Bitcoina.',
fr_FR:
'Votre meilleure part et chaque bloc trouvé peuvent désormais être partagés sous forme d’image. Un bouton « Carte à partager », sur la page de preuve de travail comme sur chaque ligne du tableau des blocs trouvés, ouvre un aperçu ; la carte peut être enregistrée en PNG ou copiée directement dans le presse-papiers, au format story 9:16 ou carré 1:1 pour les publications. La carte de meilleure part porte la difficulté, le hachage de l’en-tête de bloc avec ses zéros de tête mis en lumière et l’en-tête brut de 80 octets lui-même, si bien que l’image est sa propre preuve : une capture d’écran affichant un grand nombre ne prouve rien, mais ces octets sont la préimage exacte du hachage de la part et n’importe qui peut les hacher. Un code QR contient le même en-tête, ce qui permet de le scanner et de le vérifier sans retaper 160 caractères hexadécimaux. La carte de bloc a son propre design : un titre doré « J’ai trouvé un bloc ! », la hauteur du bloc, la récompense, la difficulté de la part gagnante et la chaîne nommée sur un badge, afin qu’un bloc testnet4 ne soit jamais pris pour un bloc du réseau principal. Son code QR renvoie au bloc dans un explorateur, car un bloc miné est déjà public et la chaîne elle-même est la preuve. Les deux cartes portent l’identité de Kamado Pool et le logo Bitcoin.',
},
// No data migration in either direction. Presentation only: the cards are
// drawn in the browser from data the dashboard already receives, and
// nothing stored changes shape.
migrations: {},
})
+21
View File
@@ -0,0 +1,21 @@
import { VersionInfo } from '@start9labs/start-sdk'
export const v0_2_8 = VersionInfo.of({
version: '0.2.8:0',
releaseNotes: {
en_US:
'Security hardening for the dashboard API. The WebSocket that feeds the dashboard, and every request that changes state, now verify that they came from the dashboard itself rather than from another site. Without that check, a web page you happened to visit while signed in to StartOS could have used your browser session to read pool data, including payout addresses, per-worker hashrates and block history, or to trigger admin actions such as zeroing the latency counters or starting a rebuild of the share statistics. Requests that are not browser-driven, such as the Pool Status action or a health probe, are unaffected. Responses now also tell browsers not to sniff content types and not to allow the dashboard to be embedded in a frame, and the share statistics rebuild refuses to start a second run while one is already going. The transaction accelerator was reviewed as part of this and needed no change: it already rejects anything that is not a 64 character transaction id, caps the fee rate at 2000 sat/vB, and passes values to Bitcoin Core as typed parameters.',
es_ES:
'Refuerzo de seguridad de la API del panel. El WebSocket que alimenta el panel, y toda petición que cambie el estado, ahora comprueban que proceden del propio panel y no de otro sitio web. Sin esa comprobación, una página que usted visitara mientras tenía la sesión iniciada en StartOS podría haber usado su navegador para leer datos del pool, incluidas las direcciones de pago, el hashrate por trabajador y el historial de bloques, o para activar acciones de administración como poner a cero los contadores de latencia o iniciar una reconstrucción de las estadísticas de participaciones. Las peticiones que no proceden de un navegador, como la acción Estado del pool o una comprobación de salud, no se ven afectadas. Las respuestas indican además a los navegadores que no deduzcan el tipo de contenido y que no permitan incrustar el panel en un marco, y la reconstrucción de estadísticas se niega a iniciar una segunda ejecución mientras ya hay una en curso. El acelerador de transacciones se revisó como parte de este trabajo y no necesitó cambios: ya rechaza todo lo que no sea un identificador de transacción de 64 caracteres, limita la tarifa a 2000 sat/vB y pasa los valores a Bitcoin Core como parámetros tipados.',
de_DE:
'Sicherheitshärtung der Dashboard-API. Der WebSocket, der das Dashboard versorgt, und jede zustandsändernde Anfrage prüfen jetzt, ob sie vom Dashboard selbst stammen und nicht von einer anderen Website. Ohne diese Prüfung hätte eine Webseite, die Sie bei angemeldeter StartOS-Sitzung besuchen, Ihre Browsersitzung nutzen können, um Pool-Daten auszulesen, darunter Auszahlungsadressen, Hashrate je Worker und Blockhistorie, oder um Admin-Aktionen auszulösen, etwa das Nullsetzen der Latenzzähler oder den Neuaufbau der Share-Statistiken. Nicht browsergesteuerte Anfragen, etwa die Aktion „Pool-Status“ oder eine Health-Prüfung, sind nicht betroffen. Antworten weisen Browser zudem an, Inhaltstypen nicht zu erraten und das Dashboard nicht in einem Frame einzubetten, und der Neuaufbau der Share-Statistiken verweigert einen zweiten Lauf, solange bereits einer läuft. Der Transaktionsbeschleuniger wurde dabei überprüft und benötigte keine Änderung: Er weist alles zurück, was keine 64 Zeichen lange Transaktions-ID ist, begrenzt die Gebühr auf 2000 sat/vB und übergibt Werte typisiert an Bitcoin Core.',
pl_PL:
'Wzmocnienie bezpieczeństwa API pulpitu. WebSocket zasilający pulpit oraz każde żądanie zmieniające stan sprawdzają teraz, czy pochodzą z samego pulpitu, a nie z innej witryny. Bez tej kontroli strona internetowa odwiedzona podczas zalogowania do StartOS mogła wykorzystać sesję przeglądarki do odczytania danych puli, w tym adresów wypłat, hashrate poszczególnych koparek i historii bloków, albo do uruchomienia akcji administracyjnych, takich jak wyzerowanie liczników opóźnień czy rozpoczęcie odbudowy statystyk udziałów. Żądania niepochodzące z przeglądarki, na przykład akcja Stan puli lub kontrola stanu zdrowia, pozostają bez zmian. Odpowiedzi informują ponadto przeglądarki, aby nie zgadywały typu treści i nie pozwalały osadzać pulpitu w ramce, a odbudowa statystyk odmawia uruchomienia drugiego przebiegu, gdy jeden już trwa. Akcelerator transakcji został przy tej okazji sprawdzony i nie wymagał zmian: już wcześniej odrzucał wszystko, co nie jest 64-znakowym identyfikatorem transakcji, ogranicza stawkę do 2000 sat/vB i przekazuje wartości do Bitcoin Core jako parametry typowane.',
fr_FR:
'Renforcement de la sécurité de l’API du tableau de bord. Le WebSocket qui alimente le tableau de bord, ainsi que toute requête modifiant l’état, vérifient désormais qu’ils proviennent bien du tableau de bord et non d’un autre site. Sans cette vérification, une page web visitée pendant que vous étiez connecté à StartOS aurait pu utiliser votre session de navigateur pour lire les données du pool, notamment les adresses de paiement, le hashrate par mineur et l’historique des blocs, ou pour déclencher des actions d’administration comme la remise à zéro des compteurs de latence ou le lancement d’une reconstruction des statistiques de parts. Les requêtes qui ne viennent pas d’un navigateur, comme l’action État du pool ou une sonde de santé, ne sont pas affectées. Les réponses indiquent en outre aux navigateurs de ne pas deviner les types de contenu et de ne pas autoriser l’intégration du tableau de bord dans un cadre, et la reconstruction des statistiques refuse de démarrer une seconde exécution tant qu’une autre est en cours. L’accélérateur de transactions a été revu à cette occasion et n’a nécessité aucune modification : il rejette déjà tout ce qui n’est pas un identifiant de transaction de 64 caractères, plafonne le tarif à 2000 sat/vB et transmet les valeurs à Bitcoin Core sous forme de paramètres typés.',
},
// No data migration in either direction. The change is confined to how
// the service decides whether to answer a request; nothing stored
// changes shape, and a downgrade simply removes the checks again.
migrations: {},
})