Files
m2pool_payment/internal/blockchain/blockchain.go
2025-10-31 13:46:58 +08:00

78 lines
1.7 KiB
Go

package blockchain
import (
"fmt"
"sync"
)
type IChainServer interface {
AddAddress(msg any) error
RemoveAddress(msg any) error
Listen(ch chan any)
Transfer(msg any) error
Stop()
}
type BlockChainServer struct {
mu sync.Mutex
chains map[string]IChainServer // "ETH", "TRON", "BTC"
}
func NewBlockChainServer() *BlockChainServer {
return &BlockChainServer{
chains: make(map[string]IChainServer),
}
}
func (b *BlockChainServer) RegisterChain(name string, chain IChainServer) {
b.mu.Lock()
defer b.mu.Unlock()
b.chains[name] = chain
}
func (b *BlockChainServer) AddAddress(chain string, msg any) error {
if srv, ok := b.chains[chain]; ok {
srv.AddAddress(msg)
fmt.Printf("✅ 添加监听地址: chain=%s, msg=%v\n", chain, msg)
return nil
} else {
return fmt.Errorf("⚠️ 链未注册: %s\n", chain)
}
}
func (b *BlockChainServer) RemoveAddress(chain string, msg any) error {
if srv, ok := b.chains[chain]; ok {
srv.RemoveAddress(msg)
fmt.Printf("🗑️ 移除监听地址: chain=%s, msg=%s\n", chain, msg)
return nil
} else {
return fmt.Errorf("⚠️ 链未注册: %s\n", chain)
}
}
func (b *BlockChainServer) Listen(chain string, ch chan any) error {
if srv, ok := b.chains[chain]; ok {
go func() {
srv.Listen(ch)
}()
return nil
}
return fmt.Errorf("链未注册: %s", chain)
}
func (b *BlockChainServer) Transfer(chain string, msg any) error {
if srv, ok := b.chains[chain]; ok {
fmt.Printf("💸 %s发起转账: %+v\n", chain, msg)
return srv.Transfer(msg)
}
return fmt.Errorf("链未注册: %s", chain)
}
func (b *BlockChainServer) Stop(chain string) {
if srv, ok := b.chains[chain]; ok {
fmt.Printf("💸 关闭服务: %+v\n", chain)
srv.Stop()
}
fmt.Printf("链未注册: %s", chain)
}