Skip to content

Advanced Object Deletion #1220

@nguyer

Description

@nguyer

Background

While doing some testing locally, I ended up stuck in a less than ideal state. Here's a summary of what I did:

  • Created a "gateway mode" stack connected to a public testnet
  • Deployed an ERC-721 token contract that I created with the OpenZeppelin contract wizard
  • Created a token pool for that contract
  • Attempted to mint a token with a URI
  • FireFly told me (based on the response from the token connector) that setting a URI is not supported with my contract
  • This was due to the fact that I did not specify the contract interface when creating the token pool
  • I went back and created the interface
  • I then went to create a new token pool with a new name, while specifying the interface ID
  • The FireFly transaction for creating the token pool becomes stuck "Pending", while the Token Create Pool Operation is successful
  • Upon inspecting the logs I found a 200 response from the token connector to create the pool, then FireFly core logs: [2023-03-15T16:53:11.943Z] DEBUG Token pool ID=79a6bb2f-11bd-45e6-99a7-f3045ec911ac Locator='address=0xfd403b063ecf959867973a4cf383c48b9a06e19e&schema=ERC721NoData&type=nonfungible' already confirmed ns=default pid=1 role=event-manager

This now leaves me stuck state. I have no way of deleting the token pool, but because I created it incorrectly, I also have no way of using it. My options at this point are to:

  • Deploy a new contract - not viable if this was a pre-existing contract that already has transactions that need to be index
  • Completely delete my stack and start over - not viable if I have other production data in my DB
    • Worse, I don't think this would even work if I was in a multi party system, because as soon as my FireFly node comes back online it would see the token pool broadcast in the chain as it re-indexes everything

In reality, this problem extends to more than just token pools, but this situation was exceptionally painful, so it got me thinking about the problem. The same situation could occur with contact interfaces, contract APIs, etc, though those things have versions so it may not be as big of a deal there.

What needs to change

  • We need a way to delete things which have not been broadcasted, which should be a simple curd operation.
  • We also need a way to delete a token pool which has been broadcasted

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions