{
  "schemaVersion": "1.0",
  "item": {
    "slug": "genlayer-dev",
    "name": "Genlayer Dev Claw Skill",
    "source": "tencent",
    "type": "skill",
    "category": "AI 智能",
    "sourceUrl": "https://clawhub.ai/acastellana/genlayer-dev",
    "canonicalUrl": "https://clawhub.ai/acastellana/genlayer-dev",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/genlayer-dev",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=genlayer-dev",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "CHANGELOG.md",
      "README.md",
      "SKILL.md",
      "references/deployment.md",
      "references/equivalence-principles.md",
      "references/examples.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "slug": "genlayer-dev",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-01T16:59:27.020Z",
      "expiresAt": "2026-05-08T16:59:27.020Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=genlayer-dev",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=genlayer-dev",
        "contentDisposition": "attachment; filename=\"genlayer-dev-0.1.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "genlayer-dev"
      },
      "scope": "item",
      "summary": "Item download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this item.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/genlayer-dev"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/genlayer-dev",
    "agentPageUrl": "https://openagent3.xyz/skills/genlayer-dev/agent",
    "manifestUrl": "https://openagent3.xyz/skills/genlayer-dev/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/genlayer-dev/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "GenLayer Intelligent Contracts",
        "body": "GenLayer enables Intelligent Contracts - Python smart contracts that can call LLMs, fetch web data, and handle non-deterministic operations while maintaining blockchain consensus."
      },
      {
        "title": "Minimal Contract",
        "body": "# v0.1.0\n# { \"Depends\": \"py-genlayer:latest\" }\nfrom genlayer import *\n\nclass MyContract(gl.Contract):\n    value: str\n    \n    def __init__(self, initial: str):\n        self.value = initial\n    \n    @gl.public.view\n    def get_value(self) -> str:\n        return self.value\n    \n    @gl.public.write\n    def set_value(self, new_value: str) -> None:\n        self.value = new_value"
      },
      {
        "title": "Contract with LLM",
        "body": "# v0.1.0\n# { \"Depends\": \"py-genlayer:latest\" }\nfrom genlayer import *\nimport json\n\nclass AIContract(gl.Contract):\n    result: str\n    \n    def __init__(self):\n        self.result = \"\"\n    \n    @gl.public.write\n    def analyze(self, text: str) -> None:\n        prompt = f\"Analyze this text and respond with JSON: {text}\"\n        \n        def get_analysis():\n            return gl.nondet.exec_prompt(prompt)\n        \n        # All validators must get the same result\n        self.result = gl.eq_principle.strict_eq(get_analysis)\n    \n    @gl.public.view\n    def get_result(self) -> str:\n        return self.result"
      },
      {
        "title": "Contract with Web Access",
        "body": "# v0.1.0\n# { \"Depends\": \"py-genlayer:latest\" }\nfrom genlayer import *\n\nclass WebContract(gl.Contract):\n    content: str\n    \n    def __init__(self):\n        self.content = \"\"\n    \n    @gl.public.write\n    def fetch(self, url: str) -> None:\n        url_copy = url  # Capture for closure\n        \n        def get_page():\n            return gl.nondet.web.render(url_copy, mode=\"text\")\n        \n        self.content = gl.eq_principle.strict_eq(get_page)\n    \n    @gl.public.view\n    def get_content(self) -> str:\n        return self.content"
      },
      {
        "title": "Contract Structure",
        "body": "Version header: # v0.1.0 (required)\nDependencies: # { \"Depends\": \"py-genlayer:latest\" }\nImport: from genlayer import *\nClass: Extend gl.Contract (only ONE per file)\nState: Class-level typed attributes\nConstructor: __init__ (not public)\nMethods: Decorated with @gl.public.view or @gl.public.write"
      },
      {
        "title": "Method Decorators",
        "body": "DecoratorPurposeCan Modify State@gl.public.viewRead-only queriesNo@gl.public.writeState mutationsYes@gl.public.write.payableReceive value + mutateYes"
      },
      {
        "title": "Storage Types",
        "body": "Replace standard Python types with GenVM storage-compatible types:\n\nPython TypeGenVM TypeUsageintu32, u64, u256, i32, i64, etc.Sized integersint (unbounded)bigintArbitrary precision (avoid)list[T]DynArray[T]Dynamic arraysdict[K,V]TreeMap[K,V]Ordered mapsstrstrStrings (unchanged)boolboolBooleans (unchanged)\n\n⚠️ int is NOT supported! Always use sized integers."
      },
      {
        "title": "Address Type",
        "body": "# Creating addresses\naddr = Address(\"0x03FB09251eC05ee9Ca36c98644070B89111D4b3F\")\n\n# Get sender\nsender = gl.message.sender_address\n\n# Conversions\nhex_str = addr.as_hex      # \"0x03FB...\"\nbytes_val = addr.as_bytes  # bytes"
      },
      {
        "title": "Custom Data Types",
        "body": "from dataclasses import dataclass\n\n@allow_storage\n@dataclass\nclass UserData:\n    name: str\n    balance: u256\n    active: bool\n\nclass MyContract(gl.Contract):\n    users: TreeMap[Address, UserData]"
      },
      {
        "title": "The Problem",
        "body": "LLMs and web fetches produce different results across validators. GenLayer solves this with the Equivalence Principle."
      },
      {
        "title": "Equivalence Principles",
        "body": "1. Strict Equality (strict_eq)\n\nAll validators must produce identical results.\n\ndef get_data():\n    return gl.nondet.web.render(url, mode=\"text\")\n\nresult = gl.eq_principle.strict_eq(get_data)\n\nBest for: Factual data, boolean results, exact matches.\n\n2. Prompt Comparative (prompt_comparative)\n\nLLM compares leader's result against validators' results using criteria.\n\ndef get_analysis():\n    return gl.nondet.exec_prompt(prompt)\n\nresult = gl.eq_principle.prompt_comparative(\n    get_analysis,\n    \"The sentiment classification must match\"\n)\n\nBest for: LLM tasks where semantic equivalence matters.\n\n3. Prompt Non-Comparative (prompt_non_comparative)\n\nValidators verify the leader's result meets criteria (don't re-execute).\n\nresult = gl.eq_principle.prompt_non_comparative(\n    lambda: input_data,  # What to process\n    task=\"Summarize the key points\",\n    criteria=\"Summary must be under 100 words and factually accurate\"\n)\n\nBest for: Expensive operations, subjective tasks.\n\n4. Custom Leader/Validator Pattern\n\nresult = gl.vm.run_nondet(\n    leader=lambda: expensive_computation(),\n    validator=lambda leader_result: verify(leader_result)\n)"
      },
      {
        "title": "Non-Deterministic Functions",
        "body": "FunctionPurposegl.nondet.exec_prompt(prompt)Execute LLM promptgl.nondet.web.render(url, mode)Fetch web page (mode=\"text\" or \"html\")\n\n⚠️ Rules:\n\nMust be called inside equivalence principle functions\nCannot access storage directly\nCopy storage data to memory first with gl.storage.copy_to_memory()"
      },
      {
        "title": "Call Other Contracts",
        "body": "# Dynamic typing\nother = gl.get_contract_at(Address(\"0x...\"))\nresult = other.view().some_method()\n\n# Static typing (better IDE support)\n@gl.contract_interface\nclass TokenInterface:\n    class View:\n        def balance_of(self, owner: Address) -> u256: ...\n    class Write:\n        def transfer(self, to: Address, amount: u256) -> bool: ...\n\ntoken = TokenInterface(Address(\"0x...\"))\nbalance = token.view().balance_of(my_address)"
      },
      {
        "title": "Emit Messages (Async Calls)",
        "body": "other = gl.get_contract_at(addr)\nother.emit(on='accepted').update_status(\"active\")\nother.emit(on='finalized').confirm_transaction()"
      },
      {
        "title": "Deploy Contracts",
        "body": "child_addr = gl.deploy_contract(code=contract_code, salt=u256(1))"
      },
      {
        "title": "EVM Interop",
        "body": "@gl.evm.contract_interface\nclass ERC20:\n    class View:\n        def balance_of(self, owner: Address) -> u256: ...\n    class Write:\n        def transfer(self, to: Address, amount: u256) -> bool: ...\n\ntoken = ERC20(evm_address)\nbalance = token.view().balance_of(addr)\ntoken.emit().transfer(recipient, u256(100))  # Messages only on finality"
      },
      {
        "title": "Setup",
        "body": "npm install -g genlayer\ngenlayer init      # Download components\ngenlayer up        # Start local network"
      },
      {
        "title": "Deployment",
        "body": "# Direct deploy\ngenlayer deploy --contract my_contract.py\n\n# With constructor args\ngenlayer deploy --contract my_contract.py --args \"Hello\" 42\n\n# To testnet\ngenlayer network set testnet-asimov\ngenlayer deploy --contract my_contract.py"
      },
      {
        "title": "Interaction",
        "body": "# Read (view methods)\ngenlayer call --address 0x... --function get_value\n\n# Write\ngenlayer write --address 0x... --function set_value --args \"new_value\"\n\n# Get schema\ngenlayer schema --address 0x...\n\n# Check transaction\ngenlayer receipt --tx-hash 0x..."
      },
      {
        "title": "Networks",
        "body": "genlayer network                    # Show current\ngenlayer network list               # Available networks\ngenlayer network set localnet       # Local dev\ngenlayer network set studionet      # Hosted dev\ngenlayer network set testnet-asimov # Testnet"
      },
      {
        "title": "Prompt Engineering",
        "body": "prompt = f\"\"\"\nAnalyze this text and classify the sentiment.\n\nText: {text}\n\nRespond using ONLY this JSON format:\n{{\"sentiment\": \"positive\" | \"negative\" | \"neutral\", \"confidence\": float}}\n\nOutput ONLY valid JSON, no other text.\n\"\"\""
      },
      {
        "title": "Security: Prompt Injection",
        "body": "Restrict inputs: Minimize user-controlled text in prompts\nRestrict outputs: Define exact output formats\nValidate: Check parsed results match expected schema\nSimplify logic: Clear contract flow reduces attack surface"
      },
      {
        "title": "Error Handling",
        "body": "from genlayer import UserError\n\n@gl.public.write\ndef safe_operation(self, value: int) -> None:\n    if value <= 0:\n        raise UserError(\"Value must be positive\")\n    # ... proceed"
      },
      {
        "title": "Memory Management",
        "body": "# Copy storage to memory for non-det blocks\ndata_copy = gl.storage.copy_to_memory(self.some_data)\n\ndef process():\n    return gl.nondet.exec_prompt(f\"Process: {data_copy}\")\n\nresult = gl.eq_principle.strict_eq(process)"
      },
      {
        "title": "Token with AI Transfer Validation",
        "body": "See references/examples.md → LLM ERC20"
      },
      {
        "title": "Prediction Market",
        "body": "See references/examples.md → Football Prediction Market"
      },
      {
        "title": "Vector Search / Embeddings",
        "body": "See references/examples.md → Log Indexer"
      },
      {
        "title": "Debugging",
        "body": "GenLayer Studio: Use genlayer up for local testing\nLogs: Filter by transaction hash, debug level\nPrint statements: print() works in contracts (debug only)"
      },
      {
        "title": "Reference Files",
        "body": "references/sdk-api.md - Complete SDK API reference\nreferences/equivalence-principles.md - Consensus patterns in depth\nreferences/examples.md - Full annotated contract examples (incl. production oracle)\nreferences/deployment.md - CLI, networks, deployment workflow\nreferences/genvm-internals.md - VM architecture, storage, ABI details"
      },
      {
        "title": "Links",
        "body": "Docs: https://docs.genlayer.com\nSDK: https://sdk.genlayer.com\nStudio: https://studio.genlayer.com\nGitHub: https://github.com/genlayerlabs"
      }
    ],
    "body": "GenLayer Intelligent Contracts\n\nGenLayer enables Intelligent Contracts - Python smart contracts that can call LLMs, fetch web data, and handle non-deterministic operations while maintaining blockchain consensus.\n\nQuick Start\nMinimal Contract\n# v0.1.0\n# { \"Depends\": \"py-genlayer:latest\" }\nfrom genlayer import *\n\nclass MyContract(gl.Contract):\n    value: str\n    \n    def __init__(self, initial: str):\n        self.value = initial\n    \n    @gl.public.view\n    def get_value(self) -> str:\n        return self.value\n    \n    @gl.public.write\n    def set_value(self, new_value: str) -> None:\n        self.value = new_value\n\nContract with LLM\n# v0.1.0\n# { \"Depends\": \"py-genlayer:latest\" }\nfrom genlayer import *\nimport json\n\nclass AIContract(gl.Contract):\n    result: str\n    \n    def __init__(self):\n        self.result = \"\"\n    \n    @gl.public.write\n    def analyze(self, text: str) -> None:\n        prompt = f\"Analyze this text and respond with JSON: {text}\"\n        \n        def get_analysis():\n            return gl.nondet.exec_prompt(prompt)\n        \n        # All validators must get the same result\n        self.result = gl.eq_principle.strict_eq(get_analysis)\n    \n    @gl.public.view\n    def get_result(self) -> str:\n        return self.result\n\nContract with Web Access\n# v0.1.0\n# { \"Depends\": \"py-genlayer:latest\" }\nfrom genlayer import *\n\nclass WebContract(gl.Contract):\n    content: str\n    \n    def __init__(self):\n        self.content = \"\"\n    \n    @gl.public.write\n    def fetch(self, url: str) -> None:\n        url_copy = url  # Capture for closure\n        \n        def get_page():\n            return gl.nondet.web.render(url_copy, mode=\"text\")\n        \n        self.content = gl.eq_principle.strict_eq(get_page)\n    \n    @gl.public.view\n    def get_content(self) -> str:\n        return self.content\n\nCore Concepts\nContract Structure\nVersion header: # v0.1.0 (required)\nDependencies: # { \"Depends\": \"py-genlayer:latest\" }\nImport: from genlayer import *\nClass: Extend gl.Contract (only ONE per file)\nState: Class-level typed attributes\nConstructor: __init__ (not public)\nMethods: Decorated with @gl.public.view or @gl.public.write\nMethod Decorators\nDecorator\tPurpose\tCan Modify State\n@gl.public.view\tRead-only queries\tNo\n@gl.public.write\tState mutations\tYes\n@gl.public.write.payable\tReceive value + mutate\tYes\nStorage Types\n\nReplace standard Python types with GenVM storage-compatible types:\n\nPython Type\tGenVM Type\tUsage\nint\tu32, u64, u256, i32, i64, etc.\tSized integers\nint (unbounded)\tbigint\tArbitrary precision (avoid)\nlist[T]\tDynArray[T]\tDynamic arrays\ndict[K,V]\tTreeMap[K,V]\tOrdered maps\nstr\tstr\tStrings (unchanged)\nbool\tbool\tBooleans (unchanged)\n\n⚠️ int is NOT supported! Always use sized integers.\n\nAddress Type\n# Creating addresses\naddr = Address(\"0x03FB09251eC05ee9Ca36c98644070B89111D4b3F\")\n\n# Get sender\nsender = gl.message.sender_address\n\n# Conversions\nhex_str = addr.as_hex      # \"0x03FB...\"\nbytes_val = addr.as_bytes  # bytes\n\nCustom Data Types\nfrom dataclasses import dataclass\n\n@allow_storage\n@dataclass\nclass UserData:\n    name: str\n    balance: u256\n    active: bool\n\nclass MyContract(gl.Contract):\n    users: TreeMap[Address, UserData]\n\nNon-Deterministic Operations\nThe Problem\n\nLLMs and web fetches produce different results across validators. GenLayer solves this with the Equivalence Principle.\n\nEquivalence Principles\n1. Strict Equality (strict_eq)\n\nAll validators must produce identical results.\n\ndef get_data():\n    return gl.nondet.web.render(url, mode=\"text\")\n\nresult = gl.eq_principle.strict_eq(get_data)\n\n\nBest for: Factual data, boolean results, exact matches.\n\n2. Prompt Comparative (prompt_comparative)\n\nLLM compares leader's result against validators' results using criteria.\n\ndef get_analysis():\n    return gl.nondet.exec_prompt(prompt)\n\nresult = gl.eq_principle.prompt_comparative(\n    get_analysis,\n    \"The sentiment classification must match\"\n)\n\n\nBest for: LLM tasks where semantic equivalence matters.\n\n3. Prompt Non-Comparative (prompt_non_comparative)\n\nValidators verify the leader's result meets criteria (don't re-execute).\n\nresult = gl.eq_principle.prompt_non_comparative(\n    lambda: input_data,  # What to process\n    task=\"Summarize the key points\",\n    criteria=\"Summary must be under 100 words and factually accurate\"\n)\n\n\nBest for: Expensive operations, subjective tasks.\n\n4. Custom Leader/Validator Pattern\nresult = gl.vm.run_nondet(\n    leader=lambda: expensive_computation(),\n    validator=lambda leader_result: verify(leader_result)\n)\n\nNon-Deterministic Functions\nFunction\tPurpose\ngl.nondet.exec_prompt(prompt)\tExecute LLM prompt\ngl.nondet.web.render(url, mode)\tFetch web page (mode=\"text\" or \"html\")\n\n⚠️ Rules:\n\nMust be called inside equivalence principle functions\nCannot access storage directly\nCopy storage data to memory first with gl.storage.copy_to_memory()\nContract Interactions\nCall Other Contracts\n# Dynamic typing\nother = gl.get_contract_at(Address(\"0x...\"))\nresult = other.view().some_method()\n\n# Static typing (better IDE support)\n@gl.contract_interface\nclass TokenInterface:\n    class View:\n        def balance_of(self, owner: Address) -> u256: ...\n    class Write:\n        def transfer(self, to: Address, amount: u256) -> bool: ...\n\ntoken = TokenInterface(Address(\"0x...\"))\nbalance = token.view().balance_of(my_address)\n\nEmit Messages (Async Calls)\nother = gl.get_contract_at(addr)\nother.emit(on='accepted').update_status(\"active\")\nother.emit(on='finalized').confirm_transaction()\n\nDeploy Contracts\nchild_addr = gl.deploy_contract(code=contract_code, salt=u256(1))\n\nEVM Interop\n@gl.evm.contract_interface\nclass ERC20:\n    class View:\n        def balance_of(self, owner: Address) -> u256: ...\n    class Write:\n        def transfer(self, to: Address, amount: u256) -> bool: ...\n\ntoken = ERC20(evm_address)\nbalance = token.view().balance_of(addr)\ntoken.emit().transfer(recipient, u256(100))  # Messages only on finality\n\nCLI Commands\nSetup\nnpm install -g genlayer\ngenlayer init      # Download components\ngenlayer up        # Start local network\n\nDeployment\n# Direct deploy\ngenlayer deploy --contract my_contract.py\n\n# With constructor args\ngenlayer deploy --contract my_contract.py --args \"Hello\" 42\n\n# To testnet\ngenlayer network set testnet-asimov\ngenlayer deploy --contract my_contract.py\n\nInteraction\n# Read (view methods)\ngenlayer call --address 0x... --function get_value\n\n# Write\ngenlayer write --address 0x... --function set_value --args \"new_value\"\n\n# Get schema\ngenlayer schema --address 0x...\n\n# Check transaction\ngenlayer receipt --tx-hash 0x...\n\nNetworks\ngenlayer network                    # Show current\ngenlayer network list               # Available networks\ngenlayer network set localnet       # Local dev\ngenlayer network set studionet      # Hosted dev\ngenlayer network set testnet-asimov # Testnet\n\nBest Practices\nPrompt Engineering\nprompt = f\"\"\"\nAnalyze this text and classify the sentiment.\n\nText: {text}\n\nRespond using ONLY this JSON format:\n{{\"sentiment\": \"positive\" | \"negative\" | \"neutral\", \"confidence\": float}}\n\nOutput ONLY valid JSON, no other text.\n\"\"\"\n\nSecurity: Prompt Injection\nRestrict inputs: Minimize user-controlled text in prompts\nRestrict outputs: Define exact output formats\nValidate: Check parsed results match expected schema\nSimplify logic: Clear contract flow reduces attack surface\nError Handling\nfrom genlayer import UserError\n\n@gl.public.write\ndef safe_operation(self, value: int) -> None:\n    if value <= 0:\n        raise UserError(\"Value must be positive\")\n    # ... proceed\n\nMemory Management\n# Copy storage to memory for non-det blocks\ndata_copy = gl.storage.copy_to_memory(self.some_data)\n\ndef process():\n    return gl.nondet.exec_prompt(f\"Process: {data_copy}\")\n\nresult = gl.eq_principle.strict_eq(process)\n\nCommon Patterns\nToken with AI Transfer Validation\n\nSee references/examples.md → LLM ERC20\n\nPrediction Market\n\nSee references/examples.md → Football Prediction Market\n\nVector Search / Embeddings\n\nSee references/examples.md → Log Indexer\n\nDebugging\nGenLayer Studio: Use genlayer up for local testing\nLogs: Filter by transaction hash, debug level\nPrint statements: print() works in contracts (debug only)\nReference Files\nreferences/sdk-api.md - Complete SDK API reference\nreferences/equivalence-principles.md - Consensus patterns in depth\nreferences/examples.md - Full annotated contract examples (incl. production oracle)\nreferences/deployment.md - CLI, networks, deployment workflow\nreferences/genvm-internals.md - VM architecture, storage, ABI details\nLinks\nDocs: https://docs.genlayer.com\nSDK: https://sdk.genlayer.com\nStudio: https://studio.genlayer.com\nGitHub: https://github.com/genlayerlabs"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/acastellana/genlayer-dev",
    "publisherUrl": "https://clawhub.ai/acastellana/genlayer-dev",
    "owner": "acastellana",
    "version": "0.1.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/genlayer-dev",
    "downloadUrl": "https://openagent3.xyz/downloads/genlayer-dev",
    "agentUrl": "https://openagent3.xyz/skills/genlayer-dev/agent",
    "manifestUrl": "https://openagent3.xyz/skills/genlayer-dev/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/genlayer-dev/agent.md"
  }
}