sui中的对象,和共享对象是什么?

G-XBT
发布于 阅读 623

在sui中,什么是对象?

正如传统计算机语言中,对象就是从类,模版,struct中,创造一个具体的内容,也就是实例化。
在sui 中,对象概念是和传统的对象是一致的。但是由于其运行在特定的,受限的状态环境里。sui 的对象又有些不同,会比传统对象,拥有更多的限制。
这些限制并非坏处,能够最大限度,保障智能合约的安全。
在sui 中,要先建立一个对象,struct 结构,必须至少拥有两部分,即 key 能力修饰和 struct里的第一个字段必须是id: UID。类似于,如下

struct Car has key { 
   id: UID,
}

如何创建对象?

sui::transfertransfer(Car {
            id: object::new(ctx)
        }, tx_context::sender(ctx))
    }

如何创建共享对象?

sui::transfer::share_object(
   Car {
            id: object::new(ctx)
        }
)

共享对象,和对象有什么区别吗?
对象必须拥有所有者,而共享对象不必拥有所有者。

为什么会拥有共享对象,和对象,这两者存在意义的是什么?
1,安全,一个地址拥有一个对象,只有这个地址可以调用这个对象的方法,其他任何人调用都不行。如果想要多个人可以调用,就必须使用共享对象,比如上面的第一个Car,和第二个Car。
2,提高tps。拆分了两种调用,普通对象调用,在任意时刻永远只会有一个人使用,而共享对象可能拥有多个人使用。 而普通对象,永远不会数据冲突,那么就可以实现并发。而共享对象,必须使用拜占庭共识协议,确保安全。

标签: 每日闲话
评论