您的位置: > 比特币行情> 正文

打印本文             

原文作者:Fairyproof

前两天,Solana区块链上出现了安全预警,有⼀篇⽂章指出⼀个名为

https://officialsolanarares.net/mint/钓⻥⽹站在⽤户批准之后,可以将⽤户的原⽣代币转⾛。在该⽂章中提到了⼀点:

恶意合约在⽤户批准(Approve)后,可以转⾛⽤户的原⽣资产(这⾥是SOL),这点在以太坊上是不可能的,以太坊的授权钓⻥钓不⾛以太坊的原⽣资产(ETH),但可以钓⾛其上的Token。于是这⾥就存在“常识违背”现象,导致⽤户容易掉以轻⼼。

其实该⽂章这⾥的说法是不甚准确的,混淆了批准交易和Solidity中ERC-20代币授权这两个不同的概念。

真实情况是通过Solana的签名扩散机制,恶意合约直接盗取了⽤户的SOL资产,和通常意义上的授权并没有什么关联。

1. 以太坊中的授权

在以太坊中,通常意义上授权是指⽤户调⽤代币合约,向其它地址(合约)授权⼀定处理额度,这样我们在和其它合约交易时,可以⽅便的⽀付ERC-20代币。

在这⾥,授权是必须的,否则第三⽅合约⽆权处理⽤户的代币资产。同时,这种机制也伴⽣了⼤量的授权攻击,只要你授权了恶意合约,恶意合约就可以转⾛你的ERC-20代币。

2. Solana中的授权

在Solana中,代币⼀般为官⽅提供的spl-token合约,它模拟了ERC-20代币的⾏为,因此也存在类似的ERC-20授权概念。同样授权第三⽅合约后第三⽅合约可以处理⽤户的代币(注意不是原⽣币SOL)。这点同以太坊是⼀致的,并没有什么反常识。

3. Approve的涵义

不管在以太坊中还是在Solana中,我们习惯将Approve当作授权(ERC-20协议⾥有approve函数),因此⾃然⽽然的会认为是代币授权。当我们使⽤MetaMask钱包时,如果是代币授权交易会明确提示授权,并且所有交易弹出的是⼀个确认按钮。然⽽在Solana的Phantom钱包⾥,弹出的是⼀个Approve(批准)按钮,让⼈很容易以为是授

权交易。但真实情况是批准⼀次交易⽽并不是进⾏代币授权。所以安全预警中出现的被盗⾏为,是⽤户批准了⼀个未知交易,⽽不是⽤户进⾏了SOL的授权操作,当然也就不能说是授权偷⾛了原⽣币。

4.交易直接转⾛原⽣货币

交易转⾛批准者的原⽣货币,例如SOL和ETH,是⾮常简单的。在以太坊上的Solidity中,只要调⽤⼀个payabletransfe的函数就可以转⾛交易⽤户的ETH;在Solana中,相应的,只要调⽤系统合约的户的SOL资产,这和我们平常讲的代币授权概念是没有任何关系的。

函数也能转移⾛交易⽤不同的是,在Solidity中,ETH转移发⽣在合约调⽤的时候,因此钱包可以提前知道要转移的ETH数量并显示出来,⽽在Solana中,转移是发⽣在合约内部的,因此钱包⽆法提前知晓你会被转⾛多少SOL,当然也会⽆法显示。只要你签名认同了这笔恶意交易,你就相当于签名认同了这次SOL转移,这正是这次Solana上钓⻥盗取的问题所在。

⼀段类似如下的代码就可以在合约内部转移user的SOL。

Solana授权钓⻥事件解析:授权转移还是直接偷⾛?  

5. Solana中的签名扩散机制

在Solana中,有⼀个签名扩散机制。⽤户调⽤合约A,此时合约A中⽤户是签名批准的。当合约A内部调⽤合约B时,⽤户的签名会随着跨合约调⽤⼀起扩散到合约B。因此,在合约B中,⽤户也是签名批准的。所以这⾥存在⼀个安全⻛险,当签名⼀个恶意合约时,恶意合约就获取了我们这个签名,然⽽它可以拿我们这个签名做任何事情!!!!!!!

在上述的偷盗事件中,⽤户同恶意合约3VtjHnDuDD1QreJiYNziDsdkeALMT6b2F9j3AXdL4q8v进⾏交易,该合约直接调⽤系统合约转移⽤户的SOL,因为签名随着调⽤⼀起扩散到了系统合约,因此系统合约认为该笔交易也是批准过的,是正常的,所以就转⾛了⽤户的资产。

6. 具体被盗交易

其中⼀笔被盗交易:

https://explorer.solana.com/tx/4j33JSGRS6rD5irzW1cA9wjQAvAgVDAnBTrGRjqtqBBWXspTzU5HpEFwTeCC2uD9hH9eA2Pw5ddHyd5JyG6h6cNq

我们可以看到该交易涉及的输⼊账号:

Solana授权钓⻥事件解析:授权转移还是直接偷⾛?

这其中:

⽤户账号:4XF4wyjein7ZN4RPM6YK2mC2mC6T41cZAoKjJqpP19fR

SOL转移账号:BepccLHDcXqqHi6MfpTDo9Sfc5tmRjmSC1XY48Tb8HuY

恶意合约地址:3VtjHnDuDD1QreJiYNziDsdkeALMT6b2F9j3AXdL4q8v

从上可以看出,⽤户账号调⽤合约后转移了1.2545 SOL到转移账号。同时我们可以看到并没有涉及到spl-token代币合约,出产没有通常意义上的授权这么回事。

其交易打印出的⽇志为:

从⽇志中也可以判断,恶意合约仅是简单的调⽤了系统合约转⾛了⽤户的SOL,因此⽤户签名批准了对恶意合约的交易,这个签名也扩散到了系统合约,因此判定有效。

7. 结论

在Solana中,不要轻易确认或者批准任何来历不明的交易,因为它可以拿你的签名代表你做任何事情。


 Art Blocks:生成艺术的自动售货机

撰文:程天一

来源:海外独角兽

代码和软件已经占据了我们的生活,但是使用代码创作出的生成艺术在过去很多年中始终被低估。2021 年夏天开始的 NFT 和 Art Blocks 热潮改变了这一点。

Art Blocks 由 Erick Calderon 等人于 2020 年创立,是一个生成艺术的自动售货机,用交易时随机产生的哈希值生成最终作品,颠覆式地改变了生成艺术创作者和收藏者之间的关系

Art Blocks 发行的Chromie SquiggleRingersFidenza都在 NFT 世界引发了生成艺术的投资潮。它们完美体现了生成艺术的“可控随机性”,艺术家需要多次调整脚本,保证上千位用户铸造时随机得到的作品都独一无二且具有美感。Art Blocks 在 2021 年累计交易额超过 10 亿美元,通过版税获得了超过 2500 万美元的收入。在 2021 年 8 月,它完成了一轮 600 万美元的融资。TRUE Ventures 领投,Galaxy Digital 旗下的 VC Galaxy Interactive 和 Collab Currency 等机构参与投资。

随着市场注意力转移,Art Blocks 和生成艺术 NFT 停止了暴涨,每月交易额也从 21 年 8 月的 5.87 亿美元峰值回落,在 10 月后持续低于 1 亿美元。但是 Art Blocks 已经是公认的蓝筹 NFT,成为了 NFT 指数基金不可缺少的 Portfolio。Erick Calderon 也并不慌张,公司的现金流足够支撑多年,他正在加快招聘工程师和塑造公司文化

围绕着生成艺术还有其他有趣的话题:投机者开始退潮,持有 Art Blocks 的更多是收藏者,他们的 NFT 展示需求还远未被满足;此外直接使用 AI 创造的生成对抗网络则有着在元宇宙中发挥作用的想象力。

01.生成艺术简史

对生成艺术最简单的定义是“使用随机性和计划性相结合的代码创作出的艺术”。在创作过程中,艺术家的“人脑”去找到审美趣味和灵感,“电脑”则规模化地将灵感变成可视的艺术。

比如下面这段代码,它出自 Art Blocks 首席创意官 Jeff Davis 之手:

在被执行后,它可以生成这些和色彩有关的艺术品,而且理论上可以产出无限幅:

Jeff Davis 2021 年的作品Color Studies

这类艺术重要的审美趣味来源于其独特的“可控随机性” ——艺术家往往无法预料代码生成的结果,同一段代码两次运行可能得到非常不同的作品,但他们可以通过控制随机性的“大小和位置”为自己保有一定的控制权。

150 亿美元手工艺电商 Etsy 的联合创始人 Jared Tarbell 的另一重身份是生成艺术家,他这样描述“可控随机性”这一概念:

如果是正常编写的程序,它每次都以相同方式运行。但是生成艺术家定义了一个不同的系统,让结果能够随机化。作为创作者,你会为自己程序(产出的作品)感到惊讶。

在理念上,生成艺术跟整个 20 世纪的艺术潮流是一脉相承的。“抽象艺术之父”康定斯基强调几何图形和抽象元素的美,生成艺术作品在视觉上追求的很大程度上正是这种美。

康定斯基 1923 年的作品《圆圈中的圆圈》

在 1960 年代,生成艺术创作已经开始涌现。这既是机械社会向信息社会转变下的自然演进,也是因为使用计算机进行创作的确有其先进性 —— 计算机能有效处理创作中复杂度和规模的增加。

策展人、艺术评论家 Jason Bailey 在《为什么热爱生成艺术》中介绍了下面这幅作品。随着行数增多,作品内方格的旋转角度和位置随机性增大。使用纸、笔创作时,艺术家需要 1 个小时画出这幅画。如果想将这些方格的数量增多 10 倍,又需要额外的 10 小时。但是对于生成艺术家而言,他们只需微调下代码,计算机就可以迅速生成结果。

Art Blocks:生成艺术的自动售货机

撰文:程天一来源:海外独角兽代码和软件已经占据了我们的生活,...

关于我们

币安下载官方app|币安iOS版|币安安卓版|币安电脑网页版

  • 用户支持
  • 帮助中心
  • 服务条款
微信二维码
币安官网渠道 数字区块链交易平台 Powered by binance
QR code