From 28b0da0ae47deb42be215beaa6eab55a2665bb64 Mon Sep 17 00:00:00 2001 From: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> Date: Tue, 11 Oct 2022 09:16:40 -0400 Subject: [PATCH 001/113] Update EIP-4834: Move back to review (#5779) --- EIPS/eip-4834.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/EIPS/eip-4834.md b/EIPS/eip-4834.md index e0d6739d0c0250..d497c34b9a54b5 100644 --- a/EIPS/eip-4834.md +++ b/EIPS/eip-4834.md @@ -4,8 +4,7 @@ title: Hierarchical Domains description: Extremely generic name resolution author: Pandapip1 (@Pandapip1) discussions-to: https://ethereum-magicians.org/t/erc-4834-hierarchical-domains-standard/8388 -status: Last Call -last-call-deadline: 2022-09-30 +status: Review type: Standards Track category: ERC created: 2022-02-22 From eae6d565918aa519be499f2a41d5f57e29dafbca Mon Sep 17 00:00:00 2001 From: Javier Arcenegui Almenara <81355285+Hardblock-IMSE-CNM@users.noreply.github.com> Date: Tue, 11 Oct 2022 15:21:09 +0200 Subject: [PATCH 002/113] ERC-4519: Change SmartNFT to EIP-4519 NFT (#5777) * Title setting to 44 characters * Update eip-4519.md * Delete Fig5_rev.png * Delete Figure4.jpg * Add files via upload * Update eip-4519.md * Update eip-4519.md * Update eip-4519.md * Update eip-4519.md * Update eip-4519.md * Update eip-4519.md * Update eip-4519.md --- EIPS/eip-4519.md | 62 ++++++++++++++-------------- assets/eip-4519/images/Fig5_rev.png | Bin 63180 -> 68726 bytes assets/eip-4519/images/Figure4.jpg | Bin 92003 -> 130499 bytes 3 files changed, 31 insertions(+), 31 deletions(-) diff --git a/EIPS/eip-4519.md b/EIPS/eip-4519.md index ee30f7bab8c4ce..0640c29fc7306a 100644 --- a/EIPS/eip-4519.md +++ b/EIPS/eip-4519.md @@ -12,22 +12,22 @@ requires: 165, 721 --- ## Abstract -This EIP proposes a standard interface for non-fungible tokens that represent physical assets, such as Internet of Things (IoT) devices. A SmartNFT is tied to a physical asset that can check if the tie is authentic or not. The SmartNFT can include an Ethereum address of the physical asset and, consequently, the physical asset can sign messages or transactions. The physical asset can operate with an operating mode that is defined by its SmartNFT with an attribute named state. The token state can define if the token owner or the token user can use the asset or not. A cryptographically secure mutual authentication process can be carried out between the physical asset and its owner or its user. SmartNFTs extend [ERC-721](./eip-721.md) non-fungible tokens, which only allow representing assets by a unique identifier, but not by an Ethereum address. Moreover, SmartNFTs extend ERC-721 NFTs to include users in addition to owners. +This EIP proposes a standard interface for non-fungible tokens that represent physical assets, such as Internet of Things (IoT) devices. A [EIP-4519](./eip-4519.md) NFT is tied to a physical asset that can check if the tie is authentic or not. The EIP-4519 NFT can include an Ethereum address of the physical asset and, consequently, the physical asset can sign messages or transactions. The physical asset can operate with an operating mode that is defined by its EIP-4519 NFT with an attribute named state. The token state can define if the token owner or the token user can use the asset or not. A cryptographically secure mutual authentication process can be carried out between the physical asset and its owner or its user. EIP-4519 NFTs extend [EIP-721](./eip-721.md) non-fungible tokens, which only allow representing assets by a unique identifier, but not by an Ethereum address. Moreover, EIP-4519 NFTs extend EIP-721 NFTs to include users in addition to owners. ## Motivation -This SmartNFT was developed because the ERC-721 NFT does not include the users of an asset (only include the owners) and does not include the Ethereum address of the asset. Smart assets (for example, IoT devices) are increasing nowadays. If smart assets are tied to SmartNFTs then they can be managed in a secure and traceable way. The reason is that SmartNFTs, unlike ERC-721 NFTs, allow establishing secure communication channels between the physical asset and its owner and its user. In this way, assets, owners and users can be assured of exchanging information with trusted parties. +This EIP-4519 NFT was developed because the EIP-721 NFT does not include the users of an asset (only include the owners) and does not include the Ethereum address of the asset. Smart assets (for example, IoT devices) are increasing nowadays. If smart assets are tied to EIP-4519 NFTs then they can be managed in a secure and traceable way. The reason is that EIP-4519 NFTs, unlike EIP-721 NFTs, allow establishing secure communication channels between the physical asset and its owner and its user. In this way, assets, owners and users can be assured of exchanging information with trusted parties. -**Secure Physical Asset Tied to a SmartNFT** +**Secure Physical Asset Tied to a EIP-4519 NFT** Current non-fungible tokens are associated with passive assets, either virtual or physical things, but they do not include any standardized mechanism to tie the non-fungible token to the asset. Tying physical assets to NFTs is interesting because the asset can know anytime its owner, user, operating mode, and how to establish secure communication channels with its owner and user. The assets, owners and users are identified by their Ethereum addresses and the Ethereum address of the asset can be obtained from a unique physical property of the physical asset (for example, using a physical unclonable function). The asset can be an active part in any transfer of ownership and use. In addition, the asset is smart, for example to not obey orders from a non-authorized user, or to be inoperative if a successful authentication with the user or the owner has not been fulfilled. **User Management Mechanism** -SmartNFTs allow implementing a new and useful user management mechanism. In the last few years, many projects concerning assets sharing (for example, vehicles) have been created and developed. SmartNFTs incorporate the Ethereum address of the user as another attribute of the token in order to distinguish between the user, who employs the asset for a specific application, and the owner, who assigns the token to users. Hence, both users and owners of an asset can be traced. +EIP-4519 NFTs allow implementing a new and useful user management mechanism. In the last few years, many projects concerning assets sharing (for example, vehicles) have been created and developed. EIP-4519 NFTs incorporate the Ethereum address of the user as another attribute of the token in order to distinguish between the user, who employs the asset for a specific application, and the owner, who assigns the token to users. Hence, both users and owners of an asset can be traced. **Secure Key Exchange Mechanism** The engagement of the asset with an owner or a user is carried out after a mutual authentication protocol (for example, based on elliptic curve Diffie-Hellman key exchange protocol). This protocol can be employed for a key agreement between the asset and its owner, in the one side, and between the asset and its user, in the other side. ## Specification -The SmartNFT attributes `addressAsset` and `addressUser` are, respectively, the Ethereum addresses of the physical asset and the user. They are optional attributes but at least one of them should be used in a SmartNFT. In the case of using only the attribute `addressUser`, two states define if the token is assigned or not to a user. `Figure 1` shows these states in a flow chart. When a token is created, transferred or unassigned, the token state is set to `notAssigned`. If the token is assigned to a valid user, the state is set to `userAssigned`. +The EIP-4519 NFT attributes `addressAsset` and `addressUser` are, respectively, the Ethereum addresses of the physical asset and the user. They are optional attributes but at least one of them should be used in a EIP-4519 NFT. In the case of using only the attribute `addressUser`, two states define if the token is assigned or not to a user. `Figure 1` shows these states in a flow chart. When a token is created, transferred or unassigned, the token state is set to `notAssigned`. If the token is assigned to a valid user, the state is set to `userAssigned`. ![Figure 1 : Flow chart of the token states with `addressUser` defined (and `addressAsset` undefined)](../assets/eip-4519/images/Figure1.jpg) @@ -35,17 +35,17 @@ In the case of defining the attribute `addressAsset` but not the attribute `addr ![Figure 2 : Flow chart of the token states with `addressAsset` defined (and `addressUser` undefined)](../assets/eip-4519/images/Figure2.jpg) -Finally, if both the attributes `addressAsset` and `addressUser` are defined, the states of the SmartNFT define if the asset has been engaged or not with the owner or the user (`waitingForOwner`, `engagedWithOwner`, `waitingForUser` and `engagedWithUser`). The flow chart in `Figure 3` shows all the possible state changes. The states related to the owner are the same as in `Figure 2`. The difference is that, at the state `engagedWithOwner`, the token can be assigned to a user. If a user is assigned (the token being at states `engagedWithOwner`, `waitingForUser` or `engagedWithUser`), then the token changes its state to `waitingForUser`. Once the asset and the user authenticate each other, the state of the token is set to `engagedWithUser`, and the user is able to use the asset. +Finally, if both the attributes `addressAsset` and `addressUser` are defined, the states of the EIP-4519 NFT define if the asset has been engaged or not with the owner or the user (`waitingForOwner`, `engagedWithOwner`, `waitingForUser` and `engagedWithUser`). The flow chart in `Figure 3` shows all the possible state changes. The states related to the owner are the same as in `Figure 2`. The difference is that, at the state `engagedWithOwner`, the token can be assigned to a user. If a user is assigned (the token being at states `engagedWithOwner`, `waitingForUser` or `engagedWithUser`), then the token changes its state to `waitingForUser`. Once the asset and the user authenticate each other, the state of the token is set to `engagedWithUser`, and the user is able to use the asset. ![Figure 3 : Flow chart of the token states with `addressUser` and `addressUser` defined](../assets/eip-4519/images/Figure3.jpg) -In order to complete the ownership transfer of a token, the new owner must carry out a mutual authentication process with the asset, which is off-chain with the asset and on-chain with the token, by using their Ethereum addresses. Similarly, a new user must carry out a mutual authentication process with the asset to complete a use transfer. SmartNFTs define how the authentication processes start and finish. These authentication processes allow deriving fresh session cryptographic keys for secure communication between assets and owners, and between assets and users. Therefore, the trustworthiness of the assets can be traced even if new owners and users manage them. +In order to complete the ownership transfer of a token, the new owner must carry out a mutual authentication process with the asset, which is off-chain with the asset and on-chain with the token, by using their Ethereum addresses. Similarly, a new user must carry out a mutual authentication process with the asset to complete a use transfer. EIP-4519 NFTs define how the authentication processes start and finish. These authentication processes allow deriving fresh session cryptographic keys for secure communication between assets and owners, and between assets and users. Therefore, the trustworthiness of the assets can be traced even if new owners and users manage them. -When the SmartNFT is created or when the ownership is transferred, the token state is `waitingForOwner`. Assuming that the asset is an electronic physical asset, it saves in its memory the owner address and sets its operating mode to `waitingForOwner`. The owner generates a pair of keys using the elliptic curve secp256k1 and the primitive element P used on this curve: a secret key SKO_A and a Public Key PKO_A, so that PKO_A = SKO_A*P. To generate the shared key between the owner and the asset, KO, the public key of the asset, PKA, is employed as follows: +When the EIP-4519 NFT is created or when the ownership is transferred, the token state is `waitingForOwner`. The asset sets its operating mode to `waitingForOwner`. The owner generates a pair of keys using the elliptic curve secp256k1 and the primitive element P used on this curve: a secret key SKO_A and a Public Key PKO_A, so that PKO_A = SKO_A*P. To generate the shared key between the owner and the asset, KO, the public key of the asset, PKA, is employed as follows: KO=PKA*SKO_A -Using the function `startOwnerEngagement`, the owner saves PKO_A as the attribute `dataEngagement` and the hash of KO as the attribute `hashK_OA` in the SmartNFT. The owner sends PKO_A signed to the asset. The asset checks the signature of the owner and, if signature is correct, the asset uses PKO_A to calculate: +Using the function `startOwnerEngagement`, PKO_A is saved as the attribute `dataEngagement` and the hash of KO as the attribute `hashK_OA`. The owner sends request engagement to the asset, and the asset calculates: KA = SKA*PKO_A @@ -57,9 +57,9 @@ Using the function `ownerEngagement`, the asset sends the hash of KA ![Figure 4: Steps in a successful owner and asset mutual authentication process](../assets/eip-4519/images/Figure4.jpg) -If the asset consults Ethereum and the state of its SmartNFT is `waitingForUser`, the asset (assuming it is an electronic physical asset) saves in its memory the user address and sets its operating mode to `waitingForUser`. Then, a mutual authentication process is carried out with the user, as already done with the owner. The user sends the transaction associated with the function `startUserEngagement`. As in `startOwnerEngagement`, this function saves the public key generated by the user, PKU_A, as the attribute `dataEngagement` and the hash of KU=PKA*SKU_A as the attribute `hashK_UA` in the SmartNFT. +If the asset consults Ethereum and the state of its EIP-4519 NFT is `waitingForUser`, the asset (assuming it is an electronic physical asset) sets its operating mode to `waitingForUser`. Then, a mutual authentication process is carried out with the user, as already done with the owner. The user sends the transaction associated with the function `startUserEngagement`. As in `startOwnerEngagement`, this function saves the public key generated by the user, PKU_A, as the attribute `dataEngagement` and the hash of KU=PKA*SKU_A as the attribute `hashK_UA` in the EIP-4519 NFT. -The user sends PKU_A signed to the asset. The latter checks the signature of the user and, if signature is correct, the asset uses PKU_A to calculate: +The user sends request engagement and the asset calculates: KA = SKA*PKU_A @@ -71,14 +71,14 @@ Using the function `userEngagement`, the asset sends the hash of KA o ![Figure 5: Steps in a successful user and asset mutual authentication process](../assets/eip-4519/images/Fig5_rev.png) -Since the establishment of a shared secret key is very important for a secure communication, SmartNFTs include the attributes +Since the establishment of a shared secret key is very important for a secure communication, EIP-4519 NFTs include the attributes `hashK_OA`, `hashK_UA` and `dataEngagement`. The first two attributes define, respectively, the hash of the secret key shared between the asset and its owner and between the asset and its user. Assets, owners and users should check they are using the correct shared secret keys. The attribute `dataEngagement` defines the public data needed for the agreement. ```solidity pragma solidity ^0.8.0; - /// @title SmartNFT: Extension of ERC-721 Non-Fungible Token Standard. -/// Note: the ERC-165 identifier for this interface is 0x8a68abe3 - interface SmartNFT is ERC721/*,ERC165*/{ + /// @title EIP-4519 NFT: Extension of EIP-721 Non-Fungible Token Standard. +/// Note: the EIP-165 identifier for this interface is 0x8a68abe3 + interface EIP-4519 NFT is EIP721/*,EIP165*/{ /// @dev This emits when the NFT is assigned as utility of a new user. /// This event emits when the user of the token changes. /// (`_addressUser` == 0) when no user is assigned. @@ -93,21 +93,21 @@ pragma solidity ^0.8.0; event OwnerEngaged(uint256 indexed tokenId); /// @dev This emits when it is checked that the timeout has expired. - /// This event emits when the timestamp of the SmartNFT is not updated in timeout. + /// This event emits when the timestamp of the EIP-4519 NFT is not updated in timeout. event TimeoutAlarm(uint256 indexed tokenId); /// @notice This function defines how the NFT is assigned as utility of a new user (if "addressUser" is defined). - /// @dev Only the owner of the SmartNFT can assign a user. If "addressAsset" is defined, then the state of the token must be + /// @dev Only the owner of the EIP-4519 NFT can assign a user. If "addressAsset" is defined, then the state of the token must be /// "engagedWithOwner","waitingForUser" or "engagedWithUser" and this function changes the state of the token defined by "_tokenId" to /// "waitingForUser". If "addressAsset" is not defined, the state is set to "userAssigned". In both cases, this function sets the parameter /// "addressUser" to "_addressUser". - /// @param _tokenId is the tokenId of the SmartNFT tied to the asset. + /// @param _tokenId is the tokenId of the EIP-4519 NFT tied to the asset. /// @param _addressUser is the address of the new user. function setUser(uint256 _tokenId, address _addressUser) external payable; /// @notice This function defines the initialization of the mutual authentication process between the owner and the asset. /// @dev Only the owner of the token can start this authentication process if "addressAsset" is defined and the state of the token is "waitingForOwner". /// The function does not change the state of the token and saves "_dataEngagement" /// and "_hashK_OA" in the parameters of the token. - /// @param _tokenId is the tokenId of the SmartNFT tied to the asset. + /// @param _tokenId is the tokenId of the EIP-4519 NFT tied to the asset. /// @param _dataEngagement is the public data proposed by the owner for the agreement of the shared key. /// @param _hashK_OA is the hash of the secret proposed by the owner to share with the asset. function startOwnerEngagement(uint256 _tokenId, uint256 _dataEngagement, uint256 _hashK_OA) external payable; @@ -124,7 +124,7 @@ pragma solidity ^0.8.0; /// @dev Only the user of the token can start this authentication process if "addressAsset" and "addressUser" are defined and /// the state of the token is "waitingForUser". The function does not change the state of the token and saves "_dataEngagement" /// and "_hashK_UA" in the parameters of the token. - /// @param _tokenId is the tokenId of the SmartNFT tied to the asset. + /// @param _tokenId is the tokenId of the EIP-4519 NFT tied to the asset. /// @param _dataEngagement is the public data proposed by the user for the agreement of the shared key. /// @param _hashK_UA is the hash of the secret proposed by the user to share with the asset. function startUserEngagement(uint256 _tokenId, uint256 _dataEngagement, uint256 _hashK_UA) external payable; @@ -140,14 +140,14 @@ pragma solidity ^0.8.0; /// @notice This function checks if the timeout has expired. /// @dev Everybody can call this function to check if the timeout has expired. The event "TimeoutAlarm" is emitted /// if the timeout has expired. - /// @param _tokenId is the tokenId of the SmartNFT tied to the asset. + /// @param _tokenId is the tokenId of the EIP-4519 NFT tied to the asset. /// @return true if timeout has expired and false in other case. function checkTimeout(uint256 _tokenId) external returns (bool); /// @notice This function sets the value of timeout. /// @dev Only the owner of the token can set this value provided that the state of the token is "engagedWithOwner", /// "waitingForUser" or "engagedWithUser". - /// @param _tokenId is the tokenId of the SmartNFT tied to the asset. + /// @param _tokenId is the tokenId of the EIP-4519 NFT tied to the asset. /// @param _timeout is the value to assign to timeout. function setTimeout(uint256 _tokenId, uint256 _timeout) external; @@ -169,7 +169,7 @@ pragma solidity ^0.8.0; /// @notice This function lets know the user of the token from its tokenId. /// @dev Everybody can call this function. The code executed only reads from Ethereum. - /// @param _tokenId is the tokenId of the SmartNFT tied to the asset. + /// @param _tokenId is the tokenId of the EIP-4519 NFT tied to the asset. /// @return user of the token from its _tokenId. function userOf(uint256 _tokenId) external view returns (address); @@ -195,10 +195,10 @@ pragma solidity ^0.8.0; ``` ## Rationale -The demand for SmartNFTs, which allow user management and a tie to a physical asset are growing (for example, in the context of the Internet of Things). Therefore, it is essential to establish a standard capable of including all these options working together or separately. The incorporation of an Ethereum address of the user or an Ethereum address of a physical asset to the SmartNFT is optional. However, it does not make sense that the SmartNFT does not include any of them because, in that case, the SmartNFT would be an ERC-721 token. Since some functions such as `startUserEngagement` are available only if both addresses are implemented, a single interface with all the options is proposed. +The demand for EIP-4519 NFTs, which allow user management and a tie to a physical asset are growing (for example, in the context of the Internet of Things). Therefore, it is essential to establish a standard capable of including all these options working together or separately. The incorporation of an Ethereum address of the user or an Ethereum address of a physical asset to the EIP-4519 NFT is optional. However, it does not make sense that the EIP-4519 NFT does not include any of them because, in that case, the EIP-4519 NFT would be an EIP-721 token. Since some functions such as `startUserEngagement` are available only if both addresses are implemented, a single interface with all the options is proposed. -**SmartNFT** -This EIP proposes a non-fungible token tied to a physical asset. The asset is able to generate an Ethereum address and authenticate its user and its owner. Hence, the asset can be considered as a smart asset associated with an NFT. If the asset and the token are regarded as one thing, we can talk about a SmartNFT. +**EIP-4519 NFT** +This EIP proposes a non-fungible token tied to a physical asset. The asset is able to generate an Ethereum address and authenticate its user and its owner. Hence, the asset can be considered as a smart asset associated with an NFT. If the asset and the token are regarded as one thing, we can talk about a EIP-4519 NFT. **Authentication** This EIP proposes using the smart contract to verify the mutual authentication process between the physical asset and the owner or the user by verifying the hash of a shared key. @@ -207,18 +207,18 @@ This EIP proposes using the smart contract to verify the mutual authentication p This EIP proposes including the attribute timestamp (to register in Ethereum the last time that the physical asset checked the tie with its token) and the attribute timeout (to register the maximum delay time established for the physical asset to prove again the tie). These attributes avoid that a malicious owner or user could use the asset endlessly. When the asset calls `updateTimestamp`, the smart contract must call `block.timestamp`, which provides current block timestamp as seconds since Unix epoch. For this reason, `timeout` must be provided in seconds. -**ERC-721-based** -[EIP-721](./eip-721.md) is the most commonly-used standard for generic NFTs. This EIP extends ERC-721 for backwards compatibility. +**EIP-721-based** +[EIP-721](./eip-721.md) is the most commonly-used standard for generic NFTs. This EIP extends EIP-721 for backwards compatibility. ## Backwards Compatibility -This standard is an extension of ERC-721. It is fully compatible with both of the commonly used optional extensions (`IERC721Metadata` and `IERC721Enumerable`) mentioned in the EIP-721 standard. +This standard is an extension of EIP-721. It is fully compatible with both of the commonly used optional extensions (`IERC721Metadata` and `IERC721Enumerable`) mentioned in the EIP-721 standard. ## Test Cases -The test cases presented in the paper shown below are available [here] (../assets/eip-4519/PoC_SmartNFT/README.md). +The test cases presented in the paper shown below are available [here](../assets/eip-4519/PoC_SmartNFT/README.md). ## Reference Implementation A first version was presented in a paper of the Special Issue **Security, Trust and Privacy in New Computing Environments** of **Sensors** journal of **MDPI** editorial. The paper, entitled [Secure Combination of IoT and Blockchain by Physically Binding IoT Devices to Smart Non-Fungible Tokens Using PUFs](../assets/eip-4519/sensors-21-03119.pdf), was written by the same authors of this EIP. ## Security Considerations -In this EIP, a generic system has been proposed for the creation of non-fungible tokens tied to physical assets. A generic point of view based on the improvements of the current ERC-721 NFT is provided, such as the implementation of the user management mechanism, which does not affect the token's ownership. The physical asset should have the ability to generate an Ethereum address from itself in a totally random way so that only the asset is able to know the secret from which the Ethereum address is generated. In this way, identity theft is avoided and the asset can be proven to be completely genuine. In order to ensure this, it is recommended that only the manufacturer of the asset has the ability to create its associated token. In the case of an IoT device, the device firmware will be unable to share and modify the secret. Instead of storing the secrets, it is recommended that assets reconstruct their secrets from non-sensitive information such as the helper data associated with Physical Unclonable Functions (PUFs). Although a secure key exchange protocol based on elliptic curves has been proposed, the token is open to coexist with other types of key exchange. +In this EIP, a generic system has been proposed for the creation of non-fungible tokens tied to physical assets. A generic point of view based on the improvements of the current EIP-721 NFT is provided, such as the implementation of the user management mechanism, which does not affect the token's ownership. The physical asset should have the ability to generate an Ethereum address from itself in a totally random way so that only the asset is able to know the secret from which the Ethereum address is generated. In this way, identity theft is avoided and the asset can be proven to be completely genuine. In order to ensure this, it is recommended that only the manufacturer of the asset has the ability to create its associated token. In the case of an IoT device, the device firmware will be unable to share and modify the secret. Instead of storing the secrets, it is recommended that assets reconstruct their secrets from non-sensitive information such as the helper data associated with Physical Unclonable Functions (PUFs). Although a secure key exchange protocol based on elliptic curves has been proposed, the token is open to coexist with other types of key exchange. ## Copyright Copyright and related rights waived via [CC0](../LICENSE.md). diff --git a/assets/eip-4519/images/Fig5_rev.png b/assets/eip-4519/images/Fig5_rev.png index d9367774425cffd9289f8b581baadceb69073785..201f20f9da53dbfdd1d48ae7eb4aa5293f34d2fb 100644 GIT binary patch literal 68726 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 literal 63180 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

VBpe=2Vpqad=G)uF*E0;> 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 Ef_KR`(f|Me diff --git a/assets/eip-4519/images/Figure4.jpg b/assets/eip-4519/images/Figure4.jpg index 2d7fb1f4e70bc39e5cf3794ccbcd8b1b45570177..519381c1cd1d35705f3b4d1e84a71a6488eb46bd 100644 GIT binary patch literal 130499 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

BrIoj#86N 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 Brf~oO literal 92003 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 Wb(Uj;0EFg00_6ICKPK6)`TqfQNjY2q From e8e42080c68d9b7c2f361353c44e53c6ee9b8301 Mon Sep 17 00:00:00 2001 From: DerivStudio <89515407+DerivStudio@users.noreply.github.com> Date: Tue, 11 Oct 2022 22:30:00 +0800 Subject: [PATCH 003/113] Update eip-5187.md (#5770) * Update eip-5187.md adding sublease and renewal of the rental so that users can freely transfer the usage rights among each other and extend the lease term. * Update eip-5187.md --- EIPS/eip-5187.md | 121 ++++++++++++++++++++++++++++++++--------------- 1 file changed, 84 insertions(+), 37 deletions(-) diff --git a/EIPS/eip-5187.md b/EIPS/eip-5187.md index 1cc1240580cb5e..d769931672646c 100644 --- a/EIPS/eip-5187.md +++ b/EIPS/eip-5187.md @@ -12,68 +12,85 @@ requires: 165, 1155 --- ## Abstract -This standard is an extension of [EIP-1155](./eip-1155.md). It proposes introducing the concept of independent, multiple, and leasable rights of use to enable NFT to be leased out for different cycles while ownership remains with the owner. + +This standard is an extension of [EIP-1155](./eip-1155.md). It proposes to introduce separable, rentable, and transferable usage rights (in the form of NFT-IDs), enabling the property owner (the only NFT holder) to rent out the NFT to multiple users (ID holders) at the same time for different terms, and be withdrawn by smart contract upon expiration. + +The property owner always retains ownership and is able to transfer the NFT to others during the lease. + +The proposal also supports the sublease and renewal of the rental so that users can freely transfer the usage rights among each other and extend the lease term. Early return of NFTs can also be achieved by subletting the usage rights back to the property owners. ## Motivation -The traditional [EIP-721](./eip-721.md) and EIP-1155 focus more on ownership. However, NFTs as digital assets are more prominent in use than ownership. Taking artistic NFTs as an example, NFT artists may wish to rent out the use rights of their works to media companies for an allotted time, or NFT musicians may wish to make their music available to listeners as per playing duration. -Therefore, to better serve NFT developers to meet such needs and develop more sophisticated NFT products, we propose directly introducing rentable usage rights to complement the ERC standard. + +The well-accepted [EIP-721](./eip-721.md) and EIP-1155 standards focused on the ownership of unique assets, quite sensible in the time of NFTs being used primarily as arts and collectibles, or, you can say, as private property rights. +### First Step: "Expirable" NFTs +The advent of private ownership in the real world has promoted the vigorous development of the modern economy, and we believe that the usage right will be the first detachable right widely applied in the blockchain ecosystem. As NFTs are increasingly applied in rights, finance, games, and the Metaverse, the value of NFT is no longer simply the proof of ownership, but with limitless practice use scenarios. For example, artists may wish to rent out their artworks to media or audiences within specific periods, and game guilds may wish to rent out game items to new players to reduce their entry costs. + +The lease/rental of NFTs in the crypto space is not a new topic, but the implementation of leasing has long relied on over-collateralization, centralized custody, or pure trust, which significantly limits the boom of the leasing market. Therefore, a new type of "expirable" NFTs that can be automatically withdrawn upon expiration through smart contract is proposed, at the technical level, to eliminate those bottlenecks. Based on that, a new leasing model that is decentralized, collateral-free, and operated purely "on-chain" may disrupt the way people trade and use NFTs. Thus, this EIP proposal is here to create "expirable" NFTs compatible with EIP-1155. +### Then, Make Everything Transferable +The way we achieve leasing is to separate ownership and usage rights, and beyond that, we focus more on making them freely priced and traded after separation, which is impossible to happen in the traditional financial field. Imagine the below scenarios: i) as a landlord, you can sell your house in rental to others without affecting the tenancy, and your tenants will then pay rent to the new landlord; ii) as a tenant, you can sublet the house to others without the consent of the landlord, and even the one sublets can continue subletting the house until the lease term is close the last tenant can apply for a renewal of the lease. All of this can happen in the blockchain world, and that's the beauty of blockchain. Without permission, without trust, code is the law. + +Making ownership and usage rights transferable may further revolutionize the game rules in NFT's field, both in capital allocation and NFT development. Buying NFT ownership is more like investing in stocks, and the price is determined by market expectations of the project; renting the usage right is less speculative, so the price is easier to determine based on supply and demand. The ownership market and the usage-right market will function to meet the needs of target participants and achieve a balance that is conducive to the long-term and stable development of NFT projects. +Based on the above, we propose this EIP standard to complement the current EIP scopes and introduce those functions as new standards. ## Specification + The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC 2119. ```solidity pragma solidity ^0.8.0; /// Note: the ERC-165 identifier for this interface is 0xd4613e9f. -interface IRental /* is IERC1155,IERC165 */ { + interface IRental /* is IERC165,IERC1155 */ { /** * @notice This emits when user rent NFT - * @param id The id of the current token - * @param user The address to rent the NFT usage rights - * @param amount The amount of usage rights - * @param expires The specified period of time to rent + * - `id` The id of the current token + * - `user` The address to rent the NFT usage rights + * - `amount` The amount of usage rights + * - `expire` The specified period of time to rent **/ - event Rented( - uint256 indexed id, - address indexed user, - uint256 amount, - uint256 expires - ); + event Rented(uint256 indexed id,address indexed user,uint256 amount,uint256 expire); /** - * @notice This emits when the NFT owner takes back the usage rights from the tenant (the `user`) - * @param id The id of the current token - * @param user The address to rent the NFT's usage rights - * @param amount Amount of usage rights + * MUST trigger on any successful call to `renew(address user,uint256 id)` + * - `id` The id of the current token + * - `user` The user of the NFT + * - `expire` The new specified period of time to rent + **/ + event Renew(uint256 indexed id,address indexed user,uint256 expire); + + /** + * MUST trigger on any successful call to `renew(address user,uint256 id,uint256 expire)` + * - `id` The id of the current token + * - `from` The current user of the NFT + * - `to` The new user + **/ + event Sublet(uint256 indexed id,address indexed from,address to); + + /** + * @notice This emits when the NFT owner takes back the usage rights from the tenant (the `user`) + * - id The id of the current token + * - user The address to rent the NFT's usage rights + * - amount Amount of usage rights **/ event TakeBack(uint256 indexed id, address indexed user, uint256 amount); /** * @notice Function to rent out usage rights - * @param from The address to approve - * @param to The address to rent the NFT usage rights - * @param id The id of the current token - * @param amount The amount of usage rights - * @param expires The specified period of time to rent + * - from The address to approve + * - to The address to rent the NFT usage rights + * - id The id of the current token + * - amount The amount of usage rights + * - expire The specified period of time to rent **/ - function safeRent( - address from, - address to, - uint256 id, - uint256 amount, - uint256 expires - ) external; + function safeRent(address from,address to,uint256 id,uint256 amount,uint256 expire) external; /** * @notice Function to take back usage rights after the end of the tenancy - * @param user The address to rent the NFT's usage rights - * @param tokenId The id of the current token + * - user The address to rent the NFT's usage rights + * - tokenId The id of the current token **/ - function takeBack( - address user, - uint256 tokenId - ) external; + function takeBack(address user,uint256 tokenId) external; /** * @notice Return the NFT to the address of the NFT property right owner. @@ -84,18 +101,48 @@ interface IRental /* is IERC1155,IERC165 */ { * @notice Return the total supply amount of the current token **/ function totalSupply(uint256 id) external view returns (uint256); + + /** + * @notice Return expire The specified period of time to rent + **/ + function expireAt(uint256 id,address user) external view returns(uint256); + + /** + * extended rental period + * - `id` The id of the current token + * - `user` The user of the NFT + * - `expire` The new specified period of time to rent + **/ + function renew(address user,uint256 id,uint256 expire) external; + + /** + * transfer of usage right + * - `id` The id of the current token + * - `user` The user of the NFT + * - `expire` The new specified period of time to rent + **/ + function sublet(address to,uint256 id) external; } ``` + ## Rationale -There are two main benefits to creating this proposal. One is to make it possible to create NFTs with detachable usage rights, of which the transfer of usage rights is separated from the transfer of ownership. The NFT owner can execute the safeRent function to lease out the usage rights to other users and the takeBack function to retrieve the usage rights after the lease expiration. + +Implementing the proposal to create rentable NFTs has two main benefits. + +One is that NFTs with multiple usage rights allow NFT property owners to perform the safeRent function and rent out usage rights to multiple users at the same time. For each usage right leased and expires, the property owner can perform the takeBack function to retrieve the usage right. + +Another benefit is that the transfer of usage rights can be quite flexible. The user can transfer the usage rights to other users by calling the Sublet function during the lease period, and can also extend the lease period of the usage rights by asking the property owner to perform the Renewal function. It is worth mentioning that if the user sublet the NFT to the property owner, it will realize the early return of NFT before the end of the lease period. ## Backwards Compatibility + As mentioned at the beginning, this is an extension of EIP-1155. Therefore, it is fully backward compatible with EIP-1155. ## Security Considerations + Needs discussion. ## Copyright + Disclaimer of copyright and related rights through [CC0](../LICENSE.md). From a63e7d6dde79823a52a4be7be90b233e1c148a28 Mon Sep 17 00:00:00 2001 From: Javier Arcenegui Almenara <81355285+Hardblock-IMSE-CNM@users.noreply.github.com> Date: Wed, 12 Oct 2022 14:20:29 +0200 Subject: [PATCH 004/113] EIP4519: Change some images (#5781) * Title setting to 44 characters * Update eip-4519.md * Delete Fig5_rev.png * Delete Figure4.jpg * Add files via upload * Update eip-4519.md * Update eip-4519.md * Update eip-4519.md * Update eip-4519.md * Update eip-4519.md * Update eip-4519.md * Update eip-4519.md * Delete Figure3.jpg * Delete Fig5_rev.png * Delete Figure4.jpg * Add files via upload * Delete Figure4.jpg * Delete Fig5_rev.png * Add files via upload * Update eip-4519.md --- EIPS/eip-4519.md | 10 +++++----- assets/eip-4519/images/Fig5_rev.png | Bin 68726 -> 67816 bytes assets/eip-4519/images/Figure3.jpg | Bin 38962 -> 33498 bytes assets/eip-4519/images/Figure4.jpg | Bin 130499 -> 130319 bytes 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/EIPS/eip-4519.md b/EIPS/eip-4519.md index 0640c29fc7306a..1943533dcf8c88 100644 --- a/EIPS/eip-4519.md +++ b/EIPS/eip-4519.md @@ -12,12 +12,12 @@ requires: 165, 721 --- ## Abstract -This EIP proposes a standard interface for non-fungible tokens that represent physical assets, such as Internet of Things (IoT) devices. A [EIP-4519](./eip-4519.md) NFT is tied to a physical asset that can check if the tie is authentic or not. The EIP-4519 NFT can include an Ethereum address of the physical asset and, consequently, the physical asset can sign messages or transactions. The physical asset can operate with an operating mode that is defined by its EIP-4519 NFT with an attribute named state. The token state can define if the token owner or the token user can use the asset or not. A cryptographically secure mutual authentication process can be carried out between the physical asset and its owner or its user. EIP-4519 NFTs extend [EIP-721](./eip-721.md) non-fungible tokens, which only allow representing assets by a unique identifier, but not by an Ethereum address. Moreover, EIP-4519 NFTs extend EIP-721 NFTs to include users in addition to owners. +This EIP proposes a standard interface for non-fungible tokens that represent physical assets, such as Internet of Things (IoT) devices. An [EIP-4519](./eip-4519.md) NFT is tied to a physical asset that can check if the tie is authentic or not. The EIP-4519 NFT can include an Ethereum address of the physical asset and, consequently, the physical asset can sign messages or transactions. The physical asset can operate with an operating mode that is defined by its EIP-4519 NFT with an attribute named state. The token state can define if the token owner or the token user can use the asset or not. A cryptographically secure mutual authentication process can be carried out between the physical asset and its owner or its user. EIP-4519 NFTs extend [EIP-721](./eip-721.md) non-fungible tokens, which only allow representing assets by a unique identifier, but not by an Ethereum address. Moreover, EIP-4519 NFTs extend EIP-721 NFTs to include users in addition to owners. ## Motivation This EIP-4519 NFT was developed because the EIP-721 NFT does not include the users of an asset (only include the owners) and does not include the Ethereum address of the asset. Smart assets (for example, IoT devices) are increasing nowadays. If smart assets are tied to EIP-4519 NFTs then they can be managed in a secure and traceable way. The reason is that EIP-4519 NFTs, unlike EIP-721 NFTs, allow establishing secure communication channels between the physical asset and its owner and its user. In this way, assets, owners and users can be assured of exchanging information with trusted parties. -**Secure Physical Asset Tied to a EIP-4519 NFT** +**Secure Physical Asset Tied to an EIP-4519 NFT** Current non-fungible tokens are associated with passive assets, either virtual or physical things, but they do not include any standardized mechanism to tie the non-fungible token to the asset. Tying physical assets to NFTs is interesting because the asset can know anytime its owner, user, operating mode, and how to establish secure communication channels with its owner and user. The assets, owners and users are identified by their Ethereum addresses and the Ethereum address of the asset can be obtained from a unique physical property of the physical asset (for example, using a physical unclonable function). The asset can be an active part in any transfer of ownership and use. In addition, the asset is smart, for example to not obey orders from a non-authorized user, or to be inoperative if a successful authentication with the user or the owner has not been fulfilled. **User Management Mechanism** @@ -27,7 +27,7 @@ EIP-4519 NFTs allow implementing a new and useful user management mechanism. In The engagement of the asset with an owner or a user is carried out after a mutual authentication protocol (for example, based on elliptic curve Diffie-Hellman key exchange protocol). This protocol can be employed for a key agreement between the asset and its owner, in the one side, and between the asset and its user, in the other side. ## Specification -The EIP-4519 NFT attributes `addressAsset` and `addressUser` are, respectively, the Ethereum addresses of the physical asset and the user. They are optional attributes but at least one of them should be used in a EIP-4519 NFT. In the case of using only the attribute `addressUser`, two states define if the token is assigned or not to a user. `Figure 1` shows these states in a flow chart. When a token is created, transferred or unassigned, the token state is set to `notAssigned`. If the token is assigned to a valid user, the state is set to `userAssigned`. +The EIP-4519 NFT attributes `addressAsset` and `addressUser` are, respectively, the Ethereum addresses of the physical asset and the user. They are optional attributes but at least one of them should be used in an EIP-4519 NFT. In the case of using only the attribute `addressUser`, two states define if the token is assigned or not to a user. `Figure 1` shows these states in a flow chart. When a token is created, transferred or unassigned, the token state is set to `notAssigned`. If the token is assigned to a valid user, the state is set to `userAssigned`. ![Figure 1 : Flow chart of the token states with `addressUser` defined (and `addressAsset` undefined)](../assets/eip-4519/images/Figure1.jpg) @@ -131,7 +131,7 @@ pragma solidity ^0.8.0; /// @notice This function completes the mutual authentication process between the user and the asset. /// @dev Only the asset tied to the token can finish this authentication process provided that the state of the token is - /// "waitingForUser" and dataEngagement if different from 0. This function compares hashK_UA saved in + /// "waitingForUser" and dataEngagement is different from 0. This function compares hashK_UA saved in /// the token with hashK_A. If they are equal then the state of the token changes to "engagedWithUser", dataEngagement is set to 0, /// and the event "UserEngaged" is emitted. /// @param _hashK_A is the hash of the secret generated by the asset to share with the user. @@ -198,7 +198,7 @@ pragma solidity ^0.8.0; The demand for EIP-4519 NFTs, which allow user management and a tie to a physical asset are growing (for example, in the context of the Internet of Things). Therefore, it is essential to establish a standard capable of including all these options working together or separately. The incorporation of an Ethereum address of the user or an Ethereum address of a physical asset to the EIP-4519 NFT is optional. However, it does not make sense that the EIP-4519 NFT does not include any of them because, in that case, the EIP-4519 NFT would be an EIP-721 token. Since some functions such as `startUserEngagement` are available only if both addresses are implemented, a single interface with all the options is proposed. **EIP-4519 NFT** -This EIP proposes a non-fungible token tied to a physical asset. The asset is able to generate an Ethereum address and authenticate its user and its owner. Hence, the asset can be considered as a smart asset associated with an NFT. If the asset and the token are regarded as one thing, we can talk about a EIP-4519 NFT. +This EIP proposes a non-fungible token tied to a physical asset. The asset is able to generate an Ethereum address and authenticate its user and its owner. Hence, the asset can be considered as a smart asset associated with an NFT. If the asset and the token are regarded as one thing, we can talk about an EIP-4519 NFT. **Authentication** This EIP proposes using the smart contract to verify the mutual authentication process between the physical asset and the owner or the user by verifying the hash of a shared key. diff --git a/assets/eip-4519/images/Fig5_rev.png b/assets/eip-4519/images/Fig5_rev.png index 201f20f9da53dbfdd1d48ae7eb4aa5293f34d2fb..ffea57ef16f0bf053fb469ac00868dce77d26cde 100644 GIT binary patch literal 67816 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 diff --git a/assets/eip-4519/images/Figure3.jpg b/assets/eip-4519/images/Figure3.jpg index 3342b4acf90a8a6269a52cd795ecfe095b3019bb..dd0e0efa15055225c8730691caab36287f7e9aee 100644 GIT binary patch literal 33498 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

c?XFF>EV0$ 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

BrIoj#86N zx_R#KkS@1jEUfCyK%@Tt?6!UN*EWQziI*N%OR!G8r#0Kcr18X^nIcrZULw=5(wmhv zK;{~L$A#AtWq3QY5}$8e(&E2I$U~y_ z6`HIc<;}Cg zv(M6h3PmoUMaT25`&=lrdu!O^eCQkSlkpBAw0;$;A$y|9ln=xyGWRqtoFmE4L}=sk zDvdqjr}wdAQSJIVdWX9&7gXfOwOF=iP4Czt8guzV!tv6_=9(@#!#`-WPXM%(hnb?qugY9=5od=_G=~nhMNwb%|pO%BH6~ZqLwqLrS*(5W&s6JgHSGiS) zD+wAf0tGxIB*uy#R8D8xajOakwn5Ezss|yoqj41J)kV=zx_lx^-?P;IW;o_UipS+a z8KDD2rM5Nn{a>&kmrq5eh-a@ux`X!XQn*Zp!cgD+ZSFNM-lUm+||OMRz_+aVb%Sfyjrcp_LQe?a-wRl z(@t2N#nR^Qn*vt}ar*|r>?xHph@#TM3I!r85SWJ$wAfcWbNW=i&X?a54G(qRFk%?@ zrnx+D=)+F!M0=w;FR~P6@I5jQS%rOMTojB)v8nVgB!-U6wSuzT;?CBB=T%{QPoCSG zqLOiZ&9K75RmC|Gcxf;+JGv_*K{pD^`XIWRxKYQ{BnQ8z{Sid+PQTb^|9yP6lnVjo<^^mx;$RoNtR?*yjJ56X7CoDp5Sxu}`PUJiSBPLJKB`}3joY_aK1(Mx* zyggon)2PF2v#yYJWf|!f@%9zXyYkZvqx3;P(C^t&vLBiH|0UMbgR&VzC3L{jBF{8N>ZL$Eel6uKzAirABLsugSM z!#-L$AYH(|`lL5G)-&Tet4=1zLqcU=&GyS5R)0wQE?M^R?NBs&AI}wBWFZt%G4X+#NCpCf9If-85c z2&HbEL8#-!R~X1^Ccv-e@{T|=teU~>muxbfRF4vM|ET`@HSV^co$-p`UO@a`ED}=h3ARv2`B2?fjAoaUKrRdxt;5im#m! zo*dZ7ntARWaI^b-$dsK$qz|RnMJGJq&C%S)5!*K%IwMB7J4t3)0AfCQGiC5OSnU-m z_X{*x)N1P^Kjs)~P#%h${kDb|JX<_f*@gITz4J}?8%%Gmv0ckO17#?3lo6!!l7HScZtzh8)sH97z6p2+x26$#QL zSD|`MYAQ6lOoiF@l?2`PGD)|^W#)Kqsu%Ivp|{N=%|&X?)dy%1o>Pb0`D9=nNd_@g zfzKnoe9}XrMA>#`mX%d*Q3rN=oA=fn<*x&S!csA7G;ZEDGTQch3ru>+fV-AZiIj|I zpz2zra6k}9wT9LC#aDUwRLkQlRKsiDk1wLO1$}xS!aeAG?TOXrGsbIY8NUTr3eUp@ z>od9A`v{F>)+tml0p3|A`WlCUaoCcj)Gl_*W&$p@-$ z`fHpYoBTREx@-R%rCWQ*c1zqpNaTeUXkl>CGDCJ^<#NbF-fwiiEC3pIFlT4<`|ZA% zG}))l3aIU0`BVSBCh_n8ZUS1Fkx&d)*|}BUSM@}#yY+4yF-oXW2!0$gD1YHwn6pHvTh=fW!?a&Z8HQrSMWFgk0_f(23Mu>-_lfJFLoXoAkI?DgI!_l@C!nU2x1u z)mXms6nEiDm{3MQ+Tl07zJ{l%o*M)kBtNGq?ds^Y7I_Nm`Qfvakr!&Xz?)c*T6Mhr zL_t1!9`};e6sc2RJ1&0*Rg-YTPb@Oydto7aI(8bajpL6lP96yp%E4fip4e}=iGVx*oe zL@K4Hz450|h4I-hPp^BZ2Ym{eS~THx^wcIU3%vcpgualEd5~1 zDKr!HH03|$?FLkpzY^pwE&dWE@uxMicrL3?a3+x*3;I6pBj=}?@+++*5Lj)1^)>ib zE;*It<-6?2|9~!G?Z2a2SoyiQ!Sfs3_f3LHX(g}c!riot^v2bn5m&$O-3&V!b(ja! zpU_+t-IuB|?3l8(a?E%h9=WSBQ+=@b#^vaNBr_p%j?pLSUH02nTS?#!C@wJdNA6#Y zC6!0ab;H|x!Osm|UN}HCo!xBQZr6YDc~G)%V?#@NI{ggz!{KgK+{|vDQ+zKcVF0pF zgH5&5QQ;ZPX2U^jjTTbY%+Ek`VQc6@A04+f~u|euVhaW#@Kj04P?lt8b1;iH-end%ec^{iF6O_cqVOr+>yx zAhRsZgbW*w77e50U(BZ^TJ$NzdpbRM9^IF-)MB6}CDgt#_PI}s9mcNy%RAcImj(zl^ zA!vVGPv&YQ*!~n!S^3&PcFY>5^|%Tm(+6P!g=VmkU)k4(oC4Xwc@Lxzku~53;#(5> zu+1Sj0@M=Hi2!lApL`DqVfBeC83QE~uJ%u%wtU_y@KfIuut7ig&-%m7Nh^rUUING% z(97BY;!>Fe-IJ*oC%0u=f?Xxp&!zr-tky_aS?T?r?W5JaIT61r+R(fn^y*$xS%*RSEhbS_&8z6RT-`PEy_T zBnkI*BaD{m-m61C`v*MAKA33}T=0Y+7l%-9ZO{LARj)KdV9GBOY~*RMM_$tPB=8qN zPZ3SREziF1y8PYOS$)0D&N|iRs-l`PhliIkRIeH?%&AZv;D@lGew*Op(>x9JoHUXo z%{^xFv^&}jRbT~zP^ua=zPrg%E!6OSL_^>`<1no_$d|2GLzLBjR-h+3nQ*H7H;k`m zdXsm$qq(QNL*J(>#g9Hp&QW(rd43C+UVt==6XYs}zYo2WVp<==W!zk?U>Vb$~ZjJu02J8MAV#wcr=Ks^& zk5B_qWNITONAMN-K`(@NC630*SeOajm;UGs`%!LrN6Ob6)z<0samDDyH;)RQ6TfXH}gr>`W65B_WT#;o=TK!z&6z3KRlq7V2?OH2(BiR98 z5c#k*6^5UPdw|B%`h>UXH&e1-;`+y|&S|!Vki0c#+#R>kVip1vQ>GE~K}*EA2_NYp zQU|WYs+Jnb+&p(v{IH%XUglo#*|No2G5)8&aE$9$Eh`-(T9HFT2VLqHC@n{(HYW{Z zxb{PhL-rUJA_1ZOjT%WUoo3}?g!<)A?4`DZWLLC$tG`9KnbWRk?ZtYSGg8Z*lwL>V zT{{D|wA|o9NFj9}8kZ`;L@_U5BN@tKjtuFFy*uG=o_aRkDDy|+was&UEbt@t@WiH96=Bc94T%BTVL|tE8B~`086*6~EnfhpB6Jf;p11P5j zD5epCoww1paD?;}a9n!^UF`!qE4oi$6g_9F%-L!-yy=Q zm_4Xs@=j)FNah8Drk|i##dcC_FDDN221-|3#g#G}F^+;@-BMu6TZ<>H$K1Zojh||L z)HpjiP?o%<+50)(bw zhSL*2NEQ6D+eJ~v63=o|3IxQJ}!)O$f0Hk9aq{%U@~a?iJV?c-C(=)L2v^Aqy}xJf;)GwqXf(+$a9kbXM;VmNj(QT}4e zErwq1P5!V`sOms0(9QI?N@%KCWY+^Xy!nYQg7YYULCaDh3$f~E%S9(s)3?GB8p8LJ zr<*r`s3d<#ZI+Krqc~sKLydajwx9sBS}qEc+!G(m&4t_FhhC?>g5$81lbxtWBeLy9 zuC2m7IDoyC3;>tjGqO(#Pbm0)xA;%6{Jg+)J_2uvUuRmM4NTCfDqq~V{ciof1ytka zh!*mZL_u;>Tr>HwS85Y>w=Pg|qy8d)2I^q>y*@0SZV5Fi0G_Fz=kpRQv8!O`6GhPa zYJQPfYUv*Ni_~c8VTWmCa}w&tF)vyQrbrErB(nZ{L;T|8!PiYUO%=w#2OC zIu1NOBM^jJJH#h0+yaO3vh5BTh!q>`cZPPd!Ii&qBB`pRtydX_oxre(ca^bq=gsWB zPI`G&g?qH2D{jclqXVjc7U-UXmHlg|^Xu`@71a9{VJ(s{`YhyE^`^Ca&~7jQf{8aB-0ekJHg^kCe8$_fJZP#f`w(hBUIo87Xb{PFYV zQ`gmxRgrt04h+&}kqZDCWglyRs8mgk%!@cLPopd6!EtQu7g>CNyB6~0e!>5OVr5~d}{Bp5AAh+Lb)A3dn7u~?JT6@ zLAdTV?tk&1zk;(PtyNYu)TEn=zIMZYh&|L7Lh|%piRm3-L#meff3|_4dkh`;;Z4ze zjlxtE9BUbV$s|Z>^JelVC!2(wNA-$RRU5V^YpKZ;?$pY?z-w^^wDQsG6%Eh^#S*`k zmjtg`Kd;wo?Q&{^1H%Ku1N?n{_wrw!s^%baize?II(7!dM(D1Y<@MT2lv=?$>NDVT zDD+=eroM)u_X_PUi>JQEj`~l1p^(5AjrcI10DUAa>A=JYcJD#3Z$;>8JyBT?P$QGc z0^SOlHvDvexe*rD_s+-CEya*RgA!>utuk71B-23b<(SiV_4IjrNsO>Pi%vdhwmn7Q z!g4816b}apEIED7Li<{%$4OFN%IKp1;w7L&pm%*T30gb7@dYIyx2JDRbMXZ0-ARe6 z{QeTd?gO?yLbu!l+F15yC za-QT)$gpB|aw*oT`QYrn^z3ZXdxSEuT_3MwXwg6eNk2~5_=GOjUFsIQp&&px#Va#p z?R1iReHw9r5}$NsStH6ak9ZOW!Rd;#aQOfacC{XfV(7{Cexh&7b-NOJG9xD>wJW&r zs^`VVfPm%sl3=&JNQ(S|A;!!>#^hdus?SbqPyZ}WM`3>JZk0KS**`{{Js$9bo7R>n4XAI|GixaA89{sysctqk>RMu>Yx*du!R zL9}<+_%J{t=CI5+5|7E>SU{SvCPLM2;6&JfXWCoBN4@nVj=+U(fG!#4hTn#oZ0=kK z83@p6Bp9eKKvk;FU!7UsmAY;Cn0nlnF;_4>w)njEB*bP}cc=seXprd_$p_jeB>@el z(|b0Zu3z5_G$<`jKGNtns)p9))G^@`sYhwpP3&h-%>nZnnXdv*m4s8rWXye;)C48M zmz+s0J{0At20IO4?~pdP61@;{G8@BOzNw942kSa@-st!=NH zU!V_a-; zA2RU~B^8nO+g+3sD^sabY%~$b@1E1iS0)~YY59cvGb5~u=@^-9j&J8VbsX2-37H5I zG1-knx&-n8p?ugtbvords%Pi2mty?nofoi^7lR4iFI(FSGph1~eA#IY~?z3UZ;%`B8EK6dgp ze)B&(!#gFms>5vI0XM<&HvArVnHIm>y6W zPshZW5dEGxh75!o|HPo2Y~R*8nHAGWm~B8b-NzKW)d%P%Eu`+Dn9DEQ?vn(<-;CJ# z>&B9C1n6f`CX-)vS$L?+!tIr?EU9M7+zgijaD~ChGxo?c$AoWhydcuPY@YoRDA`mB zd*l-WS(xQ+wV)aOji=%Abe7S{^Lfd@_zA?c~ztN6_;gBU>*k3 zCOse_4>86?ifNHDKjE=9GnA#D<(IlDX5`5S2IXy8RYj$AsiiDs@nt!E__%uD5a2st zb}x3lhk8Ij^d3{ptDBBpl)S>f1mGD}Gm91*>|MQKTLe&Wj-iz<0K92dfB#i2HPx<3 zRmy@-x{`?6tHKB2Pz(@YM=ZoTbTtj^8?D=bT1 z>J;l$s@iB0yr)sGnOZ6D25yi`I~1yLpfg=-7=_okVtt95eBos(w70iy*ulFj zCa`EEiM#a1K50SAZ^6(zOpPs8V3N5r<9)^Pis!wBeltIMVkbs#9!YM|j!X$tG|%5X zjFcXVYvJx22477Kt@2~4GY$gy!5Q=qFjk?7i$NKSX8HNif1Xk>bi6%idaqz=Zp_pB zhP%`9=!Wf|V%6mr(C5hxGP+}*f``zQo#x~8i0k2CK6c|5f*CH3YZ1Od%KCI@MO}TG zFFxB7D2(7GF@tfFRtPT#gAjvceedWkORH-C`J?MRQx_n+?Ey~2h5*&~uBXNXJ-ROJ zFl`$^>~9-3n%!PbBZ!gv>Q8zl?M3PrFPWuIE)n2ksH+%TW$N(07qWBWB~YB_51+SH zh;t>6UqIJ=OEp8?yO=#9m7?(2sY^)*T9HZJiPw_`9SwKn>&V{#34QZ8T;Y5*uWw&X z1)frZSL4a_L?;sk(`yNNQf#4hX|mxH^CP9s`ai4oISqx!IO=3T`pp(&CXjKO(IC7IF3XwF+M5QWzT` z{gF^HZVyKfw0N;9KED?!$f>S3>mP@BAs)U!6o#B~Ymz^GCx2!Wi>f3cXAv#=Rt))D zh6SN$z^6uKgD*xcr&Z<_Aaw%kVbwRLhTet`ZV7HqfY3wB+8`N1b0o3bi)hKA_PV5N z(3p(QHu{Rr5m9Q>nRSx}Y-iWw`v`9iwVTaltUpq@kkXmD*KP;P?lBdWB2rJJej)p% z70MHV6Y2<7iix}?R5Xbn@>s^Z^|4?4QZZMgN2hrJVQ$nr1$E0uh1p8PTd4?LOCU^9 zVt#uPxQ)q|YNen3vfvs?y|~BSjcwx7M7ALe&J41W9HsQ& z?@CLV*QPfUf0F~e@}=|K1+WBFWEWwBmoV>4Thc07nxzU1ylTCSrn0Ka7M4?I+N;73 zsl3OpIuGZtwQH{YX7);~y~>nszkmK?uCC@VcdJYsLv32H3F|TvP`Wet_*ex3Hm2ZexfSN2sY$EkgHBnvzdWU&6 zkZKD1Oqu)*f?txEt8wq)nA??1pJ`KiVWxW&%CT$ykDGa^g04v&v6JL-J9Les%m#dN zaXfDwdOcgLQsXKq$pN5*-gL{My3AsIE2%C0Ry$j_A}FvP8KXMvxMkL0h6SC0wInNG z8&PF-1ulwcC7M6)!GXz1Mm*39$7 z7sA^IpQyxra|X)O_ryYg5)vD@{HZT&o<}?)+VJ!(?ku1=D*Q08B75^Fq8hF-e$9@mp}MNhh)uVKn}IpF zZtM@o0DvP%*en<5I;Qu22J;zwHPx$>Z| zS!HA=n=pc+B|xI^N;;^Vv3W+aj_tWidO#Kmf97*~A|y6&od6rh*ebp^UwC;jsm-Yl^Xq^GH(p7Y@uDS#0b%b3N|<6AO0mlPp^iF16-^(90|#)c`rwQ8m~}Gq z%AzV!9eH7$^%040VXuRNNZskZeqrp&vQ|MAng7`9%HRyo`wmX-;gYW^r$CqH<&Se2 z+s1nD4Kbby@b^jknBrTxwuRPxtQ|80rL_3ppqrQQ_$?1+k#`+26phJ$)wlb9P4(>P zKZW)A|C4^*FFS8Kou3{oaU4hzU>@^%QkLuox1P-2Hb<|75kmV9_n}U0S+M+Z$((p( z@`7|1+{*^=;z%MckI>|T*C6=Sg4C(qlCnBv5&ee2ar->McJ7nH1ny&H>UZUtG^dxQ2KoxNTsIkPA9@h-K@D#&F#TNoKO7T}~$H6VFkPQfi9`vq$63`5!b}-`2Z8ooRL~uu>eZ zIyqA3`b+M7k55MsJdGKNPhEwS6{Rl#llsIbJP_Zlwi0O_|7?2w+D&7`8n-@ow~v|b z1r>OmRgyXqq^Kq7iGnGp^HN)wDR7P~R#^jGmf3Y$_Tjc%D#2Xhs0++#f(%jrrr}F!m(GQjc{Y9`yE9!v!}&RX1<;GZkr0K zI%z}M?}RA`PX~oIO4EGiC zwI0d0Vpw$vKSpO0as=kJoNf*aq4h0y1DpSaS?y9g#ClO(&!?p8pE6Ptxp(TeHt{{HF>?$W>(qTQcm+g75v%A^XS)^B>5 z%t%Cy48lhjdJuw7izX5Vn zO4MzPt5Ij}HP20%g3T@M6A^*H>JI&R$I##{&1s8i-QQSN4O23E+(W1sstLCe;3iwd z0z`Z$`*x5i!n3&DguV;@KY27>}_nK_ah3uqlApMU|%Bk?U zV$E5;vpkcrNp=zrE#+E>ICY3EaA2)w620)eBYtK6%eu>E+E$ci9^w(M>47~Jhs(~z z^E;An(px_kl(Kiq*OM%X8n7GR_N-!6pL9PA;N%mo(0vQ$ea|IrjIAy%zMSl_TeQUS z*1F%!K_kRv2+JkS%6(+ToY49F`=7wwcR{Bu{^ zx{lVq>WvG7iL$af62RtF+k98@;Vi|}Gb22AiYW0i(-$zMCiGJG=Q+eWnQ8f_n_&%k z77JcUeJn7vNk4j(%}in1p^zQT;e$Y}9X2)xAQ8bEN|ZG_mhQy2-5{*7PI>xzbP-P` znxd=t>jQvbQOMS+9%*IR-DHrpHV%iB?_CJ^3Dxj**~AH_)3i2IeZkn3$$=Q+jDy1c zA~i5fucWBOfUUbTqxTs8%N^W9oW?*0V;3PyazSj*Qc)rJ@DVjSP?VL5&octEdS2fE z)Q6)i7rYC}HeoS?N&RjOCNwsFN3&NGWpd9Q-K2AQiz5D_TCD+~o z!t43e@xE^#&G876av#7fauL>;gfd zPq~M<9RH2F4U#MQj2>B($DiBXU-hNpP=F%07yG3V_ZZS=ER!MNadDFb1s?1!O3%xx zMu!^XX+$r3SI|0TQf!<97I*NO@>v5)6M2`(P}#^l^mQJ64LFE28mmhfu<^5Q5^uf& zM`7|^V0%6aQVFUue}5W&!yl2%-+S`AJ2&BE+wxgKX))dAEi+hA=n{DmZIE;u4Z|5y zM|j`BJPTR|JF&Ezt*=*#H%x`uswtDPb7`iN&*{lwbMdR5JQ(88P@nOADw0QSkk@n% zRL|U05@+l5ODj<|+wt|6K3~E9vdjbGM8u=Rmq8{?lkS6+`AYJr5_A1Scp>QQVO%=r z61?h2#-id+kLE^$Jbrd@`;yH|GXaBiC25s_Jn&6*&Td5vEwZL_EgB-gS#L zqw53=+Aa5P+$!hwpDbQ7uCF71ZGq7uby(-rgs->ga=UV_|7(Sbx);S@XNSg2q zGmZtN9Cp8$y8Gzn8wUEI-;#vc*KIt@bxNIZ)#VE-DE*i*J zWos=uQzo;>ZcR}UAq?ohL5NDGd>FC?vK7XnfeJvYI!ld4Rbh6Sa?MIjav7{ z1AC&Pz{5&vXli~c?qtf$!D~|>XbzEJ=0d#WBWdQ-7ZZ{49yO(KU!3k3=+`>?E7$ZQ z;^}U0h*ogy1rfU%ZCNEcSt(TCpVF!Qvm`xQ5=5gYRRU4cI`({>?yqRsW`VA7iPZgWvB=^X7U&KoT@g~64XXnA z81giFJJG7uvJZeUK`EO4d7^FVgpRW+D9jMPEB%6bh)i6F=;4f{%X;K56-pqm0RsYv z_3@AfO6O@mDBHsOE({X?i7~O+`;T>W)mt%ZP0D=$JYiJn*dU{(6qtnM={#dI)f_~1#-zLxlUFUnqb_6piG zd(nPsXhw?FB7G^XP>x|BVCTakOgze0n2&&O;52KW01pV~v>e|=`6H*mz~CK&w}_6x z%W+?4nuZ+>&+bvog;HV}n}DLw+jO)1m!qNAU+svL%uBRx&-@gUd59Z5pGZO5y#q~q zeOuBEIYXu@vOCu$(*@3DST*7nP=}n@ky?Y^BbrMdwbDG@IOBLpgPkJjQcYe?x)gc$ z_?;~?3oCEio@L=mH>3_sYY??X+!8)j<4Q$pz26(Djg4FP6Y_}-PPTx$lw!l=YA83+ zg5<4<`^d*3daij-oaALIArSq3~GmPTKB5{-hvLxJ`Ww~{^89S zzFw!Gs4DZ*A8zs&yool)YrxlK7Ky7I#T_MD$%{~z-pJHM<{-`AFbb_v>~@1IRPHUx z|F8~7b`+)2+VVk!T71m_GCOE8bqy3-=1de5jscslBWIqIZ==6HqpL`+it`hSr$KXA z4Xp=PvNRdHGir8ak5ybQyrxz^>}Pw(3~J3&Gyj4rX!6-LYv6E)?7~jjuWpn9&NBx< zp{K&$Pz-u~`y|nWk6T~+;*e3i>|A=wXFC4X*IV=ZCG(oM#<$I)+mXRqTB?s0j81?! zbSPUXJoc#lx>!`$XIj>r<&MA2pZ*T1`2PSe;-BG8{L3|eBRn3y;;)>5KYcL%b3BuO zio^7O-t&KA&g;y0M>$=RwB@sRR8aRA=A z`8wGCY*$Ms<@t%r(usv`Gb5*vJ;>AjO(p^K(_(3v_?zC}Va)#W*%IpOQO$~}4BLdc zJ^j7z^&)q>?RfIfq&0{dIJJX!jIcI}c_we*hF@NEU>+>}1D0wtze9&R9 z+j({fDzUHrr(>94PO2`*$=;B6+rGa4FHlY6+e}z_K<+2_SRh<)Z%6AWX~7>U{*=d+ zTJ6!X3Aye~Mv{-S^*yIRWf(!1b7d39gXc~un~U=K!^xsxJ}sKK>sfZQHZWcp5C5Uw zCNB26_kHdv*6HY^6hGyaTHP@W>n0CO3YKHTaD%PBt!kb{l2 zrG4c1pUwq;Wgz}{oqU)6cbtCzqyJa=8{t<#2>Po;#moQD>iXZnlmBO5_rKrdf9&J@ zkGK0@dy~sXfZEs&$y2;^@A;mdvGn06OO76FbckNwS`zknKitEG-#8XlCYbpTk_F~_ zxdMmzy6uj!2ev=|J5!xDsQM>pkV^zv*rOQnC1#{LOQrGF5+ z{uvvnf2E9d!#9B>jn?E6@bG>0fO;m`pyH~5F%{a=m6KxOQ249oJLynLcUh4_E*LxXDn{X7K+$-n6C|HTjOfABm1uYP0! zr#DC9+zMUBE``t5gLKxXzS93jp8#{$1S7a44y>~-dD}V9_@V7>o*=1n_EZYjVTe|i zxfdBvp^oBwyEs(Q8R~)+6*RtkeuhCJ@v1%=cj(jqrB8mNi>HCId@eguAWC4zShztN zS2Zb+PgY}yHqN7uUE8R;WmeyUbISM?80x<&qW|9k+J&E6avC-F`xV^%)0y7qn5O_6ts^pDQq5 z-P6}U&Qu{8_&HMqhz;)7QVtEH3wEVoiplG!zDZ4T#2!^?i)_Bu95$|F*PZYa(4y!V zJ~N7h7LVLUsbdl>s%+jP)V##{8E=s{997%%%+YME?&)Cm<{8;51Nm3^5S}1atiBm0 zJ@l2i*_^SHc*G;Ho~j`;xHRC?LAQF67nk$3_hvSz0S8q3+Sc_ocnXH?%zMp{v-VT( z$!Oy@u!?juEPN02A%2p%08Wj^T2^nh=!)nk-%yoE=DVOiH^TIpv4a=MPEBd3kBH_k z#$+gXNVt4y*q=%i(Ip5q;x-S>&o^-!WG6+Jv&8DBJ2PiLMAtG9B}Jvbds?sRZ}3i; z>D_~vTKph;B%_I;o<7Ce96o}AP-ke52ISNRwUNxPs*d)qc#$C93vgJsD9F;b{yKTV z^P`AG{Uao|m^?F7IWhs+X^aSYdQerWYu_%VtqkP%2*d9N%+o z1Z+dsl)wMLjK6@vl)5KkZ>yVYJf@Sqq>3lHMlwx|;Anm=6p35y{h99n8X!aS3dGKK z?L@~n=Lye7YA;wcuBa{}pE%4VAn$J9=pB1Dn>a4`u0;0S-U?m9^d(98cotKi@Md88 z9%^YSceyx7fuwf~zUyQb<$HG+w0%qSP7+LUF=ijIyZar7oRG0P5=1De1JvP>)Z!+Y z74S_Ke0>9olI&1i{Hz31tRuV(BGY36fFIr03_umLLPbbsC%{AW^f3LP9(#dR?UJ_$ z6(GU}wxt$jspH$0uI{6(V+KYKf#$9kCb0SV;wR-hiuXXV%Sn2Zc&3A4#w8Saw#rln z4w}hSpAs~DlDOlOqL2XY)%5-?Am=th_>`u~e<@DnQ1%MvN#8`{l8>;PIF4<~XRe09 z^tYamS;|44+fQql@yMoU{=#|yaR|cX`5P#=8vPBc^G)FhkO4|6aQ6X2Aow=%3Q_AN zEUoU+-z0vRD)Gti6NFqW3JbS6B^6H0r?7-AEXJj>nfMU$L4!e}$_qGxt-nkD2dF4( zjzepMIJY?gZwPUxIz2zy?yor@vkA*eux@jhLe2`4+~)pppjN1M%LX01HZA$q6-U4H zT!s>nbMwc8J9|&YKIv(CiTl!zN!7@upH4$2a^}_0(3;>#qSteoo#@5G{I98m5|)0%OiXy4`D1D^sP|e5q_#7qAsyJFP~Ds+C?3Vnhvp ztaYR%Ptpvho1lFY^B5l|l`j$7r1(yUMV0Qg)tUQYtf+{EUMnt1s48Y?h|Qkjv)p@T zy`UHFj*>p8XmBCZqpVW8d3N_g;lYo@MkN%pjwkx1&-@-(q(JXZu^EoW!ok-SCSnvx z^X><>!1D2Y{M)=8z?3;4_?f-R)Z4)s_B6V4#(tR1KtH*KS;54cx(TV1zCud$A`nHw z$m76Fa!ajUWObpPk`&D;2XD$g3{U{(9ML7N*{@7f` zDcY3UG^=(p)4lxtC=Mk2)jwedG9eK!bEU}L+KOVCALR*3n}RS%i-4`u+;2>(@ECOa z6p}KtF;(>e&|YcE+4;vpm@xT03WyXe*J5;{_DSsz0nK#Uee^a$vLsEUNX&-gJi?c@ zpC~J(x67*angiZ*Ptn*tLMbM7#(s-Fp7ZGaKFEs+oBPBt{V4aj2VgI}$jY7u7d(Zn zr|TA1Cj40-x5mU4e<8eAV7qfVOxVd6Zp>OIB>OZWP??@yvj?#-5+T!|N@D+%_*h;5 z20lNQx^@b^ZA^bl!eA@WNjYZDeILl zQudMGX8MI;;!=6)#W=02V)&S_W?%Oe-ufWsDi=CFa8m(iXmn=zzGDWvkV&hNzhf4w zhwhvwfkQSTI7e?R$w@?I z?QPsrIx~=TV#Xa}zfanY<8wO9VmaZ8`FZpy6-#doYmmx%! zf27|aAQT$csoCMLRf?MQDxfRK8F!s+bQ6an))V#KiA$43C%-G5X#FHjiM{k0UUckr=27Z^V*H1R3w_JVDK0Dc1X>gtz`VT0kxlh8Kw97=B& zARXHefNZp@p0Wi-@Ksn1#7nOU17qCP>DUNu1i3ij+-Bi@E|)LE-cnpo)h%#~))cGE zdGC1elT@?+uf>(3P`qraZ z)tQz)_HRj^AxTSy?B6eg(#VWJ>18mbncAtcP3l4$*%`4BD;M!zu}wS@86;P)Pe&@2 zw4+X%=8*fElBH%d6KNJQRP_7e7JAm>#X5ba{4ywc7rmBJd2oAI$SsZ~P8Il-TfNOxw9hyOHV^LsF&TRSrIT;{M%(1S0r$OnqCt=Q@HO5uJ29DJaRfRL!e zC&X?nNO@9*5n{+)^C^mTqHN%Z{nq4dp1&!*YJOh3sz1Q3_o$R5aG8}h$O+|MAXwFb zZ;eZqi|y;LD7J99e)>zqDbxYZM%c?iY@3q5rYUd;dhRl&ndz;SxNrkuu8&JYUdANH z8mF}Z>`Dqx9W(HTDZ=9KhNey~UxaF=DTsAb-&R|kHx!Z6-nh8+aJD9#`L1*%S-u9l z*ElSACaQW18NK9#vu_Smz4DtMwcCb;Sa~!5e&*WLGo5t57lcytjR5>>n8lP5Bt!Rf^t=M=~A_7r>qfiBtj3|_I7U3#JXY^WX z=(gl0D_ZK3b+>N#Tnt&pL3`gtjpR;Sv2%BXtgsy-4P-~ZGL?0##n zX6}6V$#l}^-GjPNyrom2Y3=~|&}KEqX6hBn;Gl5yv5jPSK5?8vhDd(Xg(d(sa$OBLNp#~xy5K0ptDNZ8uGWgRnO=Ce$0%<4l1nitg zY9=8?=JhHY;FX~5p(>I*722Zlu#-h=fW+GzdWUy*_oz|lrvNG+48WoAi4E7`C?R%)t zh+tfnOXBJfqO&k`WmNX_kv%dqC@P;{0_I9*bcc79)TdX*J&@cqBV+W;+MH6p50+0Q zlcvJP_SH&s+GQSMYRxn|O->Oez8W1MOe+knBZCoQvtlylT{xxTK5wte9OYYP$>LfZ z*qN)1Fav++?*yy|h`XYd%gi@%0QxYEycBMJ1K}{rwy*st!FBZ$dj5 z{2)HWtBJfj0O$E%Gr0O|y99Wi|Bp#1{d-Baf97Y>21O4f3ffPRYCzTJ6jt_GM7<7_ z?}o=Od?A%QZ-&@NVjTX)uEX+`(PQ16W8=^q z{WwJ&ub6Po0x|hRp!h{yw8BJU;1ggg6>nOy049QJ3-mc3`crUw+5;ih?UK9BE4(R+ zZ(U;?*+HBH1b(EynhY8ieRL;=b#{yzG$YEq?f%qA$Jujd+XG0Bg~=`cF<1qH=Fg zz8Q=JYbI()Y|E)m5qDr#_>;DH8UZ{Qro=!r3+f8Kz|}#DnWWB$Ocgy6N)c&V?wldz znK9nU-+foQ+@#VwEg^I<^v2R34kzcpaT5Z!%3mCjaSi472fQG?iyB|iTU&))7B-bu z$xYU&T zAj-xuglc|CmGy}Yvrergec_jPodKlCGOoM5@1`3IrQ$l>BzMQ*1_P|cvMJx^4hGzo z0`*sUhyi7G{whTWVr>vl2i9_l_7pKnhS%!AlY`M8X9fw+ZIDM2_aLty)H_N9>*u?Y zq*7!wnJBWa39wMQq~ zaA*4~jgdv#!~#$;G#4=`bl_L!brfu|0;71M)$398eo^TIi*TzNNj+GVrT$S=+o8e4 zn2EVU;mFKTS!YyBq=T1|gb5qx$C%U2!CNbrKPfq3HZy|lFd;5^i^bpc+jieASgOmk z#=y>Z6n#($>8St+fEOvKUVQw0Ppz^JhB;wn=g4VB+w-E5bgRy{vWCHAXtCVd>-j^8 z`J}TH}Y4lSym?eAgwRxe_#d`Fk73?R{h~+xW@pPHf+-zEj*hnexq1@ z&`a#>06%`x4H&baOr!+@umG6t`YAWpRx*TgHgYro$9+{Fd6B0H%Y_BM4GW=l< z(R)_1BSZ3{3*96zkI6K|Ej^Lz8~TlNuM68gNH%_qcF8j!uT3*;VW~DERUHjiC(C_O zk)A$Eh&==yA%!)4o41*HJzoBkx+5BenZ%%PG#v!YK zWKH6EM+o7G?hWmF-A7_spU6v-{^)8(dmRE5YxK{DrtQ)Xq9q?IZKEWPODhA6IGHDn zIYFEr8y7kCyV5oDo_SWLR>Y|;navY;VHr zgJvO)=oX_?#A4$P$}}Y&L&MjAs$ZQcpQrBERS{nQ&{uCbdq-)+%P~!T1WmEpd}?xX zkXAsUFawcZ%MP+F-^1YbL3|w0PZz(4`>wQFv)m^S*mr4gSYOmxDXnbHtO5CTtoetO zPr}UHGDMom}wI2+?^D{oap9wQ==`dscyCtD*-} zX6-usNi6~FTt)#ZOu7)DGLWBZJOs|wqTrYb%)pa#jGdqTy(u-&YK7)`SgUrv@XmK7 z^|+>{M|qYyk=OwTVf%!^VxwvJ`Tx)l6rl%I2PzJjPt<}X-V0EZFWUM5=J;NSfT~P* zH2Pv>f`^wP?iXj=QO+m;wZEpG;cG;nr}@ngO!iacg73Z8{<~7>__t`qnv#JpMgr_a zoDcsCgf03Uv_4E=b=%_0$@Fz4ufm**$%Arl%5K7EGZ8_Wp+^E@^piUuS8 z22yOljoHN%9L!%VnU*yo~chsat@ zZe&-L$FmhD!k2(C90qZI3CW7otm*=X2{rO%W|WnOmmgjn9&m&2*YC!R2o;{;P}`Ek z?@A*t^K&r+MUcqos7XB^qFIlh{ZG)-)SzPilRq0W0c$VTY#+!^O3a3qc zSE^*EN}yuWY|{)A&OEI=&S$1uFoX(&y%tqf}P3O+e`4rmeg}_6oi!Ot9J)gw5$Dz#0T~d2{;WVfouK;Z~{-rT} zR2)B?NkIj?mZ1wpzq|g?d#`RV1>^}d1vkY8Sz4NOQ0m-4HW(f zYHir1&YSoZ)dK`!+f-gq_?c-ta-UpNz&)I*IZKCbI6VJR-)d;huXDl|A|UCHizTVH z-<;ks)(gd0*t&i(o3J#s9yK$?{|c2OZydYj5E;DuzDy#IAzlzOe}d0TkJ=4T!EUwo z=JYz1c-%&)y@VO#8kHD|m3$d_gl^Q24c5m@3aJi@zhHYP!juAFon`1e5j}ueLx>Pq z=Eu{|iiSTf_SuUxDOq3OyNb59&Zg!vEp496$=^RqdffBEV^kyRE6Y9Nfl9kIpJ*>G zs?}G4*?ef}SZJ0T{HDG$b&(u7!CLYvq(o7 zPd62WfM}O{DrFa@HCpwF@>hr=yZH=oL-v;l@Efo0ufRmp4_*j(H5S}n+HlQ(Ail{Y z|7&7>B=u^Oh+U6a4^vOI&W(Fqt-I+TW{=)l*ycl>SOj8MkM5L9k&hl7(I>QWQc$#q z8wUhT6ayu@CQhxxb!!2M7M_mZdV#OZTr4~SJ3)E2ziZN5C9xr|zwULEJQ{GAl=YaF z>@s~mBOo7C<_xiif3*X1@|M_$g4!buzp@y8n_S{sG>}r5Y1CnHgeNdHuN`59uKH|d zQAU{>WRUy9*qKy1LDpzM-lc?bkgXT*I|L`c;JOn6-9fzXzke~@EF@_B>r_(j6xVK( zWM=bhq08V3q}>PAi2KcAUOnhh?(38pyzonZHcBH|bgqoZ!j~jDOihzGfq|0nubJ*p zMQPda;j}%G(wVL3Lj(AD<_3UQfbQ^C5w!p?_7j}tDE3Sqh7FF0P|z zYF9;7<~VIuS)O!k)C9l9(I9y~(LJbf&nIQxCg+EWE=b!1^5OJ!)#;mblnjen7^%x0 zH5Ny6PN&<%4w2UqgtQIlR#XxYaAeEQIO-F|XY9fGQali*65Owyk4oY&XW@UOb6MolKG5MtY)gvV59(0wm6y^cp zD(9Lib5E%~S*CTt_tkjl`J%G;?&@2sX~`{nVxIFxbtB1e{+}I}n_v!TCEP@45S-a) z3-}%+oK`vSo7&5cM)~pmF-{$GyUft-I*tBls_w1e3SyyK!*&AWlNVu!O2D@52LOnh zHh>@l{692M4wd}Ee9ya2LI4#GXwt)_%zJ7#mrA!Oq1 zOn09@lt_)Iad8MW=0E{Li*XRDJ_uc+XcBM&#CJ-3RDM}w)C zlboDvVgPLhqL$M}M>PBkii5&En)sa?rWS7DDeqzJf8dq+P zAKw;@+vMS^nb>GT+aJ24uEx#%s==P=()c;@@eQc=OBM^n$&!~M%)~d)`CWDey{9X~ z9!OV>Ln1PKy>G%<3(*@qWEE3Qwo)Bf8r)c5yXccE9wE<}-&3sZ053+(&lMXTwBC?6 zX|+hs4%W+k{JR}Im~vRnV&130%5ujbpL{Z6<6E@xRo-%$ z>2r7A%pZzGlZ5Nk|!!%9`?fTN_T>C?P_k((3Yad z*9>v*81(e&$;*d z2Lh3VFuw7PG2Z8W%0AmP3n60yy;F35H;SGJ>cngCrDFX(n!&AmpDj4I`Y-l>$3)8ukfnOA)C6)^9h! zQIZpCHILQ2nWBD#eFcks1-26_TfRl??JNltP$P&Np^7py#{I{57i(e2ouIqeBqoQi1Y@jCpN{zr4s$7@t@>JzhLnR<*a=jDYd1TaqZl+s+ zdy39>@)hTjx75a95@hJzvzEDZ>L69NBvb4xSuVZL?9GNPkZ21iTqWpn1rJf7Mp{ld zaLa?0jKtpJ_t;jJCfk0<6kDgdrgxyW)yfKbEJ*wA{4-4N|M{~&!$(0V@#Od@Q1t0( zh|iGPPrUvv*P>nSHxC%LAN#BCDG(&81EGREv3^b#mI=jU)}0&CgcsB4&7&6Py;7IT zl!DIoT5pX{)hm&JnaH!I7w;RBt1n-X+K=M&vB9$X?VR)xN>B-PewVwucHWeR^5mez z;sJ*(UCu0&m#wF$ktQCKp+M6L=9~)2T|u%P3G_+*K-np8MVJNjFWnz}@_pk!2!j!N z)ojVrOqr&gU|bf?{=p7gfr(?z0_*y{U$970MJ)rMr;YE#dq|vUA*fTf{-{%uesCc( z0z}~KSh0qOlL1rwMn8MdjGVwllBNu0jWFl}!TY=1$CzL5_}3W!_st3_8iE1yUQ(fT zMJHw*{^0Q3BAKOF<+CEe$+1=qI9M$6o0c1U`d5Pd zzh>47(9O_0-{orQP=M@XP6bJN#K>%J6+Hz+g|Eq#eZel4kC@U3umk9*7xf!at9e?V zzh&CoeaxuzLfy#&i9NgdJvM!bpAJIFJEM1|Z+Bu!^l=>zWU+c6!(nG?&38GYDX@S5 z+k!toPAV^!K4X4+O#t_D#qJlRNz4zK3l^ME{`4Q#e}49_SN$~tzeeD{W(4GZO50_9 z?6Huh5G@D+g#uX$aP=WAxkBIh1S;4gH11P{mGiAJ%y+VntuLl+xba*&B6knA6{v0OdofaT0A+BgU0-pqw;qo7Sh{D zO@e-##e$GWkoV;)jCJ_4k`0__2HR&#vr&MfQ|I|Uq?;trk-X#F1aW*^GT~5pVkNK;&dCzcfryvvMZ`?sJCbo#=fTP311bE3!|+M(ekE)5gi?CKEN=bwJ6fe+ zEf$hOzstQsRA2$JW0=9EF8yX|BHPBge4*Lc?yA^<(duvMyuLe&%r{l>t<|Zh#?D8d z>r;%oKKeeB#~j@$V2P52X2V3IFaCCi&UznjI9fmxE|O8s=XF*O*zm{s27~cEvW)j<%yOFVIecolfxcsCgL8|~h(=J45uO__ zYwE%C$1R@rA+a6WNgo?(V}R;cyn$d04FPoH8)KWGK~zPq2sy+)-MGnn-$2)y2Hb{t zU|Jk4ilWmt3vCCiHttH$EDep3o1ny#USmU1?%givRtt2_@RyOG6+5k-jHv3CK6O_u zO0?~teU&{xu~5<4ZSiKNW*`vPUv1NCe@Z~(0K+3vnF&#&@kKQy`|N$qT^6;#owyGE z`omb?yIMFI9zWsw?kzmg&i~F)`EQPY;% zC%;_&bgW8;9w3@g>$7_ct}N^}LRa(&qRZ%DNkf^({HzfrR?y$kU1SeNhSred{ zk(NnLN$)duKx*Z6z#uBWNO*M)vj+2={<=HRSv%g`#pCJhRpd_f;&sQD@Y-Q>s3S*0 zU=_^yg{2s7#0{aTbCZER_gV_)8Nt|Cnl}xaCyrgVI3Hh}>P00R(85Z9Cq!>wJ@kQ! zetaDXth<*AT?A|F1^G0AfgeoX6RGm9ty8Rb()L}w=0L-lSJ&;Tn? zDL&IyR4^srQLCB1Ba{jIA@4_coP$s|?76}k!m(!ACdr|6eUHl=X6Q$oG4B^I@|gIA zB=?t1yrfS__cGrk0rC%n0ThMUTO@e^1MMShZ?jP28ECSwf`%xA`aEe|<0t#=>6OG& z1IQm07+#_W1qN{S-=P$SJCZYaEA>FoY$?ma_Sr~ENgDaySc08TpwG5^?MYaj?%`^M z+Ian*&5sneK+DB&ytc@rW!h_eg~wcFDlO^)jeM-tzcl!maB0Q}IVng~;=+q0sre=S{0*OiT1a@UR`h_RTqba<*GDT&+ z`72Zh9DVUB2w&gwko3m|(L3-=JLx^bG4bwtLBtH_NIH<5Tol3?`s9OlCyvJGpF6a- zXdu*PY+-S4&7BEug4VDF-M$SJFAYQ(7@!N1r2=voV?7jL0|n;{1zDGs`pT3LOFA5S zy55(Z&S;oJx9iOvpa4{nOy0RW*LfRw5)Me)MKod9$u z2HAj9soe$Gs_U!0C9i#IbxVhV7H5#l99<3;!^-3M<&`}!K|JWwEm!Ehl4O}uVYg3w zyv3XQCCj9|XIDO)b{p;EEq=pG+zs5(XDRI60xZ;-+QA$Pil9>e* z{v_86rbxg-r!t_-%C^Rug{f(I{R3&fhM%~m$!#|2Hf4I6mwe7CgGTV0oxSJSWw7NE zQ*5NFE~OW>XrxW1(==si;uwc)#C8tWy?MB2NR$+MHAV9R`nnTp;SaT0Ac_wYZzNbs z^VG`sa}^?8SpXHECtOL3DU`Q6IPlSK=Ls6T>JKswe#M48qkgYpgZi@Re^tf_xZ?4o zJ|5FcLA>=EcJ3zr$dA2^@{rGW`TNSuGaeWK;a!;kjl1IWar4ld`3G-{o{Cxd`!AiV|vi7fb(}*-swb zyx^PJU$Zm*@6XHtm+PMp3H=u;WdB3O?Vl$B^-=BwN(6zsF_&QV<3@%uMcJ*A}uH;q2XsV9kW@lA{|VN7(|7(DRHmqhHrlmq8jd@NR;kI`C&?)t1K*ncK@v&!` z38=?I34t>~$=Ueiw&DabFA=?6Rl&E)hf-k5_X4-B=mX^K!yS*1!D&LbaBj;LzgN#X zth5~KEY>S6sk^SRTg=-Wyarn%&j;1pB3lS7gNxP)&$l4;@w{U!KPYR`z-X63yI+VY zZH&KWCa^~H{HMrwEI=76Gb8o(DZ~L!k;4t`^LWGD_LdIFFd`Cgc8sWC84 zY?L1#tfb5y!j&<_Iz#~CG}FRzzipMEz^KWS%G?-RNM+8<-ly*+hZ^bfk71Fd{Yct-SgcIkx37ikJES}ftHprMSaxIsvhjUlFJjmL4*>sIH{V?jxnS_(6Z70i{a;ob?WoG`5h;VSL(m69Wb=RgKUB?LX}g{ zAlPyrLv>FmF_d-LLcNOd)k7w8d~&p8OD6CmdYxz+yJ21V?1k6sn)gSy4Qv=a{#)76 zz=gYwW9kGQC^8?fblu}9sN{LE07p~)092089XDEbi5?p(b*|X7`3k zty#0?*vn?E7~E@YJse??@F6?Fd2z%^H=Qh>3D6Yk^a8hjUOpiJdeBRXByNQ=IC&?^ z8FEejm?a$&OM$wkfgKjxa$3r$&vkP0m`ONWZt-A8x@&UGm%42cmk}T5&DmNJ?1U^X zvvQ@R)L6iJQX$zp7EfDR#6dtGBJ`9jd0>6vwN1@2!m-Q;exAwNs=)^ZRGu__wWcQ}+gItGMbpIjQDj zh9Zs3%aGEkj3qSwJgUi!XV6NEYyMw>>Bp0|*C9mwUJ-_oz)r)gF zH+OdJIvah*PMk$?m6x5pPJDO_`w(=9neLR1FpkP7nyb%uA0{ppk|hQTEARnj9fPqi zjP&`3zROv+7_T(!IBRSkq8oVGc`tnCB}IF*pL?c#-4;2Yt~#pZNF&N)JQ}vZpB?M0 z$MWL`aL5wfRJW)HHcbZpq*Yz9?RjpYipsZ(6T9ymJc(I2L2VG%h7 z{-|Z7GDF5<5H3AW@ejDUF8-+S@1MK?V%4qSe$)x;hZwT+(NM-P+{-l9g%Ttzbf zoKM6VliaD|t_S8lR__9p*6)=i7 zLvaDM1VEHGVb@6zybU$$wg=Wc{ZDN}KMD4etOkF=22xoF(vZj|2~NK)WU3M@1rKwD z`sK+bI{o7j24nokjowo@zE@rFeeLw%ThTf#J@R#rKD~5#7>x@4TdLmX|M2keUvyyk zzu(S-**;(AjWmPlwYl#Uz7NW|_|}mrIi|Umn(;H!mTwFCn9ydnL{%)dBzA_1odr)Q z-{qE(YF>xwiO7-Ln#DWDFmt#ZA&mGc5I2m?4$6@zn#z_&KK+3ikS;{YR3-Zh1f-}U zsVTMvq1|%%k@#@HwF#RQIPr&yjQ8R+rkOYt9 z6L;8QB+(%W=x^oVY3Lu1ZD=ksKWku^Y4~L}!6sWH zV9TPbS+_!$j9LY{OJfC5J$3EJe+i*v`Xze^s08D@x4>yIaDN)JwDD-+ICB zoew)v7>av6yk$f3zGwa`-pg0Z?Ltml$q}*zK#lf_BUbpz>UFzL)N_m--$2k1bm!k) zT*L_pINCI3pzC-hZ!A2!zo4^wR_W%RZ=I)4ot#vBx#*f~Ef`@uAZK98R@!r_Q+hRY zYs$<-Fa5=NJM^R5j9S*00~7EYpThb5XSJfgJo0bXiaZWWo$=hfpvsT*)s4fr(Q8Ml z(6be;%XQ)2EG8eLw@OardUh0*cYK_5;2kS@n>=P3>gKWO;{6qe-)9`3r#yv)^w{N= zh~B|l^aZBjW5zfI!hT=Vm?K4b*x|W|cblTM6nshkMzpI&?orwXJJ;XzxwEBEaST-G z+5#4cI1xmamEa<$B3XtnF5iqH=X#}-w6+_Lj$M35Pj$Tiz<0Ik!K=^bOPzw00;KSY1;)W+v&y4@=?a&~Ycr@PcHW=$M5Y6RU0vl(qpx z&eBC>1mT`bwm{Lnj^q{h0in!uOg2-Md_mSvD!RlZU+fB(e1SV(Fl2X|EozXn2jG$> zs`uU;I}YVZ)xdXP!?6X_YD+}5>b1K$-%?=*9mw#0 zQ9-&p;BC`^VuF$@nE-Bph1CK_!g|OhQ?idPlm|4kUWH|y_#@+0CUc^kjGmF?r`jHm z-idWST2?(weEhcfjYlRtuI#k~eO#0XF6J4JIZ7N-v9^~T&Ri(dBA7#%N1o}hmr$^9 zUb-c+imF$1#~B#f*;&<98{9%3etD-N@mA!*kXA60qQyp}vYkdDY9c?n09%=>p(N_y zRizLOz8Fzfc6W7v+CpJPrt7*AosL=i-?pI#C`d#>0ouo>NIS+VI^^J>XdUF1OHgA7 z)@45$cA!Q~ha9Xq(}F6bTR-zu0T$wEl`5y3?LsX00ovBaMQ;}k=+H}FEOUi{xFb~H~!);8qE_plq_^wU->01|eSOpiYoyW5l zX+z$oJKE;EzY6sl5JlC12ON@cO#s({5*uso(vO z|Ag0T8jg?|(JIk}8Gzk;GgVR0+*9kbGom@w$4BG~+VOgt9xKzr-(AU{h>@FwwbMk7 z0=LmL&OyP<^-*JQy?ud_sh96q(<=|I+-+lizR333fFoYTr*idZxUJIjl|lY%|E`9b zhu!{T4Q0UG&BouO)||t-mz`#)*@iDS4cJpBi7KGx z!|eqxL%?#ZC0kL;K?|Su2ppFf2tj`0Ke+4;D%?bBHcKqQ!i<8da5?QAXZJCe6P9m` z=~;MdzCUjL{6CPP4D!$W4Oai|kNR)=UjAn$U%5Yv7XG`P;ot5O|D|95OOz4N=RyCa z&!hIE&%{gk&n0D(u5hcKm#l_}HscHiZ!l6nMJpoPvN+(4YSU#c>2h z*VNe`Ff!*MIPK;9fZYHN^QXr%fAZ{KFZ*k3|1X+gxq}UmE=}^FA&NQroL~d^Sv)6D z*oS+IPmsR2LZHTp@ICWgZXmsc+^*ewgeo?ZtVgP`in>j!R9oAa`M@`&<%M5Pvq9FI zR^!<2V@>9PdT;Q&c-soqOJ`SUe-5mY3u^r<+3TO_(Ec~AkpIgz>VK@z|L0ar!Z<>* zwv)4sR`MeC95@jk%lejra3fLixH8qxZy$Hms;4_8NEuB{wgD4tEsUY{#7jc`y+;a< zH$NApB(NQPu2W!hxhwKGYwv7N6fLN8s*V{8SOuU8fsuG&$i=-ZM~1zoNPgAlw+M=zE0nLWr`)<4AL}R8pe8T z1LAFF1P8)|nD!dpC5rfvtbw=~iq7hEK08E23Z^5Y@-~*Vi(>JHe31WQ`W5q8`?jB6 zs@%Byzct;=$8oJI$qJH(wk93ZT&Tj2ZD(;@Doqr=xqGtm50*9uM@+AQ}| zfcq!Tn%@=xM>Jr2`k(SaT?$T+iBQF9fxKi*4sS4ON==*xb7&;0L*(Pl<9S&VW0&(U zG>y5&oaqXwRoZ*o`tVWtcYk3T{mH5A8#r%YCYXUkNbFxIf_xrH=GZ9TcoJ-XfA*(C z{n`BOuZ)a8+0&8#Yh1{PPY~ z_k0|iL&a$tso0+uP1pgsqMj({zLu3vW&axZrZ;zPZCH8v&mMI@E(xfo|NJ(8;!*e4 zeeoai<-3jyear~?*{}i-?sfE3c$*+X_{(Tonn&W zn=>?HN}E5{A+YjUr_|1amGsrZ1isF*fTmgn?ZRC-!LcD@XQX)|c^^3*G0YOVApOSLYXJsG`_l6<#$@ zGO}uf>pe}aF)%IH=U^4>+(I(Dh8wt>d-rEK(2rZKF8~C2{F|gtldG3}nBXQQ?9r%F z=8|4x_#O)U=tskvn;Pjl+&I0mSKSz|#{iE>{NxDTa_n|;MC;IxIh9uW%qDjNA3B2} zI9@*C6fkBdd6 zlk>*z90TD~_TiHK(h^`V!4vgB0RqEGG|SM!PN;3&;-80_4P*rZ~ zqkaYH0;Y44gO#ksaN;w#<2QS>QYy_fQ%KU3z-=WV^>=PNE#ch`P0G4T%DuZvcDD=P z$@ON1BekKO6|W%MDu-5PZ2FjansfP*zL$dWcD|&W74ND5OC|ZklGRgsd3kaHCx49e z|K=l*$#>(B)&M89Q_zDf{8r8j`o$M``;!HYSCpBp*jl%(j%etRi?Ja2hS-%_rT}T7 zA|xIHuj=%9g0z|UC|HY8#*ul9|m88qG#LrywsGi*mL(%XZ3mVR% z?7X5`C^ynPD5+W`(`%tCa13lK+nB?~UU`~5w%-^@cP8aQgLawhOFBZxtU*DW!Suf| zZD()SEHQNvux(gVD>cPj&==z?&*kQQ0h1ElfM8Lv|K>x7;im+fD5qNR|e(n1_l8qh1%3h~7- zy?2z2Po23)d-@{b-Ve1d68E<>?`ccMK|b8okNRq9j_ z4AAx5>rj!=Tn(?PfP@~97^FgJx8D(1!W=jB<^g|4TOXfK$)X8s@uy079wOcWMP|&C zeV`OQ$fs;hrj*O+b`M-f9svA-91pN$j8+Ml<#o>p z2ZWK)NCcjIxY6+xivjm^*yeCol5DD?>nJ^f+F`p3E;g5OKf)*B6I{hvS6;tDyjl26 zRRaVM;Bz<)ie63l&^it&n!2gcrJ3&Wbfm51Y%IDt-?i9ww#&(BuSR7v#gMnXM)yRW zv}2xl9uE~+B2SheOk%0-4oBWT?s`(|*D2mLX7EHa!t^8YF2)M7=a82TsdQXP;Yb&k z*Bn2WaxJ-o;IrQ^{qQv?dHW3z)@d^BoGy`#E(Ot!@BEWHH~~a&kheGu=r&12(+m&2tC!zmhon z@M~nsY{@33AOeq(t%e|3x$FZ?RxbnGqu|kr?{bGv4~9#&yW-%U{XWlYxXU;2;RT^2r5>9fCTMDb@RZRB zOnh6@(*#DjOq!7Dp#U7@w8lrCuuoQ;>^*+YJIiX z*eGty&OgH8VfBf7<&t*})C`2d#^N0T7TZB|U`49K+uLV{OcdKYanln#IpUpp0vNyDtM`YS?$R5=5eLXp7*K7N5`7WE zNvZ1fLU7($^c6_kpSNn8swmNw&;zikC^~Z|d3I2=x1Q`u5mb_E#?lyD8$i zs<`PAC&wh zOa#W!zsqG|;E8CK#RpGzq)Zi$t3WOX0XIR5$xk5PkHJ3K9bc`L@5N1)T4c@tEwWkJ z>wV9nMwuGq$+i}Z#b)D4=%R&tU7mDUdw8z~dca-p_d?6$x_(;T&h|8+ddEXxy?Xq4 z!jhQ^Fuwi>Wp~nQ`sGwjWi?eDiWT6WNuQD~vZJxUN->T3vY`^QY&cz21{fDcJ14a zANESVEhv7>)FW!idV+ugO|YjS5@^$7d8erHhV(_fUk8Qeknh=;-8o6(T^L{Kv;J8U z9hAC6S1Bju8M~nsCOArgHkZzfTKhjk;}puHQ>+D3GHox|TCnhlfg`!r^;h^8eC>ia zzRfWAB-ab*3m6Lgkv!|vSzKoFwQ$#4_3Kv*F~{sbV1Z-i6IzEonW+4Yu|~iSzkrR= zRKlnXv52O?hfn(&t9-voO7__g$umoRp04kkT;X=<1MkD+PQ8?J$g7&N#s~xHqxeQ3 z{7TPCc<`BND1D{B&$?3X-mH#}Ko4pla8>N#S|^@`E$ExzDSjBhO#6J8H`7`v?64}a zw&8u3yYhs3L*gbr;sFxbTWdy<9p}>8C>&U9Nf%|czq$Ss&GU9J+hkGC$0JRFK}qek zH772nPLN=-CQY*+?za^{I5P4WYOZu%PUZ&O@=HTDR5kbwpjMpO%dy)!Fi~f-J#Qq_p_0~)4` z?{eMQvhb&!HOlYzewQ9rU=yFOBVYcE$3mr`db3dzIHU%cp3ek;9C;#c z6(fuq&+L5*G{-8U^WfKb<1@J@JiPNs<#Zt?jDFa!*;j<4Ny$|XcJIULzsj)p`$s2D zkUJY2<-Zo%_p1E;?Div7`eLWO*t3Z!F>4Qu`RgZsjmN)T{r>6sQBp#xLaiLZuAW9M zYai(_U_}?&x{npD)HVMq>vmCR4)-OlI;Tw#^!?5{hOGt-gG|}7RxYA5MKp^e_b4<^ zQ^RB%Y0aZAUL+k7u1!%njlgL(7#s59d-h<&=|wXEk~Nt!g_Tg4;QCp7uqXm_cuV(Mn8#gjH_DIM{|p~qF4``ABrz8sC3eDATLg1Z{J=t# z5&3>)ff7dt1$;dkw&wO#BI?=^ap^JD(X*bHbaUOOpet(rJrW^wqSXZ_Qi~5UW z{e^2lo|%?FXCNDqoEpxc_&(D({<+8g{iKrPyWQ~Eaqa=a1qKVW3lQaidE^L=iXv=` zh52Lr13R}#WL@qVtKcgzR^4qyP#;x+m5wFRW*6f4DdLT1hBSYBLphREEz^Ddu2fL{ z@_b2D6(KVkKy0vRwv&5N{A>9WRoYjpP|)J7veQIN~5uvw=mD+s%D@*_29 zkyF8EBsn5C0@)64-z!t2bH zUSQWHHk^vLJcu&cE_=O2X}3a$YvN8>K`L@P=Q5+|{#=}jtN{sc z)jj7}GgH!xk70}TKP88cYfD)TS(nQ+ z1fNWsq>s4za!M(@#oQJ?LdF^Y{Wib3NznZS(*iK^<@- zb^Jyt{XD}xJgD~yXqiyGU{78xvEs6CrRz2^wtA)(Q-tPw1w9WysW%?}h@Om6u;QS# zZgqN^ES2St1?ot<>npFa@M6{O}cWr@W9g_oHji1u8qVOTvZ>*?wWc|2LC={k5}iEuz+TOi$j z+%&>sOBSTRA7BD;CUxj$Z}OP;Ht(jM^-S{3Bl5kwUyz{_48>rBAht{qw@ON>O0-BF zCABvOI#e(}00c@6MGOiXa5I_*p#k0r=nbJahS^Gm>>GJ{u`+#kXG0d#jlZUbMLG}F zdiNp}vg`Ysy)cvQPn&*>dh_0k}w*q}AJ*p^oY6q38S4oC+NTb2r21R0HP+QVd z(}GY+PwJ|(TOCOw+BXMSP1-p>6${Pt!(KG4kui|rABO%oD+~vGw8yF0X|=$=dyX; z8+>&t3D!Dga<$tCwQ3Ahn|%_H7SLj;;A)WBh4K{?B|NW+y&Bfrz~2kIF=c?Oq=BPT z3!}{YX=m0_ILKdD+5jJv1zlbrZ=@_9L{#8bbwfFJEZs)GK;tx}ZvH3&lxl_T2f!(E zS5`IDI5YqCm~0-jc>GYyDJ07<@bd`=<({<{e##0lQ5*~lF}ZP!tj zq~1t}0^(98=u5gD}~Pi6U-;z?p6FWEWm#4_LutlX<`jBJZgOTfxFO=S;MJFk+b#dTk2K z4UB#A18(t~1?g5(R~5Pwbci$1c(1|@hMt$mff{46hJ#S@Oua;`33%o%nxUC6r$3`t z-vcH|4h|s1Spgqe8Fb{;GxwlVBI=`AW;<=N-CC#Z{=mw_Kqb-(@+Wn|O;?3%IU=|l z%65YLqaOk%%|(Sm>#!`yR*2}u-5|L)EbZvVllBRd(~}MTOILN)kqY2fE%t5MMz2YF zI2#R$|G3|k5DwG>FF1%?^~pwroep~)P1C>JFi&0)sDBB>}P#Db(Odt+RMSt z!-pMjnSw2c0<2mjd&JY`^(Z?~SJ7|){ZDn&L7;JfMETG-H;x<$PWq_% z`K3a~D&kJo)N;%!!`yyHkCKDr7qvM(UbGoa?3`txPt69!(L}VNUi^|7nXq|uSW+y# z%e*)qO?g?(3=!5+uzy;e3HS4tp_J?Ole{#6@pmSGed(FE`vssE^Q0k==?l}}zL8LZfK8_fd zru!w;Npe3kJ;~P<#8wc(uIU1Hp~5S6Yy^bPgPCaL$|%fqb~q(*a1#-kle2#~TKjH7 zYqt>IOsbRnLH7^#S!PZuLo&7!8&Spllz8|XGgOs=oMe+AZ!m)3BJx1Jf>o~ziYO3$ zfRk?q2VQuG?;}5rnIw>Qt(`ZM^B$ydR8%vU6l%ECIIoE30fHH23C!I{zq$@vdm-%@Qzg7{gQ%QAPE-J>NW%Q%qA% zzeK+nYV$pK!KM;h3S64GNqkLQhifsWpl(B=%^P+{ov2wD5C$9xGAj1cfky~Jx48hi74QxfD)RDz6q1V1e2oR2m1xM2%N;k(FkCa#Jbd2J~BMf)($TL3i zy_)TUU{U@99*wWUrLKTb`^hJvfL`p*L#>hvGwhNQR@0f8q2h!>IhCcv=8AP4>0vot zSkIt~Z`r=VJ`1l2Yd0pEn+KB(_imWz#{<*Cm$;f(atA_WD+q`w+Cb-DwM858FH2*9 zyWh2|rD@+L;L=gj&~LU;eX}(|a-via0-YjRvqlsEvBgJaEoS5x#!`ZjP`R622^sVz zPFA!v1)>o*>E?lkNDS}In>XO}+-w^SdlA8q{TVcVv?@TRP89>q<(IdTO+fPI2>_3% z%%40)efEQ352&jj0WN}(s!_^e65TvNlm_l(e|l&R(4%K@KY5j3ul#GA|GzXhsEXiN zl|U-fL0v*bfYtWMI5}Ml99G|x!b^~)U>S-;Zfx=E-q&0q5;~pfs>*SyT^qd-Hlm#{ z?}KIT)S(}Aw9wb2kK33YIG`op4DMCC`X6k(pD_QOK+6>+pF?J7j-)O>+%}Yd#>r#+ zH@kj|ub+ay%gK2?0zMXApw3-0R#Qb0*u}|e9<@~~!Bt5XEwB~sZlWpEegQVp4owz&F9y26 z+NpGnXCA5kd1=}FJH34v_2gHd6V-p0+^fMpfBHxvl;nwRR})=_TDdC^4IXK;So3@s zra;ihZpY(Jv;5H7Z(05jVpHoC#KzUm)*275It|V3BTjyj_R}8*x=@Y@XcY)00=ROa zpx!9|*gBE3GI&mBL}iqk4(PJAZycUU4nqPClrR)(eBoi_Lz8~5)& z+kYYnPEi*Rp_E9jj;K{5b0O)ukG$B5^m$K)ubJAwX{EH3>Y#1MtF-*Kz_0Apj9@(c zDV}|O_xPV3?tfx>&&c}WjRI!z|K4U_e;9}i`Z-+XR zasx!&&AbwtM(1fmMMABvrAKn}9rQ%k9_a2CYf!f5Y$Q%#b{y%gd1ya$aqYax@t5x#Q_3{kHQOvE~F{0QS2&>{dUyr+Qjhu zfnAc?jT2$B>8|dC3K)9<#bK%wx|sg)WCX6DLF+ucomq!EGCdnBR+d$p4a5qty)zXG z(I5%hm>nZifykKFD^uS#HlsLeWlhcFRv%hV91~j*LkbgNg@Gh@(;b0{@Pyg)i*g~g zLIn{UG8aVF%teMvP6%x|qA;$VZtJvusR`Jh*0r%tClBFt$^zoiJ1F0TXv9Y1m}yeZ zk+x=TWTZbXN`Vt>=WF{$xYo>7wJX)rN!uy==Igq(0Z6P~U7%L7B~-0a#)){>rc)@Y=!lNM+8B+dh z<^*>_xN*+>SP{r_!a$ofC{?-w#4Y++4pxPr)@-5gE>n9Y_PgzQ%^|LTuzisHX)(gY zU{B!HS~0y!@BX$B8~HCmHGFTuy9(wi1Bu5|ytu4bb1j3BWJhZqGY-b{4fDClV5yC_ zgAxxU@7CVDd$H*h)kOOEyPWquKine88liQ0w{LkmU`$nxN6lG>Uu@xDS)Acz9A495 zF}pF*w0%H9f5RZtY1!<45l#S{Pi|sgjlZ`G1{|LFjBQ>w*nMP@T z_U6Dfb=TiYd6L9G9;QVW1Modh6p!17pjrBJ(=^ ztm$~0T5HKj19Bm;IZ<*!nu*+nUs~v1_*JGbqI&60iceQyxv57Ed?N0VeXX zwo!@uH7c(j#4Zej6}vBJ1@E$lu>ndFTL2?6i@*R*L!_A@nYR*G{v-r*HeSucwRzer z%}jd$-A~>D;+m~lI~LB0XHGMVaw_!4LuoLjP0)?rxAX^+mb9Pb#!*``7mj zl2Qhiq5=wbPa=;L2^z}D;iz>eH(0y&dzl7sGvviBu%ba>{&jYr=0@F)b zi`P2?+A@gf?GWZHE4(k@v`O2RoMD>j4xMrv06%6mi)^q+?D*aV8>oj1q(uys5#~G# z58=-JLRzH7Supb>i)krA-J;m1Rv{WG?FNkIZC3+bM{iq2ehr*$Zn3XnY=o?YSWz-W z5}VZv*Sx2tN_teK8QQF|CrrVpsy|;8>7C>G>ghr@Vl9=jqh&@u++&VG&K>>G;jm?90f&(gVi;OVP&l$V9OHb6E{= zlqr5CK8;^ISr%M~cvKVf%M%Glt`t8Ff-n%Sr+Fi?Dd*yJtGst32s)HHG zzOoAx1#;9{3f@ktNS#8tjwFOE_4m`F zBJo*?Ep$Sxhz|os1uC0aJ@^}oD<_Wa;1XHrH&Sps~$sy6Q_WP|NXuLrRdt=5G;(R#_Y(bxsziCS$+;L0oi<3(3H?bm3*sXa%l zQ?zpfsA__m(Nn#on?&_C9&{E|i3)^GtfDuM;-(u`d@~~iM5|xDzYt50=53$oJ?OH% zW`I$alqxFOyx=24nXt6gLW7IrgN%vhlTh5V&MmQMdaGZES=+hw=mb=P$QDl?Cj~G` zk_nC65&<*JkGjNI?BNiSo+f=3sGD)^cXFNBuJRsW^oi=dzwB8=5R27;?RE{Z4JJA{ z%A8&zNDEo?=Ooh~j@VXzUyb~$-`n4pwV@V}H~@nMh&^oOkz8rCUL|J5u=579D4N*% z>!SXw;%cmZP+_?7Kl^n5+2tF%_rL5_ z)xT*PNS{uRcaW=LD{3kmuD=9tUXSCgP?>Wad$WW&ceK@T`THYc56Ts=}-e9pZL+74?R8La7Ls9xO^UPF1>!4I8M> z-T&Uf>L*IKpT)!eN00qes<^*6L@l@jy%OZ^fp~%jXF+6)-?wSX3Mjq$ocW1Y36#3G zw1gE`ttaNl7>93{jUd0e_1@>L;??}VMt{qUDf+nv=_+%DOxYc_Sh6w)ax0%Z2QYQ_ zZx>#_Dqd*qr74v;5u;`A`KRetz1=ER4m~%3`qw*c8X*4T&OjuXiocoY!BTRpyF76a z({;PEs{sZp(--NMEZe-`dJD-7w!o92U&P9{KxEZE{|Yu_!JX_zGKgS50RnD!IWtjo z%IFyyTNjgZ;lL<=3_RbuIrc72-c*&Hc5;{{L@{b(-M|K@A=REeBMDuZ=n>TwL5}FYA`` zMOuVkIl{kgOyXEg3P^7{41D(HGv#5MopBIVW`YfaY0`K%$`2&=FTo|1FWQ zwfdfygeiUjou$khLJE)=9>K^O4}k{(u)?hq^d+mG>YPgiggV1O&zJ&s6~OEH$HO4e`Hv^FBS5z4ub=&E5KjGN z31BY$Z4iQi%CLj%Ah|1YH*y{}eQls5Zp>IOF3A_VZ=R~g+rEO8bb+nJb)8}g0#xzkT2;YwnisE zMizdbPZd?01sKg5*tR@MIb3whU|;Du2%?w-o?E{3o>G#geD6O3Jr(1A7s{{gN}#>z zlYV)>Kz0rnL<0gOno=fWQqyBu=%i1P>eCy% zX$cJjN>a;HMmNiiSUzA!GawoEY*3s7N?Flc2!7D~5*Y@dS`mX^6%xRL{tw4Y=hGfu zA|#WL$VdrDu-<1>0^))V=Fpr5;~x)ko&tRHzsyg6+lC_c1MSUC9Kcp){EZ8=ZGZ7M zTok-fAY*>}$4WX*+A@V;`N{wT&KYOFt~mJMFDFutkJ-ue~x= z&#_y2aI`+qQ!f3lLyP*4fH-;kpGA$|2-^M^v^xJQ+MR#(IZZ0=21-0|5>Vo~Oqd=M z>CAu64o5)hbmM*mydSUp*Ub5ga9sGJe;UqwgVF!Ygh6p=ZxS>ai|xz?KYkUg7j6FJ z?SIdz`?v63Q!q;?ov7+2U`8^u87>_*W}emC?z9ALndYkuzr5uVK6qP?F+Fd%1*_)NDs_&~=Zqp;t4Qel|773hWz)R#I?@OGG!c(5?Cs&!_iQ z-)_jaM>?f@s2E9To3)guL%qh`&iJ`}b7*)`THnhL=9?*#W@DnpQjK31&IK4|Y*1`| zl5c?+N{<35kT~Y?$V#?R@rPoyWlbw}>e7u4y9|dKC2|M$nERVJjIZHiHhA5j=vy^~ z2K{#qBsX&1M4W-HJcF%$w#O2V&oPJ+q^lYxO6DCNCH$h{U`R^*ku3L$-l8uJ^ieE& z$Ql$Vjadmu@qm*#Kk77WxIg>3^zu`x-=WsPZ2^*3R2EO_ojUzL`{%5wUgxnz_t9qW zI>N{GQ5Zj4tUvpGHe*E~kOLi2#g6gvq1JTpDhlX_GChi>z}7 zK({M{xp$J#X((y^@Kxa~vzse2i4wtD#gD0efJ(*SauyO!GYQato{5q87uU?D*iKbS zUonb4o!W9G0UgH91cpSoOb~wMMbbAQx1~R!jq}{7>CXIV5UuPiYqzOyb!a}`$&P&1 z9kXmI5!WdseV&rOC3q6Pecum!zfFf5ZQYq`&DWFdEN!>m+T-wveByCrmh0Wc)i-e; zjY&P{r7sm4kWwksjW%G4)o$Qy;2mAO9Y`p9VHwQ7DkCc0MbovIbp@x_Oq|z}hKSS| zJ;ZRaw(^8Qc}^}{$u<9~8S4mmJR*QL2#muE==P8l6eJ>5lAKUcTF#|Nm z%Kc)YqTR73@l>>B;AG8^-W44MNdw5XGX?vjs`5ya~2p4;!U+MfyxqG*ocLMdUCqy1LW zwQf7btVvR^>D10m7bOXGvl{gV^|&`RVZup1b(PHnT1P2{9DHfC8U){>R>mLE_Y+1r4ioi@UkNV>3$M_1QueK%M_6Z zu+?sO;zn`)G9t_cGNxeGH7+K&6$gU##kOHqX8|tA=@|Fy8KC-Z(DbI%ZA0 z16KjF18pUUk7A<;g`jvCqbhT38+--7ixiSpo9uE<^Nqr#RmMcNtktc5QFuIq)*8J4NnV=z3!@Zw_rw4-PZw@_LonJ!a|JrAL%7 zv4qJsEZH4Nh1sUG1?^A~PWwrrU#eNnVZ`%ThDum0$I^uK?d9VR-92BpZimvHko#&s z0*|xzF+oKnPiF#V?T_)J+#gYLh3ywC$?@F2ukqdDd=;)16j_vZTQ( zJvZbRFqxKsSjSLuPRy-oi2Y2eo_D_9`gv1s{&d>M{O1$KB~D2c$~mzzWvLHc&H^2O zpg059$Gsv`L3H6TXM_wF3i{be@QR<1BTs4e=xgzwB-mW)#QIQFaoE+btgqzy_}j1; z<2F&;m?1yJ=*3(DC&eh?y^}ZG0-eTm4sI_7Z2yF+d6P(&?(Ilirq9dg41b~jjvhX7 zQkX)@u;bo1kv0}V0zEo|4Gar(LVi-|8QRJeA7w@nz9V=c=#ReV&l+qM&(v|e1+A&> zd0ZwXz&ukwz2-b)Lp{Z~JmITC&<{o#ULNFm?spZYwNMGO8v2e(te&sS%Xjk?)k^DP ze_4M!L|*W8)mMe~kWlEhgliFbmk=anTU|%a?~+HMX5g_Gg6&lhB*sSP(OiX;8$VKk z%1(1ozIyj?XvH{laq**Jyju#>C()K=aiRe;VUFWitM$xL6Dw>bkC3$@ax}A;Q%#8D ziz8$n<>EfN>U-JRXP^X|zM-^*<|G&zd~f#L@Fo7|=|d#SnvzbVfKP9}D!`*Cc^tG9 zRw3KrsA>WRr|cip zL6`#VN`I4H@5;x;t+KU3iXubZPa9qH-kP_31nLeg?Z%pCoaiqra~wCE0ELnF@jAMO{>2O6sz7ujI+Oz_d5~F|A4B zdeAK`y$70l$jXFs{3{%N9QpAV`f9j@`E=Oj!;P2Ml2%_2qt0|wWgN>eWurJlRt)aV zlyUh@Re4UAsc_7-im%S`gKjVjKXrYJchqU?ULZU3ORvvV5Rb82AK!Rmo%0#z>jHfo zA2&+eYQ$PL>5!0pTLWq!ea`OsH&(ZJ9FZQUx495T8RAnTb*cUFdAYk6jb)_xJ|6n5 zj#6yb&~PVrEKfA$b$yLjS^DBRqg|`@W^({}AtUATN_FysgM zKQSDfO`ddpLmHoV9N-!#kKYMg@MYTB)*B{Nzl@IxdDe|Y?ksD&@Jaq`*nWpeX~|cG z=ZW6RNQbG^47|@p^54;AJ{j8(==ts(AD5YX!3i7f%*|T3-}$g*fhP?x`WqD6p5*TL ztm`5~75nMx?{seab;5?Y(RWeprvRrwXec!(biZGn3n2Eot%>TQx~qw5W5H zD5PG>+-&Ki7x*>6zXbA4bOzkzzr{s&Y- zTK*;AUtMx++l7GlW}FB==qFPS5vLT^l+1Dki0wq;s=2W6>eqlV#czVHM%w?6*pWsoV)4i6@D)7Bz97t!ONoL)hj|B7?bu2E+DG; zgV-t1x%|(j0slujar~dgXyiZD9{;CU0;tRRlL!q&p<+kQ-0qaowr_C&DC3*=Edgab z|DfKLe;Mq^%y~*p49Azzl}uUYXRxSHoJzZR@9eRcpsOe$V0@mtn2B>0W%(~(# zV8^LJoHJijL|-G1q^lr>+?P?;ZLrr2lv(hyf?&x=)875&*rLyF^oiL-#}EA3LzB>8 zx&p02dO#M2#EErlIYp!@DMsUL2YwThk&4e0M~n-125e4QUufiFQ}Y|tX1`fNC{1YH zlJA+DzuJ$m8gGSm^0n}*zl5elXSL8(zjQ5n9MebJf!BYT>hy|G#4g+t|4!&yZScVCRpc2MKyeZG-? zGR`WV)1WOPj9wL&O0Itx4N^0ZZ4r~>09#Ivlb!EOo=(^N@v%P8fxY5nmOw*k<%j%mTa~A`(6>K1IPVK5JkIbne#7Uw0W|n|xST(dsYzIKDX~#=tvd zVRFyWbcJ<5oC=xc`jgy{Ij~!IOEGaccVW{hsUUyMgwh-4?kaV0vK!m+md8ETe$erv zzwAkWSvB0>(`-j!}J}>vBs>VOizZdYyWoXiI zCBs|y^5jom5r+NoRyqbBVshz?95osdcuyXx?*aRP>x42=Ckc0QYZbMP|6d-K{aZR0GYdSDf)M@TKAS0AtsevjUjq7yfoQfeu!x4!abq9gG< zc>`^CY8ybsA_iqv(28^MU9$qMLciX6^8ygH#~pjOf6o?ZsJByo59X!lr5BQqQ*~d@ z+g3x$$G^}qZJVaUG5cfR7QHBrdV9Tx@KZzq-BPwt>^-(X@Z6 z7_s(2kG4(>oVkQoEkSO>M3GW8xfAjr#bj(2r=qPGZJY25yvJ{^xssQ<`MOjLq-3ut zi+2z)MvqA-Xud^*;TtCFyS?QwN0JR9XAI3uURXp}iX^$g3lJylHDmGf9HH*Vi3yw? zCD*l^2zXsrJj(d>BALTl+~@cje+C(u)|e95UJcqKezjllS!-u+T4aDgE(rjg8>ys1 zM}Ib-@%gJlX8k6}MC`D8xy(?U$1WE7?wq)YtqRHqx5st^VN|80d^%H3|YCUC|{kn17m30;`ScR{3qT<;Kw2Sha$3}z@gY_FJINsC6$lIx zL?UF_2F1x)iGln+&PhrI^i{S`PssMc{q4W^Y-*ojuC7I_d2sx+bfoK4jhFfP&dizbxL_NV}|DStvu zdun=0q*oDqt}x(qnB)z%CiqHSq0O)oSer75H{&GXYEaq+KU?@PL2;NByFVlj>ZG$(_Uy zdM2z*Mk>J!6d)Dik!tPvzHQo7`i4IhG_NT|u41E}r;H^-KHHk=HjNu`*6&W_%hw&z z`t^~##nRC@n5+r)rl6Z)j?7&CU58L9;v5YFccEdQ4@1k5HN!n?T0|LdO>Ij{%cNcx zCy9C&VL7w06udc*bT1yqTg$JY8Z;+y$F)(MCs<;t=vz{%wz>GUYiAgOjuOBAB8RF~ zJ&vB(bq*_LV_J9K169A>2VmQpiCD4$!JBynQpc}#eEjJwQ+Y;B3jy+_$8wB;KBQ|& zS!*6IAy^M6b3b%%BBW@ia2gqrtMUM&`(ChZEyd&Zus0>uwd{uTYvA=2YfGnWtcj%t zUQF*!^;@%4(e`@*t?YZqQ>i&^GcqAaHzC5=mso3s6__2j@OQm)hO}l69j8w;$Ug<{ z*#*7AlQEUG6xtTVRgiyWoBwCVRT<$C^LTj{685KU9g*$37`lp*l->qeyDP3Ch|kiSB0NAaPSSh(OK_EWNI3=^GR#X1!B&-t#yU>m0_GL*qpe;6DP?_t=+oq~;0Pv1(Nsd$w7 zYiQI>e4A!bBGIsxHT8S_N(y8C%x$rAHH2Vqgfhke{qt4!HpEcKi!y^(97ii#>i% zERSJz4@|lK0F#1C(Sjsx?S&kld<0tqtZqUFqeNTQK?@Nu7t(fs#q*btXN2py*0E{n zv{jjt4~lNB_TV=qZ$X>s2OOo5)(htM@22~s?M!ii$yLs2UVM+a*q&1jsQatPS0!4( zJ=DvkZk#&fXN+G zsr9gEo#umN7RKwnEWp>kG2>j;ebTdfN`Q9&<^&EdVYqJk39ugqdnFH;y1!wc>*Bt986Jg){4zC4+Ir zoK8i_O{6oQIwgFUB5)5A@`AN zMMEWDe1zPk`13dS45{wjia3RYiyNF;{f&2|-UeXnG2VGF9+Yo>Na; zQ!x*ufx$RkZ--9icXkNdp9(owAWd9=xUHJA+UBE-C~5%cbAivs^I0M0XKD% z`ATU4CQbXun*2w2OVB}74t_xkT)Bd_3*^d8VW<|f5M51ME*`%dp6fw9xZR*!=qKON zV|s`6D#kECpB2y$Z^t#!P+kzNI6Zk?7V%A;e$fvIKui`kA^Fl1Gz;Wzjvv41Vv1O8 zXDiNAkhi1Pb?D{iI>tpYF+jhmYL92K6Lnl&RS<2F>qQ4HoN`n_r| z`I2OFsYa~`a9|Tfv1%*A^YGQ*H&D)p=@-Rx_PqN%IE8CGc{zT1fh0?Fj%zE^Q#pfI zq^ZC&*_D`Rmr+8IL20f}hIUI)PHc#cW79qM&lTL;Yi|5nmXzTo{{*q*gFDNC|A1h% zBd4Lx91%AjZz99P!Bre}`nwLXFZ%~^R`>QW+BqQm?F1Z_K>5Rc3ry5Svv&b;f5=am z`zxIXvq!&;+mv{g%hQnU5Wg!Hi;juOv9cAte!S?5T~t^rJn{~$w$sH84E;IW6fvuv5ExbF1 zaol=C_=oeCf5LeDztzkC<9Fu?Cp;IAX8eR5R&LPP)`B)N83#5bp_;zWTQNTr6?qKIUk0j zqGZGn;i9xklAywg6e)Nr=0=U@^$hp81_YptmCo8)!mWn!R(IFM4~VX)MP>uz(QBQa z0ByrtfXlT1f-6&%+EDp&UnnVdllk=43*BjcNRPv3BQ-txuXjl^OhU)t;MnyIic{Fy z41KX$lR2D zpZW=wKd6apO5VEVtHN<+&WFKSa^b|a3CO2G?K(-dfy!|bf93-+u@y|yQElyG9hQ$9 z4C`Rr@P3Ma94^|m->R1k1s={&Ny`6cIip0$bi*V61g;?ZPhi;o`l zkDy$sn&h37XYRlW)~~JLreJP!4@q~@8&fwi#Rte;@q?8*Q8BEOc;grBm7ywT zR@=o&hl(*8nD5f*+^X}gCy1Jl0y??T!m{!kIN#tk0eTnfaP%3|0e7X|nK7mG>ikCT<-s{2I% zYs?7f7@k?V04aUsvke=A`&q=)q8)6p{)`bMUzP4Un_>AL7Z%nFv^$`09V3jfw2z6hLowawZ$yj+k%+#ST(RU4a z`n0`Pq6Yb(dJKm8WwBpYEUNsA_|cGUmpRTGWTf_F<<$!}%Je|S82nG#;}{~TC$zA5 z$ZVo$_F6Z=8;1_Ffu>*Nubf|aQ7({7%V4cHU>@1bRxd{Ev{M$k=miX6{250Rmwc-2 z4^JQWEJ<__K{Exln_|%CdtvNV%(9vNY7&AxiOZnr=AGp$(G6rfVE62pY2Tu|Gh2#Y zIfXTy9jw}n3|)zg_JPYZ7C$@OaoyKY#ryyEPpxOfZmZhTSZnx3h-)3 z6Hd>l#kxsLv>$Jg%sWUB-*U|Etk-b>B#N!99FpZ0POHbJJ#P1Hx~V4H#iTf>_ZeFi z4t~x1u1S!#n!bXXMgmL$2FsbdTF+6?wufn371L_Z=cFx7ssghj&|h=*|2K`bej@TV&z z!j1SQv)Yu-%u+D=i?=*q7fCcpx!(BL?3!2btmB zH;eW(_a_p}ExgT*imp2`i$4+1!Q6gsz^X~n5ZMLvm;QMJC&)0Ba%GyXLac0sb}gpZ zJinJ5fnSG2NfXm+ z=?$4f6`Wun=BsyGrj~ix_f&v=Tp2)`N^5AKLMh@5{T*;HRA`F?l&db;QT{e6aeKGU z$ZZdnS4^2~g)(&CBq^4Te^uC~fU-8^4=ACAB>7X$m+goWIC($7qmu!xw(nO3P@TMl zpaAmaj=2yZfhS}So6Z4XG#Xq9)IBe!F961rbR1N8rDI?n=$pFl4zd>b$n5rr$6M}!60!2$zvem zsML!=m2DX42>@xUXQMy~c#TZ)TP04xSA_;})66G--Sl50{g-+C8z&;4ca1-Ji+_U& zdJ>d@<``vFNAu6J9ABpRB4cdz1K9;wyT*s5E8aEYvA)@wvCRGT{DG&Eqor-nZFKLf zCQ7324rqTc4^HpHm~Zk_f}H=Fl>e6Hj}L^|_}{c!z(V@MSpdncyPcbV2F>;w6!g$( zDOeUeO~o8E)j#LU4}aR5@_$l{JvaL&MXdDQU=4lC5g#GxLzNrZ_H-U$IUD1PU(sHi z?ztU?qRy>>HS=nla*wsTA%VRwmY7@y4tpz3qc0p)J2W@)fBn7xso^4P!M0%uHmZ4= zo16`HpuF?GbZaC`u+>@UeAVoNQv-jg>*wy>_q)IFyE>9*Es40<)f!GuS!yZU@1Ept z1qx@)N`UmwnT#0Gfp4;CYa1JL_8^j2U2R~ExI)1p58cl8U?OW$?Q4SR2g^!WZR3Ps zqredLUw9UC-mCN1#G*^EdBe=#Jvd_M5S(A_ZsOcQ^Up%ErQTJXWqC4!za-4|`gV$O zF)Ok$X*TfGP7{MOrqgdh$VQg*$s=(;=b`U0>I7fxl3|zlygXOg!Vh%aA^eJ#=FZ`i zlteeT9&P|7ob@Ph;OBUYegdzF9thr?iZv!4Qi6P$*XZgksOs>`GmKm$e3}xS`Yunr znXr&gJ+)-4t|^s&cfi9f{ILaELg)#hdnbGGQsfH&dBaUip|(tSL9i4nI|m@-97?Rm ziuXm#D{S-F8lAwMVqq)S`9q$p(`Yi^X303N^ARXAHtAD5`2cUA|4%r1m>wIM*N zAS;$Xhk8Ft8S%ie7>ol#hr~L9+J!Vm4Ean&`!qp^X8k*S<)U-K9z#nPH#b}$Q7_U? zG=p!6mah=m%G5`=hiD;)FYMIIs2hPI*qgQ~UU(6&yhPTS$u8GFmE>Yz;UUSh~a zx*La(B7K88yfVu0{$jIofjGZP4Kdsu1!$p-)oLi6-iP3%5eeSb|E$w~`UI)wC9O13 z{;=zW;S?dvnDxqNi^beE;HqTc_`86iDGYD(maT9)ju32XJF)nUXPL|IBPrT7ju%dy zE^IeU{A5(nJtwF0lv2>b+$$YJx4{LmH#og9@bEX^iL?N1m?y=JU1%4dM$?})36(%R zGG-Tz-QQnxjo&2iOeUU33*dzISEOiy_y9%+gZy9*7Uo{&br?CoJ=(m9g%$Eud4ex9 zD{?!#KZR#{XVY%pfUXSlz15Rt3~YXbHtrA*z$PXm{JqdWoXz4;QVgj8s! zUIOdzCyAVEI9)pLeNh~|C-WE02#?O#;8G{QFo!8Ub?%A;#;o0*XuNYXr}tyH-#&TF z4Cy;&d}4mBBaY?3uaUp=9h>~fkNCyz6@-7mji-ygfxNVg^uJrN*fb&P;G6K2MM z^nSAHGy0nV7YlCmjd!g+NeE`AR4;MPH<0m>+V+7@nv zO-6fq>`Gy!8+6s-76b_LF(b#YGRMtH{fCcQBrSGnq+B`9PhEGD|6Q_oI?W$^6st2=IH&7KZh8&ZSDO|BV~sA8HW(ptz(s zNB~L<-}{M~l4U^255skNUQCE#9nwo03SA!s#EH9ZH>yt=a}y}Kqt|h2>GCC`exP>* zEO7bqd-T;P52MC5JL`eBq-{mggY1)Ib50D|rWlT?b2lXtjX(~8yTO7*Kf!?R{8USu z0H=YdC}O+JNuEdW2mBHg#81x5Z^}f7=yJJh^%TN6C{AxoFm7t9S<&5d;sMU_H`FUo zk3NoDcED1$2n^d*7?9^d5@Or0ED#^5)Qg$I58Qaxi7brfC%;3x&rLesU00q#unYkh zVVXTDPa%B2*bi0F6|0GumE@QVd>ieT@W(zJB@|k{J@3nGs6TpHH)bjQG%MN&?|s`O zr9Z+gKV=rlr6@p^e&|x9LAbeC;1@>_rd*j}s3B)2>Pm-%lm)}7l+L19YF4t-Cr9nO z{kP&tSjE{Z3-@K1iZF<2)aWY_qcdO7AzKNFw4PXh1eD{2)jiAGrdKQ~m0SUdUd@Wz zyskCt35K(b^(OU`vdT5}q)l_BGL1IT7@y0GC#<4t%IpgY$gw@P2+%yc4F?}U(sQW& zIJ5qcgihbdPaZ^e>z4kM#_!f0*hO=!{7J2q-wB@7N^C1BL8>VrJyji=9c#_eBoDn9 z(FxCvmRW>6{HoyRLY(a{4U29u!f>Z~54iUCp~@gs5h)aUN6_rDYGJFxQNm*da)!Vx zkf1mWePkQnHJ;2$d^aXi=jjpUp4{|HE2fbo34l!^9Oy0N7v!T ziA!O}I4{lyv+8VDR%aW)y!TI<8z_bOyR{GL7Qq;6Yq}3ASoVOSRa6qO*5jZ zE_}h?`dj5mk35UDTIx-2b(yV{ASZG_XT|T$({ilyd)%RrVAZb*kzOUgC)W4Ht-B%5 zw5T`a@+?=?+?kwxvmiyf4s6s;c&v|0zHEhrSEp0VjKN`~M5@!lB6!);Aa9guP`aqR ztTbgzu}?mZh$iJ((|P=lo~X)xAqnh^;-ee}L6vse@6iyXBD2dL?#jPh>{Y6s_9|Qp z8Je98dBwXs;E=f2Uc>ye5Ge-JEDNc40xqgg@FpuDKeMd7VX1`LZcSR@LkXfmg?k>H zHcAs&LV#8-DxbW`IUWVY)7zPG^UkBXQd=q{*i#@VL$NeMGma$St>QgBdsx@~fSN}4 zUK>Z%cRWjC{E0qwAkPADh2#qh#`uNKvX!rdr8S(+6v=Uz8^`)t04e&Bi?nNeM|)ez z)f#;HE26EXO4x=+j)u#D*tv&ymlw}+?c_Z7C<^>eS{`&3vx5GftTs(hMhdIuJF3%H zIHy#l@+9`$2|6#^?Ndl;h8Nxa9vf)m#FJ;3S)tiuHsC?ucNCwN$6UZf75I(`n4O&3 zQ1|vn6fCZMG1J@2>;-eGm6VkATPnbCq@vmCi7t_ZjlL~Lpl32O`6KK43A19~VyEch zaLef-TdjcZaON)z6c6yQ6N$Jdauu9yHe&-y1r}+ zqL$kr02}jiB!7R|2P|v*bK;$G!}ukA+x65P;;lX{>1)jJPSFQJS??{5<^y>w;UxdN zkKM@GwiasG^V!H#rgV-Qnx z7_*eN`!T(x>m0L}6Af0DeC;axGvsBiO#zSgKRG}i?O?KihIZ@R5pXx^Rf0x2V4t9?}_Ks5~b5M z_ndizm0)x(bBee%n5*-I>t?j=y`ODG!F5hN4PUa(MBGHK{>ip@qUj0z}5SLQ}{efy0Tja8Q7B$XWP_EE%y^Hj9lX|k6^(<>78|lF{Tzs z5-<6x@PT0^Cr_BBa=_4p`vD8oOzP#;ntjLJQ-YipcMJUa5rzyN2&_=b{FZn;Jm=<( zbFSlSf~!PAI(TFBjR78159JBmZELkSMbEQgMwR5q@T^w5ZPz{^7<*Ne_n zGVmv+EtQumj`6;SDt+mSh)8lCNr!iIxOe1Pldr7fqZ*&hzbfo1FKnNNiabZr)Ayo{ zYs%*IehV-mtj#|lj{|v4D2iN~eRZZOOpw=8{?uoi&BRAGKRol(Pyt!vvaA6rBCbxv z(~(vAP5GcNQ47Dx9jzu8W3CK*%lnwXy263D%psSc54@VZowbTbr8bQ(9L&AS_Eq+C zf!^l`q5UG4kjq)f!q`@W5kb|(^48s&b&(G{hgx$n!@@*Us>sg1Y|H&+RqQbN&2_Gf zE?vos_}$L&r0W-5Z-eriT6MwRd5wQ;X}*L9lPLl`LS;Uuuw$$YTRibS2(QK2vak)7 zkPi~rL?|=|^@xw>A@$i2?PN4--uW3+xdQ6F6UvaSD3xqr2=Z&}2uesSxh+V(W72-l zTeTu?FvaLn-B$(Hjcs~r<=s>HWl!!eqoA6YtDrN~wHXqVwUI-hJ(N)e8vV?^5D;vv z%oMPFZ{;9IzjeDlplk34puGRAV3;2Wv-;Joxgs3v-pNl(>amiAjDm%*NK&SpZ0%+wU>=$0_rM zt_!_ALbrqf@MVIgvphk|tdi{?zO~`+r-Ekdp`Y~lf0$R9e?K>!9d|37hyF0F7=M_X z?#3$@G=Vy>znfTuzn_{HK+N|abU!pH@L0gK{v#L6-$X3-|6{ZKKW#z&-(^?A*vdSb zb7@4d=nxPa%99ga{BCR&U%$Tp(@%+9<`_lk(r?rWkIp{~zv&yg5xBb}bk%S8BoMkv zXX*b3z9yPL997)~MRC4~O0CM9mfAUOa28N5d#Ss=PPlX+Po!`_soA+@=1&>l|HDzz z{PTYL{e{)r9wod<)5oAL$4HShr3c7&txn-eyILhyyTwnci<~QEfKoYibvU;=!dDGYN5UQ&GmT!!cfdpbTHy4_+`2W~t z|M&q>wuuSShtd4k7#S{<3y5De|2t>xACH4g^N%P0^{ao4z+WTqw-KB(U^G#^u4dU9V&B2XnO3lqmLyI)U*`u+bXQU2}l4&Xm2d|<( z(CnJ037!1Ct^gC>Wz&6>(Fp4JPsP8PWBN=PP5H~}jpY1#6U?h#=g$}ZK%+@N2UVUU z^u8jCM+iDp=SsQ?0QhPc(Jm5ZfKZ=AN(2%B)BAtu^s22%Gc=jKw$+{xOj#dV=b$vC zuL+8eWf~;OBnv!lGQF}#10bykonIBqURPET;l8bFYRqwUNkuY$-HsTv@a;Q`9`=3E zkP1WHQh$v8dFS^bjx3Y z8b5NRhZ;P44d6;&6)xx9r*`iw>?o=Z5J{sSZ=Ssff7)e4DwHLL1fHJ({Rh`gQ;=Vt zjC4g+H!U8iJ+_UWB#ez+LUw-f;+6F0;=IlqAu!RrW=h@2Z0gqPk;|-YzKTQw;y|EvaDN!UX+JRZhYb{2(q9uCCDK?cgL8(HJawkkgMmx$uu$41)WraPVa-9+Uykx`aQecyG3+z>KvD2KsS`eg7O>+^CCuNRYYuNkhgGt$oqRE-`A2!I!(%+h- z=(1>@t8K*XccniyNJEGD7?!_uFTInz9RHonLHsxqT6|SJ-{r(B974%=(Kx*TRzQ9K z8>aW9u;wnK@n-s5elz)_k_3xnNv)vDaE>1(o^B_8o&{28R}I#P2iTzHKi@#@1?TRQ zp^l9vpc^ye*kt`1%&^pXP)(*WRo$}%cCM!Ap4GvOx(YbmDvrRmddB7WHGY!AyCK?W z!bEK2&7?IHGm}Z)9nY}4wu6l;7tAnZ8djC4T{EGVPwGk&CFjA~!k=fOK|ja-Q@njT z@x=j~jvX3mpIw06)W^H4m*})9VURF6ZaSid*k%gJF*JW*%}d`GH~H1Lv==|$4LB?; z7za7*MBxBoQ$s%r1M%pi%->DMU;z^`FO{vB5OH2tXur0QErHKO3UU}rKKZ!PnrwGF zb-Skdoml4}id9}&P?o4>hO4+UkuV93s)zx>-fpQO+UT)Co`ka%2UpJTVdRkAa|z35 z!Vf6_T4d_S`~1lfld@L2CnS;Z*%7?To?S%sOJM1a(2@ni-0Pg)9&EQ2pm@ANJMokn zx#ImkDR;gkeR+CPR?QVHT~bNh~K!HlDIbolioSfbT9GM7pIoPyoR3 z!(K(L5h#}$#zpbPus-{8ru+WIa>sG&Rb%%*0xh@+b3$<9PrT51PgFHQp2S{9uj7mN zhtLdRyQ-H_ku*n>SR2)!d}rC@v_41u--&a|6S~bx{Y=?PkeDyylmOu05aed*8_;IV z3j9KuD&qRY0}0;K#!^+SDb*S4e+1@5qN6OTdJd%ABOGx&bAp*6V>Z#jz5!Kz1;!|z znhKVs{UQv&W%eWGBDHwTq8WPw(a&PgTl~a)-TPec%Vzwu%6*_Lda~zu4|ay`WbLWlJ)3vp4$`f$q z`bKfBqQ=SoXh+O#lZhWg!(+j4<-)dOj|zthrDui zLaX(=H(c5DO~HzUL?K6suKVTUH@3sxyX2DKv8%8vS==gf0q5U8tA*EX={^+Uny0oi zP84rSZHrO5bIPG^4=ra4lfVj<3qY#v3{M%D#RA!WF|V#Y#hJYlKAqobv%&1S0jT2X zG1B!qu)XIJ$p4H0v3sz;_P*zLPE?U!DAnjY36w6&{GZYe6to(pRVQ=A2~OCqe5Ls^ ziKDc1qVm4l5s={h#oS-^Z8}+rQ=%?>4%Bt0T&(anx=9*v8#+vS(lZzMjanL-Y7P}v zbf8NH!8a$7DDY=LqAnz<&~_okPigM&i^r(L$)&+@zd4f_Z{rCYRcjInvO@m*WuV27 zgxGqc%1|Cu36|WG>8`ad+{hr(GB8Jqv#Lh6UCeqCQt!C0(ucT+qZypo6Qe6?%?&4xUR1yhk6i zg)>Y+cI=}_B1T}T6}=wwJ*s<_P(b3E9R{{BapeL-^^=DydFYhx(_cp)mL?vb!qW=- z`@E&^7nsQO;zR@ks;OXNl&e7)M9MvAAur@SnAj$Y~x^Mqn zYi?*9>xDWiKH&l3szOMPh#uNSZlU;UH zv%VKEv@6V72OPcX$Jh1Eo!U;eAk%9hRhc??mmd*DF;|dZhmGkWh~q0B4TsLg7WuH( zdJGe*CQo$BAHEfy5GBdo8=vZ(*=jW_4N2(8f-1dPCb_i3at^@@iehVunP4HLwmCHy z$9_H{h>Cp>PhR$zX~yZ~|IE7O-H>3g@vwYsJ?^PmUrWC(xRr#x=00z@)*0a<`fD!MQ z=-SIg4XmWwX@IZ~X4Y_Y@ybKnj6oxo@zasiw&7NvR>ywg`O}&;OxC2VKJ4F>l?5b^+#F8 zH|tknU~x$OO~(h|X`AKgbStVY`aK`c5k=KPkuTLML1jsspg;HG#cjtPP{KU3<_>p5 znY;ik!?4TxtV9P-M#B*AiP8<)VsYtZs5eW8H)bK^bU8`xz#W%pzw|=7BL)V=;(>G# z57|8`Q+#wnU^Z@8*t-?%T+&Y5n?8$s=v345G;~P^e0WL%N`xa+X$R$x&b()x5Rq1v zr04K=+D6aBcBi>}O1B9m_IRKBz;$mC-Q=X0+-{ije7c=XfGW2Vym)%_R*Yg0r0a`$ zk^dUgMW}M_v27op#zfQY%XHLYSd?>=EK4^YCdK3qzGc8<;^HzK2OHrxtt$yf+8%>Z zBNM#HT`MGKVZtTtUUEE3#iwTptR1!K`N{XW7Zih*ay-k5k{9R&?peA>R&ZIG>lN># zIK>l`)wxshrAblF?vFmV3hHr`E7!_@jZ0Q%x zLL&-7LS8gxxiL(|V|;X#{3gz?gmmcjcta#Ek7m=_D;|gyVi!}HB%SpY z-V{vIX~VRrcvtB2qk#GW6Y*+X84?dR2*gyaiV;sP#mJUJLZv9me{1ecqnf(fhK&y@ zT8aoLpg^L6phZZ9DuW?MYc(RpI8=}^T2Mg5JYba|AyHA8iGY%Vl~h5|QcM*vC?R2v z6fhQ)Az{b>A{s~zNH~z>_-@zp<6G zlh!*OV+LqVZ*hVKm+|}3!9-J~Vq`tjtZ4CV_scg-??7>E#7Wh{xz1Mq=n|qS=II}x z9^v%Y;cH$`;!orH1viAoa4*NckOytq0b}+W&0rkESKmqEK>?_!2Py_=*ql35Y z8%wS!&t*hYvUA|4lr%TmPp`++?`j+~?ovuN{yW*pLRzx9c+ z>Vvq;bXSA}&TKfKw+U9f=f2?PoQKk$OstFv(BcPNQPIk+7o*noGIZ{oY=IohL5@Od z<}jnF3ET;AJ+BhArU^*`F~9xNbrDqW?) zy2Hq=`_UI|gUc?EPj6?4t0aZ7Oa%I>HRAbmr1B9A;Laj{5eE)X)RMLL@v zb+a_58>H=w;d4#i1lAuhTTlN;t1}7z+ke6q4N}nPkxBEqs&zCh&Zt@~(yc1jG*ApB z?~9pAcX>OyF{tgYur8yVU+Nepp`x~^+$mqi+dP&T(;fRk*Ni^BgbzfGgS7s%0GO;Z z7ixCFnzW=xx~&Mfq3Nh;Z5>xX`?NoNa3ZjqXCch9mt^G>1}q8Dr}5&! zuD9s39y7oxT?&|JHasGHTlVaJd3bCex(;5&@+M_P)V+zD9OD*{tTUY{Zd6?z6$n<_ z`1z<#h{pkzo#5vW5{iN{RW zGiis~x6srV1CxOQGC)NoZu&nUX+C6$H&oB;rRJx+A%&;CK*9Av^a z0n&q(EG8tKfCk2!*w%tb>~+YRKP3OPCN8k0#P0PyZffXrroUw(bh_3pr9e*>Ll+s0 zvH4#c+Lk(hVr#a8#oB94s7H=<)13Z5BuBV?IP(RWjwpA|Ieo0mOxZ&5+Gt_;`$saE zaeo{-LCSz?*gErwCe&DsDWIglHVt#$OY5Ub!v=-R__b9`^AL(t2e6`;-TT^rE)Dwl ziLLb0`qFmmAL!OR0)?swPENVP4e&T52?>h5c)wox;_~#|{t3;w>Am^1OSLxd4aY_h zZ!0+~oezpG8aLGdI!<8Fn`)B?e|USQI{a8@JueH*_x$@@RXOHuBMPh_^?q_X7Kkpk zt?o2eUqiN!bnk8V)6lQx4r(&g@k2gxt`aPSZ+zFqdrDD zyT;E3n|_9g`s`u|z1eFu83t!*6#55(laM+6)l;-<`*z3-Gy({&fpWF<&GO_3so<~B zy)LS4)?QkY%0BC}{Z#yVX2%V~bZ{jq&_S#j-32_oA&C5NvI$th?Pm5${0TYk ztME|2sB;@Dd0dJu|I`mrsLyCElMqgt0`3V#HmAG=^x5Kj$a>gWa|upt5oMCC=o_Nx zi{H$WR(Cz7=I`yEmHc`m9LhT$Z^Bi%v{=fZx2@}$#UQAKd=sd%2x$ujBSpdCV>Sq` zd1FA?_HLOV1MhAp8lctQFEsWXwX$Lp3_96f*iSw6^vj@pbn$lrF-eNe;oE&Y+=0nc zRQ_vjXFbr{PXL)`BQM`cd)!y|&~S#Vu>wmwiKL=m5w#BQAv?Mcje;oRLETU*Q|I8F zBDjtx6SB&X@5MBIrVpVT8hT*A^(C!g*Nqj+M;vnXnG9(u+e~nh1WF9M)qpX(GE{c} zj#5U%|66>Z=26Fs@sX|gdIO--(m9%J8u|@1Q8Ij z(IXRRg8uPFfeqaOY*+PaW}7Nw!C#Plrl!ldHDMrzZ*9e%*j}h9rZL`w_dPwz>||Pd z(UOwn9GzvdrUUM45Uiwkk*kIUu#IrRHXPq`mcri%Xa#L)>tL6Kpx_P4p5L=NlNr^a zs(jLxQx0ac%+6eY3V>i-2GeDK208n4&Fn?9rUTvzA;6(99uQ@fhON&CTc18t^UEVB z+KSkW(Hj{X%p_Ma;rMnuXFig=97x{AT@WZJvoL6}SU7nN=%P4k zQ}g%m$W`9?(vMazFpo+HeaA#eXd%0f$K0AeYJ>(yRbL^+f-P^P9R`gV>Z6n;NFrc) zWWZz@TUk*--RYRhkcI76{rJx;$y{GC&OB0Eg*ml2sNsw2RaY<g%-d z5|C%&(V5IoIKrW&wMexp}j_=j1YlqW>1+p+c?9LauN8WJJJ0Dz1DmlK#b^mD_{X*NHHCG_cJ+1o60|`uRhA18WDc3%=VRTV-8=1AN>Yph7+Ov` z%hEvouM8OhAPlirKyfYaU&A}pEp%r->nFZ?XfzRu$`|k8j)UH#I@ajqI|<;$y7>~0 zzR=gw)@UyR_V60~E?Cuut=S{EPTQ<-+17I7D{eRd1PZ+eY*%p z!7Saxe21^ip3%y;rkCa)z)C%uIbs`hSqD6>*qb54URj$a`~sO=#XFg#7+MPIAlBB@ zKjzA`9WUipmVp;${^Nex#yBu$UcO9X{he*-j4m4kCV@HqO(LT@4XjS?5}^=e5|&J8 zo-w6NYpU38Hxb?+GE7`o_p}h!J$KmZm$yc^Zxq~@llCN65Z0hGq{ZkW7#Qif{BNH3 z5*&yRX->$@qyA`ELVY}K98&!>UwjPhzpM#+Nm^)L=eTQ<{9xosqL7`<#u{bT;4;aJ z-yyhCv510A+oHnnp;VkMzK3-el>oZgkYtgzGH*VgKx?8-&%jKj8F<~sAfcc=MTw{>`)`K1dwSeqT%o@C4BEfq_~r*%)>`K`(mzI9km9`t1NkatlaX+pCl*#h6#K}_kD4didvbwHhVegBj0=25;V1N7Akbl{S!h}|f@h&Fn z)72^|56kaZ#h!k38yt);K3g20l^OZ+ zO*3QjiEb&s&F9Ua&-f&S2$#xOlkRFKe|Wr&kp*$%=GrLMG4O}{Si;Kg*(@JybN4=c z3)7FwWrFh(#k6P7$8@G*PST6$EoAkN$>i(6Ci=m}N^=&r2#Zb}-lBFHE|P;jy29}T zg17dCew_@%+ev2~4D(HII=3+*ARt(3Kp}01)HIF16lvB3!d9)D`F6p?-w{SDe+BGX zQcOwY8%x1lbAc};PnjLQ9RJ7O4A+7L*Y3HF8}mWt8+-xghD;rO1WE6M4f3a8=tYKfn5z*Y%iNEBW!#DTOhf9DcHl*vh+cTW0AEMe}Nvv>bUfEe8$&#tkp_} zI-E2hQs5@PG=-cYe>Fic^iFF{37Fem|AyyvZ}|S3fGXj-{CA#H4%5xTH6qc->Q6-7 zYL(11gWv;Bo;zV1)xB}SzwNo4Vut)I@9_T%1bsphH@B@kX!H;O$*m-sYx+Xe2AS>M zM(|cYE|Qx+d9X6&arcf~wx*lE0i66tU}izaf6{&g6S@#Y?B_BFfE)Pj>$AFeh02V2 ziv09r>i#Rfhlj1>)_Rok(*jUCdYpB*e(2@HO4^b%;X7zY{NG zuSC362mReh7Vo)BcaKR1eYFoqGp1Y}=0#ywmv0^0w@5moKFk~_Xo1u}m|hLWO|Dmy zdMPq|3YEReXZ{>v-7t$u}VEa%#3zABi zm*`vKl8-^gj2MbhICZL=nhG0}K1bS$LKof8_*el5~ zDoHx^Tx}GN7^@HXpB5d1HP7WK39mvX_Zr7677X+j_Nv~|r+2ZT@|V!tPXz-4X}#dd zNH!Eh=`SF@p|5(+sn7)=JLL8DZ6zj8p8b^Td)8&VAHF+pWVUbm%&Xcp`Jy@=t~2tYF^~IoaOEM^J}7AQ&gnj{o&>IAO)5Xf=Ld{ zoETC2em2O!u7ae)r1WqT*!8mGZS5Y~&fZxlllANdo^cw)8&b8z$*n}2`CrZb;wW}} zny8>l!}(nxy+VEp@T#h-peU8_4ecN@c5g6Ru!i7`yi&Ay5B=Ht^|K3krr&f+M)OHS zZS>a>+>~6*be^AJyn)^Begz0c{pw2vCybb$wT(_!EldCVBC8cAwz;l;rX5}#$ zXZ0D>>5apiZ9dzFr@lSw(m8t0I{zmHS~R{Uk+T!LOn-VO-v?Q(J&lS>Ho%G3In`kn za$L*4S;~sAuBwh+7pR+&gypI%DzOI8DF_1^0*v*rLjLT&tU^Lb<8MNe%VNAwRjaTA zseMCj6*)@P!EW6SA%>aQ|uu(%AFm_8Ch|@k|-a~Lf3$9ye+N- z43#5y%=0OE&L|%yZqEN(HkR|XD$ZeN(r;|QhU@Uu)e7CUTdD4vOt462WKJFk1nCOh z@?JiqGlM}I6!=tOu}$Lo`e&7QZ#QG~gekGCv7lqR_9lkpr5|Tmfn9!*Cd6iA?W&n( zrvX*12=Mz8Cx=yWbK927Nu;e4SLG87oX# zW4Qwyciw?>8PNXEcj1;+) z#ovgWK%Wxzz-q7?jdSbpkLI`1S(bD;#kWGOVF!N={$ekt=9NlQ$)eM{+E% zx+dq=KYwQBmP8v4UvoGJF9GrS1S0nIEE{ng(XC1qGE4>1>*O`~L`CI!UW!6B@NBLn z+!F1nONuNw_WZ9*uQ)=_`oKE?m#faH*MCQBdZav^G={#5ffnxAA6tyLJBHC5M(PkgNMx9~p%Bn4mb` znuq&r5b*^@bbs45ErxbNUkgQX21wv)R1Gq!Tpl4A(v%z=&3J9O*9~r9;ICYHep94-xm3}zqY%k(yDds0J%C|bNd{X zR&iOh@Z4gBPmV!~u{MF`mMZU4DmXD0(^?@5+M0jf2+uu2Dw-GmT3hrDk@tUX0{Ni3vS6 zs@xxso4R{q&JtDl=k|IFu*X`o4O$7siTVqCUjs(Pw+J^t&B?A7tR6uQeE4jj{1$0z z>VM_XQ{q2?ac~nlsa8P$0NbscMFzzhyZJ`6U-T~oQMe_@5gA7bmFuk3bE!PP($k4K z+j?(d$|M`NrW7{~zh($|^r#|-r)Mz7))QzPnsJGFvf+BT#^y@Zx17i7@?rN4>8 z;S>n-F?G$xM-R0FK<~O6W6MNqw)LVCY>iPHZa^hm2xDDk zMES%j5}Wnp{RP?ss@;8CCRM+D6u9k-8-4|x^916UP72TTbz;?ioB>0HRRbl9T@xh? zfl^=KnhwGH{~rF>FtY4A=j;ZLXBWEX6T;dlDD&*uvnxRGH&Bz2yzZqDKoRbrgk+S- zBMh0AoH0_}H@QU0lOi64Z_otnxaF7DO=V^_H_G~I7 zR@J5IHz+#WM6Nj8Z*4suH}!ynuy7|(>PxhH#po-6`XKp=pVs{YyM~djGg4I2 zA!DHAno6MV^I2Vvy|3Qw>-Gs4PHySq6~5ArL4(X{a8$~*yTFZcr(+Nay5huZo$2|< zG`}<=%xbC=tvzktDA&H^DC${9-|QAH5f;4@#!Z7G#;98ZMl@gzp|c>hr5I@=nY^Dt z+e%v7lImUK4k-N8Z?6WQFB9jCvRDa3^Tn9RS2Qqss_kN5SSX`$#QI|i1dz`|=UT$8 z>OhTl#j%i~k@r?s@q=Aueh$a$>pHMgqtyAu<@YcAceQx`tNynrOMzP&!}n2Ne5}lUS39@J)4G<_|r%Mf$hn11^eepO%y#uFeXLK)Vk%;jPJ$ecawp zk}T(k5w%q>h}Ws1wER-_IV2t_26Ij?(SX)oy!nNm{U_%;T&kdYZgPp5Et_m@?l8Lc z-Q@m}gManl+dW<|@k{ z(l*1E^?y()es4IF+l=@<`ChJzxCNbt=3g_erC9u*=7ImKIQM_m>HMFbZPDj}{{l$f Brf~oO From f589107dbf87ddc37e5c891f6fbb9b12a9b913c2 Mon Sep 17 00:00:00 2001 From: xinbenlv Date: Sat, 15 Oct 2022 08:04:36 -0700 Subject: [PATCH 005/113] Add EIP-5750: Method with Extra Data (#5750) * Init for method extra data ERC * Add the major content * Fix EIPW * Update status * Update name * Fix EIPW * Update EIPS/eip-5750.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * U * Update eip-5750.md * Fix a bit of grammar Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> --- EIPS/eip-5750.md | 88 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 EIPS/eip-5750.md diff --git a/EIPS/eip-5750.md b/EIPS/eip-5750.md new file mode 100644 index 00000000000000..aeb6a7513607ad --- /dev/null +++ b/EIPS/eip-5750.md @@ -0,0 +1,88 @@ +--- +eip: 5750 +title: Extra Data Parameter in Methods +description: Defines an extra data parameter in methods. +author: Zainan Victor Zhou (@xinbenlv) +discussions-to: https://ethereum-magicians.org/t/erc-5750-method-with-extra-data/11176 +status: Draft +type: Standards Track +category: ERC +created: 2022-10-04 +--- + +## Abstract + +This EIP defines an extra data parameter in methods, denoted as `methodName(... bytes calldata _data)`. Compliant methods +can use the extra data to introduce extended behaviors. Any method, regardless of name, can use this extra parameter. + +## Motivation + +The general purpose of having extra data in a method is to allow further extensions for a existing method interface. + +1. Any methods complying with this EIP, such as overloaded `transfer` and `vote` could use string reasons as the extra data. +2. Existing EIPs that have exported methods compliant with this EIP can be extended for behaviors such as using the extra data to prove endorsement or as a salt, nonce, or commitments for reveal/commit schemes. +3. Data can be passed forward to callbacks. + +## Specification + +The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC 2119. + +1. Any compliant contract's compliant method MUST have a `bytes` (dynamic size) as its last parameter of the method. + +```solidity +function methodName(type1 param1, type2, param2 ... bytes calldata data); +``` + +## Rationale + +1. Having using the dynamically-sized `bytes` type allow for maximum flexibility to enable additional payloads of arbitrary types +2. Having the bytes specified as the last parameter makes this EIP compatible with the calldata layout of solidity. + +## Backwards Compatibility + +Many of existing EIPs already have compliant methods and all contracts compliant with those EIPs are already compliant with this EIP. + +Here is an incomplete list: + +1. In [EIP-721](./eip-721.md) the following methods are already compliant: + +- `function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable;` is already compliant + +2. In [EIP-1155](./eip-1155.md) the following methods are already compliant + +- `function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _value, bytes calldata _data) external;` +- `function safeBatchTransferFrom(address _from, address _to, uint256[] calldata _ids, uint256[] calldata _values, bytes calldata _data) external;` + +3. In [EIP-777](./eip-777.md) the following methods are already compliant + +- `function burn(uint256 amount, bytes calldata data) external;` +- `function send(address to, uint256 amount, bytes calldata data) external;` + +4. In [EIP-2535](./eip-2535.md) the following methods are already compliant + +```solidity +function diamondCut( + FacetCut[] calldata _diamondCut, + address _init, + bytes calldata _calldata + ) external; +``` + +5. In [EIP-1271](./eip-1271.md) the following methods are already compliant: + +```solidity + function isValidSignature( + bytes32 _hash, + bytes memory _signature) + public + view + returns (bytes4 magicValue); +``` + +## Security Considerations + +1. If using the extra data for extended behavior, such as supplying signature for onchain verification, or supplying commitments in a commit-reveal scheme, best practices should be followed for those particular extended behaviors. +2. Compliant contracts must also take into consideration that the data parameter will be publicly revealed when submitted into the mempool or included in a block, so one must consider the risk of replay, and transaction ordering attacks. In addition, unencrypted personally identifiable information should never be included in the data parameter. + +## Copyright +Copyright and related rights waived via [CC0](../LICENSE.md). From 7755218c6de9a048d03797625d85a644e7db6763 Mon Sep 17 00:00:00 2001 From: DerivStudio <89515407+DerivStudio@users.noreply.github.com> Date: Tue, 18 Oct 2022 20:02:24 +0800 Subject: [PATCH 006/113] Update EIP-5187: update identifier for this interface (#5783) * Update eip-5187.md adding sublease and renewal of the rental so that users can freely transfer the usage rights among each other and extend the lease term. * Update eip-5187.md * Update eip-5187.md update identifier for this interface --- EIPS/eip-5187.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EIPS/eip-5187.md b/EIPS/eip-5187.md index d769931672646c..bb1ff12a15deeb 100644 --- a/EIPS/eip-5187.md +++ b/EIPS/eip-5187.md @@ -40,7 +40,7 @@ The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL ```solidity pragma solidity ^0.8.0; -/// Note: the ERC-165 identifier for this interface is 0xd4613e9f. +/// Note: the ERC-165 identifier for this interface is 0x6938e358. interface IRental /* is IERC165,IERC1155 */ { /** * @notice This emits when user rent NFT From f43ca0b6b6c4f9115e4251273ab36061a9992f8a Mon Sep 17 00:00:00 2001 From: xinbenlv Date: Tue, 18 Oct 2022 13:14:31 -0700 Subject: [PATCH 007/113] Update EIP-2294 for content (#5795) * init chainidsize EIP pr * Recover the content from #2294 * EIP formating * EIP formatting * Update authost list and add credt * Move to Review * Update EIPS/eip-2294.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-2294.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-2294.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update eip-2294.md * Update eip-2294.md * Move to Review status * Update eip-2294.md * Update eip-2294.md * Update eip-2294.md * Update eip-2294.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> --- EIPS/eip-2294.md | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/EIPS/eip-2294.md b/EIPS/eip-2294.md index 1fd805d5bb50ab..51ff7af4371464 100644 --- a/EIPS/eip-2294.md +++ b/EIPS/eip-2294.md @@ -12,33 +12,40 @@ requires: 155 --- ## Abstract -This EIP restricts the size of the [EIP-155](./eip-155.md) Chain ID parameter to a particular maximum value `floor(MAX_UINT64 / 2) - 36`, in order to ensure that there is a standard around how this parameter is to be used between different projects. +Starting from `blocknum = FORK_BLKNUM`, this EIP restricts the size of the [EIP-155](./eip-155.md) Chain ID parameter to a particular maximum value `floor(MAX_UINT64 / 2) - 36`, in order to ensure that there is a standard around how this parameter is to be used between different projects. ## Motivation EIP-155 introduces the Chain ID parameter, which is an important parameter used for domain separation (replay protection) of Ethereum protocol signed messages. However, it does not specify any properties about the size that this parameter takes. @axic mentions this concern in the 109th comment of [EIP-1344](./eip-1344.md)'s `discussion-to` > Allowing it to be 256-bit wide means that the RLP encoding of a transaction must use >256-bit arithmetic to calculate the v field. -<-- -TODO(xinbenlv): clean up motivation by splitting rationale of design decisions from motivation above. ---> - and suggests a reasonable maximum enforced size in order to ensure that there are no issues when encoding this parameter. This would allow a sufficient amount of different values for this parameter, which is typically chosen by community consensus as a genesis parameter for a given chain and thus does not change often. + +Without a well-chosen value of Chain ID, there could be differences in the implementation of EIP-155 (and EIP-1344 by derivative) in both client codebase and external tooling that could lead to consensus-critical vulnerabilities being introduced to the network. By making this limit explicit, we avoid this scenario for Ethereum and any project which uses the Ethereum codebase. + There have been suggestions of using a hash-based identifier in place on Chain ID to allow the value to adapt over time to different contentious forks and other scenarios. This proposal does not describe this behavior, but ~63 bits of entropy should be enough to ensure that no collisions are likely for reasonable (e.g. non-malicious) uses of this feature for that purpose. +Also, the field `chainID` have experienced increasing useage and dependencies, due more and more contracts are depending on [EIP-1344](./eip-1344.md) to expose CHAIN ID in the smart contract execution. For example when used with [EIP-712](./eip-712.md), [EIP-1271](./eip-1271.md) for on-contract signature verification, chainId has been increasingly introduced for replay attack prevention. It's security critical to ensure clients depending on the chainId computation in cryptography yeilds identical result for verification in +all cases. + Originally, this EIP was created by Bryant Eisenbach (@fubuloubu) and Alex Beregszaszi (@axic). ## Specification -The maximum value of Chain ID is `9,223,372,036,854,775,771` (`MAX_CHAIN_ID`). This value is `floor(MAX_UINT64 / 2) - 36`, and is chosen to avoid overflow when performing uint64 math. For reference, a value of 0 or less is also disallowed. +Starting from `blocknum = FORK_BLKNUM`, the maximum value of Chain ID is `9,223,372,036,854,775,771` (`MAX_CHAIN_ID`). + +1. Compliant client MUST reject a value outside of the range of `[0, MAX_CHAIN_ID]` in a provided transaction starting from `blocknum = FORK_BLKNUM` +2. Compliant client MUST disallow a genesis configuration with a value for Chain ID outside of this limit. -A client should reject a value outside of this range in a provided transaction, and disallow a genesis configuration with a value for Chain ID outside of this limit. Due to how the calculation for chain ID is performed, the maximum value seen during the arithmetic is `CHAIN_ID * 2 + 36`, so clients must test to ensure no overflow conditions are encountered when the highest value is used. No underflow is possible. +Due to how the calculation for chain ID is performed, the maximum value seen during the arithmetic is `CHAIN_ID * 2 + 36`, so clients must test to ensure no overflow conditions are encountered when the highest value is used. No underflow is possible. ## Rationale -Without a well-chosen value of Chain ID, there could be differences in the implementation of EIP-155 (and EIP-1344 by derivative) in both client codebase and external tooling that could lead to consensus-critical vulnerabilities being introduced to the network. By making this limit explicit, we avoid this scenario for Ethereum and any project which uses the Ethereum codebase. +The `MAX_CHAIN_ID` is calculated to avoid overflow when performing uint64 math. For reference, a value of 0 or less is also disallowed. ## Backwards Compatibility -This EIP introduces a change that affects previous implementations of this feature. However, since no known chain makes use of a value outside of the suggested bounds, there should not be an issue in adopting this limit on the size of this parameter, therefore the impact should be non-existent. +This EIP introduces a change that affects previous implementations of this feature. However, as of time of writing(2022-10-18) no known chain makes use of a value outside of the suggested bounds, there should not be an issue in adopting this limit on the size of this parameter, therefore the impact should be non-existent. + +If any other chain is operating with a incompatible `chainId`, we advised they make proper arrangement when this EIP becomes adopted. ## Security Considerations Needs discussion. From 81bdf6b7bbce27fb0353bc3884d4ea85cd07c964 Mon Sep 17 00:00:00 2001 From: Austin Zhu <42071208+AustinZhu@users.noreply.github.com> Date: Wed, 19 Oct 2022 20:38:46 +0700 Subject: [PATCH 008/113] Add EIP-5727: Semi-Fungible Soulbound Token (#5727) * feat: upload eip draft * fix: update erc number * feat: upload assets * fix: update implementation link * fix: update author info * feat: upload sample implementation * fix: add hardhat project config * fix: revise eip-5727 * fix: change ERC to EIP * fix: fix links to eip * fix: update tests * feat: include interface id; update sample --- EIPS/eip-5727.md | 626 ++++++++++++++++ assets/eip-5727/.gitignore | 354 +++++++++ assets/eip-5727/contracts/ERC5727.sol | 317 ++++++++ assets/eip-5727/contracts/ERC5727Delegate.sol | 276 +++++++ .../eip-5727/contracts/ERC5727Enumerable.sol | 188 +++++ assets/eip-5727/contracts/ERC5727Example.sol | 161 ++++ .../eip-5727/contracts/ERC5727Expirable.sol | 93 +++ .../eip-5727/contracts/ERC5727Governance.sol | 171 +++++ assets/eip-5727/contracts/ERC5727Recovery.sol | 45 ++ assets/eip-5727/contracts/ERC5727Shadow.sol | 84 +++ .../contracts/ERC5727SlotEnumerable.sol | 95 +++ .../contracts/interfaces/IERC5727.sol | 98 +++ .../contracts/interfaces/IERC5727Delegate.sol | 100 +++ .../interfaces/IERC5727Enumerable.sol | 57 ++ .../interfaces/IERC5727Expirable.sol | 48 ++ .../interfaces/IERC5727Governance.sol | 61 ++ .../contracts/interfaces/IERC5727Metadata.sol | 44 ++ .../contracts/interfaces/IERC5727Recovery.sol | 18 + .../contracts/interfaces/IERC5727Shadow.sol | 31 + .../interfaces/IERC5727SlotEnumerable.sol | 45 ++ assets/eip-5727/hardhat.config.ts | 16 + assets/eip-5727/package.json | 17 + assets/eip-5727/test/ERC5727Example.test.ts | 687 ++++++++++++++++++ assets/eip-5727/tsconfig.json | 31 + 24 files changed, 3663 insertions(+) create mode 100644 EIPS/eip-5727.md create mode 100644 assets/eip-5727/.gitignore create mode 100644 assets/eip-5727/contracts/ERC5727.sol create mode 100644 assets/eip-5727/contracts/ERC5727Delegate.sol create mode 100644 assets/eip-5727/contracts/ERC5727Enumerable.sol create mode 100644 assets/eip-5727/contracts/ERC5727Example.sol create mode 100644 assets/eip-5727/contracts/ERC5727Expirable.sol create mode 100644 assets/eip-5727/contracts/ERC5727Governance.sol create mode 100644 assets/eip-5727/contracts/ERC5727Recovery.sol create mode 100644 assets/eip-5727/contracts/ERC5727Shadow.sol create mode 100644 assets/eip-5727/contracts/ERC5727SlotEnumerable.sol create mode 100644 assets/eip-5727/contracts/interfaces/IERC5727.sol create mode 100644 assets/eip-5727/contracts/interfaces/IERC5727Delegate.sol create mode 100644 assets/eip-5727/contracts/interfaces/IERC5727Enumerable.sol create mode 100644 assets/eip-5727/contracts/interfaces/IERC5727Expirable.sol create mode 100644 assets/eip-5727/contracts/interfaces/IERC5727Governance.sol create mode 100644 assets/eip-5727/contracts/interfaces/IERC5727Metadata.sol create mode 100644 assets/eip-5727/contracts/interfaces/IERC5727Recovery.sol create mode 100644 assets/eip-5727/contracts/interfaces/IERC5727Shadow.sol create mode 100644 assets/eip-5727/contracts/interfaces/IERC5727SlotEnumerable.sol create mode 100644 assets/eip-5727/hardhat.config.ts create mode 100644 assets/eip-5727/package.json create mode 100644 assets/eip-5727/test/ERC5727Example.test.ts create mode 100644 assets/eip-5727/tsconfig.json diff --git a/EIPS/eip-5727.md b/EIPS/eip-5727.md new file mode 100644 index 00000000000000..aae92a5f99355b --- /dev/null +++ b/EIPS/eip-5727.md @@ -0,0 +1,626 @@ +--- +eip: 5727 +title: Semi-Fungible Soulbound Token +description: An interface for soulbound tokens, also known as badges or account-bound tokens, that can be both fungible and non-fungible. +author: Austin Zhu (@AustinZhu), Terry Chen +discussions-to: https://ethereum-magicians.org/t/eip-5727-semi-fungible-soulbound-token/11086 +status: Draft +type: Standards Track +category: ERC +created: 2022-09-28 +requires: 165 +--- + +## Abstract +An interface for soulbound tokens (SBT), which are non-transferable tokens representing a person's identity, credentials, affiliations, reputation, and private assets. + +Our interface can handle a combination of fungible and non-fungible tokens in an organized way. It provides a set of core methods that can be used to manage the lifecycle of soulbound tokens, as well as a rich set of extensions that enables DAO governance, privacy protection, token expiration, and account recovery. + +This interface aims to provide a flexible and extensible framework for the development of soulbound token systems. + +## Motivation +The Web3 ecosystem nowadays is largely dominated by highly-financialized tokens, which are designed to be freely transferable and interchangeable. However, there are many use cases in our society that requires non-transferablity. For example, a membership card guarantees one's proprietary rights in a community, and such rights should not be transferable to others. + +We have already seen many attempts to create such non-transferable tokens in the Ethereum community. However, most of them rely heavily on NFT standards like [EIP-721](./eip-721.md), which are not designed for non-transferability. Others lack the flexibility to support both fungible and non-fungible tokens and do not provide extensible features for critical use cases. + +Our interface can be used to represent non-transferable ownerships, and provides features for common use cases including but not limited to: + +- granular lifecycle management of SBTs (e.g. minting, revocation, expiration) +- management of SBTs via community voting and delegation (e.g. DAO governance, operators) +- recovery of SBTs (e.g. switching to a new wallet) +- token visibility control (e.g. private SBTs, hiding negative tokens) +- fungible and non-fungible SBTs (e.g. membership card and loyalty points) +- the grouping of SBTs using slots (e.g. complex reward schemes with a combination of vouchers, points, and badges) + +A common interface for soulbound tokens will not only help enrich the Web3 ecosystem but also facilitates the growth of a decentralized society. + +## Specification +The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC 2119. + +A token is identified by its `tokenId`, which is a 256-bit unsigned integer. A token can also have a value denoting its denomination. + +A slot is identified by its `slotId`, which is a 256-bit unsigned integer. Slots are used to group fungible and non-fungible tokens together, thus make tokens semi-fungible. A token can only belong to one slot at a time. + +### Core +The core methods are used to manage the lifecycle of SBTs. They MUST be supported by all semi-fungible SBT implementations. + +```solidity +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/utils/introspection/IERC165.sol"; + +/** + * @title ERC5727 Soulbound Token Interface + * @dev The core interface. It allows basic query of information about tokens and slots. + * @dev interfaceId = 0x35f61d8a + */ +interface IERC5727 is IERC165 { + /** + * @dev MUST emit when a token is minted. + * @param soul The address that the token is minted to + * @param tokenId The token minted + * @param value The value of the token minted + */ + event Minted(address indexed soul, uint256 indexed tokenId, uint256 value); + + /** + * @dev MUST emit when a token is revoked. + * @param soul The owner soul of the revoked token + * @param tokenId The revoked token + */ + event Revoked(address indexed soul, uint256 indexed tokenId); + + /** + * @dev MUST emit when a token is charged. + * @param tokenId The token to charge + * @param value The value to charge + */ + event Charged(uint256 indexed tokenId, uint256 value); + + /** + * @dev MUST emit when a token is consumed. + * @param tokenId The token to consume + * @param value The value to consume + */ + event Consumed(uint256 indexed tokenId, uint256 value); + + /** + * @dev MUST emit when a token is destroyed. + * @param soul The owner soul of the destroyed token + * @param tokenId The token to destroy. + */ + event Destroyed(address indexed soul, uint256 indexed tokenId); + + /** + * @dev MUST emit when the slot of a token is set or changed. + * @param tokenId The token of which slot is set or changed + * @param oldSlot The previous slot of the token + * @param newSlot The updated slot of the token + */ + event SlotChanged( + uint256 indexed tokenId, + uint256 indexed oldSlot, + uint256 indexed newSlot + ); + + /** + * @notice Get the value of a token. + * @dev MUST revert if the `tokenId` does not exist + * @param tokenId the token for which to query the balance + * @return The value of `tokenId` + */ + function valueOf(uint256 tokenId) external view returns (uint256); + + /** + * @notice Get the slot of a token. + * @dev MUST revert if the `tokenId` does not exist + * @param tokenId the token for which to query the slot + * @return The slot of `tokenId` + */ + function slotOf(uint256 tokenId) external view returns (uint256); + + /** + * @notice Get the owner soul of a token. + * @dev MUST revert if the `tokenId` does not exist + * @param tokenId the token for which to query the owner soul + * @return The address of the owner soul of `tokenId` + */ + function soulOf(uint256 tokenId) external view returns (address); + + /** + * @notice Get the validity of a token. + * @dev MUST revert if the `tokenId` does not exist + * @param tokenId the token for which to query the validity + * @return If the token is valid + */ + function isValid(uint256 tokenId) external view returns (bool); + + /** + * @notice Get the issuer of a token. + * @dev MUST revert if the `tokenId` does not exist + * @param tokenId the token for which to query the issuer + * @return The address of the issuer of `tokenId` + */ + function issuerOf(uint256 tokenId) external view returns (address); +} +``` + +### Extensions +All extensions below are OPTIONAL for [EIP-5727](./eip-5727.md) implementations. An implementation MAY choose to implement some, none, or all of them. +#### Enumerable +This extension provides methods to enumerate the tokens of a soul. It is recommended to be implemented together with the core interface. + +```solidity +pragma solidity ^0.8.0; + +import "./IERC5727.sol"; + +/** + * @title ERC5727 Soulbound Token Enumerable Interface + * @dev This extension allows querying the tokens of a soul. + * @dev interfaceId = 0x211ec300 + */ +interface IERC5727Enumerable is IERC5727 { + /** + * @notice Get the total number of tokens emitted. + * @return The total number of tokens emitted + */ + function emittedCount() external view returns (uint256); + + /** + * @notice Get the total number of souls. + * @return The total number of souls + */ + function soulsCount() external view returns (uint256); + + /** + * @notice Get the tokenId with `index` of the `soul`. + * @dev MUST revert if the `index` exceed the number of tokens owned by the `soul`. + * @param soul The soul whose token is queried for. + * @param index The index of the token queried for + * @return The token is queried for + */ + function tokenOfSoulByIndex(address soul, uint256 index) + external + view + returns (uint256); + + /** + * @notice Get the tokenId with `index` of all the tokens. + * @dev MUST revert if the `index` exceed the total number of tokens. + * @param index The index of the token queried for + * @return The token is queried for + */ + function tokenByIndex(uint256 index) external view returns (uint256); + + /** + * @notice Get the number of tokens owned by the `soul`. + * @dev MUST revert if the `soul` does not have any token. + * @param soul The soul whose balance is queried for + * @return The number of tokens of the `soul` + */ + function balanceOf(address soul) external view returns (uint256); + + /** + * @notice Get if the `soul` owns any valid tokens. + * @param soul The soul whose valid token infomation is queried for + * @return if the `soul` owns any valid tokens + */ + function hasValid(address soul) external view returns (bool); +} +``` + +#### Metadata +This extension provides methods to fetch the metadata of a token, a slot and the contract itself. It is recommended to be implemented if you need to specify the appearance and properties of tokens, slots and the contract (i.e. the SBT collection). + +```solidity +pragma solidity ^0.8.0; + +import "./IERC5727.sol"; + +/** + * @title ERC5727 Soulbound Token Metadata Interface + * @dev This extension allows querying the metadata of soulbound tokens. + * @dev interfaceId = 0xba3e1a9d + */ +interface IERC5727Metadata is IERC5727 { + /** + * @notice Get the name of the contract. + * @return The name of the contract + */ + function name() external view returns (string memory); + + /** + * @notice Get the symbol of the contract. + * @return The symbol of the contract + */ + function symbol() external view returns (string memory); + + /** + * @notice Get the URI of a token. + * @dev MUST revert if the `tokenId` token does not exist. + * @param tokenId The token whose URI is queried for + * @return The URI of the `tokenId` token + */ + function tokenURI(uint256 tokenId) external view returns (string memory); + + /** + * @notice Get the URI of the contract. + * @return The URI of the contract + */ + function contractURI() external view returns (string memory); + + /** + * @notice Get the URI of a slot. + * @dev MUST revert if the `slot` does not exist. + * @param slot The slot whose URI is queried for + * @return The URI of the `slot` + */ + function slotURI(uint256 slot) external view returns (string memory); +} +``` + +#### Governance +This extension provides methods to manage the mint and revocation permissions through voting. It is useful if you want to rely on a group of voters to decide the issuance a particular SBT. + +```solidity +pragma solidity ^0.8.0; + +import "./IERC5727.sol"; + +/** + * @title ERC5727 Soulbound Token Governance Interface + * @dev This extension allows minting and revocation of tokens by community voting. + * @dev interfaceId = 0x3ba738d1 + */ +interface IERC5727Governance is IERC5727 { + /** + * @notice Get the voters of the contract. + * @return The array of the voters + */ + function voters() external view returns (address[] memory); + + /** + * @notice Approve to mint the token described by the `approvalRequestId` to `soul`. + * @dev MUST revert if the caller is not a voter. + * @param soul The soul which the token to mint to + * @param approvalRequestId The approval request describing the value and slot of the token to mint + */ + function approveMint(address soul, uint256 approvalRequestId) external; + + /** + * @notice Approve to revoke the `tokenId`. + * @dev MUST revert if the `tokenId` does not exist. + * @param tokenId The token to revert + */ + function approveRevoke(uint256 tokenId) external; + + /** + * @notice Create an approval request describing the `value` and `slot` of a token. + * @dev MUST revert when `value` is zero. + * @param value The value of the approval request to create + */ + function createApprovalRequest(uint256 value, uint256 slot) external; + + /** + * @notice Remove `approvalRequestId` approval request. + * @dev MUST revert if the caller is not the creator of the approval request. + * @param approvalRequestId The approval request to remove + */ + function removeApprovalRequest(uint256 approvalRequestId) external; + + /** + * @notice Add a new voter `newVoter`. + * @dev MUST revert if the caller is not an administrator. + * MUST revert if `newVoter` is already a voter. + * @param newVoter the new voter to add + */ + function addVoter(address newVoter) external; + + /** + * @notice Remove the `voter` from the contract. + * @dev MUST revert if the caller is not an administrator. + * MUST revert if `voter` is not a voter. + * @param voter the voter to remove + */ + function removeVoter(address voter) external; +} +``` + +#### Delegate +This extension provides methods to delegate a one-time mint and revocation right to an operator. It is useful if you want to temporarily allow an operator to mint and revoke tokens on your behalf. + +```solidity +pragma solidity ^0.8.0; + +import "./IERC5727.sol"; + +/** + * @title ERC5727 Soulbound Token Delegate Interface + * @dev This extension allows delegation of (batch) minting and revocation of tokens to operator(s). + * @dev interfaceId = 0x3da384b4 + */ +interface IERC5727Delegate is IERC5727 { + /** + * @notice Delegate a one-time minting right to `operator` for `delegateRequestId` delegate request. + * @dev MUST revert if the caller does not have the right to delegate. + * @param operator The soul to which the minting right is delegated + * @param delegateRequestId The delegate request describing the soul, value and slot of the token to mint + */ + function mintDelegate(address operator, uint256 delegateRequestId) external; + + /** + * @notice Delegate one-time minting rights to `operators` for corresponding delegate request in `delegateRequestIds`. + * @dev MUST revert if the caller does not have the right to delegate. + * MUST revert if the length of `operators` and `delegateRequestIds` do not match. + * @param operators The souls to which the minting right is delegated + * @param delegateRequestIds The delegate requests describing the soul, value and slot of the tokens to mint + */ + function mintDelegateBatch( + address[] memory operators, + uint256[] memory delegateRequestIds + ) external; + + /** + * @notice Delegate a one-time revoking right to `operator` for `tokenId` token. + * @dev MUST revert if the caller does not have the right to delegate. + * @param operator The soul to which the revoking right is delegated + * @param tokenId The token to revoke + */ + function revokeDelegate(address operator, uint256 tokenId) external; + + /** + * @notice Delegate one-time minting rights to `operators` for corresponding token in `tokenIds`. + * @dev MUST revert if the caller does not have the right to delegate. + * MUST revert if the length of `operators` and `tokenIds` do not match. + * @param operators The souls to which the revoking right is delegated + * @param tokenIds The tokens to revoke + */ + function revokeDelegateBatch( + address[] memory operators, + uint256[] memory tokenIds + ) external; + + /** + * @notice Mint a token described by `delegateRequestId` delegate request as a delegate. + * @dev MUST revert if the caller is not delegated. + * @param delegateRequestId The delegate requests describing the soul, value and slot of the token to mint. + */ + function delegateMint(uint256 delegateRequestId) external; + + /** + * @notice Mint tokens described by `delegateRequestIds` delegate request as a delegate. + * @dev MUST revert if the caller is not delegated. + * @param delegateRequestIds The delegate requests describing the soul, value and slot of the tokens to mint. + */ + function delegateMintBatch(uint256[] memory delegateRequestIds) external; + + /** + * @notice Revoke a token as a delegate. + * @dev MUST revert if the caller is not delegated. + * @param tokenId The token to revoke. + */ + function delegateRevoke(uint256 tokenId) external; + + /** + * @notice Revoke multiple tokens as a delegate. + * @dev MUST revert if the caller is not delegated. + * @param tokenIds The tokens to revoke. + */ + function delegateRevokeBatch(uint256[] memory tokenIds) external; + + /** + * @notice Create a delegate request describing the `soul`, `value` and `slot` of a token. + * @param soul The soul of the delegate request. + * @param value The value of the delegate request. + * @param slot The slot of the delegate request. + * @return delegateRequestId The id of the delegate request + */ + function createDelegateRequest( + address soul, + uint256 value, + uint256 slot + ) external returns (uint256 delegateRequestId); + + /** + * @notice Remove a delegate request. + * @dev MUST revert if the delegate request does not exists. + * MUST revert if the caller is not the creator of the delegate request. + * @param delegateRequestId The delegate request to remove. + */ + function removeDelegateRequest(uint256 delegateRequestId) external; +} +``` + +#### Recovery +This extension provides methods to recover tokens from a stale soul. It is recommended to use this extension so that users are able to retrieve their tokens from a compromised or old wallet in certain situations. + +```solidity +pragma solidity ^0.8.0; + +import "./IERC5727.sol"; + +/** + * @title ERC5727 Soulbound Token Recovery Interface + * @dev This extension allows recovering soulbound tokens from an address provided its signature. + * @dev interfaceId = 0x379f4e66 + */ +interface IERC5727Recovery is IERC5727 { + /** + * @notice Recover the tokens of `soul` with `signature`. + * @dev MUST revert if the signature is invalid. + * @param soul The soul whose tokens are recovered + * @param signature The signature signed by the `soul` + */ + function recover(address soul, bytes memory signature) external; +} +``` +#### Expirable +This extension provides methods to manage the expiration of tokens. It is useful if you want to expire/invalidate tokens after a certain period of time. + +```solidity +pragma solidity ^0.8.0; + +import "./IERC5727.sol"; + +/** + * @title ERC5727 Soulbound Token Expirable Interface + * @dev This extension allows soulbound tokens to be expired. + * @dev interfaceId = 0x2a8cf5aa + */ +interface IERC5727Expirable is IERC5727 { + /** + * @notice Get the expire date of a token. + * @dev MUST revert if the `tokenId` token does not exist. + * @param tokenId The token for which the expiry date is queried + * @return The expiry date of the token + */ + function expiryDate(uint256 tokenId) external view returns (uint256); + + /** + * @notice Get if a token is expired. + * @dev MUST revert if the `tokenId` token does not exist. + * @param tokenId The token for which the expired status is queried + * @return If the token is expired + */ + function isExpired(uint256 tokenId) external view returns (bool); + + /** + * @notice Set the expiry date of a token. + * @dev MUST revert if the `tokenId` token does not exist. + * MUST revert if the `date` is in the past. + * @param tokenId The token whose expiry date is set + * @param date The expire date to set + */ + function setExpiryDate(uint256 tokenId, uint256 date) external; + + /** + * @notice Set the expiry date of multiple tokens. + * @dev MUST revert if the `tokenIds` tokens does not exist. + * MUST revert if the `dates` is in the past. + * MUST revert if the length of `tokenIds` and `dates` do not match. + * @param tokenIds The tokens whose expiry dates are set + * @param dates The expire dates to set + */ + function setBatchExpiryDates( + uint256[] memory tokenIds, + uint256[] memory dates + ) external; +} +``` + +#### Shadow +This extension provides methods to manage the visibility of tokens. It is useful if you want to hide tokens that you don't want to show to the public. + +```solidity +pragma solidity ^0.8.0; + +import "./IERC5727.sol"; + +/** + * @title ERC5727 Soulbound Token Shadow Interface + * @dev This extension allows restricting the visibility of specific soulbound tokens. + * @dev interfaceId = 0x3475cd68 + */ +interface IERC5727Shadow is IERC5727 { + /** + * @notice Shadow a token. + * @dev MUST revert if the `tokenId` token does not exists. + * @param tokenId The token to shadow + */ + function shadow(uint256 tokenId) external; + + /** + * @notice Reveal a token. + * @dev MUST revert if the `tokenId` token does not exists. + * @param tokenId The token to reveal + */ + function reveal(uint256 tokenId) external; +} +``` + +#### SlotEnumerable +This extension provides methods to enumerate slots. A slot is used to group tokens that share similar utility and properties. + +```solidity +pragma solidity ^0.8.0; + +import "./IERC5727.sol"; +import "./IERC5727Enumerable.sol"; + +/** + * @title ERC5727 Soulbound Token Slot Enumerable Interface + * @dev This extension allows querying information about slots. + * @dev interfaceId = 0x3b741b9e + */ +interface IERC5727SlotEnumerable is IERC5727, IERC5727Enumerable { + /** + * @notice Get the total number of slots. + * @return The total number of slots. + */ + function slotCount() external view returns (uint256); + + /** + * @notice Get the slot with `index` among all the slots. + * @dev MUST revert if the `index` exceed the total number of slots. + * @param index The index of the slot queried for + * @return The slot is queried for + */ + function slotByIndex(uint256 index) external view returns (uint256); + + /** + * @notice Get the number of tokens in a slot. + * @dev MUST revert if the slot does not exist. + * @param slot The slot whose number of tokens is queried for + * @return The number of tokens in the `slot` + */ + function tokenSupplyInSlot(uint256 slot) external view returns (uint256); + + /** + * @notice Get the tokenId with `index` of the `slot`. + * @dev MUST revert if the `index` exceed the number of tokens in the `slot`. + * @param slot The slot whose token is queried for. + * @param index The index of the token queried for + * @return The token is queried for + */ + function tokenInSlotByIndex(uint256 slot, uint256 index) + external + view + returns (uint256); +} +``` + +## Rationale +### Token storage model +We adopt semi-fungible token storage models designed to support both fungible and non-fungible tokens, inspired by the semi-fungible token standard. We found that such a model is better suited to the representation of SBT than the model used in [EIP-1155](./eip-1155.md). + +Firstly, each slot can be used to represent different categories of SBTs. For instance, a DAO can have membership SBTs, role badges, scores, etc. in one SBT collection. + +Secondly, unlike [EIP-1155](./eip-1155.md), in which each unit of fungible tokens is exactly the same, our interface can help differentiate between similar tokens. This is justified by that credential scores obtained from different entities differ not only in value but also in their effects, validity periods, origins, etc. However, they still share the same slot as they all contribute to a person's credibility, membership, etc. + +### Recovery mechanism +To prevent the loss of SBTs, we propose a recovery mechanism that allows users to recover their tokens by providing a signature signed by their soul address. This mechanism is inspired by [EIP-1271](./eip-1271.md). + +Since SBTs are bound to an address and are meant to represent the identity of the address, which cannot be split into fractions. Therefore, each recovery should be considered as a transfer of all the tokens of the owner. This is why we use the `recover` function instead of `transferFrom` or `safeTransferFrom`. + +### Token visibility control +Our interface allows users to control the visibility of their tokens (shadowing and revealing). This is useful when a user wants to hide some of their tokens from the public, for example, when they want to keep their membership secret. Generally, the issuer and the owner of the token have access to the token by default and can control the visibility of the token. After the token is shadowed, information about the token (e.g. token URI, owner of the token) cannot be queried by the public. + +## Backwards Compatibility +This EIP proposes a new token interface which is meant to be used standalone, and is not backwards compatible with [EIP-721](./eip-721.md), [EIP-1155](./eip-1155.md), [EIP-3525](./eip-3525.md) or any other token standards. However, the naming style of functions and arguments follows the convention of [EIP-721](./eip-721.md) and [EIP-3525](./eip-3525.md), so that developers can understand the intentions easily. + +This EIP is compatible with [EIP-165](./eip-165.md). + +## Test Cases +Our sample implementation includes test cases written using Hardhat. + +## Reference Implementation +You can find our sample implementation [here](../assets/eip-5727/contracts/ERC5727Example.sol). + +## Security Considerations +This EIP does not involve the general transfer of tokens, and thus there will be no security issues related to token transfer generally. + +However, users should be aware of the security risks of using the recovery mechanism. If a user loses his/her private key, all his/her soulbound tokens will be exposed to potential theft. The attacker can create a signature and restore all SBTs of the victim. Therefore, users should always keep their private keys safe. We recommend developers implement a recovery mechanism that requires multiple signatures to restore SBTs. + +## Copyright +Copyright and related rights waived via [CC0](../LICENSE.md). diff --git a/assets/eip-5727/.gitignore b/assets/eip-5727/.gitignore new file mode 100644 index 00000000000000..45ba613caf3beb --- /dev/null +++ b/assets/eip-5727/.gitignore @@ -0,0 +1,354 @@ +node_modules +.env +coverage +coverage.json +typechain/* +!typechain/package.json +!typechain/tsconfig.json +!typechain/README.md +typechain-types +.deps +.vscode + +#Hardhat files +cache +artifacts + +# Created by https://www.toptal.com/developers/gitignore/api/node +# Edit at https://www.toptal.com/developers/gitignore?templates=node + +### Node ### +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +### Node Patch ### +# Serverless Webpack directories +.webpack/ + +# Optional stylelint cache + +# SvelteKit build / generate output +.svelte-kit + +# End of https://www.toptal.com/developers/gitignore/api/node + +# Created by https://www.toptal.com/developers/gitignore/api/visualstudiocode,macos,solidity +# Edit at https://www.toptal.com/developers/gitignore?templates=visualstudiocode,macos,solidity + +### macOS ### +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### macOS Patch ### +# iCloud generated files +*.icloud + +### Solidity ### +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +### VisualStudioCode ### +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +!.vscode/*.code-snippets + +# Local History for Visual Studio Code +.history/ + +# Built Visual Studio Code Extensions +*.vsix + +### VisualStudioCode Patch ### +# Ignore all local history of files +.history +.ionide + +# Support for Project snippet scope +.vscode/*.code-snippets + +# Ignore code-workspaces +*.code-workspace + +# End of https://www.toptal.com/developers/gitignore/api/visualstudiocode,macos,solidity \ No newline at end of file diff --git a/assets/eip-5727/contracts/ERC5727.sol b/assets/eip-5727/contracts/ERC5727.sol new file mode 100644 index 00000000000000..d3331759213584 --- /dev/null +++ b/assets/eip-5727/contracts/ERC5727.sol @@ -0,0 +1,317 @@ +//SPDX-License-Identifier: CC0-1.0 +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/utils/Context.sol"; +import "@openzeppelin/contracts/utils/Strings.sol"; +import "@openzeppelin/contracts/utils/Address.sol"; +import "@openzeppelin/contracts/utils/introspection/ERC165.sol"; +import "@openzeppelin/contracts/access/Ownable.sol"; +import "@openzeppelin/contracts/access/AccessControlEnumerable.sol"; +import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; +import "@openzeppelin/contracts/utils/Counters.sol"; + +import "./interfaces/IERC5727.sol"; +import "./interfaces/IERC5727Metadata.sol"; + +abstract contract ERC5727 is + IERC5727Metadata, + ERC165, + Ownable, + AccessControlEnumerable +{ + using Address for address; + using Strings for uint256; + + struct Token { + address issuer; + address soul; + bool valid; + uint256 value; + uint256 slot; + } + + mapping(uint256 => Token) private _tokens; + + string private _name; + string private _symbol; + + constructor(string memory name_, string memory symbol_) Ownable() { + _name = name_; + _symbol = symbol_; + } + + function supportsInterface(bytes4 interfaceId) + public + view + virtual + override(ERC165, IERC165, AccessControlEnumerable) + returns (bool) + { + return + interfaceId == type(IERC5727).interfaceId || + interfaceId == type(IERC5727Metadata).interfaceId || + super.supportsInterface(interfaceId); + } + + function _getTokenOrRevert(uint256 tokenId) + internal + view + virtual + returns (Token storage) + { + Token storage token = _tokens[tokenId]; + require(token.soul != address(0), "ERC5727: Token does not exist"); + return token; + } + + function _mintUnsafe( + address soul, + uint256 tokenId, + uint256 value, + uint256 slot, + bool valid + ) internal { + _mintUnsafe(_msgSender(), soul, tokenId, value, slot, valid); + } + + function _mintUnsafe( + address issuer, + address soul, + uint256 tokenId, + uint256 value, + uint256 slot, + bool valid + ) internal { + require( + _tokens[tokenId].soul == address(0), + "ERC5727: Cannot mint an assigned token" + ); + require(value != 0, "ERC5727: Cannot mint zero value"); + _beforeTokenMint(issuer, soul, tokenId, value, slot, valid); + _tokens[tokenId] = Token(issuer, soul, valid, value, slot); + _afterTokenMint(issuer, soul, tokenId, value, slot, valid); + emit Minted(soul, tokenId, value); + emit SlotChanged(tokenId, 0, slot); + } + + function _charge(uint256 tokenId, uint256 value) internal virtual { + _getTokenOrRevert(tokenId).value += value; + emit Charged(tokenId, value); + } + + function _chargeBatch(uint256[] memory tokenIds, uint256[] memory values) + internal + virtual + { + require( + tokenIds.length == values.length, + "ERC5727: unmatched size of tokenIds and values" + ); + for (uint256 i = 0; i < tokenIds.length; i++) { + _charge(tokenIds[i], values[i]); + } + } + + function _consume(uint256 tokenId, uint256 value) internal virtual { + require( + _getTokenOrRevert(tokenId).value > value, + "ERC5727: not enough balance" + ); + _getTokenOrRevert(tokenId).value -= value; + emit Consumed(tokenId, value); + } + + function _consumeBatch(uint256[] memory tokenIds, uint256[] memory values) + internal + virtual + { + require( + tokenIds.length == values.length, + "ERC5727: unmatched size of tokenIds and values" + ); + for (uint256 i = 0; i < tokenIds.length; i++) { + _consume(tokenIds[i], values[i]); + } + } + + function _revoke(uint256 tokenId) internal virtual { + require( + _getTokenOrRevert(tokenId).valid, + "ERC5727: Token is already invalid" + ); + _beforeTokenRevoke(tokenId); + _tokens[tokenId].valid = false; + _afterTokenRevoke(tokenId); + emit Revoked(_tokens[tokenId].soul, tokenId); + } + + function _revokeBatch(uint256[] memory tokenIds) internal virtual { + for (uint256 i = 0; i < tokenIds.length; i++) { + _revoke(tokenIds[i]); + } + } + + function _destroy(uint256 tokenId) internal virtual { + address soul = soulOf(tokenId); + uint256 slot = slotOf(tokenId); + uint256 value = valueOf(tokenId); + + _beforeTokenDestroy(tokenId); + delete _tokens[tokenId]; + _afterTokenDestroy(tokenId); + + emit Consumed(tokenId, value); + emit Destroyed(soul, tokenId); + emit SlotChanged(tokenId, slot, 0); + } + + function _isCreator() internal view virtual returns (bool) { + return _msgSender() == owner(); + } + + function _beforeView(uint256 tokenId) internal view virtual {} + + function _beforeTokenMint( + address issuer, + address soul, + uint256 tokenId, + uint256 value, + uint256 slot, + bool valid + ) internal virtual {} + + function _afterTokenMint( + address issuer, + address soul, + uint256 tokenId, + uint256 value, + uint256 slot, + bool valid + ) internal virtual {} + + function _beforeTokenRevoke(uint256 tokenId) internal virtual {} + + function _afterTokenRevoke(uint256 tokenId) internal virtual {} + + function _beforeTokenDestroy(uint256 tokenId) internal virtual {} + + function _afterTokenDestroy(uint256 tokenId) internal virtual {} + + function soulOf(uint256 tokenId) + public + view + virtual + override + returns (address) + { + _beforeView(tokenId); + return _getTokenOrRevert(tokenId).soul; + } + + function valueOf(uint256 tokenId) + public + view + virtual + override + returns (uint256) + { + _beforeView(tokenId); + return _getTokenOrRevert(tokenId).value; + } + + function slotOf(uint256 tokenId) + public + view + virtual + override + returns (uint256) + { + _beforeView(tokenId); + return _getTokenOrRevert(tokenId).slot; + } + + function issuerOf(uint256 tokenId) + public + view + virtual + override + returns (address) + { + return _getTokenOrRevert(tokenId).issuer; + } + + function isValid(uint256 tokenId) + public + view + virtual + override + returns (bool) + { + _beforeView(tokenId); + return _getTokenOrRevert(tokenId).valid; + } + + function _baseURI() internal view virtual returns (string memory) { + return ""; + } + + function contractURI() + public + view + virtual + override + returns (string memory) + { + string memory baseURI = _baseURI(); + return + bytes(baseURI).length > 0 + ? string( + abi.encodePacked( + baseURI, + "contract/", + Strings.toHexString(uint256(uint160(address(this)))) + ) + ) + : ""; + } + + function slotURI(uint256 slot) + public + view + virtual + override + returns (string memory) + { + string memory baseURI = _baseURI(); + return + bytes(baseURI).length > 0 + ? string(abi.encodePacked(baseURI, "slot/", slot.toString())) + : ""; + } + + function tokenURI(uint256 tokenId) + public + view + virtual + override + returns (string memory) + { + _getTokenOrRevert(tokenId); + bytes memory baseURI = bytes(_baseURI()); + if (baseURI.length > 0) { + return + string( + abi.encodePacked(baseURI, Strings.toHexString(tokenId, 32)) + ); + } + return ""; + } + + function name() public view virtual override returns (string memory) { + return _name; + } + + function symbol() public view virtual override returns (string memory) { + return _symbol; + } +} diff --git a/assets/eip-5727/contracts/ERC5727Delegate.sol b/assets/eip-5727/contracts/ERC5727Delegate.sol new file mode 100644 index 00000000000000..36cbe90e5e3816 --- /dev/null +++ b/assets/eip-5727/contracts/ERC5727Delegate.sol @@ -0,0 +1,276 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; + +import "./ERC5727.sol"; +import "./interfaces/IERC5727Delegate.sol"; +import "./ERC5727Enumerable.sol"; + +abstract contract ERC5727Delegate is ERC5727Enumerable, IERC5727Delegate { + struct DelegateRequest { + address soul; + uint256 value; + uint256 slot; + } + + using EnumerableSet for EnumerableSet.UintSet; + + uint256 private _delegateRequestCount; + + mapping(uint256 => DelegateRequest) private _delegateRequests; + + mapping(address => mapping(uint256 => bool)) private _mintAllowed; + + mapping(address => mapping(uint256 => bool)) private _revokeAllowed; + + mapping(address => EnumerableSet.UintSet) private _delegatedRequests; + + mapping(address => EnumerableSet.UintSet) private _delegatedTokens; + + function supportsInterface(bytes4 interfaceId) + public + view + virtual + override(IERC165, ERC5727Enumerable) + returns (bool) + { + return + interfaceId == type(IERC5727Delegate).interfaceId || + super.supportsInterface(interfaceId); + } + + function _mintDelegateAsDelegateOrCreator( + address operator, + uint256 delegateRequestId, + bool isCreator + ) private { + require( + isCreator || _mintAllowed[_msgSender()][delegateRequestId], + "ERC5727Delegate: Only contract creator or allowed operator can delegate" + ); + if (!isCreator) { + _mintAllowed[_msgSender()][delegateRequestId] = false; + _delegatedRequests[_msgSender()].remove(delegateRequestId); + } + _mintAllowed[operator][delegateRequestId] = true; + _delegatedRequests[operator].add(delegateRequestId); + } + + function _revokeDelegateAsDelegateOrCreator( + address operator, + uint256 tokenId, + bool isCreator + ) private { + require( + isCreator || _revokeAllowed[_msgSender()][tokenId], + "ERC5727Delegate: Only contract creator or allowed operator can delegate" + ); + if (!isCreator) { + _revokeAllowed[_msgSender()][tokenId] = false; + _delegatedTokens[_msgSender()].remove(tokenId); + } + _revokeAllowed[operator][tokenId] = true; + _delegatedTokens[operator].add(tokenId); + } + + function _mintAsDelegateOrCreator(uint256 delegateRequestId, bool isCreator) + private + { + require( + isCreator || _mintAllowed[_msgSender()][delegateRequestId], + "ERC5727Delegate: Only contract creator or allowed operator can mint" + ); + if (!isCreator) { + _mintAllowed[_msgSender()][delegateRequestId] = false; + } + _mint( + _delegateRequests[delegateRequestId].soul, + _delegateRequests[delegateRequestId].value, + _delegateRequests[delegateRequestId].slot + ); + } + + function _revokeAsDelegateOrCreator(uint256 tokenId, bool isCreator) + private + { + require( + isCreator || _revokeAllowed[_msgSender()][tokenId], + "ERC5727Delegate: Only contract creator or allowed operator can revoke" + ); + if (!isCreator) { + _revokeAllowed[_msgSender()][tokenId] = false; + } + _revoke(tokenId); + } + + function mintDelegate(address operator, uint256 delegateRequestId) + public + virtual + override + { + _mintDelegateAsDelegateOrCreator( + operator, + delegateRequestId, + _isCreator() + ); + } + + function mintDelegateBatch( + address[] memory operators, + uint256[] memory delegateRequestIds + ) public virtual override { + require( + operators.length == delegateRequestIds.length, + "ERC5727Delegate: operators and delegateRequestIds must have the same length" + ); + bool isCreator = _isCreator(); + for (uint256 i = 0; i < operators.length; i++) { + _mintDelegateAsDelegateOrCreator( + operators[i], + delegateRequestIds[i], + isCreator + ); + } + } + + function revokeDelegate(address operator, uint256 tokenId) + public + virtual + override + { + _revokeDelegateAsDelegateOrCreator(operator, tokenId, _isCreator()); + } + + function revokeDelegateBatch( + address[] memory operators, + uint256[] memory tokenIds + ) public virtual override { + require( + operators.length == tokenIds.length, + "ERC5727Delegate: operators and tokenIds must have the same length" + ); + bool isCreator = _isCreator(); + for (uint256 i = 0; i < operators.length; i++) { + _revokeDelegateAsDelegateOrCreator( + operators[i], + tokenIds[i], + isCreator + ); + } + } + + function delegateMint(uint256 delegateRequestId) public virtual override { + _mintAsDelegateOrCreator(delegateRequestId, _isCreator()); + } + + function delegateMintBatch(uint256[] memory delegateRequestIds) + public + virtual + override + { + bool isCreator = _isCreator(); + for (uint256 i = 0; i < delegateRequestIds.length; i++) { + _mintAsDelegateOrCreator(delegateRequestIds[i], isCreator); + } + } + + function delegateRevoke(uint256 tokenId) public virtual override { + _revokeAsDelegateOrCreator(tokenId, _isCreator()); + } + + function delegateRevokeBatch(uint256[] memory tokenIds) + public + virtual + override + { + bool isCreator = _isCreator(); + for (uint256 i = 0; i < tokenIds.length; i++) { + _revokeAsDelegateOrCreator(tokenIds[i], isCreator); + } + } + + function createDelegateRequest( + address soul, + uint256 value, + uint256 slot + ) external virtual override returns (uint256 delegateRequestId) { + require(_isCreator(), "ERC5727Delegate: You are not the creator"); + require( + value != 0, + "ERC5727Delegate: Value of Delegate Request cannot be zero" + ); + delegateRequestId = _delegateRequestCount; + _delegateRequests[_delegateRequestCount].soul = soul; + _delegateRequests[_delegateRequestCount].value = value; + _delegateRequests[_delegateRequestCount].slot = slot; + _delegateRequestCount++; + } + + function removeDelegateRequest(uint256 delegateRequestId) + external + virtual + override + { + require(_isCreator(), "ERC5727Delegate: You are not the creator"); + delete _delegateRequests[delegateRequestId]; + } + + function delegatedRequestsOf(address operator) + public + view + virtual + returns (uint256[] memory) + { + return _delegatedRequests[operator].values(); + } + + function delegatedTokensOf(address operator) + public + view + virtual + returns (uint256[] memory) + { + return _delegatedTokens[operator].values(); + } + + function soulOfDelegateRequest(uint256 delegateRequestId) + public + view + virtual + returns (address) + { + require( + delegateRequestId < _delegateRequestCount, + "ERC5727Delegate: Delegate request does not exist" + ); + return _delegateRequests[delegateRequestId].soul; + } + + function valueOfDelegateRequest(uint256 delegateRequestId) + public + view + virtual + returns (uint256) + { + require( + delegateRequestId < _delegateRequestCount, + "ERC5727Delegate: Delegate request does not exist" + ); + return _delegateRequests[delegateRequestId].value; + } + + function slotOfDelegateRequest(uint256 delegateRequestId) + public + view + virtual + returns (uint256) + { + require( + delegateRequestId < _delegateRequestCount, + "ERC5727Delegate: Delegate request does not exist" + ); + return _delegateRequests[delegateRequestId].slot; + } +} diff --git a/assets/eip-5727/contracts/ERC5727Enumerable.sol b/assets/eip-5727/contracts/ERC5727Enumerable.sol new file mode 100644 index 00000000000000..9d76812451b159 --- /dev/null +++ b/assets/eip-5727/contracts/ERC5727Enumerable.sol @@ -0,0 +1,188 @@ +//SPDX-License-Identifier: CC0-1.0 +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/utils/Counters.sol"; +import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; + +import "./ERC5727.sol"; +import "./interfaces/IERC5727Enumerable.sol"; + +abstract contract ERC5727Enumerable is ERC5727, IERC5727Enumerable { + using Counters for Counters.Counter; + using EnumerableSet for EnumerableSet.UintSet; + + mapping(address => EnumerableSet.UintSet) private _indexedTokenIds; + mapping(address => uint256) private _numberOfValidTokens; + + Counters.Counter private _emittedCount; + Counters.Counter private _soulsCount; + + function supportsInterface(bytes4 interfaceId) + public + view + virtual + override(IERC165, ERC5727) + returns (bool) + { + return + interfaceId == type(IERC5727Enumerable).interfaceId || + super.supportsInterface(interfaceId); + } + + function _beforeTokenMint( + address issuer, + address soul, + uint256 tokenId, + uint256 value, + uint256 slot, + bool valid + ) internal virtual override { + if (_indexedTokenIds[soul].length() == 0) { + _soulsCount.increment(); + } + //unused variables + issuer; + tokenId; + value; + slot; + valid; + } + + function _afterTokenMint( + address issuer, + address soul, + uint256 tokenId, + uint256 value, + uint256 slot, + bool valid + ) internal virtual override { + _indexedTokenIds[soul].add(tokenId); + if (valid) { + _numberOfValidTokens[soul] += 1; + } + //unused variables + issuer; + value; + slot; + valid; + } + + function _mint( + address soul, + uint256 value, + uint256 slot + ) internal virtual returns (uint256 tokenId) { + tokenId = _emittedCount.current(); + _mintUnsafe(soul, tokenId, value, slot, true); + emit Minted(soul, tokenId, value); + _emittedCount.increment(); + } + + function _mint( + address issuer, + address soul, + uint256 value, + uint256 slot + ) internal virtual returns (uint256 tokenId) { + tokenId = _emittedCount.current(); + _mintUnsafe(issuer, soul, tokenId, value, slot, true); + emit Minted(soul, tokenId, value); + _emittedCount.increment(); + } + + function _mintBatch( + address[] memory souls, + uint256 value, + uint256 slot + ) internal virtual returns (uint256[] memory tokenIds) { + tokenIds = new uint256[](souls.length); + for (uint256 i = 0; i < souls.length; i++) { + tokenIds[i] = _mint(souls[i], value, slot); + } + } + + function _afterTokenRevoke(uint256 tokenId) internal virtual override { + assert(_numberOfValidTokens[_getTokenOrRevert(tokenId).soul] > 0); + _numberOfValidTokens[_getTokenOrRevert(tokenId).soul] -= 1; + } + + function _beforeTokenDestroy(uint256 tokenId) internal virtual override { + address soul = soulOf(tokenId); + + if (_getTokenOrRevert(tokenId).valid) { + assert(_numberOfValidTokens[soul] > 0); + _numberOfValidTokens[soul] -= 1; + } + EnumerableSet.remove(_indexedTokenIds[soul], tokenId); + if (EnumerableSet.length(_indexedTokenIds[soul]) == 0) { + assert(_soulsCount.current() > 0); + _soulsCount.decrement(); + } + } + + function _increaseEmittedCount() internal { + _emittedCount.increment(); + } + + function _tokensOfSoul(address soul) + internal + view + returns (uint256[] memory tokenIds) + { + tokenIds = _indexedTokenIds[soul].values(); + require(tokenIds.length != 0, "ERC5727: the soul has no token"); + } + + function emittedCount() public view virtual override returns (uint256) { + return _emittedCount.current(); + } + + function soulsCount() public view virtual override returns (uint256) { + return _soulsCount.current(); + } + + function balanceOf(address soul) + public + view + virtual + override + returns (uint256) + { + return _indexedTokenIds[soul].length(); + } + + function hasValid(address soul) + public + view + virtual + override + returns (bool) + { + return _numberOfValidTokens[soul] > 0; + } + + function tokenOfSoulByIndex(address soul, uint256 index) + public + view + virtual + override + returns (uint256) + { + EnumerableSet.UintSet storage ids = _indexedTokenIds[soul]; + require( + index < EnumerableSet.length(ids), + "ERC5727: Token does not exist" + ); + return ids.at(index); + } + + function tokenByIndex(uint256 index) + public + view + virtual + override + returns (uint256) + { + return index; + } +} diff --git a/assets/eip-5727/contracts/ERC5727Example.sol b/assets/eip-5727/contracts/ERC5727Example.sol new file mode 100644 index 00000000000000..f357b05cd1fbf7 --- /dev/null +++ b/assets/eip-5727/contracts/ERC5727Example.sol @@ -0,0 +1,161 @@ +// SPDX-License-Identifier: CC0-1.0 + +pragma solidity ^0.8.0; + +import "./ERC5727Expirable.sol"; +import "./ERC5727Governance.sol"; +import "./ERC5727Delegate.sol"; +import "./ERC5727Shadow.sol"; +import "./ERC5727SlotEnumerable.sol"; +import "./ERC5727Recovery.sol"; + +contract ERC5727Example is + ERC5727Expirable, + ERC5727Governance, + ERC5727Delegate, + ERC5727SlotEnumerable, + ERC5727Shadow, + ERC5727Recovery +{ + string private _baseTokenURI; + + constructor( + string memory name, + string memory symbol, + address[] memory voters, + string memory baseTokenURI + ) ERC5727Governance(name, symbol, voters) { + _baseTokenURI = baseTokenURI; + } + + function _baseURI() internal view virtual override returns (string memory) { + return _baseTokenURI; + } + + function supportsInterface(bytes4 interfaceId) + public + view + virtual + override( + ERC5727Governance, + ERC5727Delegate, + ERC5727Expirable, + ERC5727Recovery, + ERC5727Shadow, + ERC5727SlotEnumerable + ) + returns (bool) + { + return super.supportsInterface(interfaceId); + } + + function _beforeView(uint256 tokenId) + internal + view + virtual + override(ERC5727, ERC5727Shadow) + { + ERC5727Shadow._beforeView(tokenId); + } + + function mint( + address soul, + uint256 value, + uint256 slot, + uint256 expiryDate, + bool shadowed + ) public virtual onlyOwner { + uint256 tokenId = _mint(soul, value, slot); + if (shadowed) { + _shadow(tokenId); + } + _setExpiryDate(tokenId, expiryDate); + } + + function revoke(uint256 tokenId) public virtual onlyOwner { + _revoke(tokenId); + } + + function mintBatch( + address[] memory souls, + uint256 value, + uint256 slot, + uint256 expiryDate, + bool shadowed + ) public virtual onlyOwner { + uint256[] memory tokenIds = _mintBatch(souls, value, slot); + for (uint256 i = 0; i < tokenIds.length; i++) { + if (shadowed) _shadow(tokenIds[i]); + _setExpiryDate(tokenIds[i], expiryDate); + } + } + + function revokeBatch(uint256[] memory tokenIds) public virtual onlyOwner { + _revokeBatch(tokenIds); + } + + function _beforeTokenMint( + address issuer, + address soul, + uint256 tokenId, + uint256 value, + uint256 slot, + bool valid + ) + internal + virtual + override(ERC5727, ERC5727Enumerable, ERC5727SlotEnumerable) + { + ERC5727Enumerable._beforeTokenMint( + issuer, + soul, + tokenId, + value, + slot, + valid + ); + ERC5727SlotEnumerable._beforeTokenMint( + issuer, + soul, + tokenId, + value, + slot, + valid + ); + } + + function _afterTokenMint( + address issuer, + address soul, + uint256 tokenId, + uint256 value, + uint256 slot, + bool valid + ) internal virtual override(ERC5727, ERC5727Enumerable) { + ERC5727Enumerable._afterTokenMint( + issuer, + soul, + tokenId, + value, + slot, + valid + ); + } + + function _afterTokenRevoke(uint256 tokenId) + internal + virtual + override(ERC5727, ERC5727Enumerable) + { + ERC5727Enumerable._afterTokenRevoke(tokenId); + } + + function _beforeTokenDestroy(uint256 tokenId) + internal + virtual + override(ERC5727, ERC5727Enumerable, ERC5727SlotEnumerable) + { + ERC5727Enumerable._beforeTokenDestroy(tokenId); + ERC5727SlotEnumerable._beforeTokenDestroy(tokenId); + } +} diff --git a/assets/eip-5727/contracts/ERC5727Expirable.sol b/assets/eip-5727/contracts/ERC5727Expirable.sol new file mode 100644 index 00000000000000..822ed927972a7d --- /dev/null +++ b/assets/eip-5727/contracts/ERC5727Expirable.sol @@ -0,0 +1,93 @@ +//SPDX-License-Identifier: CC0-1.0 +pragma solidity ^0.8.0; + +import "./ERC5727.sol"; +import "./interfaces/IERC5727Expirable.sol"; + +abstract contract ERC5727Expirable is IERC5727Expirable, ERC5727 { + mapping(uint256 => uint256) private _expiryDate; + + function expiryDate(uint256 tokenId) + public + view + virtual + override + returns (uint256) + { + uint256 date = _expiryDate[tokenId]; + require(date != 0, "ERC5727Expirable: No expiry date set"); + return date; + } + + function isExpired(uint256 tokenId) + public + view + virtual + override + returns (bool) + { + uint256 date = _expiryDate[tokenId]; + require(date != 0, "ERC5727Expirable: No expiry date set"); + return date < block.timestamp; + } + + function _setExpiryDate(uint256 tokenId, uint256 date) + internal + virtual + onlyOwner + { + require( + date > block.timestamp, + "ERC5727Expirable: Expiry date cannot be in the past" + ); + require( + date > _expiryDate[tokenId], + "ERC5727Expirable: Expiry date can only be extended" + ); + _expiryDate[tokenId] = date; + } + + function _setBatchExpiryDates( + uint256[] memory tokenIds, + uint256[] memory dates + ) internal { + require( + tokenIds.length == dates.length, + "ERC5727Expirable: Ids and token URIs length mismatch" + ); + for (uint256 i = 0; i < tokenIds.length; i++) { + _setExpiryDate(tokenIds[i], dates[i]); + } + } + + function _setBatchExpiryDates(uint256[] memory tokenIds, uint256 date) + internal + { + for (uint256 i = 0; i < tokenIds.length; i++) { + _setExpiryDate(tokenIds[i], date); + } + } + + function setExpiryDate(uint256 tokenId, uint256 date) public onlyOwner { + _setExpiryDate(tokenId, date); + } + + function setBatchExpiryDates( + uint256[] memory tokenIds, + uint256[] memory dates + ) public onlyOwner { + _setBatchExpiryDates(tokenIds, dates); + } + + function supportsInterface(bytes4 interfaceId) + public + view + virtual + override(IERC165, ERC5727) + returns (bool) + { + return + interfaceId == type(IERC5727Expirable).interfaceId || + super.supportsInterface(interfaceId); + } +} diff --git a/assets/eip-5727/contracts/ERC5727Governance.sol b/assets/eip-5727/contracts/ERC5727Governance.sol new file mode 100644 index 00000000000000..3c10bbe1ce9726 --- /dev/null +++ b/assets/eip-5727/contracts/ERC5727Governance.sol @@ -0,0 +1,171 @@ +// SPDX-License-Identifier: CC0-1.0 + +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; + +import "./ERC5727.sol"; +import "./interfaces/IERC5727Governance.sol"; +import "./ERC5727Enumerable.sol"; + +abstract contract ERC5727Governance is ERC5727Enumerable, IERC5727Governance { + using EnumerableSet for EnumerableSet.AddressSet; + + uint256 private _approvalRequestCount; + + struct ApprovalRequest { + address creator; + uint256 value; + uint256 slot; + } + + mapping(uint256 => ApprovalRequest) private _approvalRequests; + + EnumerableSet.AddressSet private _votersArray; + + mapping(address => mapping(uint256 => mapping(address => bool))) + private _mintApprovals; + + mapping(uint256 => mapping(address => uint256)) private _mintApprovalCounts; + + mapping(address => mapping(uint256 => bool)) private _revokeApprovals; + + mapping(uint256 => uint256) private _revokeApprovalCounts; + + bytes32 public constant VOTER_ROLE = keccak256("VOTER_ROLE"); + + constructor( + string memory name_, + string memory symbol_, + address[] memory voters_ + ) ERC5727(name_, symbol_) { + _setupRole(DEFAULT_ADMIN_ROLE, _msgSender()); + for (uint256 i = 0; i < voters_.length; i++) { + _votersArray.add(voters_[i]); + _setupRole(VOTER_ROLE, voters_[i]); + } + } + + function voters() public view virtual override returns (address[] memory) { + return _votersArray.values(); + } + + function approveMint(address soul, uint256 approvalRequestId) + public + virtual + override + onlyRole(VOTER_ROLE) + { + require( + !_mintApprovals[_msgSender()][approvalRequestId][soul], + "ERC5727Governance: You already approved this address" + ); + _mintApprovals[_msgSender()][approvalRequestId][soul] = true; + _mintApprovalCounts[approvalRequestId][soul] += 1; + if ( + _mintApprovalCounts[approvalRequestId][soul] == + _votersArray.length() + ) { + _resetMintApprovals(approvalRequestId, soul); + _mint( + _approvalRequests[approvalRequestId].creator, + soul, + _approvalRequests[approvalRequestId].value, + _approvalRequests[approvalRequestId].slot + ); + } + } + + function approveRevoke(uint256 tokenId) + public + virtual + override + onlyRole(VOTER_ROLE) + { + require( + !_revokeApprovals[_msgSender()][tokenId], + "ERC5727Governance: You already approved this address" + ); + _revokeApprovals[_msgSender()][tokenId] = true; + _revokeApprovalCounts[tokenId] += 1; + if (_revokeApprovalCounts[tokenId] == _votersArray.length()) { + _resetRevokeApprovals(tokenId); + _revoke(tokenId); + } + } + + function supportsInterface(bytes4 interfaceId) + public + view + virtual + override(IERC165, ERC5727Enumerable) + returns (bool) + { + return + interfaceId == type(IERC5727Governance).interfaceId || + super.supportsInterface(interfaceId); + } + + function _resetMintApprovals(uint256 approvalRequestId, address soul) + private + { + for (uint256 i = 0; i < _votersArray.length(); i++) { + _mintApprovals[_votersArray.at(i)][approvalRequestId][soul] = false; + } + _mintApprovalCounts[approvalRequestId][soul] = 0; + } + + function _resetRevokeApprovals(uint256 tokenId) private { + for (uint256 i = 0; i < _votersArray.length(); i++) { + _revokeApprovals[_votersArray.at(i)][tokenId] = false; + } + _revokeApprovalCounts[tokenId] = 0; + } + + function createApprovalRequest(uint256 value, uint256 slot) + external + virtual + override + { + require( + value != 0, + "ERC5727Governance: Value of Approval Request cannot be 0" + ); + _approvalRequests[_approvalRequestCount] = ApprovalRequest( + _msgSender(), + value, + slot + ); + _approvalRequestCount++; + } + + function removeApprovalRequest(uint256 approvalRequestId) + external + virtual + override + { + require( + _msgSender() == _approvalRequests[approvalRequestId].creator, + "ERC5727Governance: You are not the creator" + ); + delete _approvalRequests[approvalRequestId]; + } + + function addVoter(address newVoter) public onlyOwner { + require( + !hasRole(VOTER_ROLE, newVoter), + "ERC5727Governance: newVoter is already a voter" + ); + _votersArray.add(newVoter); + _setupRole(VOTER_ROLE, newVoter); + } + + function removeVoter(address voter) public onlyOwner { + require( + _votersArray.contains(voter), + "ERC5727Governance: Voter does not exist" + ); + _revokeRole(VOTER_ROLE, voter); + _votersArray.remove(voter); + } +} diff --git a/assets/eip-5727/contracts/ERC5727Recovery.sol b/assets/eip-5727/contracts/ERC5727Recovery.sol new file mode 100644 index 00000000000000..bf679ce63f36cd --- /dev/null +++ b/assets/eip-5727/contracts/ERC5727Recovery.sol @@ -0,0 +1,45 @@ +// SPDX-License-Identifier: CC0-1.0 +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; + +import "./ERC5727.sol"; +import "./interfaces/IERC5727Recovery.sol"; +import "./ERC5727Enumerable.sol"; + +abstract contract ERC5727Recovery is ERC5727Enumerable, IERC5727Recovery { + using ECDSA for bytes32; + + function recover(address soul, bytes memory signature) + public + virtual + override + { + address recipient = _msgSender(); + bytes32 messageHash = keccak256(abi.encodePacked(soul, recipient)); + bytes32 signedHash = messageHash.toEthSignedMessageHash(); + require(signedHash.recover(signature) == soul, "Invalid signature"); + uint256[] memory tokenIds = _tokensOfSoul(soul); + for (uint256 i = 0; i < tokenIds.length; i++) { + Token storage token = _getTokenOrRevert(tokenIds[i]); + address issuer = token.issuer; + uint256 value = token.value; + uint256 slot = token.slot; + bool valid = token.valid; + _destroy(tokenIds[i]); + _mintUnsafe(issuer, recipient, tokenIds[i], value, slot, valid); + } + } + + function supportsInterface(bytes4 interfaceId) + public + view + virtual + override(IERC165, ERC5727Enumerable) + returns (bool) + { + return + interfaceId == type(IERC5727Recovery).interfaceId || + super.supportsInterface(interfaceId); + } +} diff --git a/assets/eip-5727/contracts/ERC5727Shadow.sol b/assets/eip-5727/contracts/ERC5727Shadow.sol new file mode 100644 index 00000000000000..176d9bd485063a --- /dev/null +++ b/assets/eip-5727/contracts/ERC5727Shadow.sol @@ -0,0 +1,84 @@ +//SPDX-License-Identifier: CC0-1.0 +pragma solidity ^0.8.0; + +import "./ERC5727.sol"; +import "./interfaces/IERC5727Shadow.sol"; + +abstract contract ERC5727Shadow is ERC5727, IERC5727Shadow { + mapping(uint256 => bool) private _shadowed; + + modifier onlyManager(uint256 tokenId) { + require( + _msgSender() == _getTokenOrRevert(tokenId).soul || + _msgSender() == _getTokenOrRevert(tokenId).issuer, + "ERC5727Shadow: You are not the manager" + ); + _; + } + + function _beforeView(uint256 tokenId) internal view virtual override { + require( + !_shadowed[tokenId] || + _msgSender() == _getTokenOrRevert(tokenId).soul || + _msgSender() == _getTokenOrRevert(tokenId).issuer, + "ERC5727Shadow: the token is shadowed" + ); + } + + function _shadow(uint256 tokenId) internal virtual { + _getTokenOrRevert(tokenId); + _shadowed[tokenId] = true; + } + + function _unshadow(uint256 tokenId) internal virtual { + _getTokenOrRevert(tokenId); + _shadowed[tokenId] = false; + } + + function _isShadowed(uint256 tokenId) internal view virtual returns (bool) { + _getTokenOrRevert(tokenId); + return _shadowed[tokenId]; + } + + function isShadowed(uint256 tokenId) + public + view + virtual + override + onlyManager(tokenId) + returns (bool) + { + _getTokenOrRevert(tokenId); + return _shadowed[tokenId]; + } + + function shadow(uint256 tokenId) + public + virtual + override + onlyManager(tokenId) + { + _shadowed[tokenId] = true; + } + + function reveal(uint256 tokenId) + public + virtual + override + onlyManager(tokenId) + { + _shadowed[tokenId] = false; + } + + function supportsInterface(bytes4 interfaceId) + public + view + virtual + override(IERC165, ERC5727) + returns (bool) + { + return + interfaceId == type(IERC5727Shadow).interfaceId || + super.supportsInterface(interfaceId); + } +} diff --git a/assets/eip-5727/contracts/ERC5727SlotEnumerable.sol b/assets/eip-5727/contracts/ERC5727SlotEnumerable.sol new file mode 100644 index 00000000000000..6dc36723cc60db --- /dev/null +++ b/assets/eip-5727/contracts/ERC5727SlotEnumerable.sol @@ -0,0 +1,95 @@ +//SPDX-License-Identifier: CC0-1.0 +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; + +import "./ERC5727.sol"; +import "./interfaces/IERC5727SlotEnumerable.sol"; + +abstract contract ERC5727SlotEnumerable is ERC5727, IERC5727SlotEnumerable { + using EnumerableSet for EnumerableSet.UintSet; + + mapping(uint256 => EnumerableSet.UintSet) private _tokensInSlot; + + EnumerableSet.UintSet private _allSlots; + + function slotCount() public view override returns (uint256) { + return _allSlots.length(); + } + + function slotByIndex(uint256 index) public view override returns (uint256) { + require( + index < ERC5727SlotEnumerable.slotCount(), + "ERC5727SlotEnumerable: slot index out of bounds" + ); + return _allSlots.at(index); + } + + function _slotExists(uint256 slot) internal view virtual returns (bool) { + return _allSlots.length() != 0 && _allSlots.contains(slot); + } + + function tokenSupplyInSlot(uint256 slot) + public + view + override + returns (uint256) + { + if (!_slotExists(slot)) { + return 0; + } + return _tokensInSlot[slot].length(); + } + + function tokenInSlotByIndex(uint256 slot, uint256 index) + public + view + override + returns (uint256) + { + require( + index < ERC5727SlotEnumerable.tokenSupplyInSlot(slot), + "ERC5727SlotEnumerable: slot token index out of bounds" + ); + return _tokensInSlot[slot].at(index); + } + + function supportsInterface(bytes4 interfaceId) + public + view + virtual + override(IERC165, ERC5727) + returns (bool) + { + return + interfaceId == type(IERC5727SlotEnumerable).interfaceId || + super.supportsInterface(interfaceId); + } + + function _beforeTokenMint( + address issuer, + address soul, + uint256 tokenId, + uint256 value, + uint256 slot, + bool valid + ) internal virtual override { + if (!_slotExists(slot)) { + _allSlots.add(slot); + } + _tokensInSlot[slot].add(tokenId); + //unused + issuer; + soul; + value; + valid; + } + + function _beforeTokenDestroy(uint256 tokenId) internal virtual override { + uint256 slot = _getTokenOrRevert(tokenId).slot; + _tokensInSlot[slot].remove(tokenId); + if (_tokensInSlot[slot].length() == 0) { + _allSlots.remove(slot); + } + } +} diff --git a/assets/eip-5727/contracts/interfaces/IERC5727.sol b/assets/eip-5727/contracts/interfaces/IERC5727.sol new file mode 100644 index 00000000000000..dddfcce32c53e9 --- /dev/null +++ b/assets/eip-5727/contracts/interfaces/IERC5727.sol @@ -0,0 +1,98 @@ +//SPDX-License-Identifier: CC0-1.0 +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/utils/introspection/IERC165.sol"; + +/** + * @title ERC5727 Soulbound Token Interface + * @dev The core interface of the ERC5727 standard. + */ +interface IERC5727 is IERC165 { + /** + * @dev MUST emit when a token is minted. + * @param soul The address that the token is minted to + * @param tokenId The token minted + * @param value The value of the token minted + */ + event Minted(address indexed soul, uint256 indexed tokenId, uint256 value); + + /** + * @dev MUST emit when a token is revoked. + * @param soul The owner soul of the revoked token + * @param tokenId The revoked token + */ + event Revoked(address indexed soul, uint256 indexed tokenId); + + /** + * @dev MUST emit when a token is charged. + * @param tokenId The token to charge + * @param value The value to charge + */ + event Charged(uint256 indexed tokenId, uint256 value); + + /** + * @dev MUST emit when a token is consumed. + * @param tokenId The token to consume + * @param value The value to consume + */ + event Consumed(uint256 indexed tokenId, uint256 value); + + /** + * @dev MUST emit when a token is destroyed. + * @param soul The owner soul of the destroyed token + * @param tokenId The token to destroy. + */ + event Destroyed(address indexed soul, uint256 indexed tokenId); + + /** + * @dev MUST emit when the slot of a token is set or changed. + * @param tokenId The token of which slot is set or changed + * @param oldSlot The previous slot of the token + * @param newSlot The updated slot of the token + */ + event SlotChanged( + uint256 indexed tokenId, + uint256 indexed oldSlot, + uint256 indexed newSlot + ); + + /** + * @notice Get the value of a token. + * @dev MUST revert if the `tokenId` does not exist + * @param tokenId the token for which to query the balance + * @return The value of `tokenId` + */ + function valueOf(uint256 tokenId) external view returns (uint256); + + /** + * @notice Get the slot of a token. + * @dev MUST revert if the `tokenId` does not exist + * @param tokenId the token for which to query the slot + * @return The slot of `tokenId` + */ + function slotOf(uint256 tokenId) external view returns (uint256); + + /** + * @notice Get the owner soul of a token. + * @dev MUST revert if the `tokenId` does not exist + * @param tokenId the token for which to query the owner soul + * @return The address of the owner soul of `tokenId` + */ + function soulOf(uint256 tokenId) external view returns (address); + + /** + * @notice Get the validity of a token. + * @dev MUST revert if the `tokenId` does not exist + * @param tokenId the token for which to query the validity + * @return If the token is valid + */ + function isValid(uint256 tokenId) external view returns (bool); + + /** + * @notice Get the issuer of a token. + * @dev MUST revert if the `tokenId` does not exist + * @param tokenId the token for which to query the issuer + * @return The address of the issuer of `tokenId` + */ + function issuerOf(uint256 tokenId) external view returns (address); +} diff --git a/assets/eip-5727/contracts/interfaces/IERC5727Delegate.sol b/assets/eip-5727/contracts/interfaces/IERC5727Delegate.sol new file mode 100644 index 00000000000000..eeeeecdb9dc59f --- /dev/null +++ b/assets/eip-5727/contracts/interfaces/IERC5727Delegate.sol @@ -0,0 +1,100 @@ +// SPDX-License-Identifier: CC0-1.0 + +pragma solidity ^0.8.0; + +import "./IERC5727.sol"; + +/** + * @title ERC5727 Soulbound Token Delegate Interface + * @dev This extension allows delegation of (batch) minting and revocation of tokens to operator(s). + */ +interface IERC5727Delegate is IERC5727 { + /** + * @notice Delegate a one-time minting right to `operator` for `delegateRequestId` delegate request. + * @dev MUST revert if the caller does not have the right to delegate. + * @param operator The soul to which the minting right is delegated + * @param delegateRequestId The delegate request describing the soul, value and slot of the token to mint + */ + function mintDelegate(address operator, uint256 delegateRequestId) external; + + /** + * @notice Delegate one-time minting rights to `operators` for corresponding delegate request in `delegateRequestIds`. + * @dev MUST revert if the caller does not have the right to delegate. + * MUST revert if the length of `operators` and `delegateRequestIds` do not match. + * @param operators The souls to which the minting right is delegated + * @param delegateRequestIds The delegate requests describing the soul, value and slot of the tokens to mint + */ + function mintDelegateBatch( + address[] memory operators, + uint256[] memory delegateRequestIds + ) external; + + /** + * @notice Delegate a one-time revoking right to `operator` for `tokenId` token. + * @dev MUST revert if the caller does not have the right to delegate. + * @param operator The soul to which the revoking right is delegated + * @param tokenId The token to revoke + */ + function revokeDelegate(address operator, uint256 tokenId) external; + + /** + * @notice Delegate one-time minting rights to `operators` for corresponding token in `tokenIds`. + * @dev MUST revert if the caller does not have the right to delegate. + * MUST revert if the length of `operators` and `tokenIds` do not match. + * @param operators The souls to which the revoking right is delegated + * @param tokenIds The tokens to revoke + */ + function revokeDelegateBatch( + address[] memory operators, + uint256[] memory tokenIds + ) external; + + /** + * @notice Mint a token described by `delegateRequestId` delegate request as a delegate. + * @dev MUST revert if the caller is not delegated. + * @param delegateRequestId The delegate requests describing the soul, value and slot of the token to mint. + */ + function delegateMint(uint256 delegateRequestId) external; + + /** + * @notice Mint tokens described by `delegateRequestIds` delegate request as a delegate. + * @dev MUST revert if the caller is not delegated. + * @param delegateRequestIds The delegate requests describing the soul, value and slot of the tokens to mint. + */ + function delegateMintBatch(uint256[] memory delegateRequestIds) external; + + /** + * @notice Revoke a token as a delegate. + * @dev MUST revert if the caller is not delegated. + * @param tokenId The token to revoke. + */ + function delegateRevoke(uint256 tokenId) external; + + /** + * @notice Revoke multiple tokens as a delegate. + * @dev MUST revert if the caller is not delegated. + * @param tokenIds The tokens to revoke. + */ + function delegateRevokeBatch(uint256[] memory tokenIds) external; + + /** + * @notice Create a delegate request describing the `soul`, `value` and `slot` of a token. + * @param soul The soul of the delegate request. + * @param value The value of the delegate request. + * @param slot The slot of the delegate request. + * @return delegateRequestId The id of the delegate request + */ + function createDelegateRequest( + address soul, + uint256 value, + uint256 slot + ) external returns (uint256 delegateRequestId); + + /** + * @notice Remove a delegate request. + * @dev MUST revert if the delegate request does not exists. + * MUST revert if the caller is not the creator of the delegate request. + * @param delegateRequestId The delegate request to remove. + */ + function removeDelegateRequest(uint256 delegateRequestId) external; +} diff --git a/assets/eip-5727/contracts/interfaces/IERC5727Enumerable.sol b/assets/eip-5727/contracts/interfaces/IERC5727Enumerable.sol new file mode 100644 index 00000000000000..a0a5f9e36006c4 --- /dev/null +++ b/assets/eip-5727/contracts/interfaces/IERC5727Enumerable.sol @@ -0,0 +1,57 @@ +//SPDX-License-Identifier: CC0-1.0 +pragma solidity ^0.8.0; + +import "./IERC5727.sol"; + +/** + * @title ERC5727 Soulbound Token Enumerable Interface + * @dev This extension allows querying the tokens of a soul. + */ +interface IERC5727Enumerable is IERC5727 { + /** + * @notice Get the total number of tokens emitted. + * @return The total number of tokens emitted + */ + function emittedCount() external view returns (uint256); + + /** + * @notice Get the total number of souls. + * @return The total number of souls + */ + function soulsCount() external view returns (uint256); + + /** + * @notice Get the tokenId with `index` of the `soul`. + * @dev MUST revert if the `index` exceed the number of tokens owned by the `soul`. + * @param soul The soul whose token is queried for. + * @param index The index of the token queried for + * @return The token is queried for + */ + function tokenOfSoulByIndex(address soul, uint256 index) + external + view + returns (uint256); + + /** + * @notice Get the tokenId with `index` of all the tokens. + * @dev MUST revert if the `index` exceed the total number of tokens. + * @param index The index of the token queried for + * @return The token is queried for + */ + function tokenByIndex(uint256 index) external view returns (uint256); + + /** + * @notice Get the number of tokens owned by the `soul`. + * @dev MUST revert if the `soul` does not have any token. + * @param soul The soul whose balance is queried for + * @return The number of tokens of the `soul` + */ + function balanceOf(address soul) external view returns (uint256); + + /** + * @notice Get if the `soul` owns any valid tokens. + * @param soul The soul whose valid token infomation is queried for + * @return if the `soul` owns any valid tokens + */ + function hasValid(address soul) external view returns (bool); +} diff --git a/assets/eip-5727/contracts/interfaces/IERC5727Expirable.sol b/assets/eip-5727/contracts/interfaces/IERC5727Expirable.sol new file mode 100644 index 00000000000000..25336a5117e9e5 --- /dev/null +++ b/assets/eip-5727/contracts/interfaces/IERC5727Expirable.sol @@ -0,0 +1,48 @@ +//SPDX-License-Identifier: CC0-1.0 +pragma solidity ^0.8.0; + +import "./IERC5727.sol"; + +/** + * @title ERC5727 Soulbound Token Expirable Interface + * @dev This extension allows soulbound tokens to be expired. + */ +interface IERC5727Expirable is IERC5727 { + /** + * @notice Get the expire date of a token. + * @dev MUST revert if the `tokenId` token does not exist. + * @param tokenId The token for which the expiry date is queried + * @return The expiry date of the token + */ + function expiryDate(uint256 tokenId) external view returns (uint256); + + /** + * @notice Get if a token is expired. + * @dev MUST revert if the `tokenId` token does not exist. + * @param tokenId The token for which the expired status is queried + * @return If the token is expired + */ + function isExpired(uint256 tokenId) external view returns (bool); + + /** + * @notice Set the expiry date of a token. + * @dev MUST revert if the `tokenId` token does not exist. + * MUST revert if the `date` is in the past. + * @param tokenId The token whose expiry date is set + * @param date The expire date to set + */ + function setExpiryDate(uint256 tokenId, uint256 date) external; + + /** + * @notice Set the expiry date of multiple tokens. + * @dev MUST revert if the `tokenIds` tokens does not exist. + * MUST revert if the `dates` is in the past. + * MUST revert if the length of `tokenIds` and `dates` do not match. + * @param tokenIds The tokens whose expiry dates are set + * @param dates The expire dates to set + */ + function setBatchExpiryDates( + uint256[] memory tokenIds, + uint256[] memory dates + ) external; +} diff --git a/assets/eip-5727/contracts/interfaces/IERC5727Governance.sol b/assets/eip-5727/contracts/interfaces/IERC5727Governance.sol new file mode 100644 index 00000000000000..72a173edd7ebc2 --- /dev/null +++ b/assets/eip-5727/contracts/interfaces/IERC5727Governance.sol @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: CC0-1.0 +pragma solidity ^0.8.0; + +import "./IERC5727.sol"; + +/** + * @title ERC5727 Soulbound Token Consensus Interface + * @dev This extension allows minting and revocation of tokens by community voting. + */ +interface IERC5727Governance is IERC5727 { + /** + * @notice Get the voters of the contract. + * @return The array of the voters + */ + function voters() external view returns (address[] memory); + + /** + * @notice Approve to mint the token described by the `approvalRequestId` to `soul`. + * @dev MUST revert if the caller is not a voter. + * @param soul The soul which the token to mint to + * @param approvalRequestId The approval request describing the value and slot of the token to mint + */ + function approveMint(address soul, uint256 approvalRequestId) external; + + /** + * @notice Approve to revoke the `tokenId`. + * @dev MUST revert if the `tokenId` does not exist. + * @param tokenId The token to revert + */ + function approveRevoke(uint256 tokenId) external; + + /** + * @notice Create an approval request describing the `value` and `slot` of a token. + * @dev MUST revert when `value` is zero. + * @param value The value of the approval request to create + */ + function createApprovalRequest(uint256 value, uint256 slot) external; + + /** + * @notice Remove `approvalRequestId` approval request. + * @dev MUST revert if the caller is not the creator of the approval request. + * @param approvalRequestId The approval request to remove + */ + function removeApprovalRequest(uint256 approvalRequestId) external; + + /** + * @notice Add a new voter `newVoter`. + * @dev MUST revert if the caller is not an administrator. + * MUST revert if `newVoter` is already a voter. + * @param newVoter the new voter to add + */ + function addVoter(address newVoter) external; + + /** + * @notice Remove the `voter` from the contract. + * @dev MUST revert if the caller is not an administrator. + * MUST revert if `voter` is not a voter. + * @param voter the voter to remove + */ + function removeVoter(address voter) external; +} diff --git a/assets/eip-5727/contracts/interfaces/IERC5727Metadata.sol b/assets/eip-5727/contracts/interfaces/IERC5727Metadata.sol new file mode 100644 index 00000000000000..895ce3c5cc41c4 --- /dev/null +++ b/assets/eip-5727/contracts/interfaces/IERC5727Metadata.sol @@ -0,0 +1,44 @@ +//SPDX-License-Identifier: CC0-1.0 +pragma solidity ^0.8.0; + +import "./IERC5727.sol"; + +/** + * @title ERC5727 Soulbound Token Metadata Interface + * @dev This extension allows querying the metadata of soulbound tokens. + */ +interface IERC5727Metadata is IERC5727 { + /** + * @notice Get the name of the contract. + * @return The name of the contract + */ + function name() external view returns (string memory); + + /** + * @notice Get the symbol of the contract. + * @return The symbol of the contract + */ + function symbol() external view returns (string memory); + + /** + * @notice Get the URI of a token. + * @dev MUST revert if the `tokenId` token does not exist. + * @param tokenId The token whose URI is queried for + * @return The URI of the `tokenId` token + */ + function tokenURI(uint256 tokenId) external view returns (string memory); + + /** + * @notice Get the URI of the contract. + * @return The URI of the contract + */ + function contractURI() external view returns (string memory); + + /** + * @notice Get the URI of a slot. + * @dev MUST revert if the `slot` does not exist. + * @param slot The slot whose URI is queried for + * @return The URI of the `slot` + */ + function slotURI(uint256 slot) external view returns (string memory); +} diff --git a/assets/eip-5727/contracts/interfaces/IERC5727Recovery.sol b/assets/eip-5727/contracts/interfaces/IERC5727Recovery.sol new file mode 100644 index 00000000000000..ce715d07251732 --- /dev/null +++ b/assets/eip-5727/contracts/interfaces/IERC5727Recovery.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: CC0-1.0 +pragma solidity ^0.8.0; + +import "./IERC5727.sol"; + +/** + * @title ERC5727 Soulbound Token Recovery Interface + * @dev This extension allows recovering soulbound tokens from an address provided its signature. + */ +interface IERC5727Recovery is IERC5727 { + /** + * @notice Recover the tokens of `soul` with `signature`. + * @dev MUST revert if the signature is invalid. + * @param soul The soul whose tokens are recovered + * @param signature The signature signed by the `soul` + */ + function recover(address soul, bytes memory signature) external; +} diff --git a/assets/eip-5727/contracts/interfaces/IERC5727Shadow.sol b/assets/eip-5727/contracts/interfaces/IERC5727Shadow.sol new file mode 100644 index 00000000000000..fd4bab93b08eaa --- /dev/null +++ b/assets/eip-5727/contracts/interfaces/IERC5727Shadow.sol @@ -0,0 +1,31 @@ +//SPDX-License-Identifier: CC0-1.0 +pragma solidity ^0.8.0; + +import "./IERC5727.sol"; + +/** + * @title ERC5727 Soulbound Token Shadow Interface + * @dev This extension allows restricting the visibility of specific soulbound tokens. + */ +interface IERC5727Shadow is IERC5727 { + /** + * @notice Shadow a token. + * @dev MUST revert if the `tokenId` token does not exists. + * @param tokenId The token to shadow + */ + function shadow(uint256 tokenId) external; + + /** + * @notice Reveal a token. + * @dev MUST revert if the `tokenId` token does not exists. + * @param tokenId The token to reveal + */ + function reveal(uint256 tokenId) external; + + /** + * @notice Get if a token is shadowed. + * @dev MUST revert if the `tokenId` token does not exists. + * @param tokenId The token to query + */ + function isShadowed(uint256 tokenId) external returns (bool); +} diff --git a/assets/eip-5727/contracts/interfaces/IERC5727SlotEnumerable.sol b/assets/eip-5727/contracts/interfaces/IERC5727SlotEnumerable.sol new file mode 100644 index 00000000000000..fa224bcb8d1662 --- /dev/null +++ b/assets/eip-5727/contracts/interfaces/IERC5727SlotEnumerable.sol @@ -0,0 +1,45 @@ +//SPDX-License-Identifier: CC0-1.0 +pragma solidity ^0.8.0; + +import "./IERC5727.sol"; +import "./IERC5727Enumerable.sol"; + +/** + * @title ERC5727 Soulbound Token Slot Enumerable Interface + * @dev This extension allows querying information about slots. + */ +interface IERC5727SlotEnumerable is IERC5727, IERC5727Enumerable { + /** + * @notice Get the total number of slots. + * @return The total number of slots. + */ + function slotCount() external view returns (uint256); + + /** + * @notice Get the slot with `index` among all the slots. + * @dev MUST revert if the `index` exceed the total number of slots. + * @param index The index of the slot queried for + * @return The slot is queried for + */ + function slotByIndex(uint256 index) external view returns (uint256); + + /** + * @notice Get the number of tokens in a slot. + * @dev MUST revert if the slot does not exist. + * @param slot The slot whose number of tokens is queried for + * @return The number of tokens in the `slot` + */ + function tokenSupplyInSlot(uint256 slot) external view returns (uint256); + + /** + * @notice Get the tokenId with `index` of the `slot`. + * @dev MUST revert if the `index` exceed the number of tokens in the `slot`. + * @param slot The slot whose token is queried for. + * @param index The index of the token queried for + * @return The token is queried for + */ + function tokenInSlotByIndex(uint256 slot, uint256 index) + external + view + returns (uint256); +} diff --git a/assets/eip-5727/hardhat.config.ts b/assets/eip-5727/hardhat.config.ts new file mode 100644 index 00000000000000..9f381a947574b1 --- /dev/null +++ b/assets/eip-5727/hardhat.config.ts @@ -0,0 +1,16 @@ +import '@nomicfoundation/hardhat-toolbox' +import { HardhatUserConfig } from 'hardhat/types' + +const config: HardhatUserConfig = { + solidity: { + version: '0.8.17', + settings: { + optimizer: { + enabled: true, + runs: 1000, + }, + }, + }, +} + +export default config diff --git a/assets/eip-5727/package.json b/assets/eip-5727/package.json new file mode 100644 index 00000000000000..1a8e1a57bc1a06 --- /dev/null +++ b/assets/eip-5727/package.json @@ -0,0 +1,17 @@ +{ + "name": "eip-5727", + "version": "0.0.1", + "description": "EIP-5727: Semi-Fungible Soulbound Token", + "author": "Austin Zhu", + "dependencies": { + "@openzeppelin/contracts": "4.7.3" + }, + "devDependencies": { + "@nomicfoundation/hardhat-toolbox": "2.0.0", + "@typechain/hardhat": "6.1.3", + "@types/node": "18.7.13", + "hardhat": "2.11.2", + "ts-node": "10.9.1", + "typescript": "4.8.4" + } +} diff --git a/assets/eip-5727/test/ERC5727Example.test.ts b/assets/eip-5727/test/ERC5727Example.test.ts new file mode 100644 index 00000000000000..d29cac571a4c74 --- /dev/null +++ b/assets/eip-5727/test/ERC5727Example.test.ts @@ -0,0 +1,687 @@ +import { expect } from 'chai' +import { ethers } from 'hardhat' +import { loadFixture } from '@nomicfoundation/hardhat-network-helpers' +import { ERC5727Example, ERC5727Example__factory } from '../typechain' +import { SignerWithAddress } from '@nomiclabs/hardhat-ethers/signers' + +interface Fixture { + ERC5727ExampleFactory: ERC5727Example__factory + ERC5727ExampleContract: ERC5727Example + owner: SignerWithAddress + tokenOwnerSoul1: SignerWithAddress + tokenOwnerSoul2: SignerWithAddress + voterSoul1: SignerWithAddress + voterSoul2: SignerWithAddress + delegateSoul1: SignerWithAddress + delegateSoul2: SignerWithAddress +} + +describe('ERC5727Test', function () { + async function deployTokenFixture(): Promise { + const ERC5727ExampleFactory = await ethers.getContractFactory('ERC5727Example') + const [ + owner, + tokenOwnerSoul1, + tokenOwnerSoul2, + voterSoul1, + voterSoul2, + delegateSoul1, + delegateSoul2, + ] = await ethers.getSigners() + const ERC5727ExampleContract = await ERC5727ExampleFactory.deploy( + 'Soularis', + 'SOUL', + [voterSoul1.address, voterSoul2.address], + 'https://soularis-demo.s3.ap-northeast-1.amazonaws.com/perk/', + ) + await ERC5727ExampleContract.deployed() + return { + ERC5727ExampleFactory, + ERC5727ExampleContract, + owner, + tokenOwnerSoul1, + tokenOwnerSoul2, + voterSoul1, + voterSoul2, + delegateSoul1, + delegateSoul2, + } + } + + describe('ERC5727Example', function () { + it('Only contract owner can mint with mint', async function () { + const { ERC5727ExampleContract, owner, tokenOwnerSoul1, voterSoul1 } = await loadFixture( + deployTokenFixture, + ) + expect(await ERC5727ExampleContract.owner()).equal(owner.address) + + await ERC5727ExampleContract.connect(owner).mint( + tokenOwnerSoul1.address, + 1, + 1, + 2664539263, + false, + ) + + await expect( + ERC5727ExampleContract.connect(voterSoul1).mint( + tokenOwnerSoul1.address, + 1, + 2, + 2664539263, + false, + ), + ).be.reverted + }) + + it('Only contract owner can revoke with revoke', async function () { + const { ERC5727ExampleContract, owner, tokenOwnerSoul1, voterSoul1 } = await loadFixture( + deployTokenFixture, + ) + expect(await ERC5727ExampleContract.owner()).equal(owner.address) + + await ERC5727ExampleContract.connect(owner).mint( + tokenOwnerSoul1.address, + 1, + 1, + 2664539263, + false, + ) + + await ERC5727ExampleContract.connect(owner).revoke(0) + + await expect(ERC5727ExampleContract.connect(voterSoul1).revoke(0)).be.reverted + }) + + it('Balance of souls will increase when tokens are minted to them', async function () { + const { ERC5727ExampleContract, tokenOwnerSoul1, tokenOwnerSoul2 } = await loadFixture( + deployTokenFixture, + ) + await ERC5727ExampleContract.mintBatch( + [ + tokenOwnerSoul1.address, + tokenOwnerSoul1.address, + tokenOwnerSoul1.address, + tokenOwnerSoul2.address, + ], + 1, + 1, + 2664539263, + false, + ) + + expect(await ERC5727ExampleContract.balanceOf(tokenOwnerSoul1.address)).equal(3) + + expect(await ERC5727ExampleContract.balanceOf(tokenOwnerSoul2.address)).equal(1) + }) + + it('Token will be invalid if it is revoked', async function () { + const { ERC5727ExampleContract, owner, tokenOwnerSoul1 } = await loadFixture( + deployTokenFixture, + ) + expect(await ERC5727ExampleContract.owner()).equal(owner.address) + + await ERC5727ExampleContract.connect(owner).mint( + tokenOwnerSoul1.address, + 1, + 1, + 2664539263, + false, + ) + + await ERC5727ExampleContract.connect(owner).revoke(0) + + expect(await ERC5727ExampleContract.isValid(0)).equal(false) + }) + + it('Revert if a token not exist is revoked', async function () { + const { ERC5727ExampleContract } = await loadFixture(deployTokenFixture) + await expect(ERC5727ExampleContract.revoke(100)).be.reverted + }) + + it('Support Interface', async function () { + const { ERC5727ExampleContract } = await loadFixture(deployTokenFixture) + expect(await ERC5727ExampleContract.supportsInterface('0x35f61d8a')).to.equal(true) + expect(await ERC5727ExampleContract.supportsInterface('0x3da384b4')).to.equal(true) + expect(await ERC5727ExampleContract.supportsInterface('0x211ec300')).to.equal(true) + expect(await ERC5727ExampleContract.supportsInterface('0x2a8cf5aa')).to.equal(true) + expect(await ERC5727ExampleContract.supportsInterface('0x3ba738d1')).to.equal(true) + expect(await ERC5727ExampleContract.supportsInterface('0xba3e1a9d')).to.equal(true) + expect(await ERC5727ExampleContract.supportsInterface('0x379f4e66')).to.equal(true) + expect(await ERC5727ExampleContract.supportsInterface('0x3475cd68')).to.equal(true) + expect(await ERC5727ExampleContract.supportsInterface('0x3b741b9e')).to.equal(true) + }) + }) + + describe('ERC5727', function () { + it('The information of a token can be correctly queried', async function () { + const { ERC5727ExampleContract, owner, tokenOwnerSoul1, tokenOwnerSoul2 } = await loadFixture( + deployTokenFixture, + ) + await ERC5727ExampleContract.mintBatch( + [ + tokenOwnerSoul1.address, + tokenOwnerSoul1.address, + tokenOwnerSoul1.address, + tokenOwnerSoul2.address, + ], + 1, + 1, + 2664539263, + false, + ) + + expect(await ERC5727ExampleContract.slotOf(0)).equal(1) + expect(await ERC5727ExampleContract.soulOf(0)).equal(tokenOwnerSoul1.address) + expect(await ERC5727ExampleContract.issuerOf(0)).equal(owner.address) + expect(await ERC5727ExampleContract.isValid(0)).equal(true) + }) + + it('The information of the contract is correct', async function () { + const { ERC5727ExampleContract } = await loadFixture(deployTokenFixture) + expect(await ERC5727ExampleContract.name()).equal('Soularis') + expect(await ERC5727ExampleContract.symbol()).equal('SOUL') + }) + }) + + describe('ERC5727Delegate', function () { + it('Only contract owner can create or delete delegate request', async function () { + const { ERC5727ExampleContract, tokenOwnerSoul1, voterSoul1 } = await loadFixture( + deployTokenFixture, + ) + await ERC5727ExampleContract.createDelegateRequest(tokenOwnerSoul1.address, 1, 1) + await expect( + ERC5727ExampleContract.connect(voterSoul1).createDelegateRequest( + tokenOwnerSoul1.address, + 1, + 1, + ), + ).be.reverted + await expect(ERC5727ExampleContract.connect(voterSoul1).removeDelegateRequest(0)).be.reverted + await ERC5727ExampleContract.removeDelegateRequest(0) + }) + + it('Only contract owner or delegate can delegate', async function () { + const { ERC5727ExampleContract, tokenOwnerSoul1, delegateSoul1, delegateSoul2 } = + await loadFixture(deployTokenFixture) + await ERC5727ExampleContract.createDelegateRequest(tokenOwnerSoul1.address, 1, 1) + await ERC5727ExampleContract.mintDelegate(delegateSoul1.address, 0) + await ERC5727ExampleContract.connect(delegateSoul1).mintDelegate(delegateSoul2.address, 0) + await expect( + ERC5727ExampleContract.connect(delegateSoul1).mintDelegate(delegateSoul2.address, 0), + ).be.reverted + + await ERC5727ExampleContract.revokeDelegate(delegateSoul1.address, 0) + await ERC5727ExampleContract.connect(delegateSoul1).revokeDelegate(delegateSoul2.address, 0) + await expect( + ERC5727ExampleContract.connect(delegateSoul1).revokeDelegate(delegateSoul2.address, 0), + ).be.reverted + }) + + it('Only contract owner or delegate can mint or revoke', async function () { + const { ERC5727ExampleContract, tokenOwnerSoul1, delegateSoul1 } = await loadFixture( + deployTokenFixture, + ) + await ERC5727ExampleContract.createDelegateRequest(tokenOwnerSoul1.address, 1, 1) + await ERC5727ExampleContract.mintDelegate(delegateSoul1.address, 0) + await ERC5727ExampleContract.delegateMint(0) + await ERC5727ExampleContract.delegateMint(0) + await ERC5727ExampleContract.connect(delegateSoul1).delegateMint(0) + await expect(ERC5727ExampleContract.connect(delegateSoul1).delegateMint(0)).be.reverted + + await ERC5727ExampleContract.revokeDelegate(delegateSoul1.address, 1) + await ERC5727ExampleContract.delegateRevoke(0) + await ERC5727ExampleContract.connect(delegateSoul1).delegateRevoke(1) + await expect(ERC5727ExampleContract.connect(delegateSoul1).delegateRevoke(2)).be.reverted + }) + + it('Batch operations', async function () { + const { ERC5727ExampleContract, tokenOwnerSoul1, tokenOwnerSoul2, delegateSoul1 } = + await loadFixture(deployTokenFixture) + await ERC5727ExampleContract.createDelegateRequest(tokenOwnerSoul1.address, 1, 1) + await ERC5727ExampleContract.createDelegateRequest(tokenOwnerSoul2.address, 1, 1) + await ERC5727ExampleContract.mintDelegateBatch( + [delegateSoul1.address, delegateSoul1.address], + [0, 1], + ) + await ERC5727ExampleContract.connect(delegateSoul1).delegateMintBatch([0, 1]) + await ERC5727ExampleContract.delegateRevokeBatch([0, 1]) + }) + + it('Query of information of delegate request', async function () { + const { ERC5727ExampleContract, tokenOwnerSoul1 } = await loadFixture(deployTokenFixture) + await ERC5727ExampleContract.createDelegateRequest(tokenOwnerSoul1.address, 1, 1) + expect(await ERC5727ExampleContract.soulOfDelegateRequest(0)).to.equal( + tokenOwnerSoul1.address, + ) + expect(await ERC5727ExampleContract.valueOfDelegateRequest(0)).to.equal(1) + expect(await ERC5727ExampleContract.slotOfDelegateRequest(0)).to.equal(1) + }) + + it('Query for delegated requests or token of an operator', async function () { + const { ERC5727ExampleContract, tokenOwnerSoul1, tokenOwnerSoul2, delegateSoul1 } = + await loadFixture(deployTokenFixture) + await ERC5727ExampleContract.createDelegateRequest(tokenOwnerSoul1.address, 1, 1) + await ERC5727ExampleContract.createDelegateRequest(tokenOwnerSoul2.address, 1, 1) + await ERC5727ExampleContract.mintDelegateBatch( + [delegateSoul1.address, delegateSoul1.address], + [0, 1], + ) + expect(await ERC5727ExampleContract.delegatedRequestsOf(delegateSoul1.address)).to.eql([ + ethers.BigNumber.from(0), + ethers.BigNumber.from(1), + ]) + await ERC5727ExampleContract.delegateMintBatch([0, 1]) + await ERC5727ExampleContract.revokeDelegateBatch( + [delegateSoul1.address, delegateSoul1.address], + [0, 1], + ) + expect(await ERC5727ExampleContract.delegatedTokensOf(delegateSoul1.address)).to.eql([ + ethers.BigNumber.from(0), + ethers.BigNumber.from(1), + ]) + }) + }) + + describe('ERC5727Enumerable', function () { + it('EmittedCount, soulsCount, balance of a soul can be correctly queried', async function () { + const { ERC5727ExampleContract, tokenOwnerSoul1, tokenOwnerSoul2 } = await loadFixture( + deployTokenFixture, + ) + await ERC5727ExampleContract.mintBatch( + [ + tokenOwnerSoul1.address, + tokenOwnerSoul1.address, + tokenOwnerSoul1.address, + tokenOwnerSoul2.address, + ], + 1, + 1, + 2664539263, + false, + ) + expect(await ERC5727ExampleContract.emittedCount()).equal(4) + expect(await ERC5727ExampleContract.soulsCount()).equal(2) + expect(await ERC5727ExampleContract.balanceOf(tokenOwnerSoul1.address)).equal(3) + expect(await ERC5727ExampleContract.balanceOf(tokenOwnerSoul2.address)).equal(1) + }) + + it('Can correctly query if a soul holds valid tokens', async function () { + const { ERC5727ExampleContract, tokenOwnerSoul1, tokenOwnerSoul2 } = await loadFixture( + deployTokenFixture, + ) + await ERC5727ExampleContract.mintBatch( + [ + tokenOwnerSoul1.address, + tokenOwnerSoul1.address, + tokenOwnerSoul1.address, + tokenOwnerSoul2.address, + ], + 1, + 1, + 2664539263, + false, + ) + await ERC5727ExampleContract.revoke(0) + await ERC5727ExampleContract.revoke(3) + expect(await ERC5727ExampleContract.hasValid(tokenOwnerSoul1.address)).equal(true) + expect(await ERC5727ExampleContract.hasValid(tokenOwnerSoul2.address)).equal(false) + }) + + it('Can correctly query a token of a soul by index', async function () { + const { ERC5727ExampleContract, tokenOwnerSoul1, tokenOwnerSoul2 } = await loadFixture( + deployTokenFixture, + ) + await ERC5727ExampleContract.mintBatch( + [ + tokenOwnerSoul1.address, + tokenOwnerSoul1.address, + tokenOwnerSoul1.address, + tokenOwnerSoul2.address, + ], + 1, + 1, + 2664539263, + false, + ) + expect(await ERC5727ExampleContract.tokenOfSoulByIndex(tokenOwnerSoul1.address, 0)).equal(0) + expect(await ERC5727ExampleContract.tokenOfSoulByIndex(tokenOwnerSoul2.address, 0)).equal(3) + }) + + it('Revert when index overflows', async function () { + const { ERC5727ExampleContract, tokenOwnerSoul1, tokenOwnerSoul2 } = await loadFixture( + deployTokenFixture, + ) + await ERC5727ExampleContract.mintBatch( + [ + tokenOwnerSoul1.address, + tokenOwnerSoul1.address, + tokenOwnerSoul1.address, + tokenOwnerSoul2.address, + ], + 1, + 1, + 2664539263, + false, + ) + await expect(ERC5727ExampleContract.tokenOfSoulByIndex(tokenOwnerSoul1.address, 3)).be + .reverted + await expect(ERC5727ExampleContract.tokenOfSoulByIndex(tokenOwnerSoul2.address, 1)).be + .reverted + }) + }) + + describe('ERC5727Expirable', function () { + it('Query expiry date of a token and revert if the date is not set', async function () { + const { ERC5727ExampleContract, tokenOwnerSoul1, tokenOwnerSoul2 } = await loadFixture( + deployTokenFixture, + ) + await ERC5727ExampleContract.mintBatch( + [ + tokenOwnerSoul1.address, + tokenOwnerSoul1.address, + tokenOwnerSoul1.address, + tokenOwnerSoul2.address, + ], + 1, + 1, + 2664539263, + false, + ) + expect(await ERC5727ExampleContract.expiryDate(0)).equal(2664539263) + await ERC5727ExampleContract.createDelegateRequest(tokenOwnerSoul1.address, 1, 1) + await ERC5727ExampleContract.delegateMint(0) + await expect(ERC5727ExampleContract.expiryDate(4)).be.reverted + }) + + it('Query if a token is expired and revert if the date is not set', async function () { + const { ERC5727ExampleContract, tokenOwnerSoul1, tokenOwnerSoul2 } = await loadFixture( + deployTokenFixture, + ) + await ERC5727ExampleContract.mintBatch( + [ + tokenOwnerSoul1.address, + tokenOwnerSoul1.address, + tokenOwnerSoul1.address, + tokenOwnerSoul2.address, + ], + 1, + 1, + 2664539263, + false, + ) + expect(await ERC5727ExampleContract.isExpired(0)).equal(false) + await ERC5727ExampleContract.createDelegateRequest(tokenOwnerSoul1.address, 1, 1) + await ERC5727ExampleContract.delegateMint(0) + await expect(ERC5727ExampleContract.isExpired(4)).be.reverted + }) + + it('Revert when setting wrong expiry date', async function () { + const { ERC5727ExampleContract, tokenOwnerSoul1, tokenOwnerSoul2 } = await loadFixture( + deployTokenFixture, + ) + await ERC5727ExampleContract.mintBatch( + [ + tokenOwnerSoul1.address, + tokenOwnerSoul1.address, + tokenOwnerSoul1.address, + tokenOwnerSoul2.address, + ], + 1, + 1, + 2664539263, + false, + ) + await expect(ERC5727ExampleContract.setExpiryDate(0, 100000)).be.reverted + await expect(ERC5727ExampleContract.setExpiryDate(0, 2664539262)).be.reverted + }) + }) + + describe('ERC5727Governance', function () { + it('Approve to mint a token and approve to revoke the token', async function () { + const { ERC5727ExampleContract, tokenOwnerSoul1, voterSoul1, voterSoul2 } = await loadFixture( + deployTokenFixture, + ) + await ERC5727ExampleContract.createApprovalRequest(1, 1) + await ERC5727ExampleContract.connect(voterSoul1).approveMint(tokenOwnerSoul1.address, 0) + await expect(ERC5727ExampleContract.soulOf(0)).be.reverted + await ERC5727ExampleContract.connect(voterSoul2).approveMint(tokenOwnerSoul1.address, 0) + expect(await ERC5727ExampleContract.soulOf(0)).equal(tokenOwnerSoul1.address) + expect(await ERC5727ExampleContract.isValid(0)).equal(true) + await ERC5727ExampleContract.connect(voterSoul1).approveRevoke(0) + await ERC5727ExampleContract.connect(voterSoul2).approveRevoke(0) + expect(await ERC5727ExampleContract.isValid(0)).equal(false) + }) + + it('Revert when approving an approved request', async function () { + const { ERC5727ExampleContract, tokenOwnerSoul1, voterSoul1 } = await loadFixture( + deployTokenFixture, + ) + await ERC5727ExampleContract.createApprovalRequest(1, 1) + await ERC5727ExampleContract.connect(voterSoul1).approveMint(tokenOwnerSoul1.address, 0) + await expect( + ERC5727ExampleContract.connect(voterSoul1).approveMint(tokenOwnerSoul1.address, 0), + ).be.reverted + await ERC5727ExampleContract.connect(voterSoul1).approveRevoke(0) + await expect(ERC5727ExampleContract.connect(voterSoul1).approveRevoke(0)).be.reverted + }) + + it('Revert when a soul other than the creator try to remove an approval request', async function () { + const { ERC5727ExampleContract, voterSoul1 } = await loadFixture(deployTokenFixture) + await ERC5727ExampleContract.connect(voterSoul1).createApprovalRequest(1, 1) + await expect(ERC5727ExampleContract.removeApprovalRequest(0)).be.reverted + await ERC5727ExampleContract.connect(voterSoul1).removeApprovalRequest(0) + }) + + it('Revert when trying to remove a non voter', async function () { + const { ERC5727ExampleContract, delegateSoul1 } = await loadFixture(deployTokenFixture) + await expect(ERC5727ExampleContract.removeVoter(delegateSoul1.address)).be.reverted + }) + + it('Revert when trying to add a current voter', async function () { + const { ERC5727ExampleContract, voterSoul1 } = await loadFixture(deployTokenFixture) + await expect(ERC5727ExampleContract.addVoter(voterSoul1.address)).be.reverted + }) + + it('Only contract owner can add or remove voters', async function () { + const { ERC5727ExampleContract, voterSoul1 } = await loadFixture(deployTokenFixture) + await expect(ERC5727ExampleContract.connect(voterSoul1).removeVoter(voterSoul1.address)).be + .reverted + await ERC5727ExampleContract.removeVoter(voterSoul1.address) + await expect(ERC5727ExampleContract.connect(voterSoul1).addVoter(voterSoul1.address)).be + .reverted + await ERC5727ExampleContract.addVoter(voterSoul1.address) + }) + + it('Correctly get voters', async function () { + const { ERC5727ExampleContract, voterSoul1, voterSoul2 } = await loadFixture( + deployTokenFixture, + ) + expect(await ERC5727ExampleContract.voters()).eql([voterSoul1.address, voterSoul2.address]) + }) + }) + + describe('ERC5727Shadow', function () { + it('Only manager can shadow or reveal a token', async function () { + const { ERC5727ExampleContract, tokenOwnerSoul1, tokenOwnerSoul2 } = await loadFixture( + deployTokenFixture, + ) + await ERC5727ExampleContract.mintBatch( + [ + tokenOwnerSoul1.address, + tokenOwnerSoul1.address, + tokenOwnerSoul1.address, + tokenOwnerSoul2.address, + ], + 1, + 1, + 2664539263, + false, + ) + await expect(ERC5727ExampleContract.connect(tokenOwnerSoul2).shadow(0)).be.reverted + await ERC5727ExampleContract.connect(tokenOwnerSoul2).shadow(3) + await ERC5727ExampleContract.shadow(0) + await expect(ERC5727ExampleContract.connect(tokenOwnerSoul1).reveal(3)).be.reverted + await ERC5727ExampleContract.connect(tokenOwnerSoul1).reveal(0) + await ERC5727ExampleContract.reveal(3) + }) + + it('Only manager can query the shadowed information of a shadowed token', async function () { + const { ERC5727ExampleContract, tokenOwnerSoul1, tokenOwnerSoul2 } = await loadFixture( + deployTokenFixture, + ) + await ERC5727ExampleContract.mintBatch( + [ + tokenOwnerSoul1.address, + tokenOwnerSoul1.address, + tokenOwnerSoul1.address, + tokenOwnerSoul2.address, + ], + 1, + 1, + 2664539263, + true, + ) + await expect(ERC5727ExampleContract.connect(tokenOwnerSoul2).soulOf(0)).be.reverted + await ERC5727ExampleContract.valueOf(3) + await ERC5727ExampleContract.connect(tokenOwnerSoul2).valueOf(3) + await ERC5727ExampleContract.slotOf(3) + await ERC5727ExampleContract.connect(tokenOwnerSoul2).slotOf(3) + await ERC5727ExampleContract.isShadowed(3) + await ERC5727ExampleContract.connect(tokenOwnerSoul2).isShadowed(3) + }) + }) + + describe('ERC5727Recovery', function () { + it('Successful recovery', async function () { + const { ERC5727ExampleContract, tokenOwnerSoul1, tokenOwnerSoul2 } = await loadFixture( + deployTokenFixture, + ) + + await ERC5727ExampleContract.mintBatch( + [ + tokenOwnerSoul1.address, + tokenOwnerSoul1.address, + tokenOwnerSoul1.address, + tokenOwnerSoul2.address, + ], + 1, + 1, + 2664539263, + false, + ) + + const signature = await tokenOwnerSoul1.signMessage( + ethers.utils.arrayify( + ethers.utils.keccak256( + ethers.utils.solidityPack( + ['address', 'address'], + [tokenOwnerSoul1.address, tokenOwnerSoul2.address], + ), + ), + ), + ) + + await ERC5727ExampleContract.connect(tokenOwnerSoul2).recover( + tokenOwnerSoul1.address, + signature, + ) + + expect(await ERC5727ExampleContract.balanceOf(tokenOwnerSoul2.address)).to.equal(4) + }) + + it('Revert when the signature is invalid', async function () { + const { ERC5727ExampleContract, tokenOwnerSoul1, tokenOwnerSoul2 } = await loadFixture( + deployTokenFixture, + ) + + await ERC5727ExampleContract.mintBatch( + [ + tokenOwnerSoul1.address, + tokenOwnerSoul1.address, + tokenOwnerSoul1.address, + tokenOwnerSoul2.address, + ], + 1, + 1, + 2664539263, + false, + ) + + const signature = await tokenOwnerSoul1.signMessage( + ethers.utils.arrayify( + ethers.utils.keccak256( + ethers.utils.solidityPack( + ['address', 'address'], + [tokenOwnerSoul1.address, tokenOwnerSoul2.address], + ), + ), + ), + ) + + await expect(ERC5727ExampleContract.recover(tokenOwnerSoul1.address, signature)).to.be + .reverted + }) + + it('Revert when no token can be recover', async function () { + const { ERC5727ExampleContract, tokenOwnerSoul1, tokenOwnerSoul2 } = await loadFixture( + deployTokenFixture, + ) + + const signature = await tokenOwnerSoul1.signMessage( + ethers.utils.arrayify( + ethers.utils.keccak256( + ethers.utils.solidityPack( + ['address', 'address'], + [tokenOwnerSoul1.address, tokenOwnerSoul2.address], + ), + ), + ), + ) + + await expect( + ERC5727ExampleContract.connect(tokenOwnerSoul2).recover(tokenOwnerSoul1.address, signature), + ).to.be.reverted + }) + }) + + describe('ERC5727SlotEnumerable', function () { + it('Query for slot information', async function () { + const { ERC5727ExampleContract, tokenOwnerSoul1, tokenOwnerSoul2 } = await loadFixture( + deployTokenFixture, + ) + await ERC5727ExampleContract.mintBatch( + [tokenOwnerSoul1.address, tokenOwnerSoul2.address], + 1, + 1, + 2664539263, + false, + ) + await ERC5727ExampleContract.mintBatch( + [tokenOwnerSoul1.address, tokenOwnerSoul1.address, tokenOwnerSoul2.address], + 1, + 2, + 2664539263, + false, + ) + expect(await ERC5727ExampleContract.tokenSupplyInSlot(1)).to.equal(2) + expect(await ERC5727ExampleContract.slotCount()).to.equal(2) + expect(await ERC5727ExampleContract.slotByIndex(1)).to.equal(2) + expect(await ERC5727ExampleContract.tokenInSlotByIndex(2, 2)).to.equal(4) + }) + + it('Revert when index overflows', async function () { + const { ERC5727ExampleContract } = await loadFixture(deployTokenFixture) + await expect(ERC5727ExampleContract.tokenInSlotByIndex(2, 3)).to.be.reverted + await expect(ERC5727ExampleContract.slotByIndex(2)).to.be.reverted + }) + }) + + /* + describe('ERC5727Model', function () { + it('', async function (){ + const { ERC5727ExampleFactory, ERC5727ExampleContract, owner, tokenOwnerSoul1, tokenOwnerSoul2, voterSoul1, voterSoul2, delegateSoul1, delegateSoul2 } = await loadFixture(deployTokenFixture) + }) + }) + */ +}) diff --git a/assets/eip-5727/tsconfig.json b/assets/eip-5727/tsconfig.json new file mode 100644 index 00000000000000..757bca7516cb37 --- /dev/null +++ b/assets/eip-5727/tsconfig.json @@ -0,0 +1,31 @@ +{ + "compilerOptions": { + "target": "es2020", + "module": "commonjs", + "incremental": true, + "charset": "utf8", + "noEmitOnError": true, + "resolveJsonModule": true, + "stripInternal": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "skipLibCheck": true, + "declaration": true, + "noImplicitAny": true, + "strictNullChecks": true, + "noImplicitThis": true, + "alwaysStrict": true, + "noUnusedLocals": false, + "noUnusedParameters": false, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": false, + "inlineSourceMap": true, + "inlineSources": true, + "experimentalDecorators": true, + "strictPropertyInitialization": false, + "typeRoots": ["./node_modules/@types"] + }, + "include": ["**/*.ts"], + "exclude": ["node_modules", "typechain-types"] +} From 9c25bf0b19d92a0a00cd313a0cd5d8f887f113c6 Mon Sep 17 00:00:00 2001 From: VeegaLabs Official <112372274+VeegaLabsOfficial@users.noreply.github.com> Date: Wed, 19 Oct 2022 21:44:29 +0800 Subject: [PATCH 009/113] Add EIP-5585: EIP-721 NFT Authorization (#5585) * NFT authorization - ERC721 extension * Update and rename eip-4966.md to eip-5585.md * Update eip-5585.md * Update eip-5585.md * Update eip-5585.md * Update eip-5585.md * + Change CRLF to LF * Update EIPS/eip-5585.md * Update EIPS/eip-5585.md * Update the author and discussion info * Update the abstract info * Delete the information * Updated the description of this EIP * Update contract interfaces and EIP-5585 content * Update based on reviewer's suggestions * Update some descriptions of this EIP. * Update the sequences of the contract interfaces * Update some Typos * Update the EIP-721 reference Link * Update based on the reviewer's suggestions * Update the author info * Update the author info Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> --- EIPS/eip-5585.md | 137 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 EIPS/eip-5585.md diff --git a/EIPS/eip-5585.md b/EIPS/eip-5585.md new file mode 100644 index 00000000000000..a950616898a5b0 --- /dev/null +++ b/EIPS/eip-5585.md @@ -0,0 +1,137 @@ +--- +eip: 5585 +title: EIP-721 NFT Authorization +description: Allows NFT owners to authorize other users to use their NFTs. +author: Veega Labs (@VeegaLabsOfficial), Sean NG (@ngveega), Tiger (@tiger0x), Fred (@apan), Fov Cao (@fovcao) +discussions-to: https://ethereum-magicians.org/t/nft-authorization-erc721-extension/10661 +status: Draft +type: Standards Track +category: ERC +created: 2022-08-15 +requires: 721 +--- + +## Abstract + +This EIP separates an [EIP-721](./eip-721.md) NFT's ownership from its commercial usage rights to allow for the independent management of those rights. + +## Motivation + +Most NFTs have a simplified ownership verification mechanism, with a sole owner of an NFT. Under this model, other rights, such as exhibition, or derivative works, are not possible to grant, limiting the value and commercialization of NFTs. Therefore, the separation of an NFT's ownership and user rights can enhance its commercial value. + +With the development of the Metaverse, NFTs are becoming more diverse, with new use cases such as digital collections, virtual real estate, and commercial copyrights. Meanwhile, the commercial rights, such as exhibition, derivative or commercial authorization based on NFTs are becoming a potential business form. + + +## Specification + +The keywords “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY” and “OPTIONAL” in this document are to be interpreted as described in RFC 2119. + +### Contract Interface + +```solidity +interface IERC5585 { + + struct UserRecord { + address user; + uint expires + } + + /// @notice NFT holder authorizes his NFT to a user for a specified period of time + /// @dev The zero address indicates there is no user + /// @param tokenId The NFT which is authorized + /// @param user The user to whom the NFT is authorized + /// @param duration The period of time the authorization lasts + function userAuthorization(uint256 tokenId, address user, uint duration) external returns(uint); + + /// @notice NFT holder extends the duration of authorization + /// @dev The zero address indicates there is no user + /// @param tokenId The NFT which has been authorized + /// @param user The user to whom the NFT has been authorized + /// @param duration The new duration of the authorization + function durationUpdate(uint256 tokenId, address user, uint duration) external; + + /// @notice Get the authorization expired time of the specified NFT and user + /// @dev The zero address indicates there is no user + /// @param tokenId The NFT to get the user expires for + /// @param user The user who has been authorized + /// @return The authorization expired time + function userExpiresTime(uint256 tokenId, address user) external view returns(uint); + + /// @notice The contract owner can update the number of users that can be authorized per NFT + /// @param userLimit The number of users set by operators only + function userLimitUpdate(unit256 userLimit) external onlyOwner; + + /// @notice resetAllowed flag can be updated by contract owner to control whether the authorization can be revoked or not + /// @param resetAllowed It is the boolean flag + function resetAllowedUpdate(bool resetAllowed) external onlyOwner; + + + /// @notice Check if the token is available for authorization + /// @dev Throws if tokenId is not a valid NFT + /// @param tokenId The NFT to be checked the availability + /// @return true or false whether the NFT is available for authorization or not + function authorizationAvailabilityCheck (uint256 tokenId) public view returns(bool); + + /// @notice Clear authorization of a specified user + /// @dev The zero address indicates there is no user. The function works when resetAllowed is true and it will throw exception when false + /// @param tokenId The NFT on which the authorization based + /// @param user The user whose authorization will be cleared + function resetUser(uint256 tokenId, address user) external; + + /// @notice This is an OPTIONAL function that the operator MAY call, he can set the starting time of staking as a reward of the authorization for each user + /// @dev The zero address indicates there is no user + /// @param user To which user the staking time will be set + /// @param stakingTime The starting time of the staking for each user + function stakingTimeUpdate(address[] user, uint[] stakingTime) external; + + + /// @notice Emitted when the user of a NFT is changed or the authorization expires time is updated + /// param tokenId The NFT on which the authorization based + /// param indexed user The user to whom the NFT authorized + /// param expires The expires time of the authorization + event userAuthorization(uint256 indexed tokenId, address indexed user, uint expires); +} +``` + + +The `userAuthorization(uint256 tokenId, address user, uint duration)` function MAY be implemented as `public` or `external`. + +The `durationUpdate(uint256 tokenId, address user, uint duration)` function MAY be implemented as `public` or `external`. + +The `userExpiresTime(uint256 tokenId, address user)` function MAY be implemented as `pure` or `view`. + +The `userLimitUpdate(unit256 userLimit)` function MAY be implemented as`public` or `external`. + +The `resetAllowedUpdate(bool resetAllowed)` function MAY be implemented as `public` or `external`. + +The `authorizationAvailabilityCheck (uint256 tokenId)` function MAY be implemented as `pure` or `view`. + +The `resetUser(uint256 tokenId, address user)` function MAY be implemented as `public` or `external`. + +The `stakingTimeUpdate(address[] user, uint[] stakingTime)` function MAY be implemented as `public` or `external`. + +The `userAuthorization` event MUST be emittedwhen the user of a NFT is changed or the authorization expires time is updated. + +## Rationale + +First of all, NFT contract owner can set the maximum number of authorized users to each NFT and whether the NFT owner can cancel the authorization at any time to protect the interests of the parties involved. + +Secondly, this EIP combines the functions of staking and authorization, which means the NFT contract owner can update the number of authorized users to NFT owners depending on the period of staking. The function is optional, but it is a way to protect all parties from overhype and to ensure that the price of the NFT is more accurately to match its value. + +Thirdly, there is a resetAllowed flag to control the rights between the NFT owner and the users for the contract owner. If the flag is set to true, then the NFT owner can disable usage rights of all authorized users at any time. + +Finally, this design can be seamlessly integrated with third parties. It is an extension of EIP-721, therefore it can be easily integrated into a new NFT project. Other projects can directly interact with these interfaces and functions to implement their own types of transactions. For example, an announcement platform could use this EIP to allow all NFT owners to make authorization or deauthorization at any time. + +## Backwards Compatibility + +This standard is compatible with [EIP-721](./eip-721.md) since it is an extension of it. + +## Security Considerations + +If someone buys an NFT within the duration of an authorization, they will not have to stake anything, providing no incentive to cancel the authorization. + +To solve this problem, the authorization fee paid by the users will be held in an escrow contract for a period of time depending on the duration of the authorization. For example, if the authorization duration is 12 months and the fee in total is 10 ETH, then if the NFT is transferred after 3 months, then only 2.5 ETH would be sent and the remaining 7.5 ETH would be refunded. + +## Copyright + +Copyright and related rights waived via [CC0](../LICENSE.md). From e306f73bb8389d9a7ca6c44d1d9f7d7837567f31 Mon Sep 17 00:00:00 2001 From: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> Date: Wed, 19 Oct 2022 10:01:02 -0400 Subject: [PATCH 010/113] CI: Disable certain labels from becoming stale (#5655) * CI: Disable certain labels from being stale * Add manual merge queue to exempt * Update stale.yml --- .github/workflows/stale.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index ef732f82be6f67..f0eebe2a6c43e0 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -24,11 +24,13 @@ jobs: close-issue-message: This issue was closed due to inactivity. If you are still pursuing it, feel free to reopen it and respond to any feedback. days-before-issue-stale: 7 days-before-issue-close: 49 # 49 + 7 weeks = 3 months - exempt-issue-labels: discussions-to + exempt-issue-labels: discussions-to, e-consensus stale-issue-label: w-stale # PR config stale-pr-message: There has been no activity on this pull request for 2 weeks. It will be closed after 3 months of inactivity. If you would like to move this PR forward, please respond to any outstanding feedback or add a comment indicating that you have addressed all required feedback and are ready for a review. close-pr-message: This pull request was closed due to inactivity. If you are still pursuing it, feel free to reopen it and respond to any feedback or request a review in a comment. days-before-pr-stale: 14 days-before-pr-close: 42 # 42 + 14 weeks = 3 months + exempt-pr-labels: e-review, e-consensus + exempt-pr-milestones: "Manual Merge Queue" stale-pr-label: w-stale From 07ca2edee636b496d0ec2cc8bbbfecea30952782 Mon Sep 17 00:00:00 2001 From: Nick Mudge Date: Wed, 19 Oct 2022 10:25:09 -0400 Subject: [PATCH 011/113] EIP-2535: Additions and improvements (#5798) * EIP2535: Fixed misspelling, tweaked wording * EIP2535: Updated dependencies * added space * EIP2535: Make clear that facets do not have to be reusable * EIP-2535: additions and improvements --- EIPS/eip-2535.md | 3 +- assets/eip-2535/Contributors.md | 78 ++++++++++++++++++ ...2535-Diamonds-Reference-Implementation.zip | Bin 60883 -> 62263 bytes 3 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 assets/eip-2535/Contributors.md diff --git a/EIPS/eip-2535.md b/EIPS/eip-2535.md index 2e7d292dd2d1ad..c1dd91842ec75b 100644 --- a/EIPS/eip-2535.md +++ b/EIPS/eip-2535.md @@ -372,8 +372,7 @@ bytes4 functionSelector = bytes4(keccak256("myFunction(uint256)")); // get facet address of function address facet = ds.selectorToFacet[functionSelector]; bytes memory myFunctionCall = abi.encodeWithSelector(functionSelector, 4); -(bool success, uint result) = address(facet).delegatecall(myFunctionCall); -require(success, "myFunction failed"); +(bool success, bytes memory result) = address(facet).delegatecall(myFunctionCall); ``` 6. Instead of calling an external function defined in another facet you can instead create an internal function version of the external function. Add the internal version of the function to the facet that needs to use it. diff --git a/assets/eip-2535/Contributors.md b/assets/eip-2535/Contributors.md new file mode 100644 index 00000000000000..2e0ab06813e08e --- /dev/null +++ b/assets/eip-2535/Contributors.md @@ -0,0 +1,78 @@ +## Contributors + +* Andrew Redden (@androolloyd) +* Patrick Gallagher (@pi0neerpat) +* Leo Alt (@leonardoalt) +* Santiago Palladino (@spalladino) +* William Entriken (@fulldecent) +* Gonçalo Sá (@GNSPS) +* Brian Burns (@Droopy78) +* Ramesh Nair(@hiddentao) +* Jules Goddard (@JulesGoddard) +* Micah Zoltu (@MicahZoltu) +* Sam Wilson (@SamWilsn) +* William Morriss (@wjmelements) +* Zachary (@Remscar) +* Patrick Collins (@PatrickAlphaC) +* Hadrien Croubois (@Amxx) +* (@farreldarian) +* Kelvin Schoofs (@SchoofsKelvin) +* (@0xpApaSmURf) +* Nathan Sala (@nataouze) +* Anders Torbjornsen (@anders-torbjornsen) +* (@Pandapip1) +* Xavier Iturralde (@xibot) +* Coder Dan (@cinnabarhorse) +* GldnXross (@gldnxross) +* Christian Reitwiessner (@chriseth) +* Timidan (@Timidan) +* cyotee doge (@cyotee) +* Glory Praise Emmanuel (@emmaglorypraise) +* Ed Zynda (@ezynda3) +* Arthur Nesbitt (@nesbitta) +* Cliff Hall (@cliffhall) +* Tyler Scott Ward (@tylerscottward) +* Troy Murray (@DannyDesert) +* Dan Finlay (@danfinlay) +* Theodore Georgas (@tgeorgas) +* Aditya Palepu (@apalepu23) +* Ronan Sandford (@wighawag) +* Markus Waas (@gorgos) +* Blessing Emah (@BlessingEmah) +* Andrew Edwards +* Ashwin Yardi (@ashwinYardi) +* Marco Castignoli (@marcocastignoli) +* Blaine Bublitz (@phated) +* Bearded +* Nick Barry (@ItsNickBarry) +* (@Vectorized) +* Rachit Srivastava (@rachit2501) +* Neeraj Kashyap (@zomglings) +* Zac Denham (@zdenham) +* JA (@ubinatus) +* Carter Carlson (@cartercarlson) +* James Sayer (@jamessayer98) +* Arpit Temani (@temaniarpit27) +* Parv Garg (@parv3213) +* Publius (@publiuss) +* Guy Hance (@guyhance) +* Payn (@Ayuilos) +* Luis Schliesske (@gitpusha) +* Hilmar Orth (@hilmarx) +* Matthieu Marie Joseph (@Gauddel) +* David Uzochukwu (@davidpius95) +* TJ VanSlooten (@tjvsx) +* 0xFluffyBeard (@0xFluffyBeard) +* Florian Pfeiffer (@FlorianPfeifferKanaloaNetwork) +* Mick de Graaf(@MickdeGraaf) +* Alessio Delmonti (@Alexintosh) +* Neirenoir (@Neirenoir) +* Evert Kors (@Evert0x) +* Patrick Kim (@pakim249CAL) +* Ersan YAKIT (@ersanyakit) +* Matias Arazi (@MatiArazi) +* Lucas Grasso Ramos (@LucasGrasso) +* Nikolay Angelov (@NikolayAngelov) +* John Reynolds (@gweiworld) +* Viraz Malhotra (@viraj124) +* Kemal Emre Ballı (@emrbli) \ No newline at end of file diff --git a/assets/eip-2535/reference/EIP2535-Diamonds-Reference-Implementation.zip b/assets/eip-2535/reference/EIP2535-Diamonds-Reference-Implementation.zip index 08a4eb1a74e311ef59e645311ab0bbc4674a14b0..2b8022545c6792a61bc170c38a11fa09f3ef34c6 100644 GIT binary patch delta 2440 zcmZvcc{p3?9>zQ6DLec#`Eeq%GJHYQ38=Yrxx zqY&_C9OvF7W{s4h)avH1#_dxJU^y&HRBcXSZs-iPv_A!*Fuj8c) z_la8%@5EC|z3i6#qi5S0A^oAV9sI%8ByP6K&RWWX4fJd(@s!c$57NzV{HkFk)!}IJb8L;UO%}H>;Bt?@4ZzVHkPLD ziO*LE7dcAF(niH}LRQWYQa@JH)r};$sbqAtOO$zggTi;G zpOKz-zSB?n>D?K=)!L`kZ@!2Wrl$TYr%a8APIJ?3b$&6GzpcF8oP8!!W~r;Aq6E9U ztw~*OkV$Q5Ef*5rx zkDmWH%lHCX0!{U-_wM&UpS%<0s_J1?6HA&Og(BpeJG+|ioi#~<_+<%I@6LwH-M6M- za-(btq^KUb%Y!Sm$htH3rR9>$;*^Bf#;Ma^-*{wf-IqCKs6Fze3Vmv;Xd+~$iM)Zm zZ(;XB5B;RG+%=!(u42>JZ;dNO@TcD!I3VG$Okfgxn8zs>Y?h$byv zWXLt4o$ECuGqopuDp`FGHlMBM$Y?s#@Nwt)Z#Y~S8F^cpO;>h)U>fUDc)FIUZ)7D> zjLS}!sZ~vo;ICOdW!oY0q_w4B+~~P!Y(oS-GA4Y|jpp$p;dX&ug|G+RaLnsmX1$lW zQqu059`jwmpu5E47TIyt-a2N|!I{K<7umUT8%UreQzOR)`6P6maXGcu)Vv3Gi%r#pPc{7>Sac=QX@@RckuL-KyGR>F`{Zt}T?l+W2+i`nMH#-+^ zf)3WIqX~)L|1m5a7h!(YW@zmuKJd;pl)dS28%l=$6<&}KxaaYqlCM$59#0xrnp>e* zNs6+oi4%%Kf_h+OYBzssA~x&i)T{1Bg#OM#!RTj=Q(w4P8+=}&SaIEVP+7C!fR+!pTIXkw5_bnf32fYP4Aszr^wH)!592&XtA{r$PTFZUJlwAo zzXx8vYM5oPw|6Puq#=R4Pd$O$rJ>;A1zAmd%93Ag0zC{Gl5835b?}SW6vX#1pqlA4 zF}{8*hk$}R-3-WZCIvk74-JWPK?2{R4u+u+f_Df`&R7_54M7nE=3sClkO+AM+3N>U zj{PT7&NI|L0|JTyP=FQ)NzW>CWw4k90W~QOED{xl?#`mc$)C#qPKjr#LUXg?NPXz~ zoEfA+=Mgy2L1YF8Qs`g)L$#y@LW7eLfsiD#ZHiUk)l4BV1;KwZ3z`D~_Wu;ab6VVv zeDffXhWYG4nAhP}JcJeT$382z)TANb1)kXUFG0Xi`?IR?r8>9IOIXqH)&D8@Ah!io zZq>p0lrD$^KkLFu8;HfblIS7`sDdy(1?4RAHjOxRhnK>+C9My2rq2YzFMG%y?*FGd37s~O7yr~p47n=f zs429te33g5o(Tfh)=&o48R}>9>~$TcRe#gKm80CX#Va6SX3MD+UDf8MwyPk}_8q(% z5Gq^M&DOki>Dh0Cu(`f$ZiDIT0;TrGF)qBt%E@M0rcnI$ia2OZot=R48ji^K*SB65M>)6 rApSc{Pe3AUZex%Q0wpv~X+B&17;i861rFZDqwrS|jX(&_A3Xg9T3lI) delta 1248 zcmZ{kUuaTM9LKLm+racP=2dS_%`G(_&aAP;>LF!NAR9DC6fB|$T8tnth$14=o(3Wf ze{c0LiV-V_vGov9K~STIjVTO53g*=1pZVXX76hGp#a-{c>)eOKx!=$4dw!hr`<-`L z<;G8?)<33HF-nSz*yzb6tw-_J-cd~`$pQ??3kGU2xXi{A3h@k~f^~LQ@V^)F?P5v(~O5%Fd-kMpv*ra*^TK zs9Oy)X@;g6m)^JGuhSSU>;ZJSYiT03FQ*}Wh5ihz?x+QG1k z-VZ#J#pt`E9bC-zNw-ZBDDP}SdN`Mp52@fw!6b!>1Uhs~fYdOxBio9r3y-KSD#x24 zYAEhlrJlwjMxz5Q;6V{f0nX1S@|!x1U^p|8QjF&K46+wY=C#;vuQt#gcymGqT zEl_qzp_gThHoZJlaY)6%3OTnCxK^2uGg1Dm5M>a0t0wLAbxzUf8%`NMU|u$i9BoTm$fQJcbclRCfk;azgMHt%~d`=9PfsenqDvJ^}S|!9%t!R zpW1@+p|3*F`MT^v9@R-Tt`pk<*sPPIHOJS5w4x1+PQ-ZeYQwHwo{k9`%o6eA1`)mR dx4}56QaUB5Ts8+fxTm6zd{1-~<^I8~{sH*R51#-4 From 587ee675093206713bd04be51f6da961fd6c7104 Mon Sep 17 00:00:00 2001 From: Nick Mudge Date: Wed, 19 Oct 2022 11:12:34 -0400 Subject: [PATCH 012/113] EIP-2535: small change (#5800) * EIP-2535: small change * Removed space --- EIPS/eip-2535.md | 1 - assets/eip-2535/Contributors.md | 3 ++- ...2535-Diamonds-Reference-Implementation.zip | Bin 62263 -> 62275 bytes 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/EIPS/eip-2535.md b/EIPS/eip-2535.md index c1dd91842ec75b..359c44d0d46cb6 100644 --- a/EIPS/eip-2535.md +++ b/EIPS/eip-2535.md @@ -434,4 +434,3 @@ Security and domain experts can review the history of change of a diamond to det ## Copyright Copyright and related rights waived via [CC0](../LICENSE.md). - diff --git a/assets/eip-2535/Contributors.md b/assets/eip-2535/Contributors.md index 2e0ab06813e08e..de9097ea80fd7a 100644 --- a/assets/eip-2535/Contributors.md +++ b/assets/eip-2535/Contributors.md @@ -75,4 +75,5 @@ * Nikolay Angelov (@NikolayAngelov) * John Reynolds (@gweiworld) * Viraz Malhotra (@viraj124) -* Kemal Emre Ballı (@emrbli) \ No newline at end of file +* Kemal Emre Ballı (@emrbli) +* Zack Peng (@zackpeng) diff --git a/assets/eip-2535/reference/EIP2535-Diamonds-Reference-Implementation.zip b/assets/eip-2535/reference/EIP2535-Diamonds-Reference-Implementation.zip index 2b8022545c6792a61bc170c38a11fa09f3ef34c6..9be228ed4d37c246ae156dc3dce7aba3e6aee8dd 100644 GIT binary patch delta 2194 zcmZ`(c|4Ts9-nz_XJj{)hGA@DXoeWel|sc_OA)T6bSy1I#7Q`DZ<8onj`AR!l0jK> zISz`HG8M8+Msq34#2jWUV>k(QI?gbu!{>9~_mAg&zT5lzJd@`dFfG$>Lkab)!#S&7C1=c4$HN?m^rf>{=`=A6+1jN z7Jh6vbl9RqILt;7SdDZf5AF9zGq*pJQ^7;%3B_GHk*dH#QFIy)`Kc3A4supurYmHm zdn)b0B#O@9j!NjA58e58`(zgRLXz#7#ovF%^%{DmWiPl`?2C30>#<`89q7-HRxb}k zpmUf88Vl*V8dH_}11JBRlxXMt-uDvHuuZq@V`FVR^O0Lc!YRq^xg&kSHJ43n;rf$g zKVDAm@mKyIywKPg)|(NzSp1{6^lC3{S#gu43Jb!-gYDp^xn?Hlkc^QWq0q0zYW@6J!EVfFfYi7cm>V*6%$i`j|yC!($lNCq$SU~Qc10j&T%5XJ%8`Z z;j~=9+09Dtm{7d7+o&m0`wWFWIIDexYQ>N}CsF%9#+8v0Vq8z=FZFvrsQgm)p;odc zi9v#Xv_z&TRT-bvR8V=Gc!xUV2x%lwNPCujq`RHxE(X}8$bB$sHiXElYeDM z)iFKnZi(V8w{E|{Cgd^F_K#7ii)C>*8@q7*tYX?}pK0$sA`K~V9%;uC+?y{@@5;Rx zXEh{ZsZ*Y+F=ypxe(eh#8ceWcyt`uQ!=>IIVUy#9gtlDMf{6hUMom z1JK0&fRN+N)T-Nb@nG`RQ`k_0riK!U;;5zUq9W#eartCy%I|v|8%cy}L?LUiE%-Li z+0&#kU*Y=Pt>KoShZ7;VPG`4TS!Gi2tD!>1Ipu^@x?b^fGnJ&=cKoPBE!)#!*N;AR z8TIOpFdtVVhrA)n>Ni49XaN;L_cX=|FQ>D8-Jkd#>?9xYESKd5>9ZduId?6Au- z*D9Ma43zTy$mJz5a)hkqjzP2Npe6O*pzyAgZS7TE2EHvyI{K(*MFnmu6#M~t&a#JssB;}z4(by=lIW#UChc~7z~e6D%c*%w>-!(fxh1j4h_j-^%?nm1a95&eKpssJ=8se$&b)+Kd*Bm?oZyhP5K;&R`wq70#|EmHK1i`Zl}^40 z_Vm-?wejNG9H_h_Kv+>wJAen#@3aMp1$>MkyN<2A!wRsG33X``m^Mss$y}V>YYAM( zoFrj1&4Bf^^;*iu2=H`1ZVsfzabJz#@VFFIh+YfKG!O^3$5j+J*}hf|=F!T4JuU&Q zd=*=(p#YnOmfX}Kh{q^{WR?V!g4qb|#i*|71n)%rMu5oJ4a!&fH#95CW1E_AVA$a1ZoA~Jc-=WbND0y(#H#UG?<*!5ZENx1c*uyz}g^< z{iU=jK0IQ$q1NVnSzc!j0Xl0efEB?Z6JgNC(Gmnr@u@$F-zaf#a_UPMe^X?vHf;*s zR3H=w(^G0&3RRpYK!#=;eB89@Mt|xu_M1W+tu{p0tdM{(v$bRA83I(ZNfR+E26|?6 z1c6I@djGz^M?}mT38*`>1gOn+o#Gk@AY(28eirz1eFW3TTmm%O2?Dr8pfRT@!1!%~ zz&R-h(Y59TMRTfKI(s=sfDQ{tEbmM1nkj}S1-a1HO=&ba@QjE2e+Q33QG^`O&r6UolDd$^ZZW delta 2137 zcmZ{k2T)V#7ROV7fOJi05)4RPa_QxT5=9nJKnc>pXL$;^^tv=50iRSU>jx^M_&`x0 zhzODPSO*kXL_rZA5ReE`LJi$z#06eR0z2%?-aB{h{eI_v&iUW_ow+ScWE~Uv+zu|u zAUV0T5i(?x_+YSWf-o2XSO`EM4UQ%ER8uI2A2%a}-%%&GnP-O6>hhy=uMC|TNj~KJ z0IneNsn;rm+O!ycFnc?8^~t?(YQC%GbUvQ^1AR@>sOMvG19hN&N}K3IMZM^!}j)pH0F{G&dCH5jNITXp@zgxXRjs1NpXnp4vIHSg1A(#+~qe^_{qOM#i)21{cxdXqrofTgSNz(d&Ws3eM)Gp(8!OU#7aTx%#1} zVHDt(3NHTY=_mb&NX4ZFT9C6OY0jyWol|A-^0QX?1rp5Mn21G#xFMZePYsCeNrQUo z-7kyLr&n|OeLhuD<_V8XE#E`vmyHGX8FVMCMY}{?VBmC@NzDh3kZPlo30+csSwk?> ztAWb6;AExcBp2(TiGPhtSD|eylqHhX2i%Kh+aIsIo=d@~*wP)tE|B?eSzqk#Ud~Tu z$lE?P3U$stQ^wTRH$RX|N>0F(DMX0#mrkEP(Qx2pZB166{u`svN`J?I5WfKjy7T*p zyID}7kTXNC*Y$i-g{#TosEwsolMRG!OP=W+ip{hYF=W8nmi0BDaq2E2f*MT==8QzU0fcKw@``V7)&xyp!tT&fSCr&D?gpd@mDeW%QvAiDCTUhzh>E z<@~*f?>WZG@$JOtDXO`I2&*KvUrrDO;fvy0_~Rl8*I&imbRz2qcQj_Bf?hu#{K+lW zJ2q{(!*XuMc;Qg7_myY0l-a&o`lQ33+d|b z&J_ab2`4n3ZeM?zEk_8I(g<`neuJ-(iP03ZVV-o?4(pCLRn7X$Oh{2qOTW!(!4b!hXe10K2;28V1NEa`XxD2ZJJ}Sz4g%-C zvj%EkAcUL%cr}X$K>{d{_65tWN@a6JNe<^9Q{}Sexg+4rm>5D^md%Yo?idryuv1o3aGZenFbceOiJ zS!`|4Upi;v_G{un(L@Nh8Dxjw*w>!aa~?tz@5YXE^+*;3HwL<_YusfO3qsWW z$WF%tkp(R-BQCHlTXWcdttA0 Date: Wed, 19 Oct 2022 11:23:48 -0400 Subject: [PATCH 013/113] EIP-2535: small text change (#5801) * EIP-2535: small change * Removed space * EIP-2535: small text change --- EIPS/eip-2535.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EIPS/eip-2535.md b/EIPS/eip-2535.md index 359c44d0d46cb6..b7f33d091f1dc4 100644 --- a/EIPS/eip-2535.md +++ b/EIPS/eip-2535.md @@ -386,7 +386,7 @@ It is possible to create and deploy a set of facets that are reused by different The ability to use the same deployed facets for many diamonds reduces deployment costs. -Facets can also be designed for a specific diamond and not be reusable in other diamonds. +It is possible to implement facets in a way that makes them usable/composable/compatible with other facets. It is also possible to implement facets in a way that makes them not usable/composable/compatible with other facets. A function signature is the name of a function and its parameter types. Example function signature: `myfunction(uint256)`. A limitation is that two external functions with the same function signature can’t be added to the same diamond at the same time because a diamond, or any contract, cannot have two external functions with the same function signature. From 206a8fa92b072197df46837a58a9450360663f27 Mon Sep 17 00:00:00 2001 From: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> Date: Wed, 19 Oct 2022 17:46:35 -0400 Subject: [PATCH 014/113] Update EIP-2771: Add myself as an author and bring it up to date (#5607) * Adopt EIP-2771 * Rephrase security considerations * Move most of the motivation into the rationale * Update eip-2771.md --- EIPS/eip-2771.md | 173 ++++++++++++++--------------------------------- 1 file changed, 51 insertions(+), 122 deletions(-) diff --git a/EIPS/eip-2771.md b/EIPS/eip-2771.md index dd8142938fa8b2..117c47304a25e2 100644 --- a/EIPS/eip-2771.md +++ b/EIPS/eip-2771.md @@ -1,81 +1,44 @@ --- eip: 2771 title: Secure Protocol for Native Meta Transactions -author: Ronan Sandford (@wighawag), Liraz Siri (@lirazsiri), Dror Tirosh (@drortirosh), Yoav Weiss (@yoavw), Alex Forshtat (@forshtat), Hadrien Croubois (@Amxx), Sachin Tomar (@tomarsachin2271), Patrick McCorry (@stonecoldpat), Nicolas Venturo (@nventuro), Fabian Vogelsteller (@frozeman) +description: A contract interface for receiving meta transactions through a trusted forwarder +author: Ronan Sandford (@wighawag), Liraz Siri (@lirazsiri), Dror Tirosh (@drortirosh), Yoav Weiss (@yoavw), Alex Forshtat (@forshtat), Hadrien Croubois (@Amxx), Sachin Tomar (@tomarsachin2271), Patrick McCorry (@stonecoldpat), Nicolas Venturo (@nventuro), Fabian Vogelsteller (@frozeman), Pandapip1 (@Pandapip1) discussions-to: https://ethereum-magicians.org/t/erc-2771-secure-protocol-for-native-meta-transactions/4488 -status: Stagnant +status: Review type: Standards Track category: ERC created: 2020-07-01 --- -## Simple Summary - -A contract interface for receiving meta transactions through a trusted -forwarder. - ## Abstract -This ERC defines a minimal contract-level protocol that a compliant Recipient -contract needs to support in order to be capable of accepting a meta -transaction through a compliant Forwarder contract that it trusts to help it -identify the address of the Transaction Signer. - -No EVM-level protocol changes are proposed or required. +This EIP defines a contract-level protocol for `Recipient` contracts to accept meta-transactions through trusted `Forwarder` contracts. No protocol changes are made. `Recipient` contracts are sent the effective `msg.sender` (referred to as `_msgSender()`) and `msg.data` (referred to as `_msgData()`) by appending additional calldata. ## Motivation -There is a growing interest in making it possible for Ethereum contracts to -accept calls from externally owned accounts that do not have ETH to pay for -gas. - -This can be accomplished with meta transactions, which are transactions that -have been: +There is a growing interest in making it possible for Ethereum contracts to accept calls from externally owned accounts that do not have ETH to pay for gas. Solutions that allow for third parties to pay for gas costs are called meta transactions. For the purposes of this EIP, meta transactions are transactions that have been authorized by a **Transaction Signer** and relayed by an untrusted third party that pays for the gas (the **Gas Relay**). -1. Authorized by the **Transaction Signer**. For example, signed by an - externally owned account. -2. Relayed by an untrusted third party that pays for the gas (the **Gas - Relay**) +## Specification -`msg.sender` is a transaction parameter that can be inspected by a contract to -determine who signed the transaction. The integrity of this parameter is -guaranteed by the Ethereum EVM, but for a meta transaction securing -`msg.sender` is insufficient. +The keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119. -The problem is that for a contract that is not natively aware of meta -transactions, the `msg.sender` of the transaction will make it appear to be -coming from the **Gas Relay** and not the **Transaction Signer**. A secure -protocol for a contract to accept meta transactions needs to prevent the **Gas -Relay** from forging, modifying or duplicating requests by the **Transaction -Signer**. +### Definitions -## Specification +**Transaction Signer**: Signs & sends transactions to a Gas Relay -The keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", -"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be -interpreted as described in [RFC 2119](https://www.ietf.org/rfc/rfc2119.txt). +**Gas Relay**: Receives signed requests off-chain from Transaction Signers and pays gas to turn it into a valid transaction that goes through a Trusted Forwarder -Here is an example flow: +**Trusted Forwarder**: A contract trusted by the `Recipient` to correctly verify signatures and nonces before forwarding the request from Transaction Signers -![Example flow](../assets/eip-2771/example-flow.png) +**Recipient**: A contract that accepts meta-transactions through a Trusted Forwarder +### Example Flow -* **Transaction Signer** - entity that signs & sends to request to **Gas - Relay** -* **Gas Relay** - receives a signed request off-chain from **Transaction - Signer** and pays gas to turn it into a valid transaction that goes through -**Trusted Forwarder** -* **Trusted Forwarder** - a contract that is trusted by the `Recipient` to - correctly verify the signature and nonce before forwarding the request from -**Transaction Signer** -* **Recipient** - a contract that can securely accept meta-transactions - through a **Trusted Forwarder** by being compliant with this standard. +![Example flow](../assets/eip-2771/example-flow.png) ### Extracting The Transaction Signer address -The **Trusted Forwarder** is responsible for calling the **Recipient** contract -and MUST append the address of the **Transaction Signer** (20 bytes of data) to -the end of the call data. +The **Trusted Forwarder** is responsible for calling the **Recipient** contract and MUST append the address of the **Transaction Signer** (20 bytes of data) to the end of the call data. For example : @@ -83,15 +46,11 @@ For example : (bool success, bytes memory returnData) = to.call.value(value)(abi.encodePacked(data, from)); ``` -The **Recipient** contract can then extract the **Transaction Signer** address -by performing 3 operations: +The **Recipient** contract can then extract the **Transaction Signer** address by performing 3 operations: -1. Check that the **Forwarder** is trusted. How this is implemented is out of - the scope of this proposal. -2. Extract the **Transaction Signer** address from the last 20 bytes of the - call data and use that as the original `sender` of the transaction (instead of `msg.sender`) -3. If the `msg.sender` is not a trusted forwarder (or if the msg.data is - shorter than 20 bytes), then return the original `msg.sender` as it is. +1. Check that the **Forwarder** is trusted. How this is implemented is out of the scope of this proposal. +2. Extract the **Transaction Signer** address from the last 20 bytes of the call data and use that as the original `sender` of the transaction (instead of `msg.sender`) +3. If the `msg.sender` is not a trusted forwarder (or if the `msg.data` is shorter than 20 bytes), then return the original `msg.sender` as it is. The **Recipient** MUST check that it trusts the Forwarder to prevent it from extracting address data appended from an untrusted contract. This could result @@ -99,49 +58,53 @@ in a forged address. ### Protocol Support Discovery Mechanism -Unless a **Recipient** contract is being used by a particular frontend that -knows that this contract has support for native meta transactions, it would not -be possible to offer the user the choice of using meta-transaction to interact -with the contract. We thus need a mechanism by which the **Recipient** can let -the world know that it supports meta transactions. +Unless a **Recipient** contract is being used by a particular frontend that knows that this contract has support for native meta transactions, it would not be possible to offer the user the choice of using meta-transaction to interact with the contract. We thus need a mechanism by which the **Recipient** can let the world know that it supports meta transactions. -This is especially important for meta transactions to be supported at the Web3 -wallet level. Such wallets may not necessarily know anything about the -**Recipient** contract users may wish to interact with. +This is especially important for meta transactions to be supported at the Web3 wallet level. Such wallets may not necessarily know anything about the **Recipient** contract users may wish to interact with. -As a **Recipient** could trust forwarders with different interfaces and -capabilities (e.g., transaction batching, different message signing formats), -we need to allow wallets to discover which Forwarder is trusted. +As a **Recipient** could trust forwarders with different interfaces and capabilities (e.g., transaction batching, different message signing formats), we need to allow wallets to discover which Forwarder is trusted. -To provide this discovery mechanism a **Recipient** contract MUST implement -this function: +To provide this discovery mechanism a **Recipient** contract MUST implement this function: ```solidity -function isTrustedForwarder(address forwarder) external returns(bool); +function isTrustedForwarder(address forwarder) external view returns(bool); ``` -* That function MUST return true if the forwarder is trusted by the - Recipient. -* That function MUST return false if the forwarder is not trusted. -* That function MUST NOT throw a revert. +`isTrustedForwarder` MUST return `true` if the forwarder is trusted by the Recipient, otherwise it MUST return `false`. `isTrustedForwarder` MUST NOT revert. + +Internally, the **Recipient** MUST then accept a request from forwarder. -Internally, the **Recipient** MUST then accept a request from forwarder +`isTrustedForwarder` function MAY be called on-chain, and as such gas restrictions MUST be put in place. A Gas limit of 50k SHOULD be sufficient to making the decision either inside the contract, or delegating it to another contract and doing some memory access calculations, like querying a mapping. -That function can be called on-chain and as such gas restriction needs to be -put in place. +## Rationale -A Gas limit of 50k is enough for making the decision either inside the -contract, or delegating it to another contract and doing some memory access -calculations, like querying a mapping. +* Make it easy for contract developers to add support for meta + transactions by standardizing the simplest viable contract interface. +* Without support for meta transactions in the recipient contract, an externally owned + account can not use meta transactions to interact with the recipient contract. +* Without a standard contract interface, there is no standard way for a client + to discover whether a recipient supports meta transactions. +* Without a standard contract interface, there is no standard way to send a + meta transaction to a recipient. +* Without the ability to leverage a trusted forwarder every recipient contract + has to internally implement the logic required to accept meta transactions securely. +* Without a discovery protocol, there is no mechanism for a client to discover + whether a recipient supports a specific forwarder. +* Making the contract interface agnostic to the internal implementation + details of the trusted forwarder, makes it possible for a recipient contract + to support multiple forwarders with no change to code. +* `msg.sender` is a transaction parameter that can be inspected by a contract to determine who signed the transaction. The integrity of this parameter is guaranteed by the Ethereum EVM, but for a meta transaction securing `msg.sender` is insufficient. + * The problem is that for a contract that is not natively aware of meta transactions, the `msg.sender` of the transaction will make it appear to be coming from the **Gas Relay** and not the **Transaction Signer**. A secure protocol for a contract to accept meta transactions needs to prevent the **Gas Relay** from forging, modifying or duplicating requests by the **Transaction Signer**. +## Reference Implementation -### Recipient example +### Recipient Example ```solidity contract RecipientExample { function purchaseItem(uint256 itemId) external { address sender = _msgSender(); - ... perform the purchase for sender + // ... perform the purchase for sender } address immutable _trustedForwarder; @@ -165,45 +128,11 @@ contract RecipientExample { } ``` -## Rationale - -* Make it easy for contract developers to add support for meta - transactions by standardizing the simplest viable contract interface. - -* Without support for meta transactions in the recipient contract, an externally owned - account can not use meta transactions to interact with the recipient contract. - -* Without a standard contract interface, there is no standard way for a client - to discover whether a recipient supports meta transactions. - -* Without a standard contract interface, there is no standard way to send a - meta transaction to a recipient. - -* Without the ability to leverage a trusted forwarder every recipient contract - has to internally implement the logic required to accept meta transactions securely. - -* Without a discovery protocol, there is no mechanism for a client to discover - whether a recipient supports a specific forwarder. - -* Making the contract interface agnostic to the internal implementation - details of the trusted forwarder, makes it possible for a recipient contract - to support multiple forwarders with no change to code. - ## Security Considerations -A bad forwarder may allow forgery of the `msg.sender` returned from -`_msgSender()` and allow transactions to appear to be coming from any address. - -This means a recipient contract should be very careful which forwarder it -trusts and whether this can be modified. The power to change the forwarder -trusted by a recipient is equivalent to giving full control over the contract. -If this kind of control over the recipient is acceptable, it is recommended -that only the owner of the recipient contract be able to modify which forwarder -is trusted. Otherwise best to leave it unmodifiable, as in the example above. - -## Implementations +A malicious forwarder may forge the value of `_msgSender()` and effectively send transactions from any address. Therefore, `Recipient` contracts must be very careful in trusting forwarders. If a forwarder is upgradeable, then one must also trust that the contract won't perform a malicious upgrade. -An implementation of a base class for a recipient: [BaseRelayRecipient.sol](https://github.com/opengsn/forwarder/blob/master/contracts/BaseRelayRecipient.sol) +In addition, modifying which forwarders are trusted must be restricted, since an attacker could "trust" their own address to forward transactions, and therefore be able to forge transactions. It is recommended to have the list of trusted forwarders be immutable, and if this is not feasible, then only trusted contract owners should be able to modify it. ## Copyright From 4ff19045e65c15dea07b2b68788a7c8a0af33222 Mon Sep 17 00:00:00 2001 From: Nick Mudge Date: Wed, 19 Oct 2022 18:12:40 -0400 Subject: [PATCH 015/113] Make EIP-2535 Final (#5802) * EIP-2535: small change * Removed space * EIP-2535: small text change * Make EIP-2535 Final --- EIPS/eip-2535.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/EIPS/eip-2535.md b/EIPS/eip-2535.md index b7f33d091f1dc4..3b41dc004631d9 100644 --- a/EIPS/eip-2535.md +++ b/EIPS/eip-2535.md @@ -4,8 +4,7 @@ title: Diamonds, Multi-Facet Proxy description: Create modular smart contract systems that can be extended after deployment. author: Nick Mudge (@mudgen) discussions-to: https://ethereum-magicians.org/t/discussion-for-eip2535-diamonds/10459/ -status: Last Call -last-call-deadline: 2022-10-03 +status: Final type: Standards Track category: ERC created: 2020-02-22 From 15af728fa3b40f1aeae1476ca2b83981c684b1a6 Mon Sep 17 00:00:00 2001 From: StartfundInc <111301211+StartfundInc@users.noreply.github.com> Date: Wed, 19 Oct 2022 15:29:55 -0700 Subject: [PATCH 016/113] Update EIP-5528: Move to final (#5790) * eip-5528 final * Editor suggestions for EIP-5528 Co-authored-by: Sam Wilson --- EIPS/eip-5528.md | 60 ++++++++++++++++++++++++------------------------ 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/EIPS/eip-5528.md b/EIPS/eip-5528.md index f67b8bd2dab657..6c12af09a90ca4 100644 --- a/EIPS/eip-5528.md +++ b/EIPS/eip-5528.md @@ -4,8 +4,7 @@ title: Refundable Fungible Token description: Allows refunds for EIP-20 tokens by escrow smart contract author: StartfundInc (@StartfundInc) discussions-to: https://ethereum-magicians.org/t/eip-5528-refundable-token-standard/10494 -status: Last Call -last-call-deadline: 2022-10-16 +status: Review type: Standards Track category: ERC created: 2022-08-16 @@ -14,29 +13,27 @@ requires: 20 ## Abstract -This standard is an extension of [EIP-20](./eip-20.md). This specification provides a type of escrow service in the blockchain ecosystem, which includes the following capabilities. +This standard is an extension of [EIP-20](./eip-20.md). This specification defines a type of escrow service with the following flow: - The seller issues tokens. -- The seller creates an escrow smart contract with detailed escrow information. The information could include seller token contract address, buyer token contract address, lock period, exchange rate, the maximum number of buyers, minimum balance of buyers, additional escrow success conditions, etc. -- The seller funds seller tokens to the escrow contract. -- Buyers fund buyer tokens which are pre-defined in the escrow contract. +- The seller creates an escrow smart contract with detailed escrow information like contract addresses, lock period, exchange rate, additional escrow success conditions, etc. +- The seller funds seller tokens to the *Escrow Contract*. +- Buyers fund buyer tokens which are pre-defined in the *Escrow Contract*. - When the escrow status meets success, the seller can withdraw buyer tokens, and buyers can withdraw seller tokens based on exchange rates. - Buyers can withdraw (or refund) their funded token if the escrow process is failed or is in the middle of the escrow process. ## Motivation -Due to the nature of cryptocurrencies that guarantee anonymity, there is no way to get it back to the cryptocurrency that has already been paid. +Because of the pseudonymous nature of cryptocurrencies, there is no automatic recourse to recover funds that have already been paid. -To solve this problem, the Escrow service exists in the real world. However, it is challenging to implement an escrow service coordinated by a third-party arbitrator in a decentralized cryptocurrency ecosystem. To solve this, a smart contract was designed that acts as an escrow and devised a function where each token is sent back to the original wallet if the escrow is not completed. - -Escrow smart contract service should support refund EIP-20 tokens in the middle of the escrow process or when the operation fails. +In traditional finance, trusted escrow services solve this problem. In the world of decentralized cryptocurrency, however, it is possible to implement an escrow service without a third-party arbitrator. This standard defines an interface for smart contracts to act as an escrow service with a function where tokens are sent back to the original wallet if the escrow is not completed. ## Specification There are two types of contract for the escrow process: -- `Payable Contract`: The sellers and buyers use this token to fund the `Escrow Contract`. -- `Escrow Contract`: Defines the escrow policies and holds `Payable Contract`'s token for a certain period. +- *Payable Contract*: The sellers and buyers use this token to fund the *Escrow Contract*. +- *Escrow Contract*: Defines the escrow policies and holds *Payable Contract*'s token for a certain period. This standard proposes interfaces on top of the [EIP-20](./eip-20.md) standard. @@ -44,10 +41,13 @@ This standard proposes interfaces on top of the [EIP-20](./eip-20.md) standard. #### constructor -The `Escrow Contract` may define the following policies: +The *Escrow Contract* MUST define the following policies: + +- Seller token contract address +- Buyer token contract address + +The *Escrow Contract* MAY define the following policies: -- MUST include seller token contract address -- MUST include buyer token contract address - Escrow period - Maximum (or minimum) number of investors - Maximum (or minimum) number of tokens to fund @@ -58,17 +58,17 @@ The `Escrow Contract` may define the following policies: Funds `_value` amount of tokens to address `_to`. -In the case of `Escrow Contract`: +In the case of *Escrow Contract*: - `_to` MUST be the user address. - - `msg.sender` MUST be the payable contract address. + - `msg.sender` MUST be the *Payable Contract* address. - MUST check policy validations. -In the case of `Payable Contract`: +In the case of *Payable Contract*: - - The address `_to` MUST be the escrow contract address. - - MUST call EIP-20's `_transfer` likely function. - - Before calling `_transfer` function, MUST call the same function of the escrow contract interface. The parameter `_to` MUST be `msg.sender` to recognize the user address in the escrow contract. + - The address `_to` MUST be the *Escrow Contract* address. + - MUST call EIP-20's `transfer` function. + - Before calling `transfer` function, MUST call the same function of the *Escrow Contract* interface. The parameter `_to` MUST be `msg.sender` to recognize the user address in the *Escrow Contract*. ```solidity function escrowFund(address _to, uint256 _value) public returns (bool) @@ -78,17 +78,17 @@ function escrowFund(address _to, uint256 _value) public returns (bool) Refunds `_value` amount of tokens from address `_from`. -In the case of `Escrow Contract`: +In the case of *Escrow Contract*: - `_from` MUST be the user address. - - `msg.sender` MUST be the payable contract address. + - `msg.sender` MUST be the *Payable Contract* address. - MUST check policy validations. -In the case of `Payable Contract`: +In the case of *Payable Contract*: - - The address `_from` MUST be the escrow contract address. + - The address `_from` MUST be the *Escrow Contract* address. - MUST call EIP-20's `_transfer` likely function. - - Before calling `_transfer` function, MUST call the same function of the escrow contract interface. The parameter `_from` MUST be `msg.sender` to recognize the user address in the escrow contract. + - Before calling `_transfer` function, MUST call the same function of the *Escrow Contract* interface. The parameter `_from` MUST be `msg.sender` to recognize the user address in the *Escrow Contract*. ```solidity function escrowRefund(address _from, uint256 _value) public returns (bool) @@ -98,11 +98,11 @@ function escrowRefund(address _from, uint256 _value) public returns (bool) Withdraws funds from the escrow account. -In the case of `Escrow Contract`: +In the case of *Escrow Contract*: - MUST check the escrow process is completed. - MUST send the remaining balance of seller and buyer tokens to `msg.sender`'s seller and buyer contract wallets. -In the case of `Payable Contract`, it is optional. +In the case of *Payable Contract*, it is optional. ```solidity function escrowWithdraw() public returns (bool) @@ -131,7 +131,7 @@ The interfaces described in this EIP have been chosen to cover the refundable is The suggested 3 functions (`escrowFund`, `escrowRefund` and `escrowWithdraw`) are based on `transfer` function in EIP-20. -`escrowFund` send tokens to the escrow contract. The escrow contract can hold the contract in the escrow process or reject tokens if the policy does not meet. +`escrowFund` send tokens to the *Escrow Contract*. The *Escrow Contract* can hold the contract in the escrow process or reject tokens if the policy does not meet. `escrowRefund` can be invoked in the middle of the escrow process or when the escrow process is failed. @@ -152,7 +152,7 @@ This test case demonstrates the following conditions for exchanging seller/buyer ## Security Considerations -Since the escrow contract controls seller and buyer rights, flaws within the escrow contract will directly lead to unexpected behavior and potential loss of funds. +Since the *Escrow Contract* controls seller and buyer rights, flaws within the *Escrow Contract* will directly lead to unexpected behavior and potential loss of funds. ## Copyright From f44c4821e276b23ad8f22429270878e13176d270 Mon Sep 17 00:00:00 2001 From: Hadrien Croubois Date: Fri, 21 Oct 2022 14:17:37 +0200 Subject: [PATCH 017/113] Add EIP-5806: Account abstraction through delegate transaction (#5806) * first draft * rename document * relative links * fix EIP Walidator checks * Apply suggestions from code review Co-authored-by: lightclient <14004106+lightclient@users.noreply.github.com> * Remove unecessary requires Co-authored-by: lightclient <14004106+lightclient@users.noreply.github.com> --- EIPS/eip-5806.md | 70 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 EIPS/eip-5806.md diff --git a/EIPS/eip-5806.md b/EIPS/eip-5806.md new file mode 100644 index 00000000000000..4f2fd5133bbd4e --- /dev/null +++ b/EIPS/eip-5806.md @@ -0,0 +1,70 @@ +--- +eip: 5806 +title: Delegate transaction +description: Adds a new transaction type that allows a EOAs to execute arbitrary code through delegation +author: Hadrien Croubois (@Amxx) +discussions-to: https://ethereum-magicians.org/t/eip-5806-delegate-transaction/11409 +status: Draft +type: Standards Track +category: Core +created: 2022-10-20 +requires: 2718, 2930 +--- + +## Abstract + +This EIP adds a new transaction type that allows EOAs to execute arbitrary code using a delegate-call-like mechanism. + +## Motivation + +Account abstraction has been extensively discussed but the path toward mainstream adoption is still unclear. Some approaches, such as [EIP-4337](./eip-4337.md) hope to improve the usability of smart wallets, without addressing the issue of smart wallet support by applications. [EIP-3074](./eip-3074.md) proposes another approach that favors existing EOAs but comes with replay risks. + +This EIP proposes a simpler approach that addresses some of the objectives of account abstraction for EOAs with minimal change over the EVM. By allowing EOAs to perform delegate calls to a contract (similarly to how contracts can delegate calls to other contracts using [EIP-7](./eip-7.md)), EOAs will be able to have more control over what operations they want to execute. + +Performing a delegate call to a multicall contract (such as the one deployed to `0xcA11bde05977b3631167028862bE2a173976CA11`), EOAs would be able to batch multiple transactions into a single one, while being the `msg.sender` of all the sub calls. Other unforeseen logic could be implemented in smart contracts and used by EOA. This includes emitting events, using storage under the EOA's account, or even deploying contracts using `create2`. + +This EIP doesn't aim to replace other account abstraction proposals. It hopes to be an easy-to-implement alternative that would significantly improve the user experience of EOA owners in the near future. + +## Specification +The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC 2119. + +### Parameters +- `FORK_BLKNUM` = `TBD` +- `TX_TYPE` = TBD, > 0x02 ([EIP-1559](./eip-1559.md)) + +As of `FORK_BLOCK_NUMBER`, a new [EIP-2718](./eip-2718.md) transaction is introduced with `TransactionType` = `TX_TYPE(TBD)`. + +The intrinsic cost of the new transaction is inherited from [EIP-2930](./eip-2930.md), specifically `21000 + 16 * non-zero calldata bytes + 4 * zero calldata bytes + 1900 * access list storage key count + 2400 * access list address count`. + +The [EIP-2718](./eip-2718.md) `TransactionPayload` for this transaction is + +``` +rlp([chain_id, nonce, max_priority_fee_per_gas, max_fee_per_gas, gas_limit, destination, data, access_list, signature_y_parity, signature_r, signature_s]) +``` + +The definitions of all fields share the same meaning with [EIP-1559](./eip-1559.md). Note the absence of `amount` field in this transaction! + +The `signature_y_parity, signature_r, signature_s` elements of this transaction represent a secp256k1 signature over `keccak256(0x02 || rlp([chain_id, nonce, max_priority_fee_per_gas, max_fee_per_gas, gas_limit, destination, data, access_list]))`. + +The [EIP-2718](./eip-2718.md) `ReceiptPayload` for this transaction is `rlp([status, cumulative_transaction_gas_used, logs_bloom, logs])`. + +The execution of this new transaction type is equivalent to the delegate call mechanism introduced in [EIP-7](./eip-7.md), but performed by an EOA (the transaction sender). This implies that the code present at `destination`, if any, should be executed in the context of the sender. As a consequence, such a transaction can set and read storage under the EOA. It can also emit an event from the EOA. + +## Rationale + +EOAs are the most widely used type of wallet. + +This EIP would drastically expand the ability of EOAs to interact with smart contracts by using the pre-existing and well-understood delegation mechanism introduced in [EIP-7](./eip-7.md) and without adding new complexity to the EVM. + +## Backwards Compatibility + +No known backward compatibility issues thanks to the transaction envelope ([EIP-2718](./eip-2718.md)) + +## Security Considerations + +The nonce mechanism, already used in other transaction types, prevents replay attacks. This makes this approach safer, but also less powerful than [EIP-3074](./eip-3074.md). + +Contracts being called through this mechanism can execute any operation on behalf of the signer. Signers should be extremely careful signing this transaction (just like any other transaction). + +## Copyright +Copyright and related rights waived via [CC0](../LICENSE.md). From 921b75a511e047311aa593d91eb835ef97e757fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20Daubensch=C3=BCtz?= Date: Fri, 21 Oct 2022 14:30:02 +0200 Subject: [PATCH 018/113] Fix interface identifier to 0x8d7bac72 (#5811) - Thanks to https://ethereum-magicians.org/u/glu for pointing this out: https://ethereum-magicians.org/t/eip-4973-account-bound-tokens/8825/154 --- EIPS/eip-4973.md | 2 +- assets/eip-4973/ERC-4973.sol | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/EIPS/eip-4973.md b/EIPS/eip-4973.md index a03e78cd84c5be..0a0d042b9ee14c 100644 --- a/EIPS/eip-4973.md +++ b/EIPS/eip-4973.md @@ -54,7 +54,7 @@ pragma solidity ^0.8.6; /// @title Account-bound tokens /// @dev See https://eips.ethereum.org/EIPS/eip-4973 -/// Note: the ERC-165 identifier for this interface is 0x5164cf47 +/// Note: the ERC-165 identifier for this interface is 0x8d7bac72 interface IERC4973 { /// @dev This emits when ownership of any ABT changes by any mechanism. /// This event emits when ABTs are given or equipped and unequipped diff --git a/assets/eip-4973/ERC-4973.sol b/assets/eip-4973/ERC-4973.sol index c7cceef1051a67..4b7b60540a3bad 100644 --- a/assets/eip-4973/ERC-4973.sol +++ b/assets/eip-4973/ERC-4973.sol @@ -783,7 +783,7 @@ interface IERC721Metadata { /// @title Account-bound tokens /// @dev See https://eips.ethereum.org/EIPS/eip-4973 -/// Note: the ERC-165 identifier for this interface is 0x5164cf47 +/// Note: the ERC-165 identifier for this interface is 0x8d7bac72 interface IERC4973 { /// @dev This emits when ownership of any ABT changes by any mechanism. /// This event emits when ABTs are given or equipped and unequipped From 936923190ad958e1fa5acc6fed7a8f6518d6db90 Mon Sep 17 00:00:00 2001 From: donBarbos Date: Fri, 21 Oct 2022 17:37:20 +0000 Subject: [PATCH 019/113] Update eip-template.md (#5694) * Update eip-template.md * Update eip-template.md Co-authored-by: xinbenlv Co-authored-by: xinbenlv --- eip-template.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eip-template.md b/eip-template.md index 28d75a047fdcef..bfdf22623a6154 100644 --- a/eip-template.md +++ b/eip-template.md @@ -26,7 +26,7 @@ The motivation section should describe the "why" of this EIP. What problem does ## Specification The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 and RFC 8174. -The technical specification should describe the syntax and semantics of any new feature. The specification should be detailed enough to allow competing, interoperable implementations for any of the current Ethereum platforms (go-ethereum, parity, cpp-ethereum, ethereumj, ethereumjs, and [others](https://github.com/ethereum/wiki/wiki/Clients)). +The technical specification should describe the syntax and semantics of any new feature. The specification should be detailed enough to allow competing, interoperable implementations for any of the current Ethereum platforms (go-ethereum, parity, cpp-ethereum, ethereumj, ethereumjs, and [others](https://ethereum.org/en/developers/docs/nodes-and-clients/)). ## Rationale The rationale fleshes out the specification by describing what motivated the design and why particular design decisions were made. It should describe alternate designs that were considered and related work, e.g. how the feature is supported in other languages. From 07d0978289cd1265780af5ea4a5608bc155566bb Mon Sep 17 00:00:00 2001 From: donBarbos Date: Fri, 21 Oct 2022 17:41:50 +0000 Subject: [PATCH 020/113] Update README.md (#5695) * Update README.md * Update README.md Co-authored-by: Sam Wilson <57262657+SamWilsn@users.noreply.github.com> --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5f78250324f7b8..e573b9ef0d4169 100644 --- a/README.md +++ b/README.md @@ -31,8 +31,8 @@ This repository contains an "auto-merge" feature to ease the workload for EIP ed Pull requests in this repository must pass automated validation checks: -* HTML formatting and broken links are [checked](https://github.com/ethereum/EIPs/blob/master/.travis-ci.sh) using [html-proofer](https://rubygems.org/gems/html-proofer). -* EIP front matter and formatting are [checked](https://github.com/ethereum/EIPs/blob/master/.github/workflows/auto-merge-bot.yml) using [EIP Validator](https://github.com/ethereum/eipv). +* HTML formatting, broken links, and EIP front matter/formatting are [checked](https://github.com/ethereum/EIPs/blob/master/.github/workflows/ci.yml) using [html-proofer](https://rubygems.org/gems/html-proofer) and [`eipw`](https://github.com/ethereum/eipw). +* Required pull request reviews are [enforced](https://github.com/ethereum/EIPs/blob/master/.github/workflows/auto-review-bot.yml) using [EIP-Bot](https://github.com/ethereum/EIP-Bot/). It is possible to run the EIP validator locally: ```sh From 2665063d7f81ee4d9f0c9886f1c3b67f24f346b4 Mon Sep 17 00:00:00 2001 From: xinbenlv Date: Fri, 21 Oct 2022 11:11:44 -0700 Subject: [PATCH 021/113] Add Discord link of Eth R&D to the EIP Website header. (#5699) * Update with header * Update index.html --- index.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/index.html b/index.html index 688de18b81af97..8f042f7f2d82bb 100644 --- a/index.html +++ b/index.html @@ -4,7 +4,8 @@ ---

EIPs - Discord + Discord channel for ECH eip-editer + Discord channel for Eth R&D eip-editing RSS

Ethereum Improvement Proposals (EIPs) describe standards for the Ethereum platform, including core protocol specifications, client APIs, and contract standards. Network upgrades are discussed separately in the Ethereum Project Management repository.

From fe8e7305aaf1c73673b8a1baad3adc86383c3aa5 Mon Sep 17 00:00:00 2001 From: Brendan Kirby Date: Fri, 21 Oct 2022 11:12:22 -0700 Subject: [PATCH 022/113] README cleanup (#5708) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e573b9ef0d4169..c4a32923c23e75 100644 --- a/README.md +++ b/README.md @@ -76,4 +76,4 @@ eipv 2. Preview your local Jekyll site in your web browser at http://localhost:4000. -More information on Jekyll and GitHub pages [here](https://help.github.com/en/enterprise/2.14/user/articles/setting-up-your-github-pages-site-locally-with-jekyll). +More information on Jekyll and GitHub Pages [here](https://help.github.com/en/enterprise/2.14/user/articles/setting-up-your-github-pages-site-locally-with-jekyll). From 611981eb554a9669052cdf08f2cb85afc87a3e94 Mon Sep 17 00:00:00 2001 From: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> Date: Fri, 21 Oct 2022 14:45:54 -0400 Subject: [PATCH 023/113] CI: Add Markdown Linter (#5367) * Add markdown linter * Make changes to important files * Add the thing * Oof * Create markdown lint config * MD003: Force ATX heading style Co-authored-by: Micah Zoltu * Disable MD006 Co-authored-by: Micah Zoltu * Disable MD036 Co-authored-by: Micah Zoltu * Disable MD043 Co-authored-by: Micah Zoltu * Disable MD039 Co-authored-by: Micah Zoltu * Disable MD007 Co-authored-by: Micah Zoltu * Disable MD027 Co-authored-by: Micah Zoltu * Disable MD037 Co-authored-by: Micah Zoltu * Disable MD014 Co-authored-by: Micah Zoltu * Disable rules by default Co-authored-by: Micah Zoltu * Disable MD002 Co-authored-by: Micah Zoltu * Disable MD045 (sigh) Co-authored-by: Micah Zoltu * Apply suggestions from code review Co-authored-by: Micah Zoltu * Rename .markdownlint.yaml to config/.markdownlint.yaml * Update ci.yml * Update config/.markdownlint.yaml * Re-enable MD022 Co-authored-by: xinbenlv * Rephrase with @xinbenlv's suggestion Co-authored-by: xinbenlv * Fix markdown again Co-authored-by: Micah Zoltu Co-authored-by: xinbenlv Co-authored-by: Sam Wilson --- .github/workflows/ci.yml | 20 ++++ EIPS/eip-1.md | 41 ++++---- README.md | 13 +-- config/.markdownlint.yaml | 200 ++++++++++++++++++++++++++++++++++++++ eip-template.md | 11 ++- last-call.xml | 2 +- 6 files changed, 259 insertions(+), 28 deletions(-) create mode 100644 config/.markdownlint.yaml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 662c7b49bff775..b298881691bed5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -92,3 +92,23 @@ jobs: with: token: ${{ secrets.GITHUB_TOKEN }} unchecked: 1, 5069 + + markdownlint: + name: Markdown Linter + runs-on: ubuntu-latest + steps: + - name: Checkout EIP Repository + uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b + + - name: Delete Unchanged Files + id: changed-files + uses: Pandapip1/delete-unchanged-files@0937c94da2e9f9f262bbf2035e75065a1fd04bcf + + - name: Lint + uses: DavidAnson/markdownlint-cli2-action@16d9da45919c958a8d1ddccb4bd7028e8848e4f1 + with: + command: config + globs: | + config/.markdownlint.yaml + EIPS/*.md + *.md diff --git a/EIPS/eip-1.md b/EIPS/eip-1.md index 3c7b466d950abc..a580d23501dc42 100644 --- a/EIPS/eip-1.md +++ b/EIPS/eip-1.md @@ -38,6 +38,7 @@ An EIP must meet certain minimum criteria. It must be a clear and complete descr ### Special requirements for Core EIPs If a **Core** EIP mentions or proposes changes to the EVM (Ethereum Virtual Machine), it should refer to the instructions by their mnemonics and define the opcodes of those mnemonics at least once. A preferred way is the following: + ``` REVERT (0xfe) ``` @@ -48,13 +49,13 @@ REVERT (0xfe) Parties involved in the process are you, the champion or *EIP author*, the [*EIP editors*](#eip-editors), and the [*Ethereum Core Developers*](https://github.com/ethereum/pm). -Before you begin writing a formal EIP, you should vet your idea. Ask the Ethereum community first if an idea is original to avoid wasting time on something that will be rejected based on prior research. It is thus recommended to open a discussion thread on [the Ethereum Magicians forum](https://ethereum-magicians.org/) to do this. +Before you begin writing a formal EIP, you should vet your idea. Ask the Ethereum community first if an idea is original to avoid wasting time on something that will be rejected based on prior research. It is thus recommended to open a discussion thread on [the Ethereum Magicians forum](https://ethereum-magicians.org/) to do this. Once the idea has been vetted, your next responsibility will be to present (by means of an EIP) the idea to the reviewers and all interested parties, invite editors, developers, and the community to give feedback on the aforementioned channels. You should try and gauge whether the interest in your EIP is commensurate with both the work involved in implementing it and how many parties will have to conform to it. For example, the work required for implementing a Core EIP will be much greater than for an ERC and the EIP will need sufficient interest from the Ethereum client teams. Negative community feedback will be taken into consideration and may prevent your EIP from moving past the Draft stage. ### Core EIPs -For Core EIPs, given that they require client implementations to be considered **Final** (see "EIPs Process" below), you will need to either provide an implementation for clients or convince clients to implement your EIP. +For Core EIPs, given that they require client implementations to be considered **Final** (see "EIPs Process" below), you will need to either provide an implementation for clients or convince clients to implement your EIP. The best way to get client implementers to review your EIP is to present it on an AllCoreDevs call. You can request to do so by posting a comment linking your EIP on an [AllCoreDevs agenda GitHub Issue](https://github.com/ethereum/pm/issues). @@ -64,9 +65,9 @@ These calls generally result in a "rough consensus" around what EIPs should be i :warning: The EIPs process and AllCoreDevs call were not designed to address contentious non-technical issues, but, due to the lack of other ways to address these, often end up entangled in them. This puts the burden on client implementers to try and gauge community sentiment, which hinders the technical coordination function of EIPs and AllCoreDevs calls. If you are shepherding an EIP, you can make the process of building community consensus easier by making sure that [the Ethereum Magicians forum](https://ethereum-magicians.org/) thread for your EIP includes or links to as much of the community discussion as possible and that various stakeholders are well-represented. -*In short, your role as the champion is to write the EIP using the style and format described below, shepherd the discussions in the appropriate forums, and build community consensus around the idea.* +*In short, your role as the champion is to write the EIP using the style and format described below, shepherd the discussions in the appropriate forums, and build community consensus around the idea.* -### EIP Process +### EIP Process The following is the standardization process for all EIPs in all tracks: @@ -84,7 +85,7 @@ If this period results in necessary normative changes it will revert the EIP to **Final** - This EIP represents the final standard. A Final EIP exists in a state of finality and should only be updated to correct errata and add non-normative clarifications. -**Stagnant** - Any EIP in `Draft` or `Review` or `Last Call` if inactive for a period of 6 months or greater is moved to `Stagnant`. An EIP may be resurrected from this state by Authors or EIP Editors through moving it back to `Draft` or it's earlier status. If not resurrected, a proposal may stay forever in this status. +**Stagnant** - Any EIP in `Draft` or `Review` or `Last Call` if inactive for a period of 6 months or greater is moved to `Stagnant`. An EIP may be resurrected from this state by Authors or EIP Editors through moving it back to `Draft` or it's earlier status. If not resurrected, a proposal may stay forever in this status. >*EIP Authors are notified of any algorithmic change to the status of their EIP* @@ -98,12 +99,12 @@ Each EIP should have the following parts: - Preamble - RFC 822 style headers containing metadata about the EIP, including the EIP number, a short descriptive title (limited to a maximum of 44 characters), a description (limited to a maximum of 140 characters), and the author details. Irrespective of the category, the title and description should not include EIP number. See [below](./eip-1.md#eip-header-preamble) for details. - Abstract - Abstract is a multi-sentence (short paragraph) technical summary. This should be a very terse and human-readable version of the specification section. Someone should be able to read only the abstract to get the gist of what this specification does. -- Motivation _(optional)_ - A motivation section is critical for EIPs that want to change the Ethereum protocol. It should clearly explain why the existing protocol specification is inadequate to address the problem that the EIP solves. This section may be omitted if the motivation is evident. +- Motivation *(optional)* - A motivation section is critical for EIPs that want to change the Ethereum protocol. It should clearly explain why the existing protocol specification is inadequate to address the problem that the EIP solves. This section may be omitted if the motivation is evident. - Specification - The technical specification should describe the syntax and semantics of any new feature. The specification should be detailed enough to allow competing, interoperable implementations for any of the current Ethereum platforms (cpp-ethereum, go-ethereum, parity, ethereumJ, ethereumjs-lib, [and others](https://ethereum.org/en/developers/docs/nodes-and-clients). - Rationale - The rationale fleshes out the specification by describing what motivated the design and why particular design decisions were made. It should describe alternate designs that were considered and related work, e.g. how the feature is supported in other languages. The rationale should discuss important objections or concerns raised during discussion around the EIP. -- Backwards Compatibility _(optional)_ - All EIPs that introduce backwards incompatibilities must include a section describing these incompatibilities and their consequences. The EIP must explain how the author proposes to deal with these incompatibilities. This section may be omitted if the proposal does not introduce any backwards incompatibilities, but this section must be included if backward incompatibilities exist. -- Test Cases _(optional)_ - Test cases for an implementation are mandatory for EIPs that are affecting consensus changes. Tests should either be inlined in the EIP as data (such as input/expected output pairs, or included in `../assets/eip-###/`. This section may be omitted for non-Core proposals. -- Reference Implementation _(optional)_ - An optional section that contains a reference/example implementation that people can use to assist in understanding or implementing this specification. This section may be omitted for all EIPs. +- Backwards Compatibility *(optional)* - All EIPs that introduce backwards incompatibilities must include a section describing these incompatibilities and their consequences. The EIP must explain how the author proposes to deal with these incompatibilities. This section may be omitted if the proposal does not introduce any backwards incompatibilities, but this section must be included if backward incompatibilities exist. +- Test Cases *(optional)* - Test cases for an implementation are mandatory for EIPs that are affecting consensus changes. Tests should either be inlined in the EIP as data (such as input/expected output pairs, or included in `../assets/eip-###/`. This section may be omitted for non-Core proposals. +- Reference Implementation *(optional)* - An optional section that contains a reference/example implementation that people can use to assist in understanding or implementing this specification. This section may be omitted for all EIPs. - Security Considerations - All EIPs must contain a section that discusses the security implications/considerations relevant to the proposed change. Include information that might be important for security discussions, surfaces risks and can be used throughout the life-cycle of the proposal. E.g. include security-relevant design decisions, concerns, important discussions, implementation-specific guidance and pitfalls, an outline of threats and risks and how they are being addressed. EIP submissions missing the "Security Considerations" section will be rejected. An EIP cannot proceed to status "Final" without a Security Considerations discussion deemed sufficient by the reviewers. - Copyright Waiver - All EIPs must be in the public domain. The copyright waiver MUST link to the license file and use the following wording: `Copyright and related rights waived via [CC0](../LICENSE.md).` @@ -143,7 +144,7 @@ Headers that permit lists must separate elements with commas. Headers requiring dates will always do so in the format of ISO 8601 (yyyy-mm-dd). -#### `author` header +### `author` header The `author` header lists the names, email addresses or usernames of the authors/owners of the EIP. Those who prefer anonymity may use a username only, or a first name and a username. The format of the `author` header value must be: @@ -163,25 +164,25 @@ It is not possible to use both an email and a GitHub username at the same time. At least one author must use a GitHub username, in order to get notified on change requests and have the capability to approve or reject them. -#### `discussions-to` header +### `discussions-to` header While an EIP is a draft, a `discussions-to` header will indicate the URL where the EIP is being discussed. The preferred discussion URL is a topic on [Ethereum Magicians](https://ethereum-magicians.org/). The URL cannot point to Github pull requests, any URL which is ephemeral, and any URL which can get locked over time (i.e. Reddit topics). -#### `type` header +### `type` header The `type` header specifies the type of EIP: Standards Track, Meta, or Informational. If the track is Standards please include the subcategory (core, networking, interface, or ERC). -#### `category` header +### `category` header The `category` header specifies the EIP's category. This is required for standards-track EIPs only. -#### `created` header +### `created` header The `created` header records the date that the EIP was assigned a number. Both headers should be in yyyy-mm-dd format, e.g. 2001-08-14. -#### `requires` header +### `requires` header EIPs may have a `requires` header, indicating the EIP numbers that this EIP depends on. @@ -213,7 +214,7 @@ The current EIP editors are - Matt Garnett (@lightclient) - Sam Wilson (@SamWilsn) -Emeritus EIP editors are +Emeritus EIP editors are - Casey Detrio (@cdetrio) - Hudson Jameson (@Souptacular) @@ -251,15 +252,15 @@ The editors don't pass judgment on EIPs. We merely do the administrative & edito The `title` field in the preamble: - - Should not include the word "standard" or any variation thereof; and - - Should not include the EIP's number. +- Should not include the word "standard" or any variation thereof; and +- Should not include the EIP's number. ### Descriptions The `description` field in the preamble: - - Should not include the word "standard" or any variation thereof; and - - Should not include the EIP's number. +- Should not include the word "standard" or any variation thereof; and +- Should not include the EIP's number. ### EIP numbers diff --git a/README.md b/README.md index c4a32923c23e75..d3b1ee0834e842 100644 --- a/README.md +++ b/README.md @@ -17,11 +17,11 @@ The goal of the EIP project is to document standardized protocols for Ethereum c ## Preferred Citation Format -The canonical URL for an EIP that has achieved draft status at any point is at https://eips.ethereum.org/. For example, the canonical URL for EIP-1 is https://eips.ethereum.org/EIPS/eip-1. +The canonical URL for an EIP that has achieved draft status at any point is at . For example, the canonical URL for EIP-1 is . -Please consider anything which is not published on https://eips.ethereum.org/ as a working paper. +Please consider anything which is not published on as a working paper. -And please consider anything published at https://eips.ethereum.org/ with a status of "draft" as an incomplete draft. +And please consider anything published at with a status of "draft" as an incomplete draft. ## Automerger @@ -31,10 +31,11 @@ This repository contains an "auto-merge" feature to ease the workload for EIP ed Pull requests in this repository must pass automated validation checks: -* HTML formatting, broken links, and EIP front matter/formatting are [checked](https://github.com/ethereum/EIPs/blob/master/.github/workflows/ci.yml) using [html-proofer](https://rubygems.org/gems/html-proofer) and [`eipw`](https://github.com/ethereum/eipw). -* Required pull request reviews are [enforced](https://github.com/ethereum/EIPs/blob/master/.github/workflows/auto-review-bot.yml) using [EIP-Bot](https://github.com/ethereum/EIP-Bot/). +- HTML formatting, broken links, and EIP front matter/formatting are [checked](https://github.com/ethereum/EIPs/blob/master/.github/workflows/ci.yml) using [html-proofer](https://rubygems.org/gems/html-proofer) and [`eipw`](https://github.com/ethereum/eipw). +- Required pull request reviews are [enforced](https://github.com/ethereum/EIPs/blob/master/.github/workflows/auto-review-bot.yml) using [EIP-Bot](https://github.com/ethereum/EIP-Bot/). It is possible to run the EIP validator locally: + ```sh cargo install eipv eipv @@ -74,6 +75,6 @@ eipv bundle exec jekyll serve ``` -2. Preview your local Jekyll site in your web browser at http://localhost:4000. +2. Preview your local Jekyll site in your web browser at . More information on Jekyll and GitHub Pages [here](https://help.github.com/en/enterprise/2.14/user/articles/setting-up-your-github-pages-site-locally-with-jekyll). diff --git a/config/.markdownlint.yaml b/config/.markdownlint.yaml new file mode 100644 index 00000000000000..2341e3888209d4 --- /dev/null +++ b/config/.markdownlint.yaml @@ -0,0 +1,200 @@ +# Rule details can be found at https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md + +default: false + +# MD001/heading-increment/header-increment - Heading levels should only increment by one level at a time +MD001: true +# MD002/first-heading-h1/first-header-h1 - First heading should be a top-level heading (deprecated) +MD002: false + +# MD003/heading-style/header-style - Heading style +MD003: + # Heading style + style: "atx" + +# MD004/ul-style - Unordered list style +MD004: + # List style + style: "consistent" + +# MD005/list-indent - Inconsistent indentation for list items at the same level +MD005: true + +# MD006/ul-start-left - Consider starting bulleted lists at the beginning of the line (deprecated) +MD006: false +# MD007/ul-indent - Unordered list indentation +MD007: false +# MD009/no-trailing-spaces - Trailing spaces +MD009: + # Spaces for line break + br_spaces: 2 + # Allow spaces for empty lines in list items + list_item_empty_lines: false + # Include unnecessary breaks + strict: false + +# MD010/no-hard-tabs - Hard tabs +MD010: false + +# MD011/no-reversed-links - Reversed link syntax +MD011: true + +# MD012/no-multiple-blanks - Multiple consecutive blank lines +MD012: false + +# MD013/line-length - Line length +# Changed from default so we can allow the paragraphs to be a single line +MD013: false + +# MD014/commands-show-output - Dollar signs used before commands without showing output +MD014: false + +# MD018/no-missing-space-atx - No space after hash on atx style heading +MD018: true + +# MD019/no-multiple-space-atx - Multiple spaces after hash on atx style heading +MD019: true + +# MD020/no-missing-space-closed-atx - No space inside hashes on closed atx style heading +MD020: true + +# MD021/no-multiple-space-closed-atx - Multiple spaces inside hashes on closed atx style heading +MD021: true + +# MD022/blanks-around-headings/blanks-around-headers - Headings should be surrounded by blank lines +MD022: true + +# MD023/heading-start-left/header-start-left - Headings must start at the beginning of the line +MD023: true + +# MD024/no-duplicate-heading/no-duplicate-header - Multiple headings with the same content +MD024: + # Only check sibling headings + allow_different_nesting: false + # Only check sibling headings + siblings_only: false + +# MD025/single-title/single-h1 - Multiple top-level headings in the same document +MD025: + # Heading level + level: 1 + # RegExp for matching title in front matter + front_matter_title: "^\\s*title\\s*[:=]" + +# MD026/no-trailing-punctuation - Trailing punctuation in heading +MD026: false + +# MD027/no-multiple-space-blockquote - Multiple spaces after blockquote symbol +MD027: false + +# MD028/no-blanks-blockquote - Blank line inside blockquote +MD028: true + +# MD029/ol-prefix - Ordered list item prefix +MD029: false + +# MD030/list-marker-space - Spaces after list markers +MD030: + # Spaces for single-line unordered list items + ul_single: 1 + # Spaces for single-line ordered list items + ol_single: 1 + # Spaces for multi-line unordered list items + ul_multi: 1 + # Spaces for multi-line ordered list items + ol_multi: 1 + +# MD031/blanks-around-fences - Fenced code blocks should be surrounded by blank lines +MD031: + # Include list items + list_items: true + +# MD032/blanks-around-lists - Lists should be surrounded by blank lines +MD032: true + +# MD033/no-inline-html - Inline HTML +MD033: + # Allowed elements + allowed_elements: [] + +# MD034/no-bare-urls - Bare URL used +MD034: false + +# MD035/hr-style - Horizontal rule style +MD035: + # Horizontal rule style + style: "consistent" + +# MD036/no-emphasis-as-heading/no-emphasis-as-header - Emphasis used instead of a heading +MD036: false + +# MD037/no-space-in-emphasis - Spaces inside emphasis markers +MD037: false + +# MD038/no-space-in-code - Spaces inside code span elements +MD038: true + +# MD039/no-space-in-links - Spaces inside link text +MD039: false + +# MD040/fenced-code-language - Fenced code blocks should have a language specified +MD040: false + +# MD041/first-line-heading/first-line-h1 - First line in a file should be a top-level heading +# NOTE: Since this uses Jekyll, this setting only applies to freestanding markdown files, such as those in the assets folder +MD041: + # Heading level + level: 1 + # RegExp for matching title in front matter + front_matter_title: "^\\s*title\\s*[:=]" + +# MD042/no-empty-links - No empty links +MD042: true + +# MD043/required-headings/required-headers - Required heading structure +# Handled by EIP Walidator +MD043: false + +# MD044/proper-names - Proper names should have the correct capitalization +MD044: + # List of proper names + names: [] + # Include code blocks + code_blocks: true + # Include HTML elements + html_elements: true + +# MD045/no-alt-text - Images should have alternate text (alt text) +MD045: false + +# MD046/code-block-style - Code block style +MD046: + # Block style + style: "consistent" + +# MD047/single-trailing-newline - Files should end with a single newline character +MD047: true + +# MD048/code-fence-style - Code fence style +MD048: + # Code fence style + style: "consistent" + +# MD049/emphasis-style - Emphasis style should be consistent +MD049: + # Emphasis style should be consistent + style: "consistent" + +# MD050/strong-style - Strong style should be consistent +MD050: + # Strong style should be consistent + style: "consistent" + +# MD051/link-fragments - Link fragments should be valid +MD051: true + +# MD052/reference-links-images - Reference links and images should use a label that is defined +MD052: true + +# MD053/link-image-reference-definitions - Link and image reference definitions should be needed +MD053: true diff --git a/eip-template.md b/eip-template.md index bfdf22623a6154..d71731fb7b83aa 100644 --- a/eip-template.md +++ b/eip-template.md @@ -15,33 +15,42 @@ This is the suggested template for new EIPs. Note that an EIP number will be assigned by an editor. When opening a pull request to submit your EIP, please use an abbreviated title in the filename, `eip-draft_title_abbrev.md`. -The title should be 44 characters or less. It should not repeat the EIP number in title, irrespective of the category. +The title should be 44 characters or less. It should not repeat the EIP number in title, irrespective of the category. ## Abstract + Abstract is a multi-sentence (short paragraph) technical summary. This should be a very terse and human-readable version of the specification section. Someone should be able to read only the abstract to get the gist of what this specification does. ## Motivation + The motivation section should describe the "why" of this EIP. What problem does it solve? Why should someone want to implement this standard? What benefit does it provide to the Ethereum ecosystem? What use cases does this EIP address? ## Specification + The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119 and RFC 8174. The technical specification should describe the syntax and semantics of any new feature. The specification should be detailed enough to allow competing, interoperable implementations for any of the current Ethereum platforms (go-ethereum, parity, cpp-ethereum, ethereumj, ethereumjs, and [others](https://ethereum.org/en/developers/docs/nodes-and-clients/)). ## Rationale + The rationale fleshes out the specification by describing what motivated the design and why particular design decisions were made. It should describe alternate designs that were considered and related work, e.g. how the feature is supported in other languages. ## Backwards Compatibility + All EIPs that introduce backwards incompatibilities must include a section describing these incompatibilities and their severity. The EIP must explain how the author proposes to deal with these incompatibilities. EIP submissions without a sufficient backwards compatibility treatise may be rejected outright. ## Test Cases + Test cases for an implementation are mandatory for EIPs that are affecting consensus changes. If the test suite is too large to reasonably be included inline, then consider adding it as one or more files in `../assets/eip-####/`. ## Reference Implementation + An optional section that contains a reference/example implementation that people can use to assist in understanding or implementing this specification. If the implementation is too large to reasonably be included inline, then consider adding it as one or more files in `../assets/eip-####/`. ## Security Considerations + All EIPs must contain a section that discusses the security implications/considerations relevant to the proposed change. Include information that might be important for security discussions, surfaces risks and can be used throughout the life cycle of the proposal. E.g. include security-relevant design decisions, concerns, important discussions, implementation-specific guidance and pitfalls, an outline of threats and risks and how they are being addressed. EIP submissions missing the "Security Considerations" section will be rejected. An EIP cannot proceed to status "Final" without a Security Considerations discussion deemed sufficient by the reviewers. ## Copyright + Copyright and related rights waived via [CC0](../LICENSE.md). diff --git a/last-call.xml b/last-call.xml index 83e60e71434ad3..fe3d6df13fbf4e 100644 --- a/last-call.xml +++ b/last-call.xml @@ -20,7 +20,7 @@ layout: null

Please visit the [ethereum/EIPs issues to comment](https://github.com/ethereum/EIPs/issues/{{eip.eip}}).

{% endif %}
- {{ eip.content }} + {{ eip.content }} {% endcapture %} {{ eip.title | xml_escape }} From 49c7867410197363ad57aaa555f54b55fb390bbc Mon Sep 17 00:00:00 2001 From: yaruno Date: Fri, 21 Oct 2022 22:34:39 +0200 Subject: [PATCH 024/113] Add EIP-5023: Shareable non-transferable non-fungible token (#5023) * Shareable NFT eip draft * EIP numbering to reflect PR number * added a named author from ATARCA team to build consensus with community * added a named author from ATARCA team to build consensus with community * Update EIPS/eip-5023.md Removed links to external sources according to suggestion. Co-authored-by: Micah Zoltu * Update EIPS/eip-5023.md Removed reference to specific ERC-165 implementation. Co-authored-by: Micah Zoltu * Corrected licence on reference implementation * Update EIPS/eip-5023.md Licence should link to licence file in repository. Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-5023.md license file ending corrected Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-5023.md Removed mention of standard as suggested. Co-authored-by: Sam Wilson <57262657+SamWilsn@users.noreply.github.com> * Update EIPS/eip-5023.md Removed mention of standard as suggested. Co-authored-by: Sam Wilson <57262657+SamWilsn@users.noreply.github.com> * Update EIPS/eip-5023.md Grammatical corrections Co-authored-by: Sam Wilson <57262657+SamWilsn@users.noreply.github.com> * Renamed interface to follow convention of naming them after EIP number * Interface functions are implicitly virtual * Interface ID for IERC5023 * Update EIPS/eip-5023.md Grammar Co-authored-by: lightclient <14004106+lightclient@users.noreply.github.com> * Update EIPS/eip-5023.md First mention of EIP should have a link to it. Co-authored-by: Sam Wilson <57262657+SamWilsn@users.noreply.github.com> * Update EIPS/eip-5023.md CC0 should have a version number attached to it. Co-authored-by: Sam Wilson <57262657+SamWilsn@users.noreply.github.com> * reworking the EIP * Clarification when Share event is to be emitted * Update EIPS/eip-5023.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-5023.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-5023.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-5023.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> Co-authored-by: Micah Zoltu Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> Co-authored-by: Sam Wilson <57262657+SamWilsn@users.noreply.github.com> Co-authored-by: lightclient <14004106+lightclient@users.noreply.github.com> --- EIPS/eip-5023.md | 168 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 168 insertions(+) create mode 100644 EIPS/eip-5023.md diff --git a/EIPS/eip-5023.md b/EIPS/eip-5023.md new file mode 100644 index 00000000000000..ae4c0fc0372109 --- /dev/null +++ b/EIPS/eip-5023.md @@ -0,0 +1,168 @@ +--- +eip: 5023 +title: Shareable Non-Fungible Token +description: An interface for creating value-holding tokens shareable by multiple owners +author: Jarno Marttila (@yaruno), Martin Moravek (@mmartinmo) +discussions-to: https://ethereum-magicians.org/t/new-nft-concept-shareable-nfts/8681 +status: Draft +type: Standards Track +category: ERC +created: 2022-01-28 +requires: 165 +--- + +## Abstract + +This EIP standardizes an interface for non-fungible value-holding shareable tokens. Shareability is accomplished by minting copies of existing tokens for new recipients. Sharing and associated events allow the construction of a graph describing who has shared what to which party. + + +## Motivation + +NFT standards such as [EIP-721](./eip-721.md) and [EIP-1155](./eip-1155.md) have been developed to standardize scarce digital resources. However, many non-fungible digital resources need not be scarce. + +We have attempted to capture positive externalities in ecosystems with new types of incentive mechanisms that exhibit anti-rival logic, serve as an unit of accounting and function as medium of sharing. We envision that shareable tokens can work both as incentives but also as representations of items that are typically digital in their nature and gain more value as they are shared. + +These requirements have set us to define shareable NFTs and more specifically a variation of shareable NFTs called non-transferable shareable NFTs. These shareable NFTs can be “shared” in the same way digital goods can be shared, at an almost zero technical transaction cost. We have utilized them to capture anti-rival value in terms of accounting positive externalities in an economic system. + +Typical NFT standards such as EIP-721 and EIP-1155 do not define a sharing modality. Instead ERC standards define interfaces for typical rival use cases such as token minting and token transactions that the NFT contract implementations should fulfil. The ‘standard contract implementations' may extend the functionalities of these standards beyond the definition of interfaces. The shareable tokens that we have designed and developed in our experiments are designed to be token standard compatible at the interface level. However the implementation of token contracts may contain extended functionalities to match the requirements of the experiments such as the requirement of 'shareability'. In reflection to standard token definitions, shareability of a token could be thought of as re-mintability of an existing token to another party while retaining the original version of it. + +Sharing is an interesting concept as it can be thought and perceived in different ways. For example, when we talk about sharing we can think about it is as digital copying, giving a copy of a digital resource while retaining a version by ourselves. Sharing can also be fractional or sharing could be about giving rights to use a certain resource. The concept of shareability and the context of shareability can take different forms and one might use different types of implementatins for instances of shareable tokens. Hence we haven't restricted that the interface should require any specific token type. + +Shareable tokens can be made non-transferable at the contract implementaiton level. Doing so, makes them shareable non-transferable tokens. In the reference implementation we have distilled a general case from our use cases that defines a shareable non-transferable NFTs using the shareable NFT interface. + +We believe that the wider audience should benefit from an abstraction level higher definition for shareability, such as this interface implementation, that defines minimum amount of functions that would be implemented to satisfy the concept of shareability. + +## Specification + +The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC 2119. + +```solidity +/// Note: the ERC-165 identifier for this interface is 0xd763f0cf +interface IERC5023 is IERC165 { + + /// @dev This emits when a token is shared, reminted and given to another wallet that isn't function caller + event Share(address indexed from, address indexed to, uint256 indexed tokenId, uint256 derivedFromtokenId); + + /// @dev Shares, remints an existing token, gives a newly minted token a fresh token id, keeps original token at function callers possession and transfers newly minted token to receiver which should be another address than function caller. + function share(address to, uint256 tokenIdToBeShared) returns(uint256 newTokenId) external; + +} +``` + +Share event is expected to be emitted when function method share is succesfully called and a new token on basis of a given token id is minted and transferred to a recipient. + +## Rationale + +Current NFT standards define transferable non-fungible tokens, but not shareable non-fungible tokens. To be able to create shareable NFTs we see that existing NFT contracts could be extended with an interface which defines the basic principles of sharing, namely the Event of sharing and the function method of sharing. Definition of how transferability of tokens should be handled is left to the contract implementor. In case transfering is left enable shareable tokens behave similarily to the existing tokens, except when they are shared, a version of token is retained. In case transfering is disabled, shareable tokens become shareable non-transferable tokens, where they can be minted and given or shared to other people, but they cannot be transferred away. + +Imagine that Bob works together with Alice on a project. Bob earns an unique NFT indicating that he has made effort to the project, but Bob feels that his accomplishments are not only out of his own accord. Bob wants to share his token with Alice to indicate that also Alice deserves recognition of having put effort on their project. Bob initiates token sharing by calling `Share` method on the contract which has his token and indicates which one of his tokens he wishes to share and to whom by passing address and token id parameters. A new token is minted for Alice and a `Share` event is initiated to communicate that it was Bob whom shared his token to Alice by logging addresses who shared a token id to whose address and which token id was this new token derived from. + +Over time, a tree-like structures can be formed from the Share event information. If Bob shared to Alice, and Alice shared further to Charlie and Alice also shared to David a rudimentary tree structure forms out from sharing activity. This share event data can be later on utilized to gain more information of share activities that the tokens represent. + +``` +B -> A -> C + \ + > D +``` + +These tree structures can be further aggregated and collapsed to network representations e.g. social graphs on basis of whom has shared to whom over a span of time. E.g. if Bob shared a token to Alice, and Alice has shared a different token to Charlie and Bob has shared a token to Charlie, connections form between all these parties through sharing activities. +``` + B----A----C + \_______/ +``` + +## Backwards Compatibility + +TBD + +## Reference Implementation + +Following reference implementation demonstrates a general use case of one of our pilots. In this case a shareable non-transferable token represents a contribution done to a community that the contract owner has decided to merit with a token. Contract owner can mint a merit token and give it to a person. This token can be further shared by the receiver to other parties for example to share the received merit to others that have participated or influenced his contribution. + +``` +// SPDX-License-Identifier: CC0-1.0 +pragma solidity ^0.8.0; + +import "./IERC5023.sol"; +import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; +import "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol"; +import "@openzeppelin/contracts/utils/Address.sol"; +import "@openzeppelin/contracts/utils/Context.sol"; +import "@openzeppelin/contracts/utils/Strings.sol"; +import "@openzeppelin/contracts/utils/introspection/ERC165.sol"; +import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol"; +import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol"; +import "@openzeppelin/contracts/access/Ownable.sol"; + +contract ShareableERC721 is ERC721URIStorage, Ownable, IERC5023 /* EIP165 */ { + + string baseURI; + + uint256 internal _currentIndex; + + constructor(string memory _name, string memory _symbol) ERC721(_name, _symbol) {} + + function mint( + address account, + uint256 tokenId + ) external onlyOwner { + _mint(account, tokenId); + } + + function setTokenURI( + uint256 tokenId, + string memory tokenURI + ) external { + _setTokenURI(tokenId, tokenURI); + } + + function setBaseURI(string memory baseURI_) external { + baseURI = baseURI_; + } + + function _baseURI() internal view override returns (string memory) { + return baseURI; + } + + function share(address to, uint256 tokenIdToBeShared) external returns(uint256 newTokenId) { + require(to != address(0), "ERC721: mint to the zero address"); + require(_exists(tokenIdToBeShared), "ShareableERC721: token to be shared must exist"); + + require(msg.sender == ownerOf(tokenIdToBeShared), "Method caller must be the owner of token"); + + string memory _tokenURI = tokenURI(tokenIdToBeShared); + _mint(to, _currentIndex); + _setTokenURI(_currentIndex, _tokenURI); + + emit Share(msg.sender, to, _currentIndex, tokenIdToBeShared); + + return _currentIndex; + } + + function transferFrom( + address from, + address to, + uint256 tokenId + ) public virtual override { + revert('In this reference implementation tokens are not transferrable'); + } + + function safeTransferFrom( + address from, + address to, + uint256 tokenId + ) public virtual override { + revert('In this reference implementation tokens are not transferrable'); + } +} + + + +``` +## Security Considerations + +TBD + +## Copyright + +Copyright and related rights waived via [CC0](../LICENSE.md). From 502bd376e0cae07edcb0767bc2f5659a0020ccc9 Mon Sep 17 00:00:00 2001 From: Greg Colvin Date: Sat, 22 Oct 2022 11:49:09 -0400 Subject: [PATCH 025/113] Catch up to Yellow Paper (#5815) --- EIPS/eip-2315.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/EIPS/eip-2315.md b/EIPS/eip-2315.md index 3abe276052f57e..26a1f9b3f7f41a 100644 --- a/EIPS/eip-2315.md +++ b/EIPS/eip-2315.md @@ -88,14 +88,15 @@ _Notes:_ ### Validity -If the execution of an instruction would violate a condition, then the execution is in an exceptional halting state. The Yellow Paper defines five such states. +_Execution_ is defined in the Yellow Paper as sequence of changes in the EVM state. The conditions on valid code are preserved by state changes. At runtime, if execution of an instruction would violate a condition the execution is in an exceptional halting state. The Yellow Paper defines six such states. 1. Insufficient gas 2. More than 1024 stack items -3. Insufficient stack items -4. Invalid jump destination -5. Invalid instruction +3. State modification during a static call +4. Insufficient stack items +5. Invalid jump destination +6. Invalid instruction -We would like to consider EVM code valid iff no execution of the program can lead to an exceptional halting state. In practice, we must test at runtime for conditions 1 and 2 — sufficient gas and sufficient stack. We don’t know how much gas there will be, we don’t know how deep a recursion may go, and analysis of stack depth even for non-recursive programs is nontrivial. All of the remaining conditions MUST be validated statically, in time and space quasi-linear in the size of the code. +We would like to consider EVM code valid iff no execution of the program can lead to an exceptional halting state. In practice, we must test at runtime for conditions 1, 2, and 3 — sufficient gas, sufficient stack, and modification of static state. We don’t know how much gas there will be, we don’t know how deep a recursion may go, analysis of stack depth even for non-recursive programs is nontrivial, and we don't know whether a call will be static. All of the remaining conditions MUST be validated statically, in time and space quasi-linear in the size of the code. #### Static Constraints on Valid Code @@ -131,7 +132,7 @@ Requiring a consistently aligned `data stack` * ensures that all calls to a subroutine have the same number of inputs and the same number of outputs and * ensures that stack height is bounded in the absence of recursion. -Requiring a consistently aligned `data stack` also allows some algorithms that traverse the control-flow graph -- including code validation and compilation -- to break cycles at joins, again preventing quadratic path explosion. When a traversal gets to a `PC` it has visited before it is either at the beginning of a loop or the entry to a function -- and the stacks will align. So we know that loops will not grow stack, and that the number of arguments to a subroutine will always be the same -- there is no need to traverse that path again. +Requiring a consistently aligned `data stack` also allows some algorithms that traverse the control-flow graph -- including code validation and compilation -- to break cycles at joins, again preventing quadratic path explosion. When a traversal gets to a `PC` it has visited before it is either at the beginning of a loop or the entry to a function. Since the stack height at that `PC` is constant we know that loops will not grow stack, and that the number of arguments to a subroutine will always be the same -- there may be no need to traverse that path again. _Note: The JVM and Wasm enforce similar constraints for similar reasons._ @@ -141,7 +142,7 @@ There are a few major designs for a subroutine facility, two of which are consid *1. Keep return addresses on a dedicated return stack.* Turing's design is often used by stack machines, including those for Forth, Java, Wasm, and others. The data stack is used for computation, with a dedicated stack for return addresses. A single instruction suffices to call, and another to return from a routine. -*2. Keep return addresses on the data stack.* This design is often used by register machines, including those from CDC, IBM, DEC, Intel, and ARM. The registers are used primarily for computation, and the stack maintains call frames for return addresses, arguments, and local variables. On the EVM there are no registers for computation, so using the stack for both purposes can cause the sort of inefficiencies we saw above. Pascal p-code does use this design, but as part of a complex calling convention with dedicated registers. +*2. Keep return addresses on the data stack.* This design is often used by register machines, including those from CDC, IBM, DEC, Intel, and ARM. The registers are used primarily for computation, and the stack maintains call frames for return addresses, arguments, and local variables. On the EVM there are no registers for computation, so using the stack for both purposes can cause the sort of inefficiencies we see below. Pascal p-code does use this design, but as part of a complex calling convention with dedicated registers. #### We prefer the dedicated return stack. From 10b1bf135bc4ae50053831556f1e339370b537dd Mon Sep 17 00:00:00 2001 From: Greg Colvin Date: Sun, 23 Oct 2022 10:04:37 -0400 Subject: [PATCH 026/113] Update EIP-2315: Catch up to latest Yellow Paper (#5814) * Catch up to latest Yellow Paper * Remove yellow paper ref so that PR can be merged Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> --- EIPS/eip-2315.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EIPS/eip-2315.md b/EIPS/eip-2315.md index 26a1f9b3f7f41a..e46789d6901bbb 100644 --- a/EIPS/eip-2315.md +++ b/EIPS/eip-2315.md @@ -96,7 +96,7 @@ _Execution_ is defined in the Yellow Paper as sequence of changes in the EVM sta 5. Invalid jump destination 6. Invalid instruction -We would like to consider EVM code valid iff no execution of the program can lead to an exceptional halting state. In practice, we must test at runtime for conditions 1, 2, and 3 — sufficient gas, sufficient stack, and modification of static state. We don’t know how much gas there will be, we don’t know how deep a recursion may go, analysis of stack depth even for non-recursive programs is nontrivial, and we don't know whether a call will be static. All of the remaining conditions MUST be validated statically, in time and space quasi-linear in the size of the code. +We would like to consider EVM code valid iff no execution of the program can lead to an exceptional halting state. In practice, we must test at runtime for conditions 1, 2, and 3 — sufficient gas and sufficient stack. We don’t know how much gas there will be, we don’t know how deep a recursion may go, analysis of stack depth even for non-recursive programs is nontrivial, and we don't know whether a call will be static. All of the remaining conditions MUST be validated statically, in time and space quasi-linear in the size of the code. #### Static Constraints on Valid Code From bf502d07db617cdd3e9fd8e2db24d9f182851e42 Mon Sep 17 00:00:00 2001 From: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> Date: Sun, 23 Oct 2022 11:01:22 -0400 Subject: [PATCH 027/113] CI: Pin hashes (#5797) * CI: Pin hashes * Update ci-rerun-trigger.yml * Update ci.yml * Fix CodeSpell --- .github/workflows/auto-stagnate-bot.yml | 4 ++-- .github/workflows/ci-rerun-trigger.yml | 2 +- .github/workflows/ci.yml | 14 +++++++++----- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/.github/workflows/auto-stagnate-bot.yml b/.github/workflows/auto-stagnate-bot.yml index c7e8d73c7d1663..abc25f1acefb0a 100644 --- a/.github/workflows/auto-stagnate-bot.yml +++ b/.github/workflows/auto-stagnate-bot.yml @@ -11,9 +11,9 @@ jobs: name: Auto Stagnant Bot steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@e2f20e631ae6d7dd3b768f56a5d2af784dd54791 - name: Setup Node.js Environment - uses: actions/setup-node@v2 + uses: actions/setup-node@8c91899e586c5b171469028077307d293428b516 with: node-version: '14' - name: auto-stagnant-bot diff --git a/.github/workflows/ci-rerun-trigger.yml b/.github/workflows/ci-rerun-trigger.yml index 31121c2eeccda2..7321bf4e7db1ae 100644 --- a/.github/workflows/ci-rerun-trigger.yml +++ b/.github/workflows/ci-rerun-trigger.yml @@ -10,7 +10,7 @@ jobs: name: Trigger steps: - name: Trigger - uses: actions/github-script@v6 + uses: actions/github-script@d556feaca394842dc55e4734bf3bb9f685482fa0 if: github.event.issue.pull_request && contains(github.event.comment.body, '@eth-bot rerun') with: script: | diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b298881691bed5..e8c375566d92c1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,7 +27,7 @@ jobs: echo $MERGE_SHA > ./pr/merge_sha - name: Upload PR Number - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@3cea5372237819ed00197afe530f5a7ea3e805c8 with: name: pr_number path: pr/ @@ -67,15 +67,19 @@ jobs: steps: - name: Checkout EIP Repository uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b - - - name: Delete Unchanged Files - uses: Pandapip1/delete-unchanged-files@2c27069573bbeb6703790ac5c872e9b1a100d96c + + - name: Get Changed Files + uses: tj-actions/changed-files@1d6e210c970d01a876fbc6155212d068e79ca584 + id: changed-files + with: + separator: "," - name: Run CodeSpell uses: codespell-project/actions-codespell@2391250ab05295bddd51e36a8c6295edb6343b0e with: check_filenames: true ignore_words_file: config/.codespell-whitelist + path: ${{ steps.changed-files.outputs.all_changed_files }} skip: .git,Gemfile.lock,**/*.png,**/*.gif,**/*.jpg,**/*.svg,.codespell-whitelist,vendor,_site,_config.yml,style.css only_warn: 1 @@ -87,7 +91,7 @@ jobs: - name: Checkout EIP Repository uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b - - uses: ethereum/eipw-action@dist + - uses: ethereum/eipw-action@965202a8042097a457d8269ef1f4cc050d713060 id: eipw with: token: ${{ secrets.GITHUB_TOKEN }} From 7114c455926296c1545e318bdc5aec7de3f2a25b Mon Sep 17 00:00:00 2001 From: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> Date: Sun, 23 Oct 2022 11:03:33 -0400 Subject: [PATCH 028/113] Website: Add Ethereum Wallets Discord (#5816) --- index.html | 1 + 1 file changed, 1 insertion(+) diff --git a/index.html b/index.html index 8f042f7f2d82bb..8ef51c6686e5ee 100644 --- a/index.html +++ b/index.html @@ -6,6 +6,7 @@

EIPs Discord channel for ECH eip-editer Discord channel for Eth R&D eip-editing + Discord server for discussions about proposals that impact Ethereum wallets RSS

Ethereum Improvement Proposals (EIPs) describe standards for the Ethereum platform, including core protocol specifications, client APIs, and contract standards. Network upgrades are discussed separately in the Ethereum Project Management repository.

From 3b38fc1962470313cab92fcd5fecaed503b7b05a Mon Sep 17 00:00:00 2001 From: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> Date: Sun, 23 Oct 2022 13:20:44 -0400 Subject: [PATCH 029/113] CI: Add concurrency (#5819) * Add concurrency to ci.yml * Update auto-label-bot.yml * Update auto-review-bot.yml * Update auto-review-trigger.yml --- .github/workflows/auto-label-bot.yml | 4 ++++ .github/workflows/auto-review-bot.yml | 4 ++++ .github/workflows/auto-review-trigger.yml | 4 ++++ .github/workflows/ci.yml | 4 ++++ 4 files changed, 16 insertions(+) diff --git a/.github/workflows/auto-label-bot.yml b/.github/workflows/auto-label-bot.yml index 77590a1b89f212..d4edd8fdb50bb5 100644 --- a/.github/workflows/auto-label-bot.yml +++ b/.github/workflows/auto-label-bot.yml @@ -1,6 +1,10 @@ on: pull_request_target: +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + name: Auto Label Bot jobs: jekyll-label-action: diff --git a/.github/workflows/auto-review-bot.yml b/.github/workflows/auto-review-bot.yml index 696694c700aa17..e0dd983eea6f07 100644 --- a/.github/workflows/auto-review-bot.yml +++ b/.github/workflows/auto-review-bot.yml @@ -5,6 +5,10 @@ on: types: - completed +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + name: Auto Review Bot jobs: auto-review-bot: diff --git a/.github/workflows/auto-review-trigger.yml b/.github/workflows/auto-review-trigger.yml index 69c081d7bd7737..644e1b01622567 100644 --- a/.github/workflows/auto-review-trigger.yml +++ b/.github/workflows/auto-review-trigger.yml @@ -19,6 +19,10 @@ on: types: - created +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + name: Auto Review Bot Trigger jobs: trigger: diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e8c375566d92c1..90e57529e3242c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -9,6 +9,10 @@ on: - ready_for_review - edited +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + jobs: save-pr: name: Save PR Number From 87115ba39f97333505d544630ef0e1931d85df6d Mon Sep 17 00:00:00 2001 From: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> Date: Sun, 23 Oct 2022 13:21:28 -0400 Subject: [PATCH 030/113] CI: Re-enable CodeSpell (#5817) --- .github/workflows/ci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 90e57529e3242c..1440a8f5cef546 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -85,7 +85,6 @@ jobs: ignore_words_file: config/.codespell-whitelist path: ${{ steps.changed-files.outputs.all_changed_files }} skip: .git,Gemfile.lock,**/*.png,**/*.gif,**/*.jpg,**/*.svg,.codespell-whitelist,vendor,_site,_config.yml,style.css - only_warn: 1 eipw-validator: name: EIP Walidator From 6f89f857eb3364c3dc7a435746ac14910f83cd75 Mon Sep 17 00:00:00 2001 From: 2pmflow <98197762+2pmflow@users.noreply.github.com> Date: Sun, 23 Oct 2022 16:13:07 -0700 Subject: [PATCH 031/113] Add EIP-5791: Physical Backed Tokens (#5791) * Create eip-5791.md * Update eip-5791.md * Update created date * lint * move to Motivation * address feedback * address codespell --- EIPS/eip-5791.md | 165 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 165 insertions(+) create mode 100644 EIPS/eip-5791.md diff --git a/EIPS/eip-5791.md b/EIPS/eip-5791.md new file mode 100644 index 00000000000000..43c18bd891b447 --- /dev/null +++ b/EIPS/eip-5791.md @@ -0,0 +1,165 @@ +--- +eip: 5791 +title: Physical Backed Tokens +description: Minimal interface for linking ownership of EIP-721 NFTs to a physical chip +author: 2pmflow (@2pmflow), locationtba (@locationtba), Cameron Robertson (@ccamrobertson), cygaar (@cygaar) +discussions-to: https://ethereum-magicians.org/t/physical-backed-tokens/11350 +status: Draft +type: Standards Track +category: ERC +created: 2022-10-17 +requires: 191, 721 +--- + +## Abstract + +This standard is an extension of [EIP-721](./eip-721.md). It proposes a minimal interface for a [EIP-721](./eip-721.md) NFT to be "physically backed" and owned by whoever owns the NFT's physical counterpart. + +## Motivation + +NFT collectors enjoy collecting digital assets and sharing them with others online. However, there is currently no such standard for showcasing physical assets as NFTs with verified authenticity and ownership. Existing solutions are fragmented and tend to be susceptible to at least one of the following: + +- The ownership of the physical item and the ownership of the NFT are decoupled. + +- Verifying the authenticity of the physical item requires action from a trusted 3rd party (e.g. StockX). + +## Specification + +The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC 2119. + +### Requirements + +This approach requires that the physical item must have a chip attached to it that fulfills the following requirements: + +- The chip can securely generate and store an ECDSA secp256k1 asymmetric key pair; +- The chip can sign messages using the private key of the previously-generated asymmetric key pair; +- The chip exposes the public key; and +- The private key cannot be extracted + +The approach also requires that the contract uses an account-bound implementation of [EIP-721](./eip-721.md) (where all [EIP-721](./eip-721.md) functions that transfer must throw, e.g. the "read only NFT registry" implementation referenced in [EIP-721](./eip-721.md)). This ensures that ownership of the physical item is required to initiate transfers and manage ownership of the NFT, through a new function introduced in this interface described below. + +### Approach + +Each NFT is conceptually linked to a physical chip. + +When the NFT is minted, it must also emit an event that includes the corresponding chip address (20-byte address derived from the chip's public key). This lets downstream indexers know which chip addresses are mapped to which tokens for the NFT collection. The NFT cannot be minted without its token id being linked to a specific chip. + +The interface includes a function called `transferTokenWithChip` that transfers the NFT to the function caller if a valid signature signed by the chip is passed in. A valid signature must follow the schemes set forth in [EIP-191](./eip-191.md) and [EIP-2](./eip-2.md) (s-value restrictions), where the data to sign consists of the target recipient address (the function caller) and a recent blockhash (the level of recency is up to the implementation). + +The interface also includes other functions that let anyone validate whether the chip in the physical item is backing an existing NFT in the collection. + +### Interface + +```solidity + +interface IERC5791 { + /// @notice Returns the token id for a given chip address. + /// @dev Throws if there is no existing token for the chip in the collection. + /// @param chipAddress The address for the chip embedded in the physical item (computed from the chip's public key). + /// @return The token id for the passed in chip address. + function tokenIdFor(address chipAddress) external view returns (uint256); + + /// @notice Returns true if the chip for the specified token id is the signer of the signature of the payload. + /// @dev Throws if tokenId does not exist in the collection. + /// @param tokenId The token id. + /// @param payload Arbitrary data that is signed by the chip to produce the signature param. + /// @param signature Chip's signature of the passed-in payload. + /// @return Whether the signature of the payload was signed by the chip linked to the token id. + function isChipSignatureForToken(uint256 tokenId, bytes32 payload, bytes calldata signature) + external + view + returns (bool); + + /// @notice Transfers the token into the message sender's wallet. + /// @param signatureFromChip An EIP-191 signature of (msgSender, blockhash), where blockhash is the block hash for blockNumberUsedInSig. + /// @param blockNumberUsedInSig The block number linked to the blockhash signed in signatureFromChip. Should be a recent block number. + /// @param useSafeTransferFrom Whether EIP-721's safeTransferFrom should be used in the implementation, instead of transferFrom. + /// + /// @dev The implementation should check that block number be reasonably recent to avoid replay attacks of stale signatures. + /// The implementation should also verify that the address signed in the signature matches msgSender. + /// If the address recovered from the signature matches a chip address that's bound to an existing token, the token should be transferred to msgSender. + /// If there is no existing token linked to the chip, the function should error. + function transferTokenWithChip( + bytes calldata signatureFromChip, + uint256 blockNumberUsedInSig, + bool useSafeTransferFrom + ) external; + + /// @notice Calls transferTokenWithChip as defined above, with useSafeTransferFrom set to false. + function transferTokenWithChip(bytes calldata signatureFromChip, uint256 blockNumberUsedInSig) external; + + /// @notice Emitted when a token is minted + event PBTMint(uint256 indexed tokenId, address indexed chipAddress); + + /// @notice Emitted when a token is mapped to a different chip. + /// Chip replacements may be useful in certain scenarios (e.g. chip defect). + event PBTChipRemapping(uint256 indexed tokenId, address indexed oldChipAddress, address indexed newChipAddress); +} + +``` + +To aid recognition that an [EIP-721](./eip-721.md) token implements physical binding via this EIP: upon calling [EIP-165](./eip-165.md)’s `function supportsInterface(bytes4 interfaceID) external view returns (bool)` with `interfaceID=0xa70d2657`, a contract implementing this EIP must return true. + +The mint interface is up to the implementation. The minted NFT's owner should be the owner of the physical chip (this authentication could be implemented using the signature scheme defined for `transferTokenWithChip`). + +## Rationale + +This solution's intent is to be the simplest possible path towards linking physical items to digital NFTs without a centralized authority. + +The interface includes a `transferTokenWithChip` function that's opinionated with respect to the signature scheme, in order to enable a downstream aggregator-like product that supports transfers of any NFTs that implement this EIP in the future. + +### Out of Scope + +The following are some peripheral problems that are intentionally not within the scope of this EIP: + +- trusting that a specific NFT collection's chip addresses actually map to physical chips embedded in items, instead of arbitrary EOAs +- ensuring that the chip does not deterioriate or get damaged +- ensuring that the chip stays attached to the physical item +- etc. + +Work is being done on these challenges in parallel. + +Mapping token ids to chip addresses is also out of scope. This can be done in multiple ways, e.g. by having the contract owner preset this mapping pre-mint, or by having a `(tokenId, chipAddress)` tuple passed into a mint function that's pre-signed by an address trusted by the contract, or by doing a lookup in a trusted registry, or by assigning token ids at mint time first come first served, etc. + +Additionally, it's possible for the owner of the physical item to transfer the NFT to a wallet owned by somebody else (by sending a chip signature to that other person for use). We still consider the NFT physical backed, as ownership management is tied to the physical item. This can be interpreted as the item's owner temporarily lending the item to somebody else, since (1) the item's owner must be involved for this to happen as the one signing with the chip, and (2) the item's owner can reclaim ownership of the NFT at any time. + +## Backwards Compatibility + +This proposal is backward compatible with [EIP-721](./eip-721.md) on an API level. As mentioned above, for the token to be physical-backed, the contract must use a account-bound implementation of [EIP-721](./eip-721.md) (all [EIP-721](./eip-721.md) functions that transfer must throw) so that transfers go through the new function introduced here, which requires a chip signature. + +## Reference Implementation + +The following is a snippet on how to recover a chip address from a signature. + +```solidity +import '@openzeppelin/contracts/utils/cryptography/ECDSA.sol'; + +function getChipAddressFromChipSignature( + bytes calldata signatureFromChip, + uint256 blockNumberUsedInSig +) internal returns (TokenData memory) { + if (block.number <= blockNumberUsedInSig) { + revert InvalidBlockNumber(); + } + unchecked { + if (block.number - blockNumberUsedInSig > getMaxBlockhashValidWindow()) { + revert BlockNumberTooOld(); + } + } + bytes32 blockHash = blockhash(blockNumberUsedInSig); + bytes32 signedHash = keccak256(abi.encodePacked(_msgSender(), blockHash)) + .toEthSignedMessageHash(); + address chipAddr = signedHash.recover(signatureFromChip); +} + +``` + +## Security Considerations + +The [EIP-191](./eip-191.md) signature passed to `transferTokenWithChip` requires the function caller's address in its signed data so that the signature cannot be used in a replay attack. It also requires a recent blockhash so that a malicious chip owner cannot pre-generate signatures to use after a short time window (e.g. after the owner of the physical item changes). + +Additionally, the level of trust that one has for whether the token is physically-backed is dependent on the security of the physical chip, which is out of scope for this EIP as mentioned above. + +## Copyright + +Copyright and related rights waived via [CC0](../LICENSE.md). From 7d4efa09b0eb647bbc2a55c2933ac1409e614488 Mon Sep 17 00:00:00 2001 From: Samuele Marro Date: Mon, 24 Oct 2022 19:18:54 +0200 Subject: [PATCH 032/113] Update EIP-5375: Clarify address casing and move to Last Call (#5813) * Clarified address casing. * Moved from Review to Last Call. * Set last call deadline. --- EIPS/eip-5375.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/EIPS/eip-5375.md b/EIPS/eip-5375.md index a84b76bed8ca64..5ba553ce882c60 100644 --- a/EIPS/eip-5375.md +++ b/EIPS/eip-5375.md @@ -4,7 +4,8 @@ title: NFT Author Information and Consent description: An extension of EIP-721 for NFT authorship and author consent. author: Samuele Marro (@samuelemarro), Luca Donno (@lucadonnoh) discussions-to: https://ethereum-magicians.org/t/eip-5375-nft-authorship/10182 -status: Review +status: Last Call +last-call-deadline: 2022-11-06 type: Standards Track category: ERC created: 2022-07-30 From 03fccc96d8c6cb4fd5d1ef6a5a7a56bb0869c7fa Mon Sep 17 00:00:00 2001 From: Yan Ji Date: Tue, 25 Oct 2022 10:14:08 -0400 Subject: [PATCH 033/113] Update EIP-5218: New version of the IC3 NFT License (#5529) * New EIP draft: NFT Rights Management * update eip identifier * Update EIPS/eip-5222.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * changing eip to 5218 * Update EIPS/eip-5218.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-5218.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-5218.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-5218.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-5218.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-5218.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-5218.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-5218.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-5218.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-5218.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-5218.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-5218.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * modify external urls and add images and smart contracts * get rid of TODOs * Update assets/eip-5218/contracts/test/Contract.t.sol Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update assets/eip-5218/contracts/src/RightsManagement.sol Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update assets/eip-5218/contracts/src/IERC5218.sol Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * add github handle * Update EIPS/eip-5218.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * change eip number from 5218 to 5222 * fix EIPW Validator errors * fix EIPW Validator errors * add a paragraph on persistent license uri * add IC3 NFT License * Update EIPS/eip-5222.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-5222.md Co-authored-by: Micah Zoltu * changing eip number from 5222 to 5218 * Update ic3license * modify ic3 license * add scenarios of integrating eip-5218 and eip-5289 Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> Co-authored-by: Micah Zoltu --- EIPS/eip-5218.md | 2 + assets/eip-5218/ic3license/ic3license.pdf | Bin 437713 -> 448145 bytes assets/eip-5218/ic3license/ic3license.tex | 92 +++++++++++++++++----- 3 files changed, 74 insertions(+), 20 deletions(-) diff --git a/EIPS/eip-5218.md b/EIPS/eip-5218.md index 266286e30bcb59..5c3222b821afd8 100644 --- a/EIPS/eip-5218.md +++ b/EIPS/eip-5218.md @@ -182,6 +182,8 @@ The `supportsInterface` method MUST return `true` when called with `0xac7b5ca9`. This EIP aims to allow tracing all licenses to an NFT to facilitate right management. The EIP-721 standard only logs the property but not the legal rights tethered to NFTs. Even when logging the license via the optional EIP-721 Metadata extension, sublicenses are not traceable, which doesn't comply with the transparency goals of Web3. Some implementations attempt to get around this limitation by minting NFTs to represent a particular license, such as the BAYC #6068 Royalty-Free Usage License. This is not an ideal solution because the linking between different licenses to an NFT is ambiguous. An auditor has to investigate all NFTs in the blockchain and inspect the metadata which hasn't been standardized in terms of sublicense relationship. To avoid these problems, this EIP logs all licenses to an NFT in a tree data structure, which is compatible with EIP-721 and allows efficient traceability. +This EIP attempts to tether NFTs with copyright licenses to the creative work by default and is not subject to the high legal threshold for copyright ownership transfers which require an explicit signature from the copyright owner. To transfer and track copyright ownership, one may possibly integrate EIP-5218 and [EIP-5289](./eip-5289.md) after careful scrutinizing and implement a smart contract that atomically (1) signs the legal contract via EIP-5289, and (2) transfers the NFT together with the copyright ownership via EIP-5218. Either both take place or both revert. + ## Backwards Compatibility This standard is compatible with the current EIP-721 standards: a contract can inherit from both EIP-721 and EIP-5218 at the same time. diff --git a/assets/eip-5218/ic3license/ic3license.pdf b/assets/eip-5218/ic3license/ic3license.pdf index 1bac5933a6e2ad10ef3783d53c91a2f78784bdf1..f6fb07f3e17784651e9382fe8b855c82993c08fd 100644 GIT binary patch delta 221260 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

l9TUzbJfOve<0O?_5ZTOV6l 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

tR( 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 z%0Asvv2_ja6p!hs{iDX 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

    }!He`#R6Y)2z;tQQ@40pM@5<8>^d0_qLgItOu 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 diff --git a/assets/eip-5218/ic3license/ic3license.tex b/assets/eip-5218/ic3license/ic3license.tex index 6367a06cf86645..c38d2f3c77dc7c 100644 --- a/assets/eip-5218/ic3license/ic3license.tex +++ b/assets/eip-5218/ic3license/ic3license.tex @@ -7,7 +7,7 @@ \title{The \iccclicense\\} \author{James Grimmelmann} \affil{Cornell Tech and Cornell Law School\\Institute for Cryptocurrencies and Contracts} -\date{DISCUSSION DRAFT 1\\\today} +\date{DISCUSSION DRAFT 3\\\today} \usepackage{xspace} @@ -16,15 +16,24 @@ \newcommand{\keyword}[1]{\textbf{#1}\xspace} +\newcommand{\publiclicense}{\keyword{Public-License}} +\newcommand{\nopubliclicense}{\keyword{No-Public-License}} + \newcommand{\commercial}{\keyword{Commercial}} \newcommand{\noncommercial}{\keyword{Non-Commercial}} -\newcommand{\derivative}{\keyword{Derivatives}} \newcommand{\noderivative}{\keyword{No-Derivatives}} +\newcommand{\derivative}{\keyword{Derivatives}} +\newcommand{\sharealike}{\keyword{Share-Alike}} +\newcommand{\derivativetracking}{\keyword{Derivative-Tracking}} \newcommand{\ledger}{\keyword{Ledger-Authoritative}} \newcommand{\legal}{\keyword{Legal-Authoritative}} +\newcommand{\personal}{\keyword{Personal}} +\newcommand{\conditional}{\keyword{Conditional}} + + \usepackage{semantic-markup} \newcommand{\sect}[1]{\vspace{12pt}\noindent{\strong{#1}}} @@ -38,6 +47,7 @@ \renewcommand{\code}[1]{\colorbox{light-gray}{\texttt{#1}}} \newcommand{\iflicenseoption}[2]{[\colorbox{light-gray}{If #1:} #2]} +\newcommand{\ifnotlicenseoption}[2]{[\colorbox{light-gray}{Unless #1:} #2]} \begin{document} @@ -49,13 +59,14 @@ \section{Introduction} The \iccclicense is a copyright license specifically designed for use with NFTs. It links a creative work to an NFT so that when the NFT is transferred, so is the license. It is intended to be compatible with the NFT licensing standard defined in \eiplicense. -The \iccclicense has three optional features that a licensor can use or not when choosing a license: +The \iccclicense has four optional features that a licensor can use or not when choosing a license: \begin{itemize} -\item The license can be \commercial or \noncommercial. A \commercial license allows the user to make money from merchandise and other uses of the work; a \noncommercial license does not. -\item The license can be \derivative or \noderivative. A \derivative license allows the user to make derivative works and adaptations, like remixes and video series; a \noderivative license does not. -\item The license can be \ledger or \legal. A \ledger license means that the current state of the blockchain ledger is always authoritative for who owns the NFT and has rights under the license, even if the NFT is stolen or transferred by mistake. A \legal license gives the courts flexibility to correct ownership of the license in clear cases of theft and fraud. +\item The license can be \commercial (C) or \noncommercial (NC). A \commercial license allows the user to make money from merchandise and other uses of the work; a \noncommercial license does not. +\item The license can be \derivative (D), \derivativetracking (DT), \sharealike (SA), or \noderivative (ND). A \derivative license allows the user to make derivative works and adaptations (like remixes and videos) without restriction. A \derivativetracking license allows derivative works but requires them to be registered and tracked as NFTs themselves. A \sharealike license is like \derivativetracking but also requires that the derivative works be relicensed under the same license. And a \noderivative license prohibits derivative works entirely. (These options are ordered from least restrictive to most restrictive.) +\item The license can be \publiclicense (PL) or \nopubliclicense (NPL). A \publiclicense license, in addition to the specific rights granted to the user, grants to the public a broad copyright license to reproduce the work (but not to make derivative works). A \nopubliclicense license grants only the specific rights to the user. +\item The license can be \ledger (Ledger) or \legal (Legal). A \ledger license means that the current state of the blockchain ledger is always authoritative for who owns the NFT and has rights under the license, even if the NFT is stolen or transferred by mistake. A \legal license gives the courts flexibility to correct ownership of the license in clear cases of theft and fraud. \end{itemize} -All three options are independent, so that they can be set for a choice of eight total licenses, e.g. NC-D-Ledger means the license version that allows only Non-Commercial uses, allows Deriviative works, and makes the Ledger authoritative for the state of the license. Once an \iccclicense has been used on an NFT, that license stays with it. The licensor should not in general expect to be able to revoke the license or choose a different one. +All four options are independent, so that they can be set for a choice of thirty-two total licenses, e.g. NC-D-NPL-Ledger means the license version that allows only Non-Commercial uses, allows Deriviative works, includes No Public License, and makes the Ledger authoritative for the state of the license. Once an \iccclicense has been used on an NFT, that license stays with it. The licensor should not in general expect to be able to revoke the license or choose a different one. The rest of this document describes the design choices of the \iccclicense. Appendix \ref{sec:human} provides a short human-readable summary of the license terms. Appendix \ref{sec:text} contains the actual text of the license family; @@ -94,23 +105,46 @@ \section{License Terms} We have tried in \iccclicense to capture the most common and important use cases in light of the NFT community's responses to previous licenses. But our goal has been simplicity rather than perfection. We hope and expect that over time, others will build on and remix the ideas in the license to terms for more advanced use cases. -Drawing on the success of the Creative Commons license suite, the \iccclicense can be customized to be either \commercial or \noncommercial (C vs. NC), and to allow \derivative works or to specify \noderivative works (D vs. ND). These two options can be set independently. (A third variation, \ledger versus \legal, is discussed in \ref{sec:trans}.) We did not include a Creative Commons-style ShareAlike option for derivative works. A licensor who is interested in establishing a shared pool of creative works should use an open license that lets anyone make derivative works (such as the CC BY-SA license or the GPL), rather than a license tied to an NFT. - The \iccclicense applies to ``Licensed Material'' that is ``Linked'' to an NFT. The definition of Licensed Material is deliberately broad: it can include highly creative works like images or videos, but it also includes ``other material'' to include datasets, software, or other works that are not primarily artistic. The definition of Linked is also broad: it can be by hyperlink, by description, by IPFS CID, by hash value, by an on-chain reference, etc. What is important is that the NFT must be connected to specific licensed material in a way that cannot change over time. We do not attempt to solve the (very difficult) problems of creating a technical standard or a license for an NFT whose contents can change over time. The core license grant in the \iccclicense is that the NFT owner can ``Use'' the licensed material, i.e. exercise all of the usual rights under copyright to make copies of the work and share them with the public. This is an unlimited grant: it covers all media, digital and analog, on-chain and off-chain. The license grant is non-exclusive. It is not currently possible to guarantee that only one NFT has been made of a work, or that there are no other off-chain uses of the work. +Drawing on the success of the Creative Commons license suite, the \iccclicense can be customized in four ways: +\begin{enumerate} +\item To be either \commercial or \noncommercial. +\item To allow \derivative works, to allow them but require that they be \derivativetracking on chain, to allow them but require that they be relicensed under \sharealike terms, or to specify that \noderivative works at all. +\item To grant a \publiclicense to members of the public besides the NFT owner, or to grant \nopubliclicense. +\item To track ownership of the NFT entirely on-chain (\ledger) or to follow the legal system's rules on ownership (\legal). (This option is discussed in section~\ref{sec:trans}.) +\end{enumerate} +These four options can be set independently, for a total of 32 license variations. + +Regardless of which license options are used, all versions of the \iccclicense include two specific uses that are always allowed. First, the material can be used to sell the NFT, e.g. on an online NFT marketplace listing. This is an essential part of truth in advertising; someone considering buying the NFT typically needs to be able to see what creative work they will actually be getting. A similar clause is present in many other NFT licenses, although we have attempted to generalize it so that it is less tied to the specifics of how any particular NFT marketplace works. Second, the \iccclicense generally allows free use of the material to identify the NFT owner publicly, e.g. in a Twitter profile hexagon. This too is widespread in the NFT community and widely allowed by other NFT licenses. + + +\subsection{Commercial Uses} + If the license is \noncommercial, it excludes any uses directed to ``commercial advantage or monetary compensation,'' which includes any cases in which people are required to pay to get a copy of the work. The definition of the \noncommercial license option specifically \emph{allows} the sale of the NFT itself. The resale of NFTs, like the resale of unique works of fine art, is a recognized and important use case. What the NonCommercial license option prohibits is the commercialization of the work by making and selling \emph{other} copies of the work, such as selling posters of an image attached to an NFT, or creating a video series based on a character depicted in a work associated with an NFT. Whether the license is \commercial or \noncommercial, no royalties are required. Under the \commercial license option, the NFT owner is allowed to keep all of their revenues from commercializing the work. Under the \noncommercial license option, such commercialization is not allowed at all, and constitutes a breach of the license allowing the licensor to sue for infringement. Royalties pose complicated computation and drafting problems, which we have not attempted to solve in the current draft. If a platform charges a fee for an NFT listing or sale, this is neither required nor prohibited by the \iccclicense; it is an issue between the NFT owner and the platform, not between the NFT owner and the licensor. Similarly, if the NFT owner sells the NFT, this is not an event that entitles the NFT owner to any royalties under this license. This does not prevent the \iccclicense from being used with a smart contract that requires royalty payments. We merely have not attempted to make payment of royalties part of the copyright license. For example, a smart contract could tie invocation of NFT transfer functions to payment of required royalties. (But see EIP-2981 (NFT Royalty Standard) for discussion of the reasons why such requirements may not be effective in practice.) -If the licensor chooses to allow derivative works, then the license grant also allows the NFT owner to use ``Adapted Material,'' which uses language from the Creative Commons license suite to define what counts as a derivative work. To reflect the customs of the NFT community, we added language to make clear that simply reproducing the work in a different medium -- e.g., printing T-shirts of a JPEG -- doesn't count as making a derivative work. Only new projects -- such as modifying artwork, remixing a song, or making a TV series based on a character -- are derivative works. +\subsection{Derivative Works} + +If the licensor chooses to allow derivative works with \derivative, \derivativetracking, or \sharealike, the license grant also allows the NFT owner to use ``Adapted Material,'' which uses language from the Creative Commons license suite to define what counts as a derivative work. To reflect the customs of the NFT community, we added language to make clear that simply reproducing the work in a different medium -- e.g., printing T-shirts of a JPEG -- doesn't count as making a derivative work. Only new projects -- such as modifying artwork, remixing a song, or making a TV series based on a character -- are derivative works. + +When the license requires \derivativetracking or \sharealike, the grant of permission to make derivative works is conditional on using the same technical mechanism (an ``NFT Generator'') that created the NFT to also create an NFT for the derivative work. These two options implement a \emph{technical} compatibility condition, one that aims to keep derivative works on the same technical standard as the NFT itself. The license is platform-agnostic, so it can be used with different smart contracts, different blockchains, and even non-blockchain systems. The point is simply that when one of these license options is selected, the derivative-work NFTs will live in the same ecosystem used for the NFT. + +When the license requires \sharealike, the requirement of using the same technical mechanism is supplemented with the further requirement that the derivative-work NFT be licensed using the same license. This is a \emph{legal} compatibility condition; it closely corresponds to the Share-Alike license option in the Creative Commons license suite. Note that \sharealike implies \derivativetracking. In the context of NFTs, the point of a Share-Alike license could be defeated by tying the license to an derivative-work NFT whose technical implementation departed too significantly from the implementation of the underlying NFT. Rather than try to prohibit the use of what the Creative Commons suite calls ``Effective Technical Measures'' and take on the difficult task of defining them in the context of NFTs, we have chosen simply to require use of the same implementation for the derivative-work NFT, on the theory that the original NFT creator can choose an appropriate implementation at the time of minting. + +\subsection{Public Licenses} + +One common use case for NFTs is to reserve a few privileges for the NFT owner while giving the public a license to use the creative work associated with the NFT. This could be accomplished through dual licensing, in which the creator explicitly uses one license for the NFT owner and another for the public. But this approach is unsatisfactory; dual licensing gives up some of the convenience and clarity of having all of the relevant license terms clearly located in one place. Nor is it appropriate to include a public license in every version of the NFT license. The public-license model for NFTs is not universal; many NFTs give rights in the creative work only to the NFT owner. + +Thus, the IC3 NFT License includes a public license as a license option. When \publiclicense is selected, the license grants described above, which give specific broad rights to the NFT owner, are accompanied by a public license grant (specifically, a Creative Commons Attribution-NoDerivatives license) that gives the public the right to use the work, but not to make derivative works. -Regardless of which license option is used, all versions of the \iccclicense include two specific uses that are always allowed. First, the material can be used to sell the NFT, e.g. on an online NFT marketplace listing. This is an essential part of truth in advertising; someone considering buying the NFT typically needs to be able to see what creative work they will actually be getting. A similar clause is present in many other NFT licenses, although we have attempted to generalize it so that it is less tied to the specifics of how any particular NFT marketplace works. Second, the \iccclicense generally allows free use of the material to identify the NFT owner publicly, e.g. in a Twitter profile hexagon. This too is widespread in the NFT community and widely allowed by other NFT licenses. \section{Transfer} @@ -128,6 +162,8 @@ \section{Transfer} To keep the distinction clear, the license uses the term ``Controller'' for the person who has control of an NFT via a private key, and ``Owner'' for the person who is legally entitled to the license. The \ledger option is implemented by defining the Owner to be the Controller (so the two concepts are the same), and the \legal option by defining the Owner to be the ``person or entity who is legally entitled to be its Controller.'' (In theory, it would be possible for a license to fine-tune the circumstances under which it does and does not transfer by stating its own rules, but at the cost of decreased compatibility with both the blockchain and with the legal system. The \iccclicense does not attempt this task.) +The licensor may optionally provide a ``Grace Period'' as part of the smart contract for the NFT. If present, it allows a NFT owner to continue using the work (but not to create new derivatives of it) for a period of time following the transfer of the NFT. The Grace Period is defined in terms of a ``Grace Period Process,'' e.g. a smart-contract method that indicates whether the grace period has expired or no. In our view, this is the most general solution to the question of how long a grace period should be, if any. The licensor is not locked in to any particular choice, and putting this function in the smart-contract logic avoids any difficulties translating human-readable terms like ``two days'' into computation-friendly form. + \section{Revocation} The \iccclicense can be revoked, but it does not define the conditions of revocation. This may seem paradoxical, but it reflects the design goal of making the license itself simple and modular. Instead, the license \emph{defers} to the smart contract that invoked it in the first place. If that contract says that the license has been revoked, it has been. @@ -171,7 +207,7 @@ \section{Human-Readable Summary} \begin{itemize} \item \textbf{Use and Share}: You can make copies of the work, use them personally, and share them with others \iflicenseoption{\noncommercial}{, but not for commercial purposes}. -\item \iflicenseoption{\derivative}{\textbf{Derivatives}: you can make new works that include and build on the work, use them, and share them with others \iflicenseoption{\noncommercial}{, but not for commercial purposes}.} +\item \ifnotlicenseoption{\noderivative}{\textbf{Derivatives}: you can make new works that include and build on the work, use them, and share them with others \iflicenseoption{\noncommercial}{, but not for commercial purposes} \iflicenseoption{\derivativetracking}{, provided that you also release them as NFTs} \iflicenseoption{\sharealike}{, provided that you also release them as NFTs under the same license}.} \item \textbf{Ownership}: You can use the work to show that you own the NFT. \item \textbf{Sale}: If you sell the NFT, you can use the work to show people what the NFT is. \end{itemize} @@ -201,11 +237,16 @@ \section{License Text} \item A ``Ledger'' is a blockchain, database, or other digital system that records information about Unique Identifiers. + \item An ``NFT'' is a Unique Identifier in a Ledger. + \item A ``Private Key'' is a cryptographic key, the use of which is necessary to modify the information about a Unique Identifier recorded in a Ledger. - \item An ``NFT'' is a Unique Identifier in a Ledger that is Associated with a person or entity when that person or entity has substantially exclusive control over the Private Key necessary to modify the information about that Unique Identifier in that Ledger. + \item An NFT is ``Associated'' with a person or entity when that person or entity has substantially exclusive control over the Private Key necessary to modify the information about that Unique Identifier in that Ledger. - \item The ``Controller'' of an NFT is the person or entity with whom the NFT is Associated. + \item The ``Controller'' of an NFT is the person or entity with whom the NFT is Associated. + + \item An ``NFT Generator'' is a smart contract, function, or other service that creates NFTs in a Ledger. + \end{itemize} \subsect{Licensing} @@ -257,28 +298,39 @@ \section{License Text} \item An NFT is ``Sublicensed'' when the NFT indicates that it has been sublicensed by means of a Licensing Process. + \item \iflicenseoption{\derivativetracking}{Adapted Material is ``Derivative Tracked'' from an NFT (the ``Parent NFT'') when the Parent NFT is Sublicensed by means of a Licensing Process that (1) creates another NFT (the ``Child NFT'') by means of the same NFT Generator that created the Parent NFT, (2) causes the Child NFT to be Linked to Adapted Material, and (3) causes the Child NFT and Parent NFT to have materially the same properties and functionality, except for the identity of the parties they are Associated with and the identity of the material they are Linked to.} + + \item \iflicenseoption{\sharealike}{Adapted Material is ``Share-Alike Sublicensed'' from an NFT (the ``Parent NFT'') when the Parent NFT is Sublicensed by means of a Licensing Process that (1) creates another NFT (the ``Child NFT'') by means of the same NFT Generator that created the Parent NFT, (2) causes the Child NFT to be Linked to Adapted Material, (3) causes the Child NFT and Parent NFT to have materially the same properties and functionality, except for the identity of the parties they are Associated with and the identity of the material they are Linked to, and (4)causes the Child NFT to Invoke this license.} + \item To ``Transfer'' an NFT is to change, modify, or update the Ledger such that the identity of the Owner of that NFT changes, by any legally sufficient means, including sale, barter, gift, bequest, or operation of law. + + \item ``Grace Period Process'' means an interface, function, method, or similar technical process that is part of a Licensing Process and which, when invoked, indicates whether a specified limited duration following the Transfer of an NFT has elapsed. + + \item ``Grace Period'' means the time following the Transfer of an NFT during which the Grace Period Process indicates that the specified limited duration has not yet elapsed. \end{itemize} +\sect{Public License Grant} + +\iflicenseoption{\publiclicense}{The Licensed Material is made available to the public under the terms of the Creative Commons Attribution-NoDerivatives 4.0 International Public License at \href{https://creativecommons.org/licenses/by-nd/4.0/legalcode}{https://creativecommons.org/licenses/by-nd/4.0/legalcode}.} -\sect{License Grant} +\sect{NFT License Grant} -Subject to the terms and conditions of this License, and for as long as You are the Owner of the License NFT, the Licensor hereby grants to You a worldwide, royalty-free, sublicensable, non-exclusive, license to exercise the Licensed Rights to: +Subject to the terms and conditions of this License, and on the condition that You are the Owner of the License NFT, the Licensor hereby grants to You a worldwide, royalty-free, sublicensable, non-exclusive, license to exercise the Licensed Rights to: \begin{itemize} \item Use the Licensed Material \iflicenseoption{\noncommercial}{for Non-Commercial purposes only}, -\item \iflicenseoption{\derivative}{Create and Use Adapted Material \iflicenseoption{\noncommercial}{for Non-Commercial purposes only},} +\item \ifnotlicenseoption{\noderivative}{Create and Use Adapted Material \iflicenseoption{\noncommercial}{for Non-Commercial purposes only} \iflicenseoption{\derivativetracking}{provided that the Adapted Material is Derivative Tracked from the License NFT} \iflicenseoption{\sharealike}{provided that the Adapted Material is Share-Alike Sublicensed from the License NFT}}, \item Identify You as the Owner of the License NFT, \item Use the Licensed Material in connection with the sale and advertising for sale of the License NFT, \end{itemize} -This License becomes effective when the Licensor causes the License NFT to Invoke it. Because this is a unilateral license grant and not a contract, Your assent is not required for it to become effective. +This License becomes effective when the Licensor causes the License NFT to Invoke it. Because this is a unilateral license grant and not a contract, Your assent is not required for it to become effective. \iflicenseoption{\publiclicense}{This license grant is in addition to any rights granted to You as a member of the public under the terms of the Public License Grant above.} All rights granted under this License last for the full duration of the Licensor's Licensed Rights, except that if the License NFT Revokes this License, Your rights under this license grant will terminate, along with all sublicenses granted hereunder. -This license grant is non-transferable, except that if the License NFT is Transferred, Your rights under this license grant will terminate, and such rights will automatically transfer to the new Owner of the License NFT. Any sublicenses granted hereunder that are Sublicensed will continue in force as sublicenses from the new Owner. If You have become the Owner of the License NFT as a result of a Transfer, you automatically grant any such sublicenses that are Sublicensed. This License does not by itself require you to continue or grant any sublicenses given by a previous Owner that were not Sublicensed, but it does not prohibit other law from doing so. - +This license grant is non-transferable. If the License NFT is Transferred such that You are no longer the Owner, Your rights under this license grant will terminate. Notwithstanding the previous sentence, if the Licensing Process contains a Grace Period Process, You may continue to Use the Licensed Material and any already-existing Adapted Material under the terms of the license grant above during the Grace Period, but You may not Create or Use new Adapted Material or grant new sublicenses during the Grace Period. +If the License NFT is Transferred, any sublicenses granted hereunder that are Sublicensed will continue in force as sublicenses from the new Owner. If You have become the Owner of the License NFT as a result of a Transfer, you automatically grant any such sublicenses that are Sublicensed. This License does not by itself require you to continue or grant any sublicenses given by a previous Owner that were not Sublicensed, but it does not prohibit other law from doing so. \sect{Interpretation} From 9ca13dbc5f01126f7885135096487f9422ec63e3 Mon Sep 17 00:00:00 2001 From: Buzz Cai <61537646+buzzcai@users.noreply.github.com> Date: Tue, 25 Oct 2022 10:20:50 -0400 Subject: [PATCH 034/113] Update EIP-5484: Move to Last Call (#5809) * Move to Review * move to Last Call * correction to pass bot check * Update eip-5484.md Fixed typo: extra space * completed security considerations * fixed typos --- EIPS/eip-5484.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/EIPS/eip-5484.md b/EIPS/eip-5484.md index 5d8d22fea07f69..a478951edac38d 100644 --- a/EIPS/eip-5484.md +++ b/EIPS/eip-5484.md @@ -1,10 +1,11 @@ --- eip: 5484 title: Consensual Soulbound Tokens -description: Interface for special NFTS with immutable ownership and pre-determined immutable burn authorization +description: Interface for special NFTs with immutable ownership and pre-determined immutable burn authorization author: Buzz Cai (@buzzcai) discussions-to: https://ethereum-magicians.org/t/eip-5484-consensual-soulbound-tokens/10424 -status: Review +status: Last Call +last-call-deadline: 2022-11-05 type: Standards Track category: ERC created: 2022-08-17 @@ -71,6 +72,7 @@ interface IERC5484 { ``` ## Rationale + ### Soulbound Token (SBTs) as an extension to EIP-721 We believe that soulbound token serves as a specialized subset of the existing EIP-721 tokens. The advantage of such design is seamless compatibility of soulbound token with existing NFT services. Service providers can treat SBTs like NFTs and do not need to make drastic changes to their existing codebase. @@ -79,7 +81,7 @@ One problem with current soulbound token implementations that extend from [EIP-7 ### Burn Authorization We want maximum freedom when it comes to interface usage. A flexible and predetermined rule to burn is crucial. Here are some sample scenarios for different burn authorizations: -- `IssuerOnly`: Loan record +- `IssuerOnly`: Loan record - `ReceiverOnly`: Paid membership - `Both`: Credentials - `Neither`: Credit history @@ -96,7 +98,7 @@ A concern Ethereum users have is that soulbound tokens having immutable ownershi This proposal is fully backward compatible with [EIP-721](./eip-721.md) ## Security Considerations -Needs discussion. +There are no security considerations related directly to the implementation of this standard. ## Copyright Copyright and related rights waived via [CC0](../LICENSE.md). From 239c13741cf94a1295af1661103a9f7e4571bf86 Mon Sep 17 00:00:00 2001 From: StartfundInc <111301211+StartfundInc@users.noreply.github.com> Date: Tue, 25 Oct 2022 09:18:26 -0700 Subject: [PATCH 035/113] Update eip-5528.md (#5832) --- EIPS/eip-5528.md | 133 +++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 118 insertions(+), 15 deletions(-) diff --git a/EIPS/eip-5528.md b/EIPS/eip-5528.md index 6c12af09a90ca4..714ae6d5635bb4 100644 --- a/EIPS/eip-5528.md +++ b/EIPS/eip-5528.md @@ -32,14 +32,13 @@ In traditional finance, trusted escrow services solve this problem. In the world There are two types of contract for the escrow process: -- *Payable Contract*: The sellers and buyers use this token to fund the *Escrow Contract*. -- *Escrow Contract*: Defines the escrow policies and holds *Payable Contract*'s token for a certain period. - -This standard proposes interfaces on top of the [EIP-20](./eip-20.md) standard. +- *Payable Contract*: The sellers and buyers use this token to fund the *Escrow Contract*. This contract MUST override [EIP-20](./eip-20.md) interfaces. +- *Escrow Contract*: Defines the escrow policies and holds *Payable Contract*'s token for a certain period. This contract does not requires override [EIP-20](./eip-20.md) interfaces. ### Methods -#### constructor +#### `constructor` +The *Escrow Contract* demonstrates details of escrow policies as none-mutable matter in constructor implementation. The *Escrow Contract* MUST define the following policies: @@ -67,8 +66,7 @@ In the case of *Escrow Contract*: In the case of *Payable Contract*: - The address `_to` MUST be the *Escrow Contract* address. - - MUST call EIP-20's `transfer` function. - - Before calling `transfer` function, MUST call the same function of the *Escrow Contract* interface. The parameter `_to` MUST be `msg.sender` to recognize the user address in the *Escrow Contract*. + - MUST call the same function of the *Escrow Contract* interface. The parameter `_to` MUST be `msg.sender` to recognize the user address in the *Escrow Contract*. ```solidity function escrowFund(address _to, uint256 _value) public returns (bool) @@ -87,8 +85,7 @@ In the case of *Escrow Contract*: In the case of *Payable Contract*: - The address `_from` MUST be the *Escrow Contract* address. - - MUST call EIP-20's `_transfer` likely function. - - Before calling `_transfer` function, MUST call the same function of the *Escrow Contract* interface. The parameter `_from` MUST be `msg.sender` to recognize the user address in the *Escrow Contract*. + - MUST call the same function of the *Escrow Contract* interface. The parameter `_from` MUST be `msg.sender` to recognize the user address in the *Escrow Contract*. ```solidity function escrowRefund(address _from, uint256 _value) public returns (bool) @@ -110,36 +107,142 @@ function escrowWithdraw() public returns (bool) ### Example of interface +This example demonstrates simple exchange of one seller and one buyer in one-to-one exchange rates. ```solidity pragma solidity ^0.4.20; -interface IERC5528 is ERC20 { +interface IERC5528 { function escrowFund(address _to, uint256 _value) public returns (bool); - function escrowRefund(address to, uint256 amount) public returns (bool); + function escrowRefund(address _from, uint256 _value) public returns (bool); function escrowWithdraw() public returns (bool); } +contract PayableContract is IERC5528, IERC20 { + /* + General ERC20 implementations + */ + + function _transfer(address from, address to, uint256 amount) internal { + uint256 fromBalance = _balances[from]; + require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); + _balances[from] = fromBalance - amount; + _balances[to] += amount; + } + + function transfer(address to, uint256 amount) public returns (bool) { + address owner = msg.sender; + _transfer(owner, to, amount); + return true; + } + + function escrowFund(address _to, uint256 _value) public returns (bool){ + bool res = IERC5528(to).escrowFund(msg.sender, amount); + require(res, "Fund Failed"); + _transfer(msg.sender, to, amount); + return true; + } + + function escrowRefund(address _from, uint256 _value) public returns (bool){ + bool res = IERC5528(_from).escrowRefund(msg.sender, _value); + require(res, "Refund Failed"); + _transfer(_from, msg.sender, _value); + return true; + } +} + +contract EscrowContract is IERC5528 { + + enum State { Inited, Running, Success, Closed } + struct BalanceData { + address addr; + uint256 amount; + } + + address _addrSeller; + address _addrBuyer; + BalanceData _fundSeller; + BalanceData _fundBuyer; + EscrowStatus _status; + + constructor(address sellerContract, address buyerContract){ + _addrSeller = sellerContract; + _addrBuyer = buyerContract; + _status = State.Inited; + } + + function escrowFund(address _to, uint256 _value) public returns (bool){ + if(msg.sender == _addrSeller){ + require(_status.state == State.Running, "must be running state"); + _fundSeller.addr = _to; + _fundSeller.amount = _value; + _status = State.Success; + }else if(msg.sender == _addrBuyer){ + require(_status.state == State.Inited, "must be init state"); + _fundBuyer.addr = _to; + _fundBuyer.amount = _value; + _status = State.Running; + }else{ + require(false, "Invalid to address"); + } + return true; + } + + function escrowRefund(address _from, uint256 amount) public returns (bool){ + require(_status.state == State.Running, "refund is only available on running state"); + require(msg.sender == _addrBuyer, "invalid caller for refund"); + require(_fundBuyer.addr == _from, "only buyer can refund"); + require(_fundBuyer.amount >= amount, "buyer fund is not enough to refund"); + _fundBuyer.amount = _fundBuyer.amount - amount + return true; + } + + function escrowWithdraw() public returns (bool){ + require(_status.state == State.Success, "withdraw is only available on success state"); + uint256 common = MIN(_fundBuyer.amount, _fundSeller.amount); + + if(common > 0){ + _fundBuyer.amount = _fundBuyer.amount - common; + _fundSeller.amount = _fundSeller.amount - common; + + // Exchange + IERC5528(_addrSeller).transfer(_fundBuyer.addr, common); + IERC5528(_addrBuyer).transfer(_fundSeller.addr, common); + + // send back the remaining balances + if(_fundBuyer.amount > 0){ + IERC5528(_addrBuyer).transfer(_fundBuyer.addr, _fundBuyer.amount); + } + if(_fundSeller.amount > 0){ + IERC5528(_addrSeller).transfer(_fundSeller.addr, _fundSeller.amount); + } + } + + _status = State.Closed; + } + +} + ``` ## Rationale -The interfaces described in this EIP have been chosen to cover the refundable issue in the escrow operation. +The interfaces cover the escrow operation's refundable issue. The suggested 3 functions (`escrowFund`, `escrowRefund` and `escrowWithdraw`) are based on `transfer` function in EIP-20. `escrowFund` send tokens to the *Escrow Contract*. The *Escrow Contract* can hold the contract in the escrow process or reject tokens if the policy does not meet. -`escrowRefund` can be invoked in the middle of the escrow process or when the escrow process is failed. +`escrowRefund` can be invoked in the middle of the escrow process or when the escrow process fails. -`escrowWithdraw` allows users (sellers and buyers) to transfer tokens from the escrow account. When the escrow process is completed, the seller can get the buyer's token, and the buyers can get the seller's token. +`escrowWithdraw` allows users (sellers and buyers) to transfer tokens from the escrow account. When the escrow process completes, the seller can get the buyer's token, and the buyers can get the seller's token. ## Backwards Compatibility -This EIP is fully backward compatible with the [EIP-20](./eip-20.md) specification. +The *Payable Contract* which implements this EIP is fully backward compatible with the [EIP-20](./eip-20.md) specification. ## Test Cases From c6810218f47f6a26dacb37bbaf8d8c801f9b81e8 Mon Sep 17 00:00:00 2001 From: EmojiDao <96720682+emojidao@users.noreply.github.com> Date: Wed, 26 Oct 2022 00:42:44 +0800 Subject: [PATCH 036/113] EIP-5006: Change 'uint256 amount' to 'uint64 amount' (#5833) Co-authored-by: Anders --- EIPS/eip-5006.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/EIPS/eip-5006.md b/EIPS/eip-5006.md index dd2369c50b0508..996afb18a72154 100755 --- a/EIPS/eip-5006.md +++ b/EIPS/eip-5006.md @@ -45,10 +45,10 @@ interface IERC5006 { event CreateUserRecord( uint256 recordId, uint256 tokenId, - uint256 amount, + uint64 amount, address owner, address user, - uint64 expiry + uint64 expiry ); /** From 773f0248efadc3ce4b8a07c172ea14da31d5281d Mon Sep 17 00:00:00 2001 From: Alex Stokes Date: Tue, 25 Oct 2022 14:15:15 -0600 Subject: [PATCH 037/113] update EIP with `validator_index` and more info around `index` (#5835) --- EIPS/eip-4895.md | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/EIPS/eip-4895.md b/EIPS/eip-4895.md index d0f199df2de987..97d254ae335d3b 100644 --- a/EIPS/eip-4895.md +++ b/EIPS/eip-4895.md @@ -40,12 +40,15 @@ Beginning with the execution timestamp `FORK_TIMESTAMP`, execution clients **MUS Define a new payload-level object called a `withdrawal` that describes withdrawals that have been validated at the consensus layer. `Withdrawal`s are syntactically similar to a user-level transaction but live in a different domain than user-level transactions. -`Withdrawal`s have three key pieces of information supplied from the consensus layer: -1. a monotonically increasing `index` as a `uint64` value that uniquely identifies each withdrawal -2. a recipient for the withdrawn ether `address` as a 20-byte value -3. an `amount` of ether given in wei as a 256-bit value. +`Withdrawal`s provide key information from the consensus layer: +1. a monotonically increasing `index`, starting from 0, as a `uint64` value that increments by 1 per withdrawal to uniquely identify each withdrawal +2. the `validator_index` of the validator on the consensus layer the withdrawal corresponds to +3. a recipient for the withdrawn ether `address` as a 20-byte value +4. an `amount` of ether given in wei as a 256-bit value. -`Withdrawal` objects are serialized as a RLP list according to the schema: `[index, address, amount]`. +*NOTE*: the `index` for each withdrawal is a global counter spanning the entire sequence of withdrawals. + +`Withdrawal` objects are serialized as a RLP list according to the schema: `[index, validator_index, address, amount]`. ### New field in the execution payload: withdrawals @@ -54,8 +57,8 @@ The execution payload gains a new field for the `withdrawals` which is an RLP li For example: ```python -withdrawal_0 = [index_0, address_0, amount_0] -withdrawal_1 = [index_1, address_1, amount_1] +withdrawal_0 = [index_0, validator_index_0, address_0, amount_0] +withdrawal_1 = [index_1, validator_index_1, address_1, amount_1] withdrawals = [withdrawal_0, withdrawal_1] ``` @@ -145,7 +148,7 @@ An entirely new type of object firewalls off generic EVM execution from this typ The maximum number of withdrawals that can reach the execution layer at a given time is bounded (enforced by the consensus layer) and this limit has been chosen so that any execution layer operational costs are negligible in the context of the broader payload execution. -This bound applies to both computational cost (only a few balance updates in the state) and storage/networking cost as the additional payload footprint is kept small (current parameterizations put the additional overhead at ~1% of current average payload size). +This bound applies to both compuggational cost (only a few balance updates in the state) and storage/networking cost as the additional payload footprint is kept small (current parameterizations put the additional overhead at ~1% of current average payload size). ### Why only balance updates? No general EVM execution? From 30a7e53cb462bcb2e873baa94f0557f9554c2380 Mon Sep 17 00:00:00 2001 From: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> Date: Tue, 25 Oct 2022 16:19:03 -0400 Subject: [PATCH 038/113] CI: Fix Markdown Linter & CodeSpell (#5818) * CI: Fix Markdown Linter * Fix typo * Re-add filter * Run only if there are files to lint * Test * Revert test * Update ci.yml --- .github/workflows/ci.yml | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1440a8f5cef546..b07a6f95ca3262 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -43,7 +43,7 @@ jobs: steps: - name: Checkout EIP Repository uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b - + - name: Install OpenSSL run: sudo apt-get update && sudo apt-get install -y libcurl4-openssl-dev @@ -71,7 +71,7 @@ jobs: steps: - name: Checkout EIP Repository uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b - + - name: Get Changed Files uses: tj-actions/changed-files@1d6e210c970d01a876fbc6155212d068e79ca584 id: changed-files @@ -106,16 +106,31 @@ jobs: steps: - name: Checkout EIP Repository uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b - - - name: Delete Unchanged Files + with: + fetch-depth: 0 + + - name: Get Changed Files + uses: tj-actions/changed-files@1d6e210c970d01a876fbc6155212d068e79ca584 id: changed-files - uses: Pandapip1/delete-unchanged-files@0937c94da2e9f9f262bbf2035e75065a1fd04bcf + with: + separator: "," + files: | + EIPS/*.md + *.md + + - name: Replace Commas with Newlines # Hack needed due to limitation of GitHub actions + run: | + echo "CHANGED_FILES<> $GITHUB_ENV + echo "$RAW_CHANGED_FILES" | tr , "\n" >> $GITHUB_ENV + echo "EOF" >> $GITHUB_ENV + env: + RAW_CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }} - name: Lint uses: DavidAnson/markdownlint-cli2-action@16d9da45919c958a8d1ddccb4bd7028e8848e4f1 + if: steps.changed-files.outputs.any_changed == 'true' with: command: config globs: | config/.markdownlint.yaml - EIPS/*.md - *.md + ${{ env.CHANGED_FILES }} From 4e83ad5184fbe5136d67c16ac9005142ba77678f Mon Sep 17 00:00:00 2001 From: Alex Stokes Date: Tue, 25 Oct 2022 14:54:31 -0600 Subject: [PATCH 039/113] Update EIP-4895: update status to review (#5822) * eip-4895: update status to review * remove references to draft EIPs --- EIPS/eip-4895.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/EIPS/eip-4895.md b/EIPS/eip-4895.md index 97d254ae335d3b..bcdb5c1e8e774a 100644 --- a/EIPS/eip-4895.md +++ b/EIPS/eip-4895.md @@ -4,7 +4,7 @@ title: Beacon chain push withdrawals as operations description: Support validator withdrawals from the beacon chain to the EVM via a new "system-level" operation type. author: Alex Stokes (@ralexstokes), Danny Ryan (@djrtwo) discussions-to: https://ethereum-magicians.org/t/eip-4895-beacon-chain-withdrawals-as-system-level-operations/8568 -status: Draft +status: Review type: Standards Track category: Core created: 2022-03-10 @@ -22,10 +22,10 @@ This EIP provides a way for validator withdrawals made on the beacon chain to en The architecture is "push"-based, rather than "pull"-based, where withdrawals are required to be processed in the execution layer as soon as they are dequeued from the consensus layer. Withdrawals are represented as a new type of object in the execution payload -- an "operation" -- that separates the withdrawals feature from user-level transactions. -This approach is more involved than the prior [EIP-4863](./eip-4863.md) but it cleanly separates this "system-level" operation from regular transactions. +This approach is more involved than the prior approach introducing a new transaction type but it cleanly separates this "system-level" operation from regular transactions. The separation simplifies testing (so facilitates security) by reducing interaction effects generated by mixing this system-level concern with user data. -Moreover, this approach is more complex than "pull"-based alternatives (e.g. [EIP-4788](./eip-4788.md) + user-space withdrawal contract) with respect to the core protocol but does provide tighter integration of a critical feature into the protocol itself. +Moreover, this approach is more complex than "pull"-based alternatives with respect to the core protocol but does provide tighter integration of a critical feature into the protocol itself. ## Specification From cf97807f11dbf5ad16c457350340ce1ae4fd32b6 Mon Sep 17 00:00:00 2001 From: Greg Colvin Date: Wed, 26 Oct 2022 02:12:39 -0400 Subject: [PATCH 040/113] Update EIP-2315: Yellow Paper link (#5823) * Yellow Paper link * Link to Yellow Paper * Tone it down. --- EIPS/eip-2315.md | 41 ++++++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/EIPS/eip-2315.md b/EIPS/eip-2315.md index e46789d6901bbb..83b02ece5b807d 100644 --- a/EIPS/eip-2315.md +++ b/EIPS/eip-2315.md @@ -16,10 +16,12 @@ requires: 3540, 3670, 4200 This proposal provides a _complete_, _efficient_, _safe_ and _static_ control-flow facility. It introduces two new opcodes to support calling and returning from subroutines: + * `RJUMPSUB relative_offset` -- relative jump to subroutine * `RETURNSUB` -- return to `PC` after most recent `RJUMPSUB`. It depends on the two new opcodes proposed by [EIP-4200](./eip-4200.md) to support static jumps: + * `RJUMP relative_offset` — relative jump to `PC + relative_offset` * `RJUMPI relative_offset` — conditional relative jump @@ -31,34 +33,34 @@ This is among the simplest possible proposals that meets these requirements. ## Motivation -### We need a complete control-flow facility. +### A complete control-flow facility. Jumps, conditional jumps and subroutines were proposed by Alan Turing in 1945 as a means of organizing the logic of the code and the design of the memory crystals for his Automatic Computing Engine: > We wish to be able to arrange that sequences of orders can divide at various points, continuing in different ways according to the outcome of the calculations to date... We also wish to be able to arrange for the splitting up of operations into subsidiary operations... To start on a subsidiary operation we need only make a note of where we left off the major operation and then apply the first instruction of the subsidiary. When the subsidiary is over we look up the note and continue with the major operation. -> -> — Alan Turing — *in B.E. Carpenter, R.W. Doran, "The other Turing machine." The Computer Journal, Volume 20, Issue 3, January 1977.* +> +> — Alan Turing — in B.E. Carpenter, R.W. Doran, "The other Turing machine." The Computer Journal, Volume 20, Issue 3, January 1977. In more contemporary terms, we have sequences of instructions, jumps and conditional jumps that divide sequences into blocks, subroutine calls, and a stack of addresses to return to. The details vary, but similar facilities have proven their value across a long line of important machines over the last 75 years, including most all of the machines we have programmed or implemented -- physical machines including the Burroughs 5000, CDC 7600, IBM 360, DEC PDP-11 and VAX, Motorola 68000, Sun SPARC, and Intel x86s, as well as virtual machines for Scheme, Forth, Pascal, Java, Wasm, and others. Unlike these machines, the Ethereum Virtual Machine _does not_ provide subroutine operations. Instead, they must be synthesized using the dynamic `JUMP` instruction, which takes its destination on the stack. Further, the EVM provides _only_ dynamic jumps, impeding the static analysis we need. -### We need efficient control-flow. +### Efficient control-flow. Efficient to write by hand, compile from high level labguages, validate at deploy time, interpret by VMs, and compile to machine code. Static jumps, conditional jumps, and subroutines are sufficient and efficient in space and time, as shown by historical experience and as we will show for the EVM below. -### We need safe control-flow. +### Safe control-flow. -The EVM has unusually high requirements for safety. Not only do many smart contracts control inordinately large amounts of valuable Ether, but once placed on the blockchain any defects are visible to attackers and cannot be repaired. We need to statically validate important safety constraints on code at initialization time. +The EVM has unusually high requirements for safety. Not only do many smart contracts control inordinately large amounts of valuable Ether, but once placed on the blockchain any defects are visible to attackers and cannot be repaired. We propose to statically validate important safety constraints on code at initialization time. -### We need static control-flow. +### Static control-flow. The EVM's dynamic jumps cause two major problems. First, the need to synthesize static jumps and subroutines with dynamic jumps wastes space and gas with needlessly complex code, as we will show below. Worse, jumps that can dynamically branch to any destination in the code can cause quadratic "path explosions" when traversing the flow of control. For Ethereum, this is a denial-of-service vulnerability that prevents us, at initialization time, from validating the safe use of EVM code and from compiling EVM code to machine code. -We need static control-flow to support streaming, one-pass, and other near-linear compilers of EVM bytecode to machine code. +We _need_ static control-flow to validate program safety and to compile EVM bytecode to machine code -- in time and space linear in the size of the code. ## Specification @@ -67,6 +69,7 @@ We need static control-flow to support streaming, one-pass, and other near-linea #### `RJUMPSUB (0x5f) relative_offset Transfers control to a subroutine. + 1. Decode the `relative_offset` from the immediate data at `PC`. 2. Push the current `PC + 3` to the `return stack`. 3. Set `PC` to `PC + relative_offset`. @@ -78,17 +81,20 @@ The gas cost is _low_. #### `RETURNSUB (0x5e)` Returns control to the caller of a subroutine. + 1. Pop the `return stack` to `PC`. The gas cost is _verylow_. _Notes:_ -* _Values popped off the `return stack` do not need to be validated, since they are alterable only by `RJUMPSUB` and `RETURNSUB`._ + +* _Values popped off the `return stack` do not need to be validated, since they are alterable only by `RJUMPSUB` and `RETURNSUB`._ * _The description above lays out the semantics of these instructions in terms of a `return stack`. But the actual state of the `return stack` is not observable by EVM code or consensus-critical to the protocol. (For example, a node implementer may code `RJUMPSUB` to unobservably push `PC` on the `return stack` rather than `PC + 1`, which is allowed so long as `RETURNSUB` observably returns control to the `PC + 3` location.)_ ### Validity -_Execution_ is defined in the Yellow Paper as sequence of changes in the EVM state. The conditions on valid code are preserved by state changes. At runtime, if execution of an instruction would violate a condition the execution is in an exceptional halting state. The Yellow Paper defines six such states. +_Execution_ is defined in the Yellow Paper as a sequence of changes in the EVM state. The conditions on valid code are preserved by state changes. At runtime, if execution of an instruction would violate a condition the execution is in an exceptional halting state. The Yellow Paper defines six such states. + 1. Insufficient gas 2. More than 1024 stack items 3. State modification during a static call @@ -96,7 +102,7 @@ _Execution_ is defined in the Yellow Paper as sequence of changes in the EVM sta 5. Invalid jump destination 6. Invalid instruction -We would like to consider EVM code valid iff no execution of the program can lead to an exceptional halting state. In practice, we must test at runtime for conditions 1, 2, and 3 — sufficient gas and sufficient stack. We don’t know how much gas there will be, we don’t know how deep a recursion may go, analysis of stack depth even for non-recursive programs is nontrivial, and we don't know whether a call will be static. All of the remaining conditions MUST be validated statically, in time and space quasi-linear in the size of the code. +We would like to consider EVM code valid iff no execution of the program can lead to an exceptional halting state. In practice, we must test at runtime for the first three conditions. We don’t know how much gas there will be, we don’t know how deep a recursion may go, analysis of stack depth even for non-recursive programs is nontrivial, and we don't know whether a call will be static. All of the remaining conditions MUST be validated statically, in time and space quasi-linear in the size of the code. #### Static Constraints on Valid Code @@ -110,7 +116,7 @@ We would like to consider EVM code valid iff no execution of the program can lea * The data stack MUST be consistently aligned: * The data stack height is * the absolute difference between the current `stack pointer` and the `stack pointer` on entry to the current subroutine. - * It MUST be the same for every reachable path through a given `PC` and + * It MUST be the same for every reachable path through a given `PC` and * MUST NOT exceed 1024. ## Rationale @@ -128,6 +134,7 @@ The constraints on valid code cover all of the exceptional halting states that w The `RJUMP`, `RJUMPI` and `RJUMPSUB` instructions take their *relative_offset* as immediate arguments, which cannot change at runtime. Having constant destinations for all jumps means that all jump destinations can be validated at initialization time, not runtime. Dynamic jumps can branch to any destination in the code, so exploitable quadratic "path explosions" are possible when traversing the control flow graph. Deprecating `JUMP` and `JUMPI` prevents this. Requiring a consistently aligned `data stack` + * prevents stack underflow * ensures that all calls to a subroutine have the same number of inputs and the same number of outputs and * ensures that stack height is bounded in the absence of recursion. @@ -156,7 +163,7 @@ There are a few major designs for a subroutine facility, two of which are consid ### Efficiency -We illustrate here how subroutine instructions can be used to reduce the complexity and gas costs of both ordinary and optimized subroutine calls compared to using `JUMP`. +We illustrate here how subroutine instructions can be used to reduce the complexity and gas costs of both ordinary and optimized subroutine calls compared to using `JUMP`. #### **Simple Subroutine Call** @@ -168,7 +175,7 @@ SQUARE: dup1 ; 3 gas mul ; 5 gas returnsub ; 3 gas - + CALL_SQUARE: push 0x02 ; 3 gas rjumpsub SQUARE ; 5 gas @@ -327,9 +334,9 @@ Bytecode: `0x5c035e5ff` (`RJUMP 3, RETURNSUB, RJUMPSUB -1`) Consumed gas: `15` -## Reference Implementation +## Reference Implementation -The following is a pseudo-Python implementation of an algorithm for predicating code validity. An equivalent algorithm must be run at initialization time. +The following is a pseudo-Python implementation of an algorithm for predicating code validity. An equivalent algorithm must be run at initialization time. This algorithm performs a symbolic execution of the program that recursively traverses the _code_, emulating its control flow and stack use and checking for violations of the rules above. @@ -401,7 +408,7 @@ def validate_code(code: bytes, pc: int, sp: int, bp: int) -> boolean: return false push(return_stack, pc + 3) pc = jumpdest - continue + continue elif opcode == RETURNSUB: From 958a9fd969ea5d45b9edc812021e7e5cbf6eaa59 Mon Sep 17 00:00:00 2001 From: Sam Wilson <57262657+SamWilsn@users.noreply.github.com> Date: Wed, 26 Oct 2022 07:01:01 -0400 Subject: [PATCH 041/113] Grab latest eipw-action (#5836) This release adds: * Bug fix for `requires:` header. * Configurable allow/warn/deny levels per lint. * No colons in title/description. --- .github/workflows/ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b07a6f95ca3262..b136102c3439a2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -94,7 +94,7 @@ jobs: - name: Checkout EIP Repository uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b - - uses: ethereum/eipw-action@965202a8042097a457d8269ef1f4cc050d713060 + - uses: ethereum/eipw-action@3b4a2599d62433ef0c99766ab9836b0accf80edd id: eipw with: token: ${{ secrets.GITHUB_TOKEN }} @@ -108,7 +108,7 @@ jobs: uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b with: fetch-depth: 0 - + - name: Get Changed Files uses: tj-actions/changed-files@1d6e210c970d01a876fbc6155212d068e79ca584 id: changed-files @@ -117,7 +117,7 @@ jobs: files: | EIPS/*.md *.md - + - name: Replace Commas with Newlines # Hack needed due to limitation of GitHub actions run: | echo "CHANGED_FILES<> $GITHUB_ENV From 095cf7d6589c3f21994d7845d5acce365ad1e36b Mon Sep 17 00:00:00 2001 From: VeegaLabs Official <112372274+VeegaLabsOfficial@users.noreply.github.com> Date: Wed, 26 Oct 2022 19:48:16 +0800 Subject: [PATCH 042/113] =?UTF-8?q?Update=20EIP-5585:=20Introduce=20a=20?= =?UTF-8?q?=E2=80=9Crights=E2=80=9D=20attribute=20in=20UserRecord=20struct?= =?UTF-8?q?=20to=20identify=20diffe=E2=80=A6=20(#5837)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Introduce a “rights” attribute in UserRecord struct to identify different types of authorization and update relevant segments in Motivation, Interface, and Rational. * Fix a typo --- EIPS/eip-5585.md | 77 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 53 insertions(+), 24 deletions(-) diff --git a/EIPS/eip-5585.md b/EIPS/eip-5585.md index a950616898a5b0..3dd1e3cde058a6 100644 --- a/EIPS/eip-5585.md +++ b/EIPS/eip-5585.md @@ -17,10 +17,9 @@ This EIP separates an [EIP-721](./eip-721.md) NFT's ownership from its commercia ## Motivation -Most NFTs have a simplified ownership verification mechanism, with a sole owner of an NFT. Under this model, other rights, such as exhibition, or derivative works, are not possible to grant, limiting the value and commercialization of NFTs. Therefore, the separation of an NFT's ownership and user rights can enhance its commercial value. - -With the development of the Metaverse, NFTs are becoming more diverse, with new use cases such as digital collections, virtual real estate, and commercial copyrights. Meanwhile, the commercial rights, such as exhibition, derivative or commercial authorization based on NFTs are becoming a potential business form. +Most NFTs have a simplified ownership verification mechanism, with a sole owner of an NFT. Under this model, other rights, such as display, or creating derivative works or distribution, are not possible to grant, limiting the value and commercialization of NFTs. Therefore, the separation of an NFT's ownership and user rights can enhance its commercial value. +Commercial right is a broad concept based on the copyright, including the rights of copy, display, distribution, renting, commercial use, modify, reproduce and sublicense etc. With the development of the Metaverse, NFTs are becoming more diverse, with new use cases such as digital collections, virtual real estate, music, art, social media, and digital asset of all kinds. The copyright and authorization based on NFTs are becoming a potential business form. ## Specification @@ -30,47 +29,69 @@ The keywords “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL N ```solidity interface IERC5585 { - + struct UserRecord { address user; + string[] rights; uint expires } - /// @notice NFT holder authorizes his NFT to a user for a specified period of time + /// @notice NFT holder authorizes all the rights to a user for a specified period of time + /// @dev The zero address indicates there is no user + /// @param tokenId The NFT which is authorized + /// @param user The user to whom the NFT is authorized + /// @param duration The period of time the authorization lasts + function authorizeUser(uint256 tokenId, address user, uint duration) external; + + /// @notice NFT holder authorizes specific rights to a user for a specified period of time /// @dev The zero address indicates there is no user /// @param tokenId The NFT which is authorized /// @param user The user to whom the NFT is authorized + /// @param rights Rights autorised to the user, such as renting, distribution or display etc /// @param duration The period of time the authorization lasts - function userAuthorization(uint256 tokenId, address user, uint duration) external returns(uint); + function authorizeUser(uint256 tokenId, address user, string[] rights, uint duration) external; /// @notice NFT holder extends the duration of authorization /// @dev The zero address indicates there is no user /// @param tokenId The NFT which has been authorized /// @param user The user to whom the NFT has been authorized /// @param duration The new duration of the authorization - function durationUpdate(uint256 tokenId, address user, uint duration) external; + function extendDuration(uint256 tokenId, address user, uint duration) external; + + /// @notice NFT holder updates the rights of authorization + /// @dev The zero address indicates there is no user + /// @param tokenId The NFT which has been authorized + /// @param user The user to whom the NFT has been authorized + /// @param rights New rights autorised to the user + function updateUserRights(uint256 tokenId, address user, string[] rights) external; /// @notice Get the authorization expired time of the specified NFT and user /// @dev The zero address indicates there is no user /// @param tokenId The NFT to get the user expires for /// @param user The user who has been authorized /// @return The authorization expired time - function userExpiresTime(uint256 tokenId, address user) external view returns(uint); + function getExpires(uint256 tokenId, address user) external view returns(uint); + + /// @notice Get the rights of the specified NFT and user + /// @dev The zero address indicates there is no user + /// @param tokenId The NFT to get the rights + /// @param user The user who has been authorized + /// @return The rights has been authorized + function getUserRights(uint256 tokenId, address user) external view returns(string[]); /// @notice The contract owner can update the number of users that can be authorized per NFT /// @param userLimit The number of users set by operators only - function userLimitUpdate(unit256 userLimit) external onlyOwner; - + function updateUserLimit(unit256 userLimit) external onlyOwner; + /// @notice resetAllowed flag can be updated by contract owner to control whether the authorization can be revoked or not /// @param resetAllowed It is the boolean flag - function resetAllowedUpdate(bool resetAllowed) external onlyOwner; - + function updateResetAllowed(bool resetAllowed) external onlyOwner; /// @notice Check if the token is available for authorization /// @dev Throws if tokenId is not a valid NFT /// @param tokenId The NFT to be checked the availability /// @return true or false whether the NFT is available for authorization or not - function authorizationAvailabilityCheck (uint256 tokenId) public view returns(bool); + function checkAuthorizationAvailability(uint256 tokenId) public view returns(bool); /// @notice Clear authorization of a specified user /// @dev The zero address indicates there is no user. The function works when resetAllowed is true and it will throw exception when false @@ -82,44 +103,52 @@ interface IERC5585 { /// @dev The zero address indicates there is no user /// @param user To which user the staking time will be set /// @param stakingTime The starting time of the staking for each user - function stakingTimeUpdate(address[] user, uint[] stakingTime) external; + function updateStakingTime(address[] user, uint[] stakingTime) external; /// @notice Emitted when the user of a NFT is changed or the authorization expires time is updated /// param tokenId The NFT on which the authorization based /// param indexed user The user to whom the NFT authorized + /// @param rights Rights autorised to the user /// param expires The expires time of the authorization - event userAuthorization(uint256 indexed tokenId, address indexed user, uint expires); + event authorizeUser(uint256 indexed tokenId, address indexed user, string[] rights, uint expires); } ``` +The `authorizeUser(uint256 tokenId, address user, uint duration)` function MAY be implemented as `public` or `external`. + +The `authorizeUser(uint256 tokenId, address user, string[] rights; uint duration)` function MAY be implemented as `public` or `external`. + +The `extendDuration(uint256 tokenId, address user, uint duration)` function MAY be implemented as `public` or `external`. -The `userAuthorization(uint256 tokenId, address user, uint duration)` function MAY be implemented as `public` or `external`. +The `updateUserRights(uint256 tokenId, address user, string[] rights)` function MAY be implemented as `public` or `external`. -The `durationUpdate(uint256 tokenId, address user, uint duration)` function MAY be implemented as `public` or `external`. +The `getExpires(uint256 tokenId, address user)` function MAY be implemented as `pure` or `view`. -The `userExpiresTime(uint256 tokenId, address user)` function MAY be implemented as `pure` or `view`. +The `getUserRights(uint256 tokenId, address user)` function MAY be implemented as pure and view. -The `userLimitUpdate(unit256 userLimit)` function MAY be implemented as`public` or `external`. +The `updateUserLimit(unit256 userLimit)` function MAY be implemented as`public` or `external`. -The `resetAllowedUpdate(bool resetAllowed)` function MAY be implemented as `public` or `external`. +The `updateResetAllowed(bool resetAllowed)` function MAY be implemented as `public` or `external`. -The `authorizationAvailabilityCheck (uint256 tokenId)` function MAY be implemented as `pure` or `view`. +The `checkAuthorizationAvailability(uint256 tokenId)` function MAY be implemented as `pure` or `view`. The `resetUser(uint256 tokenId, address user)` function MAY be implemented as `public` or `external`. -The `stakingTimeUpdate(address[] user, uint[] stakingTime)` function MAY be implemented as `public` or `external`. +The `updateStakingTime(address[] user, uint[] stakingTime)` function MAY be implemented as `public` or `external`. -The `userAuthorization` event MUST be emittedwhen the user of a NFT is changed or the authorization expires time is updated. +The `authorizeUser` event MUST be emittedwhen the user of a NFT is changed or the authorization expires time is updated. ## Rationale First of all, NFT contract owner can set the maximum number of authorized users to each NFT and whether the NFT owner can cancel the authorization at any time to protect the interests of the parties involved. - + Secondly, this EIP combines the functions of staking and authorization, which means the NFT contract owner can update the number of authorized users to NFT owners depending on the period of staking. The function is optional, but it is a way to protect all parties from overhype and to ensure that the price of the NFT is more accurately to match its value. Thirdly, there is a resetAllowed flag to control the rights between the NFT owner and the users for the contract owner. If the flag is set to true, then the NFT owner can disable usage rights of all authorized users at any time. +Fourthly, the rights within the user record struct is used to store what rights has been authorized to a user by the NFT owner, in other words, the NFT owner can authorize a user with specific rights and update it when necessary. + Finally, this design can be seamlessly integrated with third parties. It is an extension of EIP-721, therefore it can be easily integrated into a new NFT project. Other projects can directly interact with these interfaces and functions to implement their own types of transactions. For example, an announcement platform could use this EIP to allow all NFT owners to make authorization or deauthorization at any time. ## Backwards Compatibility From b2d26913151e097c15e90c6f7ae0935014cbb091 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20M=2EM?= <32136734+ivanmmurciaua@users.noreply.github.com> Date: Wed, 26 Oct 2022 14:02:09 +0200 Subject: [PATCH 043/113] Update EIP-5216: Move to Last Call (#5839) * Update EIP-5216: Move to Last Call * Set last call deadline * Minor changes Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> --- EIPS/eip-5216.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/EIPS/eip-5216.md b/EIPS/eip-5216.md index 9f692450bd2e29..1e16fd4ce598cb 100644 --- a/EIPS/eip-5216.md +++ b/EIPS/eip-5216.md @@ -4,7 +4,8 @@ title: EIP-1155 Approval By Amount Extension description: Extension for EIP-1155 secure approvals author: Iván Mañús (@ivanmmurciaua), Juan Carlos Cantó (@EscuelaCryptoES) discussions-to: https://ethereum-magicians.org/t/eip-erc1155-approval-by-amount/9898 -status: Review +status: Last Call +last-call-deadline: 2022-11-12 type: Standards Track category: ERC created: 2022-07-11 @@ -13,11 +14,11 @@ requires: 20, 165, 1155 ## Abstract -This specification defines standard functions for granular approval of [EIP-1155](./eip-1155.md) tokens by both `id` and `amount`. This EIP extends [EIP-1155](./eip-1155.md). +This EIP defines standard functions for granular approval of [EIP-1155](./eip-1155.md) tokens by both `id` and `amount`. This EIP extends [EIP-1155](./eip-1155.md). ## Motivation -[EIP-1155](./eip-1155.md)'s popularity means that multi-token management transactions occur on a daily basis. Although it can be used as a more comprehensive alternative to [EIP-721](./eip-721.md), it is most commonly used as intended: creating multiple `id`s, each with multiple tokens. While many projects interface with these semi-fungible tokens, by far the most common interactions are with NFT marketplaces. +[EIP-1155](./eip-1155.md)'s popularity means that multi-token management transactions occur on a daily basis. Although it can be used as a more comprehensive alternative to [EIP-721](./eip-721.md), EIP-1155 is most commonly used as intended: creating multiple `id`s, each with multiple tokens. While many projects interface with these semi-fungible tokens, by far the most common interactions are with NFT marketplaces. Due to the nature of the blockchain, programming errors or malicious operators can cause permanent loss of funds. It is therefore essential that transactions are as trustless as possible. EIP-1155 uses the `setApprovalForAll` function, which approves ALL tokens with a specific `id`. This system has obvious minimum required trust flaws. This EIP combines ideas from [EIP-20](./eip-20.md) and [EIP-721](./eip-721.md) in order to create a trust mechanism where an owner can allow a third party, such as a marketplace, to approve a limited (instead of unlimited) number of tokens of one `id`. From eff90f24ac9b375d4e0e6828a655e7d148bb36c6 Mon Sep 17 00:00:00 2001 From: Joe Jordan Date: Wed, 26 Oct 2022 08:04:29 -0400 Subject: [PATCH 044/113] Grammatical improvements, typo corrections (#5834) This PR fixes several typos and offers grammatical and verbiage improvements to help improve clarity. --- EIPS/eip-3525.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/EIPS/eip-3525.md b/EIPS/eip-3525.md index 47f62f12c4cd0c..5f0573edaf9c87 100644 --- a/EIPS/eip-3525.md +++ b/EIPS/eip-3525.md @@ -536,25 +536,25 @@ The purpose of maintaining id-to-address transfer function is to maximize the co ### Design decision: Notification/acceptance mechanism instead of 'Safe Transfer' -EIP-721 and some later token standards introduced 'Safe Transfer' model, for better control of the 'safety' when transferring tokens, this mechanism leaves the choice of different transfer mode (safe/unsafe) to the sender, and may cause some potential problem: +EIP-721 and some later token standards introduced 'Safe Transfer' model, for better control of the 'safety' when transferring tokens, this mechanism leaves the choice of different transfer modes (safe/unsafe) to the sender, and may cause some potential problems: -1. In most situation the sender don't know how to choose between two kinds of transfer methods (safe/unsafe); -2. If the sender calls the `safeTransferFrom` method, the transfer may fail when the recipient contract didn't implements the callback function, even if that contract can receive and manipulate the token with no problem. +1. In most situations the sender does not know how to choose between two kinds of transfer methods (safe/unsafe); +2. If the sender calls the `safeTransferFrom` method, the transfer may fail if the recipient contract did not implement the callback function, even if that contract is capable of receiving and manipulating the token without issue. This EIP defines a simple 'Check, Notify and Response' model for better flexibility as well as simplicity: 1. No extra `safeTransferFrom` methods are needed, all callers only need to call one kind of transfer; -2. All EIP-3525 contracts need to MUST check for the existence of `onERC3525Received` on the recipient contract and call the function when it exists; -3. Any smart contract can implement `onERC3525Received` function for purpose of being notified after receiving values, in this function it can return certain pre-defined value to accept the transfer, or any other value to reject. +2. All EIP-3525 contracts MUST check for the existence of `onERC3525Received` on the recipient contract and call the function when it exists; +3. Any smart contract can implement `onERC3525Received` function for the purpose of being notified after receiving values; this function MUST return 0x009ce20b (i.e. `bytes4(keccak256('onERC3525Received(address,uint256,uint256,uint256,bytes)'))`) if the transfer is accepted, or any other value if the transfer is rejected. -There is a special case for this notification/acceptance mechanism, since EIP-3525 allow value transfer from an address to itself, so that when a smart contract which implements `onERC3525Received` transfers value to itself, this function will also be called. So that the contract is responsible to choose different rules of acceptance between self-value-transfer and receiving value from other addresses. +There is a special case for this notification/acceptance mechanism: since EIP-3525 allows value transfer from an address to itself, when a smart contract which implements `onERC3525Received` transfers value to itself, `onERC3525Received` will also be called. This allows for the contract to implement different rules of acceptance between self-value-transfer and receiving value from other addresses. ### Design decision: Relationship between different approval models For semantic compatibility with EIP-721 as well as the flexibility of value manipulation of tokens, we decided to define the relationships between some of the levels of approval like that: -1. Approval of an id will lead to the ability to partially transfer values from this id by the approved operator, this will simplify the value approval for an id. However, the approval of total values in a token should not lead to the ability to transfer the token entity by the approved operator. -2. `setApprovalForAll` will lead to the ability to partially transfer values from any token, as well as the ability to approve partial transfer of values from any token to a third party, this will simplify the value transfer and approval of all tokens owned by an address. +1. Approval of an id will lead to the ability to partially transfer values from this id by the approved operator; this will simplify the value approval for an id. However, the approval of total values in a token should not lead to the ability to transfer the token entity by the approved operator. +2. `setApprovalForAll` will lead to the ability to partially transfer values from any token, as well as the ability to approve partial transfer of values from any token to a third party; this will simplify the value transfer and approval of all tokens owned by an address. ## Backwards Compatibility @@ -566,9 +566,9 @@ As mentioned in the beginning, this EIP is backward compatible with EIP-721. ## Security Considerations -The value level approval and slot level approval(optional) is isolated from EIP-721 approval models, so that approving value should not affect EIP-721 level approvals, implementations of this EIP must obey this principle. +The value level approval and slot level approval (optional) is isolated from EIP-721 approval models, so that approving value should not affect EIP-721 level approvals. Implementations of this EIP must obey this principle. -Since this EIP is EIP-721 compatible, any wallets and smart contracts that can hold and manipulate standard EIP-721 tokens will have no risks of asset loss for EIP-3525 tokens. +Since this EIP is EIP-721 compatible, any wallets and smart contracts that can hold and manipulate standard EIP-721 tokens will have no risks of asset loss for EIP-3525 tokens due to incompatible standards implementations. ## Copyright From 8a0f588e33d7ebcc8046fecf0e0a942fcfe0af7c Mon Sep 17 00:00:00 2001 From: cygaar <97691933+cygaar@users.noreply.github.com> Date: Wed, 26 Oct 2022 17:22:08 -0700 Subject: [PATCH 045/113] Update 5791 interface (#5842) --- EIPS/eip-5791.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/EIPS/eip-5791.md b/EIPS/eip-5791.md index 43c18bd891b447..0b1048104cbe94 100644 --- a/EIPS/eip-5791.md +++ b/EIPS/eip-5791.md @@ -65,7 +65,7 @@ interface IERC5791 { /// @param payload Arbitrary data that is signed by the chip to produce the signature param. /// @param signature Chip's signature of the passed-in payload. /// @return Whether the signature of the payload was signed by the chip linked to the token id. - function isChipSignatureForToken(uint256 tokenId, bytes32 payload, bytes calldata signature) + function isChipSignatureForToken(uint256 tokenId, bytes calldata payload, bytes calldata signature) external view returns (bool); @@ -98,7 +98,7 @@ interface IERC5791 { ``` -To aid recognition that an [EIP-721](./eip-721.md) token implements physical binding via this EIP: upon calling [EIP-165](./eip-165.md)’s `function supportsInterface(bytes4 interfaceID) external view returns (bool)` with `interfaceID=0xa70d2657`, a contract implementing this EIP must return true. +To aid recognition that an [EIP-721](./eip-721.md) token implements physical binding via this EIP: upon calling [EIP-165](./eip-165.md)’s `function supportsInterface(bytes4 interfaceID) external view returns (bool)` with `interfaceID=0x4901df9f`, a contract implementing this EIP must return true. The mint interface is up to the implementation. The minted NFT's owner should be the owner of the physical chip (this authentication could be implemented using the signature scheme defined for `transferTokenWithChip`). From 66f98b80af73d5c67b300e16d6d587fdd79e17fa Mon Sep 17 00:00:00 2001 From: xinbenlv Date: Thu, 27 Oct 2022 05:43:13 -0700 Subject: [PATCH 046/113] Update EIP-2294: Move to Review (#5763) * init chainidsize EIP pr * Recover the content from #2294 * EIP formating * EIP formatting * Update authost list and add credt * Move to Review * Update EIPS/eip-2294.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-2294.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-2294.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update eip-2294.md * Update eip-2294.md * Move to Review status * Update eip-2294.md * Update eip-2294.md * update format * Fix typos * Fix typos Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> --- EIPS/eip-2294.md | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/EIPS/eip-2294.md b/EIPS/eip-2294.md index 51ff7af4371464..9837e6ad5dc67c 100644 --- a/EIPS/eip-2294.md +++ b/EIPS/eip-2294.md @@ -4,7 +4,7 @@ title: Explicit bound to Chain ID size description: Adds a maximum value to the Chain ID parameter to avoid potential encoding issues that may occur when using large values of the parameter. author: Zainan Victor Zhou (@xinbenlv), Alex Beregszaszi (@axic) discussions-to: https://ethereum-magicians.org/t/eip-2294-explicit-bound-to-chain-id/11090 -status: Draft +status: Review type: Standards Track category: Core created: 2019-09-19 @@ -12,43 +12,48 @@ requires: 155 --- ## Abstract + Starting from `blocknum = FORK_BLKNUM`, this EIP restricts the size of the [EIP-155](./eip-155.md) Chain ID parameter to a particular maximum value `floor(MAX_UINT64 / 2) - 36`, in order to ensure that there is a standard around how this parameter is to be used between different projects. ## Motivation -EIP-155 introduces the Chain ID parameter, which is an important parameter used for domain separation (replay protection) of Ethereum protocol signed messages. However, it does not specify any properties about the size that this parameter takes. @axic mentions this concern in the 109th comment of [EIP-1344](./eip-1344.md)'s `discussion-to` -> Allowing it to be 256-bit wide means that the RLP encoding of a transaction must use >256-bit arithmetic to calculate the v field. +EIP-155 introduces the Chain ID parameter, which is an important parameter used for domain separation (replay protection) of Ethereum protocol signed messages. However, it does not specify any properties about the size that this parameter takes. Allowing it to be 256-bit wide means that the RLP encoding of a transaction must use >256-bit arithmetic to calculate the v field. and suggests a reasonable maximum enforced size in order to ensure that there are no issues when encoding this parameter. This would allow a sufficient amount of different values for this parameter, which is typically chosen by community consensus as a genesis parameter for a given chain and thus does not change often. -Without a well-chosen value of Chain ID, there could be differences in the implementation of EIP-155 (and EIP-1344 by derivative) in both client codebase and external tooling that could lead to consensus-critical vulnerabilities being introduced to the network. By making this limit explicit, we avoid this scenario for Ethereum and any project which uses the Ethereum codebase. +Without a well-chosen value of Chain ID, there could be differences in the implementation of [EIP-155](./eip-155.md) (and [EIP-1344](./eip-1344.md) by derivative) in both client codebase and external tooling that could lead to consensus-critical vulnerabilities being introduced to the network. By making this limit explicit, we avoid this scenario for Ethereum and any project which uses the Ethereum codebase. There have been suggestions of using a hash-based identifier in place on Chain ID to allow the value to adapt over time to different contentious forks and other scenarios. This proposal does not describe this behavior, but ~63 bits of entropy should be enough to ensure that no collisions are likely for reasonable (e.g. non-malicious) uses of this feature for that purpose. -Also, the field `chainID` have experienced increasing useage and dependencies, due more and more contracts are depending on [EIP-1344](./eip-1344.md) to expose CHAIN ID in the smart contract execution. For example when used with [EIP-712](./eip-712.md), [EIP-1271](./eip-1271.md) for on-contract signature verification, chainId has been increasingly introduced for replay attack prevention. It's security critical to ensure clients depending on the chainId computation in cryptography yeilds identical result for verification in +Also, the field `chainID` have experienced increasing usage and dependencies, due more and more contracts are depending on [EIP-1344](./eip-1344.md) to expose CHAIN ID in the smart contract execution. For example when used with [EIP-712](./eip-712.md), [EIP-1271](./eip-1271.md) for on-contract signature verification, chainId has been increasingly introduced for replay attack prevention. It's security critical to ensure clients depending on the chainId computation in cryptography yields identical result for verification in all cases. Originally, this EIP was created by Bryant Eisenbach (@fubuloubu) and Alex Beregszaszi (@axic). ## Specification + Starting from `blocknum = FORK_BLKNUM`, the maximum value of Chain ID is `9,223,372,036,854,775,771` (`MAX_CHAIN_ID`). 1. Compliant client MUST reject a value outside of the range of `[0, MAX_CHAIN_ID]` in a provided transaction starting from `blocknum = FORK_BLKNUM` -2. Compliant client MUST disallow a genesis configuration with a value for Chain ID outside of this limit. +2. Compliant client MUST disallow a genesis configuration with a value for Chain ID outside of this limit. Due to how the calculation for chain ID is performed, the maximum value seen during the arithmetic is `CHAIN_ID * 2 + 36`, so clients must test to ensure no overflow conditions are encountered when the highest value is used. No underflow is possible. ## Rationale + The `MAX_CHAIN_ID` is calculated to avoid overflow when performing uint64 math. For reference, a value of 0 or less is also disallowed. ## Backwards Compatibility + This EIP introduces a change that affects previous implementations of this feature. However, as of time of writing(2022-10-18) no known chain makes use of a value outside of the suggested bounds, there should not be an issue in adopting this limit on the size of this parameter, therefore the impact should be non-existent. If any other chain is operating with a incompatible `chainId`, we advised they make proper arrangement when this EIP becomes adopted. ## Security Considerations + Needs discussion. ## Copyright + Copyright and related rights waived via [CC0](../LICENSE.md). From c0a6d6770071b71025f53c817e039464e6613878 Mon Sep 17 00:00:00 2001 From: Ignacio Mazzara Date: Thu, 27 Oct 2022 09:55:23 -0300 Subject: [PATCH 047/113] Update EIP-4955: Move to review (#5829) * feat: add eip 4899 * feat: move 4955 to review * chore: short title * feat: add security considerations * chore: add links * Initial formatting / grammar / content fixes Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> --- EIPS/eip-4955.md | 44 +++++++++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/EIPS/eip-4955.md b/EIPS/eip-4955.md index 5f36bc54992b1c..87e045447fa20c 100644 --- a/EIPS/eip-4955.md +++ b/EIPS/eip-4955.md @@ -1,10 +1,10 @@ --- eip: 4955 -title: Vendor Specific Metadata Extension for Non-Fungible Tokens +title: Vendor Metadata Extension for NFTs description: Add a new field to NFT metadata to store vendor specific data author: Ignacio Mazzara (@nachomazzara) discussions-to: https://ethereum-magicians.org/t/eip-4955-non-fungible-token-metadata-namespaces-extension/8746 -status: Draft +status: Review type: Standards Track category: ERC created: 2022-03-29 @@ -13,23 +13,21 @@ requires: 721, 1155 ## Abstract -The following standard allows for the implementation of a standard schema for NFTs metadata. The main goal is adding a new field namespaces to the JSON schema for NFTs +This EIP standardizes a schema for NFTs metadata to add new field namespaces to the JSON schema for [EIP-721](./eip-721.md) and [EIP-1155](./eip-1155.md) NFTs. ## Motivation -A standard schema allows wallets, marketplaces, metaverses, etc. to work with any NFT. +A standardized NFT metadata schema allows wallets, marketplaces, metaverses, and sililar applications to interoperate with any NFT. Applications such as NFT marketplaces and metaverses could usefully leverage NFTs by rendering them using custom 3D representations or any other new attributes. -This standard is inspired by the projects like marketplaces and metaverses which want to leverage the usage of NFTs by rendering them using custom 3d representations or any other new attributes. - -Some projects like Decentraland, TheSandbox, Cryptoavatars, etc. need their own 3d model in order to represent an NFT. These models are not compatible between them because of their esthetics and armatures. - -The lack of a property like the one proposed makes it almost impossible to generate interoperability of NFTs and keep the data decentralized. +Some projects like Decentraland, TheSandbox, Cryptoavatars, etc. need their own 3D model in order to represent an NFT. These models are not cross-compatible because of distinct aesthetics and data formats. ## Specification The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119. -**Proposed Schema** (subject to "caveats" below): +### Schema + +(subject to "caveats" below) A new property called `namespaces` is introduced. This property expects one object per project as shown in the example below. @@ -58,7 +56,8 @@ A new property called `namespaces` is introduced. This property expects one obje } ``` -**Example** +### Example + ```json { "name": "My NFT", @@ -95,18 +94,20 @@ There are many projects which need custom properties in order to display a curre The main differences between the projects that are rendering 3d NFTs (models) are: -- **Armatures** -For example, every metaverse uses its own armature. There is a standard for humanoids but it is not being used for every metaverse and not all the metaverses use humanoids. For example, Decentraland has a different esthetic than Cryptovoxels and TheSandbox. It means that every metaverse will need a different model and they may have the same extension (GLB, GLTF) +### Armatures + +Every metaverse uses its own armature. There is a standard for humanoids but it is not being used for every metaverse and not all the metaverses use humanoids. For example, Decentraland has a different aesthetic than Cryptovoxels and TheSandbox. It means that every metaverse will need a different model and they may have the same extension (GLB, GLTF) EIP 4955 Different Renders -- **Metadata (Representations Files)** +### Metadata (Representations Files) For example, every metaverse uses its own metadata representation files to make it work inside the engine depending on its game needs. This is how a wearable looks like in Decentraland in terms of the config file: -``` + +```json "data": { "replaces": [], "hides": [], @@ -154,13 +155,14 @@ This is how a wearable looks like in Decentraland in terms of the config file: "entities": 1 } ``` + `replaces`, `overrides`, `hides`, and different body shapes representation for the same asset are needed for Decentraland in order to render the 3D asset correctly. --- -Using `namespaces` instead of objects like the ones below make it easy for the specific vendor/third-parties to access and index the required models. Moreover, `styles` do not exist because there are no standards around for how an asset will be rendered. As I mentioned above, each metaverse for example uses its own armature and esthetic. There is no Decentraland-style or TheSandbox-style that other metaverses use. Each of them is unique and specific for the sake of the platform's reason of being. Projects like Cryptoavatars are trying to push different standards but without luck for the same reasons related to the uniquity of the armature/animations/metadata. +Using `namespaces` instead of objects like the ones below make it easy for the specific vendor/third-parties to access and index the required models. Moreover, `styles` do not exist because there are no standards around for how an asset will be rendered. As I mentioned above, each metaverse for example uses its own armature and aesthetic. There is no Decentraland-style or TheSandbox-style that other metaverses use. Each of them is unique and specific for the sake of the platform's reason of being. Projects like Cryptoavatars are trying to push different standards but without luck for the same reasons related to the uniquity of the armature/animations/metadata. -``` +```json { "id": "model", "type": "model/gltf+json", @@ -184,12 +186,16 @@ With `namespaces` each vendor will know how to render an asset by doing: fetch(metadata.namespaces["PROJECT_NAME"].uri).then(res => render(res)) ``` -The idea behind extending the ERC721 metadata schema is to have backward compatibility as much as possible with existing projects. Chances are that the asset's smart contracts are not upgradeable and therefore if a project wants to be compatible with this EIP, it will need to redeploy and migrate the current contracts. This is very time- and money-consuming. Creating a new token standard that stores the data needed on-chain: 3D models and config files are not the right paths. There are protocols already used for the ERC721 metadata standard like IPFS (the token URI is an IPFS hash). The idea is to leverage this and require as few changes as possible. Moreover, the current metadata standard uses a 2D representation field: `image`. It seems reasonable to have all the representations of an asset in the same place. +The idea behind extending the [EIP-721](./eip-721.md) metadata schema is to have backward compatibility as much as possible with existing projects. Chances are that the asset's smart contracts are not upgradeable and therefore if a project wants to be compatible with this EIP, it will need to redeploy and migrate the current contracts. This is very time- and money-consuming. Creating a new token standard that stores the data needed on-chain: 3D models and config files are not the right paths. There are protocols already used for the [EIP-721](./eip-721.md) metadata standard like IPFS (the token URI is an IPFS hash). The idea is to leverage this and require as few changes as possible. Moreover, the current metadata standard uses a 2D representation field: `image`. It seems reasonable to have all the representations of an asset in the same place. ## Backwards Compatibility Existing projects that can't modify the metadata response (schema), may be able to create a new smart contract that based on the `tokenId` returns the updated metadata schema. Of course, the projects may need to accept these linked smart contracts as valid in order to fetch the metadata by the `tokenURI` function. +## Security Considerations + +The same security considerations as with [EIP-721](./eip-721.md) apply related to using http gateways or IPFS for the tokenURI method. + ## Copyright -Copyright and related rights waived via [CC0](../LICENSE.md). \ No newline at end of file +Copyright and related rights waived via [CC0](../LICENSE.md). From b41e2e21910f499791f29483f701453ec5346c3f Mon Sep 17 00:00:00 2001 From: StartfundInc <111301211+StartfundInc@users.noreply.github.com> Date: Thu, 27 Oct 2022 05:58:00 -0700 Subject: [PATCH 048/113] Update EIP-5528: Move to Last Call (#5841) * move to last call * Fix lint issue --- EIPS/eip-5528.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/EIPS/eip-5528.md b/EIPS/eip-5528.md index 714ae6d5635bb4..a27b857208f239 100644 --- a/EIPS/eip-5528.md +++ b/EIPS/eip-5528.md @@ -4,7 +4,8 @@ title: Refundable Fungible Token description: Allows refunds for EIP-20 tokens by escrow smart contract author: StartfundInc (@StartfundInc) discussions-to: https://ethereum-magicians.org/t/eip-5528-refundable-token-standard/10494 -status: Review +status: Last Call +last-call-deadline: 2022-11-09 type: Standards Track category: ERC created: 2022-08-16 @@ -38,6 +39,7 @@ There are two types of contract for the escrow process: ### Methods #### `constructor` + The *Escrow Contract* demonstrates details of escrow policies as none-mutable matter in constructor implementation. The *Escrow Contract* MUST define the following policies: @@ -96,6 +98,7 @@ function escrowRefund(address _from, uint256 _value) public returns (bool) Withdraws funds from the escrow account. In the case of *Escrow Contract*: + - MUST check the escrow process is completed. - MUST send the remaining balance of seller and buyer tokens to `msg.sender`'s seller and buyer contract wallets. @@ -108,6 +111,7 @@ function escrowWithdraw() public returns (bool) ### Example of interface This example demonstrates simple exchange of one seller and one buyer in one-to-one exchange rates. + ```solidity pragma solidity ^0.4.20; @@ -249,6 +253,7 @@ The *Payable Contract* which implements this EIP is fully backward compatible wi [Unit test example by truffle](../assets/eip-5528/truffule-test.js). This test case demonstrates the following conditions for exchanging seller/buyer tokens. + - The exchange rate is one-to-one. - If the number of buyers reaches 2, the escrow process will be terminated(success). - Otherwise (not meeting success condition yet), buyers can refund (or withdraw) their funded tokens. From 6077b17939f413b4ada4b204e9d28aeb8911d0f4 Mon Sep 17 00:00:00 2001 From: xinbenlv Date: Thu, 27 Oct 2022 05:59:26 -0700 Subject: [PATCH 049/113] Update EIP-5679: Move to Last Call (#5759) * init * Update ERC number * Add content * Add discussion-to * Add ERC-165 identifiers * Change public to external * Update with batch and safe methods and add rationale. * Fix format * Fix EIPW errors * Add mentioning of EIP-777 * Add refimpl for Ext20 * Fix * update * Update * Update interface * Mention deployment * Fix * Move to last call * Update EIPS/eip-5679.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Fix typos * Address editorial feedback * Address editorial feedback Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> --- EIPS/eip-5679.md | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/EIPS/eip-5679.md b/EIPS/eip-5679.md index 8c82d9ba2fb41e..32fc3bfcaa64b7 100644 --- a/EIPS/eip-5679.md +++ b/EIPS/eip-5679.md @@ -1,10 +1,11 @@ --- eip: 5679 title: Token Minting and Burning -description: An extension for minting and burning tokens for EIP-20, EIP-721, EIP-1155. +description: An extension for minting and burning EIP-20, EIP-721, and EIP-1155 tokens author: Zainan Victor Zhou (@xinbenlv) discussions-to: https://ethereum-magicians.org/t/erc-5679-mint-and-burn-tokens/10913 -status: Review +status: Last Call +last-call-deadline: 2022-10-29 type: Standards Track category: ERC created: 2022-09-17 @@ -12,9 +13,11 @@ requires: 20, 165, 721, 1155 --- ## Abstract + This EIP introduces a consistent way to extend token standards for minting and burning. ## Motivation + Minting and Burning are typical actions for creating and destroying tokens. By establishing a consistent way to mint and burn a token, we complete the basic lifecycle. @@ -26,6 +29,7 @@ Therefore, creating separate methods for burning and minting simplifies implemen and reduces security error. ## Specification + The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC 2119. 1. Any contract complying with [EIP-20](./eip-20.md) when extended with this EIP, @@ -65,16 +69,18 @@ interface IERC5679Ext1155 { 4. When the token is being minted, the transfer events **MUST** be emitted as if the token in the `_amount` for EIP-20 and EIP-1155 and token id being `_id` for EIP-721 and EIP-1155 -were transfer from address `0x0` to the recipient address identified by `_to`. +were transferred from address `0x0` to the recipient address identified by `_to`. The total supply **MUST** increase accordingly. 5. When the token is being burned, the transfer events **MUST** be emitted as if the token in the `_amount` for EIP-20 and EIP-1155 and token id being `_id` for EIP-721 and EIP-1155 -were transfer from the recipient address identified by `_to` to the address of `0x0`. +were transferred from the recipient address identified by `_to` to the address of `0x0`. The total supply **MUST** decrease accordingly. -6. For EIP-721, the `safeMint` **MUST** operate with respect to the `ERC721TokenReceiver` hook functions. -For EIP-1155, the `safeMint` and `safeMintBatch` **MUST** operate with respect to the `ERC1155TokenReceiver` hook functions. +6. `safeMint` MUST implement the same receiver restrictions as `safeTransferFrom` as defined in +[EIP-721](./eip-721.md) and [EIP-1155](./eip-1155.md). + +7. It's RECOMMENDED for the client to implement [EIP-165](./eip-165.md) identifiers as specified above. ## Rationale @@ -98,22 +104,11 @@ convention of EIP-721 and EIP-1155 respectively. This EIP is designed to be compatible for EIP-20, EIP-721 and EIP-1155 respectively. -## Reference Implementation - -A few reference implementations of this EIP has been deployed onto goerli (ethereum public testnet). -Reference Implementation (Version 0x1002) - -- `ERC5679Ext20RefImpl` deployed to: 0x72D9c2D49F5A2915D7A3c23B1FD5d645dFe492ac -- `ERC5679Ext721RefImpl` deployed to: 0x8965B739DF91eB621D9FF06af4A48198f711BbD9 -- `ERC5679Ext1155RefImpl` deployed to: 0xE45072F6ee31cBE07FC232f61c61C6Bd000d9ea2 - -Find the code verified on etherscan. - ## Security Considerations This EIP depends on the security soundness of the underlying book keeping behavior of the token implementation. In particular, a token contract should carefully design the access control for which role is granted permission -to mint a new token. Failing to safe guard such behavior can cause fraudulant issuance and an elevation of total supply. +to mint a new token. Failing to safe guard such behavior can cause fraudulent issuance and an elevation of total supply. The burning should also carefully design the access control. Typically only the following two roles are entitled to burn a token: @@ -126,4 +121,5 @@ to burning. We keep this EIP less opinionated in such restriction but implemento the restriction. ## Copyright + Copyright and related rights waived via [CC0](../LICENSE.md). From ba84768e8e61c6852dc04c8aa605bb18c8e55431 Mon Sep 17 00:00:00 2001 From: xinbenlv Date: Thu, 27 Oct 2022 06:14:49 -0700 Subject: [PATCH 050/113] Update EIP-5679: Update Last Call Deadline (#5845) * init * Update ERC number * Add content * Add discussion-to * Add ERC-165 identifiers * Change public to external * Update with batch and safe methods and add rationale. * Fix format * Fix EIPW errors * Add mentioning of EIP-777 * Add refimpl for Ext20 * Fix * update * Update * Update interface * Mention deployment * Fix * Move to last call * Update EIPS/eip-5679.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Fix typos * Address editorial feedback * Address editorial feedback * Update last-call deadline Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> --- EIPS/eip-5679.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EIPS/eip-5679.md b/EIPS/eip-5679.md index 32fc3bfcaa64b7..76bcc1fabb23ab 100644 --- a/EIPS/eip-5679.md +++ b/EIPS/eip-5679.md @@ -5,7 +5,7 @@ description: An extension for minting and burning EIP-20, EIP-721, and EIP-1155 author: Zainan Victor Zhou (@xinbenlv) discussions-to: https://ethereum-magicians.org/t/erc-5679-mint-and-burn-tokens/10913 status: Last Call -last-call-deadline: 2022-10-29 +last-call-deadline: 2022-11-10 type: Standards Track category: ERC created: 2022-09-17 From 17adaebeeafc7fdee3cfd3c75bf5cd5d06310451 Mon Sep 17 00:00:00 2001 From: xinbenlv Date: Thu, 27 Oct 2022 06:39:40 -0700 Subject: [PATCH 051/113] Update EIP-5732: Move to Last Call (#5758) * Init a EIP for Commit Interface * Update file name * Add content * Update name * Add mentioning of chainid * Add discussion-to * Function parameter * Add abstract * Add voting example. * Update eip-5732.md * Update EIP-5732 with move to Last Call * Update wording * U * U * U * Update eip-5732.md * Update EIPS/eip-5732.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-5732.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-5732.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update suggested by @mattstam * Update eip-5732.md * Update EIPS/eip-5732.md Co-authored-by: Matt Stam * Update * Add co-author * update deadline Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> Co-authored-by: Matt Stam --- EIPS/eip-5732.md | 55 ++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 46 insertions(+), 9 deletions(-) diff --git a/EIPS/eip-5732.md b/EIPS/eip-5732.md index b1de5a7a29eecb..3964ab89129d39 100644 --- a/EIPS/eip-5732.md +++ b/EIPS/eip-5732.md @@ -1,10 +1,11 @@ --- eip: 5732 -title: Simple Commit Interface +title: Commit Interface description: A simple but general commit interface to support commit-reveal scheme. -author: Zainan Victor Zhou (@xinbenlv) +author: Zainan Victor Zhou (@xinbenlv), Matt Stam (@mattstam) discussions-to: https://ethereum-magicians.org/t/erc-5732-simple-commit-interface-to-support-commit-reveal-schemes/11115 -status: Review +status: Last Call +last-call-deadline: 2022-11-10 type: Standards Track category: ERC created: 2022-09-29 @@ -12,6 +13,7 @@ requires: 165 --- ## Abstract + A simple commit interface to support commit-reveal scheme which provides **only** a commit method but no reveal method, allowing implementations to integrate this interface with arbitrary reveal method such as `vote` or `transfer`. @@ -22,14 +24,18 @@ with arbitrary reveal method such as `vote` or `transfer`. 2. make it harder for attackers for front-running, back-running or sandwich attack. ## Specification + The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC 2119. 1. Compliant contract need to implement the following interface ```solidity +pragma solidity >=0.7.0 <0.9.0; + +/// The EIP-165 identifier of this interface is 0x4ba43d48 interface IERC_COMMIT { - event Commit(byte32 _commitment, bytes calldata _extraData); - function commit(byte32 _commitment, bytes calldata _extraData) external; + event Commit(bytes32 _commitment, bytes _extraData); + function commit(bytes32 _commitment, bytes calldata _extraData) payable external; } ``` @@ -43,10 +49,11 @@ Size and location of `secret_salt` is intentionally unspecified in this EIP to a 1. One design options is that we can attach a Commit Interface to any individual ERCs such as voting standards or token standards. We choose to have a simple and generalize commit interface so all ERCs can be extended to support commit-reveal without changing their basic method signatures. -2. The key derived design decision we made is we will have a standardized `commit` method without a standardized `reveal` method, making rooms for customized reveal method or using +2. The key derived design decision we made is we will have a standardized `commit` method without a standardized `reveal` method, making room for customized reveal method or using `commit` with existing standard. ## Backwards Compatibility + This EIP is backward compatible with all existing ERCs method signature that has extraData. New EIPs can be designed with an extra field of "salt" to make it easier to support this EIP, but not required. @@ -83,6 +90,7 @@ contract SomeBetterToken is ISimpleToken, IERC_COMMIT { mapping(address => bytes32) lastCommits; function commit(bytes32 _commitment, bytes calldata _extraData) { lastCommits[msg.sender] = _commitment; + emit Commit(...); } function transfer(address _to, uint256 _amount, bytes calldata _extraData/*first 32bytes are used as secret_sault*/) { required(balance[msg.sender] > amount); @@ -102,7 +110,6 @@ contract SomeBetterToken is ISimpleToken, IERC_COMMIT { ### Commit with Voting as Reveal - Example of a Simple Transfer Standard being integrated with this EIP: ```solidity @@ -134,6 +141,7 @@ contract BarVote is ISimpleVote, IERC_COMMIT { function commit(bytes32 _commitment, bytes calldata _extraData) { lastCommits[msg.sender] = _commitment; + emit Commit(...); } function vote(address _proposalId, uint8 _optionId, bytes calldata _extraData) { @@ -144,16 +152,44 @@ contract BarVote is ISimpleVote, IERC_COMMIT { } function _recomputeCommit(address _sender, address _proposalId, uint8 _optionId, bytes32 _secretSalt) returns (bytes32){ - return keccak256(abi.encodePack(_sender, _optionId, _amount, _secretSalt)); + return keccak256(abi.encodePack(_sender, _proposalId, _optionId, _secretSalt)); } // Ballot tally method omitted. // Proposal deadline method omitted. } ``` + +### Commit with ENS Register as Reveal + +In ENS registering process, currently +inside of `ETHRegistrarController` contract +a commit function is being used to +allow registerer fairly register a desire +domain to avoid being front-run. + +Here is how ENS uses commitment in its registration logic: + +```solidity +function commit(bytes32 commitment) public { + require(commitments[commitment] + maxCommitmentAge < now); + commitments[commitment] = now; +} +``` + +With this EIP it can be updated to + +```solidity +function commit(bytes32 commitment, bytes calldata data) public { + require(commitments[commitment] + maxCommitmentAge < now); + commitments[commitment] = now; + emit Commit(...); +} +``` + ## Security Considerations -1. Do not use reference implementation in production. They are just for demo purpose. +1. Do not use the reference implementation in production. It is just for demonstration purposes. 2. The reveal transactions, parameters, especially `secret_salt` MUST be kept in secrecy before revealing to achieve privacy. 3. The length of `secret_salt` cryptographically long enough and the way to generate a `secret_salt` shall be cryptographically safe. 4. User shall NEVER reuse a used `secret_salt`. It's RECOMMENDED for client application to warn User for reusing a secret_salt. @@ -162,4 +198,5 @@ contract BarVote is ISimpleVote, IERC_COMMIT { 7. Cautious on the potential replay attack across different chain-ids or chains resulting from forks, in which case, a ChainId shall be included in the generation of commitment. ## Copyright + Copyright and related rights waived via [CC0](../LICENSE.md). From 188c91569ef16878a5e50008c0c19ae633adb794 Mon Sep 17 00:00:00 2001 From: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> Date: Thu, 27 Oct 2022 15:44:52 -0400 Subject: [PATCH 052/113] CI: Fix changed files detection (#5840) * CI: Fix changed files detection * Fix a few loose ends * Fix github token env variable * Fix PR number detection * Correct Skipping * Fix logic --- .github/workflows/ci.yml | 36 ++++++++++++++++-------------------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b136102c3439a2..e0ae1c0bb0d753 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -73,17 +73,22 @@ jobs: uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b - name: Get Changed Files - uses: tj-actions/changed-files@1d6e210c970d01a876fbc6155212d068e79ca584 - id: changed-files - with: - separator: "," + id: changed + continue-on-error: true + run: | + echo "CHANGED_FILES<> $GITHUB_ENV + gh pr diff ${{ github.event.number }} --name-only | sed -e 's|$|,|' | xargs -i echo "{}" >> $GITHUB_ENV + echo "EOF" >> $GITHUB_ENV + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Run CodeSpell uses: codespell-project/actions-codespell@2391250ab05295bddd51e36a8c6295edb6343b0e + if: steps.changed.outcome == 'success' with: check_filenames: true ignore_words_file: config/.codespell-whitelist - path: ${{ steps.changed-files.outputs.all_changed_files }} + path: ${{ env.CHANGED_FILES }} skip: .git,Gemfile.lock,**/*.png,**/*.gif,**/*.jpg,**/*.svg,.codespell-whitelist,vendor,_site,_config.yml,style.css eipw-validator: @@ -106,29 +111,20 @@ jobs: steps: - name: Checkout EIP Repository uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b - with: - fetch-depth: 0 - name: Get Changed Files - uses: tj-actions/changed-files@1d6e210c970d01a876fbc6155212d068e79ca584 - id: changed-files - with: - separator: "," - files: | - EIPS/*.md - *.md - - - name: Replace Commas with Newlines # Hack needed due to limitation of GitHub actions + id: changed + continue-on-error: true run: | echo "CHANGED_FILES<> $GITHUB_ENV - echo "$RAW_CHANGED_FILES" | tr , "\n" >> $GITHUB_ENV + gh pr diff ${{ github.event.number }} --name-only | grep -E -x '[^/]+\.md|EIPS/eip-[0-9]+\.md' >> $GITHUB_ENV echo "EOF" >> $GITHUB_ENV - env: - RAW_CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }} + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Lint uses: DavidAnson/markdownlint-cli2-action@16d9da45919c958a8d1ddccb4bd7028e8848e4f1 - if: steps.changed-files.outputs.any_changed == 'true' + if: steps.changed.outcome == 'success' with: command: config globs: | From 05c090a9e9199063fe88768ab747af150c4fc1be Mon Sep 17 00:00:00 2001 From: Greg Colvin Date: Thu, 27 Oct 2022 16:39:08 -0400 Subject: [PATCH 053/113] nit (#5846) --- EIPS/eip-2315.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EIPS/eip-2315.md b/EIPS/eip-2315.md index 83b02ece5b807d..aa62eaef14012d 100644 --- a/EIPS/eip-2315.md +++ b/EIPS/eip-2315.md @@ -66,7 +66,7 @@ We _need_ static control-flow to validate program safety and to compile EVM byte ### Opcodes -#### `RJUMPSUB (0x5f) relative_offset +#### `RJUMPSUB (0x5f) relative_offset` Transfers control to a subroutine. From 12fb4072a8204ae89c384a5562dedfdac32a3bec Mon Sep 17 00:00:00 2001 From: Gaurang Torvekar Date: Fri, 28 Oct 2022 09:38:42 +0100 Subject: [PATCH 054/113] Update EIP-5606: Remove unnecessary variables from a struct a function (#5848) * Create eip-proxy-nfts.md * Updated the template * Fixed the markdown * Fixed the date format * Update eip-5606.md * Replaced ERC with EIP * Merged the contracts, changed the license * Changed the directory structure * Updated the implementation contract link * Fixed typo in the markdown * Implemented the suggestions from the EIP editor * Update eip-5606.md * Delete .DS_Store * Updated the abstract to remove the redundancies * Removed DS_Store * Update EIP-5606: Removed unnecessary variables from the struct * Update EIP-5606: Formatting changes * Update EIP-5606: Spaces vs tabs * Update EIP-5606: Minor formatting changes Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> --- EIPS/eip-5606.md | 8 +- assets/eip-5606/contracts/MultiverseNFT.sol | 129 ++------------------ 2 files changed, 13 insertions(+), 124 deletions(-) diff --git a/EIPS/eip-5606.md b/EIPS/eip-5606.md index e28a9f43d32aa8..6d24a30fe1ca3e 100644 --- a/EIPS/eip-5606.md +++ b/EIPS/eip-5606.md @@ -44,16 +44,14 @@ interface IMultiverseNFT { address contractAddress; uint256 tokenId; uint256 quantity; - bool isBundled; - address ownerAddress; } /** * @dev Emitted when one or more new delegate NFTs are added to a Multiverse NFT - * */ event Bundled(uint256 multiverseTokenID, DelegateData[] delegateData, address ownerAddress); + /** * @dev Emitted when one or more delegate NFTs are removed from a Multiverse NFT */ @@ -75,10 +73,10 @@ interface IMultiverseNFT { * This function accepts the delegate NFT details and transfers those NFTs to the Multiverse NFT contract * Need to ensure that approval is given to this Multiverse NFT contract for the delegate NFTs so that they can be transferred programmatically */ - function bundle(DelegateData[] memory delegateData, uint256 multiverseTokenID, address ownerAddress) external; + function bundle(DelegateData[] memory delegateData, uint256 multiverseTokenID) external; /** - * @dev Initializes a new bundle, mints a Multiverse NFT and assigns it to msg.sender + * @dev Initialises a new bundle, mints a Multiverse NFT and assigns it to msg.sender * Returns the token ID of a new Multiverse NFT * Note - When a new Multiverse NFT is initialised, it is empty; it does not contain any delegate NFTs */ diff --git a/assets/eip-5606/contracts/MultiverseNFT.sol b/assets/eip-5606/contracts/MultiverseNFT.sol index d49009e162de80..b2506198be5ba2 100644 --- a/assets/eip-5606/contracts/MultiverseNFT.sol +++ b/assets/eip-5606/contracts/MultiverseNFT.sol @@ -75,8 +75,6 @@ interface IMultiverseNFT { address contractAddress; uint256 tokenId; uint256 quantity; - bool isBundled; - address ownerAddress; } /** @@ -118,8 +116,7 @@ interface IMultiverseNFT { */ function bundle( DelegateData[] memory delegateData, - uint256 multiverseTokenID, - address ownerAddress + uint256 multiverseTokenID ) external; /** @@ -142,11 +139,6 @@ abstract contract MultiverseNFT is uint256 currentMultiverseTokenID; - struct RemainingQuantity { - uint256 multiverseTokenID; - address contractAddress; - } - mapping(uint256 => DelegateData[]) public multiverseNFTDelegateData; mapping(uint256 => mapping(address => mapping(uint256 => uint256))) public tokenBalances; @@ -185,19 +177,14 @@ abstract contract MultiverseNFT is function bundle( DelegateData[] memory delegateData, - uint256 multiverseTokenID, - address ownerAddress + uint256 multiverseTokenID ) external { require( hasRole(BUNDLER_ROLE, msg.sender) || ownerOf(multiverseTokenID) == msg.sender, "msg.sender neither have bundler role nor multiversetoken owner" ); - require( - ownerOf(multiverseTokenID) == ownerAddress, - "ownerAddress is not an owner of multiversetoken" - ); - _bundle(delegateData, multiverseTokenID, ownerAddress); + _bundle(delegateData, multiverseTokenID); } function unbundle( @@ -223,10 +210,6 @@ abstract contract MultiverseNFT is delegateData[i].quantity <= balance, "quantity exceeds balance" ); - require( - _ensureDelegateCanUnbundled(delegateData[i], multiverseTokenID), - "delegate cannot be unbundled" - ); require( _ensureMultiverseContractOwnsDelegate(delegateData[i]), "delegate not owned by contract" @@ -236,16 +219,7 @@ abstract contract MultiverseNFT is uint256 tokenId = delegateData[i].tokenId; uint256 quantity = delegateData[i].quantity; - uint256 remainingBalance = _updateDelegateBalances( - delegateData[i], - multiverseTokenID - ); - if (remainingBalance == 0) { - _updateDelegateStatusToUnbundled( - delegateData[i], - multiverseTokenID - ); - } + _updateDelegateBalances(delegateData[i], multiverseTokenID); if (_isERC721(contractAddress)) { ERC721Full erc721Instance = ERC721Full(contractAddress); @@ -259,8 +233,6 @@ abstract contract MultiverseNFT is quantity, "" ); - } else { - revert("unable to identify ERC std"); } } emit Unbundled(multiverseTokenID, delegateData); @@ -279,8 +251,7 @@ abstract contract MultiverseNFT is function _bundle( DelegateData[] memory delegateData, - uint256 multiverseTokenID, - address ownerAddress + uint256 multiverseTokenID ) internal { for (uint256 i = 0; i < delegateData.length; i = i.add(1)) { require( @@ -308,13 +279,6 @@ abstract contract MultiverseNFT is quantity ); - _updateDelegateStatusAndOwner( - delegateData[i], - ownerAddress, - true, - multiverseTokenID - ); - if (_isERC721(contractAddress)) { require( quantity == 1, @@ -331,11 +295,13 @@ abstract contract MultiverseNFT is quantity, "" ); - } else { - revert("unable to identify ERC std"); } } - emit Bundled(multiverseTokenID, delegateData, ownerAddress); + emit Bundled( + multiverseTokenID, + delegateData, + ownerOf(multiverseTokenID) + ); } function _ensureDelegateBelongsToMultiverseNFT( @@ -382,26 +348,6 @@ abstract contract MultiverseNFT is return false; } - function _ensureDelegateCanUnbundled( - DelegateData memory delegateData, - uint256 multiverseTokenID - ) internal view returns (bool) { - DelegateData[] memory storedData = multiverseNFTDelegateData[ - multiverseTokenID - ]; - for (uint256 i = 0; i < storedData.length; i = i.add(1)) { - if ( - delegateData.contractAddress == storedData[i].contractAddress && - delegateData.tokenId == storedData[i].tokenId && - storedData[i].isBundled && - msg.sender == storedData[i].ownerAddress - ) { - return true; - } - } - return false; - } - function _ensureDelegateQuantityLimitForMMultiverseNFT( DelegateData memory delegateData, uint256 multiverseTokenID @@ -425,49 +371,6 @@ abstract contract MultiverseNFT is return false; } } - - return false; - } - - function _updateDelegateStatusAndOwner( - DelegateData memory delegateData, - address ownerAddress, - bool status, - uint256 multiverseTokenID - ) internal returns (bool) { - DelegateData[] storage storedData = multiverseNFTDelegateData[ - multiverseTokenID - ]; - for (uint256 i = 0; i < storedData.length; i = i.add(1)) { - if ( - delegateData.contractAddress == storedData[i].contractAddress && - delegateData.tokenId == storedData[i].tokenId - ) { - storedData[i].isBundled = status; - storedData[i].ownerAddress = ownerAddress; - return true; - } - } - return false; - } - - function _updateDelegateStatusToUnbundled( - DelegateData memory delegateData, - uint256 multiverseTokenID - ) internal returns (bool) { - DelegateData[] storage storedData = multiverseNFTDelegateData[ - multiverseTokenID - ]; - for (uint256 i = 0; i < storedData.length; i = i.add(1)) { - if ( - delegateData.contractAddress == storedData[i].contractAddress && - delegateData.tokenId == storedData[i].tokenId - ) { - storedData[i].isBundled = false; - return true; - } - } - return false; } function _updateDelegateBalances( @@ -504,18 +407,6 @@ abstract contract MultiverseNFT is return this.onERC1155BatchReceived.selector; } - function _beforeTokenTransfer( - address from, - address to, - uint256 tokenId - ) internal override(ERC721Full) { - DelegateData[] storage storedData = multiverseNFTDelegateData[tokenId]; - for (uint256 i = 0; i < storedData.length; i = i.add(1)) { - storedData[i].ownerAddress = to; - } - ERC721Full._beforeTokenTransfer(from, to, tokenId); - } - function _isERC1155(address contractAddress) internal view returns (bool) { return IERC1155(contractAddress).supportsInterface(0xd9b67a26); } From 9746dddb102aacf521e64943d097b81472647188 Mon Sep 17 00:00:00 2001 From: Antonio Sanso Date: Fri, 28 Oct 2022 17:12:41 +0200 Subject: [PATCH 055/113] fixing some typos in eip 2537 (#5772) --- EIPS/eip-2537.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/EIPS/eip-2537.md b/EIPS/eip-2537.md index 53731144681424..9a80865676204c 100644 --- a/EIPS/eip-2537.md +++ b/EIPS/eip-2537.md @@ -95,7 +95,7 @@ Base field element (Fp) is encoded as `64` bytes by performing BigEndian encodin For elements of the quadratic extension field (Fp2) encoding is byte concatenation of individual encoding of the coefficients totaling in `128` bytes for a total encoding. For an Fp2 element in a form `el = c0 + c1 * v` where `v` is formal quadratic non-residue and `c0` and `c1` are Fp elements the corresponding byte encoding will be `encode(c0) || encode(c1)` where `||` means byte concatenation (or one can use `bytes32[4]` or `uint256[4]` in terms of Solidity types). -*Note on the top `16` bytes being zero*: it's required that encoded element is "in a field" that means strictly `< modulus`. In BigEndian encoding it automatically means that for a modulus that is just `381` bit long top `16` bytes in `64` bytes encoding are zeroes and it **must** be checked if only a subslice of input data is used for actual decoding. +*Note on the top `16` bytes being zero*: it's required that the encoded element is "in a field" that means strictly `< modulus`. In BigEndian encoding it automatically means that for a modulus that is just `381` bit long top `16` bytes in `64` bytes encoding are zeroes and it **must** be checked if only a subslice of input data is used for actual decoding. If encodings do not follow this spec anywhere during parsing in the precompile the precompile *must* return an error. @@ -105,7 +105,7 @@ Points in either G1 (in base field) or in G2 (in extension field) are encoded as #### Point of infinity encoding: -Also referred as "zero point". For BLS12 curves point with coordinates `(0, 0)` (formal zeroes in Fp or Fp2) is *not* on the curve, so encoding of such point `(0, 0)` is used as a convention to encode point of infinity. +Also referred to as "zero point". For BLS12 curves point with coordinates `(0, 0)` (formal zeroes in Fp or Fp2) is *not* on the curve, so encoding of such point `(0, 0)` is used as a convention to encode point of infinity. #### Encoding of scalars for multiplication operation: @@ -250,11 +250,11 @@ Discounts table as a vector of pairs `[k, discount]`: Cost of the pairing operation is `43000*k + 65000` where `k` is a number of pairs. -#### Fp-to-G1 mappign operation +#### Fp-to-G1 mapping operation Fp -> G1 mapping is `5500` gas. -#### Fp2-to-G2 mappign operation +#### Fp2-to-G2 mapping operation Fp2 -> G2 mapping is `75000` gas From c2cf3c37402de1ebf53124b8da832f57d59f866a Mon Sep 17 00:00:00 2001 From: Javier Arcenegui Almenara <81355285+Hardblock-IMSE-CNM@users.noreply.github.com> Date: Fri, 28 Oct 2022 17:21:29 +0200 Subject: [PATCH 056/113] Update EIP-4519: Fix typos in figures 4 and 5 (#5784) * Title setting to 44 characters * Update eip-4519.md * Delete Fig5_rev.png * Delete Figure4.jpg * Add files via upload * Update eip-4519.md * Update eip-4519.md * Update eip-4519.md * Update eip-4519.md * Update eip-4519.md * Update eip-4519.md * Update eip-4519.md * Delete Figure3.jpg * Delete Fig5_rev.png * Delete Figure4.jpg * Add files via upload * Delete Figure4.jpg * Delete Fig5_rev.png * Add files via upload * Update eip-4519.md * Delete Figure4.jpg * Delete Fig5_rev.png * Add files via upload * Delete Fig5_rev.png * Add files via upload * Delete Figure5.png * Add files via upload * Update eip-4519.md * Update eip-4519.md * Update eip-4519.md --- EIPS/eip-4519.md | 2 +- assets/eip-4519/images/Fig5_rev.png | Bin 67816 -> 0 bytes assets/eip-4519/images/Figure4.jpg | Bin 130319 -> 129893 bytes assets/eip-4519/images/Figure5.jpg | Bin 0 -> 67893 bytes 4 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 assets/eip-4519/images/Fig5_rev.png create mode 100644 assets/eip-4519/images/Figure5.jpg diff --git a/EIPS/eip-4519.md b/EIPS/eip-4519.md index 1943533dcf8c88..b852d446304750 100644 --- a/EIPS/eip-4519.md +++ b/EIPS/eip-4519.md @@ -69,7 +69,7 @@ KU=PKA\*SKU_A=(SKA\*P)\*SKU_AA obtained and if it is the same as the data in `hashK_UA`, then the state of the token changes to `engagedWithUser` and the event `UserEngaged` is sent. Once the asset receives the event, it changes its operation mode to `engagedWithUser`. This process is shown in `Figure 5`. From this moment, the asset can be managed by the user and they can communicate in a secure way using the shared key. - ![Figure 5: Steps in a successful user and asset mutual authentication process](../assets/eip-4519/images/Fig5_rev.png) + ![Figure 5: Steps in a successful user and asset mutual authentication process](../assets/eip-4519/images/Figure5.jpg) Since the establishment of a shared secret key is very important for a secure communication, EIP-4519 NFTs include the attributes `hashK_OA`, `hashK_UA` and `dataEngagement`. The first two attributes define, respectively, the hash of the secret key shared between the asset and its owner and between the asset and its user. Assets, owners and users should check they are using the correct shared secret keys. The attribute `dataEngagement` defines the public data needed for the agreement. diff --git a/assets/eip-4519/images/Fig5_rev.png b/assets/eip-4519/images/Fig5_rev.png deleted file mode 100644 index ffea57ef16f0bf053fb469ac00868dce77d26cde..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67816 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 literal 130319 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

    c?XFF>EV0$ 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%0D?ATa3Vm@+_1HB%DFe;_ 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 literal 0 HcmV?d00001 From 31db6a4f827f2e0c659dfb045e2bbde24f1431f0 Mon Sep 17 00:00:00 2001 From: Philippe Castonguay Date: Fri, 28 Oct 2022 13:56:43 -0400 Subject: [PATCH 057/113] Update EIP-1271: Fix example (#5086) * Fix date * Fix example of EIP-1271 Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> --- EIPS/eip-1271.md | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/EIPS/eip-1271.md b/EIPS/eip-1271.md index f9bbdd8c74ecae..55da665aef721e 100644 --- a/EIPS/eip-1271.md +++ b/EIPS/eip-1271.md @@ -127,12 +127,7 @@ Example implementation of a signing contract: } // Recover ECDSA signer - signer = ecrecover( - keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", _hash)), - v, - r, - s - ); + signer = ecrecover(_hash, v, r, s); // Prevent signer from being 0x0 require( From 30f428a65d3b3673f08532e4622b64280b56178b Mon Sep 17 00:00:00 2001 From: Radek Date: Fri, 28 Oct 2022 19:58:36 +0200 Subject: [PATCH 058/113] Update EIP-2315: Example bytecode fix (#5718) * eip-2315 example bytecode fix * Update eip-2315.md uint16 -> int16 to be consistent with doc last test case correction --- EIPS/eip-2315.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/EIPS/eip-2315.md b/EIPS/eip-2315.md index aa62eaef14012d..a74b9260f8dbf7 100644 --- a/EIPS/eip-2315.md +++ b/EIPS/eip-2315.md @@ -323,14 +323,14 @@ Error: at pc=0, op=RETURNSUB: invalid retsub In this example the RJUMPSUB is on the last byte of code. When the subroutine returns, it should hit the 'virtual stop' _after_ the bytecode, and not exit with error -Bytecode: `0x5c035e5ff` (`RJUMP 3, RETURNSUB, RJUMPSUB -1`) +Bytecode: `0x5c00045e5fffff` (`RJUMP 4, RETURNSUB, RJUMPSUB -1`) | Pc | Op | Cost | Stack | RStack | |-------|-------------|------|-----------|-----------| | 0 | RJUMP | 5 | [] | [] | -| 2 | RETURNSUB | 5 | [] | [] | -| 3 | RJUMPSUB | 5 | [] | [] | -| 5 | STOP | 0 | [] | [] | +| 3 | RETURNSUB | 5 | [] | [] | +| 4 | RJUMPSUB | 5 | [] | [] | +| 7 | STOP | 0 | [] | [] | Consumed gas: `15` From df9df9a83edbb128fcd7b05d6ecd894d2aa87ae7 Mon Sep 17 00:00:00 2001 From: xinbenlv Date: Mon, 31 Oct 2022 04:52:18 -0700 Subject: [PATCH 059/113] Update EIP-1202: Resolve new EIPW and bring this EIP back to live (#3848) * Move EIP-1202 from DRAFT to REVIEW * Move EIP-1202 from Draft to Last Call * Update eip-1202.md * Update eip-1202.md Remove `Bibliography` and `Simple Code Example` * Update eip-1202.md * Change from `contract` to `interface` * Update the interface and split into 3 sub interfaces * Update eip-1202.md * Update eip-1202.md * Update format * Fix reviews * Update * Update * Update * Update * Updates * Update --- EIPS/eip-1202.md | 309 ++++++++++------------------------------------- 1 file changed, 66 insertions(+), 243 deletions(-) diff --git a/EIPS/eip-1202.md b/EIPS/eip-1202.md index e812d80784047a..9ab0f843a315da 100644 --- a/EIPS/eip-1202.md +++ b/EIPS/eip-1202.md @@ -1,159 +1,62 @@ --- eip: 1202 -title: Voting Standard +title: Voting Interface +description: A general interface for voting on-chain author: Zainan Victor Zhou (@xinbenlv), Evan (@evbots), Yin Xu (@yingogobot) +discussions-to: https://ethereum-magicians.org/t/eip-1202-voting-interface/11484 +status: Draft type: Standards Track category: ERC -status: Draft created: 2018-07-08 -discussions-to: https://github.com/ethereum/EIPs/issues/1202 --- -## Simple Summary - -Propose a standard interface for voting. - ## Abstract -This proposal creates a standard API for implementing voting within smart contract. This standard provides functionalities to voting as well as to view the vote result and set voting status. +This EIP is an API for implementing voting with smart contract. This standard provides functionalities to voting as well as to view the vote result and set voting status. ## Motivation Voting is one of the earliest example of EVM programming, and also a key to DAO/organizational governance process. We foresee many DAOs will ultimately need to leverage voting as one of the important part of their governance. By creating a voting standard for smart contract / token, we can have the following benefits -### Benefits +### Benefits of having a standard 1. Allow general UI and applications to be built on top of a standardized voting to allow more general user to participate, and encourage more DApp and DAO to think about their governance 2. Allow delegate voting / smart contract voting, automatic voting 3. Allow voting results to be recorded on-chain, in a standard way, and allow DAOs and DApps to honor the voting result programmatically. -4. Allow the compatibility with token standard such as [ERC-20](./eip-20.md) or other new standards([EIP-777](./eip-777.md)) and item standard such as [EIP-721](./eip-721.md) +4. Allow the compatibility with token standard such as [EIP-20](./eip-20.md) or other new standards([EIP-777](./eip-777.md)) and item standard such as [EIP-721](./eip-721.md) 5. Create massive potential for interoperability within Ethereum echo systems and other system. -6. Allow setting voting deadline, allow determine on single or multiple options. Allow requiring voting orders. (trade-off is interface complexity, we might need [ERC-20](./eip-20.md) approach and later a [EIP-777](./eip-777.md) for advanced voting) +6. Allow setting voting deadline, allow determine on single or multiple options. Allow requiring voting orders. (trade-off is interface complexity, we might need [EIP-20](./eip-20.md) approach and later a [EIP-777](./eip-777.md) for advanced voting) 7. Recording the voting with weights with token amount. 8. Possibly allow trust-worthy privacy-safe voting and anonymous voting (with either voter address being un-associated with the vote they cast, given a list of randomized/obfuscated voting options). - 8 -9. Possibly allow result in reward by voting participation or voting result -### Use-cases: +9. Possibly allow result in reward by voting participation or voting result. + +### Non-Goal / Out of Scope + +1. **Delegation**: We intentionally leave delegation out of scope. A separate EIP could be proposed to address this particular use case. +2. **Eligibility or Weights**: Some of the implementing want to have weights or eligibility to vote to be configurable. Such as OpenZeppelin's implementation of GovernorBravo uses snapshot. Aslo weights calculation such as quadratic voting is not within the scope of this EIP. This EIP is intend to be flexible for +any current and new voting weights calculation. +3. **Proposal**: We intentionally leave Proposal out of scope. Proposals are going to be identified by `proposalId` but what information of the proposal includes, +whether they are on-chain or off-chain and whether they are exeutable, is leaved out from this proposal. A separate EIP could be proposed to address this particular use case. See one of such proposals [EIP-5247](./eip-5247.md) +4. **Signature Aggregations / Endorsement**: When implementing contracts want to allow user to submit their vote or approval of vote offline and have some other +account to generate the transaction, the signature aggregations or endorsements are not in scope of this EIP. A separate EIP could be proposed to address this particular use case. See one of such proposals here [EIP-5453](./eip-5453.md). + +### Use-cases 1. Determine on issuing new token, issuing more token or issuing sub-token 2. Determine on creating new item under [EIP-721](./eip-721.md) 3. Determine on election on certain person or smart contract to be delegated leader for project or subproject 4. Determine on auditing result ownership allowing migration of smart contract proxy address -## Specifications +## Specification -### Draft V2 +1. Compliant contracts MUST implement the `IERC1202Core` below ```solidity -pragma solidity >=0.7.0 <0.9.0; - - -/// @title Core interface of ERC1202: A list of *REQUIRED* methods and events for -/// a contract to be considered conforming to ERC1202. -/// -/// @author Zainan Victor Zhou -/// -/// @dev Each ERC1202 contract is a cluster of issues being voted on, or done voted. -/// Any contract of ERC1202 **MUST** implement ALL the following methods and events. -/// -/// Each *issue* is identified with an `issueId`, -/// For any given `issue`, each available option in that issue is -/// identified with an `optionId`. -interface ERC1202Core { - - /// @dev Cast a vote for an issue with `issueId` for option with `optionId` - /// @param _issueId: the issue this vote is casting on. - /// @param _optionIds: an *ordered* array of the options being casted for the issue. - /// Whenever referring to the options as a whole, the order MUST be maintained. - /// @return a boolean if TRUE means the vote is casted successfully. - function vote(uint _issueId, uint[] memory _optionIds) external returns (bool); - - /// @dev Query the top ranked options of an issue given issueId and - /// a limit of max number of top options. - /// @param _issueId: the issue being queried for the top options. - /// @param _limit: the max number of top options the caller expect to return. - /// @return an ordered list of the top options for given issueId and limit, - /// where the first in array is the most favorite one, and the last in - /// array is the least favorite one among the list. - /// Specifically, WHEN limit = 0, returns the default length of winning - /// options in their ranking in an issue. - function topOptions( - uint _issueId, uint _limit - ) external view returns (uint[] memory); - - /// @dev This event is emitted when a vote has been casted. - /// @param issueId the issue the vote is being cased on. - /// @param optionIds an ordered list of the options the vote is casting for. - event OnVote(uint indexed issueId, uint[] optionIds, address indexed voterAddr); - -} - -/// @title Metadata interface for ERC1202: A list of *RECOMMENDED* methods and events for -/// a contract to be considered conforming to ERC1202. -/// -/// @author Zainan Victor Zhou -interface ERC1202Metadata { - - /// @notice A descriptive text for an issue in this contract. - function issueText() external view returns (string memory _text); - - /// @notice A distinct Uniform Resource Identifier (URI) for a given issue. - /// @dev Throws if `_issueId` is not a valid issue; - /// URIs are defined in RFC 3986. - function issueURI(uint256 _issueId) external view returns (string memory _uri); - - /// @notice A descriptive text for an option in an issue in this contract. - function optionText(uint _issueId, uint _optionId) external view returns (string memory _text); - - /// @notice A distinct Uniform Resource Identifier (URI) for a given option in a given issue. - /// @dev Throws if `_issueId` is not a valid option-issue combination; - /// URIs are defined in RFC 3986. - function optionURI(uint _issueId, uint _optionId) external view returns (string memory _uri); -} - -/// @title Status interface for ERC1202: A list of *RECOMMENDED* methods and events for -/// a contract to be considered conforming to ERC1202. -/// -/// @author Zainan Victor Zhou -interface ERC1202Status { - - /// @dev This event is emitted when an issue has changed status. - /// @param issueId the issue about which a status change has happened. - /// @param isOpen the status - event OnStatusChange(uint indexed issueId, bool indexed isOpen); - - /// @dev Sets the status of a issue, e.g. open for vote or closed for result. - /// @param _issueId the issue of Status being set. - /// @param _isOpen the status to set. - /// @return _success whether the setStatus option succeeded. - function setStatus(uint _issueId, bool _isOpen) external returns (bool _success); - - /// @dev Gets the status of a issue, e.g. open for vote or closed for result. - /// @param _issueId the issue of Status being get. - /// @return _isOpen the status of the issue. - function getStatus(uint _issueId) external view returns (bool _isOpen); - - /// @dev Retrieves the ranked options voted by a given voter for a given issue. - /// @param _issueId the issue - /// @param _voter the aaddres of voter. - /// @return _optionIds the ranked options voted by voter. - function voteOf(uint _issueId, address _voter) external view returns (uint[] memory _optionIds); -} - -``` - -### Draft V3 - -#### Single Option Proposal: Yes/Nay/Abstain - -```solidity -pragma solidity >=0.7.0 <0.9.0; - interface IERC1202Core { event VoteCast( address indexed voter, - uint256 proposalId, + uint256 indexed proposalId, uint8 support, uint256 weight, string reason, @@ -165,173 +68,93 @@ interface IERC1202Core { uint8 support, uint256 weight, string calldata reasonUri, - bytes calldata extraParams // TODO: under what circumstance the params will be used? - ) external returns (uint256 balance); - - function execute(uint256 proposalId, bytes memory extraParams) - external - returns (uint256 balance); - - function votingPeriodFor(uint256 proposalId) external view returns (uint256 startBlock, uint256 endBlock); -} - -interface IERC1202XDelegate { - function delegates(address account) external view returns (address); - function delegate(address delegatee, bytes[] calldata extraParams) external; -} + bytes calldata extraParams + ) external payable returns; -interface IERC1202XProposal { - event ProposalCreated( + function castVoteFrom( + address from, uint256 proposalId, - string proposalUri, - address proposer, - address[] targets, - uint256[] values, - string[] signatures, - bytes[] calldatas, - uint256 startBlock, - uint256 endBlock - ); - event ProposalExecuted(uint256 proposalId); - // TODO: add Proposal Cancel/Edit/Withdraw Event and Functions? + uint8 support, + uint256 weight, + string calldata reasonUri, + bytes calldata extraParams + ) external payable returns; - // TODO: decide whether we require generating ProposalId in the method or not? - // TODO: if require generating ProposalId internally, can it be incremental hash-generated? - // TODO: what if proposal need to demonstrate sufficient support? How to input quorum? - function proposeProposal( - uint256 proposalId, - string memory proposalUri, - address[] memory targets, - uint256[] memory values, - bytes[] memory calldatas, - uint256 startblock, - uint256 endblock, - bytes memory extraParams - ) external returns (uint256 registeredProposalId); - - // TODO: what's most proper way to update the voting period? - // TODO: do we want to include cancel or withdraw? - // TODO: what's the best way to include weight scheme? + function execute(uint256 proposalId, bytes memory extraParams) payable external; } - ``` -#### Multi-Option Proposal: Board Elections or Ranked Elections +2. Compliant contracts MAY implement the `IERC1202MultiVote` Interface. If the intention is for multi-options to be supported, e.g. for ranked-choices +or variant weights voting, Compliant contracts MUST implement `IERC1202MultiVote` Interface. ```solidity -// SPDX-License-Identifier: MIT - -pragma solidity >=0.7.0 <0.9.0; - -interface IERC1202Core { - event VoteCast( +interface IERC1202MultiVote { + event MultiVoteCast( address indexed voter, - uint256 proposalId, - uint8[] optionIds, - uint256[] weights, + uint256 indexed proposalId, + uint8[] support, + uint256[] weight, string reason, bytes extraParams ); - function castVote( + function castMultiVote( uint256 proposalId, - uint8[] calldata optionIds, - uint256[] calldata weights, + uint8[] support, + uint256[] weight, string calldata reasonUri, - bytes calldata extraParams // TODO: under what circumstance the params will be used? - ) external returns (uint256[] memory balance); - - function execute(uint256 proposalId, bytes memory extraParams) - external - returns (uint256 balance); - - function votingPeriodFor(uint256 proposalId) - external - view - returns (uint256 startBlock, uint256 endBlock); -} - -interface IERC1202XDelegate { - function delegates(address account) external view returns (address); - function delegate(address delegatee, bytes[] calldata extraParams) external; + bytes calldata extraParams + ) external payable; } +``` -interface IERC1202XProposal { - event ProposalCreated( - uint256 proposalId, - string proposalUri, - uint8[] optionIds, - address proposer, - address[][] targets, - uint256[][] values, - string[][] signatures, - bytes[][] calldatas, - uint256 startBlock, - uint256 endBlock - ); - event ProposalExecuted(uint256 proposalId); - // TODO: add Proposal Cancel/Edit/Withdraw Event and Functions? +### Getting Info: Voting Period, Eligibility, Weight - // TODO: decide whether we require generating ProposalId in the method or not? - // TODO: if require generating ProposalId internally, can it be incremental hash-generated? - // TODO: what if proposal need to demonstrate sufficient support? How to input quorum? - function proposeProposal( - uint256 proposalId, - string calldata proposalUri, - uint8[] calldata optionIds, - address[] calldata targets, - uint256[] calldata values, - bytes[] calldata calldatas, - uint256 startblock, - uint256 endblock, - bytes calldata extraParams - ) external returns (uint256 registeredProposalId); - - // TODO: what's most proper way to update the voting period? - // TODO: do we want to include cancel or withdraw? - // TODO: what's the best way to include weight scheme? +```solidity +interface IERC1202Info { + function votingPeriodFor(uint256 proposalId) external view returns (uint256 startPointOfTime, uint256 endPointOfTime); + function eligibleVotingWeight(uint256 proposalId, address voter) external view returns (uint256); } - ``` ## Rationale We made the following design decisions and here are the rationales. -- **Granularity and Anonymity:**: We created a `view` function `ballotOf` primarily making it easier for people to check the vote from certain address. This has the following assumptions: +### Granularity and Anonymity + +We created a `view` function `ballotOf` primarily making it easier for people to check the vote from certain address. This has the following assumptions: - - It's possible to check someone's vote directly given an address. If implementor don't want to make it so easily, they can simply reject all calls to this function. We want to make sure that we support both anonymous voting an non-anonymous voting. However since all calls to a smart contract is logged in block history, there is really no secrecy unless done with cryptography tricks. I am not cryptography-savvy enough to comment on the possibility. Please see "Second Feedback Questions 2018" for related topic. +- It's possible to check someone's vote directly given an address. If implementor don't want to make it so easily, they can simply reject all calls to this function. We want to make sure that we support both anonymous voting an non-anonymous voting. However since all calls to a smart contract is logged in block history, there is really no secrecy unless done with cryptography tricks. I am not cryptography-savvy enough to comment on the possibility. Please see "Second Feedback Questions 2018" for related topic. - - It's assumes for each individual address, they can only vote for one decision. They can distribute their available voting power into more granular level. If implementor wants allow this, they ask the user to create another wallet address and grant the new address certain power. For example, a token based voting where voting weight is determined by the amount of token held by a voter, a voter who wants to distribute its voting power in two different option(option set) can transfer some of the tokens to the new account and cast the votes from both accounts. +- It's assumes for each individual address, they can only vote for one decision. They can distribute their available voting power into more granular level. If implementor wants allow this, they ask the user to create another wallet address and grant the new address certain power. For example, a token based voting where voting weight is determined by the amount of token held by a voter, a voter who wants to distribute its voting power in two different option(option set) can transfer some of the tokens to the new account and cast the votes from both accounts. -- **Weight**: We assume there are `weight` of votes and can be checked by calling `weightOf(address addr)`, and the weight distribution is either internally determined or determined by constructor. However we have not been considering updating the weight distribution. Please comment on this design decision as we want to learn how likely an implementor would want to be able to update the voting weight distributions. +### Weights -## Backward Compatibility +We assume there are `weight` of votes and can be checked by calling `eligibleVotingWeight(proposalId, address voter)`, and the weight distribution is either internally determined or determined by constructor. -There is no backward compatibility issue we are aware of. +## Backwards Compatibility + +1. The `support` options are chosen to be `uint8` for the purpose to be backward compatible for GovernorBravo. It can be increased in the future ## Security Considerations -EIP-1202 is a voting standard. We expect the voting standard to be used in connection with other contracts such as token distributions, conducting actions in consensus or on behalf of an entity, multi-signature wallets, etc. +We expect the voting standard to be used in connection with other contracts such as token distributions, conducting actions in consensus or on behalf of an entity, multi-signature wallets, etc. The major security consideration is to ensure only using the standard interface for performing downstream actions or receiving upstream input (vote casting). We expect future audit tool to be based on standard interfaces. -It's also important to note as discussed in this standard that for the sake of simplicity, EIP-1202 is kept in the very basic form. It can be extended to support many different implementation variations. Such variations might contain different assumptions of the behavior and interpretation of actions. One example would be: What does it mean if someone votes multiple times through `vote`? +It's also important to note as discussed in this standard that for the sake of simplicity, this EIP is kept in the very basic form. It can be extended to support many different implementation variations. Such variations might contain different assumptions of the behavior and interpretation of actions. One example would be: What does it mean if someone votes multiple times through `vote`? - Would that mean the voter is increasing their weight, or - vote multiple options in the meanwhile, or - Does the latter vote override the previous vote? -Because of the flexible nature of voting, we expect many subsequent standards need to be created as an extension of EIP-1202. We suggest any extension or implementations of this standard be thoroughly audited before included in large scale or high asset volume applications. +Because of the flexible nature of voting, we expect many subsequent standards need to be created as an extension of this EIP. We suggest any extension or implementations of this standard be thoroughly audited before included in large scale or high asset volume applications. The third consideration is non-triviality. Some voting applications assume **_anonymity_**, **_randomness_**, **_time-based deadline_**, **_ordering_**, etc, these requirements in Ethereum are known to be non-trivial to achieve. We suggest any applications or organizations rely on audited and time-proven shared libraries when these requirements need to be enforced in their applications. The fourth consideration is potential abuse. When voting is standardized and put on contract, it is possible to write another contract that rewards a voter to vote in a certain way. It creates potential issues of bribery and conflict of interest abuse that is previously hard to implement. -## Work Directory - -The drafting and revision of EIP-1202 is conducted at [GitHub/xinbenlv/eip-1202](https://github.com/xinbenlv/eip-1202) - ## Copyright -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). +Copyright and related rights waived via [CC0](../LICENSE.md). From ab6d095f7ed4410c938528f6037cce777b83a6ed Mon Sep 17 00:00:00 2001 From: Pierrick Turelier Date: Mon, 31 Oct 2022 06:55:36 -0500 Subject: [PATCH 060/113] Update EIP-5164: Move to review (#5808) * EIP-5164: update CrossChainExecutor specification * Made some 5164 changes * Changed SHOULD to MUST for 5164 Executor implementation * EIP-5164: update CrossChainExecutor specification * EIP-5164: fix some wording * Added nonce ordering information to 5164 * EIP-5164: add CallsAlreadyExecuted error * EIP-5164: add isTrustedExecutor method definition * EIP-5164: add Calldata spec * EIP-5164: fix relayCalls wording Co-authored-by: Sam Wilson <57262657+SamWilsn@users.noreply.github.com> * EIP-5164: fix CrossChainExecutor wording Co-authored-by: Sam Wilson <57262657+SamWilsn@users.noreply.github.com> * EIP-5164: fix CallFailure wording Co-authored-by: Sam Wilson <57262657+SamWilsn@users.noreply.github.com> * EIP-5164: fix Rationale wording Co-authored-by: Sam Wilson <57262657+SamWilsn@users.noreply.github.com> * EIP-5164: fix Abstract wording * EIP-5164: fix CallsAlreadyExecuted wording * EIP-5164: fix Calldata syntax Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> Co-authored-by: Brendan Asselstine Co-authored-by: Sam Wilson <57262657+SamWilsn@users.noreply.github.com> Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> --- EIPS/eip-5164.md | 99 +++++++++++++++++++++++++++++++++--------------- 1 file changed, 68 insertions(+), 31 deletions(-) diff --git a/EIPS/eip-5164.md b/EIPS/eip-5164.md index bfbd0ba9e0c6d6..357e12cafb1244 100644 --- a/EIPS/eip-5164.md +++ b/EIPS/eip-5164.md @@ -2,9 +2,9 @@ eip: 5164 title: Cross-Chain Execution description: Defines an interface that supports execution across EVM networks. -author: Brendan Asselstine (@asselstine), Pierrick Turelier (@PierrickGT), Anna Carroll (@anna-carroll), Hadrien Croubois (@Amxx), Nam Chu Hoai (@nambrot), Georgios (@geogons), Theo Gonella (@mintcloud), Rafael Solari (@rsolari), Auryn Macmillan (@auryn-macmillan), Nathan Ginnever (@nginnever) +author: Brendan Asselstine (@asselstine), Pierrick Turelier (@PierrickGT) discussions-to: https://ethereum-magicians.org/t/eip-5164-cross-chain-execution/9658 -status: Draft +status: Review type: Standards Track category: ERC created: 2022-06-14 @@ -12,11 +12,13 @@ created: 2022-06-14 ## Abstract -This specification defines a cross-chain execution interface for EVM-based blockchains. Developers will be able to have contracts call contracts on other chains. There are two parts to this spec: the "sending" interface and the "executing" interface. The "sending" interface specifies the interface to send a call to another chain; this interface must be implemented by bridges. The "executing" interface must be implemented by the application; it is an interface for executing cross-chain calls. This specification is agnostic of the bridge implementation; it simply standardizes the call interfaces. +This specification defines a cross-chain execution interface for EVM-based blockchains. Implementations of this specification will allow contracts on one chain to call contracts on another. + +The specification defines two components: the "Cross Chain Relayer" and the "Cross Chain Executor". The Cross Chain Relayer lives on the calling side, and the executor lives on the receiving side. Calls sent to Cross Chain Relayers will move through a transport layer to Cross Chain Executor(s), where they are executed. Implementations of this specification must implement both components. ## Motivation -Many Ethereum protocols need to coordinate state changes across multiple EVM-based blockchains. These chains often have native or third-party bridges that allow Ethereum contracts to execute code. However, bridges have different APIs so bridge integrations are custom. Each one affords different properties; with varying degrees of security, speed, and control. +Many Ethereum protocols need to coordinate state changes across multiple EVM-based blockchains. These chains often have native or third-party bridges that allow Ethereum contracts to execute code. However, bridges have different APIs so bridge integrations are custom. Each one affords different properties; with varying degrees of security, speed, and control. Defining a simple, common specification will increase code re-use and allow us to use common bridge implementations. ## Specification @@ -33,16 +35,22 @@ The `CrossChainExecutor` lives on the destination chain and executes relayed cal ### CrossChainRelayer -The `CrossChainRelayer` lives on the chain from which messages are sent. The Relayer's job is to broadcast the messages through a transport layer. +The `CrossChainRelayer` lives on the chain from which messages are sent. The Relayer's job is to broadcast calls through a transport layer to one or more `CrossChainExecutor` contracts. #### Methods **relayCalls** -`CrossChainRelayer`s MUST emit the `RelayedCalls` event when successfully called. +Will relay a batch of `Call` structs to be executed by any `CrossChainExecutor`(s) that execute calls from this Relayer. The `gasLimit` is used as a limit on the executing side. + +`CrossChainRelayer`s MUST emit the `RelayedCalls` event when a batch of calls is relayed. `CrossChainRelayer`s MUST increment a `nonce` so that each batch of calls can be uniquely identified. +`CrossChainRelayer`s MUST return the `nonce` to allow callers to track the batch of calls. + +`CrossChainRelayer`s SHOULD pass the `nonce` as well as the address of the `sender` in the call to `CrossChainExecutor` to uniquely identify the message on the receiving chain. + `CrossChainRelayer`s MAY require payment. ```solidity @@ -52,7 +60,7 @@ struct Call { } interface CrossChainRelayer { - function relayCalls(Call[] calldata calls, uint256 gasLimit) external payable; + function relayCalls(Call[] calldata calls, uint256 gasLimit) external payable returns (uint256 nonce); } ``` @@ -65,6 +73,9 @@ interface CrossChainRelayer { type: Call[] - name: gasLimit type: uint256 + outputs: + - name: nonce + type: uint256 ``` #### Events @@ -76,11 +87,10 @@ The `RelayedCalls` event MUST be emitted by the `CrossChainRelayer` when `relayC ```solidity interface CrossChainRelayer { event RelayedCalls( - uint256 indexed nonce, - address indexed sender, - CrossChainExecutor indexed executor, - Call[] calls, - uint256 gasLimit + uint256 indexed nonce, + address indexed sender, + Call[] calls, + uint256 gasLimit ); } ``` @@ -95,9 +105,6 @@ interface CrossChainRelayer { - name: sender indexed: true type: address - - name: executor - indexed: true - type: address - name: calls type: Call[] - name: gasLimit @@ -123,22 +130,58 @@ interface CrossChainRelayer { The `CrossChainExecutor` executes relayed calls. Developers must implement a `CrossChainExecutor` in order to execute messages on the receiving chain. -#### Authentication +The `CrossChainExecutor` will execute a nonce only once, but may execute nonces in any order. This specification makes no ordering guarantees, because messages may travel non-sequentially through the transport layer. + +#### Execution -`CrossChainRelayer`s SHOULD authenticate that the call has been performed by the bridge transport layer. +`CrossChainExecutor`s SHOULD authenticate that the call has been performed by the bridge transport layer. -`CrossChainRelayer`s SHOULD use [EIP-2771](./eip-2771.md) for authentication and append the address of the Transaction Signer (20 bytes of data) on the origin chain to the end of the call data being executed. +`CrossChainExecutor`s MUST NOT execute a batch of calls more than once. + +**Calldata** + +`CrossChainExecutor`s MUST append the ABI-packed (`nonce`, `sender`) to the calldata for each call being executed. It allows the receiver of the call to check the true `sender` of the transaction and use the `nonce` to apply any transaction ordering logic. + +```solidity +interface CrossChainExecutor { + bytes calldata = abi.encode(Call.data, nonce, sender); // Can also use abi.encodePacked +} +``` + +```yaml +- name: calldata + type: bytes + inputs: + - name: Call.data + type: bytes + - name: nonce + type: uint256 + - name: sender + type: address +``` #### Error handling +**CallsAlreadyExecuted** + +`CrossChainExecutor`s MUST revert if a batch of calls has already been executed and SHOULD emit `CallsAlreadyExecuted` custom error. + +```solidity +interface CrossChainExecutor { + error CallsAlreadyExecuted( + uint256 nonce + ); +} +``` + **CallFailure** -`CrossChainRelayer`s SHOULD revert with `CallFailure` if a call fails. +`CrossChainExecutor`s SHOULD revert with a `CallFailure` error if a call fails. ```solidity interface CrossChainExecutor { error CallFailure( - Call call, + uint256 callIndex, bytes errorData ); } @@ -154,8 +197,7 @@ interface CrossChainExecutor { interface CrossChainExecutor { event ExecutedCalls( CrossChainRelayer indexed relayer, - uint256 indexed nonce, - address indexed caller + uint256 indexed nonce ); } ``` @@ -170,23 +212,18 @@ interface CrossChainExecutor { - name: nonce indexed: true type: uint256 - - name: caller - indexed: true - type: address ``` -### ExecutorAware - -The `ExecutorAware` interface follows [EIP-2771](./eip-2771.md) and allows applications to verify where the call originated from. - ## Rationale -The Relayer address is passed to the executor so that the execution can easily be traced by a client using the relayer address and nonce. A third party just needs to be aware of a list of Relayers and a list of Executors and can trace execution across all of them. +The `CrossChainRelayer` can be coupled to one or more `CrossChainExecutor`. It is up to bridges to decide how to couple the two. Users can easily bridge a message by calling `relayCalls` without being aware of the `CrossChainExecutor` address. Messages can also be traced by a client using the data logged by the `ExecutedCalls` event. -Calls are relayed in batches because it is such a common action. Rather than have implementors take different approaches to encoding multiple calls into the `data` portion, this spec includes call batching to take away any guess work. +Calls are relayed in batches because it is such a common action. Rather than have implementors take different approaches to encoding multiple calls into the `data` portion, this specification includes call batching to take away any guess work. Some bridges may require payment in the native currency, so the `relayCalls` function is payable. +Bridges relay messages in various ways, applications should be aware of how the bridge they rely on operates and decide if they want to enforce transaction ordering by using the `nonce`. + ## Backwards Compatibility This specification is compatible with existing governance systems as it offers simple cross-chain execution. From 5fd59028c0e4f69d014a064558cf12064bf1ea14 Mon Sep 17 00:00:00 2001 From: xinbenlv Date: Mon, 31 Oct 2022 04:56:56 -0700 Subject: [PATCH 061/113] Update EIP-5750: Move to Review (#5785) * Init for method extra data ERC * Add the major content * Fix EIPW * Update status * Update name * Fix EIPW * Update EIPS/eip-5750.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * U * Update eip-5750.md * Fix a bit of grammar * Move to review * Update wording of title and desc * Update eip-5750.md * Update eip-5750.md * Update eip-5750.md * Update eip-5750.md * Update eip-5750.md * Update eip-5750.md * Respond to @samwilsn's question about why * Update eip-5750.md * Update eip-5750.md * Update eip-5750.md * update format * Fix typos * Fix typos * Fix typos Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> --- EIPS/eip-5750.md | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/EIPS/eip-5750.md b/EIPS/eip-5750.md index aeb6a7513607ad..54b1616f9d7797 100644 --- a/EIPS/eip-5750.md +++ b/EIPS/eip-5750.md @@ -1,10 +1,10 @@ --- eip: 5750 -title: Extra Data Parameter in Methods -description: Defines an extra data parameter in methods. +title: General Extensibility for Method Behaviors +description: Designating last param of dynamically sized bytes to be used for behavior extensions of methods. author: Zainan Victor Zhou (@xinbenlv) discussions-to: https://ethereum-magicians.org/t/erc-5750-method-with-extra-data/11176 -status: Draft +status: Review type: Standards Track category: ERC created: 2022-10-04 @@ -12,17 +12,39 @@ created: 2022-10-04 ## Abstract -This EIP defines an extra data parameter in methods, denoted as `methodName(... bytes calldata _data)`. Compliant methods -can use the extra data to introduce extended behaviors. Any method, regardless of name, can use this extra parameter. +This EIP recognizes _any methods_ with the last parameter being a dynamically sized `bytes` to be extendible by designating their last method parameter of dynamic sized bytes to be used behavior extensions. ## Motivation The general purpose of having extra data in a method is to allow further extensions for a existing method interface. +### Why is it useful to make method extendable + 1. Any methods complying with this EIP, such as overloaded `transfer` and `vote` could use string reasons as the extra data. 2. Existing EIPs that have exported methods compliant with this EIP can be extended for behaviors such as using the extra data to prove endorsement or as a salt, nonce, or commitments for reveal/commit schemes. 3. Data can be passed forward to callbacks. +### Why there needs to be a standard for these use case + +First of all, there are multiple ways to achieve extensibility for existing functions. + +1. _Add a new method_, then these questions need to be answered: + +- what will be the method name? +- what will be the full list of parameters? +- How many use-case do a given method name support? +- Do/Will they support off-chain signatures? + +2. _Use an existing parameter(s)_: then these questions need to be answered: + +- will it be one parameter? +- w- will it be multiple parameters? +- what are their sizes and types? + +Standardizing how method will be extended helps answer this questions. + +In particular, this EIP aims at achieving maximum backward (e.g. [EIP-721](./eip-721.md), [EIP-1155](./eip-1155.md)) and future compatibility e.g. supporting commit-reveal feature for arbitrary method ([EIP-5732](./eip-5732.md)), or adding digital signatures alongside with a method call. The goal and motivation is to allow other implementers and EIPs to further depend on the compatibility based on the specifications this EIP so all compliant method interface automatically becomes eligible for future new behaviors. + ## Specification The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC 2119. @@ -85,4 +107,5 @@ function diamondCut( 2. Compliant contracts must also take into consideration that the data parameter will be publicly revealed when submitted into the mempool or included in a block, so one must consider the risk of replay, and transaction ordering attacks. In addition, unencrypted personally identifiable information should never be included in the data parameter. ## Copyright + Copyright and related rights waived via [CC0](../LICENSE.md). From 07e4906933fde69e183ec06de6f6ad06e69390bf Mon Sep 17 00:00:00 2001 From: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> Date: Mon, 31 Oct 2022 13:24:44 -0400 Subject: [PATCH 062/113] CI: Add EIP-5757 to unchecked list (#5854) --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e0ae1c0bb0d753..d6a0ce0ff00d44 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -103,7 +103,7 @@ jobs: id: eipw with: token: ${{ secrets.GITHUB_TOKEN }} - unchecked: 1, 5069 + unchecked: 1, 5069, 5757 markdownlint: name: Markdown Linter From d672efd5f835926da94fe31df668c17d52122e82 Mon Sep 17 00:00:00 2001 From: xinbenlv Date: Mon, 31 Oct 2022 11:49:57 -0700 Subject: [PATCH 063/113] Update EIP-5732 to improve backward compatibility and address collaborator suggestions (#5858) * Init a EIP for Commit Interface * Update file name * Add content * Update name * Add mentioning of chainid * Add discussion-to * Function parameter * Add abstract * Add voting example. * Update eip-5732.md * Update EIP-5732 with move to Last Call * Update wording * U * U * U * Update eip-5732.md * Update EIPS/eip-5732.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-5732.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-5732.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update suggested by @mattstam * Update eip-5732.md * Update EIPS/eip-5732.md Co-authored-by: Matt Stam * Update * Add co-author * update deadline * Update format * Update last-call deadline * Fix format * Add backwards compatibility Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> Co-authored-by: Matt Stam --- EIPS/eip-5732.md | 72 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 48 insertions(+), 24 deletions(-) diff --git a/EIPS/eip-5732.md b/EIPS/eip-5732.md index 3964ab89129d39..1ce1ceea91ba3c 100644 --- a/EIPS/eip-5732.md +++ b/EIPS/eip-5732.md @@ -5,7 +5,7 @@ description: A simple but general commit interface to support commit-reveal sche author: Zainan Victor Zhou (@xinbenlv), Matt Stam (@mattstam) discussions-to: https://ethereum-magicians.org/t/erc-5732-simple-commit-interface-to-support-commit-reveal-schemes/11115 status: Last Call -last-call-deadline: 2022-11-10 +last-call-deadline: 2022-11-13 type: Standards Track category: ERC created: 2022-09-29 @@ -27,35 +27,62 @@ with arbitrary reveal method such as `vote` or `transfer`. The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC 2119. -1. Compliant contract need to implement the following interface +1. Compliant contract MUST to implement the `IERC_COMMIT_CORE` interface ```solidity pragma solidity >=0.7.0 <0.9.0; -/// The EIP-165 identifier of this interface is 0x4ba43d48 -interface IERC_COMMIT { - event Commit(bytes32 _commitment, bytes _extraData); - function commit(bytes32 _commitment, bytes calldata _extraData) payable external; +/// The EIP-165 identifier of this interface is 0xf14fcbc8 +interface IERC_COMMIT_CORE { + function commit(bytes32 _commitment) payable external; } ``` -2. One or more methods of a compliant contract MAY be used for reveal. But there MUST be a way to supply an extra field of `secret_salt`, -so that committer can later include the `secret_salt` in the reveal TX that exposes the `secret_salt`. -Size and location of `secret_salt` is intentionally unspecified in this EIP to allow general flexibility for integration. +2. Compliant contract is RECOMMENDED to implement `IERC_COMMIT_GENERAL` interface. -3. Compliant contract MUST implement [EIP-165](./eip-165.md). +When implementing the method of `commitFrom` in addition to the `commit` method, the `commit(_commitment)` MUST be equivalent as if called `commitFrom(msg.sender, _commitment, [/*empty arraye*/]);`. The `returns(uint256)` is RECOMMENDED to return either `block.timestamp` or `block.number` or a number that indicate the ordering of different commitments. When `commitFrom` is being called. + +3. If compliant contract implements `IERC_COMMIT_GENERAL`, the event `Commit` MUST be emitted when a commitment is accepted and recorded. In the parameter of both `Commit` and the `commitFrom` method, the `_timePoint` is a time-point-representing value that represents ordering of commitments in which a latter commitment will always have a greater value than a former commitment, such as `block.timestamp` or `block.number` or other time scale chosen by implementing contracts. The `extraData` is reserved for future behavior extension. If the `_from` is different from the TX signer, it is RECOMMENDED that compliant contract SHOULD validate signature for `_from`. For EOAs this will be validating its ECDSA signatures on chain. For smart contract accounts, it is RECOMMENDED to use [EIP-1271](./eip-1271.md) to validate the signatures. + +```solidity +pragma solidity >=0.7.0 <0.9.0; + +/// The EIP-165 identifier of this interface is 0x67b2ec2c +interface IERC_COMMIT_GENERAL { + event Commit( + uint256 indexed _timePoint, + address indexed _from, + bytes32 indexed _commitment, + bytes _extraData); + function commitFrom( + address _from, + bytes32 _commitment, + bytes calldata _extraData) + payable external returns(uint256 /*timePoint*/); +} +``` + +4. One or more methods of a compliant contract MAY be used for reveal. + +But there MUST be a way to supply an extra field of `secret_salt`, so that committer can later open the `secret_salt` in the reveal TX that exposes the `secret_salt`. The size and location of `secret_salt` is intentionally unspecified in this EIP to maximize flexibility for integration. + +5. Compliant contract is RECOMMENDED to implement [EIP-165](./eip-165.md). ## Rationale -1. One design options is that we can attach a Commit Interface to any individual ERCs such as voting standards or token standards. We choose to have a simple and generalize commit interface so all ERCs can be extended to support commit-reveal without changing their basic method signatures. +1. One design options is that we can attach a Commit Interface to any individual ERCs such as voting standards or token standards. We choose to have a simple and eneralize commit interface so all ERCs can be extended to support commit-reveal without changing their basic method signatures. -2. The key derived design decision we made is we will have a standardized `commit` method without a standardized `reveal` method, making room for customized reveal method or using -`commit` with existing standard. +2. The key derived design decision we made is we will have a standardized `commit` method without a standardized `reveal` method, making room for customized reveal method or using `commit` with existing standard. + +3. We chose to have a simple one parameter method of `commit` in our Core interface to make it fully backward compatible with a few prior-adoptions e.g. ENS + +4. We also add a `commitFrom` to easy commitment being generated off-chain and submitted by some account on behalf by another account. ## Backwards Compatibility -This EIP is backward compatible with all existing ERCs method signature that has extraData. New EIPs can be designed with an extra field of "salt" -to make it easier to support this EIP, but not required. +This EIP is backward compatible with all existing ERCs method signature that has extraData. New EIPs can be designed with an extra field of "salt" to make it easier to support this EIP, but not required. + +The `IERC_COMMIT_CORE` is backward compatible with ENS implementations and other existing prior-art. ## Reference Implementation @@ -85,10 +112,10 @@ interface ISimpleToken { function transfer(address to, uint256 amount, bytes calldata extraData); } -contract SomeBetterToken is ISimpleToken, IERC_COMMIT { +contract SomeBetterToken is ISimpleToken, IERC_COMMIT_CORE { mapping(address => uint256) balance; mapping(address => bytes32) lastCommits; - function commit(bytes32 _commitment, bytes calldata _extraData) { + function commit(bytes32 _commitment) { lastCommits[msg.sender] = _commitment; emit Commit(...); } @@ -134,12 +161,12 @@ interface ISimpleVote { function vote(uint256 _proposalId); } -contract BarVote is ISimpleVote, IERC_COMMIT { +contract BarVote is ISimpleVote, IERC_COMMIT_CORE { mapping(address => address => bool) proposalVotes; mapping(address => bytes32) lastCommits; mapping(uint256 => uint256) proposalDeadlines; // block number of deadline for each proposal - function commit(bytes32 _commitment, bytes calldata _extraData) { + function commit(bytes32 _commitment) { lastCommits[msg.sender] = _commitment; emit Commit(...); } @@ -162,11 +189,7 @@ contract BarVote is ISimpleVote, IERC_COMMIT { ### Commit with ENS Register as Reveal -In ENS registering process, currently -inside of `ETHRegistrarController` contract -a commit function is being used to -allow registerer fairly register a desire -domain to avoid being front-run. +In ENS registering process, currently inside of `ETHRegistrarController` contract a commit function is being used to allow registerer fairly register a desire domain to avoid being front-run. Here is how ENS uses commitment in its registration logic: @@ -196,6 +219,7 @@ function commit(bytes32 commitment, bytes calldata data) public { 5. Contract implementations SHOULD consider deleting the commitment of a given sender immediately to reduce chance of replay attack or re-entry attack by adversaries. 6. Contract implementations MAY consider also include the ordering of commitment received to add restriction on the order of reveal TX transactions. 7. Cautious on the potential replay attack across different chain-ids or chains resulting from forks, in which case, a ChainId shall be included in the generation of commitment. +8. Proper time-gap is suggested if the purpose is to avoid front-running attack. ## Copyright From 98d579b7e2160e6721784a382cab9bddd7f95018 Mon Sep 17 00:00:00 2001 From: Moody Salem Date: Mon, 31 Oct 2022 16:30:45 -0400 Subject: [PATCH 064/113] Add EIP-5792: Wallet Abstract Transaction Send API (#5792) * start the draft * linkify * cleanup the text * Apply suggestions from code review Co-authored-by: Sam Wilson <57262657+SamWilsn@users.noreply.github.com> * rename * url, some cleanup * fix type * text edits before re-writing spec * fix the critical error * revert incomplete docs * add another method * dash * some cleanup on text * little more cleanup * some more context * clean up language * message -> call * improve the examples and specification for return value * clean up text a little more * asterisk -> dash * section unique identifiers * better text, remove id * fix linter error * copy in specifications * fix the title Co-authored-by: Sam Wilson <57262657+SamWilsn@users.noreply.github.com> --- EIPS/eip-5792.md | 389 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 389 insertions(+) create mode 100644 EIPS/eip-5792.md diff --git a/EIPS/eip-5792.md b/EIPS/eip-5792.md new file mode 100644 index 00000000000000..fd6617e9b187a9 --- /dev/null +++ b/EIPS/eip-5792.md @@ -0,0 +1,389 @@ +--- +eip: 5792 +title: Wallet Function Call API +description: Adds JSON-RPC methods for sending multiple function calls from a wallet, and checking their status +author: Moody Salem (@moodysalem) +discussions-to: https://ethereum-magicians.org/t/eip-5792-wallet-abstract-transaction-send-api/11374 +status: Draft +type: Standards Track +category: Interface +created: 2022-10-17 +--- + +## Abstract + +Defines new JSON-RPC methods for dapps to send batches of function calls from a user's wallet, as well as check +on the status of these calls. These new methods are more abstract than the existing transaction sending APIs +to allow for differences between wallets in how function calls are sent on-chain, e.g. smart contract wallets +utilizing [EIP-4337](./eip-4337.md) or EOA wallets that support bundled transactions via [EIP-3074](./eip-3074.md). +Dapps may use this more abstract interface to support different kinds of wallets, as well as provide a better UX for +sending bundles of function calls (e.g. [EIP-20](./eip-20.md)`#approve` followed by a contract call). + +## Motivation + +The current methods to send transactions from the user wallet and check their status are `eth_sendTransaction` +and `eth_getTransactionReceipt`. + +One problem with these methods is that they are keyed on the hash of the on-chain transaction, +i.e. `eth_sendTransaction` returns an transaction hash computed from the transaction parameters, +and `eth_getTransactionReceipt` takes as one argument the transaction hash. When the transaction hash changes, for +example when a user speeds up the transaction in their wallet, the transaction hash that the dapp is aware of becomes +irrelevant. There is no communication delivered to the dapp of the change in transaction hash, and no way to connect the +old transaction hash to the new one, except by the user account and transaction nonce. It is not trivial for the dapp +to find all signed transactions for a given nonce and account, especially for smart contract accounts which usually +store the nonce in a contract storage slot. This happens more frequently with smart contract wallets, which usually use +a third party relayer and automatically re-broadcast transactions with higher gas prices. + +Another problem with these methods is that they do not support sending multiple function calls related to a single +action. For example, when swapping on Uniswap, the user must often call [EIP-20](./eip-20.md)`#approve` +before calling the Uniswap router contract to swap. The dapp has to manage a complex multi-step asynchronous workflow to +guide the user through sending a single swap. The ideal UX would be to bundle the approve call with the swap call, and +abstract the underlying approve function call from the user. + +The interface also does not work well for account abstracted wallets (e.g. [EIP-4337](./eip-4337.md) +or [EIP-3074](./eip-3074.md)), which often involve a third party relayer to sign the transaction that triggers the +function calls from the user's wallet. In these cases the actual transaction hash may not be known at the time of user +signing, but must still be returned by `eth_sendTransaction`. The transaction hash returned by `eth_sendTransaction` in +these cases is unlikely to be relevant to the transaction hash of the included transaction. The existing interface also +provides no way to delay the resolution of the transaction hash, since it is used as the key of the transaction tracked +by the dapp. Dapps often link to the block explorer for the returned transaction hash, but in these cases the +transaction hash is wrong and the link will not work. + +Dapps need a better interface for sending batches of function calls from the user's wallet so they can interact with +wallets without considering the differences between wallet implementations. These methods are backwards compatible with +existing EOA wallets. EOA wallets may send bundles of function calls as individual transactions. The goal of the new +interface is to be a more stable and flexible interface that enables a better user experience, while wallet +implementations evolve over time. + +## Specification + +Three new JSON-RPC methods are added. Dapps may begin using these methods immediately, falling back +to `eth_sendTransaction` and `eth_getTransactionReceipt` when they are not available. + +### `wallet_sendFunctionCallBundle` + +Requests that the wallet deliver a group of function calls on-chain from the user's wallet. + +- The wallet MUST send these calls in the order specified in the request. +- The wallet MAY send all the function calls as part of a single transaction, or multiple transactions. +- Dapps MUST NOT rely on the calls being sent in an atomic transaction, i.e. other untrusted calls may be + included between each of the requested function calls. +- The wallet MUST attempt to deliver all calls if it returns a successful response to this method, and the wallet + MUST NOT deliver any calls if it returns an error response. +- The wallet MAY reject the request if the request chain ID does not match the currently selected chain ID. +- The wallet MUST send the calls on the request chain ID. +- The wallet MAY reject the request if the `from` address does not match the enabled account. +- The wallet MAY reject the request if one or more calls in the bundle will fail. + +#### `wallet_sendFunctionCallBundle` OpenRPC Specification + +```yaml +- name: wallet_sendFunctionCallBundle + summary: Sends a bundle of function calls from the user wallet + params: + - name: Function calls + required: true + schema: + type: object + title: Send function call bundle request + required: + - chainId + - from + - calls + properties: + chainId: + title: chainId + description: Chain ID that these calls should be sent on + $ref: '#/components/schemas/uint' + from: + title: from address + description: The address from which the function calls should be sent + $ref: '#/components/schemas/address' + calls: + title: calls to make + description: The calls that the wallet should make from the user's address + type: array + minItems: 1 + items: + title: function call + description: A single function call + type: object + required: + - gas + - data + to: + title: to address + description: The address that is being called + $ref: '#/components/schemas/address' + gas: + title: gas limit + description: The gas limit for this particular call + $ref: '#/components/schemas/uint' + value: + title: value + description: How much value to send with the call + $ref: '#/components/schemas/uint' + data: + title: data + description: The data to send with the function call + $ref: '#/components/schemas/bytes' + optional: + title: optional + description: Whether the call must succeed for subsequent calls to be made + type: boolean + result: + name: Bundle identifier + schema: + type: string + maxLength: 66 +``` + +##### `wallet_sendFunctionCallBundle` Example Parameters + +```json +[ + { + "chainId": 1, + "from": "0xd46e8dd67c5d32be8058bb8eb970870f07244567", + "calls": [ + { + "to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567", + "gas": "0x76c0", + "value": "0x9184e72a", + "data": "0xd46e8dd67c5d32be8d46e8dd67c5d32be8058bb8eb970870f072445675058bb8eb970870f072445675", + "optional": true + }, + { + "to": "0xd46e8dd67c5d32be8058bb8eb970870f07244567", + "gas": "0xdefa", + "value": "0x182183", + "data": "0xfbadbaf01" + } + ] + } +] +``` + +##### `wallet_sendFunctionCallBundle` Example Return Value + +The identifier may be the hash of the call bundle, e.g.: + +```json +"0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331" +``` + +The identifier may be a numeric identifier represented as a hex string, e.g.: + +```json +"0x01" +``` + +The identifier may be a base64 encoded string: + +```json +"aGVsbG8gd29ybGQ=" +``` + +### `wallet_getBundleStatus` + +Returns the status of a bundle that was sent via `wallet_sendFunctionCallBundle`. The identifier of the bundle is the +value returned from the `wallet_sendFunctionCallBundle` RPC. Note this method only returns a subset of fields +that `eth_getTransactionReceipt` returns, excluding any fields that may differ across wallet implementations. + +#### `wallet_getBundleStatus` OpenRPC Specification + +```yaml +- name: wallet_getBundleStatus + summary: Sends a bundle of function calls from the user wallet + params: + - name: Bundle identifier + required: true + schema: + type: string + title: Bundle identifier + result: + name: Call status + schema: + type: object + properties: + calls: + type: array + items: + title: call status + description: Status of the call at the given index + type: object + status: + title: The current status of the call + enum: + - CONFIRMED + - PENDING + receipt: + type: object + required: + - success + - blockHash + - blockNumber + - blockTimestamp + - gasUsed + - transactionHash + properties: + logs: + type: array + items: + title: Log object + type: object + properties: + address: + $ref: '#/components/schemas/address' + data: + title: data + $ref: '#/components/schemas/bytes' + topics: + title: topics + type: array + items: + $ref: '#/components/schemas/bytes32' + success: + type: boolean + title: Whether the call succeeded + blockHash: + title: The hash of the block in which the call was included + $ref: '#/components/schemas/bytes32' + blockNumber: + title: The number of the block in which the call was included + $ref: '#/components/schemas/uint' + blockTimestamp: + title: The timestamp of the block in which the call was included + $ref: '#/components/schemas/uint' + gasUsed: + title: How much gas the call actually used + $ref: '#/components/schemas/uint' + transactionHash: + title: The hash of the transaction in which the call was made + $ref: '#/components/schemas/bytes32' +``` + +##### `wallet_getBundleStatus` Example Parameters + +As with the return value of `wallet_sendFunctionCallBundle`, the bundle identifier may be any string of max length `66`. + +It may be the hash of the call bundle: + +```json +["0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"] +``` + +It may contain a numeric identifier as a hex string: + +```json +["0x01"] +``` + +It may be a base64 encoded string: + +```json +["aGVsbG8gd29ybGQ="] +``` + +##### `wallet_getBundleStatus` Example Return Value + +```json +{ + "calls": [ + { + "status": "CONFIRMED", + "receipt": { + "logs": [ + { + "address": "0xa922b54716264130634d6ff183747a8ead91a40b", + "topics": [ + "0x5a2a90727cc9d000dd060b1132a5c977c9702bb3a52afe360c9c22f0e9451a68" + ], + "data": "0xabcd" + } + ], + "success": true, + "blockHash": "0xf19bbafd9fd0124ec110b848e8de4ab4f62bf60c189524e54213285e7f540d4a", + "blockNumber": "0xabcd", + "blockTimestamp": "0xabcdef", + "gasUsed": "0xdef", + "transactionHash": "0x9b7bb827c2e5e3c1a0a44dc53e573aa0b3af3bd1f9f5ed03071b100bb039eaff" + } + }, + { + "status": "PENDING" + } + ] +} +``` + +### `wallet_showBundleStatus` + +Requests that the wallet present UI showing the status of the given bundle. This allows dapps to delegate the +display of the function call status to the wallet, which can most accurately render the current status of the bundle. +This RPC is intended to replace the typical user experience of a dapp linking to a block explorer for a given +transaction hash. + +- The wallet MAY ignore the request, for example if the wallet is busy with other user actions. +- The wallet MAY direct the user to a third party block explorer for more information. + +#### `wallet_showBundleStatus` OpenRPC Specification + +```yaml +- name: wallet_showBundleStatus + summary: Requests that the wallet show the status of the bundle with the given identifier + params: + - name: Bundle identifier + required: true + schema: + type: string + maxLength: 66 + result: + name: Empty + schema: + type: "null" +``` + +##### `wallet_showBundleStatus` Example Parameters + +```json +[ + "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331" +] +``` + +##### `wallet_showBundleStatus` Example Return Value + +```json +null +``` + +## Rationale + +Account abstracted wallets, either via [EIP-3074](./eip-3074.md) or [EIP-4337](./eip-4337.md) or other specifications, +have more capabilities than regular EOA accounts. + +The `eth_sendTransaction` and `eth_getTransactionReceipt` methods limit the quality of in-dapp transaction +construction and status tracking. It's possible for dapps to stop tracking transactions altogether and +leave that UX to the wallet, but it is a better UX when dapps provide updates on transactions constructed within the +dapp, because dapps will always have more context than the wallets on the action that a set of calls is +meant to perform. For example, an approve and swap might both be related to a trade that a user is attempting to make. +Without these APIs, it's necessary for a dapp to represent those actions as individual transactions. + +## Backwards Compatibility + +Wallets that do not support the following methods should return error responses to the new JSON-RPC methods. +Dapps MAY attempt to send the same bundle of calls via `eth_sendTransaction` when they receive a not implemented +call, or otherwise indicate to the user that their wallet is not supported. + +## Security Considerations + +Dapp developers MUST treat each call in a bundle as if the call was an independent transaction. +In other words, there may be additional untrusted transactions between any of the calls in a bundle. +The calls in the bundle may also be included in separate, non-contiguous blocks. There is no constraint over how long +it will take a bundle to be included. Dapps must encode deadlines in the smart contract calls as they do today. +Dapp developers MUST NOT assume that all calls are sent in a single transaction. + +## Copyright + +Copyright and related rights waived via [CC0](../LICENSE.md). From 0dbfc7acddcc89e97b89870a015aebd00225d9bd Mon Sep 17 00:00:00 2001 From: Ansgar Dietrichs Date: Mon, 31 Oct 2022 18:01:29 -0300 Subject: [PATCH 065/113] fix linting (#5860) --- EIPS/eip-4844.md | 42 +++++++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/EIPS/eip-4844.md b/EIPS/eip-4844.md index 05cb53b8528e49..8bdfad401a436c 100644 --- a/EIPS/eip-4844.md +++ b/EIPS/eip-4844.md @@ -74,10 +74,12 @@ Compared to full data sharding, this EIP has a reduced cap on the number of thes Throughout this proposal we use cryptographic methods and classes defined in the corresponding [consensus 4844 specs](https://github.com/ethereum/consensus-specs/blob/6c2b46ae3248760e0f6e52d61077d8b31e43ad1d/specs/eip4844). Specifically, we use the following methods from [`polynomial-commitments.md`](https://github.com/ethereum/consensus-specs/blob/6c2b46ae3248760e0f6e52d61077d8b31e43ad1d/specs/eip4844/polynomial-commitments.md): + - [`verify_kzg_proof()`](https://github.com/ethereum/consensus-specs/blob/6c2b46ae3248760e0f6e52d61077d8b31e43ad1d/specs/eip4844/polynomial-commitments.md#verify_kzg_proof) - [`evaluate_polynomial_in_evaluation_form()`](https://github.com/ethereum/consensus-specs/blob/6c2b46ae3248760e0f6e52d61077d8b31e43ad1d/specs/eip4844/polynomial-commitments.md#evaluate_polynomial_in_evaluation_form) We also use the following methods and classes from [`validator.md`](https://github.com/ethereum/consensus-specs/blob/6c2b46ae3248760e0f6e52d61077d8b31e43ad1d/specs/eip4844/validator.md): + - [`hash_to_bls_field()`](https://github.com/ethereum/consensus-specs/blob/6c2b46ae3248760e0f6e52d61077d8b31e43ad1d/specs/eip4844/validator.md#hash_to_bls_field) - [`compute_powers()`](https://github.com/ethereum/consensus-specs/blob/6c2b46ae3248760e0f6e52d61077d8b31e43ad1d/specs/eip4844/validator.md#compute_powers) - [`compute_aggregated_poly_and_commitment()`](https://github.com/ethereum/consensus-specs/blob/6c2b46ae3248760e0f6e52d61077d8b31e43ad1d/specs/eip4844/validator.md#compute_aggregated_poly_and_commitment) @@ -139,6 +141,7 @@ The `priority_fee_per_gas` and `max_fee_per_gas` fields follow [EIP-1559](./eip- and `access_list` as in [`EIP-2930`](./eip-2930.md). [`EIP-2718`](./eip-2718.md) is extended with a "wrapper data", the typed transaction can be encoded in two forms, dependent on the context: + - Network (default): `TransactionType || TransactionNetworkPayload`, or `LegacyTransaction` - Minimal (as in execution payload): `TransactionType || TransactionPayload`, or `LegacyTransaction` @@ -154,12 +157,12 @@ When a blob transaction is passed through the network (see the [Networking](#net the `TransactionNetworkPayload` version of the transaction also includes `blobs` and `kzgs` (commitments list). The execution layer verifies the wrapper validity against the inner `TransactionPayload` after signature verification as: -* All hashes in `blob_versioned_hashes` must start with the byte `BLOB_COMMITMENT_VERSION_KZG` -* There may be at most `MAX_BLOBS_PER_TX` blob commitments in any single transaction. -* There may be at most `MAX_BLOBS_PER_BLOCK` total blob commitments in a valid block. -* There is an equal amount of versioned hashes, kzg commitments and blobs. -* The KZG commitments hash to the versioned hashes, i.e. `kzg_to_versioned_hash(kzg[i]) == versioned_hash[i]` -* The KZG commitments match the blob contents. (Note: this can be optimized with additional data, using a proof for a +- All hashes in `blob_versioned_hashes` must start with the byte `BLOB_COMMITMENT_VERSION_KZG` +- There may be at most `MAX_BLOBS_PER_TX` blob commitments in any single transaction. +- There may be at most `MAX_BLOBS_PER_BLOCK` total blob commitments in a valid block. +- There is an equal amount of versioned hashes, kzg commitments and blobs. +- The KZG commitments hash to the versioned hashes, i.e. `kzg_to_versioned_hash(kzg[i]) == versioned_hash[i]` +- The KZG commitments match the blob contents. (Note: this can be optimized with additional data, using a proof for a random evaluation at two points derived from the commitment and blob data) @@ -227,6 +230,7 @@ with full sharding `is_data_available()` can be replaced by data-availability-sa Note that the consensus-layer is tasked with persisting the blobs for data availability, the execution-layer is not. The `ethereum/consensus-specs` repository defines the following beacon-node changes involved in this EIP: + - Beacon chain: process updated beacon blocks and ensure blobs are available. - P2P network: gossip and sync updated beacon block types and new blobs sidecars. - Honest validator: produce beacon blocks with blobs, publish the blobs sidecars. @@ -363,26 +367,26 @@ do we implement 25% of the work on the way to full sharding, or 50%, or 75%? The work that is already done in this EIP includes: -* A new transaction type, of the exact same format that will need to exist in "full sharding" -* _All_ of the execution-layer logic required for full sharding -* _All_ of the execution / consensus cross-verification logic required for full sharding -* Layer separation between `BeaconBlock` verification and data availability sampling blobs -* Most of the `BeaconBlock` logic required for full sharding -* A self-adjusting independent gasprice for blobs. +- A new transaction type, of the exact same format that will need to exist in "full sharding" +- _All_ of the execution-layer logic required for full sharding +- _All_ of the execution / consensus cross-verification logic required for full sharding +- Layer separation between `BeaconBlock` verification and data availability sampling blobs +- Most of the `BeaconBlock` logic required for full sharding +- A self-adjusting independent gasprice for blobs. The work that remains to be done to get to full sharding includes: -* A low-degree extension of the `blob_kzgs` in the consensus layer to allow 2D sampling -* An actual implementation of data availability sampling -* PBS (proposer/builder separation), to avoid requiring individual validators to process 32 MB of data in one slot -* Proof of custody or similar in-protocol requirement for each validator to verify a particular part of the sharded data in each block +- A low-degree extension of the `blob_kzgs` in the consensus layer to allow 2D sampling +- An actual implementation of data availability sampling +- PBS (proposer/builder separation), to avoid requiring individual validators to process 32 MB of data in one slot +- Proof of custody or similar in-protocol requirement for each validator to verify a particular part of the sharded data in each block This EIP also sets the stage for longer-term protocol cleanups: -* It adds an SSZ transaction type which is slightly gas-advantaged (1000 discount) to nudge people toward using it, +- It adds an SSZ transaction type which is slightly gas-advantaged (1000 discount) to nudge people toward using it, and paves the precedent that all new transaction types should be SSZ -* It defines `TransactionNetworkPayload` to separate network and block encodings of a transaction type -* Its (cleaner) gas price update rule could be applied to the primary basefee. +- It defines `TransactionNetworkPayload` to separate network and block encodings of a transaction type +- Its (cleaner) gas price update rule could be applied to the primary basefee. ### How rollups would function From 7e8d2629508c4d571f0124e4fc67a9ac13ee8b9a Mon Sep 17 00:00:00 2001 From: Ansgar Dietrichs Date: Tue, 1 Nov 2022 00:33:09 -0300 Subject: [PATCH 066/113] Update EIP-4844: Fee Market Update (#5707) * remove MAX_BLOBS_PER_TX * change fake_exponential to taylor expansion * add MIN_GASPRICE_PER_BLOB * change update fraction and add motivation * align tx field naming with 1559 * move explanation to rationale * introduce data gas * add max_fee_per_data_gas field and validity conditions * set reasonable MIN_DATA_GASPRICE * fix naming * Update EIPS/eip-4844.md Co-authored-by: protolambda * remove redundant per-block blob limit info * Update EIPS/eip-4844.md Co-authored-by: dankrad * Apply suggestions from code review Co-authored-by: Danny Ryan * remove calldata mention from blob gas * Update EIPS/eip-4844.md Co-authored-by: Danny Ryan * change update fraction to more closely approximate EIP-1559 * charge 1 data gas per byte * track excess data gas instead of excess blobs * move target from blobs to data gas * move limit from blobs to data gas * adjust update fraction for excess data gas tracking * clarify update fraction rationale * set min data gasprice to 1 * clarify fee burn * update mempool issues section * fix linting Co-authored-by: protolambda Co-authored-by: dankrad Co-authored-by: Danny Ryan --- EIPS/eip-4844.md | 135 ++++++++++++++++++++++++++--------------------- 1 file changed, 76 insertions(+), 59 deletions(-) diff --git a/EIPS/eip-4844.md b/EIPS/eip-4844.md index 8bdfad401a436c..d54c92ab90772a 100644 --- a/EIPS/eip-4844.md +++ b/EIPS/eip-4844.md @@ -45,17 +45,18 @@ Compared to full data sharding, this EIP has a reduced cap on the number of thes | `BLOB_COMMITMENT_VERSION_KZG` | `Bytes1(0x01)` | | `POINT_EVALUATION_PRECOMPILE_ADDRESS` | `Bytes20(0x14)` | | `POINT_EVALUATION_PRECOMPILE_GAS` | `50000` | -| `MAX_BLOBS_PER_BLOCK` | `16` | -| `TARGET_BLOBS_PER_BLOCK` | `8` | -| `MAX_BLOBS_PER_TX` | `2` | -| `GASPRICE_UPDATE_FRACTION_PER_BLOB` | `64` | +| `MAX_DATA_GAS_PER_BLOCK` | `2**21` | +| `TARGET_DATA_GAS_PER_BLOCK` | `2**20` | +| `MIN_DATA_GASPRICE` | `1` | +| `DATA_GASPRICE_UPDATE_FRACTION` | `8902606` | | `MAX_VERSIONED_HASHES_LIST_SIZE` | `2**24` | | `MAX_CALLDATA_SIZE` | `2**24` | | `MAX_ACCESS_LIST_SIZE` | `2**24` | | `MAX_ACCESS_LIST_STORAGE_KEYS` | `2**24` | | `MAX_TX_WRAP_KZG_COMMITMENTS` | `2**24` | | `LIMIT_BLOBS_PER_TX` | `2**24` | -| `GAS_PER_BLOB` | `120000` | +| `DATA_GAS_PER_BLOB` | `2**17` | +| `SIMPLE_GAS_PER_BLOB` | `120000` | | `HASH_OPCODE_BYTE` | `Bytes1(0x49)` | | `HASH_OPCODE_GAS` | `3` | @@ -92,16 +93,18 @@ def kzg_to_versioned_hash(kzg: KZGCommitment) -> VersionedHash: return BLOB_COMMITMENT_VERSION_KZG + hash(kzg)[1:] ``` -Approximates `2 ** (numerator / denominator)`, with the simplest possible approximation that is continuous and has a continuous derivative: +Approximates `factor * e ** (numerator / denominator)` using Taylor expansion: ```python -def fake_exponential(numerator: int, denominator: int) -> int: - cofactor = 2 ** (numerator // denominator) - fractional = numerator % denominator - return cofactor + ( - fractional * cofactor * 2 + - (fractional ** 2 * cofactor) // denominator - ) // (denominator * 3) +def fake_exponential(factor: int, numerator: int, denominator: int) -> int: + i = 1 + output = 0 + numerator_accum = factor * denominator + while numerator_accum > 0: + output += numerator_accum + numerator_accum = (numerator_accum * numerator) // (denominator * i) + i += 1 + return output // denominator ``` ### New transaction type @@ -118,13 +121,14 @@ class SignedBlobTransaction(Container): class BlobTransaction(Container): chain_id: uint256 nonce: uint64 - priority_fee_per_gas: uint256 + max_priority_fee_per_gas: uint256 max_fee_per_gas: uint256 gas: uint64 to: Union[None, Address] # Address = Bytes20 value: uint256 data: ByteList[MAX_CALLDATA_SIZE] access_list: List[AccessTuple, MAX_ACCESS_LIST_SIZE] + max_fee_per_data_gas: uint256 blob_versioned_hashes: List[VersionedHash, MAX_VERSIONED_HASHES_LIST_SIZE] class AccessTuple(Container): @@ -137,7 +141,7 @@ class ECDSASignature(Container): s: uint256 ``` -The `priority_fee_per_gas` and `max_fee_per_gas` fields follow [EIP-1559](./eip-1559.md) semantics, +The `max_priority_fee_per_gas` and `max_fee_per_gas` fields follow [EIP-1559](./eip-1559.md) semantics, and `access_list` as in [`EIP-2930`](./eip-2930.md). [`EIP-2718`](./eip-2718.md) is extended with a "wrapper data", the typed transaction can be encoded in two forms, dependent on the context: @@ -158,8 +162,7 @@ the `TransactionNetworkPayload` version of the transaction also includes `blobs` The execution layer verifies the wrapper validity against the inner `TransactionPayload` after signature verification as: - All hashes in `blob_versioned_hashes` must start with the byte `BLOB_COMMITMENT_VERSION_KZG` -- There may be at most `MAX_BLOBS_PER_TX` blob commitments in any single transaction. -- There may be at most `MAX_BLOBS_PER_BLOCK` total blob commitments in a valid block. +- There may be at most `MAX_DATA_GAS_PER_BLOCK // DATA_GAS_PER_BLOB` total blob commitments in a valid block. - There is an equal amount of versioned hashes, kzg commitments and blobs. - The KZG commitments hash to the versioned hashes, i.e. `kzg_to_versioned_hash(kzg[i]) == versioned_hash[i]` - The KZG commitments match the blob contents. (Note: this can be optimized with additional data, using a proof for a @@ -181,9 +184,9 @@ def get_origin(tx: SignedBlobTransaction) -> Address: ### Header extension -The current header encoding is extended with a new 256-bit unsigned integer field `excess_blobs`. This is the running -total of excess blobs included on chain since this EIP was activated. If the total number of blobs is below the -average, `excess_blobs` is capped at zero. +The current header encoding is extended with a new 256-bit unsigned integer field `excess_data_gas`. This is the running +total of excess data gas consumed on chain since this EIP was activated. If the total amount of data gas is below the +target, `excess_data_gas` is capped at zero. The resulting RLP encoding of the header is therefore: @@ -205,18 +208,19 @@ rlp([ mix_digest, nonce, base_fee, - excess_blobs + excess_data_gas ]) ``` -The value of `excess_blobs` can be calculated using the parent header and number of blobs in the block. +The value of `excess_data_gas` can be calculated using the parent header and number of blobs in the block. ```python -def calc_excess_blobs(parent: Header, new_blobs: int) -> int: - if parent.excess_blobs + new_blobs < TARGET_BLOBS_PER_BLOCK: +def calc_excess_data_gas(parent: Header, new_blobs: int) -> int: + consumed_data_gas = new_blobs * DATA_GAS_PER_BLOB + if parent.excess_data_gas + consumed_data_gas < TARGET_DATA_GAS_PER_BLOCK: return 0 else: - return parent.excess_blobs + new_blobs - TARGET_BLOBS_PER_BLOCK + return parent.excess_data_gas + consumed_data_gas - TARGET_DATA_GAS_PER_BLOCK ``` ### Beacon chain validation @@ -271,33 +275,48 @@ def point_evaluation_precompile(input: Bytes) -> Bytes: ### Gas price of blobs (Simplified version) -For early draft implementations, we simply change `get_blob_gas(parent)` to always return `GAS_PER_BLOB`. +___WARNING: This is only for testing___ -### Gas price update rule (Full version) +For early draft implementations, we simply change `get_blob_gas(parent)` to always return `SIMPLE_GAS_PER_BLOB`. -We propose a simple independent EIP-1559-style targeting rule to compute the gas cost of the transaction. -We use the `excess_blobs` header field to store persistent data needed to compute the cost. +### Gas accounting (Full version) + +We introduce data gas as a new type of gas. It is independent of normal gas and follows its own targeting rule, similar to EIP-1559. +We use the `excess_data_gas` header field to store persistent data needed to compute the data gas price. For now, only blobs are priced in data gas. ```python -def get_intrinsic_gas(tx: SignedBlobTransaction, parent: Header) -> int: - intrinsic_gas = 21000 # G_transaction - if tx.message.to == None: # i.e. if a contract is created - intrinsic_gas = 53000 - # EIP-2028 data gas cost reduction for zero bytes - intrinsic_gas += 16 * len(tx.message.data) - 12 * len(tx.message.data.count(0)) - # EIP-2930 Optional access lists - intrinsic_gas += 1900 * sum(len(entry.storage_keys) for entry in tx.message.access_list) + 2400 * len(tx.message.access_list) - # New additional gas cost per blob - intrinsic_gas += len(tx.message.blob_versioned_hashes) * get_blob_gas(parent) - return intrinsic_gas - -def get_blob_gas(header: Header) -> int: +def calc_data_fee(tx: SignedBlobTransaction, parent: Header) -> int: + return get_total_data_gas(tx) * get_data_gasprice(header) + +def get_total_data_gas(tx: SignedBlobTransaction) -> int: + return DATA_GAS_PER_BLOB * len(tx.message.blob_versioned_hashes) + +def get_data_gasprice(header: Header) -> int: return fake_exponential( - header.excess_blobs, - GASPRICE_UPDATE_FRACTION_PER_BLOB + MIN_DATA_GASPRICE, + header.excess_data_gas, + DATA_GASPRICE_UPDATE_FRACTION ) ``` +The block validity conditions are modified to include data gas checks: + +```python +def validate_block(block: Block) -> None: + ... + + for tx in block.transactions: + ... + + # the signer must be able to afford the transaction + assert signer(tx).balance >= tx.message.gas * tx.message.max_fee_per_gas + get_total_data_gas(tx) * tx.message.max_fee_per_data_gas + + # ensure that the user was willing to at least pay the current data gasprice + assert tx.message.max_fee_per_data_gas >= get_data_gasprice(parent(block).header) +``` + +The actual `data_fee` as calculated via `calc_data_fee` is deducted from the sender balance before transaction execution and burned, and is not refunded in case of transaction failure. + ### Networking Transactions are presented as `TransactionType || TransactionNetworkPayload` on the execution layer network, @@ -412,17 +431,19 @@ allowing the point verification precompile to work with the new format. Rollups would not have to make any EVM-level changes to how they work; sequencers would simply have to switch over to using a new transaction type at the appropriate time. -### Blob gasprice update rule +### Data gasprice update rule -The blob gasprice update rule is intended to approximate the formula `blob_gas = 2**(excess_blobs / GASPRICE_UPDATE_FRACTION_PER_BLOB)`, -where `excess_blobs` is the total "extra" number of blobs that the chain has accepted relative to the "targeted" number (`TARGET_BLOBS_PER_BLOCK` per block). -Like EIP-1559, it's a self-correcting formula: as the excess goes higher, the `blob_gas` increases exponentially, reducing usage and eventually forcing the excess back down. +The data gasprice update rule is intended to approximate the formula `data_gasprice = MIN_DATA_GASPRICE * e**(excess_data_gas / DATA_GASPRICE_UPDATE_FRACTION)`, +where `excess_data_gas` is the total "extra" amount of data gas that the chain has consumed relative to the "targeted" number (`TARGET_DATA_GAS_PER_BLOCK` per block). +Like EIP-1559, it's a self-correcting formula: as the excess goes higher, the `data_gasprice` increases exponentially, reducing usage and eventually forcing the excess back down. The block-by-block behavior is roughly as follows. -If in block `N`, `blob_gas = G1`, and block `N` has `X` blobs, then in block `N+1`, `excess_blobs` increases by `X - TARGET_BLOBS_PER_BLOCK`, -and so the `blob_gas` of block `N+1` increases by a factor of `2**((X - TARGET_BLOBS_PER_BLOCK) / GASPRICE_UPDATE_FRACTION_PER_BLOB)`. +If block `N` consumes `X` data gas, then in block `N+1` `excess_data_gas` increases by `X - TARGET_DATA_GAS_PER_BLOCK`, +and so the `data_gasprice` of block `N+1` increases by a factor of `e**((X - TARGET_DATA_GAS_PER_BLOCK) / DATA_GASPRICE_UPDATE_FRACTION)`. Hence, it has a similar effect to the existing EIP-1559, but is more "stable" in the sense that it responds in the same way to the same total usage regardless of how it's distributed. +The parameter `DATA_GASPRICE_UPDATE_FRACTION` controls the maximum rate of change of the blob gas price. It is chosen to target a maximum change rate of `e(TARGET_DATA_GAS_PER_BLOCK / DATA_GASPRICE_UPDATE_FRACTION) ≈ 1.125` per block. + ## Backwards Compatibility ### Blob non-accessibility @@ -433,17 +454,13 @@ instead, they go into the `BeaconBlockBody`. This means that there is now a part ### Mempool issues -Blob transactions are unique in that they have a variable intrinsic gas cost. Hence, a transaction that could be included in one block may be invalid for the next. -To prevent mempool attacks, we recommend a simple technique: only propagate transactions whose `gas` is at least twice the current minimum. - -Additionally, blob transactions have a large data size at the mempool layer, which poses a mempool DoS risk, +Blob transactions have a large data size at the mempool layer, which poses a mempool DoS risk, though not an unprecedented one as this also applies to transactions with large amounts of calldata. -The risk is that an attacker makes and publishes a series of large blob transactions with fees `f9 > f8 > ... > f1`, -where each fee is the 10% minimum increment higher than the previous, and finishes it off with a 21000-gas basic transaction with fee `f10`. -Hence, an attacker could impose millions of gas worth of load on the network and only pay 21000 gas worth of fees. -We recommend a simple solution: both for blob transactions and for transactions carrying a large amount of calldata, -increase the minimum increment for mempool replacement from 1.1x to 2x, decreasing the number of resubmissions an attacker can do at any given fee level by ~7x. +We recommend two solutions: + +- include a 1.1x (or potentially higher) data gasprice bump requirement to the mempool replacement rules +- modify the Ethereum Wire Protocol to stop automatically broadcasting large transactions ## Test Cases From 50adc641905cb2e7aa10d3cb211be1467339489e Mon Sep 17 00:00:00 2001 From: Gaurang Torvekar Date: Tue, 1 Nov 2022 15:55:18 +0000 Subject: [PATCH 067/113] Update EIP-5606: Moving to Review stage (#5857) * Create eip-proxy-nfts.md * Updated the template * Fixed the markdown * Fixed the date format * Update eip-5606.md * Replaced ERC with EIP * Merged the contracts, changed the license * Changed the directory structure * Updated the implementation contract link * Fixed typo in the markdown * Implemented the suggestions from the EIP editor * Update eip-5606.md * Delete .DS_Store * Updated the abstract to remove the redundancies * Removed DS_Store * Update EIP-5606: Removed unnecessary variables from the struct * Update EIP-5606: Formatting changes * Update EIP-5606: Spaces vs tabs * Update EIP-5606: Minor formatting changes * Update EIP-5606: Moving to the Review stage Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> --- EIPS/eip-5606.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EIPS/eip-5606.md b/EIPS/eip-5606.md index 6d24a30fe1ca3e..0cb79857928d7f 100644 --- a/EIPS/eip-5606.md +++ b/EIPS/eip-5606.md @@ -4,7 +4,7 @@ title: Multiverse NFTs description: A universal representation of multiple related NFTs as a single digital asset across various platforms author: Gaurang Torvekar (@gaurangtorvekar), Khemraj Adhawade (@akhemraj), Nikhil Asrani (@nikhilasrani) discussions-to: https://ethereum-magicians.org/t/eip-5606-multiverse-nfts-for-digital-asset-interoperability/10698 -status: Draft +status: Review type: Standards Track category: ERC created: 2022-09-06 From 1420396238c4b8f043adff435fd16cdee7c0a67d Mon Sep 17 00:00:00 2001 From: Francisco Date: Tue, 1 Nov 2022 12:56:55 -0300 Subject: [PATCH 068/113] Update EIP-2612: Move to Final (#5782) * Move EIP-2612 to Final * Update eip-2612.md * Update eip-2612.md * Revert "Update eip-2612.md" This reverts commit ffc817f574fa8fe876bcf1412c4dc0aadd2beedd. * remove colon and explicit quotes --- EIPS/eip-2612.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/EIPS/eip-2612.md b/EIPS/eip-2612.md index 51b0a61ac85282..eecb1f7dfc77b0 100644 --- a/EIPS/eip-2612.md +++ b/EIPS/eip-2612.md @@ -1,11 +1,10 @@ --- eip: 2612 -title: "EIP-20 Permit Extension: Signed Approvals" +title: Permit Extension for EIP-20 Signed Approvals description: EIP-20 approvals via EIP-712 secp256k1 signatures author: Martin Lundfall (@Mrchico) discussions-to: https://github.com/ethereum/EIPs/issues/2613 -status: Last Call -last-call-deadline: 2022-10-08 +status: Final type: Standards Track category: ERC created: 2020-04-13 @@ -36,7 +35,7 @@ While it may be tempting to introduce `*_by_signature` counterparts for every EI - they can be implemented using a combination of `permit` and additional helper contracts without loss of generality. ## Specification -Three new functions are added to the EIP-20 ABI: +Compliant contracts must implement 3 new functions in addition to EIP-20: ```sol function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external function nonces(address owner) external view returns (uint) From a896261b42d62b82374ce506d812947a8c4b8ff6 Mon Sep 17 00:00:00 2001 From: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> Date: Wed, 2 Nov 2022 10:13:28 -0400 Subject: [PATCH 069/113] Add EIP-5568: Required Action Signals Using Revert Reasons (#5568) * Create eip-signal.md * Assign EIP-5568 * Add missing EIP number * Add discussions-to link * Expand specification * Finish the signal response section * Update title * Expand abstract * TIL how hygiene is actually spelt Co-authored-by: Sam Wilson <57262657+SamWilsn@users.noreply.github.com> * Add security considerations * -0 to compliant but here it is anyways Co-authored-by: xinbenlv * Use simpler format * eip-5568: remove extraneous character Co-authored-by: Sam Wilson <57262657+SamWilsn@users.noreply.github.com> Co-authored-by: xinbenlv Co-authored-by: lightclient <14004106+lightclient@users.noreply.github.com> --- EIPS/eip-5568.md | 70 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 EIPS/eip-5568.md diff --git a/EIPS/eip-5568.md b/EIPS/eip-5568.md new file mode 100644 index 00000000000000..dd5b21f852e697 --- /dev/null +++ b/EIPS/eip-5568.md @@ -0,0 +1,70 @@ +--- +eip: 5568 +title: Required Action Signals Using Revert Reasons +description: Signal to wallets that an action is needed by returning a custom revert code +author: Pandapip1 (@Pandapip1) +discussions-to: https://ethereum-magicians.org/t/eip-5568-revert-signals/10622 +status: Draft +type: Standards Track +category: Interface +created: 2022-08-31 +requires: 140 +--- + +## Abstract + +This EIP introduces a minimalistic machine-readable (binary) format to signal to wallets that an action needs to be taken by the user using a well-known revert reason. This custom revert reason contains just enough data to be extendable by future EIPs and to take in arbitrary parameters (up to 64 kB of data). Example use cases could include approving a token for an exchange, sending an HTTP request, or requesting the user to rotate their keys after a certain period of time to enforce good hygiene. + +## Motivation + +Oftentimes, a smart contract needs to signal to a wallet that an action needs to be taken, such as to sign a transaction or send an HTTP request to a URL. Traditionally, this has been done by hard-coding the logic into the frontend, but this EIP allows the smart contract itself to request the action. + +This means that, for example, an exchange or a market can directly tell the wallet to approve the smart contract to spend the token, vastly simplifying the front-end code. + +## Specification + +The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC 2119. + +### Custom Revert Reason + +To send a signal to a wallet, a compliant smart contract MUST revert with the following error: + +```solidity +error WalletSignal24(uint8 number_hint, uint24 instruction_id, bytes instruction_data) +``` + +The `number_hint` is an estimate of the number of signals that will be sent after the current signal. If a guess is availabe, `number_hint` MUST be that estimate. If a guess is unavailable, `number_hint` MUST be `0`. + +The `instruction_id` of an instruction defined by an EIP MUST be its EIP number unless there are exceptional circumstances (be reasonable). An EIP MUST define exactly zero or one `instruction_id`. The structure of the instruction data for any `instruction_id` MUST be defined by the EIP that defines the `instruction_id`. + +### Signal Response + +Before submitting a transaction to the mempool, it MUST be evaluated locally. If it reverts and the revert signature matches the custom error, then it MUST be treated as a signal. (It is RECOMMENDED for wallets to show a warning if the transaction reverts, even if the revert is not a signal). + +The `number_hint`, `instruction_id`, and `instruction_data` MUST be parsed from the revert data. It is RECOMMENDED for wallets to show a progress indicator using the `number_hint`. The instruction SHOULD be evaluated as per the relevant EIP. If the instruction is not supported by the wallet, it MUST display an error to the user indicating that is the case. The wallet MUST then re-evaluate the transaction, except if an instruction explicitly states that the transaction MUST NOT be re-evaluated. + +If an instruction is invalid, or the `number_hint`, `instruction_id`, and `instruction_data` cannot be parsed, then an error MUST be displayed to the user indicating that is the case. + +## Rationale + +This EIP was explicitly optimized for deployment gas cost and simplicity. It is expected that libraries will eventually be developed that makes sending and receiving signals more developer-friendly. + +## Backwards Compatibility + +### Human-Readable Revert Messages + +See [Revert Reason Collisions](#revert-reason-collisions). + +### [EIP-3668](./eip-3668.md) + +EIP-3668 can be used alongside this EIP, but it uses a different mechanism than this EIP. + +## Security Considerations + +### Revert Reason Collisions + +It is unlikely that the signature of the custom error matches any custom errors in the wild. In the case that it does, no harm is caused unless the data happen to be a valid instruction, which is even more unlikely. + +## Copyright + +Copyright and related rights waived via [CC0](../LICENSE.md). From e4d88dfb927e23cb04a0138f45e6e8552d29b7e2 Mon Sep 17 00:00:00 2001 From: Sam Wilson <57262657+SamWilsn@users.noreply.github.com> Date: Wed, 2 Nov 2022 12:05:39 -0400 Subject: [PATCH 070/113] Add EIP-5757: Propose process for allowing external links (#5757) * Propose process for allowing external links * Add note about one-source-per-eip * Apply lightclient's feeback (EIP-5757) * Switch source to origin for EIP-5757 * Uniform header spacing Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> --- EIPS/eip-5757.md | 95 +++++++++++++++++++++++++++++++++++++ assets/eip-5757/template.md | 60 +++++++++++++++++++++++ 2 files changed, 155 insertions(+) create mode 100644 EIPS/eip-5757.md create mode 100644 assets/eip-5757/template.md diff --git a/EIPS/eip-5757.md b/EIPS/eip-5757.md new file mode 100644 index 00000000000000..c089058aee43a3 --- /dev/null +++ b/EIPS/eip-5757.md @@ -0,0 +1,95 @@ +--- +eip: 5757 +title: Process for Approving External Resources +description: Requirements and process for allowing new origins of external resources +author: Sam Wilson (@SamWilsn) +discussions-to: https://ethereum-magicians.org/t/eip-5757-process-for-approving-external-resources/11215 +status: Draft +type: Meta +created: 2022-09-30 +requires: 1 +--- + +## Abstract + +Ethereum improvement proposals (EIPs) occasionally link to resources external to this repository. This document sets out the requirements for origins that may be linked to, and the process for approving a new origin. + +## Specification + +The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119. + +### Definitions + + - **Link**: Any method of referring to a resource, including: markdown links, anchor tags (``), images, citations of books/journals, and any other method of referencing content not in the current resource. + - **Resource**: A web page, document, article, file, book, or other media that contains content. + - **Origin**: A publisher/chronicler of resources, like a standards body (eg. w3c) or a system of referring to documents (eg. Digital Object Identifier System). + +### Requirements for Origins + +Permissible origins **SHOULD NOT** obviously allow redistributing their resources as part of the EIP repository. If an origin does obviously allow redistribution of resources, include those resources in an appropriate directory within this repository and link to those copies instead. The common exception to this rule are git repositories under the Ethereum organization. + +Permissible origins **MUST** provide a method of uniquely identifying a particular revision of a resource. Examples of such methods may include git commit hashes, version numbers, or publication dates. + +Permissible origins **MUST** have a proven history of availability. A origin existing for at least ten years and reliably serving resources would be sufficient—but not necessary—to satisfy this requirement. + +Permissible origins **MUST NOT** charge a fee for accessing resources. + +### Origin Removal + +Any approved origin that ceases to satisfy the above requirements **MUST** be removed from [EIP-1](./eip-1.md). If a removed origin later satisfies the requirements again, it MAY be re-approved by creating a new EIP as described in [Origin Approval](#origin-approval). + +Finalized EIPs (eg. those in the `Final` or `Withdrawn` statuses) **SHOULD NOT** be updated to remove links to these origins. + +Non-Finalized EIPs **MUST** remove links to these origins before changing statuses. + +### Origin Approval + +#### Proposal + +Each potential permitted origin **SHALL** be described in its own EIP. + +These EIPs **MUST** describe how the origin meets the requirements described above. + +These EIPs **MUST** include the markup for creating a link that satisfies all the above requirements and an example of such a link. + +When opened, these EIPs: + + - **MUST** have a `status` of `Draft`. + +Throughout their lifetime, these EIPs: + + - **MUST** have a `type` of `Meta`; + - **MUST** have a `title` beginning with `External Origin - ` followed by a unique name describing the origin; and + - **MAY** include links to any resources relevant to the approval process (regardless of origin). + +[A template for these proposals is available](../assets/eip-5757/template.md). + +#### Review + +Should the editors determine that an origin meets the requirements above, its proposal **SHALL** be granted a `status` of `Final`, and EIP-1 **MUST** be updated to show the new origin. + +## Rationale + +### Redistribution + +It is much easier to meet the process' goals for immutability if the resource is subject to this repository's tooling. Likewise, it is much easier to ensure availability if the resources are distributed alongside their EIPs. Therefore, if an origin allows it, prefer redistribution in this repository. + +### Unique Identifiers + +If it is impossible to uniquely identify a version of a resource, it becomes impractical to track changes, which makes it difficult to ensure immutability. + +### Availability + +If it is possible to implement a standard without a linked resource, then the linked resource is unnecessary. If it is impossible to implement a standard without a linked resource, then that resource must be available for implementers. + +### Free Access + +The Ethereum ecosystem is built on openness and free access, and the EIP process should follow those principles. + +### One Origin per Proposal + +Adding any origin is likely to be contentious and involve long debate. If each origin is proposed in its own EIP, they each will get a `discussions-to` link to focus and preserve discussion. + +## Copyright + +Copyright and related rights waived via [CC0](../LICENSE.md). diff --git a/assets/eip-5757/template.md b/assets/eip-5757/template.md new file mode 100644 index 00000000000000..baf35931766778 --- /dev/null +++ b/assets/eip-5757/template.md @@ -0,0 +1,60 @@ +--- +eip: +title: External Origin - +description: +author: +discussions-to: +status: Draft +type: Meta +created: +requires: 5757 +--- + + + +## Abstract +This proposal presents as a permissible external origin for EIPs. Permissible origins must satisfy requirements for identification, availability, and access. This origin meets all of the requirements. + +## Motivation + + + should be an allowed origin of external resources because . + +### Redistribution + + +It is impractical to redistribute resources from because . + +### Identification + + +Each version of a resource by are uniquely identified by . + +### Availability + + + +Since , has made its resources available with minimal interruption, and should continue to do so indefinitely. + + + +## Specification +The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119. + +### Link Format + + +```markdown +<...> +``` + +### Link Example + + +## Rationale + + +## Copyright +Copyright and related rights waived via [CC0](../LICENSE.md). From 3cf212612200f4b59aac2d5681a7c3d59f4dd22f Mon Sep 17 00:00:00 2001 From: Sam Wilson <57262657+SamWilsn@users.noreply.github.com> Date: Wed, 2 Nov 2022 14:11:21 -0400 Subject: [PATCH 071/113] EIP-5757: apply changes from EIPIP meeting (#5869) --- EIPS/eip-5757.md | 40 ++++--------------------- assets/eip-5757/template.md | 60 ------------------------------------- 2 files changed, 6 insertions(+), 94 deletions(-) delete mode 100644 assets/eip-5757/template.md diff --git a/EIPS/eip-5757.md b/EIPS/eip-5757.md index c089058aee43a3..91aa7d424b3d1c 100644 --- a/EIPS/eip-5757.md +++ b/EIPS/eip-5757.md @@ -4,7 +4,7 @@ title: Process for Approving External Resources description: Requirements and process for allowing new origins of external resources author: Sam Wilson (@SamWilsn) discussions-to: https://ethereum-magicians.org/t/eip-5757-process-for-approving-external-resources/11215 -status: Draft +status: Review type: Meta created: 2022-09-30 requires: 1 @@ -26,8 +26,6 @@ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "S ### Requirements for Origins -Permissible origins **SHOULD NOT** obviously allow redistributing their resources as part of the EIP repository. If an origin does obviously allow redistribution of resources, include those resources in an appropriate directory within this repository and link to those copies instead. The common exception to this rule are git repositories under the Ethereum organization. - Permissible origins **MUST** provide a method of uniquely identifying a particular revision of a resource. Examples of such methods may include git commit hashes, version numbers, or publication dates. Permissible origins **MUST** have a proven history of availability. A origin existing for at least ten years and reliably serving resources would be sufficient—but not necessary—to satisfy this requirement. @@ -36,7 +34,7 @@ Permissible origins **MUST NOT** charge a fee for accessing resources. ### Origin Removal -Any approved origin that ceases to satisfy the above requirements **MUST** be removed from [EIP-1](./eip-1.md). If a removed origin later satisfies the requirements again, it MAY be re-approved by creating a new EIP as described in [Origin Approval](#origin-approval). +Any approved origin that ceases to satisfy the above requirements **MUST** be removed from [EIP-1](./eip-1.md). If a removed origin later satisfies the requirements again, it MAY be re-approved by following the process described in [Origin Approval](#origin-approval). Finalized EIPs (eg. those in the `Final` or `Withdrawn` statuses) **SHOULD NOT** be updated to remove links to these origins. @@ -44,36 +42,14 @@ Non-Finalized EIPs **MUST** remove links to these origins before changing status ### Origin Approval -#### Proposal - -Each potential permitted origin **SHALL** be described in its own EIP. - -These EIPs **MUST** describe how the origin meets the requirements described above. - -These EIPs **MUST** include the markup for creating a link that satisfies all the above requirements and an example of such a link. - -When opened, these EIPs: - - - **MUST** have a `status` of `Draft`. - -Throughout their lifetime, these EIPs: +Should the editors determine that an origin meets the requirements above, EIP-1 **MUST** be updated to include: - - **MUST** have a `type` of `Meta`; - - **MUST** have a `title` beginning with `External Origin - ` followed by a unique name describing the origin; and - - **MAY** include links to any resources relevant to the approval process (regardless of origin). - -[A template for these proposals is available](../assets/eip-5757/template.md). - -#### Review - -Should the editors determine that an origin meets the requirements above, its proposal **SHALL** be granted a `status` of `Final`, and EIP-1 **MUST** be updated to show the new origin. + * The name of the allowed origin; + * The permitted markup and formatting required when referring to resources from the origin; and + * A fully rendered example of what a link should look like. ## Rationale -### Redistribution - -It is much easier to meet the process' goals for immutability if the resource is subject to this repository's tooling. Likewise, it is much easier to ensure availability if the resources are distributed alongside their EIPs. Therefore, if an origin allows it, prefer redistribution in this repository. - ### Unique Identifiers If it is impossible to uniquely identify a version of a resource, it becomes impractical to track changes, which makes it difficult to ensure immutability. @@ -86,10 +62,6 @@ If it is possible to implement a standard without a linked resource, then the li The Ethereum ecosystem is built on openness and free access, and the EIP process should follow those principles. -### One Origin per Proposal - -Adding any origin is likely to be contentious and involve long debate. If each origin is proposed in its own EIP, they each will get a `discussions-to` link to focus and preserve discussion. - ## Copyright Copyright and related rights waived via [CC0](../LICENSE.md). diff --git a/assets/eip-5757/template.md b/assets/eip-5757/template.md deleted file mode 100644 index baf35931766778..00000000000000 --- a/assets/eip-5757/template.md +++ /dev/null @@ -1,60 +0,0 @@ ---- -eip: -title: External Origin - -description: -author: -discussions-to: -status: Draft -type: Meta -created: -requires: 5757 ---- - - - -## Abstract -This proposal presents as a permissible external origin for EIPs. Permissible origins must satisfy requirements for identification, availability, and access. This origin meets all of the requirements. - -## Motivation - - - should be an allowed origin of external resources because . - -### Redistribution - - -It is impractical to redistribute resources from because . - -### Identification - - -Each version of a resource by are uniquely identified by . - -### Availability - - - -Since , has made its resources available with minimal interruption, and should continue to do so indefinitely. - - - -## Specification -The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119. - -### Link Format - - -```markdown -<...> -``` - -### Link Example - - -## Rationale - - -## Copyright -Copyright and related rights waived via [CC0](../LICENSE.md). From 362527ddc1b7feaff91a050e663464ba4c5adfe7 Mon Sep 17 00:00:00 2001 From: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> Date: Thu, 3 Nov 2022 14:50:45 -0400 Subject: [PATCH 072/113] Update EIP-5750: Change the specification to suit more use cases, fix grammar and some formatting (#5866) * Update EIP-5750: Change the specification to suit more use cases, fix grammar and some formatting * Fix some grammatical stuff I missed * Fix linter issue Co-authored-by: xinbenlv * Fix another linter isse Co-authored-by: xinbenlv * Last linter issue Co-authored-by: xinbenlv * One lqst lint * Bullet it Co-authored-by: xinbenlv --- EIPS/eip-5750.md | 112 +++++++++++++++++++++++------------------------ 1 file changed, 54 insertions(+), 58 deletions(-) diff --git a/EIPS/eip-5750.md b/EIPS/eip-5750.md index 54b1616f9d7797..16f48c1dd52754 100644 --- a/EIPS/eip-5750.md +++ b/EIPS/eip-5750.md @@ -8,103 +8,99 @@ status: Review type: Standards Track category: ERC created: 2022-10-04 +requires: 165 --- ## Abstract -This EIP recognizes _any methods_ with the last parameter being a dynamically sized `bytes` to be extendible by designating their last method parameter of dynamic sized bytes to be used behavior extensions. +This EIP standardizes the passing of unstructured call data to functions to enable future extensibility. ## Motivation -The general purpose of having extra data in a method is to allow further extensions for a existing method interface. +The purpose of having extra data in a method is to allow further extensions to existing method interfaces. -### Why is it useful to make method extendable +It is it useful to make methods extendable. Any methods complying with this EIP, such as overloaded `transfer` and `vote` could use string reasons as the extra data. Existing EIPs that have exported methods compliant with this EIP can be extended for behaviors such as using the extra data to prove endorsement, as a salt, as a nonce, or as a commitment for a reveal/commit scheme. Finally, data can be passed forward to callbacks. -1. Any methods complying with this EIP, such as overloaded `transfer` and `vote` could use string reasons as the extra data. -2. Existing EIPs that have exported methods compliant with this EIP can be extended for behaviors such as using the extra data to prove endorsement or as a salt, nonce, or commitments for reveal/commit schemes. -3. Data can be passed forward to callbacks. +There are two ways to achieve extensibility for existing functions. Each comes with their set of challenges: -### Why there needs to be a standard for these use case +1. Add a new method -First of all, there are multiple ways to achieve extensibility for existing functions. + * What will the method name be? + * What will the parameters be? + * How many use-cases does a given method signature support? + * Does this support off-chain signatures? -1. _Add a new method_, then these questions need to be answered: +2. Use one or more existing parameters, or add one or more new ones -- what will be the method name? -- what will be the full list of parameters? -- How many use-case do a given method name support? -- Do/Will they support off-chain signatures? + * Should existing parameters be repurposed, or should more be added? + * How many parameters should be used? + * What are their sizes and types? -2. _Use an existing parameter(s)_: then these questions need to be answered: +Standardizing how methods can be extended helps to answer these questions. -- will it be one parameter? -- w- will it be multiple parameters? -- what are their sizes and types? +Finally, this EIP aims to achievie maximum backward and future compatibility. Many EIPs already partially support this EIP, such as [EIP-721](./eip-721.md) and [EIP-1155](./eip-1155.md). This EIP supports many use cases, from commit-reveal schemes ([EIP-5732](./eip-5732.md)), to adding digital signatures alongside with a method call. Other implementers and EIPs should be able to depend on the compatibility granted by this EIP so that all compliant method interfaces are eligible for future new behaviors. -Standardizing how method will be extended helps answer this questions. +## Specification -In particular, this EIP aims at achieving maximum backward (e.g. [EIP-721](./eip-721.md), [EIP-1155](./eip-1155.md)) and future compatibility e.g. supporting commit-reveal feature for arbitrary method ([EIP-5732](./eip-5732.md)), or adding digital signatures alongside with a method call. The goal and motivation is to allow other implementers and EIPs to further depend on the compatibility based on the specifications this EIP so all compliant method interface automatically becomes eligible for future new behaviors. +The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC 2119 and RFC 8174. -## Specification +`bytes` MUST refer to the dynamically-sized solidity type. -The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC 2119. +A method MUST be compliant if and only if for all of its overloads: -1. Any compliant contract's compliant method MUST have a `bytes` (dynamic size) as its last parameter of the method. +* The overload's call signature has a `bytes as the last parameter, and that parameter that is not used for any functionality; or +* There is another overload with the same call signature of this overload **EXCEPT** that it has a `bytes` as the last parameter, and that parameter is not used for any functionality. ```solidity -function methodName(type1 param1, type2, param2 ... bytes calldata data); +// `methodName1` is compliant: the first overload has a similar overload (the second overload) with the bytes parameter, and the second overload has the bytes parameter +function methodName1(uint256 param1, address param2); +function methodName1(uint256 param1, address param2, bytes calldata data); +// `methodName2` is compliant: its only overload has the bytes parameter +function methodName2(address param1, address param2, bytes calldata data); +// `methodName3` is not compliant: it has an overload (the third one) that doesn't have a valid overload +function methodName3(string calldata param1, bytes32 param2); +function methodName3(string calldata param1, bytes32 param2, bytes calldata data); +function methodName3(string calldata param3, address param4); ``` +For the purposes of calculating [EIP-165](./eip-165.md) interface identifiers, the overloads created for the purpose of compliance with this EIP MUST be considered. + +All fully compliant contracts MUST consist only of compliant methods. All partially compliant contracts MUST consist of at least one compliant method. + ## Rationale -1. Having using the dynamically-sized `bytes` type allow for maximum flexibility to enable additional payloads of arbitrary types +1. Using the dynamically-sized `bytes` type allows for maximum flexibility by enabling payloads of arbitrary types. 2. Having the bytes specified as the last parameter makes this EIP compatible with the calldata layout of solidity. +3. Requiring EIP-165 interface identifiers to include the overloads does not break backward compatibility. ## Backwards Compatibility -Many of existing EIPs already have compliant methods and all contracts compliant with those EIPs are already compliant with this EIP. +Many existing EIPs already have compliant methods as part of their specification. All contracts compliant with those EIPs are either fully or partially compliant with this EIP. Here is an incomplete list: -1. In [EIP-721](./eip-721.md) the following methods are already compliant: - -- `function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable;` is already compliant - -2. In [EIP-1155](./eip-1155.md) the following methods are already compliant - -- `function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _value, bytes calldata _data) external;` -- `function safeBatchTransferFrom(address _from, address _to, uint256[] calldata _ids, uint256[] calldata _values, bytes calldata _data) external;` - -3. In [EIP-777](./eip-777.md) the following methods are already compliant +* In [EIP-721](./eip-721.md), the following method is already compliant: + * `function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable;` is already compliant +* In [EIP-1155](./eip-1155.md), the following methods are already compliant + * `function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _value, bytes calldata _data) external;` + * `function safeBatchTransferFrom(address _from, address _to, uint256[] calldata _ids, uint256[] calldata _values, bytes calldata _data) external;` +* In [EIP-777](./eip-777.md), the following methods are already compliant + * `function burn(uint256 amount, bytes calldata data) external;` + * `function send(address to, uint256 amount, bytes calldata data) external;` -- `function burn(uint256 amount, bytes calldata data) external;` -- `function send(address to, uint256 amount, bytes calldata data) external;` +However, not all functions that have a `bytes` as the last parameter are compliant. The following functions are not compliant without an overload since their last parameter is involved in functionality: -4. In [EIP-2535](./eip-2535.md) the following methods are already compliant - -```solidity -function diamondCut( - FacetCut[] calldata _diamondCut, - address _init, - bytes calldata _calldata - ) external; -``` - -5. In [EIP-1271](./eip-1271.md) the following methods are already compliant: - -```solidity - function isValidSignature( - bytes32 _hash, - bytes memory _signature) - public - view - returns (bytes4 magicValue); -``` +* In [EIP-2535](./eip-2535.md), the following methods is not compliant: + * `function diamondCut(FacetCut[] calldata _diamondCut, address _init, bytes calldata _calldata) external;` + * An overload would need to be created: `function diamondCut(FacetCut[] calldata _diamondCut, address _init, bytes calldata _calldata, bytes calldata _data) external;` +* In [EIP-1271](./eip-1271.md), the following method is not compliant: + * `function isValidSignature(bytes32 _hash, bytes memory _signature) public view returns (bytes4 magicValue);` + * An overload would need to be created: `function isValidSignature(bytes32 _hash, bytes memory _signature, bytes calldata _data) public view returns (bytes4 magicValue);` ## Security Considerations 1. If using the extra data for extended behavior, such as supplying signature for onchain verification, or supplying commitments in a commit-reveal scheme, best practices should be followed for those particular extended behaviors. -2. Compliant contracts must also take into consideration that the data parameter will be publicly revealed when submitted into the mempool or included in a block, so one must consider the risk of replay, and transaction ordering attacks. In addition, unencrypted personally identifiable information should never be included in the data parameter. +2. Compliant contracts must also take into consideration that the data parameter will be publicly revealed when submitted into the mempool or included in a block, so one must consider the risk of replay and transaction ordering attacks. **Unencrypted personally identifiable information must never be included in the data parameter.** ## Copyright From a072bce582949aa83fb4cc36214b6c045323990a Mon Sep 17 00:00:00 2001 From: Sam Wilson <57262657+SamWilsn@users.noreply.github.com> Date: Thu, 3 Nov 2022 16:20:29 -0400 Subject: [PATCH 073/113] EIP-5757: Move to last call (#5870) --- EIPS/eip-5757.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/EIPS/eip-5757.md b/EIPS/eip-5757.md index 91aa7d424b3d1c..b9a262997b2f26 100644 --- a/EIPS/eip-5757.md +++ b/EIPS/eip-5757.md @@ -4,7 +4,8 @@ title: Process for Approving External Resources description: Requirements and process for allowing new origins of external resources author: Sam Wilson (@SamWilsn) discussions-to: https://ethereum-magicians.org/t/eip-5757-process-for-approving-external-resources/11215 -status: Review +status: Last Call +last-call-deadline: 2022-11-16 type: Meta created: 2022-09-30 requires: 1 From 78b2bb48b435e308c2cce625b568cac8e605fcb1 Mon Sep 17 00:00:00 2001 From: Oliver Terbu <43441584+awoie@users.noreply.github.com> Date: Fri, 4 Nov 2022 21:12:47 +0100 Subject: [PATCH 074/113] Add EIP-5573: SIWE ReCap Extension (#5573) * fix: added a lot of sections * fix: first stab EIP * fix: added cel * fix: some fixes * fix: some fixes * fix: formatting * fix: some fixes * fix: some formatting * fix: fixed example * fix: made spec more clear * fix: editorial * fix: editorial * fix: editorial * fix: editorial * fix: editorial * fix: editorial * fix: editorial * Update EIPS/eip-4361-1.md Co-authored-by: Jacob <93085583+cobward@users.noreply.github.com> * Update EIPS/eip-4361-1.md Co-authored-by: Jacob <93085583+cobward@users.noreply.github.com> * Update EIPS/eip-4361-1.md Co-authored-by: Jacob <93085583+cobward@users.noreply.github.com> * Update EIPS/eip-4361-1.md Co-authored-by: Jacob <93085583+cobward@users.noreply.github.com> * Update EIPS/eip-4361-1.md Co-authored-by: Jacob <93085583+cobward@users.noreply.github.com> * Update EIPS/eip-4361-1.md Co-authored-by: Jacob <93085583+cobward@users.noreply.github.com> * Update EIPS/eip-4361-1.md Co-authored-by: Jacob <93085583+cobward@users.noreply.github.com> * Update EIPS/eip-4361-1.md Co-authored-by: Jacob <93085583+cobward@users.noreply.github.com> * Update EIPS/eip-4361-1.md Co-authored-by: Jacob <93085583+cobward@users.noreply.github.com> * Update EIPS/eip-4361-1.md Co-authored-by: Jacob <93085583+cobward@users.noreply.github.com> * Update EIPS/eip-4361-1.md Co-authored-by: Jacob <93085583+cobward@users.noreply.github.com> * Update EIPS/eip-4361-1.md Co-authored-by: Jacob <93085583+cobward@users.noreply.github.com> * Update EIPS/eip-4361-1.md Co-authored-by: Jacob <93085583+cobward@users.noreply.github.com> * Update EIPS/eip-4361-1.md Co-authored-by: Jacob <93085583+cobward@users.noreply.github.com> * fix: removed registry * fix: changed EIP number * fix: adjusted description * fix: restructured EIP * fix: updated authors * fix: fixed structure * fix: fixed description * Use three letter names for capgrok fields. * fix: added eth magician forum URL * fix: fixed template * Add link to EIP-4361. * Update EIPS/eip-4362.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-4362.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-4362.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-4362.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-4362.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-4362.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-4362.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-4362.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-4362.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-4362.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-4362.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * fix: changed title to be more descriptive * Update EIPS/eip-4362.md Co-authored-by: Sam Wilson <57262657+SamWilsn@users.noreply.github.com> * Update EIPS/eip-4362.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-4362.md Co-authored-by: Sam Wilson <57262657+SamWilsn@users.noreply.github.com> * Update EIPS/eip-4362.md Co-authored-by: Sam Wilson <57262657+SamWilsn@users.noreply.github.com> * Update EIPS/eip-4362.md Co-authored-by: Sam Wilson <57262657+SamWilsn@users.noreply.github.com> * Update EIPS/eip-4362.md Co-authored-by: Bumblefudge * fix: moved rationale text to motivation * fix: added CapGroks ref * fix: removed URI requirement from URI since defined by EIP-4361 * fix: added intended * fix: add base64url ref * fix: added bumblefudges comments on nbf * fix: changed filename to eip-5573.md * fix: fixed title * fix: renamed urn:capability into urn:ocap to save space * fix: renamed capgrok to recap based on community feedback * fix: changed urn:ocap to urn:recap based on community feedback * Update EIPS/eip-5573.md Co-authored-by: Jacob Co-authored-by: Oliver Terbu Co-authored-by: Jacob <93085583+cobward@users.noreply.github.com> Co-authored-by: Jacob Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> Co-authored-by: Sam Wilson <57262657+SamWilsn@users.noreply.github.com> Co-authored-by: Bumblefudge Co-authored-by: Jacob --- EIPS/eip-5573.md | 273 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 273 insertions(+) create mode 100644 EIPS/eip-5573.md diff --git a/EIPS/eip-5573.md b/EIPS/eip-5573.md new file mode 100644 index 00000000000000..cfbe42628a3783 --- /dev/null +++ b/EIPS/eip-5573.md @@ -0,0 +1,273 @@ +--- +eip: 5573 +title: Sign-In with Ethereum Capabilities, ReCaps +description: Mechanism on top of Sign-In with Ethereum for informed consent to delegate capabilities with an extensible scope mechanism +author: Oliver Terbu (@awoie), Jacob Ward (@cobward), Charles Lehner (@clehner), Sam Gbafa (@skgbafa), Wayne Chang (@wyc) +discussions-to: https://ethereum-magicians.org/t/eip-5573-siwe-recap +status: Draft +type: Standards Track +category: ERC +created: 2021-07-20 +requires: 4361 +--- + +## Abstract +[EIP-4361](./eip-4361.md), or Sign-In with Ethereum (SIWE), describes how Ethereum accounts authenticate with off-chain services. This proposal, known as ReCaps, describes a mechanism on top of SIWE to give informed consent to delegate capabilities with a certain extensible scope mechanism to an authorized delegee. How a delegee authenticates against the target resource is out of scope for this specification and depends on the implementation of the target resource. + +## Motivation + +SIWE ReCaps unlock integration of protocols and/or APIs for developers by reducing user friction, onchain state and increasing security by introducing informed consent and deterministic capability objects on top of Sign-In With Ethereum (EIP-4361). + +While SIWE focuses on authenticating the Ethereum account against the service (relying party or SIWE client) initiating the SIWE flow, there is no canonical way to interact with a third-party service (resource service) on behalf of the authenticated Ethereum account. For example, a relying party might want to interact with another service on behalf of the Ethereum account, for example a service that provides data storage for the Ethereum account. This specification introduces a mechanism, that allows the service (or more generally a delegee) to combine authentication and authorization of such while preserving security and optimizing UX. + +Note, this approach is a similar mechanism to combining OpenID Connect (SIWE auth) and OAuth2 (SIWE ReCap) whereas SIWE ReCap follows an Object Capability-based approach. + +## Specification + +This specification has three different audiences: +- Web3 application developers that want to integrate ReCaps to authenticate with any protocols and APIs that support object capabilities. +- Protocol or API developers that want to learn how to define their own ReCaps. +- Wallet implementers that want to improve the UI for ReCaps. + +### Terms and Definitions + +- ReCap - A SIWE Message complying with this specification, i.e., containing at least one ReCap URI in the `Resources` section and the corresponding human-readable ReCap Statement appended to the SIWE `statement`. +- ReCap URI - A type of URI under a certain namespace that resolves to a ReCap Details Object. +- ReCap Details Object - A JSON object describing the actions and optionally the resources associated with a ReCap Capability under a certain namespace. +- Resource Service (RS) - The entity that is providing third-party services for the Ethereum account. +- SIWE Client (SC) - The entity initiating the SIWE authentication and ReCap flow. +- Relying Party (RP) - same as SC in the context of authentication. + +### Overview + +This specification defines the following: +- ReCap SIWE Extension +- ReCap Capability + - ReCap URI Scheme + - ReCap Details Object Schema +- ReCap Translation Algorithm +- ReCap Verification + +### ReCap SIWE Extension + +A ReCap is an EIP-4361 message following a specific format that allows an Ethereum account to delegate a set of ReCap Capabilities to a delegee through informed consent. Each ReCap Capability MUST be represented by an entry in the `Resources` array of the SIWE message that MUST deterministically translate the ReCap Capability in human-readable form to the `statement` field in the SIWE message using the ReCap Translation Algorithm. + +The following SIWE message fields are used to further define (or limit) the scope of all ReCap Capabilities: +- The `URI` field MUST specify the intended delegee, e.g., `https://example.com`, `did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK`. It is expected that the RS authenticates the delegee before invoking an action for the ReCap Capability. +- The `Issued At` field MUST be used to specify the issuance date of the ReCap Capabilities. +- If present, the `Expiration Time` field MUST be used as the expiration time of the ReCap Capabilities, i.e. the time at which the RS will no longer accept an invocation of the capabilities expressed in this form. +- If present, the `Not Before` field MUST be used as the time that has to expire before the RS starts accepting invocations of the capabilities expressed in the message. + +The following is a non-normative example of a SIWE message with the SIWE ReCap Extension: +```text +example.com wants you to sign in with your Ethereum account: +0x0000000000000000000000000000000000000000 + +I further authorize https://example.com to perform the following actions on my behalf: (1) example: read for any. (2) example: append, delete for my.resource.1. (3) example: append for my.resource.2, my.resource.3. + +URI: https://example.com +Version: 1 +Chain ID: 1 +Nonce: n-0S6_WzA2Mj +Issued At: 2022-06-21T12:00:00.000Z +Resources: +- urn:recap:example:eyJkZWYiOlsicmVhZCJdLCJ0YXIiOnsibXkucmVzb3VyY2UuMSI6WyJhcHBlbmQiLCJkZWxldGUiXSwibXkucmVzb3VyY2UuMiI6WyJhcHBlbmQiXSwibXkucmVzb3VyY2UuMyI6WyJhcHBlbmQiXX19 +``` + +#### ReCap Capability + +A ReCap Capability is identified by their ReCap URI that resolves to a ReCap Details Object which defines the associated actions and optional target resources. The scope of each ReCap Capability is attenuated by common fields in the SWIE message as described in the previous chapter, e.g., `URI`, `Issued At`, `Expiration Time`, `Not Before`. + +##### ReCap URI Scheme + +A ReCap URI starts with `urn:recap:` followed by the namespace discriminator, followed by `:` and the base64url-encoded payload of the ReCap Details Object. Note, the term base64url is defined in RFC4648 - Base 64 Encoding with URL and Filename Safe Alphabet. + +The following is a non-normative example of a ReCap Capability that uses the `example` namespace: +```text +urn:recap:example:eyJkZWZhdWx0QWN0aW9ucyI6WyJyZWFkIl0sInRhcmdldGVkQWN0aW9ucyI6eyJteS5yZXNvdXJjZS4xIjpbImFwcGVuZCIsImRlbGV0ZSJdLCJteS5yZXNvdXJjZS4yIjpbImFwcGVuZCJdLCJteS5yZXNvdXJjZS4zIjpbImFwcGVuZCJdfX0 +``` + +It is expected that RS implementers define their own namespace, e.g., `urn:recap:service:`. + +##### ReCap Details Object Schema + +The ReCap Details Object denotes which actions on which resources the delegee is authorized to invoke on behalf of the delegee for the validity period defined in the SIWE message. It can also contain additional information that the RS may require to verify a capability invocation. A ReCap Details Object MUST follow the following JSON Schema: + +```jsonc +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "type": "object", + "properties": { + "def": { + "type": "array", + "items": { + "type": "string", + "minLength": 1 + }, + "minItems": 1 + }, + "tar": { + "type": "object", + "patternProperties": { + "^.+$": { + "type": "array", + "items": { + "type": "string", + "minLength": 1 + }, + "minItems": 1 + } + }, + "additionalProperties": false, + "minProperties": 1 + }, + "ext": { + "type": "object", + "minProperties": 1 + } + }, + "minProperties": 1, + "additionalProperties": false, + "dependentSchemas": { + "ext": { + "minProperties": 2 + } + } +} +``` + +A ReCap Details Object defines the following properties: +- `def`: (CONDITIONAL) If present, `def` MUST be a JSON array of string values with at least one entry where each value describes an action the delegee MAY invoke in the RS on behalf of the Ethereum account without tying the scope to a particular target. +- `tar`: (CONDITIONAL) If present, `tar` MUST be a JSON object with variable properties where each property is a JSON array of string values each describing an action the delegee MAY invoke in the RS on behalf of the Ethereum account on the target resource denoted by the property name. +- `ext`: (OPTIONAL) If present, `ext` MUST be a JSON object with variable properties. + +The following is a non-normative example of a ReCap Capability Object with `def`, `tar` and `ext`: +```jsonc +{ + "def":[ + "read" + ], + "tar":{ + "my.resource.1":[ + "append", + "delete" + ], + "my.resource.2":[ + "append" + ], + "my.resource.3":[ + "append" + ] + }, + "ext":{ + "parentCapability": "bafybeigk7ly3pog6uupxku3b6bubirr434ib6tfaymvox6gotaaaaaaaaa" + } +} +``` + +In the example above, the delegee is authorized to perform the action `read` independent of any resource, `append`, `delete` on resource `my.resource.1`, `append` on resource `my.resource.2` and `append` on `my.resource.3`. Note, the delegee can invoke each action invididually and independent from each other in the RS. Additionally the ReCap Capability Object contains some additional information that the RS will need during verification. The responsibility for defining the structure and semantics of this data lies with the RS. + +It is expected that RS implementers define which resources they want to expose through ReCap Details Objects and which actions they want to allow to invoke on them. + +#### ReCap Translation Algorithm + +After applying the ReCap Translation Algorithm on a given SIWE message that MAY include a pre-defined `statement`, the `recap-transformed-statement` in a ReCap SIWE message MUST conform to the following ABNF: +```text +recap-transformed-statement = statement recap-preamble 1*(" " recap-statement-entry ".") + ; see EIP-4361 for definition of input-statement +recap-preamble = "I further authorize " uri " to perform the following actions on my behalf:" + ; see EIP-4361 for definition of uri +recap-statement-entry = "(" number ") " recap-namespace ": " + recap-action *("," recap-action) "for" + ( "any" / ( recap-resource *(", " recap-resource) ) ) + ; see RFC8259 for definition of number +recap-namespace = string + ; see RFC8259 for definition of string +recap-action = string + ; see RFC8259 for definition of string +recap-resource = string + ; see RFC8259 for definition of string +``` + +The following algorithm or an algorithm that produces the same output MUST be performed to generate the SIWE ReCap Transformed Statement. + +Inputs: +- Let `uri` be the uri field of the input SIWE message conforming to EIP-4361. +- Let `recap-uris` be a non-empty array of ReCap URIs, which represent the ReCap Capabilities that are to be encoded in the SIWE message, and which contain ReCap Details Objects which conform to the ReCap Details Object Schema. +- [Optional] Let `statement` be the statement field of the input SIWE message conforming to EIP-4361. +Algorithm: +- Let `recap-transformed-statement` be an empty string value. +- If `statement` is present, do the following: + - Append the value of the `statement` field of `siwe` to `recap-transformed-statement`. + - Append a single space character `" "` to `recap-transformed-statement`. +- Append the following string to `recap-transformed-statement`: "I further authorize ". +- Append `uri` to `recap-transformed-statement`. +- Append the following string to `recap-transformed-statement`: " to perform the following actions on my behalf:". +- Let `numbering` be an integer starting with 1. +- For each entry in `recap-uris` (starting with the first entry), perform the following: + - Let `namespace` be the `namespace` in the ReCap URI entry and let `capDetails` be the base64url-decoded ReCap Details Object of the ReCap URI entry. + - Let `defaultActions` be the `def` JSON array in `capDetails`, where each value represents an action. + - If `defaultActions` is present, do the following: + - Let `actions` be the string concatenation of each action in the array with the delimiter `", "`. + - Append the string concatenation of `" ("`, `numbering`, `")"` to `recap-transformed-statement`. + - Append `namespace` concatenated with `": "` to `recap-transformed-statement`. + - Append `actions` to `recap-transformed-statement`. + - Append the string `" for any."` to `recap-transformed-statement`. + - Increase `numbering` by 1. + - Let `targetedActions` be the `tar` JSON object in `capDetails`, where each key-value pair represents the set of actions allowed for a target. + - If `targetedActions` is present, do the following: + - Let `actionSets` be an array of arrays of strings; + - For each key-value pair in `targetedActions`, ordered alphabetically by key, append the string array value to `actionSets`. + - For each array of strings `actionSet` in `actionSets`, do the following: + - Sort the strings in `actionSet` alphabetically. + - Let `actions` be the string concatenation of each action in the array with the delimiter `", "`. + - Let `targets` be the string concatenation of each key in `targetedActions` with the delimiter `", "`, for those keys such that the associated value (or any permutation of that value) is identical to `actionSet`. + - Append the string concatenation of `" ("`, `numbering`, `")"` to `recap-transformed-statement`. + - Append `namespace` concatenated with `": "` to `recap-transformed-statement`. + - Append `actions` to `recap-transformed-statement`. + - Append the string `" for "` to `recap-transformed-statement`. + - Append `targets` to `recap-transformed-statement`. + - Append the string `" ."` to `recap-transformed-statement`. + - Increase `numbering` by 1. +- Return `recap-transformed-statement`. + +#### ReCap Verification Algorithm + +The following algorithm or an algorithm that produces the same output MUST be performed to verify a SIWE ReCap. + +Inputs: +- Let `recap-siwe` be the input SIWE message conforming to EIP-4361 and this EIP. +- Let `siwe-signature` be the output of signing `recap-siwe`, as defined in EIP-4361. +Algorithm: +- Perform EIP-4361 signature verification with `recap-siwe` and `siwe-signature` as inputs. +- Let `uri` be the uri field of `recap-siwe`. +- Let `recap-uris` be an array of recap URIs taken in order from the resources field of `recap-siwe`, such that URIs which are not valid ReCap URIs are ignored. +- Let `recap-transformed-statement` be the result of performing the above `ReCap Translation Algorithm` with `uri` and `recap-uris` as input. +- Assert that the statement field of `recap-siwe` ends with `recap-transformed-statement`. + +### Implementer's Guide + +TBD + +#### Web3 Application Implementers + +TBD + +#### Wallet Implementers + +TBD + +#### Protocol or API Implementers + +TBD + +## Rationale + +TBD + +## Security Considerations + +Resource service implementer's should not consider ReCaps as bearer tokens but instead require to authenticate the delegee in addition. The process of authenticating the delegee against the resource service is out of scope of this specification and can be done in various different ways. + +## Copyright +Copyright and related rights waived via [CC0](../LICENSE.md). \ No newline at end of file From b0c931dbcf194be499f144eba1f839402e10941b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Bylica?= Date: Sat, 5 Nov 2022 13:49:13 +0100 Subject: [PATCH 075/113] EIP-3540: Reformat, fix typos (#5876) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * EIP-3540: Reformat, fix typos, remove external links * EIP-3540: Change reference EIP-2677 → EIP-3860 --- EIPS/eip-3540.md | 101 ++++++++++++++++++++++++++--------------------- 1 file changed, 56 insertions(+), 45 deletions(-) diff --git a/EIPS/eip-3540.md b/EIPS/eip-3540.md index 1f3d2f64e6043c..0cca07ba31cd6c 100644 --- a/EIPS/eip-3540.md +++ b/EIPS/eip-3540.md @@ -16,6 +16,7 @@ requires: 3541 We introduce an extensible and versioned container format for the EVM with a once-off validation at deploy time. The version described here brings the tangible benefit of code and data separation, and allows for easy introduction of a variety of changes in the future. This change relies on the reserved byte introduced by [EIP-3541](./eip-3541.md). To summarise, EOF bytecode has the following layout: + ``` magic, version, (section_kind, section_size)+, 0,

    ``` @@ -28,19 +29,20 @@ Validating code during the contract creation process allows code versioning with The format described in this EIP introduces a simple and extensible container with a minimal set of changes required to both clients and languages, and introduces validation. -The first tangible feature it provides is separation of code and data. This separation is especially beneficial for on-chain code validators (like those utilised by layer-2 scaling tools, such as Optimism), because they can distinguish code and data (this includes deployment code and constructor arguments too). Currently they a) require changes prior to contract deployment; b) implement a fragile method; or c) implement an expensive and restrictive jump analysis. Code and data separation can result in ease of use and significant gas savings for such use cases. Additionally, various (static) analysis tools can also benefit, though off-chain tools can already deal with existing code, so the impact is smaller. +The first tangible feature it provides is separation of code and data. This separation is especially beneficial for on-chain code validators (like those utilised by layer-2 scaling tools, such as Optimism), because they can distinguish code and data (this includes deployment code and constructor arguments too). Currently, they a) require changes prior to contract deployment; b) implement a fragile method; or c) implement an expensive and restrictive jump analysis. Code and data separation can result in ease of use and significant gas savings for such use cases. Additionally, various (static) analysis tools can also benefit, though off-chain tools can already deal with existing code, so the impact is smaller. A non-exhaustive list of proposed changes which could benefit from this format: + - Including a `JUMPDEST`-table (to avoid analysis at execution time) and/or removing `JUMPDEST`s entirely. - Introducing static jumps (with relative addresses) and jump tables, and disallowing dynamic jumps at the same time. -- Requiring code section(s) to be terminated by `STOP`. (Assumptions like this can provide significant speed improvements in interpreters, such as a speed up of ~7% seen in [evmone](https://github.com/ethereum/evmone/pull/295).) -- Multi-byte opcodes without any workarounds. +- Requiring code section(s) to be terminated by `STOP`. (Assumptions like this can provide significant speed improvements in interpreters, such as a speed-up of ~7% seen in evmone (ethereum/evmone#295). +- Multibyte opcodes without any workarounds. - Representing functions as individual code sections instead of subroutines. - Introducing special sections for different use cases, notably Account Abstraction. ## Specification -*We use [RFC2119](https://tools.ietf.org/html/rfc2119) keywords in this section.* +The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “NOT RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC 2119 and RFC 8174. In order to guarantee that every EOF-formatted contract in the state is valid, we need to prevent already deployed (and not validated) contracts from being recognized as such format. This is achieved by choosing a byte sequence for the *magic* that doesn't exist in any of the already deployed contracts. @@ -52,9 +54,10 @@ The opcode `0xEF` is currently an undefined instruction, therefore: *It pops no ### Code validation -We introduce _code validation_ for new contract creation. To achieve this, we define a format called EVM Object Format (EOF), containing a version indicator, and a ruleset of validity tied to a given version. +We introduce *code validation* for new contract creation. To achieve this, we define a format called EVM Object Format (EOF), containing a version indicator, and a ruleset of validity tied to a given version. At `block.number == HF_BLOCK` new contract creation is modified: + - if *initcode* or *code* starts with the `MAGIC`, it is considered to be EOF formatted and will undergo validation specified in the following sections, - else if *code* starts with `0xEF`, creation continues to result in an exceptional abort (the rule introduced in EIP-3541), - otherwise code is considered *legacy code* and the following rules do not apply to it. @@ -65,24 +68,24 @@ EOF container is a binary format with the capability of providing the EOF versio The container starts with the EOF header: -| description | length | value | | -|-------------|----------|------------|-| -| magic | 2-bytes | 0xEF00 | | +| description | length | value | | +|-------------|----------|------------|--------------------| +| magic | 2-bytes | 0xEF00 | | | version | 1-byte | 0x01–0xFF | EOF version number | The EOF header is followed by at least one section header. Each section header contains two fields, `section_kind` and `section_size`. -| description | length | value | | -|--------------|---------|---------------|-| -| section_kind | 1-byte | 0x01–0xFF | Encoded as a 8-bit unsigned number. | +| description | length | value | | +|--------------|---------|---------------|-------------------------------------------------| +| section_kind | 1-byte | 0x01–0xFF | Encoded as a 8-bit unsigned number. | | section_size | 2-bytes | 0x0001–0xFFFF | Encoded as a 16-bit unsigned big-endian number. | -The list of section headers is terminated with the _section headers terminator byte_ `0x00`. +The list of section headers is terminated with the *section headers terminator byte* `0x00`. #### Container validation rules 1. `version` MUST NOT be `0`.[^1](#EOF-version-range-start-with-1) -2. `section_kind` MUST NOT be `0`. The value `0` is reserved for _section headers terminator byte_. +2. `section_kind` MUST NOT be `0`. The value `0` is reserved for *section headers terminator byte*. 3. `section_size` MUST NOT be `0`. If a section is empty its section header MUST be omitted. 4. There MUST be at least one section (and therefore section header). 5. Section data size MUST be equal to `section_size` declared in its header. @@ -94,19 +97,18 @@ The list of section headers is terminated with the _section headers terminator b The section kinds for EOF version 1 are defined as follows. The list may be extended in future versions. -| section_kind | meaning | -|--------------|------------| -| 0 | _reserved for section headers terminator byte_ | -| 1 | code | -| 2 | data | +| section_kind | meaning | +|--------------|------------------------------------------------| +| 0 | *reserved for section headers terminator byte* | +| 1 | code | +| 2 | data | #### EOF version 1 validation rules 1. In addition to general validation rules above, EOF version 1 bytecode conforms to the rules specified below: -- Exactly one code section MUST be present. -- The code section MUST be the first section. -- A single data section MAY follow the code section. - + - Exactly one code section MUST be present. + - The code section MUST be the first section. + - A single data section MAY follow the code section. 2. Any other version is invalid. (*Remark:* Contract creation code SHOULD set the section size of the data section so that the constructor arguments fit it.) @@ -117,7 +119,7 @@ For clarity, the *container* refers to the complete account code, while *code* r 1. `JUMPDEST`-analysis is only run on the *code*. 2. Execution starts at the first byte of the *code*, and `PC` is set to 0. -3. If `PC` goes outside of the code section bounds, execution aborts with failure. +3. If `PC` goes outside the code section bounds, execution aborts with failure. 4. `PC` returns the current position within the *code*. 5. `JUMP`/`JUMPI` uses an absolute offset within the *code*. 6. `CODECOPY`/`CODESIZE`/`EXTCODECOPY`/`EXTCODESIZE`/`EXTCODEHASH` keeps operating on the entire *container*. @@ -127,66 +129,75 @@ For clarity, the *container* refers to the complete account code, while *code* r For clarity, the *EOF prefix* together with a version number *n* is denoted as the *EOFn prefix*, e.g. *EOF1 prefix*. -1. If _initcode's container_ has EOF1 prefix it must be valid EOF1 code. -2. If _code's container_ has EOF1 prefix it must be valid EOF1 code. +1. If *initcode's container* has EOF1 prefix it must be valid EOF1 code. +2. If *code's container* has EOF1 prefix it must be valid EOF1 code. ## Rationale -EVM and/or account versioning has been discussed numerous times over the past years. This proposal aims to learn from them. See [this collection of previous proposals](https://ethereum-magicians.org/t/ethereum-account-versioning/3508) for a good starting point. +EVM and/or account versioning has been discussed numerous times over the past years. This proposal aims to learn from them. +See "Ethereum account versioning" on the Fellowship of Ethereum Magicians Forum for a good starting point. ### Execution vs. creation time validation This specification introduces creation time validation, which means: + - All created contracts with *EOFn* prefix are valid according to version *n* rules. This is very strong and useful property. The client can trust that the deployed code is well-formed. -- In future, this allows to serialize `JUMPDEST` map in the EOF container and eliminate the need of implicit `JUMPDEST` analysis required before execution. +- In the future, this allows to serialize `JUMPDEST` map in the EOF container and eliminate the need of implicit `JUMPDEST` analysis required before execution. - Or to completely remove the need for `JUMPDEST` instructions. - This helps with deprecating EVM instructions and/or features. - The biggest disadvantage is that deploy-time validation of EOF code must be enabled in two hard-forks. However, the first step ([EIP-3541](./eip-3541.md)) is already deployed in London. -The alternative is to have execution time validation for EOF. This is performed every single time a contract is executed, however clients may be able to cache validation results. This _alternative_ approach has the following properties: -- Because the validation is consensus-level execution step, it means the execution always requires the entire code. This makes _code merkleization impractical_. +The alternative is to have execution time validation for EOF. This is performed every single time a contract is executed, however clients may be able to cache validation results. This *alternative* approach has the following properties: + +- Because the validation is consensus-level execution step, it means the execution always requires the entire code. This makes *code merkleization impractical*. - Can be enabled via a single hard-fork. -- Better backwards compatibility: data contracts starting with the `0xEF` byte or the *EOF prefix* can be deployed. This is a dubious benefit however. +- Better backwards compatibility: data contracts starting with the `0xEF` byte or the *EOF prefix* can be deployed. This is a dubious benefit, however. ### Contract creation restrictions -The [Changes to contact creation semantics](#changes-to-contract-creation-semantics) section defines minimal set of restrictions related to the contract creation: if _initcode_ or _code_ has the EOF1 container prefix it must be validated. This adds two validation steps in the contract creation, any of it failing will result in contract creation failure. +The [Changes to contact creation semantics](#changes-to-contract-creation-semantics) section defines +minimal set of restrictions related to the contract creation: if *initcode* or *code* has the EOF1 +container prefix it must be validated. This adds two validation steps in the contract creation, +any of it failing will result in contract creation failure. -Since _initcode_ and _code_ are evaluated for EOF1 independently, number of interesting combinations are allowed: -- Create transaction with EOF1 _initcode_ can deploy legacy contract, -- EOF1 contract can execute `CREATE` instruction with legacy _initcode_ to create new legacy contract, -- Legacy contract can execute `CREATE` instruction with EOF1 _initcode_ to create new EOF1 contract, -- Legacy contract can execute `CREATE` instruction with EOF1 _initcode_ to create new legacy contract, +Since *initcode* and *code* are evaluated for EOF1 independently, number of interesting combinations are allowed: + +- Create transaction with EOF1 *initcode* can deploy legacy contract, +- EOF1 contract can execute `CREATE` instruction with legacy *initcode* to create new legacy contract, +- Legacy contract can execute `CREATE` instruction with EOF1 *initcode* to create new EOF1 contract, +- Legacy contract can execute `CREATE` instruction with EOF1 *initcode* to create new legacy contract, - etc. To limit the number of exotic bytecode version combinations, additional restrictions are considered, but currently are not part of the specification: -1. The EOF version of _initcode_ must much the version of _code_. +1. The EOF version of *initcode* must much the version of *code*. 2. An EOF1 contract must not create legacy contracts. -Finally, create transaction must be allowed to contain legacy _initcode_ and deploy legacy _code_ because otherwise there is no transition period allowing upgrading transaction signing tools. Deprecating such transactions may be considered in future. +Finally, create transaction must be allowed to contain legacy *initcode* and deploy legacy *code* because otherwise there is no transition period allowing upgrading transaction signing tools. Deprecating such transactions may be considered in the future. ### The MAGIC 1. The first byte `0xEF` was chosen because it is reserved for this purpose by [EIP-3541](./eip-3541.md). 2. The second byte `0x00` was chosen to avoid clashes with three contracts which were deployed on **Mainnet**: - - `EFF09f918bf09f9fa9` [0xca7bf67ab492b49806e24b6e2e4ec105183caa01](https://etherscan.io/address/0xca7bf67ab492b49806e24b6e2e4ec105183caa01) - - `EF` [0x897da0f23ccc5e939ec7a53032c5e80fd1a947ec](https://etherscan.io/address/0x897da0f23ccc5e939ec7a53032c5e80fd1a947ec) - - `EF` [0x6e51d4d9be52b623a3d3a2fa8d3c5e3e01175cd0](https://etherscan.io/address/0x6e51d4d9be52b623a3d3a2fa8d3c5e3e01175cd0) + - `0xca7bf67ab492b49806e24b6e2e4ec105183caa01`: `EFF09f918bf09f9fa9` + - `0x897da0f23ccc5e939ec7a53032c5e80fd1a947ec`: `EF` + - `0x6e51d4d9be52b623a3d3a2fa8d3c5e3e01175cd0`: `EF` 3. No contracts starting with `0xEF` bytes exist on public testnets: Goerli, Ropsten, Rinkeby, Kovan and Sepolia at their London fork block. ### EOF version range start with 1 -The version number 0 will never be used in EOF so we can call legacy code _EOF0_. Also implementations may use APIs where 0 version number denotes legacy code. +The version number 0 will never be used in EOF, so we can call legacy code *EOF0*. +Also, implementations may use APIs where 0 version number denotes legacy code. ### Section structure We have considered different questions for the sections: + - Streaming headers (i.e. `section_header, section_data, section_header, section_data, ...`) are used in some other formats (such as WebAssembly). They are handy for formats which are subject to editing (adding/removing sections). That is not a useful feature for EVM. One minor benefit applicable to our case is that they do not require a specific "header terminator". On the other hand they seem to play worse with code chunking / merkleization, as it is better to have all section headers in a single chunk. -- Whether to have a header terminator or to encode `number_of_sections` or `total_size_of_headers`. Both raise the question how large of a value these fields should be able to hold. While today there will be only two sections, in case each "EVM function" would become a separate code section, a fixed 8-bit field may not be big enough. A terminator byte seems to avoid these problems. -- Whether to encode `section_size` as a fixed 16-bit value or some kind of variable length field (e.g. [LEB128](https://en.wikipedia.org/wiki/LEB128)). We have opted for fixed size, because it simplifies client implementations, and 16-bit seems enough, because of the currently exposed code size limit of 24576 bytes (see [EIP-170](./eip-170.md) and [EIP-2677](./eip-2677.md)). Should this be limiting in the future, a new EOF version could change the format. Besides simplifying client implementations, not using LEB128 also greatly simplifies on-chain parsing. +- Whether to have a header terminator or to encode `number_of_sections` or `total_size_of_headers`. Both raise the question of how large of a value these fields should be able to hold. While today there will be only two sections, in case each "EVM function" would become a separate code section, a fixed 8-bit field may not be big enough. A terminator byte seems to avoid these problems. +- Whether to encode `section_size` as a fixed 16-bit value or some kind of variable length field (e.g. LEB128). We have opted for fixed size, because it simplifies client implementations, and 16-bit seems enough, because of the currently exposed code size limit of 24576 bytes (see [EIP-170](./eip-170.md) and [EIP-3860](./eip-3860.md)). Should this be limiting in the future, a new EOF version could change the format. Besides simplifying client implementations, not using LEB128 also greatly simplifies on-chain parsing. ### Data-only contracts @@ -346,7 +357,7 @@ def validate_eof(code: bytes): Proposed validation rules can be checked at constant time, therefore it should not be easily attackable. This is subject to change with future extensions. -Currently *initcode* validation has no extra cost and the currently charged creation costs should be sufficient, however we consider adding an additional gas cost for contract creation. +Currently, *initcode* validation has no extra cost and the currently charged creation costs should be sufficient, however we consider adding a gas cost for contract creation. ## Copyright From 7869a41959e15ca6d6d1a902f1cf6ba2120bc62e Mon Sep 17 00:00:00 2001 From: xinbenlv Date: Sat, 5 Nov 2022 09:30:50 -0700 Subject: [PATCH 076/113] Update EIP-5750: Move to Last Call (#5861) * Init for method extra data ERC * Add the major content * Fix EIPW * Update status * Update name * Fix EIPW * Update EIPS/eip-5750.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * U * Update eip-5750.md * Fix a bit of grammar * Move to review * Update wording of title and desc * Update eip-5750.md * Update eip-5750.md * Update eip-5750.md * Update eip-5750.md * Update eip-5750.md * Update eip-5750.md * Respond to @samwilsn's question about why * Update eip-5750.md * Update eip-5750.md * Update eip-5750.md * update format * Fix typos * Fix typos * Fix typos * Move EIP-5750 to Last Call' * Update wording * Fix typo Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> --- EIPS/eip-5750.md | 100 +++++++++++++++++++++++++++++++++++++---------- 1 file changed, 80 insertions(+), 20 deletions(-) diff --git a/EIPS/eip-5750.md b/EIPS/eip-5750.md index 16f48c1dd52754..17fc9e05f5153e 100644 --- a/EIPS/eip-5750.md +++ b/EIPS/eip-5750.md @@ -4,7 +4,8 @@ title: General Extensibility for Method Behaviors description: Designating last param of dynamically sized bytes to be used for behavior extensions of methods. author: Zainan Victor Zhou (@xinbenlv) discussions-to: https://ethereum-magicians.org/t/erc-5750-method-with-extra-data/11176 -status: Review +status: Last Call +last-call-deadline: 2022-11-14 type: Standards Track category: ERC created: 2022-10-04 @@ -38,40 +39,95 @@ There are two ways to achieve extensibility for existing functions. Each comes w Standardizing how methods can be extended helps to answer these questions. -Finally, this EIP aims to achievie maximum backward and future compatibility. Many EIPs already partially support this EIP, such as [EIP-721](./eip-721.md) and [EIP-1155](./eip-1155.md). This EIP supports many use cases, from commit-reveal schemes ([EIP-5732](./eip-5732.md)), to adding digital signatures alongside with a method call. Other implementers and EIPs should be able to depend on the compatibility granted by this EIP so that all compliant method interfaces are eligible for future new behaviors. +Finally, this EIP aims to achieve maximum backward and future compatibility. Many EIPs already partially support this EIP, such as [EIP-721](./eip-721.md) and [EIP-1155](./eip-1155.md). This EIP supports many use cases, from commit-reveal schemes ([EIP-5732](./eip-5732.md)), to adding digital signatures alongside with a method call. Other implementers and EIPs should be able to depend on the compatibility granted by this EIP so that all compliant method interfaces are eligible for future new behaviors. ## Specification The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC 2119 and RFC 8174. -`bytes` MUST refer to the dynamically-sized solidity type. +When used in this EIP, the term `bytes` MUST be interpreted as the dynamically-sized byte array in Solidity data types. -A method MUST be compliant if and only if for all of its overloads: +1. Unlike many other ERCs which is compliant at the `contract` level, this ERC's specification specify compliance at `method` level. -* The overload's call signature has a `bytes as the last parameter, and that parameter that is not used for any functionality; or -* There is another overload with the same call signature of this overload **EXCEPT** that it has a `bytes` as the last parameter, and that parameter is not used for any functionality. +2. Any method with a bytes as this method's last parameter is an _eligible_ method. It looks like this `function methodName(type1 value1, type2 value2, ... bytes data)`. + +3. A _compliant_ method MUST be an _eligible_ method and MUST also designate that last `bytes` field in its method parameter for behaviors extensions. + +4. If an _eligible_ method has an overloaded sibling method that +has the exact same method name and exact same preceding parameters +except for not having the last `bytes` parameter, the behavior +of the compliant method MUST be identical to +its overloaded sibling method when last `bytes` is an empty array. + +### Examples of compliant and non-compliant methods + +1. Here is a compliant method `methodName1` in a `Foo` contract ```solidity -// `methodName1` is compliant: the first overload has a similar overload (the second overload) with the bytes parameter, and the second overload has the bytes parameter -function methodName1(uint256 param1, address param2); -function methodName1(uint256 param1, address param2, bytes calldata data); -// `methodName2` is compliant: its only overload has the bytes parameter -function methodName2(address param1, address param2, bytes calldata data); -// `methodName3` is not compliant: it has an overload (the third one) that doesn't have a valid overload -function methodName3(string calldata param1, bytes32 param2); -function methodName3(string calldata param1, bytes32 param2, bytes calldata data); -function methodName3(string calldata param3, address param4); +contract Foo { + // @dev This method allows extension behavior via `_data` field; + function methodName1(uint256 _param1, address _param2, bytes calldata _data); + function firstNonRelatedMethod(uint256 someValue); + function secondNonRelatedMethod(uint256 someValue); +} ``` -For the purposes of calculating [EIP-165](./eip-165.md) interface identifiers, the overloads created for the purpose of compliance with this EIP MUST be considered. +2. Here is a compliant method `methodName2` in a `Bar` contract which is an overloaded method for another `methodName2`. + + +```solidity +contract Foo { + // @dev This is a sibling method to `methodName2(uint256 _param1, address _param2, bytes calldata _data);` + function methodName2(uint256 _param1, address _param2); + + // @dev This method allows extension behavior via `_data` field; + // When passed in an empty array for `_data` field, this method + // MUST behave IDENTICAL to + // its overloaded sibling `methodName2(uint256 _param1, address _param2);` + function methodName2(uint256 _param1, address _param2, bytes calldata _data); + + function firstNonRelatedMethod(uint256 someValue); + function secondNonRelatedMethod(uint256 someValue); +} +``` -All fully compliant contracts MUST consist only of compliant methods. All partially compliant contracts MUST consist of at least one compliant method. +3. Here is a non-compliant method `methodName1` because it do not allow extending behavior + +```solidity +contract Foo { + // @dev This method DO NOT allow extension behavior via `_data` field; + function methodName1(uint256 _param1, address _param2, bytes calldata _data); + function firstNonRelatedMethod(uint256 someValue); + function secondNonRelatedMethod(uint256 someValue); +} +``` + +4. Here is a non-compliant method +`methodName2(uint256 _param1, address _param2, bytes calldata _data);` +because it behaves differently +to its overloaded sibling method +`methodName2(uint256 _param1, address _param2);` when `_data` is empty array. + +```solidity +contract Foo { + // @dev This is a sibling method to `methodName2(uint256 _param1, address _param2, bytes calldata _data);` + function methodName2(uint256 _param1, address _param2); + + // @dev This method allows extension behavior via `_data` field; + // When passed in an empty array for `_data` field, this method + // behave DIFFERENTLY to + // its overloaded sibling `methodName2(uint256 _param1, address _param2);` + function methodName2(uint256 _param1, address _param2, bytes calldata _data); + + function firstNonRelatedMethod(uint256 someValue); + function secondNonRelatedMethod(uint256 someValue); +} +``` ## Rationale 1. Using the dynamically-sized `bytes` type allows for maximum flexibility by enabling payloads of arbitrary types. 2. Having the bytes specified as the last parameter makes this EIP compatible with the calldata layout of solidity. -3. Requiring EIP-165 interface identifiers to include the overloads does not break backward compatibility. ## Backwards Compatibility @@ -92,10 +148,14 @@ However, not all functions that have a `bytes` as the last parameter are complia * In [EIP-2535](./eip-2535.md), the following methods is not compliant: * `function diamondCut(FacetCut[] calldata _diamondCut, address _init, bytes calldata _calldata) external;` - * An overload would need to be created: `function diamondCut(FacetCut[] calldata _diamondCut, address _init, bytes calldata _calldata, bytes calldata _data) external;` + * **Either** of the following can be done to create a compliance. + 1. An overload MUST be created: `function diamondCut(FacetCut[] calldata _diamondCut, address _init, bytes calldata _calldata, bytes calldata _data) external;` which adds a new `_data` after all parameters of original method. + 2. The use of `bytes memory _calldata` MUST be relaxed to allow for extending behaviors. * In [EIP-1271](./eip-1271.md), the following method is not compliant: * `function isValidSignature(bytes32 _hash, bytes memory _signature) public view returns (bytes4 magicValue);` - * An overload would need to be created: `function isValidSignature(bytes32 _hash, bytes memory _signature, bytes calldata _data) public view returns (bytes4 magicValue);` + * **Either** of the following can be done to create a compliance: + 1. An new overload MUST be created: `function isValidSignature(bytes32 _hash, bytes memory _signature, bytes calldata _data) public view returns (bytes4 magicValue);` which adds a new `_data` after all parameters of original method. + 2. The use of `bytes memory _signature` MUST be relaxed to allow for extending behaviors. ## Security Considerations From 5013c0bdfeb04bc2749ddbda2bbdac1174f8ca66 Mon Sep 17 00:00:00 2001 From: xinbenlv Date: Sat, 5 Nov 2022 10:39:24 -0700 Subject: [PATCH 077/113] Update EIP-5750 (#5879) * Init for method extra data ERC * Add the major content * Fix EIPW * Update status * Update name * Fix EIPW * Update EIPS/eip-5750.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * U * Update eip-5750.md * Fix a bit of grammar * Move to review * Update wording of title and desc * Update eip-5750.md * Update eip-5750.md * Update eip-5750.md * Update eip-5750.md * Update eip-5750.md * Update eip-5750.md * Respond to @samwilsn's question about why * Update eip-5750.md * Update eip-5750.md * Update eip-5750.md * update format * Fix typos * Fix typos * Fix typos * Move EIP-5750 to Last Call' * Update wording * Fix typo * Update last-call deadline * Update last-call deadline * Fix create date Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> --- EIPS/eip-5750.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EIPS/eip-5750.md b/EIPS/eip-5750.md index 17fc9e05f5153e..b82c663ebcccc7 100644 --- a/EIPS/eip-5750.md +++ b/EIPS/eip-5750.md @@ -5,7 +5,7 @@ description: Designating last param of dynamically sized bytes to be used for be author: Zainan Victor Zhou (@xinbenlv) discussions-to: https://ethereum-magicians.org/t/erc-5750-method-with-extra-data/11176 status: Last Call -last-call-deadline: 2022-11-14 +last-call-deadline: 2022-11-19 type: Standards Track category: ERC created: 2022-10-04 From dc1c29e0d2728fb211ad28c9b0e8f46867eea90c Mon Sep 17 00:00:00 2001 From: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> Date: Sun, 6 Nov 2022 14:15:26 -0500 Subject: [PATCH 078/113] Update EIP-5615: Add short note about the function naming (#5885) --- EIPS/eip-5615.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/EIPS/eip-5615.md b/EIPS/eip-5615.md index 97f8be77749c51..42f4559a9644fb 100644 --- a/EIPS/eip-5615.md +++ b/EIPS/eip-5615.md @@ -37,6 +37,8 @@ interface ERC1155Supply /* is ERC1155 */ { This EIP does not extend [EIP-165](./eip-165.md) as this interface was deemed simple enough that the extra complexity was unnecessary. It would also break backward compatibility with potential existing implementations. +The `totalSupply` and `exists` functions were modeled after [EIP-721](./eip-721.md) and [EIP-20](./eip-20.md). + ## Backwards Compatibility This EIP is backward compatible with the OpenZeppelin `ERC1155Supply`. From 81d204b1d900856376549a34d134d6b14074eb0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Bylica?= Date: Tue, 8 Nov 2022 11:29:23 +0100 Subject: [PATCH 079/113] EIP-3670: Improve text style, fix markdown lint (#5893) --- EIPS/eip-3670.md | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/EIPS/eip-3670.md b/EIPS/eip-3670.md index 269086e6e2a0e0..cee7c58ac607ca 100644 --- a/EIPS/eip-3670.md +++ b/EIPS/eip-3670.md @@ -13,13 +13,22 @@ requires: 3540, 3860 ## Abstract -Introduce code validation at contract creation time for EOF formatted ([EIP-3540](./eip-3540.md)) contracts. Reject contracts which contain truncated `PUSH`-data or undefined instructions. Legacy bytecode (code which is not EOF formatted) is unaffected by this change. +Introduce code validation at contract creation time for EOF formatted ([EIP-3540](./eip-3540.md)) +contracts. Reject contracts which contain truncated `PUSH`-data or undefined instructions. +Legacy bytecode (code which is not EOF formatted) is unaffected by this change. ## Motivation -Currently existing contracts require no validation of correctness and EVM implementations can decide how they handle truncated bytecode or undefined instructions. This change aims to bring code validity into consensus, so that it becomes easier to reason about bytecode. Moreover, EVM implementations may require less paths to decide which instruction is valid in the current execution context. +Currently existing contracts require no validation of correctness and EVM implementations can decide +how they handle truncated bytecode or undefined instructions. This change aims to bring code +validity into consensus, so that it becomes easier to reason about bytecode. +Moreover, EVM implementations may require fewer paths to decide which instruction is valid in +the current execution context. -If it will be desired to introduce new instructions without bumping EOF version, having undefined instructions already deployed would mean such contracts potentially can be broken (since some of the instructions are changing their behaviour). Rejecting to deploy undefined instructions allows introducing new instructions with or without bumping the EOF version. +If it will be desired to introduce new instructions without bumping EOF version, having undefined +instructions already deployed would mean such contracts potentially can be broken (since some +instructions are changing their behaviour). Rejecting to deploy undefined instructions allows +introducing new instructions with or without bumping the EOF version. ### EOF1 forward compatibility @@ -35,7 +44,9 @@ The EOF1 format provides following forward compatibility properties: This feature is introduced on the very same block EIP-3540 is enabled, therefore every EOF1-compatible bytecode MUST be validated according to these rules. -At contract creation time both *initcode* and *code* are iterated instruction-by-instruction (the same process is used to perform "JUMPDEST-analysis"). Bytecode is deemed invalid if any of these conditions is true: +At contract creation time both *initcode* and *code* are iterated instruction-by-instruction (the same process is used to perform "JUMPDEST-analysis"). +Bytecode is deemed invalid if any of these conditions is true: + - it contains opcodes which are not currently assigned to an instruction (for the sake of assigned instructions, we count `INVALID` (0xfe) as assigned), - the last opcode (*terminating instruction*) is not `STOP` (0x00),`RETURN` (0xf3), `REVERT` (0xfd), `INVALID` (0xfe) or `SELFDESTRUCT` (0xff). @@ -53,11 +64,11 @@ In case *initcode* is invalid, gas for its execution is not deducted. In case *c ### Terminating instructions -An efficient interpreter loop would only need to rely on checking if a terminating instruction has been encountered, and if so stopping execution. Currently this is not possible in the EVM, because of the lack of requirement for a proper termination as well as allowing for truncated instructions, an interpreter must track and check these various conditions. +An efficient interpreter loop would only need to rely on checking if a terminating instruction has been encountered, and if so stopping execution. Currently, this is not possible in the EVM, because of the lack of requirement for a proper termination as well as allowing for truncated instructions, an interpreter must track and check these various conditions. ### Possibility for deprecation -The deprecated `CALLCODE` (0xf2) opcode may be dropped from the `valid_opcodes` list to prevent use of this instruction in future. Likewise `SELFDESTRUCT` (0xff) could also be rejected. Yet we decided not to mix such changes in. +The deprecated `CALLCODE` (0xf2) opcode may be dropped from the `valid_opcodes` list to prevent use of this instruction in the future. Likewise `SELFDESTRUCT` (0xff) could also be rejected. Yet we decided not to mix such changes in. ## Backwards Compatibility @@ -65,7 +76,7 @@ This change poses no risk to backwards compatibility, as it is introduced at the ## Test Cases -#### Contract creation +### Contract creation Each case should be tested for creation transaction, `CREATE` and `CREATE2`. @@ -73,7 +84,7 @@ Each case should be tested for creation transaction, `CREATE` and `CREATE2`. - Valid initcode returning invalid code - Valid initcode returning valid code -#### Valid codes +### Valid codes - EOF code containing `INVALID` - EOF codes ending with any of the terminating instructions @@ -82,7 +93,7 @@ Each case should be tested for creation transaction, `CREATE` and `CREATE2`. - Legacy code ending with incomplete PUSH instruction - Legacy code ending with any valid non-terminating instruction -#### Invalid codes +### Invalid codes - EOF code containing undefined instruction - EOF code ending with incomplete `PUSH` instruction From 2ae8b6f37c4657a280681cc3d1d16df4c37f999a Mon Sep 17 00:00:00 2001 From: David Hermann Brandt Date: Tue, 8 Nov 2022 13:49:30 +0000 Subject: [PATCH 080/113] Update EIP-2335: Remove superfluous use of "verifies" (#5207) * removed superfluous use of "verifies" minor incorrect language * Minor wording change to re-trigger CI Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> --- EIPS/eip-2335.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/EIPS/eip-2335.md b/EIPS/eip-2335.md index df4bca08588097..43ca6240e06a81 100644 --- a/EIPS/eip-2335.md +++ b/EIPS/eip-2335.md @@ -61,7 +61,7 @@ The decryption key is an intermediate key which is used both to verify the user- ### Password verification -The password verification verifies step verifies that the password is correct with respect to the `checksum.message`, `cipher.message`, and `kdf`. This is done by appending the `cipher.message` to the 2nd 16 bytes of the decryption key, obtaining its SHA256 hash and verifying whether it matches the `checksum.message`. +The password verification step verifies that the password is correct with respect to the `checksum.message`, `cipher.message`, and `kdf`. This is done by appending the `cipher.message` to the 2nd 16 bytes of the decryption key, obtaining its SHA256 hash and verifying whether it matches the `checksum.message`. #### Inputs @@ -114,7 +114,7 @@ The `path` indicates where in the key-tree a key originates from. It is a string ## UUID -The `uuid` provided in the keystore is a randomly generated UUID as specified by [RFC 4122](https://tools.ietf.org/html/rfc4122). It is intended to be used as a 128-bit proxy for referring to a particular set of keys or account. +The `uuid` provided in the keystore is a randomly generated UUID as specified by [RFC 4122](https://tools.ietf.org/html/rfc4122). It is used as a 128-bit proxy for referring to a particular set of keys or account. ## Version From 6642a5b8ba03cc602daa4d5999ec8f4c7354c480 Mon Sep 17 00:00:00 2001 From: Sebastian Supreme <106926150+SebastianSupreme@users.noreply.github.com> Date: Tue, 8 Nov 2022 14:50:45 +0100 Subject: [PATCH 081/113] Fixed punctuation inconsistency (#5884) Removed the dots behind two sentences because every other bullet point is punctuated this way, too. --- EIPS/eip-4844.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/EIPS/eip-4844.md b/EIPS/eip-4844.md index d54c92ab90772a..e6ea773e72f816 100644 --- a/EIPS/eip-4844.md +++ b/EIPS/eip-4844.md @@ -391,7 +391,7 @@ The work that is already done in this EIP includes: - _All_ of the execution / consensus cross-verification logic required for full sharding - Layer separation between `BeaconBlock` verification and data availability sampling blobs - Most of the `BeaconBlock` logic required for full sharding -- A self-adjusting independent gasprice for blobs. +- A self-adjusting independent gasprice for blobs The work that remains to be done to get to full sharding includes: @@ -405,7 +405,7 @@ This EIP also sets the stage for longer-term protocol cleanups: - It adds an SSZ transaction type which is slightly gas-advantaged (1000 discount) to nudge people toward using it, and paves the precedent that all new transaction types should be SSZ - It defines `TransactionNetworkPayload` to separate network and block encodings of a transaction type -- Its (cleaner) gas price update rule could be applied to the primary basefee. +- Its (cleaner) gas price update rule could be applied to the primary basefee ### How rollups would function From da339158518b757248d9dfb8b84106c7f08225cb Mon Sep 17 00:00:00 2001 From: Marius van der Wijden Date: Tue, 8 Nov 2022 15:08:13 +0100 Subject: [PATCH 082/113] Add EIP-5793: eth/68: Add transaction type to tx announcement (#5793) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add eth/68 proposal * eip-5793: rename draft md * eip-5793: updated links * formatting * weird fixes for the bot * Fix intiial errors * eip-5793: update eip * EIP-5793: minor tweaks and clarifications * Update EIPS/eip-5793.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-5793.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-5793.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * eip-5793: fix markdown lint errors Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> Co-authored-by: Péter Szilágyi Co-authored-by: lightclient <14004106+lightclient@users.noreply.github.com> --- EIPS/eip-5793.md | 51 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 EIPS/eip-5793.md diff --git a/EIPS/eip-5793.md b/EIPS/eip-5793.md new file mode 100644 index 00000000000000..dfe43c272f24c7 --- /dev/null +++ b/EIPS/eip-5793.md @@ -0,0 +1,51 @@ +--- +eip: 5793 +title: eth/68 - Add tx type to tx announcement +description: Adds the transaction type and transaction size to tx announcement messages in the wire protocol +author: Marius van der Wijden (@MariusVanDerWijden) +discussions-to: https://ethereum-magicians.org/t/eip-5793-eth-68-add-transaction-type-to-tx-announcement/11364 +status: Draft +type: Standards Track +category: Networking +created: 2022-10-18 +requires: 2464, 2481, 4938 +--- + +## Abstract + +The Ethereum Wire Protocol defines request and response messages for exchanging data between clients. The `NewPooledTransactionHashes` message announces transactions available in the node. This EIP extends this announcement message such that beside the transaction hashes, the node sends the transaction types and their sizes (as defined in [EIP-2718](./eip-2718.md)) as well. + +## Motivation + +The `NewPooledTransactionHashes` message announces transaction hashes, allowing the peer to selectively fetch transactions it does not yet have. + +[EIP-4844](./eip-4844.md) introduces a new transaction type for blob transactions. Since these blob transactions are large, naively broadcasting them to `sqrt(peers)` could significantly increase bandwidth requirements. Adding the transaction type and the size to the announcement message will allow nodes to select which transactions they want to fetch and also allow them to load balance or throttle peers based on past behavior. + +The added metadata fields will also enable future - upgradeless - protocol tweaks to prevent certain transaction type (e.g. blob transactions) or certain transaction sizes (e.g. 128KB+) from being blindly broadcast to many peers. Enforcing announcements only and retrieval on demand would ensure a much more predictable networking behavior, limiting the amplification effect of transaction propagation DoS attack. + +## Specification + +Modify the `NewPooledTransactionHashes (0x08)` message: + +* **(eth/67)**: `[hash_0: B_32, hash_1: B_32, ...]` +* **(eth/68)**: `[[type_0: B_1, type_1: B_1, ...], [size_0: B_4, size_1: B_4, ...], [hash_0: B_32, hash_1: B_32, ...]]` + +## Rationale + +This change will make the `eth` protocol future-proof for new transaction types that might not be relevant for all nodes. It gives the receiving node better control over the data it fetches from the peer as well as allow throttling the download of specific types. + +## Backwards Compatibility + +This EIP changes the `eth` protocol and requires rolling out a new version, `eth/68`. Supporting multiple versions of a wire protocol is possible. Rolling out a new version does not break older clients immediately, since they can keep using protocol version `eth/67`. + +This EIP does not change consensus rules of the EVM and does not require a hard fork. + +## Security Considerations + +None + +## Copyright + +Copyright and related rights waived via [CC0](../LICENSE.md). + + From b6065dafa192b84f2c23300ba7e993db0365b1e5 Mon Sep 17 00:00:00 2001 From: Hugo Date: Tue, 8 Nov 2022 14:49:03 -0700 Subject: [PATCH 083/113] Fix data-only contract example (#5898) --- EIPS/eip-3540.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EIPS/eip-3540.md b/EIPS/eip-3540.md index 0cca07ba31cd6c..5c6b4ee5e80968 100644 --- a/EIPS/eip-3540.md +++ b/EIPS/eip-3540.md @@ -204,7 +204,7 @@ We have considered different questions for the sections: The EOF prevents deploying contracts with arbitrary bytes (data-only contracts: their purpose is to store data not execution). **EOF1 requires** presence of a **code section** therefore the minimal overhead EOF data contract consist of a data section and one code section with single instruction. We recommend to use `INVALID` instruction in this case. In total there are 11 additional bytes required. ``` -EF0001 000001 01 00 FE +EF0001 010001 02 00 FE ``` ### PC starts with 0 at the code section From 0cf20f2b74c3e9d70f9adb7a03b44687ca374171 Mon Sep 17 00:00:00 2001 From: Samuele Marro Date: Wed, 9 Nov 2022 15:58:54 +0100 Subject: [PATCH 084/113] Updated EIP-5375: Move to Final (#5897) * Moved EIP-5375 to Final. * Update eip-5375.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> --- EIPS/eip-5375.md | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/EIPS/eip-5375.md b/EIPS/eip-5375.md index 5ba553ce882c60..c0cd6cc4d0a580 100644 --- a/EIPS/eip-5375.md +++ b/EIPS/eip-5375.md @@ -4,8 +4,7 @@ title: NFT Author Information and Consent description: An extension of EIP-721 for NFT authorship and author consent. author: Samuele Marro (@samuelemarro), Luca Donno (@lucadonnoh) discussions-to: https://ethereum-magicians.org/t/eip-5375-nft-authorship/10182 -status: Last Call -last-call-deadline: 2022-11-06 +status: Final type: Standards Track category: ERC created: 2022-07-30 @@ -14,14 +13,14 @@ requires: 55, 155, 712, 721, 1155 ## Abstract -This document outlines a standard to provide off-chain information in JSON format regarding NFT authors. Specifically, it adds a new field which provides both a list of author names/addresses and a proof of _authorship consent_, i.e. a proof that a certain author agreed to be named as the author of the NFT. Note that a proof of authorship consent is not a proof of authorship: an address could consent to be named as the author without actually being the author. +This EIP standardizes a JSON format for storing off-chain information about NFT authors. Specifically, it adds a new field which provides a list of author names, addresses, and proofs of _authorship consent_: proofs that the authors have agreed to be named as authors. Note that a proof of authorship _consent_ is not a proof of authorship: an address can consent without having authored the NFT. ## Motivation -There is currently no unified protocol to identify the author of an NFT. Some existing techniques include: +There is currently no standard to identify authors of an NFT, and existing techniques have issues: -- Using the mint transaction signer - - Requires that the minter and the author are the same +- Using the mint `tx.origin` or `msg.sender` + - Assumes that the minter and the author are the same - Does not support multiple authors - Using the first Transfer event for a given ID - Contract/minter can claim that someone else is the author without their consent @@ -30,7 +29,7 @@ There is currently no unified protocol to identify the author of an NFT. Some ex - Requires per-contract support by NFT platforms - Contract/minter can claim that someone else is the author without their consent -The first practice is the most common, mainly due to the fact that relying on minters to provide truthful information opens up avenues for frauds (e.g. selling an NFT while claiming that it was made by a famous artist). However, there are several situations where the minter and the author might not be the same, such as: +The first practice is the most common. However, there are several situations where the minter and the author might not be the same, such as: - NFTs minted by a contract - Lazy minting @@ -244,7 +243,7 @@ There are three reasons: ### Why repeat id, chainId and contractAddress? -In many cases, all three data can be derived from contextual information. However, requiring their inclusion in the JSON document ensures that author consent can be verified by only accessing the JSON document. +In many cases, this data can be derived from contextual information. However, requiring their inclusion in the JSON document ensures that author consent can be verified using only the JSON document. ### Why not implement a revocation system? @@ -260,10 +259,12 @@ Since the author only needs to sign an EIP-712 message, this protocol allows min - Obtain an EVM wallet; - Learn how to read and sign a EIP-712 message (which can often be simplified by using a Dapp) + without needing to: -- Obtain the chain's native token (e.g. through trading or bridging) -- Sign a transaction -- Understand the pricing mechanism of transactions + +- Obtain the chain's native token (e.g. through trading or bridging); +- Sign a transaction; +- Understand the pricing mechanism of transactions; - Verify if a transaction has been included in a block This reduces the technical barrier for authors, thus increasing the usability of NFTs, without requiring authors to hand over their keys to a tech-savvy intermediary. From 670e734256563ec9d0f1901a96df547773f523c8 Mon Sep 17 00:00:00 2001 From: StartfundInc <111301211+StartfundInc@users.noreply.github.com> Date: Wed, 9 Nov 2022 07:01:10 -0800 Subject: [PATCH 085/113] Update eip-5528.md (#5900) --- EIPS/eip-5528.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/EIPS/eip-5528.md b/EIPS/eip-5528.md index a27b857208f239..cb822cc106a584 100644 --- a/EIPS/eip-5528.md +++ b/EIPS/eip-5528.md @@ -4,8 +4,7 @@ title: Refundable Fungible Token description: Allows refunds for EIP-20 tokens by escrow smart contract author: StartfundInc (@StartfundInc) discussions-to: https://ethereum-magicians.org/t/eip-5528-refundable-token-standard/10494 -status: Last Call -last-call-deadline: 2022-11-09 +status: Final type: Standards Track category: ERC created: 2022-08-16 From 218be6bfeebfc29301b80950cbd925c4e8bb2f09 Mon Sep 17 00:00:00 2001 From: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> Date: Wed, 9 Nov 2022 10:35:41 -0500 Subject: [PATCH 086/113] Update EIP-5507: Add EIP-20 support (#5905) --- EIPS/eip-5507.md | 53 ++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 45 insertions(+), 8 deletions(-) diff --git a/EIPS/eip-5507.md b/EIPS/eip-5507.md index 2e1fbd9e78a220..06743c467e8797 100644 --- a/EIPS/eip-5507.md +++ b/EIPS/eip-5507.md @@ -1,28 +1,65 @@ --- eip: 5507 -title: Refundable NFTs -description: Adds refund functionality to EIP-721 and EIP-1155 NFTs +title: Refundable Tokens +description: Adds refund functionality to EIP-20, EIP-721, and EIP-1155 tokens author: elie222 (@elie222), Pandapip1 (@Pandapip1) discussions-to: https://ethereum-magicians.org/t/eip-5507-refundable-nfts/10451 status: Draft type: Standards Track category: ERC created: 2022-08-19 -requires: 165, 721, 1155 +requires: 20, 165, 721, 1155 --- ## Abstract -This EIP adds refund functionality for initial NFT offerings to [EIP-721](./eip-721.md) and [EIP-1155](./eip-1155.md). Funds are held in escrow until a predetermined time before they are claimable. Until that predetermined time passes, users can receive a refund for NFTs they have purchased. +This EIP adds refund functionality for initial token offerings to [EIP-20](./eip-20.md), [EIP-721](./eip-721.md), and [EIP-1155](./eip-1155.md). Funds are held in escrow until a predetermined time before they are claimable. Until that predetermined time passes, users can receive a refund for tokens they have purchased. ## Motivation -The NFT space lacks accountability. For the health of the NFT ecosystem as a whole, better mechanisms to prevent rugpulls from happening are needed. Offering refunds provides greater protection for buyers and increases legitimacy for creators. +The NFT and token spaces lack accountability. For the health of the ecosystem as a whole, better mechanisms to prevent rugpulls from happening are needed. Offering refunds provides greater protection for buyers and increases legitimacy for creators. ## Specification The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC 2119. +### EIP-20 Refund Extension + +```solidity +// SPDX-License-Identifier: CC0-1.0 + +pragma solidity ^0.8.4; + +import "IERC20.sol"; +import "IERC165.sol"; + +/// @notice Refundable EIP-20 tokens +/// @dev The EIP-165 identifier of this interface is `0xTODO` +interface IERC20Refund is ERC20, ERC165 { + /// @notice Emitted when a token is refunded + /// @dev Emitted by `refund` + /// @param _sender The person that requested a refund + /// @param _amount The amount of token (in terms of the smallest divisible unit) that was refunded + event Refund( + address indexed _sender, + uint256 indexed _amount + ); + + /// @notice As long as the refund is active, refunds the user + /// @dev Make sure to check that the user has the token, and be aware of potential re-entrancy vectors + /// @param amount The `amount` to refund + function refund(uint256 amount) external; + + /// @notice Gets the refund price + /// @return wei The amount of ether (in wei) that would be refunded for a single token unit (10**decimals smallest divisible units) + function refundOf() external view returns (uint256 wei); + + /// @notice Gets the first block for which the refund is not active + /// @return block The block beyond which the token cannot be refunded + function refundDeadlineOf() external view returns (uint256 block); +} +``` + ### EIP-721 Refund Extension ```solidity @@ -48,7 +85,7 @@ interface IERC721Refund is ERC721, ERC165 { /// @notice As long as the refund is active for the given `tokenId`, refunds the user /// @dev Make sure to check that the user has the token, and be aware of potential re-entrancy vectors /// @param tokenId The `tokenId` to refund - function refund(uint256 calldata tokenId) external; + function refund(uint256 tokenId) external; /// @notice Gets the refund price of the specific `tokenId` /// @param tokenId The `tokenId` to query @@ -90,11 +127,11 @@ interface IERC1155Refund is IERC1155, IERC165 { /// @dev Make sure to check that the user has enough tokens, and be aware of potential re-entrancy vectors /// @param tokenId The `tokenId` to refund /// @param amount The amount of `tokenId` to refund - function refund(uint256 calldata tokenId, uint256 amount) external; + function refund(uint256 tokenId, uint256 amount) external; /// @notice Gets the refund price of the specific `tokenId` /// @param tokenId The `tokenId` to query - /// @return wei The amount of ether (in wei) that would be refunded + /// @return wei The amount of ether (in wei) that would be refunded for a single token function refundOf(uint256 tokenId) external view returns (uint256 wei); /// @notice Gets the first block for which the refund is not active for a given `tokenId` From abd0795ed9a750943444619a034c370c9a8adf87 Mon Sep 17 00:00:00 2001 From: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> Date: Wed, 9 Nov 2022 23:59:33 -0500 Subject: [PATCH 087/113] Update EIP-4519: Make a few wording changes (#5889) * Update eip-4519.md * Apply suggestions from code review Co-authored-by: Javier Arcenegui Almenara <81355285+Hardblock-IMSE-CNM@users.noreply.github.com> * Replace all html subs with tex * Missed a few $ * Fix a few typos * Apply suggestions from code review Co-authored-by: Javier Arcenegui Almenara <81355285+Hardblock-IMSE-CNM@users.noreply.github.com> * Update EIPS/eip-4519.md Co-authored-by: Javier Arcenegui Almenara <81355285+Hardblock-IMSE-CNM@users.noreply.github.com> * Minor changes Co-authored-by: Javier Arcenegui Almenara <81355285+Hardblock-IMSE-CNM@users.noreply.github.com> --- EIPS/eip-4519.md | 67 ++++++++++++++++++++++++------------------------ 1 file changed, 34 insertions(+), 33 deletions(-) diff --git a/EIPS/eip-4519.md b/EIPS/eip-4519.md index b852d446304750..8a25ddf698dd00 100644 --- a/EIPS/eip-4519.md +++ b/EIPS/eip-4519.md @@ -12,22 +12,16 @@ requires: 165, 721 --- ## Abstract -This EIP proposes a standard interface for non-fungible tokens that represent physical assets, such as Internet of Things (IoT) devices. An [EIP-4519](./eip-4519.md) NFT is tied to a physical asset that can check if the tie is authentic or not. The EIP-4519 NFT can include an Ethereum address of the physical asset and, consequently, the physical asset can sign messages or transactions. The physical asset can operate with an operating mode that is defined by its EIP-4519 NFT with an attribute named state. The token state can define if the token owner or the token user can use the asset or not. A cryptographically secure mutual authentication process can be carried out between the physical asset and its owner or its user. EIP-4519 NFTs extend [EIP-721](./eip-721.md) non-fungible tokens, which only allow representing assets by a unique identifier, but not by an Ethereum address. Moreover, EIP-4519 NFTs extend EIP-721 NFTs to include users in addition to owners. + +This EIP standardizes an interface for non-fungible tokens representing physical assets, such as Internet of Things (IoT) devices. These NFTs are tied to physical assets and can verify the authenticity of the tie. They can include an Ethereum address of the physical asset, permitting physical assets to sign messages and transactions. Physical assets can operate with an operating mode defined by its corresponding NFT. ## Motivation -This EIP-4519 NFT was developed because the EIP-721 NFT does not include the users of an asset (only include the owners) and does not include the Ethereum address of the asset. Smart assets (for example, IoT devices) are increasing nowadays. If smart assets are tied to EIP-4519 NFTs then they can be managed in a secure and traceable way. The reason is that EIP-4519 NFTs, unlike EIP-721 NFTs, allow establishing secure communication channels between the physical asset and its owner and its user. In this way, assets, owners and users can be assured of exchanging information with trusted parties. - -**Secure Physical Asset Tied to an EIP-4519 NFT** -Current non-fungible tokens are associated with passive assets, either virtual or physical things, but they do not include any standardized mechanism to tie the non-fungible token to the asset. Tying physical assets to NFTs is interesting because the asset can know anytime its owner, user, operating mode, and how to establish secure communication channels with its owner and user. The assets, owners and users are identified by their Ethereum addresses and the Ethereum address of the asset can be obtained from a unique physical property of the physical asset (for example, using a physical unclonable function). The asset can be an active part in any transfer of ownership and use. In addition, the asset is smart, for example to not obey orders from a non-authorized user, or to be inoperative if a successful authentication with the user or the owner has not been fulfilled. -**User Management Mechanism** -EIP-4519 NFTs allow implementing a new and useful user management mechanism. In the last few years, many projects concerning assets sharing (for example, vehicles) have been created and developed. EIP-4519 NFTs incorporate the Ethereum address of the user as another attribute of the token in order to distinguish between the user, who employs the asset for a specific application, and the owner, who assigns the token to users. Hence, both users and owners of an asset can be traced. - -**Secure Key Exchange Mechanism** -The engagement of the asset with an owner or a user is carried out after a mutual authentication protocol (for example, based on elliptic curve Diffie-Hellman key exchange protocol). This protocol can be employed for a key agreement between the asset and its owner, in the one side, and between the asset and its user, in the other side. +This standard was developed because [EIP-721](./eip-721.md) only tracks ownership (not usage rights) and does not track the Ethereum addresses of the asset. The popularity of smart assets, such as IoT devices, is increasing. To permit secure and traceable management, these NFTs can be used to establish secure communication channels between the physical asset, its owner, and its user. ## Specification -The EIP-4519 NFT attributes `addressAsset` and `addressUser` are, respectively, the Ethereum addresses of the physical asset and the user. They are optional attributes but at least one of them should be used in an EIP-4519 NFT. In the case of using only the attribute `addressUser`, two states define if the token is assigned or not to a user. `Figure 1` shows these states in a flow chart. When a token is created, transferred or unassigned, the token state is set to `notAssigned`. If the token is assigned to a valid user, the state is set to `userAssigned`. + +The attributes `addressAsset` and `addressUser` are, respectively, the Ethereum addresses of the physical asset and the user. They are optional attributes but at least one of them should be used in an NFT. In the case of using only the attribute `addressUser`, two states define if the token is assigned or not to a user. `Figure 1` shows these states in a flow chart. When a token is created, transferred or unassigned, the token state is set to `notAssigned`. If the token is assigned to a valid user, the state is set to `userAssigned`. ![Figure 1 : Flow chart of the token states with `addressUser` defined (and `addressAsset` undefined)](../assets/eip-4519/images/Figure1.jpg) @@ -35,43 +29,43 @@ In the case of defining the attribute `addressAsset` but not the attribute `addr ![Figure 2 : Flow chart of the token states with `addressAsset` defined (and `addressUser` undefined)](../assets/eip-4519/images/Figure2.jpg) -Finally, if both the attributes `addressAsset` and `addressUser` are defined, the states of the EIP-4519 NFT define if the asset has been engaged or not with the owner or the user (`waitingForOwner`, `engagedWithOwner`, `waitingForUser` and `engagedWithUser`). The flow chart in `Figure 3` shows all the possible state changes. The states related to the owner are the same as in `Figure 2`. The difference is that, at the state `engagedWithOwner`, the token can be assigned to a user. If a user is assigned (the token being at states `engagedWithOwner`, `waitingForUser` or `engagedWithUser`), then the token changes its state to `waitingForUser`. Once the asset and the user authenticate each other, the state of the token is set to `engagedWithUser`, and the user is able to use the asset. +Finally, if both the attributes `addressAsset` and `addressUser` are defined, the states of the NFT define if the asset has been engaged or not with the owner or the user (`waitingForOwner`, `engagedWithOwner`, `waitingForUser` and `engagedWithUser`). The flow chart in `Figure 3` shows all the possible state changes. The states related to the owner are the same as in `Figure 2`. The difference is that, at the state `engagedWithOwner`, the token can be assigned to a user. If a user is assigned (the token being at states `engagedWithOwner`, `waitingForUser` or `engagedWithUser`), then the token changes its state to `waitingForUser`. Once the asset and the user authenticate each other, the state of the token is set to `engagedWithUser`, and the user is able to use the asset. ![Figure 3 : Flow chart of the token states with `addressUser` and `addressUser` defined](../assets/eip-4519/images/Figure3.jpg) -In order to complete the ownership transfer of a token, the new owner must carry out a mutual authentication process with the asset, which is off-chain with the asset and on-chain with the token, by using their Ethereum addresses. Similarly, a new user must carry out a mutual authentication process with the asset to complete a use transfer. EIP-4519 NFTs define how the authentication processes start and finish. These authentication processes allow deriving fresh session cryptographic keys for secure communication between assets and owners, and between assets and users. Therefore, the trustworthiness of the assets can be traced even if new owners and users manage them. +In order to complete the ownership transfer of a token, the new owner must carry out a mutual authentication process with the asset, which is off-chain with the asset and on-chain with the token, by using their Ethereum addresses. Similarly, a new user must carry out a mutual authentication process with the asset to complete a use transfer. NFTs define how the authentication processes start and finish. These authentication processes allow deriving fresh session cryptographic keys for secure communication between assets and owners, and between assets and users. Therefore, the trustworthiness of the assets can be traced even if new owners and users manage them. -When the EIP-4519 NFT is created or when the ownership is transferred, the token state is `waitingForOwner`. The asset sets its operating mode to `waitingForOwner`. The owner generates a pair of keys using the elliptic curve secp256k1 and the primitive element P used on this curve: a secret key SKO_A and a Public Key PKO_A, so that PKO_A = SKO_A*P. To generate the shared key between the owner and the asset, KO, the public key of the asset, PKA, is employed as follows: +When the NFT is created or when the ownership is transferred, the token state is `waitingForOwner`. The asset sets its operating mode to `waitingForOwner`. The owner generates a pair of keys using the elliptic curve secp256k1 and the primitive element P used on this curve: a secret key $SK_{O_{-}A}$ and a Public Key $PK_{O_{-}A}$, so that $PK_{O_{-}A} = SK_{O_{-}A} * P$. To generate the shared key between the owner and the asset, $K_O$, the public key of the asset, $PK_A$, is employed as follows: -KO=PKA*SKO_A +$$K_O = PK_A*SK_{O_{-}A}$$ -Using the function `startOwnerEngagement`, PKO_A is saved as the attribute `dataEngagement` and the hash of KO as the attribute `hashK_OA`. The owner sends request engagement to the asset, and the asset calculates: +Using the function `startOwnerEngagement`, $PK_{O_{-}A}$ is saved as the attribute `dataEngagement` and the hash of $K_O$ as the attribute `hashK_OA`. The owner sends request engagement to the asset, and the asset calculates: -KA = SKA*PKO_A +$$K_A = SK_A*PK_{O_{-}A}$$ -If everything is correctly done, KO and KA are the same since: +If everything is correctly done, $K_O$ and $K_A$ are the same since: -KO=PKA\*SKO_A=(SKA\*P)\*SKO_A= SKA\*(SKO_A\*P)=SKA\*PKO_A +$$K_O=PK_A*SK_{O_{-}A}=(SK_A*P)\*SK_{O_{-}A}= SK_A*(SK_{O_{-}A}*P)=SK_A*PK_{O_{-}A}$$ -Using the function `ownerEngagement`, the asset sends the hash of KA obtained and if it is the same as the data in `hashK_OA`, then the state of the token changes to `engagedWithOwner` and the event `OwnerEngaged` is sent. Once the asset receives the event, it changes its operation mode to `engagedWithOwner`. This process is shown in `Figure 4`. From this moment, the asset can be managed by the owner and they can communicate in a secure way using the shared key. +Using the function `ownerEngagement`, the asset sends the hash of $K_A$, and if it is the same as the data in `hashK_OA`, then the state of the token changes to `engagedWithOwner` and the event `OwnerEngaged` are sent. Once the asset receives the event, it changes its operation mode to `engagedWithOwner`. This process is shown in `Figure 4`. From this moment, the asset can be managed by the owner and they can communicate in a secure way using the shared key. ![Figure 4: Steps in a successful owner and asset mutual authentication process](../assets/eip-4519/images/Figure4.jpg) -If the asset consults Ethereum and the state of its EIP-4519 NFT is `waitingForUser`, the asset (assuming it is an electronic physical asset) sets its operating mode to `waitingForUser`. Then, a mutual authentication process is carried out with the user, as already done with the owner. The user sends the transaction associated with the function `startUserEngagement`. As in `startOwnerEngagement`, this function saves the public key generated by the user, PKU_A, as the attribute `dataEngagement` and the hash of KU=PKA*SKU_A as the attribute `hashK_UA` in the EIP-4519 NFT. +If the asset consults Ethereum and the state of its NFT is `waitingForUser`, the asset (assuming it is an electronic physical asset) sets its operating mode to `waitingForUser`. Then, a mutual authentication process is carried out with the user, as already done with the owner. The user sends the transaction associated with the function `startUserEngagement`. As in `startOwnerEngagement`, this function saves the public key generated by the user, $PK_{U_{-}A}$, as the attribute `dataEngagement` and the hash of $K_U = PK_A * SK_{U_{-}A}$ as the attribute `hashK_UA` in the NFT. The user sends request engagement and the asset calculates: -KA = SKA*PKU_A +$$K_A = SK_A*PK_{U_{-}A}$$ -If everything is correctly done, KU and KA are the same since: +If everything is correctly done, $K_U$ and $K_A$ are the same since: -KU=PKA\*SKU_A=(SKA\*P)\*SKU_A= SKA\*(SKU_A\*P)=SKA\*PKU_A +$$K_U=PK_A*SK_{U_{-}A}=(SK_A*P)\*SK_{U_{-}A}= SK_A*(SK_{U_{-}A}*P)=SK_A*PK_{U_{-}A}$$ -Using the function `userEngagement`, the asset sends the hash of KA obtained and if it is the same as the data in `hashK_UA`, then the state of the token changes to `engagedWithUser` and the event `UserEngaged` is sent. Once the asset receives the event, it changes its operation mode to `engagedWithUser`. This process is shown in `Figure 5`. From this moment, the asset can be managed by the user and they can communicate in a secure way using the shared key. +Using the function `userEngagement`, the asset sends the hash of $K_A$ obtained and if it is the same as the data in `hashK_UA`, then the state of the token changes to `engagedWithUser` and the event `UserEngaged` is sent. Once the asset receives the event, it changes its operation mode to `engagedWithUser`. This process is shown in `Figure 5`. From this moment, the asset can be managed by the user and they can communicate in a secure way using the shared key. ![Figure 5: Steps in a successful user and asset mutual authentication process](../assets/eip-4519/images/Figure5.jpg) -Since the establishment of a shared secret key is very important for a secure communication, EIP-4519 NFTs include the attributes +Since the establishment of a shared secret key is very important for a secure communication, NFTs include the attributes `hashK_OA`, `hashK_UA` and `dataEngagement`. The first two attributes define, respectively, the hash of the secret key shared between the asset and its owner and between the asset and its user. Assets, owners and users should check they are using the correct shared secret keys. The attribute `dataEngagement` defines the public data needed for the agreement. ```solidity @@ -195,30 +189,37 @@ pragma solidity ^0.8.0; ``` ## Rationale -The demand for EIP-4519 NFTs, which allow user management and a tie to a physical asset are growing (for example, in the context of the Internet of Things). Therefore, it is essential to establish a standard capable of including all these options working together or separately. The incorporation of an Ethereum address of the user or an Ethereum address of a physical asset to the EIP-4519 NFT is optional. However, it does not make sense that the EIP-4519 NFT does not include any of them because, in that case, the EIP-4519 NFT would be an EIP-721 token. Since some functions such as `startUserEngagement` are available only if both addresses are implemented, a single interface with all the options is proposed. -**EIP-4519 NFT** -This EIP proposes a non-fungible token tied to a physical asset. The asset is able to generate an Ethereum address and authenticate its user and its owner. Hence, the asset can be considered as a smart asset associated with an NFT. If the asset and the token are regarded as one thing, we can talk about an EIP-4519 NFT. +### Authentication -**Authentication** -This EIP proposes using the smart contract to verify the mutual authentication process between the physical asset and the owner or the user by verifying the hash of a shared key. +This EIP uses smart contracts to verify the mutual authentication process since smart contracts are trustless. + +### Tie Time -**Tie Time** This EIP proposes including the attribute timestamp (to register in Ethereum the last time that the physical asset checked the tie with its token) and the attribute timeout (to register the maximum delay time established for the physical asset to prove again the tie). These attributes avoid that a malicious owner or user could use the asset endlessly. + When the asset calls `updateTimestamp`, the smart contract must call `block.timestamp`, which provides current block timestamp as seconds since Unix epoch. For this reason, `timeout` must be provided in seconds. -**EIP-721-based** +### EIP-721-based + [EIP-721](./eip-721.md) is the most commonly-used standard for generic NFTs. This EIP extends EIP-721 for backwards compatibility. ## Backwards Compatibility + This standard is an extension of EIP-721. It is fully compatible with both of the commonly used optional extensions (`IERC721Metadata` and `IERC721Enumerable`) mentioned in the EIP-721 standard. + ## Test Cases + The test cases presented in the paper shown below are available [here](../assets/eip-4519/PoC_SmartNFT/README.md). + ## Reference Implementation + A first version was presented in a paper of the Special Issue **Security, Trust and Privacy in New Computing Environments** of **Sensors** journal of **MDPI** editorial. The paper, entitled [Secure Combination of IoT and Blockchain by Physically Binding IoT Devices to Smart Non-Fungible Tokens Using PUFs](../assets/eip-4519/sensors-21-03119.pdf), was written by the same authors of this EIP. ## Security Considerations + In this EIP, a generic system has been proposed for the creation of non-fungible tokens tied to physical assets. A generic point of view based on the improvements of the current EIP-721 NFT is provided, such as the implementation of the user management mechanism, which does not affect the token's ownership. The physical asset should have the ability to generate an Ethereum address from itself in a totally random way so that only the asset is able to know the secret from which the Ethereum address is generated. In this way, identity theft is avoided and the asset can be proven to be completely genuine. In order to ensure this, it is recommended that only the manufacturer of the asset has the ability to create its associated token. In the case of an IoT device, the device firmware will be unable to share and modify the secret. Instead of storing the secrets, it is recommended that assets reconstruct their secrets from non-sensitive information such as the helper data associated with Physical Unclonable Functions (PUFs). Although a secure key exchange protocol based on elliptic curves has been proposed, the token is open to coexist with other types of key exchange. ## Copyright + Copyright and related rights waived via [CC0](../LICENSE.md). From da8b23d3dbbe724758fb6f54554298bca7bd766c Mon Sep 17 00:00:00 2001 From: xinbenlv Date: Thu, 10 Nov 2022 05:15:39 -0800 Subject: [PATCH 088/113] Update EIP-5679: Move to Final (#5899) * init * Update ERC number * Add content * Add discussion-to * Add ERC-165 identifiers * Change public to external * Update with batch and safe methods and add rationale. * Fix format * Fix EIPW errors * Add mentioning of EIP-777 * Add refimpl for Ext20 * Fix * update * Update * Update interface * Mention deployment * Fix * Move to last call * Update EIPS/eip-5679.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Fix typos * Address editorial feedback * Address editorial feedback * Update last-call deadline * Update: EIP-5679 Move to Final * remove last call deadline Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> --- EIPS/eip-5679.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/EIPS/eip-5679.md b/EIPS/eip-5679.md index 76bcc1fabb23ab..988d1b8f1714d4 100644 --- a/EIPS/eip-5679.md +++ b/EIPS/eip-5679.md @@ -4,8 +4,7 @@ title: Token Minting and Burning description: An extension for minting and burning EIP-20, EIP-721, and EIP-1155 tokens author: Zainan Victor Zhou (@xinbenlv) discussions-to: https://ethereum-magicians.org/t/erc-5679-mint-and-burn-tokens/10913 -status: Last Call -last-call-deadline: 2022-11-10 +status: Final type: Standards Track category: ERC created: 2022-09-17 From d646483be56c83006fc8322bcf47e6efd651ba48 Mon Sep 17 00:00:00 2001 From: Andrei Maiboroda Date: Thu, 10 Nov 2022 14:30:28 +0100 Subject: [PATCH 089/113] Update EIP-3540: Use exceptions with error messages in reference code (#5663) --- EIPS/eip-3540.md | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/EIPS/eip-3540.md b/EIPS/eip-3540.md index 5c6b4ee5e80968..2baf88fc0424e6 100644 --- a/EIPS/eip-3540.md +++ b/EIPS/eip-3540.md @@ -312,45 +312,57 @@ S_DATA = 0x02 def is_eof(code: bytes) -> bool: return code.startswith(MAGIC) +class ValidationException(Exception): + pass -# Validate EOF code. +# Raises ValidationException on invalid code def validate_eof(code: bytes): # Check version - assert len(code) >= 3 and code[2] == VERSION + if len(code) < 3 or code[2] != VERSION: + raise ValidationException("invalid version") # Process section headers section_sizes = {S_CODE: 0, S_DATA: 0} pos = 3 while True: # Terminator not found - assert pos < len(code) + if pos >= len(code): + raise ValidationException("no section terminator") + section_id = code[pos] pos += 1 if section_id == S_TERMINATOR: break # Disallow unknown sections - assert section_id in section_sizes + if not section_id in section_sizes: + raise ValidationException("invalid section id") # Data section preceding code section - assert section_id != S_DATA or section_sizes[S_CODE] != 0 + if section_id == S_DATA and section_sizes[S_CODE] == 0: + raise ValidationException("data section preceding code section") # Multiple sections with the same id - assert section_sizes[section_id] == 0 + if section_sizes[section_id] != 0: + raise ValidationException("multiple sections with same id") # Truncated section size - assert (pos + 1) < len(code) + if (pos + 1) >= len(code): + raise ValidationException("truncated section size") section_sizes[section_id] = (code[pos] << 8) | code[pos + 1] pos += 2 # Empty section - assert section_sizes[section_id] != 0 + if section_sizes[section_id] == 0: + raise ValidationException("empty section") # Code section cannot be absent - assert section_sizes[S_CODE] != 0 + if section_sizes[S_CODE] == 0: + raise ValidationException("no code section") # The entire container must be scanned - assert len(code) == (pos + section_sizes[S_CODE] + section_sizes[S_DATA]) + if len(code) != (pos + section_sizes[S_CODE] + section_sizes[S_DATA]): + raise ValidationException("container size not equal to sum of section sizes") ``` ## Security Considerations From 27548516862ec722469df0b42e3a1720e0fc4d53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Bylica?= Date: Thu, 10 Nov 2022 14:34:15 +0100 Subject: [PATCH 090/113] Add EIP-5656: Memory Copying Instruction (#5656) * Add draft for MCOPY * Some clarifications * Update mcopy gas cost * update calling convention to match other *COPY instructions * fix grammar in motivation section and, add vyper to list of languages affected * clarify semantics when buffers overlap * add forward protection notes to motivation section * link to ipsilon analysis * Add description * Clarification about 2929 * Add new author * Fix cost example * Clarify spec * Clarify overlapping buffers * Formatting * Remove external links as per EIP-1 rules * Give it a number * Alternative specification section * Use proper relative links * Add discussion url * Fix typo Co-authored-by: Alex Beregszaszi Co-authored-by: Charles Cooper --- EIPS/eip-5656.md | 104 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 EIPS/eip-5656.md diff --git a/EIPS/eip-5656.md b/EIPS/eip-5656.md new file mode 100644 index 00000000000000..f9abca0a7e1a9d --- /dev/null +++ b/EIPS/eip-5656.md @@ -0,0 +1,104 @@ +--- +eip: 5656 +title: Memory copying instruction +description: An efficient EVM instruction for copying memory areas +author: Alex Beregszaszi (@axic), Paul Dworzanski (@poemm), Jared Wasinger (@jwasinger), Casey Detrio (@cdetrio), Pawel Bylica (@chfast), Charles Cooper (@charles-cooper) +discussions-to: https://ethereum-magicians.org/t/eip-5656-mcopy-instruction/10890 +status: Draft +type: Standards Track +category: Core +created: 2021-02-01 +--- + +## Abstract + +Provide an efficient EVM instruction for copying memory areas. + +## Motivation + +Memory copying is a basic operation, yet implementing it on the EVM comes with overhead. + +This was recognised and alleviated early on with the introduction of the "identity" precompile, which accomplishes +memory copying by the use of `CALL`'s input and output memory offsets. Its cost is `15 + 3 * (length / 32)` gas, plus +the call overhead. The identity precompile was rendered ineffective by the raise of the cost of `CALL` to 700, but subsequently +the reduction by [EIP-2929](./eip-2929.md) made it slightly more economical. + +Copying exact words can be accomplished with ` MLOAD MSTORE` or ` DUP1 MLOAD DUP2 MSTORE`, +at a cost of at least 12 gas per word. This is fairly efficient if the offsets are known upfront and the copying can be unrolled. +In case copying is implemented at runtime with arbitrary starting offsets, besides the control flow overhead, the offset +will need to be incremented using `32 ADD`, adding at least 6 gas per word. + +Copying non-exact words is more tricky, as for the last partial word, both the source and destination needs to be loaded, +masked, or'd, and stored again. This overhead is significant. One edge case is if the last "partial word" is a single byte, +it can be efficiently stored using `MSTORE8`. + +As example use case, copying 256 bytes costs: +- at least 757 gas pre-EIP-2929 using the identity precompile +- at least 157 gas post-EIP-2929 using the identity precompile +- at least 96 gas using unrolled `MLOAD`/`MSTORE` instructions +- 27 gas using this EIP + +According to an analysis of blocks 10537502 to 10538702, roughly 10.5% of memory copies would have had improved performance with the +availability of an `MCOPY` instruction. + +Memory copying is used by languages like Solidity and Vyper, where we expect this improvement to provide efficient means of building +data structures, including efficient sliced access and copies of memory objects. Having a dedicated `MCOPY` instruction would also add +forward protection against future gas cost changes to `CALL` instructions in general. + +Having a special `MCOPY` instruction makes the job of static analyzers and optimizers easier, since the effects of a `CALL` in general +have to be fenced, whereas an `MCOPY` instruction would be known to only have memory effects. Even if special cases are added +for precompiles, a future hard fork could change `CALL` effects, and so any analysis of code using the identity precompile would only +be valid for a certain range of blocks. + +Finally, we expect memory copying to be immensely useful for various computationally heavy operations, such as EVM384, +where it is identified as a significant overhead. + +## Specification + +The instruction `MCOPY` is introduced at `0x5c`. + +### Input stack + +| Stack | Value | +|-------|-------| +| top - 0 | `dst` | +| top - 1 | `src` | +| top - 2 | `length` | + +This ordering matches the other copying instructions, i.e. `CALLDATACOPY`, `RETURNDATACOPY`. + +### Output stack + +This instructions returns no stack items. + +### Semantics + +It copies `length` bytes from the offset pointed at `src` to the offset pointed at `dst` in memory. +Copying takes place as if an intermediate buffer were used, allowing the destination and source to overlap. + +If `length > 0` and (`src + length` or `dst + length`) is beyond the current memory length, the memory is extended with respective gas cost applied. + +The gas cost of this instruction mirrors that of other `Wcopy` instructions and is `Gverylow + Gcopy * ceil(length / 32)`. + +## Rationale + +Production implementation of exact-word memory copying and partial-word memory copying can be found in the Solidity, Vyper and Fe compilers. + +With [EIP-2929](./eip-2929.md) the call overhead using the identity precompile was reduced from 700 to 100 gas. +This is still prohibitive for making the precompile a reasonable alternative again. + +## Backwards Compatibility + +This EIP introduces a new instruction which did not exists previously. Already deployed contracts using this instruction could change their behaviour after this EIP. + +## Test Cases + +TBA + +## Security Considerations + +TBA + +## Copyright + +Copyright and related rights waived via [CC0](../LICENSE.md). From f35138154f8d7d00edac7cb9e39e45f86a6a1e1b Mon Sep 17 00:00:00 2001 From: Alex Stokes Date: Thu, 10 Nov 2022 12:18:32 -0500 Subject: [PATCH 091/113] 4844: declare withdrawals in 4895 as a dependency (#5906) --- EIPS/eip-4844.md | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/EIPS/eip-4844.md b/EIPS/eip-4844.md index e6ea773e72f816..5aac729fb5e842 100644 --- a/EIPS/eip-4844.md +++ b/EIPS/eip-4844.md @@ -8,7 +8,7 @@ status: Draft type: Standards Track category: Core created: 2022-02-25 -requires: 1559, 2718, 2930 +requires: 1559, 2718, 2930, 4895 --- ## Abstract @@ -193,21 +193,22 @@ The resulting RLP encoding of the header is therefore: ``` rlp([ parent_hash, - ommers_hash, + 0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347, # ommers hash coinbase, state_root, - tx_root, - receipt_root, - bloom, - difficulty, + txs_root, + receipts_root, + logs_bloom, + 0, # difficulty number, gas_limit, gas_used, - time, - extra, - mix_digest, - nonce, - base_fee, + timestamp, + extradata, + prev_randao, + 0x0000000000000000, # nonce + base_fee_per_gas, + withdrawals_root, excess_data_gas ]) ``` From 33c34c305d3459851a0c168b18a23db0fc2ce8f2 Mon Sep 17 00:00:00 2001 From: xinbenlv Date: Thu, 10 Nov 2022 09:33:01 -0800 Subject: [PATCH 092/113] Update EIP-5732: include @fulldecent's change (#5909) * Address some copy editing issues * Include my change * Make EIP-5732 happy Co-authored-by: William Entriken --- EIPS/eip-5732.md | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/EIPS/eip-5732.md b/EIPS/eip-5732.md index 1ce1ceea91ba3c..5b51f26a741008 100644 --- a/EIPS/eip-5732.md +++ b/EIPS/eip-5732.md @@ -16,38 +16,30 @@ requires: 165 A simple commit interface to support commit-reveal scheme which provides **only** a commit method but no reveal method, allowing implementations to integrate this interface -with arbitrary reveal method such as `vote` or `transfer`. +with arbitrary reveal methods such as `vote` or `transfer`. ## Motivation 1. support commit-reveal privacy for applications such as voting. -2. make it harder for attackers for front-running, back-running or sandwich attack. +2. make it harder for attackers for front-running, back-running or sandwich attacks. ## Specification The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC 2119. -1. Compliant contract MUST to implement the `IERC_COMMIT_CORE` interface +Interfaces referenced in this specification are as follows: ```solidity pragma solidity >=0.7.0 <0.9.0; -/// The EIP-165 identifier of this interface is 0xf14fcbc8 +// The EIP-165 identifier of this interface is 0xf14fcbc8 interface IERC_COMMIT_CORE { function commit(bytes32 _commitment) payable external; } -``` - -2. Compliant contract is RECOMMENDED to implement `IERC_COMMIT_GENERAL` interface. - -When implementing the method of `commitFrom` in addition to the `commit` method, the `commit(_commitment)` MUST be equivalent as if called `commitFrom(msg.sender, _commitment, [/*empty arraye*/]);`. The `returns(uint256)` is RECOMMENDED to return either `block.timestamp` or `block.number` or a number that indicate the ordering of different commitments. When `commitFrom` is being called. - -3. If compliant contract implements `IERC_COMMIT_GENERAL`, the event `Commit` MUST be emitted when a commitment is accepted and recorded. In the parameter of both `Commit` and the `commitFrom` method, the `_timePoint` is a time-point-representing value that represents ordering of commitments in which a latter commitment will always have a greater value than a former commitment, such as `block.timestamp` or `block.number` or other time scale chosen by implementing contracts. The `extraData` is reserved for future behavior extension. If the `_from` is different from the TX signer, it is RECOMMENDED that compliant contract SHOULD validate signature for `_from`. For EOAs this will be validating its ECDSA signatures on chain. For smart contract accounts, it is RECOMMENDED to use [EIP-1271](./eip-1271.md) to validate the signatures. -```solidity pragma solidity >=0.7.0 <0.9.0; -/// The EIP-165 identifier of this interface is 0x67b2ec2c +// The EIP-165 identifier of this interface is 0x67b2ec2c interface IERC_COMMIT_GENERAL { event Commit( uint256 indexed _timePoint, @@ -58,15 +50,25 @@ interface IERC_COMMIT_GENERAL { address _from, bytes32 _commitment, bytes calldata _extraData) - payable external returns(uint256 /*timePoint*/); + payable external returns(uint256 timePoint); } ``` -4. One or more methods of a compliant contract MAY be used for reveal. +1. A compliant contract MUST implement the `IERC_COMMIT_CORE` interface. +2. A compliant contract SHOULD implement the `IERC_COMMIT_GENERAL` interface. +3. A compliant contract that implements the `IERC_COMMIT_GENERAL` interface MUST accept `commit(_commitment)` as equivalent to `commitFrom(msg.sender, _commitment, [/*empty array*/])`. +4. The `timePoint` return value of `commitFrom` is RECOMMENDED to use `block.timestamp` or `block.number` or a number that indicates the ordering of different commitments. When `commitFrom` is being called. +5. A compliant contract that implements `IERC_COMMIT_GENERAL` MUST emit event `Commit` when a commitment is accepted and recorded. In the parameter of both `Commit` and the `commitFrom` method, the `_timePoint` is a time-point-representing value that represents ordering of commitments in which a latter commitment will always have a _greater or equal value_ than a former commitment, such as `block.timestamp` or `block.number` or other time scale chosen by implementing contracts. + +_Note_: For compliant contract that requires the `_timePoint` from next TX to be _strictly greater_ than a previous TX, `block.timestamp` and `block.number` are not reliable as two TX could co-exist in the same block resulting in the same `_timePoint` value. In such case, compliant contract is to take extra measures to enforce this strict-monotone-ness. For example, use a separate state variable in the contract to keep track of number of commits it receives, or reject any second/other TX that shares the same `block.timestamp` or `block.number`. + +6. The `extraData` is reserved for future behavior extension. If the `_from` is different from the TX signer, it is RECOMMENDED that compliant contract SHOULD validate signature for `_from`. For EOAs this will be validating its ECDSA signatures on chain. For smart contract accounts, it is RECOMMENDED to use [EIP-1271](./eip-1271.md) to validate the signatures. + +7. One or more methods of a compliant contract MAY be used for reveal. But there MUST be a way to supply an extra field of `secret_salt`, so that committer can later open the `secret_salt` in the reveal TX that exposes the `secret_salt`. The size and location of `secret_salt` is intentionally unspecified in this EIP to maximize flexibility for integration. -5. Compliant contract is RECOMMENDED to implement [EIP-165](./eip-165.md). +8. Compliant contract is RECOMMENDED to implement [EIP-165](./eip-165.md). ## Rationale From 610f3c1d093c79ce4f400e5c5809dc45272688cd Mon Sep 17 00:00:00 2001 From: xinbenlv Date: Thu, 10 Nov 2022 11:23:47 -0800 Subject: [PATCH 093/113] Update EIP-5732 Clean up (#5910) * Address some copy editing issues * Include my change * Make EIP-5732 happy * Remove out of date reference implementation Co-authored-by: William Entriken --- EIPS/eip-5732.md | 103 +---------------------------------------------- 1 file changed, 1 insertion(+), 102 deletions(-) diff --git a/EIPS/eip-5732.md b/EIPS/eip-5732.md index 5b51f26a741008..06fde23d57d460 100644 --- a/EIPS/eip-5732.md +++ b/EIPS/eip-5732.md @@ -72,7 +72,7 @@ But there MUST be a way to supply an extra field of `secret_salt`, so that commi ## Rationale -1. One design options is that we can attach a Commit Interface to any individual ERCs such as voting standards or token standards. We choose to have a simple and eneralize commit interface so all ERCs can be extended to support commit-reveal without changing their basic method signatures. +1. One design options is that we can attach a Commit Interface to any individual ERCs such as voting standards or token standards. We choose to have a simple and generalize commit interface so all ERCs can be extended to support commit-reveal without changing their basic method signatures. 2. The key derived design decision we made is we will have a standardized `commit` method without a standardized `reveal` method, making room for customized reveal method or using `commit` with existing standard. @@ -88,107 +88,6 @@ The `IERC_COMMIT_CORE` is backward compatible with ENS implementations and other ## Reference Implementation -### Commit with Token-Transfer as Reveal - -Example of a Simple Transfer Standard being integrated with this EIP: - -```solidity -interface ISimpleToken { - function transfer(address to, uint256 amount); -} - -contract SomeToken is ISimpleToken { - mapping(address => uint256, bytes calldata extraData) balance; - function transfer(address to, uint256 amount, bytes calldata extraData) { - required(balance[msg.sender] > amount); - balance[msg.sender] -= amount; - balance[to] += amount; - } -} -``` - -When integrating with this EIP, it becomes this - -```solidity -interface ISimpleToken { - function transfer(address to, uint256 amount, bytes calldata extraData); -} - -contract SomeBetterToken is ISimpleToken, IERC_COMMIT_CORE { - mapping(address => uint256) balance; - mapping(address => bytes32) lastCommits; - function commit(bytes32 _commitment) { - lastCommits[msg.sender] = _commitment; - emit Commit(...); - } - function transfer(address _to, uint256 _amount, bytes calldata _extraData/*first 32bytes are used as secret_sault*/) { - required(balance[msg.sender] > amount); - // pseudo code. - require(lastCommits[msg.sender] == _recomputeCommit(msg.sender, _to, _amount, _extraData[:32])); // the commitment from last sender was - delete lastCommits[msg.sender]; // immediately delete commits to avoid reentry attack. - balance[msg.sender] -= amount; - balance[to] += amount; - } - - function _recomputeCommit(address _sender, address _to, uint256 _amount, bytes32 _secretSalt) returns (bytes32){ - return keccak256(abi.encodePack(_sender, _to, _amount, _secretSalt)); - } - -} -``` - -### Commit with Voting as Reveal - -Example of a Simple Transfer Standard being integrated with this EIP: - -```solidity -interface ISimpleToken { - function vote(address _proposalId, uint8 _optionId, bytes calldata _extraData); -} - -contract FooVote is ISimpleToken { - mapping(address => uint256/*proposalId*/ => uint8/*optionId*/) ballots; - function vote(address _proposalId, uint8 _optionId, bytes calldata _extraData) { - ballots[msg.sender][_proposalId] = _optionId; - } - - // Ballot tally method omitted. -} -``` - -When integrating with this EIP, it becomes this - -```solidity -interface ISimpleVote { - function vote(uint256 _proposalId); -} - -contract BarVote is ISimpleVote, IERC_COMMIT_CORE { - mapping(address => address => bool) proposalVotes; - mapping(address => bytes32) lastCommits; - mapping(uint256 => uint256) proposalDeadlines; // block number of deadline for each proposal - - function commit(bytes32 _commitment) { - lastCommits[msg.sender] = _commitment; - emit Commit(...); - } - - function vote(address _proposalId, uint8 _optionId, bytes calldata _extraData) { - // pseudo code. - require(lastCommits[msg.sender] == _recomputeCommit(msg.sender, _proposalId, _optionId, _extraData[:32])); // the commitment from last sender was - delete lastCommits[msg.sender]; // immediately delete commits to avoid reentry attack. - ballots[msg.sender][_proposalId] = _optionId; - } - - function _recomputeCommit(address _sender, address _proposalId, uint8 _optionId, bytes32 _secretSalt) returns (bytes32){ - return keccak256(abi.encodePack(_sender, _proposalId, _optionId, _secretSalt)); - } - - // Ballot tally method omitted. - // Proposal deadline method omitted. -} -``` - ### Commit with ENS Register as Reveal In ENS registering process, currently inside of `ETHRegistrarController` contract a commit function is being used to allow registerer fairly register a desire domain to avoid being front-run. From b5c728ac84d391de275f65d3724d59d3954c8e98 Mon Sep 17 00:00:00 2001 From: xinbenlv Date: Thu, 10 Nov 2022 14:35:47 -0800 Subject: [PATCH 094/113] Update EIP-5732 Clean up (#5901) * Init a EIP for Commit Interface * Update file name * Add content * Update name * Add mentioning of chainid * Add discussion-to * Function parameter * Add abstract * Add voting example. * Update eip-5732.md * Update EIP-5732 with move to Last Call * Update wording * U * U * U * Update eip-5732.md * Update EIPS/eip-5732.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-5732.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-5732.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update suggested by @mattstam * Update eip-5732.md * Update EIPS/eip-5732.md Co-authored-by: Matt Stam * Update * Add co-author * update deadline * Update format * Update last-call deadline * Fix format * Add backwards compatibility * Move the security note out from specs Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> Co-authored-by: Matt Stam --- EIPS/eip-5732.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/EIPS/eip-5732.md b/EIPS/eip-5732.md index 06fde23d57d460..2aefdd359d006e 100644 --- a/EIPS/eip-5732.md +++ b/EIPS/eip-5732.md @@ -60,8 +60,6 @@ interface IERC_COMMIT_GENERAL { 4. The `timePoint` return value of `commitFrom` is RECOMMENDED to use `block.timestamp` or `block.number` or a number that indicates the ordering of different commitments. When `commitFrom` is being called. 5. A compliant contract that implements `IERC_COMMIT_GENERAL` MUST emit event `Commit` when a commitment is accepted and recorded. In the parameter of both `Commit` and the `commitFrom` method, the `_timePoint` is a time-point-representing value that represents ordering of commitments in which a latter commitment will always have a _greater or equal value_ than a former commitment, such as `block.timestamp` or `block.number` or other time scale chosen by implementing contracts. -_Note_: For compliant contract that requires the `_timePoint` from next TX to be _strictly greater_ than a previous TX, `block.timestamp` and `block.number` are not reliable as two TX could co-exist in the same block resulting in the same `_timePoint` value. In such case, compliant contract is to take extra measures to enforce this strict-monotone-ness. For example, use a separate state variable in the contract to keep track of number of commits it receives, or reject any second/other TX that shares the same `block.timestamp` or `block.number`. - 6. The `extraData` is reserved for future behavior extension. If the `_from` is different from the TX signer, it is RECOMMENDED that compliant contract SHOULD validate signature for `_from`. For EOAs this will be validating its ECDSA signatures on chain. For smart contract accounts, it is RECOMMENDED to use [EIP-1271](./eip-1271.md) to validate the signatures. 7. One or more methods of a compliant contract MAY be used for reveal. @@ -121,6 +119,7 @@ function commit(bytes32 commitment, bytes calldata data) public { 6. Contract implementations MAY consider also include the ordering of commitment received to add restriction on the order of reveal TX transactions. 7. Cautious on the potential replay attack across different chain-ids or chains resulting from forks, in which case, a ChainId shall be included in the generation of commitment. 8. Proper time-gap is suggested if the purpose is to avoid front-running attack. +9. For compliant contract that requires the `_timePoint` from next TX to be _strictly greater_ than a previous TX, `block.timestamp` and `block.number` are not reliable as two TX could co-exist in the same block resulting in the same `_timePoint` value. In such case, compliant contract is to take extra measures to enforce this strict-monotone-ness. For example, use a separate state variable in the contract to keep track of number of commits it receives, or reject any second/other TX that shares the same `block.timestamp` or `block.number`. ## Copyright From a0665766b9e03eea863a09e5bdbe88068bc5e0a1 Mon Sep 17 00:00:00 2001 From: xinbenlv Date: Thu, 10 Nov 2022 18:37:45 -0800 Subject: [PATCH 095/113] Update EIP-5732: Fix typos (#5913) * Init a EIP for Commit Interface * Update file name * Add content * Update name * Add mentioning of chainid * Add discussion-to * Function parameter * Add abstract * Add voting example. * Update eip-5732.md * Update EIP-5732 with move to Last Call * Update wording * U * U * U * Update eip-5732.md * Update EIPS/eip-5732.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-5732.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-5732.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update suggested by @mattstam * Update eip-5732.md * Update EIPS/eip-5732.md Co-authored-by: Matt Stam * Update * Add co-author * update deadline * Update format * Update last-call deadline * Fix format * Add backwards compatibility * Move the security note out from specs * Fix typos Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> Co-authored-by: Matt Stam --- EIPS/eip-5732.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EIPS/eip-5732.md b/EIPS/eip-5732.md index 2aefdd359d006e..e208ec9edb1d9a 100644 --- a/EIPS/eip-5732.md +++ b/EIPS/eip-5732.md @@ -105,7 +105,7 @@ With this EIP it can be updated to function commit(bytes32 commitment, bytes calldata data) public { require(commitments[commitment] + maxCommitmentAge < now); commitments[commitment] = now; - emit Commit(...); + emit Commit(...); } ``` From 92a425d8072c3b3452ac392372cb1a379d0ce3df Mon Sep 17 00:00:00 2001 From: xinbenlv Date: Fri, 11 Nov 2022 09:42:06 -0800 Subject: [PATCH 096/113] Fix ERC165 identifier (#5915) --- EIPS/eip-5679.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/EIPS/eip-5679.md b/EIPS/eip-5679.md index 988d1b8f1714d4..988127a5bb524c 100644 --- a/EIPS/eip-5679.md +++ b/EIPS/eip-5679.md @@ -35,7 +35,7 @@ The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL **MUST** implement the following interface: ```solidity -// The EIP-165 identifier of this interface is 0xa73fd2a4 +// The EIP-165 identifier of this interface is 0xd0017968 interface IERC5679Ext20 { function mint(address _to, uint256 _amount, bytes calldata _data) external; function burn(address _from, uint256 _amount, bytes calldata _data) external; @@ -46,7 +46,7 @@ interface IERC5679Ext20 { **MUST** implement the following interface: ```solidity -// The EIP-165 identifier of this interface is 0x0346d398 +// The EIP-165 identifier of this interface is 0xcce39764 interface IERC5679Ext721 { function safeMint(address _to, uint256 _id, bytes calldata _data) external; function burn(address _from, uint256 _id, bytes calldata _data) external; @@ -57,7 +57,7 @@ interface IERC5679Ext721 { **MUST** implement the following interface: ```solidity -// The EIP-165 identifier of this interface is 0xdff2db76 +// The EIP-165 identifier of this interface is 0xf4cedd5a interface IERC5679Ext1155 { function safeMint(address _to, uint256 _id, uint256 _amount, bytes calldata _data) external; function safeMintBatch(address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external; From da8a809c7e483ed15b6d3f2596acfbe950c3caec Mon Sep 17 00:00:00 2001 From: Moody Salem Date: Sat, 12 Nov 2022 16:24:05 -0500 Subject: [PATCH 097/113] fix nit on the language of eip-1153 (#5911) * fix nit on the language of eip-1153 * fix linter errors * last linter error --- EIPS/eip-1153.md | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/EIPS/eip-1153.md b/EIPS/eip-1153.md index 8635ebea85e0f1..9ce8ac8620e26e 100644 --- a/EIPS/eip-1153.md +++ b/EIPS/eip-1153.md @@ -1,8 +1,8 @@ --- eip: 1153 title: Transient storage opcodes -author: Alexey Akhunov (@AlexeyAkhunov), Moody Salem (@moodysalem) description: Add opcodes for manipulating state that behaves identically to storage but is discarded after every transaction +author: Alexey Akhunov (@AlexeyAkhunov), Moody Salem (@moodysalem) discussions-to: https://ethereum-magicians.org/t/eip-transient-storage-opcodes/553 status: Review type: Standards Track @@ -12,6 +12,7 @@ requires: 2200, 3529 --- ## Abstract + This proposal introduces transient storage opcodes, which manipulate state that behaves identically to storage, except that transient storage is discarded after every transaction. In other words, the values of transient storage are never deserialized from storage or serialized to storage. Thus transient storage is cheaper since it never requires disk access. Transient storage is accessible to smart contracts via 2 new opcodes, `TLOAD` and `TSTORE`, where “T” stands for "transient:" ``` @@ -20,6 +21,7 @@ TSTORE (0xb4) ``` ## Motivation + Running a transaction in Ethereum can generate multiple nested frames of execution, each created by `CALL` (or similar) instructions. Contracts can be re-entered during the same transaction, in which case there are more than one frame belonging to one contract. Currently, these frames can communicate in two ways: via inputs/outputs passed via `CALL` instructions, and via storage updates. If there is an intermediate frame belonging to another untrusted contract, communication via inputs/outputs is not secure. Notable example is a reentrancy lock which cannot rely on the intermediate frame to pass through the state of the lock. Communication via storage (`SSTORE`/`SLOAD`) is costly. Transient storage is a dedicated and gas efficient solution to the problem of inter frame communication. Storage refunds accumulated due to inter frame communication are also limited to 20% of gas spent by a transaction due to [EIP-3529](./eip-3529.md) (introduced in the London hard fork). This greatly reduces the refunds for transiently-set storage slots in otherwise low-cost transactions. For example, in order to receive the full refund of one re-entrancy lock, the transaction must spend ~80k gas on other operations. @@ -27,9 +29,10 @@ Storage refunds accumulated due to inter frame communication are also limited to Language support could be added in relatively easy way. For example, in Solidity, a qualifier `transient` can be introduced (similar to the existing qualifiers `memory` and `storage`, and Java's own `transient` keyword with a similar meaning). Since the addressing scheme of `TSTORE` and `TLOAD` is the same as for `SSTORE` and `SLOAD`, code generation routines that exist for storage variables, can be easily generalised to also support transient storage. Potential use cases enabled or improved by this EIP include: + 1. Reentrancy lock 2. Constructor arguments loaded from the factory contract (for on-chain-computable CREATE2 addresses as in Uniswap V3) -3. Single transaction ERC20 approvals, e.g. `#approveAndCall(address callee, uint256 amount, bytes memory data)` +3. Single transaction [EIP-20](./eip-20.md) approvals, e.g. `#approveAndCall(address callee, uint256 amount, bytes memory data)` 4. More generic libraries that use callbacks, for example generalised sorting with functions `Less` and `Swap` defined. 5. Contracts that require control before and after method execution (e.g. via callbacks) 6. Shared memory (borrowed from early draft of similar EIP by @holiman). When implementing contract-proxies using `DELEGATECALL`, all direct arguments are relayed from the caller to the callee via the `CALLDATA`, leaving no room for meta-data between the proxy and the proxee. Also, the proxy must be careful about `storage` access to avoid collision with `target` `storage`-slots. Since `transient storage` would be shared, it would be possible to use `transient storage` to pass information between the `proxy` and the `target`. @@ -37,6 +40,7 @@ Potential use cases enabled or improved by this EIP include: These opcodes are more efficient to execute than the `SSTORE` and `SLOAD` opcodes because the original value never needs to be loaded from storage (i.e. is always 0). The gas accounting rules are also simpler, since no refunds are required. ## Specification + Two new opcodes are added to EVM, `TLOAD` (`0xb3`) and `TSTORE` (`0xb4`). Note that previous drafts of this EIP specified the values `0x5c` and `0x5d` for `TLOAD` and `TSTORE` respectively, but these have been modified so as not to conflict with other draft EIPs. They use the same arguments on stack as `SLOAD` (`0x54`) and `SSTORE` (`0x55`). @@ -57,19 +61,22 @@ When transient storage is used in the context of `DELEGATECALL` or `CALLCODE`, t If a frame reverts, all writes to transient storage that took place between entry to the frame and the return are reverted, including those that took place in inner calls. This mimics the behavior of persistent storage. -If the `TSTORE` opcode is called within the context of a `STATICCALL`, the call must revert. `TLOAD` is allowed within the context of a `STATICCALL`. +If the `TSTORE` opcode is called within the context of a `STATICCALL`, it will result in an exception instead of performing the modification. `TLOAD` is allowed within the context of a `STATICCALL`. ## Rationale + Another option to solve the problem of inter-frame communication is repricing the `SSTORE` and `SLOAD` opcodes to be cheaper for the transient storage use case. This has already been done as of [EIP-2200](./eip-2200.md). However, [EIP-3529](./eip-3529.md) reduced the maximum refund to only 20% of the transaction gas cost, which means the use of transient storage is severely limited. Another approach is to keep the refund counter for transient storage separate from the refund counter for other storage uses, and remove the refund cap for transient storage. However, that approach is more complex to implement and understand. For example, the 20% refund cap must be applied to the gas used _after_ subtracting the uncapped gas refund. Otherwise, the refund amount available subject to the 20% refund cap could be increased by executing transient storage writes. Thus it is preferable to have a separate mechanism that does not interact with the refund counter. Future hard forks can remove the complex refund behavior meant to support the transient storage use case, encouraging migration to contracts that are more efficient for the Ethereum clients to execute. -Relative cons of this transient storage EIP: +Relative cons of this transient storage EIP: + - Does not address transient usages of storage in existing contracts - New code in the clients - New concept for the yellow paper (more to update) Relative pros of this transient storage EIP: + - Transient storage opcodes are considered separately in protocol upgrades and not inadvertently broken (e.g. [EIP-3529](./eip-3529.md)) - Clients do not need to load the original value - No upfront gas cost to account for non-transient writes @@ -79,14 +86,17 @@ Relative pros of this transient storage EIP: - Future storage designs (e.g. Verkle tree) do not need to account for transient storage refunds ## Backwards Compatibility + This EIP requires a hard fork to implement. Since this EIP does not change behavior of any existing opcodes, it is backwards compatible with all existing smart contracts. ## Reference Implementation + Because the transient storage must behave identically to storage within the context of a single transaction with regards to revert behavior, it is necessary to be able to revert to a previous state of transient storage within a transaction. At the same time reverts are exceptional cases and loads, stores and returns should be cheap. A map of current state plus a journal of all changes and a list of checkpoints is recommended. This has the following time complexities: + - On entry to a call frame, a call marker is added to the list - `O(1)` - New values are written to the current state, and the previous value is written to the journal - `O(1)` - When a call exits successfully, the marker to the journal index of when that call was entered is discarded - `O(1)` @@ -208,6 +218,7 @@ contract TryDOS { ``` ## Security Considerations + `TSTORE` presents a new way to allocate memory on a node with linear cost. In other words, each TSTORE allows the developer to store 32 bytes for 100 gas, excluding any other required operations to prepare the stack. Given 30 million gas, the maximum amount of memory that can be allocated using TSTORE is: ``` @@ -228,7 +239,8 @@ However, if you only spend 1M gas allocating memory in each context, and make ca 30M gas * ~21,872 words / 1M gas * 32 bytes/word * 1MB / 2^20 bytes = ~20MB ``` -For smart contract developers, there are no security considerations for existing contracts because they do not contain the new `TSTORE` or `TLOAD` opcodes. New contracts that do use the `TSTORE` and `TLOAD` opcodes operate under all the same assumptions as with storage. This EIP introduces no additional mental overhead for the developer. In some cases, transient storage simplifies contracts in that contract transient storage does not need to be cleared at the end of every transaction, e.g. in the ERC20 temporary approvals use case. +For smart contract developers, there are no security considerations for existing contracts because they do not contain the new `TSTORE` or `TLOAD` opcodes. New contracts that do use the `TSTORE` and `TLOAD` opcodes operate under all the same assumptions as with storage. This EIP introduces no additional mental overhead for the developer. In some cases, transient storage simplifies contracts in that contract transient storage does not need to be cleared at the end of every transaction, e.g. in the [EIP-20](./eip-20.md) temporary approvals use case. ## Copyright + Copyright and related rights waived via [CC0](../LICENSE.md). From ab2f32c36e800705d82abdbdff3da9e8b734a0b8 Mon Sep 17 00:00:00 2001 From: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> Date: Sat, 12 Nov 2022 17:46:32 -0500 Subject: [PATCH 098/113] Update EIP-5000: Fix external link (#5918) --- EIPS/eip-5000.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EIPS/eip-5000.md b/EIPS/eip-5000.md index 1147dc4a76a8b8..6986c7c7a0c1bb 100644 --- a/EIPS/eip-5000.md +++ b/EIPS/eip-5000.md @@ -111,4 +111,4 @@ TBA ## Copyright -Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/). +Copyright and related rights waived via [CC0](../LICENSE.md). From 5a1335e18547f94fb9b2de73d61df050d6b5347c Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Sat, 12 Nov 2022 23:53:18 +0100 Subject: [PATCH 099/113] 5000: Fix complaints of the markdown linter (#5923) --- EIPS/eip-5000.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/EIPS/eip-5000.md b/EIPS/eip-5000.md index 6986c7c7a0c1bb..26804d486a18b9 100644 --- a/EIPS/eip-5000.md +++ b/EIPS/eip-5000.md @@ -41,6 +41,7 @@ def muldiv(x, y, z): else: return ((x * y) // z) % (2**256) ``` + The cost of the instruction is 8 gas (aka `mid`), the same as for `addmod` and `mulmod`. ## Rationale @@ -50,9 +51,11 @@ The cost of the instruction is 8 gas (aka `mid`), the same as for `addmod` and ` All the arithmetic instructions in EVM handle division or modulo 0 specially: the instructions return 0. We have decided to break consistency in order to provide a flexible opcode, which can be used to detect wrapping behaviour. Alternate options include: + - Returning a flag for wrapping - Returning two stack items, higher and lower order bits - Compute the higher order 256 bits in EVM: + ```solidity /// Returns `hi` such that `x × y = hi × 2**256 + mul(x, y)` function hob(uint x, uint y) returns (uint hi) { From 8a4b49b37828df1975724e3e4e059ef6288b77cf Mon Sep 17 00:00:00 2001 From: xinbenlv Date: Sat, 12 Nov 2022 16:35:10 -0800 Subject: [PATCH 100/113] Update eip-5604.md (#5924) --- EIPS/eip-5604.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/EIPS/eip-5604.md b/EIPS/eip-5604.md index fe372d8472121b..f07521ce8e421c 100644 --- a/EIPS/eip-5604.md +++ b/EIPS/eip-5604.md @@ -1,8 +1,8 @@ --- eip: 5604 title: NFT Lien -description: Extend EIP-721 to support liens -author: Zainan Victor Zhou (@xinbenlv), Allen Zhou , Alex Qin +description: Extend EIP-721 to support putting liens on NFT +author: Allen Zhou , Alex Qin , Zainan Victor Zhou (@xinbenlv) discussions-to: https://ethereum-magicians.org/t/creating-a-new-erc-proposal-for-nft-lien/10683 status: Draft type: Standards Track From fed7625be77f589752d1a10f4a8da7962f30ea50 Mon Sep 17 00:00:00 2001 From: xinbenlv Date: Sun, 13 Nov 2022 07:11:05 -0800 Subject: [PATCH 101/113] Update EIP-5732: Move to Final (#5919) * Move EIP-5732 to Final * Wording * Update requires * Tighten up grammar * Fix list formatting * Tighten security considerations * Remove random sublist Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> --- EIPS/eip-5732.md | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/EIPS/eip-5732.md b/EIPS/eip-5732.md index e208ec9edb1d9a..0828f88c2a39e0 100644 --- a/EIPS/eip-5732.md +++ b/EIPS/eip-5732.md @@ -4,12 +4,11 @@ title: Commit Interface description: A simple but general commit interface to support commit-reveal scheme. author: Zainan Victor Zhou (@xinbenlv), Matt Stam (@mattstam) discussions-to: https://ethereum-magicians.org/t/erc-5732-simple-commit-interface-to-support-commit-reveal-schemes/11115 -status: Last Call -last-call-deadline: 2022-11-13 +status: Final type: Standards Track category: ERC created: 2022-09-29 -requires: 165 +requires: 165, 1271 --- ## Abstract @@ -66,7 +65,7 @@ interface IERC_COMMIT_GENERAL { But there MUST be a way to supply an extra field of `secret_salt`, so that committer can later open the `secret_salt` in the reveal TX that exposes the `secret_salt`. The size and location of `secret_salt` is intentionally unspecified in this EIP to maximize flexibility for integration. -8. Compliant contract is RECOMMENDED to implement [EIP-165](./eip-165.md). +8. It is RECOMMENDED for compliant contracts to implement [EIP-165](./eip-165.md). ## Rationale @@ -112,14 +111,14 @@ function commit(bytes32 commitment, bytes calldata data) public { ## Security Considerations 1. Do not use the reference implementation in production. It is just for demonstration purposes. -2. The reveal transactions, parameters, especially `secret_salt` MUST be kept in secrecy before revealing to achieve privacy. -3. The length of `secret_salt` cryptographically long enough and the way to generate a `secret_salt` shall be cryptographically safe. -4. User shall NEVER reuse a used `secret_salt`. It's RECOMMENDED for client application to warn User for reusing a secret_salt. -5. Contract implementations SHOULD consider deleting the commitment of a given sender immediately to reduce chance of replay attack or re-entry attack by adversaries. -6. Contract implementations MAY consider also include the ordering of commitment received to add restriction on the order of reveal TX transactions. -7. Cautious on the potential replay attack across different chain-ids or chains resulting from forks, in which case, a ChainId shall be included in the generation of commitment. -8. Proper time-gap is suggested if the purpose is to avoid front-running attack. -9. For compliant contract that requires the `_timePoint` from next TX to be _strictly greater_ than a previous TX, `block.timestamp` and `block.number` are not reliable as two TX could co-exist in the same block resulting in the same `_timePoint` value. In such case, compliant contract is to take extra measures to enforce this strict-monotone-ness. For example, use a separate state variable in the contract to keep track of number of commits it receives, or reject any second/other TX that shares the same `block.timestamp` or `block.number`. +2. The reveal transactions and parameters, especially `secret_salt`, MUST be kept secret before they are revealed. +3. The length of `secret_salt` must be cryptographically long enough and the random values used to generate `secret_salt` must be cryptographically safe. +4. Users must NEVER reuse a used `secret_salt`. It's recommended for client applications to warn users who attempt to do so. +5. Contract implementations should consider deleting the commitment of a given sender immediately to reduce the chances of a replay attack or re-entry attack. +6. Contract implementations may consider including the ordering of commitment received to add restrictions on the order of reveal transactions. +7. There is potential for replay attacks across different chainIds or chains resulting from forks. In these cases, the chainId must be included in the generation of commitment. For applications with a higher risk of replay attacks, implementors should consider battle-tested and cryptographically-secure solutions such as [EIP-712](./eip-712.md) to compose commitments before creating their own new solution. +8. Proper time gaps are suggested if the purpose is to avoid frontrunning attacks. +9. For compliant contract that requires the `_timePoint` from the next transaction to be _strictly greater_ than that of any previous transaction, `block.timestamp` and `block.number` are not reliable as two transactions could co-exist in the same block resulting in the same `_timePoint` value. In such case, extra measures to enforce this strict monotonicity are required, such as the use of a separate sate variable in the contract to keep track of number of commits it receives, or to reject any second/other TX that shares the same `block.timestamp` or `block.number`. ## Copyright From 345566245f29ad31ca33ff3e943f794f586914b7 Mon Sep 17 00:00:00 2001 From: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> Date: Sun, 13 Nov 2022 12:17:52 -0500 Subject: [PATCH 102/113] Update README: Clarify incomplete draft behaviour (#5925) --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index d3b1ee0834e842..cb705ea6fc6b4f 100644 --- a/README.md +++ b/README.md @@ -19,9 +19,7 @@ The goal of the EIP project is to document standardized protocols for Ethereum c The canonical URL for an EIP that has achieved draft status at any point is at . For example, the canonical URL for EIP-1 is . -Please consider anything which is not published on as a working paper. - -And please consider anything published at with a status of "draft" as an incomplete draft. +Consider any document not published at as a working paper. Additionally, consider published EIPs with a status of "draft", "review", or "last call" to be incomplete drafts, and note that their specification is likely to be subject to change. ## Automerger From 7e6ecdab7c4ee4902ecf2f3963ba2b685b1a7120 Mon Sep 17 00:00:00 2001 From: coderfengyun Date: Mon, 14 Nov 2022 06:33:00 +0800 Subject: [PATCH 103/113] Update EIP-5489: Move to review (#5736) * MOD: eip-5489 to review * Update EIPS/eip-5489.md Co-authored-by: Sam Wilson <57262657+SamWilsn@users.noreply.github.com> * Update EIPS/eip-5489.md Co-authored-by: xinbenlv * MOD: update introduction * FIX: lint * Update EIPS/eip-5489.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-5489.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-5489.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-5489.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * FIX: lint * DEL: hnft new URI schema Co-authored-by: Sam Wilson <57262657+SamWilsn@users.noreply.github.com> Co-authored-by: xinbenlv Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> --- EIPS/eip-5489.md | 50 ++++++++++++++++++++++++++++++++++++------------ 1 file changed, 38 insertions(+), 12 deletions(-) diff --git a/EIPS/eip-5489.md b/EIPS/eip-5489.md index 0586d78f447452..32b15663a83f87 100644 --- a/EIPS/eip-5489.md +++ b/EIPS/eip-5489.md @@ -1,10 +1,10 @@ --- eip: 5489 title: NFT Hyperlink Extension -description: NFT Hyperlink Extension tries to make NFTs as decentralized medium for Web3. +description: NFT Hyperlink Extension embeds hyperlinks onto NFTs, allowing users to click any hNFT and be transported to any url set by the owner. author: IronMan_CH (@coderfengyun) discussions-to: https://ethereum-magicians.org/t/eip-5489-nft-hyperlink-extension/10431 -status: Draft +status: Review type: Standards Track category: ERC created: 2022-08-16 @@ -15,24 +15,21 @@ requires: 165, 721 This EIP proposes a new extension for NFTs (non-fungible token, aka [EIP-721](./eip-721.md)): nft-hyperlink-extention (hNFT), embedding NFTs with hyperlinks, referred to as “hNFTs”. As owners of hNFTs, users may authorize a URL slot to a specific address which can be either an externally-owned account (EOA) or a contract address and hNFT owners are entitled to revoke that authorization at any time. The address which has slot authorization can manage the URL of that slot. -Industries like advertisement can put advertisement materials on these hyperlink slots. ## Motivation -As NFTs attract more and more user attention, NFTs have the potential to evolve towards becoming the decentralized medium for Web3. But there are some missing core components, such as how to attach, edit and exhibit highly customized information on this medium (NFT). For example, end users can’t attach extra rich texts, videos or images on NFTs, also there’s no way to exhibit these rich-content attachments on NFTs. Industries like advertisement eagerly look forward this kind of rich-content attachment ability on NFTs. -This proposal try to answer this question, it tries to use hyperlink as the main form of “highly customized attachment on NFT”, and also resolve how to attach, edit and exhibit these attachments on NFTs. +As NFTs attract more attention, they have the potential to become the primary medium of Web3. Currently, end users can’t attach rich texts, videos, or images to NFTs, and there’s no way to render these rich-content attachments. Many industries eagerly look forward to this kind of rich-content attachment ability. Attaching, editing, and displaying highly customized information can usefully be standardized. + +This EIP uses hyperlinks as the aforementioned form of “highly customized attachment on NFT”, and also specifies how to attach, edit, and display these attachments on NFTs. ## Specification The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119. -### New URI format - -This EIP adds a new URI scheme, "hnft://". This URI scheme enables redirecting or connecting activity between hNFTs. - ### Interface #### `IERC5489` + ```solidity // SPDX-License-Identifier: CC0-1.0 pragma solidity ^0.8.0; @@ -89,7 +86,9 @@ interface IERC5489 { ) external; /** - * @dev + * @dev Throws if `tokenId` is not a valid NFT. URIs are defined in RFC 3986. + * The URI MUST point to a JSON file that confirms to the "EIP5489 Metadata JSON schema". + * * returns the latest uri of an slot on a token, which is indicated by `tokenId`, `slotManagerAddr` */ function getSlotUri(uint256 tokenId, address slotManagerAddr) @@ -118,29 +117,56 @@ The `SlotUriUpdated` event MUSt be emitted when a slot's URI is changed. The `supportInterface` method MUST return true when called with `0x8f65987b`. ### Authentication + The `authorizeSlotTo`, `revokeAuthorization`, and `revokeAllAuthorizations` functions are authenticated if and only if the message sender is the owner of the token. ## Rationale ### Extends NFT with hyperlinks + URIs are used to represent the value of slots to ensure enough flexibility to deal with different use cases. ### Authorize slot to address + We use addresses to represent the key of slots to ensure enough flexibility to deal with all use cases. -### New URI format to enable redirect between hNFTs -This extension adds a new URI scheme, `hnft://` so that the URI pointed to by the NFT is resolvable. +### Metadata JSON schema + +```json +{ + "title": "AD Metadata", + "type": "object", + "properties": { + "icon": { + "type": "string", + "description": "A URI pointing to a resource with mime type image/* representing the slot's occupier. Consider making any images at a width between 48 and 1080 pixels and aspect ration between 1.91:1 and 4:5 inclusive. Suggest to show this as an thumbnail of the target resource" + }, + "description": { + "type": "string", + "description": "A paragraph which briefly introduce what is the target resource" + }, + "target": { + "type": "string", + "description": "A URI pointing to target resource, sugguest to follow 30X status code to support more redirections, the mime type and content rely on user's setting" + } + } +} +``` ## Backwards Compatibility + As mentioned in the specifications section, this standard can be fully EIP-721 compatible by adding an extension function set. In addition, new functions introduced in this standard have many similarities with the existing functions in EIP-721. This allows developers to easily adopt the standard quickly. ## Reference Implementation + You can find an implementation of this standard in [`ERC5489.sol`](../assets/eip-5489/contracts/ERC5489.sol). ## Security Considerations + No security considerations were found. ## Copyright + Copyright and related rights waived via [CC0](../LICENSE.md). From 81811deb29fc903308839eaeada777786135a396 Mon Sep 17 00:00:00 2001 From: Kosala Hemachandra <10602065+kvhnuke@users.noreply.github.com> Date: Sun, 13 Nov 2022 14:36:43 -0800 Subject: [PATCH 104/113] Update EIP-5749: Move to Review (#5912) * chore: set to Review * fix: lint * fix: lint --- EIPS/eip-5749.md | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/EIPS/eip-5749.md b/EIPS/eip-5749.md index 1fcff16d33124a..1a04f509028320 100644 --- a/EIPS/eip-5749.md +++ b/EIPS/eip-5749.md @@ -4,7 +4,7 @@ title: The 'window.evmproviders' object description: Add 'window.evmproviders' and suggest the eventual removal of 'window.ethereum' author: Kosala Hemachandra (@kvhnuke), Brett Kolodny (@brettkolodny) discussions-to: https://ethereum-magicians.org/t/eip-5749-deprecate-window-ethereum/11195 -status: Draft +status: Review type: Standards Track category: Interface created: 2022-10-04 @@ -13,15 +13,17 @@ requires: 1193 ## Abstract + A Javascript Ethereum Provider interface injection that will allow for the interoperability of multiple browser wallets at the same time. Replacing `window.ethereum` with `window.evmproviders` is a simple solution that will provide multiple benefits including: improving user experience, encouraging innovation in the space, removing race conditions and a 'winner-takes-most' environment, and lowering barriers to user adoption. ## Motivation + At present, `window.ethereum` is the prevailing method by which Ethereum-compatible applications interact with injected wallets. This originated with Mist Wallet in 2015 to interact with other applications. With the proliferation of both applications and wallets, `window.ethereum` has unintended negative consequences: - `window.ethereum` only permits one wallet to be injected at a time, resulting in a race condition between two or more wallets. This creates an inconsistent connection behavior that makes having and using more than one browser wallet unpredictable and impractical. The current solution is for wallets to inject their own namespaces, but this is not feasible as every application would need to be made aware of any wallet that might be used. - The aforementioned race condition means users are disincentivized to experiment with new wallets. This creates a 'winner-takes-most' wallet market across EVM chains which forces application developers to optimize for a particular wallet experience. - The 'winner-takes-most' wallet environment that results from the `window.ethereum` standard hinders innovation because it creates a barrier to adoption. New entrants into the space have difficulty gaining traction against legacy players because users can have no more than one injected wallet. With new entrants crowded out, legacy wallet providers are put under little pressure to innovate. -- Wallets continue to be the most fundamental tool for interacting with blockchains. A homogeneous wallet experience in Ethereum and EVM chains risks stunting UX improvement across the ecosystem and will allow other ecosystems that are more encouraging of competition and innovation to move ahead. +- Wallets continue to be the most fundamental tool for interacting with blockchains. A homogeneous wallet experience in Ethereum and EVM chains risks stunting UX improvement across the ecosystem and will allow other ecosystems that are more encouraging of competition and innovation to move ahead. - Some wallets that currently use `window.ethereum` as of August, 2022. Currently a user will have inconsistent behavior if they use multiple of these wallets in a single browser. - Metamask - Coinbase wallet @@ -32,6 +34,7 @@ At present, `window.ethereum` is the prevailing method by which Ethereum-compati Replacing `window.ethereum` with `window.evmproviders` will allow solutions such as web3modal and web3onboard to only display all injected wallets the user has installed. This will simpify the UX and remove race conditions between wallet providers in case multiple wallets are installed. Over time, as `window.evmproviders` supplants the current standard and removes barriers to choice, we can hope to see a wallet landscape more reflective of user preference. ## Specification + The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC 2119. ### `window.evmproviders={}` @@ -79,17 +82,19 @@ key is RECOMMENDED to be the name of the extension By adopting an object for EIP-1193 compliant providers we can have multiple different ethereum/evm compatible wallets coexists in the same browser. This will prevent race conditions and inconsistent behaviors. ## Rationale -By introducing `ProviderInfo` type web onboarding libraries such as + +By introducing `ProviderInfo` type web onboarding libraries such as Web3Modal Web3React Web3Onboard -can easily grab the necessary information to populate their popup window to choose the wallet. +can easily grab the necessary information to populate their popup window to choose the wallet. -The name `evmproviders` was chosen in order to be inclusive of other evm-compliant chains. +The name `evmproviders` was chosen in order to be inclusive of other evm-compliant chains. -**data:image/svg+xml;** svg data uri was chosen since it is easier to be modified if the application requires for example different size for the image. +**data:image/svg+xml;** svg data uri was chosen since it is easier to be modified if the application requires for example different size for the image. ## Backwards Compatibility + This EIP doesn't require supplanting `window.ethereum`, so it doesn't directly break existing applications. However, the recommended behavior of eventually supplanting `window.ethereum` would break existing applications that rely on it. @@ -111,9 +116,10 @@ const allproviders = Object.values(window.evmproviders) ## Security Considerations -The security considerations of EIP-1193 apply for this EIP. +The security considerations of EIP-1193 apply for this EIP. -The use of SVG images introduces a cross-site scripting risk as they can include JavaScript code. Applications and libraries must render SVG images using the `` tag to make sure no JS executions can happen. +The use of SVG images introduces a cross-site scripting risk as they can include JavaScript code. Applications and libraries must render SVG images using the `` tag to make sure no JS executions can happen. ## Copyright + Copyright and related rights waived via [CC0](../LICENSE.md). From 6abf9b4949664297a98a1127d131fbe81bef4e0e Mon Sep 17 00:00:00 2001 From: Kyle Den Hartog Date: Mon, 14 Nov 2022 14:17:49 +1300 Subject: [PATCH 105/113] Add EIP-5593: Restrict Web3 Provider Object API Injection (#5593) * add Restrict Web3 Provider Object API Injection * rename to EIP using PR number * add required EIP 1193 * Update EIPS/eip-5593.md Co-authored-by: xinbenlv * Update EIPS/eip-5593.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-5593.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-5593.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Update EIPS/eip-5593.md Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> * Delete duplicate file * Create W3 license * Create Media Capture and Streams.pdf * That failed * add optional allow attribute usage for 3P iframes * update normative restrictions for provider objects * update test cases with better descriptions * update link to normative definition of potentially trustworthy origin * address subdomain test case * update abstract and motivation for readability and to cite a specific attack * modify normative statement about private tab usage * rename EIP to better reference EIP-1193 terminology * update links to use anchor links * add @thypon as an author who contributed to intial review and implementation * edit language to clarify when to inject ETH Provider * update links to use markdown reference links * update 3p suborigin iframe case to accurately reflect implementation * remove optional test cases * add privacy considerations section * editorial update about configuring potentially trustworthy origins * rename 3P to third-party * change CAIP to EIP text * remove external links * add authors note about linking issue * add links to Github PRs about reference implementations * editorial updates Co-authored-by: Sam Wilson <57262657+SamWilsn@users.noreply.github.com> * address dictator eipw bot's commands * remove assets folder for EIP-5593 * Move privacy considerations to subheading of security considerations, and move author's note to subheading of abstract * Oops, fix order * Fix false positive * remove reference implementation links Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> Co-authored-by: xinbenlv Co-authored-by: Pandapip1 <45835846+Pandapip1@users.noreply.github.com> Co-authored-by: Sam Wilson <57262657+SamWilsn@users.noreply.github.com> --- EIPS/eip-5593.md | 87 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 EIPS/eip-5593.md diff --git a/EIPS/eip-5593.md b/EIPS/eip-5593.md new file mode 100644 index 00000000000000..3f68a16f430d04 --- /dev/null +++ b/EIPS/eip-5593.md @@ -0,0 +1,87 @@ +--- +eip: 5593 +title: Restrict Ethereum Provider API Injection +description: Wallet guidance for restricting Ethereum Provider API access to secure contexts for improved privacy and security for wallet users. +author: Yan Zhu (@diracdeltas), Brian R. Bondy (@bbondy), Andrea Brancaleoni (@thypon), Kyle Den Hartog (@kdenhartog) +discussions-to: https://ethereum-magicians.org/t/rfc-limiting-provider-object-injection-to-secure-contexts/10670 +status: Draft +type: Standards Track +category: Interface +created: 2022-09-05 +requires: 1193 +--- + +## Abstract + +Historically the web platform has had a notion of “powerful” APIs like those defined in W3C's Geolocation specification and W3C's Mediastreams specification, which are subject to additional security restrictions such as those defined by W3C's secure contexts specification. Since the Ethereum Provider APIs allow dApp websites to request access to sensitive user data and to request use of user funds, new Ethereum Provider APIs generally should align to the security considerations defined by W3C's Secure Context specification in order to better protect the users data and users funds managed via the web. + +### Author's Note + +Unfortunately, because of a difference in interpretations by EIP editors of RFC 2119 terminology around linking in [EIP-1](./eip-1.md), the authors cannot directly link to other W3C specifications which this EIP builds upon. The author's attempted to provide as much context as possible within the text while complying with the editor bot in order to get this merged. If this policy is updated or further clarified before this EIP reaches final call in the future this EIP will be updated with links. + +## Motivation + +Wallets are oftentimes maintaining security and safety of users' funds that can be equivalent to large portions of money. For this reason, it's a good idea to restrict access to the Ethereum Provider APIs to align it with other powerful APIs on the web platform. This will assist in reducing the surface area that attacks can be conducted to access users funds or data. Additionally, by adding in restrictions we're reducing the surface area that malicious web pages could fingerprint the user via the Ethereum Provider APIs providing some additional privacy benefits. An example of a specific attack that's avoided by this is one where a malicious advertisement is loaded on a legitimate dApp that attempts to interact with a users wallet to maliciously request the user to access funds. With this EIP implemented the advertisement frame would be considered a third-party iframe and therefore would not have the Ethereum Provider API injected into it's sub frame because it's not a secure context. + +## Specification + +The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC 2119. + +### Restrictions for providers + +The provider objects, e.g. `window.ethereum`, are expected to only inject the Ethereum Provider APIs in secure context when conforming with this specification. The following restrictions are REQUIRED for conformant wallets: + +- Provider objects MAY be accessible in private (incognito) windows. +- The origin MUST be a "potentially trustworthy origin" (defined in W3C's Secure Contexts specification in section 3.1) to have access to `window.ethereum`. This can be checked using `window.isSecureContext`, including inside iframes. + - Secure contexts include sites that are served from HTTPS but also HTTP `localhost`. + - The User Agent implementation MAY also support configured [potentially trustworthy origins] that would normally not be considered trustworthy if the user configures their User Agent to do so. See section 7.2 titled "Development Environments" of W3C's Secure Contexts specification for additional details. For example, in Chromium based User Agents this is done via the `chrome://flags/#unsafely-treat-insecure-origin-as-secure` flag. +- By default the Ethereum Provider APIs MUST NOT be exposed to third-party iframes. +- `window.ethereum` MUST be `undefined` in an iframe where `window.isSecureContext` returns `false` in that iframe. +- If the iframe is a third party to the top-level secure origin, it SHOULD be blocked. +- If the iframe is first-party to the top-level origin AND the `sandbox` attribute is set on the iframe, the provider object MUST be blocked. If the `sandbox` attribute is set to `sandbox="allow-same-origin"` it MUST be injected for a first party frame. + - Note `"allow-same-origin"` does nothing if the iframe is third-party. The case of the third party iframe is dictated by the usage of the `allow` attribute and the Permissions API as defined in the rule above. + +## Rationale + +By limiting the capabilities of where the Ethereum Provider APIs are being injected we can reduce the surface area of where attacks can be executed. Given the sensitivity of data that's passed to the Ethereum Provider APIs some basic levels of authentication and confidentiality should be met in order to ensure that request data is not being intercepted or tampered with. While there have been attempts to [limit request access via the wallet](./eip-2255.md) interface itself, there have not been limitations that have been set to where these Ethereum Provider APIs are expected to be or not be injected. Since the secure contexts web platform API is a well developed boundary that's been recommended by W3C and the fact that the Ethereum Provider APIs are extending the traditional web platform APIs, no other alternative solutions have been considered in order to extend current established prior art. + + +## Backwards Compatibility + +Wallet extensions SHOULD consider adding a "developer mode" toggle via a UX so that dApp developers have the capability to disable the insecure context (http) check for the `http://localhost:` origin only in the event that localhost does not return `true` for secure context. See section 5.2 of W3C's Secure Context specification for more details. This will allow dApp developers to be able to continue to host dApps on the localhost origin if a User Agent has chosen to not already consider localhost a secure context. All major User Agent implementations tested do consider localhost a secure context already. This toggle MUST be set to disabled by default. + +## Test Cases + +### Required Test Cases + +- Top level `http://a.com` -> blocked (insecure/top level) +- Top level `https://a.com` -> allowed +- Top level `https://a.com` with `