撰写Qubic智能合约的非官方指南
本非官方指南提供了开发Qubic智能合约的概述,详细说明了关键功能、内存分配和测试程序,以确保强大且高效的部署。
Qsilver · 2024年6月27日
简介
欢迎阅读撰写Qubic智能合约(SC)的非官方指南。本指南旨在提供关于如何在Qubic生态系统中开发和实施智能合约的清晰简明的概述,参考核心的QPI文档。
Qubic智能合约概述
目前,撰写SC的主要文档是GitHub上的QPI文件。QPI代表Qubic编程接口,类似于API(应用程序编程接口),但特定于Qubic。
QPI文件包括:
- 禁止字符:没有乘法或除法运算符,没有预处理指令。
- 核心代码结构:
- 5000行代码:定义从单个位到拥有数百万元素的数组的每种变量大小。
- 1000行代码:管理各种队列和相关数据类型以实现高效的数据处理。
- 最后几百行:启用对Qubic网络状态的访问。
QPI中的关键功能
以下是QPI中提供的一些关键功能:
id arbitrator() const;
id computor(uint16 computorIndex) const; // [0..675]
uint8 day() const; // [1..31]
uint8 dayOfWeek() const; // [0..6]
uint16 epoch() const; // [0..9'999]
bit getEntity() const; // 如果找到实体,返回“true”,否则返回“false”
uint8 hour() const; // [0..23]
sint64 invocationReward() const;
id invocator() const; // 返回触发此合约的用户/合约的id;如果没有,则返回NULL_ID
template <typename T> id K12(const T& data) const;
uint16 millisecond() const; // [0..999]
uint8 minute() const; // [0..59]
uint8 month() const; // [1..12]
id nextId(const id& currentId) const;
sint64 numberOfPossessedShares() const;
id originator() const; // 返回触发整个调用链的用户的id;如果没有,则返回NULL_ID
uint8 second() const; // [0..59]
bit signatureValidity() const;
uint32 tick() const; // [0..999'999'999]
uint8 year() const; // [0..99] (0 = 2000, 1 = 2001, …, 99 = 2099)
这意味着什么?
Qubic智能合约是图灵完备的,这意味着您可以实现几乎任何计算逻辑。然而,某些限制确保了SC在高度隔离和安全的环境中运行。
内存分配
SC使用静态内存分配模型,其中所有内存必须预先分配。此设计对于在1GB RAM限制内高效管理数据结构至关重要。尽管此限制未来将加倍,但它仍然是固定分配的,因此需要仔细规划内存使用。
库的使用
目前,您无法在SC中使用外部库;所有必要的代码必须直接包含在源代码中。随着时间的推移,随着更多的SC集成各种库,这些库可能会在其他SC中公开使用。
交易和RCF网络消息
每个SC都有一个从公钥派生的唯一地址,合约ID为最低64位。SC通过发送到此地址的交易调用,inputData
指定操作。此外,可以使用RCF网络消息查询SC的状态。
示例:空投SC
一个空投SC可以通过数据集进行迭代,并在每个SC交易的一个滴答中将QU或代币分发给每个地址。目前每个滴答允许进行1024笔交易,这可能导致每滴答最多500百万次转账。实际吞吐量取决于SC的复杂性。
如何测试您的SC
- 开发您的SC:编写和调试您的智能合约代码。
- 更新qubic-cli:确保您的SC交易和RCF功能已集成。
- 创建测试网核心更新:将您的SC集成到测试网环境中。
- 运行测试:使用qubic-cli查询您的测试网节点并验证SC性能。
- 压力测试:进行负载测试和自动化测试以确保稳定性。
- 提交审批:调试完成后,提交您的SC以获得法定人数批准,然后进行IPO。
通过遵循这些步骤,您可以确保您的智能合约在Qubic网络中的部署是强大、高效的。祝您编码愉快!
阅读 Qsilver 的"非官方"系列
要获取最新更新,加入Valis Discord,在X上关注我们,并将我们的博客加入书签。
← 上一页
下一页 →