You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于种子生成Lightning密钥:实现Per-commitment Secret函数并验证结果

实现generate_from_seed函数(基于《Per-commitment Secret Requirements》)

我帮你把这个函数的实现逻辑理清楚,再写出可运行的Python代码,完全贴合你给出的定义:

函数核心逻辑回顾

generate_from_seed(seed, I):
P = seed
for B in 47 down to 0:
if B set in I:
flip(B) in P
P = SHA256(P)
return P

这里的flip(B)指的是翻转P的第B个最低有效位(比如B=0就是最右边的位,B=8就是第2个字节的最右边位)。

Python 实现代码

from hashlib import sha256

def generate_from_seed(seed_hex, I):
    # 将十六进制seed转换为可变的字节数组
    P = bytearray.fromhex(seed_hex)
    
    # 遍历47到0的每一位(翻转顺序不影响最终结果,倒序只是贴合定义写法)
    for B in range(47, -1, -1):
        # 检查I的第B位是否被设置
        if (I >> B) & 1:
            # 计算该位对应的字节索引和位索引
            byte_idx = B // 8
            bit_idx = B % 8
            # 用异或操作翻转目标位
            P[byte_idx] ^= (1 << bit_idx)
    
    # 执行SHA256哈希并返回十六进制格式结果
    return sha256(P).hexdigest()

# 测试你给出的特定场景
if __name__ == "__main__":
    test_seed = "0101010101010101010101010101010101010101010101010101010101010101"
    test_I = 1
    result = generate_from_seed(test_seed, test_I)
    print(f"测试结果: {result}")

测试场景说明

当seed是32个01的十六进制值、I=1时:

  • I=1意味着只有B=0位被设置,我们会翻转P的第0个最低有效位(也就是第一个字节的最右边位)。
  • 原第一个字节是0x01(二进制00000001),翻转后变成0x00(二进制00000000)。
  • 最后对修改后的字节数组做SHA256哈希,就能得到你需要的结果。

内容的提问来源于stack exchange,提问作者Janus Troelsen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:10:56