Глава 4
____________________________________
[ 106 ]
___________________________________
Здесь мы вызываем метод
sendTransaction()
. Объект, переданный этому мето-
ду, имеет такие же параметры, как и объект, передаваемый методу
web3.eth.sendTransaction()
, за исключением того, что игнорируются параметры
data
и
to
.
Если вы хотите вызывать некий метод непосредственно на своем узле, вместо того,
чтобы создавать и транслировать транзакцию, то вместо
sendTransaction()
исполь-
зуйте
call()
, например:
var returnValue =
proof.get.call("e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855");
Иногда необходимо узнать, какое количество газа потребуется для вызова метода,
чтобы принять решение, стоит ли вообще вызывать этот метод. Для решения такой
оценочной задачи можно использовать
web3.eth.estimateGas()
. Однако прямое ис-
пользование этого метода вынуждает вас генерировать данные для транзакции.
Следовательно, мы можем воспользоваться методом
estimateGas()
нашего объекта,
например:
var estimatedGas =
proof.get.estimateGas("e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852
b855");
Если вы хотите просто перевести несколько эфиров на контракт без вызова ка-
ких-либо методов, то можете напрямую воспользоваться методом
web3.eth.sendTransaction
.
Отслеживание событий контракта
Сейчас мы узнаем, как отслеживать события, которые генерирует контракт. Отсле-
живание событий имеет большое значение, потому что результаты вызова методов
обычно возвращаются путем переключения триггеров событий.
Прежде, чем приступить к изучению отслеживания событий, нам следует узнать,
что такое
индексированные параметры событий
. Иметь атрибут
indexed
могут
не более трех параметров события. Этот атрибут применяется для уведомления
узла о том, что клиентское приложение может искать события по совпадению
возвращаемых значений. Если вы не используете атрибут
indexed
, вам придется
запрашивать все события узла и отфильтровывать нужные. Например, вы може-
те описать событие
logFileAddedStatus
таким образом:
event logFileAddedStatus(bool indexed status, uint indexed timestamp,
string owner, string indexed fileHash);
Пример, приведенный в листинге 4.1, демонстрирует, как прослушивать события
контракта.
Учимся работать с web3.js
____________________________________
[ 107 ]
___________________________________
Листинг 4.1. Прослушивание событий контракта
var event = proof.logFileAddedStatus(null, {
fromBlock: 0,
toBlock: "latest"
});
event.get(function(error, result){
if(!error)
{
console.log(result);
}
else
{
console.log(error);
}
})
event.watch(function(error, result){
if(!error)
{
console.log(result.args.status);
}
else
{
console.log(error);
}
})
setTimeout(function(){
event.stopWatching();
}, 60000)
var events = proof.allEvents({
fromBlock: 0,
toBlock: "latest"
});
events.get(function(error, result){
if(!error)
{
console.log(result);
}
else
{
console.log(error);
}
})
Do'stlaringiz bilan baham: |