skills/gear-builtin-actors/SKILL.md
Use when a builder needs to design or debug calls from a standard Gear/Vara Sails program into runtime builtin actors such as BLS12-381, staking, proxy, or ETH bridge, including ActorId derivation, request encoding, reply decoding, and gas or ED budgeting. Do not use for regular program-to-program messaging, Vara.eth or ethexe-only work, non-Sails repositories, or runtime-maintenance tasks inside the Gear repo.
npx skillsauth add gear-foundation/vara-skills gear-builtin-actorsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Treat builtin actors as a distinct call target: runtime-provided pseudo-programs at hardcoded ActorIds, reached via the normal msg::send_for_reply family but with request and reply types defined in the gbuiltin-* helper crates, not in a Sails IDL.
../../references/gear-builtin-actors.md — actor catalog, ActorId derivation, per-actor request/response shapes, calling pattern../../references/gear-messaging-and-replies.md — reply semantics for send_for_reply../../references/gear-gas-reservations-and-waitlist.md — gas budgeting and waitlist interaction when awaiting builtin replies../../references/gear-gstd-api-and-syscalls.md — the underlying gstd::msg API familysend_for_reply targets a hardcoded non-program ActorId and the reply does not decode as a Sails routegbuiltin_*::Response rather than a Sails-routed payloadActorId constants need revalidationBuiltinActors in gear/vara/runtime/vara/src/lib.rs (IDs 1 = BLS12-381, 2 = staking, 3 = ETH bridge, 4 = proxy). IDs are runtime-version-bound.gbuiltin-* helper crate: gbuiltin-staking, gbuiltin-proxy, gbuiltin-bls381, gbuiltin-eth-bridge. Import its Request (and Response where defined).ActorId from the builtin ID via hash((b"built/in", id).encode()), or take the stable hex from the reference. Store as a const ActorId in the module that owns the call.msg::send_bytes_for_reply(ACTOR_ID, &payload[..], value, reply_deposit)?.await. Value and reply deposit follow Substrate ED rules for the builtin's underlying pallet.gbuiltin_*::Response (where one is defined) or is empty for fire-and-forget variants; an error reply surfaces as the .await Err arm and carries a BuiltinActorError payload.max_gas() weight; block allowance failures manifest as error replies, not panics.read_state, and no code.ActorId literals without citing the runtime file or using hash((b"built/in", id).encode()) — IDs are runtime-version-bound and change with registration changes.Response::decode(&mut &bytes[..]) from the matching gbuiltin-* crate, not with a generated Sails client.#[gstd::async_main] or an async service method.value transferred.u64 registration key, the ActorId is its hashed account.development
Use when approved tasks require Rust code changes in a Sails ethexe workspace with the ethexe feature enabled. Do not use for standard Gear/Vara Sails apps without ethexe, or when the spec or architecture is still unsettled.
development
Use when a builder needs to design or review architecture for a Sails ethexe app with dual-transport, payable methods, Solidity interface generation, or Ethereum-style events. Do not use for standard Gear/Vara Sails apps without ethexe.
development
Use when a builder needs a read-side indexer and query API for a standard Gear/Vara Sails app using program events, IDL-driven decoding, projected read models, and optional on-chain query enrichment. Do not use for command-side backends, generic Node APIs, non-Sails repositories, Vara.eth or ethexe-first work.
development
Use when an agent needs to interact with Vara Network on-chain — deploy programs, call Sails methods, manage wallets, transfer tokens, monitor events. Do not use for building Sails programs.