Изявление: Следва документът "Xunlei Global Blockchain Application Development Development Guide", написан от Xunlei Company, защо да използвате документа, написан от Xunlei Company, като ръководство за разработка на блокчейн?
Thunder всъщност е частна верига, изградена с Ethereum смарт договори, технологията е много зряла и има задълбочени изследвания върху блокчейн технологията, които имат водещо значение за нашето блокчейн развитие.
Както казва поговорката "направи изводи от един пример", можем да разработим и други блокчейн приложения, като прочетем ръководството за развитие на блокчейн, написано от Xunlei, благодарение на Xunlei.
Документът гласи:
1/16 Ръководство за разработка на конкуренция за блокчейн приложения на Thunder Global Развитие на договора към препоръка на линията 1. Преди да пишете смарт договори, трябва да имате определено разбиране за основите на блокчейна (приложено: Ethereum Overview). 2. Научете езика за солидност (API). 3. Научете се да използвате рамката на трюфела в комбинация с учене на солидност. Използвайте трюфели за развитие локално Изпълнявайте договори в блокчейн среда. 4. Научете и използвайте Zeppelin-Solidty (стандартизирана договорна рамка, посветена на сигурността) и интеграция на дизайна Режим на договор, разделяне на данни и логически договори, контрол на сигурността на разрешенията и обмисляне на логиката за ъпгрейд. 5. Научете се да взаимодействате с договори, използвайки web3.js. Използвайте плъгина Metamask и уеб услугата с блокчейн Взаимодействие. 6. Въпроси и отговори във форума: http://wanke.xunlei.com/forum.php? mod=forumdisplay&fid=53 (Всички проблеми, които срещнете, могат да бъдат отстранени в този форум.) Ще ви отговорим в рамките на 3 работни дни) Основни концепции Блокчейн Блокчейн е децентрализирана разпределена изчислителна система, чиято основна характеристика е постоянната неизменност на данните, Тя не може да бъде създадена и притежава висока степен на откритост, прозрачност и доверие. Основните технологии включват Византийския консенсусен алгоритъм за устойчивост на грешки (PBFT), технология за криптиране, P2P технология и др. Транзакция Блокчейн може да се разбере като глобално споделена система за бази данни за транзакции. Всеки софтуер с разрешение може да го прочете Вземете данни от блокчейн мрежата. Когато е необходимо да се променят данните в блоковата мрежа, трябва да се инициира blanket Има заявки, приети от блокови възли, които колективно се наричат транзакции в системата. Транзакциите са транзакционни и се подават в блокчейна, като не всички или всички се изпълняват. Търговски изпълнителен директор След като редът бъде завършен, той се запазва постоянно в блокчейна и не може да бъде променян или изпълняван отново. Транзакциите се инициират и подписват от сметката в системата, а чрез криптография транзакциите могат да се съхраняват само с частния ключ 2/16 Някой го инициира, други не могат да модифицират и създават. Това гарантира автентичността и сигурността на транзакцията. Разказ В блокчейн системата има два типа сметки – едната е външна, а другата е договорна сметка. Външна сметка, собственост Вашите уникални публични и частни ключове, а акаунтът ви се контролира от тази двойка ключове. Фючърсните сметки имат собствен код, а акаунтът се създава от Собствен контрол на кода. Сметката се идентифицира с адрес, дължината на адреса е еднаква и няма разлика между двата типа акаунти. Адресът на външната сметка е предоставен от Публичният ключ се генерира, а адресът на договора използва адреса, от който е създаден договорният акаунт, и броя транзакции, които са създали договора (nonce) се произвежда. Договорите се разполагат по официалния адрес, а обикновените сметки не могат директно да публикуват договори. Комбинацията на потребителя Тя трябва да бъде официално прегледана и пусната от Сюнлей. В рамките на системата няма разлика между двата типа сметки. Всяка сметка има 256 бита в системата Структурата за съхранение с ключова стойност до 256 бита се нарича съхранение. Всяка сметка има баланс, наречен Балансът във Wei може да се промени чрез изпращане на транзакция с числова стойност към сметката. Договор Договорът е блокчейн акаунт, който съхранява кода, а договорното обаждане се извършва чрез изпращане на транзакции към тази сметка. Когато Предишният по-популярен договорен програмен език беше Solidity. В момента конкурсът поддържа само подаване на договори на езика Solidity. Договорът е разделен на две части – съхранение на данни и функция, данните съхраняват състоянието на договора, а функцията е договорът Външният интерфейс реализира заявки за данни и модификация на състоянието чрез извикване на функции. Напиши договор през програмен език и получи EVM байткода след компилация. Чрез изпращане на транзакция към договорната сметка, реално Текущо обаждане по договор. Газ Газът е платежната единица на блокчейна и когато се създаде транзакция, се посочва определено количество газ. Господарю Ако целта е да се ограничи размерът на изчисленията върху транзакцията и да се плати такса за изпълнението на транзакцията. По време на изпълнението на сделката, Газ Той ще бъде погълнат от правило, наложено от EVM. Цената на газа е стойност, определена от създателя на транзакцията и броя такси, необходими за изпълнение на транзакцията Сумата е Gas_Price*Газ. Край на транзакцията Ако остане бензин, останалата част се връща на предложението на създателя потребители. Ако газът е недостатъчен, изпълнението на транзакцията ще се провали и транзакцията ще не успее да предотврати flood атаки за сигурността на системата Таксата за обработка не се връща. Най-малката единица за цена на газа е wei, 10^18 wei = 1 верижен грам. Плътност 3/16 Solidity е програмен език на високо ниво, предназначен за смарт договори, работещ на EVM (Ethereum). Virtual Machine)。 Имплементацията на езиковия дизайн е повлияна от C++/Python/JavaScript. Solidity е силно типизиран език, който поддържа наследяване, полиморфизъм, интерфейси, абстракция, библиотеки, персонализирани типове данни и още Секс. Solidity поддържа програмиране на асемблерни инструкции, а кодът се компилира в байткод и се изпълнява на EVM. Солидността е Най-популярният език за разработка на смарт договори е и езикът, препоръчван и поддържан от платформата Thunder Contract. Бележки: 1. Ethereum Virtual Machine е виртуална среда на Ethereum, която предоставя среда за изпълнение на смарт договори Симулирана машина. Платформата за състезания е съвместима с EVM, но трябва да отговаря на ограниченията за използване на официалната платформа. 2. Типовете сметки се разделят на външни сметки (обикновени търговски адреси) и фючърсни сметки. Създай договор Това е процесът на изпращане на транзакция на адрес на дестинационната сметка 0. 3. Конкурсът уточнява използването на трюфел (трюфел v4.1.5 солидност v0.4.21) за разработване на интелигентни комбинации Платформата ще проверява байткода според изходния код на документа, представен от участника. , Разработване на договори с трюфели Стратегия за разработка на солидност на смарт договори. Той предоставя пълен набор от разработка, отстраняване на грешки и редактиране Превод, внедряване и тестване на локални среди. Можеш бързо да използваш командата за отваряне на шаблона въз основа на някои шаблони Генерирайте съответната структура на договора. Инсталиране на трюфели npm i -g трюфел [root@opennode сандай]# трюфелова версия Truffle v4.1.5 (ядро: 4.1.5) Solidity v0.4.21 (solc-js) Започнете 1. Инициализирайте договора с трюфел 4/16 mkdir simple-storage CD simple-storage Трюфел Инит 2. Създайте нов файл с договор: Можете да използвате трюфел, за да създадете договор Можете също да създадете нов файл директно от командния ред на SimpleStorage contract/SimpleStorage.sol SimpleStorage.sol прагма-солидност ^0.4.21; contract SimpleStorage { uint myVariable; function set(uint x) public { myVariable = x;
} функция get() постоянни публични връщания (уинт) { return myVariable;
}
} 3. Добавете скриптове за миграция: Можете да използвате truffle create migration 2_deploy_contract се добавя методът в командния ред и можеш директно да създадеш нов файл Миграции/2_deploy_contract.js 2_deploy_contract.js; изпълнението на трюфелната миграция Редът на редовете е свързан с името на файла, затова трябва да се именуват няколко скрипта за внедряване по ред var SimpleStorage = artifacts.require ("SimpleStorage"); module.exports = function(deployer) { deployer.deploy (SimpleStorage); 5/16 }; 4. Пуснете договора за компилиране на трюфели, а компилираният договор е в папката за сглобяване. на договор Има съответния json файл, съдържащ байткод, abiCode и др., необходим за внедряване 5. Редактирайте truffle.js, за да настроите договора за разгръщане на трюфела и RPC връзката да взаимодейства с блокчейна. [root@localhost opennode]# vi truffle.js module.exports = {
networks: {
development: {
host: "127.0.0.1",
port: 8545, network_id: "*"
}
} }; 6. Включете стандартната блокчейн среда на Truffle на конзолата. Трюфел развива Truffle Develop започва в
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 Частни ключове: (0) c87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e 4a9ec0a0f44dc0d3 (1) ae6ae8e5ccbfb04590405997ee2d52b30726137b87505 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 Медено, гладко, сладко сладко лакомство ⚠ Важно ⚠: Тази мнемоника е създадена за ти от Трюфъл. Не е сигурен. Уверете се, че не го използвате по време на продукция 7/16 Блокчейн, иначе рискувате да загубите средства. Трюфел(разработка)> Това предоставя нативна блокчейн среда, в която Truffle може да изпълнява договори, генерирайки по подразбиране 10 акаунта, всеки от които се генерира Първоначалният баланс по сметката е 100 етер. Можете също да използвате графичния интерфейс, предоставен от Ganache , трябва да модифицирате порта, към който е свързана конфигурацията. 7. Изпълнете договора за разполагане на truffle migrate порта в нова конзола (или в truffle Разработване на конзола за извършване на миграция). 8. Тествайте кода на договора с truffle develop. SimpleStorage.deployed().then(function(instance) ){return instance.get.call(); }).тогава(функция(стойност) {връщане на стойност.toNumber()}) // 0 SimpleStorage.deployed().then(function(instance) ){return instance.set(100); }); Информация за изходните транзакции SimpleStorage.deployed().then(function(instance) ){return instance.get.call(); }).тогава(функция(стойност) {връща стойност.toNumber()}); // 100 9. Тествайте договора с тест за трюфели. Използвайте трюфел, създавайте тест. SimpleStorage, за да създадете нов или Създай нов файл тест/SimpleStorage.test.js директно. const SimpleStorage = artifacts.require ("SimpleStorage"); contract('SimpleStorage', function(accounts) { 8/16 it("трябва да твърди истината", функция(направено)
{ var simpleStorage = SimpleStorage.deployed(); VAR инстанция; simpleStorage.then(res => { instance = res; return instance.get() }).then(стойност => { assert.equal('0', value.toNumber(), 'не е равно на 0') }).тогава(() => { instance.set(100) }).тогава(() => { return instance.get() }).then(стойност => { assert.equal('100', value.toNumber(), 'не е равно на 100') }) done(); }); }); В новата конзола въведете тест на трюфели ./test/SimpleStorage.test.js. 10. Тестови договори с ремикс Пут договори, разработени с трюфел в ремикс за бързо модифициране Внедряване и извикване на предложения договор. Remix предоставя среда за изпълнение на компилации за договори и може да бъде контролиран от договора Таблицата може да види подробна информация за всяка транзакция по договора, като входни и изходни параметри, подписани данни за метода, транзакционен хеш и друга информация. Поддръжка на дебъгване. 1. Използвайте компилационни детайли, за да видите подробностите за компилацията на договора. Включително байткод, ABI и използване web3.js бързо внедряване на метода Drip Ah. 9/16 2. Използвайте run, за да създадете договор, и конзолата може да види транзакцията, която е създала договора. Използвайте Truffle Unbox за създаване на интерактивни договорни приложения Горните стъпки създават договорна среда, която може да се компилира, внедрява и отстранява грешки с помощта на basic truffle init. По-долу Създайте нов проект с Truffle Unbox, който ни предоставя шаблон за трюфелен проект вътре Някои зависимости от взаимодействието на приложения по договори. Можете да разгледате официалните предложения в Truffle Boxes Шаблонни кутии. Следва шаблонът React. 1. Нов проект truf-react mkdir truf-react 10/16 CD Truf-React Truffle Unbox React Процесът на unbox изтегля шаблона за извличане и извършва операции като инсталация на npm. 2. Конфигуриране на truffle.js на проекта module.exports = { Виж <http://truffleframework.com/docs/advanced/confi Гурация> за персонализиране на вашия трюфел Конфигурация!
networks: {
development: {
host: '127.0.0.1',
port: '9545', network_id: '*' // Съвпадение Всеки мрежов идентификатор
}
} }; 3. Започнете да развивате трюфел 4. Изменение на SRC/App.js импортиране на React, { Компонент } от 'react' import SimpleStorageContract от '.. /build/contracts/SimpleStorage.json' import getWeb3 от './utils/getWeb3' импортиране на './css/oswald.css' импортиране на './css/open-sans.css' импортиране на './css/pure-min.css' 11/16 импорт './App.css' const contract = require('трюфелов договор') const simpleStorage = договор(SimpleStorageContract) class App разширява Component { constructor(props) { super(реквизит) това.състояние = {
storageValue: 0,
web3: null,
inputValue: 0,
address: null
} this.changeValueHandle = this.changeValueHandle.bind(this) this.setHandle = this.setHandle.bind(this)
} componentWillMount() { Вземете мрежов доставчик и web3 Инстанция. Вижте utils/getWeb3 за повече информация Информация. getWeb3 .then(резултати => { this.setState({
web3: results.web3 }) Инстанциатен договор След като web3 предостави. 12/16 this.instantiateContract() }) .catch(() => { console.log('Грешка Намиране на web3.') })
} instantiateContract() {
/* * ПРИМЕР СЪС СМАРТ ДОГОВОР
* * Обикновено тези функции биха да се нарича в контекста на * държавна управленска библиотека, но за удобство ги поставих тук. */ this.simpleStorageSet(5)
} changeValueHandle(събитие) { this.setState({
inputValue: Число(event.target.стойност) })
} setHandle() { this.simpleStorageSet(this.state.inputValue)
} simpleStorageSet(x) { simpleStorage.setProvider(this.state.web3.curren tProvider) Обявявам това за по-късно, така че 13/16 можем да верижим функции в SimpleStorage. var simpleStorageInstance Вземи сметки. this.state.web3.eth.getAccounts((error, сметки) => { simpleStorage.deployed().then((instance) => { simpleStorageInstance = instance this.setState({
address: instance.address }) Магазини а дадена стойност, 5 по подразбиране. Връщане simpleStorageInstance.set(x, {from: сметки[0]}) }).тогава((резултат) => { Вземи стойността От договора, за да докаже, че е работило. Връщане simpleStorageInstance.get.call(accounts[0]) }).тогава((резултат) => { Състояние на актуализация с резултата. Връщане this.setState({ storageValue: result.c[0] }) }) })
} render() { Връщане ( <div className="App"> <nav className="navbar pure-menu pure-menuhorizontal"> 14/16 <a href="#" className="чисто меню-заглавие puremenu-link">Трюфел Кутия</a> </nav> <main className="container"> <div className="pure-g"> <div className="pure-u-1-1"> <h1>Готови сме!</h1> <p>Вашата кутия за трюфели е инсталирана и готова.</p> <h2>Пример със смарт договор</h2> <p>Ако договорите ви са били събрани и мигрирани успешно, по-долу ще се покаже съхранена стойност на 5 (по подразбиране).</p> <p>Опитайте да промените стойността, съхранена онлайн <strong> 59</strong> от App.js.</p> <p>Съхранената стойност е: {this.state.storageValue}</p> <p>Адрес на разположен договор: {this.state.address}</p> </div> <div> <input type="number" onChange= {this.changeValueHandle}/> <бутон onClick={this.setHandle}>set</button> 15/16 </div> </div> </main> </div> );
}
} експорт по подразбиране за приложение Добавен е методът за повикване на договорния набор. И покажи адреса на договора. 5. Отвори нова конзола и стартирай npm run start 6. Отворете http://lcoalhost:3000 в браузъра си, за да видите резултатите от договора. 7. Задайте стойността на съхранените в договора чрез кутиите за набора и входа. 8. Влез в трюфл развитие
//将xxx替换为address SimpleStorage.at('xxxx').then(res => {return res.get()}) Връщаната стойност на типа BigNUmber се получава и стойността в c масива се задава съхранявани данни. Използвайте браузърния плъгин Metamask, за да взаимодействате с блокчейна Референция http://truffleframework.com/tutorials/pet-shop Участниците изпращат документи Конкурсът определя използването на Truffle за разработка на смарт договори, като версията Truffle v4.1.5 съответства на версията solcjs v0.4.21. Разработчиците трябва да подадат zip пакета Truffle project и свързаните с него въведени документи, които включват поне Следното: 16/16 1. Основна файлова структура на Truffle Project: Тест за миграции на договори за строителство package.json truffle.js truffle-config.js README.md // Описание на инженерната документация Не се изисква node_modules 2. Необходимо е да се предостави PPT или PDF обяснение на целия проектен продукт, включително представяне на предисторията на продукта, значимостта на продукта, Адрес за изтегляне на приложението (по избор), въведение в процеса на използване на продукта. Следващите външни разработчици могат да реализират договорни приложения и Chain джобове според предстоящия ThunderChain инструкционен документ Взаимодействие. Документация и инструменти солидност API Документация на трюфелите Ganache предоставя графичен интерфейс за нативната блокчейн среда Zeppelin-Solidty е ангажирана със сигурна и стандартизирана договорна рамка MetaMask предоставя плъгини за браузъри с блокчейн среда чрез RPC връзки web3.js Ethereum-капсулиран JS за взаимодействие с блокчейн Накрая, изтегляне на pdf документа:
Dev_Guide_zh.pdf
(373.55 KB, Брой изтегляния: 6)
|