Açıklama: Aşağıda Xunlei Company tarafından yazılmış "Xunlei Global Blockchain Uygulama Rekabeti Geliştirme Rehberi" belgesi yer almaktadır; neden Xunlei Company tarafından yazılmış belge blokzincir geliştirme rehberi olarak kullanılıyor?
Thunder aslında Ethereum akıllı sözleşmeleriyle kurulmuş özel bir zincirdir, teknoloji çok olgunlaşmıştır ve blokzincir teknolojisi üzerine derinlemesine araştırmalar yapmaktadır; bu da blokzincir gelişimimiz için rehber bir öneme sahiptir.
"Bir örnekten çıkarım çıkarmak" dediği gibi, Xunlei sayesinde Xunlei tarafından yazılmış blokzincir geliştirme rehberi belgesini okuyarak başka blok zinciri uygulamaları geliştirebiliriz.
Belgede şöyle yer alıyor:
1/16 Thunder Global Blockchain Uygulama Yarışması Geliştirme Rehberi Hat önerisine sözleşme geliştirme 1. Akıllı sözleşme yazmadan önce, blokzincir temelleri hakkında belirli bir anlayışa sahip olmanız gerekir (ek: Ethereum Genel Bakışı). 2. Solidity dilini (solidity API) öğrenin. 3. Trüf çerçevesini sağlamlık öğrenimiyle birlikte kullanmayı öğrenin. Trüf kullanımı yerel olarak Bir blokzincir ortamında sözleşmeler yürütün. 4. Zeppelin-solidty'yi (güvenliğe adanmış standart bir sözleşme çerçevesi) öğrenin ve kullanın, entegrasyon tasarlayın Sözleşme modu, ayrı veri ve mantıksal sözleşmeler, izin güvenliğini kontrol etmek ve yükseltme mantığını göz önünde bulundurmak. 5. Sözleşmelerle web3.js kullanarak etkileşime girmeyi öğrenin. Metamask eklentisini ve web servisini blokzincir ile kullanın Etkileşim. 6. Forum Soru-Cevap: http://wanke.xunlei.com/forum.php? mod=forumdisplay&fid=53 (Karşılaştığınız herhangi bir sorun bu forumda geri alınabilir.) 3 iş günü içinde size cevap vereceğiz) Temel kavramlar Blokzincir Blockchain, merkezi olmayan dağıtık hesaplama sistemidir ve bunun ana özelliği verilerin kalıcı olarak değişmezliğidir. Oluşturulamaz ve yüksek düzeyde açıklık, şeffaflık ve güven içerir. Temel teknolojiler arasında Bizans Hata Toleransı Uzlaşması Algoritması (PBFT) yer alır. şifreleme teknolojisi, P2P teknolojisi vb. İşlem Blockchain, küresel paylaşılan bir işlem veritabanı sistemi olarak anlaşılabilir. İzni olan herhangi bir yazılım bunu okuyabilir Blokzincir ağından veri alın. Blok ağındaki veri değiştirilmesi gerektiğinde bir örtü başlatılmalıdır Blok düğümler tarafından kabul edilen talepler vardır ve bunlar sistemde toplu olarak işlem olarak adlandırılır. İşlemler işlemlidir ve blokzincire gönderilir, ya hepsi değil ya da tamamı gerçekleştirilir. Bir ticaret yöneticisi Satır tamamlandıktan sonra, kalıcı olarak blokzincire kaydedilir ve değiştirilemez veya tekrar çalıştırılamaz. İşlemler sistemdeki hesap tarafından başlatılır ve imzalanır; kriptografi yoluyla işlemler yalnızca özel anahtarla tutulabilir 2/16 Birisi başlatır, diğerleri değiştirip dövmez. Bu, işlemin özgünlüğünü ve güvenliğini garanti eder. Hesap Blokzincir sisteminde iki tür hesap vardır; biri dış, diğeri ise sözleşme hesabıdır. Dış hesaba sahip Kendi benzersiz halka açık ve özel anahtarlarınız ve hesabınız bu anahtar çifti tarafından kontrol ediliyor. Vadeli hesapların kendi kodu vardır ve hesap Kendi kod kontrolü. Hesap bir adresle tanımlanır, adres uzunluğu aynıdır ve iki hesap türü arasında fark yoktur. Dış hesabın adresi şu şekilde sağlanmıştır Açık anahtar oluşturulur ve sözleşme adresi, sözleşme hesabının oluşturulduğu adresi ve sözleşme hesabını oluşturan işlem sayısını kullanır (nonce) üretilir. Sözleşmeler resmi adres tarafından dağıtılır ve sıradan hesaplar doğrudan sözleşmeleri yayımlayamaz. Kullanıcının kombinasyonu Resmi olarak incelenip Xunlei tarafından yayımlanmalıdır. Sistem içinde iki hesap türü arasında hiçbir fark yoktur. Her hesabın sistem içinde 256 bit var 256 bite kadar anahtar-değer depolama yapısına depolama denir. Her hesabın bir bakiyesi vardır Wei'de bakiye, sayısal değere sahip bir işlemin hesaba gönderilmesiyle değiştirilebilir. Sözleşme Sözleşme, kodu depolayan bir blokzincir hesabıdır ve sözleşme çağrısı, işlemlerin bu hesaba gönderilmesiyle yapılır. Ne zaman Daha önce daha popüler olan sözleşmeli programlama dili Solidity idi. Şu anda yarışma sadece Solidity dilinde sözleşme başvurularını desteklemektedir. Sözleşme iki bölüme ayrılır: veri depolama ve fonksiyon, veri sözleşmenin durumunu saklar, fonksiyon ise sözleşmedir Harici arayüz, fonksiyonları çağırarak veri sorgusu ve durum değişikliğini gerçekleştirir. Bir programlama dili üzerinden bir sözleşme yaz ve derlemeden sonra EVM bayt kodunu al. Bir işlemi sözleşme hesabına göndererek, gerçek Mevcut sözleşme görüşmesi. Gaz Gaz, blokzincirin ödeme birimidir ve bir işlem oluşturulduğunda belirli bir gaz miktarı belirlenir. Lord İşlemdeki hesaplama miktarını kısıtlamak ve işlemin yürütülmesi için bir ücret ödemek ise. İşlemin yürütülmesi sırasında, Gas EVM tarafından belirlenen bir kural tarafından tüketilecek. Gaz fiyatı, işlem oluşturucu tarafından belirlenen bir değer ve işlemi gerçekleştirmek için gereken ücret sayısıdır Miktar Gas_Price*Gaz. İşlem Bitiyor Eğer bir gaz kalmışsa, kalan kısım yaratıcı öneriye geri verilir kullanıcılar. Gaz yetersizse, işlem yürütülmesi başarısız olur ve işlem sistem güvenliği için sel saldırılarını önlemez Taşıma ücreti iade edilmez. En küçük benzin fiyat birimi wei'dir, 10^18 wei = 1 zincir gram. Katlık 3/16 Solidity, akıllı sözleşmeler için tasarlanmış yüksek seviyeli bir programlama dilidir ve EVM (Ethereum) üzerinde çalışır. Virtual Machine)。 Dil tasarım uygulaması C++/Python/JavaScript'ten etkilenmiştir. Solidity, kalıtım, polimorfizm, arayüzler, soyutlama, kütüphaneler, özel veri tipleri ve daha fazlasını destekleyen güçlü tipli bir dildir Seks. Solidity, assembly komut programlamasını destekler ve kod bayt koduna derlenir ve EVM üzerinde çalışır. Katlık En popüler akıllı sözleşme geliştirme dili, Thunder Sözleşme Platformu tarafından önerilen ve desteklenen dildir. Notlar: 1. Ethereum Sanal Makinesi, akıllı sözleşmeler için çalışma zamanı ortamı sağlayan Ethereum üzerinde bir sanal ortamdır Simüle edilmiş bir makine. Yarışma platformu EVM ile uyumludur, ancak resmi platformun kullanım kısıtlamalarına uymalıdır. 2. Hesap türleri harici hesaplar (sıradan ticaret hesap adresleri) ve vadeli işlemler hesaplarına ayrılır. Bir sözleşme oluşturun Bu, bir işlemin hedef hesap adresi 0'a gönderilme sürecidir. 3. Yarışma, akıllıca kombinasyonlar geliştirmek için trüf (trüf v4.1.5 katlık v0.4.21) kullanımını belirtir Platform, katılımcı tarafından sunulan belgenin kaynak koduna göre bayt kodu doğrulayacaktır. , Trüf ile sözleşmeler geliştirin Akıllı sözleşme sağlamlığı geliştirme çerçevesi truffle. Tam bir geliştirme, hata ayıklama ve düzenleme seti sunar Yerel ortamların çevrilisi, dağıtımı ve testi. Bazı şablonlara göre şablon komutunu hızlıca açabilirsiniz Karşılık gelen sözleşme yapısını oluşturun. Trüf Kuru NPM i -G trüf [root@opennode sandai]# trüf versiyonu Truffle v4.1.5 (çekirdek: 4.1.5) Solidity v0.4.21 (solc-js) Başla 1. Sözleşme projesini trüf ile başlatın 4/16 mkdir simple-storage CD basit depolama trüf girişi 2. Yeni bir sözleşme dosyası oluşturun: Trüf kullanarak sözleşme oluşturabilirsiniz Ayrıca doğrudan SimpleStorage komut satırından yeni bir dosya oluşturabilirsiniz contract/SimpleStorage.sol SimpleStorage.sol pragma katlığı ^0.4.21; contract SimpleStorage { uint myVariable; function set(uint x) public { myVariable = x;
} fonksiyon get() sabit kamu getirileri (uint) { myVariable'i geri döndür;
}
} 3. Göç betikleri ekleyin: Truffle oluşturma göçünü kullanabilirsiniz 2_deploy_contract Komut satırı yöntemi eklenir ve doğrudan yeni bir dosya oluşturabilirsiniz Göçler/2_deploy_contract.js 2_deploy_contract.js; trüf göçünün uygulanması Satır sırası dosya adıyla ilgilidir, bu yüzden birden fazla dağıtım betikinin sırayla adlandırılması gerekir var SimpleStorage = artifacts.require("SimpleStorage"); module.exports = function(deployer) { deployer.deploy (SimpleStorage); 5/16 }; 4. Trüf derleme sözleşmesini çalıştırın, derlenen sözleşme derleme klasöründe bulunuyor. sözleşme başına Dağıtım için gerekli bayt kodu, abiCode vb. içeren karşılık gelen bir json dosyası vardır 5. Trüf dağıtım sözleşmesini ve blokzincirle etkileşim için RPC bağlantısını kurmak truffle.js düzenleyin. [root@localhost opennode]# vi truffle.js module.exports = {
networks: {
development: {
host: "127.0.0.1",
port: 8545, network_id: "*"
}
} }; 6. Konsolda Truffle'ın varsayılan blokzincir ortamını açın. Trüf gelişimi Trüf Gelişimi başladı
http://127.0.0.1:9545/
Accounts: (0) 0x627306090abab3a6e1400e9345bc60c78a8bef57 (1) 0xf17f52151ebef6c7334fad080c5704d77216b732 (2) 0xc5fdf4076b8f3a5357c5e395ab970b5b54098fef (3) 0x821aea9a577a9b44299b9c15c88cf3087f3b5544 (4) 0x0d1d4e623d10f9fba5db95830f7d3839406c6af2 (5) 0x2932b7a2355d6fecc4b5c0b6bd44cc31df247a2e (6) 0x2191ef87e392377ec08e7c08eb105ef5448eced5 (7) 0x0f4f2ac550a1b4e2280d04c21cea7ebd822934b5 (8) 0x6330a553fc93768f612722bb8c2ec78ac90b3bbc (9) 0x5aeda56215b167893e80b4fe645ba6d5bab767de 6/16 Özel Anahtarlar: (0) c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e 4a9ec0a0f44dc0d3 (1) ae6ae8e5ccbfb04590405997ee2d52d2b330726137b87505 3c36d94e974d162f (2) 0dbbe8e4ae425a6d2687f1a7e3ba17bc98c673636790f1b8 ad91193c05875ef1 (3) c88b703fb08cbea894b6aeff5a544fb92e78a18e19814cd8 5da83b71f772aa6c (4) 388c684f0ba1ef5017716adb5d21a053ea8e90277d086833 7519f97bede61418 (5) 659cbb0e2411a44db63778987b1e22153c086a95eb6b18bd f89de078917abc63 (6) 82d052c865f5763aad42add438569276c00d3d88a2d062d3 6b2bae914d58b8c8 (7) aa3680d5d48a8283413f7a108367c7299ca73f553735860a 87b08f39395618b7 (8) 0f62d96d6675f32685bbdb8ac13cda7c23436f63efbb9d07 700d8669ff12b7c4 (9) 8d5366123cb560bb606379f90a0bfd4769eecc0557f1b362 dcae9012b548b1e5
Mnemonic: candy maple cake sugar pudding cream bal zengin, yumuşak kırıntı tatlı ikram ⚠ Önemli ⚠ : Bu hatırlama için oluşturuldu Truffle tarafından. Güvenli değil. Üretimde kullanmadığınızdan emin olun 7/16 blokzincirler, aksi takdirde fon kaybetme riski taşır. trüf (geliştirme)> Bu, Truffle'ın sözleşmeleri yürütmesi için yerel bir blok zinciri ortamı sağlar ve varsayılan olarak 10 hesap oluşturulur ve her biri oluşturulur Başlangıç hesap bakiyesi 100 ether. Ayrıca Ganache tarafından sağlanan grafik arayüzü de kullanabilirsiniz , yapılandırmanın bağlandığı portu değiştirmeniz gerekiyor. 7. Trüf taşıma portu dağıtım sözleşmesini yeni bir konsolda (veya truffle'da) yürütün Konsolu dönüştürerek göç etmesini gerçekleştirin). 8. Trüf geliştirme ile sözleşme kodunu test edin. SimpleStorage.deployed().then(function(instance ){return instance.get.call(); }).then(function(value) {return value.toNumber()}) // 0 SimpleStorage.deployed().then(function(instance ){return instance.set(100); }); Çıkış işlem bilgisi SimpleStorage.deployed().then(function(instance ){return instance.get.call(); }).then(function(value) {return value.toNumber()}); // 100 9. Sözleşmeyi trüf testi ile test edin, yeni bir veya Doğrudan yeni bir dosya testi/SimpleStorage.test.js oluşturun. const SimpleStorage = artfacts.require('SimpleStorage'); contract('SimpleStorage', function(accounts) { 8/16 it("doğruyu iddia etmeli", fonksiyon(yapıldı)
{ var simpleStorage = SimpleStorage.deployed(); var örneği; simpleStorage.then(res => { instance = çözünürlük; return instance.get() }).then(value => { assert.equal('0', value.toNumber(), 'eşit 0' değildir) }).then(() => { instance.set(100) }).then(() => { return instance.get() }).then(value => { assert.equal('100', value.toNumber(), '100'e eşit değil') }) done(); }); }); Yeni konsolda, trüf testi ./test/SimpleStorage.test.js girin. 10. Remix ile test sözleşmeleri Trüf kullanılarak hazırlanmış put sözleşmeleri hızlı şekilde değiştirilebilir Önerilen sözleşmenin dağıtımı ve yürürlüğe koyulması. Remix, sözleşmeler için bir derleme çalışma ortamı sağlar ve sözleşme tarafından kontrol edilebilir Tablo, sözleşmenin her işleminin giriş ve çıkış parametreleri, imzalanmış yöntem verileri gibi ayrıntılı bilgilerini görebilir, İşlem hash ve diğer bilgiler. Hata ayıklama desteği. 1. Sözleşme derleme detaylarını görmek için derleme detaylarını kullanın. Bayt kodu, abi dahil. ve Drip Ah yönteminin hızlı web3.js kullanımını kullandı. 9/16 2. Bir sözleşme oluşturmak için run kullanın ve konsol sözleşmeyi oluşturan işlemi görebilir. Etkileşimli sözleşme uygulamaları oluşturmak için Truffle Unbox'u kullanın Yukarıdaki adımlar, temel truffle init kullanılarak derlenebilen, dağıtılabilen ve hata ayıklanabilen bir sözleşme ortamı oluşturur. Aşağıda Truffle Unbox ile yeni bir proje oluşturun, bu da bize bir trüf projesi şablonu sunuyor, içeride Bazı sözleşme uygulama etkileşim ortamı bağımlılıkları. Trüf Kutuları'ndaki resmi teklifleri inceleyebilirsiniz Şablon kutular. Aşağıda react şablonu yer almaktadır. 1. Yeni proje truf-react mkdir truf-react 10/16 CD truf-react Trüf kutusu React Açılma süreci, çıkarma şablonunu indirir ve npm kurulumu gibi işlemleri gerçekleştirir. 2. Projenin truffle.js yapılandırın module.exports = { Bkz. <http://truffleframework.com/docs/advanced/confi Guration> Trüf Yemeğinizi Özelleştirmek Konfigürasyon!
networks: {
development: {
host: '127.0.0.1',
port: '9545', network_id: '*' // Maç herhangi bir ağ kimliği
}
} }; 3. Trüf geliştirmeye başlayın 4. SRC/App.js Değişikliği React, { Component } 'react' üzerinden import edin SimpleStorageContract'ı şu adresten aktarabilirsiniz '.. /inşa/sözleşmeler/SimpleStorage.json' getWeb3'ü './utils/getWeb3' adresinden import et './css/oswald.css' './css/open-sans.css' './css/pure-min.css' 11/16 './App.css' const kontrat = vaadi ('trüf sözleşmesi') const simpleStorage = sözleşme (SimpleStorageContract) class App, Bileşeni genişletir { constructor(props) { süper(aksesuarlar) this.state = {
storageValue: 0,
web3: null,
inputValue: 0,
address: null
} this.changeValueHandle = this.changeValueHandle.bind(this) this.setHandle = this.setHandle.bind(this)
} componentWillMount() { Ağ sağlayıcı ve web3 alın örneğin. Daha fazla bilgi için utils/getWeb3'e bakınız Bilgi. getWeb3 .then(results => { this.setState({
web3: results.web3 }) Sözleşme başlatma Web3 sunulduğunda. 12/16 this.instantiateContract() }) .catch(() => { console.log('Hata Web3'ü bulmak.') })
} instantiateContract() {
/* * AKILLI SÖZLEŞME ÖRNEĞI
* * Normalde bu fonksiyonlar bir bağlamda çağrılacak * Devlet yönetim kütüphanesi, ancak kolaylık için buraya yerleştirdim. */ this.simpleStorageSet(5)
} changeValueHandle(event) { this.setState({
inputValue: Number(event.target.value) })
} setHandle() { this.simpleStorageSet(this.state.inputValue)
} simpleStorageSet(x) { simpleStorage.setProvider(this.state.web3.curren tProvider) Bunu sonra için ilan ediyorum, bu yüzden 13/16 SimpleStorage üzerinde fonksiyonları zincirleyebiliriz. var simpleStorageInstance Hesap edin. this.state.web3.eth.getAccounts((hata, hesaplar) => { simpleStorage.deployed().then((instance) => { simpleStorageInstance = örnek this.setState({
address: instance.address }) Mağazalar verilen değer, varsayılan olarak 5. Dönüş simpleStorageInstance.set(x, {from: hesaplar[0]}) }).then((result) => { Değeri alın Sözleşmeden işe yaradığını kanıtlamak için. Dönüş simpleStorageInstance.get.call(accounts[0]) }).then((result) => { Güncelleme durumu sonuç olarak. Dönüş this.setState({ storageValue: result.c[0] }) }) })
} render() { return ( <div className="App"> <nav className="navbar saf-menü saf-menü yatay sayılır"> 14/16 <a href="#" className="saf-menü-başlığı puremenu-link">Trüf Kutu</a> </nav> <main className="container"> <div className="pure-g"> <div className="pure-u-1-1"> <h1>Hazır!</h1> <p>Trüf Kutusu kuruldu ve hazır.</p> <h2>Akıllı Sözleşme Örneği</h2> <p>Sözleşmelerin derlenip taşındı aşağıda başarıyla, depolanmış bir değer gösterilecektir. 5 (varsayılan olarak).</p> <p>Çevrimiçi depolanan değeri değiştirmeyi deneyin <strong> 59</strong> App.js.</p> <p>Depolanan değer şudur: {this.state.storageValue}</p> <p>Konuşlandırılan sözleşme adresi: {this.state.address}</p> </div> <div> <input type="number" onChange= {this.changeValueHandle}/> <button onClick={this.setHandle}>set</button> 15/16 </div> </div> </main> </div> );
}
} Varsayılan Uygulamayı dışa aktar Sözleşme seti yönteminin çağrısı eklendi. Ve sözleşmenin adresini göster. 5. Yeni bir konsol açın ve npm çalıştırın başlat 6. Sözleşmenin sonuçlarını görmek için http://lcoalhost:3000 tarayıcınızda açın. 7. Sözleşme depolanan verilerin değerini set ve giriş kutuları aracılığıyla ayarlayın. 8. Trufle Development'a girin
//将xxx替换为address SimpleStorage.at('xxxx').then(res => {return res.get()}) BigNUmber türünün dönüş değeri elde edilir ve c dizisindeki değer ayarlanır depo edilmiş Data. Blokzincirle etkileşim kurmak için tarayıcı eklentisi Metamask kullanın Referans http://truffleframework.com/tutorials/pet-shop Katılımcılar belgeleri sunar Yarışma, akıllı sözleşmeler geliştirmek için Truffle kullanımını belirtir; Truffle sürümü v4.1.5 solcjs sürümüne karşılık gelir v0.4.21. Geliştiricilerin Truffle proje zip paketini ve ilgili proje tanıtım belgelerini göndermeleri gerekiyor; bunlar en azından şunları içerir Aşağıdakiler: 16/16 1. Truffle Project Temel Dosya Yapısı: Sözleşme Girişi Testi package.json truffle.js truffle-config.js README.md // Mühendislik dokümantasyonunun tanımı Zorunlu node_modules gerek yok 2. Tüm proje ürününün PPT veya PDF açıklamasını sağlamalı; ürün arka planı tanıtımı, ürün önemi dahil, Uygulama indirme adresi (isteğe bağlı), ürün kullanım süreci girişi. Sonraki üçüncü taraf geliştiriciler, yaklaşan ThunderChain rehber belgesine göre sözleşme uygulamaları ve Chain cepleri uygulayabilirler Etkileşim. Dokümantasyon ve Araçlar katlık API'si Trüf dokümantasyonu Ganache, yerel blokzincir ortamı için grafiksel bir arayüz sağlar Zeppelin-Solidty, güvenli ve standartlaştırılmış bir sözleşme çerçevesine bağlı MetaMask, RPC bağlantıları aracılığıyla blokzincir ortamına sahip tarayıcılar için tarayıcı eklentileri sağlar web3.js blokzincirle etkileşim için Ethereum kapsüllü JS Son olarak, pdf belgesi indirilebilir:
Dev_Guide_zh.pdf
(373.55 KB, İndirme sayısı: 6)
|