Sui V0.28版本遷移指南

Sui V0.28版本引入一些不兼容更新,可能需要更新你的應(yīng)用或調(diào)整程序,才能正常運(yùn)行。本指南提供了遷移步驟來(lái)幫助更新,同時(shí)也將介紹新版本中一些新增功能。(不兼容更新詳情:https://docs.sui.io/doc-updates/sui-breaking-changes)
Sui Move 更新
本節(jié)將介紹有關(guān)Sui Framework相關(guān)的更新。
Sui Framework拆分成了兩個(gè)包#
更新時(shí)間2023年3月27日
sui-framework包含了Sui Move中object、?transfer和dynamic_field等核心包。在Sui上開(kāi)發(fā)的合約常常依賴sui-framework包。此前,sui-framework包含一個(gè)governance文件夾,里面定義了一些與Sui系統(tǒng)運(yùn)行相關(guān)的模塊,比如validator_set和staking_pool。這模塊與framework內(nèi)的其他模塊有根本區(qū)別,開(kāi)發(fā)人員不常用。為了簡(jiǎn)化,此版本將sui-framework拆分為兩個(gè),以提高模塊化、可用性和升級(jí)性。
在PR 9618中(https://github.com/MystenLabs/sui/pull/9618),sui-framework在packages目錄中包含3個(gè)包:sui-system、sui-framework和move-stdlib:
sui-system中包含sui-framework/sources/governance目錄中的模塊, 其中所有驗(yàn)證節(jié)點(diǎn)管理和質(zhì)押相關(guān)函數(shù),都發(fā)布在以0x3命名的sui_system地址上。
sui-framework包含不在governance文件夾中的所有其他模塊,該framework為開(kāi)發(fā)人員提供標(biāo)準(zhǔn)庫(kù)和工具類模塊,它仍然在0x2命名的sui地址上。
move-stdlib包含以前位于sui-framework/deps文件夾中,它仍然在0x1?命名的std地址上。
如果您依賴sui-framework開(kāi)發(fā)代碼庫(kù),包管理配置文件Move.toml必須更改路徑地址:
發(fā)布V0.28版本之前
發(fā)布V0.28版本之后
就是subdir字段修改成crates/sui-framework/packages/sui-framework/
如果您的代碼使用governance文件夾中如下的模塊:
genesis.move、sui_system.move、validator_cap.move、voting_power.move、stake_subsidy.move、sui_system_state_inner.move、validator_set.move、staking_pool.move、validator.move或者validator_wrapper.move
這些模塊現(xiàn)在位于sui-system包中,您必須將SuiSystem列為依賴項(xiàng),并通過(guò)0x3或sui_system命名地址來(lái)訪問(wèn)它們。
ecdsa_k1 ecrecover和secp256k1_verify#
在這個(gè)版本中,ecdsa_k1::ecrecover和ecdsa_k1::secp256k1_verify要求用戶輸入原始信息而不是哈希后的信息
ecdsa_k1::ecrecover(sig, hashed_msg, hash_function)?,升級(jí)成:ecdsa_k1::secp256k1_ecrecover(sig, msg, hash_function)
ecdsa_k1::secp256k1_verify(sig, pk, hashed_msg),升級(jí)成:ecdsa_k1::secp256k1_verify(sig, pk, msg, hash_function)
當(dāng)您調(diào)用這些 API 時(shí),必須提供原始信息而不是哈希后的信息用于verify或ecrevover。 您還必須提供由u8數(shù)組表示的hash_function名稱。 有關(guān)詳細(xì)信息,請(qǐng)參閱源代碼:
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不能構(gòu)造傳入#
當(dāng)您建立一個(gè)object時(shí),UID必須使用未被注冊(cè)過(guò)的,也就是UID必須來(lái)自object::new(或用于測(cè)試的test_scenario::new_object)。 想要遷移已有的項(xiàng)目,之前將UID作為參數(shù)來(lái)構(gòu)造object的任何函數(shù)現(xiàn)需要用TxContext來(lái)生成新的ID。
例如,在V0.28之前的版本中,創(chuàng)建一個(gè)object代碼:
而在V0.28版本中,創(chuàng)建一個(gè)object代碼:
Publisher#
Publisher增加了一個(gè)重要的補(bǔ)充性功能,即Publisher?object現(xiàn)在需要的OTW(一次性見(jiàn)證者),可以通過(guò)sui::package::claim調(diào)用在package內(nèi)的任何模塊來(lái)實(shí)現(xiàn):
更多有關(guān)Publisher的信息,請(qǐng)參閱https://examples.sui.io/basics/publisher.html。
Sui Object Display 標(biāo)準(zhǔn)#
這個(gè)版本包含了Sui Object Display 標(biāo)準(zhǔn),是一種使用通用模板來(lái)描述類型object的新方式,使其鏈下展示更標(biāo)準(zhǔn),RPC API已經(jīng)支持該新標(biāo)準(zhǔn)。
想要獲取更詳細(xì)的描述和標(biāo)準(zhǔn)制定的動(dòng)機(jī),請(qǐng)參閱Sui Object Display提案(https://forums.sui.io/t/nft-object-display-proposal-accepted/4872)。
在Sui Move中, 可以通過(guò)調(diào)用display::new<T>(&Publisher)來(lái)claim?Display?object。函數(shù)簽名中規(guī)定,需要用到Publisher?object。Display?claim后,可以通過(guò)向其添加新字段(模板)來(lái)修改Display。當(dāng)object準(zhǔn)備好發(fā)布時(shí),需要調(diào)用display::update_version(&mut Display)來(lái)發(fā)布并使其可用,每當(dāng)添加/編輯Display應(yīng)當(dāng)再次調(diào)用update_version來(lái)聲明已經(jīng)更新。
我們建議在Display中使用的字段如下:
name:顯示的名稱
link:對(duì)象的app鏈接/外部鏈接
description:描述信息
image_url:圖片的URL或者blob類型的圖片
project_url:網(wǎng)站的鏈接
creator:以任何方式提及創(chuàng)作者(文本、鏈接、地址等)
請(qǐng)?jiān)?strong>Display中(https://examples.sui.io/basics/display.html)查閱其他信息和示例。
API和SDK更新#
本節(jié)將介紹Sui API和SDK更新后的相關(guān)內(nèi)容。
讀取objects#
sui_getObject端點(diǎn)現(xiàn)在采用一種附加配置參數(shù)的方法SuiObjectDataOptions來(lái)控制端點(diǎn)檢索字段的類型。默認(rèn)情況下,端點(diǎn)僅檢索object的引用,除非客戶端請(qǐng)求時(shí)明確指定其他數(shù)據(jù),例如type、owner或者bcs數(shù)據(jù)類型。
TypeScript遷移#
JSON RPC遷移#
Display#
要獲取object的Display ,請(qǐng)將附加標(biāo)志傳遞給sui_getObject調(diào)用。
返回值是某個(gè)類型的處理模版,例如,對(duì)于Sui Capys,它可以為:
讀交易#
sui_getTransactionBlock和sui_multiGetTransaction函數(shù)現(xiàn)在新增一個(gè)可選參數(shù)options。使用options指定要檢索的字段,例如交易、變動(dòng)或事件。 默認(rèn)情況下,它只返回交易簽名。
讀事件#
此版本對(duì)讀事件進(jìn)行了以下更新:
刪除系統(tǒng)事件,例如Publish、TransferObject、NewObject,只保留?MoveEvents
在SuiTransactionResponse中添加了object_changes和balance_changes字段
分頁(yè)#
此版本更新了分頁(yè)的定義。
發(fā)布V0.28版本之前
發(fā)布V0.28版本之后
備注:next_cursor現(xiàn)在不會(huì)有Null值了,如果data不為空,它總是指向最后一項(xiàng)數(shù)據(jù);要檢查當(dāng)前頁(yè)面是否是最后一頁(yè),現(xiàn)在您可以簡(jiǎn)單地使用has_next_page,而不是執(zhí)行next_cursor.is_none()。
如果使用Page是一頁(yè)一頁(yè)的讀取,現(xiàn)在讀取到最新一頁(yè)時(shí),無(wú)需手動(dòng)處理next_cursor返回的None值,而是可以一直使用返回的next_cursor作為讀取下一頁(yè)的輸入?yún)?shù)。在此版本之前,讀取過(guò)程將從頭開(kāi)始直到結(jié)束,并且沒(méi)有正確處理None值。
構(gòu)建和執(zhí)行交易#
Signer和SignableTransaction接口之前的transaction builder方法已被刪除,并替換為新的Transaction?builder類。這個(gè)新的transaction builder充分利用了Programmable Transactions優(yōu)點(diǎn)。
交易現(xiàn)在支持列表中提供的硬幣作為交易時(shí)gas的支付。默認(rèn)情況下,transaction builder會(huì)自動(dòng)計(jì)算gas和選擇硬幣用于支付。當(dāng)然你還可以選擇設(shè)置這些值,例如設(shè)置預(yù)算、更改gas價(jià)格或gas支付選擇:
質(zhì)押更新#
本節(jié)將介紹與Sui質(zhì)押更新相關(guān)的內(nèi)容。
解除用于質(zhì)押鎖定的 Coin#
此版本之前,用戶可以將其Coin<SUI>或LockedCoin<SUI>質(zhì)押給驗(yàn)證節(jié)點(diǎn),此版本更新后,取消了對(duì)用于質(zhì)押鎖定Coin的支持,因此質(zhì)押功能現(xiàn)只支持Coin<SUI>。
更新質(zhì)押Sui object布局#
在此版本之前,質(zhì)押的Sui結(jié)構(gòu)具有以下定義:
隨著對(duì)用于質(zhì)押鎖定Coin的移除以及Sui質(zhì)押流程的改變,新的結(jié)構(gòu)定義為:
存入/取出質(zhì)押API的更新#
此版本包括以下與存入/取出質(zhì)押請(qǐng)求相關(guān)的更新:
移除request_switch_delegation函數(shù)
重命名所有委托功能以使用“質(zhì)押”而不是“委托”
在V0.28版本之前,函數(shù)名稱為:
從V0.28版本開(kāi)始生效,函數(shù)名稱為:
getDelegatedStakes的更新#
委托質(zhì)押的函數(shù)(getDelegatedStakes )函數(shù)已重命名為getStakes, getStakes函數(shù)返回驗(yàn)證節(jié)點(diǎn)按質(zhì)押池分組地址的所有質(zhì)押,以及到目前為止獲得的預(yù)估質(zhì)押獎(jiǎng)勵(lì)。
增加getStakesByIds函數(shù)#
新的getStakesByIds函數(shù),可以使用已質(zhì)押的SUI IDs數(shù)組查詢委托的質(zhì)押。 該函數(shù)返回驗(yàn)證節(jié)點(diǎn)按質(zhì)押池分組地址的所有質(zhì)押,以及到目前為止獲得的預(yù)估質(zhì)押獎(jiǎng)勵(lì)。
Secp256k1導(dǎo)出密鑰對(duì)#
在函數(shù)簽名上將Secp256k1.deriveKeypair與Ed25519進(jìn)行匹配,以接受助記詞字符串和可選路徑字符串,而不是必需的路徑字符串和助記符字符串。詳細(xì)信息,請(qǐng)參閱PR 8542(https://github.com/MystenLabs/sui/pull/8542/files#diff-66c975e3c863646441ca600b074edb151f357e471bab6a34166caaecd5f546e1L151)。

關(guān)于 Sui Network
Sui是首個(gè)從頭開(kāi)始設(shè)計(jì)的無(wú)需許可Layer 1區(qū)塊鏈,旨在為創(chuàng)作者和開(kāi)發(fā)者提供平臺(tái),以構(gòu)建能夠獲取Web3中下一個(gè)十億用戶的體驗(yàn)。Sui具有橫向可擴(kuò)展性,能夠以快速且低成本支持廣泛的應(yīng)用開(kāi)發(fā)。
官網(wǎng):https://sui.io/
Twitter:https://twitter.com/SuiNetwork
Discord:https://discord.com/invite/sui
中文Medium:https://medium.com/sui-network-cn
中文電報(bào)群:https://t.me/Sui_Blockchain_Chinese