Skip to content
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

Add FAQ about restricting methods to specific addresses #745

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open
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
19 changes: 18 additions & 1 deletion docs/zkapps/faq.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,23 @@ this.num.assertEquals(currentState);

This ensures that the transaction fails if the value of the field in question has changed.

### How do I restrict a provable method so that it can be invoked only by a specific address?

There are a number of ways to accomplish this:
- Provably add a signed child account update. Then, the method can be invoked only with a signature from the predefined address.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- Provably add a signed child account update. Then, the method can be invoked only with a signature from the predefined address.
- Provably add a signed child account update. Then, you can invoke the method only with a signature from the predefined address.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was looking at open PRs and noticed we let this one get stale... do we want to discuss? @garwalsh

```TypeScript
// in your method create empty signed account update
AccountUpdate.createSigned(someAddress);
```

```TypeScript
// later, sign the tx
tx.sign([privateKeyOfAddress]);
```

- Require a private key as a private input, and check that `privateKey.toPublicKey().assertEquals(this.address)`
- Require a signature as an input.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

by Require a signature as an input. do we mean to use the default value of signature? like https://docs.minaprotocol.com/zkapps/o1js/permissions#default-permissions

or do we want to set explicitly set the input field permission to signature? (or something else entirely?)

I was looking for a doc to link to, and found out that I need to learn more about what this means.

Permissions doc https://docs.minaprotocol.com/zkapps/o1js/permissions

signature: Fields that have their permission set to signature can only be manipulated by account updates that are accompanied and authorized by a valid signature.

Or do we mean something as described in https://docs.minaprotocol.com/zkapps/o1js/interact-with-mina#signing-transactions-and-explicit-account-updates ?

Signature authorization – used to update user accounts. Signatures are verified against the account's public key.


### Can I pass hex values into Fields?

Yes, just pass in the appropriate BigInt literal.
Expand Down Expand Up @@ -157,4 +174,4 @@ Pasta curves (Pallas and Vesta). See [Pasta Curves](https://o1-labs.github.io/pr

### When do I use Provable conditional logic?
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
### When do I use Provable conditional logic?
### When do I use provable conditional logic?


Are there situations in which I would not want to use the Provable versions? If the conditional logic is not part of your provable code, you do not need to use Provable conditional statements.
Are there situations in which I would not want to use the Provable versions? If the conditional logic is not part of your provable code, you do not need to use Provable conditional statements.
Loading