欢迎光临散文网 会员登陆 & 注册

Sui V0.28版本迁移指南

2023-04-04 13:57 作者:Sui_Network  | 我要投稿

Sui V0.28版本引入一些不兼容更新,可能需要更新你的应用或调整程序,才能正常运行。本指南提供了迁移步骤来帮助更新,同时也将介绍新版本中一些新增功能。(不兼容更新详情:https://docs.sui.io/doc-updates/sui-breaking-changes)

Sui Move 更新

本节将介绍有关Sui Framework相关的更新。

Sui Framework拆分成了两个包#

更新时间2023年3月27日

sui-framework包含了Sui Move中object、 transferdynamic_field等核心包。在Sui上开发的合约常常依赖sui-framework包。此前,sui-framework包含一个governance文件夹,里面定义了一些与Sui系统运行相关的模块,比如validator_setstaking_pool。这模块与framework内的其他模块有根本区别,开发人员不常用。为了简化,此版本将sui-framework拆分为两个,以提高模块化、可用性和升级性。

在PR 9618中(https://github.com/MystenLabs/sui/pull/9618),sui-framework在packages目录中包含3个包:sui-systemsui-frameworkmove-stdlib

  • sui-system中包含sui-framework/sources/governance目录中的模块, 其中所有验证节点管理和质押相关函数,都发布在以0x3命名的sui_system地址上。

  • sui-framework包含不在governance文件夹中的所有其他模块,该framework为开发人员提供标准库和工具类模块,它仍然在0x2命名的sui地址上。

  • move-stdlib包含以前位于sui-framework/deps文件夹中,它仍然在0x1 命名的std地址上。

如果您依赖sui-framework开发代码库,包管理配置文件Move.toml必须更改路径地址:

发布V0.28版本之前

发布V0.28版本之后

就是subdir字段修改成crates/sui-framework/packages/sui-framework/

如果您的代码使用governance文件夹中如下的模块:

genesis.movesui_system.movevalidator_cap.movevoting_power.movestake_subsidy.movesui_system_state_inner.movevalidator_set.movestaking_pool.movevalidator.move或者validator_wrapper.move

这些模块现在位于sui-system包中,您必须将SuiSystem列为依赖项,并通过0x3sui_system命名地址来访问它们。

ecdsa_k1 ecrecover和secp256k1_verify#

在这个版本中,ecdsa_k1::ecrecoverecdsa_k1::secp256k1_verify要求用户输入原始信息而不是哈希后的信息

  • ecdsa_k1::ecrecover(sig, hashed_msg, hash_function) ,升级成:ecdsa_k1::secp256k1_ecrecover(sig, msg, hash_function)

  • ecdsa_k1::secp256k1_verify(sig, pk, hashed_msg),升级成:ecdsa_k1::secp256k1_verify(sig, pk, msg, hash_function)

当您调用这些 API 时,必须提供原始信息而不是哈希后的信息用于verify或ecrevover。 您还必须提供由u8数组表示的hash_function名称。 有关详细信息,请参阅源代码:

  • ecdsa_k1.md:https://github.com/MystenLabs/sui/blob/main/crates/sui-framework/docs/ecdsa_k1.md

  • ecdsa_r1.md:https://github.com/MystenLabs/sui/blob/main/crates/sui-framework/docs/ecdsa_r1.md

ID不能构造传入#

当您建立一个object时,UID必须使用未被注册过的,也就是UID必须来自object::new(或用于测试的test_scenario::new_object)。 想要迁移已有的项目,之前将UID作为参数来构造object的任何函数现需要用TxContext来生成新的ID。

例如,在V0.28之前的版本中,创建一个object代码:

而在V0.28版本中,创建一个object代码:

Publisher#

Publisher增加了一个重要的补充性功能,即Publisher object现在需要的OTW(一次性见证者),可以通过sui::package::claim调用在package内的任何模块来实现:

更多有关Publisher的信息,请参阅https://examples.sui.io/basics/publisher.html。

Sui Object Display 标准#

这个版本包含了Sui Object Display 标准,是一种使用通用模板来描述类型object的新方式,使其链下展示更标准,RPC API已经支持该新标准。

想要获取更详细的描述和标准制定的动机,请参阅Sui Object Display提案(https://forums.sui.io/t/nft-object-display-proposal-accepted/4872)。

在Sui Move中, 可以通过调用display::new<T>(&Publisher)来claim Display object。函数签名中规定,需要用到Publisher object。Display claim后,可以通过向其添加新字段(模板)来修改Display。当object准备好发布时,需要调用display::update_version(&mut Display)来发布并使其可用,每当添加/编辑Display应当再次调用update_version来声明已经更新。

我们建议在Display中使用的字段如下:

  • name:显示的名称

  • link:对象的app链接/外部链接

  • description:描述信息

  • image_url:图片的URL或者blob类型的图片

  • project_url:网站的链接

  • creator:以任何方式提及创作者(文本、链接、地址等)

请在Display中(https://examples.sui.io/basics/display.html)查阅其他信息和示例。

API和SDK更新#

本节将介绍Sui API和SDK更新后的相关内容。

读取objects#

sui_getObject端点现在采用一种附加配置参数的方法SuiObjectDataOptions来控制端点检索字段的类型。默认情况下,端点仅检索object的引用,除非客户端请求时明确指定其他数据,例如typeowner或者bcs数据类型。

TypeScript迁移#

JSON RPC迁移#

Display#

要获取object的Display ,请将附加标志传递给sui_getObject调用。

返回值是某个类型的处理模版,例如,对于Sui Capys,它可以为:

读交易#

sui_getTransactionBlocksui_multiGetTransaction函数现在新增一个可选参数options。使用options指定要检索的字段,例如交易、变动或事件。 默认情况下,它只返回交易签名。

读事件#

此版本对读事件进行了以下更新:

  • 删除系统事件,例如PublishTransferObjectNewObject,只保留 MoveEvents

  • SuiTransactionResponse中添加了object_changesbalance_changes字段

分页#

此版本更新了分页的定义。

发布V0.28版本之前

发布V0.28版本之后

备注:next_cursor现在不会有Null值了,如果data不为空,它总是指向最后一项数据;要检查当前页面是否是最后一页,现在您可以简单地使用has_next_page,而不是执行next_cursor.is_none()

如果使用Page是一页一页的读取,现在读取到最新一页时,无需手动处理next_cursor返回的None值,而是可以一直使用返回的next_cursor作为读取下一页的输入参数。在此版本之前,读取过程将从头开始直到结束,并且没有正确处理None值。

构建和执行交易#

SignerSignableTransaction接口之前的transaction builder方法已被删除,并替换为新的Transaction builder类。这个新的transaction builder充分利用了Programmable Transactions优点。

交易现在支持列表中提供的硬币作为交易时gas的支付。默认情况下,transaction builder会自动计算gas和选择硬币用于支付。当然你还可以选择设置这些值,例如设置预算、更改gas价格或gas支付选择:

质押更新#

本节将介绍与Sui质押更新相关的内容。

解除用于质押锁定的 Coin#

此版本之前,用户可以将其Coin<SUI>LockedCoin<SUI>质押给验证节点,此版本更新后,取消了对用于质押锁定Coin的支持,因此质押功能现只支持Coin<SUI>

更新质押Sui object布局#

在此版本之前,质押的Sui结构具有以下定义:

随着对用于质押锁定Coin的移除以及Sui质押流程的改变,新的结构定义为:

存入/取出质押API的更新#

此版本包括以下与存入/取出质押请求相关的更新:

  • 移除request_switch_delegation函数

  • 重命名所有委托功能以使用“质押”而不是“委托”

在V0.28版本之前,函数名称为:

从V0.28版本开始生效,函数名称为:

getDelegatedStakes的更新#

委托质押的函数(getDelegatedStakes )函数已重命名为getStakes, getStakes函数返回验证节点按质押池分组地址的所有质押,以及到目前为止获得的预估质押奖励。

增加getStakesByIds函数#

新的getStakesByIds函数,可以使用已质押的SUI IDs数组查询委托的质押。 该函数返回验证节点按质押池分组地址的所有质押,以及到目前为止获得的预估质押奖励。

Secp256k1导出密钥对#

在函数签名上将Secp256k1.deriveKeypairEd25519进行匹配,以接受助记词字符串和可选路径字符串,而不是必需的路径字符串和助记符字符串。详细信息,请参阅PR 8542(https://github.com/MystenLabs/sui/pull/8542/files#diff-66c975e3c863646441ca600b074edb151f357e471bab6a34166caaecd5f546e1L151)。

关于 Sui Network

Sui是首个从头开始设计的无需许可Layer 1区块链,旨在为创作者和开发者提供平台,以构建能够获取Web3中下一个十亿用户的体验。Sui具有横向可扩展性,能够以快速且低成本支持广泛的应用开发。

官网:https://sui.io/

Twitter:https://twitter.com/SuiNetwork

Discord:https://discord.com/invite/sui

中文Medium:https://medium.com/sui-network-cn

中文电报群:https://t.me/Sui_Blockchain_Chinese

Sui V0.28版本迁移指南的评论 (共 条)

分享到微博请遵守国家法律