mirror of
https://github.com/AthanorLabs/atomic-swap.git
synced 2026-01-09 14:18:03 -05:00
92 lines
2.5 KiB
Go
92 lines
2.5 KiB
Go
// Copyright 2023 Athanor Labs (ON)
|
|
// SPDX-License-Identifier: LGPL-3.0-only
|
|
|
|
package rpc
|
|
|
|
import (
|
|
"math/big"
|
|
"net/http"
|
|
|
|
"github.com/athanorlabs/atomic-swap/common/types"
|
|
mcrypto "github.com/athanorlabs/atomic-swap/crypto/monero"
|
|
"github.com/athanorlabs/atomic-swap/db"
|
|
contracts "github.com/athanorlabs/atomic-swap/ethereum"
|
|
|
|
ethcommon "github.com/ethereum/go-ethereum/common"
|
|
)
|
|
|
|
// RecoveryDB contains methods for retrieving swap recovery info from the database.
|
|
type RecoveryDB interface {
|
|
GetContractSwapInfo(id types.Hash) (*db.EthereumSwapInfo, error)
|
|
GetSwapPrivateKey(id types.Hash) (*mcrypto.PrivateSpendKey, error)
|
|
GetCounterpartySwapPrivateKey(id types.Hash) (*mcrypto.PrivateSpendKey, error)
|
|
}
|
|
|
|
// DatabaseService ...
|
|
type DatabaseService struct {
|
|
rdb RecoveryDB
|
|
}
|
|
|
|
// NewDatabaseService returns a new DatabaseService.
|
|
func NewDatabaseService(rdb RecoveryDB) *DatabaseService {
|
|
return &DatabaseService{
|
|
rdb: rdb,
|
|
}
|
|
}
|
|
|
|
// GetContractSwapInfoRequest ...
|
|
type GetContractSwapInfoRequest struct {
|
|
OfferID types.Hash `json:"offerID" validate:"required"`
|
|
}
|
|
|
|
// GetContractSwapInfoResponse ...
|
|
type GetContractSwapInfoResponse struct {
|
|
StartNumber *big.Int `json:"startBlockNumber" validate:"required"`
|
|
SwapID types.Hash `json:"swapID" validate:"required"`
|
|
Swap *contracts.SwapCreatorSwap `json:"swap" validate:"required"`
|
|
SwapCreatorAddr ethcommon.Address `json:"swapCreatorAddr" validate:"required"`
|
|
}
|
|
|
|
// GetContractSwapInfo returns the contract swap info for the given swap ID from the database.
|
|
func (s *DatabaseService) GetContractSwapInfo(
|
|
_ *http.Request,
|
|
req *GetContractSwapInfoRequest,
|
|
resp *GetContractSwapInfoResponse,
|
|
) error {
|
|
info, err := s.rdb.GetContractSwapInfo(req.OfferID)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
resp.StartNumber = info.StartNumber
|
|
resp.SwapID = info.SwapID
|
|
resp.Swap = info.Swap
|
|
resp.SwapCreatorAddr = info.SwapCreatorAddr
|
|
return nil
|
|
}
|
|
|
|
// GetSwapSecretRequest ...
|
|
type GetSwapSecretRequest struct {
|
|
OfferID types.Hash `json:"offerID" validate:"required"`
|
|
}
|
|
|
|
// GetSwapSecretResponse ...
|
|
type GetSwapSecretResponse struct {
|
|
Secret *mcrypto.PrivateSpendKey `json:"secret" validate:"required"`
|
|
}
|
|
|
|
// GetSwapSecret returns our swap secret for the given swap ID from the database.
|
|
func (s *DatabaseService) GetSwapSecret(
|
|
_ *http.Request,
|
|
req *GetSwapSecretRequest,
|
|
resp *GetSwapSecretResponse,
|
|
) error {
|
|
key, err := s.rdb.GetSwapPrivateKey(req.OfferID)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
resp.Secret = key
|
|
return nil
|
|
}
|