Solana Indexer DBC pool improvements - #485
Merged
Merged
Conversation
rickyrombo
commented
Oct 18, 2025
Contributor
- Clamp graduation progress at 1.0
- Remove DBC pool from create coin endpoint
- Track DBC pool using memcmp filters and artist coin base mints
- Track DBC VolatilityTracker (for completeness) and Metrics (for fees)
raymondjacobson
approved these changes
Oct 18, 2025
| pool TEXT PRIMARY KEY, | ||
| slot BIGINT NOT NULL, | ||
| last_update_timestamp BIGINT NOT NULL, | ||
| volatility_accumulator NUMERIC NOT NULL, |
Member
There was a problem hiding this comment.
we don't use dynamic fees, but i guess we can track this
| Filter: &pb.SubscribeRequestFilterAccountsFilter_Memcmp{ | ||
| Memcmp: &pb.SubscribeRequestFilterAccountsFilterMemcmp{ | ||
| // Base mint is after discriminator, VolatilityTracker, config and creator | ||
| Offset: 8 + (8 + 8 + 16 + 16 + 16) + 32 + 32, |
Member
There was a problem hiding this comment.
here's an interesting gpt suggestion to avoid magic
package dbc
import (
"bytes"
bin "github.com/gagliardetto/binary"
"github.com/gagliardetto/solana-go"
"api.audius.co/solana/spl/programs/meteora_dbc"
)
// Mirror exactly the fields that appear BEFORE BaseMint in the on-chain Pool layout.
// IMPORTANT: order and types must match the Borsh schema used on-chain!
type poolPrefixBeforeBaseMint struct {
VolatilityTracker meteora_dbc.VolatilityTracker
Config solana.PublicKey
Creator solana.PublicKey
}
func borshSize[T any](v T) int {
var buf bytes.Buffer
enc := bin.NewBorshEncoder(&buf)
_ = enc.Encode(v) // layout is known; errors here would mean schema mismatch
return buf.Len()
}
var OffsetBaseMintInPool int
func init() {
const anchorDiscriminatorSize = 8
OffsetBaseMintInPool = anchorDiscriminatorSize + borshSize(poolPrefixBeforeBaseMint{})
}
| @@ -76,7 +75,6 @@ func (app *ApiServer) v1CreateCoin(c *fiber.Ctx) error { | |||
| "name": body.Name, | |||
| "logo_uri": body.LogoUri, | |||
| "description": body.Description, | |||
Member
There was a problem hiding this comment.
ill open a PR to remove FE
| return err | ||
| } | ||
|
|
||
| func upsertDbcPoolVolatilityTracker( |
Member
There was a problem hiding this comment.
also not necessary, but doesn't hurt
raymondjacobson
added a commit
to AudiusProject/apps
that referenced
this pull request
Oct 20, 2025
### Description Follows AudiusProject/api#485 Also add environment to sdk verifyuser script ### How Has This Been Tested? _Please describe the tests that you ran to verify your changes. Provide repro instructions & any configuration._ gen:dev types pass
raymondjacobson
added a commit
to AudiusProject/apps
that referenced
this pull request
Oct 20, 2025
### Description Follows AudiusProject/api#485 Also add environment to sdk verifyuser script ### How Has This Been Tested? _Please describe the tests that you ran to verify your changes. Provide repro instructions & any configuration._ gen:dev types pass
raymondjacobson
added a commit
to AudiusProject/apps
that referenced
this pull request
Oct 20, 2025
### Description Follows AudiusProject/api#485 Also add environment to sdk verifyuser script ### How Has This Been Tested? _Please describe the tests that you ran to verify your changes. Provide repro instructions & any configuration._ gen:dev types pass
raymondjacobson
added a commit
to AudiusProject/apps
that referenced
this pull request
Oct 20, 2025
### Description Follows AudiusProject/api#485 Also add environment to sdk verifyuser script ### How Has This Been Tested? _Please describe the tests that you ran to verify your changes. Provide repro instructions & any configuration._ gen:dev types pass
dylanjeffers
added a commit
that referenced
this pull request
Aug 18, 2026
…#1021) Picks up OpenAudio/go-openaudio#510 (merged as \`81f4af5\`), which unblocks profile editing for accounts whose artist pick points at a deleted track. ## Why this bump is the step that actually reaches users The fix lives in \`pkg/etl\`, a separate Go module. This repo's \`indexer\` package wraps it and \`main.go\` runs it as \`core_indexer\` — that is the process serving production. Merging the go-openaudio PR alone changes nothing here until this pin moves. ## What was broken A User Update whose \`artist_pick_track_id\` pointed at a deleted or no-longer-owned track was rejected outright. Clients resend the full user object on every profile edit, so that stale id rode along with unrelated changes and blocked them — profile picture, cover photo, bio, name. The failure was invisible from both ends: the tx landed on chain, the indexer swallowed the \`ValidationError\` and continued, and the client had already applied the change optimistically. The user just saw their edit revert on refresh, with no error anywhere. Support reports of "my profile photo keeps reverting" are this. **1,241 accounts were stuck on 2026-08-11** — 427 with 100+ followers, 89 with 1000+ — every one from a deleted pick. ## Migration delta is exactly one \`0035\`–\`0038\` were already in the previous pin, so **\`0039\` (the backfill) is the only new migration this bump applies**. Notably \`0035_users_one_current_row\` — which fails loudly unless api's ddl \`0237\` backfill ran first — is already satisfied at the current pin, so it is not newly applied here. \`0039\` clears only dangling references; a pick that still resolves is left alone. ## Risk review of the nine pkg/etl commits riding along - \`#483\` removes tip reactions from the writer and indexer — this repo has **zero** references to \`TipReaction\`/\`tip_reaction\`. - \`#508\` regenerates sqlc models; \`#494\`/\`#485\`/\`#482\` are genesis-migration-path fixes, not steady-state indexing. - The main \`go-openaudio\` module pin is unchanged; only \`pkg/etl\` moves. \`go build ./...\` and \`go vet ./...\` both clean. Diff is 3 lines (go.mod + go.sum). ## After deploy - \`entity manager validation rejected\` warns with the artist-pick reason should drop to zero in the \`core-indexer\` pod. - Re-run the count before/after — the 1,241 figure is from 2026-08-11 and the real number today may differ: \`\`\`sql SELECT count(*) FROM users u WHERE u.is_current AND u.artist_pick_track_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM tracks t WHERE t.track_id = u.artist_pick_track_id AND t.owner_id = u.user_id AND t.is_current AND t.is_delete = false); \`\`\` 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or 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
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.