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



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


Глава 4 
____________________________________ 
[ 108 ] 
___________________________________ 
events.watch(function(error, result){ 
if(!error) 

console.log(result.args.status); 

else 

console.log(error); 

}) 
setTimeout(function(){ 
events.stopWatching(); 
}, 60000) 
Давайте рассмотрим подробнее, как работает этот код: 
1.
Сначала мы получаем объект события путем вызова метода, одноименного с эк-
земпляром контракта. Этот метод получает два объекта как аргументы, которые 
использует для фильтрации событий: 

первый объект служит для фильтрации событий по индексированным значе-
ниям — например: 
{'valueA': 1, 'valueB': [myFirstAddress, mySecondAddress]}

По умолчанию все значения фильтров установлены в 
null
. Это означает, что 
они будут совпадать со всеми событиями данного типа, поступающими от 
этого контракта; 

второй объект может содержать три свойства: 
fromBlock
(самый старый блок, 
по умолчанию 
"latest"
), 
toBlock
(самый новый блок, по умолчанию 
"latest"

и 
address
(список адресов, откуда следует получать логи событий, по умолча-
нию это адрес контракта). 
2.
Объект 
event
предоставляет нам три метода: 
get

watch
и 
stopWatching
. Метод 
get
применяется для получения всех событий в заданном диапазоне блоков. Метод 
watch
подобен методу 
get
, но следит за изменениями после получения событий. 
Метод 
stopWatching
прекращает отслеживание изменений. 
3.
Далее, у нас есть метод 
allEvents
экземпляра контракта. Он служит для извлече-
ния всех событий контракта. 
4.
Каждое событие представлено объектом, который имеет следующие свойства: 

args
— объект аргументов, которые предоставило событие; 

event
— строка, содержащая имя события; 

logIndex
— целое число, представляющее позицию индекса (указателя) лога
в блоке; 

transactionIndex
— целое число, представляющее транзакцию, по которой 
был сгенерирован лог; 


Учимся работать с web3.js 
____________________________________ 
[ 109 ] 
___________________________________ 

transactionHash
— строка, представляющая хеш транзакции, по которой был 
сгенерирован данный лог; 

address
— строка, представляющая адрес, из которого поступил лог; 

blockHash
— строка, представляющая хеш блока, в котором был данный лог,
и 
null
, если блок в ожидании подтверждения; 

blockNumber
— номер блока, в котором был лог, и 
null
, если блок в ожидании 
подтверждения. 
Пакет web3.js предоставляет API 
web3.eth.filter
для извлечения и просмотра 
событий. Вы можете использовать этот API, но описанный ранее метод намного
проще. Про это можно прочитать больше по адресу:
https://github.com/ethereum/wiki/wiki/JavaScript-API#web3ethfilter

Разработка клиентского приложения 
для контракта 
В 
главе 3
мы написали код на языке Solidity, а также на протяжении двух последних 
глав мы изучаем web3.js и вызов методов при помощи web3.js. Настало время напи-
сать клиентскую оболочку для нашего смарт-контракта, чтобы пользователям было 
легче им пользоваться. 
Мы разработаем клиент, в котором пользователь выбирает файл, вводит данные 
владельца файла и нажимает кнопку 
Submit
(Отправить), чтобы передать в сеть 
транзакцию, вызывающую метод 
set
c хешем и данными владельца. Когда транзак-
ция успешно передана, мы выведем на дисплей ее хеш. Кроме того, пользователь 
сможет выбрать файл и получить для него сведения о владельце из смарт-
контракта. А еще клиент будет показывать последние транзакции 
set
, подтвер-
жденные в режиме реального времени. 
Мы воспользуемся при разработке следующими фреймворками и модулями: 
sha1.js — для получения хеша файла на стороне клиента; 
jQuery — для манипуляции объектами DOM; 
Bootstrap 4 — для создания адаптивного макета. 
На серверной стороне мы задействуем express.js и web3.js. При этом нам надо сде-
лать так, чтобы серверная часть отправляла подтвержденные транзакции клиент-
скому интерфейсу без постоянных запросов со стороны клиента. Для этого мы вос-
пользуемся сервисом 
socket.io
.
Пакет web3.js может быть задействован и на клиентской стороне. Но в данном
случае это создаст проблемы с безопасностью. Мы пользуемся счетами, сохра-
ненными в Geth, и раскрываем URL-адрес узла Geth клиентскому интерфейсу,
который создает угрозу для эфира, хранящегося на других счетах. 


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