探索Sui的面向对象模型和Move编程语言
Sui区块链作为一种新兴的一层协议(L1),采用先进技术来解决常见的一层协议权衡问题。Cointelegraph Research详细剖析了这一区块链新秀。
Sui使用Move编程语言,该语言专注于资产表示和访问控制。本文探讨了Sui的对象中心数据存储模型、其对交易处理的影响以及相较于传统账户模型的潜在优势。
Sui的面向对象范式
Sui在很大程度上受到了Diem区块链的启发,特别是在智能合约使用Move编程语言方面。Move的设计目标是为资产管理和访问控制执行量身定制一个类型系统。Sui Move在此基础上构建了一个对象中心数据存储模型,使用对象而非账户作为原语。
不同于传统的账户模型(交易更改余额)或UTXO模型(交易具有简单的输入和输出),Sui的对象模型将资产(以及智能合约)视为复杂对象。Sui中的交易以对象作为输入,并将这些输入对象转变为输出对象。每个对象记录了生成它的上一个交易的哈希值。这种方法在概念上类似于UTXO模型,但更为通用和强大。以下可以看到这些模型的比较。

Move语言对线性逻辑的使用与面向对象模型相关,有助于开发安全的软件。线性逻辑,有时也被称为资源逻辑,确保表示数字资产的资源不能被复制或意外销毁。当涉及资产的交易被执行时,Sui Move的语义确保资产的状态以反映交易结果的方式更新,消耗其先前状态中的资产,并在其新状态中生成它。
Sui中的对象还可以定义访问控制和权限,这增强了交易后对资产使用的安全性和控制。这减少了基于账户链中常见的漏洞,如重入攻击。在重入攻击中,一个函数在更新自身状态之前对另一个合约进行外部调用,使得攻击者可以重复执行本应只发生一次的操作。
这可能导致合约状态的未经授权更改,例如提取超过应允许的资金。由于在Sui中所有权的转移是明确和原子性的,这种错误不会发生。Move的线性类型系统确保一旦资源被移动,就不能被重复使用,除非明确重新分配。
另一方面,传统的基于账户的模型(如Solidity所使用的)要求开发人员实施额外的检查来防止此类错误。例如,重入攻击需要通过遵循检查-效果-交互模式来避免。所有改变状态的操作(效果)必须在所有检查之后但在任何交互(外部调用)之前进行。这种模式,通常被称为乐观计算,确保状态变量在执行任何外部交互之前更新。
虽然对象中心模型本身并没有固有地增强安全性,但它可以简化开发过程,使编写安全代码变得更容易。尽管以太坊上的智能合约可以通过形式化验证来实现高水平的安全性,但这一过程可能复杂且成本高昂。
Solidity因其众所周知地非直观语义,使得开发人员难以推理代码行为,这增加了引入细微错误和安全漏洞的可能性。
Sui Move属于一个尝试通过在语言语义中从一开始就嵌入合理的金融原语来简化安全智能合约开发的语言家族。另一个例子是Algorand区块链的交易执行批准语言(TEAL),它使用无状态执行模型来确保交易的原子性和安全性。
Sui的对象中心模型在管理复杂资产(如非同质化代币,NFT)方面特别有优势。在以太坊中,NFT绑定到智能合约地址,交互通常需要复杂的合约调用和状态更新,导致更高的成本和潜在的安全风险。例如,在以太坊中转移NFT涉及调用ERC-721智能合约的一个函数,该函数更新状态并发出事件。
这个过程涉及多个步骤和每个操作的gas费用。相比之下,Sui的对象模型允许每个NFT被视为具有内在属性和权限的独特对象。NFT的行为与Move语言的原语紧密对齐,而在以太坊中,这种行为需要实现,这增加了开销和错误的可能性。

面向对象和区块链性能
面向对象模型使Sui区块链上的分片和并行化更容易。结合最近对Sui共识机制的更新,Sui因此实现了大约390毫秒的确认时间。
这可能允许每秒超过100,000笔交易的吞吐量。以下是Sui与其他主要第一层区块链的比较。

基于账户的链上数据库分片与Sui
区块链最紧迫的担忧之一是可扩展性、安全性和去中心化之间的权衡。分片被认为是解决这一问题的方法,它有助于区块链数据库的分区。
在基于账户的架构中,分片涉及按账户地址分区状态。每个分片管理一系列不同的地址,交易由持有相关账户数据的分片处理。
然而,这面临许多问题。例如,Polkadot要求每个账户的余额和状态在分片(平行链)之间更新和同步。维护多个分片之间的一致性具有挑战性,因为每个分片必须定期与全局状态同步,这会引入延迟和复杂性。
涉及不同分片上账户的交易需要跨分片消息传递和协调,这增加了计算开销并延迟了交易确认。在过去,这导致了某些区块链的停机,如Zilliqa所遇到的情况。
Sui的面向对象模型通过将每个对象视为独立的状态单元,避免了许多这些问题。对象可以独立处理和管理,而无需全局状态同步,多个交易可以在不需要跨分片同步的情况下并行处理。这减少了复杂的跨分片通信的需求,并允许更简单高效的并行处理。

Sui上的并行交易处理
并行化指的是同时执行多个操作,并通过利用并发执行线程来提高处理速度。
有两种主要的并行化方法:状态访问方法(或确定性执行)和乐观执行。在Sui和Solana中使用的状态访问方法中,交易声明它们将访问的状态部分,使系统能够识别可以同时执行的独立交易。这种方法确保了可预测的结果,避免了重新执行交易的需要,支持动态的gas费用市场来管理拥堵的状态热点。
另一方面,乐观执行(如Monad和Aptos网络所使用的)初始假设所有交易都是独立的,随后重新执行冲突的交易。尽管对开发人员来说更简单,但它可能导致计算效率低下。
Sui通过其面向对象的模型实现了状态访问并行化。对一个对象的操作不会影响或延迟对另一个对象的操作,自然地允许它们同时处理。同样的结构特性简化了交易数据库的分区,从而也简化了单节点上的并行处理。

结论
总之,Sui区块链的面向对象模型结合Move编程语言,解决了传统一层区块链的若干关键限制。并行处理交易的能力显著提高了可扩展性并减少了延迟。
使用线性逻辑和基于能力的安全性确保了稳健的资源管理和访问控制,潜在地降低了错误和安全漏洞的风险。此外,Sui对复杂资产(如NFT)的管理方法简化了交互并提高了效率,相比传统的基于账户的模型更为优越。这些特点使Sui成为区块链技术中的一个显著进步。
在我们的下一篇文章中,我们将探讨Sui区块链的共识机制,研究其演变及其提供的优势。Sui采用了一种旨在与其面向对象模型配合的共识协议。
我们将分析Sui共识机制的具体细节,包括其容错和吞吐量优化方法,以了解这些元素如何贡献于其基础设施。
此外,我们将把Sui的共识方法与其他主要区块链(如Ethereum、Polkadot和Solana)的共识方法进行比较,以确定其独特功能以及可能的优势和挑战。
关于Sui Network
Sui是基于第一原理重新设计和构建而成的L1公有链,旨在为创作者和开发者提供能够承载Web3中下一个十亿用户的开发平台。Sui上的应用基于Move智能合约语言,并具有水平可扩展性,让开发者能够快速且低成本支持广泛的应用开发。获取更多信息:https://linktr.ee/sui_apac
官网|英文Twitter|中文Twitter|Discord|英文电报群|中文电报群
相关文章:
探索Sui的面向对象模型和Move编程语言
Sui区块链作为一种新兴的一层协议(L1),采用先进技术来解决常见的一层协议权衡问题。Cointelegraph Research详细剖析了这一区块链新秀。 Sui使用Move编程语言,该语言专注于资产表示和访问控制。本文探讨了Sui的对象中心数据存储模…...
【vue动态组件】VUE使用component :is 实现在多个组件间来回切换
VUE使用component :is 实现在多个组件间来回切换 component :is 动态父子组件传值 相关代码实现: <component:is"vuecomponent"></component>import componentA from xxx; import componentB from xxx; import componentC from xxx;switch(…...
springboot dynamic配置多数据源
pom.xml引入jar包 <dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId><version>3.5.2</version> </dependency> application配置文件配置如下 需要主要必须配置…...
线性代数知识点搜刮
求你别考太细... 目录 异乘变零定理 行列式转置 值不变 重要关系 中间相等,取两头 特征值公式 向量正交 点积为0 拉普拉斯定理 矩阵的秩 特征值和特征向量 |A|特征值的乘积 & tr(A)特征值的和 要记要背 增广矩阵 异乘变零定理 某行(…...
景区智能厕所系统,打造智能化,人性化公共空间
在智慧旅游的大潮中,景区智能厕所系统正逐渐成为提升公共空间智能化、人性化水平的关键载体。作为智慧城市建设的重要组成部分,智能厕所系统不仅解决了传统公厕存在的诸多问题,更通过科技的力量,为游客创造了更加舒适、便捷的如厕…...
Windows中Git的使用(2024最新版)
Windows中Git的使用 获取ssh keys本地绑定邮箱初始化本地仓库添加到本地缓存区提交到本地缓存区切换本地分支为main关联远程分支推送到GitHub查看推送日志 Git 2020年发布了新的默认分支名称"main",取代了"master"作为主分支的名称。操作有了些…...
【pytorch12】什么是梯度
说明 导数偏微分梯度 梯度:是一个向量,向量的每一个轴是每一个方向上的偏微分 梯度是有方向也有大小,梯度的方向代表函数在当前点的一个增长的方向,然后这个向量的长度代表了这个点增长的速率 蓝色代表比较小的值,红色…...
南京,协同开展“人工智能+”行动
南京,作为江苏省的省会城市,一直以来都是科技创新和产业发展的高地。近日,南京市政府正式印发了《南京市进一步促进人工智能创新发展行动计划(2024—2026 年)》和《南京市促进人工智能创新发展若干政策措施》的“11”文…...
Selenium IDE 的使用指南
Selenium IDE 的使用指南 在自动化测试的领域中,Selenium 是一个广为人知且强大的工具集。而 Selenium IDE 作为其中的一个组件,为测试人员提供了一种便捷且直观的方式来创建和执行自动化测试脚本。 一、Selenium IDE 简介 Selenium IDE 是一个用于录…...
vue配置sql规则
vue配置sql规则 实现效果组件完整代码父组件 前端页面实现动态配置sql条件,将JSON结构给到后端,后端进行sql组装。 这里涉及的分组后端在组装时用括号将这块规则括起来就行,分组的sql连接符(并且/或者)取组里的第一个。…...
面试官:Redis执行lua脚本能保证原子性吗?
核心问题 Redis执行lua脚本是否能确保原子性? 面试经历 面试者在面试中自信回答Redis执行lua脚本能保证原子性,但未能深入解释原因。 原子性概念 原子性:一个事务的所有命令要么全部执行成功,要么全部执行失败。 Redis官方说…...
基于Chrome扩展的浏览器可信事件与网页离线PDF导出
基于Chrome扩展的浏览器可信事件与网页离线PDF导出 Chrome扩展是一种可以在浏览器中添加新功能和修改浏览器行为的软件程序,我们可以基于Manifest规范的API实现对于浏览器和Web页面在一定程度上的修改,例如广告拦截、代理控制等。Chrome DevTools Proto…...
马拉松报名小程序的设计
管理员账户功能包括:系统首页,个人中心,用户管理,赛事信息管理,赛事报名管理,活动商城管理,留言板管理,系统管理 微信端账号功能包括:系统首页,赛事信息&…...
python使用pywebview集成vue3和element-plus开发桌面系统框架
随着web技术越来越成熟,就连QQ的windows客户端都用web技术来开发,所以在未来,web技术来开发windows桌面软件也会越来越多,所以在此发展驱动之下,将最近流程的python与web技术相结合,使用vue3和element-plus…...
C++线程的使用
C11之前,C语言没有对并发编程提供语言级别的支持,这使得我们在编写可移植的并发程序时,存在诸多的不便。现在C11中增加了线程以及线程相关的类,很方便地支持了并发编程,使得编写的多线程程序的可移植性得到了很大的提高…...
算法库应用--寻找最长麦穗
学习贺利坚老师算法库 数据结构例程——串的顺序存储应用_使用顺序串存储身份证号-CSDN博客 本人详细解析博客 串的顺序存储的应用实例二_串的顺序存储应用-CSDN博客 版本更新日志 V1.0: 在原有的基础上, 进行优化名字, 并且有了相应的算法库作为支撑, 我使用了for循环来代替老…...
ython 使用 cx_Freeze 打包,不想要打包文件中能直接看到依赖的代码,如何处理
背景:因为使用 cx_Freeze 打包时,添加需要依赖的文件 cx_Freeze 是一个用于将 Python 程序打包成独立可执行文件的工具,支持多个平台。当你需要打包包含多个 .py 文件的项目时,你可以通过编写一个 setup.py 文件来指定哪些模块应…...
某DingTalk企典 - Token
⚠️前言⚠️ 本文仅用于学术交流。 学习探讨逆向知识,欢迎私信共享学习心得。 如有侵权,联系博主删除。 请勿商用,否则后果自负。 网址 aHR0cHM6Ly9kaW5ndGFsay5jb20vcWlkaWFuLw 浅聊一下 没毛病,就这字段,有效期…...
手写一个类似@RequestParam的注解(用来接收请求体的参数)
一、本文解决的痛点 按照大众认为的开发规范,一般post类型的请求参数应该传在请求body里面。但是我们有些post接口只需要传入一个字段,我们接受这种参数就得像下面这样单独创建一个类,类中再添加要传入的基本类型字段,配合Reques…...
【遇坑笔记】Node.js 开发环境与配置 Visual Studio Code
【遇坑笔记】Node.js 开发环境与配置 Visual Studio Code 前言node.js开发环境配置解决pnpm 不是内部或外部命令的问题(pnpm安装教程)解决 pnpm : 无法加载文件 C:\Program Files\nodejs\pnpm.ps1,因为在此系统上禁止运行脚本。 vscode 插件开…...
量子机器学习可解释性:从经典XAI到XQML的挑战与创新方法
1. 项目概述:当量子机器学习遇上“黑盒”挑战作为一名长期关注前沿技术交叉领域的从业者,我最近花了大量时间研究一个既烧脑又极具潜力的方向:如何让量子机器学习(QML)模型变得“透明”。我们都知道,经典深…...
[智能体-26]:ollama, 让模型的部署和提供服务(远程或本地)变得异常简单
极简一键部署,自动封装OpenAI 标准 API,本地 / 远程服务秒启用,无需复杂环境编译、配置端口、适配接口。核心亮点安装零门槛跨 Windows/Mac/Linux,一键安装包,无需 CUDA、Python 环境预处理。模型一键拉取运行bash运行…...
B物理反常的全局拟合:有效场论与机器学习解析新物理信号
1. 项目概述:当B介子衰变“不听话”时,我们如何用数学语言寻找新物理?在粒子物理的精密前沿,标准模型(Standard Model, SM)一直是我们理解微观世界最成功的理论框架。然而,物理学家们从未停止过…...
小电视空降助手:终极B站广告跳过插件完整指南
小电视空降助手:终极B站广告跳过插件完整指南 【免费下载链接】BilibiliSponsorBlock 一款跳过小电视视频中恰饭片段的浏览器插件,移植自 SponsorBlock。A browser extension to skip sponsored segments in videos, ported from the SponsorBlock 项目…...
别再让WSL2吃光你的C盘!手把手教你迁移到D盘并优化内存配置(Windows10/11通用)
WSL2系统迁移与性能调优全指南:释放C盘空间与提升运行效率 每次打开资源管理器看到C盘剩余空间不足10%的红色警告,作为开发者的你是否感到一阵窒息?WSL2虽然为Windows带来了原生的Linux体验,但默认安装配置却可能成为系统资源的&q…...
Herqles架构:量子比特读取的硬件高效判别器设计与FPGA实现
1. 项目概述:量子比特读取的精度与速度困局在量子计算的世界里,有一个操作看似基础,却直接决定了整个系统的上限:量子比特的读取。你可以把它想象成计算机的“内存读取”指令,但这里读取的不是0或1的确定性电压&#x…...
差分隐私矩阵机制与FFT优化:保护多轮迭代计算的高效方法
1. 差分隐私矩阵分解:从理论到工程实践在联邦学习、推荐系统这些需要频繁进行多轮迭代计算的场景里,我们常常面临一个核心矛盾:既要利用全体参与者的数据来训练一个高质量的全局模型,又要确保任何单个参与者的敏感信息不会在训练过…...
线性化多噪声训练:提升混沌系统长期预测稳定性的正则化技术
1. 项目概述:当机器学习遇上混沌,如何让预测“长治久安”?在天气预报、气候模拟乃至金融市场分析中,我们常常需要面对一类“混沌系统”。这类系统的特点是,其短期行为虽然遵循确定的规律,但长期演化对初始条…...
BL51链接器段名通配符使用技巧与工程实践
1. BL51链接器中段名通配符使用指南作为一名从事8051嵌入式开发十余年的老工程师,我经常需要处理代码段的精细布局问题。今天要分享的是BL51链接器中一个非常实用但容易被忽视的功能——段名通配符匹配。这个功能在项目代码量较大时尤其有用,能显著提升链…...
MIMIC-CXR数据集加载实战:用Python从零处理医学影像与报告文本(附完整代码)
MIMIC-CXR数据集加载实战:用Python从零处理医学影像与报告文本(附完整代码)当你第一次打开MIMIC-CXR数据集时,那种面对海量嵌套目录和元数据的茫然感我深有体会。作为医学AI领域最具挑战性的公开数据集之一,MIMIC-CXR包…...
