Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
ss 请输入一个提交信息以解释此合并的必要性,尤其是将一个更新后的上游分支
  • Loading branch information
weiheng committed Dec 13, 2024
2 parents 7555f2c + 3b1c3bc commit 461e94e
Show file tree
Hide file tree
Showing 18 changed files with 362 additions and 40 deletions.
10 changes: 10 additions & 0 deletions 317232.md
Original file line number Diff line number Diff line change
Expand Up @@ -98,5 +98,15 @@ Solidity快速入门总结:
4.将自动售货机的 Javascript 业务逻辑转换为**Solidity 智能合约**

5.**将我们的智能合约部署**到 Hardhat 的本地开发网络,然后是 Arbitrum 的 Sepolia 测试网,然后是 Arbitrum One 主网。
### 2024.12.13
三.了解不同的 Arbitrum 链及其技术堆栈

**Arbitrum One**是一条第 2 层 (L2) 乐观汇总链,它实现 Arbitrum Rollup 协议并结算到以太坊的第 1 层 (L1) 链。它允许您构建高性能以太坊 dApp,具有低交易成本和以太坊级安全保证,无需引入额外的信任假设。这是通过Nitro技术堆栈实现的,这是一种“以 Geth 为核心”的架构,它为 Arbitrum One(和 Nova)提供了高级调用数据压缩、用于常见执行和故障证明的单独上下文、以太坊 L1 gas 兼容性等。

**Arbitrum Nova**是 Arbitrum One 链的高性能替代方案。Arbitrum One 实现了纯粹无需信任的 Rollup 协议,而 Arbitrum Nova 实现了几乎无需信任的AnyTrust协议。

**区别:**

Arbitrum One 和 Arbitrum Nova 是专为实际使用而设计的生产链。它们连接到以太坊主网并处理真实、有价值的交易。它们都在底层使用 Arbitrum 的 Nitro 技术堆栈,但 Arbitrum One 实现了 Rollup 协议,而 Nova 实现了 AnyTrust 协议。Arbitrum One 专为一般用途而设计,为运行与以太坊兼容的智能合约提供了可扩展且经济高效的解决方案。另一方面,Arbitrum Nova 专为需要更高交易吞吐量且不需要 Rollup 提供的完全去中心化的应用程序而设计。

<!-- Content_END -->
4 changes: 4 additions & 0 deletions CHENFANGC.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,4 +74,8 @@ timezone: Pacific/Auckland # 新西兰标准时间 (UTC+12)

阅读文档如何在 Arbitrum 中估算 Gas

### 2024.12.13

阅读文档[Rollup,ZK Rollups 与 Optimistic,Arbitrum 的区别](https://cloud.tencent.com/developer/news/1003179)

<!-- Content_END -->
10 changes: 10 additions & 0 deletions ChinesePaladin61.md
Original file line number Diff line number Diff line change
Expand Up @@ -148,4 +148,14 @@ Rollup 的运行过程及细节?

过了挑战期后发现漏洞,但因为区块的不可篡改机制,系统默认状态根合法,如果设置抵押金,会让骗子的获利程度缩小,或者使用激励机制,让更多的人审查代码,确保交易合法,如果有漏洞也可以在挑战期内发现。

### 2024.12.11

Arbitrum One

Arbitrum One 是目前最广泛使用的 Arbitrum Rollup,前几天的知识点都是基于Arbitrum One的技术。

Arbitrum Nitro



<!-- Content_END -->
11 changes: 8 additions & 3 deletions Helen2022a.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,15 @@ timezone: Asia/Shanghai

<!-- Content_START -->

### 2024.12.10
### 2024.12.13

笔记内容
Arbitrum是一种基于Optimistic Rollup技术的以太坊Layer2 扩展解决方案,旨在解决以太坊上的拥堵和高gas费问题。

Arbitrum是以太坊的辅助链。运行原理简单说就是Arbitrum 将很多交易一起打包,在Arbitrum链上先进行结算,然后再将交易数据提交给以太坊主链。
Arbitrum采用了一种叫做Optimistic Rollup的技术,它可以将大量的交易打包成一个区块,并提交到以太坊主链上,只有在出现争议时才需要验证区块的正确性。这样可以大幅减少对以太坊主链的资源占用,提高交易吞吐量和速度。

ARB是Arbitrum网络的原生Token,采用的标准是以太坊ERC-20,是Arbitrum网络的治理和激励Token,主要用于奖励验证节点、参与网络治理等。
ARB只是一个治理token,不用于支付Arbitrum链上的任何费用。目前,用户在Arbitrum链上交互支付的Gas费仍是ETH

### 2024.12.10

<!-- Content_END -->
33 changes: 32 additions & 1 deletion HeliosLz.md
Original file line number Diff line number Diff line change
Expand Up @@ -217,5 +217,36 @@ Arbitrum 是一个基于 Optimistic Rollups 的 L2 扩展方案,但它在以
4. 结果:
* 如果挑战成功,全局状态 S1 被撤销,系统回滚到 S0,或者部分交易被重新验证。

### 2024.12.12
### 2024.12.13
断言:在 Arbitrum 等基于 Optimistic Rollup 技术的系统中,断言(Assertion) 是验证者对某一交易或状态转换的声明或主张。简单来说,断言是验证者向主链提交的一种“保证”或“承诺”,它描述了某个区块或交易的初始状态和最终状态之间的关系。

**断言的作用:**
* 主链记录:Layer 2 的执行结果以断言的形式提交到主链,供其他验证者审查。
* 性能优化:主链并不立即验证每个断言,而是假定它们是正确的,只有在有验证者提出挑战时才检查。

Arbitrum 的交互式欺诈证明机制通过引导争议双方在链下进行多轮交互,逐步缩小争议范围,最终在链上验证最小的争议单元,从而高效解决分歧,减轻主链负担。

![image](https://github.com/user-attachments/assets/7e6f4e7a-204a-4d57-99b0-a5252946c212)

**Arbitrum One**

Arbitrum One 是 Arbitrum 的首个主网,采用交互式欺诈证明机制来确保交易的正确性。其架构分为 Layer 1(以太坊主网)和 Layer 2(Arbitrum 链)两部分。在 Layer 1 上,EthBridge 作为一组以太坊合约,负责仲裁 Arbitrum Rollup 协议,并维护 Arbitrum 在以太坊链上的收件箱和发件箱。用户、Layer 1 合约和全节点可以通过这些收件箱和发件箱与 Arbitrum 链交互。在 Layer 2 上,Arbitrum 虚拟机(AVM)运行 ArbOS,确保智能合约的执行。

**Arbitrum Nitro**

Arbitrum Nitro 是对 Arbitrum One 的技术栈升级,旨在降低费用、提高以太坊兼容性,并简化零知识证明。Nitro 的关键创新包括:
* 无需共识机制的证明程序:由于 Sequencer 的状态转移函数是公开的,任何人都可以根据已知的交易顺序计算状态转移结果,因此节点无需共识机制,只需获取交易序列并在本地运行即可。
* 用 Go 语言重写的节点软件 Geth:通过直接编译 Geth 的核心,实现更高的以太坊兼容性。
* 执行与证明的分离:将执行和证明分别用不同的代码实现,以提高执行速度和证明的可移植性。
* 交互式欺诈证明的 Optimistic Rollup:采用多轮欺诈证明机制,通过二分查找找到引起分歧的操作码,并在链上执行该操作码以解决争议。

**Arbitrum Nova**

Arbitrum Nova 基于 AnyTrust 技术,专为游戏、社交应用程序和对成本更敏感的用例设计。其特点包括:
* 数据可用性委员会:引入数据可用性委员会,将原本应存储在收件箱合约中的 calldata 数据转移到链下存储。委员会为批量交易签署数据可用性证书(DACerts),并将其上传到主网的收件箱合约,从而降低发送到主网的数据量。
* 最小信任假设:委员会有 N 名成员,只需确保至少有 2 名成员是诚实的,即可保证 Rollup 协议的正常运行。
* 数据发布方式:Nova 提供两种数据发布方式:一种是像 Nitro 一样以 calldata 的形式发布完整数据,另一种是发布 DACert 以证明数据的可用性。

通过这些设计,Arbitrum Nova 在一定程度上牺牲了去中心化特性,但相比其他侧链和采用 BFT 共识的链,仍具有较高的优势。

<!-- Content_END -->
5 changes: 5 additions & 0 deletions Muyec.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,4 +84,9 @@ timezone: Pacific/Auckland # 新西兰标准时间 (UTC+12)
Nitro 与 Classic:Arbitrum Nitro 是对 Arbitrum Classic 技术栈的升级,代表了 Arbitrum 技术发展的最新一步。两者的目标相似,都是创建一个接近以太坊的执行环境,用以太坊的欺诈证明保证 L2 状态的安全性。但 Nitro 相比 Classic 有显著的改进。在 Classic 中,Arbitrum 使用定制的虚拟机(AVM)执行代码,而在 Nitro 中,采用了 WebAssembly(Wasm),并将 Go 代码编译为 Wasm,这使得 Arbitrum 的 L2 状态机(ArbOS)能够直接包含以太坊的 Geth 实现,从而提高了兼容性。Nitro 的架构选择带来了多方面的优势:更低的费用、更好的以太坊兼容性和系统简化。


### 2024.12.13

Arbitrum Orbit 是一个开发框架,允许用户基于 Arbitrum Rollup 的 L2 创建和启动 L3 网络。Orbit 支持用户定制链功能,包括隐私、权限、费用代币和治理等,同时提供专用吞吐量、流量隔离以及可靠的 Gas 价格,适合特定领域的快速机制设计与迭代,帮助实现更多的价值捕获。
XAI 是基于 Arbitrum Orbit 的首个 L3,定位为专注游戏场景的链,相较于 Nova 通用链,XAI 能够提供更高的性能。它具备专属的计算和存储资源,适合计算密集型场景(如 AI 模型)。同时,XAI 原生集成了 Arbitrum 技术栈,包括 Nitro、BOLD 和 Stylus。
Nitro 是 Arbitrum 的核心技术栈之一,通过直接编译 Geth 核心,显著提升了以太坊的兼容性和性能。这一升级使得 Orbit 链能够以更高效的方式运行,进一步优化用户体验。
<!-- Content_END -->
87 changes: 53 additions & 34 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -162,41 +162,41 @@ Telegram:[Arbitrum 残酷共学](https://t.me/LXDAO/15575)
<!-- START_COMMIT_TABLE -->
| Name | 12.10 | 12.11 | 12.12 | 12.13 | 12.14 | 12.15 | 12.16 | 12.17 | 12.18 | 12.19 | 12.20 | 12.21 | 12.22 | 12.23 | 12.24 | 12.25 | 12.26 | 12.27 | 12.28 | 12.29 | 12.30 |
| ------------- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- |
| Yi-fantasy | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | |
| onthebigtree | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | |
| Yi-fantasy | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | |
| onthebigtree | ✅ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | |
| Soleil-YSY | ⭕️ | ⭕️ | ❌ | | | | | | | | | | | | | | | | | | |
| jiejie | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | |
| StarryDesert | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | |
| a-super-cat | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | |
| pillowtalk-Qy | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | |
| hechichu | ✅ | ✅ | | | | | | | | | | | | | | | | | | | |
| nocb | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | |
| ChinesePaladin61 | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | |
| jjeejj | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | |
| happylucie | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | |
| Rey666666 | ✅ | ✅ | | | | | | | | | | | | | | | | | | | |
| CHENFANGC | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | |
| Muyec | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | |
| YuanboXie | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | |
| JacksonStack | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | |
| Helen2022a | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | |
| stualan | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | |
| fuhaooo | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | |
| pliker-git | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | |
| noyyyy | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | |
| NSXX2021 | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | |
| 317232 | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | |
| Marcus | ⭕️ | ✅ | ✅ | | | | | | | | | | | | | | | | | | |
| yuhui | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | |
| HenryWei | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | |
| missingtheway | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | |
| iavl | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | |
| HeliosLz | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | |
| linyuanye3 | ✅ | ⭕️ | ✅ | | | | | | | | | | | | | | | | | | |
| joyc | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | |
| CornellZheng | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | |
| YOUKUAIHAOMUTOU | ✅ | ✅ | | | | | | | | | | | | | | | | | | | |
| wodeche | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | | |
| jiejie | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | |
| StarryDesert | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | |
| a-super-cat | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | |
| pillowtalk-Qy | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | |
| hechichu | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | |
| nocb | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | |
| ChinesePaladin61 | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | |
| jjeejj | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | |
| happylucie | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | |
| Rey666666 | ✅ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | |
| CHENFANGC | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | |
| Muyec | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | |
| YuanboXie | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | |
| JacksonStack | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | |
| Helen2022a | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | |
| stualan | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | |
| fuhaooo | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | |
| pliker-git | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | |
| noyyyy | ✅ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | |
| NSXX2021 | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | |
| 317232 | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | |
| Marcus | ⭕️ | ✅ | ✅ | | | | | | | | | | | | | | | | | | |
| yuhui | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | |
| HenryWei | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | |
| missingtheway | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | |
| iavl | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | | |
| HeliosLz | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | | |
| linyuanye3 | ✅ | ⭕️ | ✅ | | | | | | | | | | | | | | | | | | |
| joyc | ✅ | ✅ | ✅ | ✅ | | | | | | | | | | | | | | | | | |
| CornellZheng | ✅ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | |
| YOUKUAIHAOMUTOU | ✅ | ✅ | ⭕️ | | | | | | | | | | | | | | | | | | |
| wodeche | ✅ | ⭕️ | ⭕️ | | | | | | | | | | | | | | | | | | |
<!-- END_COMMIT_TABLE -->
Expand All @@ -218,6 +218,25 @@ Telegram:[Arbitrum 残酷共学](https://t.me/LXDAO/15575)
Expand Down
22 changes: 22 additions & 0 deletions StarryDesert.md
Original file line number Diff line number Diff line change
Expand Up @@ -135,4 +135,26 @@ Arbitrum是一种基于以太坊(Ethereum)的Layer 2扩容解决方案,旨

### 2024.12.13

笔记内容

#### **Arbitrum One**

Arbitrum One是Arbitrum的第一个版本,其架构部分在L1(以太坊主网),部分在L2(Arbitrum链)。它使用EthBridge来仲裁Arbitrum Rollup协议,并维护Arbitrum Rollup在以太坊链上的收件箱和发件箱。用户可以通过以太坊链上的收件箱和发件箱将交易发送至Arbitrum链,并观察这些交易的结果。Arbitrum虚拟机(AVM)是EthBridge提供的功能,是L1和L2之间的网关。

#### **Nitro**

Nitro是Arbitrum One的技术栈升级,它的费用更低、以太坊兼容性更好以及zk证明更简洁。Nitro采用多轮欺诈证明,通过证明者和验证者之间的多轮交互来确保系统的安全性和正确性。Nitro还采用了用Go语言重写的节点软件Geth,实现了以太坊高度兼容。Nitro的证明系统是交互式欺诈证明,通过二分查找找到引起分歧的那个区块的第一个操作码。

#### **Nova**

Nova是基于AnyTrust技术搭建的新链,专为游戏、社交应用程序和对成本更敏感的用例而设计。Nova提供了两种数据发布方式,一种是像Nitro一样以Calldata的形式发布完整数据,另一种是发布DACert证明数据的可用性。Nova的定序器将完整的数据集同时发送给所有DAC委员会的成员,委员会签名后把带有签名的证明返回给定序器,定序器收集到足够多的证明就能将它们聚合并创建有效的数据可用性证明(DACert),然后把DACert发布到主网。如果定序器没有收集到足够多的证明,Nova会回退到Rollup模式(以Calldata形式发布数据到主网)。

#### **AnyTrust**

AnyTrust是Arbitrum扩容方案最初的构想,是Arbitrum Nitro的技术变式。它通过最小信任假设来降低calldata的交易成本,依靠外部数据可用性委员会来存储数据并按需提供。AnyTrust与Rollup的区别在于AnyTrust引入了数据可用性委员会,将原本应该存储在inbox合约中的calldata数据转移到链下的数据可用性委员会存储。

#### **Arbitrum L3战略**

Arbitrum团队推出了Arbitrum Orbit,一个开发框架,允许用户使用任何基于Arbitrum Rollup的L2网络作为结算层来创建和启动L3网络。Arbitrum Orbit允许用户在隐私、权限、费用代币、治理等方面定制自己的链。基于Arbitrum Orbit,Arbitrum团队推出了XAI,一个游戏专用L3网络,拥有专用的计算和存储资源。XAI将原生受益于Arbitrum的技术堆栈:Nitro+BOLD+Stylus。

<!-- Content_END -->
3 changes: 3 additions & 0 deletions YOUKUAIHAOMUTOU.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,4 +71,7 @@ timezone: Pacific/Auckland # 新西兰标准时间 (UTC+12)
今天的学习内容其实还没有完成。但是先厚着脸皮打下卡。
明天继续。

### 2024.12.13
打卡打卡

<!-- Content_END -->
42 changes: 42 additions & 0 deletions Yi-fantasy.md
Original file line number Diff line number Diff line change
Expand Up @@ -218,4 +218,46 @@ Yi
>
>Nitro 用 Wasm 作为 L2 的虚拟机,可以用高级语言进行编写合约,代码要精炼、简单很多,开发成本更低,安全性也更加有保障
### 2024.12.13

>AnyTrust:
>
>AnyTrust 是 Nitro 的技术变式,它通过最小信任假设来降低交易成本,依靠链下数据可用性委员会来存储数据和证明欺诈
>
>
>
>数据可用性委员会:
>
>AnyTrust 模式下,用户将交易发布到 Sequencer 之后,Sequencer 会将数据发到链下委员会存储,委员会将为批量的交易数据签署可用性证书(DACerts),只有 DACerts 会被上传到主网的 inbox 合约,进一步降低了发送到主网的数据大小。而且委员会公开了查询接口,允许通过证书的 Hash 获取数据批次。
>
>当需要获取交易数据的时候,从 inbox 合约中获取上传的 hash 值,通过查询接口,就可查询到交易数据。Anytrust 方案在一定程度上牺牲了去中心化特性(也牺牲了一定安全性),依赖中心化组织保证数据的正确性
>
>
>
>Nova:
>
>Nova 是基于 AnyTrust 技术搭建的新链,专为游戏、社交应用程序这种对成本和性能更敏感的应用而设计。 Nova 支持了 2 种数据发布方式,一种是以 Calldata 的形式发布完整数据,一种是发布 DACert 的方式。
>
>Nova 的定序器将完整的数据集同时发送给所有 DAC 委员会的成员,委员会签名后把带有签名的证明返回给定序器,定序器收集到足够多的证明就能将它们聚合并创建有效的数据可用性证明(DACert),然后把 DACert 发布到主网。如果定序器没有收集到足够多的证明,Nova 会回退到 Rollup 模式(以 Calldata 形式发布数据到主网)。
>Orbit:
>
>Orbit 是一个开发框架,允许用户使用任何基于 Arbitrum Rollup 的 L2 网络作为结算层来创建和启动 L3 网络。借助 Arbitrum Orbit,用户可以在隐私、权限、费用代币、治理等方面定制自己的链。(L3 使得链上资源密集型应用成为可能。)
>
>
>
>BOLD:
>
>BOLD 是 Arbitrum 团队提出的无需许可验证机制,目的是最小化结算状态的延迟。
>
>目前对于乐观 Rollup 而言,普遍存在一周的挑战期,用户从 L2 提现到 L1 要等一周;挑战期内验证者如果发现提交上来的 L2 交易有问题,可以发起挑战。
>
>通过引入 BOLD 机制,一方面能实现验证的无需许可,更符合区块链去中心化的理念;另一方面,能实现最小化结算状态的延迟。BOLD 允许单个诚实的验证者在以太坊上与任意数量的对手进行争议时取胜,从而使 DDOS 攻击失效。
>
>
>
>Stylus:
>
>简言之,开发人员在 Arbitrum 上既能使用传统 Solidity 语言,又能使用 WASM 兼容的语言,如 Rust、C 和 C++ 等来构建应用程序。此外,Stylus 使 Dapps 的执行更加高效,显著地降低了 gas 成本。
<!-- Content_END -->
Loading

0 comments on commit 461e94e

Please sign in to comment.