You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Since its release this March, it has been adopted for production use by multiple projects. Based on this usage, we have come to understand that:
The default implementation of the Inventory should be a standalone contract and not an EIP2535 facet. DELEGATECALL proxies are complex, somewhat difficult to deploy, and undesirable from a decentralization point of view.
Using Terminus as the default method of access control adds conceptual complexity to understanding how the Inventory works. The default access control mechanism should just be onlyOwner for a great getting started experience. We will also implement Terminus access control as the production-grade option.
Slot types are unnecessarily complex and confusing to users. They are not strictly necessary -- a slot's type is implicitly defined by the tokens that can be equipped in that slot. Any additional semantics must be an extension to the core Inventory system.
The terms unequippable and nonunequipable are terrible and confusing because of the negatives. We should follow the recommendation of Diniz Sa (from OP Games/Arcadians) and call persistent the slots from which items cannot be unequipped.
The age-old wisdom of PEP20 contains these lessons:
...
Simple is better than complex.
...
Readability counts.
...
There should be one-- and preferably only one --obvious way to do it.
...
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
We contributed the first version of our Inventory contract to Game7 DAO: https://github.com/G7DAO/contracts
Since its release this March, it has been adopted for production use by multiple projects. Based on this usage, we have come to understand that:
DELEGATECALL
proxies are complex, somewhat difficult to deploy, and undesirable from a decentralization point of view.onlyOwner
for a great getting started experience. We will also implement Terminus access control as the production-grade option.Inventory
system.unequippable
andnonunequipable
are terrible and confusing because of the negatives. We should follow the recommendation of Diniz Sa (from OP Games/Arcadians) and callpersistent
the slots from which items cannot be unequipped.The age-old wisdom of PEP20 contains these lessons:
This issue tracks the following changes:
Inventory
interface #319InventoryWithOwner
: Standalone inventory contract that uses OpenZeppelin'sOwnership
class for administrative access. #320InventoryWithERC1155Admin
: Standalone inventory contract that uses ownership of an ERC1155 token to gate administrative access. This conforms with Moonstream'sTerminus
protocol. #321InventoryFacet
: An EIP2535 implementation of the inventory contract which uses an ERC1155 token to gate administrative access. This conforms with Moonstream'sTerminus
protocol. #322Each of the implementations should remove slot types and should name nonunequippable slots as "persistent".
The text was updated successfully, but these errors were encountered: