Quantova/QCore.py

GitHub: Quantova/QCore.py

Quantova 的 Python 客户端核心库,通过 PyO3 绑定 Rust 底层实现后量子密钥派生、签名与交易构建,供 Python 程序与 Quantova 区块链交互。

Stars: 136 | Forks: 36

# QCore.py Quantova 的 Python 后量子客户端核心。它是使用 pyo3 作为原生扩展构建的 Rust 核心 QCore.rs,因此密钥派生、后量子签名以及每个 RPC 请求体都在核心中运行,绝不会用 Python 重写。该包负责处理 HTTP 并读取文档中记录的响应字段,而核心负责处理所有必须完全准确的操作。签名的第二次实现意味着用户的资金有了第二次出错的机会,因此永远只会有一种实现。 一种语言对应一个核心与一个绑定。QCore.rs 是 Rust 核心。QCore.js 是其上的 JavaScript 绑定。QCore.py 是其上的 Python 绑定(即本项目)。导入时使用 qcore。 ## 该库的用途 适用于任何持有 Quantova 账户、读取链上数据并发送签名交易的 Python 程序。无论是后端服务、indexer、explorer、faucet、validator 工具,还是脚本。您的代码控制所需的流程,而 QCore.py 负责派生密钥、签署交易并构建请求体,因此有关密码学或交易字节布局的细节完全不需要用 Python 编写。 ## 其处理的后量子密码学 Quantova 从根本上就是后量子的。它不包含任何椭圆曲线、没有 secp256k1、没有 ECDSA、没有 Ethereum 地址、也没有 Substrate 信封。以下每一个原语都是 Quantova 在 Q Crypto 库中从头自主实现的,不包含任何第三方密码学依赖,并编译为随此包一起提供的原生扩展。 1. 密钥派生。您的程序持有一个 32 字节的主种子。QCore.py 利用 SHAKE256 对主种子、方案字节和账户索引进行处理,从中生成每个账户的种子,然后从该种子派生出 module lattice 密钥对。节点运行完全相同的派生过程,因此密钥签名所用的账户就是持有资金的账户。 2. 签名方案。默认方案是 FIPS 204 标准中规定的 module lattice 签名 ML-DSA-65,在网络传输中作为方案一。FIPS 205 标准中规定的基于哈希的签名 SLH-DSA 是方案二。签名是确定性的,因此一个交易体总是能签名出一段精确的字节流,这使得签名后的交易具有可重现性和可测试性。 3. 地址。Quantova 地址是一个 Bech32m Q1 字符串,它通过 SHA3 256 哈希呈现出方案字节以及长达 1952 字节的完整 module lattice 公钥。整个公钥都绑定在地址中。没有任何内容会被截断为 20 字节的哈希,也无法通过签名恢复密钥,因此一个地址仅明确对应一个后量子密钥。 4. 交易。交易体包含发送者、nonce、meter limit、费用和调用。调用还可以包含以 Quon 为单位的值以及 chain id,因此签名可以用于支付调用,并且永远无法被重放到另一个网络上。签名所基于的字节是规范体的 SHA3 256 哈希,后跟一个固定的 Quantova 交易 domain tag,因此交易签名永远无法被重放为另一种类型的签名消息。交易体中包含的每个地址都作为 Q1 字符串底层的原始 32 字节 payload 绑定,而不是以字符串本身的形式绑定,因此同一地址的两种拼写总是会签名出相同的字节。QCore.py 负责组装交易体,在原生扩展内部对摘要进行签名,并返回准备好发送给 gateway 的 wrapper 字节和交易 ID。 ## 它如何针对 Quantova 进行定制且不继承行业任何内容 Quantova 不与任何其他链共享网络传输、地址或单位,QCore.py 仅使用 Quantova 的规则。该地址是基于完整后量子密钥的 Q1 Bech32m 字符串,绝不是十六进制的 20 字节地址,也不是 SS58 字符串。资金以 Quon(最小单位)进行计算,100 万 Quon 等于 1 QTOV,它以十进制字符串的形式返回,您只需在需要整数时使用 int 进行转换。网络传输使用的是 Quantova gateway,即通过 HTTP POST 请求发送至版本前缀下指定方法的扁平化 JSON body,而不是 Ethereum JSON RPC 或 Substrate WebSocket。交易编码使用的是 Quantova 自有的 canonical codec,而不是 RLP 或 SCALE。签名来自于 Q Crypto,这是 Quantova 从头自主编写的 lattice 和哈希标准实现,而不是借用库。 ## 创建钱包 ``` import qcore seed = qcore.generate_seed() # thirty two random bytes as hex from the platform source phrase = qcore.mnemonic_from_seed(seed) # the only backup, shown once and kept on the device ``` ## 使用方法 ``` import qcore client = qcore.Client("http://127.0.0.1:8645") seed = "0b" * 32 to = client.address(seed, 1) # Reads the fee and the nonce, signs inside the core, and submits. Nothing is # signed or built in Python. The last argument is the highest fee you will accept, # and the core refuses to sign a fee the gateway reports above it, so a gateway # cannot inflate the fee and drain the account. info = client.node_info() # A fresh account funded by a transfer arrives with a balance but no key on the # chain, so it signs this once to install its public key before its first send. client.register(seed, 0, info["fee"]["transfer_quon"]) signed, outcome = client.transfer(seed, 0, to, 1000, info["fee"]["transfer_quon"]) status = client.transaction(signed["tx_id"]) ``` ## 发送可支付调用 对合约的调用可以在其参数旁附带以 Quon 为单位的值,并且每个可支付调用都必须指定其要签名的链,这样签名就永远不会被重放到其他网络上。这是唯一一个要求提供 chain id 本身的原生签名器,因此请从您打算连接的节点上读取它,而不是随意假设。 ``` import qcore seed = "0b" * 32 target = qcore.address(seed, 1) # The nonce and the fee come from the account and the node the same way they do # for sign_call, and the last two arguments are the value the call carries in # Quon and the chain id the signature is bound to. signed = qcore.sign_payable_call(seed, 0, target, "", nonce=3, meter_limit=21000, fee=1000000, value=2500000, chain_id=0x5154_4F56_5445_5354) ``` ## 构建 ``` maturin develop ``` 构建过程需要 maturin,您可以使用 pip 将其安装到虚拟环境中。使用 maturin build 构建 release wheel。 ## 关于发布版本的说明 如果没有明确的发布操作,此处任何内容都不会发布到 registry 中。此包处理的是用户的密钥,且已发布的版本无法撤回。 ## 所有权与许可证 QCore.py 由 Quantova Inc 构建并拥有,它是基于 Rust 核心 QCore.rs 生成的,因此签名逻辑仅存在于一个地方,且从未用 Python 重写。它不包含任何行业技术栈,也不从中继承任何内容。它采用 Apache 2.0 和 MIT 许可证发布,因此任何钱包、explorer 或服务都可以基于它进行构建,版权所有归 Quantova Inc。
标签:CVE, PyO3, Python, Rust, 加密货币, 区块链, 可视化界面, 后量子密码学, 数字签名, 无后门, 网络流量审计, 逆向工具