From f08cf904ee3fa744b229ac48e63c7c6555f3a0eb Mon Sep 17 00:00:00 2001 From: Illia Polosukhin Date: Tue, 21 Jun 2022 17:18:51 -0400 Subject: [PATCH 1/8] Initial commit for meta tx standard --- neps/nep-0000.md | 63 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 neps/nep-0000.md diff --git a/neps/nep-0000.md b/neps/nep-0000.md new file mode 100644 index 000000000..f1d2d6a76 --- /dev/null +++ b/neps/nep-0000.md @@ -0,0 +1,63 @@ +--- +NEP: 0 +Title: Meta Transactions +Author: Illia Polosukhin +DiscussionsTo: https://github.com/nearprotocol/neps/pull/0000 +Status: Draft +Type: Protocol Track +Category: Contract +Created: 21-Jun-2022 +--- + +## Summary + +In-protocol meta transactions allowing for third-party account to initiate and pay transactions on behalf of the account. + +## Motivation + +NEAR has been designed with simplifiy of onboarding in mind. One of the large hurdles right now is that after creating an implicit or even named account user doesn't have NEAR to pay gas fees to interact with apps. +Such apps can include an app that actually would pay user (like NEARCrowd or Sweatcoin). + +## Rationale and alternatives + +Proposed here design provides the easiest for users and developers way to onboard and pay for user transactions. +There is no requirement on the user account, including user account may not even exist on chain and implicit account can be used. + +Alterantive is proxy contracts deployed on the user account. +This design has severe limitations as it requires user to deploy such contract and additional costs for storage. + +## Specification + +Next changes to protocol are required: + - New Action kind: `DelegateAction(receiver_id, Action, signer_pk, signature)` + - On conversion to Receipt, such action is sent as `DelegateAction` to the `receiver_id`. + - On processing Receipt, it verifies the `signature` over the given account and `signer_pk`. Unwraps into `receiver_id: AccountId`, `action: Action` inside into new Receipt with given `receiver_id` and `action`. This means that `predeccessor_id` of such action has been overriden. + +See the changes in the protocol specification for details. + +## Security Implications (Optional) + +Biggest consideration to discuss, if `signer_id` should be overriden by `DelegateAction`. +There are pros and cons to this. + +Another consideration is the format of signature for `DelegateAction` that user should provide. This is to ensure security of such operation, at the same time it can be just a Transaction format. + +## Drawbacks (Optional) + +Increases complexity of the NEAR's transactional model. + +## Unresolved Issues (Optional) + +- What parts of the design do you expect to resolve through the NEP process before this gets merged? +- What parts of the design do you expect to resolve through the implementation of this feature before stabilization? +- What related issues do you consider out of scope for this NEP that could be addressed in the future independently of the solution that comes out of this NEP? + +## Future possibilities + +One specific way to expand is to allow ZK proofs be included instead of just a user signature. +This would allow to hide who is initiating transaction while still overriding the `predeccessor` for the contracts. + +## Copyright +[copyright]: #copyright + +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). From 09bdb8ed60bff32e0599b2f4d6e6293effb81b20 Mon Sep 17 00:00:00 2001 From: Illia Polosukhin Date: Thu, 23 Jun 2022 08:38:51 -0400 Subject: [PATCH 2/8] Adding a lot more details for DelegateAction design --- README.md | 1 + neps/nep-0000.md | 33 +++++++------- specs/RuntimeSpec/Actions.md | 82 +++++++++++++++++++++++++++++++++++ specs/RuntimeSpec/Receipts.md | 2 +- 4 files changed, 100 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 315643f23..d04f906e3 100644 --- a/README.md +++ b/README.md @@ -25,6 +25,7 @@ Changes to the protocol specification and standards are called NEAR Enhancement |[0245](https://github.com/near/NEPs/blob/master/neps/nep-0245.md) | Multi Token Standard | @zcstarr @riqi @jriemann @marcos.sun | Review | |[0297](https://github.com/near/NEPs/blob/master/neps/nep-0297.md) | Events Standard | @telezhnaya | Final | |[0330](https://github.com/near/NEPs/blob/master/neps/nep-0330.md) | Source Metadata | @BenKurrek | Review | +|[0000](https://github.com/near/NEPs/blob/master/neps/nep-0000.md) | Meta Transactions | @ilblackdragon | Draft | diff --git a/neps/nep-0000.md b/neps/nep-0000.md index f1d2d6a76..3a8e2016d 100644 --- a/neps/nep-0000.md +++ b/neps/nep-0000.md @@ -5,25 +5,28 @@ Author: Illia Polosukhin DiscussionsTo: https://github.com/nearprotocol/neps/pull/0000 Status: Draft Type: Protocol Track -Category: Contract +Category: Runtime Created: 21-Jun-2022 --- ## Summary -In-protocol meta transactions allowing for third-party account to initiate and pay transactions on behalf of the account. +In-protocol meta transactions allowing for third-party account to initiate and pay transaction fees on behalf of the account. ## Motivation -NEAR has been designed with simplifiy of onboarding in mind. One of the large hurdles right now is that after creating an implicit or even named account user doesn't have NEAR to pay gas fees to interact with apps. -Such apps can include an app that actually would pay user (like NEARCrowd or Sweatcoin). +NEAR has been designed with simplify of onboarding in mind. One of the large hurdles right now is that after creating an implicit or even named account user doesn't have NEAR to pay gas fees to interact with apps. + +For example, apps that pay user for doing work (like NEARCrowd or Sweatcoin) or free-to-play games. + +[Aurora Plus](https://aurora.plus) has shown viability of the relayers that can offer some number of free transactions and a subscription model. Shifting the complexity of dealing with fees to the infrastructure from the user space. ## Rationale and alternatives Proposed here design provides the easiest for users and developers way to onboard and pay for user transactions. There is no requirement on the user account, including user account may not even exist on chain and implicit account can be used. -Alterantive is proxy contracts deployed on the user account. +An alterantive is a proxy contracts deployed on the user account. This design has severe limitations as it requires user to deploy such contract and additional costs for storage. ## Specification @@ -33,29 +36,25 @@ Next changes to protocol are required: - On conversion to Receipt, such action is sent as `DelegateAction` to the `receiver_id`. - On processing Receipt, it verifies the `signature` over the given account and `signer_pk`. Unwraps into `receiver_id: AccountId`, `action: Action` inside into new Receipt with given `receiver_id` and `action`. This means that `predeccessor_id` of such action has been overriden. -See the changes in the protocol specification for details. +See the [DelegateAction specification](specs/RuntimeSepc/Actions.md#DelegateAction) for details. -## Security Implications (Optional) +## Security Implications -Biggest consideration to discuss, if `signer_id` should be overriden by `DelegateAction`. -There are pros and cons to this. +Delegate actions do not override `signer_pk`, leaving that to the original signer that initiated transaction (eg relayer in meta transaction case). Although it is possible to override `signer_pk` in the context with one from `DelegateAction`, there is no clear value to do that. -Another consideration is the format of signature for `DelegateAction` that user should provide. This is to ensure security of such operation, at the same time it can be just a Transaction format. +See ***Validation*** section in [DelegateAction specification](specs/RuntimeSepc/Actions.md#DelegateAction) for security considerations around what user signs and validation of actions with different permissions. -## Drawbacks (Optional) +## Drawbacks Increases complexity of the NEAR's transactional model. -## Unresolved Issues (Optional) +Meta transactions take an extra block to execute, as they first need to be included by the originating account, then routed to the delegate account and only after that to the real destination. -- What parts of the design do you expect to resolve through the NEP process before this gets merged? -- What parts of the design do you expect to resolve through the implementation of this feature before stabilization? -- What related issues do you consider out of scope for this NEP that could be addressed in the future independently of the solution that comes out of this NEP? +Delegate actions are not programmable as they require having signatures. Original proposal contained a new `AccessKey` kind that would support programmable delegated actions. On the other hand, that would be limiting without progamability of smart contracts, hence that idea evolved into [Account Extensions](https://github.com/nearprotocol/neps/pull/0000). ## Future possibilities -One specific way to expand is to allow ZK proofs be included instead of just a user signature. -This would allow to hide who is initiating transaction while still overriding the `predeccessor` for the contracts. +Supporting ZK proofs instead of just signatures can allow for anonymous transactions, which pay fees to relayers in anonymous way. ## Copyright [copyright]: #copyright diff --git a/specs/RuntimeSpec/Actions.md b/specs/RuntimeSpec/Actions.md index 7c5622533..0fa370a9e 100644 --- a/specs/RuntimeSpec/Actions.md +++ b/specs/RuntimeSpec/Actions.md @@ -12,6 +12,7 @@ pub enum Action { AddKey(AddKeyAction), DeleteKey(DeleteKeyAction), DeleteAccount(DeleteAccountAction), + DelegateAction(DelegationAction), } ``` @@ -276,3 +277,84 @@ DeleteAccountStaking { account_id: AccountId } **Execution Error**: - If state or storage is corrupted, a `StorageError` is returned. + +## DelegateAction + +Delegate action allows for an account to initiate a batch of actions on behalf of the receiving account, allowing to proxy actions. This is used in implementation of meta transactions. + +```rust +pub struct DelegateAction { + /// Receiver of the delegated actions. + receiver_id: AccountId, + /// List of actions to be executed. + actions: Vec, + + /// Public key that is used to sign this delegated action. + signer_pk: PublicKey, + /// Nonce is used to determine that the same delegate action is not sent twice by relayers and should match for given account's `signer_pk`. + /// After this action is processed it will increment. + nonce: Nonce, + /// Signature of the originating user signing `DelegateActionMessage` formed out of the data in the `DelegateAction`. + signature: Signature, +} +``` + + Supporting a batch of `actions` means `DelegateAction` can initiate a complex steps like creating a new account and transferring funds, deploying a contract and executing an initialization function. + +***Validation***: +To ensure that `DelegateAction` is correct, on receival the verification of signature is done: `verify_signature(hash(message), signer_pk, signature)`. + +The `message` is formed in the next format and must be signed by the user: +```rust +struct DelegateActionMessage { + /// Matching the `predecessor_id` that have created `DelegateAction`. + sender_id: AccountId, + /// Matching the given account_id. + signer_id: AccountId, + /// Matching the `signer_pk` from `DelegateAction`. + public_key: PublicKey, + /// Nonce for the given `public_key` from `DelegateAction`. + nonce: Nonce, + /// Matching the `receiver_id` from `DelegateAction`. + receiver_id: AccountId, + /// Block hash to ensure validity. + /// Actions matching `actions` from `DelegateAction`. + actions: Vec, +} +``` + +The next set of security concerns are addressed by this format: + - If format matches `Transaction`, the relayer can just send it directly, not receiving payment. + - Because set of actions can include pay back to the relayer (for example by paying in FT), the `sender_id` is added directly into the message to ensure that nobody else can send this message. + - `nonce` is included to ensure that this message can't be replayed again. + - `public_key` and `signer_id` are needed to ensure the on the right account, work across rotating keys and fetch correct `nonce`. + +The permissions are verified based on kind `AccessKeyPermission` of `signer_pk`: + - `AccessKeyPermission::FullAccess`, all actions are allowed. + - `AccessKeyPermission::FunctionCall`, only a single `FunctionCall` action is allowed in `actions`. + - `DelegateAction.receiver_id` must match to the `account[public_key].receiver_id` + - `DelegateAction.actions[0].method_name` must be in the `account[public_key].method_names` + +***Outcomes***: +- If `signature` matches receiver's accounts `signer_pk`, new receipt is created from this account with set of `ActionReceipt { receiver_id, action }` for each item in `actions`. + +### Errors + +**Validation Error** +- If `signer_pk` does not exist for the given account, the following error will be returned +```rust +/// Signer key for delegate action is missing from given account +DelegateActionSignerDoesNotExist +``` + +- If `nonce` does not exist match `signer_pk` for `receiver_id`, the following error will be returned +```rust +/// Nonce must be account[signer_pk].nonce + 1 +DelegateActionInvalidNonce +``` + +- If `signature` does not match to the data and `signer_pk` of the given key, the following error will be returned +```rust +/// Signature does not match the provided actions and given signer public key. +DelegateActionInvalidSignature +``` diff --git a/specs/RuntimeSpec/Receipts.md b/specs/RuntimeSpec/Receipts.md index d494d98e8..b89845154 100644 --- a/specs/RuntimeSpec/Receipts.md +++ b/specs/RuntimeSpec/Receipts.md @@ -1,6 +1,6 @@ # Receipt -All cross-contract (we assume that each account lives in it's own shard) communication in Near happens trough Receipts. +All cross-contract (we assume that each account lives in it's own shard) communication in Near happens through Receipts. Receipts are stateful in a sense that they serve not only as messages between accounts but also can be stored in the account storage to await DataReceipts. Each receipt has a [`predecessor_id`](#predecessor_id) (who sent it) and [`receiver_id`](#receiver_id) the current account. From 7cf1baaa2c95764ab8c4c8bb1f395118c793c62f Mon Sep 17 00:00:00 2001 From: Illia Polosukhin Date: Thu, 23 Jun 2022 16:01:40 -0400 Subject: [PATCH 3/8] Adding PR number --- README.md | 2 +- neps/{nep-0000.md => nep-0366.md} | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) rename neps/{nep-0000.md => nep-0366.md} (97%) diff --git a/README.md b/README.md index d04f906e3..475e7b278 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ Changes to the protocol specification and standards are called NEAR Enhancement |[0245](https://github.com/near/NEPs/blob/master/neps/nep-0245.md) | Multi Token Standard | @zcstarr @riqi @jriemann @marcos.sun | Review | |[0297](https://github.com/near/NEPs/blob/master/neps/nep-0297.md) | Events Standard | @telezhnaya | Final | |[0330](https://github.com/near/NEPs/blob/master/neps/nep-0330.md) | Source Metadata | @BenKurrek | Review | -|[0000](https://github.com/near/NEPs/blob/master/neps/nep-0000.md) | Meta Transactions | @ilblackdragon | Draft | +|[0366](https://github.com/near/NEPs/blob/master/neps/nep-0000.md) | Meta Transactions | @ilblackdragon | Draft | diff --git a/neps/nep-0000.md b/neps/nep-0366.md similarity index 97% rename from neps/nep-0000.md rename to neps/nep-0366.md index 3a8e2016d..31ea83ec3 100644 --- a/neps/nep-0000.md +++ b/neps/nep-0366.md @@ -1,8 +1,8 @@ --- -NEP: 0 +NEP: 366 Title: Meta Transactions Author: Illia Polosukhin -DiscussionsTo: https://github.com/nearprotocol/neps/pull/0000 +DiscussionsTo: https://github.com/nearprotocol/neps/pull/366 Status: Draft Type: Protocol Track Category: Runtime From 6c6720ea9b6e2dbcaa751af2ebcb753d41f2d8f7 Mon Sep 17 00:00:00 2001 From: Illia Polosukhin Date: Fri, 24 Jun 2022 06:51:51 -0400 Subject: [PATCH 4/8] Move details of the DelegateAction from Actions.md to the proposal. Add the flow of data --- neps/nep-0366.md | 98 +++++++++++++++++++++++++++++++++--- specs/RuntimeSpec/Actions.md | 82 ------------------------------ 2 files changed, 92 insertions(+), 88 deletions(-) diff --git a/neps/nep-0366.md b/neps/nep-0366.md index 31ea83ec3..13abce97a 100644 --- a/neps/nep-0366.md +++ b/neps/nep-0366.md @@ -15,7 +15,7 @@ In-protocol meta transactions allowing for third-party account to initiate and p ## Motivation -NEAR has been designed with simplify of onboarding in mind. One of the large hurdles right now is that after creating an implicit or even named account user doesn't have NEAR to pay gas fees to interact with apps. +NEAR has been designed with simplicity of onboarding in mind. One of the large hurdles right now is that after creating an implicit or even named account the user does not have NEAR to pay gas fees to interact with apps. For example, apps that pay user for doing work (like NEARCrowd or Sweatcoin) or free-to-play games. @@ -26,15 +26,101 @@ For example, apps that pay user for doing work (like NEARCrowd or Sweatcoin) or Proposed here design provides the easiest for users and developers way to onboard and pay for user transactions. There is no requirement on the user account, including user account may not even exist on chain and implicit account can be used. -An alterantive is a proxy contracts deployed on the user account. +An alternative is proxy contracts deployed on the user account. This design has severe limitations as it requires user to deploy such contract and additional costs for storage. ## Specification -Next changes to protocol are required: - - New Action kind: `DelegateAction(receiver_id, Action, signer_pk, signature)` - - On conversion to Receipt, such action is sent as `DelegateAction` to the `receiver_id`. - - On processing Receipt, it verifies the `signature` over the given account and `signer_pk`. Unwraps into `receiver_id: AccountId`, `action: Action` inside into new Receipt with given `receiver_id` and `action`. This means that `predeccessor_id` of such action has been overriden. +The main flow of the meta transaction will be as follows: + - User will sign `DelegateActionMessage` specifying set of actions that they need to be executed. It also includes specific relayer to ensure secure execution. + - User sends signed `DelegateAction` data to the relayer + - Relayer forms a `Transaction` with `receiver_id` equal to the user's account and `actions: [DelegateAction { ... }]`, and signs it with it's key. Note, that such transaction can contain other actions toward user's account (for example calling a function). + - This transaction is processed normally, by creating a receipt with copy of the all the actions into the `Receipt`. + - When processing `DelegateAction` a number of checks are done (see below), mainly `signature` matching user account's key. + - When such `Receipt` with valid `DelegateAction` in actions arrives to the user's account it gets executed. The executed means creation of a new Receipt with `receiver_id: AccountId`, `actions: Action` matching `receiver_id` and `actions` inside `DelegateAction`. + - The new `Receipt` looks like normal receipt that would have been originating from user's account, with `predeccessor_id` equal to user's account. + +### DelegateAction + +Delegate action allows for an account to initiate a batch of actions on behalf of the receiving account, allowing to proxy actions. This is used in implementation of meta transactions. + +```rust +pub struct DelegateAction { + /// Receiver of the delegated actions. + receiver_id: AccountId, + /// List of actions to be executed. + actions: Vec, + + /// Public key that is used to sign this delegated action. + signer_pk: PublicKey, + /// Nonce is used to determine that the same delegate action is not sent twice by relayers and should match for given account's `signer_pk`. + /// After this action is processed it will increment. + nonce: Nonce, + /// Signature of the originating user signing `DelegateActionMessage` formed out of the data in the `DelegateAction`. + signature: Signature, +} +``` + + Supporting a batch of `actions` means `DelegateAction` can initiate a complex steps like creating a new account and transferring funds, deploying a contract and executing an initialization function. + +***Validation***: +To ensure that `DelegateAction` is correct, on receival the verification of signature is done: `verify_signature(hash(message), signer_pk, signature)`. + +The `message` is formed in the next format and must be signed by the user: +```rust +struct DelegateActionMessage { + /// If not None, should match the `predecessor_id` that have created `DelegateAction`. + sender_id: Option, + /// Matching the given account_id. + signer_id: AccountId, + /// Matching the `signer_pk` from `DelegateAction`. + public_key: PublicKey, + /// Nonce for the given `public_key` from `DelegateAction`. + nonce: Nonce, + /// Matching the `receiver_id` from `DelegateAction`. + receiver_id: AccountId, + /// Block hash to ensure validity. + /// Actions matching `actions` from `DelegateAction`. + actions: Vec, +} +``` + +The next set of security concerns are addressed by this format: + - If format matches `Transaction`, the relayer can just send it directly, not receiving payment. + - Because set of actions can include pay back to the relayer (for example by paying in FT), the `sender_id` is added directly into the message to ensure that nobody else can send this message. + - `nonce` is included to ensure that this message can't be replayed again. + - `public_key` and `signer_id` are needed to ensure the on the right account, work across rotating keys and fetch correct `nonce`. + +The permissions are verified based on kind `AccessKeyPermission` of `signer_pk`: + - `AccessKeyPermission::FullAccess`, all actions are allowed. + - `AccessKeyPermission::FunctionCall`, only a single `FunctionCall` action is allowed in `actions`. + - `DelegateAction.receiver_id` must match to the `account[public_key].receiver_id` + - `DelegateAction.actions[0].method_name` must be in the `account[public_key].method_names` + +***Outcomes***: +- If `signature` matches receiver's accounts `signer_pk`, new receipt is created from this account with set of `ActionReceipt { receiver_id, action }` for each item in `actions`. + +#### Errors + +**Validation Error** +- If `signer_pk` does not exist for the given account, the following error will be returned +```rust +/// Signer key for delegate action is missing from given account +DelegateActionSignerDoesNotExist +``` + +- If `nonce` does not exist match `signer_pk` for `receiver_id`, the following error will be returned +```rust +/// Nonce must be account[signer_pk].nonce + 1 +DelegateActionInvalidNonce +``` + +- If `signature` does not match to the data and `signer_pk` of the given key, the following error will be returned +```rust +/// Signature does not match the provided actions and given signer public key. +DelegateActionInvalidSignature +``` + See the [DelegateAction specification](specs/RuntimeSepc/Actions.md#DelegateAction) for details. diff --git a/specs/RuntimeSpec/Actions.md b/specs/RuntimeSpec/Actions.md index 0fa370a9e..7c5622533 100644 --- a/specs/RuntimeSpec/Actions.md +++ b/specs/RuntimeSpec/Actions.md @@ -12,7 +12,6 @@ pub enum Action { AddKey(AddKeyAction), DeleteKey(DeleteKeyAction), DeleteAccount(DeleteAccountAction), - DelegateAction(DelegationAction), } ``` @@ -277,84 +276,3 @@ DeleteAccountStaking { account_id: AccountId } **Execution Error**: - If state or storage is corrupted, a `StorageError` is returned. - -## DelegateAction - -Delegate action allows for an account to initiate a batch of actions on behalf of the receiving account, allowing to proxy actions. This is used in implementation of meta transactions. - -```rust -pub struct DelegateAction { - /// Receiver of the delegated actions. - receiver_id: AccountId, - /// List of actions to be executed. - actions: Vec, - - /// Public key that is used to sign this delegated action. - signer_pk: PublicKey, - /// Nonce is used to determine that the same delegate action is not sent twice by relayers and should match for given account's `signer_pk`. - /// After this action is processed it will increment. - nonce: Nonce, - /// Signature of the originating user signing `DelegateActionMessage` formed out of the data in the `DelegateAction`. - signature: Signature, -} -``` - - Supporting a batch of `actions` means `DelegateAction` can initiate a complex steps like creating a new account and transferring funds, deploying a contract and executing an initialization function. - -***Validation***: -To ensure that `DelegateAction` is correct, on receival the verification of signature is done: `verify_signature(hash(message), signer_pk, signature)`. - -The `message` is formed in the next format and must be signed by the user: -```rust -struct DelegateActionMessage { - /// Matching the `predecessor_id` that have created `DelegateAction`. - sender_id: AccountId, - /// Matching the given account_id. - signer_id: AccountId, - /// Matching the `signer_pk` from `DelegateAction`. - public_key: PublicKey, - /// Nonce for the given `public_key` from `DelegateAction`. - nonce: Nonce, - /// Matching the `receiver_id` from `DelegateAction`. - receiver_id: AccountId, - /// Block hash to ensure validity. - /// Actions matching `actions` from `DelegateAction`. - actions: Vec, -} -``` - -The next set of security concerns are addressed by this format: - - If format matches `Transaction`, the relayer can just send it directly, not receiving payment. - - Because set of actions can include pay back to the relayer (for example by paying in FT), the `sender_id` is added directly into the message to ensure that nobody else can send this message. - - `nonce` is included to ensure that this message can't be replayed again. - - `public_key` and `signer_id` are needed to ensure the on the right account, work across rotating keys and fetch correct `nonce`. - -The permissions are verified based on kind `AccessKeyPermission` of `signer_pk`: - - `AccessKeyPermission::FullAccess`, all actions are allowed. - - `AccessKeyPermission::FunctionCall`, only a single `FunctionCall` action is allowed in `actions`. - - `DelegateAction.receiver_id` must match to the `account[public_key].receiver_id` - - `DelegateAction.actions[0].method_name` must be in the `account[public_key].method_names` - -***Outcomes***: -- If `signature` matches receiver's accounts `signer_pk`, new receipt is created from this account with set of `ActionReceipt { receiver_id, action }` for each item in `actions`. - -### Errors - -**Validation Error** -- If `signer_pk` does not exist for the given account, the following error will be returned -```rust -/// Signer key for delegate action is missing from given account -DelegateActionSignerDoesNotExist -``` - -- If `nonce` does not exist match `signer_pk` for `receiver_id`, the following error will be returned -```rust -/// Nonce must be account[signer_pk].nonce + 1 -DelegateActionInvalidNonce -``` - -- If `signature` does not match to the data and `signer_pk` of the given key, the following error will be returned -```rust -/// Signature does not match the provided actions and given signer public key. -DelegateActionInvalidSignature -``` From 00cebb39a5ba3458a60c83bdb0bf156d8016e27a Mon Sep 17 00:00:00 2001 From: Illia Polosukhin Date: Fri, 24 Jun 2022 06:57:01 -0400 Subject: [PATCH 5/8] More text fixes --- neps/nep-0366.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/neps/nep-0366.md b/neps/nep-0366.md index 13abce97a..16ebab940 100644 --- a/neps/nep-0366.md +++ b/neps/nep-0366.md @@ -132,15 +132,15 @@ See ***Validation*** section in [DelegateAction specification](specs/RuntimeSepc ## Drawbacks -Increases complexity of the NEAR's transactional model. +Increases complexity of the the NEAR's transactional model. Meta transactions take an extra block to execute, as they first need to be included by the originating account, then routed to the delegate account and only after that to the real destination. -Delegate actions are not programmable as they require having signatures. Original proposal contained a new `AccessKey` kind that would support programmable delegated actions. On the other hand, that would be limiting without progamability of smart contracts, hence that idea evolved into [Account Extensions](https://github.com/nearprotocol/neps/pull/0000). +Delegate actions are not programmable as they require having signatures. Original proposal contained a new `AccessKey` kind that would support programmable delegated actions. On the other hand, that would be limiting without programmability of smart contracts, hence that idea evolved into [Account Extensions](https://github.com/nearprotocol/neps/pull/346). ## Future possibilities -Supporting ZK proofs instead of just signatures can allow for anonymous transactions, which pay fees to relayers in anonymous way. +Supporting ZK proofs instead of just signatures can allow for an anonymous transactions, which pay fees to relayers in anonymous way. ## Copyright [copyright]: #copyright From 56ddd6266686140ae503944da28b9ce1c95f58d1 Mon Sep 17 00:00:00 2001 From: e-uleyskiy <70713560+e-uleyskiy@users.noreply.github.com> Date: Fri, 11 Nov 2022 03:16:46 +0200 Subject: [PATCH 6/8] Update NEP-366 according to the discussion (#422) * Removed an implicit account from NEP * Added a diagram * Changed DelegateAction and DelegateActionMessage format Co-authored-by: Egor Uleyskiy --- README.md | 4 +- neps/assets/nep-0366/NEP-DelegateAction.png | Bin 0 -> 144319 bytes neps/nep-0366.md | 143 ++++++++++++-------- 3 files changed, 89 insertions(+), 58 deletions(-) create mode 100644 neps/assets/nep-0366/NEP-DelegateAction.png diff --git a/README.md b/README.md index 475e7b278..33494d582 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ Changes to the protocol specification and standards are called NEAR Enhancement |[0245](https://github.com/near/NEPs/blob/master/neps/nep-0245.md) | Multi Token Standard | @zcstarr @riqi @jriemann @marcos.sun | Review | |[0297](https://github.com/near/NEPs/blob/master/neps/nep-0297.md) | Events Standard | @telezhnaya | Final | |[0330](https://github.com/near/NEPs/blob/master/neps/nep-0330.md) | Source Metadata | @BenKurrek | Review | -|[0366](https://github.com/near/NEPs/blob/master/neps/nep-0000.md) | Meta Transactions | @ilblackdragon | Draft | +|[0366](https://github.com/near/NEPs/blob/master/neps/nep-0366.md) | Meta Transactions | @ilblackdragon @e-uleyskiy @fadeevab | Draft | @@ -69,7 +69,7 @@ Spec changes are ultimately done via pull requests to this repository (formalize ``` * Once complete, submit the pull request for editor review. - + * The formalization dance begins: * NEP Editors, who are unopinionated shepherds of the process, check document formatting, completeness and adherence to [NEP-0001](neps/nep-0001.md) and approve the pull request. * Once ready, the author updates the NEP status to `Review` allowing further community participation, to address any gaps or clarifications, normally part of the Review PR. diff --git a/neps/assets/nep-0366/NEP-DelegateAction.png b/neps/assets/nep-0366/NEP-DelegateAction.png new file mode 100644 index 0000000000000000000000000000000000000000..00aeed8972643bfbdc0150f4d1a32a6254386c40 GIT binary patch literal 144319 zcmdqJbyQW|*9IyGN(mfVx|>5wcXxM#l&ExfcT0yfNJ=Ov9V!hHD&5^6&0WX$_xrwg zjQfpo|G$pyP!Id;z1CcF&H2n{KFdf|WtnFvgeZ?5J$fc5E2;kI5rWa9NANmGPrxT) zl}za14>)Ia8SzKeBgET}9+5wilN8hRFy6~S&W@dW7!a{Qvp}WznfARsTve|isZy$p zzRt=-!cAOHLN6+!K>Z|I^_?m*g8^j4_hG1}6d^?f{2!OBiyGPg`BF?c5%AcRr)A5TYvq=^wPxqq#C$$zX;35S62)

Rx^eI@_M4fpp@yBI(VGx# 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 literal 0 HcmV?d00001 diff --git a/neps/nep-0366.md b/neps/nep-0366.md index 16ebab940..c56d999f6 100644 --- a/neps/nep-0366.md +++ b/neps/nep-0366.md @@ -1,12 +1,12 @@ --- NEP: 366 Title: Meta Transactions -Author: Illia Polosukhin +Author: Illia Polosukhin , Egor Uleyskiy (egor.ulieiskii@gmail.com), Alexander Fadeev (fadeevab.com@gmail.com) DiscussionsTo: https://github.com/nearprotocol/neps/pull/366 Status: Draft Type: Protocol Track Category: Runtime -Created: 21-Jun-2022 +Created: 19-Oct-2022 --- ## Summary @@ -23,102 +23,133 @@ For example, apps that pay user for doing work (like NEARCrowd or Sweatcoin) or ## Rationale and alternatives -Proposed here design provides the easiest for users and developers way to onboard and pay for user transactions. -There is no requirement on the user account, including user account may not even exist on chain and implicit account can be used. +The proposed design here provides the easiest way for users and developers to onboard and to pay for user transactions. -An alternative is proxy contracts deployed on the user account. -This design has severe limitations as it requires user to deploy such contract and additional costs for storage. +An alternative is to a proxy contracts deployed on the user account. +This design has severe limitations as it requires the user to deploy such contract and incur additional costs for storage. ## Specification The main flow of the meta transaction will be as follows: - - User will sign `DelegateActionMessage` specifying set of actions that they need to be executed. It also includes specific relayer to ensure secure execution. - - User sends signed `DelegateAction` data to the relayer - - Relayer forms a `Transaction` with `receiver_id` equal to the user's account and `actions: [DelegateAction { ... }]`, and signs it with it's key. Note, that such transaction can contain other actions toward user's account (for example calling a function). - - This transaction is processed normally, by creating a receipt with copy of the all the actions into the `Receipt`. - - When processing `DelegateAction` a number of checks are done (see below), mainly `signature` matching user account's key. - - When such `Receipt` with valid `DelegateAction` in actions arrives to the user's account it gets executed. The executed means creation of a new Receipt with `receiver_id: AccountId`, `actions: Action` matching `receiver_id` and `actions` inside `DelegateAction`. - - The new `Receipt` looks like normal receipt that would have been originating from user's account, with `predeccessor_id` equal to user's account. + - User specifies `sender_id` (the user's account id), `receiver_id` (the receiver's account id) and other information (see `DelegateAction` format). + - User signs `DelegateAction` specifying the set of actions that they need to be executed. + - User forms `SignedDelegateAction` with the `DelegateAction` and the signature. + - User forms `DelegateActionMessage` with the `SignedDelegateAction`. + - User sends `DelegateActionMessage` data to the relayer. + - Relayer verifies actions specified in `DelegateAction`: the total cost and whether the user included the reward for the relayer. + - Relayer forms a `Transaction` with `receiver_id` equals to `delegate_action.sender_id` and `actions: [SignedDelegateAction { ... }]`. Signs it with its key. Note that such transactions can contain other actions toward user's account (for example calling a function). + - This transaction is processed normally. A `Receipt` is created with a copy of the actions in the transaction. + - When processing a `SignedDelegateAction`, a number of checks are done (see below), mainly a check to ensure that the `signature` matches the user account's key. + - When a `Receipt` with a valid `SignedDelegateAction` in actions arrives at the user's account, it gets executed. Execution means creation of a new Receipt with `receiver_id: AccountId` and `actions: Action` matching `receiver_id` and `actions` in the `DelegateAction`. + - The new `Receipt` looks like a normal receipt that could have originated from the user's account, with `predeccessor_id` equal to tbe user's account, `signer_id` equal to the relayer's account, `signer_public_key` equal to the relayer's public key. + +## Diagram +![DelegateAction diagram](/assets/nep-0366/NEP-DelegateAction.png) + + ## Limitations + * If User account exist, then deposit and gas are refunded as usual: gas is refuned to Relayer, deposit is refunded to User. + * If User account doesn't exist then gas is refunded to Relayer, deposit is burnt. + * `DelegateAction` actions mustn't contain another `DelegateAction` (`DelegateAction` can't conatin the nested ones). ### DelegateAction -Delegate action allows for an account to initiate a batch of actions on behalf of the receiving account, allowing to proxy actions. This is used in implementation of meta transactions. +Delegate actions allows for an account to initiate a batch of actions on behalf of a receiving account, allowing proxy actions. This can be used to implement meta transactions. ```rust pub struct DelegateAction { + /// Signer of the delegated actions + sender_id: AccountId, /// Receiver of the delegated actions. receiver_id: AccountId, /// List of actions to be executed. actions: Vec, - - /// Public key that is used to sign this delegated action. - signer_pk: PublicKey, - /// Nonce is used to determine that the same delegate action is not sent twice by relayers and should match for given account's `signer_pk`. + /// Nonce to ensure that the same delegate action is not sent twice by a relayer and should match for given account's `public_key`. /// After this action is processed it will increment. nonce: Nonce, - /// Signature of the originating user signing `DelegateActionMessage` formed out of the data in the `DelegateAction`. + /// The maximal height of the block in the blockchain below which the given DelegateAction is valid. + max_block_height: BlockHeight, + /// Public key that is used to sign this delegated action. + public_key: PublicKey, +} +``` + +```rust +pub struct SignedDelegateAction { + delegate_action: DelegateAction, + /// Signature of the `DelegateAction`. signature: Signature, } ``` - Supporting a batch of `actions` means `DelegateAction` can initiate a complex steps like creating a new account and transferring funds, deploying a contract and executing an initialization function. + Supporting batches of `actions` means `DelegateAction` can be used initiate a complex steps like creating new accounts, transferring funds, deploying contracts, and executing an initialization function all within the same transaction. ***Validation***: -To ensure that `DelegateAction` is correct, on receival the verification of signature is done: `verify_signature(hash(message), signer_pk, signature)`. - -The `message` is formed in the next format and must be signed by the user: +1. Validate `DelegateAction` doesn't contain a nested `DelegateAction` in actions. +2. To ensure that a `DelegateAction` is correct, on receipt the following signature verification is performed: `verify_signature(hash(delegate_action), delegate_action.public_key, signature)`. +3. Verify `transaction.receiver_id` matches `delegate_action.sender_id`. +4. Verify `delegate_action.max_block_height`. The `max_block_height` must be greater than the current block height (at the `DelegateAction` processing time). +5. Verify `delegate_action.sender_id` owns `delegate_action.public_key`. +6. Verify `delegate_action.nonce > sender.access_key.nonce`. + +A `message` is formed in the following format: ```rust struct DelegateActionMessage { - /// If not None, should match the `predecessor_id` that have created `DelegateAction`. - sender_id: Option, - /// Matching the given account_id. - signer_id: AccountId, - /// Matching the `signer_pk` from `DelegateAction`. - public_key: PublicKey, - /// Nonce for the given `public_key` from `DelegateAction`. - nonce: Nonce, - /// Matching the `receiver_id` from `DelegateAction`. - receiver_id: AccountId, - /// Block hash to ensure validity. - /// Actions matching `actions` from `DelegateAction`. - actions: Vec, + signed_delegate_action: SignedDelegateAction } ``` The next set of security concerns are addressed by this format: - - If format matches `Transaction`, the relayer can just send it directly, not receiving payment. - - Because set of actions can include pay back to the relayer (for example by paying in FT), the `sender_id` is added directly into the message to ensure that nobody else can send this message. - - `nonce` is included to ensure that this message can't be replayed again. - - `public_key` and `signer_id` are needed to ensure the on the right account, work across rotating keys and fetch correct `nonce`. + - `sender_id` is included to ensure that the relayer set correct `transaction.receiver_id`. + - `max_block_height` is included to ensure that the `DelegateAction` isn't expired. + - `nonce` is included to ensure that the `DelegateAction` can't be replayed again. + - `public_key` and `sender_id` are needed to ensure that on the right account, work across rotating keys and fetch correct `nonce`. -The permissions are verified based on kind `AccessKeyPermission` of `signer_pk`: +The permissions are verified based on the variant of `public_key`: - `AccessKeyPermission::FullAccess`, all actions are allowed. - - `AccessKeyPermission::FunctionCall`, only a single `FunctionCall` action is allowed in `actions`. + - `AccessKeyPermission::FunctionCall`, only a single `FunctionCall` action is allowed in `actions`. - `DelegateAction.receiver_id` must match to the `account[public_key].receiver_id` - `DelegateAction.actions[0].method_name` must be in the `account[public_key].method_names` ***Outcomes***: -- If `signature` matches receiver's accounts `signer_pk`, new receipt is created from this account with set of `ActionReceipt { receiver_id, action }` for each item in `actions`. +- If the `signature` matches the receiver's account's `public_key`, a new receipt is created from this account with a set of `ActionReceipt { receiver_id, action }` for each action in `actions`. #### Errors **Validation Error** -- If `signer_pk` does not exist for the given account, the following error will be returned + +- If the `signature` does not match the data and the `public_key` of the given key, then the following error will be returned ```rust -/// Signer key for delegate action is missing from given account -DelegateActionSignerDoesNotExist +/// Signature does not match the provided actions and given signer public key. +DelegateActionInvalidSignature +``` +- If the `sender_id` doesn't match the `tx.receiver_id` +```rust +/// Receiver of the transaction doesn't match Sender of the delegate action +DelegateActionSenderDoesNotMatchReceiver +``` + +- If the current block is equal or greater than `max_block_height` +```rust +/// Delegate action has expired +DelegateActionExpired +``` + +- If the `public_key` does not exist for Sender account +```rust +/// The given public key doesn't exist for Sender account +DelegateActionPublicKeyDoesNotExist ``` -- If `nonce` does not exist match `signer_pk` for `receiver_id`, the following error will be returned +- If the `nonce` does match the `public_key` for the `sender_id` ```rust -/// Nonce must be account[signer_pk].nonce + 1 +/// Nonce must be greater sender[public_key].nonce and less than block_height * 1e6 DelegateActionInvalidNonce ``` -- If `signature` does not match to the data and `signer_pk` of the given key, the following error will be returned +- If the list of delegated actions contains another `DelegateAction` ```rust -/// Signature does not match the provided actions and given signer public key. -DelegateActionInvalidSignature +/// DelegateAction actions contain another DelegateAction +DelegateActionCantContainNestedOne ``` @@ -126,21 +157,21 @@ See the [DelegateAction specification](specs/RuntimeSepc/Actions.md#DelegateActi ## Security Implications -Delegate actions do not override `signer_pk`, leaving that to the original signer that initiated transaction (eg relayer in meta transaction case). Although it is possible to override `signer_pk` in the context with one from `DelegateAction`, there is no clear value to do that. +Delegate actions do not override `signer_public_key`, leaving that to the original signer that initiated transaction (e.g. the relayer in the meta transaction case). Although it is possible to override the `signer_public_key` in the context with one from the `DelegateAction`, there is no clear value in that. -See ***Validation*** section in [DelegateAction specification](specs/RuntimeSepc/Actions.md#DelegateAction) for security considerations around what user signs and validation of actions with different permissions. +See the ***Validation*** section in [DelegateAction specification](specs/RuntimeSepc/Actions.md#DelegateAction) for security considerations around what the user signs and the validation of actions with different permissions. ## Drawbacks -Increases complexity of the the NEAR's transactional model. +Increases complexity of NEAR's transactional model. -Meta transactions take an extra block to execute, as they first need to be included by the originating account, then routed to the delegate account and only after that to the real destination. +Meta transactions take an extra block to execute, as they first need to be included by the originating account, then routed to the delegate account, and only after that to the real destination. Delegate actions are not programmable as they require having signatures. Original proposal contained a new `AccessKey` kind that would support programmable delegated actions. On the other hand, that would be limiting without programmability of smart contracts, hence that idea evolved into [Account Extensions](https://github.com/nearprotocol/neps/pull/346). ## Future possibilities -Supporting ZK proofs instead of just signatures can allow for an anonymous transactions, which pay fees to relayers in anonymous way. +Supporting ZK proofs instead of just signatures can allow for anonymous transactions, which pay fees to relayers anonymously. ## Copyright [copyright]: #copyright From 4d1ac73022dbc503cd3250096a2fa954a16be17e Mon Sep 17 00:00:00 2001 From: e-uleyskiy <70713560+e-uleyskiy@users.noreply.github.com> Date: Thu, 17 Nov 2022 01:23:54 +0200 Subject: [PATCH 7/8] Update NEP-366 (#432) This update to NEP #366 contains the following changes - Fixed broken links - Added more error messages - Added more details to the text Co-authored-by: Egor Uleyskiy --- neps/nep-0366.md | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/neps/nep-0366.md b/neps/nep-0366.md index c56d999f6..078bb11af 100644 --- a/neps/nep-0366.md +++ b/neps/nep-0366.md @@ -30,6 +30,10 @@ This design has severe limitations as it requires the user to deploy such contra ## Specification +* **User** (Sender) is the one who is going to send the `DelegateAction` to Receiver via Relayer. +* **Relayer** is the one who publishes the `DelegateAction` to the protocol. +* **User** and Relayer doesn't trust each other. + The main flow of the meta transaction will be as follows: - User specifies `sender_id` (the user's account id), `receiver_id` (the receiver's account id) and other information (see `DelegateAction` format). - User signs `DelegateAction` specifying the set of actions that they need to be executed. @@ -44,7 +48,7 @@ The main flow of the meta transaction will be as follows: - The new `Receipt` looks like a normal receipt that could have originated from the user's account, with `predeccessor_id` equal to tbe user's account, `signer_id` equal to the relayer's account, `signer_public_key` equal to the relayer's public key. ## Diagram -![DelegateAction diagram](/assets/nep-0366/NEP-DelegateAction.png) +![](assets/nep-0366/NEP-DelegateAction.png) ## Limitations * If User account exist, then deposit and gas are refunded as usual: gas is refuned to Relayer, deposit is refunded to User. @@ -113,15 +117,24 @@ The permissions are verified based on the variant of `public_key`: ***Outcomes***: - If the `signature` matches the receiver's account's `public_key`, a new receipt is created from this account with a set of `ActionReceipt { receiver_id, action }` for each action in `actions`. + +***Recommendations*** +- Because the User doesn't trust the Relayer, the User should verify whether the Relayer has submitted the `DelegateAction` and the execution result. + #### Errors -**Validation Error** +- If the Sender's account doesn't exist +```rust +/// Happens when TX receiver_id doesn't exist +AccountDoesNotExist +``` - If the `signature` does not match the data and the `public_key` of the given key, then the following error will be returned ```rust /// Signature does not match the provided actions and given signer public key. DelegateActionInvalidSignature ``` + - If the `sender_id` doesn't match the `tx.receiver_id` ```rust /// Receiver of the transaction doesn't match Sender of the delegate action @@ -137,29 +150,40 @@ DelegateActionExpired - If the `public_key` does not exist for Sender account ```rust /// The given public key doesn't exist for Sender account -DelegateActionPublicKeyDoesNotExist +DelegateActionAccessKeyError ``` - If the `nonce` does match the `public_key` for the `sender_id` ```rust -/// Nonce must be greater sender[public_key].nonce and less than block_height * 1e6 +/// Nonce must be greater sender[public_key].nonce DelegateActionInvalidNonce ``` +- If `nonce` is too large +```rust +/// DelegateAction nonce is larger than the upper bound given by the block height (block_height * 1e6) +DelegateActionNonceTooLarge +``` + - If the list of delegated actions contains another `DelegateAction` ```rust /// DelegateAction actions contain another DelegateAction DelegateActionCantContainNestedOne ``` +- If the list of Transaction actions contains several `DelegateAction` +```rust +/// There should be the only one DelegateAction +DelegateActionMustBeOnlyOne +``` -See the [DelegateAction specification](specs/RuntimeSepc/Actions.md#DelegateAction) for details. +See the [DelegateAction specification](/specs/RuntimeSpec/Actions.md#DelegateAction) for details. ## Security Implications Delegate actions do not override `signer_public_key`, leaving that to the original signer that initiated transaction (e.g. the relayer in the meta transaction case). Although it is possible to override the `signer_public_key` in the context with one from the `DelegateAction`, there is no clear value in that. -See the ***Validation*** section in [DelegateAction specification](specs/RuntimeSepc/Actions.md#DelegateAction) for security considerations around what the user signs and the validation of actions with different permissions. +See the ***Validation*** section in [DelegateAction specification](/specs/RuntimeSpec/Actions.md#DelegateAction) for security considerations around what the user signs and the validation of actions with different permissions. ## Drawbacks From 003e589e6aba24fc70dd91c9cf7ef0007ca50735 Mon Sep 17 00:00:00 2001 From: e-uleyskiy <70713560+e-uleyskiy@users.noreply.github.com> Date: Thu, 24 Nov 2022 00:15:53 +0200 Subject: [PATCH 8/8] Update drawbacks in NEP-366 (#437) Co-authored-by: Egor Uleyskiy --- neps/nep-0366.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/neps/nep-0366.md b/neps/nep-0366.md index 078bb11af..d27ddea7a 100644 --- a/neps/nep-0366.md +++ b/neps/nep-0366.md @@ -187,11 +187,11 @@ See the ***Validation*** section in [DelegateAction specification](/specs/Runtim ## Drawbacks -Increases complexity of NEAR's transactional model. - -Meta transactions take an extra block to execute, as they first need to be included by the originating account, then routed to the delegate account, and only after that to the real destination. - -Delegate actions are not programmable as they require having signatures. Original proposal contained a new `AccessKey` kind that would support programmable delegated actions. On the other hand, that would be limiting without programmability of smart contracts, hence that idea evolved into [Account Extensions](https://github.com/nearprotocol/neps/pull/346). +* Increases complexity of NEAR's transactional model. +* Meta transactions take an extra block to execute, as they first need to be included by the originating account, then routed to the delegate account, and only after that to the real destination. +* User can't call functions from different contracts in same `DelegateAction`. This is because `DelegateAction` has only one receiver for all inner actions. +* The Relayer must verify the most of parameters before submitting `DelegateAction`, making sure that one of the function calls is the reward action. Either way, this is a risk for Relayer in general. +* User must not trust Relayer’s response and should check execution errors in Blockchain. ## Future possibilities