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



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


Глава 4 
____________________________________ 
[ 104 ] 
___________________________________ 
Здесь мы переводим один эфир со счета номер 
0
на счет номер 
1
. Убедитесь, что 
оба счета разблокированы опцией 
--unlock
при запуске Geth. В интерактивной кон-
соли Geth будут запрошены пароли, но API web3.js вне интерактивной консоли 
вернут ошибку, если счет заблокирован. Этот метод возвращает хеш транзакции. 
Затем вы при помощи метода 
getTransactionReceipt() 
можете проверить, обработа-
на ли транзакция майнером. 
Вы также можете использовать API: 
web3.personal.listAccounts()

web3.personal.unlockAccount(addr, pwd)
и 
web3.personal.newAccount(pwd)
для динами-
ческого управления счетами. 
Работа с контрактами 
Теперь давайте рассмотрим работу с контрактами — развертывание нового кон-
тракта, получение ссылки на контракт по его адресу, отправку эфира на контракт, 
отправку транзакции, вызывающей метод контракта, и оценку количества газа, 
нужного для вызова метода. 
Для развертывания нового контракта или для получения ссылки на уже разверну-
тый контракт вам надо, прежде всего, создать объект контракта при помощи метода 
web3.eth.contract()
. Он получает ABI контракта как аргумент и возвращает объект 
контракта. 
Так выглядит код
4
для создания объекта контракта: 
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"}]); 
Когда ваш контракт готов, вы можете развернуть его при помощи метода 
new()
объекта контракта или получить ссылку на уже развернутый контракт при помощи 
метода 
at()

Давайте рассмотрим пример того, как развертывают новый контракт: 
var proof = proofContract.new({ 
from: web3.eth.accounts[0], 
data: "0x606060405261068...", 
gas: "4700000" 
}, 
4
О том, как получить этот код, рассказано в 
главе 3.


Учимся работать с web3.js 
____________________________________ 
[ 105 ] 
___________________________________ 
function (e, contract){ 
if(e) 

console.log("Error " + e); 

else if(contract.address != undefined) 

console.log("Contract Address: " + contract.address); 

else 

console.log("Txn Hash: " + contract.transactionHash) 

}) 
В данном случае метод 
new()
вызывается асинхронно, поэтому, если транзакция 
создана и успешно передана в сеть, обратный вызов срабатывает дважды: снача-
ла — когда транзакция передана, а затем — когда она обработана майнером. Если 
вы не предусмотрели обратный вызов, то поле 
address
переменной 
proof
будет
установлено в 
undefined
. Как только майнинг контракта завершен, присваивается 
значение полю 
address

В нашем контракте 
proof
нет конструктора, но если конструктор имеется, то аргу-
менты конструктора должны быть помещены в начало метода 
new()
. Объект, кото-
рый мы передали, содержит адрес 
from
, байт-код контракта и доступное количество 
газа. Эти три параметра должны быть обязательно заданы, иначе транзакция не бу-
дет создана. В данном случае 
data
— это байт-код контракта, а свойство 
to
игнори-
руется. 
Для получения ссылки на развернутый контракт вы можете воспользоваться мето-
дом 
at()
. Пример кода, который демонстрирует получение ссылки: 
var proof = proofContract.at("0xd45e541ca2622386cd820d1d3be74a86531c14a1"); 
Теперь посмотрим, как отправить транзакцию, которая вызывает метод контракта. 
Вот простой пример, демонстрирующий эту процедуру: 
proof.set.sendTransaction("Owner Name", 
"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", { 
from: web3.eth.accounts[0], 
}, function(error, transactionHash){ 
if (!err) 
console.log(transactionHash); 
}) 


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