界面已本地化;技能介绍与说明文档按所选语言由 AI 自动翻译,代码、命令、路径和专业术语保留原文,以原作者文档为准。
探索技能
开发与工程 · SKILL.md

rue-chialisp

rue-chialisp

【开发与工程】Create Chia blockchain puzzles using Rue, a type-safe language that compiles to CLVM. Use for smart contract development, custom puzzle creation, or when user says "create a coin that...", "build a puzzle", "chialisp", "rue", "timelock", "multisig", "escrow", "atomic swap", or describes coin spending conditions.

独立 GitHub 快照 · 自动分类 · 以原作者文档为准

技能说明

GitHub

name: rue-chialisp version: 1.0.0 description: Create Chia blockchain puzzles using Rue, a type-safe language that compiles to CLVM. Use for smart contract development, custom puzzle creation, or when user says "create a coin that...", "build a puzzle", "chialisp", "rue", "timelock", "multisig", "escrow", "atomic swap", or describes coin spending conditions.

Rue Chialisp Skill

Build type-safe Chia puzzles using Rue. Compile to CLVM bytecode for on-chain deployment.

Setup

# Check dependencies
scripts/rue-check.sh

# Initialize project
scripts/rue-init.sh my-project

Quick Build

cd my-project
rue build              # Compile all puzzles
rue build puzzles/x.rue  # Compile one
brun "$CLVM" "(args)"  # Simulate execution

Natural Language → Puzzle

When user describes a puzzle in plain language, map to these patterns:

User SaysPatternExample File
"only spend after block X"Timelockexamples/timelock.rue
"requires N signatures"Multisigexamples/multisig.rue
"burn X%"Partial Burnexamples/burn_10_percent.rue
"split payment"Royaltyexamples/royalty.rue
"escrow with arbiter"Escrowexamples/escrow.rue
"atomic swap / HTLC"Atomic Swapexamples/atomic_swap.rue
"reversible / clawback"Clawbackexamples/clawback.rue
"spending limit"Rate Limitedexamples/rate_limited.rue
"recurring payment"Subscriptionexamples/subscription.rue
"password protected"Passwordexamples/password_puzzle.rue
"signature required"Signatureexamples/sig_puzzle.rue

Core Syntax

fn main(curried_arg: Type, solution_arg: Type) -> List<Condition> {
    assert condition;
    let x = expression;
    if cond { a } else { b }
    [item1, item2, ...rest]
}

Types

TypeDescription
IntSigned integer
Booltrue/false
Bytes3232-byte hash
PublicKeyBLS G1 (48 bytes)
List<T>Nil-terminated list
ConditionCLVM condition

Key Conditions

ConditionOpcodePurpose
CreateCoin { puzzle_hash, amount, memos }51Create output
AggSigMe { public_key, message }50Require signature
AssertHeightAbsolute { height }83Min block height
AssertBeforeHeightAbsolute { height }87Max block height
AssertMyAmount { amount }73Verify coin value
ReserveFee { amount }52Transaction fee

See references/conditions.md for full list (30+ conditions).

Built-in Functions

FunctionUse
sha256(data)Hash data
tree_hash(value)CLVM tree hash
coinid(parent, puzzle_hash, amount)Compute coin ID

Example: Timelock

fn main(unlock_height: Int, dest: Bytes32, amount: Int) -> List<Condition> {
    let wait = AssertHeightAbsolute { height: unlock_height };
    let output = CreateCoin { puzzle_hash: dest, amount, memos: nil };
    [wait, output]
}

Example: 2-of-2 Multisig

fn main(pk1: PublicKey, pk2: PublicKey, conditions: List<Condition>) -> List<Condition> {
    let msg = tree_hash(conditions);
    let sig1 = AggSigMe { public_key: pk1, message: msg };
    let sig2 = AggSigMe { public_key: pk2, message: msg };
    [sig1, sig2, ...conditions]
}

Simulation

# Compile
CLVM=$(rue build puzzles/my_puzzle.rue 2>&1 | grep -v Warning | head -1)

# Execute with test inputs
brun "$CLVM" "(arg1 arg2 arg3)"

# Output is list of conditions: ((51 <hash> <amount>) (83 <height>) ...)

Security Notes

  • Password puzzles are educational only — use signatures for real value
  • Always validate input types with assert value is Type
  • Use tree_hash(conditions) as signature message to bind signatures to outputs
我的收藏