# 0xmonaco CTF 体验心得 **Published by:** [shaneson.eth](https://paragraph.com/@shaneson-eth/) **Published on:** 2023-01-25 **URL:** https://paragraph.com/@shaneson-eth/0xmonaco-ctf ## Content 由开发人员、艺术家和设计师组成的集体 MatchBoxDAO 宣布推出 MatchBox Arena。该团队将其称为“Web3 公司的世界杯”,并表示游戏锦标赛旨在找出哪家公司拥有最好的技术团队。首先,可以代表公司和世界顶级的crypto公司(uniswap,polygon,ledger,chainlink。。。)同台竞技真的是一个非常荣幸的事情。所以我牺牲了宝贵的春节假期,就一直在打这个比赛。 这次CTF是一个用solidity操控汽车的算法比赛(终于遇到我非常感兴趣的地方了)介绍这本质上来说是一次博弈实验,而不是一次简单的代码hackthon。更像是一个社会实验,涉及纯技术方面、经济激励、效用优化模式和理性的压力测试。对于每一个参赛者,你需要实现自己的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的日子。。。 ## Publication Information - [shaneson.eth](https://paragraph.com/@shaneson-eth/): Publication homepage - [All Posts](https://paragraph.com/@shaneson-eth/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@shaneson-eth): Subscribe to updates