Твердження: Нижче наведено документ «Xunlei Global Blockchain Application Development Guide», написаний компанією Xunlei. Чому варто використовувати цей документ, написаний компанією Xunlei, як посібник з розробки блокчейну?
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) виробляється. Контракти розгортаються за офіційною адресою, а звичайні рахунки не можуть безпосередньо публікувати контракти. Комбінація користувача Вона має бути офіційно розглянута і випущена Xunlei. У межах системи немає різниці між цими двома типами рахунків. Кожен акаунт має 256 бітів у системі Структура зберігання ключів до 256 біт називається сховищем. Кожен рахунок має баланс, який називається Баланс у Вей можна змінити, відправивши транзакцію з числовим значенням на рахунок. Контракт Контракт — це блокчейн-акаунт, який зберігає код, а дзвінок за контрактом здійснюється шляхом відправлення транзакцій на цей рахунок. Коли Попередньою більш популярною мовою контрактного програмування була Solidity. Наразі конкурс підтримує лише подання контрактів у форматі Solidity. Контракт поділяється на дві частини: зберігання даних і функція, дані зберігають стан контракту, а функція — це контракт Зовнішній інтерфейс реалізує запити до даних і зміну стану шляхом виклику функцій. Напишіть контракт через мову програмування і отримайте байткод EVM після компіляції. Відправивши транзакцію на контрактний рахунок, реальний Поточний контрактний дзвінок. Газ Газ — це платіжна одиниця блокчейну, і коли транзакція створюється, вказується певна кількість газу. Господи Якщо це обмеження обсягу обчислення транзакції та сплати комісію за її виконання, Під час виконання угоди Газ Вона буде споживатися правилами, встановленими EVM. Ціна газу — це значення, визначене творцем транзакції та кількістю комісій, необхідних для виконання транзакції Кількість — Gas_Price*Газ. Транзакція завершена. Якщо залишився газ, решта повертається до пропозиції творця Користувачі. Якщо газу недостатньо, виконання транзакції зазнає невдачі, і транзакція не зможе запобігти атакам flood для безпеки системи Плата за обробку не повертається. Найменша одиниця ціни газу — вей, 10^18 вей = 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 solidity v0.4.21) для розробки інтелектуальних комбінацій Платформа перевірятиме байткод відповідно до вихідного коду документа, поданого учасником. , Розробляйте контракти з трюфелем Трюфель для розробки структури надійності смарт-контрактів. Він забезпечує повний набір розробки, налагодження та редагування Переклад, розгортання та тестування локальних середовищ. Ви можете швидко використати команду шаблону unbox, базуючись на деяких шаблонах Згенеруйте відповідну структуру контракту. Встановити трюфель 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-просте зберігання Truffle Init 2. Створіть новий файл контракту: Ви можете використовувати трюфель для створення контракту Ви також можете створити новий файл безпосередньо з командного рядка SimpleStorage contract/SimpleStorage.sol SimpleStorage.sol прагма-солідність ^0.4.21; contract SimpleStorage { uint myVariable; function set(uint x) public { myVariable = x;
} функція get() постійна публічна поверненість (уїнт) { повернути 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. Запустіть контракт компіляції truffle, і скомпільований контракт знаходиться у папці збірки. За контрактом Існує відповідний json-файл, що містить байткод, abiCode тощо, необхідний для розгортання 5. Відредагуйте truffle.js, щоб налаштувати контракт на розгортання truffle та 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) ae6ae8e5ccbfb04590405997ee2d52d2b330726137b87505 3c36d94e974d162f (2) 0dbbe8e4ae425a6d2687f1a7e3ba17bc98c673636790f1b8 AD91193C05875ef1 (3) c88b703fb08cbea894b6aeff5a544fb92e78a18e19814cd8 5da83b71f772aa6c (4) 388c684f0ba1ef5017716adb5d21a053ea8e90277d086833 7519f97bede61418 (5) 659cbb0e2411a44db63778987b1e22153c086a95eb6b18bd f89de078917abc63 (6) 82d052c865f5763aad42add438569276c00d3d88a2d062d3 6b2bae914d58b8c8 (7) aa3680d5d48a8283413f7a108367c7299ca73f553735860a 87b08f39395618b7 (8) 0f62d96d6675f32685bbdb8ac13cda7c23436f63efbb9d07 700d8669ff12b7c4 (9) 8d5366123cb560bb60379f90a0bfd4769eecc0557f1b362 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(); }).then(function(value) {повернення значення.toNumber()}) // 0 SimpleStorage.deployed().then(function(instance ){return instance.set(100); }); Вихідна інформація про транзакції SimpleStorage.deployed().then(function(instance ){return instance.get.call(); }).then(function(value) {повернути значення.toNumber()}); // 100 9. Перевірте контракт за допомогою тесту трюфеля Використовуйте truffle create test SimpleStorage для створення нового або Створіть новий тест файлу/SimpleStorage.test.js безпосередньо. const SimpleStorage = artifacts.require ('SimpleStorage'); contract('SimpleStorage', function(accounts) { 8/16 it("має стверджувати істину", функція (зроблено)
{ var simpleStorage = SimpleStorage.deployed(); Інстанція VAR; simpleStorage.then(res => { екземпляр = res; Return instance.get() }).then(значення => { assert.equal('0', value.toNumber(), 'не дорівнює 0') }).then(() => { instance.set(100) }).then(() => { Return instance.get() }).then(значення => { assert.equal('100', value.toNumber(), 'не дорівнює 100') }) зроблено(); }); }); У новій консолі введіть truffle test ./test/SimpleStorage.test.js. 10. Тестові контракти з реміксом Пут-контракти, розроблені з використанням трюфеля в реміксі для швидкої модифікації Розгортання та застосування запропонованого контракту. Remix забезпечує середовище виконання компіляції для контрактів і може контролюватися контрактом У таблиці можна побачити детальну інформацію про кожну транзакцію контракту, таку як параметри введення та виходу, підписані дані методу, транзакційний хеш та іншу інформацію. Підтримка налагодження. 1. Використовуйте компіляційні деталі, щоб побачити деталі складання контракту. Включаючи байткод, abi а також використання web3.js швидкого розгортання методу Drip Ah. 9/16 2. Використайте run, щоб створити контракт, і консоль зможе переглянути транзакцію, яка створила контракт. Використовуйте Truffle Unbox для створення інтерактивних контрактних додатків Вищезазначені кроки створюють контрактне середовище, яке можна компілювати, розгортати та налагоджувати за допомогою базового 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' імпортувати 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 extends Component { constructor(props) { Super(реквізит) this.state = {
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(event) { this.setState({
inputValue: Число(event.target.value) })
} 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, accounts) => { simpleStorage.deployed().then((instance) => { simpleStorageInstance = екземпляр this.setState({
address: instance.address }) Магазини a За заданим значенням — 5 за замовчуванням. Повернення simpleStorageInstance.set(x, {from: рахунки[0]}) }).then((результат) => { Отримай цінність з контракту, щоб довести, що це спрацювало. Повернення simpleStorageInstance.get.call(accounts[0]) }).then((результат) => { Оновлення стану з результатом. Повернення this.setState({ storageValue: result.c[0] }) }) })
} render() { Повернення ( <div className="App"> <nav className="navbar pure-menu pure-menuhorizontal"> 14/16 <a href="#" className="pure-menu-heading puremenu-link">Truffle Коробка</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}/> <button 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 та пов'язані документи для вступу до проєкту, які включають, щонайменше, Наступне: 16/16 1. Базова структура файлу Truffle Project: тест міграцій контрактів на збірку package.json truffle.js truffle-config.js README.md // Опис інженерної документації Без node_modules 2. Потрібно надати PPT або PDF-пояснення всього продукту проєкту, включно з вступом до передісторії продукту, значущістю продукту, Адреса завантаження додатку (опціонально), вступ до процесу використання продукту. Наступні сторонні розробники можуть реалізовувати контрактні додатки та Chain Pockets відповідно до майбутнього керівного документа ThunderChain Взаємодія. Документація та інструменти API солідності Документація про трюфелі Ganache надає графічний інтерфейс для нативного блокчейн-середовища Zeppelin-Solidty дотримується безпечної та стандартизованої контрактної системи MetaMask надає браузерні плагіни для браузерів із блокчейн-середовищем через RPC-з'єднання web3.js JS, інкапсульований Ethereum, для взаємодії з блокчейном Нарешті, завантажити pdf-документ:
Dev_Guide_zh.pdf
(373.55 KB, Кількість завантажень: 6)
|