Bu makale dizisinde, Golang'da basit blockchain uygulamasına dayanan basitleştirilmiş bir kripto para birimini 5 dakikadan kısa sürede oluşturacağız. Bu projeyi yapabilmek için önce golang'ı kurmanız gerekiyor. metin editörü için her şeyi kullanabilirsiniz, burada görsel stüdyo kodunu kullanıyorum.
Kurulumu yaptınız mı? Tamam, hadi yapalım!
projeyi oluşturduysanız bir dosya oluşturun main.go. Tamam kodlayalım, ilk önce main.go'dan başlayacağız. “Blockchain”in struct Block kısmıyla başlayalım. Blockchain'de değerli bilgilerin saklanmasını engeller. Örneğin Bitcoin, herhangi bir kripto para biriminin özü olan mağaza işlemlerini engeller. Bunun yanı sıra bir blok, sürümü, mevcut zaman damgası ve önceki bloğun karması gibi bazı teknik bilgileri de içerir. Bu makalede bloğu blockchain veya Bitcoin spesifikasyonlarında açıklandığı gibi uygulamayacağız, bunun yerine yalnızca önemli bilgiler içeren basitleştirilmiş bir versiyonunu kullanacağız. İşte neye benzediği. burada bir yapı bloğumuz var:
type Blok yapısı {zaman damgası zamanı.Zamanişlemler []dizeönceki karma []baytKarma []bayt}
Timestamp
geçerli zaman damgasıdır (blok oluşturulduğunda), transactions
blokta yer alan gerçek değerli bilgilerdir, prevhas
önceki bloğun karmasını saklar ve Hash
bloğun karmasıdır. Bitcoin spesifikasyonunda Timestamp
, prevhash
, ve Hash
ayrı bir veri yapısı oluşturan blok başlıkları ve işlemler (transaction
bizim durumumuzda) ayrı bir veri yapısıdır. Basitlik olsun diye bunları burada karıştırıyoruz.
Peki karmaları nasıl hesaplayacağız? Hash'lerin hesaplanma şekli blockchain'in çok önemli bir özelliğidir ve blockchain'i güvenli kılan da bu özelliktir. Mesele şu ki hash hesaplamak hesaplama açısından zor bir işlemdir, hızlı bilgisayarlarda bile biraz zaman alır (insanların Bitcoin madenciliği yapmak için güçlü GPU'lar satın almalarının nedeni budur). Bu, yeni blokların eklenmesini zorlaştıran ve eklendikten sonra değiştirilmesini engelleyen kasıtlı bir mimari tasarımdır. Bu mekanizmayı gelecekteki bir makalede tartışacağız ve uygulayacağız.
Şimdilik sadece blok alanlarını alacağız, bunları birleştireceğiz ve birleştirilmiş kombinasyon üzerinde bir SHA-256 hash'i hesaplayacağız. Hadi bunu şurada yapalım Newhash
yöntem:
func NewHash(time time.Time, transactions []string, prevhash []byte) []byte {giriş := apend(önceki, time.String()...)işlem için:= aralık işlemleri {girdi = ekleme(giriş, dize(rune(işlem)))...)}karma := sha256.Sum256(girdi)hash değerini döndür[:]}
Daha sonra, bir Golang kuralını takip ederek blok oluşturmayı ve bitirmeyi basitleştirecek bir fonksiyon uygulayacağız:
func Bloklar(işlemler []string, prevhash []byte) *Block {currentTime := time.Now()&Engelle{zaman damgası: time.Time{},işlemler: işlemler,önceki: önceki,Karma: NewHash(currentTime, işlemler, prevhash),}}
bir yazdırma fonksiyonu oluşturmaya devam ediyoruz. Yazdırma işlevi, bir işlemi gerçekleştiren her bloğun içeriğini yazdırmak için kullanışlıdır. işte kod:
func Yazdır(blok *Blok) {fmt.Printf("ttime: %sn", blok.timestamp.String())fmt.Printf("tprevhash: %xn", blok.prevhash)fmt.Printf("thash: %xn", blok.Hash)}
Ve yazdırma işlemi için işlev işlemi:
func İşlem(blok *Blok) {fmt.Println("tTransactions:")i için, işlem := aralık blok.transactions {fmt.Printf("tt%v: %qn", i, işlem)}}
Gerekli tüm işlevler tamamlandıktan sonra onu ana işlevde kullanacağız:
func ana() {ryan := []string{"ryandi, Reza'ya 50 BTC gönderdi"}blok_1 := Bloklar(ryan, []bayt{})fmt.Println("Bu bizim ilk bloğumuz")Yazdır(block_1)İşlem(block_1)jack := []string{"jack, Reynold'a 20 BTC gönder"}blok_2 := Bloklar(jack, blok_1.Hash)fmt.Println("Bu bizim ikinci bloğumuz")Yazdır(block_2)İşlem(block_2)}
tamam, yazmayı bitirdiğimiz tüm kodlar. terminalde go run main.go yazarak çalıştıralım. Çıktı :
Sonuç
Çok basit bir blockchain prototipi oluşturduk: bu sadece bir dizi bloktan oluşuyor ve her bloğun bir öncekiyle bağlantısı var. Ancak gerçek blockchain çok daha karmaşıktır. Bizim blok zincirimizde yeni bloklar eklemek kolay ve hızlıdır, ancak gerçek blok zincirde yeni bloklar eklemek biraz çalışma gerektirir: blok ekleme izni almadan önce bazı ağır hesaplamalar yapmak gerekir (bu mekanizmaya İş Kanıtı denir). Ayrıca blockchain, tek bir karar vericinin bulunmadığı dağıtılmış bir veritabanıdır. Bu nedenle, yeni bir bloğun ağın diğer katılımcıları tarafından onaylanması ve onaylanması gerekir (bu mekanizmaya fikir birliği denir). Ve henüz blockchain'imizde hiçbir işlem yok!
- "
- Türkiye
- göre
- mal
- Bitcoin
- blockchain
- BTC
- inşa etmek
- satın almak
- kod
- bilgisayarlar
- bağ
- Fikir birliği
- içindekiler
- devam etmek
- cryptocurrency
- akım
- veri
- veritabanı
- Dizayn
- editör
- HIZLI
- Özellikler(Hazırlık aşamasında)
- Alanlar
- Ad
- takip et
- Airdrop Formu
- işlev
- gelecek
- GV
- esrar
- okuyun
- Ne kadar
- hr
- HTTPS
- ia
- bilgi
- IP
- IT
- orta
- ağ
- Diğer
- İnsanlar
- önlenmesi
- proje
- İşin kanıtı
- menzil
- koşmak
- Dizi
- Basit
- So
- başlama
- mağaza
- mağaza
- Teknik
- zaman
- işlem
- işlemler
- W
- İş
- yazı yazıyor