Skip to content

WIP: cont-signing #726

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 1 commit into
base: develop
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions dep/signing-api/github.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"owner": "kadena-io",
"repo": "signing-api",
"branch": "master",
"branch": "jam/cont-signing",
"private": false,
"rev": "bf0f4dda9b02bfb107d36ab0edf2333b0568d4aa",
"sha256": "104yamzy1sdnkjsjkcqqlz5jm0y03vhq4nqqvbwfcmywav3r66jv"
"rev": "3496b0876cb7da33b67cf38b9c188dfa64b4693b",
"sha256": "0qzf4i3q6w5kp9lahmy7zvk1l3dy3ayhj95qhi2x2ppijg7w0mf5"
}
11 changes: 8 additions & 3 deletions desktop/src/Desktop/WalletApi.hs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ walletServer
:: MonadIO m
=> IO ()
-> IO ()
-> m (MVarHandler SigningRequest SigningResponse)
-> m (MVarHandler SigningRequest SigningResponse, MVarHandler ContRequest SigningResponse)
-- Commented much of the old functionality out (vs. removing it) since we intend to revisit it in the near future
-- -> m ( MVarHandler SigningRequest SigningResponse
-- , MVarHandler () [PublicKey]
Expand All @@ -37,13 +37,18 @@ walletServer
walletServer moveToForeground moveToBackground = do
signingLock <- liftIO newEmptyMVar -- Only allow one signing request to be served at once
h@(MVarHandler signingRequestMVar signingResponseMVar) <- liftIO newMVarHandler
c@(MVarHandler contRequestMVar contResponseMVar) <- liftIO newMVarHandler
-- keysHandler <- liftIO newMVarHandler
-- accountsHandler <- liftIO newMVarHandler
let
runSign obj = mkServantHandler <=< liftIO $ bracket_ (putMVar signingLock ()) (takeMVar signingLock) $ do
putMVar signingRequestMVar obj -- handoff to app
bracket moveToForeground (const $ moveToBackground) (\_ -> takeMVar signingResponseMVar)

runContSign obj = mkServantHandler <=< liftIO $ bracket_ (putMVar signingLock ()) (takeMVar signingLock) $ do
putMVar contRequestMVar obj -- handoff to app
bracket moveToForeground (const $ moveToBackground) (\_ -> takeMVar contResponseMVar)

-- runMVarHandler (MVarHandler req resp) = do
-- mkServantHandler <=< liftIO $ do
-- putMVar req ()
Expand All @@ -58,11 +63,11 @@ walletServer moveToForeground moveToBackground = do
{ Wai.corsRequestHeaders = Wai.simpleHeaders }
apiServer
= Warp.runSettings s $ Wai.cors laxCors
$ Servant.serve walletApi $ runSign -- :<|> runMVarHandler keysHandler :<|> runMVarHandler accountsHandler
$ Servant.serve walletApi $ (runSign :<|> runContSign)

liftIO $ void $ Async.async $ apiServer
-- pure (h, keysHandler, accountsHandler)
pure h
pure (h,c)

type WalletAPI = "v1" :> V1WalletAPI
type V1WalletAPI = V1SigningApi
Expand Down
1 change: 1 addition & 0 deletions frontend/src/Frontend.hs
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ frontend = Frontend
, _appCfg_loadEditor = loadEditorFromLocalStorage
, _appCfg_editorReadOnly = False
, _appCfg_signingHandler = printResponsesHandler
, _appCfg_contHandler = printResponsesHandler
, _appCfg_enabledSettings = enabledSettings
, _appCfg_logMessage = errorLevelLogger
}
Expand Down
26 changes: 25 additions & 1 deletion frontend/src/Frontend/App.hs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ import GHCJS.DOM.EventM (on)
import GHCJS.DOM.GlobalEventHandlers (keyPress)
import GHCJS.DOM.KeyboardEvent (getCtrlKey, getKey, getKeyCode, getMetaKey)
import GHCJS.DOM.Types (HTMLElement (..), unElement)
import Kadena.SigningApi (SigningRequest, SigningResponse)
import Kadena.SigningApi
import Language.Javascript.JSaddle (liftJSM)
import Obelisk.Generated.Static
import Obelisk.Route (R)
Expand Down Expand Up @@ -95,6 +95,7 @@ app
app sidebarExtra fileFFI appCfg = Store.versionedFrontend (Store.versionedStorage @key) $ void . mfix $ \ cfg -> do
ideL <- makeIde fileFFI appCfg cfg
FRPHandler signingReq signingResp <- _appCfg_signingHandler appCfg
FRPHandler contReq contResp <- _appCfg_contHandler appCfg

walletSidebar sidebarExtra
updates <- divClass "page" $ do
Expand Down Expand Up @@ -165,17 +166,40 @@ app sidebarExtra fileFFI appCfg = Store.versionedFrontend (Store.versionedStorag
modalCfg <- showModal ideL

req <- delay 0 signingReq
let
proof = "eyJjaGFpbiI6MSwib2JqZWN0IjoiQUFBQUVBQUFBQUFBQUFBQkFLNGdycG9XZHM5ZURuUFRkT29JbVctaTJIZl9sQlM5MjJ5SFl1ZzZ6N1FwQVBvT3I1VHN3QWNRWng4U0RvUlUwYmVKTDhxTjgzYXVGYkVhTk5ZQUtHTmZBZWhPUk94V0FyQmJ1emV2dktNR1BlMHVGVV9QTzJ6MzdULS1jS2F0NnV3ekFZeEdVa3JNS0c3bDBBaVFjajVodkdEaVJoelJXVVVacXRucFFxRXVqdDJSQUlNeTdyU29ualh5WmxJY0RST29ieFo4UEV1SDFNV2pHRnRoZE54Z2dFZkdBVWpCODBmaGpYQURGbkpBNUtXSDVGZ1UtejdQbWs3QWU0elhRN1B1aGt2TUFPSUxwcEw1UkVmYjIyYk56emN1UG1KSVRUSjRsSnltS2gxME5jdVZVQlhEQUYzQlBKaV92Z1Jhd2FFbXRuVGVrWVR6T2NwblFnX2owSzNzUjhBRlBuYnFBZkRwSHBkdkxpYTZBeWtVRnhUcjlJT0VrWmlZX0YzNUJVWC1KenhZVTc0WEFELUI5dXRhdGRBc2JrS2hHQ3dvSnZHT1lZRWxSVDItald5eXBUMkl5SmRUQWM3LUhiaFpudWswd3VJRXl1TjZLaDVwVDJfbmdLNmxSRnRMWmp5Yy1sZU5BTWZuQngxVzU1TVFVTWdUcnUtT2dFUVUtWjM3STJ0Mmg2NkhRb3l5V2NGakFJYUxqWHZsTm5kZG0zWFEtbnpSdVNlTFpMTUsydUdrT1drNGpoUkp2WlA4QWVsNVFNaWpfQWgxalptM0VydEZadUZESF9FR3JLNDhVN3BJUGwtYnFkbFlBTDM5UmZCbTl4U2hhcEVpWVRrbkZDNHFYeDkxQnY3eWhKYmtiaGlyZm1VV0FFVS00cUFVR2lOQW16S3VvbGZoZ3NJa09yNzI4RHJneW1MenN1RUlpdGI0Iiwic3ViamVjdCI6eyJpbnB1dCI6IkFCUjdJbWRoY3lJNk16azBMQ0p5WlhOMWJIUWlPbnNpYzNSaGRIVnpJam9pYzNWalkyVnpjeUlzSW1SaGRHRWlPbnNpWVcxdmRXNTBJam94TENKeVpXTmxhWFpsY2lJNkltczZZamhqWVdaa09UQmtOMlEzWkRnMVpUbGxNRE5tWXpnellUUmpaVGd3T1RRMll6STVNekJsTWpFd09UWTRZbVZqWWpBeVlUYzBOakZpTmpCbVpHRTBaQ0lzSW5KbFkyVnBkbVZ5TFdkMVlYSmtJanA3SW5CeVpXUWlPaUpyWlhsekxXRnNiQ0lzSW10bGVYTWlPbHNpWWpoallXWmtPVEJrTjJRM1pEZzFaVGxsTURObVl6Z3pZVFJqWlRnd09UUTJZekk1TXpCbE1qRXdPVFk0WW1WallqQXlZVGMwTmpGaU5qQm1aR0UwWkNKZGZYMTlMQ0p5WlhGTFpYa2lPaUp6TlhCTlRDMU5hbXBSWlRRemIwZFdYekl4Vmxka1VrSnNhaTFOWHpaSmRWQmpjemwxZVZkdlpITm5JaXdpYkc5bmN5STZJbFJOUWpSVlEzQkdNRXRUTVRacFozQkNaM1ZvU0ZkVlFXNDNXVE5EVjJabFNFWlRPVGhtVnpkalJsVWlMQ0psZG1WdWRITWlPbHQ3SW5CaGNtRnRjeUk2V3lKck9tSTRZMkZtWkRrd1pEZGtOMlE0TldVNVpUQXpabU00TTJFMFkyVTRNRGswTm1NeU9UTXdaVEl4TURrMk9HSmxZMkl3TW1FM05EWXhZall3Wm1SaE5HUWlMQ0prWWpjM05qYzVNMkpsTUdaalpqaGxOelpqTnpWaVpHSXpOV0V6Tm1VMk4yWXlPVGd4TVRGa1l6WXhORFZqTmpZMk9UTmlNREV6TXpFNU1tVXlOakUySWl3ekxqazBaUzAwWFN3aWJtRnRaU0k2SWxSU1FVNVRSa1ZTSWl3aWJXOWtkV3hsSWpwN0ltNWhiV1Z6Y0dGalpTSTZiblZzYkN3aWJtRnRaU0k2SW1OdmFXNGlmU3dpYlc5a2RXeGxTR0Z6YUNJNklqRnZjMTl6VEVGVldYWkNlbk53YmpWcWFtRjNkRkp3U2xkcFNERlhVR1pvZVU1eVlXVldkbE5KZDFVaWZTeDdJbkJoY21GdGN5STZXeUpyT21JNFkyRm1aRGt3WkRka04yUTROV1U1WlRBelptTTRNMkUwWTJVNE1EazBObU15T1RNd1pUSXhNRGsyT0dKbFkySXdNbUUzTkRZeFlqWXdabVJoTkdRaUxDSWlMREZkTENKdVlXMWxJam9pVkZKQlRsTkdSVklpTENKdGIyUjFiR1VpT25zaWJtRnRaWE53WVdObElqcHVkV3hzTENKdVlXMWxJam9pWTI5cGJpSjlMQ0p0YjJSMWJHVklZWE5vSWpvaU1XOXpYM05NUVZWWmRrSjZjM0J1TldwcVlYZDBVbkJLVjJsSU1WZFFabWg1VG5KaFpWWjJVMGwzVlNKOUxIc2ljR0Z5WVcxeklqcGJJakVpTENKamIybHVMblJ5WVc1elptVnlMV055YjNOelkyaGhhVzRpTEZzaWF6cGlPR05oWm1RNU1HUTNaRGRrT0RWbE9XVXdNMlpqT0ROaE5HTmxPREE1TkRaak1qa3pNR1V5TVRBNU5qaGlaV05pTURKaE56UTJNV0kyTUdaa1lUUmtJaXdpYXpwaU9HTmhabVE1TUdRM1pEZGtPRFZsT1dVd00yWmpPRE5oTkdObE9EQTVORFpqTWprek1HVXlNVEE1TmpoaVpXTmlNREpoTnpRMk1XSTJNR1prWVRSa0lpeDdJbkJ5WldRaU9pSnJaWGx6TFdGc2JDSXNJbXRsZVhNaU9sc2lZamhqWVdaa09UQmtOMlEzWkRnMVpUbGxNRE5tWXpnellUUmpaVGd3T1RRMll6STVNekJsTWpFd09UWTRZbVZqWWpBeVlUYzBOakZpTmpCbVpHRTBaQ0pkZlN3aU1TSXNNVjFkTENKdVlXMWxJam9pV0Y5WlNVVk1SQ0lzSW0xdlpIVnNaU0k2ZXlKdVlXMWxjM0JoWTJVaU9tNTFiR3dzSW01aGJXVWlPaUp3WVdOMEluMHNJbTF2WkhWc1pVaGhjMmdpT2lJeGIzTmZjMHhCVlZsMlFucHpjRzQxYW1waGQzUlNjRXBYYVVneFYxQm1hSGxPY21GbFZuWlRTWGRWSW4xZExDSnRaWFJoUkdGMFlTSTZiblZzYkN3aVkyOXVkR2x1ZFdGMGFXOXVJanA3SW1WNFpXTjFkR1ZrSWpwdWRXeHNMQ0p3WVdOMFNXUWlPaUp6TlhCTlRDMU5hbXBSWlRRemIwZFdYekl4Vmxka1VrSnNhaTFOWHpaSmRWQmpjemwxZVZkdlpITm5JaXdpYzNSbGNFaGhjMUp2Ykd4aVlXTnJJanBtWVd4elpTd2ljM1JsY0NJNk1Dd2llV2xsYkdRaU9uc2laR0YwWVNJNmV5SmhiVzkxYm5RaU9qRXNJbkpsWTJWcGRtVnlJam9pYXpwaU9HTmhabVE1TUdRM1pEZGtPRFZsT1dVd00yWmpPRE5oTkdObE9EQTVORFpqTWprek1HVXlNVEE1TmpoaVpXTmlNREpoTnpRMk1XSTJNR1prWVRSa0lpd2ljbVZqWldsMlpYSXRaM1ZoY21RaU9uc2ljSEpsWkNJNkltdGxlWE10WVd4c0lpd2lhMlY1Y3lJNld5SmlPR05oWm1RNU1HUTNaRGRrT0RWbE9XVXdNMlpqT0ROaE5HTmxPREE1TkRaak1qa3pNR1V5TVRBNU5qaGlaV05pTURKaE56UTJNV0kyTUdaa1lUUmtJbDE5ZlN3aWMyOTFjbU5sSWpvaU1DSXNJbkJ5YjNabGJtRnVZMlVpT25zaWRHRnlaMlYwUTJoaGFXNUpaQ0k2SWpFaUxDSnRiMlIxYkdWSVlYTm9Jam9pTVc5elgzTk1RVlZaZGtKNmMzQnVOV3BxWVhkMFVuQktWMmxJTVZkUVptaDVUbkpoWlZaMlUwbDNWU0o5ZlN3aVkyOXVkR2x1ZFdGMGFXOXVJanA3SW1GeVozTWlPbHNpYXpwaU9HTmhabVE1TUdRM1pEZGtPRFZsT1dVd00yWmpPRE5oTkdObE9EQTVORFpqTWprek1HVXlNVEE1TmpoaVpXTmlNREpoTnpRMk1XSTJNR1prWVRSa0lpd2lhenBpT0dOaFptUTVNR1EzWkRka09EVmxPV1V3TTJaak9ETmhOR05sT0RBNU5EWmpNamt6TUdVeU1UQTVOamhpWldOaU1ESmhOelEyTVdJMk1HWmtZVFJrSWl4N0luQnlaV1FpT2lKclpYbHpMV0ZzYkNJc0ltdGxlWE1pT2xzaVlqaGpZV1prT1RCa04yUTNaRGcxWlRsbE1ETm1Zemd6WVRSalpUZ3dPVFEyWXpJNU16QmxNakV3T1RZNFltVmpZakF5WVRjME5qRmlOakJtWkdFMFpDSmRmU3dpTVNJc01WMHNJbVJsWmlJNkltTnZhVzR1ZEhKaGJuTm1aWEl0WTNKdmMzTmphR0ZwYmlKOUxDSnpkR1Z3UTI5MWJuUWlPako5TENKMGVFbGtJam94T0RjM05qWTRmUSJ9LCJhbGdvcml0aG0iOiJTSEE1MTJ0XzI1NiJ9"
cont = ContRequest
{ _contRequest_pactId = "s5pML-MjjQe43oGV_21VWdRBlj-M_6IuPcs9uyWodsg"
, _contRequest_rollback = False
, _contRequest_step = 1
, _contRequest_proof = Just proof
, _contRequest_data = Nothing
, _contRequest_caps = []
, _contRequest_nonce = Just "hey"
, _contRequest_chainId = Nothing
, _contRequest_gasLimit = Nothing
, _contRequest_ttl = Nothing
, _contRequest_sender = Just $ AccountName "doug"
, _contRequest_extraSigners = Nothing
}
contReq <- elAttr "div" ("style" =: "position: absolute; border: 1px solid black; left: 200px; top: 20px;") $
uiButton (headerBtnCfgPrimary & uiButtonCfg_class <>~ " main-header__account-button") $
text "ContSign"
let
onGistCreatedModal = Just . uiCreatedGist <$> ideL ^. gistStore_created
gistModalCfg = mempty & modalCfg_setModal .~ onGistCreatedModal
onSigningModal = Just . uiSigning ideL signingResp <$> req
signingModalCfg = mempty & modalCfg_setModal .~ onSigningModal

onContSignModal = Just . uiSigning ideL signingResp <$> (cont <$ contReq)
contModalCfg = mempty & modalCfg_setModal .~ onContSignModal

pure $ mconcat
[ updates
, modalCfg
, gistModalCfg
, signingModalCfg
, contModalCfg
, mempty & ideCfg_editor . editorCfg_loadCode .~ (snd <$> _fileFFI_externalFileOpened fileFFI)
]

Expand Down
1 change: 1 addition & 0 deletions frontend/src/Frontend/AppCfg.hs
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ data AppCfg key t m = AppCfg
, _appCfg_editorReadOnly :: Bool
-- ^ Is the editor read only?
, _appCfg_signingHandler :: m (FRPHandler SigningRequest SigningResponse t m)
, _appCfg_contHandler :: m (FRPHandler ContRequest SigningResponse t m)
, _appCfg_enabledSettings :: EnabledSettings key t m
, _appCfg_logMessage :: LogLevel -> LogStr -> IO ()
-- ^ Logging Function
Expand Down
20 changes: 17 additions & 3 deletions frontend/src/Frontend/UI/DeploymentSettings.hs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
module Frontend.UI.DeploymentSettings
( -- * Settings
DeploymentSettingsConfig (..)
, PayloadDeploymentConfig (..)
, ContCfg (..)
, DeploymentSettingsResult (..)

-- * Errors
Expand Down Expand Up @@ -114,6 +116,17 @@ import Frontend.UI.Widgets
import Frontend.UI.Widgets.Helpers (preventUpAndDownArrow, preventScrollWheel, dialogSectionHeading)
import Frontend.Wallet

data PayloadDeploymentConfig t =
Payload_ExecCfg (Dynamic t Text)
| Payload_ContCfg ContCfg

data ContCfg = ContCfg
{ _contCfg_pactId :: Text
, _contCfg_rollback :: Bool
, _contCfg_step :: Int
, _contCfg_proof :: Maybe Text
}

-- | Config for the deployment settings widget.
data DeploymentSettingsConfig t m model a = DeploymentSettingsConfig
{ _deploymentSettingsConfig_userTab :: Maybe (Text, m a)
Expand All @@ -131,8 +144,8 @@ data DeploymentSettingsConfig t m model a = DeploymentSettingsConfig
, _deploymentSettingsConfig_data :: Maybe Aeson.Object
-- ^ Data selection. If 'Nothing', uses the users setting (and allows them
-- to alter it). Otherwise, it remains fixed.
, _deploymentSettingsConfig_code :: Dynamic t Text
-- ^ Code that is being deployed
, _deploymentSettingsConfig_payload :: PayloadDeploymentConfig t

, _deploymentSettingsConfig_nonce :: Maybe Text
-- ^ Nonce. 'Nothing' will autogenerate a nonce based on the current time.
, _deploymentSettingsConfig_ttl :: Maybe TTLSeconds
Expand Down Expand Up @@ -386,7 +399,8 @@ uiDeploymentSettings
-> DeploymentSettingsConfig t m model a
-> m (mConf, Event t (DeploymentSettingsResult key), Maybe a)
uiDeploymentSettings m settings = mdo
let code = _deploymentSettingsConfig_code settings
--TODO: FIX patternmatch
let (Payload_ExecCfg code) = _deploymentSettingsConfig_payload settings
(curSelection, done, _) <- buildDeployTabs mUserTabName (_deploymentSettingsConfig_includePreviewTab settings) controls
(conf, result, ma) <- elClass "div" "modal__main transaction_details" $ do

Expand Down
2 changes: 1 addition & 1 deletion frontend/src/Frontend/UI/Dialogs/CallFunction.hs
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ uiCallFunction m mModule func _onClose
(cfg, result, mPactCall) <- uiDeploymentSettings m $ DeploymentSettingsConfig
{ _deploymentSettingsConfig_userTab = parametersTab m func
, _deploymentSettingsConfig_chainId = \_ -> pure $ pure $ Just $ _chainRef_chain . _moduleRef_source $ moduleRef
, _deploymentSettingsConfig_code = fromMaybe (pure $ buildCall func []) mPactCall
, _deploymentSettingsConfig_payload = Payload_ExecCfg $ fromMaybe (pure $ buildCall func []) mPactCall
, _deploymentSettingsConfig_sender = \_ _ _ -> uiAccountAny
-- , _deploymentSettingsConfig_sender = uiAccountDropdown def (pure $ \_ _ -> True) (pure id)
, _deploymentSettingsConfig_data = Nothing
Expand Down
2 changes: 1 addition & 1 deletion frontend/src/Frontend/UI/Dialogs/DeployConfirmation.hs
Original file line number Diff line number Diff line change
Expand Up @@ -376,7 +376,7 @@ uiDeployConfirmation code model = fullDeployFlow def model $ do
(settingsCfg, result, _) <- uiDeploymentSettings model $ DeploymentSettingsConfig
{ _deploymentSettingsConfig_chainId = fmap value . userChainIdSelect . getChainsFromHomogenousNetwork
, _deploymentSettingsConfig_userTab = Nothing
, _deploymentSettingsConfig_code = pure code
, _deploymentSettingsConfig_payload = Payload_ExecCfg $ pure code
, _deploymentSettingsConfig_sender = \_ _ _ -> uiAccountAny
, _deploymentSettingsConfig_data = Nothing
, _deploymentSettingsConfig_ttl = Nothing
Expand Down