// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.0; contract TxOriginBank { address public teller; mapping(address => int256) public balances; constructor() { teller = tx.origin; } function withdraw(address addr, int256 amount) public { require(tx.origin == teller, "Not a teller"); balances[addr] -= amount; require(balances[addr] >= 0, "Insufficient balance"); } function getBalance(address addr) public view returns (int256) { return balances[addr]; } }