All Projects → onuar → Dokuztas

onuar / Dokuztas

Licence: mit
Blockchain ve cryptocurrency'leri (Bitcoin gibi) daha iyi anlayabilmek için, Türkçe dokümante edilen bir Python implementasyonu

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to Dokuztas

Simplecoin
Just a really simple, insecure and incomplete implementation of a blockchain for a cryptocurrency made in Python as educational material. In other words, a simple Bitcoin clone.
Stars: ✭ 1,694 (+1223.44%)
Mutual labels:  blockchain, cryptocurrency
Backend Ico Dashboard
Free & open-source dashboard for your next ICO, crowdsale or tokensale
Stars: ✭ 110 (-14.06%)
Mutual labels:  blockchain, cryptocurrency
Ark Js
An ARK Client for JavaScript.
Stars: ✭ 103 (-19.53%)
Mutual labels:  blockchain, cryptocurrency
Awesome Cryptocurrency Security
😎 Curated list about cryptocurrency security (reverse / exploit / fuzz..)
Stars: ✭ 102 (-20.31%)
Mutual labels:  blockchain, cryptocurrency
Gulden Official
Blockchain as intended
Stars: ✭ 126 (-1.56%)
Mutual labels:  blockchain, cryptocurrency
Explorer
A Blockchain Explorer for ARK using Vue.js and Tailwind CSS.
Stars: ✭ 102 (-20.31%)
Mutual labels:  blockchain, cryptocurrency
Web3js Tracker Example
Blockchain transactions tracker example for ETH and ERC20 tokens made with web3.js
Stars: ✭ 107 (-16.41%)
Mutual labels:  blockchain, cryptocurrency
Etherwalletkit
Ethereum Wallet Toolkit for iOS - You can implement an Ethereum wallet without a server and blockchain knowledge.
Stars: ✭ 96 (-25%)
Mutual labels:  blockchain, cryptocurrency
Tokencaps
A middleware framework and persistence layer to aggregate and normalize crypto-currency data.
Stars: ✭ 118 (-7.81%)
Mutual labels:  blockchain, cryptocurrency
Multi Party Schnorr
Rust implementation of multi-party Schnorr signatures over elliptic curves.
Stars: ✭ 115 (-10.16%)
Mutual labels:  blockchain, cryptocurrency
Utopian.io
Utopian.io Frontend - Utopian wants to reward open-source contributors!
Stars: ✭ 101 (-21.09%)
Mutual labels:  blockchain, cryptocurrency
Hcashd
Stars: ✭ 118 (-7.81%)
Mutual labels:  blockchain, cryptocurrency
Esteem Surfer
Ecency desktop formerly known as Esteem Surfer - reimagined desktop social wallet, contribute and get rewarded (for Windows, Mac, Linux)
Stars: ✭ 100 (-21.87%)
Mutual labels:  blockchain, cryptocurrency
Coco
The fastest crypto online
Stars: ✭ 103 (-19.53%)
Mutual labels:  blockchain, cryptocurrency
Dotnet Stellar Sdk
Stellar API SDK for .NET Core 2.x and .NET Standard 2.0
Stars: ✭ 97 (-24.22%)
Mutual labels:  blockchain, cryptocurrency
Dcrdata
Decred block explorer, with packages and apps for data collection and storage. Written in Go.
Stars: ✭ 104 (-18.75%)
Mutual labels:  blockchain, cryptocurrency
Stellar Ios Mac Sdk
Stellar SDK for iOS & macOS - Swift, Stellar, Horizon, Soneso
Stars: ✭ 92 (-28.12%)
Mutual labels:  blockchain, cryptocurrency
Swiftyeos
SwiftyEOS is an open-source framework for interacting with EOS, written in Swift. Can be used on iOS and macOS.
Stars: ✭ 94 (-26.56%)
Mutual labels:  blockchain, cryptocurrency
Hummingbot chinese
hummingbot中文资源
Stars: ✭ 114 (-10.94%)
Mutual labels:  blockchain, cryptocurrency
Cryptocurrencyawesome
Cryptocurrency study materials resources
Stars: ✭ 118 (-7.81%)
Mutual labels:  blockchain, cryptocurrency

Build Status

Dokuz taş

Türk geliştiriciler arasında blockchain'in (blockzinciri) daha iyi anlaşılabilmesi için kodlanmıştır. Sorularınız için Github'ın issues'ını kullanabilir ya da direkt [email protected] ile bana ulaşabilirsiniz.

Versiyonlar

0.0.1

  • Chain yaratma
  • Genesis block ekleme
  • Merkle root hash'inin hesaplanması
  • Block ekleme
  • Mining
  • Mining için sırada bekleyen block'ları işleme
  • Mining için sırada bekleyen block yoksa, txs'leri işlemeye geçme
  • Node'ların ağa dahil olması
  • Ağa sonradan dahil olan node'un, diğer node'lardan block'ları alması (sync)
  • Problemi çözen miner'ın, ağdaki diğer node'ları haberdar etmesi

Kurulum ve test

Test edilen cihazlar

macOs Sierra 10.12.6 (16G29)
Raspberry PI 1 B+
Ubuntu 16.04 LTS

Kurulum ihtiyaçları

python 3.6.2
virtualenv
pip

Homebrew ile kurmak işinizi kolaylaştıracaktır.

Kurulum

git clone https://github.com/onuar/dokuztas.git
cd dokuztas
virtualenv -p python3 dokuztas/venv
source dokuztas/venv/bin/activate
pip install -r requirements.txt

Demo (Public nodes)

source dokuztas/venv/bin/activate
python dokuztas/nas.py
python noderunner.py -p 5002
python noderunner.py -p 5003 -m 1
python noderunner.py -p 5004 -m 1

5003 ve 5004 miner olarak görev yapıyor (-m parametresi). 5003'ün ve 5004'ün farklı konfigürasyonlara sahip bilgisayarlar olma durumunu test edebilmek için, dokuztas.blockchain.Blockchain.mine metodundaki Hardware spec simülasyonu section'unu açabilirsiniz. Fakat unit test'ler çalıştırılırken, kapatılması unutulmamalıdır.

Postman kullanıyorsanız, postman_queries.json dosyasını import ederek direkt test etmeye başlayabilirsiniz.

ya da

curl -d '{"tx":"1 Turkcoin from A to B"}' -H "Content-Type: application/json" -X POST http://127.0.0.1:5002/add

Demo (Ledger ve mining)

source dokuztas/venv/bin/activate
python
>>> from dokuztas.blockchain import Blockchain, PendingBlock
>>> chain = Blockchain()
>>> chain._generate_genesis()
>>> new_block = PendingBlock()
>>> txs = ['Barış, Fırat\'a 100 coin gönderdi',
            'Fırat, İrgin\'e 50 coin gönderdi',
            'İrgin, Mert\'e 25 coin gönderdi',
            'Mert, Onur\'a 12,5 coin gönderdi',
            'Onur, Özgen\'e 6,25 coin gönderdi',
            'Özgen, Uğur\'a 3,125 coin gönderdi']
>>> new_block.add_txs(txs=txs)
>>> def always_run():
        return False
>>> chain.mine(pending_block=new_block, stop_mining_check = always_run)

Testleri çalıştırmak için

source dokuztas/venv/bin/activate
pytest

Açıklamalar

node.mine()

İlk mine işleminin tetiklenmesi, 10 tx'in eklenip, 11. tx'in gelmesi ile başlamaktadır. Bu işlem tamamlandığında, sırada bekleyen block'lar varsa bunlar mine edilir, yoksa bekleyen txs'ler mine edilmeye başlanılır. Her bekleyen 10 tx, 1 block'un içine eklenerek bekletilir. Örn:

25 tane tx eklenmişse, 10'ardan iki tane block ve 5 tane tx bekletilir. İlk olarak block'lar mine edilmeye başlanılır.

blockchain.calculate_merkle(txs)

Root hash'i hesaplamak için her bir ikili elemanın hash'i alınır, bunlar ayrıca hashlenir. Eğer listedeki eleman sayısı tek sayı ise, sonuncu elemanın hash'i ayrıca hesaplanır. Çıkan hash'ler aynı fonksiyona parametre olarak tekrar gönderilir. Örn:

3 txs varsa 3. elemanın hashi ayrı hesaplanır, ilk iki elemanın hash'leri ayrı hesaplanır. hash_list'te iki tane hash olmuş olur. Bu iki hash'in de hash'lerinin hesaplanması için, fonksiyon tekrar çağırılır. 2 txs varsa, iki txs'in hash'leri hesaplanır ve bu hash'ler birleştirilerek tekrar hash alınır. Sonuç olarak elde tek hash vardır ve bu root hash olarak geri döndürülür.

blockchain.mine()

sırada bekleyen txs'lerin merkle root hash'lerini hesaplamak ve block'a eklemek içindir.

Yol haritası

  • Windows dağıtımlarından birinde test edilip, README sayfasının buna uygun değiştirilmesi.
  • README'ye, bu projeye teknik anlamda nasıl destek verilebileceği ile ilgili bir bilgi eklemek.

Eklenecek özellikler

  • Bir miner ağa, pending txs'ler oluştuktan sonra dahil olduysa, aktif node'larda bu txs'leri alıp mining işlemine öyle başlamalıdır.
  • Bir node ağa dahil olduğunda, ağa daha önceden bağlanmış olan node'lardan block'ları almalı ve en uygun (honest) block'u doğru olarak kabul etmeli. (consensus) (şu an için sadece ilk node'un chain'i alınıp, doğru kabul ediliyor.).
  • Ağdaki node'ların block'ları manuple edemeyeceğini göstermek için, "/hack" adı altında bir resource eklenmesi. Bu /hack, basitçe mevcut block'taki bir tx'i değiştirip hash'leri tekrar hesaplayacak ve bu yeni chain'i diğer node'ların demokratik seçimine bırakacak. Sonuç olarak ağda dolaşan chain'in değiştirilemediği görülecek (immutability).
  • Node Address Server olmadan da node'ların birbirinden haberdar olabilecekleri bir yapıya geçmek.
  • (belki) Private ve public key'ler ile, tx'i ekleyen kişinin doğrulamasının yapılması.
  • (belki) tx'lerin içerdiği data, cryptocurrency'lerde olduğu gibi from, to, amount içerecek şekilde değiştirilirse, double-spending engelleme kontrollerinin eklenmesi.
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].