package order import ( "flag" "schain/config" "schain/order/token" pb "schain/proto" "github.com/pkg/errors" ) var orderAddress = flag.String("order.address", config.OrderAddress, "order address") type OrderChaincodeStream interface { Send(*pb.ChaincodeMessage) error Recv() (*pb.ChaincodeMessage, error) } // OrderStream supports the (original) chaincode-as-client interaction pattern // 链码作为一个客户端与其他组件(如 orderer 或其他链码)进行交互。 // 这种模式下的链码可以向 orderer 发送交易请求、查询区块链状态等。 type OrderStream interface { OrderChaincodeStream CloseSend() error } // 获取一个用于与某个 orderer 进行通信的流对象,以便在链码中执行操作时使用 // client 与 order 的连接 func userChaincodeStreamGetter() (OrderStream, error) { if *orderAddress == "" { return nil, errors.New("flag 'order.address' must be set") } /*conf, err := internal.LoadConfig() if err != nil { return nil, err } conn, err := internal.NewClientConn(*orderAddress, conf) if err != nil { return nil, err }*/ conn, err := token.NewClient(*orderAddress) if err != nil { return nil, err } return token.NewRegisterClient(conn) } type peerStreamGetter func() (OrderStream, error) var streamGetter peerStreamGetter func GetOrderStream() (OrderStream, error) { if streamGetter == nil { streamGetter = userChaincodeStreamGetter } stream, err := streamGetter() if err != nil { return nil, err } return stream, nil }