探索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 插件开…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
逻辑回归暴力训练预测金融欺诈
简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...
热烈祝贺埃文科技正式加入可信数据空间发展联盟
2025年4月29日,在福州举办的第八届数字中国建设峰会“可信数据空间分论坛”上,可信数据空间发展联盟正式宣告成立。国家数据局党组书记、局长刘烈宏出席并致辞,强调该联盟是推进全国一体化数据市场建设的关键抓手。 郑州埃文科技有限公司&am…...
