# -*- coding: utf-8 -*- from odoo import models, fields from web3 import Web3 import time class MonadTestcoinBalance(models.Model): _name = 'monad.testcoin.balance' _description = 'Monad Testcoin Balance' wallet_address = fields.Char(string='Wallet Address') balance = fields.Float(string='Balance') message = fields.Char(string='Message') def execute(self): rpc_url = "https://testnet-rpc.monad.xyz" web3 = Web3(Web3.HTTPProvider(rpc_url)) if not web3.is_connected(): print("无法连接到链节点,请检查 URL 是否正确") else: print("已成功连接到链节点。正在查询钱包余额...") for record in self: retry_count = 0 max_retries = 3 delay = 2 result_message = '' result_balance = -1 while retry_count < max_retries: try: checksum_address = web3.to_checksum_address(record.wallet_address) balance = web3.eth.get_balance(checksum_address) balance_eth = web3.from_wei(balance, "ether") result_message = f"Wallet address: {record.wallet_address}, balance: {balance_eth:.8f} $MON" result_balance = "{:.8f}".format(balance_eth) print(result_message) break except Exception as e: print(f"查询钱包 {record.wallet_address} 余额时发生错误: {e}") retry_count += 1 print(f"正在重试...(第 {retry_count} 次)") time.sleep(delay) if retry_count == max_retries: result_message = f"钱包 {record.wallet_address} 查询余额失败,已达到最大重试次数。" print(result_message) record.update({ 'balance': result_balance, 'message': result_message }) return { 'type': 'ir.actions.client', 'tag': 'display_notification', 'params': { 'title': '提示', 'message': '操作成功!', 'sticky': False, } }