为创建PoUW区块链做贡献并可获得PAI币奖励欢迎加入Project PAI,并成为PoUW贡献团队的一员

我们很高兴有你的加入,也很感谢你为创建真正的”有用工作量证明(PoUW)”区块链协议所做的努力。详情规则请见Project PAI 项目进度- 2020年7月27日,下面为本次挑战题目:

挑战 #1: Docker机器设置



任务:可以使用Docker 机器创建一个更简单的本地设置。



挑战 #2: 格拉法纳(Grafana)仪表板






挑战 #3: 默克尔(Merkle)历史记录







挑战 #4: 拜占庭探测器






挑战 #5: 通用计算





结果:客户可以订购简单的计算,例如(5 + 2 * 4-3)/ 2。多个矿工将接受任务,并将其作为单个迭代执行,然后返回结果。尽管很简单,但此任务的目的是创建一个更好的体系结构,以允许在我们的平台上进行通用计算。


● 挑战 #6: 委托验证● 挑战 #7: 评估与付款● 挑战 #8: DKG 协议● 挑战 #9: BLS t-of-n 签名● 挑战 #10: 碰撞检测器


Project PAI PoUW Developer Award Programme

Contribute to our goal to create a Proof of Useful Work blockchain and earn PAICoins.

First of all, our team at Project PAI welcomes you to our family of PoUW contributors.

We are happy to have you as part of our community and value your additions to our efforts to create a true ‘proof-of-useful work’ blockchain protocol.

Challenge #1: Docker Machine setup

Level: Easy

Situation: At the moment, PoUW can be run in a Kubernetes cluster or using a local cluster simulation. The local simulation makes use of a single blockchain and it is limited in terms of capabilities. The Kubernetes setup requires the installation of MiniKube and heavy computational resources, hence it is not easy to run on lower equipped machines.

Task: Your task is to create a simpler local setup using Docker Machine.

Action: You can use the project pouw-k8s as guidance, from where you can re-use the Docker images.

Result: You should be able to simulate miners and supervisors running on the same machine, each Docker container running its own full PAI node.

Challenge #2: Grafana dashboard

Level: Intermediate

Situation: Currently, we are unable to follow the training and mining processes in an easy-to-use way using the Kubernetes cluster.

Task: The task is to create a Grafana dashboard in which the user can see all nodes by their types, and for each node to be able to see in realtime what actions it is performing.

Action: Project pouw-k8s must be enhanced with the above-specified provisions.

Result: For miner nodes, we should see the current ML metrics (accuracy and cross-entropy value) and its wallet content. For supervisors, we should see how many messages they have logged so far and from whom.

Challenge #3: Merkle history log

Level: Hard

Situation: The process of recording the message history is tedious and slows down many operations.

Task: Your task is to provide an implementation of the message history based on Merkle history logs.

Actions: You must write an implementation of Wallach& Crosby’s paper found here:


Result: Total replacement of current message history handling as it is now. Miners must each keep their own Merkle history log and supervisors must be able to audit randomly the miners.

Challenge #4: Byzantine detector

Level: Easy

Situation: Supervisors cannot detect now if a Byzantine miner sends harmful gradients.

Task: Your assignment consists of implementing a detection algorithm that can spot gradient poisoning.

Action: Implement 2 algorithms: the Kardam filter from Damaskinos et al. and the Krum function from Blanchard et al.

Result: Each supervisor should be running these 2 algorithms and output to the console a message when gradient poisoning is detected.

Challenge #5: General computation

Level: Easy

Situation: We only run a specific ML training task and our project architecture revolves around it.

Task: Implement a simple calculator as PoUW and provide an architecture that allows arbitrary computation.

Actions: Replace the training and verification with simple arithmetic (+, -, *, /). Should work also with parentheses.

Result: A client can order a simple calculation such as (5+2*4-3)/2. Several miners will pick-up the task, execute it as a single iteration, and return the results. Although simple, the purpose of this task is to create a better architecture that allows generalized computation on our platform.

Other possibly interesting tasks for the future:

Challenge #6: Delegated verificationChallenge #7: Evaluation & paymentChallenge #8: DKG protocolChallenge #9: BLS t-of-n signaturesChallenge #10: Crash detector