ICPunks是Dfinity上第一个Cyptopunks风格创建的IC NFT项目,ICPunks上的NFT是引入ERC-721进行铸造的,该项目一共铸造10000个不同特征免费供于社区索取链上小丑,该项目10000个NFT的索取过程分为4个时间线:北京时间9月2日凌晨0点,北京时间凌晨2点,北京时间凌晨3点,北京时间凌晨4点,前三个时间线皆是白名单索取,凌晨4点时间线为普通参与者索取,在4点时间线时有大部分用户到点之后几乎大部分参与者无法索取NFT,本期文章带各位小伙探讨ICPunks无法索取的根本原因?

我们回忆一下当时UTC时间20:00(北京时间凌晨4点)当时在ICPunks官网无法索取的两个问题:第一个是ICPunks前端没有加载出Chaim功能无无法索取,第二个是Chaim按钮出现后大部分人Chaim不了NFT。

以下部分资料由开发者论坛的队员提供,注意:以下均是个人分析,ICPunks官方解释出来可能会有变更:

我们在Plug钱包中查看交互过的Dapp查看到ICpunks Dapp由两个部署在ID为Pjljw的公共子网上的Canisters组成,通过IC.Rocks区块浏览器可以查看到该Canisters的分布详情。由此可见ICPunks 的Canisters均部署在ID为Pjijw 的子网上。

qcg3w-tyaaa-aaaah-qakea-cai

3hdbp-uiaaa-aaaah-qau4q-cai

回到在开发者论坛队员提供的资料显示在UTC时间2021-09-01 16:00(北京时间0点)时第一波增加流量开始访问pjijw子网,该时间是ICPunks第一波白名单索取NFT的用户,在下图边界节点发送的HTTP请求显示在UTC时间16:00至19:00发送的HTTP请求只增不减,逐渐增长的流量发送的HTTP请求开始达到边界节点配置的速率限制,所以边界节点开始限制对子网上容器的消息请求,这不仅对ICPunks部署的容器造成了影响,也对pjijw子网上的其他容器造成影响,这就意味着边界节点开始限制用户发起的HTTP消息请求。

边界节点发起的HTTP请求

而在UTC 20:00的时候从边界节点发起的HTTP请求急剧增加,这也是ICPunks全面开放的极端,当时发起HTTP请求的峰值达到了每秒38k次以上。

UTC 20:00 边界节点发起的HTTP请求

在ICPunks还未启动Chaim时,节点和子网表现是正常的,而在开启Chaim索取时,大量的更新调用提交涌入子网,从每秒提交18次更新到超过每秒提交1000次更新调用请求。

以下图片是通过边界节点发起的请求响应的返回结果的数据:

图一

图二

我们可以看得到在图一在UTC时间16:00之前状态峰值相对于来说处于一个稳定的状况,自ICPunks第一批百名单开始(UTC时间16:00)之后,大批流量涌入通过边界节点不断的发起调用请求之后,子网节点开始返回403结果,而在UTC时间20:00 ICPunks全面启动的的时候,返回403结果的数量更是达到了一个新的临界点(403结果是被子网节点拒绝的调用请求)。而在图二中ICPunks全面开启之后返回202结果只有少数部分(202 HTTP状态代表消息调用被受理)这意味在ICPunks从20:00开始之后只有少部分人的调用请求被受理了,而大部分人的调用请求被节点拒绝,也就能表明当时出现Chaim界面之后只有少数人可以索取,大部分用户则是被拒绝请求的。

由于ICPunks全面开启(UTC时间20:00)之后大量流量涌入导致pjljw子网的最终区块的确定率从1秒/块下降至1秒/0.3个区块。

并且这个阶段pjljw子网通过入口的消息调用限制为每秒50条。

在根据开发者论坛队员给出的资料我们可以将ICPunks造成pjljw子网网络拥堵的时间线流程分为:

  • 2021-09-01 16:00 :ICPunks第一批白名单Chaim,倒计时开始流量开始涌入

  • 2021-09-01 16:15 :在查询调用中边界节点开始速率限制,速率限制随着20:00的临近继续增加。

  • 2021-09-01 19:00:第二波Chaim发生,导致流量的进一步增加,但由于第二波Chaim的参与者数量有限,所以在更新调用的量仍然很低。

  • 2021-09-01 20:00:Icpunks全面开始Chaim导致流量急剧增加,以每秒发起38 rep达到边界节点的峰值从个人导致pjljw子网因为大量请求涌入导致区块最终确定率降至0.3块/秒。

  • 2021-09-01 20:40:随着NFT的索取降低,流量开始逐渐减少,流量请求降低至10k rep/每秒,并随着时间继续下降。

  • 2021-09-01 20:45:pjljw子网恢复正常完成率。

根据开发者论坛队员的描述:在客户端(浏览器的控制台日志中)显示边界节点网关.ic0.app返回大量的报错代码500,而ICPunks的静态资源是通过Dfinity提供服务的,所以只有ICPuks的前端加载足够多的静态资源才能够发挥作用:这也是为什么这么多用户除了不断的重新加载页面而什么都做不了的原因。

从UTC20:00时间之后边界节点涌入大量流量并向ICPunks的两个容器发送高频的调用消息请求,而容器高频更新负载导致子网性能下降,这个因素导致用户无法与ICPunks上的Canisters进行交互索取NFT,以及访问pjljw子网上的其他容器,并且这段时间内大多数消息请求要么会被受到速率限制,要么会被节点直接拒绝(因为消息请求过载)或者会被返回不同的报错结果,所以在当时只有一小部分用户的调用请求被受理,而大部分用户的请求是被拒绝的,而第一批白名单的用户能够正常Chaim他们的NFT是因为当时他们并没有受到速率限制并且当时子网的完成率是正常的。

尽管在当时的流量很高pjljw子网也继续处理查询调用和更新调用的请求,边界节点也继续为流量提供服务,速率限制是为了保护子网免受大量流量的影响,因为未经过过滤的流量可能会导致子网节点更多终端。

在开发者论坛中队员表示会通过改进以下要求防止再次出现此类事件的再次发生:

  • 改进有关如何在IC拓展去中心化应用程序的文档。

  • 在边界节点上启用(符合标准)HTTP缓存并向开发人员传达最佳实践。

  • 在区块之间评估节点上查询API调用结果的缓存。

  • 使用多线程进行执行调用(目前使用64内核中的一个进行单线程执行)

  • 负载测试并根据更显示的流量负载调整速率限制。

Dfinity深圳社区,专注于Dfinity生态技术发展交流与优质项目挖掘分析

一文带你读懂无法索取ICPunks NFT的背后原因相关推荐

  1. DNN、RNN、CNN.…..一文带你读懂这些绕晕人的名词

    DNN.RNN.CNN.-..一文带你读懂这些绕晕人的名词 https://mp.weixin.qq.com/s/-A9UVk0O0oDMavywRGIKyQ 「撞脸」一直都是娱乐圈一大笑梗. 要是买 ...

  2. 一文带您读懂FCC、CE、CCC认证的区别

    一文带您读懂FCC.CE.CCC认证的区别 参考资料:https://3g.k.sohu.com/t/n411629823 FCC认证,CE认证,CCC认证是产品认证中比较常见的几个认证,前两者经常有 ...

  3. 机器学习中为什么需要梯度下降_机器学习101:一文带你读懂梯度下降

    原标题 | Machine Learning 101: An Intuitive Introduction to Gradient Descent 作者 | Thalles Silva 译者 | 汪鹏 ...

  4. 一文带你读懂HTTP协议的前世今生

    点击上方蓝字关注我们 HTTP,Hypertext Transfer Protocol,超文本协议,是在万维网上传输文件(如文本.图形图像.声音.视频和其他多媒体文件)的规则集.如果web用户打开他们 ...

  5. 用程序员计算机算进制,一文带你读懂计算机进制

    hi,大家好,我是开发者FTD.在我们的学习和工作中少不了与进制打交道,从出生开始上学,最早接触的就是十进制,当大家学习和使用计算机时候,我们又接触到了二进制.八进制以及十六进制.那么大家对进制的认识 ...

  6. 一文带你读懂“经典TRIZ”

    本文承接上文<一文带第读懂TRIZ>,下面开始看第二个问题:什么是"经典TRIZ"? 很多书里都有对TRIZ的产生与发展的描述. 我个人在看了很多的书和文献以后,认为: ...

  7. 简单一文带你读懂Java变量的作用和三要素

    Java变量的作用 不只是java,在其他的编程语言中变量的作用只有一个:存储值(数据) 在java中,变量本质上是一块内存区域,数据存储在java虚拟机(JVM)内存中 变量的三要素 变量的三要素分 ...

  8. 一文带你读懂感知机的前世今生(上)

    一文带你读懂感知机的前世今生 前言 男女不分 什么是神经元 M-P神经元 全或无定律 McCulloch和Pitts 一种高度简化的模型 MP神经元和真值表 MP神经元的几何理解 后记 参考 前言 男 ...

  9. 《一文带你读懂:云原生时代业务监控》

    点击上方蓝字关注我们! 对业务来说,完备的应用健康性和数据指标的监控非常重要,通过采集准确的监控指标.配置合理的告警机制,我们能够提前或者尽早发现问题,并做出响应.解决问题,进而保证产品的稳定性,提升 ...

最新文章

  1. -bash: git: command not found
  2. asp实现UNIX时间戳功能
  3. 隔空测量电压:电场强度测试仪-FMX-004
  4. Arrays.binarySearch返回值
  5. web页面密码修改测试
  6. java gridlayout 设置列宽_java 利用GridBagLayout布局时,如何设置单列列宽?
  7. raid ahci模式哪个好_比群晖好用?威联通TR-004磁盘阵列外接盒使用详解
  8. python-Django环境搭建
  9. C# 实现软件自动更新升级程序
  10. ASP.NET中的两个Cookie类:HttpCookie类与Cookie类
  11. mvc可以运行在linux下吗,asp.netmvc部署到linux(centos)
  12. 如何linux网页修改回80端口,linux下如何修改iptables开启80端口
  13. Flutter图片处理之高斯模糊
  14. VB6-COM接口操作开源OpenOffice编辑Excel,Word文件(中国首创)
  15. 使用NuSMV解决过河问题
  16. 菜鸟学网站开发入门之——网站是什么
  17. daytime协议的服务器和客户端程序,用Socket套接字实现DAYTIME协议的服务器和客户端程序-20210414073352.docx-原创力文档...
  18. 代码改变生活-文件重命名
  19. Word 2016中给公式自动编号
  20. Google全球IP地址库

热门文章

  1. matlab 向量取倒数,Matlab 求倒数命令及控制方法
  2. 【设计模式】之工厂模式
  3. linux下tcp滑动窗口大小设置,转:TCP滑动窗口协议与socket缓冲区之间的关系
  4. unity3d游戏开发之 游戏贴图、模型基本规范(QA)
  5. java计算机毕业设计基于安卓Android的英语学习APP系统
  6. [Python]不使用kociemba库解魔方
  7. python卡尔曼滤波室内定位_基于核函数与卡尔曼滤波的室内定位方法
  8. iOS13.3Beta4发布,更新内容简介/资源站Unc0ver更新证书
  9. 分布式架构设计概要总结
  10. live555 学习笔记-建立RTSP连接的过程(RTSP服务器端)