Skip to content

Commit

Permalink
feat: add tx family of endpoints
Browse files Browse the repository at this point in the history
Closes: #21
  • Loading branch information
sourabhxyz committed Mar 5, 2024
1 parent 3132deb commit be90fb5
Show file tree
Hide file tree
Showing 3 changed files with 89 additions and 1 deletion.
1 change: 1 addition & 0 deletions geniusyield-server-lib/geniusyield-server-lib.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ library
GeniusYield.Server.Files
GeniusYield.Server.Options
GeniusYield.Server.RequestLoggerMiddleware
GeniusYield.Server.Tx
GeniusYield.Server.Utils

other-modules:
Expand Down
5 changes: 4 additions & 1 deletion geniusyield-server-lib/src/GeniusYield/Server/Api.hs
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,9 @@ import GeniusYield.GYConfig (GYCoreConfig (cfgNetworkId))
import GeniusYield.Imports
import GeniusYield.Server.Constants (gitHash)
import GeniusYield.Server.Ctx
import GeniusYield.Server.Dex.PartialOrder (DEXPartialOrderAPI, handleDEXPartialOrder)
import GeniusYield.Server.Dex.Markets (MarketsAPI, handleMarketsApi)
import GeniusYield.Server.Dex.PartialOrder (DEXPartialOrderAPI, handleDEXPartialOrder)
import GeniusYield.Server.Tx (TxAPI, handleTxApi)
import GeniusYield.Server.Utils
import GeniusYield.Types
import PackageInfo_geniusyield_server_lib qualified as PackageInfo
Expand Down Expand Up @@ -55,6 +56,7 @@ type GeniusYieldAPI =
"settings" :> Get '[JSON] Settings
:<|> DEXPartialOrderAPI
:<|> MarketsAPI
:<|> TxAPI

geniusYieldAPI Proxy GeniusYieldAPI
geniusYieldAPI = Proxy
Expand All @@ -77,6 +79,7 @@ geniusYieldServer ctx =
handleSettings ctx
:<|> handleDEXPartialOrder ctx
:<|> handleMarketsApi ctx
:<|> handleTxApi ctx

type MainAPI =
GeniusYieldAPI
Expand Down
84 changes: 84 additions & 0 deletions geniusyield-server-lib/src/GeniusYield/Server/Tx.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
module GeniusYield.Server.Tx (
TxAPI,
handleTxApi,
) where

import Control.Lens ((?~))
import Data.Maybe (fromJust)
import Data.Ratio ((%))
import Data.Swagger qualified as Swagger
import Data.Swagger.Internal.Schema qualified as Swagger
import Data.Text qualified as T
import Deriving.Aeson
import GHC.TypeLits (Symbol)
import GeniusYield.Api.Dex.PartialOrder (PORefs (..), PartialOrderInfo (..), cancelMultiplePartialOrders, getPartialOrdersInfos, partialOrders, placePartialOrder')
import GeniusYield.Api.Dex.PartialOrderConfig (fetchPartialOrderConfig)
import GeniusYield.HTTP.Errors (
GYApiError (..),
IsGYApiError (..),
)
import GeniusYield.Imports
import GeniusYield.OrderBot.Types (OrderAssetPair (..), mkEquivalentAssetPair, mkOrderAssetPair)
import GeniusYield.Scripts.Dex.PartialOrderConfig (PartialOrderConfigInfoF (..))
import GeniusYield.Server.Ctx
import GeniusYield.Server.Utils (addSwaggerDescription, dropAndCamelToSnake, logInfo, unsignedTxHex)
import GeniusYield.TxBuilder.Class
import GeniusYield.Types
import Network.HTTP.Types (status400)
import PlutusLedgerApi.V1.Address (pubKeyHashAddress)
import RIO.Map qualified as Map
import Servant

type TransactionSignPrefix Symbol
type TransactionSignPrefix = "tf"

-- TODO: JSON & Swagger instances.
data TransactionSign = TransactionSign
{ tsTransaction !GYTx
}
deriving stock (Generic)
deriving
(FromJSON, ToJSON)
via CustomJSON '[FieldLabelModifier '[StripPrefix TransactionSignPrefix, CamelToSnake]] TransactionSign

instance Swagger.ToSchema TransactionSign where
declareNamedSchema =
Swagger.genericDeclareNamedSchema Swagger.defaultSchemaOptions {Swagger.fieldLabelModifier = dropAndCamelToSnake @TransactionSignPrefix}

type TxAPI =
"tx"
:> "sign"
:> ReqBody '[JSON] GYTx
:> Post '[JSON] GYTx
:<|> "tx"
:> "sign_and_submit"
:> ReqBody '[JSON] GYTx
:> Post '[JSON] GYTxId
:<|> "tx"
:> "submit"
:> ReqBody '[JSON] GYTx
:> Post '[JSON] GYTxId

handleTxApi Ctx ServerT TxAPI IO
handleTxApi ctx =
handleTxSign ctx
:<|> handleTxSignAndSubmit ctx
:<|> handleTxSubmit ctx

handleTxSign Ctx GYTx IO GYTx
handleTxSign ctx@Ctx {..} tx = do
-- TODO: Add log.
-- TODO: add signature.
pure tx

handleTxSignAndSubmit Ctx GYTx IO GYTxId
handleTxSignAndSubmit ctx@Ctx {..} tx = do
-- TODO: Add log.
-- TODO: add logic.
pure $ "6c751d3e198c5608dfafdfdffe16aeac8a28f88f3a769cf22dd45e8bc84f47e8"

handleTxSubmit Ctx GYTx IO GYTxId
handleTxSubmit ctx@Ctx {..} tx = do
-- TODO: Add log.
-- TODO: add logic.
pure $ "6c751d3e198c5608dfafdfdffe16aeac8a28f88f3a769cf22dd45e8bc84f47e8"

0 comments on commit be90fb5

Please sign in to comment.