Chia Coin Disk Plotlama Nasıl Yapılır?

Chia Coin diski nasıl plotlayabileceğinizi bu yazıdan öğrenebileceksiniz.

Öncelikle Chia Coin farm(mining) yapabilmek için diske yani hdd ve sdd’ye ihtiyacınız far

İlk olarak yapmanız gereken Chia sitesinden orjinal programlarını indirmek ve kurmak.

https://www.chia.net/ Bu linke tıklayarak Windows, MacOs veya linux tabanlı programı indirmeniz gerekiyor. (Biz bundan sonra Windows tabanlı program ile anlatımlara devam edeceğiz.)

Programı indirip kurduktan sonra sizden ilk olarak bir cüzdan oluşturmanızı isteyecek. “Create A New Private Key” yazan butona tıklayın.

Daha sonra size aşağıdaki resimdeki gibi bir 24 tane kelime verecek. Bu kelimeleri kesinlikle bir yere kaydetmeniz gerekiyor. Ekran fotoğrafı çekebilir, telefon ile çekebilir veya bir yere yazabilirsiniz.

(Bu kelimeleri kaydetmezseniz bir daha bulamazsınız ve daha sonra cüzdanınıza girebilmek için bu kelimeler gerekiyor.)

Timelords Türleri

İki ana Timelords türü vardır: Normal ve Blueboxlar.

İlki, Proofs of Space alan ve en hızlı tek bir çekirdeği bilinmeyen bir düzende bir sınıf grubunda olabildiğince hızlı kare alma yapmak için kullanan çekirdek Timelord’dur . Çalışan her VDF’nin yanında (uygulamada ve kaynakta vdf_client olarak anılır), zaman hesaplamasının yineleme sayısının doğru şekilde yapıldığına dair kanıtları biriktiren bir dizi kanıt oluşturma iş parçacığı vardır.

İkincisi Bluebox Timelords’dur. Blueboxlar, sıkıştırılmamış zaman kanıtı arayan tarihsel zinciri araştıran çoğu makinedir – özellikle eski sunucular veya oyun makineleri gibi şeyler. Zincirin hızlı hareket etmesi için, normal Timelords zaman ispatı üretmek için daha hızlı bir yöntem kullanır, ancak kanıtlar daha büyüktür ve blok zinciri doğrulamak ve senkronize etmek için çok daha fazla zaman ve çaba senkronize etmeye çalıştığınız Raspberry Pi’nizi alır. Bir Bluebox sıkıştırılmamış bir Zaman Kanıtı alır ve onu yeniden oluşturur, ancak bu sefer sonunda oluşturulan daha yavaş ve daha kompakt provalarla. Bunlar daha sonra herkese dedikodu yapılır, böylece büyük ve yavaş olanı doğrulamak için Zaman Kanıtlarını kompakt ve tam olarak aynı şeyin sürümünü doğrulamak için çok daha hızlı ile değiştirebilirler.

En Hızlı Timelords

Şimdiye kadar görülen bilinen en hızlı üç Timelord var. Testnet blok zincirinde en hızlı bilinen ve görülen, yaklaşık olarak 2020 Eylül’ünde saniyede 360.000 yinelemede (veya ips’de) VDF yinelemeleri ürettiği bir kaç hafta sonra ortadan kayboldu. İki kanal AVX-512 IFMA desteğine sahip ön sürüm Rocket Lake CPU’larla oynayan bir Intel bulut müşterisi olduğunu tahmin ediyoruz . Timelord kaynak kodunun bir IFMA uygulaması vardır, ancak IFMA’nın bir kanalına sahip çok az sayıda CPU bundan çok fazla hız kazanmadığı için varsayılan olarak etkin değildir – çünkü bunlar çoğunlukla güç tasarrufu sağlayan dizüstü bilgisayarlarda bulunur. İkinci “bilinen” hızlı Timelord, akademik bir araştırma projesidir. Onlar ve biz, 1024 bit genişliğindeki sürümümüzü çalıştırmak için değiştirildikten sonra 400k-500k ips aralığında olabileceğini düşünüyoruz. Onlar kullanılan TSMC kendi prototip için 28-nm CMOS teknolojisi. Rocket Lake genel olarak piyasaya çıkana kadar (bu yazı Mart ayının başlarında olacak) en hızlı Timelord, 16 GiB veya RAM ile hız aşırtma yapılmadan çalışan su soğutmalı Intel Core i9-10900K’dır. Er ya da geç overclock yapacağız … Yaklaşık 200k-210k ips tutar.

Bir Timelord Çalıştırmak

Her şeyden önce, ağın hareket etmeye devam etmesi için yalnızca tek bir Timelord çalıştırması gerekir (canlılık.) Timelords’un yarış şekli, 100 metrelik bir çizgi dizisindeymiş gibi. Her biri son iyi Uzay Kanıtı ile yola çıkar ve belirli bir Uzay Kanıtı’nı tamamlamak için gereken toplam yineleme sayısına ulaşmaya çalışır. Daha İyi Uzay Kanıtları kanıtlamak için daha az yineleme gerektirir. En hızlı Timelord, bu Uzayın Kanıtı için Zaman Kanıtı’nı duyurduğunda, diğer tüm Timelordlar yarışmayı durdurur ve her şeyi yeniden başlatmak için sonraki 100 metrelik çizginin başlangıç ​​çizgisine sihirli bir şekilde ışınlanır.

Orada birkaç Timelords olması güzel. Yönlendirme kanatları veya internetin büyük bir kısmını çevrimdışı duruma getiren aşırı hevesli beko gibi şeyler olabilir. En hızlı Timelord, interneti bir inşaat talihsizliği öfkesiyle yanıp söndüğünde şu anki çizgiyi kazanmak üzereyse, o zaman en hızlı ikinci çizgi ve en hızlı dönüşlere kadar sonraki çizgileri kazanacaktır. Zaman Kanıtları ile ilgili en önemli şeylerden biri, aynı Uzay Kanıtı verildiğinde, çıktılarının ve ispatlarının her zaman aynı olmasıdır (ispatlar daha büyük veya daha küçük ve doğrulanması daha zor veya daha kolay olsa da – hepsi aynı sonucu verir. .)

Şirket, tüm Çiftçilerin ve düğümlerin Timelords’un çağırdığı ritmi duymasını sağlamak için dünya çapında birkaç Timelords ve bazı yedeklemeler de çalıştırmayı planlıyor.

Bir Timelord Kurmak

Düzenli Zaman Çizelgeleri

MSVC’nin 128 bitlik sayıları nasıl işlediğine ve Python’un MSVC’ye nasıl dayandığına ilişkin kısıtlamalar nedeniyle , Windows üzerinde her türden Timelords oluşturmak ve çalıştırmak mümkün değildir – henüz. Chia-blockchain’in Windows kurulumuyla uyumlu olacak şekilde Windows’ta vdf_client’i etkinleştirmek için GCC’yi ve bazı araçları kullanma planımız var. Ancak, doğru çalışmasını sağlamak için biraz kıvrımlı. MacOS x86_64 ve tüm Linux dağıtımlarında, bir Timelord oluşturmak, stil bir chia- sh install-timelord.sh blockchain kurulumunun venvinde çalıştırmak kadar kolaydır git clone ./vdf_bench square_asm 400000 Size optimum ve yüklenmemiş IP’leriniz hakkında bir fikir vermek için Timelord’u oluşturduktan sonra deneyin . Her seferinde vdf_bench şaşırtıcı derecede değişken olabilir ve üretimde elde edeceğiniz gerçek ips, prova oluşturma yükünden dolayı genellikle yaklaşık% 20 daha düşük olacaktır. Timelords için varsayılan yapılandırma, onu başlatmanıza izin verecek kadar iyidir. Timelord’unuzun hangi gerçek ips’leri başardığını anlamak için günlük seviyenizi BİLGİ olarak ayarlayın ve ardından “Tahmini IPS:” için grep yapın. MacOS ARM64’ü de desteklemek için Timelord oluşturma sürecini kısaca değiştireceğiz – bu Windows ile karşılaştırıldığında bir cakewalk …

Bluebox Zaman Çizelgeleri

Şimdilik, Bluebox’lar temelde Windows dışında herhangi bir şeyle sınırlıdır. Windows’a taşıma planlarımız, Bluebox’ları orada da kullanılabilir hale getirecek. sh install-timelord.sh Venv’de Timelord’u oluşturduğunuzda, üzerinde iki değişiklik yapmanız gerekecek ~/.chia/VERSION/config.yaml. In timelord:bölümünde ayarlamak isteyeceksiniz sanitizer_mode:için True. Ardından, full_node:bölüme ilerlemeniz ve send_uncompact_interval:0’dan büyük bir şeye ayarlamanız gerekir. Burada 300, Bluebox’unuzun düğümün kucağına daha fazla düşmeden önce pek çok sıkıştırılmamış Zaman Kanıtı’nı kanıtlaması için biraz zamana sahip olması için saniyeler öneririz . Aksi takdirde varsayılan ayarlar işe yarayabilir, ancak hangi makinede olursanız olun toplam efor biraz fazla olursa, makinede process_count:3’ten 2’ye veya hatta 1’e düşürebilirsiniz .timelord_launcher:Bölüm. VDF Client: Sent proof Günlüklerinizde INFO düzeyinde görürseniz, çalıştığını bilirsiniz .

Timelords’un Geleceği

Şirketin amacı, herkesin ucuza satın alabileceği açık kaynaklı bir ASIC Timelord’a sahip olmaktır. Başlangıçta genel amaçlı CPU’lardan FPGA’lara ve ardından ASIC’lere geçeceğimizi umuyorduk. Görünüşe göre 1024 bit genişliğinde bilinmeyen sıra sınıf gruplarında kare alma hem FPGA zor hem de biraz ASIC zor. Intel’in AVX-512 IFMA’sının bu uygulama için neredeyse mükemmel bir şekilde yaratılmış olması da hoş bir sürprizdi. Bu nedenle, orta vadede ASIC çabalarını teşvik edeceğiz. Dünyanın en hızlı Timelords’unu çalıştırmak isteyen herkes için 250 $ ‘a varabilecek açık kaynaklı bir PCI kartı oluşturmak ve geliştirmek için devam eden bir projede para kaybetmekten mutluluk duyuyoruz.

Zaman Çizelgeleri ve Saldırılar

Chia’nın yeni fikir birliğiyle ilgili harika olan şeylerden biri, kötü niyetli olarak daha hızlı bir Timelord’a sahip bir Çiftçinin bencilce Çiftlik yapmasını neredeyse imkansız hale getirmesidir. Yeni fikir birliğinin işleyiş şekli nedeniyle, daha hızlı bir Timelord’a sahip bir Çiftçi, temelde etrafındaki blokları kazanan tüm çiftçiler için zamanı kanıtlamaya mecburdur. Daha hızlı bir “kötü” Timelord’a sahip olmak, ağa% 51 saldırmaya çalışırken bir fayda sağlayabilir, bu nedenle, Timelord hızlarını, mevcut silikon işlemlerinin maksimum hızlarına yaklaştırmak için zamanla zorlamamız yine de önemlidir. Bunu doğru yapmak ve açık kaynak donanım sürümlerini yaygın olarak kullanılabilir hale getirmek için zamana ve kaynaklara sahip olmayı umuyoruz.

Terminoloji

  • VDF: doğrulanabilir gecikme işlevi, “zamanın kanıtı” demenin başka bir yolu
  • Timelord başlatıcısı: gerçek vdf hesaplamalarını gerçekleştirmek için “vdf istemcisi” işlemlerini defalarca başlatan küçük bir program.
  • VDF istemcisi: VDF hesaplaması gerçekleştiren ve ardından kapanan bir c ++ işlemi
  • Timelord: Timelord, düğüm ile iletişim kurar ve hangi VDF görevlerinin hangi istemcilere atanacağına karar verir. Vdf istemcileri HTTP aracılığıyla zaman çizelgesine bağlanır. Böylece zaman lordunu ayrı bir makinede timelord başlatıcısı olarak kullanabilirsiniz.

Chialisp Belgeleri

Chialisp, akıllı sözleşme yetenekleriyle fonları zorlamak ve serbest bırakmak için güçlü ve güvenli bir LISP benzeri dildir. Bu web sitesi, Chialisp, CLVM ve koşul dili hakkında bilgi edinmek için birleştirilmiş bir yerdir.

İşte bir örnek:

(mod (password new_puzhash amount)
  (defconstant CREATE_COIN 51)

  (if (= (sha256 password) (q . 0x2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824))
    (list (list CREATE_COIN new_puzhash amount))
    (x)
  )
)

Download Chialisp 0.4 in tar.gz format

1-CLVM Temelleri

CLVM, Chia ağı tarafından kullanılan ChiaLisp’in derlenmiş, minimal sürümüdür. Operatörlerin tamamı burada belgelenmiştir

Bu kılavuz, dilin temellerini kapsayacak ve programların yapısına bir giriş görevi görecektir. Clvm_tools’un bir sürümünü çalıştırarak takip edebilmelisiniz .

Cons Boxes(Eksi Kutuları)

ChiaLisp, Cons Boxes ve atomlardan oluşturulmuştur . Cons kutusu, bir çift ChiaLisp nesnesi olarak tanımlanır. Cons Box öğeler bir atom veya başka bir cons Box olabilir.

Cons kutuları, bir ile ayrılan iki öğe ile bir parantez olarak temsil edilir .

 Örneğin:

(200 . "hello")

("hello" . ("world" . "!!!"))

Yasal cons kutularıdır, ancak aşağıdakiler değildir.

(200 . 300 . 400)

Listeler

Listeler parantez içine alınır ve listedeki her giriş, değerler arasında nokta olmaksızın tek aralıklıdır. Listeler, çok yönlü olduklarından eksiler kutularından çok daha yaygın olarak kullanılmaktadır.

(200 300 "hello" "world")

Ayrıca listeleri iç içe yerleştirebilirsiniz.

("hello" ("nested" "list") ("world"))

Bir listenin, boş bir atomda sonlandırılan ardışık kutuların bir temsilidir (). Aşağıdaki ifadeler eşittir:

(200 . (300 . (400 . ())))

(200 300 400)

Atomlar

Atomlar ya gerçek ikili bloblar ya da değişkenlerdir. Bir program aslında sadece lehçe notasyonlu bir listedir .

ChiaLisp’te atom türlerinin ayırt edilmesi yoktur. Bu, bu (100 0x65 0x68656c6c6f)ve (0x64 101 'hello')eşdeğer listeler anlamına gelir . Ancak dahili olarak, bloblar operatöre bağlı olarak birkaç farklı şekilde yorumlanabilir. Bunu daha sonra daha ayrıntılı olarak ele alacağız.

Matematik

ChiaLisp’te kayan nokta numaraları için destek yoktur, sadece tamsayılar. Dahili olarak tamsayılar, 256 bitlik işaretli tamsayılar olarak yorumlanır.

Matematik operatörleri *+ve -.

$ brun '(- (q . 6) (q . 5))' '()'
1

$ brun '(* (q . 2) (q . 4) (q . 5))' '()'
40

$ brun '(+ (q . 10) (q . 20) (q . 30) (q . 40))' '()'
100

Yukarıdaki çarpma örneğinin listede ikiden fazla parametre aldığını fark etmiş olabilirsiniz. Bunun nedeni, birçok operatörün değişken sayıda parametre alabilmesidir. + ve * değişmeli olduğundan parametrelerin sırası önemli değildir. Değişmeli olmayan işlemler için, (- (q 100) (q 30) (q 20) (q 5))ile eşdeğerdir (- (q 100) (+ (q 30) (q 20) (q 5))). Benzer şekilde (/ 120 5 4 2)eşdeğerdir (/ 120 (* 5 4 2)).

Negatif değerler için de destek var.

$ brun '(- (q . 5) (q . 7))' '()'
-2


$ brun '(+ (q . 3) (q . -8))' '()'
-5

Onaltılık sayıları kullanmak için önek olarak bunların önüne 0x koymanız yeterlidir 

$ brun '(+ (q . 0x000a) (q . 0x000b))' '()'
21

Son matematiksel işleç, diğer dillerde == ile benzer şekilde hareket eden eşittir.

$ brun '(= (q . 5) (q . 6))' '()'
()

$ brun '(= (q . 5) (q . 5))' '()'
1

Yukarıda görebileceğiniz gibi, bu dil bazı verileri boole değerleri olarak yorumlar.

Boole’lar

Bu dilde boş bir liste olarak () değerlendirilir FalseTrue Dahili True olarak ile temsil edilmesine rağmen başka herhangi bir değer 1 değerlendirilir .

$ brun '(= (q . 100) (q . 90))'
()

$ brun '(= (q . 100) (q . 100))'
1

Bu kuralın istisnası 0 çünkü 0 tam olarak aynıdır ().

$ brun '(= (q . 0) ())' '()'
1

$ brun '(+ (q 70) ())' '()'
70

Akış kontrolü

i Operatör halini alır (i A B C)ve bir if ifadesinin gibi davranan Buna değerlendirir B eğer A Doğru ve C aksi.

$ brun '(i (q . 0) (q . 70) (q . 80))' '()'
80

$ brun '(i (q . 1) (q . 70) (q . 80))' '()'
70

$ brun '(i (q . 12) (q . 70) (q . 80))' '()'
70

$ brun '(i (q . ()) (q . 70) (q . 80))' '()'
80

Her iki unutmayın B ve C sadece tüm subexpressions gibi, hevesle değerlendirilir. Değerlendirmeyi koşul sonrasına ertelemek için B ve C alıntı yapılmalı (ile q) ve ardından ile değerlendirilmelidir (a).

$ brun '(a (i (q . 0) (q . (x (q . 1337) )) (q . 1)) ())'

Şimdi, listeler ve programlar hakkında daha fazla açıklama yapmak için iyi bir zaman gibi görünüyor.

Listeler ve Programlar

Liste, parantez içindeki bir veya daha fazla öğenin boşlukla ayrılmış, sıralı herhangi bir grubudur. Örneğin: (70 80 90 100)(0xf00dbabe 48 "hello")ve (90) tüm geçerli listeleri vardır.

Listeler, gibi başka listeler bile içerebilir ("list" "list" ("sublist" "sublist" ("sub-sublist")) "list").

Programlar, CLVM kullanılarak değerlendirilebilen listelerin bir alt kümesidir.

Bir listenin geçerli bir program olması için:

  • 1. Listedeki ilk öğe geçerli bir operatör olmalıdır
  • 2. İlkinden sonraki her öğe geçerli bir program olmalıdır

Bu nedenle, değişmez değerler ve program dışı listeler kullanılarak alıntı yapılmalıdır q .

Programlar, program dışı listeler içerebilir, ancak bunlar aynı zamanda alıntılanmalıdır, örneğin:

$ brun '(q . (80 90 100))' '()'
(80 90 100)

Ve artık programların içinde programlara sahip olabileceğimizi bildiğimize göre, aşağıdaki gibi programlar oluşturabiliriz:

$ brun '(i (= (q . 50) (q . 50)) (+ (q . 40) (q . 30)) (q . 20))' '()'
70

ChiaLisp’teki programlar bu şekilde inşa edilme eğilimindedir. Daha küçük programlar, daha büyük bir program oluşturmak için bir araya getirilir. Programlarınızı, eşleşen parantezlerle bir düzenleyicide oluşturmanız önerilir!

Operatörleri Listeleme

f geçilen listedeki ilk öğeyi döndürür.

$ brun '(f (q . (80 90 100)))' '()'
80

r bir listedeki ilk öğe dışındaki her öğeyi döndürür.

$ brun '(r (q . (80 90 100)))' '()'
(90 100)

c bir öğeyi listenin başına ekler

$ brun '(c (q . 70) (q . (80 90 100)))' '()'
(70 80 90 100)

Ve bir listeden istediğimiz herhangi bir öğeye erişmek veya bunları değiştirmek için bunların kombinasyonlarını kullanabiliriz:

$ brun '(c (q . 100) (r (q . (60 110 120))))' '()'
(100 110 120)

$ brun '(f (r (r (q . (100 110 120 130 140)))))' '()'
120

Çözümler ve Ortam Değişkenleri

Şimdiye kadar programlarımızda herhangi bir girdi veya değişken yoktu, ancak ChiaLisp, bir çözümden geçirilen bir tür değişkeni destekliyor.

ChiaLisp bağlamının bir bulmaca programı ile madeni paraları kilitlemede kullanım için olduğunu hatırlamak önemlidir. Bu, bulmacaya bazı bilgileri aktarabilmemiz gerektiği anlamına gelir.

Çözüm, bulmacaya aktarılan değerlerin bir listesidir. Çözüm ile referans alınabilir 1.

$ brun '1' '("this" "is the" "solution")'
("this" "is the" "solution")

$ brun '(f 1)' '(80 90 100 110)'
80

$ brun '(r 1)' '(80 90 100 110)'
(90 100 110)

Ve listelerin de iç içe yerleştirilebileceğini unutmayın.

$ brun '(f (f (r 1)))' '((70 80) (90 100) (110 120))'
90

$ run '(f (f (r 1)))' '((70 80) ((91 92 93 94 95) 100) (110 120))'
(91 92 93 94 95)

Bu ortam değişkenleri, diğer tüm operatörlerle kombinasyon halinde kullanılabilir.

$ run '(+ (f 1) (q 5))' '(10)'
15

$ run '(* (f 1) (f 1))' '(10)'
100

Bu program, ikinci değişkenin birinci değişkenin karesine eşit olup olmadığını kontrol eder.

$ run '(= (f (r 1)) (* (f 1) (f 1)))' '(5 25)'
1

$ run '(= (f (r 1)) (* (f 1) (f 1)))' '(5 30)'
()

Tam Sayılarla Çevresel Değişkenlere Erişim

Yukarıdaki örneklerde run, daha brun düşük seviyeli dil yerine daha yüksek seviyeli dili kullanıyorduk . Bunun nedeni, alt düzey CLVM dilinde minimalizm uğruna, çözüme değerlendirilmiş tamsayılarla hitap etmemizdir.

Çağırma 1, ağacın köküne erişir ve tüm çözüm listesini döndürür.

$ brun '1' '("example" "data" "for" "test")'
("example" "data" "for" "test")

Bundan sonra, bir ikili ağacı tahmin edebilirsiniz f ve r her bir düğüm numaralandırılır.

$ brun '2' '("example" "data" "for" "test")'
"example"

$ brun '3' '("example" "data" "for" "test")'
("data" "for" "test")

Ve bu, listelerin içinde de listeler olduğunda çalışmak üzere tasarlanmıştır.

$ brun '4' '(("deeper" "example") "data" "for" "test")'
"deeper"

$ brun '5' '(("deeper" "example") "data" "for" "test")'
"data"

$ brun '6' '(("deeper" "example") "data" "for" "test")'
("example")

2 – Madeni Paralar, Harcamalar ve Cüzdanlar

Kılavuzun bu bölümü, bir program içindeki bir programı değerlendirmeyi, ChiaLisp’in Chia ağındaki işlemler ve madeni paralarla nasıl ilişkili olduğunu ve ChiaLisp kullanarak akıllı işlemler oluşturmak için bazı teknikleri kapsayacaktır.

Madeni paralar

Bir madeni para kimliği 3 parça bilgiden oluşturulmuştur.

  1. Ebeveyninin kimliği
  2. Bulmacasının karması (AKA bulmaca karması)
  3. Değeri olan miktar

Bir madeni para kimliği oluşturmak için sırayla birleştirilmiş bu 3 bilginin karmasını almanız yeterlidir.

coinID == sha256(parent_ID + puzzlehash + amount)

Bu, bir madeni paranın bulmacasının ve miktarının onun içsel parçaları olduğu anlamına gelir. Bir jeton bulmacasını veya miktarını değiştiremezsiniz, sadece jeton harcayabilirsiniz.

Bir madalyonun gövdesi de bu 3 bilgi parçasından oluşur, ancak hash edilmek yerine tam olarak saklanır. Bir madeni parayı tanımlayan gerçek kod şu şekildedir:

class Coin:
    parent_coin_info: "CoinName"
    puzzle_hash: ProgramHash
    amount: uint64

Harcama

Bir bozuk para harcadığınızda onu yok edersiniz. Bir bulmacanın davranışı harcanırken madeni paranın değeri ile ne yapılacağını belirlemediği sürece, madeni paranın değeri de harcamada yok olur.

Bir jeton harcamak için 3 parça bilgiye (ve isteğe bağlı bir 4’üne) ihtiyacınız var.

  1. Madeni paranın kimliği
  2. Madeni paranın bulmacasının tam kaynağı
  3. Madeni paranın bulmacasına bir çözüm
  4. (İSTEĞE BAĞLI) Toplu imza adı verilen, birlikte gruplanmış bir imza koleksiyonu

Bulmacanın ve çözümün 1. bölümde anlattığımızla aynı olduğunu unutmayın, ancak bulmacanın madalyonun içinde zaten saklanmış olması ve herhangi birinin bir çözüm sunabilmesi dışında.

Ağ / defter-sim’in madeni para sahipliği kavramı yoktur, herkes ağda herhangi bir jeton harcamayı deneyebilir. Madeni paraların çalınmasını veya istenmeyen şekillerde harcanmasını önlemek bulmacalara kalmıştır.

Bir madeni para için çözüm sunabilecek biri varsa, bir madeni paraya nasıl “sahip” olunabileceğini merak ediyorsunuzdur. Kılavuzun bir sonraki bölümünün sonunda, umarım netleşir.

Pratikte Bulmacalar ve Çözümler

Şimdiye kadar 1. bölümde , bazı sonuçları değerlendirecek ChiaLisp programlarını ele aldık. İlk bölümün madeni parayı kilitlemeye adanmış bir bulmacayı temsil ettiğini ve ikinci bölümün herkesin sunabileceği bir çözüm olduğunu unutmayın:

$ brun '(+ 2 5)' '(40 50)'
90

$ brun '(c (q 800) 1)' '("some data" 0xdeadbeef)'
(800 "some data" 0xdeadbeef)

Bunlar birbirinden ayrı eğlenceli alıştırmalardır, ancak bu format, bir madeni paranın harcandığında nasıl davranması gerektiğine dair blok zinciri ağına talimatlar iletmek için kullanılabilir. Bu, bir değerlendirmenin sonucunun bir İşlem Kodları listesi olmasıyla yapılabilir .

İşlem Kodları

İşlem Kodları iki kategoriye ayrılmıştır: “bu harcama yalnızca X ise geçerlidir” ve “bu harcama geçerliyse X ise” .

Biçimleri ve davranışları ile birlikte OpCode‘ların tam listesi.

  • AGG_SIG_UNSAFE – [49] – (49 0xpubkey 0xmessage) : Bu harcama, yalnızca ekli toplu imza verilen mesajın verilen genel anahtarından bir imza içeriyorsa geçerlidir. Bu güvensiz olarak etiketlenir, çünkü bir mesajı bir kez imzalarsanız, bu imzayı gerektiren diğer paralarınız da potansiyel olarak kilidi açılabilir. Madeni para kimliğinin getirdiği doğal entropi nedeniyle AGG_SIG_ME’yi kullanmak muhtemelen daha iyidir.
  • AGG_SIG_ME – [50] – (50 0xpubkey 0xmessage) : Bu harcama, yalnızca ekli toplu imza, madeni para kimliğiyle birleştirilmiş bu mesajın belirtilen genel anahtarından bir imza içeriyorsa geçerlidir.
  • CREATE_COIN – [51] – (51 0xpuzzlehash amount) : Bu harcama geçerliyse, verilen bulmaca karması ve miktarla yeni bir jeton oluşturun.
  • ASSERT_FEE – [52] – (52 amount) : Bu harcama, yalnızca bu işlemde açıkça ücret olarak kullanılacak tutara eşit kullanılmamış değer varsa geçerlidir .
  • CREATE_COIN_ANNOUNCEMENT – [60] – (60 message) : Bu harcama geçerliyse, bu, onu oluşturan paraya bağlı bir ID ile geçici bir duyuru oluşturur. Diğer kripto paralar daha sonra bir blok içinde madeni paralar arası iletişim için bir duyuru bulunduğunu iddia edebilir.
  • ASSERT_COIN_ANNOUNCEMENT – [61] – (61 0xannouncementID) : Bu harcama, yalnızca bu blokta duyuru kimliği ile eşleşen bir duyuru varsa geçerlidir. Duyuru kimliği, duyurulan madalyonun madeni para kimliği ile birleştirilmiş olarak duyurulan mesajın karmasıdır announcementID == sha256(coinID + message).
  • CREATE_PUZZLE_ANNOUNCEMENT – [62] – (62 message) : Bu harcama geçerliyse, onu oluşturan bulmacaya bağlı bir ID ile geçici bir duyuru oluşturur. Diğer kripto paralar daha sonra bir blok içinde madeni paralar arası iletişim için bir duyuru bulunduğunu iddia edebilir.
  • ASSERT_PUZZLE_ANNOUNCEMENT – [63] – (63 0xannouncementID) : Bu harcama, yalnızca bu blokta duyuru kimliği ile eşleşen bir duyuru varsa geçerlidir. Duyuru kimliği, onu duyuran madalyonun bulmaca karması ile birleştirilmiş olarak duyurulan mesajdır announcementID == sha256(puzzle_hash + message).
  • ASSERT_MY_COIN_ID – [70] – (70 0xcoinID) : Bu harcama, yalnızca sunulan jeton kimliği, bu bulmacayı içeren madalyonun kimliği ile tamamen aynı ise geçerlidir.
  • ASSERT_MY_PARENT_ID – [71] – (71 0xparentID) : Bu harcama, yalnızca sunulan ana jeton bilgisi, bu bulmacayı içeren madalyonun ana jeton bilgisi ile tamamen aynı ise geçerlidir.
  • ASSERT_MY_PUZZLE_HASH – [72] – (72 0xpuzzlehash) : Bu harcama, yalnızca sunulan bulmaca karması, bu bulmacayı içeren madalyonun karma bulmaca karması ile tamamen aynıysa geçerlidir.
  • ASSERT_MY_AMOUNT – [73] – (73 0xamount) : Bu harcama, yalnızca sunulan miktar bu bulmacayı içeren jeton miktarı ile tamamen aynı ise geçerlidir.
  • ASSERT_SECONDS_RELATIVE – [80] – (80 seconds) : Bu harcama, yalnızca bu jetonun oluşturulmasından bu yana verilen süre geçmişse geçerlidir.
  • ASSERT_SECONDS_ABSOLUTE – [81] – (81 time) : Bu harcama yalnızca bu bloktaki zaman damgası belirtilen zaman damgasından büyükse geçerlidir.
  • ASSERT_HEIGHT_RELATIVE – [82] – (82 block_age) : Bu harcama, yalnızca bu jeton yaratıldıktan sonra belirtilen sayıda blok geçmişse geçerlidir.
  • ASSERT_HEIGHT_ABSOLUTE – [83] – (83 block_height) : Bu harcama yalnızca verilen block_height’a ulaşıldığında geçerlidir.

Koşullar, aşağıdaki formdaki liste listesi olarak döndürülür:

((51 0xabcd1234 200) (50 0x1234abcd) (53 0xdeadbeef))

Unutmayın: Bu, bir bulmacanın bir çözümle birlikte sunulduğunda değerlendirmesi gereken şeydir, böylece tam düğüm / defter-sim onu ​​anlayabilir.

Bunun pratikte nasıl kullanıldığını göstermek için birkaç örnek bulmaca ve çözüm oluşturalım.

Örnek 1: Parola Kilitli Para

Parolayı bildiği sürece herkes tarafından harcanabilecek bir jeton oluşturalım.

Bunu uygulamak için, bulmacaya işlenmiş şifrenin karma değerine sahip oluruz ve doğru şifre ile sunulursa, bulmaca, çözümde verilen bir bulmaca karmasıyla yeni bir madeni para oluşturma talimatlarını döndürecektir. Aşağıdaki örnek için parola, karma değeri 0x2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 olan “merhaba” dir. Yukarıdaki madalyonun uygulaması şu şekilde olacaktır:

(i (= (sha256 2) (q 0x2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824)) (c (q . 51) (c 5 (c (q . 100) ()))) (q "wrong password"))

Bu program (sha256 ), çözümdeki ilk öğenin hash 2 değerini ile birlikte alır ve bu değeri önceden kaydedilmiş olanla karşılaştırır. Parola doğruysa, (c (q . 51) (c 5 (c (q . 100) (q ())))hangi olarak değerlendirilir (51 0xmynewpuzzlehash 100). Unutmayın, 51 çözümde sunulan bulmaca karmasını kullanarak yeni bir madeni para oluşturmak için İşlem Kodu ve 5 eşdeğeridir (f (r 1)).

Şifre yanlışsa, “yanlış şifre” dizesini döndürecektir.

Bunun çözümü için formatın olarak biçimlendirilmesi bekleniyor (password newpuzzlehash). Unutmayın, madeni paranın kimliğini ve bulmaca kodunu bildikleri sürece herkes bu parayı harcamaya çalışabilir.

Clvm_tools kullanarak test edelim.

$ brun '(i (= (sha256 2) (q 0x2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824)) (c (c (q 51) (c 5 (c (q 100) (q ())))) (q ())) (q "wrong password"))' '("let_me_in" 0xdeadbeef)'
"wrong password"

$ brun '(i (= (sha256 2) (q 0x2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824)) (c (q 51) (c 5 (c (q 100) (q ())))) (q "wrong password"))' '("incorrect" 0xdeadbeef)'
"wrong password"

$ brun '(i (= (sha256 2) (q 0x2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824)) (c (q 51) (c 5 (c (q 100) (q ())))) (q "wrong password"))' '("hello" 0xdeadbeef)'
((51 0xdeadbeef 100))

Bu tam bir akıllı işlem olmadan önce yapmamız gereken son bir değişiklik var.

Bir harcamayı geçersiz kılmak istiyorsanız, kullanarak bir istisna oluşturmalısınız x. Aksi takdirde, herhangi bir İşlem Kodunu iade etmeyen geçerli bir harcamanız vardır ve bu, madeni paramızı yok eder ve yeni bir tane oluşturmaz! Bu nedenle, başarısızlık koşulunu değiştirmemiz gerekiyor, (x (q . "wrong password"))bu da işlemin başarısız olduğu ve madeni paranın harcanmadığı anlamına gelir.

Eğer bunu yapıyorsak, o zaman (i A B C)kalıbı da olarak değiştirmeliyiz (a (i A (q . B) (q . C)) 1). Bunun nedeni 3. bölümde açıklanmıştır . Şimdilik neden diye endişelenmeyin.

İşte tamamlanmış parola korumalı jetonumuz:

(a (i (= (sha256 2) (q . 0x2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824)) (q . (c (c (q . 51) (c 5 (c (q . 100) ()))) ())) (q . (x (q . "wrong password")))) 1)

Clvm_tools kullanarak test edelim:

$ brun '(a (i (= (sha256 2) (q . 0x2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824)) (q . (c (c (q . 51) (c 5 (c (q . 100) ()))) ())) (q . (x (q . "wrong password")))) 1)' '("let_me_in" 0xdeadbeef)'
FAIL: clvm raise ("wrong password")

$ brun '(a (i (= (sha256 2) (q . 0x2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824)) (q . (c (c (q . 51) (c 5 (c (q . 100) ()))) ())) (q . (x (q . "wrong password")))) 1)' '("hello" 0xdeadbeef)'
((51 0xdeadbeef 100))

Bulmacadan ve Çözümden İşlem Kodları Oluşturma

Gönderen ve harcayan arasındaki güç dengesini düşünmek için bir dakikanızı ayıralım. Bunu ifade etmenin başka bir yolu da “çözümün çıktı üzerinde ne kadar kontrole sahip olması gerekir?”

Aşağıdaki bulmacayı kullanarak bir bozuk parayı kilitlediğimizi varsayalım:

(q . ((51 0x365bdd80582fcc2e4868076ab9f24b482a1f83f6d88fd795c362c43544380e7a 100)))

Hangi çözümün geçildiğine bakılmaksızın, bu bulmaca her zaman 0x365bdd80582fcc2e4868076ab9f24b482a1f83f6d88fd795c362c43544380e7a ve miktar 100 ile yeni bir para oluşturma talimatlarını döndürecektir.

$ brun '(q . ((51 0x365bdd80582fcc2e4868076ab9f24b482a1f83f6d88fd795c362c43544380e7a 100)))' '(80 90 "hello")'
((51 0x365bdd80582fcc2e4868076ab9f24b482a1f83f6d88fd795c362c43544380e7a 100))

$ brun '(q . ((51 0x365bdd80582fcc2e4868076ab9f24b482a1f83f6d88fd795c362c43544380e7a 100)))' '("it doesn't matter what we put here")'
((51 0x365bdd80582fcc2e4868076ab9f24b482a1f83f6d88fd795c362c43544380e7a 100))

Bu örnekte madeni parayı harcamanın sonucu tamamen bulmacadan belirlenir. Madeni paranın harcamasını herkes başlatabilse bile, madeni parayı kilitleyen kişi, çözümün hiçbir önemi olmadığı için madeni paranın harcanma şeklindeki tüm güce sahiptir.

Tersine, aşağıdaki bulmacayla kilitlenmiş bir bozuk parayı ele alalım:

1

Bu örnek biraz tuhaf görünebilir, çünkü çoğu ChiaLisp programı listedir ve bu sadece bir atomdur, ancak yine de geçerli bir programdır. Bu bulmaca basitçe tüm çözümü blok zincirine döndürür. Bunu güç ve kontrol açısından düşünebilirsiniz. Madeni parayı kilitleyen kişi, tüm gücü çözümü sağlayan kişiye vermiştir.

$ brun '1' '((51 0xf00dbabe 50) (51 0xfadeddab 50))'
((51 0xf00dbabe 50) (51 0xfadeddab 50))

$ brun '1' '((51 0xf00dbabe 75) (51 0xfadeddab 15) (51 0x1234abcd 10))'
((51 0xf00dbabe 75) (51 0xfadeddab 15) (51 0x1234abcd 10))

Bu durumda, herkes sadece parayı harcamakla kalmaz, istediği gibi harcayabilir! Bu güç dengesi, ChiaLisp’te bulmacaların nasıl tasarlandığını belirler.

Örneğin, harcayanın çıktıyı seçmesine izin veren, ancak tek bir şartla bir bulmaca oluşturalım.

  (c (q . (51 0xcafef00d 200)) 1)

Bu, harcayanın çözüm yoluyla istediği tüm koşulları ve İşlem Kodlarını iade etmesine izin verir, ancak her zaman bulmaca karması 0xcafef00d ve 200 değeriyle bir para oluşturma koşulu ekler.

$ brun '(c (q . (51 0xcafef00d 200)) 1)' '((51 0xf00dbabe 75) (51 0xfadeddab 15) (51 0x1234abcd 10))'
((51 0xcafef00d 200) (51 0xf00dbabe 75) (51 0xfadeddab 15) (51 0x1234abcd 10))

Bu bölüm, İşlem Kodlarının hem alıcının çözümünden hem de gönderenin bilmecesinden gelebileceği noktayı ve bunun güveni ve güç dengesini nasıl temsil ettiğini göstermeyi amaçlamaktadır.

Bir sonraki alıştırmada, bildiğimiz her şeyi bir araya getireceğiz ve Chia’da cüzdanların birbirine nasıl para gönderebildiğinin temelini oluşturan “standart” işlemi oluşturacağız.

Örnek: İmza Kilitli Para

‘Birine para göndermek’ için, sadece alıcıların imzasını gerektiren, ancak daha sonra beğendikleri diğer İşlem Kodlarını iade etmelerine izin veren bir bulmaca oluşturursunuz. Bu, madeni paranın başka biri tarafından harcanamayacağı, ancak çıktıların tamamen alıcı tarafından kararlaştırıldığı anlamına gelir.

AGGSIG’nin 50 ve alıcının pubkeyinin olduğu aşağıdaki akıllı işlemi oluşturabiliriz 0xfadedcab.

(c (c (q . 50) (c (q . 0xfadedcab) (c (sha256 2) (q . ())))) 3)

Bu bulmaca, sonuçta ortaya çıkan değerlendirmeyi içermeye zorlar, (50 0xpubkey *hash_of_first_solution_arg*)ancak daha sonra çözümde sunulan tüm koşulları ekler.

Bunu clvm_tools’da test edelim – bu örnek için alıcının pubkey’i 0xdeadbeef olarak gösterilecektir. Alıcı, bozuk parayı 0xfadeddab bulmacasıyla kilitlenmiş yeni bir para yaratmak için harcamak istiyor.

$ brun '(c (c (q . 50) (c (q . 0xfadedcab) (c (sha256 2) (q . ())))) 3)' '("hello" (51 0xcafef00d 200))'
((50 0xfadedcab 0x2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824) (51 0xcafef00d 200))

Geri çekelim ve buraya biraz bağlam ekleyelim.

Cüzdanlar

Cüzdan, bir kullanıcının madeni paralarla etkileşimini kolaylaştıran çeşitli özelliklere sahip bir yazılımdır.

  • Bir cüzdan, genel ve özel anahtarların kaydını tutar
  • Bir cüzdan, bulmacalar ve çözümler üretebilir
  • Bir cüzdan, anahtarlarıyla bir şeyler imzalayabilir
  • Bir cüzdan, kullanıcının sahip olduğu paraları tanımlayabilir ve hatırlayabilir
  • Bir cüzdan para harcayabilir

Herhangi bir kişi bir jeton harcamayı deneyebilirse, bir cüzdanın kullanıcının sahip olduğu jetonları nasıl belirleyebildiğini merak ediyor olabilirsiniz. Bunun nedeni, tüm cüzdanların birisine para göndermek için standart biçimin ne olduğunu zaten bilip kabul etmesidir. Kendi pubkeylerinin ne olduğunu bilirler, bu yüzden yeni bir jeton yaratıldığında bir cüzdan, o madeni paranın içindeki bulmacanın pubkeylerinden birine ‘standart gönderme bulmacası’ olup olmadığını kontrol edebilir. Eğer öyleyse, o madeni paranın o ‘cüzdan’a ait olduğu düşünülebilir, çünkü başka kimse onu harcayamaz.

Madeni paraya ‘sahip’ olan cüzdan daha sonra bu parayı başka birine tekrar göndermek isterse, yeni alıcının pubkey’iyle ‘standart bir gönderme bulmacası’ oluştururdu. Daha sonra sahip oldukları parayı harcayabilir, yok edebilir ve süreçte yeni alıcılar pubkey ile kilitlenen yeni bir para yaratabilirler. Yeni alıcı daha sonra madeni paraya ‘sahip olduğunu’ belirleyebilir ve daha sonra istediği gibi gönderebilir.

Değişiklik Yapma

Değişiklik yapmak basittir. Bir cüzdan, bir madeni paranın toplam değerinden daha az harcıyorsa, kalan değer kısmı ile başka bir madeni para yaratabilir ve tekrar kendileri için standart bulmacaya kilitleyebilir. Bir madeni parayı istediğiniz kadar orijinal değerinin kesirleriyle çok sayıda yeni paraya bölebilirsiniz.

Aynı ebeveynden aynı bulmaca karması ile aynı değerde iki jeton oluşturamazsınız, çünkü bu bir kimlik çakışmasına yol açar ve harcama reddedilir.

Madeni Para Toplama ve Harcama Paketleri

Bir grup küçük madeni parayı bir büyük madeni paraya birleştirebilirsiniz. Bunu yapmak için, bir veya daha fazla harcamayı bölünemeyecek şekilde gruplayan bir SpendBundle oluşturabilirsiniz. SpendBundle ayrıca, AGGSIG koşulunun bir değerin imzalanıp imzalanmadığını nasıl kontrol edebileceğini gösteren bir Toplanmış İmza nesnesi içerir.

ASSERT_COIN_CONSUMED kullanarak aralarındaki bağı daha da sıkabilirsiniz. 20 jetonunuz ve 80 jetonunuz olduğunu varsayalım. 20 jetonda harcamada geri dönüş sağlayabilirsiniz (CREATE_COIN 0xnewpuzhash 100). Sonra 80 jetonda iade edebilirsiniz (ASSERT_COIN_CONSUMED 0xcoinID). SpendBundle içindeki kuplaj ve bunun 20 ile ilişkisini ortaya koyan 80 değeri, 80 jetonun değerinin yeni değer 100 jetonun yaratılmasına kanalize edildiği anlamına gelir.

Standart İşlem

Standart işlemimiz olarak kullanmak için imza kilitli madalyonun daha da güçlü bir versiyonunu oluşturabiliriz.

(c (c (q . 50) (c (q . 0xfadedcab) (c (sha256 2) (q . ())))) (a 5 11))

İlk kısım çoğunlukla aynıdır, bulmaca her zaman pubkey için bir AGGSIG kontrolü döndürür 0xfadedcab. Ancak, çözümün yalnızca ilk unsurunu kontrol eder. Bunun nedeni, bu bulmacanın çözümünün yazdırılacak İşlem Koşullarının bir listesi olması yerine, çözümün bir program / çözüm çifti olmasıdır. Bu, alıcının çözüm oluşturmanın bir parçası olarak kendi programını çalıştırabileceği veya bir bulmacayı imzalayarak çözümü başka birinin sağlamasına izin verebileceği anlamına gelir.

Çözüm içerisindeki yeni program ve çözüm değerlendirilir ve bunun sonucu OpCode çıktısına eklenir. Bu kılavuzun bir sonraki bölümünde bunun nasıl çalıştığını daha ayrıntılı olarak ele alacağız .

Bu standart işlem için temel bir çözüm şöyle görünebilir:

("hello" (q . ((51 0xmynewpuzzlehash 50) (51 0xanothernewpuzzlehash 50))) (q . ()))

Bunu clvm_tools içinde çalıştırmak şuna benzer:

$ brun '(c (c (q . 50) (c (q . 0xfadedcab) (c (sha256 2) (q . ())))) (a 5 11))' '("hello" (q . ((51 0xdeadbeef 50) (51 0xf00dbabe 50))) (q . ()))'

((50 0xfadeddab 0x1f82d4d4c6a32459143cf8f8d27ca04be337a59f07238f1f2c31aaf0cd51d153) (51 0xdeadbeef 50) (51 0xf00dbabe 50))

Sonuçlar

Madeni para sahipliği, bir bulmacayla bir madeni para yaratma kavramını ifade eder, bu da yalnızca madeni paranın “sahibinin” özel anahtarı ile imzalandığında harcanabileceği anlamına gelir. Cüzdan yazılımının amacı, bu tür paraları ve bulmacaları oluşturmak, yorumlamak ve yönetmektir.

Bu kılavuzun bir sonraki bölümü, ChiaLisp’te daha derinlere inecek ve daha karmaşık bulmacaların nasıl yazılacağını ele alacaktır. Kılavuzun bu bölümündeki herhangi bir materyal kafanızı karıştırdıysa, sonraki bölümden sonra ona geri dönmeyi deneyin.

3 – CLVM’nin Derinliklerine

Kılavuzun bu bölümü, ChiaLisp’in Chia ağındaki işlemler ve madeni paralarla nasıl ilişkili olduğunu kapsayacaktır. 

ChiaLisp’te Tembel Değerlendirme

1. bölümde gördüğümüz gibi, programlar genellikle (i A B C)akışı kontrol edecek şekilde yapılandırılır . ChiaLisp, programları önce yaprakların değerlendirildiği ağaçlar olarak değerlendirir. Bu, farkında değilseniz beklenmeyen sorunlara neden olabilir. Değerlendirilirse x hemen durup hata veren aşağıdaki programı kullanan programı düşünün .

$ brun '(i (q . 1) (q . 100) (x (q . "still being evaluated")))'
FAIL: clvm raise (0x7374696c6c206265696e67206576616c7561746564)

Bunun nedeni, ChiaLisp’in yalnızca birinin yolunu takip etse bile her iki yaprağı da değerlendirmesidir.

Bunu aşmak için, (i ABC) değiştirmek için aşağıdaki tasarım modelini kullanabiliriz.

(a (i (A) (q B) (q C)) (a))

Bunu yukarıdaki örneğimize uygulamak şuna benzer:

$ brun '(a (i (q . 1) (q . (q . 100)) (q . (x (q . "still being evaluated")))) 1)'
100

Ne zaman bir (i A B C).

Bunun nasıl çalıştığını (ve 2. bölümdeki standart işlemin nasıl çalıştığını) merak ediyorsanız , o zaman Değerlendirmemi tanıtmama izin verin.

Değerlendirmeye Giriş

In Bölüm 1 İlk eleman bir operatör olduğunu ve sonraki her eleman geçerli bir programdır nerede bir program listesi genellikle belirtti. Bir programın içinde yeni argümanlar içeren programları da çalıştırabiliriz.

Bu şuna benzer:

(a *(puzzle)* (*solution)*)

Bunu pratiğe dökelim.

İşte programı değerlendiren (+ 2 (q 5)))ve listeyi (70 80 90) veya (80 90 100) çözüm olarak kullanan bir program .

$ brun '(a (q . (+ 2 (q . 5))) (q . (70 80 90)))' '(20 30 40)'
75

$ brun '(a (q . (+ 2 (q . 5))) (q . (80 90 100)))' '(20 30 40)'
85

Orijinal çözümün (20 30 40) yeni değerlendirme ortamı için ne kadar önemli olmadığına dikkat edin . Bu örnekte q . , erken değerlendirilmelerini önlemek için hem yeni bulmacadan hem de yeni çözümden alıntı yapmak için kullanıyoruz.

Çekebileceğimiz güzel bir numara, yeni çözümü dış çözüm açısından tanımlayabilmemizdir. Bu sonraki örnekte eski çözümün ilk unsurunu yeni çözümümüze ekleyeceğiz.

$ brun '(a (q . (+ 2 (q . 5))) (c 2 (q . (70 80 90))))' '(20 30 40)'
25

Ancak, bunu kullanarak etkileyebileceğimiz sadece yeni çözüm değil, programları parametre olarak da geçirebiliriz.

Parametreler Olarak Programlar

Çekirdek CLVM, kullanıcı tanımlı işlevler oluşturmak için bir operatöre sahip değildir. Bununla birlikte, programların benzer sonuçlar için kullanılabilecek parametreler olarak geçirilmesine izin verir.

İşte 2 (ilk çözüm argümanı) içinde bulunan programı çözümle birlikte yürüten bir bilmece (12).

$ brun '(a 2 (q . (12)))' '((* 2 (q . 2)))'
24

Bunu daha da ileri götürerek, bulmacanın yalnızca eski çözümündeki parametreleri kullanan yeni bir değerlendirme çalıştırmasını sağlayabiliriz:

$ brun '(a 2 1)' '((* 5 (q . 2)) 10)'
20

Bu tekniği özyinelemeli programları uygulamak için kullanabiliriz.

4 – Üst Düzey Dil, Derleyici ve İşlevler

Bu kılavuz, önceki bölümleri zaten okuduğunuzu varsaymaktadır. Üst düzey dil doğrudan alt düzey dilin üzerine inşa edildiğinden, bunu yapmanız şiddetle tavsiye edilir.

Çalıştırmak

Daha yüksek seviyeli dil için bilmeniz gereken ilk fark, bunun runyerine aramanız gerektiğidir brun. Bu, çalışma zamanının daha yüksek seviyeli özellikleri içermesi gerektiğini bilmesini sağlar.

Farkında olmanız gereken ilk üst düzey özellik , artık atomlardan alıntı yapmanın gerekmediğidir!

Karşılaştırın brun ve run burada:

$ brun '(+ 200 200)'
FAIL: first of non-cons ()
$ run '(+ 200 200)'
400

Run ayrıca, şimdi ele alacağımız bir dizi uygun üst düzey operatöre erişim sağlıyor.

Liste

list herhangi bir sayıda parametre alır ve bunları bir listeye yerleştirir. Bu, bizi (c (A) (c (B) (q ())))hızla dağınık hale gelebilecek iç içe geçmiş aramaları manuel olarak oluşturma zorunluluğundan kurtarır .

$ run '(list 100 "test" 0xdeadbeef)'
(100 "test" 0xdeadbeef)

Eğer

if otomatik olarak ifademizi i tembel değerlendirme formuna koyar, böylece değerlendirilen kullanılmayan kod yolu hakkında endişelenmemize gerek kalmaz.

$ run '(if 1 (q . "success") (x))' '(100)'
"success"

$ run '(if 0 (q . "success") (x))' '(100)'
FAIL: clvm raise ()

qq alıntı

qq kullanarak içinde değerlendirilen seçilmiş kısımları içeren bir şeyden alıntı yapmamızı sağlar unquote. Bunun avantajları hemen açık olmayabilir, ancak önceden belirlenmiş kod bölümlerini değiştirmemize izin verdiği için pratikte son derece kullanışlıdır.

Başka bir paranın bulmacasını döndüren bir program yazdığımızı varsayalım. Bir bulmacanın şu biçimi aldığını biliyoruz: (c (c (q . 50) (c (q . 0xpubkey) (c (sha256 2) (q . ())))) (a 5 11)) Ancak, 0xpubkey’i çözümümüz aracılığıyla bize iletilen bir değere değiştirmek isteyeceğiz.

Not: @ daha yüksek seviyeli dildeki argümanlara erişmemize izin verir

$ run '(qq (c (c (q 50) (c (q (unquote (f @))) (c (sha256 2) (q ())))) (a 5 11)))' '(0xdeadbeef)'

(c (c (q 50) (c (q 0xdeadbeef) (c (sha256 2) (q ())))) (a 5 11))

Mod ile CLVM’ye Derleme

Pratikte akıllı sözleşmelerin daha düşük seviyeli dili kullanarak çalışacağını, bu nedenle yukarıdaki operatörlerin hiçbirinin ağ üzerinde çalışmayacağını hatırlamak önemlidir. Ne olabilir ancak bunu alt düzey dile onları derlemek olduğunu. İşte burada mod devreye giriyor. mod, Çalışma zamanının kodu gerçekten çalıştırmak yerine derlemesi gerektiğini bilmesini sağlayan bir işleçtir.

(mod A B) iki veya daha fazla parametre alır. Birincisi, aktarılan parametreleri adlandırmak için kullanılır ve sonuncusu, derlenecek olan daha yüksek seviyeli komut dosyasıdır.

Bizim argümanlar isim altında arg_oneve arg_two daha sonra erişim ve arg_one ana programı içinde

$ run '(mod (arg_one arg_two) (list arg_one))'
(c 2 (q ()))

Gördüğünüz gibi programımızı derlenmiş alt düzey formda döndürüyor.

$ brun '(c 2 (q ()))' '(100 200 300)'
(100)

mod Değişken isimleri ve kaynak kodu arasında diğer parametrelerin ne gerektirdiğini merak ediyor olabilirsiniz .

Fonksiyonlar, Makrolar ve Sabitler

Daha yüksek seviyeli dili biz kullanarak bizim programından önce fonksiyonlarını, makroları ve sabitlerini tanımlayabilir defundefmacro ve defconstant.

Bunlardan istediğimiz kadarını ana kaynak kodundan önce tanımlayabiliriz. Genellikle bir program şu şekilde yapılandırılır:

(mod (arg_one arg_two)
  (defconstant const_name value)
  (defun function_name (parameter_one parameter_two) (*function_code*))
  (defun another_function (param_one param_two param_three) (*function_code*))
  (defmacro macro_name (param_one param_two) (*macro_code*))

  (main *program*)
)

Dikkat edilmesi gereken birkaç nokta:

  • İşlevler kendi kodlarında kendilerine başvurabilir ancak satır içi işlevlere benzer şekilde, derleme zamanında eklendiklerinden makrolar bunu yapamazlar.
  • Hem işlevler hem de makrolar diğer işlevlere, makrolara ve sabitlere başvurabilir.
  • Parametrelerine atıfta bulunan makrolar, tırnaksız parametreler ile yarı tırnak içine alınmalıdır.
  • Diğer makrolara başvuran makrolardaki sonsuz döngülere dikkat edin.
  • Yorumlar noktalı virgülle yazılabilir

Şimdi fonksiyonları kullanan bazı örnek programlara bakalım.

Faktöriyel

(mod (arg_one)
  ; function definitions
  (defun factorial (input)
    (if (= input 1) 1 (* (factorial (- input 1)) input))
  )

  ; main
  (factorial arg_one)
)

Bu dosyaları komut satırından çalıştırılabilen .clvm dosyalarına kaydedebiliriz. Yukarıdaki örneği olduğu gibi kaydetmek, factorial.clvm aşağıdakileri yapmamızı sağlar.

$ run factorial.clvm
(a (q 2 2 (c 2 (c 5 ()))) (c (q 2 (i (= 5 (q . 1)) (q 1 . 1) (q 18 (a 2 (c 2 (c (- 5 (q . 1)) ()))) 5)) 1) 1))

$ brun '(a (q 2 2 (c 2 (c 5 ()))) (c (q 2 (i (= 5 (q . 1)) (q 1 . 1) (q 18 (a 2 (c 2 (c (- 5 (q . 1)) ()))) 5)) 1) 1))' '(5)'
120

Bir Listenin Karesini Alma

Şimdi makroları da kullanan bir örnek yapalım. Bir makro yazılırken, tırnaksız olarak parametrelerle benzer şekilde yazılmalıdır.

Derleyicinin başka bir özelliğini göstermek için de bu zamanı alabiliriz. Bir listedeki her parametreyi adlandırabilir veya listenin kendisini adlandırabilirsiniz. Bu, parametreleri adlandırdığınız her yerde çalışır ve boyuttan emin olmadığınız listeleri yönetmenize olanak tanır.

Burada bir parametrenin karelenmesi için bir makro ve ardından bir listenin karelenmesi için bir fonksiyon tanımlarız.

(mod args

  (defmacro square (input)
    (qq (* (unquote input) (unquote input)))
  )

  (defun sqre_list (my_list)
    (if my_list
      (c (square (f my_list)) (sqre_list (r my_list)))
      my_list
    )
  )

  (sqre_list args)
)

Bu kodu derlemek ve çalıştırmak şununla sonuçlanır:

$ run square_list.clvm
(a (q 2 2 (c 2 (c 3 ()))) (c (q 2 (i 5 (q 4 (* 9 9) (a 2 (c 2 (c 13 ())))) (q . 5)) 1) 1))

$ brun '(a (q 2 2 (c 2 (c 3 ()))) (c (q 2 (i 5 (q 4 (* 9 9) (a 2 (c 2 (c 13 ())))) (q . 5)) 1) 1))' '(10 9 8 7)'
(100 81 64 49)

Sonuç

Artık kendi chialisp programlarınızı yazmak için gereken içeriğe ve bilgiye sahip olmalısınız. Bölüm 2’den itibaren bu programların blok zincirinde çalıştığını ve blok zincirine madeni paranın değeriyle ne yapması gerektiğini anlattığını hatırlayın .

Büyük Chia Sözlüğü

Bu kılavuz, Chia’da kullanılan kavramların çoğu için bir sözlük işlevi görecektir. Bitcoin işlemlerinin nasıl çalıştığına aşinaysanız, bunların çoğu aşina olacaktır.


  • Coin (TXO/transaction output) – Bir jeton değeri depolar. Tüm madeni paralar, bir işlemin çıktısı veya bir para tabanı ödülü veya ücret hedefi olarak üretilir. Bir jeton tam olarak bir kez harcanarak değerinin diğer madeni paralara gitmesine izin verir ve ardından kalıcı olarak yok edilir. Harcanmamış her jeton, madeni paranın bulmacası olan bir ChiaLisp programı ile kilitlenir ve bu bulmacayı çözecek bilgiye sahip olan, o parayı harcayabilecek kişidir. En temel bulmacanın bir genel anahtarı vardır ve ilgili özel anahtarla imzalanmış koşulların bir listesini içeren bir çözümü kabul eder, böylece yalnızca özel anahtarın sahibi paranın kilidini açabilir ve onu harcayabilir.
  • Unspent Coin (UTXO/unspent transaction output) – Oluşturulmuş ancak henüz harcanmamış ve dolayısıyla değer depolayan bir jeton. Harcanmamışlar (UTXO set / harcanmamış işlem çıktı seti) – Bu, ağdaki tüm harcanmamış paraların setidir. Bulmacalar için bir arama görevi gören bir işlemin geçerli olup olmadığını kontrol etmek için kullanılır. Bir jeton kimliğini blok yüksekliğinde bir doğum tarihiyle eşler. Bir işlem, geçmemişler bu bilgiyi içermediğinden, yalnızca doğrulamak için kullanılabilen karmalar olduğundan, doğrulamanın mümkün olması için kimliği hesaplamak için kullanılan bilgilerin bir açıklamasını içermelidir.
  • Coin ID/CoinName (TXO ID/transaction output ID) – Chia’daki bir madeni paranın kimliği, birincil giriş kimliği, bulmaca karması ve bu sırayla birleştirilen miktarın hashingiyle oluşturulur. Bu, TXO kimliğini oluşturmak için çok daha fazla veri kullanan ve akıllı sözleşmelerin neler yapabileceğini kısıtlayan Bitcoin’den çok farklıdır. 
  • Primary Input/Parent – Bir madeni para oluşturulduğunda, işlemde girdi olarak kullanılan madeni para birincil girdi olarak belirlenir. Bu, madeni para kimliğini oluşturmak için kullanılır. Bir işlemde girdi olarak birden fazla madeni para kullanılırsa, madeni paralardan biri birincil girdi olarak belirlenir ve diğerleri işlemi basitçe güçlendirir.
  • Spend/CoinSolution – Harcama , tam bulmaca kodu ile birlikte bir madeni paranın kimliğinin ve bulmacayla çalıştırılacak bir çözümün ortaya çıkmasıdır . Bir harcamanın sonucu, bulmacayı çözümle çalıştırdıktan sonra döndürülen İşlem Kısıtlamaları tarafından belirlenir.
  • Spend Bundle – Harcama paketi, ağa gönderilecek toplu bir imza ile birlikte gruplanmış bir harcama koleksiyonudur.
  • ChiaLisp – ChiaLisp, madeni para harcamak için bulmacaların programlandığı Turing-complete işlevsel dilidir.
  • Puzzle (Scriptpubkey) – Bir madeni paranın harcandığı andaki davranışını belirleyen bir ChiaLisp programı. Bir bulmaca, bir çözümü reddedebilir veya bir dizi kısıtlama çıkarabilir.
  • Solution (Scriptsig) – Bu, bir işlem gönderildiğinde değerlendirme için bulmacaya aktarılan bazı ChiaLisp’tir. 
  • CLVM – CLVM bulmaca ve çözümleri çalıştırmak olduğunu korumalı alan ortamdır ChiaLisp Sanal Makine bir derleyici derlenmiş asgari sürüme üst düzey ChiaLisp dönüştürebilseniz de CLVM sadece ChiaLisp derlenmiş asgari sürümünü çalıştırır.
  • Aggregated Signature/AggSig – Toplu İmzalar, birden çok imzayı tek bir toplu imzada yoğunlaştırmamıza olanak tanır; böylece bir ortak anahtar ve değer bildiğimizde, tek bir kümede var olup olmadığını doğrulayabiliriz. Bu, etkileşimli olmayan BLS toplamayı kullanır.
  • Prepend Signature – Başa eklenen imzalar, toplu bir imzanın yapısıyla ilgili meta verileri tutabilmemiz için kullanılır.
  • Op Constraints/Conditions – Kısıtlamalar, çözüme geçildiğinde bulmaca tarafından döndürülür. İade edilen koşulların tümü karşılanırsa, bir işlem geçerli olur.
  • Wallet – İşlemlerle etkileşim kurmak için yazılmış yazılım. Chia, Hiyerarşik Belirleyici Cüzdanlar (HD Cüzdanlar) kullanır. Bu, tümü geçerli ve bu cüzdan için benzersiz olarak doğrulanabilir birçok farklı genel anahtar oluşturabilecekleri anlamına gelir. Bir cüzdan, o madeni paranın kilidini açmak ve onu harcayan bir işlem oluşturmak için gerekli bilgiye sahipse, bir madeni para içerir.
  • Puzzle Generator – Bir cüzdan, işlemleri nasıl almak istediğini tanımlamak için bir Bulmaca Oluşturucu kullanacaktır. Cüzdanların çoğu standart işlemi oluşturmak isteyecektir, ancak bir bulmaca oluşturan bir ChiaLisp programını depolayarak, bir Gönderen Cüzdanın tek yapması gereken, Alıcı Cüzdanına Program Oluşturucusunun ne olduğunu sormak ve ardından parayı kilitlemek için bulmacayı oluşturmak için bunu çalıştırmak ile yukarı.
  • Puzzle Generator ID – Bu, bir cüzdanın bulmaca oluşturucusunun karmasıdır. Bir cüzdan, bir karma arama yapabilir ve o bulmaca oluşturucunun kaynak kodunu zaten bilip bilmediğini görebilir. Değilse, tam kaynak kodunu isteyecek ve bu bilgiyi arama tablosunda saklayacaktır.
  • Smart Contract – Akıllı sözleşme, bir madeni parayı kilitleyen ve karmaşık blok zinciri etkileşimlerini mümkün kılan özel bir ChiaLisp bulmacasıdır.
  • Coloured Coins – Renkli Paralar, kullanıcılar tarafından oluşturulan özel bir chia parası türüdür. Renkli bir madeni para, sahte olmayan ve diğer varlıklara bağlanabilen benzersiz bir şekilde işaretlenmiş bir chia alt kümesidir.
  • Authorized Payees – Yetkili Alacaklar, Cüzdan A’nın Cüzdan B’ye biraz para verebileceği anlamına gelen akıllı bir sözleşmedir, ancak Cüzdan B’nin bu parayı yalnızca Cüzdan A’nın açıkça yetkilendirdiği şekillerde harcamasına izin verilir.
  • Decentralised ID – Merkezi olmayan bir kimlik, bir cüzdanın diğer kimliklere mesajlar oluşturabilen bir kimlik olarak hareket etmesini sağlayan akıllı bir sözleşmedir. 

Birçok Makinede İyi Güvenlik Uygulamaları

Güvenlik, daha iyi seçimler yapmakla ilgilidir. Hiçbir zaman% 100 güvenli olamazsınız, ancak daha güvenli olmak için her zaman daha iyi seçimler yapabilirsiniz.

Anahtarlarınızı Ayrı Tutun

Başka bir deyişle, yalnızca makinenizin amacına özel tuşları kullanın .

  • Master/Farming anahtarınız, plot makinenizde olmamalıdır.
  • Master/Farming anahtarınız, biçerdöver makinenizde olmamalıdır.

Birden Çok Makinede Tarım

Birden Çok Makinede Çizim Yapma

Farming’in birçok makinenin wiki sayfasında gömülü olan şu konu :

Diğer biçerdöverlerde plotlar oluştururken chia plots create -f farmer_key -p pool_key, ana makinenizden çiftçiyi ve havuz anahtarlarını kullanın. Alternatif olarak, chia anahtar ekleme kullanarak özel anahtarlarınızı kopyalayabilirsiniz, ancak bu daha az güvenlidir.

Birden Fazla Makinede Hasat Yapma

Birçok makinenin wiki sayfasındaki Tarımda , biçerdöverlerle ilgili sertifika ayarlama hakkındaki talimatları izleyin .

Cüzdanınızı Ayrı Tutun

Cüzdanınızı hacklememenin bir yolu, cüzdanınızın internette erişilebilir olmamasıdır. İşte bunu nasıl yapacağınız: Chia Anahtar Yönetimi

Chia ödülleri için ödül adresiniz de ayrı bir anahtar olmalı ve çevrimdışı bir makinede saklanmalıdır. Farklı bir bilgisayarda bir adres oluşturabilir ve bu adresi config.yaml'ye(farmer.xch_target_address and pool.xch_target_address) koyabilirsiniz, böylece çiftçilik makineniz saldırıya uğrarsa geçmiş ödülleri kaybetmezsiniz.

Anahtarlarınızı Nasıl Bulunur?

Aşağıdaki komutu güvenli bir yerde kullanın. Özel ve genel anahtarlarınız görünecektir.

CLI kullanmanız gerekecek . Tüm anahtarlarınızı listelemek için bu komutu kullanın:chia keys show

Daha Fazla Makinede Çiftçilik

Ana makineniz olmayan diğer makinelerde hasat nasıl yapılır

Bu kılavuz, her makinede tam bir düğüm, cüzdan ve çiftçi çalıştırmanıza gerek kalmadan her makinede bir biçerdöver çalıştırmanıza olanak tanır. Bu, sisteminizi daha basit tutar, daha az bant genişliği, alan, CPU kullanır ve ayrıca anahtarlarınızın daha güvenli olmasını sağlar. Ayrıca, zorluklara yanıt verirken genel çiftliğinizi daha hızlı ve daha verimli hale getirir.

Mimari, çiftçiyi, tam düğümü ve cüzdanı çalıştıran bir ana makineden ve yalnızca hasat makinesini çalıştıran diğer makinelerden oluşur. Yalnızca ana makineniz Chia ağına bağlanacaktır.

Hasat makineniz ile ana makine arasındaki iletişimi sağlamak için TLS, ana makinenizin tüm sertifikaları imzalayan özel Sertifika Yetkilisi (CA) olacağı yerde kullanılır . Her biçerdöver, ana makinenizle doğru bir şekilde iletişim kurabilmek için kendi imzalı sertifikasına sahip olmalıdır .

                                       _____  Harvester 1 (certificate A)
                                      /
other network peers  --------   Main machine (CA) ------  Harvester 2 (certificate B)
                                      \_____  Harvester 3 (certificate C)

Önkoşullar

  • İlk olarak, Chia’nın tüm makinelere yüklendiğinden ve CLI çalıştırılarak başlatıldığından emin olun chia init.
  • Diğer biçerdöverlerde plotlar oluştururken chia plots create -f farmer_key -p pool_key, ana makinenizden çiftçiyi ve havuz anahtarlarını kullanın. Alternatif olarak, özel anahtarlarınızı kullanarak da kopyalayabilirsiniz chia keys add, ancak bu daha az güvenlidir. Bir plot oluşturduktan sonra, chia plots check her şeyin doğru çalıştığından emin olmak için çalıştırın .
  • Biçerdöver makinelerinizin erişebilmesi için, içinde bulunan ana makine CA dizininin bir kopyasını oluşturun ~/.chia/mainnet/config/ssl/cassl/ca Dizini bir ağ sürücüsünde, USB anahtarında paylaşabilir veya her bir biçerdöver için bir ağ kopyası yapabilirsiniz. Büyük güncellemelerin yeni ca içerikleri kopyalamanıza ihtiyaç duyabileceğini unutmayın . Biçerdöverin bağlantı girişimlerinde SSL hatalarını rapor etmediğini doğrulayın.

Kurulum Adımları

Ardından her bir biçerdöver için şu adımları izleyin:

NOT: Adım 4 için, /ca dizininizin bir kopyasını ana makinenizden geçici olarak kullanıyorsunuz. /ca Hasat makinenizdeki klasörü DEĞİŞTİRMEYİN . /ca Dizini, biçerdöverinizdeki geçici bir klasöre koyun . Hasat makinenize bu dosyaları geçici olarak göstereceksiniz ve ardından /ca geçici klasörünüzdeki dizini silebilirsiniz .

  1. 8447 numaralı bağlantı noktasındaki ana makinenizin IP adresinin biçerdöver makineleriniz tarafından erişilebilir olduğundan emin olun
  2. Tüm chia daemon işlemlerini şu şekilde kapatın: chia stop all -d
  3. Biçerdöverinizdeki tüm ayarların yedeğini alın
  4. Bir geçici klasöre koyduğunuz ana makine dizininizin kopyası olan chia init -c [directory] biçerdöverinizde çalıştırın . Bu komut, ana makinenizin CA’sı tarafından imzalanmış yeni bir sertifika oluşturur .[directory]/ca
  5. ~/.chia/mainnet/config/config.yaml Dosyayı her bir biçerdöverde açın ve ana makinenizin IP adresini uzaktaki harvester çiftçinin çiftçi bölümüne (NOT full_node) girin.

Örn:

harvester:
  chia_ssl_ca:
    crt: config/ssl/ca/chia_ca.crt
    key: config/ssl/ca/chia_ca.key
  farmer_peer:
    host: Main.Machine.IP
    port: 8447

Güvenlik endişesi:

Beta27’den bu yana, arka plan programının doğru şekilde başlatılması için CA dosyaları her bir biçerdöver için kopyalanmaktadır. Bu ideal değildir ve sertifikaları dağıtmanın yeni bir yolu, ana ağ lansmanının ardından sonraki bir sürümde uygulanacaktır. Açık internetten erişilebilen biçerdöverinizi çalıştırırken lütfen dikkatli olun.

Not:

Şu anda (ana ağ), GUI biçerdöver grafiklerini göstermiyor. En iyi yolu ‘s çalışma için kaydı düzeyini Chia tam düğüm kapatıp ayarlanmış olup olmadığını görmek için INFO Gözlerinde farklı config.yaml ana makine üzerinde ve Chia tam düğümü yeniden başlatın. Artık günlüğü kontrol edebilir ~/.chia/mainnet/log/debug.log ve aşağıdaki gibi mesajlar alıp almadığınızı görebilirsiniz:

[time stamp] farmer farmer_server   : INFO   -> new_signage_point_harvester to peer [harvester IP address] [peer id - 64 char hexadecimal]
[time stamp] farmer farmer_server   : INFO   <- farming_info from peer [peer id - 64 char hexadecimal] [harvester IP address]
[time stamp] farmer farmer_server   : INFO   <- new_proof_of_space from peer [peer id - 64 char hexadecimal] [harvester IP address]

Giden new_signage_point_harvester mesaj, çiftçinin biçerdöverinize bir meydan okuma gönderdiğini ve gelen farming_info mesajın bir yanıt olduğunu belirtir. new_proof_of_space Mesajı devletler biçerdöver meydan okuma için bir kanıt buldular. Daha alacak new_signage_poin ve farming_info daha iletileri new_proof_of_space mesajlar.

Günlüklerinizi şu şekilde bulabilirsiniz: Bir şeyler nerede bulunur?

GUI’yi ana çiftçi üzerinde çalıştırıyorsanız ve CLI’den birden fazla Hasatçı çalıştırmak istiyorsanız

  • Ana bilgisayarda Chia’yı kapatın
  • IP adresinizi bilgisayarda bulun
  • İçinde bulunan ana makinenizin CA dizininin bir kopyasını oluşturun c:\users\(your user name)\.chia\mainnet\config\ssl – CA dosyasını kopyalayın; ssl/ca Dizini bir ağ sürücüsünde, USB anahtarında paylaşabilir veya her bir biçerdöver için bir ağ kopyası yapabilirsiniz. Yeni ssl/ca dizini her sürümüyle chia-blockchain kopyalamanız gerekir – CA dosyasını biçerdöver makinesine kopyalayın – konumunu bilin
  • Yeni Biçerdöverde – aşağıdaki adımları izleyin
  • Chia’yı yükleyin ve çalıştığını görmek için normal 24 kelimelik anımsatıcı anahtarınızı kullanın. Sonra Chia’yı kapat
  • C: \ users (kullanıcı adınız) .chia \ mainnet \ config dosyasında – not defteri ile açın
  • Enable_upnp‘yi değiştirin: true – bunu false olarak değiştirin
  • Biçerdöverin yerini belirleyin: farmer_peer: host: localhost – yalnızca bu konumu değiştirin – ana bilgisayarınızın IP adresini yazın (ör. 192.192.xx)
  • Ana bilgisayardan kopyaladığınız CA klasörünü bulun – ağ konumunu öğrenin.
  • Komut istemine gidin. * cd C: \ Users (kullanıcı adınız) \ AppData \ Local \ Chia-Blockchain \ app-1.1.1 \ resources \ app.asar.unpacked \ daemon * yazın veya kopyalayın
  • (App-1.1.1) ‘in mevcut sürüm olduğundan emin olun – bu, sürüm 1.1.1 etkin olduğunda gerçekleşir
  • chia init -c [directory] Biçerdöverinizde çalıştırın , burada ana makinenizin CA dizininin ve ağ konumunun [directory] kopyası bulunur . Bu komut, ana makinenizin CA’sı tarafından imzalanmış yeni bir sertifika oluşturur .
  • [dizin] CA klasörünüzün depolandığı yere bağlantıyı yazdığınız yerdir c sürücüsündeyse, örneğin c: \ ca yazın. Tam satır şöyle görünecekti chia init -c c:\ca
  • Ardından enter tuşuna basın. Bu işlem tamamlandığında * Hem ana bilgisayarınızı hem de yeni biçerdöverinizi başlatın
  • Yeni biçerdöver, senkronizasyon sürecini başlatmak için 10-20 dakika sürebilir – biraz daha yavaş olacaktır – ancak senkronizasyona başlaması ve normal senkronizasyona ulaşmak için blok zincirinin tam bir kopyasını oluşturması gerekir. O makinede grafikler oluşturabilir veya grafikleri kopyalayabilirsiniz. Yalnızca tam senkronizasyon tamamlandığında gruplanır.

Çalıştığını bilmek

  • Ana bilgisayarınızda Çiftlik sekmesinin altında – alt kısımda “Gelişmiş Seçenekleri Gizle” yi seçin – aşağı kaydırın ve “Biçerdöver Ağınız” şimdi (2) Düğüm Kimliğinizi – (1) ana bilgisayarınız ve (2) hasat makinenizi gösterecektir.
  • ayrıca “Son Denenen Kanıt” altındaki çiftlik sekmesinin altında, biçerdöverinizdeki miktar parseliniz de orada görünecektir.

ÖNEMLİ

  • Chia yükseltme yapar – biçerdöverinizin blok zinciri veya cüzdan ile senkronize olmadığını düşünüyorsanız – CA dosyalarını ana bilgisayardan tekrar kopyalamanız gerekebilir
  • chia init -c [directory] Biçerdöverinizde çalıştırın , burada ana makinenizin CA dizininin ve ağ konumunun [directory] kopyası bulunur . Bu komut, ana makinenizin CA’sı tarafından imzalanmış yeni bir sertifika oluşturur .

Referans Tarım(Farming)Donanımı

Tarım süreci çok hafiftir ve minimum CPU ve DRAM kaynağıyla çalıştırılabilir. İyi bir tarım platformunun amacı, mümkün olduğunca az güç kullanarak en az miktarda alanda maksimum kapasiteye sahip olmaktır. Diğer bir deyişle, bir tarım platformunun önceliği, mümkün olan en düşük maliyetle depolama elde etmekten bağımsız olarak, küçük bir alanda en yüksek TB / W miktarına sahip olmaktır.

Yapılan Çiftlikleri

Aşağıda gösterildiği gibi kendi teçhizatınızı oluşturmak, sağlam BT becerileri ve elektrikli bileşenleri nasıl güvenli bir şekilde kullanacağınız konusunda bilgi sahibi olmayı gerektirir. Bazı yerlerde, lisanslı bir elektrikçi olmadan bu binalar yasal değildir. Kendi sorumluluğunuzda çoğaltın! Bunu çocuklardan uzak tutun!

Üretken tarım (03/19/2021 – 04/04/2021), 163 blok / 326 XCH ağ alanında 120 ~ 200 PiB.

Çiftçilik donanım kanalında, sürücüleri monte etmek için mevcut donanımı yeniden kullanmak için benzersiz kullanım alanları bulan birçok benzersiz DIY yapısı vardır. Burada , günde ortalama ~ 250 W ve ~ 5,6 kWh (son 30 gün) güç tüketimi için bir RockPi4 ve Sabrent USB hub’larından çiftçilik yapan 32 sürücüye ev sahipliği yapan eski topluluk kullanıcılarından bir derleme – onu kolayca güç açısından en verimli çiftliklerden biri haline getiriyor şimdiye kadar inşa edildi!

Parça listesi (fiyatlar sürekli değişir):

  • 32x Sabit sürücüler, 3 – 16 TB arası farklı boyut ve modeller
  • 32x USB3 / SATA PCB kartları, harici sabit diskleri ayırmak için yeniden kullanılır, ancak çevrimiçi olarak da sipariş edilebilir
  • 32x 12V DC güç kabloları, harici sabit diskleri ayırmak için yeniden kullanılır
  • 1x ORTALAMA KUYU RSP-500-12 DC Güç Kaynağı 500W / 12V / 42A ,
  • 1x Yedek Güç Kablosu, 3 Pinli Konektör ,
  • 2x Sabrent 16-Port USB 3.0 Veri HUB
  • 1x SMAKN 4 USB Araç Şarj Cihazı Güç Kaynağı Adım Aşağı Modülü DC 9-40V ila 5V 6A 
  • 0.1x 8 AWG Bakır Tel 
  • 2x Güç Dağıtım Bankaları 
  • 2x Tek Raflı Dik 
  • bir avuç metal vida ve somun
  • 1x Rock Pi 4A 4 GB 
  • Rock Pi 4 için 1x Alüminyum Isı Emici
  • 1x ve isteğe bağlı Kasa Smart HS300 Plug Power Strip 

Çoğunlukla 1 saniyenin altında 2200 x K32 arazilerinin üzerinde tarım yapmak ..

Yeni fikir birliği ile plotlar çok düzenli olarak inceleniyor. RockPi4’ün yetişmesi gereken bir sorun yok.

Sunum için kanıtları olan grafikler, 2250x’in üzerinde K32 ile düzenli olarak bulunmakta ve şu anda toplam 22 PiB’lik toplam ağ alanı ile bir saniyeden fazla kanıt sağlamamaktadır.

Masaüstü Tarım

Dolu bir kuledeki bir masaüstü, 12-16 sürücü barındırabilir. Bu, küçük çiftçiler için harika bir kurulumdur, çünkü masaüstü bilgisayarlar PC meraklıları için oluşturması ve yönetmesi en kolay olanlardır. Birçok sürücüyü barındıran tam kule kasa, birçok farklı satıcıda düşük bir maliyetle bulunabilir. Tipik masaüstü anakartları 6-10 SATA bağlantı noktası içerir, bu nedenle geçmişe doğru genişleyen bir SAS HBA da gerektirir. Artıları – ucuz, yapılandırması ve özelleştirmesi kolay Eksiler – kendiniz ve kaynak oluşturmanız gerekir

Örnekler

Bir masaüstü anakartı, kolayca elde edilebilen bir Rosewill 4U Sunucu Kasası Kasasına yerleştirilebilir . Bu kasa, 16 adede kadar sürücü ve 7 fan içerir ve çalışmaya başlamak için yalnızca standart bir masaüstü PSU’ya ihtiyaç duyar.

JBOD, DAS (doğrudan bağlı depolama)

Bir JBOD veya “Sadece bir grup disk”, çok sayıda sabit disk sürücüsünü barındırmaya adanmış bir cihazdır ve herhangi bir entegre bilgi işlem kaynağı içermez. Bir JBOD tipik olarak bir kasa, her sürücüyü ayrı ayrı tanımlayan muhafaza yuvaları, bir SAS genişletici ve arka panel, fanlar ve güç kaynaklarından oluşur. Bir JBOD’daki tüm disklere, bir PCIe yuvasını SAS’a dönüştüren bir HBA (ana bilgisayar veriyolu adaptörü) aracılığıyla bir ana sunucuya veya masaüstüne bağlanan tek bir SAS kablosuyla erişilebilir.

Örneğin

Mainstream JBOD – 4U kasada 45 disk. Çiftçilik kanalında SM45 olarak anılan bu da onu orta ve büyük ölçekli çiftlikler için çok uygun maliyetli yapar Supermicro SuperChassis 847E16-RJBOD1

Ana makineye eklemek için önerilen HBA’lar – LSI 9200-8e, 9200-16e ile SFF-8088 – SFF-8088 1M Harici SAS Kablosu veya 9300  veya 9400-8e SAS SFF ile -8644 – SFF-8088 kablosu

Yüksek sürücü sayısı – 4U kasada 90 disk. piyasadaki en yüksek yoğunluk, ancak tipik olarak kullanılan içindir

Artıları Çok sayıda yuva. Tam entegre güç kaynakları ve fanlar. Yazılımdaki yuvaları belirlemek ve LED konum bulma işleviyle arızalı bir aygıtı tanımlamak için SAS muhafaza yönetimini kullanır. SAS veya SATA sürücülerini kullanabilir.

Eksileri Hayranlar gürültülü olabilir. Ağır. Veri merkezi rafının doğru şekilde monte edilmesini gerektirir.

NAS Çiftçiliği(Farming)

Bir NAS veya ağa bağlı depolama, arka panele dahil edilmiş sabit sürücülere ve hafif bir CPU ve DRAM’a sahip olmaya adanmış bir cihazdır. NAS, ağ üzerinden depolamaya hizmet eder (DAS veya doğrudan bağlı depolamanın aksine)

Synology DiskStation DS1821 +

Artıları – küçük alanda çok sayıda sürücü, güç açısından son derece verimli

Eksileri – diğer seçeneklere kıyasla pahalıdır, çiftçi veya hasatçı için gerekli eklenti (henüz tamamlanmamıştır), tipik olarak çiftçilik için gerekli olmayan veri koruması için yedeklilik ile kurulur. Yalnızca SATA sürücüler (çoğu için uygun olan)

Referans PLOT Donanımı

Bunlar, paralel olarak hızlı bir şekilde grafikler oluşturmak için iyi çalışan makinelerdir. Bunlar, mevcut sistemleri edinmeyi veya değiştirmeyi, günlük olarak oluşturulan TB’lık plotlar üzerinde iyi çizim makineleri olacak şekilde düşünmek için başlangıç ​​noktaları olarak hizmet eder. Bununla birlikte, oluşturulan plotlar daha sonra taramak için bu düzeyde bir donanıma ihtiyacınız yoktur. Bunun için bir Raspberry Pi yeterlidir.

Çizim, tüketici sistemlerinde (dizüstü bilgisayarlar) yapılabilir, ancak ileri teknoloji masaüstü bilgisayarlarda, iş istasyonlarında ve sunucularda çok daha hızlı yapılır. Grafiklendirme, paralelliği (bu -r sayısı veya paralel işlem sayısıdır) iyileştirmek için CPU çekirdeklerinin ölçeklendirilmesini, işlem başına DRAM’de ölçeklendirmeyi ve geçici depolama alanı için hızlı SSD’ler veya birçok küçük 10k sabit sürücüyü gerektirir.

1.0.4’te DRAM ve geçici alan miktarı değişti . Aşağıdaki yeni tablo GUI’deki değerleri yansıtmaktadır. En az bir CPU çekirdeğine ihtiyacınız var (ancak aşama 1’i hızlandırarak iş parçacığı sayısını artırmak için r kullanabilirsiniz) ve çizim başına altındaki DRAM ve sıcaklık alanı. Bir sistem için kolay matematik, çekirdek sayısını almak ve bunu paralel çalışacak işlem sayısı hedefi olarak kullanmak, minimum miktarı bulmak için geçici alanı ve DRAM gereksinimlerini bununla çarpmaktır.

K-valueDRAM (MiB)Temp Space (GiB)Temp Space (GB)
323390239256.6
337400521550
341480010411118
352960021752335

Bir çizim makinesinin amacı, en düşük sistem maliyetiyle günlük grafik başına en yüksek TiB’yi oluşturmaktır. Çizim için yeterli olan birçok farklı fiyat noktasında tüketici, veri merkezi ve kurumsal donanımın birçok benzersiz kombinasyonu vardır. 3

Chia Plotting Cihaza Göre Performansları

UserSystem NameOSMotherboard / SAS Adapter (Server)CPUCPU Perf
(Passmarks)
DRAM (Size, Type, MHz, etc)Temp DriveTime
Phase 1 (s)
Total Time
per Plot (s)
Time
(min)
Time
(hr)
GiB
Written
GiB/minParallel PlotsTiB/day
(all // Plots)
MiB/day/CPU PassmarkTotal Price
(USD)
$/TiB/dayVersion-r
(Threads)
-b
(Memory)
BucketsStaggerStripe Size-e
(Bitfield Disabled)
@toyFinal SpaceWindows 10Asus Prime TRX40-Pro SThreadripper 3970X/Mod. NH-U14S @4.264229256GB DDR4 @ 32007x 2TB NVME 980pro/mp510 1x 3,8TB NVME Micron 9200Series12,24529,571.00492.98.21101.330.20564212.14198.25$6,500.00$535.281.1.345000128yesdefaultno
@storage_jmIntel Wolf Pass ServerUbuntu Server 20.04.2Intel® Server System R2208WFTZSR2x Intel® Xeon® Gold 6130 Processor36970256GB DD4 2666 ECC RDIMM2 Intel SSD DC P4608 6.4TB, 4x 3.2TB in RAID 012,72243,156.10719.311.99101.330.1409469.11258.48$5,400.00$592.531.0.553400128yesdefaultno
@kiwihaitchMy BossUbuntu 20.04MSI TRX40 Pro 10GThreadripper 3970X64229256GB DDR4 @ 32006 x Intel P4600 3.2TB21,00049,900.00831.713.86101.330.1218457.71125.871.0.533400128noDefaultno
@trivonusKiloUbuntu Server 20.04.1Supermicro X10DRU-i+2x Intel Xeon E5-2690 v4 14 core 2.6 Ghz34169192GB DDR4 ECC2x Intel P4618 6.4TB PCIE NVME (4x 3.2TB in mdadm RAID 0)25,12757,675.00961.316.02101.330.1054487.12218.36$4,600.00$646.481.0.523300128yesDefaultno
@storage_jmIntel Wolf Pass ServerUbuntu Server 20.04.2Intel® Server System R2208WFTZSR2x Intel® Xeon® Gold 6130 Processor36970128GB DD4 2666 ECC RDIMMIntel SSD DC P4608 6.4TB, 2x 3.2TB in RAID 012,72232,790.10546.59.11101.330.1854266.78192.29$4,000.00$590.021.0.553400128yesdefaultno
@vexrUbuntu 20.04.2 LTSSupermicro X10-DRi2x Intel Xeon E5-2680 v325043192GB DDR4 ECC 2133P-R45 x WD 8TB – WD80EMAZ-00WJTA024,96463,348.861,055.817.60101.330.0960456.07254.301.1.223400128yesDefaultno
@kotarou3Debian testing (bullseye)MSI TRX40 Pro WifiThreadripper 3960X w/PBO+NH-U12S54963128GB DDR4 @32002× 2TB MP600 Force (btrfs RAID0 noatime,discard=async) + 2× 1TB MP600 Force (ditto)9,93031,000.00516.78.61101.330.1961215.79110.49$3,800.00$656.111.1.584000128yesdefaultno
@kotarou3Debian testing (bullseye)MSI TRX40 Pro WifiThreadripper 3960X w/PBO+NH-U12S54963128GB DDR4 @32002× 2TB MP600 Force (btrfs RAID0 noatime,discard=async) + 2× 1TB MP600 Force (ditto)10,49032,600.00543.39.06101.330.1865225.77110.07$3,800.00$658.611.1.584000128yesdefaultno
@kotarou3Debian testing (bullseye)MSI TRX40 Pro WifiThreadripper 3960X w/PBO+NH-U12S54963128GB DDR4 @32003× 2TB MP600 Force (btrfs RAID0 noatime,discard)16,15044,800.00746.712.44101.330.1357264.9694.66$3,800.00$765.841.1.543389128yesdefaultno
@kotarou3Debian testing (bullseye)MSI TRX40 Pro WifiThreadripper 3960X w/PBO+NH-U12S54963128GB DDR4 @32003× 2TB MP600 Force (btrfs RAID0 noatime,discard)9,19028,700.00478.37.97101.330.2118154.4785.25$3,800.00$850.401.1.583400128yesdefaultno
@toddsbythe monolithUbuntu Desktop 20.04.2Asus PRIME X570-PROAMD Ryzen 5900x w/ NZXT K53 AIO3947364GB DDR4 2666MHz (2x32GB)4x 2TB m.2 Inland (mdadm RAID-0)11,19632,328.30538.88.98101.330.1881184.76126.461.1.527700128yesdefaultno
@fiveanglechachachaUbuntu 21.04 serverDell R420 pizzabox2x Intel® Xeon® Processor E5-2470 v22313896GB DDR3 1600 ECC2x Nytro Warpdrives: BLP-1600 + XP6210-4A2048 in R015,00038,000.00633.310.56101.330.1600194.27193.73$0.001.1.559750128yesdefaultno
@technovioletRyzen Test 1Ubuntu 20.04.2 LTS Diskless (PXE)ASRock Taichi X570Ryzen 5950x4609764GB DDR4 @36004 x 1TB Inland Premium (MDADM R-0, XFS), 2 x 250GB EVO850 Destination5,43316,149.30269.24.49101.330.376584.2496.34$1,973.00$465.84124096128yesdefaultno
@storage_jmbrother in law buildWindows 10 2H20GIGABYTE Z590 AORUS EliteIntel® Core™ i9-10850K Processor2337764GB DDR4 32002x Corsair MP600 2TB NVMe M.2 80mm5,38916,981.00283.04.72101.330.358084.03180.67$2,000.00$496.541.0.584000128yesDefaultno
@technoviolet2667v3 Test 1Ubuntu 20.04.2 LTS Diskless (PXE)Supermicro SYS-1028R-TDW2 x Intel Xeon E5-2667v321642512GB DDR4 @18668 x EVO850 500GB (MDADM R-0, XFS, ZRAM LOG), 1 x Micron 9100 2.4TB NVME Destination10,52726,674.16444.67.41101.330.2279123.85186.36$1,738.00$451.8668192128yesdefaultno
@technoviolet2640v3 Test 2Ubuntu 20.04.2 LTS Diskless (PXE)Supermicro SYS-1028R-TDW2 x Intel Xeon E5-2640v31809464GB DDR4 @186618 x HUSMH8020BSS204 200GB SAS-12K (MDADM R-0, XFS) 2 x 250GB EVO850 Destination9,14826,824.00447.17.45101.330.2267123.82221.65$1,442.00$377.0186138128yesdefaultno
@trivonusEchoUbuntu Server 20.04.1MSI B550 GAMING PLUSRyzen 9 3950X 16-Core Processor39231128GB DDR4 3200 Mhz1x Intel P4608 6.4TB PCIE NVME (2x 3.2TB in mdadm RAID 0)16,20444,850.00747.512.46101.330.1356203.81101.90$2,900.00$760.641.0.535000128yesDefaultno
@trivonusIndiaUbuntu Server 20.04.1Supermicro X9DRi-LN4F+2x Intel Xeon E5-2650 v2 8 core 2.6 Ghz17588128GB DDR3 1333 Mhz ECC1x Intel P4608 6.4TB PCIE NVME (2x 3.2TB in mdadm RAID 0)18,69447,510.00791.813.20101.330.1280203.60214.58$2,350.00$652.941.0.534500128yesDefaultno
@trivonusBerthaUbuntu Server 20.04.1MSI MEG X570 ACERyzen 3900x @4.1GHZ3290164GB 2×32,DDR4 36002x Sabrent Rcoket 2TB w/ heatsink12,14233,600.00560.09.33101.330.1809143.56113.54$2,642.00$741.641.0.543400128YesDefaultno
@trivonusAlphaUbuntu Server 20.04.1MSI MAG B550 TomahawkAMD Ryzen 9 3900XT 12-Core Processor3298564GB DDR4 3600Intel DC P4510 4TB PCIE 3.1 x4 NVME11,10230,055.00500.98.35101.330.2023123.41108.52$2,211.00$647.701.0.544500128yesDefaultno
@storage_jmbrother in law buildWindows 10 2H20GIGABYTE Z590 AORUS EliteIntel® Core™ i9-10850K Processor2337764GB DDR4 32002x Corsair MP600 2TB NVMe M.2 80mm8,63325,692.27428.27.14101.330.2366103.33149.27$2,000.00$601.011.1.283400128yesDefaultno
@trivonusGolfUbuntu Server 20.04.1Supermicro X9DRi-LN4F+2x Intel Xeon E5-2650 v2 8 core 2.6 Ghz1758864GB DDR3 1333Mhz ECC1x Intel P4608 6.4TB PCIE NVME (2x 3.2TB in mdadm RAID 0)17,77448,909.00815.213.59101.330.1243183.15187.59$2,100.00$667.401.0.542900128yesDefualtno
@trivonusDeltaUbuntu Server 20.04.1ASUS TUF Gaming X570 Plus-WIFIAMD Ryzen 7 5800x 8-Core Processor1927564GB, 2x32GB, DDR4 36001x Intel P4610 3.2 TB10,21427,400.00456.77.61101.330.2219103.12169.75$2,150.00$689.031.0.545500128yesDefaultno
@trivonusCharlieUbuntu server 20.04.1MSI Z490-A ProIntel Core i7-10700 2.9ghz1735664GB, 2×32, DDR4 32002x Sabrent Rocket 2TB w/ heatsink12,16630,700.00511.78.53101.330.1980102.78168.25$2,050.00$736.111.0.544000128yesDefaultno
@technoviolet2640v3 Test 1Ubuntu 20.04.2 LTS Diskless (PXE)Supermicro SYS-1028R-TDW2 x Intel Xeon E5-2640v31809464GB DDR4 @18662 x 960GB Samsung PM983 (MDADM R-0, XFS), 1 x 500GB EVO850 Destination10,49726,423.00440.47.34101.330.230182.59150.01$1,088.00$420.3164096128yesdefaultno
@fiveanglepedotFedora 34 Server betaHP DL380 G7/HP 410i/LSI 9201-16e2x Intel® Xeon® Processor X56501045796GB DDR3 1333 ECC5x Nytro Warpdrive/Oracle F40 (20x100GB) in LVM 4x5R014,00041,000.00683.311.39101.330.1483122.50250.92$0.001.1.559750128yesdefaultno
@eastcoastserversSupermicro 216Server 2019Supermicro X9Dri-f LSI 9400-8iDual Xeon E5-2697 V224139128GB DDR3 160024 x Seagate ST600MM000627,75684,767.001,412.823.55101.330.0717242.42105.15$2,750.00$1,136.051024000128nodefault
@thecryptodrewNeedleUbuntu 20.04.2ASUS ROG STRIX B550-iAMD Ryzen 9 5900X / CM Hyper 2123947332GB DDR4 3200MHz2x 2TB Inland m.2 NVMe (mdadm raid-0, XFS)11,19628,044.00467.47.79101.330.216872.1356.69$1,650.00$773.171.1.523200128yesDefaultno
@flamingoi9-9900Ubuntu LTS 20.04.2Asus rog strix z390-i gamingi9-99001709732GB DDR4 @32002 x WD Black SN750 M.2 NVMe SSD – 1TB9,96925,033.00417.26.95101.330.242962.05125.68$1,200.00$585.5944000128nodefaultno
@technoviolet2640v3 Test 3Ubuntu 20.04.2 LTS Diskless (PXE)Supermicro SYS-1028R-TDW2 x Intel Xeon E5-2640v31809464GB DDR4 @18662 x 960GB Samsung PM983 (MDADM R-0, XFS, ZRAM LOG), 1 x 500GB EVO850 Destination10,40025,623.00427.17.12101.330.237362.00116.02$1,088.00$543.4564096128yesdefaultno
@rs967MSI Z490 + i7Windows 10 HomeMSI Z490-A ProIntel i7-10700K 8-Core 16-Thread OC 4.2GHzNA32GB DDR4 36001x Inland Premium 2TB m.2 NVMe SSD11,74727,388.72456.57.61101.330.222061.870.00$2,500.00$1,334.781.0.535000128noDefaultno
@Crypt4lifeVulkanWindows 10Asus TUF GAMING B550-PLUSAMD Ryzen 7 5800x 8-Core1927532GB DDR4 @ 30001 X 1TB SSD NVME10,33324,044.00400.76.67101.330.252951.7896.85$1,450.00$814.471.1.358000128yesdefaultno
@toyBudget buildUbuntu 20.04.2Asus Gaming B550 PlusRyzen 2700x OC @ 4.15 GHZ1759764GB DDR4 @ 32002x 2TB NVME 1x 3,8TB NVME8,45725,202.00420.07.00101.330.241251.70101.08$1,500.00$884.311.1.343408128yesdefaultno
@eparrotLenovo ThinkStation (mini)Ubuntu Server 20.04.1Lenovo 314FIntel i7 9700 (8 core, 8 thread)1348632GB DDR4Inland Premium 2TB NVMe10,65025,300.00421.77.03101.330.240351.69131.38$700.00$414.271.0.423400128yesdefaultno
@fiveanglehyperiaFedora 34 Server betaMSI B450 Gaming AC PlusAMD Ryzen™ 5 36001786516/32GB DDR4 3200 MT/s2x 900GB (Samsung PM953 2TB, Micron 5210 4TB) R0, 1x Micron M500DC13,50037,000.00616.710.28101.330.164361.3981.38$650.00$468.831.1.559750128yesdefaultno
@syolConsumer gamingUbuntu Desktop 20.04.1Asus P8Z77-V DELUXEi7-3770k OC 3.9GHzNA32GB DDR3 1600Samsung 970 EVO Plus 1TB NVMe XFS 2x500GB & WD Bleu SN550 1 TB NVMe XFS 2x500GB14,00032,090.00534.88.91101.330.189541.070.001.0.524500128yesDefaultno
@guiserNUC i7Ubuntu Server 20.04.1NUC10i7FNHCIntel i7-10710U 6-Core 12-Thread1010332GB DDR4 2666 SO-DIMM1x 1TB Seagate Firecuda 520 NVMe8,91624,807.00413.56.89101.330.245131.03107.31$1,500.00$1,450.751.0.426000128noDefaultyes
@maggelWorkstationWindows 10 Pro WSL2 Ubuntu 20.04Pro WS X570-ACEAMD Ryzen 5900X39473128GB DDR4 3200Intel P3600 XFS14,97041,500.00691.711.53101.330.146530.6216.42
@n418ASRockWindows 10 ProASRock B550M Steel LegendAMD Ryzen 9 5900X 12-Core Processor39473128GB DDR4 3200Sabrent 2TB PCIe 4.0×4 NVMe SSD20,82069,500.001,158.319.31429.870.371110.5213.86264noDefault
@eparrotCyberpower GamemasterWindows 10 HomeASRock B360M Xtremei5-9400F 2.90GHz954016GB DDR4Inland Premium 1TB SSD NVMe6,84318,184.00303.15.05101.330.334410.4751.68$1,000.00$2,126.791.0.443400128YesDefaultno
@guiserNUC i7Ubuntu Server 20.04.1NUC10i7FNHCIntel i7-10710U 6-Core 12-Thread1010332GB DDR4 2666 SO-DIMM1x 1TB Seagate Firecuda 520 NVMe7,77719,388.22323.15.39101.330.313610.4445.77$1,500.00$3,401.551.0.424000128noDefaultno
@DattJCMsi X570Windows 10 2H20MSI X570 MAGRyzen 9 3900X 12-Core 24-Threads329012x 16, 32GB DDR4 @36001 x SN850 1TB M.27,05621,664.65361.16.02101.330.280610.3912.58$3,300.00$8,362.071.1.5126750128nodefaultno
@rs967Basic Rig 2Ubuntu LTS 20.04.1Gigabyte Ultra-Durable 3Intel i5-2400 2-Core 4-Thread38168GB DDR3 13331x WD Green 500GB Hard Drive20,00076,000.001,266.721.11101.330.080010.1130.91$150.00$1,333.381.0.536000128noDefaultno
@toyTimegimpUbuntu 21.04MSI B550 UnifyRyzen 5950x /Noctua NH-D15 @4.646097128GB DDR4 @ 36004x 2TB NVME mp510 1x 3,8TB NVME Micron 9200Series9,21222,184.00369.76.16101.330.2741249.25210.4025000128yesDefaultno
@technovioletRyzen Test 1Ubuntu 20.04.2 LTS Diskless (PXE)ASRock Taichi X570Ryzen 5950x4609764GB DDR4 @36004 x 1TB Inland Premium (MDADM R-0, XFS), 2 x 250GB EVO850 Destination00.000.00.00101.330.0000120.000.00$1,973.00124096128yesdefaultno
@technovioletRyzen Test 2Ubuntu 20.04.2 LTS Diskless (PXE)ASRock Taichi X570Ryzen 5950x4609764GB DDR4 @360018 x HUSMH8020BSS204 200GB SAS-12K (MDADM R-0, XFS) 2 x 250GB EVO850 Destinationgathering data for 24hr101.330.00000.000.00$2,087.0064096128yesdefaultno
@toyUbuntu 21.04MSI B550 UnifyRyzen 5900x /Noctua NH-D1539473128GB DDR4 @ 36004x 2TB NVME mp5107,92419,542.00325.75.43101.330.3111187.88209.2025000128yesDefaultno
@zignzign-desk01Windows 10AsRock Z370i9 9900kNA32GB DDR4 @ 36001x ADATA SX8100NP 2TB + Seagate FireCuda 510 SSD 1TB11,19334,748.00579.19.65101.330.175092.210.001.1.543390128yesDefaultno
(user)Chia Plotting Performance

SSD Dayanıklılığı

Öngörülen SSD’nin varsayılan ömrü, dayanıklılık tablosu

Harika bir grafiksel SSD seçmek için çeşitli yaklaşımlar vardır ve çoğu, form faktörü ve arayüz uyumluluğu (NVMe / PCIe, SATA veya SAS) için içine gireceği fiziksel sisteme bağlı olacaktır. Ortak olan tek şey, -etek bir K = 32 grafiği oluşturmak için bayrağı kullanarak yaklaşık 1,8 TB veya bu seçenek olmadan 1,6 TB yazma gerektirdiğinden, yüksek dayanıklılığa ihtiyacınız olacaktır .

Dayanıklılık, SSD yıpranmadan önce ne kadar verinin yazılabileceğidir. Chia’da bu önemlidir, çünkü bir çizim SSD’si genellikle% 100 görev döngüsünde olacak ve tüm gün yazacaktır.

Karma kullanım veya yüksek dayanıklılığa sahip bir veri merkezi veya kurumsal SSD, çizim için en iyi seçimdir. Bol dayanıklılığa sahip kullanılmış SSD’ler eBay, Craigslist veya benzerlerinde iyi bir değer için bulunabilir.

Tüketici NVMe SSD’leri, düşük dayanıklılık nedeniyle genellikle tavsiye edilmez ve büyük patlama performansı için genellikle daha hızlı ortama (SLC veya tek seviyeli hücre) yönelik önbelleğe alma algoritmaları kullanırlar. Ağır iş yükü ve sürekli IO altında iyi performans göstermezler. Harika çizim performansı sunacak çok yüksek performanslı tüketici NVMe SSD’leri vardır, ancak TBW’deki daha düşük derecelendirilmiş dayanıklılık daha hızlı bir yıpranma ile sonuçlanacaktır.

VendorModelForm FactorInterfaceClass$ASP$/GBUser Capacity (GB):usable GiB in OSSpec sheet rated TBWtotal plots, worst, (TiB)total plots, best, (TiB)$/TiB, worst$/TiB, best
IntelP3700U.2 & AICNVMeenterprise mixed use$250.00$0.1616001455.54380019532930$0.13$0.09
IntelP3600U.2 & AICNVMeenterprise mixed use$140.00$0.0916001455.58760391977$0.36$0.14
IntelP4600U.2 & AICNVMeenterprise mixed use$352.00$0.1132002910.91820013562441$0.26$0.14
IntelP3600U.2 & AICNVMeenterprise mixed use$116.00$0.1012001091.66570297742$0.39$0.16
IntelP3600U.2 & AICNVMeenterprise mixed use$115.00$0.1012001091.66570293732$0.39$0.16
IntelP4600U.2 & AICNVMeenterprise mixed use$176.00$0.1116001455.58990407732$0.43$0.24
IntelP4600U.2 & AICNVMeenterprise mixed use$220.00$0.1120001819.311080509916$0.43$0.24
IntelP3700U.2 & AICNVMeenterprise mixed use$120.00$0.30400363.97300332498$0.36$0.24
Micron5300 MaxSATA 2.5inSATAenterprise SATA$307.20$0.1619201746.6175205571270$0.55$0.24
Micron5300 MaxSATA 2.5inSATAenterprise SATA$614.40$0.1638403493.12452811142539$0.55$0.24
IntelS4610SATA 2.5inSATAenterprise mixed use$144.00$0.15960873.35800266586$0.54$0.25
Micron5300 ProSATA 2.5inSATAenterprise SATA$249.60$0.1319201746.652562001000$1.25$0.25
Micron5300 ProSATA 2.5inSATAenterprise SATA$499.20$0.1338403493.184104002000$1.25$0.25
SamsungPM1725bU.2 & AICNVMeenterprise mixed use$267.00$0.1716001455.587604001000$0.67$0.27
Micron9300 ProU.2NVMeenterprise$1,152.00$0.1576806986.3168007274000$1.58$0.29
Micron9300 ProU.2NVMeenterprise$576.00$0.1538403493.184003642000$1.58$0.29
IntelP4610U.2NVMeenterprise mixed use$300.00$0.1916001455.5106134301031$0.70$0.29
DRAMDDR3DIMDDR3memory$768.00$1.50512465.825002500$0.31$0.31
SamsungPM983U.2 and M.2NVMedata center$110.00$0.11960873.31366.5663350$1.76$0.31
SamsungPM983U.2 and M.2NVMedata center$225.00$0.1219201746.62733.12125700$1.80$0.32
IntelS3710SATA 2.5inSATAenterprise mixed use$68.00$0.17400363.98300137205$0.50$0.33
CorsairCSSD-F960GBMP510M.2NVMeclient$120.00$0.13960873.3170076350$1.57$0.34
ToshibaPX04SVQ2.5in SASSAS 12Gbpsenterprise SAS$380.00$0.2416001455.587603981074$0.96$0.35
InlandInland Premium 1TB SSDM.2NVMeclient mainstream$125.00$0.121024931.5160073350$1.72$0.36
Micron9300U.2NVMedata center$768.00$0.2038403493.184003642000$2.11$0.38
Micron9300 MaxU.2NVMeenterprise$1,600.00$0.2564005821.93730016504125$0.97$0.39
Micron9300 MaxU.2NVMeenterprise$800.00$0.2532002910.9186008252063$0.97$0.39
SabrentSB-ROCKET-NVMe4-2TBM.2NVMeclient$349.00$0.1720001819.33600163700$2.14$0.50
IntelS4600SATA 2.5inSATAenterprise mixed use$96.00$0.20480436.62950104188$0.92$0.51
DRAMDDR4DIMDDR4memory$1,536.00$3.00512465.825002500$0.61$0.61
IntelP4510U.2NVMedata center$400.00$0.2020001819.32054115516$3.49$0.78
WDSN750M.2NVMeclient mainstream$60.00$0.12500454.83001475$4.40$0.80
WDSN750M.2NVMeclient mainstream$120.00$0.121000909.760027150$4.40$0.80
CorsairMP510M.2NVMeclient$120.00$0.13960873.372033150$3.66$0.80
SeagateNitro 1551SATA 2.5inSATAdata center SATA$255.00$0.27960873.32390102305$2.51$0.84
Samsung970 EvoM.2NVMeclient maintream$163.84$0.161024931.560030150$5.46$1.09
IntelP4800XU.2 & AICNVMeenterprise$2,062.50$2.75750682.34100018311831$1.13$1.13
Samsung970 ProM.2NVMeclient high end$307.20$0.301024931.5120050250$6.14$1.23
Intel905pU.2 and M.2NVMeclinet high end$1,152.00$1.20960873.317520938938$1.23$1.23
Intel665pM.2NVMeclient mainstream$102.40$0.101024931.53001575$6.83$1.37
IntelP4800XU.2 & AICNVMeenterprise$2,062.50$5.50375341.141000916916$2.25$2.25
Intel660pM.2NVMeclient mainstream$122.88$0.121024931.52001050$12.29$2.46

Henüz test edilmemiş sürücüler için dakika başına tahmini GiB, wikideki sürücüler için ölçülen sayıları ekledim.

  • NAND P/E Cycles = NAND’nin yıpranmadan önce yapabileceği program / silme döngülerinin miktarı. NAND programları sayfalar halinde (yazar) ve bloklar halinde siler (birçok sayfa içerir)
  • Wearing out – SSD artık UBER’i ​​(düzeltilemez bit hata oranı), alıkoymayı (kapalıyken verileri güvende tutma), arıza oranını veya kullanıcı kapasitesini karşılamıyor
  • UBER = veri hatası sayısı / okunan bit sayısı
  • WAF (Yazma Yükseltme Faktörü) = NAND yazma / ana bilgisayar yazma
  • TBW veya PBW – tükenmeden önce SSD’ye yazılan ana bilgisayarın miktarı
  • TBW = sürücü kapasitesi * döngü / WAF
  • DWPD (günlük sürücü yazma sayısı): garantinin her günü (tipik olarak 5 yıl) yıpranmadan aygıta yazabileceğiniz veri miktarı
  • DWPD = TBW/365/5/ sürücü kapasitesi

Linux’deki Dayanıklılığı

NVMe

https://github.com/linux-nvme/nvme-cli

https://nvmexpress.org/open-source-nvme-management-utility-nvme-command-line-interface-nvme-cli/

NVMe-CLI ile okuma dayanıklılığı – bu, kullanılan toplam dayanıklılığı gösteren gaz göstergesidir

sudo nvme smart-log /dev/nvme0 | grep percentage_used

Sürücünün gerçekte yaptığı yazma miktarının okunması

sudo nvme smart-log /dev/nvme0 | grep data_units_written

Yazılan bayt = çıktı * 1000 * 512B

TBW = çıktı * 1000 * 512B / (1000 ^ 4) veya (1024 ^ 4)

NAND yazmalarını bulmak için, NVMe-CLI için satıcı eklentilerini kullanmanız gerekecektir.

sudo smartctl -a /dev/nvme0

SAS

sg_logs /dev/sg1 --page=0x11

arayın

Percentage used endurance indicator(Yüzde kullanılan Dayanıklılık göstergesi): 0%

Her Şeyin Çalışıp Çalışmadığını Kontrol Etme

Devam eden bir çalışma

Bu belge, CLI’yi nasıl kullanacağınızı bildiğinizi varsayar. CLI kullanmak, sorunu gidermenin (ve her şeyi Chia da yapmanın) en iyi yoludur. Hızlı Başlangıç Kılavuzu ve CLI Komutları Referans CLI ile tanıma konusunda yararlı bilgiler var.

Aradığımı bulmak için nereye bakmalıyım

Chia’nın Linux, macOS ve Windows sürümleri için dosya yapısı benzerdir.

/home/user
├─ .chia/
│   └── mainnet/
│      ├─ config/
│      │      ├─ config.yaml
│      │      └─ ssl/
│      │            └─ (and more...)
│      ├─ db/
│      ├─ log/
│      │      └─ debug.log
│      ├─ run/
│      │      └─ (and more...)
│      └─ wallet/
│             └─ (and more...)
└── /chia-blockchain
       └─ (and more...)

Linux ve macOS

  • Chia yapılandırması: ~/.chia/mainnet/config/config.yaml
  • Chia günlükleri: ~/.chia/mainnet/log/

Windows

  • Chia yapılandırması: C:\Users\%USERNAME%\.chia\mainnet\config\config.yaml
  • Chia günlükleri: C:\Users\%USERNAME%\.chia\mainnet\log\

In config.yaml sizin Günlüklerinizde için ayrıntı düzeyini ayarlayabilirsiniz.

İçinde bu bölümü arayın config.yaml. Bu logger ayarını değiştirmek için yararlıdır log_level gelen WARNING etmek INFO, arıza tespiti için gerekli ayrıntı almak için.

logging: &id001
    log_filename: log/debug.log
    log_level: INFO
    log_stdout: false

İlgili bilgiler için günlüklerinizde arama yapmak için grepLinux , macOS ) veya Select-StringWindows ) çalıştırabilirsiniz .

Her şey yolunda mı?

Hataları hızlı bir şekilde bulmak istiyorsanız, şunu çalıştırın:

  • Linux / macOS: cat ~/.chia/mainnet/log/debug.log | grep -i 'error'
  • Windows: Get-Content -Path "~\.chia\mainnet\log\debug.log" | Select-String -Pattern "error"

Biçerdöver(Harvester)

Bir prova testi yapmak için gereken süre 30 saniyenin altında olmalıdır. Daha yüksek zamanlar görürseniz, kurulumunuzda bir sorun vardır.

debug.log Sorunları incelemek için kullanabileceğiniz bazı komutlar .

  • Linux / macOS: tail ~/.chia/mainnet/log/debug.log | grep eligible
  • Windows:
    • Select-String -Path “~\.chia\mainnet\log\debug*” -Pattern “eligible”
    • Select-String -Path “~\.chia\mainnet\log\debug*” -Pattern “Found [^0] proof”
    • Select-String -Path “~\.chia\mainnet\log\debug*” -Pattern “Farmed unfinished_block”
    • Get-Content -Path "~\.chia\mainnet\log\debug.log" -Wait | Select-String -Pattern "found"

Plotlar

checkKomutun belgelerini CLI Komutları Referansı – kontrol sayfasında bulabilirsiniz.

  • Tüm plotlarnızı kontrol etmek için chia plots check yazın. Bu, listenizde listelediğiniz tüm dizinlerin config.yaml çizimleri içerdiğini kontrol edecektir .
  • Kullan chia plots check -h bu komut için seçeneklerini görmek için

Windows İpuçları ve Püf Noktaları

Windows’ta, daha fazla esneklik ve kontrol sağlayan Windows PowerShell’den chia CLI’yi kullanabilirsiniz. PowerShell, komutlar yazdığınız, enter tuşuna bastığınız ve klasörleri değiştirmek, dosyaları taşımak veya chia gibi programları çalıştırmak gibi şeyler yaptığınız bir programdır.

1. PowerShell kullanarak paralel çizim

    cd $env:userprofile\AppData\Local\Chia-Blockchain\app-1.1.5\resources\app.asar.unpacked\daemon\
    start-process .\chia.exe -argumentlist "plots create yourParametersGoHere"
    start-process ....
    ....

Eğer start-process değil çalışır, denemek .\chia.exe plots create yourParametersGoHere

Veya“%USERPROFILE%\AppData\Local\chia-blockchain\app-1.1.5\resources\app.asar.unpacked\daemon” yolu kullanıcı değişkenine ekleyin , bu şekilde chia komutlarını yalnızca bir komut penceresinde “chia” kullanarak çalıştırabilirsiniz.

Paralel süreçleriniz arasına bir gecikme eklemek için, sleep <seconds>her chia plots create komutun arasına bir boşluk koyabilirsiniz , örneğin sleep 3600 sonraki işlemi bir saat geciktirmek için.

Spesifik bir örnek:

 cd $env:userprofile\AppData\Local\Chia-Blockchain\app-1.1.5\resources\app.asar.unpacked\daemon\
    start-process ./chia.exe -argumentlist "plots create -k 32 -b 4000 -u 128 -r 4 -t d:\tempdrive1 -2 e:\tempdrive2 -d F:\plots -n 1"

Yukarıdaki komut bir çizim yapar (ile belirtilir -n 1), paralel olarak çizim yapmak için komutu tekrarlamanız gerekir (ilkini kapatmadan). -n Sıralı çizim için değeri artırın , yani 1. grafik tamamlandığında bir sonraki başlatılır.

Hatırlatma: PowerShell’de çizerken manuel olarak günlük kaydı ekleyin

GUI ile çizim yaparken, çizici her çizim için \mainnet\plotter içine günlükler yazacaktır. Birçok üçüncü taraf araç (mükemmel Chia Plot Durumu gibi) bilgi raporlamaları için günlüklere güvenir. CLI’den çizim yaparken manuel günlüklere sahip olmanın bir yolu, yerleşik “tee” komutunu şu şekilde kullanmaktır:

.\chia.exe plots create -k 32 -n 2 -u 128 -t G:\ChiaTemp -d O:\Chia8O -r 2 -n 5 | tee -filepath $env:userprofile\.chia\mainnet\plotter\plots-5-6-2021-B.txt

2. Günlük dosyalarına iyice bakın

Yapılandırma ve günlükleri bulunur ~\.chia\mainnet\log ve ~\.chia\mainnet\config. Günlüklerinizi ile takip edebilirsiniz Get-Content ~\.chia\mainnet\log\debug.log -wait. Neler olup bittiğini daha fazla görmek için, oturum seviyenizi config\config.yamlWARNING’den INFO’ya ayarlayın ve yeniden başlatın. \.chia.exe configure --set-log-level INFO Yukarıda özetlenen uygulama dizininden de kullanabilir ve ardından değişikliklerin etkili olması için yeniden başlatabilirsiniz.

3. Windows (otomatik) Güncellemesi can sıkıcı olabilir

Bir çizim sürecine başlamadan önce bir Windows Update kontrolünden geçmeyi ve güncellemeleri yüklemeyi düşünün. Biraz zaman alabilir ve güncellemeler yeniden başlatma başlatabilir. Güncellemeleri bir seferde 35 güne kadar devre dışı bırakmak için Gelişmiş Seçenekler’e de gidebilirsiniz.

4. Birden fazla düğüm çalıştırırken uPnP’yi devre dışı bırakın

Yerel ağınızda birden fazla düğüm çalıştırmayı denerseniz, her ikisinde de uPnP’ye sahip olmak her iki düğümde de önemli ölçüde kafa karışıklığına neden olur. Biri dışında hepsinde uPnP’yi devre dışı bırakmak için powershell kullanmanız gerekecek.

1.0 sürümü için:

    cd $env:userprofile\AppData\Local\Chia-Blockchain\app-1.1.5\resources\app.asar.unpacked\daemon\
    ./chia.exe configure --enable-upnp false

5. Daima “Cüzdana bağlanmak”

Bazen cüzdan veritabanınız bozulabilir. “Cüzdana bağlanma” döndürücüsünde 60 saniyeden fazla takılırsanız, muhtemelen uygulamadan çıkmak, cüzdan veritabanınızı Powershell ile silmek ve ardından uygulamayı yeniden başlatmak isteyeceksiniz.

1.0.x sürümü için:

    del ~\.chia\mainnet\wallet\db\blockchain*

6. Çizim sırasında periyodik duraklama (PowerShell)

PowerShell çizim işlemleriniz duraklıyor gibi görünüyorsa, Hızlı Düzenleme’yi devre dışı bırakmalısınız. Powershell -> Özellikler -> Seçenekler: Hızlı düzenlemeyi devre dışı bırakın.

Hala bu belirtiyi görüyorsanız, bu neredeyse her zaman RAM’inizde bir sorundur .

7. Sürücünüzde boş alan bırakın

HDD veya SSD’nizde disk onarımı gerektiren herhangi bir sorunla karşılaşırsanız, diskte en büyük dosyadan daha büyük boş alana sahip olmanız gerekir. K32 grafikleri için> 101 GB bırakmanız gerekecektir. Bu şekilde, grafiklerinizde herhangi bir hata varsa (çizim kontrol aracı tarafından bildirildiği gibi), en azından bunları CHKDSK / r ile onarmayı deneyebileceksiniz. Ancak CHKDSK, bir sürücüde kalan boş alandan daha büyük dosyaları onaramaz ve bir hata verir.