The explorer's /contract calls history for the DApp Store (mainnet CID e2d24b…2af41c) renders every kernel as method=Passthrough, args="". The contract sits behind upgradable2, and bvm/Shaders/Explorer/Parser.cpp#L725 calls OnMethod("Passthrough") and returns without writing params. Only the signer pubkey survives in the Keys column — not enough to attribute an add_dapp / update_dapp / delete_dapp call to a specific dapp.
Per-publisher activity is recoverable for indexers, per-dapp isn't: last_updated_at can be derived from the contract's stored m_Timestamp via view_dapps, but first_seen_at and version history can't, since the contract overwrites that timestamp on every update.
Three asks, in priority order
1. Move beam-dapps-store sources into core. Specifically the contract definition at shaders/dapps_store_contract.h and its dapps_store_contract.cpp companion. Putting them under bvm/Shaders/dapps_store/ alongside the other contracts unblocks 2 without core growing a cross-repo build dependency.
2. Add a typed DApp Store parser to HandleContractsWrapped in bvm/Shaders/Explorer/Parser.cpp. The header already defines every method's args: Method_3 AddPublisher / Method_4 UpdatePublisher (PublisherBase), Method_5 AddDApp / Method_6 UpdateDApp (Base + variable text — DAppId is the first 16 bytes), Method_7 DeleteDApp (just DAppId). With those decoded the explorer would surface method=AddDApp, params={ dapp_id, ipfs_id, version, … } per call.
3. Generic fallback: expose raw passthrough args from upgradable2. For any wrapped contract that doesn't have a typed parser — today's situation, and any future wrapped contract added before its parser ships — the passthrough branch could emit the raw args buffer as hex, same path explorer/adapter.cpp#L1142 already takes for fully unknown contracts. Roughly a one-line addition next to Parser.cpp#L725. Strict subset of what's already exposed elsewhere, and unblocks indexers immediately.
The explorer's
/contractcalls history for the DApp Store (mainnet CIDe2d24b…2af41c) renders every kernel asmethod=Passthrough, args="". The contract sits behindupgradable2, andbvm/Shaders/Explorer/Parser.cpp#L725callsOnMethod("Passthrough")and returns without writingparams. Only the signer pubkey survives in the Keys column — not enough to attribute anadd_dapp/update_dapp/delete_dappcall to a specific dapp.Per-publisher activity is recoverable for indexers, per-dapp isn't:
last_updated_atcan be derived from the contract's storedm_Timestampviaview_dapps, butfirst_seen_atand version history can't, since the contract overwrites that timestamp on every update.Three asks, in priority order
1. Move
beam-dapps-storesources into core. Specifically the contract definition atshaders/dapps_store_contract.hand itsdapps_store_contract.cppcompanion. Putting them underbvm/Shaders/dapps_store/alongside the other contracts unblocks 2 without core growing a cross-repo build dependency.2. Add a typed DApp Store parser to
HandleContractsWrappedinbvm/Shaders/Explorer/Parser.cpp. The header already defines every method's args:Method_3 AddPublisher/Method_4 UpdatePublisher(PublisherBase),Method_5 AddDApp/Method_6 UpdateDApp(Base+ variable text —DAppIdis the first 16 bytes),Method_7 DeleteDApp(justDAppId). With those decoded the explorer would surfacemethod=AddDApp, params={ dapp_id, ipfs_id, version, … }per call.3. Generic fallback: expose raw passthrough args from upgradable2. For any wrapped contract that doesn't have a typed parser — today's situation, and any future wrapped contract added before its parser ships — the passthrough branch could emit the raw args buffer as hex, same path
explorer/adapter.cpp#L1142already takes for fully unknown contracts. Roughly a one-line addition next toParser.cpp#L725. Strict subset of what's already exposed elsewhere, and unblocks indexers immediately.