OLA:同是资本 Aptos相比Solana有什么优势?_Inverse Ethereum Volatility Index Token

对于投资者而言,Aptos在新生代公链中具有较大的先发优势,预计在9月底主网上线,但其私募融资估值已超20亿美金,市值已达到目前Solana市值的1/5左右,可以更多关注其生态项目的发展,作为早期参与者可能会有更好的回报。

作者:0xFinley、0xDragon888原文:《Aptos是资本推动的又一个Solana吗?》

目录

前言

一、新公链新在哪里?

-Aptos有哪些技术创新?

-面向开发者:Diem的最大遗产-Move语言

-面向用户:Aptos的秘钥管理和账户恢复系统

二、Aptos是资本推动的又一个Solana吗?

-树立开发者阵营

-迁移Solana旧将

-公链叙事永不眠

三、总结

前言

7月末,新公链Aptos宣布再次完成1.5亿美元融资,由FTXVentures和JumpCrypto领投,其于今年3月份,刚完成由A16Z领投、MulticoinCapital、FTXVentures、CoinbaseVentures参与的2亿美元融资。

公链的可扩展性是加密世界永恒的话题,自2020年DefiSummer以来,Defi、Gamefi、NFT等链上活动的指数级增长,对各个公链带来了巨大的压力,开发者和用户对于公链性能的需求愈发强烈,为了应对未来大规模商业化的应用的诞生,Web3应用需要一个低交易费用的高性能底层作为发展土壤。

Solana通过塔式节点架构、异步架构以及并行消息处理等设计成为高性能单片链的代表,以太坊上的各类Rollup、专注于DA层的Celestia、ETH2.0的分片采用模块化的方式构建底层网络。

新公链Aptos则采用模块化的理念在高性能单片链方向上又走出了一条另类的扩容之路。本文我们主要对比Aptos与Solana的一些关键设计,探讨:

-Aptos是否从本质上建设了新一代的高性能公链?

-Aptos是否解决了单片链的两个核心问题?

-Aptos是资本推动的又一个Solana吗?

新公链新在哪里?

Aptos有哪些技术创新?

一、并行化

Aptos的网络设计中将交易划分为了不同的阶段,每个阶段都是独立且可以单独并行的,这实现了多指令流和多数据流,在可以显著提升网络性能的同时,使得验证节点可以在存储、运算等方面进行额外的扩展,也使得整个网络的开发更加的灵活,迭代更新可以只针对其中一个模块。

-批量处理:在交易传播过程中,交易被每个验证者分组为批次,而在共识过程中,批次被合并为区块。

-连续的交易广播:交易的传播和共识脱钩,验证节点不断的将分组后的批次发送给其他验证节点。

-交易排序和交易执行:这一步实际是通过DiemBFTV4实现共识的过程,领导验证者会提议对区块进行状态更新,将状态增量和包含已被认证区块状态发送给其他验证节点,其他验证节点决定是否投票,如果投票,则可以直接进行计算和执行,不再需要等待共识完成。Aptos通过Block-STM并行执行引擎来管理事务的执行,这是一个乐观的并发控制,其性能测试如下:

德克萨斯州沃思堡市议会已批准开采比特币:金色财经报道,德克萨斯州沃思堡市议会已批准开采比特币,并将使用德克萨斯区块链委员会捐赠的三台 ASIC Bitmain AntMiner S9 钻机。这些钻机的最大哈希率为每秒 13.5 TH/s,将在市政厅气候控制数据中心的专用网络上运行。理事会今天一致投票通过了一项决议,接受来自非营利组织的矿工,使 Forth Worth成为美国第一个开采自己的比特币的城市。市长办公室的一位发言人表示,NYDIG 将保管该市的比特币。(decrypt)[2022/4/27 5:13:55]

可以看到在10k个账户竞争的情况下,32线程情况下可以达到16w的TPS,并行执行的优势在大量账户的竞争交易空间时得到体现。

单片链历来存在两个核心问题:

1、资源定价。所有交易竞争同一个区块空间,消耗相同的资源,在交易拥挤的时候,所有人的花费会被动上涨,结果是某一类交易的大量需求影响到了全局的用户,这样就无法针对不同的应用提供独立的交易执行和结算。

2、链式交易对性能的限制,单片链中,所有交易都需要排队等待打包、计算、验证最后形成共识,之后完成验证后才开始向其他节点进行打包传递,这种串行的步骤无疑对交易性能形成了巨大的限制。

并行化机制可以很好的解决链式交易的问题,但资源定价的问题仍然存在。

二、状态同步

状态同步简单来讲就是协调所有的节点使其保持同一个状态。

为什么说状态同步对性能有着重要的影响:

1、通常我们通过TPS来衡量一个公链的交易性能,但另外一个指标TTF更加重要,因为TPS指的是链每秒处理多少交易,而对于用户而言,用户感知到的交易所花费的时间应当=交易在链上被处理的时间+被同步到对等节点和客户端的时间,我们会发现状态同步对TTF的影响是很大的,如果一个公链TPS很高,但其实现同步需要较长时间,用户感知到的仍然是整条链性能低下。

2、状态同步负责在节点之间同步信息时验证信息的正确性,状态同步做的好坏会决定全节点或客户端会不会有较大可能性接收到恶意、性的数据。

Aptos以Block-STM的方法为核心构建状态同步方案,具有乐观并发控制、多版本数据结构、协作调度、动态依赖估计等特性。由于Aptos将交易划分不同阶段的并行方案对于节点之间的状态同步有很高要求,目前的解决方案能否实现理论上的亚秒级确认还有待验证。

Solana通过POH机制实现并发控制和可靠的同步:

POH是一个高频的VDF(可验证延迟函数,即使在多线程,或者说可进行大量并行计算的机器上仍然需要规定的时间才能求解的函数)。通过POH,Solana相当于创建了一个全局的时间链,验证节点持续在区块内对哈希值连续哈希,每一段时间都生成一个证明,每一个都证明了有一些交易数据是存在于创建证明之前,同时上一个证明已经过去一段时间了。在POH机制下,领导节点通过VDF函数赋予区块链一个时间戳证明,然后将区块发送给验证节点,验证节点通过不断生成和验证VDF这个函数,就可以得到需要的时间间隔,从而验证收到的领导节点的时间戳证明是否正确。

分析 | 比特币走出上升三角走势 测试8300重要阻力位:瑞海咨询首席分析师Steven观点:比特币价格成功突破8100阻力位,并顺利测试8300压力位,目前形态上走出上升三角走势,如果价格顺利突破8300重要阻力位,则有望涨至8500附近;目前日内支撑位在8100-8150附近,如果放量跌破,则有可能形成“头肩顶“的右肩风险,投资者应该注意投资风险。[2019/6/14]

在这个过程中,领导节点会将区块以任意顺序发送给其他验证节点,区块会被分解为更小的批次。区块共识确认之前,这些新批次会以实时的形式传输给验证节点,验证节点接受新的批次之后,可以立即投票,其使用的乐观并发控制的技术,与Aptos的STM有异曲同工之妙。

相较于大多数通过将交易广播至全网后才能完成确认的公链(节点间也需要再沟通自己的precommit和prevote,之后节点集体投票代表某个区块高度的全账本,交易确认),在Solana上,交易确认只需要验证上个批次的POH哈希即可完成。POH机制下,携带有时间戳证明的交易批次已确认被排序完毕,验证节点可以对时间戳进行本地验证,那么消息就可以持续不断进行可靠的传输,实现共识和消息传递的脱钩。

三、节点架构

Solana采用的领导节点为中心的金字塔式结构,Leader节点从验证节点中竞争选出,负责收集交易,创建包含PoH的区块,更新网络状态。而Aptos采用的是星状结构,网络中有一组验证节点使用DiemBFTv4实现共识。

对于Solana而言,只有被选中的领导节点才能生产下一个区块,这大大减少了网络的冗余程度,可以大幅度提高网络的性能,但这种设计降低了整个网络的去中心化程度,当Leader节点崩溃时,容易造成整个网络会陷入瘫痪。

对于Aptos而言,没有所谓的领导节点,验证节点和全节点都需要保证一定数据备份来防止极端情况的发生,这样虽然增加了整个网络的冗余程度,但在去中心化和网络弹性方面表现会更加良好,不会因为一个验证节点的崩溃导致整个网络宕机。

节点硬件要求

Aptos的并行化的架构采用CPU进行事务处理,Solana在执行层面的并行化架构采用CPU+GPU作为运算单元,Solana对于节点的硬件要求明显高于Aptos不少。

小结

-Solana和Aptos用以提高网络性能的解决方案有着比较多的相似性,都通过解耦消息传递和共识提升处理速度,共同使用了乐观并发控制的机制,但是Solana则更多的注重在共识和消息广播并行化层面,Aptos则在并行化方面做的更加彻底,实现共识、广播、执行、存储的全部并行化,再结合Aptos优秀的状态同步解决方案,在UX和DX方面表现较为优秀。

-Solana激进的节点架构可以极大的提升网络性能,但随之而来的是网络弹性的不足,领导节点瘫痪则会引起网络大规模宕机,除此之外Solana对于节点硬件的需求也会过高,会进一步导致网络的中心化,Aptos采用的则是更加中庸的方案,在性能和去中心化之间进行了一定的平衡。

-GPU适合处理数据密集的计算任务,一般用来处理高度线程化的并行计算,也就是说用来处理大量的交易是没问题的,但是遇到业务逻辑较强的事件,其性能会大幅度下降,这就是为什么Solana在处理大量Defi交易的时候会表现出良好的性能,而在处理类似于NFTMint这种强逻辑的业务的时候性能会有所下降;CPU一般用来处理逻辑性强的事件处理和串行计算,在逻辑事务和数据密集型的事务执行上进行了平衡,这样的设计可以使得Aptos能更好的去承载强逻辑性的商业化应用。

动态 | 矿工不同意摩根大通估计比特币的“公允价值”为2400美元:据bitcoinist消息,在摩根大通的报告中称中国低成本矿业公司的平均现金成本约为每比特币2400美元之后,加密货币矿工提出了反对意见。有矿工称这项评估仅仅来自生产比特币的边际成本,矿工们认为,比特币的设计意味着平均“边际成本”的概念本身是有缺陷的。矿业硬件开发商LuTech的联合创始人本?加格农(Ben Gagnon)解释说,不可能存在“平均成本”或“盈亏平衡点”。[2019/2/21]

面向开发者:Diem的最大遗产-Move语言

特性一:FirstClassResources-第一序列资源

这对应我们现实生活中“钱/资产”这个概念,在加密世界中可以用来表达数字资产,所谓的第一序列即整个网络中我们应该首先考虑或者说关注的对象。

在Move语言中,变量的类型分为Resources和unrestricted,变量的每次读取都需要指定其用法,即进行移动还是复制,当变量被定义为Resources时,就只能被移动,而unrestricted则没有这样的限制,既可复制又可移动,我们会发现,Resources这种类型非常适合定义数字资产,unrestricted则可以用来定义地址。

总结就是Resources这种变量具有如下特性:

-不能被复制

-不能被隐式的丢弃,程序在执行一个关于Resources的函数时,函数结束之前必须转移Resources的所有权

-只能在程序中存储位置之间移动

特性二:Module与Scripts

Module和Scripts类似于以太坊的智能合约和比特币的脚本,Move的这种设计相当于是对库和执行逻辑进行了严格的划分,Module可以通过形式化验证进行安全检查,可以避免大量的智能合约漏洞问题。

Module是一个定义结构类型和对这些类型进行操作的函数的库,即Module会编码好创建、销毁和更新其声明的Resources的规则,Module存储在全局存储中,对于Resources的关键操作只能在Module中进行,且其对外是不透明的,Module也可调用其他模块声明的程序并使用其声明的类型。

Scripts则是一个可执行的入口,类似于传统编程语言中的Main函数,可以对全局存储进行更新,通常是调用已经发布函数的Module。

拿现实中的事物来对比举例就是:

Module是央行,Resources也就是”钱”这种资产必须在Module中被定义,Resources也只能由它所在的模块创建和销毁

Scripts则是使用Resources的所有主体。

下面是白皮书中关于转账的一个示例代码,可以帮助进一步理解:

publicmain(payee:address,amount:u64)

{

letcoin:0x0.Currency.Coin=0x0.Currency.withdraw_from_sender(copy(amount));

0x0.Currency.(copy(payee),move(coin));

}

从上面的Scripts代码可以看出,Currency是存在于0x0地址下的一个Module,Coin是Module中的Resources。这个Scripts的意思是:

从发送者那里取出若干金额的币;

将币存入收款人的地址。

这里需要说明的是,Scripts在获得资产后,必须指定其用途,这一点是强制的,也就是说,如果删除掉上述Scripts中存款那行代码的话,这是不合法的,Move虚拟机会拒绝执行。

特性三:静态类型

Move是一种纯静态类型的系统,这一点和Rust是一致的,可以实现类型安全,验证程序代码正确性会变成一个严格的数学证明的过程,编译器可以按照设计好的逻辑去验证。静态类型具有很强大的抽象能力和工程能力,保证安全性前提下又不损失灵活性,更加适合大型系统的构建,即需要软件的可靠性越高,静态类型的语言越好用,这对于像Aptos这样致力于构建一个可以承载全球的大规模商业化应用的公链来说是必要的。

通过以上的设计我们可以发现,Move语言的使用将使得:

1、数字资产将具有更好的安全性

静态类型保证过程和结果在编译阶段即可进行类型验证,避免部署到链上后运行时产生问题,经过类型验证后,智能合约中的很多的低级问题都可避免,同时类型验证可使用形式化验证工具,极大降低程序员检查bug耗费的精力。

Resources类型与Module的不透明性的结合方案则保证数字资产不被复制、丢弃或重复转移,以及其他Module和脚本只能通过数字资产所属的Module公开的规则对数字资产进行调用。

2、数字资产的灵活性,数字资产在Module中是可编辑的,程序员可以编写正确的业务逻辑来封装资产和执行访问控制的策略,这对于实现复杂的金融逻辑将非常友好。

3、可以真实模仿现实世界的资产,即当现实资产进入数字世界时执行创建,数字资产所有权转移时执行修改,绑定数字资产的物理资产被出售时执行销毁。

Move与Rust相比:

Firstclassresources其实借鉴了Rust语言中的Move、Copy和Clone的语义,在Rust中的Move语义是把一个变量赋值给另一个变量时会把所有权转移给受让者,可以说Move语言中对于Resources类型的设计非常彻底,就是专门针对金融合约设计的。

Move与Solidity相比:

Firstclassresources是Move语言与Solidity最大的区别,Resource类型在以太坊中只适用于ETH本身,基于以太坊发行的其他Token则不具备这种“资产特性”,而仅仅是一个数字,在交易转账时,一个地址的数字增加,另外一个的数字减少,每一个地址的余额是一个简单的Unit,对于转账以及更加复杂的资产操作行为,开发者都需要根据自身经验进行检查,很容易出现重入攻击、整数溢出、无限增发等安全漏洞。

小结:

Move语言基于Rust衍生而来,没有跳出Rust的大框架,但Move的创新性设计都使得其更适合用来去构建一个承载大量数字资产活动区块链网络,对于Solana和Polkadot的开发者而言,迁移到Aptos这样的新明星公链门槛也会更低一些,相对于Solidity而言,Move语言在安全性、灵活性和对数字资产的定义方面都有着很大优势。

面向用户:Aptos的秘钥管理和账户恢复系统

我们先看Aptos的账户创建的内部流程:

1.生成一个签名公私钥对。

2.从用户处获得选定的签名方案:单签还是多签。

3.将公钥vk与签名方案标识符关联,通过哈希函数H得出既定签名方案的验证秘钥:addr=H,addr是一个32字节也就是256位的值,也是这个账户的永久账户地址。

4.将账户序列号初始化为0,addr和序号作为初始资源存储在账户中。

5.通过验证秘钥按原样返回一个256位的账户地址。

此时,账户创建完成,用户可以使用私钥sk对交易进行签名。

Aptos做了什么?

1、Aptos提供了可轮换的的sk,可以主动更改sk,帮助降低私钥泄露、远程攻击和现有密码算法未来被破解的风险。用户可以将轮换帐户私钥的能力委托给一个或多个托管方以及其他可信实体,然后通过Move模块定义一个策略,使这些受信实体能够在特定情况下轮换密钥。例如,实体可能是由许多受信任方持有的kout-of-n多签密钥,从而可提供密钥恢复服务以防止用户密钥丢失。相比其他一些诸如云端备份、社会恢复等秘钥恢复方案,Aptos的这种密钥管理方案是链上的且更加公开透明。

2、通过账户序列号用来对交易可行性提供保护,一个序列号对于每个发送者的账户来说只能被提交一次,如果发送者发现自己账户的序列号≥交易t的序列号,那么t已经被提交,或t永远不会被提交。

3、预签名实现交易透明度,Aptos提供交易预执行服务,可在用户签名之前向用户直观的展示交易结果,这个交易预执行的服务是可以和已知的攻击和恶意智能合约结合的,可以大大降低用户受到的欺诈风险。除此之外Aptos还允许钱包在执行过程中规定对交易的限制,违反限制的交易将被终止,可以进一步避免用户受到恶意程序的攻击。

小结:

可以看到,Aptos除了通过第一节讲的技术创新提升用户的交易体验之外,在保障用户账户安全性方面同样做了诸多设计,从底层就支持了对于交易的保护,对于用户来说,交易的安全便捷性得到了大幅提高;对于应用开发者来说,减少了很多本来需要在应用层面实现的安全保护机制,基于这些底层机制,应用也可以实现更加灵活的服务。

Aptos是资本推动的又一个Solana吗?

树立开发者阵营

我所接触的开发人员,对使用Move与Rust或Solidity相比感到有点兴奋—Pantera合伙人PaulVeradittakit

从区块链开发者角度来看,智能合约是一组数字化的承诺,包括关于合约执行者履行这些承诺时达成的协议。区块链技术给我们提供了一个去中心化的、不可篡改的、高度可靠的系统,而在这个系统中智能合约有着至关重要的作用。

前文我们对Solidity和Move语言的差异进行了分析,尽管Solidity在直观性和安全性方面存在缺陷,但它的灵活性使其广泛的被社区采用;Move语言对于FT和NFT等常用场景,Move将数据定义成资源,能够从虚拟机层面保障了数据的安全,对开发者更加友好,让合约开发者可以专注于业务逻辑。目前有4条公链已经使用Move语言分别是Aptos、Sui、Starcoin、0LNetwork。更低GAS、更高TPS,更安全的编程代码环境,MOVE系语言正在重新树立开发者阵营。

迁移Solana旧将

从建设者角度,建立一个新公链需要大量资源以及时间成本,自从Bitcoin诞生以来,十多年以来,数以百计的公链被开发出来,以太坊生态的强大之处在于,沉淀了足够多的资产,通过合约与合约之间的交互,各种不同类型的DeFi产品可以像积木块一样搭在一起,从而激发以太坊生态的创新。

另一边,从2020年初到2022年中,整个链上钱包用户数量翻了一番多,有1亿多用户加入了这个生态系统,造就了过去2年区块链发展的黄金盛世,但在其背后则是以太坊拥堵的核心矛盾,各路开发者们对于提高以太坊吞吐量的探索从未停歇。

Solana最高创造了400倍收益、Polkadot100倍、Avalanche100倍、还有Avalanche、Fantom、Near、Cosmos、Starkware等生态群雄并起,再到ZKRollup和OptimisticRollup成为最受关注的Layer2双雄,公链的扩容叙事还将继续上演。

随着全新的互联网基础设施区块链的崛起,新公链将迁移原有公链的建设者,Solana生态开发者迁移至Aptos,Solana前营销主管投靠Aptos,前几年支持Solana的资本依然出现在新公链的支持者名单中。当然各大Solana基础设施项目方如Solend,Jupiter,Hubble,Crema,甚至SolanaFM据悉也出现了转投Aptos的热潮。迁移Solana旧将是一种新的人才积木,更容易激发Aptos生态的创新。

公链叙事永不眠

2009年1月3日中本聪的人创造了比特币。13年后,比特币激发了一个全新的行业和价值近1万亿美元的新资产类别,公链叙事也就此展开。

公链赛道一直都是加密领域最具挑战性同时也是承载价值最好的地方,Solana、Terra、Avalanche等公链崛起,投资机构收到丰厚的财务回报。铁打的公链,流水的应用,公链的叙事和竞争在每一个周期中也从未停止。

2014年到2015年熊市,当时整个加密货币市场的市值暴跌了75%,但是也诞生了今后的公链王者-以太坊。自2015年推出以来以太坊目前是护城河最高的公链,网络去中心化程度和安全性较高,用户量大、开发者数量多。基础设施完善,应用种类丰富,已形成网络效应,具备创新土壤,一直以来引领了区块链应用潮流:每个人都喜欢抱怨以太坊,但是没有人愿意离开他。

2019到2020年的熊市,诞生了Solana,雪崩协议等新公链,新公链凭借性能和费用优势承接了这些以太坊外溢的需求,自2020年以来新公链生态相继爆发,从BNBChain到Polygon,再到Solana,同时Avalanche、Fantom、Terra生态也有大幅增长。

2022年我们看到Aptos、Sui、Linera、Aleo等新公链在冉冉升起,加密行业将继续建设和创新,突破想象边界,熊市对于有些公链来是日活下降,对于新公链则是序章,加密周期更迭,公链叙事永不眠。

总结

无论从技术特性还是开发语言角度,Aptos似乎并没有做到像Solana之于以太坊的创新性,Aptos更像是一个性能更好、网络弹性更强的Solana,Aptos与Solana之间并不是内燃机与马车的区别。针对单片链历来存在的资源定价与链式交易问题,Aptos并未完全解决前者,而是像Solana一样,通过大幅提升可扩展性平抑交易对区块空间的竞争,其比较完美的解决了链式交易问题。

Aptos在数字资产的定义、保护以及对于用户使用体验方面做了很多精妙的设计,Aptos是在以Web2产品的思维实现一个面向数十亿互联网的用户的可以承载大规模商业化应用的高性能、高安全性公链,这是前所未有的,具体落地如何,还要拭目以待。

目前Aptos生态在快速扩张,主网还未上线,其生态项目已多达130+,新技术的出现,使得开发者们希望能成为生态的第一波参与者,一方面熊市中顶级团队和顶级资本加持的新公链叙事的确有着强大的吸引力,但另一方面开发者们也许应该警惕这种繁荣,一个在技术、资本、生态开发者等各个方面都与Solana有着较高重合度的新公链能否再度复刻乃至超越Solana的爆红历程,这是值得怀疑的,开发者应从自身产品的实际需求出发,权衡采用新公链的利弊。

对于投资者而言,Aptos在新生代公链中具有较大的先发优势,预计在9月底主网上线,但其私募融资估值已超20亿美金,市值已达到目前Solana市值的1/5左右,可以更多关注其生态项目的发展,作为早期参与者可能会有更好的回报。

参考

https://developers.libra-china.org/docs/reference/glossary/index.html#move-virtual-machine-mvm

https://github.com/aptos-labs/aptos-core/blob/main/developer-docs-site/static/papers/whitepaper.pdf

https://web3caff.com/zh/archives/25976

https://medium.com/aptoslabs/the-evolution-of-state-sync-the-path-to-100k-transactions-per-second-with-sub-second-latency-at-52e25a2c6f10

https://pontem.network/posts/which-blockchain-is-the-fastest

https://blog.priewienv.me/post/verifiable-delay-function-1/

https://docs.solana.com/cluster/synchronization

https://medium.com/aptoslabs/the-aptos-vision-1028ac56676e

https://yaozhiguo2016.github.io/2018/11/22/cpu-and-gpu/

https://aptos.dev/nodes/ait/node-requirements

https://mirror.xyz/0xcherry778.eth/HOsL3XptIsmCMmLoBiWBCA945kg2TIjf6E9wQo6jGqc

https://research.thetie.io/aptos-network-deep-dive/

https://medium.com/aptoslabs/block-stm-how-we-execute-over-160k-transactions-per-second-on-the-aptos-blockchain-3b003657e4ba

https://mp.weixin.qq.com/s/07MlRKpL6IqACRRI26KHzg

https://move-language.github.io/move/structs-and-resources.html

https://www.youtube.com/watch?v=rywOYfGu4EA&ab_channel=Solana

https://medium.com/solana-labs/proof-of-history-a-clock-for-blockchain-cf47a61a9274

来源:金色财经

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

区块博客

世界币AIN:9.3ETH午间分析:_treasurechaintst

以太坊午间分析 昨日白盘以太坊在没有公布非农数据之前,行情一直处于一个震荡走势,整体没有太大的一波波动,晚间以太坊在非农数据公布之后,行情一路反弹,但是以太坊在反弹到1650附近之后.

[0:15ms0-3:798ms