public AccountAdapter getFrom(final DataFetchingEnvironment environment) {
    final BlockchainQueries query = getBlockchainQueries(environment);
    final Long blockNumber =
        Optional.<Long>ofNullable(environment.getArgument("block"))
            .or(transactionWithMetadata::getBlockNumber)
            .orElseGet(query::headBlockNumber);

    final Address addr = transactionWithMetadata.getTransaction().getSender();
    return query
        .getAndMapWorldState(
            blockNumber,
            mutableWorldState -> Optional.of(new AccountAdapter(mutableWorldState.get(addr))))
        .orElse(new EmptyAccountAdapter(addr));
  }
Retrieves the sender of the transaction.

<p>This method uses the BlockchainQueries to get the block number and then retrieves the sender
of the transaction. It then uses the getAndMapWorldState method to get the state of the
sender's account at the given block number.

@param environment the data fetching environment.
@return an AccountAdapter object representing the sender's account state at the given block
    number.
ethereum/api/src/main/java/org/hyperledger/besu/ethereum/api/graphql/internal/pojoadapter/TransactionAdapter.java