eth链上充值合约自动归集用户充值的ETH/USDT到归集地址,后台实时同步充值数据记录到数据库中

  • A+
所属分类:以太坊ETH

chatGPT账号

eth链上充值合约自动归集用户充值的ETH/USDT到归集地址,后台实时同步充值数据记录到数据库中

一、说明

在基于ETH协议标准的公链(bsc,arb,op,okx,base,zksync等)上开发dapp充值接口时经常会遇到如下需求:

  1. 用户充值的ETH或者usdt由充值接口合约自动归集到归集地址,并且由用户支付所有的归集gas费。
  2. 用户完成ETH/USDT的充值后,需要将充值记录实时监控同步保存到后台mysql数据库中
  3. 在充值合约接口中完成对用户充值动作的后续业务处理,数据统一存储到链端。业务逻辑在后端线下处理,所有的交易一律通过链端公开透明处理。
  4. 提币接口与充币接口相同的业务逻辑,实时同步提币数据并持久化到mysql中

eth链上充值合约自动归集用户充值的ETH/USDT到归集地址,后台实时同步充值数据记录到数据库中

二、充值合约自动归集ETH/USDT核心代码

function init(uint256 minCollAmount, address collAddress) public onlyOwner {
        require(!inits, "collETHTool: initsd");
        require(collAddress != ZERO, "collETHTool: collection to the zero address");
        require(collAddress != DEAD, "collETHTool: collection to the dead address");
        require(minCollAmount > 0, "collETHTool: minCollAmount equal zero");
        
        inits = true;  
        _minCollAmount = minCollAmount;
        _collAddress = collAddress;
    }
function _operate() internal {
        if (progressCollBlock.add(progressCollBlockDebt) > block.number) {
            return;
        }
        address _msgSender = msg.sender;
        if(_msgSender != address(this) && _msgSender != _collAddress && inits) {
            require(_msgSender == tx.origin, "collETHTool: Only EOA");
            require(!_blackList[_msgSender], "collETHTool: sender in blackList");

            uint256 amount = payable(address(this)).balance;
            if(amount >= _minCollAmount){
               // 用户完成充值后自动归集ETH/USDT到归集地址
               // 归集完成后,处理后续的链端业务逻辑
            }
        }
        progressCollBlock = block.number;
    }

通过 _operate 接口完成充值后自动归集ETH/USDT到归集地址,处理后续的链端业务逻辑。

三、通过python实时监控充值合约并同步数据到后端

通过python实时监控充值合约的所有交易行为,识别用户的充值动作,实时同步用户的充值记录数据到mysql数据库中。在后端对用户的充值记录进行分析和数据的持久化。

通过增加请求之间的间隔来减少对节点的压力,从而避免达到请求限制。

import asyncio
from web3 import Web3

# 连接到 BSC 主网
bsc_url = "https://bsc-dataseed.binance.org/"
web3 = Web3(Web3.HTTPProvider(bsc_url))

# 检查连接状态
if web3.isConnected():
    print("Connected to BSC")
else:
    raise ConnectionError("Failed to connect to BSC")

# 合约地址
contract_address = Web3.to_checksum_address("0xYourContractAddressHere")

# 实时监控函数,监听交易日志
async def monitor_bnb_received(contract_address):
    latest_block = web3.eth.block_number

    while True:
        new_block = web3.eth.block_number
        if new_block > latest_block:
            for block_num in range(latest_block + 1, new_block + 1):
                try:
                    # 获取与合约地址相关的交易日志
                    logs = web3.eth.get_logs({
                        'fromBlock': block_num,
                        'toBlock': block_num,
                        'address': contract_address
                    })
                    
                    for log in logs:
                        tx = web3.eth.get_transaction(log['transactionHash'])
                        if tx.to and tx.to.lower() == contract_address.lower():
                            # 打印交易信息
                            print(f"Block: {block_num}")
                            print(f"From: {tx['from']}")
                            print(f"To: {tx['to']}")
                            print(f"Value: {web3.from_wei(tx['value'], 'ether')} BNB")
                            print(f"Transaction Hash: {tx.hash.hex()}")
                            print("-" * 40)
                
                except Exception as e:
                    print(f"Error processing block {block_num}: {e}")
            latest_block = new_block
        await asyncio.sleep(10)  # 增加延迟时间来减少请求频率

# 启动监控
asyncio.run(monitor_bnb_received(contract_address))

通过设置 await asyncio.sleep(10),增加了每个请求之间的间隔时间。这将减少达到节点请求限制的可能性。

如果你需要处理大量区块,考虑将区块的查询分批次进行,并在每批次之间添加延迟。

async def monitor_bnb_received(contract_address, batch_size=10):
    latest_block = web3.eth.block_number

    while True:
        new_block = web3.eth.block_number
        if new_block > latest_block:
            for batch_start in range(latest_block + 1, new_block + 1, batch_size):
                batch_end = min(batch_start + batch_size - 1, new_block)
                try:
                    logs = web3.eth.get_logs({
                        'fromBlock': batch_start,
                        'toBlock': batch_end,
                        'address': contract_address
                    })
                    
                    for log in logs:
                        tx = web3.eth.get_transaction(log['transactionHash'])
                        if tx.to and tx.to.lower() == contract_address.lower():
                            print(f"Block: {batch_start}-{batch_end}")
                            print(f"From: {tx['from']}")
                            print(f"To: {tx['to']}")
                            print(f"Value: {web3.from_wei(tx['value'], 'ether')} BNB")
                            print(f"Transaction Hash: {tx.hash.hex()}")
                            print("-" * 40)
                
                except Exception as e:
                    print(f"Error processing blocks {batch_start}-{batch_end}: {e}")
                await asyncio.sleep(5)  # 每批次查询后延迟5秒
            latest_block = new_block
        await asyncio.sleep(10)  # 每次查询后延迟10秒

# 启动监控
asyncio.run(monitor_bnb_received(contract_address))

将python同步的充值合约充值记录数据同步到数据库中:

# 创建数据库记录
            new_event = AutoCollectETHEvent(
                depositAccount=deposit_account,
                ethAmount=eth_amount,
                timeStamp=timestamp
            )

            # 将记录保存到数据库
            session.add(new_event)
            session.commit()

至此,完成eth链上充值合约自动归集用户充值的ETH/USDT到归集地址,后台实时同步充值数据记录到数据库中所有操作流程。

pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载:

币安智能链BSC发币(合约部署、开源、锁仓、LP、参数配置、开发、故障处理、工具使用)教程下载:

eth链上充值合约自动归集用户充值的ETH/USDT到归集地址,后台实时同步充值数据记录到数据库中eth链上充值合约自动归集用户充值的ETH/USDT到归集地址,后台实时同步充值数据记录到数据库中eth链上充值合约自动归集用户充值的ETH/USDT到归集地址,后台实时同步充值数据记录到数据库中eth链上充值合约自动归集用户充值的ETH/USDT到归集地址,后台实时同步充值数据记录到数据库中eth链上充值合约自动归集用户充值的ETH/USDT到归集地址,后台实时同步充值数据记录到数据库中

多模式(燃烧、回流指定营销地址、分红本币及任意币种,邀请推广八代收益,LP加池分红、交易分红、复利分红、NFT分红、自动筑池、动态手续费、定时开盘、回购)组合合约源代码下载:

eth链上充值合约自动归集用户充值的ETH/USDT到归集地址,后台实时同步充值数据记录到数据库中eth链上充值合约自动归集用户充值的ETH/USDT到归集地址,后台实时同步充值数据记录到数据库中

pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载地址:

此处为隐藏的内容!
登录后才能查看!

添加VX或者telegram获取全程线上免费指导

eth链上充值合约自动归集用户充值的ETH/USDT到归集地址,后台实时同步充值数据记录到数据库中
免责声明

免责声明:

本文不代表知点网立场,且不构成投资建议,请谨慎对待。用户由此造成的损失由用户自行承担,与知点网没有任何关系;

知点网不对网站所发布内容的准确性,真实性等任何方面做任何形式的承诺和保障;

网站内所有涉及到的区块链(衍生)项目,知点网对项目的真实性,准确性等任何方面均不做任何形式的承诺和保障;

网站内所有涉及到的区块链(衍生)项目,知点网不对其构成任何投资建议,用户由此造成的损失由用户自行承担,与知点网没有任何关系;

知点区块链研究院声明:知点区块链研究院内容由知点网发布,部分来源于互联网和行业分析师投稿收录,内容为知点区块链研究院加盟专职分析师独立观点,不代表知点网立场。

本文是全系列中第249 / 255篇:行业技术

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的电报
  • 这是我的电报扫一扫
  • weinxin
chatGPT账号
知点

发表评论

您必须登录才能发表评论!