shaneson.eth

Posted on Jan 25, 2023Read on Mirror.xyz

0xmonaco CTF 体验心得

由开发人员、艺术家和设计师组成的集体 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的日子。。。