NG#5 - 溢出

思路

Cairo 里的 felt 有一个范围，如果超过了就会出现溢出，这题的 amount 需要传入一个大于 1000000000000000 的数，乘以另一个数 6007，使计算出来的值上溢后，等于 balance。balance 一开始是 0，每次调用 claim_coin 只能让 balance + 1。

题目旁边的 walkthrough 有很详细的解释，Cairo 的除法可以计算溢出，可以用 extern fn felt252_div( lhs: felt252, rhs: NonZero<felt252> ) -> felt252 nopanic;得到答案。

如果 balance 是 1，尝试 1/6007 得到的 amount 如果大于 1000000000000000 就完成目标，如果不行就尝试 2/6007 ...

本地写个 test 计算出需要的 amount。

然后 starkli invoke [contract] claim_coin 使得 balance 变成 1。
最后 starkli invoke [contract] buy_incense [计算得到的amount]就能成功解决问题。

总结

这题很简单，主要是了解 felt252 的特性。实际开发中，涉及到数学运算，一般来说会用 u256 之类的整型来代替 felt252。