// 区块链网络抽象接口统一实现 package blockchain import ( "fmt" "log" "sync" ) type IChainServer interface { Listen() error ListenMsg() Transfer(from, to, symbol string, amount, fee float64) error Stop() } type BlockChainServer struct { mu sync.Mutex chains map[string]IChainServer } 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) Listen(chain string, ch chan any) error { if srv, ok := b.chains[chain]; ok { go func() { err := srv.Listen() if err != nil { log.Printf("Start Listen error: %v", err) return } }() return nil } return fmt.Errorf("链未注册: %s", chain) } func (b *BlockChainServer) ListenMsg(chain string) error { if srv, ok := b.chains[chain]; ok { go func() { srv.ListenMsg() }() return nil } return fmt.Errorf("链未注册: %s", chain) } func (b *BlockChainServer) Transfer(chain, from, to, symbol string, amount, fee float64) error { if srv, ok := b.chains[chain]; ok { fmt.Printf("💸 发起转账: Chain(%s)-Symbol(%s), From(%s), To(%s), Amount(%f)\n", chain, symbol, from, to, amount) go func() { err := srv.Transfer(from, to, symbol, amount, fee) if err != nil { log.Printf("Transfer Error: %v\n Transfer has Exited", err) return } }() return nil } 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() return } fmt.Printf("链未注册: %s", chain) }