mirror of
https://github.com/CJackHwang/ds2api.git
synced 2026-05-05 17:05:32 +08:00
65 lines
2.0 KiB
Markdown
65 lines
2.0 KiB
Markdown
# DeepSeek PoW 纯算实现
|
||
|
||
替代 `internal/deepseek/assets/sha3_wasm_bg.*.wasm` + wazero 运行时。
|
||
|
||
## 算法
|
||
|
||
DeepSeekHashV1 = SHA3-256 但 **Keccak-f[1600] 跳过 round 0** (只做 rounds 1..23)。其余参数不变:
|
||
rate=136, padding=0x06+0x80, output=32 字节。
|
||
|
||
PoW 协议:服务端选 answer ∈ [0, difficulty),计算 `challenge = hash(prefix + str(answer))`。
|
||
客户端遍历 [0, difficulty) 找到匹配的 nonce。
|
||
|
||
```
|
||
prefix = salt + "_" + str(expire_at) + "_"
|
||
input = (prefix + str(nonce)).encode("utf-8")
|
||
hash = DeepSeekHashV1(input) → 32 bytes
|
||
header = base64(json({algorithm, challenge, salt, answer, signature, target_path}))
|
||
```
|
||
|
||
## 性能 (Apple M4, Go 1.25)
|
||
|
||
```
|
||
BenchmarkHash 187.5 ns/op 0 alloc → 5.33M hash/s
|
||
BenchmarkSolve 13.4 ms/op 2 alloc → 75 道/秒/核 (difficulty=144000)
|
||
```
|
||
|
||
对比 wazero 调 WASM: hash 快 **5×**, solve 快 **2.8×**。
|
||
|
||
## 测试
|
||
|
||
```bash
|
||
cd pow && go test -v ./... && go test -bench=. -benchmem
|
||
```
|
||
|
||
## 替换 WASM
|
||
|
||
替换 `internal/deepseek/pow.go` 中 `PowSolver.Compute`:
|
||
|
||
```go
|
||
// 原: 调 wasm_solve(retptr, chPtr, chLen, prefixPtr, prefixLen, difficulty)
|
||
// 新:
|
||
import "ds2api/pow"
|
||
|
||
func (c *Client) GetPow(ctx context.Context, a *auth.RequestAuth, ...) (string, error) {
|
||
// ... 省略 token/retry 逻辑,只改 compute 部分 ...
|
||
challenge, _ := bizData["challenge"].(map[string]any)
|
||
ch := &pow.Challenge{
|
||
Algorithm: challenge["algorithm"].(string),
|
||
Challenge: challenge["challenge"].(string),
|
||
Salt: challenge["salt"].(string),
|
||
ExpireAt: int64(challenge["expire_at"].(float64)),
|
||
Difficulty: int64(challenge["difficulty"].(float64)),
|
||
Signature: challenge["signature"].(string),
|
||
TargetPath: challenge["target_path"].(string),
|
||
}
|
||
return pow.SolveAndBuildHeader(ch)
|
||
}
|
||
```
|
||
|
||
可删除:
|
||
- `internal/deepseek/assets/sha3_wasm_bg.*.wasm`
|
||
- `internal/deepseek/embedded_pow.go`
|
||
- `internal/deepseek/pow.go` 中 `PowSolver` 结构体、wazero 相关池化代码
|
||
- `go.mod` 中 `github.com/tetratelabs/wazero` 依赖
|