class BridgeSupport {

    public void releaseUld(Transaction uscTx) throws IOException {

        //as we can't send uld from contracts we want to send them back to the sender
        if (BridgeUtils.isContractTx(uscTx)) {
            logger.trace("Contract {} tried to release funds. Release is just allowed from standard accounts.", uscTx);
            throw new Program.OutOfGasException("Contract calling releaseULD");
        }

        Context.propagate(uldContext);
        NetworkParameters uldParams = bridgeConstants.getUldParams();
        Address uldDestinationAddress = BridgeUtils.recoverUldAddressFromEthTransaction(uscTx, uldParams);
        Coin value = uscTx.getValue().toUlord();
        boolean addResult = requestRelease(uldDestinationAddress, value);

        if (addResult) {
            logger.info("releaseUld succesful to {}. Tx {}. Value {}.", uldDestinationAddress, uscTx, value);
        } else {
            logger.warn("releaseUld ignored because value is considered dust. To {}. Tx {}. Value {}.", uldDestinationAddress, uscTx, value);
        }
    }

    public  BridgeSupport(
            UscSystemProperties config,
            Repository repository,
            BridgeEventLogger eventLogger,
            BridgeConstants bridgeConstants,
            BridgeStorageProvider provider,
            UldBlockstoreWithCache uldBlockStore,
            UldBlockChain uldBlockChain,
            Block executionBlock);
    public  BridgeSupport(
            UscSystemProperties config,
            Repository repository,
            BridgeEventLogger eventLogger,
            UscAddress contractAddress,
            Block uscExecutionBlock);
    public  BridgeSupport(
            UscSystemProperties config,
            Repository repository,
            BridgeEventLogger eventLogger,
            BridgeStorageProvider provider,
            Block uscExecutionBlock);
    private  BridgeSupport(
            Repository repository,
            BridgeStorageProvider provider,
            Block executionBlock,
            UscSystemProperties config,
            BridgeConstants bridgeConstants,
            BridgeEventLogger eventLogger,
            Context uldContext,
            UldBlockstoreWithCache uldBlockStore,
            UldBlockChain uldBlockChain);
    public  BridgeSupport(
            Repository repository,
            BridgeStorageProvider provider,
            Block executionBlock,
            UscSystemProperties config,
            BridgeConstants bridgeConstants,
            BridgeEventLogger eventLogger,
            Context uldContext,
            FederationSupport federationSupport,
            UldBlockstoreWithCache uldBlockStore,
            UldBlockChain uldBlockChain);

}