Fix broken update_mia test
This commit is contained in:
parent
19f1e04986
commit
626b5cbb23
4 changed files with 22 additions and 20 deletions
|
|
@ -122,7 +122,9 @@ namespace graphene { namespace chain {
|
||||||
{ try {
|
{ try {
|
||||||
if( !settlement_price.is_null() )
|
if( !settlement_price.is_null() )
|
||||||
settlement_price.validate();
|
settlement_price.validate();
|
||||||
FC_ASSERT( maximum_short_squeeze_ratio >= 1000 );
|
FC_ASSERT( maximum_short_squeeze_ratio >= GRAPHENE_MIN_COLLATERAL_RATIO );
|
||||||
|
FC_ASSERT( maximum_short_squeeze_ratio <= GRAPHENE_MAX_COLLATERAL_RATIO );
|
||||||
|
FC_ASSERT( maintenance_collateral_ratio >= GRAPHENE_MIN_COLLATERAL_RATIO );
|
||||||
FC_ASSERT( maintenance_collateral_ratio <= maximum_short_squeeze_ratio );
|
FC_ASSERT( maintenance_collateral_ratio <= maximum_short_squeeze_ratio );
|
||||||
} FC_CAPTURE_AND_RETHROW( (*this) ) }
|
} FC_CAPTURE_AND_RETHROW( (*this) ) }
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -61,9 +61,10 @@
|
||||||
#define GRAPHENE_DEFAULT_MAX_ASSET_WHITELIST_AUTHORITIES 10
|
#define GRAPHENE_DEFAULT_MAX_ASSET_WHITELIST_AUTHORITIES 10
|
||||||
#define GRAPHENE_DEFAULT_MAX_ASSET_FEED_PUBLISHERS 10
|
#define GRAPHENE_DEFAULT_MAX_ASSET_FEED_PUBLISHERS 10
|
||||||
|
|
||||||
|
// These are NOT percentages
|
||||||
#define GRAPHENE_MIN_COLLATERAL_RATIO 1001 // lower than this could result in divide by 0
|
#define GRAPHENE_MIN_COLLATERAL_RATIO 1001 // lower than this could result in divide by 0
|
||||||
#define GRAPHENE_MAX_COLLATERAL_RATIO 32000 // higher than this is unnecessary and may exceed int16 storage
|
#define GRAPHENE_MAX_COLLATERAL_RATIO 32000 // higher than this is unnecessary and may exceed int16 storage
|
||||||
#define GRAPHENE_DEFAULT_MAINTENANCE_COLLATERAL_RATIO 1500 // We require collateral of 1.5x or more
|
#define GRAPHENE_DEFAULT_MAINTENANCE_COLLATERAL_RATIO 1500 // We require collateral of 1.5x or more
|
||||||
#define GRAPHENE_DEFAULT_MAX_SHORT_SQUEEZE_RATIO 1750 // If there is a squeeze you are protected up to 1.75x... but black swan could occur first
|
#define GRAPHENE_DEFAULT_MAX_SHORT_SQUEEZE_RATIO 1750 // If there is a squeeze you are protected up to 1.75x... but black swan could occur first
|
||||||
#define GRAPHENE_DEFAULT_MARGIN_PERIOD_SEC (30*60*60*24)
|
#define GRAPHENE_DEFAULT_MARGIN_PERIOD_SEC (30*60*60*24)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@ BOOST_AUTO_TEST_CASE( feed_limit_logic_test )
|
||||||
try {
|
try {
|
||||||
asset usd(100,1);
|
asset usd(100,1);
|
||||||
asset core(100,0);
|
asset core(100,0);
|
||||||
price_feed feed;
|
price_feed feed;
|
||||||
feed.settlement_price = usd / core;
|
feed.settlement_price = usd / core;
|
||||||
|
|
||||||
FC_ASSERT( usd * feed.settlement_price < usd * feed.maintenance_price() );
|
FC_ASSERT( usd * feed.settlement_price < usd * feed.maintenance_price() );
|
||||||
|
|
@ -56,7 +56,7 @@ BOOST_AUTO_TEST_CASE( feed_limit_logic_test )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
BOOST_AUTO_TEST_CASE( call_order_update_test )
|
BOOST_AUTO_TEST_CASE( call_order_update_test )
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
ACTORS((dan)(sam));
|
ACTORS((dan)(sam));
|
||||||
const auto& bitusd = create_bitasset("BITUSD");
|
const auto& bitusd = create_bitasset("BITUSD");
|
||||||
|
|
@ -70,7 +70,7 @@ BOOST_AUTO_TEST_CASE( call_order_update_test )
|
||||||
|
|
||||||
FC_ASSERT( bitusd.bitasset_data(db).current_feed.settlement_price == current_feed.settlement_price );
|
FC_ASSERT( bitusd.bitasset_data(db).current_feed.settlement_price == current_feed.settlement_price );
|
||||||
|
|
||||||
auto default_call_price = ~price::call_price( bitusd.amount(5000), asset(5000), 1750);
|
auto default_call_price = ~price::call_price( bitusd.amount(5000), asset(5000), 1750);
|
||||||
|
|
||||||
BOOST_TEST_MESSAGE( "attempting to borrow using 2x collateral at 1:1 price now that there is a valid order" );
|
BOOST_TEST_MESSAGE( "attempting to borrow using 2x collateral at 1:1 price now that there is a valid order" );
|
||||||
borrow( dan, bitusd.amount(5000), asset(10000), default_call_price );
|
borrow( dan, bitusd.amount(5000), asset(10000), default_call_price );
|
||||||
|
|
@ -94,7 +94,7 @@ BOOST_AUTO_TEST_CASE( call_order_update_test )
|
||||||
BOOST_REQUIRE_EQUAL( get_balance( dan, bitusd ), 5000 );
|
BOOST_REQUIRE_EQUAL( get_balance( dan, bitusd ), 5000 );
|
||||||
BOOST_REQUIRE_EQUAL( get_balance( dan, core ), 10000000 - 10000 );
|
BOOST_REQUIRE_EQUAL( get_balance( dan, core ), 10000000 - 10000 );
|
||||||
|
|
||||||
|
|
||||||
// test just increasing collateral
|
// test just increasing collateral
|
||||||
BOOST_TEST_MESSAGE( "increasing collateral" );
|
BOOST_TEST_MESSAGE( "increasing collateral" );
|
||||||
borrow( dan, bitusd.amount(0), asset(10000), default_call_price );
|
borrow( dan, bitusd.amount(0), asset(10000), default_call_price );
|
||||||
|
|
@ -123,11 +123,11 @@ BOOST_AUTO_TEST_CASE( call_order_update_test )
|
||||||
cover( dan, bitusd.amount(0), asset(1000), default_call_price );
|
cover( dan, bitusd.amount(0), asset(1000), default_call_price );
|
||||||
|
|
||||||
BOOST_TEST_MESSAGE( "attempting change call price without changing debt/collateral ratio" );
|
BOOST_TEST_MESSAGE( "attempting change call price without changing debt/collateral ratio" );
|
||||||
default_call_price = ~price::call_price( bitusd.amount(100), asset(50), 1750);
|
default_call_price = ~price::call_price( bitusd.amount(100), asset(50), 1750);
|
||||||
cover( dan, bitusd.amount(0), asset(0), default_call_price );
|
cover( dan, bitusd.amount(0), asset(0), default_call_price );
|
||||||
|
|
||||||
BOOST_TEST_MESSAGE( "attempting change call price to be below minimum for debt/collateral ratio" );
|
BOOST_TEST_MESSAGE( "attempting change call price to be below minimum for debt/collateral ratio" );
|
||||||
default_call_price = ~price::call_price( bitusd.amount(100), asset(500), 1750);
|
default_call_price = ~price::call_price( bitusd.amount(100), asset(500), 1750);
|
||||||
BOOST_REQUIRE_THROW( cover( dan, bitusd.amount(0), asset(0), default_call_price ), fc::exception );
|
BOOST_REQUIRE_THROW( cover( dan, bitusd.amount(0), asset(0), default_call_price ), fc::exception );
|
||||||
|
|
||||||
} catch (fc::exception& e) {
|
} catch (fc::exception& e) {
|
||||||
|
|
@ -143,10 +143,10 @@ BOOST_AUTO_TEST_CASE( call_order_update_test )
|
||||||
* A margin call can happen in the following situation:
|
* A margin call can happen in the following situation:
|
||||||
* 0. there exists a bid above the mas short squeeze price
|
* 0. there exists a bid above the mas short squeeze price
|
||||||
* 1. highest bid is lower than the call price of an order
|
* 1. highest bid is lower than the call price of an order
|
||||||
* 2. the asset is not a prediction market
|
* 2. the asset is not a prediction market
|
||||||
* 3. there is a valid price feed
|
* 3. there is a valid price feed
|
||||||
*
|
*
|
||||||
* This test creates two scenarios:
|
* This test creates two scenarios:
|
||||||
* a) when the bids are above the short squeese limit (should execute)
|
* a) when the bids are above the short squeese limit (should execute)
|
||||||
* b) when the bids are below the short squeeze limit (should not execute)
|
* b) when the bids are below the short squeeze limit (should not execute)
|
||||||
*/
|
*/
|
||||||
|
|
@ -164,14 +164,14 @@ BOOST_AUTO_TEST_CASE( margin_call_limit_test )
|
||||||
transfer(genesis_account, borrower2_id, asset(init_balance));
|
transfer(genesis_account, borrower2_id, asset(init_balance));
|
||||||
update_feed_producers( bitusd, {feedproducer.id} );
|
update_feed_producers( bitusd, {feedproducer.id} );
|
||||||
|
|
||||||
price_feed current_feed;
|
price_feed current_feed;
|
||||||
current_feed.settlement_price = bitusd.amount( 100 ) / core.amount(100);
|
current_feed.settlement_price = bitusd.amount( 100 ) / core.amount(100);
|
||||||
auto default_call_price = ~price::call_price( bitusd.amount(100), asset(100), 1750);
|
auto default_call_price = ~price::call_price( bitusd.amount(100), asset(100), 1750);
|
||||||
|
|
||||||
// starting out with price 1:1
|
// starting out with price 1:1
|
||||||
publish_feed( bitusd, feedproducer, current_feed );
|
publish_feed( bitusd, feedproducer, current_feed );
|
||||||
|
|
||||||
// start out with 2:1 collateral
|
// start out with 2:1 collateral
|
||||||
borrow( borrower, bitusd.amount(1000), asset(2000), default_call_price );
|
borrow( borrower, bitusd.amount(1000), asset(2000), default_call_price );
|
||||||
borrow( borrower2, bitusd.amount(1000), asset(4000), default_call_price );
|
borrow( borrower2, bitusd.amount(1000), asset(4000), default_call_price );
|
||||||
|
|
||||||
|
|
@ -456,8 +456,7 @@ BOOST_AUTO_TEST_CASE( create_mia )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE_EXPECTED_FAILURES( broken_update_mia, 1 )
|
BOOST_AUTO_TEST_CASE( update_mia )
|
||||||
BOOST_AUTO_TEST_CASE( broken_update_mia )
|
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
INVOKE(create_mia);
|
INVOKE(create_mia);
|
||||||
|
|
@ -477,7 +476,6 @@ BOOST_AUTO_TEST_CASE( broken_update_mia )
|
||||||
trx.operations.back() = op;
|
trx.operations.back() = op;
|
||||||
PUSH_TX( db, trx, ~0 );
|
PUSH_TX( db, trx, ~0 );
|
||||||
|
|
||||||
//idump((bit_usd));
|
|
||||||
{
|
{
|
||||||
asset_publish_feed_operation pop;
|
asset_publish_feed_operation pop;
|
||||||
pop.asset_id = bit_usd.get_id();
|
pop.asset_id = bit_usd.get_id();
|
||||||
|
|
@ -485,8 +483,9 @@ BOOST_AUTO_TEST_CASE( broken_update_mia )
|
||||||
price_feed feed;
|
price_feed feed;
|
||||||
feed.settlement_price = price(bit_usd.amount(5), bit_usd.amount(5));
|
feed.settlement_price = price(bit_usd.amount(5), bit_usd.amount(5));
|
||||||
REQUIRE_THROW_WITH_VALUE(pop, feed, feed);
|
REQUIRE_THROW_WITH_VALUE(pop, feed, feed);
|
||||||
feed.settlement_price = price(bit_usd.amount(5), asset(5));
|
feed.settlement_price = ~price(bit_usd.amount(5), asset(5));
|
||||||
REQUIRE_THROW_WITH_VALUE(pop, feed, feed);
|
REQUIRE_THROW_WITH_VALUE(pop, feed, feed);
|
||||||
|
feed.settlement_price = price(bit_usd.amount(5), asset(5));
|
||||||
pop.feed = feed;
|
pop.feed = feed;
|
||||||
REQUIRE_THROW_WITH_VALUE(pop, feed.maintenance_collateral_ratio, 0);
|
REQUIRE_THROW_WITH_VALUE(pop, feed.maintenance_collateral_ratio, 0);
|
||||||
trx.operations.back() = pop;
|
trx.operations.back() = pop;
|
||||||
|
|
|
||||||
|
|
@ -356,8 +356,8 @@ BOOST_AUTO_TEST_CASE( mia_feeds )
|
||||||
|
|
||||||
op.publisher = dan_id;
|
op.publisher = dan_id;
|
||||||
op.feed.settlement_price = ~price(asset(GRAPHENE_BLOCKCHAIN_PRECISION),bit_usd.amount(40));
|
op.feed.settlement_price = ~price(asset(GRAPHENE_BLOCKCHAIN_PRECISION),bit_usd.amount(40));
|
||||||
op.feed.maximum_short_squeeze_ratio = 1000;
|
op.feed.maximum_short_squeeze_ratio = 1001;
|
||||||
op.feed.maintenance_collateral_ratio = 1000;
|
op.feed.maintenance_collateral_ratio = 1001;
|
||||||
trx.operations.back() = op;
|
trx.operations.back() = op;
|
||||||
PUSH_TX( db, trx, ~0 );
|
PUSH_TX( db, trx, ~0 );
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue