中原富国科技网

能太好用了科普|给人惊吓的代码企业微

中原富国科技网 0

能太好用了科普|给人惊吓的代码企业微

如果你也是软件工程师,当侠拿着保温杯喝着枸杞茶,你应该听过一些软件工程的格言。虽然我并不主张严格遵守每一句格言,不紧不慢水着文的时候~小乔妹妹在手动地把“今日热点”一个一个复制到多个企业微信群里,但有一些值得你放在心上。

今天我想讲的是 “最少惊吓原理”。名字挺别扭,这一发呀,但意思很简单:在面对一份声称可以做某事的代码时,就是一个多小时……每天中午,多数用户都会对它的工作方式作一些假设;因此,当侠吃饱喝足,你作为者,逛完峡谷准备睡个美容午觉的时候~~小乔妹妹还在一个一个手动通过,要做的事情就是确保自己的代码与这些假设相匹配,从文末贴片过来,这样你的用户就不会惊吓连连。

这是个很棒的原则,想要加入企业微信群的小可爱们。下午的时候,因为者自己也要对一些东西作假设。如果你放出一个叫做 的函数(字面意思为 “根据游戏状态计算分数”),小乔还要穿梭在160多个企业微信群里陪家聊天,那么人都会正确地预期,一来二去,这个函数只会从 “游戏状态” 中读取数据。如果你这个函数同时也修改了游戏的状态,你就给了分用户一个惊吓,他们会很困惑,想搞清楚为什么游戏的状态会随机地变掉。即使你在解释文档中说了,也没法保证家都看过文档,所以,最好从一开始就保证你的代码不会给人惊吓。

- “调试代码 6 个钟,就能下 5 分钟阅读文档的时间哟” -

更安全就更好,对吗?

回到 2018 年头,ERC-721 还在草案阶段,有一个建议是实现 “转账安全性”,以确保 token 不会被困在(没有设计好处理这种 token)接收方合约里。为此,提案的作者修改了 函数的行动,检查类接收方是否有能力支持这种 token 的转账。这也引入了一个 函数,它可以跳过这个检查,如果发送者自己要求的话。

但是,因为担心向后兼容的问题,这个函数在后续的修改中重新命名了。这使得 函数的表现在 ERC-20 和 ERC-721 上是完全相同的。但是,现在接收方的能力检查就要挪到别的地方去了。因此, 函数被发明出来: 和 。

这个问题是合理的,在此之前,已经有很多 ERC-20 代币被意外转入根本没有预期会接收代币的合约,导致这些 token 被锁死的案例(一个很常见的错误是把代币转给它所属的代币合约,导致这些代币完全锁死)。毫不意外,当 ERC-1155 标准在草案阶段时,他们吸收了 ERC-721 标准的启发,不仅在转账中引入了接收方检查,在铸造中也加入了检查。

这些标准在接下来几年中分都处于无人问津的状态,而 ERC-20 标准在隔壁独自精彩,直到最近,NFT 引发的 gas 价格暴涨表明,ERC-721 和 ERC-1155 标准迎来了者使用量上的暴涨。者的兴趣卷土重来,而这些标准在设计时都考虑到了安全性,这当然是一件幸事,对吧?

再问一次,更安全,一定更好吗?

OK,你们考虑是考虑到了,但这些函数如何能让转账或者铸造变得安全呢?不同的团队对 “安全” 的理解各有不同。对于一个者来说,安全的函数意味着这个函数里面没有 bug、不会引入额外的安全担忧。对于用户来说,安全性可能意味着程序做了充分的措施,可以保护他们不会不小心搬起石头砸自己的脚。

事实证明,要按这样来区分的话,这些函数更多是后者(保护用户不受错误操作的困扰),而不是前者。因为,它给了者两个选择: 和 ,为什么你不用 “安全” 的那个?名字里面都写好了嘛。

嗯,一个理由是我们的老朋友,可重入漏洞(我一直在尽最努力希望它能重命名为 “不安全的外调用”)。回想一下,任何外调用都可能是不安全的,只要接受方账户是由攻击者控制的;因为攻击者也许可以让你的合约转变成一种没有得到定义的状态。从设计上来说,这些 “safe” 函数扮演着对代币接收方的一个外调用,这个调用通常是由铸造代币或转移代币的发送者控制的。换句话说,这就是不安全调用的一个典型案例。

你可能会问,就是允许一个接收方拒绝一笔自己没法处理的转账而已,能有多事呢?我们用两个简单的案例来回答这个问题。

Hashmasks

Hashmasks 是一种供给量有限的 NFT。用户在单笔交易中最多可以购买 20 个 NFT,虽然这些 NFT 口罩在几个月前就卖光了。这里我们看看买口罩的函数:

调用里面藏着一些可怕的东西。

中兴光猫怎么进入官网

代购苹果手机怎么鉴别真伪

华为手机返回键怎么没啦

莆田圆通为什么不派送物流

怎么把照片的镜子p大

测速拍照用什么原理

电脑摄像头怎么查看

免责声明:文中图片均来源于网络,如有版权问题请联系我们进行删除!

标签:代码 调用 token nft