嗨嗨嗨嗨
这次aliyunCTF的Blockchain,考了三个知识点
如果您感兴趣,可以去aliyunCTF尝试一下,比赛结束后7天内,题目环境不会关闭哦
Public的function只有isSolved
和 b
isSolved
是本题目标,当 x == 2 && y == 4
时,解题成功。
速览 b
function
function b(
bytes32[] calldata leafs,
bytes32[][] calldata proofs,
uint256[] calldata indexs
) public {
require(leafs.length == proofs.length, "Greeter: length not equal");
require(leafs.length == indexs.length, "Greeter: length not equal");
for (uint256 i = 0; i < leafs.length; i++) {
require(
verify(proofs[i], leafs[i], indexs[i]),
"Greeter: proof invalid"
);
require(used_leafs[leafs[i]] == false, "Greeter: leaf has be used");
used_leafs[leafs[i]] = true;
this.a(i, y);
y++;
}
}
可知, 我们要传入4片leafs
叶子 && 4根proofs
树枝。
4片叶子不能有重复,且只有验证都通过,才能让 y == 4
题目已经给出了3片叶子
0x81376b9868b292a46a1c486d344e427a3088657fda629b5f4a647822d329cd6a
0x28cac318a86c8a0a6a9156c2dba2c8c2363677ba0514ef616592d81557e679b6
0x804cd8981ad63027eb1d4a7e3ac449d0685f3660d6d8b1288eb12d345ca2331d
还不够,还需要another one.
看一下叶子的verify函数