如何收听我的bsc代币的购买事件



我只是想创建一个能监听特定代币的买入(pancakeswap(事件的东西,比如SafeMoon&当有人在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()

在上面的代码中,我列出了Swap智能合约事件和我得到的输出是

{"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花了多少钱。

如果有人知道其他解决方案,或者我在这里做错了什么,请告诉我

我已经弄清楚我做错了什么。

首先,我使用的是煎饼工厂地址,而不是我的代币lp地址。第二,我必须使用Swap not PairCreated In The code

最新更新