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
- Wait until the announcement delay elapses and the proxy relationship becomes active, then retry the call
- Have the real (delegating) account announce the proxy earlier so the delay has expired by the time the proxy needs to act
- 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)