Transaction types
GenLayer supports ordinary EVM transactions and transactions that enter Intelligent Contract consensus. The distinction determines which execution environment runs the code and which status an application must monitor.
Ordinary EVM transactions
EOAs can transfer native GEN or call Solidity contracts on GenLayer Chain. The EVM executes these operations according to the chain's ordinary rules. Their EVM receipt is the relevant execution record.
Examples include:
- transferring GEN between EOAs;
- interacting with an ERC-20 or another Solidity contract; and
- calling staking or consensus administration contracts directly.
Intelligent Contract deployment
A deployment request creates a Ghost contract on GenLayer Chain and submits the Intelligent Contract code and constructor arguments for GenVM consensus. The Ghost and Intelligent Contract use the same address.
The Ghost can exist before GenVM deployment finalizes. Therefore, the presence of EVM code at the address does not by itself prove that the Intelligent Contract deployment succeeded. Follow the deployment's GenLayer transaction status and receipt.
Intelligent Contract write call
A write call sends encoded method data to an existing Intelligent Contract's Ghost. The Ghost relays the request to the consensus contracts, and the resulting transaction follows the full proposal, voting, appeal, and finalization lifecycle.
A call can include native value. The value is accounted for separately from the consensus fee budget and follows the protocol's cancellation and settlement rules.
Intelligent Contract messages
During deterministic execution, an Intelligent Contract can schedule asynchronous messages to another Intelligent Contract, an EVM contract, or an EOA. A message can be configured for acceptance or finalization and can create a child Intelligent Contract transaction.
Messages use fee capacity reserved by the parent transaction. They are not synchronous nested calls and do not return a value to the parent execution.
Read-only simulation
A read or simulated call can execute through a node RPC without creating an onchain consensus transaction. It is useful for previews and view methods, but its result does not have protocol finality and can depend on the node's synchronized state.
Use GenLayerJS write calls, read calls, and messages for implementation details.