Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .github/workflows/release-desktop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,8 @@ jobs:
PORT=4310 \
STUDIO_DATA_DIR="$data_dir" \
SILVERC_LATEST_BIN="$runtime/bin/silverc-latest" \
SILVERC_PREVIOUS_BIN="$runtime/bin/silverc-cb34aa5" \
SILVERC_PREVIOUS_BIN="$runtime/bin/silverc-6f9e078" \
SILVERC_OLDER_BIN="$runtime/bin/silverc-cb34aa5" \
SILVERC_LEGACY_BIN="$runtime/bin/silverc-legacy" \
KASCOV_PREFLIGHT_BIN="$runtime/bin/kascov-preflight" \
"$node_bin" "$runtime/server/index.mjs" >"$log" 2>&1 &
Expand Down
22 changes: 22 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,27 @@
# Changelog

## 0.2.9 — 2026-08-15

- Updated the default SHA-256-pinned official SilverScript compiler to `14dce9a5ce8769cdfbd0c8965f8764fa9c325067`; retained `6f9e078`, `cb34aa5`, and `2a3961c` as isolated reproducibility profiles.
- Added compatibility findings for declaration shadowing, `.split()` result typing, immutable `for` iterators, and the 10,000-iteration compiler limit introduced by the latest hardening changes.
- Added KCC20 security triage for borrowed-receive paths, including minter-leader rejection, token-state invariants, KAS-value preservation, pre-signed outpoint invalidation, and co-spend consent review.
- Extended the atomic multi-Covenant builder with explicit fresh-lineage outputs authorized by a verified input Covenant ID; genesis bindings are populated by the Kaspa transaction library and recorded in the operation package.
- Aligned KCC721 metadata with the KCC-0021 draft image-integrity rule: HTTPS images require a committed SHA-256, while IPFS URIs remain content-addressed.
- Updated the TN10 x402 interoperability profile to `kaspa-x402@alpha.10` (`78f2ada`) and documented stable `kaspa-escrow-v2` lineage plus partial-claim, top-up, and refund semantics without promoting it to a deployable built-in template.
- Documented the community TN10 cross-Covenant fusion transaction as evidence only; unavailable source and reproducibility data remain an explicit admission blocker.
- Added a visible 0.2.9 capability hub and a real TN10 atomic-builder interface in the Operation Center; KCC20 scan, compiler, and KCC721 actions now open their actual workflows, while x402 is clearly labeled research-only.

## 0.2.9 — 2026-08-15(中文)

- 默认官方 SilverScript 编译器升级并固定到 `14dce9a5ce8769cdfbd0c8965f8764fa9c325067`;隔离保留 `6f9e078`、`cb34aa5` 和 `2a3961c` 复现档案。
- 增加最新编译器强化变更的兼容提示:声明名称遮蔽、`.split()` 结果类型、不可修改的 `for` 迭代变量,以及 10,000 次循环上限。
- 增加 KCC20 安全初筛:检查借用接收路径的 minter leader 拒绝、Token 状态不变量、KAS value 保持、预签 outpoint 失效风险和共同输入授权语义。
- 原子多 Covenant 构建器支持由已核验输入 Covenant ID 授权的新 lineage 输出;由 Kaspa 交易库填充 genesis binding,并将结果写入操作包。
- KCC721 元数据采用 KCC-0021 Draft 图片完整性规则:HTTPS 图片必须提交 SHA-256,IPFS URI 继续依赖内容寻址。
- TN10 x402 互操作档案升级到 `kaspa-x402@alpha.10`(`78f2ada`),记录稳定的 `kaspa-escrow-v2` lineage 与部分领取、追加和退款语义,但仍不伪装成可部署内置模板。
- 将社区 TN10 跨 Covenant fusion 交易作为链上证据记录;缺少源码与可复现数据仍是正式准入阻断项。
- 增加醒目的 0.2.9 功能入口区和操作中心 TN10 原子构建界面;KCC20 检查、编译器和 KCC721 按钮会进入真实操作流程,x402 明确标为仅研究、不可部署。

## 0.2.8 — 2026-08-10

- Updated the default SHA-256-pinned official SilverScript compiler to `6f9e078b1d8b5389212755183b592704de99fea5`; retained `cb34aa5` for Studio 0.2.7 reproducibility and `2a3961c` for older projects.
Expand Down
20 changes: 12 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ AI 只负责生成候选方案和辅助审查,不能解锁钱包、签名交
- 中英文界面;首次启动自动读取系统语言,并在系统语言既非中文也非英文时使用时区辅助判断。
- 用户手动切换语言后,本机选择优先于自动识别。
- 本地项目工作区,可创建、切换和删除未使用的工作。
- 三编译器兼容档案:默认固定 `kaspanet/silverscript@6f9e078b1d8b5389212755183b592704de99fea5`,保留 Studio 0.2.7 使用的 `cb34aa5` 和 `2a3961c` 旧版用于复现;三个二进制都校验 SHA-256。
- 内置破坏性变更扫描与安全迁移,识别 `entry`、`checkMsgSig`、`outpointTxId`、artifact `bytecode` 和显式标量 byte/int 转换;无法安全自动迁移的 signed/unsigned 语义、`.reverse()` 和位运算会要求人工审查
- 四编译器兼容档案:默认固定 `kaspanet/silverscript@14dce9a5ce8769cdfbd0c8965f8764fa9c325067`,隔离保留 Studio 0.2.8 的 `6f9e078`、Studio 0.2.7 的 `cb34aa5` 和 `2a3961c` 旧版用于复现;所有二进制都校验 SHA-256。
- 内置破坏性变更扫描与安全迁移,覆盖 `entry`、`checkMsgSig`、`outpointTxId`、artifact `bytecode`、标量转换、声明遮蔽、`.split()` 类型、不可变循环变量和循环上限;无法安全自动迁移的语义会要求人工审查
- 固定 Kascov 来源提交构建的本地交易预检引擎。
- 支持 OpenAI、Anthropic、Gemini、OpenRouter、Ollama 和 OpenAI-compatible 接口。
- AI API Key 使用 scrypt 派生密钥和 AES-256-GCM 加密保存在本机。
Expand All @@ -47,8 +47,10 @@ AI 只负责生成候选方案和辅助审查,不能解锁钱包、签名交
- 支持 `.ssinvite` 可携带操作包、跨设备顺序签名和外部 Covenant 交易包审查。
- 新操作包携带 canonical v1 Covenant Descriptor,绑定 CAIP-2 网络、程序哈希、Covenant ID、ABI、状态布局和授权主体;旧包仍可读取但会标记缺少描述符。
- 可替换 `CovenantStateSource` 会在原生 Covenant RPC、outpoint RPC 与 P2SH 地址索引之间回退,并重新验证 outpoint、Covenant ID、脚本和金额。
- 通用 P2PK co-spend 授权只签指定普通钱包输入,并锁定整笔交易承诺;原子构建器支持 2–32 个不同 Covenant 输入。
- 通用 P2PK co-spend 授权只签指定普通钱包输入,并锁定整笔交易承诺;原子构建器支持 2–32 个不同 Covenant 输入、同 lineage 延续和由已核验输入授权的新 lineage 输出。
- KCC20 安全初筛覆盖借用接收、minter leader、Token 状态不变量、KAS value 保持、预签 outpoint 失效与共同输入授权边界。
- Kascov 是首选可视化和第二份报告来源,但不是签名、预检或广播的运行依赖。
- 首页提供 0.2.9 功能入口;操作中心包含 TN10 原子多 Covenant JSON 构建与只读审查界面。研究档案会明确标记为不可部署。

### 内置模板

Expand Down Expand Up @@ -224,7 +226,7 @@ OLLAMA_MODEL=

仅有 Covenant ID 或 cov hash 不足以签名。外部操作包必须携带待签交易、UTXO、redeem program、ABI、入口、参数、输出和签名槽信息。详见 [可携带 Covenant 操作包](docs/portable-covenant-package.md)。

编译器升级、状态查询与原子授权接口见 [Studio 0.2 架构说明](docs/studio-0.2-architecture.md)。KCC721 包的来源、边界和禁止事项见 [TN10 Experimental KCC721](docs/kcc721-experimental.md)。
编译器升级、状态查询与原子授权接口见 [Studio 0.2 架构说明](docs/studio-0.2-architecture.md)。KCC721 包的来源、边界和禁止事项见 [TN10 Experimental KCC721](docs/kcc721-experimental.md)。社区跨 Covenant 交易证据与新 lineage 构建格式见 [TN10 跨 Covenant Fusion 说明](docs/tn10-cross-covenant-fusion.md)。
Kaspa x402 的网络标识、操作包映射和正式模板准入条件见 [TN10 Experimental x402 档案](docs/x402-experimental-profile.md)。

### 网络
Expand Down Expand Up @@ -293,8 +295,8 @@ AI is limited to candidate generation and review assistance. It cannot unlock wa
- Chinese and English UI with automatic system-language detection and time-zone fallback.
- A manual language choice always overrides future automatic detection.
- Local project workspace with explicit create, switch, and delete actions.
- Three compiler profiles: the default is pinned to `kaspanet/silverscript@6f9e078b1d8b5389212755183b592704de99fea5`; Studio 0.2.7's `cb34aa5` and legacy `2a3961c` remain reproducible, with SHA-256 verification for all binaries.
- Built-in breaking-change detection and safe migration for `entry`, `checkMsgSig`, `outpointTxId`, artifact `bytecode`, and explicit scalar byte/int conversions; signedness, removed `.reverse()`, and bitwise typing changes require manual review.
- Four isolated compiler profiles: the default is pinned to `kaspanet/silverscript@14dce9a5ce8769cdfbd0c8965f8764fa9c325067`; Studio 0.2.8's `6f9e078`, Studio 0.2.7's `cb34aa5`, and legacy `2a3961c` remain reproducible, with SHA-256 verification for every binary.
- Built-in breaking-change detection and safe migration cover `entry`, `checkMsgSig`, `outpointTxId`, artifact `bytecode`, scalar conversions, declaration shadowing, `.split()` typing, immutable loop iterators, and bounded-loop limits; ambiguous semantic changes require manual review.
- Pinned Kascov-derived local transaction preflight engine.
- OpenAI, Anthropic, Gemini, OpenRouter, Ollama, and OpenAI-compatible providers.
- AES-256-GCM encrypted AI key vault with a scrypt-derived key.
Expand All @@ -304,8 +306,10 @@ AI is limited to candidate generation and review assistance. It cannot unlock wa
- Portable `.ssinvite` operation packages, sequential cross-device signing, and external covenant-package review.
- Canonical v1 covenant descriptors bind each new package to its CAIP-2 network, program hash, covenant ID, ABI, state layout, and authorization principals; legacy packages remain readable with a visible missing-descriptor warning.
- Replaceable `CovenantStateSource` fallback across native covenant RPC, outpoint RPC, and P2SH address indexing, with independent outpoint, covenant ID, script, and value verification.
- Generic isolated P2PK co-spend authorization plus an atomic builder for 2–32 distinct covenant inputs.
- Generic isolated P2PK co-spend authorization plus an atomic builder for 2–32 distinct Covenant inputs, same-lineage continuations, and fresh lineages authorized by verified input Covenant IDs.
- KCC20 security triage covers borrowed receive, minter leaders, token-state invariants, KAS-value preservation, pre-signed outpoint invalidation, and co-spend consent boundaries.
- Kascov is the preferred visual and secondary-report layer, not a signing, preflight, or broadcast dependency.
- The home screen exposes the 0.2.9 workflows, and the Operation Center includes a TN10 atomic multi-Covenant JSON builder with read-only package review. Research profiles are visibly marked non-deployable.

### Built-in templates

Expand Down Expand Up @@ -455,7 +459,7 @@ Never have multiple signers sign separate initial copies. Compare the transactio

A covenant ID or cov hash alone is not a signing request. An external package must include the exact transaction, UTXOs, redeem program, ABI, entrypoint, arguments, outputs, and signature slots. See [Portable covenant packages](docs/portable-covenant-package.md).

See [Studio 0.2 architecture](docs/studio-0.2-architecture.md) for compiler upgrades, state sources, P2PK authorization, and atomic transaction APIs. See [TN10 Experimental KCC721](docs/kcc721-experimental.md) for provenance, boundaries, and prohibited release claims.
See [Studio 0.2 architecture](docs/studio-0.2-architecture.md) for compiler upgrades, state sources, P2PK authorization, and atomic transaction APIs. See [TN10 Experimental KCC721](docs/kcc721-experimental.md) for provenance, boundaries, and prohibited release claims. See [TN10 cross-Covenant fusion](docs/tn10-cross-covenant-fusion.md) for community transaction evidence and the fresh-lineage build format.
See the [TN10 Experimental x402 profile](docs/x402-experimental-profile.md) for network identifiers, operation-package mapping, and executable-template admission gates.

### Networks
Expand Down
86 changes: 75 additions & 11 deletions config/compiler-profiles.json
Original file line number Diff line number Diff line change
@@ -1,17 +1,37 @@
{
"defaultProfileId": "latest-6f9e078",
"defaultProfileId": "latest-14dce9a",
"profiles": [
{
"id": "latest-6f9e078",
"label": "SilverScript latest (6f9e078)",
"upstreamCommit": "6f9e078b1d8b5389212755183b592704de99fea5",
"id": "latest-14dce9a",
"label": "SilverScript latest (14dce9a)",
"upstreamCommit": "14dce9a5ce8769cdfbd0c8965f8764fa9c325067",
"binary": "bin/silverc-latest",
"artifactBytecodeField": "bytecode",
"syntaxGeneration": 2,
"status": "experimental",
"networkPolicy": "tn10-only",
"releasedAt": "2026-08-13",
"notes": [
"Includes c1ed163 entrypoint, constant-cycle and bounded-loop hardening",
"Rejects declaration shadowing and attempts to override compiler builtins",
"Makes struct assignment atomic and struct-field lowering collision resistant",
"Fixes ternary lowering, struct append, bool array normalization and split result typing",
"Requires fixed byte arrays of at most eight bytes for int(byte[N]) casts",
"Keeps loop iteration variables immutable"
]
},
{
"id": "latest-6f9e078",
"label": "SilverScript Studio 0.2.8 (6f9e078)",
"upstreamCommit": "6f9e078b1d8b5389212755183b592704de99fea5",
"binary": "bin/silverc-6f9e078",
"artifactBytecodeField": "bytecode",
"syntaxGeneration": 2,
"status": "previous",
"networkPolicy": "tn10-only",
"releasedAt": "2026-08-10",
"notes": [
"Retained to reproduce Studio 0.2.8 projects",
"Uses entry syntax for public entrypoints",
"Exposes transaction introspection as outpointTxId",
"Uses checkMsgSig for arbitrary-message signatures",
Expand All @@ -25,7 +45,7 @@
},
{
"id": "latest-cb34aa5",
"label": "SilverScript previous (cb34aa5)",
"label": "SilverScript Studio 0.2.7 (cb34aa5)",
"upstreamCommit": "cb34aa5e6a598f9e461c4ad7014279ba89251d8d",
"binary": "bin/silverc-cb34aa5",
"artifactBytecodeField": "bytecode",
Expand Down Expand Up @@ -60,7 +80,7 @@
"severity": "error",
"introducedBy": "0f99803",
"fromProfile": "legacy-2a3961c",
"toProfile": "latest-6f9e078",
"toProfile": "latest-14dce9a",
"pattern": "\\bentrypoint\\s+function\\b",
"messageZh": "公开入口语法已从 entrypoint function 改为 entry。",
"messageEn": "Public entrypoint syntax changed from entrypoint function to entry.",
Expand All @@ -71,7 +91,7 @@
"severity": "error",
"introducedBy": "782a4d7",
"fromProfile": "legacy-2a3961c",
"toProfile": "latest-6f9e078",
"toProfile": "latest-14dce9a",
"pattern": "\\bcheckSigFromStack\\b",
"messageZh": "任意消息签名内建函数已改名为 checkMsgSig。",
"messageEn": "The arbitrary-message signature builtin was renamed to checkMsgSig.",
Expand All @@ -82,7 +102,7 @@
"severity": "error",
"introducedBy": "65421cf",
"fromProfile": "legacy-2a3961c",
"toProfile": "latest-6f9e078",
"toProfile": "latest-14dce9a",
"pattern": "\\.outpointTransactionHash\\b",
"messageZh": "输入 outpoint 字段已改名为 outpointTxId。",
"messageEn": "The input outpoint field was renamed to outpointTxId.",
Expand All @@ -93,7 +113,7 @@
"severity": "error",
"introducedBy": "6869e7d",
"fromProfile": "legacy-2a3961c",
"toProfile": "latest-6f9e078",
"toProfile": "latest-14dce9a",
"pattern": "\\.reverse\\s*\\(",
"messageZh": ".reverse() 已删除,必须显式重写字节顺序逻辑并重新测试。",
"messageEn": ".reverse() was removed; rewrite byte ordering explicitly and retest it.",
Expand All @@ -104,7 +124,7 @@
"severity": "integration",
"introducedBy": "4d88ded",
"fromProfile": "legacy-2a3961c",
"toProfile": "latest-6f9e078",
"toProfile": "latest-14dce9a",
"pattern": null,
"messageZh": "编译产物 JSON 字段由 script 改为 bytecode;外部工具必须兼容两个字段。",
"messageEn": "The compiler artifact JSON field changed from script to bytecode; integrations must support both.",
Expand All @@ -115,11 +135,55 @@
"severity": "manual-review",
"introducedBy": "8b74812",
"fromProfile": "legacy-2a3961c",
"toProfile": "latest-6f9e078",
"toProfile": "latest-14dce9a",
"pattern": "(?:^|[^&|])(?:<<|>>|\\^|&|\\|)(?:[^&|]|$)",
"messageZh": "位运算现在仅接受 bytes;请人工确认操作数类型。",
"messageEn": "Bitwise operators now accept bytes only; review operand types manually.",
"replacement": null
},
{
"id": "declaration-shadowing-rejected",
"severity": "manual-review",
"introducedBy": "14dce9a",
"fromProfile": "latest-6f9e078",
"toProfile": "latest-14dce9a",
"pattern": null,
"messageZh": "编译器现在禁止构造参数、字段、常量、函数参数和局部变量之间的名称遮蔽;请通过完整编译定位并重命名冲突声明。",
"messageEn": "The compiler now rejects name shadowing across constructor parameters, fields, constants, function parameters and locals; fully compile and rename conflicting declarations.",
"replacement": null
},
{
"id": "split-result-typing",
"severity": "manual-review",
"introducedBy": "14dce9a",
"fromProfile": "latest-6f9e078",
"toProfile": "latest-14dce9a",
"pattern": "\\.split\\s*\\(",
"messageZh": ".split() 结果现在会推断固定左侧长度;请复核显式类型、析构赋值和下游状态编码。",
"messageEn": ".split() now infers a fixed left-side length; review explicit types, tuple destructuring and downstream state encoding.",
"replacement": null
},
{
"id": "for-iterator-immutable",
"severity": "error",
"introducedBy": "14dce9a",
"fromProfile": "latest-6f9e078",
"toProfile": "latest-14dce9a",
"pattern": "for\\s*\\(\\s*([A-Za-z_][A-Za-z0-9_]*)[^\\n]*\\)[\\s\\S]{0,500}?\\b\\1\\s*(?:=|\\+=|-=|\\+\\+|--)",
"messageZh": "for 循环迭代变量现在不可修改;请使用独立局部变量表达循环内状态。",
"messageEn": "For-loop iteration variables are now immutable; use a separate local for mutable loop state.",
"replacement": null
},
{
"id": "bounded-loop-limit",
"severity": "manual-review",
"introducedBy": "c1ed163",
"fromProfile": "latest-6f9e078",
"toProfile": "latest-14dce9a",
"pattern": "max_iterations\\s*=\\s*(?:1000[1-9]|100[1-9][0-9]|10[1-9][0-9]{2}|1[1-9][0-9]{3}|[2-9][0-9]{4,})",
"messageZh": "编译器将 max_iterations 限制为 10,000;请缩小循环边界并重新评估脚本单位。",
"messageEn": "The compiler caps max_iterations at 10,000; reduce the bound and reassess script units.",
"replacement": null
}
]
}
Loading