Thanks for your detailed explanation. Have learned a lot from you.
Actually, such complicated logic should be verified by a custom rule so that it could prevent the limitation of the general guideline. But there is one more question here: how do we identify the common condition and complex interaction of NFT instances?
btw your example is more suitable.
生成模式允许所有者能在同一个 token class 中创建无限个新的 token instance。指派给每个 token 的 instance ID 是使用seed cell 设计模型生成的,这意味着它是随机分配的,并且保证全局唯一。新的 token instance 中的 token 数量在创建时定义,在生成后就不能增加。
Instance ID 按照下列规则去生成
For any new token instance being created, the Instance ID is a hash of the
outpoint of the first input, combined with the output index of the token
instance cell being created.
hash(seed_cell.tx_hash, seed_cell.index, instance_output_index)
Instance ID and Quantity Restrictions/ Instance ID 和数量限制
这个标准对控制 instance ID 和 Quantity 数值设置了一些无法被 token class 所有者攻破的限制。
这个 NFT 标准允许在任何时候**无限地创建新的 Token instance **。但是,和 SUDT 有所不同的是,任何 token instance 的数量在创建时都是固定的,以后不能再增加了。
为了确保 instance ID 是惟一的,它的创建使用 seed cell 的模式。这有效地从所有者手中夺走了对 instance ID 的控制权。所有者控制何时创建 Token instance ,但他们不能控制 instance ID 是什么。这时候如果数量完全不受限制,那么这实际上就是否定了前面提到的模式。通过同时限制 instance ID 和数量,这个标准保证了 token instance 是惟一的且不可伪造的,即使是 token class 的所有者。
为什么这个特征是重要的,有个真实世界的案例是可收集的游戏卡《Magic The Gathering》。某些稀有卡片的第一版,对收藏者来说是极其珍贵的。然而,这些稀有卡的伪造品存在,原卡发行者的再版印品也存在。限制 instance ID 和数量可以消除任何恶意伪造的可能性,并确保发行者以后的重新印制版不会被误认为是初始版。
If you are asking how the NFT type script can distinguish between simple or complex transaction inspection used in token logic, I believe the answer is you cannot. There is valid justification for using either in specific conditions.
I was describing another possible variation for handling cells. In CryptoKitties to cats breed to create a third cat. The original two cats are still alive after breeding. This creates a little more complexity in cell management because it is two inputs and three outputs.
As an example, I mention CryptoSpiders as another game. Spiders mate at the end of their lifecycle, and die soon after. It is more simple in cell management because it is two inputs that are consumed, and one output.
This example uses a third NFT egg cell to hatch a new cat. The egg must come from somewhere. A user cannot create it by themselves. When users are playing the game, the website that generates the transactions would automatically give out eggs when needed. This works fine, but this is a centralized solution since all the eggs are under control of the website. Eggs could also be distributed on-chain using a special lock script that has no need for the website. I was indicating that a full decentralized solution is possible under this model, even though I think the more simple centralized solution is sufficient for most.
Very sorry for missing this reply.
First of all, thanks for answering.
Ib those days, I also keep considering such scenarios for NFT also discussing with some community members. Cell management like create new NFT through breeding would be an issue.
Case 1 : I have 100 arrows NFT (the same instance ID ) and want to send 30 arrows to three different players without knowing if they have enough ckbytes or not. Maybe here the Approve cell with the ckb indexer could help.
Case 2 : 2 Cats breed one more kitty.
Well,got aspired by regulation byte,not sure whether it is a solution or not :
regulation_byte: 0b 0 0 0 0 0 0 0 0
| | | └- Global control
| | └--- first generation
| └----- second generation
|
└--------------- 1: Definition / 0: Usage
I know this is a very rough idea for a mother(female) cat which may not be considered very well.
But tbh, spending a little capacity to get a new kitty asset must be a desirable behavior that most player is willing to do. See the timing when gas fees rise up, numerous DeFi players still pay, and fortunately, the ckbyte for NFT occupation still could be redeemed theoretically.
Got it, and if such kinds of demand present in the future,I believe there would be specified NFT spec released based on this RFC like regulation sudt .
Something like the Approve Cell, Anyone Can Pay, or Open Transaction Lock, should be able to help with this.
Using a system like a regulation byte may be beneficial to specify how an NFT Token Class behaves. It could also be used at the application level, which you indicated in your example, but that is up to the developer of the application to define.
I thought up another way the breeding could be handled which is quite simple. In my examples, I always used the Instance ID for the purpose of identifying a specific cat. That doesn’t have to be the case. An Instance ID could represent a generation of cats, a specific series of cats or the developer could choose to ignore the meaning of the Instance ID completely. If they ignore it, then they would need to specify their own identifier in the custom data, but this also gives them the ability to change it any way they need to.
For developers who do not need guaranteed scarcity trait, the ability to change the Instance ID may be beneficial. I think there should be an option for this, but I’m not sure if that should be part of this standard or a separate standard. I will be doing a second NFT standard regardless. There needs to be a second more simple standard that can be more directly compatible with ERC1155.
got it, just realize that instance_id could represent a couple of kitties. That’s cool.
But what it will be if I transfer a baby kitty out of such the series of kitties below to a specific instance ID?
Actually, such kinds of cell capacity management of sUDT or NFT would be an issue deserving to discuss.
Something similar to the Approve Cell lock seems to make a lot of sense when sending between two participants. Accepting an NFT requires the receiver to use their own CKBytes for the cell, which means it should be their decision if they want to accept it or not.
In order for this to work effectively, there will need to be wallet support similar to the Anyone Can Pay lock. That’s the only way this can be made easy enough for the average user.