Пример #1
0
price operator/(const asset &base, const asset &quote) {
    try {
        FC_ASSERT(base.symbol_name() != quote.symbol_name());
        return price{base, quote};
    }
    FC_CAPTURE_AND_RETHROW((base)(quote))
}
Пример #2
0
asset operator*(const asset &a, const price &b) {
    if (a.symbol_name() == b.base.symbol_name()) {
        FC_ASSERT(b.base.amount.value > 0);
        uint128_t result =
            (uint128_t(a.amount.value) * b.quote.amount.value) /
            b.base.amount.value;
        FC_ASSERT(result.hi == 0);
        return asset(result.to_uint64(), b.quote.symbol);
    } else if (a.symbol_name() == b.quote.symbol_name()) {
        FC_ASSERT(b.quote.amount.value > 0);
        uint128_t result =
            (uint128_t(a.amount.value) * b.base.amount.value) /
            b.quote.amount.value;
        FC_ASSERT(result.hi == 0);
        return asset(result.to_uint64(), b.base.symbol);
    }
    FC_THROW_EXCEPTION(fc::assert_exception, "invalid asset * price", ("asset", a)("price", b));
}
Пример #3
0
 asset operator * ( const asset& a, const price& b )
 {
    if( a.symbol_name() == b.base.symbol_name() )
    {
       FC_ASSERT( b.base.amount.value > 0 );
       uint128_t result = (uint128_t(a.amount.value) * b.quote.amount.value)/b.base.amount.value;
       FC_ASSERT( result <= uint64_t(-1) );
       return asset( result.to_uint64(), b.quote.symbol );
    }
    else if( a.symbol_name() == b.quote.symbol_name() )
    {
       FC_ASSERT( b.quote.amount.value > 0 );
       uint128_t result = (uint128_t(a.amount.value) * b.base.amount.value)/b.quote.amount.value;
       //FC_ASSERT( result <= STEEMIT_MAX_SHARE_SUPPLY, "${result}", ("result",result)("max",STEEMIT_MAX_SHARE_SUPPLY)("asset",a)("price",b) );
       FC_ASSERT( result <= uint64_t(-1) );
       return asset( result.to_uint64(), b.base.symbol );
    }
    FC_THROW_EXCEPTION( fc::assert_exception, "invalid asset * price", ("asset",a)("price",b) );
 }