SShortSingh.
Back to feed

Tamper-evident track record uses SHA-256, git and Bitcoin timestamps

0
·1 views

A team needed a way to show its forecasts were made before outcomes were known, without requiring readers to take its word for it. Each night, the day's scores are saved to a CSV file before the next market open, and the file's SHA-256 fingerprint is logged with a publication time. The file and ledger are pushed to a public git repository, and the file is also timestamped via OpenTimestamps, which anchors its hash in a Bitcoin transaction independent of GitHub. Any alteration to the file would change its fingerprint, while corrections are added as new entries in a public log rather than edits to existing data. The article notes a practical pitfall, where git line-ending normalisation can alter file bytes, and suggests a .gitattributes rule to prevent this. The approach is presented as an educational, not investment-advice, transparency method.

Read the full story at DEV Community

This is an AI-generated summary. ShortSingh links to the original source for the complete article.

Discussion (0)

Log in to join the discussion and vote.

Log in

Related stories

0
ProgrammingDEV Community ·

Webhook Not Firing? A Cross-Platform Guide to Debugging Bot Webhooks

A debugging guide explains that 'my webhook is not firing' can stem from three separate failures: the platform never sending the request, the request being rejected by the receiving server, or the server accepting it without any downstream effect. It recommends first identifying which side is at fault, using a table that maps each symptom to its likely location and first check. The guide advises logging the raw incoming request before any framework middleware processes it, since this often exposes the problem immediately. A top-to-bottom checklist follows, starting with testing the URL from outside the network and interpreting common status codes such as 404, 405, 301/308, and 403. The steps are verified against the documentation of Meta, Telegram, Slack, Discord, and Stripe as of August 2026.

0
ProgrammingHacker News ·

Blog Post Advises Against Buying AR Glasses

A blog post titled "Don't buy AR glasses" was shared on Hacker News, drawing a small amount of attention with three points and no comments at the time of listing. The article is hosted on a personal blog at blog.yaros.ae and argues against purchasing augmented reality glasses. The provided text contains only the link and discussion metadata, so the specific reasons the author gives cannot be verified from this item. The post reflects ongoing skepticism about the consumer readiness of AR wearables.

0
ProgrammingDEV Community ·

Why MySQL Skips an Index: Three Common Causes and How to Tell Them Apart

A slow query can read every row in a table even when an index exists on the filtered column. The article examines three causes: wrapping a datetime column in DATE(), comparing a VARCHAR column with an unquoted number, and joining tables whose character sets differ. The first cause is visible in the query text, while the other two are hidden in column types and character sets. The author tested these cases on MySQL 8.4 and 8.0 using EXPLAIN, SHOW WARNINGS, and slow query log data. The three causes can be distinguished by the possible_keys column in EXPLAIN and by warning 1739 shown right after running EXPLAIN.

0
ProgrammingDEV Community ·

C# First Program: Namespaces, Keywords and Modern Top-Level Statements

A DEV Community lesson introduces the structure of a basic C# program, contrasting the classic layout with a namespace, class and Main method against modern top-level statements in C# 10 and later. It explains how namespaces prevent naming clashes, how the using directive, aliases and static imports work, and how implicit usings auto-import common namespaces. The article also covers reserved versus contextual keywords, along with standard naming conventions for types, locals, fields and async methods. Finally, it distinguishes value types from reference types and touches on string immutability and the use of StringBuilder.