|
4 | 4 | "context"
|
5 | 5 | "encoding/hex"
|
6 | 6 | "fmt"
|
| 7 | + "strings" |
7 | 8 |
|
8 | 9 | arkv1 "github.com/ark-network/ark/api-spec/protobuf/gen/ark/v1"
|
9 | 10 | "github.com/ark-network/ark/server/internal/core/application"
|
@@ -191,17 +192,27 @@ func (e indexerService) GetSpendableVtxos(ctx context.Context, request *arkv1.Ge
|
191 | 192 | }, nil
|
192 | 193 | }
|
193 | 194 |
|
194 |
| -func (e indexerService) GetTransactionHistory(ctx context.Context, request *arkv1.GetTransactionHistoryRequest) (*arkv1.GetTransactionHistoryResponse, error) { |
195 |
| - address, err := parseArkAddress(request.GetAddress()) |
| 195 | +func (e indexerService) GetTransactionHistory( |
| 196 | + ctx context.Context, request *arkv1.GetTransactionHistoryRequest, |
| 197 | +) (*arkv1.GetTransactionHistoryResponse, error) { |
| 198 | + pubkey, err := parseArkAddress(request.GetAddress()) |
196 | 199 | if err != nil {
|
197 | 200 | return nil, status.Error(codes.InvalidArgument, err.Error())
|
198 | 201 | }
|
199 | 202 | page, err := parsePage(request.GetPage())
|
200 | 203 | if err != nil {
|
201 | 204 | return nil, status.Error(codes.InvalidArgument, err.Error())
|
202 | 205 | }
|
| 206 | + startTime, err := parseTimestamp(request.GetStartTime()) |
| 207 | + if err != nil { |
| 208 | + return nil, status.Error(codes.InvalidArgument, err.Error()) |
| 209 | + } |
| 210 | + endTime, err := parseTimestamp(request.GetEndTime()) |
| 211 | + if err != nil { |
| 212 | + return nil, status.Error(codes.InvalidArgument, err.Error()) |
| 213 | + } |
203 | 214 |
|
204 |
| - resp, err := e.indexerSvc.GetTransactionHistory(ctx, address, request.StartTime, request.EndTime, page) |
| 215 | + resp, err := e.indexerSvc.GetTransactionHistory(ctx, pubkey, startTime, endTime, page) |
205 | 216 | if err != nil {
|
206 | 217 | return nil, status.Errorf(codes.Internal, "failed to get transaction history: %v", err)
|
207 | 218 | }
|
@@ -243,9 +254,26 @@ func (e indexerService) GetVtxoChain(ctx context.Context, request *arkv1.GetVtxo
|
243 | 254 | }
|
244 | 255 |
|
245 | 256 | graph := make(map[string]*arkv1.IndexerTransactions)
|
246 |
| - for key, value := range resp.Transactions { |
| 257 | + for key, chain := range resp.Transactions { |
| 258 | + txs := make([]*arkv1.IndexerChain, 0, len(chain.Txs)) |
| 259 | + for _, tx := range chain.Txs { |
| 260 | + var txType arkv1.IndexerChainedTxType |
| 261 | + switch strings.ToLower(tx.Type) { |
| 262 | + case "commitment": |
| 263 | + txType = arkv1.IndexerChainedTxType_INDEXER_CHAINED_TX_TYPE_COMMITMENT |
| 264 | + case "virtual": |
| 265 | + txType = arkv1.IndexerChainedTxType_INDEXER_CHAINED_TX_TYPE_VIRTUAL |
| 266 | + default: |
| 267 | + txType = arkv1.IndexerChainedTxType_INDEXER_CHAINED_TX_TYPE_UNSPECIFIED |
| 268 | + } |
| 269 | + txs = append(txs, &arkv1.IndexerChain{ |
| 270 | + Txid: tx.Txid, |
| 271 | + Type: txType, |
| 272 | + }) |
| 273 | + } |
247 | 274 | graph[key] = &arkv1.IndexerTransactions{
|
248 |
| - Txs: value, |
| 275 | + Txs: txs, |
| 276 | + ExpiresAt: chain.ExpiresAt, |
249 | 277 | }
|
250 | 278 | }
|
251 | 279 |
|
@@ -355,3 +383,10 @@ func parseTxids(txids []string) ([]string, error) {
|
355 | 383 | }
|
356 | 384 | return txids, nil
|
357 | 385 | }
|
| 386 | + |
| 387 | +func parseTimestamp(timestamp int64) (int64, error) { |
| 388 | + if timestamp <= 0 { |
| 389 | + return 0, nil |
| 390 | + } |
| 391 | + return timestamp, nil |
| 392 | +} |
0 commit comments