-
Notifications
You must be signed in to change notification settings - Fork 39
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
Bubblegum Update Metadata Version 1 #134
Merged
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
danenbm
force-pushed
the
danenbm/update-metadata-parsing
branch
from
October 19, 2023 04:49
c826583
to
0240ce5
Compare
danenbm
force-pushed
the
danenbm/update-metadata-parsing
branch
from
October 20, 2023 22:21
58ef341
to
213dac5
Compare
danenbm
changed the title
Bubblegum Update Metadata
Bubblegum Update Metadata Version 1
Oct 23, 2023
danenbm
requested review from
NicolasPennie,
linuskendall,
Juanito87,
febo and
blockiosaurus
and removed request for
linuskendall
October 23, 2023 11:08
danenbm
commented
Oct 23, 2023
* Use new Blockbuster that always updates all creators and verification status. * Remove deleting creators with lower sequence numbers as it would not work due to race conditions. * Add concept of "empty" creator value to support Bubblegum empty creator arrays. * Add filtering out of old creators or having no creators to DAS code. * Also get authority and tree_id accounts from Bubblegum during mint and update_metadata.
danenbm
force-pushed
the
danenbm/update-metadata-parsing
branch
from
December 18, 2023 10:33
c9dda08
to
8803152
Compare
danenbm
force-pushed
the
danenbm/update-metadata-parsing
branch
from
December 21, 2023 09:48
a3e9ddd
to
3dc3557
Compare
linuskendall
approved these changes
Dec 21, 2023
NicolasPennie
approved these changes
Jan 8, 2024
blockiosaurus
approved these changes
Jan 8, 2024
2 tasks
kespinola
referenced
this pull request
in rpcpool/digital-asset-rpc-infrastructure
Jan 26, 2024
* Update raw name and raw symbol for existing NFTs (#139) Update the raw name and raw symbol from the onchain data for existing NFTs when reingesting. This allows correction of incorrect values during reprocessing on an existing index. * Upstream Helius features (#133) * Bubblegum Update Metadata Version 1 (#134) * Add code to index Bubblegum Update Metadata * Update rust toolchain file * Fix moved variable after merge * Add code from mintV1 that allows for empty URI * Ordering using asset.seq initially applied to update_metadata * Add simple check for whether asset was decompressed to Bubblegum transformers * Don't prevent sequence number update when already decompressed * Add sequence number to downloading metadata background task * Add sequence number migration (Sea ORM not regenerated yet) * Regenerate Sea-ORM types * Use new sequence numbers for Bubblegum Update Metadata * Extra condition to protect out of order creator verification * Remove base_info_seq for each creator and add creators_added_seq to asset table * Regenerate Sea-ORM types * Change creator metadata updates to use new creators_added_seq * Factor out common creator update code to helper function * Update to latest blockbuster beta * Use less than or equal for download metadata seq check * Index verified for token metadata collection * Add slot_updated to initial asset upsert, and removed duplicate items * Remove asset_was_decompressed Replaced with WHERE clauses on each upsert. Move remaining upserts from mint_v1 to db.rs. Remove upsert to asset_v1_account_attachments from mint_V1. Combine upserts for asset base info and royalty amount. * Rename royalty_amount_seq to base_info_seq * Fix typo in WHERE clause * Do not delete existing creators in mint_v1 * Update comments around database txns * Use transaction in mint_V1 and update_metadata * Use transaction for other Bubblegum instructions asset table updates * Fix tree_id key index in update_metadata * Remove use of was_decompressed flag on asset table * Add migration to remove was_decompressed and regenerate SeaORM types * Combine upsert_asset_base_info and upsert_creators and add lock * Remove unneeded creators_added_seq * Switch to EXCLUSIVE mode lock * Add NULL condition check on asset.seq * Refactored creator indexing * Use new Blockbuster that always updates all creators and verification status. * Remove deleting creators with lower sequence numbers as it would not work due to race conditions. * Add concept of "empty" creator value to support Bubblegum empty creator arrays. * Add filtering out of old creators or having no creators to DAS code. * Also get authority and tree_id accounts from Bubblegum during mint and update_metadata. * Add conditions to creator upsert, add another check at DAS API level * Rename asset_creators.verified_seq back to just regular seq * Remove unneeded condition on asset_authority upsert * Apply stale creator filtering to all DAS API queries * Use latest blockbuster beta release * Remove download_metadata_seq and add URI match check instead * Fix task URI initial query * Regenerate Sea ORM types without download_metadata_seq * asset_grouping.verified option remove * Fix filtering for getAssetsByCreator * Update to blockbuster 0.9.0-beta.5 and mpl-bubblegum 1.0.1-beta.4 * Configurable account streams (#148) * Make workers configurable Make workers fully configurab le and remove reference to the plerkle plugin. * fix lifetime --------- Co-authored-by: Kirill Fomichev <[email protected]> * fix: splt tokens with no token stanard are incorrectly categorized as single. Logic in token account updates would change owner when any token account had amount > 0 would triggers spam updates of the owner of the asset with any transfer. (#151) * Improve workspace usage (#141) * fix: remove decompress ix handling and use db transactions (#156) * Improvements for consistency NFT indexing and query consistency (#157) * Danenbm/bubblegum sequence tests 2 (#160) * Add script to forward transactions an check database results * Fix ordering and add debug info * Add remaining non-creator/non-collection tests * Require asset and cl_items files to exist * Add asset_creators and asset_grouping tests * Add verify_creator and verify_collection tests * Add more collection verification tests * Move test data to subirectory * Move repeated code to functions * Add support for running sequences in reverse * Add instructions to README for running test script * Minor README update * feat: `getSignaturesForAsset` endpoint on top of new `cl_audits_v2` table (#155) * add migration files for cl_audits_v2 * add types * ingester * add getSignaturesForAsset endpoint * refactor to resolve merge conflict related bugs * address clippy error * rename to get_asset_signatures * add instruction type update_metadata * add error log if instruction is unknown * add sort order changes --------- Co-authored-by: Nicolas Pennie <[email protected]> * fix ORM circular dependency (#161) * fix ORM circular dependency * PR comments --------- Co-authored-by: Linus Kendall <[email protected]> Co-authored-by: Tahsin Tunan <[email protected]> Co-authored-by: Michael Danenberg <[email protected]> Co-authored-by: Kirill Fomichev <[email protected]> Co-authored-by: Nicolas Pennie <[email protected]>
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Overview
Detailed notes
asset
table andasset_data
table for data that can be updated by bothmint_v1
andupdate_metadata
.slot_updated
checks on several pieces of data. These worked because the data was only written for compressed assets bymint_v1
, and then after decompression only updated by Token Metadata indexing through account-based updates. In order to supportupdate_metadata
's ability to change some of the same asset data, theseslot_updated
checks were replaced with sequence number checks that allow for out-of-order indexing for compressed assets before and after they are decompressed.update_metadata
can change the URI and be indexed concurrently withmint_v1
.ON CONFLICT
withassetId
andposition
columns). Bubblegum supports an empty creator array, and in that case a zero-length creator is inserted into theasset_creators
table to allow for a sequence number (and thus handle out-of-order updates).Sea-ORM autogeneration
As mentioned offline, there were some slight discrepancies with the existing generated Sea-ORM code and the migrations, so I updated the generated code to match the migrations.
Alternate version
I created a Version 2 of this PR that overall uses less new sequence numbers, but required more refactoring and making sure
mint_v1
andupdate_metadata
both update all of the metadata fields.The problem with Version 2 is that with multiple ingester processes, there can be race conditions. So sticking with this version, although incorporating some of the changes from Version 2
Regression testing
Tested with latest commit: 36df8e5
create_tree
,mint_v1
,transfer
,burn
create_tree
,mint_v1
,redeem
,decompress_v1
create_tree
,mint_v1
,redeem
,cancel_redeem
,redeem
,decompress_v1
create_tree
,mint_v1
,transfer
,transfer
create_tree
,mint_v1
,delegate
,transfer
create_tree
,mint_v1
,verify_creator
create_tree
,mint_v1
,verify_collection
create_tree
,mint_v1
,verify_collection
,unverify_collection
create_tree
,mint_v1
,set_and_verify_collection
create_tree
,mint_to_collection_v1
,unverify_collection
burn
,transfer
,mint_v1
,create_tree
, ) and verified database ended up in same state as when they were run forwards (decompressed items have slightly different expected state when run in reverse order).Update Metadata testing
Tested with latest commit: 36df8e5
createTree
,mintV1
,verifyCreator
,unverifyCreator
, andupdateMetadata
, and observed after theupdateMetadata
that thename
,symbol
, andURI
had been changed.createTree
,mintV1
,verifyCreator
,unverifyCreator
, andupdateMetadata
, checking database state between each transaction.verifyCreator
. VerifiedgetAsset
showed same result.unverifyCreator
. VerifiedgetAsset
showed same result.updateMetadata
, thatgetAssetsByCreator
returned the asset when either of the two creators was used.name
,symbol
,URI
, and creator array changed afterupdateMetadata
, to the values specified in theupdateArgs
sent into the instruction.updateMetadata
was sent, only the creator that was in theupdateArgs
was shown by a call togetAsset
(the "stale" creator fromasset_creators
was NOT reported).updateMetadata
was sent, thatgetAssetsByCreator
only returned the asset when the remaining creator was used. Using the "stale" creator from the database did not result in a returned asset.