For example, on the blockchain say you own a ERC721 Car token at your wallet address, but you want to park it in the ERC998ERC721 top down composable Garage owned by your friend, while still retaining ownership of the Car. Can you retain ownership rights to your Car, while it is simultaneously in the custody of your friend/friend's Garage?

Edit: Is there a way to design a token / smartcontract that has this capability?

4 Answers 4


The ERC721 is a non-fungible token format, which implies that only one of itself could exist at any point. When you use an ERC998ERC721 top-down composable, you transfer ownership of your ERC721 token to the ERC998ERC721 top-down composable.

Thus, the ERC998ERC721 top-down composable has the ownership of the ERC721 token and not you.

More here.

  • Thanks, what I meant to ask was if it is possible to design tokens / smartcontracts that can represent the scenario I described. Jan 23, 2020 at 1:16

The ERC721 standard includes an approve function, which allows the owner of a given token to approve another address, and give that address permission to transfer that token, but this second address is not an owner. The 721 standard only allows for one owner per token at any given time.



ERC-721 requires that every token have own owner. Source. It is permissible that other entities have permission to revoke that token and transfer ownership to someone else. Source.

You are adding a requirement that a token "belong" to multiple people and that somebody else have "custody" of it. So long as the token still only has one "owner," then yes your requirements can be satisfied.


I think you can "fake it".

For example, you have your address (Address A) and your friend's address (Address B). You will declare address B at the beginning of the contract (address public myFriend = 0x123..abc;) and you create requirement states for different functions.

For example, if the car is parked, your friend can wash it.

function washTheCar(some arguments) public{
require(msg.sender == owner || msg.sender == myFriend, "This car is not owned by you // This car is not parked in your garage");

...do something


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.