# 项目合约部分
## 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