review-script-template

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Review Script Template

审查脚本模板

Review and validate script template implementations in ts-templates for correctness and best practices.
审查并验证ts-templates中的脚本模板实现是否正确且符合最佳实践。

When to Use

使用场景

  • Review a new template before merging
  • Audit existing template implementations
  • Validate template follows ts-templates patterns
  • Check for common implementation errors
  • 合并前审查新模板
  • 审计现有模板实现
  • 验证模板是否遵循ts-templates模式
  • 检查常见的实现错误

Review Checklist

审查检查清单

Structure Validation

结构验证

  • File located in
    src/template/
    appropriate subdirectory
  • Implements
    ScriptTemplate
    interface from @bsv/sdk
  • Exports PREFIX constant
  • Exports Data interface with all protocol fields
  • Default export is the template class
  • Added to mod.ts exports (class + types)
  • 文件位于
    src/template/
    对应的子目录中
  • 实现了@bsv/sdk中的
    ScriptTemplate
    接口
  • 导出了PREFIX常量
  • 导出包含所有协议字段的Data接口
  • 默认导出为模板类
  • 已添加到mod.ts的导出中(类 + 类型)

Interface Requirements

接口要求

  • data
    property is
    public readonly
  • Constructor accepts Data interface
  • bitcomIndex?: number
    field for protocol position
  • valid?: boolean
    field for verification status
  • data
    属性为
    public readonly
  • 构造函数接受Data接口
  • 包含
    bitcomIndex?: number
    字段用于指定协议位置
  • 包含
    valid?: boolean
    字段用于标识验证状态

Required Methods

必填方法

MethodPurposeRequirements
decode()
Static. Parse from BitComDecodedReturn array of instances
lock()
Generate LockingScriptUse BitCom for OP_RETURN protocols
unlock()
Generate UnlockingScriptThrow if not applicable
verify()
Check signature validityReturn boolean
方法用途要求
decode()
静态方法。从BitComDecoded中解析返回实例数组
lock()
生成LockingScript对OP_RETURN协议使用BitCom
unlock()
生成UnlockingScript若不适用则抛出异常
verify()
检查签名有效性返回布尔值

Code Quality

代码质量

  • Uses
    script.chunks
    directly (no toASM().split())
  • Uses @bsv/sdk Utils (no Buffer, TextEncoder)
  • Proper error handling in decode()
  • No hardcoded magic numbers
  • Consistent with other templates in repo
  • 直接使用
    script.chunks
    (不使用toASM().split())
  • 使用@bsv/sdk的Utils(不使用Buffer、TextEncoder)
  • decode()中有适当的错误处理
  • 无硬编码的魔法数值
  • 与仓库中的其他模板保持一致

Chunk Parsing Review

块解析审查

Correct pattern:
typescript
const script = Script.fromBinary(protocol.script)
const chunks = script.chunks
const field = Utils.toUTF8(chunks[0].data ?? [])
Incorrect patterns to flag:
typescript
// BAD: String splitting
const parts = script.toASM().split(' ')

// BAD: Buffer usage
const field = Buffer.from(chunks[0].data).toString()

// BAD: TextEncoder
new TextEncoder().encode(field)
正确模式:
typescript
const script = Script.fromBinary(protocol.script)
const chunks = script.chunks
const field = Utils.toUTF8(chunks[0].data ?? [])
需要标记的错误模式:
typescript
// BAD: String splitting
const parts = script.toASM().split(' ')

// BAD: Buffer usage
const field = Buffer.from(chunks[0].data).toString()

// BAD: TextEncoder
new TextEncoder().encode(field)

Utils Usage Review

Utils使用审查

Verify correct Utils functions:
OperationCorrectIncorrect
String → bytes
Utils.toArray(str, 'utf8')
Buffer.from()
,
TextEncoder
Bytes → string
Utils.toUTF8(bytes)
Buffer.toString()
,
TextDecoder
Bytes → hex
Utils.toHex(bytes)
Buffer.toString('hex')
Bytes → base64
Utils.toBase64(bytes)
Buffer.toString('base64')
验证是否正确使用Utils函数:
操作正确用法错误用法
字符串 → 字节
Utils.toArray(str, 'utf8')
Buffer.from()
,
TextEncoder
字节 → 字符串
Utils.toUTF8(bytes)
Buffer.toString()
,
TextDecoder
字节 → 十六进制
Utils.toHex(bytes)
Buffer.toString('hex')
字节 → Base64
Utils.toBase64(bytes)
Buffer.toString('base64')

Signature Verification Review

签名验证审查

For protocols with signatures:
  • Uses BSM.sign() for signing
  • Tries all 4 recovery factors (0-3)
  • Uses Signature.fromCompact() for decoding
  • Verifies address matches recovered public key
  • Sets
    valid
    field after verification
对于带有签名的协议:
  • 使用BSM.sign()进行签名
  • 尝试所有4种恢复因子(0-3)
  • 使用Signature.fromCompact()进行解码
  • 验证地址与恢复的公钥匹配
  • 验证后设置
    valid
    字段

BitCom Integration Review

BitCom集成审查

For OP_RETURN protocols:
  • Uses BitCom class for lock()
  • Creates Protocol array with correct structure
  • Proper pipe delimiter handling
  • decode() accepts BitComDecoded parameter
对于OP_RETURN协议:
  • 在lock()中使用BitCom类
  • 创建结构正确的Protocol数组
  • 正确处理管道分隔符
  • decode()接受BitComDecoded参数

Common Issues

常见问题

Issue 1: Missing Null Checks

问题1:缺少空值检查

typescript
// BAD: Can throw on missing data
const field = Utils.toUTF8(chunks[0].data)

// GOOD: Handle missing data
const field = Utils.toUTF8(chunks[0].data ?? [])
typescript
// BAD: Can throw on missing data
const field = Utils.toUTF8(chunks[0].data)

// GOOD: Handle missing data
const field = Utils.toUTF8(chunks[0].data ?? [])

Issue 2: Wrong Chunk Index

问题2:块索引错误

Verify chunk indices match protocol specification:
  • Check protocol documentation for field order
  • Account for protocol prefix being separate
验证块索引是否符合协议规范:
  • 查看协议文档确认字段顺序
  • 注意协议前缀是单独的部分

Issue 3: Incomplete Error Handling

问题3:错误处理不完整

typescript
// BAD: Crashes on parse error
static decode(bitcom: BitComDecoded): Protocol[] {
  const script = Script.fromBinary(protocol.script) // Can throw!
}

// GOOD: Handle parse errors
static decode(bitcom: BitComDecoded): Protocol[] {
  try {
    const script = Script.fromBinary(protocol.script)
  } catch {
    continue // Skip invalid protocols
  }
}
typescript
// BAD: Crashes on parse error
static decode(bitcom: BitComDecoded): Protocol[] {
  const script = Script.fromBinary(protocol.script) // Can throw!
}

// GOOD: Handle parse errors
static decode(bitcom: BitComDecoded): Protocol[] {
  try {
    const script = Script.fromBinary(protocol.script)
  } catch {
    continue // Skip invalid protocols
  }
}

Issue 4: Missing mod.ts Export

问题4:缺少mod.ts导出

Check that mod.ts includes:
typescript
export { default as Protocol, PREFIX } from './src/template/...'
export type { ProtocolData, ProtocolOptions } from './src/template/...'
检查mod.ts是否包含:
typescript
export { default as Protocol, PREFIX } from './src/template/...'
export type { ProtocolData, ProtocolOptions } from './src/template/...'

Review Output Format

审查输出格式

Provide structured feedback:
markdown
undefined
提供结构化反馈:
markdown
undefined

Template Review: [TemplateName]

Template Review: [TemplateName]

Structure: ✅ PASS / ❌ FAIL

Structure: ✅ PASS / ❌ FAIL

  • [Details]
  • [Details]

Methods: ✅ PASS / ❌ FAIL

Methods: ✅ PASS / ❌ FAIL

  • [Details]
  • [Details]

Code Quality: ✅ PASS / ❌ FAIL

Code Quality: ✅ PASS / ❌ FAIL

  • [Details]
  • [Details]

Issues Found

Issues Found

  1. [Issue description and fix]
  2. [Issue description and fix]
  1. [Issue description and fix]
  2. [Issue description and fix]

Recommendations

Recommendations

  • [Optional improvements]
undefined
  • [Optional improvements]
undefined

Additional Resources

额外资源

Reference Files

参考文件

  • references/checklist-detailed.md
    - Extended validation criteria
  • references/common-bugs.md
    - Known issues and fixes
  • references/checklist-detailed.md
    - 扩展验证标准
  • references/common-bugs.md
    - 已知问题及修复方案