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



Download 9,22 Mb.
Pdf ko'rish
bet36/47
Sana26.02.2022
Hajmi9,22 Mb.
#472912
1   ...   32   33   34   35   36   37   38   39   ...   47
Bog'liq
Прасти Н. - Блокчейн. Разработка приложений - 2018


Глава 3 
____________________________________ 
[ 92 ] 
___________________________________ 
При этом мы получим доказательство владения, сохранив пару, состоящую из хеша 
файла и имени владельца. Мы получим доказательство существования, сохранив 
пару, состоящую из хеша файла и метки времени блока. Наконец, сохранение само-
го хеша доказывает целостность файла. Если файл изменить, то его хеш тоже изме-
нится, и контракт больше не сможет найти файл, что послужит доказательством 
изменения файла. 
В листинге 3.15 приведен исходный код контракта, который решает эту задачу
10

Листинг 3.15. Пример контракта, доказывающего владение файлом 
contract Proof 

struct 
FileDetails 

uint 
timestamp; 
string 
owner; 

mapping (string => FileDetails) files; 
event logFileAddedStatus(bool status, uint timestamp, string owner, 
string 
fileHash); 
//функция для сохранения владельца файла и метки времени блока 
function set(string owner, string fileHash) 

//не существует корректного способа проверить,
//есть ли уже такой ключ, 
//поэтому мы проверяем значение по умолчанию (все биты нулевые) 
if(files[fileHash].timestamp 
== 
0) 

files[fileHash] 

FileDetails(block.timestamp, 
owner); 
//мы создаем событие, благодаря которому программа-оболочка 
//узнает от контракта, что наличие файла
//и принадлежности сохранено 
logFileAddedStatus(true, 
block.timestamp, 
owner, 
fileHash); 

10
Дополнительно напомним начинающим разработчикам, что смарт-контракт сам по себе не общает-
ся с пользователем. Это back-end (серверная часть). Пользователь же имеет дело с приложением front-
end, то есть с приложением уровня клиентского интерфейса. Например, это может быть оболочка ко-
шелька, приложение для голосования или веб-интерфейс. Приложения front-end вызывают методы 
контракта и получают от него ответные данные. 


Разработка 
смарт-контрактов 
____________________________________ 
[ 93 ] 
___________________________________ 
else 

//здесь мы сообщаем программе-оболочке, что
//подтверждение существования 
//и принадлежности не могут быть сохранены, потому
//что данные файла 
//уже 
были 
сохранены 
раньше 
logFileAddedStatus(false, 
block.timestamp, 
owner, 
fileHash); 


//функция для получения сведений о файле 
function get(string fileHash) returns (uint timestamp, string owner) 

return 
(files[fileHash].timestamp, 
files[fileHash].owner); 


Компиляция и развертывание контракта 
Ethereum имеет собственный компилятор SOLC (SOLidity Compiler), взаимодейст-
вие с которым происходит через командную строку. По адресу:
http://solidity. 
readthedocs.io/en/develop/installing-solidity.html#binary-packages 
вы найдете ру-
ководство по установке, а по адресу: 
https://solidity.readthedocs.io/en/develop/ 
using-the-compiler.html
получите инструкции по использованию компилятора. 
Но мы не станем работать с компилятором напрямую. Мы воспользуемся инстру-
ментами, которые называются solcjs и браузер Solidity. Утилита solcjs позволяет 
компилировать код Solidity в среде Node.js, а браузер Solidity — это среда разра-
ботки (IDE), которая подходит для небольших контрактов. 
Давайте прямо сейчас скомпилируем контракт из листинга 3.15 при помощи брау-
зера Solidity, который нам предоставляет платформа Ethereum. Прочитать больше 
об этом браузере можно по адресу: 
https://Ethereum.github.io/browser-Solidity/
11

Вы также можете по ссылке: 
https://github.com/Ethereum/browser-Solidity/tree/ 
gh-pages
скачать исходный код браузера и использовать его локально, без подклю-
чения к сети. 
Главное преимущество браузера Solidity заключается в том, что он имеет встроен-
ный редактор и генерирует код для развертывания контракта. 
Итак, скопируйте и вставьте в редактор исходный код из листинга 3.15 — вы уви-
дите, что контракт компилируется и получается код web3.js для развертывания кон-
тракта при помощи интерактивной консоли Geth (см. 
главу 2
). 
11
На момент подготовки перевода ссылка не работала. Воспользуйтесь общей ссылкой: 
https://github.com/ 
ethereum/
, чтобы выбрать нужную тему.


Download 9,22 Mb.

Do'stlaringiz bilan baham:
1   ...   32   33   34   35   36   37   38   39   ...   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