-
Notifications
You must be signed in to change notification settings - Fork 217
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
Address derivation for shared wallets #2624
Conversation
@@ -184,7 +185,7 @@ data Depth | |||
data Role | |||
= UtxoExternal | |||
| UtxoInternal | |||
| MutableAccount | |||
| Stake |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This will cause a breaking change in the API which generically derive path parameters from these constructors. I agree with the change here, but the JSON instance of the API should be modified to also still accept mutable_account
if provided to not break existing integrations.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
after some thinking I reverted this change
_ -> Left $ TextDecodingError "KeyHash should begin with either '0' or '1'." | ||
Nothing -> Left $ TextDecodingError "KeyHash should not be empty." | ||
bimap textDecodingError (KeyHash keyRole) | ||
$ convertFromBase Base16 $ T.encodeUtf8 txt' |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is a red-herring to me 🤔 ...
Why would you need to differentiate them in the database? Surely, the context when deserializing from the database is enough to assign the right role to the key hash. If it's not, then it should likely go in a separate column, instead of being serialized all at once.
Regardless, this will require a database migration and I fail to see how existing databases can be migrated 🤔 ? (or said differently, why is this distinction only occurs now?)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I checked that KeyHash is not stored. These instances are not needed in the end. so removed them. They are some remnants of past version of shared wallet I forgot to erase.
f4443f6
to
178732d
Compare
SharedKey | ||
|
||
keyTypeDescriptor _ = | ||
"shared" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I have doubts what should be here to be honest
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is the name then used to prefix database's names. In other wallet scheme, we typically use a 3-letter identifier:
- she
- ica
- rnd
I'd say that for consistency, we probably want to also have a 3-letter name here but I am perhaps being too maniac 😬
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
went for sha
lib/core/src/Cardano/Wallet.hs
Outdated
|
||
return addrK | ||
where | ||
db = ctx ^. dbLayer @IO @s @k |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This code looks very similar to derivePublicKeyShelley
. Both function could be unified rather easily by providing the account key lookup as a function:
derivePublicKey
:: forall ctx s k n.
( HasDBLayer IO s k ctx
, SoftDerivation k
)
=> ctx
-> WalletId
-> (s -> k 'AccountK XPub)
-> Role
-> DerivationIndex
-> ExceptT ErrDerivePublicKey IO (k 'AddressK XPub)
derivePublicKey ctx wid getAccountKey role_ ix = ...
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
SharedKey | ||
|
||
keyTypeDescriptor _ = | ||
"shared" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is the name then used to prefix database's names. In other wallet scheme, we typically use a 3-letter identifier:
- she
- ica
- rnd
I'd say that for consistency, we probably want to also have a 3-letter name here but I am perhaps being too maniac 😬
5643486
to
8fed84a
Compare
6cccabd
to
db78467
Compare
@KtorZ @rvl I added PaymentAddress instances to make it pass - at this level (we are not discovering, sending txs) it is not needed. But this is to be changed.. This bits should be used https://github.com/input-output-hk/cardano-wallet/blob/master/lib/core/src/Cardano/Wallet/Primitive/AddressDiscovery/Script.hs#L189 I need to think how to approach it. Would prefer to do it in the next PR addressing discovery .. |
db78467
to
2eede29
Compare
specifications/api/swagger.yaml
Outdated
@@ -5199,3 +5231,40 @@ paths: | |||
application/json: | |||
schema: *ApiSharedWalletPatchData | |||
responses: *responsesPatchSharedWallet | |||
|
|||
/shared-wallets/{walletId}/keys/{role}/{index}?hash=false: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am not sure if query params should be exposed like this.Nevertheless,
openapi-spec-validator --schema 3.0.0 specifications/api/swagger.yaml
passes
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I fixed it for you.
f97d0d4
to
ddeafcc
Compare
request @ApiVerificationKeyShared ctx link Default Empty | ||
getSharedWalletKey ctx (ApiSharedWallet (Right w)) role ix hashed = do | ||
let link = Link.getSharedWalletKey w role ix hashed | ||
request @ApiVerificationKeyShared ctx link Default Empty |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Minor note: this implicitly suggests to me that both implementations are different, whereas they aren't. I would favour a prismatic accessor to extract the wallet from the ApiSharedWallet
instead, or simply pattern match on that field only inside the function body, e.g.
let w = case apiSharedWalletOf ...
let link = ...
request @...
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
request @ApiAccountKeyShared ctx link headers payload | ||
postAccountKeyShared ctx (ApiSharedWallet (Right w)) ix headers payload = do | ||
let link = Link.postAccountKeyShared w ix | ||
request @ApiAccountKeyShared ctx link headers payload |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Same here ☝️
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done, also for other Shared-related helpers
"from" : [ | ||
"addr_shared_vkh1zxt0uvrza94h3hv4jpv0ttddgnwkvdgeyq8jf9w30mcs6y8w3nq", | ||
"stake_shared_vkh1nac0awgfa4zjsh4elnjmsscz0huhss8q2g0x3n7m539mwaa5m7s" | ||
], |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍
}|] | ||
r <- request @AnyAddress ctx Link.postAnyAddress Default payload | ||
expectResponseCode HTTP.status400 r | ||
let msg = "All keys of a script must have the same role: either payment or delegation." |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This should not be hard-coded here but rather defined in the Framework/TestData
module for lack of a better mechanism.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done, also for other errors connected with scripts
@@ -119,8 +127,8 @@ spec = describe "SHARED_WALLETS" $ do | |||
} | |||
} | |||
} |] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Note that, I think this doesn't generally reflect a real use-case. Users don't generally know how to get their account public key from their recovery phrase. A typical scenario when creating from a mnemonic would be to:
- Create a shared wallet with an empty mapping of cosigners
- Query the API to get the account key associated with the wallet
- Complete the script template by providing the mapping for my own key
Likely, the step 2 & 3 would automatically be done by Daedalus on the behalf of the end-user; still I'd love to see our scenarios reflecting this and not resort on custom accPubKeyFromMnemonics
;) ... In the end, the goal of the API scenarios is to described capabilities doable only via the API.
I imagine that this may be conflicting with the invariant we are trying to enforce, right? So it may be necessary to either:
- Provide a way to easily derive keys from a given mnemonic phrase via the API (less preferred approach)
- Allow maybe for assigning a special string
"self"
to cosigners, such that one could submit:And let the server replace it with the correct account key internally.{ "cosigner#0": "self" },
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yes, it is conflicting with invariant we introduced in the previous shared wallet PR. I will try with self
though
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done, added illustrative integration tests, aligned swagger and core unit tests
keyRole = case role' of | ||
UtxoExternal -> CA.Payment | ||
MutableAccount -> CA.Delegation | ||
_ -> error "verification keys make sense only for payment (role=0) and delegation (role=2)" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
And role=1
; The type signature is not restricted to purpose=1854
so role=1
should be possible here, or the type signature should be further restricted.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
corrected
paymentKeyFingerprint (_, paymentK) = | ||
Right $ KeyFingerprint $ blake2b224 $ xpubPublicKey $ getKey paymentK | ||
|
||
instance PaymentAddress 'Mainnet SharedKey where |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't think this instance make sense for SharedKey
. An address (payment or delegation) can in principle only be constructed from the state using the script template!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
there was unnecessary Payment n SharedKey
constraint in Sqlite's PersistentState. Now it is removed
, hashed :: VerificationKeyHashing | ||
} deriving (Eq, Generic, Show) | ||
deriving anyclass NFData | ||
|
||
data ApiPostAccountKeyData = ApiPostAccountKeyData | ||
{ passphrase :: ApiT (Passphrase "raw") | ||
, extended :: Bool |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Only seeing this now, and I think we can do better than Bool
here.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
introduced data KeyFormat = Extended | NonExtended
as a replacement
:<|> patchSharedWallet multisig ShelleyKey Delegation | ||
:<|> deleteWallet multisig | ||
postSharedWallet @_ @_ @SharedKey multisig Shared.generateKeyFromSeed SharedKey | ||
:<|> (\wid -> withMultisigLayer wid |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Cf earlier comment, I don't think this indirection is necessary.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
@@ -247,6 +249,9 @@ instance TxWitnessTagFor IcarusKey where | |||
instance TxWitnessTagFor ByronKey where | |||
txWitnessTagFor = TxWitnessByronUTxO Byron | |||
|
|||
instance TxWitnessTagFor SharedKey where |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This instance looks very suspicious to me. This should not be needed for Shared wallets since they are signed independently and using a different process. Plus, TxWitnessTagFor
is used for calculating the size of the resulting transaction; in the case of shared scripts this also needs to acknowledge for the script in the witness which require more changes to the code down the line.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
removed newTransactionLayer from apiLayer for the time being. Will return to it when txs are to be supported for shared wallets
specifications/api/swagger.yaml
Outdated
/shared-wallets/{walletId}/keys/{role}/{index}?hash=false: | ||
get: | ||
operationId: getSharedWalletKey | ||
tags: ["Keys"] |
This comment was marked as resolved.
This comment was marked as resolved.
Sorry, something went wrong.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed in c68a6bc.
Question:
The same behavior is actually for shelley wallet from acc pub key and it's corresponding endpoint, however I'm wondering if it is in fact desired behavior? 🤔 |
c491cad
to
0ddcab9
Compare
That seems like a bug to me @piotr-iohk, although the impact is low given that the user would presumably already know their acc pub key. |
610320b
to
f446059
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not a small PR 🙃 , it would be good to try to limit the number of changes which goes in a single PR in the future to make iterations less painful. For examples:
- Tackle only one endpoint at a time
- Work on core changes first in isolation (e.g. the SharedKey module) before wiring it up into all layers of the code
- Do database changes separately
Modulo some final minor remarks, I think the PR is okay now. Though quite large also and therefore, it is possible that I have missed something. Before we completely close the shared story and call it done I'd like to have some time to play with the API from a user perspective as a form of acceptance test and I invite @piotr-iohk to do the same. It may be a good opportunity to also write an extensive user guide about that!
@@ -668,6 +680,7 @@ postWallet | |||
, IsOurs s RewardAccount | |||
, Typeable s | |||
, Typeable n | |||
, (k == SharedKey) ~ 'False |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Interesting. I thought GHC would figure it out 🤷
getPurpose :: Index 'Hardened 'PurposeK | ||
|
||
-- It is used for geting account public key for a given state. | ||
class GetAccount s (key :: Depth -> Type -> Type) | s -> key where |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why the functional dependency here 🤔 ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
we have s ~ SomethingKey n key, and return key ~Account XPub, and I wanted to enforce that key is from s...
@@ -288,7 +290,7 @@ serveWallet | |||
Server.idleWorker | |||
shelleyApi <- apiLayer (newTransactionLayer net) nl | |||
(Server.manageRewardBalance proxy) | |||
multisigApi <- apiLayer (newTransactionLayer net) nl | |||
multisigApi <- apiLayer undefined nl |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Whoops? I understand you want to do this in a second PR and there's currently nothing wired into the transaction layer but may we use a more descriptive error than undefined
here 😬 ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
specifications/api/swagger.yaml
Outdated
@@ -4109,6 +4186,7 @@ x-tagGroups: | |||
- name: Shelley (Shared Wallets) | |||
tags: | |||
- Shared Wallets | |||
- Shared Keys |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Small note: I'd put the Shelley (Shared Wallets)
section before Byron (Random)
. Byron is legacy so it makes more sense to have it presented last 👍
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It's looking good - almost there!
@@ -2186,6 +2186,7 @@ updateCosigner | |||
, Typeable n | |||
, WalletKey k | |||
, HasDBLayer IO s k ctx | |||
, k ~ SharedKey |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just wondering aloud, could the constraints in these functions be made shorter because the types are basically fixed?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
we can think of introducing constriant groups probably but I am not sure and do not know if they will be more clear. Personally, I am accustomed to explicit constrains. But I was one day looking at ledger repo and they introduced those composite constraints and I think they serve well, but they have situation that one the same composite constraints is in many places...
@@ -668,6 +679,7 @@ postWallet | |||
, IsOurs s RewardAccount | |||
, Typeable s | |||
, Typeable n | |||
, (k == SharedKey) ~ 'False |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am a bit confused by this.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
so we use this here https://hackage.haskell.org/package/base-4.15.0.0/docs/src/Data-Type-Equality.html#%3D%3D and we needed as we introduced different ParentContext for SharedKey and the rest (ShelleyKey/IcarusKey..). So we want here to say that k must not be SharedKey. for SharedKey we just specify k ~ SharedKey
-> ApiT DerivationIndex | ||
-> ApiPostAccountKeyData | ||
-> Handler ApiAccountKeyShared | ||
postAccountPublicKeyShared ctx (ApiT wid) (ApiT ix) (ApiPostAccountKeyData (ApiT pwd) extd) = do |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This function looks almost idential to postAccountPublicKeyShelley
. Likewise for the JSON instances of ApiAccountKeyShared
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
indeed, good point. adopted postAccountPublicKey
in both Shelley and Shared cases
-> ApiT DerivationIndex | ||
-> ApiPostAccountKeyData | ||
-> Handler ApiAccountKeyShared | ||
postAccountPublicKeyShared ctx (ApiT wid) (ApiT ix) (ApiPostAccountKeyData (ApiT pwd) extd) = do | ||
withWorkerCtx @_ @s @k ctx wid liftE liftE $ \wrk -> do |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I suggest combining them and adding a hrp prefix string as a type parameter or something like that.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
@@ -288,7 +290,7 @@ serveWallet | |||
Server.idleWorker | |||
shelleyApi <- apiLayer (newTransactionLayer net) nl | |||
(Server.manageRewardBalance proxy) | |||
multisigApi <- apiLayer (newTransactionLayer net) nl | |||
multisigApi <- apiLayer undefined nl |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm guessing there is some tricky type error?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
no no...there is required TxWintnessTag instance and I want to leave it for ADP-686. And for the current endpoints tx later is not engaged
:<|> patchSharedWallet multisig ShelleyKey Delegation | ||
:<|> deleteWallet multisig | ||
sharedWallets | ||
:: ApiLayer (SharedState n SharedKey) SharedKey |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The other server functions get their ctx
from the function scope.
These ones could also, right?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
the problem is that it takes ctx type from the above context and we have ApiLayer (SharedStaten ShelleyKey) ShelleyKey ... so I needed to do this trick to make it tick...Nevertheless, I will relook if I can do something in coming PR....
specifications/api/swagger.yaml
Outdated
Create a shared wallet from an account public key and script | ||
template index. | ||
|
||
**TODO:** ADP-866 is it also restored? If not, when? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Would it be possible to describe what happens when the shared wallet is created? Is it restored immediately, or must further API requests be made, etc, etc.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
specifications/api/swagger.yaml
Outdated
@@ -5259,6 +5340,8 @@ paths: | |||
summary: Get | |||
description: | | |||
<p align="right">status: <strong>⚠ under development</strong></p> | |||
|
|||
**TODO:** ADP-866 document this endpoint. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I put these TODO messages in for you ;-)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
bors r+ |
2624: Address derivation for shared wallets r=paweljakubas a=paweljakubas # Issue Number ADP-866 # Overview - [x] Adding Shared style - [x] Accommodate new cardano-addresses, align code, change MutableAccount -> Stake - [x] Deal with prefixes of shared wallet vs shelley wallet by adding SharedWalletKeys - [x] Align all unit tests - [x] Align all integration tests plus add test checking newly added validation in cardano-addresses - [x] Add integration testing - [x] Enable receiving hashed verification keys, now only verification keys are present which needs to be hashed to be used in script - [x] Sneak SharedKey in shared wallet rather than ShelleyKey - [x] Removed MultisigScript from Role and refactored ParentContext # Comments [Rendered API docs](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/input-output-hk/cardano-wallet/paweljakubas/adp-866/add-shared-style/specifications/api/swagger.yaml) Co-authored-by: Pawel Jakubas <[email protected]> Co-authored-by: IOHK <[email protected]> Co-authored-by: Piotr Stachyra <[email protected]> Co-authored-by: Rodney Lorrimar <[email protected]>
Build failed: |
import fix
0bee2c4
to
e11d3b0
Compare
bors r+ |
2624: Address derivation for shared wallets r=paweljakubas a=paweljakubas # Issue Number ADP-866 # Overview - [x] Adding Shared style - [x] Accommodate new cardano-addresses, align code, change MutableAccount -> Stake - [x] Deal with prefixes of shared wallet vs shelley wallet by adding SharedWalletKeys - [x] Align all unit tests - [x] Align all integration tests plus add test checking newly added validation in cardano-addresses - [x] Add integration testing - [x] Enable receiving hashed verification keys, now only verification keys are present which needs to be hashed to be used in script - [x] Sneak SharedKey in shared wallet rather than ShelleyKey - [x] Removed MultisigScript from Role and refactored ParentContext # Comments [Rendered API docs](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/input-output-hk/cardano-wallet/paweljakubas/adp-866/add-shared-style/specifications/api/swagger.yaml) Co-authored-by: Pawel Jakubas <[email protected]> Co-authored-by: IOHK <[email protected]> Co-authored-by: Piotr Stachyra <[email protected]> Co-authored-by: Rodney Lorrimar <[email protected]>
Build failed: |
bors r+ |
2624: Address derivation for shared wallets r=paweljakubas a=paweljakubas # Issue Number ADP-866 # Overview - [x] Adding Shared style - [x] Accommodate new cardano-addresses, align code, change MutableAccount -> Stake - [x] Deal with prefixes of shared wallet vs shelley wallet by adding SharedWalletKeys - [x] Align all unit tests - [x] Align all integration tests plus add test checking newly added validation in cardano-addresses - [x] Add integration testing - [x] Enable receiving hashed verification keys, now only verification keys are present which needs to be hashed to be used in script - [x] Sneak SharedKey in shared wallet rather than ShelleyKey - [x] Removed MultisigScript from Role and refactored ParentContext # Comments [Rendered API docs](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/input-output-hk/cardano-wallet/paweljakubas/adp-866/add-shared-style/specifications/api/swagger.yaml) Co-authored-by: Pawel Jakubas <[email protected]> Co-authored-by: IOHK <[email protected]> Co-authored-by: Piotr Stachyra <[email protected]> Co-authored-by: Rodney Lorrimar <[email protected]>
Timed out. |
bors retry |
2624: Address derivation for shared wallets r=paweljakubas a=paweljakubas # Issue Number ADP-866 # Overview - [x] Adding Shared style - [x] Accommodate new cardano-addresses, align code, change MutableAccount -> Stake - [x] Deal with prefixes of shared wallet vs shelley wallet by adding SharedWalletKeys - [x] Align all unit tests - [x] Align all integration tests plus add test checking newly added validation in cardano-addresses - [x] Add integration testing - [x] Enable receiving hashed verification keys, now only verification keys are present which needs to be hashed to be used in script - [x] Sneak SharedKey in shared wallet rather than ShelleyKey - [x] Removed MultisigScript from Role and refactored ParentContext # Comments [Rendered API docs](https://redocly.github.io/redoc/?url=https://raw.githubusercontent.com/input-output-hk/cardano-wallet/paweljakubas/adp-866/add-shared-style/specifications/api/swagger.yaml) Co-authored-by: Pawel Jakubas <[email protected]> Co-authored-by: IOHK <[email protected]> Co-authored-by: Piotr Stachyra <[email protected]> Co-authored-by: Rodney Lorrimar <[email protected]>
Build failed: |
bors retry |
Build succeeded: |
Issue Number
ADP-866
Overview
Comments
Rendered API docs