一 必须实现的接口及调用顺序
二 开发者能用的evm接口及公开数据
存储结构
mapping(uint64 => Task) public taskInfo; //任务信息
struct Task {
uint64 currentRunNum;//当前DEP节点领取任务数量
uint64 maxRunNum;//最大允许DEP节点领取任务数量
uint64 startTime;//开始时间
uint64 currentRunningNum;//当前正在运行任务的DEP节点数量
uint64 maintainBlocks;//当前任务最大持续区块时间
uint256 taskProof;//当前任务工作证明要话费的EZC //等于taskUintProof * currentRunNum
uint256 taskUintProof;//当前任务单元工作证明EZC
address[] receivers;//限制可以领取任务的DEP节点地址
address publisher;//发布任务账户地址
}
mapping(address => bool) public addressWhitelist; //DEP 可接任务的设备白名单
mapping(uint64 => uint256) public dayTotalReward; //所有DEP节点当天收益
mapping(string => bool) public imageWhiteListStatus; // docker image白名单标志
mapping(uint64 => bool) public isWithdrawFromOwner;// DEP节点已领取任务奖励标志
mapping(address => mapping(uint64 => uint256)) public userDayReward; //DEP节点每日收益
mapping(address => uint64) public userRewardPoint; //DEP节点收益点数
mapping(address => string) public userSetWhiteImage; //每个DEP节点,可以设置一个保留白名单镜像,不会被docker系统定时清除
mapping(address => uint64) public userSettledDay;//DEP 节点稳定天数
mapping(address => mapping(uint64 => bool)) public userTask; // DEP 节点任务id
## 函数
1 function getSubIndexForTask(uint64 taskId) public view returns (bool)
查看当前调用地址是否抢到了taskId对应的任务
2 function getTaskRemainingTime(uint64 taskId) public view returns (uint64)
获取任务剩余的执行时间
3 function getTotalRewardForDay(uint64 theDay) external view returns (uint256)
获取当天的总收益
4 function getUserRewardForCurrentDay(address user) external view returns (uint256)
获取DEP节点当天收益
5 function getUserRewardForDay(address user, uint64 theDay) external view returns (uint256)
获取DEP节点特定日期收益
6 function getUserRewardPointer(address _user) external view returns (uint64)
获取DEP节点收益点数
7 function implementationVersion() external pure virtual returns (string memory)
获取DEP合约版本
三 如何跨平台编译
1 使用buildx
https://segmentfault.com/a/1190000038662022 《多平台容器镜像构建就看这一篇》
https://docs.docker.com/build/buildx/multiplatform-images/
2 使用虚拟机
https://blog.csdn.net/weixin_44255842/article/details/120652227 《WIN10 x86环境部署ARM虚拟机(银河麒麟)实例》
https://blog.51cto.com/u_15050718/3325140 《x86架构下win 系统下使用Vmware+ubantu+qemu 模拟arm64架构+Kylin系统 转载》
四 DEP内部服务接口说明
1 获取竞争任务成功情况
URL
/race?task_id={uint64}
请求类型
GET
请求参数
返回数据
请求示例
http://host.docker.internal:8000/race?task_id=1
成功返回示例
{
"success": true,
"error": null
}
失败返回示例
{
"success": false,
"error": "Rpc(Error { code: InternalError, message: \"VM Exception while processing transaction: revert\", data: Some(String(\"0x\")) })"
}
2 向上返回竞争错误信息详情
URL
/race
### 请求类型
POST
请求参数
返回数据
string
请求示例
http://host.docker.internal:8000/race
{
"task_id": 1,
"status": "Failed",
"msg": "Your custom error message which will be displayed on the DEP page"
}
成功返回示例
Ok
失败返回示例
Task not found
3 设置任务成功状态
URL
/complete?task_id={uint64}
### 请求类型
Get
请求参数
返回数据
请求示例
http://host.docker.internal:8000/complete?task_id=1
成功返回示例
{
"success": true,
"error": null
}
失败返回示例
{
"success": false,
"error": "Rpc(Error { code: InternalError, message: \"VM Exception while processing transaction: revert\", data: Some(String(\"0x\")) })"
}
4 向上返回任务执行成功详情
URL
/complete
### 请求类型
POST
请求参数
返回数据
string
请求示例
http://host.docker.internal:8000/complete
{
"task_id": 1,
"status": "Success",
"msg": "Race success"
}
成功返回示例
Ok
失败返回示例
Task not found
五 参考
https://github.com/deeper-chain/web3d/wiki/Web3D-container-standards
https://github.com/deeper-chain/web3d