Skip to content

Commit 027886b

Browse files
committed
assets: add rpc server
1 parent 24c6d37 commit 027886b

File tree

1 file changed

+127
-0
lines changed

1 file changed

+127
-0
lines changed

assets/server.go

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
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+
asset := asset
77+
clientAsset := &clientrpc.Asset{
78+
AssetId: asset.AssetId,
79+
SatsPerUnit: asset.CurrentSatsPerAssetUnit,
80+
Name: "Asset unknown in known universes",
81+
}
82+
universeRes, err := a.manager.cfg.AssetClient.QueryAssetRoots(
83+
ctx, &universerpc.AssetRootQuery{
84+
Id: &universerpc.ID{
85+
Id: &universerpc.ID_AssetId{
86+
AssetId: asset.AssetId,
87+
},
88+
ProofType: universerpc.ProofType_PROOF_TYPE_ISSUANCE,
89+
},
90+
},
91+
)
92+
if err != nil {
93+
return nil, err
94+
}
95+
96+
if universeRes.IssuanceRoot != nil {
97+
clientAsset.Name = universeRes.IssuanceRoot.AssetName
98+
}
99+
100+
availableAssets = append(availableAssets, clientAsset)
101+
}
102+
103+
return &clientrpc.ClientListAvailableAssetsResponse{
104+
AvailableAssets: availableAssets,
105+
}, nil
106+
}
107+
func (a *AssetsClientServer) ClientGetAssetSwapOutQuote(ctx context.Context,
108+
req *clientrpc.ClientGetAssetSwapOutQuoteRequest,
109+
) (*clientrpc.ClientGetAssetSwapOutQuoteResponse, error) {
110+
111+
// Get the quote from the server.
112+
quoteRes, err := a.manager.cfg.ServerClient.QuoteAssetLoopOut(
113+
ctx, &swapserverrpc.QuoteAssetLoopOutRequest{
114+
Amount: req.Amt,
115+
Asset: req.Asset,
116+
},
117+
)
118+
if err != nil {
119+
return nil, err
120+
}
121+
122+
return &clientrpc.ClientGetAssetSwapOutQuoteResponse{
123+
SwapFee: quoteRes.SwapFeeRate,
124+
PrepayAmt: quoteRes.FixedPrepayAmt,
125+
SatsPerUnit: quoteRes.CurrentSatsPerAssetUnit,
126+
}, nil
127+
}

0 commit comments

Comments
 (0)