Docs menu

07 · 8 min read

Hedera notes

Platform behaviour found while building this template, each one verified on Hedera testnet between 1 and 3 October 2026. Read this before you change the contracts or the relayer: most of these cost an hour the first time.

01Transactions and tooling#

What goes wrongWhat you seeFix
Hashio's nonce lags after a failed transactionWRONG_NONCERead ethereum_nonce from the mirror node (GET /api/v1/accounts/{address}) and pass it explicitly
An EIP-1559 gas guess falls below Hedera's minimumGas price … is below configured minimumSend legacy transactions (type 0) at the node's gas price. Foundry needs --legacy.
Simulating from an unfunded accountINSUFFICIENT_PAYER_BALANCEFund the account you simulate from, even for an eth_call
A revert deep in a contractNo trace from HashioGET /api/v1/contracts/results/{txHash}/actions on the mirror node
Reads right after a writeOld values for a few secondsWait and refetch
A two-contract forge scriptOut of gas in simulation--gas-limit 14000000 (yarn foundry:deploy already passes it)

02HTS and HIP-904#

HIP-904 airdrops work from a contract. airdropTokens on the HTS system contract (0x167), called by the source, delivered to an EVM address Hedera had never seen. The mirror node then showed a new account with max_automatic_token_associations: -1, the balance credited, and no pending airdrop.

ABI
airdropTokens((address,(address,int64,bool)[],(address,address,int64,bool)[])[])
  • Association is a precompile call. associateToken(account, token) at 0x167 returns 22 on success and 194 if already associated. HtsLib.associate accepts both.
  • The ERC-20 facade just works for approve, transferFrom and balanceOf on HTS tokens, from contracts too.
  • msg.value is tinybar. Sending 1.5 HBAR arrives as 150_000_000, though wallets show 18 decimals.
  • Fuzzing found two rounding bugs: a tiny deposit valued above the pool (now capped at totalAssets), and a second payout one unit short after leave (now a bounded shortfall).
Who pays the account-creation fee changed between network versions. On 1 October a TOKENAIRDROP child record charged the sending contract 0.482 HBAR. On 2 October the account was created inside the claim and the relayer paid one 1.281 HBAR fee. Keep a small HBAR reserve on the source and re-check.

03Accounts and wallet apps#

Hollow accounts have no key on record. An address that has only received something exists and holds balances, but the mirror node shows key: null until it signs a transaction, so a wallet cannot find it by key.

HashPack imports ED25519 by default. Its import field takes 64 or 96 characters, and 96 is an ED25519 DER key. Generated ECDSA keys were not found even after activation. So generated wallets are ED25519 accounts, created up front with the Hiero SDK, and the claim pays them at their long-zero address (0x plus the account number in 40 hex characters).

A brand-new account is briefly invisible. Claiming seconds after creating it reverted with INVALID_ALIAS_KEY. /api/create-account waits until the RPC sees the account, and /api/claim retries that one error.

04SaucerSwap addresses#

ThingTestnetMainnet
Infinity Pool (Mothership)0.0.14186500.0.1460199
SAUCE0.0.11835580.0.731861
xSAUCE0.0.14186510.0.1460200
V1 router0.0.19264—
WHBAR token (use in swap paths)0.0.15058—

A round trip loses 1 base unit to rounding. On 2 October one xSAUCE was worth 1.003 SAUCE on testnet, so a demo link's growth is real but tiny.

05Dead ends#

Bonzo Finance

The first-choice venue, because lending is a named integration. On testnet every deposit reverts with CALLER_NOT_AUTHORIZED: the mirror-node trace shows the aToken's mint calling the rewards controller's handleAction on 0.0.4998053, which reverts. Reproduced on two reserves. On mainnet paused() returns true and USDC earns about 0.009%.

Hedera Schedule Service

Scheduled refunds were the obvious design. HIP-1215 scheduleCall has an open bug when booked from a delegatecall frame (hiero-consensus-node #27263), a 62-day expiry cap, and unproven self-rescheduling. Refunds are permissionless instead, so nothing depends on it.

ECDSA generated wallets

The first generated wallets were ECDSA. HashPack could not import them, activated or not. They are ED25519 now.

Next · 6 minSecurity