code: function queryFirstTrustMEBallOnMainChainByRoundIndex( oConn, nRoundIndex, pfnCallback )
  {
  	if ( ! oConn )
  	{
  		return pfnCallback( `call queryFirstTrustMEBallOnMainChainByRoundIndex with invalid oConn` );
  	}
  	if ( 'number' !== typeof nRoundIndex )
  	{
  		return pfnCallback( `call queryFirstTrustMEBallOnMainChainByRoundIndex with invalid nRoundIndex, must be a number` );
  	}
  	if ( nRoundIndex <= 0 )
  	{
  		return pfnCallback( `call queryFirstTrustMEBallOnMainChainByRoundIndex with invalid nRoundIndex, must be greater than zero.` );
  	}
  
  	//	...
  	oConn.query
  	(
  		"SELECT ball \
  		FROM balls JOIN units USING(unit) \
  		WHERE units.round_index = ? AND units.is_stable=1 AND units.is_on_main_chain=1 AND units.sequence='good' AND units.pow_type=? \
  		ORDER BY units.main_chain_index ASC \
  		LIMIT 1",
  		[
  			nRoundIndex,
  			constants.POW_TYPE_TRUSTME
  		],
  		function( arrRows )
  		{
  			if ( 1 !== arrRows.length )
  			{
  				return pfnCallback( `Can not find a suitable ball for calculation pow.` );
  			}
  
  			//	...
  			return pfnCallback( null, arrRows[ 0 ][ 'ball' ] );
  		}
  	);
  }
docs: coinbase end 
  obtain ball address of the first TrustME unit
  
  @param	{handle}	oConn
  @param	{function}	oConn.query
  @param	{number}	nRoundIndex
  @param	{function}	pfnCallback( err, arrCoinBaseList )