datahaven-xyz/datahaven · error

Unannounced

Error message

Unannounced

What it means

Reverts the proxy precompile call because a matching proxy definition was found but its delay is non-zero: the caller has announced but not yet waited out the announcement period, so the proxy relationship exists yet is not yet active for this call. The input at fault is the announcement delay configured on the proxy definition in pallet_proxy.

Solutions

  1. Wait until the announcement delay elapses and the proxy relationship becomes active, then retry the call
  2. Have the real (delegating) account announce the proxy earlier so the delay has expired by the time the proxy needs to act
  3. Remove and re-add the proxy definition without a delay if the relationship is meant to be usable immediately
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at operator/precompiles/proxy/src/lib.rs:387 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of datahaven-xyz/datahaven@edcb13dbbc (2026-09-13). Data as JSON: /api/errors/1ff53587fd0774a7. Report an issue: GitHub.

Appendix: source

Thrown at operator/precompiles/proxy/src/lib.rs:387

    ) -> EvmResult {
        // Check that we only perform proxy calls on behalf of externally owned accounts
        let AddressType::EOA = precompile_set::get_address_type::<Runtime>(handle, real.into())?
        else {
            return Err(revert("real address must be EOA"));
        };

        // Read proxy
        let real_account_id = Runtime::AddressMapping::into_account_id(real.into());
        let who = Runtime::AddressMapping::into_account_id(handle.context().caller);
        // Proxies:
        // Twox64Concat(8) + AccountId(20) + BoundedVec(ProxyDefinition * MaxProxies) + Balance(16)
        handle.record_db_read::<Runtime>(
            28 + (29 * (<Runtime as pallet_proxy::Config>::MaxProxies::get() as usize)) + 16,
        )?;
        let def =
            pallet_proxy::Pallet::<Runtime>::find_proxy(&real_account_id, &who, force_proxy_type)
                .map_err(|_| RevertReason::custom("Not proxy"))?;
        frame_support::ensure!(def.delay.is_zero(), revert("Unannounced"));

        // Read subcall recipient code
        // AccountCodesMetadata: 16 (hash) + 20 (key) + 40 (CodeMetadata).
        handle.record_db_read::<Runtime>(ACCOUNT_CODES_METADATA_PROOF_SIZE.saturated_into())?;
        let recipient_has_code =
            pallet_evm::AccountCodesMetadata::<Runtime>::get(evm_subcall.to.0).is_some();

        // Apply proxy type filter
        frame_support::ensure!(
            def.proxy_type.is_evm_proxy_call_allowed(
                &evm_subcall,
                recipient_has_code,
                handle.remaining_gas()
            )?,
            revert("CallFiltered")
        );

        let EvmSubCall {

View on GitHub (pinned to edcb13dbbc)