jolestar Profile picture
Oct 20 14 tweets 2 min read
最近关于用户和 Move 智能合约交互,不需要授权(Approve) 是更安全还是更不安全的争论很多,这里尝试用通俗的方式来解释一下二者背后的区别以及 Move 这样设计背后的思想。#MoveLang (1/n)
我们先理解一下用户和智能合约交互的方式。当我们签了一个交易,去调用一个链上的智能合约,就好比从物理世界进入了一个智能合约的数字世界,我们在这个数字世界有一个分身,而这个分身做什么,是智能合约定义的。(2/n)
在 EVM 中,每个合约都相当于一个独立的小世界,分身进入这个世界后,只能操作用户在当前合约世界中的状态(资产)。(3/n)
比如进入 swap 世界,想用自己的 usdt 交换其他资产,而 usdt 存在定义 usdt 的那个合约世界,没办法直接在 swap 中以自己的身份从 usdt 合约里提取资产。于是用户只能先去 usdt 的合约世界执行 approve,告诉 usdt 的合约,swap 可以代自己提取自己的资产,然后再进入 swap 世界进行操作。(4/n)
操作完成之后,再去 usdt 那边取消授权(revoke)。但这里的 approve 和 revoke 操作都需要独立的交易,用户往往为了节省 gas 费用,不进行 revoke,结果如果 swap 合约出安全问题,用户的资产就可能在不知情的情况下被盗取。(5/n)
而在 Move 中,所有的合约都在一个大的数字世界运行。用户的数字分身可以自由的在合约间移动,执行任何操作,同时用户的状态(资产)存在用户自己的存储空间。(6/n)
用户从 swap 入口进入,从自己的余额提取 usdt,交换,存储可以在同一个交易里原子化完成。这种模式给合约带来更自由的组合模式,可以玩出很多 EVM 上很难实现的组合玩法,这也是 EVM 上的账户抽象方案想实现的模式。当然,这也带来了新的安全挑战。
(7/n)
那 EVM 中能否直接增加一个特性,让合约间的调用可以把用户身份直接带过去?这个技术上是可以实现的,但 EVM 中支持动态调用,可以调用任意地址的合约,让这种操作的风险变的很难度量,同时 EVM 的状态变更对用户和钱包都不友好,钱包很难通过状态变化对用户进行提示。(8/n)
而 Move 中解决这个安全挑战有两个方法:

1. 在预执行合约的时候把合约执行后的状态变更提示给用户,让用户可以知道这个交易操作了自己的哪些重要资产,以及执行后的结果。这个方法 StarMask 中已经实现,参看链接以及附图 starcoin.medium.com/starmask-v4-6-… (9/n) Image
2. 可能有部分合约可以通过设置条件,让一部分用户预执行的时候无法发现状态变更。@0xmetazen 的分析 但 Move 中没有动态调用,合约在部署时,它的执行逻辑就是确定的。可以通过静态分析字节码,得到合约所有可能路径上操作的状态,在区块浏览器或钱包里提示给用户。(10/n)
EVM 和 Move 的两种方案,带来的安全风险是不一样的。Approve 方案的安全风险是把一个即时的授权变为长期授权,它的风险不是立刻发生的,比如合约漏洞未被发现或者恶意合约放长线钓大鱼。而一旦发生,用户往往很被动,很多用户可能都忘记授权过哪些合约了。(11/n)
而 Move 的方案给了合约更大的自由权,遇到恶意合约会有较大风险,但这种风险是即刻发生的,是可以通过技术手段来检测的。最坏的情况,至少前面冲的快到人趟坑了,可以给后面的人警示,恶意合约会快速暴露出来😅。(12/n)
最后,世上没有银弹,不可能靠用了某种技术就解决了所有安全问题,需要链,工具,用户一起努力。

对 Move 用户的安全建议:

1. 选用状态变更提示更完备的钱包,并尝试理解钱包的提示。
2. 不要随意和来源未知或未开源的 DApp 交互。
3. 如果做不到上面两点,可以等别人先趟一下坑😅。

(13/n)
Move 在安全方面的挑战以及改进方案不仅仅是这些,我会在《为什么是 Move》系列的安全篇里详述,想了解的朋友可以关注一下。(end)

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with jolestar

jolestar Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @jolestar

Aug 10
美国对 #Tornado 制裁导致 USDC 封禁钱包地址,被封的钱包地址中的 USDC 就没法用了。很多人不理解,链不是去中心化的么,咋还能封禁。写个 Thread 聊下 Token 协议的扩展性问题以及,#Solidity Token 和 #Move Token 的区别。👇
这个实际上是 Solidity 的 Token 协议(ERC20)留的扩展性接口导致的。ERC20 的转账方法(transfer)是要 Token 合约自己实现,所以实现方可以在转账方法中做一些自定义的限制逻辑,比如 USDC 用来封禁地址,还比如一些貔貅 Token,实现只准买不准卖的逻辑。👇
当初设计 Move 上的 Token 标准时也遇到了这个难题。在 Move 中,Token 是一种“自由状态”,一旦铸造出来,Token 合约对 Token 就失去了控制。用户的 Token 默认存在用户的账户余额容器中,但用户也可以把它像现金一样从账户余额容器中提取(withdraw)出来,这时候 Token 也就不受账户合约的控制了👇
Read 7 tweets
Jul 22
@Wuhuoqiu 讨论区块链交易的并行执行,这也是 Aptos 和 Sui 两个新 Move 链主打对特色之一。

我所了解的最早实现区块链交易的并行执行的是 @dcaoyuan 在 Khipu 中实现的,大于是在 2018年。Khipu 是用 Scala 实现的一个 Ethereum 节点。

写个 Thread 探讨下并行执行以及公链扩容。👇
很多人的理解的区块链只能按顺序逐个执行交易,每个交易都要修改状态树,后一个交易只能依赖前一个交易的状态执行,那怎么实现交易的并行执行呢?其实大多数区块链的状态树的根只在区块头中记录一次,也就是说,区块内的交易执行顺序变化,并不会影响最终的结果,除非多个交易之间有依赖或者冲突。👇
那怎么知道交易有没有冲突呢?

可以先假设它们互相不冲突,然后一起执行,执行后再根据执行结果计算交易之间有没有冲突。把没有冲突的结果直接写到存储,有冲突的再按顺序重新执行。👇
Read 11 tweets
May 22
这两天讨论的“简体中文已死”的话题,其实也提供了一种语言是一个去中心化系统的观察案例。

有朋友认为语言的主要传播渠道以及词语的定义都被官方垄断,不能算一个去中心化系统。但最近批判的一些语言现象,无论是字母缩写,低幼化,还是“润”这种无厘头的创造,其实都证明了它是一个去中心化系统。👇
要接受一个系统是去中心化的,那就得接受它会演化出你不喜欢的东西,也得接受它的演化过程中的各种失败的尝试。语言作为一个符号系统,符号本身并没有意义,意义是使用者和受众附加上去的。👇
所谓的浅薄,实际上是这个词在受众大脑里所触动的意义和感受比较浅,但每个人又是不同的,你怎么知道某个词在别人脑海里所触动的意义的深浅?这个追究到最后就会陷入庄子那个子非鱼安知鱼之乐的困境中去。👇
Read 10 tweets
Feb 27
世界和平是个过于美好的词汇,美好到可能掩盖了需要达到和平所要付出的成本。换一个词描述,世界局势的阶段性均衡,可能更准确一些,就像多个人一起踩跷跷板,刚好稳住了。👇
局势要维持均衡就有个要求,大家互相承认这个局面,并且保持各自的位置不动。绝对的反战派可以叫做不动派(叫反动派也行,只是这个词中文语境有贬义),觉得大家都别动就好。
但如果有人被压住了,它可以动吗?如果有人动了,其他人想制止他动,然后动了呢?后面动的人能否有正义性?那如果一个人认为另外一个人想动,提前动了下,做了准备制止他动的行为,是否具有正义性?
Read 10 tweets
Dec 26, 2021
作为一个 DAO 的鼓吹者,在各种场合下和别人争论过 DAO,但没有系统说过对 DAO 的看法,今天抽空说下。👇
讨论DAO 之前,我们先讨论下应该如何理解一个快速演进的概念。首先不应该用字面的方式去理解,比如 D 代表什么,O 代表什么,快速演进的概念的外延很快会超过最初的原始字面含义。其次不应该用自己对 DAO 一种解释去批评它,那样很容易陷入稻草人攻击,自己立个靶子然后自己攻击。👇
我们应该用一种开放的态度去理解,先理解它要解决什么问题,再思考还有那些可能的演化。

那为什么需要 DAO 呢?它要解决什么问题?要理解为什么需要 DAO,我们不妨先理解一下为什么需要公司。 为什么不是老板雇佣一些小弟干活就行,而要成立一个公司,公司额外提供了什么?👇
Read 15 tweets
Dec 18, 2021
微博上和梨叔关于 web3 的一些讨论,转发过来.

在我设想的模式里, 应用的数据是存在一个类似 git 的本地仓库里, 挂在 p2p 网络上实时同步. 比如 @响马 写了篇博客存在了本地仓库, 在网上给订阅者广播 root hash 更新提醒, 我的设备监听到了, 自动就同步了过来, 我打开一个本地应用就看到我订阅的博客了 Image
这个方案有几个好处:

1. 保证了用户对数据的终极所有权, 自己的设备,其他任何人也不能删除.
2. 任何一个中间节点都可以缓存数据, 加速同步, 提高体验, 比如家庭路由器, 比如买个云主机自动备份数据). 但中间节点不能篡改, git 的校验机制.
这套体系里, 中心化的博客系统也能发挥作用, 比如做搜索,聚合,推荐, 但这些服务只有读权限, 和副本删除权限, 原始内容永远在用户的设备里.

这套系统的基础设施已经具备了, 公钥分发通过链和DID, 服务发现用去中心化的 name service, 支付用 crypto, 会员卡用 NFT, 付费订阅也可以, 商业模式也有了.
Read 4 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us on Twitter!

:(