| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- # -*- 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,
- }
- }
|