Bitcoin 1.01ORION · SLH-DSA · √2

Bitcoin 1.01 — Tasarım Kararları

Bu belge, projede alınan kararların kaydıdır. Bir karar değişirse burası güncellenir. Durum etiketleri: KODDA yazıldı ve test edildi · KARAR kararlaştırıldı, henüz kodda değil · AÇIK henüz tam çözülmedi.


0. Hikâye

Bitcoin 1.01, mimari değişikliklerle güncellenmiş ve artık haberleşmeyi de mümkün kılan bir sürüm. Hiçbir web sitesine, hosting'e, alan adına veya üçüncü taraf sunucuya ihtiyaç duymaz. Tek "sunucu", proje sahibinin kendi bilgisayarıdır ve o da ağın çalışması için zorunlu değildir.


1. Hash: ORION ailesi KODDA

  • Kendi icadımız değil: SHA-3'ün kalbi olan Keccak-f[1600] permütasyonu.
  • Ayar: kapasite 1024 bit (SHA3-512 ile aynı), hız 72 bayt.
  • ORION-1024: blok parmak izi, 1024 bit (256 hex karakter). Genel güvenlik 512 bit.
  • ORION-512: işlem kimliği ve Merkle düğümleri, 512 bit.
  • Etiket (her çağrının önünde): [uzunluk] "orion-stars-up-my-sleeve/" + amaç Amaçlar: blok, islem, genesis-kaydi, merkle-yaprak, merkle-ic, adres …
  • Şeffaflık: ORION-512 sonucu, aynı girdinin resmî SHA3-512 sonucuyla birebir aynıdır.
  • Kod; resmî SHA3-512 / SHAKE256 değerleri ve bağımsız bir Python Keccak uygulamasıyla doğrulandı.

Not: SHAKE-256 çıktısını 1024 bite uzatmak güvenliği 256 bitin üstüne çıkarmaz. Güvenliği artıran şey kapasiteyi 1024 bite çıkarmaktır; ORION bunu yapar.

2. Karekök 2 KODDA

  • √2 bitleri programın içinde, kütüphanesiz hesaplanır. Ayrı bir dosyaya gerek yoktur.
    1. bit = ikili noktadan sonraki ilk bit. İlk 64 bit 6a09e667f3bcc908 (SHA-256 ve SHA-512'nin ilk başlangıç sabitiyle aynı).
  • Genesis: bitler [0, 2048).
  • Dönem sabiti: Her yarılanma döneminde (1.050.000 blok, yaklaşık 4 yıl) √2'nin sıradaki 1024 biti zincir kurallarına girer: blok hash = ORION-1024("blok", başlık || dönem sabiti). Oylama gerekmez; her cihaz aynı sonucu hesaplar. (Önceki "%50 coin sahibi onayı" fikrinin yerine.)
  • √2 gizli değildir. Hiçbir gizli anahtar √2'den üretilmez.

3. 3x+1 (sembolik) KODDA

  • Her blok başlığında collatz alanı = (yükseklik + 27) sayısının 1'e inene kadar attığı adım sayısı.
  • Genesis'te bu 27'dir: 111 adım, yolculukta zirve 9232.
  • Genesis madenciliği nonce = 27'den başlar.
  • Güvenlikte hiçbir rolü yoktur; zincirin "kalp atışı" gibi bir imzadır.

4. Blok başlığı KODDA

228 bayt, küçük uç (little-endian):

AlanBaytAçıklama
sürüm4101
yükseklik8
önceki hash128ORION-1024
merkle kökü64ORION-512
zaman8Unix saniye (UTC)
hedef_bits4sıkıştırılmış hedef
nonce8
collatz43x+1 adım sayısı
  • Merkle: yaprak ve iç düğüm farklı etiketli. Tek sayıda düğüm kaldığında son düğüm kopyalanmaz, bir üst seviyeye aynen taşınır (Bitcoin'in CVE-2012-2459 hatasından kaçınmak için).
  • Bir işlemin blokta olduğu log2(n) adımlık kısa bir kanıtla gösterilebilir.

5. Genesis KODDA

  • Önceki hash: √2'nin ilk 1024 biti ("zincirden önce √2 vardı").
  • Kayıt: "orion-stars-up-my-sleeve" + √2'nin ilk 2048 biti. Harcanabilir çıktısı yoktur.
  • Zaman: 2026-10-23 20:12:00 İstanbul = 1792775520.
  • Hedef: 0x7E00FFFF (ortalama 2^24 deneme).
  • Nonce: 599548.
  • Hash: 000000729d827999fbaab777aab0bba8e6cfdf7646af1d78acea54300463226189321ff01b097953e6f0b246c797640da04bf1a7aa438819fa0799d7bc5e591ee523e85b4fa14845a45ad6adcce7191847621a639f2b424fca9b6fd14b3ed30823d185728d56b886e04d8b21922e81fbb4e35fecec2f71d39d6a16129a069659

6. Para, zaman ve zorluk KODDA

  • Hedef blok süresi: 120 saniye.
  • ASERT, her blokta (Bitcoin Cash'in aserti3-2d kuralının tamsayı hesabı, 1024 bit hedefe uyarlandı): hedef = çapa_hedefi × 2^((gerçek süre − 120 × blok farkı) / 7200)
    • Yarı ömür 2 saat: zincir 2 saat geride kalırsa hedef 2 katına çıkar (kazmak kolaylaşır), 2 saat ileride olursa yarıya iner.
    • 2^x için 3. derece polinom; en kötü göreli hata %0,012 (ölçüldü). Sonuçlar bağımsız Python referansıyla birebir aynı.
    • Çapa = 1. blok. Genesis ile ağın açıldığı gün arasında geçen süre zorluğu bozmaz.
      1. blok hedefi = genesis hedefi 0x7E00FFFF (2^24 deneme).
    • En kolay sınır: 0x7F00FFFF (2^16 deneme).
  • Blok ödülü: 10 coin. Her 1.050.000 blokta yarılanır; bu, √2 dönem sabitinin değiştiği anla aynıdır. Toplam arz: 20.999.989,8635 coin (genesis'in ödülü olmadığı için 21 milyonun hemen altı).
  • 1 coin = 100.000.000 en küçük birim.
  • Zaman damgası kuralı (Bitcoin ile aynı): son 11 bloğun medyanından büyük olmalı ve cihaz saatinden en fazla 2 saat ileride olabilir.

6b. Blok, dosya ve madencilik KODDA

  • Blok = başlık (228 bayt) + işlem sayısı (4 bayt) + işlemler. Gövde en fazla 4 MB.
  • Kayıt dosyası: <veri>/ana/bloklar.dat (veri klasörü: bölüm 17), blok başına "ORN1" | uzunluk | blok. Program her açılışta bütün blokları imzalar dahil baştan doğrular. Dosyanın sonu yarım kalmışsa (örneğin elektrik kesildiyse) sadece zincire yazan kaz komutu onarır: önce bloklar.dat.yedek alınır, sonra sağlam kısma kadar kısaltılır. Okuma yapan komutlar dosyaya dokunmaz.
  • Faz 2'nin deneme zinciri (gövdesinde sadece ödül kaydı vardı) Faz 3'ün ilk açılışında silinmeden <veri>/ana_faz2_eski klasörüne taşınır. Genesis aynıdır.
  • Madenci: bütün çekirdekler, ara durumlu Keccak (başlığın değişmeyen ilk 216 baytı bir kere işlenir), ilk 72 baytla erken karşılaştırma. Bulunan her blok normal yoldan ayrıca doğrulanır. Nonce araması 27'den başlar.
  • Keccak-f[1600] açılmış (unrolled) haliyle yazıldı; kod araclar/keccak_uret.py ile FIPS 202 formülünden üretilir. Tek çekirdekte hız yaklaşık 3,7 kat arttı.
  • Bütün blok ve işlem kuralları src/zincir.hpp dosyasının başında tek tek yazılıdır.
  • Çatallanma (iki madencinin aynı anda blok bulması) ve "en çok iş içeren zincir" kuralı Faz 4'te, ağ ile birlikte gelecek.

7. Anahtarlar, adresler, imza KODDA

  • İmza: SLH-DSA-SHAKE-256s (NIST FIPS 205), sıfırdan yazıldı.
    • Açık anahtar 64 bayt, gizli anahtar 128 bayt, imza 29.792 bayt. Çok kullanımlık (anahtar başına 2^64 imza sınırı).
    • NIST'in resmî ACVP test vektörleriyle doğrulandı: anahtar üretimi 10/10, imzalama 28/28 (deterministik ve rastgeleleştirilmiş, iç ve dış arayüz), doğrulama 28/28 (bilerek bozulmuş imzalar dahil). Vektörler testvektor/slhdsa_shake256s.txt dosyasında; kaynak NIST'in usnistgov/ACVP-Server deposu, dönüştürücü araclar/acvp_donustur.py. bitcoin101 nist-test hepsini çalıştırır.
    • İmzalama, FORS ağaçları ve hiper ağaç katmanları bütün çekirdeklere bölünerek yapılır.
    • Cüzdan imzaları "hedged" (rastgeleleştirilmiş) atılır: her imzada işletim sisteminden 32 bayt taze rastgelelik.
    • Bağlam dizesi (FIPS 205 "context"): orion-stars-up-my-sleeve/islem.
  • Gerçek rastgelelik: Windows'ta BCryptGenRandom, Linux'ta getrandom(). Başarısız olursa program durur; asla zayıf rastgeleye düşmez. std::random_device kullanılmaz.
  • Cüzdan: tek bir 256 bitlik ana sır. Adres no i için t = ORION-1024("cuzdan-tohum", ana_sır || i), SK.seed = t[0..32), SK.prf = t[32..64), PK.seed = t[64..96). Tek yedek (64 hex karakter) bütün adresleri kurtarır. Para üstü her seferinde yeni bir adrese gider.
    • Cüzdan dosyası şifre ile şifrelenir (bölüm 14).
  • Adres = 768 bit = ORION-1024("adres", açık anahtar) çıktısının ilk 768 biti (öndeki 384 + arkadaki 384 bit herkese açık; "ortadaki" 256 bitlik gizli tohum asla yayınlanmaz).
  • Adres metni: "orn" + Base58(adres || kontrol), kontrol = ORION-512("adres-kontrol", adres) ilk 4 baytı. 140 karakter. Tek harf yanlış yazılırsa adres reddedilir.
  • √2 koordinatı (sembolik): adresin ilk 48 biti, adresin √2'de "yaşadığı" bit numarası olarak gösterilir.

7b. İşlemler ve UTXO KODDA

  • İki tür işlem: ödül işlemi (her bloğun ilki, girdisiz, yüksekliği içerir) ve normal işlem.
  • İşlem kimliği (txid) = ORION-512("islem", gövde), imzalar hariç. Böylece imza ile kimlik değiştirilemez. Merkle ağacına ise imzalar dahil tam kimlik ("islem-tam") girer; blok her şeyi taahhüt eder.
  • Aynı adresten gelen birden fazla girdi tek bir imzayı paylaşır (her imza yaklaşık 30 KB olduğu için önemli).
  • İmzalanan mesaj = ORION-512("imza-mesaji", txid || harcanan her çıktının miktarı ve adresi).
  • Her işlemde en fazla 80 baytlık bir not alanı var (ileride √2 açık ilanları için temel).
  • Kurallar (src/zincir.hpp): çıktı UTXO defterinde olmalı; ödül çıktıları 100 blok olgunlaşmadan harcanamaz; imzanın açık anahtarı harcanan adrese ait olmalı; her SLH-DSA imzası geçerli olmalı; kullanılmayan imza kaydı olamaz; çıkan ≤ giren (fark ücret); ödül işlemi ≤ blok ödülü + toplam ücret.
  • Ücret politikası: 1000 bayt başına 1000 birim (0,00001 coin). Tek imzalı bir işlem yaklaşık 30 KB, yani ücreti yaklaşık 0,0003 coin. Bu bir uzlaşı kuralı değil, havuzun kabul kuralıdır.
  • Bekleyen havuz (<veri>/ana/bekleyen.dat; en fazla 32 MB / 5000 işlem, bölüm 17): henüz bloğa girmemiş işlemler. Şimdilik sadece onaylanmış çıktıları harcayabilirler (onaylanmamış para üstü bir sonraki bloğu bekler). kaz her blokta havuzu yeniden okur; başka bir terminalden gonder ile eklenen işlem bir sonraki bloğa girer.
  • Sürüm 2 işlem (HTLC çıktısı, talep/iade yolları): bölüm 16a.
  • Kuantum notu: adresten açık anahtara gitmek 768 bitlik ORION ön görüntüsü bulmak demektir. İmza zaten sadece hash'e dayanır; Shor algoritmasının hedef alacağı bir eliptik eğri yoktur.

7c. Deneme ağı (--lab) KODDA

  • Herhangi bir komutun sonuna --lab eklenince ayrı bir ağda (<veri>/lab) çalışır. Zorluk en kolay sınırda, kazmak neredeyse anlıktır. 100 blok olgunlaşma kuralı aynıdır ama 101 blok birkaç saniyede kazılır.
  • Testler de aynı laboratuvar ağını kullanır.

8. Mesajlaşma KARAR

8a. Açık ilan (public post) — √2 kodlaması

  • Alfabe: 64 karakter, 6 bit. Türk alfabesinin 29 harfi + q + x + boşluk = 32, artı en çok kullanılan 32 sembol/rakam = 64.
  • √2 sözlüğü: √2'nin ilk 2^21 = 2.097.152 biti.
  • Ölçümler (gerçek hesap):
    • 1 karakter (6 bit): 64 desenin hepsi ilk 452 bitte var.
    • 2 karakter (12 bit): 4.096 desenin hepsi ilk 32.218 bitte var.
    • 3 karakter (18 bit): 262.144 desenin %99,969'u ilk 2^21 bitte var. Sadece 81 desen yok.
    • 4 karakter (24 bit): sadece %11,7'si var, bu yüzden kullanılmaz.
  • Biçim: mesaj 3'erli parçalara bölünür. Her parça için [2 bit tür][konum]:
    • 3 karakter → 21 bitlik konum
    • bulunamazsa 2 + 1 karaktere bölünür (15 ve 9 bitlik konumlar).
  • Dürüst maliyet: 3 karakterlik bir parça 18 bit yerine 23 bitle yazılır (yaklaşık %28 daha uzun). Bilgi teorisi gereği rastgele bir dizide bir konumu yazmak, aranan parça kadar yer tutar. Bu bir sıkıştırma değil, sembolik bir kodlamadır. Şifreleme hiç değildir: anahtarı gören herkes okur.
  • Sık kullanılan kelimeler için kısa kodlar (Huffman tarzı sözlük): Faz 7'de değerlendirilecek.

8b. Özel mesaj (private direct message)

  • Anahtar değişimi: ML-KEM-1024 (NIST FIPS 203).
  • Şifreleme: simetrik, 256 bit anahtarlı ve doğrulamalı (AES-256-GCM veya Keccak tabanlı bir yapı; Faz 7'de seçilecek).
  • Mesaj zincire yazılmaz. Eşler arası ağda iletilir; alıcı çevrimdışıysa, açık düğümler bir süre şifreli olarak tutar.

9. Ağ mimarisi KODDA

Tek komut: bitcoin101 dugum. Eşlerle bağlantı, senkronizasyon, blok ve işlem yayma, madencilik (--kaz) ve izleme ekranı aynı programda çalışır. Alan adı, hosting veya üçüncü taraf sunucu gerekmez.

Eşlerin birbirini bulma yolları

YolNasılEk ayar
Aynı Wi-Fi / kablolu ev ağıUDP 10101 yayını, her 30 saniyede bir; bulunan düğüme otomatik TCP bağlantısıYok (güvenlik duvarı izni)
Tohum bilgisayartohumlar.txt içindeki IP:port'a doğrudan TCP 10102Tohumda port yönlendirme
Adres paylaşımıHer eş bildiği adresleri paylaşır (ADRESLER mesajı); <veri>/ana/esler.txt'e kaydedilir. İnternetteki bir eşten yerel/özel adresler ve alan adları kabul edilmez; liste bağlantı başına bir kez alınır. Tohum kapalıyken de düğümler birbirine bağlanırYok
Elle / davet--baglan IP:port; bitcoin101 davet bu bilgisayarın adresini gösterirYok
IPv6Dinleme soketi IPv4 + IPv6 birlikte ("dual stack")Çoğu zaman yok
İnternetsiz ortamBir telefonun erişim noktasına (hotspot) ya da aynı switch'e bağlanan bilgisayarlar aynı yerel ağdadır; otomatik keşif orada da çalışır. Bazı cihazlar istemcileri birbirinden yalıtır (AP isolation); o durumda çalışmazCihaza bağlı

Uygulanmayanlar: Bluetooth, Wi-Fi Direct, Tor, modemde otomatik port açma (UPnP/PCP). Bunlar ileride eklenebilir.

Protokol (TCP, her mesaj "O101" | tür | uzunluk | içerik; deneme ağında "OLAB"): SELAM (sürüm, düğüm kimliği, dinleme portu, yükseklik, toplam iş, uç hash, saat), BASLIK_ISTE/BASLIKLAR (en fazla 500), BLOK_ISTE/BLOK (en fazla 16), ISLEM, ADRES_ISTE/ADRESLER, PING/PONG. Protokol sürümü 2 (HTLC kurallarını bilen düğüm); protokol 1 eşler HTLC etkinleşene kadar kabul edilir (bölüm 16a).

Senkronizasyon ("önce başlıklar"):

  1. Eşin toplam işi bizimkinden fazlaysa konum listesiyle (uçtan geriye 10 blok, sonra katlanarak, en son genesis) başlıklar istenir.
  2. Başlıklar ortak bloktan itibaren bütün başlık kurallarıyla (ASERT, medyan zaman, 3x+1, iş kanıtı) doğrulanır.
  3. Dalın toplam işi bizimkinden kesin fazlaysa bloklar indirilir ve zincir değiştirilir. Eşitlikte ilk görülen kalır.
  4. Değiştirme sırasında bir blok bile geçersizse zincir ve UTXO defteri eski haline döner, eş atılır.
  5. Geri alınan bloklardaki işlemler (hâlâ geçerliyse) bekleyen havuza döner.

Toplam iş: blok başına 2^(1024 − 8·(üs−3)) / mantis (tamsayı, en fazla 2^120); en çok toplam işi olan geçerli zincir kazanır.

Kendini koruma: geçersiz blok/başlık/işlem gönderen eş atılır ve bir saat tekrar denenmez; en fazla 8 giden ve 64 gelen bağlantı; mesaj en fazla 6 MB; 180 saniye sessiz kalan eş kapatılır; eşin saatiyle fark 20 dakikayı aşarsa uyarı verilir (bloklar en fazla 30 dakika ileri tarihli olabildiği için saat doğru olmalı; bölüm 13).

Dosya güvenliği: zincire aynı anda sadece bir program yazabilir (yazici.kilit, işletim sistemi kilidi; program çökse de kendiliğinden açılır). gonder işlemi ortak dosyaya değil, gelen/ klasörüne ayrı bir dosya olarak bırakır; çalışan düğüm alır, doğrular ve yayar.

Tohum bilgisayar: proje sahibinin bilgisayarı. Kurulum: TOHUM_KURULUMU.md (güvenlik duvarı, uyku, port yönlendirme, CGNAT kontrolü).

10. İzleme ekranı KODDA

  • Düğümün içinde salt okunur web sunucusu. Varsayılan http://127.0.0.1:10103 (sadece bu bilgisayar); --web-genel ile dışarıdan da açılır (tohum bilgisayar).
  • Tek sayfa, 5 saniyede bir canlı yenilenir: özet kartları, son bloklar, bekleyen işlemler, bağlı eşler, doğrulama paneli; blok, işlem ve adres ayrıntı sayfaları; yükseklik, hash başı veya orn… adresiyle arama.
  • JSON API: /api/ozet, /api/blok/<n|hash>, /api/islem/<kimlik>, /api/adres/<adres>, /api/bekleyen, /api/esler, /api/baslik/<n>.
  • Bağımsız doğrulama: /api/baslik/<n> ham başlığı ve SHA3-512 girdisini verir. Bloğun hash'inin ilk yarısı, herhangi bir SHA3-512 aracıyla hesaplanıp karşılaştırılabilir (test edildi: Python hashlib ile birebir aynı).
  • Güvenlik: sadece GET; kullanıcı verisi (notlar) her zaman textContent ile yazılır (HTML olarak yorumlanmaz); sıkı Content-Security-Policy; en fazla 64 eş zamanlı bağlantı, 8 KB istek, 15 saniye zaman aşımı.
  • Sınır: alan adı olmadığı için HTTPS yok. İçerik yolda değiştirilebilir; bu yüzden kendi düğümünle karşılaştırmak esastır.
  • İsteyen API'den veriyi alıp kendi diskine, sunucusuna veya sitesine kaydedebilir.

11. Arşiv ödülleri (suistimale kapalı tasarım) KARAR / kısmen AÇIK

İki saldırı türüne karşı tasarlandı:

  1. Sybil: bir kişi 1.000 sahte "cihaz" gösterir.
  2. Spam: biri kendine binlerce işlem gönderip ödülü şişirir.

Kurallar:

  • Teminat: arşivci olmak için en az T coin 5.040 blok (yaklaşık 1 hafta) kilitlenir.

  • Kura: her blokta, önceki blok hash'i kullanılarak, teminatla orantılı 8 arşivci seçilir. Teminatı 10 kimliğe bölmek kazancı artırmaz, çünkü kazanç teminatla doğru orantılıdır. Böylece Sybil işe yaramaz.

  • Erişim kanıtı (soru): seçilen her arşivciye, yine blok hash'inden rastgele seçilmiş geçmiş bir blok ve o bloktaki bir işlem sorulur. İçinde açık anahtar kayıtları da vardır; bu, "açık anahtar deposu"nun madenciliğin parçası olmasıdır. Cevap = işlemin kendisi + Merkle kanıtı. Herkes eski blok başlığına bakarak doğrulayabilir. Veriyi saklamayan cevap veremez.

  • Süre: cevap 10 blok içinde zincire girmelidir. Cevap vermeyen teminatından küçük bir pay (%1) kaybeder. Böylece "kayıt olup veri saklamamak" zarar ettirir.

  • Ödül fonksiyonu:

    Havuz(blok)        = 0,05 × blok sübvansiyonu + 0,20 × bloktaki işlem ücretleri
    Seçilen başına pay = Havuz / 8
    Beklenen kazanç_i  ≈ Havuz × (teminat_i / toplam teminat)
    • İşlem sayısı arttıkça ücretler, dolayısıyla havuz büyür.
    • Arşivci sayısı arttıkça kişi başı pay küçülür, ama toplam havuz büyümez. Bu yüzden sahte arşivci eklemek toplam ödülü artırmaz.
    • Spam kâr getirmez: havuz sadece gerçekten ödenmiş ücretlerden oluşur. Kendine işlem gönderen en iyi ihtimalle başa baş kalır.
  • AÇIK: Kayıtların internette gerçekten "açık erişim" olduğu zincir üzerinden kesin kanıtlanamaz. Bu, dünyada da çözülmemiş bir problem. Arşivci kaydında bir ağ adresi beyan edilir ve düğümler oradan rastgele veri ister. Ama bu bir kural değil, itibar sinyalidir.

12. Yol haritası

FazİşDurum
1ORION hash, √2 üretici, 3x+1, blok başlığı, Merkle, genesisTamam
2Blokları diske kaydetme, ASERT, çok çekirdekli madencilik, zincir doğrulamaTamam
3SLH-DSA (FIPS 205 test vektörleriyle), cüzdan, adres, işlem, UTXOTamam
4Ağ: Wi-Fi keşfi, tohum, adres paylaşımı, senkron, çatallanma, işlem yayma; izleme ekranıTamam
5%51 önlemleri, cüzdan şifreleme (Argon2id + ChaCha20-Poly1305), Windows / Android uygulamasıTamam
5bKöprü: Bitcoin ile HTLC atomik takas (sürüm 2 işlem, ana ağda #150'de etkinleşir)Tamam
5cPaylaşım güvenliği ve sertleştirme (bölüm 17)Tamam
6Eşler arası şifreli bağlantı (ML-KEM), imzalı tohum duyurusu, UPnP/PCP, gerçek Android APK, onaylanmamış para üstünü harcama
7Açık ilan (√2), özel mesaj (ML-KEM), arşiv ödülleri
8Bilim katmanı: ödülün yarısıyla ilaç adayı taraması ve malzeme keşfi (BILIM_KATMANI.md; madencilik formülü bölüm 9, laboratuvar sayfaları araclar/)Taslak

13. %51 saldırısına karşı önlemler KODDA

Dürüst durum: İş kanıtı kullanan hiçbir zincir, hesap gücünün çoğunluğunu ele geçiren birine karşı tamamen korunamaz. Bitcoin de korunamaz. Yapılabilecek olan: saldırıyı çok pahalı hale getirmek, zararını sınırlamak ve kullanıcıyı zamanında uyarmak. Bu önlemler src/zincir.cpp (catal_politikasi) ve src/dugum.cpp içinde.

ÖnlemKuralNeye karşı
Kısa çatal≤ 6 blokluk çatalda normal kural: toplam işi kesin fazla olan zincir kazanırDoğal çatallanmalar bozulmasın
Derin çatal cezası6 < d ≤ 100 blok derinliğinde yeni dal, eski dalın işinin en az d/6 katını içermeliGizlice kazılıp birden yayınlanan zincirler
Kesinlik100 bloktan derin çatallanma hiç otomatik kabul edilmezGeçmişi yeniden yazma (çift harcama)
Zaman damgası kalkanıBlok zamanı en fazla 30 dakika ileride olabilir (Bitcoin'de 2 saat)Zorluğu zamanla oynayarak düşürme
Ödül olgunlaşmasıMadencilik ödülü 100 blok harcanamazSaldırganın kazandığını hemen kaçırması
Madenci dağılımıSon 100 bloğun yarıdan fazlasını tek adres kazdıysa uyarı (kayıt + uygulamada)Merkezileşmeyi görünür kılmak
Saat uyarısıEşin saati 20 dakikadan fazla farklıysa uyarıYanlış saatin kesinlik ve zaman kurallarını bozması

Derin çatal cezasının anlamı: Saldırganın hesap gücü payı q, dürüst madencilerinki 1−q olsun. Aynı sürede saldırgan q, dürüstler 1−q oranında iş üretir. d blokluk geri almak için q/(1−q) ≥ d/6 gerekir:

Geri alınacak blokGereken iş oranıSaldırganın gereken payı
61× (normal kural)> %50
122×≥ %67
305×≥ %83
6010×≥ %91
101+—Otomatik olarak imkânsız

Bedeli (dürüstçe): Bu kurallar her düğümün kendi yerel kuralıdır. 100 bloktan uzun süre ağdan kopuk kalıp farklı bir zincirde ilerlemiş bir düğüm, geri döndüğünde ana zincire kendiliğinden geçmez (uyarı verir; elle veri klasörü yedeklenip zincir sıfırdan indirilerek çözülür). Sıfırdan senkron olan yeni düğümler etkilenmez, çünkü ellerinde geri alınacak blok yoktur. Ayrıca çoğunluğu ele geçiren biri yeni işlemleri sansürleyebilir; bu kurallar sadece geçmişin yeniden yazılmasını zorlaştırır.

Kullanıcıya öneri (uygulamanın Güvenlik sayfasında da yazar): küçük ödemelerde 6, büyük ödemelerde 30, çok büyük ödemelerde 100 onay bekle.

14. Cüzdan şifreleme ve şifre kuralları KODDA

  • Kurallar NIST SP 800-63B-4'e göre (src/sifre_kurali.cpp): tek başına kullanılan şifre en az 15 karakter, en fazla 256 karakter (standart en az 64'e izin verilmesini ister). Boşluk, Türkçe harf, emoji serbest (Unicode NFC'ye normalize edilir). Büyük harf/rakam/sembol zorunluluğu yok ve şifreyi belli aralıklarla değiştirme zorunluluğu yok (standart bunları yasaklar). Bunun yerine: bilinen/sızmış şifreler ve kalıplar listesi (bitcoin, orion, şifre, qwerty, 123123, takım adları…), tekrar eden kalıplar ve ardışık diziler reddedilir. Uygulama yazarken canlı kontrol yapar ve tahmini gücü gösterir.
  • Anahtar türetme: Argon2id (RFC 9106), 64 MiB bellek, 3 geçiş, 4 şerit, 16 bayt rastgele tuz. Bellek gerektirdiği için ekran kartı/özel donanımla tahmin denemeyi çok pahalılaştırır. RFC 9106'nın resmî test vektörü ve argon2-cffi ile 9/9 aynı sonuç.
  • Şifreleme: ChaCha20-Poly1305 (RFC 8439), 12 bayt rastgele nonce. Dosya biçimi, Argon2 ayarları ve tuz "ek doğrulanan veri" (AAD) olarak bağlanır; dosyadaki tek bir bayt değişirse açılmaz. Yanlış şifre ile doğrulama etiketi tutmaz, ana sır hiçbir zaman yanlış çözülmez.
  • Dosya (<veri>/ana/cuzdan.dat; Windows'ta %LOCALAPPDATA%\Bitcoin101, bölüm 17):
    BITCOIN101-CUZDAN 2
    kdf argon2id 65536 3 4 <tuz>
    sir <nonce> <şifreli ana sır + etiket>
    adres <no> <açık anahtar>        (şifre gerekmeden bakiye görülebilsin diye)
  • Şifre ve ana sır işten sonra bellekten silinir (guvenli_sil). Kilit sadece imzalama/yedek anında, tek istek boyunca açılır.
  • Eski (Faz 3–4) şifresiz cüzdanlar çalışmaya devam eder; uygulama sarı bir uyarıyla şifre belirlemeyi önerir (bitcoin101 cuzdan sifrele komutu da var).
  • Kural: şifre unutulursa geri getirilemez. Kurtarmanın tek yolu kağıda yazılmış 64 karakterlik ana sırdır. Kuantum notu: Grover algoritması simetrik anahtarları en fazla yarı güce indirir; 256 bit anahtar 128 bit kuantum güvenliği bırakır. Zayıf noktası şifrenin kendisidir; bu yüzden uzun cümleler önerilir.

15. Uygulama (Windows ve Android) KODDA

Mimari (Bitcoin Core ile aynı fikir: çekirdek + arayüz tek programda):

bitcoin101(.exe)  ── zincir, eşler, madencilik, cüzdan (C++ çekirdek)
   ├─ 127.0.0.1:10104  uygulama arayüzü (SADECE bu cihaz)  ── Edge "uygulama penceresi" / telefon tarayıcısı / yüklü PWA
   ├─ 127.0.0.1:10103  izleme ekranı (salt okunur; --web-genel ile dışarıya)
   └─ 0.0.0.0:10102    eşler (P2P)
  • Windows: bin\bitcoin101.exe dosyasına çift tıklamak (komutsuz çalıştırmak) çekirdeği başlatır ve Microsoft Edge'in adres çubuğu olmayan uygulama penceresini açar (Edge yoksa varsayılan tarayıcı). Program kendi simgesi ve sürüm bilgisiyle derlenir (src\bitcoin101.rc). Edge'de "Bu siteyi uygulama olarak yükle" ile Başlat menüsüne ve görev çubuğuna eklenebilir. Siyah konsol penceresi çekirdeğin kendisidir; kapatılırsa program kapanır.
  • Android: aynı C++ çekirdek Termux içinde derlenir (ANDROID.md). Arayüz telefonun tarayıcısında açılır ve "Ana ekrana ekle / Uygulamayı yükle" ile simgeli uygulama olur. Gerçek bir APK (Play Store tarzı paket) bu fazda yok: Android SDK'sı bu geliştirme ortamından indirilemedi. Faz 6'da Android Studio ile yapılacak.
  • Tasarım: Bitcoin Core'un düzeni (Genel bakış, Gönder, Al, İşlemler + durum çubuğu), Windows 11 Fluent görünümüyle: Segoe UI Variable yazı tipi, Windows 11 renk tonları, sol gezinti çubuğu ve seçili öğede vurgu çizgisi, 8 px yuvarlak kartlar, açık/koyu tema (sisteme uyar), telefonda alt gezinti çubuğu. Sayfalar: Genel bakış, Gönder, Al, İşlemler, Madencilik, Ağ, Zincir (izleme ekranına bağlanır), Güvenlik, Köprüler, Ayarlar.
  • Simge (araclar/simge_uret.py, DejaVu Sans Bold): İspanyol kırmızısı zemin (#E60026, aşağı doğru koyulaşır), beyaz √2 ve kök işaretinin sol çıkıntısının üstünde, kökün derecesinin yazıldığı yerde (³√ gibi) sarı (#F1BF00) bir jeton üzerinde kırmızı ₿: simge "₿√2" diye okunur. Uygulama PNG'leri src/uygulama_simge.hpp, Windows simgesi src/bitcoin101.ico (16–256 px). Tarayıcı önbelleği için simge adresleri sürüm eki taşır (/simge-192.png?s=2).
  • Güvenlik:
    • Arayüz sadece 127.0.0.1'e bağlanır; ağdaki başka bir cihaz açamaz.
    • 24 baytlık rastgele jeton; /c/... istekleri X-Jeton başlığı olmadan reddedilir (sabit zamanlı karşılaştırma). Başka bir web sitesi tarayıcı üzerinden bu başlığı gönderemez (CORS), jetonu da okuyamaz. Faz 5c'den beri jeton sayfaya gömülmez (bölüm 17): bu bilgisayardaki başka bir kullanıcı ya da program sayfayı indirerek onu öğrenemez.
    • Host ve Origin başlıkları denetlenir (DNS yeniden bağlama ve siteler arası istek sahteciliğine karşı).
    • Sıkı Content-Security-Policy, çerçeveye alınma yasağı (frame-ancestors 'none', X-Frame-Options: DENY), nosniff; kullanıcı verisi her zaman textContent ile yazılır.
    • Ana sır sadece cüzdan oluşturulurken ve şifre girilerek "yedek" istenince gösterilir. Gönderme, yedek ve şifre değiştirme her seferinde şifre ister.
    • Köprüler sayfasında mempool.space açıksa yalnızca takasların BTC adresleri ve işlemleri mempool.space'e sorulur (bölüm 16c).
    • Uçtan uca denendi (araclar/uygulama_testi.py, 44/44): yabancı Host/Origin, jetonsuz/yanlış jetonlu istek, zayıf şifre, yanlış şifre, bozuk adres reddediliyor; oluşturma, madencilik, gönderme, şifre değiştirme çalışıyor. Faz 5c ekleri: jeton sayfada yok, CSP nonce'u her yanıtta farklı, 3. yanlış şifreden sonra bekleme (429), gönderim imzalanırken düğüm cevap vermeye devam ediyor.
  • API (yerel, jetonlu): GET /c/durum, /c/guvenlik, /c/ag; POST /c/sifre-kontrol, /c/olustur, /c/geri-yukle, /c/sifrele, /c/sifre-degistir, /c/yedek, /c/alma-adresi, /c/gonder, /c/madencilik, /c/baglan. İzleme ekranının /api/... uçları da aynı adresten okunabilir.
  • Köprü API'si (yerel, jetonlu; bölüm 16): GET /c/takaslar; POST /c/takas/baslat, /teklif-coz, /katil, /kabul, /kilitle, /btc-fon, /btc-talep, /sir, /talep, /iade, /btc-iade, /yayinlandi, /gizle.

16. Bitcoin köprüsü: HTLC atomik takas KODDA

Neden kasa değil: Zincirler arası köprüler kripto tarihinde en çok para kaybedilen yerlerdir (Ronin, Wormhole, Nomad…). Ortak sebep, kilitlenen paraların birkaç anahtarın ya da bir sözleşmenin kontrolündeki bir kasada durmasıdır. Bitcoin 1.01 bunun yerine atomik takas kullanır: kasa yok, aracı yok, sunucu yok. Kod: src/takas.* (akış), src/btc.* (Bitcoin işlemleri), src/secp256k1.* (Bitcoin imzası), src/sha256.*.

Roller: Başlatan (Ali) 1.01 verir, BTC alır; gizli değer s onun cüzdanından gelir. Katılan (Ayşe) BTC verir, 1.01 alır.

Akış (uygulamada Köprüler sayfası):

  1. Ali teklif oluşturur. Teklif kodu (b101-teklif-…, Base58 + ORION sağlama): H = SHA-256(s), Ali'nin BTC açık anahtarı, miktarlar, T1 (1.01 zaman aşımı), T2 (BTC zaman aşımı), ağlar. Kodda gizli bilgi yoktur; herhangi bir yoldan iletilir.
  2. Ayşe kodu yapıştırır; uygulama koşulları gösterir. Kabul edince kabul kodu (b101-kabul-…) çıkar: Ayşe'nin yeni bir 1.01 adresi ve BTC iade anahtarı. Ayşe bunu Ali'ye iletir.
  3. Ali kabul kodunu yapıştırır: 1.01 HTLC'ye kilitlenir ("s'yi gösteren Ayşe alır; T1'den sonra Ali geri alır").
  4. Ayşe'nin düğümü kilidi zincirde kendisi bulur, teklifle karşılaştırır (H, alıcı, miktar, T1) ve yeterli onayı bekler. Ancak ondan sonra BTC adresi gösterilir; Ayşe BTC'yi bu P2WSH adresine herhangi bir Bitcoin cüzdanından gönderir.
  5. Ali'nin çekirdeği fon işlemini çözer, doğru adrese yeterli miktarın gittiğini kontrol eder; en az 1 onaydan sonra BTC talep işlemini imzalar. Bu işlemin tanığında s açığa çıkar.
  6. Ayşe'nin çekirdeği s'yi o işlemden çıkarır (SHA-256 ile doğrular) ve 1.01'i talep eder.
  7. İptal: Ayşe T2'den sonra BTC'sini, Ali T1'den sonra 1.01'ini geri alır.

Süreler ve güvenlik payları (takas.cpp):

Ana ağDeneme ağı
T1 (teklif anından itibaren)24 / 48 / 72 saaten az 4 dakika
T2T1 süresinin yarısıaynı
T1 − T2 ve teklif kabulünde kalan T2 en az6 saat1 dakika
Ayşe'nin BTC göndermeden önce beklediği 1.01 onayı61
Ali BTC'yi en geç alırT2 − 2 saatT2 − sürenin 1/8'i
Ayşe BTC'yi en geç gönderirteklif ile T2'nin ortasıaynı
En az BTC miktarı0,0001 BTCaynı

Ali'nin geç kalmasına izin verilmez: s'yi T2'ye yakın açığa çıkarırsa Ayşe hem BTC'sini iade alıp hem de 1.01'i talep edebilir. Ali onaysız fonla da talep edemez (fon işlemi değiştirilirse s boşa açığa çıkar).

16a. 1.01 tarafı: sürüm 2 işlem (uzlaşı kuralı değişikliği)

  • Biçim src/islem.hpp başında. Girdiye yol (0 normal, 1 talep + 32 baytlık ön görüntü, 2 iade), çıktıya tür (0 adres, 1 HTLC: kilit H, alıcı adresi, iade adresi, zaman aşımı) eklendi. Sürüm 1 işlemler aynen geçerli.
  • Kurallar (src/zincir.hpp): talep için SHA-256(ön görüntü) = H ve imza alıcıya ait; iade için bloğun medyan zamanı (son 11 blok) ≥ zaman aşımı ve imza iade adresine ait; HTLC normal yolla, normal çıktı talep/iade yoluyla harcanamaz; sürüm 1 işlemde HTLC olamaz. Ön görüntü tam 32 bayttır (Bitcoin tarafındaki OP_SIZE 32 ile aynı; bir zincirde geçerli olup diğerinde geçersiz olan bir s ile takas bozulamaz).
  • Sürüm 2'de imzalanan mesaj harcanan HTLC'nin bütün alanlarını kapsar ("imza-mesaji-2" etiketi).
  • Etkinleşme: ana ağda #150 (kural eklendiğinde zincir #111'deydi), deneme ağında #1. Ağdaki herkesin güncellemesi gerekir: eski sürümler sürüm 2 işlem içeren blokları reddeder. Eş protokolü 2'ye çıktı; protokol 1 eşler etkinleşmeye kadar kabul edilir (uyarı verilir), sonra bağlantıları kesilir. Sürüm 2 işlemler eski eşlere yayılmaz.
  • Cüzdan: HTLC'ler harcanabilir bakiyeye girmez; iade adresi bizim olanlar "takasta kilitli" görünür. Geçmişte takas-kilit, takas-talep, takas-iade türleri var. Zincir gezgini HTLC çıktılarını ve açılan s'yi gösterir.
  • s ve BTC anahtarı takas numarasıyla ana sırdan türetilir (cuzdan.hpp); ayrıca yedeklenmeleri gerekmez.

16b. Bitcoin tarafı

  • HTLC tanık betiği (P2WSH, segwit v0):
    OP_IF   OP_SIZE 32 OP_EQUALVERIFY OP_SHA256 <H> OP_EQUALVERIFY <Ali'nin anahtarı>
    OP_ELSE <T2> OP_CHECKLOCKTIMEVERIFY OP_DROP <Ayşe'nin anahtarı>
    OP_ENDIF OP_CHECKSIG

    Talep tanığı <imza> <s> 01 <betik>, iade tanığı <imza> <> <betik>, iade işleminde nLockTime = T2. Bitcoin zaman kilidini son 11 bloğun medyan zamanına göre uygular (BIP 113): iade T2'den yaklaşık 1 saat sonra kabul edilir.

  • Sıfırdan yazıldı: SHA-256 / HMAC-SHA256, secp256k1 ECDSA (RFC 6979 deterministik nonce, düşük S, DER), segwit işlem biçimi, BIP 143 imza özeti, bech32 / bech32m adresleri, Base58Check. Ücret = vbayt × sat/vB, çıktıdan düşülür.
  • Ödeme adresi olarak P2PKH, P2SH, P2WPKH, P2WSH ve P2TR kabul edilir. Henüz tanımlanmamış segwit sürümleri (v2+) reddedilir: bugün onlara giden parayı herkes harcayabilir.
  • secp256k1 gizli skalerle çarpımı Montgomery merdiveniyle yapar ama libsecp256k1 kadar sabit zamanlı değildir. Kuantum notu: Bitcoin tarafı ECDSA'dır; Shor'a dayanıklı değildir. Anahtarlar her takas için yenidir ve birkaç saat kullanılır.

16c. Bitcoin zincirini okuma ve yayın

  • Çekirdek Bitcoin düğümüne bağlanmaz. Uygulama penceresi, mempool.space açıkken (Köprüler sayfasından kapatılabilir, varsayılan açık) HTLC adresini, fon işlemini, harcayan işlemi ve ücret önerisini oradan okur, imzalı işlemleri oraya gönderir. HTTPS'i tarayıcı yapar; C++ tarafında TLS gerekmez. Bu izin CSP'de sadece uygulama sayfasına verilir (connect-src 'self' https://mempool.space); servis çalışanı başka kaynaklara giden isteklere karışmaz.
  • Çekirdek neye güvenmez: her ham işlemi kendisi çözer; fonun doğru betiğe yeterli miktarda gittiğini, s'nin H'yi açtığını kendisi kontrol eder. Neye güvenir: mempool.space'in bildirdiği onay sayısına. mempool.space parayı çalamaz ama sorulan adresleri ve IP'yi görür ve yanlış onay bildirebilir. Büyük tutarlarda onayı kendi Bitcoin düğümünden kontrol et.
  • Kapalıyken her şey elle yapılır: fon işleminin ve karşı tarafın talep işleminin ham hali (ya da s) yapıştırılır, imzalı işlem kopyalanıp istenen araçla yayınlanır.
  • Kayıt: <veri>/<ağ>/takaslar.txt (satır başına bir JSON). İçinde gizli bilgi yoktur.

16d. Doğrulama

  • bitcoin101 test, bölüm 17–18: SHA-256 (FIPS 180-4), HMAC (RFC 4231), ECDSA bilinen test değeri, BIP 173/350 adres vektörleri; HTLC betiği, P2WSH adresi, talep ve iade işlemleri bağımsız Python kütüphanesi embit ile, imzalar python-ecdsa ile bayt bayt aynı (geliştirme sırasında 203 rastgele anahtarla da karşılaştırıldı). 1.01 kuralları (yanlış s, yanlış anahtar, erken iade, etkinleşme öncesi, sürüm 1'de HTLC) ve iki cüzdanla tam takas + iptal senaryosu.
  • araclar/kopru_testi.py: iki Bitcoin 1.01 düğümü + Bitcoin Core 31.1 regtest ile uçtan uca, 41/41. Bitcoin Core talep işlemini kabul etti, BTC alıcıya ulaştı; iade işlemini medyan zaman T2'ye ulaşmadan "non-final" diye reddetti, sonra kabul etti; Ayşe s'yi Core'un madenlediği işlemden çıkarıp 1.01'i aldı; 1.01 iadesi T1'den sonra çalıştı.
  • mempool.space testnet4 API'sinin yanıt biçimi salt okunur sorgularla kontrol edildi; uygulama penceresi başsız Edge'de çalıştırıldı (sayfa, izleyici, CSP).

16e. Dürüst durum ve sınırlar

  • Henüz gerçek BTC ile (ana ağ ya da testnet4) takas yapılmadı; Bitcoin tarafı regtest'te gerçek Bitcoin Core'a karşı denendi. İlk gerçek takası testnet4'te, sonra ana ağda küçük bir miktarla yap.
  • Gerçek takas için karşı tarafın aynı ağda eşitlenmiş bir Bitcoin 1.01 düğümü çalıştırması gerekir (kilidi kendi gözüyle görmesi için). tohumlar.txt'te henüz genel bir tohum yok: aynı yerel ağ, --baglan IP:port ya da tohum kurulumu gerekir.
  • Takas sürerken 1.01 zincirinde blok üretilmeli: onaylar ve medyan zaman bloklarla ilerler. Kimse kazmazsa Ayşe'nin talebi T1'den önce onaylanamaz. Ağın tek madencisi sensen takas boyunca madenciliği açık tut.
  • Teklif ve kabul kodları elle iletilir (Faz 7'deki özel mesajlaşma gelince uygulama içinden gidebilir).
  • Android'deki hazır android/bitcoin101-arm64 eski sürümdür; Termux'ta android/termux_derle.sh ile yeniden derlenmeli.
  • Litecoin aynı betikle eklenebilir (adres öneki ve ağ ayarları); Ethereum ayrı bir sözleşme gerektirir.
  • Deneysel sınır (Faz 5c): gerçek BTC (Bitcoin ana ağı) ile bir takasta en fazla 0,01 BTC (GERCEK_BTC_EN_FAZLA). Sebep: 1.01 tarafındaki onayların güvenliği ağdaki toplam kazma gücü kadardır. Ağ küçükken kötü niyetli bir Ali, Ayşe BTC'yi gönderdikten sonra kendi 1.01 kilidini geri alan daha uzun bir dal kazabilir. Köprüler sayfası ana ağda bunu açıkça yazar. Ağ büyüyünce sınır kaldırılabilir.

17. Faz 5c: paylaşım güvenliği ve sertleştirme KODDA

Programın başka kullanıcılarla paylaşılmasından önce yapılan güvenlik taramasının (2026-10-26) uygulanan sonuçları. Genesis ve zorluk tabanı bilerek değiştirilmedi; lansmanda birlikte karar verilecek (aşağıda "Açık kalanlar").

Veri klasörü ve paylaşım

ÖnlemAyrıntı
Veri kullanıcı profilindeWindows %LOCALAPPDATA%\Bitcoin101\{ana,lab}, Linux/Termux ~/.bitcoin101 (src/sistem.*). Program klasörü paylaşılınca cüzdan gitmez; profil klasörü diğer Windows kullanıcılarına kapalıdır. POSIX'te klasör 0700, cüzdan 0600.
Otomatik taşımaEski veri\ ilk açılışta taşınır. Yeni yerde gerçek veri (zincir, cüzdan, takas) varsa hiçbir şey ezilmez. Eski sürüm açıkken taşıma yarım kalırsa program durur (boş bir klasörle açılıp "cüzdan kayboldu" izlenimi vermesin). Aynı sürücüde taşınan klasör eski yerinin gevşek izinlerini korur; taşımadan sonra izinler sıfırlanır ve profil klasöründen devralınır (izinleri_devral, icacls /reset /T ile aynı). 5c'nin ilk sürümüyle taşınmış klasörler açılışta onarılır.
UTF-8 kod sayfasısrc/bitcoin101.manifest (activeCodePage UTF-8, asInvoker). MinGW'de std::ifstream dar yolları sistem kod sayfası, std::filesystem::path ise UTF-8 olarak yorumluyor; Türkçe karakterli kullanıcı klasörlerinde (C:\Users\Gökçe) ikisinin uyuşması için gerekli. Manifest etkin değilse (Windows 10 1903 öncesi) kısa (8.3) yol kullanılır.
Paylaşım paketipaketle.bat: izin listesiyle zip; cüzdan/zincir/jeton/eş dosyası ya da açık ana sır satırı bulunursa durur; SHA256SUMS.txt; imzali ile SLH-DSA imza.
Dosya imzasıbitcoin101 imzala / imza-dogrula: mesaj = ORION-512("dosya-imzasi", SHA-256(dosya)), bağlam orion-stars-up-my-sleeve/dosya. --adres ile beklenen imzalayan kontrol edilir.
Program dosyası denetimiProgram ya da veri klasörü Everyone / Authenticated Users / Users tarafından yazılabiliyorsa Güvenlik sayfasında uyarı (baskalari_yazabilir). C:\ altındaki klasörler varsayılan olarak böyledir.
Sürüm ve özetUygulamada Ayarlar → Hakkında: sürüm, programın SHA-256 özeti, veri klasörü. bitcoin101 surum. Eşler SELAM'ın isteğe bağlı son alanında sürümlerini bildirir (eski sürümler fazla baytları yok sayar); Ağ sayfasında görünür.

Cüzdan ve yerel arayüz

ÖnlemAyrıntı
Jeton sayfada değilProgram pencereyi .../#jeton=<48 hex> ile açar; sayfa jetonu alır, tarayıcının siteye özel deposuna yazar, adres çubuğundan siler. Jeton <veri>/uygulama.jeton dosyasında kalıcıdır (ikinci çift tıklama ve yüklü PWA için). Yenilemek için: program kapalıyken dosyayı sil.
Yanlış şifre beklemesi3 yanlış denemeden sonra her yeni yanlış deneme bekleme süresini ikiye katlar (5 sn → 5 dk); bekleme sırasında doğru şifre de denenmez (429). Güvenlik sayfasında uyarı.
Cüzdan işçisi/c/... istekleri ayrı bir iş parçacığında işlenir. Argon2id ve SLH-DSA (anahtar üretimi, imza) sürerken zincir kilidi bırakılır (Cuzdan::agir_is_kancasi); bu sırada sadece cüzdanın kendi verisi kullanılır. Ağ ve madenci donmaz. Her istekten sonra ana sır bellekten silinir.
Kontrol toplamlı yedek72 karakter = 64 hex ana sır + ORION-512("ana-sir-kontrol", sır)'ın ilk 4 baytı. Kağıttan bir karakter yanlış yazılırsa geri yükleme reddedilir (eskiden sessizce başka, boş bir cüzdan açılırdı). Eski 64 karakterlik yedekler kabul edilir.
Sır komut satırında değilcuzdan geri-yukle sırrı ekrana yansıtmadan sorar (komut satırı süreç listesinde ve PowerShell geçmiş dosyasında kalır).
Şifresiz kopya bırakılmazŞifresiz cüzdan şifrelenince eski dosya ve şifresiz .yedek kopyası sıfırlarla ezilip silinir (konsol ve uygulama aynı).
NFCŞifre C++ tarafında da NFC'ye getirilir (Latin-1 + Latin Genişletilmiş-A birleşimleri, Türkçe dahil); birleştirilemeyen ayrık aksan işareti yeni şifrede reddedilir. Eski şifreler için kilit açarken önce NFC, olmazsa ham hali denenir.
CSP nonceSatır içi betikler yanıta özel rastgele nonce ile çalışır; script-src 'unsafe-inline' kaldırıldı.
BellekUygulama bağlantıları kapanırken istek (şifre) ve yanıt (ana sır olabilir) tamponları silinir.

Ağ (P2P) ve izleme ekranı

ÖnlemAyrıntı
İhlal sınıflandırmasıislem_dogrula(..., bool* ihlal): bozuk imza, harcanan çıktıya ait olmayan anahtar, biçim hatası, girenden fazla çıkan gibi durumdan bağımsız hatalar ihlaldir; gönderen eş yasaklanır. Çıktı yok / harcanmış, olgunlaşmamış, zaman aşımı dolmamış, kural henüz etkin değil, bilinmeyen sürüm ihlal değildir (eş başka bir dal ya da daha yeni bir sürüm görmüş olabilir).
IP yasağıYasaklanan eşin IP'si bir saat boyunca gelen bağlantı olarak da kabul edilmez (127.0.0.1 hariç). Aynı IP'den en fazla 4 gelen eş.
İşlem hız sınırıBir eşten dakikada en fazla 120 işlem doğrulanır.
İmza önbelleğiGeçerli imzalar tam kimlikle (gövde + imzalar) önbelleğe alınır; havuz ve madenci aynı işlemi tekrar doğrularken SLH-DSA yeniden hesaplanmaz. Güvenli, çünkü harcanan çıktıların içeriği txid ile sabittir.
Bekleyen havuz sınırıEn fazla 32 MB / 5000 işlem; var_mi / harcandi_mi küme ile O(log n).
Artımlı eşitlemeÖnce dalın işini politikaya göre geçen en kısa ön ek birlikte uygulanır (gerekirse reorg), kalan bloklar geldikçe tek tek eklenir. Doğrulanmamış bloklar en fazla 128 MB tamponda bekler (eskiden 500 × 4 MB = 2 GB).
Adres süzmeADRESLER bağlantı başına bir kez kabul edilir; sadece sayısal IP; internetteki bir eşten yerel/özel adresler (127/8, 10/8, 192.168/16, 100.64/10, fc00::/7 ...) alınmaz. UDP keşfi sadece yerel adreslerden. Adres defteri dolunca hiç bağlanılamamış bir kayıt çıkarılır.
Ağ grubu çeşitliliğiEşlerden öğrenilen adreslerle kurulan giden bağlantılar her /16 (IPv6: /32) gruptan en fazla bir eş seçer (eclipse saldırısına karşı). Tohumlar ve elle verilen adresler bu sınıra takılmaz.
Ayrı bağlantı havuzlarıCüzdan arayüzü (16) ve izleme ekranı (64, IP başına 8) ayrı. --web-genel açıkken dışarıdan açılan yavaş bağlantılar cüzdanı kilitleyemez.
Eş IP'leri gizliİzleme ekranının /api/esler cevabında dışarıdan gelen isteklere adresler "gizli" yazar.
DizinlerZincir, adres → çıktılar ve çıktı → harcayan dizinlerini tutar (reorg'da geri alınır). İşlem/blok önek araması, adres sayfası, cüzdan bakiyesi ve geçmişi artık zinciri baştan taramaz.

Madencilik koruması

Ana ağda madencilik, en az bir eş bağlı, eşitleme bitmiş ve hiçbir eş daha fazla iş göstermiyorken çalışır; eşler gidince bekler. Sebep: ağa bağlanmamış yeni bir bilgisayar zorluk düşükken saniyeler içinde 100+ blokluk kendi zincirini kazar ve kesinlik kuralı (bölüm 13) yüzünden ana zincirle bir daha kendiliğinden birleşmez. Ağın ilk / tek düğümü için --tek-basina (uygulamada "Eş olmadan da kaz"); kaz komutu ana ağda bu bayrak olmadan çalışmaz. Deneme ağında sınır yok.

Derleme

-fstack-protector-strong -D_FORTIFY_SOURCE=2; Windows'ta --dynamicbase --nxcompat --high-entropy-va, Termux'ta -fPIE -pie -z relro -z now. bitcoin101 fuzz: işlem, blok, HTTP, JSON, Bitcoin işlemi, adres ve teklif kodu çözümleyicilerine bozulmuş veri; başarıyla çözülen işlem/blok aynen geri yazılmalı. Geliştirmede -D_GLIBCXX_ASSERTIONS (dizi sınırı denetimi) ile 6 milyon girdi: çökme yok, tutarsızlık yok.

Doğrulama: bitcoin101 test bölüm 19–20 (yedek kontrolü, NFC, adres süzme, CSP nonce, şifresiz kopya silme, ihlal sınıflandırması, imza önbelleği, dizin tutarlılığı ve reorg sonrası dizin); araclar/uygulama_testi.py 44/44; ham P2P istemcisiyle sahte imzalı işlem gönderen eşin atıldığı ve iki geçici ana ağ düğümüyle madencilik beklemesi elle denendi.

Açık kalanlar (bilerek)

  • Genesis / zorluk tabanı: ana ağ #249'da zorluk tabanında (2^16) ve takvimin çok gerisinde. Lansmanda yeni genesis, yükseltilmiş taban ve lansman bloğuna çapa birlikte kararlaştırılacak.
  • Şifreli P2P (ML-KEM-1024 + X25519): Faz 6. Bugün eşler arası trafik şifresiz (içerik zaten herkese açık zincir; sorun gizlilik ve araya girme).
  • Kod imzalama (Authenticode): sertifika gerektirir. Şimdilik SHA-256 + SLH-DSA dosya imzası.
  • Ölçek: bütün zincir RAM'de ve her açılışta bütün imzalar baştan doğrulanıyor; disk tabanlı blok deposu ve kontrol noktası (assumevalid benzeri) gerekiyor.
  • Android'deki hazır bitcoin101-arm64 eski sürüm; paylaşım paketine girmez. Termux derlemesi bu ortamda denenemedi (Linux derleyicisi yok); POSIX kod yolları telefonda test ile doğrulanmalı.

Bu sayfa projedeki TASARIM.md dosyasından üretildi.