MultiChain 1.0 beta 2 ve 2.0 yol haritası

Kaynak Düğüm: 1742567

Bugün neredeyiz ve yarın nereye gidiyoruz

Bugün Linux, Windows ve Mac için MultiChain 1.0'ın ikinci beta sürümünü yayınlamaktan mutluluk duyuyoruz (şimdilik Mac sürümü derleme gerektiriyor). Bu, MultiChain 1.0'ın planlanan gelişimini sonuçlandırır - herhangi bir hata düzeltmesi dışında, MultiChain 1.0'ın yaz boyunca son sürümü değişmeyecektir.

Bu ay ayrıca MultiChain'in ilk alfa sürümünün Haziran 2015'teki ilk yılından bu yana iki yıl geçti. Herhangi bir yeni üründe olduğu gibi, pazarın nasıl tepki vereceğinden emin değildik ve bunu öğrenmenin tek bir yolu olduğunu biliyorduk - Minimum olarak uygulanabilir bir ürün, önemli bir değer sağlayan ancak tasarımla ön olan ilk sürüm anlamına gelir. Neyse ki, ilk ürünümüzün aksine CoinSpark, MultiChain güçlü ve anında olumlu bir yanıt aldı. Buna, birçoğu şimdi uyguladığımız bir tsunami mantıklı özellik istekleri eşlik etti. Ürünün gelişimine paralel olarak, kullanım her önlemle dikkat çekici bir şekilde artmıştır. Örneğin, MultiChain web sitesi Temmuz 3,000'te 2015'in altında ziyaretçi aldı ve şimdi bu sayının aylık on katını getiriyor.

MultiChain performansı

Son iki yılda MultiChain'i optimize etmek için çok çaba harcadık. Bitcoin Çekirdeği, genel bitcoin ağı için referans uygulaması. Aşağıda, ürünün beş sürümünü kullanan tek düğümlü bir kurulum için işlem hacminin karşılaştırması verilmiştir:

.throughput td,.throughput th {text-align:right;}
Toplam işlemler 1.0 alfa 3 1.0 alfa 21 1.0 alfa 22 1.0 1 beta 1.0 2 beta
100 6.5 tps 7.8 541.7 830.6 1465.7
1,000 7.0 7.6 583.9 889.4 1199.6
10,000 4.1 6.4 566.9 746.6 1071.2
100,000 - 6.6 558.0 771.9 1034.2
1,000,000 - - 548.6 773.6 1055.4

API ek yükü ve oluşturma, imzalama, madencilik ve işlemleri ve blokları doğrulama dahil olmak üzere saniyede ortalama işlem.
Testler ab HTTP sunucusu karşılaştırma aracı, sendtoaddress API.
Sunucu özellikleri: Intel Core i7-4770, 4 çekirdekli @ 3.4 MHz, 32 GB RAM, Seagate 2 TB 7200 RPM SATA, CentOS 6.4.

Doğal olarak, en büyük sıçrama biz alfa 22 geldi geçişi veritabanına dayalı bir cüzdan. Ancak bu sürümden bu yana MultiChain'in hızını neredeyse iki katına çıkardık. Bitcoin'in saniyede 4 işlem sınırının belirli ağ parametrelerinden kaynaklandığını ve genel olarak blok zincirleriyle bir ilişkisi olmadığını umuyoruz.

Elbette, performans optimizasyonu hiç bitmeyen bir görevdir ve MultiChain'in bir cihazda 10,000 tx / sn'ye ulaşamamasının bir nedeni yoktur. 16 çekirdekli işlemci uygun mimari değişikliklerle. Bununla birlikte, kullanıcılarımız ve iş ortaklarımızla yapılan görüşmelere dayanarak, birkaç kişinin önümüzdeki birkaç yıl için 1,000 tx / sn'den daha fazlasına ihtiyaç duyması bekleniyor. Bu nedenle, geliştirme çabalarımızı MultiChain 2.0 konusuna hoş bir şekilde getiren yeni özellikler üzerine odaklıyoruz.

MultiChain 2.0'a genel bakış

Topluluk (açık kaynak) ve Kurumsal (ticari) olmak üzere MultiChain 2.0 sürümü ilk iki sürüm olacak. Burada ücretsiz Topluluk sürümüne odaklanacağım, çünkü yalnızca MultiChain Enterprise'ın ayrıntılarını ortaklarımız. Her durumda, Topluluk ve Kurumsal sürümler son derece uyumlu olacaktır, çünkü: (a) Topluluk sürümü üzerinde oluşturulan uygulamalar MultiChain Enterprise'da değişiklik yapılmadan çalışacak ve (b) her iki sürüm de birbiriyle bağlantı kurabilecek ve işlem yapabilecektir aynı zincirde.

MultiChain 2.0'ın her iki sürümünde gelişmiş işlevselliğin üç temel alanı şöyle olacaktır:

  • JSON belgeleri dahil akışlar için daha zengin veri modeli.
  • Zincir üzerinde doğrulama için özel programlanabilir işlem filtreleri.
  • Bir blockchain protokolü ve parametrelerinin kesintisiz güncellenmesi.

Bunların her birini ayrıntılı olarak tartışalım.

Akışlar için daha zengin veri modeli

MultiChain akışları Eylül 2016'da tanıtıldı ve son derece popüler olduğunu kanıtladı. Tarif edildiği gibi Bu mesaj, akışlar bir blockchain'de genel amaçlı veri depolama, indeksleme ve alma için basit ve doğal bir soyutlama sağlar. Bir MultiChain blok zinciri, her biri yazma için herkese açık olabilecek veya yalnızca belirli adreslerden yazılabilen herhangi bir sayıda adlandırılmış akış içerebilir.

MultiChain 1.0'da her akış öğesinde bir veya daha fazla yayıncı (imzalayan), isteğe bağlı bir anahtar, 64 MB'ye kadar ikili veri yükü ve bir zaman damgası (gömülü olduğu bloktan türetilir) bulunur. Her düğüm hangi akışlara abone olacağına özgürce karar verebilir veya tüm akışlara otomatik olarak abone olabilir. Bir düğüm bir akışa abone olursa, yayın akışının, anahtarın, bloğun, zaman damgasının veya konumun verimli bir şekilde alınmasına olanak tanıyarak bu akışın içeriğini gerçek zamanlı olarak dizine ekler.

MultiChain 2.0, bu akış işlevselliğini çeşitli şekillerde zenginleştirecektir:

  • JSON öğeleri. İkili verilerin yanı sıra akış öğeleri, blockchain'de depolanan yapılandırılmış JSON nesnelerini destekleyecektir. UBJSON. MultiChain API zaten JSON'u kullandığından, bu JSON nesneleri yazılabilir ve doğal ve açık bir şekilde okunabilir olacaktır.
  • Birden fazla tuş. Akış öğeleri, birden çok anahtarı destekleyecek ve tek bir veri parçasını kullanarak almak için birden çok şekilde dizine eklenebilecektir. liststreamkeyitems. MultiChain içine ne kadar veritabanı işlevselliği ekleneceğini sürekli olarak değerlendiriyoruz ve sürüm 2.0'daki JSON akış öğeleri içindeki alt öğelerin dizine eklenmesini desteklemeyi beklemiyoruz. Akış öğesi başına birden fazla tuşa izin vermek makul bir çözüm sağlar.
  • Birden çok öğenin atomik yazıları. MultiChain 1.0, tek bir işlemin birden fazla akışa yazmasına izin verir, ancak aynı akışa birden çok öğe yazmaz. MultiChain 2.0 bu kısıtlamayı kaldıracaktır.
  • JSON birleşmesi. Herhangi bir sıralı JSON nesnesi listesi, birleştirilmiş bir nesne oluşturmak için doğal olarak düzleştirilebilir veya özetlenebilir. Birleştirilen nesne, tek tek nesnelerde görünen tüm anahtarları içerir; burada her bir tuşa karşılık gelen değer, o anahtarın göründüğü son nesneden alınır. İsterseniz, birleştirilmiş nesne, sütunları ilk nesne tarafından tanımlanan ve sonraki nesneler tarafından genişletilen veya güncellenen bir veritabanı satırının son durumudur. MultiChain 2.0, belirli bir anahtar veya yayıncıya sahip bir akıştaki JSON öğeleri için birleştirilmiş nesneyi kolayca ve hızlı bir şekilde almak için API'ler ekleyecektir.

Bu özellikler, geliştiricilerin şu anda akışları kullandıkları yaygın yollardan türetilmiştir. Başka bir deyişle, uygulama düzeyinde MultiChain üzerine birçok insanın neler inşa ettiğini gözlemliyoruz ve bu işlevselliği MultiChain'e taşıyoruz - uygulamaya devam etmek istediğimiz bir model. Akış öğeleri artık tür bilgisi içereceğine göre, gelecekte XML gibi diğer veri biçimlerini desteklemek için kolayca genişletilebilir. HDF5 ve MIMEtanımlanmış içerik. Zincir üzerinde şeffaf sıkıştırma ve şifreleme olanaklarından bahsetmiyorum bile.

MultiChain 2.0, MultiChain 1.0'da uygulanan salt metin anahtar / değer çiftleri yerine, ham işlem meta verileri (yani akış öğeleri değil) için JSON nesnelerini ve varlık verme ve akış oluşturma olayları için meta verileri de destekleyecektir. listassets API, bir varlığın tüm yayınlama olaylarında JSON birleştirmesini sunarak her bir yayının meta verilerinin varlığın nihai açıklamasını etkin bir şekilde güncelleyebilmesini sağlar.

Özel işlem filtreleri

MultiChain'e nasıl programlanabilir kurallar ekleneceğini çok düşündük. Ethereum'un “akıllı sözleşme” paradigması popüler olsa da, yüksek verimli izin verilen blok zincirleri için bir dizi önemli eksikliğe sahiptir. İlk olarak, akıllı sözleşmeler, blockchain'in tüm eyaletinde küresel bir bağımlılık yaratır ve bu da eşzamanlılığı ve performansı büyük ölçüde bozar. İkincisi, akıllı sözleşmeler yanlış işlemlerin bir blockchain'e gömülmesini durduramaz, ancak bu işlemlerin blockchain veritabanının durumunu güncellemesini önler. Uzun vadede, Ethereum uyumlu bir sanal makinenin MultiChain içinde yüksek seviye bir soyutlama olarak sunulmasını beklerken, bunun düşük seviyeli doğrulama için doğru çözüm olduğunu düşünmüyoruz.

MultiChain 2.0, herhangi bir küresel duruma referans vermeden tek tek işlemleri doğrulayan işlem filtreleri adı verilen farklı bir paradigma tanıtacaktır. Filtrelerin Javascript ile yazılmasını ve yerleşik bir çalışma zamanı motorunda yürütülmesini bekliyoruz. v8Google’da kullanılan krom tarayıcı ve node.js platformudur. Tabii ki, filtre kodunun bir blok zincirindeki her düğümde aynı şekilde çalıştığından emin olmalıyız. determinizm kaynakları saati okuma, rasgele sayılar kullanma, ağa veya diske erişme veya ana makine sunucusunun mimarisine bağlı matematik işlemleri gerçekleştirme gibi. Deterministik bir Javascript çalışma zamanı ortamı oluşturmak zor bir iştir, ancak (çok fazla vermeden) gelecekte diğer birçok MultiChain özelliği için yararlı olacağına inanıyoruz.

Filtrelere, çıktısı gibi yapılandırılmış tek bir işlemi açıklayan bir JSON nesnesi geçirilir decoderawtransaction ancak fazladan alanlarla. Örneğin, JSON'daki her işlem girdisi harcadığı önceki işlem çıktısını açıklayan bir yapı içerecek ve her adrese o anda o adres tarafından tutulan izinlerin bir listesi eşlik edecektir. Bir filtrenin işi, işlemin kabul edilebilir olup olmadığını gösteren bir Boolean değeri döndürmek ve değilse, nedenini açıklayan bir metin hatası sağlamaktır. MultiChain'in API'sinde filtre oluşturma, önceki veya yeni işlemlerde test etme ve yönetici konsensüsüne tabi olarak etkinleştirme komutları bulunur.

Akıllı sözleşmelerin aksine, bir filtrenin kodunda bir hata bulunursa, kolayca yeni bir sürümle değiştirilebilir. Bununla birlikte, tüm Turing-complete kodu gibi, filtreler hala sonsuz bir döngüye girme riskini taşır. Bu sorun iki şekilde hafifletilecektir:

  • Filtreler yalnızca fikir birliğine tabi olarak zincir yöneticileri tarafından kurulabilir ve etkinleştirilebilir. Bu, her yöneticiye, etkinleştirilmesi için oy vermeden önce bir filtrenin kodunu derinlemesine inceleme fırsatı verir.
  • İyi davranan tüm düğümler, etkin filtreleri eş düğümlerine yönlendirmeden önce yeni işlemleri doğrular. Sonuç olarak, bir işlem sonsuz bir döngüye bir filtre gönderirse, işlemin onu oluşturan düğümün ötesine yayılmaması gerekir.

Filtreler için popüler bir uygulamanın akış öğelerini doğrulamasını bekliyoruz. Örneğin, bir filtre, bir akışın JSON öğelerindeki belirli alanların belirli bir aralıktaki sayılar içermesini sağlayabilir. MultiChain 1.0'da, bu tür doğrulama, akış öğeleri (kaynak güvenilirse) yazılırken veya okunurken uygulama düzeyinde yapılmalıdır. Buna karşılık, MultiChain 2.0, bu kuralların blok zincirinin içine gömülmesini sağlayacaktır. kısıtlamaları kontrol et ilişkisel bir veritabanında.

MultiChain 2.0, filtreleri daha da güçlü hale getirmek için iki ek özellik içerir. İlk olarak, MultiChain tarafından tanımlanan sekiz izinle birlikte mevcut olan kullanıcı tanımlı izinleri tanıtacaktır. Normal izinlerde olduğu gibi, bunlar yöneticiler tarafından (ve bazı durumlarda, activate ayrıcalıklar) ve bir filtreye geçirilen JSON nesnesindeki adreslerin yanında yer alır. Örneğin, bir filtre yalnızca belirli bir kullanıcı tanımlı izne sahip adreslerin belirli bir veri türünü bir akışa yazmasını veya belirli bir öğede belirli bir eşiğin üzerinde işlem yapabilmesini sağlayabilir.

İkincisi, MultiChain 2.0, normal işlem çıktılarında özel (ikili veya JSON) meta verileri destekleyecektir. Bu, herhangi bir çıktının içindeki adrese “sahip olunan” genel bir veritabanı satırı gibi davranmasını sağlar. Filtreler, bir işlemin harcanan ve oluşturulan çıktılarındaki tüm meta verileri JSON açıklamasının bir parçası olarak görür. Sonuç olarak, MultiChain, bir işlemin geçerliliğinin oluşturduğu ve sildiği satırların özelleştirilebilir bir işlevi tarafından belirlendiği evrensel bir paylaşılan veritabanı motoru olacaktır. (Bu biraz soyut görünüyorsa, bazı somut örnekler vereceğimizden emin olacağız.)

Blockchain güncellemesi

Blok zincirleri uzun yıllar çalışacak şekilde tasarlandığından, özelliklerinin zamanla değiştirilmesi gerekebilir. MultiChain'in mevcut sürümü, izin değişikliklerinin (yöneticiler ve madenciler arasında oy birliği ile), yeni varlıkların ve akışların yaratılmasına ve düğümlerin ağa sorunsuz bir şekilde eklenmesine veya kaldırılmasına izin veren oldukça esnek bir derece sağlıyor. Bununla birlikte, MultiChain 1.0'da bir blockchain'in temel parametrelermaksimum blok boyutu ve hedef onay zamanı gibi, zincir oluşturulduğunda sabitlenir ve daha sonra değiştirilemez.

MultiChain 2.0, bir blok zincirini güncelleme yeteneğini ekleyerek zincir çalışmaya devam ederken parametrelerinin çoğunun (ancak hepsinin değil) değiştirilmesine izin verecektir. Diğer önemli işlemler gibi, bir blockchain'in güncellenmesi, bu seviyenin kendisinin değiştirilebilecek bir parametre olduğu, özelleştirilebilir bir fikir birliği seviyesi gerektirecektir. Güncellemeler belirli bir bloktan yürürlüğe girecek ve daha sonra bir sonraki güncellemeye kadar sonraki tüm bloklara uygulanacaktır.

Güncellenebilecek blockchain parametreleri şunları içerecektir:

  • Protokol sürümü. Bu, bir MultiChain sürümü ile oluşturulan bir blockchain'in JSON akış öğeleri veya işlem filtreleri gibi yeni bir sürümdeki özellikleri desteklemek için yükseltilmesini sağlayacaktır. Aslında, protokol sürümü 10008 MultiChain 1.0 alfa 29'da (ve beta sürümünde kullanılmış) bu tür bir yükseltme için belgelenmemiş destekle geleceğe hazırdır. MultiChain 1.0 blok zinciri 2.0 protokolüne yükseltildiğinde, burada açıklanan diğer parametre değişikliklerine de erişecektir.
  • Blockchain ölçeklendirme. Popüler hale gelen blok zincirleri, hedef onay süreleri veya maksimum işlem ve blok boyutları için ayarlanan başlangıç ​​değerlerini aşabilir. MultiChain 2.0, bu değerlerin gerektiğinde artırılmasına veya azaltılmasına izin verecektir.
  • İzin verme modeli. MultiChain 2.0, izin verme ve yönetişim ile ilgili birçok parametrenin güncellenmesine izin verecektir, örneğin: (a) anyone-can-* bir blockchain'in açık veya kapalı yollarını kontrol eden parametreler, (b) admin-consensus-* belirli işlemler için gereken yönetici konsensüs düzeylerini belirleyen parametreler ve (c) mining-diversity round-robin konsensüs algoritmasının katılığını kontrol eden parametre.

Bu güncelleme işlevselliği uygulandıktan sonra, MultiChain'de oluşturulan bir blockchain'in yıllarca veya daha uzun süre çalışmamasının bir nedeni olmamalıdır.

İleriye baktığımızda

MultiChain 2.0 üzerinde çalışmaya başladık ve bu yol haritasında yayınlamayı dört gözle bekliyoruz. Şüphesiz diğer geliştirmeler de dahil edilecektir. MultiChain 1.0'da olduğu gibi, geliştiricilerin yeni özellikleri uygulandıkları gibi kullanabilecekleri ve öğrenebilecekleri (ve tabii ki herhangi bir sorunu veya eksiklikleri bildirebilecekleri) yol boyunca alfa sürümlerine sahip olacağız. Doğal olarak, bu süre boyunca sürüm 1.0'ı korumaya devam ederek, görünen hataları düzeltiriz.

Michael Rozantsev liderliğindeki geliştirme ekibimize mükemmellik ve sıkı çalışmalarından dolayı teşekkür ederek bitirmek istiyorum. MultiChain'i, kod kalitesi ve testinin her şeyden önce önemli olduğu basit bir yazılım mühendisliği projesi olarak görüyoruz. Karmaşık bir ürün vizyonunu böylesine olağanüstü verimlilik ve hız ile istikrarlı bir çalışma yazılımına dönüştürebilen insanlarla çalışmak benim ayrıcalığım.

Lütfen herhangi bir yorum gönderin LinkedIn'de.

Zaman Damgası:

Den fazla Çoklu zincir