SUIMOVE合约层规划核心数据结构找活网的主要内容就是任务,所以要想一想任务如何存放在链上。方案有2种形式存储1.单独一个个的共享对象存于链上。这种方式灵感来自星航第二期学员Jovi的红包项目,我把任务作为一个个类似红包的对象,用事件获得对象ID。2.做一个容器将任务集中存在一个容
找活网的主要内容就是任务,所以要想一想任务如何存放在链上。
方案有2种形式存储
这种方式灵感来自星航第二期学员Jovi的红包项目,我把任务作为一个个类似红包的对象,用事件获得对象ID。
用容器来管理任务对象,方便我统计数量和获取内容,task对象存入一个table里。
struct Detask has key,store{
id:UID, // 任务的UID
nid:ID, // 任务的ID 这个ID其实就是UID的ID,我单独拿出来用是方便赋值操作
deName:String,//任务名称
inscription:String,//任务类别
describe:String,//任务描述
...
注意 MOVE语言目前不支持注释里带有中文,虽然不是特别大的问题,但平时编辑会有警告,不影响编译。
如果有像我一样有强迫症的人就尽量使用英文注释吧。。。
在合约层设计一些事件还是很有必要的,方便以后前端那边获取数据之用。
// --------------- Events ---------------
struct NewDetask has copy, drop {
id: ID,
sender: address,
tcount: u64,
task_type: u64,
}
struct NewDetaskExt has copy, drop {
id: ID,
task_type: u64,
}
struct NewTaketask has copy, drop {
id: ID,
sender: address,
tcount: u64,
task_type: u64,
}
struct NewBagTypeEv has copy, drop {
id: ID,
bagname:String,//name
bagtypename:String,//type
tcount: u64,
}
struct NewBagCountCapEv has copy, drop {
id: ID,
}
struct NewDetaskManagerCapEv has copy, drop {
id: ID,
}
struct DetaskAdminCap has key,store{
id:UID, //object id
}
struct DetaskCreatorCap has key,store{
id:UID, //object id
taskid:ID
}
DetaskAdminCap 作为平台的管理员权限,方便平台做一些管理员级别的操作,比如封禁一些违规的任务等等。
DetaskCreatorCap 作为任务创建者的权限 ,这个对象发给创建者,因为附带taskid,所以前端那边就很好区别出数据中 任务 | 账号 之间的关系了
transfer::share_object(Detask{...});
任务是作为共享对象到链上的,这样所有人都能看见并获取里面的信息。
table::add(&mut cap.tbtask,cap.count,taskid);
将任务id存放在任务容器里方便管理。
接任务者: 浏览网站上的所有可用任务。 在决定是否接受任务之前,仔细阅读和理解任务详情和规则。 如果感兴趣,点击任务接受并开始执行任务。
//用户接取任务
entry public fun usertaketask(
task:&mut Detask, //任务对象
ctx:&mut TxContext
)
沟通: 任务发布者和接任务者通过外部通讯工具(如微信、Gmail 或其他偏好的沟通平台)进行沟通。 沟通对于确认任务完成和讨论任何额外要求至关重要。 任务发布者可能要求接任务者提供完成截图或其他必要信息以进行验证和奖励支付。 双方应就沟通渠道达成一致,并在任务完成过程中保持有效的沟通。
找活网的主要是为了方便用户沟通的桥梁,初期不会做的太垂直化,让用户们先轻接触互动起来为目的。
以后功能迭代会逐步细化一些功能。
(未完待续)
找活网 DeTask 找活网
Move语言学习交流QQ群: 79489587
Sui官方中文开发者电报群: <https://t.me/sui_dev_cn>
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!