# 0xmonaco CTF 体验心得

By [shaneson.eth](https://paragraph.com/@shaneson-eth) · 2023-01-25

---

> 由开发人员、艺术家和设计师组成的集体 MatchBoxDAO 宣布推出 MatchBox Arena。该团队将其称为“Web3 公司的世界杯”，**并表示游戏锦标赛旨在找出哪家公司拥有最好的技术团队。**

首先，可以代表公司和世界顶级的crypto公司（uniswap，polygon，ledger，chainlink。。。）同台竞技真的是一个非常荣幸的事情。所以我牺牲了宝贵的春节假期，就一直在打这个比赛。

这次CTF是一个用solidity操控汽车的算法比赛（终于遇到我非常感兴趣的地方了）

介绍
==

这本质上来说是一次博弈实验，而不是一次简单的代码hackthon。更像是一个社会实验，涉及纯技术方面、经济激励、效用优化模式和理性的压力测试。

![](https://storage.googleapis.com/papyrus_images/5c659372521f6025b0d0ca7e1397717aa21711ce5d5f7e823fa896e0c81d8978.jpg)

对于每一个参赛者，你需要实现自己的Car合约，特别是takeyourturn这个函数。对于每一轮你都需要做出决策，具体有五种决策：

1）加速（ACCELERATE）

2）炮弹（SHELL）

3）超级炮弹（SUPER\_SHELL）

4）香蕉（BANANA）

5）盾（SHIELD）

有点像跑跑卡丁车？是的。。每一种决策都会耗费掉你的金额，你的金额总量是17500。而道具的价格会随着轮次和大家购买数量的变化而变化。

策略
==

大体上一般分为几种策略：

1）激进策略：不断加速，尽可能耗尽金额冲到终点。

2）防守策略：前期猥琐，等1，2名互相消耗金额了之后再发力。

3）金融策略：打持久战，选最便宜的时候买道具。等他们的金额耗费了很多的时候，就把价格拉起来，打金融战。

4）xjb策略

问题的本质是一个最优化问题。但因为这里状态很多，而且没有最优子结构，这里不能使用动态规划。我的第一个想法其实是贪心， or 强化学习。但注意这里是一个使用智能合约的编码环境，solidity没有办法实现pytorch和tensorflow的计算。强化学习只能使用QLearning来模拟。

1）强化学习。

Qlearning的实现主要是定义状态，然后实现状态表，定义状态转移方程。这里的难点是怎么去定义状态S (s1, s2, s3 ….. )，和学习数据的问题。对于每一刻状态s，决策理论上是无穷的，而且数据无法拿到对手的数据，这里的方法是不可能实现的。

2）求解博弈论模型。

也是需要提前定义好决策集合，设计奖励函数，遍历2个轮次的决策结果，选择在三者博弈下最好的当前抉择。这个的难点其实在于决策本质上也是无数的，而且计算量也是很大。

3）贪心策略。

这大概是最可行的决策。我们没有办法计算出全局最优的决策，但是我们可以计算出当前状态下最优的决策。这个是可行的。我尝试把计算全局最优的想法，专注在局部最优。

**局部最优：我希望在考虑对手的决策的前提下，计算出当前我决策的最优价值的决策。**

总结
==

比赛还在继续，赛车博弈这真的非常有意思。只是时间太尴尬，发生在了春节。

梦回当年打ACM的日子。。。

---

*Originally published on [shaneson.eth](https://paragraph.com/@shaneson-eth/0xmonaco-ctf)*
