链上随机数生成:理论与实现
概述 对于伪随机数的生成,特别是正态分布随机数的生成在智能合约内拥有较为广阔的使用场景。本文主要讨论链上的伪随机数生成。链上没有真随机数的观点是正确的,但是此观点不应该阻碍智能合约工程师探索链上高质量伪随机数生成,链上也有具有较难操纵的随机数来源,比如 EIP-4399 引入的 PREVRANDAO 操作码,但是将此随机数作为种子计算如正态分布的随机数的有关讨论则较少在智能合约领域提及,本文主要对此问题进行讨论。 ...
概述 对于伪随机数的生成,特别是正态分布随机数的生成在智能合约内拥有较为广阔的使用场景。本文主要讨论链上的伪随机数生成。链上没有真随机数的观点是正确的,但是此观点不应该阻碍智能合约工程师探索链上高质量伪随机数生成,链上也有具有较难操纵的随机数来源,比如 EIP-4399 引入的 PREVRANDAO 操作码,但是将此随机数作为种子计算如正态分布的随机数的有关讨论则较少在智能合约领域提及,本文主要对此问题进行讨论。 ...
概述 VRGDA(Variable Rate GDAs) 是一种渐进式荷兰式拍卖(Gradual Dutch Auctions, GDAs)的扩展,其作用是在超长代币发行期间保持一个合理价格的且定期的流动性释放。而普通的 GDAs 则是只可以保证代币出售的价格合理,但不能保证代币在合适的时间释放。 ...
概述 在 上一篇文章 中,我们介绍了常见的几种有理多项式插值方法,但我们并没有给出具体的 Huff 语言实现及其测试。本文仍考虑在智能合约内实现以下公式: $$ f(x) = e^x $$ 与上一篇文章不同,本文不会进一步讨论具体的插值原理,而是主要介绍插值的实现及其误差测试。 ...
概述 随着 Starknet Foundry 的进一步更新,使用 Starknet Foundry 进行 Cairo 智能合约开发可能会逐渐成为未来主流。 本文的主要内容实际上是介绍 cairo v2.3 引入的 Components 重大更新,但考虑 Starknet Foundry 的活跃开发,所以本文使用了 Starknet Foundry 作为开发框架,而不是与之前的文章一样使用 Cairo 自带的框架。 ...
概述 在 solidity 的 gas 优化过程中,我们常会遇到一些复杂的数学计算,这些复杂的数学计算在 solidity 中实现往往是困难的且极其消耗 gas 的,本文将给出一系列通用的数学方法以实现使用多项式逼近复杂数学公式,并给出对应的相关代码。 ...
概述 总所周知,在 StarkNet Cairo 中,合约需要经过以下步骤进行编译和部署: 在此流程中,我们发现合约首先被编译为 Sierra 这一中间表示层。Sierra 的全称为 Safe Intermediate Representation ,直译为安全中间表示层。在本文中,我们将探讨 Sierra 为什么具有 “安全” 和 “中间表示” 两个特性。 ...
概述 如果读者阅读过笔者之前的文章就会发现,我在 solidity 中使用了 ERC20 代币 -> 可实升级合约的学习路径。为了保持文章的统一性,我准备在此文中介绍 cairo 的可升级合约编程。 ...
概述 Cairo 是 ZK Rollup 的领域专用语言,目前仅用于 StarkNet 项目。随着 Rollup 叙事的发展,我们认为 cairo 在未来一定会成为智能合约开发的核心语言。 本文类似我之前编写的 Foundry教程:编写测试部署ERC-20代币智能合约 ,介绍了使用 cairo 1 v2 版本(该版本也可称为 Cairo 2) 进行编程、测试和部署的全流程。由于缺乏易用工具,本文放弃了本地测试网部署。 ...
概述 由于 Python 3 有几次较为跳跃的更新,导致大量使用 Python 3 作为开发工具的软件会对 Python 3 的版本进行严格限制,如限制使用 Python 3.8 - Python 3.9 版本。这要求开发者开发环境内应具有多版本的 python 。在 Ubuntu 等 Linux 系统下,Python 的安装都是使用的源码编译方法,这对一些 Python 开发者并不友好,本文会给出一种较为简单的多版本 Python 安装方法。 ...
概述 ENS 是一个以太坊上的开放、可拓展的命名系统,也是目前在以太坊中最常用的命名系统。ENS 的功能是将人类较难判读的以太坊地址转化为人类可读的名字,如 vitalik.eth 。 ...