The challenge gives a TCP port connected with netcat to get connection information and that checks the Setup contract and gives the flag if the isSolved() function returns true. The other adress given is a gateway to connect to the blockchain.
```1 - Connection information2 - Restart Instance3 - Get flagaction?```
This challenge gives these two contracts:
```solidity# Setup.solpragma solidity ^0.8.18;
import {Unknown} from "./Unknown.sol";
contract Setup {    Unknown public immutable TARGET;
    constructor() {        TARGET = new Unknown();    }
    function isSolved() public view returns (bool) {        return TARGET.updated();    }}```
```solidity# Unknown.solpragma solidity ^0.8.18;
contract Unknown {     bool public updated;
    function updateSensors(uint256 version) external {        if (version == 10) {            updated = true;        }    }
}```
So the solution is simple, call the function `updateSensors(10)`. The problem is how to interact with the blockchain. The following script using web3py does that.
```pythonfrom web3 import Web3from solcx import compile_source, install_solc
# installs solc compiler, necessary only for first executioninstall_solc("0.8.18")
# compiles source code to get the contract abiwith open("Unknown.sol", "rt") as fp:    src = fp.read()compiled = compile_source(src, output_values=["abi"])contract_id, contract_interface = compiled.popitem()abi = contract_interface['abi']
# contract adress (given in the tcp interface)target = '0x612DC3AebddE1E9CBc1a608a0E126F54c5988376'
w3 = Web3(Web3.HTTPProvider("http://104.248.169.177:32181")) # blockchain gateway from tcp interfacecontract = w3.eth.contract(address=target, abi=abi)contract.functions.updateSensors(10).transact() # calls update sensor with value of 10```
The tcp inteface then gives the flag: `FLAG=HTB{9P5_50FtW4R3_UPd4t3D}`