# 项目合约部分 ## DID 问题 1. 是否有制造商白名单机制 - 比如前期只愿允许小米才能注册device 2. 设备的生命周期有什么? - 未激活 - 已激活 - 正常运行 - lock (可重新解锁)? - 已报废(永久性的)? 在不同的生命周期,产生的IoT数据,是否都要上链(L2) 3. 如果上链,gas 费如何解决 - 如果不上链,数据存储到 L2? 4. Product(对应Collection)和 Device(对应 Item)这样的数据结构 - Product 的是否添加一个`生产商 (maker)` 属性 5. Product 和 Item 都应该能够附加元数据(固有的和项目方自定义的),可编程字段的增删改查 6. 铸造操作,对于厂商是注册操作,**是否添加`费用(fee) 属性`**,可以是 0,也可以是动态变化,方便平台收取费用,是一种盈利措施。 - 收费:可能是在铸造 Device 的时候收取费用 - 立即收费 or 过一段时间收费 7. 激活操作,激活是用户行为,自主激活 - owner:一开始为空,表示未激活。激活成功,填入用户钱包地址,如果是代理激活,填入代理地址。 - owner 是否允许用户更新(转让设备) 8. 代理激活 - 用户操作设备,需要通过代理地址 - 代理激活,一定是咱们先垫付,后找制造商回款,回款机制如何设计(链上 or 链下) - 代理激活是否可以更换为自主激活(个人操作激活, 更新owner) - 如果变为自主激活,立即收费 or 过一段时间收费,需要注意 9. 开发一个代理激活设备的**合约函数**,然后开发一个中心化服务,提供 Web2 API,方便没有 Solana 钱包的用户激活设备,Gas 费用可以加在铸造 Device 时候的费用里 - 如果使用代理激活,我们可以设置一个代理账号,过一段时间再结算 gas 费 10. 开发一个区块链浏览器,提供 Web2 API,提交 DID 获取对应的元数据,用于帮助链下网络的鉴权和授权 - 区块浏览器显示哪些内容:时间,地址,操作行为等。 ## 数据结构与指令 1. Project,这个是链下结构 - `devices_count` 根据 mint 的次数 ```rust pub struct Project { name: String, vendor_name: String, network: String, contract_address: String, contract_name: String, contract_version: u8, minter_address: String, devices_count: u32, } ``` 2. Product,这个是链上结构(Collection) ```rust // admin allow_reg_addr // sender inclouds in allow_reg_addr pub struct Admin { admin: Account, } pub struct Global { reg_fee: float, // default = 1/100 allow_reg_addr = vec![], } pub struct Product { name: String, } ``` 3. Device - `identity` 对应设备的 DID 地址 - holder ```rust pub struct Device { identity: Account<Did>, holder_addr: String, lock: bool, } ``` 4. Did ```rust pub struct Did { name: String, mintAt: u32, series_num: String, owner: Account, } ``` - register vendor into global // - update ```rust= impl Product { fn mint(){ sender = "" // get sender if Global.allow_reg_addr.contains(&sender) { msg!("mint successful!!") } } } impl Device { pub activate() { sender = "" // get sender let device = Device{} device.owner = sender device.project.devices_count += 1 msg!("activate successful!!") } } // update Global ``` ## api 功能 1. 查询信息 - get all projects info http://47.91.17.183:1337/api/projects/ - get project detail http://47.91.17.183:1337/api/projects/1 https://fake-did-staging.dephy.io/api/demo - get all devices info https://fake-did-staging.dephy.io/api/demo/devices/ http://47.91.17.183:1337/api/devices/ - get device detail http://47.91.17.183:1337/api/devices/1 https://fake-did-staging.dephy.io/api/demo/devices/0xe66bbb2b28273f4f0307e4c48fa30e304203016c 2. 执行 - register - create collection - mint - actived