我只是想创建一些东西来监听特定令牌(如SafeMoon )的购买(pancakeswap)事件,并在有人在 pancakeswap 上购买时通知我。
到目前为止我的进步。我现在正在做的方式是找到一个代币的 Pancakeswap 对地址并监听它的交换事件
pair_address = '0xBc9d0929c5a1D21BbAaB8826c0a6a78e096702A4' #Pair Address Of ORAKLER/WBNB On Pancakeswap
contract = web3.eth.contract(address=web3.toChecksumAddress(pair_address), abi=helper.getTokenAbi(pair_address))
def handle_event(event):
result = Web3.toJSON(event)
main_base = json.loads(result)
txn_hash = main_base['transactionHash']
print(result)
async def log_loop(event_filter, poll_interval):
while True:
for PairCreated in event_filter.get_new_entries():
handle_event(PairCreated)
await asyncio.sleep(poll_interval)
def main():
event_filter = contract.events.Swap.createFilter(fromBlock='latest')
loop = asyncio.get_event_loop()
try:
loop.run_until_complete(
asyncio.gather(
log_loop(event_filter, 2)))
finally:
loop.close()
if __name__ == "__main__":
main()
在上面的代码中,我列出了智能合约的交换事件,我得到的输出是
{"args": {"sender": "0x10ED43C718714eb63d5aA57B78B54704E256024E", "to": "0x4C7369b0615125481E2D6Fcd39e4d8c70DB2e830", "amount0In": 0, "amount1In": 4957805606627501, "amount0Out": 200000000000000000, "amount1Out": 0}, "event": "Swap", "logIndex": 339, "transactionIndex": 102, "transactionHash": "0x694f61f705d2fa49d6b16f9d56902f6e4b50c88e9d3adb4ab6fbea6632b0eb1b", "address": "0xBc9d0929c5a1D21BbAaB8826c0a6a78e096702A4", "blockHash": "0x6aedadf8d3618a1d21a48890d7bcfd9968df575a1a56323830f5dd242c79cdd3", "blockNumber": 14269884}
它包含交换事件参数,它们看起来像那样
Swap (
index_topic_1 address sender,
uint256 amount0In,
uint256 amount1In,
uint256 amount0Out,
uint256 amount1Out,
index_topic_2 address to
)
我只是对如何确定它是已售出的 ORAKLER 还是刚购买的以及他是否确实在 BNB 中花了多少钱感到困惑。
如果有人知道任何其他解决方案或我在这里做的任何错误,请告诉我