function __callback(bytes32 _queryId, string _result, bytes proof) public {
        if (msg.sender != oraclize_cbAddress()) {
            LogReceiveQuery(_queryId, 0, 0, QueryResultCode.INVALID_QUERY);
            return;
        }

        QueryInfo storage info = queries[_queryId];
        if (info.sender == 0x0) {
            LogReceiveQuery(_queryId, info.requestId, 0, QueryResultCode.INVALID_QUERY);
            return;
        }

        uint256 amount = 0;
        bytes32 referCodeHash = 0;
        (amount, referCodeHash) = extractBTHAmount(_result);
        CrossForkCallback crossfork = CrossForkCallback(info.sender);
        crossfork.callbackCrossFork(info.requestId, amount, referCodeHash);
        LogReceiveQuery(_queryId, info.requestId, amount, QueryResultCode.SUCCESS);
    }