Skip to content

Conversation

@rickyrombo
Copy link
Contributor

Handy util for updating artist coin related Solana indexers

If flags for specific related accounts aren't specified, will lookup related accounts and let the user choose which ones they want.

Can specify a DB URL if prefer to have the SQL inserted automatically vs copy paste.

❯ go run main.go coin --help
Fetches all related content to a coin via Solana RPC to backfill into the database.

Usage:
  sol_refresher coin [mint] [flags]

Flags:
  -y, --all                       Skip prompts and use all found accounts
      --damm-v2-pool string       The Damm V2 pool address
      --damm-v2-position string   The Damm V2 position address
      --database string           Database connection string (default "postgres://postgres:postgres@localhost:5432/discovery_provider_1?sslmode=disable")
      --dbc-config string         The DBC config address
      --dbc-pool string           The DBC pool address
  -h, --help                      help for coin
      --locker string             The locker address
  -s, --skip                      Skip prompts and do not refresh unlisted accounts
  -u, --update-coin               Update the coin's Damm V2 pool reference in the database

Global Flags:
  -c, --rpc string   The Solana RPC endpoint to use (default "https://api.mainnet-beta.solana.com")
❯ go run main.go coin HNYCF7kY87qHSbRnMEkMbrf8tGxibee52f2dt4r3XZ62 --update-coin 
Refreshing coin mint: HNYCF7kY87qHSbRnMEkMbrf8tGxibee52f2dt4r3XZ62

Searching for DBC pools...
No DBC pools found

Searching for Damm V2 pools...
Found 1 Damm V2 pool(s) for mint HNYCF7kY87qHSbRnMEkMbrf8tGxibee52f2dt4r3XZ62
? Refresh account AJmdSo4VM9rWjXvC7aHDp3xAvUcusXJdMd3tYxmzTncZ? Yes

Searching for Damm V2 positions...
Found 2 Damm V2 position(s) for pool AJmdSo4VM9rWjXvC7aHDp3xAvUcusXJdMd3tYxmzTncZ
? Select the account(s) to refresh: 8ussjBHjajeScjD4oAvCR9rccptANqMD2kCVrZFcu2j4, F3qp2zmsBsxgkugerYs178AtAdSEjLjoNa2JZiD597dh

Checking Escrow lockers...
Found 1 locker(s)
? Refresh account GBaQddUoEaVyE4aaHfqf34P2r49VV5SMcHMYtKkxhGpr? Yes

=== Summary ===

Updating coin Damm V2 pool:      AJmdSo4VM9rWjXvC7aHDp3xAvUcusXJdMd3tYxmzTncZ
Refreshing Damm V2 pool:         AJmdSo4VM9rWjXvC7aHDp3xAvUcusXJdMd3tYxmzTncZ
Refreshing Damm V2 position:     8ussjBHjajeScjD4oAvCR9rccptANqMD2kCVrZFcu2j4
Refreshing Damm V2 position:     F3qp2zmsBsxgkugerYs178AtAdSEjLjoNa2JZiD597dh
Refreshing Escrow locker:        GBaQddUoEaVyE4aaHfqf34P2r49VV5SMcHMYtKkxhGpr

=== Generated SQL Updates ===

-- Generated by sol_refresher coin command for mint HNYCF7kY87qHSbRnMEkMbrf8tGxibee52f2dt4r3XZ62

BEGIN;

UPDATE artist_coins SET damm_v2_pool = 'AJmdSo4VM9rWjXvC7aHDp3xAvUcusXJdMd3tYxmzTncZ' WHERE mint = 'HNYCF7kY87qHSbRnMEkMbrf8tGxibee52f2dt4r3XZ62';

-- Coin HNYCF7kY87qHSbRnMEkMbrf8tGxibee52f2dt4r3XZ62 refresh Damm V2 pool AJmdSo4VM9rWjXvC7aHDp3xAvUcusXJdMd3tYxmzTncZ
INSERT INTO sol_retry_queue (indexer, update_message, error) VALUES ('DammV2Indexer', '{"filters":["DammV2Indexer"], "account":{"account":{"pubkey":"ikaEfTzzK3oIreNxf//t4Fk/8GJkjp+4EUUkZXdL88I=", "lamports":"8630400", "owner":"CS0hNWV6FZwrh9S2anDbjpdSOJ/3aq8gbO0GOjj5Wu0=", "rentEpoch":"18446744073709551615", "data":"8ZptBBGxbbwAZc0dAAAAAAEAAAAAADIABgAAAAAAAADwAgAAAAAAAAAAAAAAAAAAFAAUAAAAAAABAAAAAAAAAGCk3AC8AwAAAQAKAHgAiBMAAAAAAAAAAMsQx7q4jQYAAAAAAAAAAACVJ2G326UZKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8z91dLzzvqVHc1ccNN6YZqyAe7TIn8MUEyQvT48ePFN7/DPMLnXBSHbMN5KDkE9JB3ZpESJXuzrf82mLYCJJQO7MwChOadyflQMh0B1NRO7fHLQL8O5GNGIeESs+DvSS2bujlcuM+UqVK4PAmisvbXFIPuDVGsj9YhPMpqZV570AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOsajrk6uHyuQRueIb6ZcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMkcDAAAAAAAAAAAAAAAAAAAAAAAAAAAAPZw1fzEpRkrAAAAAAAAAACVJv3oN5LyUgUAAAAAAAAAQ/JPDNelGSsAAAAAAAAAALP+mRYAAAAAAAAAAAEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAb34UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOsajrk6uHyuQRueIb6ZcAAAAAAAAAAAAAAAAAAAAAAA3czAAAAAAAAAAAAAAAAAAAAAAAAAAAADJHAwAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAfrdkKqzLT0s3gNpm2YQfUuo4S3QardmLrMa6IRXD4f8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", "txnSignature":"nyoKaN3zsoH/1VUBnBF8dmzjl2Z/m8GTqmtMSYDIK8N78gqE3VBiMAhimG4roQ7EVD08Yg64tDuuuUyz4BFzAQ=="}, "slot":"379324568"}}', 'Coin HNYCF7kY87qHSbRnMEkMbrf8tGxibee52f2dt4r3XZ62 refresh Damm V2 pool AJmdSo4VM9rWjXvC7aHDp3xAvUcusXJdMd3tYxmzTncZ');

-- Coin HNYCF7kY87qHSbRnMEkMbrf8tGxibee52f2dt4r3XZ62 refresh Damm V2 position 8ussjBHjajeScjD4oAvCR9rccptANqMD2kCVrZFcu2j4
INSERT INTO sol_retry_queue (indexer, update_message, error) VALUES ('DammV2Indexer', '{"filters":["8ussjBHjajeScjD4oAvCR9rccptANqMD2kCVrZFcu2j4"], "account":{"account":{"pubkey":"dY2I31PPGV6Ib48HIfNz11SHZAksIkf1GxZjGPMsNzs=", "lamports":"3730560", "owner":"CS0hNWV6FZwrh9S2anDbjpdSOJ/3aq8gbO0GOjj5Wu0=", "rentEpoch":"18446744073709551615", "data":"qryP5HpA99CKRoR9PPMregit43F//+3gWT/wYmSOn7gRRSRld0vzwlimzwRy/INhsvZPzAIe9kHLTe8TuXNciUCfC14jsC5zAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3jUVcn148VSKNzxDdTLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", "txnSignature":"6aX3WbcfRDzypQSYcCDzS7YjtjiPEKbBl/PUCa1Zm9SvTjAgxBEplITfg37K7XYPJHwzAMioagihNKjxSTM+Ag=="}, "slot":"379324568"}}', 'Coin HNYCF7kY87qHSbRnMEkMbrf8tGxibee52f2dt4r3XZ62 refresh Damm V2 position 8ussjBHjajeScjD4oAvCR9rccptANqMD2kCVrZFcu2j4');

-- Coin HNYCF7kY87qHSbRnMEkMbrf8tGxibee52f2dt4r3XZ62 refresh Damm V2 position F3qp2zmsBsxgkugerYs178AtAdSEjLjoNa2JZiD597dh
INSERT INTO sol_retry_queue (indexer, update_message, error) VALUES ('DammV2Indexer', '{"filters":["F3qp2zmsBsxgkugerYs178AtAdSEjLjoNa2JZiD597dh"], "account":{"account":{"pubkey":"0L34I3IFaQmOmcuzNR+kp9bJ0Njv7724ttvEMJQKR2g=", "lamports":"3730560", "owner":"CS0hNWV6FZwrh9S2anDbjpdSOJ/3aq8gbO0GOjj5Wu0=", "rentEpoch":"18446744073709551615", "data":"qryP5HpA99CKRoR9PPMregit43F//+3gWT/wYmSOn7gRRSRld0vzwmt0+SOqdnZ+KsrJkUoZSUaxkiHAdieEAInqMCClrDc7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3jUVcn148VSKNzxDdTLgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", "txnSignature":"EAtzZ+aSZNPB7diHSD5SdNsv82hC/zQyRZOxcCVGK9JGfTeeZUIEzj7D1Toxr00iq1T3ojfxfTnz2YJoHJjwAA=="}, "slot":"379324568"}}', 'Coin HNYCF7kY87qHSbRnMEkMbrf8tGxibee52f2dt4r3XZ62 refresh Damm V2 position F3qp2zmsBsxgkugerYs178AtAdSEjLjoNa2JZiD597dh');

-- Coin HNYCF7kY87qHSbRnMEkMbrf8tGxibee52f2dt4r3XZ62 refresh locker GBaQddUoEaVyE4aaHfqf34P2r49VV5SMcHMYtKkxhGpr
INSERT INTO sol_retry_queue (indexer, update_message, error) VALUES ('LockerIndexer', '{"filters":["GBaQddUoEaVyE4aaHfqf34P2r49VV5SMcHMYtKkxhGpr"], "account":{"account":{"pubkey":"4ZTiykkneZA5JJQmaOkiyLz0UChXxd9gAG3lVnRwXYM=", "lamports":"2951040", "owner":"BRK++XqPW3F98+3Wxu1CwOJPEt/lvofuP+xedD9dbLk=", "rentEpoch":"18446744073709551615", "data":"9He3BEl0h8MdvygJJs651U8vnMlzs8mANNOBO7tWXY/Kua0s5phaGvM/dXS8876lR3NXHDTemGasgHu0yJ/DFBMkL0+PHjxTfrdkKqzLT0s3gNpm2YQfUuo4S3QardmLrMa6IRXD4f/zP3V0vPO+pUdzVxw03phmrIB7tMifwxQTJC9Pjx48U/8BAAAAAAAAAAAAAAAAAACAUQEAAAAAAAAAAAAAAAAADhyqNy35AAAhBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=", "txnSignature":"/vFtrFRtAxKvn61wTDcVAnbUeLdugycpGSz4taa/KX3PgAxWt2pmKMw5tf6ZKW/AjerNA/WB0t+L2fqrloo/BA=="}, "slot":"379324568"}}', 'Coin HNYCF7kY87qHSbRnMEkMbrf8tGxibee52f2dt4r3XZ62 refresh locker GBaQddUoEaVyE4aaHfqf34P2r49VV5SMcHMYtKkxhGpr');

COMMIT;

-- End of sol_refresher coin for mint HNYCF7kY87qHSbRnMEkMbrf8tGxibee52f2dt4r3XZ62

? Do you want to execute the generated SQL against the database? Yes

✅ SQL executed successfully

@rickyrombo rickyrombo merged commit 91f6b66 into main Nov 11, 2025
5 checks passed
@rickyrombo rickyrombo deleted the mjp-sol-refresher branch November 11, 2025 07:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants