Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Smart Non Fungible Token (SmartNFT) #4519

Merged
merged 97 commits into from
May 26, 2022
Merged

Conversation

Hardblock-IMSE-CNM
Copy link
Contributor

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.

@eth-bot
Copy link
Collaborator

eth-bot commented Dec 3, 2021

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

classification
updateEIP
  • passed!

(pass) assets/eip-4519/ESP32_Firmware/main.cpp

classification
ambiguous
  • file assets/eip-4519/ESP32_Firmware/main.cpp is associated with EIP 4519; because there are also changes being made to EIPS/eip-4519.md all changes to corresponding assets are also allowed

(pass) assets/eip-4519/ESP32_Firmware/readme.md

classification
ambiguous
  • file assets/eip-4519/ESP32_Firmware/readme.md is associated with EIP 4519; because there are also changes being made to EIPS/eip-4519.md all changes to corresponding assets are also allowed

(pass) assets/eip-4519/PoC_SmartNFT/ERC721_interface.sol

classification
ambiguous
  • file assets/eip-4519/PoC_SmartNFT/ERC721_interface.sol is associated with EIP 4519; because there are also changes being made to EIPS/eip-4519.md all changes to corresponding assets are also allowed

(pass) assets/eip-4519/PoC_SmartNFT/PoC_SmartNFT.sol

classification
ambiguous
  • file assets/eip-4519/PoC_SmartNFT/PoC_SmartNFT.sol is associated with EIP 4519; because there are also changes being made to EIPS/eip-4519.md all changes to corresponding assets are also allowed

(pass) assets/eip-4519/PoC_SmartNFT/README.md

classification
ambiguous
  • file assets/eip-4519/PoC_SmartNFT/README.md is associated with EIP 4519; because there are also changes being made to EIPS/eip-4519.md all changes to corresponding assets are also allowed

(pass) assets/eip-4519/PoC_SmartNFT/SmartNFT_interface.sol

classification
ambiguous
  • file assets/eip-4519/PoC_SmartNFT/SmartNFT_interface.sol is associated with EIP 4519; because there are also changes being made to EIPS/eip-4519.md all changes to corresponding assets are also allowed

(pass) assets/eip-4519/images/Fig5_rev.png

classification
ambiguous
  • file assets/eip-4519/images/Fig5_rev.png is associated with EIP 4519; because there are also changes being made to EIPS/eip-4519.md all changes to corresponding assets are also allowed

(pass) assets/eip-4519/images/Figure1.png

classification
ambiguous
  • file assets/eip-4519/images/Figure1.png is associated with EIP 4519; because there are also changes being made to EIPS/eip-4519.md all changes to corresponding assets are also allowed

(pass) assets/eip-4519/images/Figure2.jpg

classification
ambiguous
  • file assets/eip-4519/images/Figure2.jpg is associated with EIP 4519; because there are also changes being made to EIPS/eip-4519.md all changes to corresponding assets are also allowed

(pass) assets/eip-4519/images/Figure3.jpg

classification
ambiguous
  • file assets/eip-4519/images/Figure3.jpg is associated with EIP 4519; because there are also changes being made to EIPS/eip-4519.md all changes to corresponding assets are also allowed

(pass) assets/eip-4519/images/Figure4.jpg

classification
ambiguous
  • file assets/eip-4519/images/Figure4.jpg is associated with EIP 4519; because there are also changes being made to EIPS/eip-4519.md all changes to corresponding assets are also allowed

(fail) assets/eip-4519/sensors-21-03119.pdf

classification
ambiguous

Copy link
Contributor

@wschwab wschwab left a 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 Show resolved Hide resolved
EIPS/eip-4519.md Outdated Show resolved Hide resolved
EIPS/eip-4519.md Outdated Show resolved Hide resolved
EIPS/eip-4519.md Outdated Show resolved Hide resolved
EIPS/eip-4519.md Outdated Show resolved Hide resolved
EIPS/eip-4519.md Outdated Show resolved Hide resolved
EIPS/eip-4519.md Outdated Show resolved Hide resolved
EIPS/eip-4519.md Outdated Show resolved Hide resolved
EIPS/eip-4519.md Outdated Show resolved Hide resolved
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:
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Suggested change
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:

EIPS/eip-4519.md Outdated Show resolved Hide resolved
Co-authored-by: Pandapip1 <[email protected]>
@MicahZoltu
Copy link
Contributor

Bot failure logged here: ethereum/EIP-Bot#90 Manually merging.

@MicahZoltu MicahZoltu merged commit 048c5c9 into ethereum:master May 26, 2022
/// @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;
Copy link
Contributor Author

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;
Copy link
Contributor Author

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;
Copy link
Contributor Author

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;
Copy link
Contributor Author

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;
Copy link
Contributor Author

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.
Copy link
Contributor Author

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).

nachomazzara pushed a commit to nachomazzara/EIPs that referenced this pull request Jan 13, 2023
* 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]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

10 participants