Skip to content

Commit 3fdf6c5

Browse files
committed
assets: add rpc server
1 parent 0ce5c11 commit 3fdf6c5

File tree

1 file changed

+126
-0
lines changed

1 file changed

+126
-0
lines changed

assets/server.go

Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
package assets
2+
3+
import (
4+
"context"
5+
6+
clientrpc "github.com/lightninglabs/loop/looprpc"
7+
"github.com/lightninglabs/loop/swapserverrpc"
8+
"github.com/lightninglabs/taproot-assets/taprpc/universerpc"
9+
)
10+
11+
type AssetsClientServer struct {
12+
manager *AssetsSwapManager
13+
14+
clientrpc.UnimplementedAssetsClientServer
15+
}
16+
17+
func NewAssetsServer(manager *AssetsSwapManager) *AssetsClientServer {
18+
return &AssetsClientServer{
19+
manager: manager,
20+
}
21+
}
22+
23+
func (a *AssetsClientServer) SwapOut(ctx context.Context,
24+
req *clientrpc.SwapOutRequest) (*clientrpc.SwapOutResponse, error) {
25+
26+
swap, err := a.manager.NewSwapOut(
27+
ctx, req.Amt, req.Asset,
28+
)
29+
if err != nil {
30+
return nil, err
31+
}
32+
return &clientrpc.SwapOutResponse{
33+
SwapStatus: &clientrpc.AssetSwapStatus{
34+
SwapHash: swap.SwapOut.SwapHash[:],
35+
SwapStatus: string(swap.SwapOut.State),
36+
},
37+
}, nil
38+
}
39+
40+
func (a *AssetsClientServer) ListAssetSwaps(ctx context.Context,
41+
_ *clientrpc.ListAssetSwapsRequest) (*clientrpc.ListAssetSwapsResponse,
42+
error) {
43+
44+
swaps, err := a.manager.ListSwapOutoutputs(ctx)
45+
if err != nil {
46+
return nil, err
47+
}
48+
49+
rpcSwaps := make([]*clientrpc.AssetSwapStatus, 0, len(swaps))
50+
for _, swap := range swaps {
51+
rpcSwaps = append(rpcSwaps, &clientrpc.AssetSwapStatus{
52+
SwapHash: swap.SwapHash[:],
53+
SwapStatus: string(swap.State),
54+
})
55+
}
56+
57+
return &clientrpc.ListAssetSwapsResponse{
58+
SwapStatus: rpcSwaps,
59+
}, nil
60+
}
61+
62+
func (a *AssetsClientServer) ClientListAvailableAssets(ctx context.Context,
63+
req *clientrpc.ClientListAvailableAssetsRequest,
64+
) (*clientrpc.ClientListAvailableAssetsResponse, error) {
65+
66+
assets, err := a.manager.cfg.ServerClient.ListAvailableAssets(
67+
ctx, &swapserverrpc.ListAvailableAssetsRequest{},
68+
)
69+
if err != nil {
70+
return nil, err
71+
}
72+
73+
availableAssets := make([]*clientrpc.Asset, 0, len(assets.Assets))
74+
75+
for _, asset := range assets.Assets {
76+
clientAsset := &clientrpc.Asset{
77+
AssetId: asset.AssetId,
78+
SatsPerUnit: asset.CurrentSatsPerAssetUnit,
79+
Name: "Asset unknown in known universes",
80+
}
81+
universeRes, err := a.manager.cfg.AssetClient.QueryAssetRoots(
82+
ctx, &universerpc.AssetRootQuery{
83+
Id: &universerpc.ID{
84+
Id: &universerpc.ID_AssetId{
85+
AssetId: asset.AssetId,
86+
},
87+
ProofType: universerpc.ProofType_PROOF_TYPE_ISSUANCE,
88+
},
89+
},
90+
)
91+
if err != nil {
92+
return nil, err
93+
}
94+
95+
if universeRes.IssuanceRoot != nil {
96+
clientAsset.Name = universeRes.IssuanceRoot.AssetName
97+
}
98+
99+
availableAssets = append(availableAssets, clientAsset)
100+
}
101+
102+
return &clientrpc.ClientListAvailableAssetsResponse{
103+
AvailableAssets: availableAssets,
104+
}, nil
105+
}
106+
func (a *AssetsClientServer) ClientGetAssetSwapOutQuote(ctx context.Context,
107+
req *clientrpc.ClientGetAssetSwapOutQuoteRequest,
108+
) (*clientrpc.ClientGetAssetSwapOutQuoteResponse, error) {
109+
110+
// Get the quote from the server.
111+
quoteRes, err := a.manager.cfg.ServerClient.QuoteAssetLoopOut(
112+
ctx, &swapserverrpc.QuoteAssetLoopOutRequest{
113+
Amount: req.Amt,
114+
Asset: req.Asset,
115+
},
116+
)
117+
if err != nil {
118+
return nil, err
119+
}
120+
121+
return &clientrpc.ClientGetAssetSwapOutQuoteResponse{
122+
SwapFee: quoteRes.SwapFeeRate,
123+
PrepayAmt: quoteRes.FixedPrepayAmt,
124+
SatsPerUnit: quoteRes.CurrentSatsPerAssetUnit,
125+
}, nil
126+
}

0 commit comments

Comments
 (0)