Files
m2pool_payment/internal/blockchain/blockchain.go
2025-11-13 17:08:38 +08:00

81 lines
1.7 KiB
Go

// 区块链网络抽象接口统一实现
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)
}