Move.

帖子

分享您的知识。

kryptoschain.
Apr 10, 2025
专家问答

如何转移另一个对象拥有的对象?

我在转移对象 A 时遇到了问题,该对象归对象 B 所有,对象 B 归我所有. 我收到一条错误消息,说交易没有由正确的发件人签署. 有人知道如何解决这个问题并正确接收对象 A 吗?

  • Move CLI
  • Move
0
2
分享
评论
.

答案

2
deriss.
Apr 11 2025, 03:36

听起来你需要使用 “转移到对象”(TTO)流程. 确保检查所涉物体的能力. 父对象类型 (obj_b) 必须允许接收对象,因为它需要对其UID进行可变访问. 此外,还要确保如果子对象 (obj_a) 没有此store能力,则必须将其设置为可接收. 更多细节可以在此表中找到:https://docs.sui.io/concepts/transfers/transfer-to-object#custom-receiving-rules

0
评论
.
24p30p.
Jul 9 2025, 07:13

如果你在尝试转移对象 A(归对象 B 所有,对象 B 归你的账户所有)时收到的错误信息显示交易没有由正确的发件人签署,那是因为所有权在 Sui 中的运作方式. 当一个对象归另一个对象所有时,比如你的情况,你不能直接从你的账户中转移它. 相反,您需要将对象 B(其父对象)包含在交易中,并使用它来授权对对象 A 的操作,仅使用您的账户签署交易是不够的,因为对象 A 不直接归您的地址所有. 要解决这个问题,请确保将对象 B 作为可变输入包含在 Move 调用或交易区块中,这样 Sui 运行时就知道该操作已获得授权.

以下是使用 Sui SDK 在交易区块中会是什么样子的基本示例:

const tx = new TransactionBlock();
const parentObject = tx.object('0xB'); // object B
const childObject = tx.object('0xA'); // object A
// use parentObject to perform operations involving childObject
// for example, calling a Move function to transfer object A

tx.moveCall({
  target: '0xYourPackage::your_module::transfer_child',
  arguments: [parentObject, childObject, tx.pure(recipientAddress)]
});

await wallet.signAndExecuteTransactionBlock({ transactionBlock: tx });

只要确保你的 Move 函数正确地将对象 B 和对象 A 定义为输入,并且该对象 B 有权对 A 进行操作即可. 您可以在此处的官方文档中阅读有关 Sui 对象所有权和权限的更多信息: https://docs.sui.io/understand/ownership

0
评论
.

你知道答案吗?

请登录并分享。

Move is an executable bytecode language used to implement custom transactions and smart contracts.

148帖子240答案
Sui.X.Peera.

赚取你的 1000 Sui 份额

获取声誉积分,并因帮助 Sui 社区成长而获得奖励。

奖励活动七月