-
Notifications
You must be signed in to change notification settings - Fork 167
feat: adds webauthn client tests #1563
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
base: main
Are you sure you want to change the base?
Conversation
The latest updates on your projects. Learn more about Vercel for Git ↗︎
|
How to use the Graphite Merge QueueAdd the label graphite-merge-queue to this PR to add it to the merge queue. You must have a Graphite account in order to use the merge queue. Sign up using this link. An organization admin has enabled the Graphite Merge Queue in this repository. Please do not merge from GitHub as this will restart CI on PRs being processed by the merge queue. |
🌿 Documentation Preview
|
// connect session key | ||
let sessionKeyClient = await createModularAccountV2Client({ | ||
chain: instance.chain, | ||
signer: webAuthnSigningMethodsSessionKey, |
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.
should be passing in instance of SmartAccountSigner
here
name: "backUp", | ||
}); | ||
|
||
const webAuthnSigningMethods: SmartAccountSigner = new WebAuthnSigningMethods( |
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 think I am mistakenly treating this like an instance of SmartAccountSigner
when this is a standalone collection of webauthn signing methods, so it would get access to the WebAuthnCredentials via the account
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 left comments in the spec about this. It's not a smart account signer, it's what's used to create the various sign*
methods on the account itself. the account doesn't take a signer as input anymore, and just takes in the credential
36cd477
to
7549458
Compare
3f608b1
to
aec0234
Compare
@@ -94,6 +102,152 @@ describe("MA v2 Tests", async () => { | |||
accounts.unfundedAccountOwner, | |||
); | |||
|
|||
const publicKey = { |
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.
'publicKey' is assigned a value but never used.
* ``` | ||
* | ||
* @param {ClientMiddlewareFn} [gasEstimator] Optional custom gas estimator function | ||
* @returns {Function} A function that takes user operation struct and parameters, estimates gas usage, and returns the user operation with gas limits. |
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.
nit:
* @returns {Function} A function that takes user operation struct and parameters, estimates gas usage, and returns the user operation with gas limits. | |
* @returns {ClientMiddlewareFn} A function that takes user operation struct and parameters, estimates gas usage, and returns the user operation with gas limits. |
console.log({ chainHas7212 }); | ||
|
||
console.log("..."); | ||
console.log(BigInt(typeof pvg === "string" ? BigInt(pvg) : pvg)); | ||
console.log(chainHas7212 ? 10000n : 300000n); | ||
console.log( | ||
BigInt(typeof pvg === "string" ? BigInt(pvg) : pvg) + | ||
(chainHas7212 ? 10000n : 300000n) | ||
); |
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.
console.log({ chainHas7212 }); | |
console.log("..."); | |
console.log(BigInt(typeof pvg === "string" ? BigInt(pvg) : pvg)); | |
console.log(chainHas7212 ? 10000n : 300000n); | |
console.log( | |
BigInt(typeof pvg === "string" ? BigInt(pvg) : pvg) + | |
(chainHas7212 ? 10000n : 300000n) | |
); |
@@ -70,9 +73,24 @@ export type ModularAccountV2< | |||
encodeCallData: (callData: Hex) => Promise<Hex>; | |||
}; | |||
|
|||
export type ModularAccountV2NoSigner = SmartContractAccount< |
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.
export type ModularAccountV2NoSigner = SmartContractAccount< | |
export type WebauthnModularAccountV2 = SmartContractAccount< |
@@ -54,13 +57,36 @@ export type CreateModularAccountV2Params< | |||
} | |||
); | |||
|
|||
// currently the only ModularAccountV2 mode that doesn't require a signer is "webauthn" |
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.
can we just call it webauthn mav2?
"transport" | "chain" | "accountAddress" | ||
> & { | ||
mode: "webauthn"; | ||
params: ToWebAuthnAccountParameters; |
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.
what are these types? can we flatten them rather than having params
here?
@@ -41,6 +52,15 @@ export type CreateModularAccountV2ClientParams< | |||
"transport" | "account" | "chain" | |||
>; | |||
|
|||
export type CreateModularAccountV2ClientParamsNoSigner< |
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
@@ -50,7 +70,7 @@ export type CreateModularAccountV2AlchemyClientParams< | |||
"transport" | |||
> & | |||
Omit< | |||
AlchemySmartAccountClientConfig<TChain, LightAccount<TSigner>>, | |||
AlchemySmartAccountClientConfig<TChain, LightAccount<TSigner>>, // TO DO: split this type so that it doesn't require a signer |
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 is this LightAccount
?
args: CreateModularAccountV2ClientParamsNoSigner<TTransport, TChain> & | ||
NotType<TTransport, AlchemyTransport> & { | ||
params: ToWebAuthnAccountParameters; | ||
} |
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 does this need the params:
intersection? shouldn't that be part of CreateModularAccountV2ClientParamsNoSigner
?
); | ||
} | ||
|
||
console.log("\n\n\n\n\n a \n\n\n\n\n"); |
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.
console.log("\n\n\n\n\n a \n\n\n\n\n"); |
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.
ni can we call this signingMethods.ts
?
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.
or functions, w/e we export from the file
Pull Request Checklist
yarn test
)site
folder, and guidelines for updating/adding docs can be found in the contribution guide)feat!: breaking change
)yarn lint:check
) and fix any issues? (yarn lint:write
)PR-Codex overview
This PR introduces support for a new
webauthn
mode in the Modular Account V2 functionality, allowing accounts to be created and managed without a signer. It includes a new gas estimator and updates various types and functions to accommodate this change.Detailed summary
CreateModularAccountV2Params
to includeCreateModularAccountV2ParamsNoSigner
.createModularAccountV2
to supportModularAccountV2NoSigner
.webauthnGasEstimator
function for estimating gas usage.webauthnGasEstimator
.createModularAccountV2Client
to handlewebauthn
mode.ModularAccountV2NoSigner
type for accounts without a signer.webauthn
.