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 wrong | What you see | Fix |
|---|---|---|
| Hashio's nonce lags after a failed transaction | WRONG_NONCE | Read ethereum_nonce from the mirror node (GET /api/v1/accounts/{address}) and pass it explicitly |
| An EIP-1559 gas guess falls below Hedera's minimum | Gas price … is below configured minimum | Send legacy transactions (type 0) at the node's gas price. Foundry needs --legacy. |
| Simulating from an unfunded account | INSUFFICIENT_PAYER_BALANCE | Fund the account you simulate from, even for an eth_call |
| A revert deep in a contract | No trace from Hashio | GET /api/v1/contracts/results/{txHash}/actions on the mirror node |
| Reads right after a write | Old values for a few seconds | Wait and refetch |
| A two-contract forge script | Out 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.
airdropTokens((address,(address,int64,bool)[],(address,address,int64,bool)[])[])- Association is a precompile call.
associateToken(account, token)at0x167returns22on success and194if already associated.HtsLib.associateaccepts both. - The ERC-20 facade just works for
approve,transferFromandbalanceOfon HTS tokens, from contracts too. msg.valueis tinybar. Sending 1.5 HBAR arrives as150_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 afterleave(now a bounded shortfall).
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#
| Thing | Testnet | Mainnet |
|---|---|---|
| Infinity Pool (Mothership) | 0.0.1418650 | 0.0.1460199 |
| SAUCE | 0.0.1183558 | 0.0.731861 |
| xSAUCE | 0.0.1418651 | 0.0.1460200 |
| V1 router | 0.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.