Нараян Прасти



Download 9,22 Mb.
Pdf ko'rish
bet45/47
Sana26.02.2022
Hajmi9,22 Mb.
#472912
1   ...   39   40   41   42   43   44   45   46   47
Bog'liq
Прасти Н. - Блокчейн. Разработка приложений - 2018


Глава 4 
____________________________________ 
[ 110 ] 
___________________________________ 
Структура проекта 
В папке файлов упражнений, дополняющих эту главу (см. 
приложение
)
, вы найдете 
два каталога: 
Final
и 
Initial
. Каталог 
Final
содержит окончательный исходный код 
проекта, в то время как 
Initial
содержит пустые файлы исходного кода и библио-
теки, что позволяет быстро начать работу над проектом. 
Для проверки каталога 
Final
вам понадобится выполнить команду терминала 
npm
install
внутри каталога и заменить заданный в коде файла 
app.js
адрес кон-
тракта на адрес, полученный вами после развертывания вашего контракта. По-
сле этого запустите приложение командой терминала 
node app.js
внутри катало-
га 
Final

В каталоге 
Initial
находится вложенный каталог 
public
и два файла: 
app.js
и 
package.json
. Второй файл содержит зависимости для вашего приложения, а файл 
app.js
— это место, в котором будет храниться серверная часть проекта. 
Каталог 
public
содержит файлы, относящиеся к пользовательскому интерфейсу 
(клиентская часть). Внутри 
public/css
вы найдете библиотеку фреймворка Bootstrap 
bootstrap.min.css
, а внутрь 
public/html
вы поместите HTML-код вашего клиентско-
го приложения. В каталоге 
public/js
находятся JavaScript-файлы для jQuery, sha1
и socket.io. Также внутри этого каталога вы найдете файл 
main.js
, в который вы по-
местите код JavaScript для клиентской части проекта. 
Разработка серверной части 
Давайте сначала создадим серверную часть нашего приложения. Первым делом 
выполним команду 
npm install
внутри каталога 
Initial
— чтобы установить необ-
ходимые зависимости для серверной части. Прежде чем приступить к написанию 
кода серверной части, убедитесь, что Geth работает, а RPC включен. Если вы запус-
тили Geth в частной сети, также убедитесь, что включен режим майнинга. Наконец, 
удостоверьтесь, что счет 0 существует и разблокирован. Вы можете запустить Geth 
в частной сети с включенным RPC и майнингом и разблокированным счетом 0 при 
помощи единственной команды: 
geth --dev --mine --rpc --unlock=0
Осталось лишь развернуть в сети контракт, о котором мы говорили в 
главе 3
, и ско-
пировать адрес контракта. 
Теперь создадим автономный сервер (single server), который будет обслуживать 
HTML-запросы браузера и принимать подключения сервиса socket.io: 
var express = require("express"); 
var app = express(); 
var server = require("http").createServer(app); 
var io = require("socket.io")(server); 
server.listen(8080); 
Здесь мы объединили серверы 
express
и 
socket.io
в один сервер с портом 
8080



Учимся работать с web3.js 
____________________________________ 
[ 111 ] 
___________________________________ 
Далее мы объявим пути к статическим файлам и домашней странице приложения. 
Вот код, который это делает: 
app.use(express.static("public")); 
app.get("/", function(req, res){ 
res.sendFile(__dirname + "/public/html/index.html"); 
}) 
Здесь мы используем промежуточный интерфейс 
express.static
для доступа к ста-
тическим файлам и указываем ему искать статические файлы в каталоге 
public

Теперь подключимся к узлу Geth и получим ссылку на развернутый контракт, бла-
годаря чему сможем отправлять транзакции и следить за событиями. Вот соответ-
ствующий фрагмент кода: 
var Web3 = require("web3"); 
web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545")); 
var proofContract = 
web3.eth.contract([{"constant":false,"inputs":[{"name":"fileHash","type":"s 
tring"}],"name":"get","outputs":[{"name":"timestamp","type":"uint256"},{"na 
me":"owner","type":"string"}],"payable":false,"type":"function"},{"constant 
":false,"inputs":[{"name":"owner","type":"string"},{"name":"fileHash","type 
":"string"}],"name":"set","outputs":[],"payable":false,"type":"function"},{ 
"anonymous":false,"inputs":[{"indexed":false,"name":"status","type":"bool"} 
,{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":false,"na 
me":"owner","type":"string"},{"indexed":false,"name":"fileHash","type":"str 
ing"}],"name":"logFileAddedStatus","type":"event"}]); 
var proof = proofContract.at("0xf7f02f65d5cd874d180c3575cb8813a9e7736066"); 
Мы уже несколько раз упоминали эту часть кода раньше, и она не требует поясне-
ний. Просто замените номер контракта на тот, который получили сами. 
Сформируем пути для вещания транзакций и получения сведений о файле: 
app.get("/submit", function(req, res){ 
var fileHash = req.query.hash; 
var owner = req.query.owner; 
proof.set.sendTransaction(owner, fileHash, { 
from: web3.eth.accounts[0], 
}, function(error, transactionHash){ 
if (!error) 

res.send(transactionHash); 

else 

res.send("Error"); 

}) 
}) 


Download 9,22 Mb.

Do'stlaringiz bilan baham:
1   ...   39   40   41   42   43   44   45   46   47




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish