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



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


Глава 3 
____________________________________ 
[ 94 ] 
___________________________________ 
Вы получите на выходе следующий код: 
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.new( 

from: 
web3.eth.accounts[0], 
data: '60606040526......,
gas: 
4700000 
}, function (e, contract){ 
console.log(e, 
contract); 
if (typeof contract.address !== 'undefined') { 
console.log('Contract mined! address: ' + contract.address + ' 
transactionHash: ' + contract.transactionHash); 

}) 
Блок 
data
(выделен полужирным шрифтом) представляет собой байт-код (скомпи-
лированную версию контракта), который понятен виртуальной машине Ethereum. 
Исходный код сначала конвертируется в операционный код (opcode, мнемониче-
ские коды операций), а затем в байт-код виртуальной машины. Каждый операцион-
ный код имеет связанный с ним газ.
Первый аргумент в 
web3.eth.contract
— это определение ABI (Application Binary 
Interface, двоичный интерфейс приложения). Определение ABI применяется при 
создании транзакций и содержит объявление прототипов всех методов. 
Теперь запустите Geth в режиме разработчика, 
обязательно с включенным майнин-
гом
. Для этого введите в окне командной строки
12

geth --dev --mine --etherbase 'здесь подставьте ваш адрес Ethereum'
Откройте еще одно окно командной строки и введите команду запуска интерактив-
ной консоли JavaScript с подключением к работающему узлу: 
geth attach
После этого консоль JavaScript должна подключиться к процессу, запущенному 
в другом окне. 
12
Новая версия Geth не запустит режим майнинга даже в отладочном режиме без указания вашего 
адреса в опции 
–etherbase
.


Разработка 
смарт-контрактов 
____________________________________ 
[ 95 ] 
___________________________________ 
В правой панели браузера Solidity скопируйте содержимое текстового поля 
web3 
deploy
, вставьте его в интерактивную консоль и нажмите клавишу . Снача-
ла вы получите 
хеш транзакции
, а после некоторого ожидания, которое займет 
майнинг транзакции, вы получите 
адрес контракта
. Каждый развернутый кон-
тракт имеет уникальный адрес, по которому определяется в блокчейне.
Адрес контракта определенным образом вычисляется из адреса создателя (адрес 
from
) и количества отправленных транзакций (transaction nonce). Два этих числа 
подвергаются RLP-кодированию
13
, а затем хешируются по алгоритму Keccak-256. 
Мы рассмотрим понятие 
transaction nonce
позже. Про RLP-кодирование можно 
подробнее прочитать по адресу: 
https://github.com/ethereum/wiki/wiki/RLP

Теперь давайте сохраним информацию о файле и запросим ее обратно. 
Вставьте в консоль код из листинга 3.16, чтобы передать транзакцию сохранения 
информации о файле. 
Листинг 3.16. Код для отправки транзакции с данными файла 
var contract_obj = 
proofContract.at("0x9220c8ec6489a4298b06c2183cf04fb7e8fbd6d4"); 
contract_obj.set.sendTransaction("Owner Name", 
"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", { 
from: web3.eth.accounts[0], 
}, function(error, transactionHash){ 
if (!err) 
console.log(transactionHash); 
}) 
В этом листинге замените адрес контракта на адрес, который вы только что полу-
чили. Первый аргумент метода 
proofContract.at()
— это и есть адрес контракта. 
Здесь мы не указали количество газа, в таком случае это значение вычисляется
автоматически.
Теперь давайте извлечем информацию о файле. Введите в консоль этот код
14

contract_obj.get.call("e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852
b855");
Вы получите следующий ответ: 
[1477591434, "Owner Name"]
Метод 
call()
применяется для вызова метода контракта из текущего расположения. 
Он не транслирует транзакцию. Для чтения данных нам не требуется трансляция, 
потому что у нас есть собственная копия блокчейна. 
Более подробно о пакете библиотек web3.js вы узнаете в следующих главах. 
13
Recursive Length Prefix, основной метод кодирования для сериализации объектов Ethereum
.
14
Вы можете скопировать хеш файла из листинга 3.16. 


Download 9,22 Mb.

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