package blockchain import ( "fmt" "sync" ) type IChainServer interface { AddAddress(address string, msg any) error RemoveAddress(address string) error Listen(symbol string, ch chan any) Transfer(symbol string, 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, address string, msg any) error { if srv, ok := b.chains[chain]; ok { srv.AddAddress(address, msg) fmt.Printf("✅ 添加监听地址: chain=%s, address=%s\n", chain, address) return nil } else { return fmt.Errorf("⚠️ 链未注册: %s\n", chain) } } func (b *BlockChainServer) RemoveAddress(chain, address string) error { if srv, ok := b.chains[chain]; ok { srv.RemoveAddress(address) fmt.Printf("🗑️ 移除监听地址: chain=%s, address=%s\n", chain, address) return nil } else { return fmt.Errorf("⚠️ 链未注册: %s\n", chain) } } func (b *BlockChainServer) Listen(chain, symbol string, ch chan any) error { if srv, ok := b.chains[chain]; ok { go func() { srv.Listen(symbol, ch) }() return nil } return fmt.Errorf("链未注册: %s", chain) } func (b *BlockChainServer) Transfer(chain, symbol string, msg any) error { if srv, ok := b.chains[chain]; ok { fmt.Printf("💸 %s-%s发起转账: %+v\n", chain, symbol, msg) return srv.Transfer(symbol, 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) }