Holesky Testnet

Contract

0xBb27010Dd7293Fb46A947D6a49FAf03812DfecA0

Overview

ETH Balance

0 ETH

Multichain Info

N/A
Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

Advanced mode:
Parent Transaction Hash Block
From
To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Vyper_contract

Compiler Version
vyper:0.3.0

Optimization Enabled:
N/A

Other Settings:
default evmVersion, None license

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

Contract ABI

[{"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}]

61bbbb60065561aaaa60075561cccc60085560016009556002600a556105d256600436101561000d576103fa565b60046000601c37600051346105ad57639ff93be781141561003557600b546105ad5733600b55005b63c813b7ba811415610098576004358060a01c6105ad57809050610140526000600d600b5460e05260c052604060c020556000600d600160e05260c052604060c020556000600d600260e05260c052604060c0205561014051600b556000600c55005b633e22652181141561011f576004358060a01c6105ad57809050610360526000546105ad5760016000556009543314156100d35760016100ee565b602435610140526100e56103a061047a565b6103a051600654145b156105ad5743600c54116105ad576103605161014052336101605260243561018052610118610400565b6000600055005b63acf54dff8114156101a6576004358060a01c6105ad57809050610360526001546105ad576001600155600a5433141561015a576001610175565b6024356101405261016c6103a061047a565b6103a051600754145b156105ad5743600c54116105ad57610360516101405233610160526024356101805261019f610400565b6000600155005b6330424edb81141561022d576004358060a01c6105ad57809050610360526002546105ad576001600255600b543314156101e15760016101fc565b602435610140526101f36103a061047a565b6103a051600854145b156105ad5743600c54116105ad576103605161014052336101605260243561018052610226610400565b6000600255005b63f05dacd68114156102815760243560013360043581818301106105ad57808201905090507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156105ad5702600e0155005b6364d98f6e8114156102ad57617530600d600b5460e05260c052604060c0205414610140526020610140f35b635685764281141561035a576101408060208082528083018060038082602082540161012060006003818352015b826101205160200211156102ee5761030f565b610120518501546101205160200285015281516001018083528114156102db575b5050505050508051806020830101818260206001820306601f8201039050033682375050805160200160206001820306601f8201039050905090508101905080905090509050610140f35b63e12ed13c81141561037457600c54610140526020610140f35b63d3d9a7f18114156103af576004358060a01c6105ad5780905061014052600d6101405160e05260c052604060c02054610160526020610160f35b63798bf9d28114156103f85760016004357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156105ad5702600e0154610140526020610140f35b505b60006000fd5b600d6101405160e05260c052604060c020805461271081818301106105ad578082019050905081555060006101a0526101a08051602001806101c08284600060045af1156105ad575050600060006101c0516101e06000610160515af1156105ad5743600181818301106105ad5780820190509050600c55565b602060206020602082066102e0016101405160406020820661026001600354828401116105ad57600160208404016003016102806020840161012060006002818352015b826101205160200211156104d1576104f2565b610120518501546101205160200285015281516001018083528114156104be575b50505050508181528090509050905051828401116105ad57604080610300826020602088068803016101405160406020820661026001600354828401116105ad57600160208404016003016102806020840161012060006002818352015b8261012051602002111561056357610584565b61012051850154610120516020028501528151600101808352811415610550575b50505050508181528090509050905001600060045af15050818152809050905090500151815250565b600080fd5b6100206105d2036100206000396100206105d2036000f3

Deployed Bytecode

0x600436101561000d576103fa565b60046000601c37600051346105ad57639ff93be781141561003557600b546105ad5733600b55005b63c813b7ba811415610098576004358060a01c6105ad57809050610140526000600d600b5460e05260c052604060c020556000600d600160e05260c052604060c020556000600d600260e05260c052604060c0205561014051600b556000600c55005b633e22652181141561011f576004358060a01c6105ad57809050610360526000546105ad5760016000556009543314156100d35760016100ee565b602435610140526100e56103a061047a565b6103a051600654145b156105ad5743600c54116105ad576103605161014052336101605260243561018052610118610400565b6000600055005b63acf54dff8114156101a6576004358060a01c6105ad57809050610360526001546105ad576001600155600a5433141561015a576001610175565b6024356101405261016c6103a061047a565b6103a051600754145b156105ad5743600c54116105ad57610360516101405233610160526024356101805261019f610400565b6000600155005b6330424edb81141561022d576004358060a01c6105ad57809050610360526002546105ad576001600255600b543314156101e15760016101fc565b602435610140526101f36103a061047a565b6103a051600854145b156105ad5743600c54116105ad576103605161014052336101605260243561018052610226610400565b6000600255005b63f05dacd68114156102815760243560013360043581818301106105ad57808201905090507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156105ad5702600e0155005b6364d98f6e8114156102ad57617530600d600b5460e05260c052604060c0205414610140526020610140f35b635685764281141561035a576101408060208082528083018060038082602082540161012060006003818352015b826101205160200211156102ee5761030f565b610120518501546101205160200285015281516001018083528114156102db575b5050505050508051806020830101818260206001820306601f8201039050033682375050805160200160206001820306601f8201039050905090508101905080905090509050610140f35b63e12ed13c81141561037457600c54610140526020610140f35b63d3d9a7f18114156103af576004358060a01c6105ad5780905061014052600d6101405160e05260c052604060c02054610160526020610160f35b63798bf9d28114156103f85760016004357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156105ad5702600e0154610140526020610140f35b505b60006000fd5b600d6101405160e05260c052604060c020805461271081818301106105ad578082019050905081555060006101a0526101a08051602001806101c08284600060045af1156105ad575050600060006101c0516101e06000610160515af1156105ad5743600181818301106105ad5780820190509050600c55565b602060206020602082066102e0016101405160406020820661026001600354828401116105ad57600160208404016003016102806020840161012060006002818352015b826101205160200211156104d1576104f2565b610120518501546101205160200285015281516001018083528114156104be575b50505050508181528090509050905051828401116105ad57604080610300826020602088068803016101405160406020820661026001600354828401116105ad57600160208404016003016102806020840161012060006002818352015b8261012051602002111561056357610584565b61012051850154610120516020028501528151600101808352811415610550575b50505050508181528090509050905001600060045af15050818152809050905090500151815250565b600080fd

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits

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.