← Back to Skills Marketplace
🔌

jovay-interaction-skill

by jovay-developer · GitHub ↗ · v1.0.0 · MIT-0
cross-platform ⚠ suspicious
124
Downloads
0
Stars
0
Active Installs
1
Versions
Install in OpenClaw
/install jovay-interaction-skill
Description
Skill for interacting with Jovay or Ethereum network using jovay-cli
README (SKILL.md)

Jovay Interaction Skill

Description

This skill enables interaction with Jovay, a secure, open, and modular Layer2 EVM blockchain. It uses the jovay-cli tool to perform wallet management, token transfers, smart contract interactions, and network configuration.

Prerequisites

  • Node.js v20+
  • jovay-cli installed (npm install -g @jovaylabs/jovay-cli)
  • Configured wallet with private key
  • Network configured (testnet or mainnet)

Network information (official)

Canonical RPC URLs, chain IDs, explorers, and all bridge contract addresses (ETH and ERC-20) are maintained in the Jovay documentation:

Quick reference — ETH bridge (same values as jovay-cli src/common/bridge.ts):

Network L1 ETH bridge L2 ETH bridge
Jovay Sepolia (testnet) 0x940eFB877281884699176892B02A3db49f29CDE8 0xD278bC7189d2ed65c005c345A0e8a387f15b7a3A
Jovay mainnet 0x922248db4a99bb542539ae7165fb9d7a546fb9f1 0xb220d17a11bd2d11e3f57a305ff5b481c81b1028

ERC-20 bridge addresses are listed only in the doc above; use jovay contract with those addresses for token approvals and transfers.

Instructions

When the user wants to interact with Jovay blockchain, follow these patterns:

Initial Setup

Note: Initialization is only required once after installation. You can verify if initialization is complete by running jovay network get. If it returns network configuration info, initialization has already been done.

  1. Initialize CLI: jovay init
  2. Check network: jovay network get
  3. Switch network: jovay network switch --network testnet|mainnet
  4. Configure wallet: jovay wallet set --sk \x3Cprivate-key> [--enc]

Wallet Operations

Set Wallet

Configure wallet with private key.

jovay wallet set --sk \x3Cprivate-key> [--enc] [--enc-key \x3Cpassword>]

Options:

  • --sk, --secret-key \x3Ckey>: Private key (64 hex characters, with or without 0x prefix)
  • --enc: Enable encryption with auto-generated key (save the key!)
  • --enc-key \x3Cpassword>: Custom encryption password (auto-enables encryption)
  • --origin-enc-key \x3Ckey>: Current encryption key (required when changing encrypted wallet)

Get Address

jovay wallet address

Check Balance

jovay wallet balance [options]

Options:

  • --address \x3C0x string>: Address to query (defaults to wallet address)
  • --token \x3C0x string>: ERC20 token address (omit for native ETH)
  • --l1: Query on Ethereum instead of Jovay
  • --rpc \x3Curl>: Custom RPC endpoint
  • --block \x3Cnumber>: Query at specific block height

Airdrop (Testnet Only)

Request 0.001 Jovay Sepolia ETH (once per 24 hours).

jovay wallet airdrop

Transfer

jovay wallet transfer --amount \x3Cwei> --to \x3Caddress> [options]

Options:

  • --amount \x3Cbigint>: Amount in smallest unit (Wei) - required
  • --to \x3C0x string>: Recipient address - required
  • --token \x3C0x string>: ERC20 token address (omit for native ETH)
  • --sk \x3Ckey>: Override wallet private key
  • --enc-key \x3Cpassword>: Encryption key for encrypted wallet
  • --l1: Transfer on Ethereum instead of Jovay
  • --rpc \x3Curl>: Custom RPC endpoint
  • --broadcast: Send transaction (without this, only outputs signed data)

Approve

jovay wallet approve --amount \x3Camount> --to \x3Cspender> --token \x3Caddress> [options]

Options:

  • --amount \x3Cbigint>: Allowance amount in smallest unit - required
  • --to \x3C0x string>: Spender address - required
  • --token \x3C0x string>: ERC20 token address - required
  • --sk \x3Ckey>: Override wallet private key
  • --enc-key \x3Cpassword>: Encryption key for encrypted wallet
  • --l1: Approve on Ethereum instead of Jovay
  • --rpc \x3Curl>: Custom RPC endpoint
  • --broadcast: Send transaction (without this, only outputs signed data)

Bridge Operations

Deposit ETH (L1 → L2)

Bridge ETH from Ethereum to Jovay.

jovay bridge deposit --amount \x3Cwei> --to \x3Cl2-address> [options]

Options:

  • --amount \x3Cbigint>: Amount in Wei to deposit - required
  • --to \x3C0x string>: Recipient address on Jovay (L2) - required
  • --gas-limit \x3Cbigint>: Gas limit reserved for the L2 finalize-deposit step (default: 200000). It must be the gas the bridge needs on Jovay; if it is too low, the L1 transaction reverts with gas limit must be bigger than or equal to the tx_fee of finalize deposit on Jovay. On Jovay Sepolia testnet, 500000 is often required. A larger limit increases msg.value (see note below).
  • --data \x3Chex>: Optional extra data (default: 0x)
  • --sk \x3Ckey>: Override wallet private key
  • --enc-key \x3Cpassword>: Encryption key for encrypted wallet
  • --rpc \x3Curl>: Custom L1 RPC endpoint
  • --broadcast: Send transaction (without this, only outputs signed data)

Note: The bridge requires msg.value = amount + gasLimit × L2 gas price. The CLI computes this from your configured L2 RPC and sends the correct msg.value automatically. Your L1 wallet must hold enough for that msg.value plus L1 gas. After the L1 transaction is finalized, the bridge relayer credits funds on L2.

Withdraw ETH (L2 → L1)

Bridge ETH from Jovay back to Ethereum. This is a two-step process.

jovay bridge withdraw --amount \x3Cwei> --to \x3Cl1-address> [options]

Options:

  • --amount \x3Cbigint>: Amount in Wei to withdraw - required
  • --to \x3C0x string>: Recipient address on Ethereum (L1) - required
  • --gas-limit \x3Cbigint>: Gas limit for the L1 finalization transaction (default: 200000)
  • --data \x3Chex>: Optional extra data (default: 0x)
  • --sk \x3Ckey>: Override wallet private key
  • --enc-key \x3Cpassword>: Encryption key for encrypted wallet
  • --rpc \x3Curl>: Custom L2 RPC endpoint
  • --broadcast: Send transaction (without this, only outputs signed data)

Note: The bridge requires msg.value = amount + gasLimit × L1 gas price. The CLI computes this from your configured L1 RPC. Your L2 wallet must hold enough for that msg.value plus L2 gas. After the L2 transaction is confirmed, wait for the batch to be finalized on L1 (up to 1 hour). Then run jovay bridge finalize-withdraw with the proof data from the Jovay Explorer.

Finalize Withdraw (L1 - Step 2)

After the L2 withdrawal batch is finalized, claim your funds on Ethereum.

jovay bridge finalize-withdraw --amount \x3Cwei> --nonce \x3Cnonce> --msg \x3Chex> --batch-index \x3Cindex> --proof \x3Chex> [options]

Options:

  • --amount \x3Cbigint>: The exact amount of ETH withdrawn on L2 (Wei) - required
  • --nonce \x3Cbigint>: Nonce of the cross-chain message (from SentMsg event log) - required
  • --msg \x3Chex>: Original message from the SentMsg event log (hex, 0x-prefixed) - required
  • --batch-index \x3Cbigint>: Batch index containing the L2 withdrawal tx - required
  • --proof \x3Chex>: SPV merkle proof from the Jovay Explorer transaction page - required
  • --sk \x3Ckey>: Override wallet private key
  • --enc-key \x3Cpassword>: Encryption key for encrypted wallet
  • --rpc \x3Curl>: Custom L1 RPC endpoint
  • --broadcast: Send transaction (without this, only outputs signed data)

How to get proof data: Go to your L2 withdrawal transaction on the Jovay Explorer. Find the SentMsg event to get the nonce and msg. Click the block number to find the batchIndex. Copy the "Proof" hex string for --proof.

Claim Deposit (L2 - Manual)

If the automatic L1 → L2 deposit relay fails, manually claim on L2.

jovay bridge claim-deposit --msg \x3Chex> [options]

Options:

  • --msg \x3Chex>: Original message data from the DepositETH event log (hex, 0x-prefixed) - required
  • --sk \x3Ckey>: Override wallet private key
  • --enc-key \x3Cpassword>: Encryption key for encrypted wallet
  • --rpc \x3Curl>: Custom L2 RPC endpoint
  • --broadcast: Send transaction (without this, only outputs signed data)

Contract Interactions

Read Contract (call)

Read data from a contract without sending a transaction.

With ABI file:

jovay contract call --contract \x3Caddress> --method \x3Cname> --abi \x3Cfile> --args '\x3Cjson-args>'

Without ABI (manual type definition):

jovay contract call --contract \x3Caddress> --method \x3Cname> --inputs \x3Ctypes> --outputs \x3Ctypes> --args '\x3Cjson-args>'

Common options:

  • --contract \x3Caddress>: Contract address (required)
  • --method \x3Cname>: Method name to call (required)
  • --abi \x3Cfile>: Path to ABI JSON file
  • --inputs \x3Ctypes>: Input parameter types (e.g., address,uint256[])
  • --outputs \x3Ctypes>: Output parameter types (e.g., string,(address,uint256))
  • --args '\x3Cjson>': Arguments as JSON array string
  • --l1: Call on Ethereum instead of Jovay
  • --rpc \x3Curl>: Custom RPC endpoint
  • --dry-run: Output encoded data without calling

Write Contract (write)

Send a transaction to modify contract state.

With ABI file:

jovay contract write --contract \x3Caddress> --method \x3Cname> --abi \x3Cfile> --args '\x3Cjson-args>' --broadcast

Without ABI:

jovay contract write --contract \x3Caddress> --method \x3Cname> --inputs \x3Ctypes> --args '\x3Cjson-args>' --broadcast

Common options:

  • --contract \x3Caddress>: Contract address (required)
  • --method \x3Cname>: Method name to call (required)
  • --abi \x3Cfile>: Path to ABI JSON file
  • --inputs \x3Ctypes>: Input parameter types
  • --args '\x3Cjson>': Arguments as JSON array string
  • --value \x3Cwei>: Native token to send (for payable functions)
  • --broadcast: Send transaction to network (required to execute)
  • --sk \x3Ckey>: Override wallet private key
  • --enc-key \x3Ckey>: Encryption key for encrypted wallet
  • --l1: Write on Ethereum instead of Jovay
  • --rpc \x3Curl>: Custom RPC endpoint

Type Definition Examples

Type Example
Simple types address, uint256, bool, string, bytes
Array uint256[], address[]
Tuple (address,uint256), (address,bytes32)
Complex address,uint256[],(address,bytes32)

Args Format Examples

Input Types Args Example
address '"0x1234..."'
address,uint256 '"0x1234...", 1000000'
uint256[] '[100, 200, 300]'
address,(uint256,string) '"0x1234...", [100, "hello"]'

Transaction Operations

Get Transaction Info

jovay transaction info --tx \x3Chash> [options]

Options:

  • --tx, --transaction \x3Chash>: Transaction hash - required
  • --raw: Display full raw JSON response instead of formatted summary
  • --abi \x3Cfile>: ABI file path to decode event logs
  • --rpc \x3Curl>: Custom RPC endpoint
  • --l1: Query on Ethereum instead of Jovay

Send Raw Transaction

jovay transaction send --raw-tx \x3Csigned-tx> [options]

Options:

  • --raw-tx \x3Cstring>: Signed raw transaction data - required
  • --rpc \x3Curl>: Custom RPC endpoint
  • --l1: Send to Ethereum instead of Jovay

Network Configuration

Get Network Info

jovay network get

Displays current network configuration and wallet info.

Switch Network

jovay network switch --network \x3Ctestnet|mainnet> [options]

Options:

  • --network \x3Cstring>: Target network - required (testnet or mainnet)
  • --api-key \x3Cstring>: ZAN API key for RPC endpoints
  • --l1, --l1-rpc \x3Curl>: Custom Ethereum RPC endpoint
  • --l2, --l2-rpc \x3Curl>: Custom Jovay RPC endpoint

Set Network Config

jovay network set [options]

Options:

  • --api-key \x3Cstring>: Update ZAN API key
  • --l1, --l1-rpc \x3Curl>: Update Ethereum RPC endpoint
  • --l2, --l2-rpc \x3Curl>: Update Jovay RPC endpoint

Examples

\x3Cexample> \x3Cuser_query>Check my wallet balance on Jovay\x3C/user_query> \x3Cassistant_response> I'll check your wallet balance on Jovay L2.

jovay wallet balance

For ERC20 token balance, use:

jovay wallet balance --token 0x\x3Ctoken-address>

\x3C/assistant_response> \x3C/example>

\x3Cexample> \x3Cuser_query>Transfer 0.01 ETH to 0x1234...abcd\x3C/user_query> \x3Cassistant_response> I'll help you transfer 0.01 ETH. Note: amount must be in Wei (0.01 ETH = 10000000000000000 Wei).

jovay wallet transfer --amount 10000000000000000 --to 0x1234...abcd --broadcast

\x3C/assistant_response> \x3C/example>

\x3Cexample> \x3Cuser_query>Call balanceOf on an ERC20 contract\x3C/user_query> \x3Cassistant_response> I'll call the balanceOf method on the ERC20 contract.

jovay contract call \
  --contract 0x\x3Ccontract-address> \
  --method balanceOf \
  --inputs address \
  --outputs uint256 \
  --args '"0x\x3Cwallet-address>"'

\x3C/assistant_response> \x3C/example>

\x3Cexample> \x3Cuser_query>Call a contract method using ABI file\x3C/user_query> \x3Cassistant_response> I'll call the contract method using the ABI file for automatic encoding/decoding.

jovay contract call \
  --contract 0x\x3Ccontract-address> \
  --method getTokenInfo \
  --abi ./path/to/abi.json \
  --args '"0x\x3Ctoken-address>"'

\x3C/assistant_response> \x3C/example>

\x3Cexample> \x3Cuser_query>Call a contract method with complex tuple parameters\x3C/user_query> \x3Cassistant_response> I'll call the method with tuple parameters. For tuple types, wrap the values in an array.

jovay contract call \
  --contract 0x\x3Ccontract-address> \
  --method processOrder \
  --inputs "address,(uint256,string)" \
  --outputs "bool" \
  --args '"0x\x3Caddress>", [1000, "order-123"]'

\x3C/assistant_response> \x3C/example>

\x3Cexample> \x3Cuser_query>Write to a contract to transfer tokens\x3C/user_query> \x3Cassistant_response> I'll send a transaction to transfer tokens. Remember to use --broadcast to actually send it.

jovay contract write \
  --contract 0x\x3Ctoken-address> \
  --method transfer \
  --inputs "address,uint256" \
  --args '"0x\x3Crecipient>", 1000000000000000000' \
  --broadcast

\x3C/assistant_response> \x3C/example>

\x3Cexample> \x3Cuser_query>Call a payable mint function with ETH\x3C/user_query> \x3Cassistant_response> I'll call the payable mint function and send ETH with the transaction. Use --value to specify the amount in Wei.

jovay contract write \
  --contract 0x\x3Cnft-address> \
  --method mint \
  --inputs "uint256" \
  --args '1' \
  --value 100000000000000000 \
  --broadcast

This sends 0.1 ETH (100000000000000000 Wei) to mint 1 NFT. \x3C/assistant_response> \x3C/example>

\x3Cexample> \x3Cuser_query>Preview transaction data without sending (dry run)\x3C/user_query> \x3Cassistant_response> I'll generate the encoded calldata without actually calling the contract using --dry-run.

jovay contract call \
  --contract 0x\x3Ccontract-address> \
  --method approve \
  --inputs "address,uint256" \
  --args '"0x\x3Cspender>", 1000000' \
  --dry-run

This outputs the encoded function data that can be used in other tools or transactions. \x3C/assistant_response> \x3C/example>

\x3Cexample> \x3Cuser_query>Call a contract on Ethereum L1 instead of Jovay\x3C/user_query> \x3Cassistant_response> I'll call the contract on Ethereum (L1) instead of Jovay (L2) using the --l1 flag.

jovay contract call \
  --contract 0x\x3Cl1-contract-address> \
  --method balanceOf \
  --inputs address \
  --outputs uint256 \
  --args '"0x\x3Cwallet-address>"' \
  --l1

\x3C/assistant_response> \x3C/example>

\x3Cexample> \x3Cuser_query>Write to contract with encrypted wallet\x3C/user_query> \x3Cassistant_response> I'll send a transaction using an encrypted wallet. You need to provide the encryption key with --enc-key.

jovay contract write \
  --contract 0x\x3Ccontract-address> \
  --method setApprovalForAll \
  --inputs "address,bool" \
  --args '"0x\x3Coperator>", true' \
  --enc-key "your-encryption-password" \
  --broadcast

\x3C/assistant_response> \x3C/example>

\x3Cexample> \x3Cuser_query>Get testnet tokens for development\x3C/user_query> \x3Cassistant_response> I'll request testnet ETH from the Jovay faucet (limited to once per 24 hours).

First, ensure you're on testnet:

jovay network switch --network testnet

Then request airdrop:

jovay wallet airdrop

\x3C/assistant_response> \x3C/example>

\x3Cexample> \x3Cuser_query>Bridge 0.1 ETH from Ethereum to Jovay\x3C/user_query> \x3Cassistant_response> I'll help you deposit 0.1 ETH from L1 to L2. Amount must be in Wei (0.1 ETH = 100000000000000000 Wei). On testnet, if the default L2 gas limit is too low, add --gas-limit 500000 (or higher) so the deposit passes the bridge check.

jovay bridge deposit --amount 100000000000000000 --to 0x\x3Cyour-l2-address> --gas-limit 500000 --broadcast

\x3C/assistant_response> \x3C/example>

\x3Cexample> \x3Cuser_query>Withdraw ETH from Jovay back to Ethereum\x3C/user_query> \x3Cassistant_response> I'll initiate an ETH withdrawal from Jovay (L2) to Ethereum (L1). Note: this is step 1 of a two-step process.

Step 1 - Initiate withdrawal on L2:

jovay bridge withdraw --amount 50000000000000000 --to 0x\x3Cyour-l1-address> --broadcast

After this transaction is confirmed, wait for the batch to be finalized on L1 (up to 1 hour). Then get the proof data from the Jovay Explorer and run step 2.

Step 2 - Finalize on L1:

jovay bridge finalize-withdraw \
  --amount 50000000000000000 \
  --nonce \x3Cnonce-from-SentMsg-event> \
  --msg \x3Chex-message-from-SentMsg-event> \
  --batch-index \x3Cbatch-index> \
  --proof \x3Cmerkle-proof-hex> \
  --broadcast

\x3C/assistant_response> \x3C/example>

\x3Cexample> \x3Cuser_query>My L1 deposit didn't arrive on L2\x3C/user_query> \x3Cassistant_response> If the automatic deposit relay failed, you can manually claim it on L2. You'll need the message data from the DepositETH event log of your L1 deposit transaction.

jovay bridge claim-deposit --msg 0x\x3Cmessage-from-DepositETH-event> --broadcast

You can find the message data in the transaction details on an L1 block explorer (e.g., Etherscan). \x3C/assistant_response> \x3C/example>

Important Notes

  1. Amount units: All amounts must be in smallest unit (Wei for ETH, smallest decimal for tokens)
  2. Broadcast flag: Use --broadcast to send transactions; without it, only signed data is output
  3. L1 vs L2: Use --l1 flag to operate on Ethereum instead of Jovay
  4. Encrypted wallet: Use --enc-key when wallet is encrypted
  5. ABI files: Provide --abi for complex contract interactions, or use --inputs/--outputs for simple cases
  6. Bridge deposit --gas-limit: If L1 deposit fails with finalize deposit on Jovay, increase --gas-limit (testnet often needs 500000 or more). This also increases msg.value on L1.
Usage Guidance
This skill is coherent for running a Jovay/Ethereum CLI, but be cautious with private keys: avoid passing raw private keys on the command line (they appear in process lists and shell history). Prefer using encrypted wallets, environment-protected credential stores, or hardware wallets if supported. Before installing jovay-cli globally, verify the npm package name (@jovaylabs/jovay-cli), check its official documentation/repository, and review the package (or install locally) rather than blindly running global installs. Never paste private keys into chat or third-party tools. If you only need read-only operations, avoid configuring a private-key-backed wallet on systems you don't fully control.
Capability Analysis
Type: OpenClaw Skill Name: jovay-interaction-skill Version: 1.0.0 The skill bundle provides an interface for an AI agent to manage cryptocurrency wallets and execute transactions on the Jovay blockchain via the `jovay-cli` tool. Key indicators in `SKILL.md` include instructions for handling raw private keys (`--sk`) and broadcasting financial transactions, which are high-risk capabilities for an AI agent. While these actions are consistent with the skill's stated purpose, the potential for credential exposure or unauthorized transfers makes it inherently risky. The skill also installs an external dependency, `@jovaylabs/jovay-cli`, as specified in the metadata.
Capability Tags
cryptorequires-wallet
Capability Assessment
Purpose & Capability
The skill is an instruction-only wrapper around the jovay-cli tool and correctly requires the 'jovay' binary. The SKILL.md even includes an npm install entry for @jovaylabs/jovay-cli which is appropriate for this purpose. Minor inconsistency: the registry metadata says 'No install spec' while SKILL.md contains an 'install' hint (npm); this is likely a documentation/packaging mismatch but does not change the intended capability.
Instruction Scope
Instructions stay within the scope of blockchain wallet/bridge/contract operations. However, the docs encourage providing private keys directly via CLI flags (e.g., --sk <private-key>), which exposes secrets to shell history and process listings. This is expected for a CLI wallet but is a sensitive operational detail the user must manage carefully.
Install Mechanism
No install spec is present in the registry (skill is instruction-only). The embedded SKILL.md metadata suggests installing @jovaylabs/jovay-cli via npm, which is a common and expected mechanism. Because there is no registry-level install spec, the agent will rely on an already-installed 'jovay' binary—verify the package source before installing globally.
Credentials
The skill requests no environment variables or unrelated credentials. All sensitive material referenced (private key, encryption password) are wallet credentials appropriate to the stated functionality. The quantity and kind of secrets implied are proportional to a blockchain CLI tool.
Persistence & Privilege
Skill does not request always-on presence and uses normal, user-invocable behavior. It does not ask to modify other skills or system-wide agent settings.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install jovay-interaction-skill
  3. After installation, invoke the skill by name or use /jovay-interaction-skill
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v1.0.0
Initial release of jovay-interaction-skill for Jovay and Ethereum blockchain interactions. - Enables wallet management, token transfers, and smart contract interactions via jovay-cli. - Supports Layer2 bridge operations: deposit, withdraw, and finalize ETH transfers between Ethereum and Jovay. - Provides detailed CLI usage patterns and required options for all core commands. - Includes network information, prerequisites, and official resource links. - Covers both testnet and mainnet, with guidance for wallet setup and airdrop (testnet only).
Metadata
Slug jovay-interaction-skill
Version 1.0.0
License MIT-0
All-time Installs 0
Active Installs 0
Total Versions 1
Frequently Asked Questions

What is jovay-interaction-skill?

Skill for interacting with Jovay or Ethereum network using jovay-cli. It is an AI Agent Skill for Claude Code / OpenClaw, with 124 downloads so far.

How do I install jovay-interaction-skill?

Run "/install jovay-interaction-skill" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is jovay-interaction-skill free?

Yes, jovay-interaction-skill is completely free, licensed under MIT-0. You can download, install and use it at no cost.

Which platforms does jovay-interaction-skill support?

jovay-interaction-skill is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created jovay-interaction-skill?

It is built and maintained by jovay-developer (@jovay-developer); the current version is v1.0.0.

💬 Comments