mirror of
https://github.com/GMWalletApp/epusdt.git
synced 2026-07-07 18:26:16 +00:00
161 lines
5.0 KiB
Go
161 lines
5.0 KiB
Go
package data
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/GMWalletApp/epusdt/model/dao"
|
|
"github.com/GMWalletApp/epusdt/model/mdb"
|
|
"github.com/GMWalletApp/epusdt/util/constant"
|
|
)
|
|
|
|
// AddWalletAddress 创建钱包 (默认 tron 网络,用于 Telegram 添加)
|
|
func AddWalletAddress(address string) (*mdb.WalletAddress, error) {
|
|
return AddWalletAddressWithNetwork(mdb.NetworkTron, address)
|
|
}
|
|
|
|
// isEVMNetwork 判断是否是 EVM 网络
|
|
func isEVMNetwork(network string) bool {
|
|
switch network {
|
|
case mdb.NetworkEthereum, mdb.NetworkBsc, mdb.NetworkPolygon, mdb.NetworkPlasma:
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
func normalizeWalletNetwork(network string) string {
|
|
return strings.ToLower(strings.TrimSpace(network))
|
|
}
|
|
|
|
func normalizeWalletAddressByNetwork(network, address string) string {
|
|
address = strings.TrimSpace(address)
|
|
if isEVMNetwork(normalizeWalletNetwork(network)) {
|
|
return strings.ToLower(address)
|
|
}
|
|
return address
|
|
}
|
|
|
|
// AddWalletAddressWithNetwork 创建指定网络的钱包地址
|
|
func AddWalletAddressWithNetwork(network, address string) (*mdb.WalletAddress, error) {
|
|
network = normalizeWalletNetwork(network)
|
|
address = normalizeWalletAddressByNetwork(network, address)
|
|
|
|
exist, err := GetWalletAddressByNetworkAndAddress(network, address)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if exist.ID > 0 {
|
|
return nil, constant.WalletAddressAlreadyExists
|
|
}
|
|
|
|
// Check for a soft-deleted record with the same (network, address) and restore it.
|
|
deleted := new(mdb.WalletAddress)
|
|
err = dao.Mdb.Unscoped().
|
|
Where("network = ? AND address = ? AND deleted_at IS NOT NULL", network, address).
|
|
Limit(1).Find(deleted).Error
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if deleted.ID > 0 {
|
|
err = dao.Mdb.Unscoped().Model(deleted).Updates(map[string]interface{}{
|
|
"deleted_at": nil,
|
|
"status": mdb.TokenStatusEnable,
|
|
}).Error
|
|
return deleted, err
|
|
}
|
|
|
|
walletAddress := &mdb.WalletAddress{
|
|
Network: network,
|
|
Address: address,
|
|
Status: mdb.TokenStatusEnable,
|
|
}
|
|
err = dao.Mdb.Create(walletAddress).Error
|
|
return walletAddress, err
|
|
}
|
|
|
|
// GetWalletAddressByNetworkAndAddress 通过网络和地址查询
|
|
func GetWalletAddressByNetworkAndAddress(network, address string) (*mdb.WalletAddress, error) {
|
|
network = normalizeWalletNetwork(network)
|
|
address = normalizeWalletAddressByNetwork(network, address)
|
|
walletAddress := new(mdb.WalletAddress)
|
|
err := dao.Mdb.Model(walletAddress).
|
|
Where("network = ?", network).
|
|
Where("address = ?", address).
|
|
Limit(1).Find(walletAddress).Error
|
|
return walletAddress, err
|
|
}
|
|
|
|
// GetWalletAddressByToken 通过钱包地址获取address (兼容旧接口)
|
|
func GetWalletAddressByToken(address string) (*mdb.WalletAddress, error) {
|
|
walletAddress := new(mdb.WalletAddress)
|
|
err := dao.Mdb.Model(walletAddress).Limit(1).Find(walletAddress, "address = ?", address).Error
|
|
return walletAddress, err
|
|
}
|
|
|
|
// GetWalletAddressById 通过id获取钱包
|
|
func GetWalletAddressById(id uint64) (*mdb.WalletAddress, error) {
|
|
walletAddress := new(mdb.WalletAddress)
|
|
err := dao.Mdb.Model(walletAddress).Limit(1).Find(walletAddress, id).Error
|
|
return walletAddress, err
|
|
}
|
|
|
|
// DeleteWalletAddressById 通过id删除钱包
|
|
func DeleteWalletAddressById(id uint64) error {
|
|
err := dao.Mdb.Where("id = ?", id).Delete(&mdb.WalletAddress{}).Error
|
|
return err
|
|
}
|
|
|
|
// GetAvailableWalletAddress 获得所有可用的钱包地址
|
|
func GetAvailableWalletAddress() ([]mdb.WalletAddress, error) {
|
|
var WalletAddressList []mdb.WalletAddress
|
|
err := dao.Mdb.Model(WalletAddressList).Where("status = ?", mdb.TokenStatusEnable).Find(&WalletAddressList).Error
|
|
return WalletAddressList, err
|
|
}
|
|
|
|
// GetAvailableWalletAddressByNetwork 获得指定网络的所有可用钱包地址
|
|
func GetAvailableWalletAddressByNetwork(network string) ([]mdb.WalletAddress, error) {
|
|
network = normalizeWalletNetwork(network)
|
|
var list []mdb.WalletAddress
|
|
err := dao.Mdb.Model(list).
|
|
Where("status = ?", mdb.TokenStatusEnable).
|
|
Where("network = ?", network).
|
|
Find(&list).Error
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if isEVMNetwork(network) {
|
|
for i := range list {
|
|
list[i].Address = strings.ToLower(strings.TrimSpace(list[i].Address))
|
|
}
|
|
}
|
|
return list, err
|
|
}
|
|
|
|
// GetAllWalletAddress 获得所有钱包地址
|
|
func GetAllWalletAddress() ([]mdb.WalletAddress, error) {
|
|
var WalletAddressList []mdb.WalletAddress
|
|
err := dao.Mdb.Model(WalletAddressList).Find(&WalletAddressList).Error
|
|
return WalletAddressList, err
|
|
}
|
|
|
|
// GetAllWalletAddressByNetwork 获得指定网络的所有钱包地址
|
|
func GetAllWalletAddressByNetwork(network string) ([]mdb.WalletAddress, error) {
|
|
network = normalizeWalletNetwork(network)
|
|
var list []mdb.WalletAddress
|
|
err := dao.Mdb.Model(list).Where("network = ?", network).Find(&list).Error
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if isEVMNetwork(network) {
|
|
for i := range list {
|
|
list[i].Address = strings.ToLower(strings.TrimSpace(list[i].Address))
|
|
}
|
|
}
|
|
return list, err
|
|
}
|
|
|
|
// ChangeWalletAddressStatus 启用禁用钱包
|
|
func ChangeWalletAddressStatus(id uint64, status int) error {
|
|
err := dao.Mdb.Model(&mdb.WalletAddress{}).Where("id = ?", id).Update("status", status).Error
|
|
return err
|
|
}
|