Hello everyone — this is an introduction to Kasane Chain. We have two simple goals:
- Strengthen the connection between ICP and EVM, so EVM tools and workflows can be used on ICP more naturally.
- Improve the developer experience (DX) for building and operating EVM applications on ICP — including usability, operations, and observability.
What’s unique (what you can do)
1) A canister that embeds an EVM execution engine
Kasane embeds an EVM execution engine inside a canister and runs with a simple lifecycle: submit → queue → produce blocks.
The important point is that this is not “connecting to an external EVM node.” EVM state transitions and block production happen inside the canister.
2) A canister-native way to execute EVM transactions without Ethereum signatures
In addition to signed raw transactions (rpc_eth_send_raw_transaction), Kasane provides a canister-native path called submit_ic_tx.
submit_ic_txtakes typed fields:to / value / gas / nonce / fee / data— no Ethereum signature required.- The EVM sender (
from) is derived deterministically from the caller’s Principal (msg_caller). - Authorization is decided in ICP context (for example, the caller must not be anonymous).
submit_ic_txcan be called directly by any non-anonymous IC identity.
As a result, a canister can execute EVM transactions on Kasane without using tECDSA.
3) RPC delivery model (canister methods + gateway)
- The canister itself exposes
rpc_eth_*methods. - To reduce friction with the EVM ecosystem, we also provide an HTTP JSON-RPC endpoint: https://rpc-testnet.kasane.network
- This endpoint acts as a gateway, translating JSON-RPC requests into canister calls.
- The JSON-RPC compatibility matrix is here: rpc-gatewayhttps://github.com/kasane-network/rpc-gateway/blob/main/README.md
4) Block production mechanism (current implementation)
At a high level, block production is driven by internal canister queues and timers — not by a resident process.
submit_* only enqueues work; execution is handled by automatic production. In that sense, the operating model is serverless-like: no mining loop process is required, and progression happens inside the canister.
- When
submit_ic_tx/rpc_eth_send_raw_transactionsucceeds, schedule a production tick - On a one-shot timer tick (default: 2 seconds), fetch executable candidates from
ready_queue - Select candidates by fee priority and nonce consistency (nonce gaps are not allowed)
- Execute sequentially within block gas and instruction constraints; record failures with
drop_code - If any transactions succeed, persist block/receipts/index and update head/base fee
- If executable transactions remain, schedule the next tick; otherwise wait
5) Gas specification
Kasane uses an EIP-1559-style fee model. Key points:
- Major default constants (runtime defaults)
base_fee:250_000_000_000wei (250 gwei)min_gas_price:250_000_000_000wei (legacy lower bound)min_priority_fee:250_000_000_000weiblock_gas_limit:6_000_000(we’re validating a phased expansion of this upper bound)
- Effective gas price (EIP-1559)
effective_gas_price = min(max_fee_per_gas, base_fee + max_priority_fee_per_gas)- Reject if
max_priority_fee_per_gas > max_fee_per_gasormax_fee_per_gas < base_fee - Related limits:
MAX_TX_SIZE = 128 * 1024,MAX_TXS_PER_BLOCK = 1024
base_feeupdate- Updated per block using an EIP-1559-compatible formula (
ELASTICITY_MULTIPLIER = 2,BASE_FEE_MAX_CHANGE_DENOMINATOR = 8)
- Updated per block using an EIP-1559-compatible formula (
- Supported transaction types
- Supported: Legacy / EIP-2930 / EIP-1559
- Not supported: EIP-4844 (type=0x03), EIP-7702 (type=0x04)
6) (Future feature) Update/query precompile
This section describes a future design and is not available in the current Testnet Alpha.
The goal is to allow EVM execution to reach ICP canister functionality via precompiles, in two tracks:
update_callvia a router canister- Synchronous
query_callduring transaction execution (with strict time/size limits)
Planned update_call flow:
- A precompile forwards requests from EVM transactions to a router canister
- The router canister performs an
update_callto the target canister - Results are returned in a traceable way (e.g., status/outbox-style reference)
Planned query_call flow:
- During tx execution, synchronously call
query_callon the target canister - Enforce upper bounds on response time and response size
- Treat limit violations or invalid responses as EVM-side failures (revert / precompile error)
For safe rollout, we plan a guarded introduction:
- Control the initial set of allowed target canisters/methods (phased release)
- Enforce rate limits and cycle budgets
- Explicit payload size limits and timeouts
With this feature, Kasane aims to evolve from “an EVM-compatible chain” into an EVM execution environment that can directly incorporate IC functionality.
7) (Work in progress) Wrap / Unwrap flow overview
This section summarizes the current Wrap/Unwrap compatibility flow between ICP and Kasane, including status tracking and recovery paths.
- Wrap (ICP → Kasane)
- Enqueue with
submit_wrap_request; after the worker executesicrc2_transfer_from(pull), mint on Kasane viasubmit_ic_tx - If mint fails, keep a refund path via
withdraw_failed_wrapwithmint_failed_recoverable=true
- Enqueue with
- Unwrap (Kasane → ICP)
- Requests submitted from the gateway via
submit_unwrap_requestare processed by the wrap canister worker, which executesicrc1_transferand storesSucceeded/Failedplusledger_tx_id / error_code
- Requests submitted from the gateway via
Notes
- Anonymous callers are rejected:
submit_ic_tx/rpc_eth_send_raw_transactiondo not accept anonymous calls. - Pruning: older history is pruned, so
Pruned/PossiblyPrunedmay be returned depending on range. Long-term history is retained on the indexer side. - Block tags:
latest/pending/safe/finalized/earliest/numberare accepted, butsafe/finalizedare currently treated the same aslatest.
For past blocks ineth_call/eth_estimateGas(earliestornumberother than head), the result isexec.state.unavailable.
Foreth_getTransactionCount,pendingreturns the pending nonce. - Finality model: the current implementation does not assume reorgs; blocks produced by auto-production are treated as final operationally.
- Signed path coverage:
rpc_eth_send_raw_transactiondoes not support EIP-4844 (type=0x03) or EIP-7702 (type=0x04). - Security note: this is still Testnet Alpha. Continuous validation is ongoing, but a high-assurance security review is still ahead.
Current status
- Testnet Alpha is live
- Current operational info :
- Network:
Kasane - Chain ID:
4801360 - EVM canister:
4c52m-aiaaa-aaaam-agwwa-cai - Native token:
ICP(1 ICP = 10^18smallest unit) - RPC: https://rpc-testnet.kasane.network
- Explorer: https://explorer-testnet.kasane.network
- Network:
What we’d like feedback on
Please share candid, near-production feedback:
- For DEX / app developers
- Where are the pain points in
submit_ic_txand the RPC paths? - Are nonce retrieval/tracking and error interpretation straightforward to implement?
- Where are the pain points in
- For builders combining Kasane × IC
- What concerns remain around Wrap/Unwrap UX or safety?
- What APIs/samples/guides are missing for canister integration?
- Looking for collaborators / testers
- People who want to try DEX/apps on Kasane
- People who want to build ICP-integrated use cases
Links
- Faucet: https://testnet-faucet.kasane.network
- Demo DEX (UI canister): https://rlhjx-iyaaa-aaaaf-qcnyq-cai.icp0.io
- Docs: What is Kasane - Kasane Developer Docs
- GitHub: Kasane · GitHub
- X: https://x.com/kasane_ic


