Я хочу получать уведомления от geth, когда на мою учетную запись поступит эфир. Я думаю eth_getBalance
каждую минуту вводить команду API, чтобы проверить, получает ли мой аккаунт эфир или нет. Однако я не думаю, что это хороший способ.
Не могли бы вы рассказать мне лучший способ, чтобы получить уведомление от geth?
лично я зарегистрировал свои адреса на https://etherscan.io , предоставляющем такую услугу, по электронной почте.
Если вы действительно хотите сделать это самостоятельно, самое простое, что я могу придумать, это зарегистрировать задание cron, которое запускает скрипт getBalance.sh, содержащий вызов curl eth_getbalance .
Поэтому введите crontab -e
и отредактируйте файл в конце с помощью:
*/5 * * * * /home/youruser/getBalance.sh
Это будет запускать сценарий getBalance.sh каждые 5 минут, изменяя его в соответствии с вашими потребностями.
Создайте такой /home/youruser/getBalance.sh
файл, отредактируйте YOURADDRESS
и PORT
в соответствии с тем, какой клиент вы используете, не забудьте chmod +x
:
#!/bin/bash
curl -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["YOURADDRESS", "latest"],"id":1}' 'http://localhost:PORT'
редактировать: это полностью не проверено!
edit2: протестирован рабочий скрипт Python с именем getBalance.py
. Это очень грубый сценарий, который можно вставить в задание cron вместо getBalance.sh, он просто печатает «toto», но вы можете отправлять по почте/смс/все, что считаете нужным.
import requests
import json
def balance(address, url):
postData = {"jsonrpc":"2.0","method":"eth_getBalance","params":[address, "latest"],"id":1}
#print('p: {}'.format(postData))
response = requests.post(url, data=json.dumps(postData))
print(response.json())
result = response.json()
return result['result']
def writebalance(balance):
with open('getBalance.txt', 'w') as f:
f.write(balance)
def readbalance():
with open('getBalance.txt', 'r') as f:
bal = f.read()
return bal
if __name__ == '__main__':
oldbalance = readbalance()
newbalance = balance("YOURADDRESS", 'http://localhost:8545')
if int(newbalance, 16) - int(oldbalance, 16) >0:
print('toto')
writebalance(newbalance)
Вы можете использовать Dagger https://matic.network/dagger для отправки электронной почты/уведомления или обработки любого контрактного события.
Вот простой пример того, как смотреть передачу токена ERC20 с помощью Dagger:
// web3 contract
var web3Contract = new web3.eth.Contract(abi, address);
// dagger contract
var contract = dagger.contract(web3Contract);
var filter = contract.events.Transfer({room: 'latest'});
// watch
filter.watch(function(data, removed){
// data.returnValues.to : address to which it has been transferred to
// data.returnValues.value : value which has been transferred
});
// watch only once
filter.watchOnce(function(data, removed){
// data.returnValues.to : address to which it has been transferred to
// data.returnValues.value : value which has been transferred
});
// stop watching
filter.stopWatching();
мтбиткойн