Как я могу получить уведомление от geth, когда я получу эфир?

Я хочу получать уведомления от geth, когда на мою учетную запись поступит эфир. Я думаю eth_getBalanceкаждую минуту вводить команду API, чтобы проверить, получает ли мой аккаунт эфир или нет. Однако я не думаю, что это хороший способ.

Не могли бы вы рассказать мне лучший способ, чтобы получить уведомление от geth?

Ответы (2)

лично я зарегистрировал свои адреса на 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)
Просто чтобы добавить к вышесказанному, в дополнение к уведомлениям по электронной почте Etherscan.io также поддерживает уведомления телеграмм, отправленные непосредственно на ваше мобильное устройство. У вас есть возможность выбрать любой из них.

Вы можете использовать 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();