-
Notifications
You must be signed in to change notification settings - Fork 5.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Smart Non Fungible Token (SmartNFT) #4519
Conversation
Hi! I'm a bot, and I wanted to automerge your PR, but couldn't because of the following issue(s): (pass) eip-4519.md
(pass) assets/eip-4519/ESP32_Firmware/main.cpp
(pass) assets/eip-4519/ESP32_Firmware/readme.md
(pass) assets/eip-4519/PoC_SmartNFT/ERC721_interface.sol
(pass) assets/eip-4519/PoC_SmartNFT/PoC_SmartNFT.sol
(pass) assets/eip-4519/PoC_SmartNFT/README.md
(pass) assets/eip-4519/PoC_SmartNFT/SmartNFT_interface.sol
(pass) assets/eip-4519/images/Fig5_rev.png
(pass) assets/eip-4519/images/Figure1.png
(pass) assets/eip-4519/images/Figure2.jpg
(pass) assets/eip-4519/images/Figure3.jpg
(pass) assets/eip-4519/images/Figure4.jpg
(fail) assets/eip-4519/sensors-21-03119.pdf
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi! I wasn't able to fully dig into your EIP at this time, but did a quick scan and left some suggestions.
EIPS/eip-4519.md
Outdated
There are nowadays many smart assets, like IoT devices, that can interact actively with other blockchain participants, that is, they can have an Ethereum account. Hence, we propose the SmartNFTs, which have the attribute "asset" to represent the address associated with the physical smart asset. Besides, a smart asset is not only a possession of an owner but also an active agent that obeys to a user to carry out certain tasks in an application. Hence, the SmartNFTs have the NFT attribute "user", which is the address of the user of the smart asset. In order to represent the secure dynamic activity of the smart asset, six more attributes are proposed: "timestamp", "timeout", "state", "hashK_OA", "hashK_UA", and "dataEngage". The attribute "timestamp" registers in the blockchain whenever the smart asset checks it is bound to its token. The attribute "timeout" is the maximum delay time established for the asset to prove again the bond. Token "state" is included to trace the operating mode of the smart asset while "hashK_OA", "hashK_UA", and "dataEngage" are public data added to trace if secure communication channels are established between the smart asset and its owner and user. SmartNFTS extend ERC-721 NFTs, which are designed to represent passive assets, which only have an owner that owns the token, can transfer ownership, and can approve others to act in its name. | ||
|
||
## Specification | ||
This kind of non-fungible token is designed to represent a secure smart asset with the capacity of generating its own account and, hence, interacting with Ethereum chain. Besides, this SmartNFT can assign the token to a user and allows the establishment of secure communication channels with the owner and user. The following attributes are proposed for the token: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This kind of non-fungible token is designed to represent a secure smart asset with the capacity of generating its own account and, hence, interacting with Ethereum chain. Besides, this SmartNFT can assign the token to a user and allows the establishment of secure communication channels with the owner and user. The following attributes are proposed for the token: |
Co-authored-by: Pandapip1 <[email protected]>
Bot failure logged here: ethereum/EIP-Bot#90 Manually merging. |
/// @param _tokenId is the tokenID of the SmartNFT bound to the asset. | ||
/// @param _dataEngagement is the public data proposed by the owner for the agreement of the shared key. | ||
/// @param _hashK_O is the hash of the secret proposed by the owner to share with the asset. | ||
function startOwnerEngagement(uint256 _tokenId, uint256 _dataEngagement, uint256 _hashK_O) external; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add keyword "payable"
/// the token with hashK_A. If they are equal then the state of the token changes to "engagedWithOwner", dataEngagement is set to 0, | ||
/// and the event "OwnerEngaged" is emitted. | ||
/// @param _hashK_A is the hash of the secret generated by the asset to share with the owner. | ||
function ownerEngagement(uint256 _hashK_A) external; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add keyword "payable"
/// @param _tokenId is the tokenID of the SmartNFT bound to the asset. | ||
/// @param _dataEngagement is the public data proposed by the user for the agreement of the shared key. | ||
/// @param _hashK_U is the hash of the secret proposed by the user to share with the asset. | ||
function startUserEngagement(uint256 _tokenId, uint256 _dataEngagement, uint256 _hashK_U) external; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add keyword "payable"
/// 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. | ||
function userEngagement(uint256 _hashK_A) external; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add keyword "payable"
/// "addressUser" to "_addressUser". | ||
/// @param _tokenId is the tokenID of the SmartNFT bound to the asset. | ||
/// @param _addressUser is the address of the new user. | ||
function setUser(uint256 _tokenId, address _addressUser) external; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Add keyword "payable"
This EIP proposes the attributes timestamp (to register in the blockchain whenever the physical asset checks the tie with its token) and timeout (to register the maximum delay time established for the physical asset to prove again the tie). These attributes avoid a malicious owner or user could use the asset endlessly. | ||
|
||
**ERC-721-based** | ||
The [ERC-721](./eip-712.md) is a strong foundation for any NTF, nevertheless Ethereum addresses of assets and users, and authentication and key exchange processes are not considered. This EIP proposes an update of the [ERC-721](./eip-712.md) respecting backward compatibility. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
change (./eip-712.md) to (./eip-721.md).
* Add files via upload * Create README.md * Add files via upload * Delete README.md * Update eip_SmartNFT.md * Update eip_SmartNFT.md * Update eip_SmartNFT.md * Create ERC721_interface.sol * Create PoC_SmartNFT.sol * Create SmartNFT_Interface.sol * Create README.md * Update README.md * Update and rename eip_SmartNFT.md to eip_4519.md * Create README.md * Delete assets/eip_4519/proof_of_comcept directory * Create README.md * Add files via upload * Delete assets/eip_4519/PoC_SmartNFT directory * Create README.md * Create ERC721_interface.sol * Create PoC_SmartNFT.sol * Create SmartNFT_iInterface.sol * Create README.md * Add files via upload * Delete assets/eip_SmartNFT directory * Update and rename eip_4519.md to eip-4519.md * Update eip-4519.md * Update EIPS/eip-4519.md Co-authored-by: William Schwab <[email protected]> * Update EIPS/eip-4519.md Co-authored-by: William Schwab <[email protected]> * Update EIPS/eip-4519.md Co-authored-by: mr.yalamanchi <[email protected]> * Update EIPS/eip-4519.md Co-authored-by: mr.yalamanchi <[email protected]> * Update EIPS/eip-4519.md Co-authored-by: mr.yalamanchi <[email protected]> * Update EIPS/eip-4519.md Co-authored-by: lightclient <[email protected]> * Update EIPS/eip-4519.md Co-authored-by: lightclient <[email protected]> * Update EIPS/eip-4519.md Co-authored-by: lightclient <[email protected]> * Update EIPS/eip-4519.md Co-authored-by: lightclient <[email protected]> * Update EIPS/eip-4519.md Co-authored-by: lightclient <[email protected]> * Update EIPS/eip-4519.md * Update assets/eip-4519/PoC_SmartNFT/PoC_SmartNFT.sol * Update EIPS/eip-4519.md * Update assets/eip-4519/PoC_SmartNFT/PoC_SmartNFT.sol * Update EIPS/eip-4519.md * Update EIPS/eip-4519.md * Update EIPS/eip-4519.md * Update EIPS/eip-4519.md * Update EIPS/eip-4519.md * Update EIPS/eip-4519.md * Update EIPS/eip-4519.md * Update EIPS/eip-4519.md * Delete README.md * Update EIPS/eip-4519.md Co-authored-by: lightclient <[email protected]> * Update EIPS/eip-4519.md * Update eip-4519.md * Update README.md * Update EIPS/eip-4519.md Co-authored-by: RosarioArjona <[email protected]> * Add files via upload * Update EIPS/eip-4519.md * Update assets/eip-4519/PoC_SmartNFT/PoC_SmartNFT.sol * Update EIPS/eip-4519.md * Update EIPS/eip-4519.md * Update EIPS/eip-4519.md * Update EIPS/eip-4519.md * Update EIPS/eip-4519.md * Update EIPS/eip-4519.md * Update EIPS/eip-4519.md * Update assets/eip-4519/PoC_SmartNFT/PoC_SmartNFT.sol * Update assets/eip-4519/PoC_SmartNFT/README.md * Update assets/eip-4519/PoC_SmartNFT/SmartNFT_iInterface.sol * Delete Figure4.jpg * Add files via upload * Delete Figure4.jpg * Add files via upload * Update EIPS/eip-4519.md Co-authored-by: lightclient <[email protected]> * Update EIPS/eip-4519.md Co-authored-by: lightclient <[email protected]> * Update and rename SmartNFT_iInterface.sol to SmartNFT_Interface.sol * Update EIPS/eip-4519.md * Update assets/eip-4519/ESP32_Firmware/main.cpp * Update assets/eip-4519/ESP32_Firmware/main.cpp * Update assets/eip-4519/ESP32_Firmware/main.cpp * Rename SmartNFT_Interface.sol to SmartNFT_interface.sol * Update assets/eip-4519/PoC_SmartNFT/README.md * Update eip-4519.md * Apply suggestions from code review Co-authored-by: Sam Wilson <[email protected]> * Update EIPS/eip-4519.md * Add files via upload * Update eip-4519.md * Update EIPS/eip-4519.md * Update EIPS/eip-4519.md * Update EIPS/eip-4519.md * Update eip-4519.md * Update eip-4519.md * Update ERC721_interface.sol * Update PoC_SmartNFT.sol * Update SmartNFT_interface.sol * Update README.md * Update EIPS/eip-4519.md Co-authored-by: Pandapip1 <[email protected]> * Update eip-4519.md Co-authored-by: William Schwab <[email protected]> Co-authored-by: mr.yalamanchi <[email protected]> Co-authored-by: lightclient <[email protected]> Co-authored-by: RosarioArjona <[email protected]> Co-authored-by: Sam Wilson <[email protected]> Co-authored-by: Pandapip1 <[email protected]>
The novelty introduced in this EIP is the proposal of smart Non-Fungible Tokens (NFTs), named as SmartNFTs, to represent smart assets such as IoT devices, which are physical smart assets. Smart assets can have a blockchain account (BCA) address to participate actively in the blockchain transactions, they are also identified as the utility of a user, they can establish secure communication channels with owners and users, and they operate dynamically with several operating modes associated with their token states. A SmartNFT is physically bound to a smart asset, for example an IoT device, because the device is the only one able to generate its BCA address from its private key. The physical asset is the only one in possesion of its private key. This can be ensured, for example, if the IoT device does not store the private key but uses a Physical Unclonable Function (PUF) that allows recovering its private key. SmartNFTs extend ERC-721 non-fungible tokens (which only allow representing assets by a unique identifier, as a possession of an owner).
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.