33 lines
1.1 KiB
Solidity
33 lines
1.1 KiB
Solidity
|
// SPDX-License-Identifier: MIT
|
||
|
pragma solidity ^0.8.0;
|
||
|
|
||
|
contract PolkadotCTF {
|
||
|
address public winner;
|
||
|
|
||
|
event FlagCaptured(address indexed player);
|
||
|
|
||
|
// Encoded parts of the flag as byte arrays
|
||
|
bytes private part1 = hex"50437b497354686973";
|
||
|
bytes private part2 = hex"546865466c61674f72";
|
||
|
bytes private part3 = hex"644e6f747d";
|
||
|
|
||
|
// Function to decode the parts and get the full flag
|
||
|
function decodeFlag() public view returns (string memory) {
|
||
|
return string(abi.encodePacked(part1, part2, part3));
|
||
|
}
|
||
|
|
||
|
// Function to capture the flag
|
||
|
function captureFlag(string memory _solution) public {
|
||
|
string memory decodedFlag = decodeFlag();
|
||
|
require(keccak256(abi.encodePacked(_solution)) == keccak256(abi.encodePacked(decodedFlag)), "Incorrect solution");
|
||
|
winner = msg.sender;
|
||
|
emit FlagCaptured(msg.sender);
|
||
|
}
|
||
|
|
||
|
// Function to get the flag
|
||
|
function getFlag() public view returns (string memory) {
|
||
|
require(msg.sender == winner, "You are not the winner");
|
||
|
return decodeFlag();
|
||
|
}
|
||
|
}
|