Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
Multichain Info
N/A
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Vyper_contract
Compiler Version
vyper:0.3.0
Contract Source Code (Vyper language format)
# @version 0.3.0 """This is the succession CTF -----------------------------------------=----==---------------------------------------------- ---------------------------------==+=+*##%%%%%**%%%#*=---------------------------------------- ---------------------------------=%@@@@@@@@@@@@@@@@@@@@@%++==--------------------------------- --------------------------------=*%@@@@@@@@@@@@@@@@@@@@@@@@@%#*#==----=----------------------- ------------------------------=-+@@@@@@%%@@@@@@@@@@%%%%@@@@@@@@@@@@@#+------------------------ -------------------------------=*@@%%%%%@@%@@@@@%%%@@%@%%@@@@@@@@@@@@%#=-=-----------=-=------ ----------------------------===*%%##%%%%@%@@@@@@@@@@@@@%%%@@@@@@@@@@@@@%+==------------------- -----------------------------=+#%%%%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*-=-------==--------- ---------------------------==#%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@#---=--------------- ---------------------------=+%@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@%#=---=----==------- ------------------------==**%@@@@@@@@@@@@@@@@@@@@@@@@@%@@@@@@@@@@@@@@@@@@@@#----=-=-====-----= -------------------------=+#%@@@@@@@@@@@@@@@@@@@%%@%%%%%%%@%@@@@@@@@@@@@@@%%------==------=--= -------------------------+%%%%%@@@@@@@@@@@@%@@%%%@%%%%%%%@@@@%%@@@@@@@@@@%%%%%%%%%%%%%##**++== -----------------------=-*%%@@@%%%%%%@@@@@@@@@@@@@%%%%%%%%@@%@@%%@@@@@@%@@%##%%%%%%%%%%%%%%%%% -----------------------==#%%%@@@@@%%@@@@@@@%%%%%%%%%#####%@@@@@#%%%%##%%%%%##%%%%%%%%%%%%%%%%% ------------------------=*%%%@@@@@%@@@%%%%#%@@@@@%%%%%%%%%@@@@@%%%####+**#%%#%%%%%%%%%%%%%%%%% -------------------------+@@%%%%%%%##%@@@@@@#***#%%%%%%%%@%%%%%#@@@%%*++++*#%#%%%%%%%%%%%%%%%% -------------------------#%**#%#*+#%=++#***+****+*####%%%%%%#*#%*+++=++++=+*##%############### ------------------------+**#**+===*#+----==+***##+****#%%%%%##*****-+=:-=+#+*##########%%#%%%% -------------------------=***=---=*%*=-:--:::-=+*****%%%%%%%%#%##*++-:--:-*%*######%%%%%%%%%%% --------------------------+::::--+%@%*+---=++==-=--==*#%%%%#%###*++-:-==-:=-*##%%%%%%%%%%%%%%% --------------------------=*****+%@%%#*++=++**#%%%%@%%%%%#****++==+-::--++--###%%%%%%%%%%%%%%% --------------------------+#****%@@%%###*****##%%%%%%%%#%#***++=++=+::--#+#+##############%%%% --------------------------*##**#%@@%%%##***#%%@%%%%###*#####***#*+==:+##==**###########*****## --------------------------+#**#%@@@@%%@%%+#%%@@@%#****#%%####%%%#**-####*#=+############****** --------------------------=++*%####*****##%#%%%%%###%%%##%%#%%%%##=*%%%%*--=###############*** ---------------------------**%#+*++=:::=-=@%*#%#%%%%%%%%%%#%%%%%#*@%%%#+--++################## ----------------------=-=-=##%%%*+=*#%@@@@@@%**#%############%%#*#*##*=--=*###****############ -------------=++*=-=-------#%@@@%%%%@@@@@@@@@@@+**##%%#*+*####*+%+-:--+-.:*************####### ----------#@@@@@@@@@@@@@@@@@@@@@@@+=+++*#%%%%@@@@*#%%%##*+***+=%#---=*=...:+**************#### --------=@@@@@@@@@@@@@@@@@%@@@@@@@@+-++++==--=*%%%%%####***+=#%#---+*+...:::::+****+==++++==-: ------:@@@@@@@@@@@@%#@@@@@%@@@@@@@@%+*#**+++++++*%%##***++=+%%#--=*+=::::::::::::-:::::::::::: -----+@@@%*##@@@@%@%%%@@@@@#@@@%%%%#*+**+++****####*++=+=+#%%+-+=*@@::::::::::-:::::::::::::-- ----%@@@@%#+-=**%@%%++%@%%%*%@@%%%#=.-*%%%%@@@@@@%%*=+*++%%#===+*%%::::::::----::::::::::::--- ---@@@%%%#*=-::*#%%%*:#%%##-#@%#**+.:.:.:*%@@%%%@@%+=#**##===*+*@+:::::::-------::::::::::---- -=@@%%%%#+===:--**++-.-*###:#%%#-:-+*++:...:-*%@%%%+#*++==+*++%@+:-::-:---------::::::::------ %@@%%%*+++==--:=+++=::=#*+=.=%%#=-==+*#*##=:...:+*+++==+*%@@@@@=:--:---:-------.::::::-------- @@%%+*+*+======+=+=--:-***=::-=====++***#*###%#=...-##@@@@@@@@%:----::------:.::::::---------- %#+=.##*++=====#---==-==*=======++++++*+++***++=--#--@@@@@@@@%:-----------:.::-:::::-----::--: @#--=+++++=-=++============-:----==========--:::*#@@+=@@@@@@@-------------:::-:::---=-:::..::: %#*+--::==+++++++======--------::::::::#+:::::+%@@@@@:%@@@@@#-------------:::::::---:.....::.. #**++*--:.===+=====-----------::::::-:=#+=:.=*=+@@@@@@.@@@@@:---------------:::::-:......:::.. #**+++++-::::----------------:::::::::##:.-===+++=*@@@:*@@@----------------::::--:......::.... *+++++===--::-:===-=-------::::::-:::.#=..=+=-::--...@@.@@*:---------:-----::::--:.....:::...: *+==---------::.:-==----------:::-::..#....::::---:....:@@:---------------.:::---......:...:-: **++++==------==:.:=-------------:::..*...-:-::::::..--+::---------------.::::-:::....::::::-- **+++==------===---..-----------:::...+.:-:::..::::-==@@#---------------:::::-:::....::::::::- **++=-=-=---=====---:.:--------:::...-=:+:::...:::::@@@@---------------:::::---::....::...::-- +++=:.=------=--------:.------:::...=:--.:....::::*@@@@-:--------------:::-:--::.........::--- =-:..==-------=--------:.:::::::...==:-+-=:::::-%#@@@@#:--------------:::::-::::.......:::--:- :::.------------=--=----:..::::...=+-:=:-:-::=@@@@@@@@---------------::::-----:::.....::::-::- Henry senior has setup a meeting with his three children: Marion, Anna and Henry junior. About to retire after a very successful business activity throughout his life, he has decided to retire and divide his 30,000 shares of the company giving his kids 10,000 shares each. For this, they just have to sign the document and receive their piece of the pie. But Henry Junior has other plans. He wants everything. Will he be able to get the full 30,000 shares of the company? """ accessor: public(Bytes[64]) siblingKeys: bytes32[3] siblingAddresses: address[3] currentBlock: public(uint256) siblingShares: public(HashMap[address, uint256]) restLayout: public(bytes32[115792089237316195423570985008687907853269984665640564039457584007913129639935]) MARION: constant(uint256) = 0 ANNA: constant(uint256) = 1 HENRY_JUNIOR: constant(uint256) = 2 TOTAL_SHARES: constant(uint256) = 30000 MARION_ADDRESS: constant(address) = 0x0000000000000000000000000000000000000001 ANNA_ADDRESS: constant(address) = 0x0000000000000000000000000000000000000002 ANNA_KEY: constant(bytes32) = 0x000000000000000000000000000000000000000000000000000000000000aaaa MARION_KEY: constant(bytes32) = 0x000000000000000000000000000000000000000000000000000000000000bbbb HENRY_JUNIOR_KEY: constant(bytes32) = 0x000000000000000000000000000000000000000000000000000000000000cccc @external def __init__(): self.siblingKeys[MARION] = MARION_KEY self.siblingKeys[ANNA] = ANNA_KEY self.siblingKeys[HENRY_JUNIOR] = HENRY_JUNIOR_KEY self.siblingAddresses[MARION] = MARION_ADDRESS self.siblingAddresses[ANNA] = ANNA_ADDRESS @external def initCTF(): assert self.siblingAddresses[HENRY_JUNIOR] == empty(address) self.siblingAddresses[HENRY_JUNIOR] = msg.sender @external def restartCTF(_henryJunior: address): self.siblingShares[self.siblingAddresses[HENRY_JUNIOR]] = 0 self.siblingShares[MARION_ADDRESS] = 0 self.siblingShares[ANNA_ADDRESS] = 0 self.siblingAddresses[HENRY_JUNIOR] = _henryJunior self.currentBlock = 0 @internal def _sign(receiver: address, sender: address, index: uint256): self.siblingShares[receiver] += 10000 raw_call(sender, b"", value=0) self.currentBlock = block.number + 1 @internal def _getKey(index: uint256) -> bytes32: return convert(slice(slice(self.accessor, index, 64), 32, 32), bytes32) @external @nonreentrant("sign") def signMarion(receiver: address, index: uint256): assert msg.sender == self.siblingAddresses[MARION] or self.siblingKeys[MARION] == self._getKey(index) assert self.currentBlock <= block.number self._sign(receiver, msg.sender, index) @external @nonreentrant("sign") def signAnna(receiver: address, index: uint256): assert msg.sender == self.siblingAddresses[ANNA] or self.siblingKeys[ANNA] == self._getKey(index) assert self.currentBlock <= block.number self._sign(receiver, msg.sender, index) @external @nonreentrant("sign") def signHenryJunior(receiver: address, index: uint256): assert msg.sender == self.siblingAddresses[HENRY_JUNIOR] or self.siblingKeys[HENRY_JUNIOR] == self._getKey(index) assert self.currentBlock <= block.number self._sign(receiver, msg.sender, index) @external def setKey(index: uint256, val: bytes32): self.restLayout[convert(msg.sender, uint256) + index] = val @external @view def isSolved() -> bool: return self.siblingShares[self.siblingAddresses[HENRY_JUNIOR]] == TOTAL_SHARES
[{"stateMutability":"nonpayable","type":"constructor","inputs":[],"outputs":[]},{"stateMutability":"nonpayable","type":"function","name":"initCTF","inputs":[],"outputs":[],"gas":37479},{"stateMutability":"nonpayable","type":"function","name":"restartCTF","inputs":[{"name":"_henryJunior","type":"address"}],"outputs":[],"gas":117939},{"stateMutability":"nonpayable","type":"function","name":"signMarion","inputs":[{"name":"receiver","type":"address"},{"name":"index","type":"uint256"}],"outputs":[],"gas":158544},{"stateMutability":"nonpayable","type":"function","name":"signAnna","inputs":[{"name":"receiver","type":"address"},{"name":"index","type":"uint256"}],"outputs":[],"gas":158574},{"stateMutability":"nonpayable","type":"function","name":"signHenryJunior","inputs":[{"name":"receiver","type":"address"},{"name":"index","type":"uint256"}],"outputs":[],"gas":158604},{"stateMutability":"nonpayable","type":"function","name":"setKey","inputs":[{"name":"index","type":"uint256"},{"name":"val","type":"bytes32"}],"outputs":[],"gas":35689},{"stateMutability":"view","type":"function","name":"isSolved","inputs":[],"outputs":[{"name":"","type":"bool"}],"gas":4924},{"stateMutability":"view","type":"function","name":"accessor","inputs":[],"outputs":[{"name":"","type":"bytes"}],"gas":13103},{"stateMutability":"view","type":"function","name":"currentBlock","inputs":[],"outputs":[{"name":"","type":"uint256"}],"gas":2766},{"stateMutability":"view","type":"function","name":"siblingShares","inputs":[{"name":"arg0","type":"address"}],"outputs":[{"name":"","type":"uint256"}],"gas":3068},{"stateMutability":"view","type":"function","name":"restLayout","inputs":[{"name":"arg0","type":"uint256"}],"outputs":[{"name":"","type":"bytes32"}],"gas":2871}]
Contract Creation Code
61bbbb60065561aaaa60075561cccc60085560016009556002600a556105d256600436101561000d576103fa565b60046000601c37600051346105ad57639ff93be781141561003557600b546105ad5733600b55005b63c813b7ba811415610098576004358060a01c6105ad57809050610140526000600d600b5460e05260c052604060c020556000600d600160e05260c052604060c020556000600d600260e05260c052604060c0205561014051600b556000600c55005b633e22652181141561011f576004358060a01c6105ad57809050610360526000546105ad5760016000556009543314156100d35760016100ee565b602435610140526100e56103a061047a565b6103a051600654145b156105ad5743600c54116105ad576103605161014052336101605260243561018052610118610400565b6000600055005b63acf54dff8114156101a6576004358060a01c6105ad57809050610360526001546105ad576001600155600a5433141561015a576001610175565b6024356101405261016c6103a061047a565b6103a051600754145b156105ad5743600c54116105ad57610360516101405233610160526024356101805261019f610400565b6000600155005b6330424edb81141561022d576004358060a01c6105ad57809050610360526002546105ad576001600255600b543314156101e15760016101fc565b602435610140526101f36103a061047a565b6103a051600854145b156105ad5743600c54116105ad576103605161014052336101605260243561018052610226610400565b6000600255005b63f05dacd68114156102815760243560013360043581818301106105ad57808201905090507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156105ad5702600e0155005b6364d98f6e8114156102ad57617530600d600b5460e05260c052604060c0205414610140526020610140f35b635685764281141561035a576101408060208082528083018060038082602082540161012060006003818352015b826101205160200211156102ee5761030f565b610120518501546101205160200285015281516001018083528114156102db575b5050505050508051806020830101818260206001820306601f8201039050033682375050805160200160206001820306601f8201039050905090508101905080905090509050610140f35b63e12ed13c81141561037457600c54610140526020610140f35b63d3d9a7f18114156103af576004358060a01c6105ad5780905061014052600d6101405160e05260c052604060c02054610160526020610160f35b63798bf9d28114156103f85760016004357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156105ad5702600e0154610140526020610140f35b505b60006000fd5b600d6101405160e05260c052604060c020805461271081818301106105ad578082019050905081555060006101a0526101a08051602001806101c08284600060045af1156105ad575050600060006101c0516101e06000610160515af1156105ad5743600181818301106105ad5780820190509050600c55565b602060206020602082066102e0016101405160406020820661026001600354828401116105ad57600160208404016003016102806020840161012060006002818352015b826101205160200211156104d1576104f2565b610120518501546101205160200285015281516001018083528114156104be575b50505050508181528090509050905051828401116105ad57604080610300826020602088068803016101405160406020820661026001600354828401116105ad57600160208404016003016102806020840161012060006002818352015b8261012051602002111561056357610584565b61012051850154610120516020028501528151600101808352811415610550575b50505050508181528090509050905001600060045af15050818152809050905090500151815250565b600080fd5b6100206105d2036100206000396100206105d2036000f3
Deployed Bytecode
0x600436101561000d576103fa565b60046000601c37600051346105ad57639ff93be781141561003557600b546105ad5733600b55005b63c813b7ba811415610098576004358060a01c6105ad57809050610140526000600d600b5460e05260c052604060c020556000600d600160e05260c052604060c020556000600d600260e05260c052604060c0205561014051600b556000600c55005b633e22652181141561011f576004358060a01c6105ad57809050610360526000546105ad5760016000556009543314156100d35760016100ee565b602435610140526100e56103a061047a565b6103a051600654145b156105ad5743600c54116105ad576103605161014052336101605260243561018052610118610400565b6000600055005b63acf54dff8114156101a6576004358060a01c6105ad57809050610360526001546105ad576001600155600a5433141561015a576001610175565b6024356101405261016c6103a061047a565b6103a051600754145b156105ad5743600c54116105ad57610360516101405233610160526024356101805261019f610400565b6000600155005b6330424edb81141561022d576004358060a01c6105ad57809050610360526002546105ad576001600255600b543314156101e15760016101fc565b602435610140526101f36103a061047a565b6103a051600854145b156105ad5743600c54116105ad576103605161014052336101605260243561018052610226610400565b6000600255005b63f05dacd68114156102815760243560013360043581818301106105ad57808201905090507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156105ad5702600e0155005b6364d98f6e8114156102ad57617530600d600b5460e05260c052604060c0205414610140526020610140f35b635685764281141561035a576101408060208082528083018060038082602082540161012060006003818352015b826101205160200211156102ee5761030f565b610120518501546101205160200285015281516001018083528114156102db575b5050505050508051806020830101818260206001820306601f8201039050033682375050805160200160206001820306601f8201039050905090508101905080905090509050610140f35b63e12ed13c81141561037457600c54610140526020610140f35b63d3d9a7f18114156103af576004358060a01c6105ad5780905061014052600d6101405160e05260c052604060c02054610160526020610160f35b63798bf9d28114156103f85760016004357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156105ad5702600e0154610140526020610140f35b505b60006000fd5b600d6101405160e05260c052604060c020805461271081818301106105ad578082019050905081555060006101a0526101a08051602001806101c08284600060045af1156105ad575050600060006101c0516101e06000610160515af1156105ad5743600181818301106105ad5780820190509050600c55565b602060206020602082066102e0016101405160406020820661026001600354828401116105ad57600160208404016003016102806020840161012060006002818352015b826101205160200211156104d1576104f2565b610120518501546101205160200285015281516001018083528114156104be575b50505050508181528090509050905051828401116105ad57604080610300826020602088068803016101405160406020820661026001600354828401116105ad57600160208404016003016102806020840161012060006002818352015b8261012051602002111561056357610584565b61012051850154610120516020028501528151600101808352811415610550575b50505050508181528090509050905001600060045af15050818152809050905090500151815250565b600080fd
Loading...
Loading
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.