How to return object has shared?

Hi all,
Im write a init fun to create a shared object below:


fun new_pool(
    ctx: &mut TxContext
): Pool {
    let sender = ctx.sender();
    let pool = Pool {
        id: object::new(ctx),
        user: ctx.sender();
    };

    transfer::share_object(pool);
    pool
}

but got an error

Invalid usage of previously moved variable 'pool'.

plz suggest for me to fix it.
Thanks.

2 Likes

Actually, you cannot return an object that you previously moved, neither by value or by reference. What you could do though, is return the ID of the object you create, such as:

fun new_pool(ctx: &mut TxContext): ID {
      let pool = Pool {
          id: object::new(ctx),
          user: ctx.sender()
      };

      let pool_id = pool.get_pool_id();
      transfer::share_object(pool);
      pool_id
  }


  public fun get_pool_id(self: &Pool): ID {
    *self.id.uid_as_inner()
  }
2 Likes