Price feed example¶
The price feed example uses
LiquidHarmony to fetch a price every X seconds. If the price does not deviate by more or less than 1% (default) then an assertion will be thrown preventing the DSP from using CPU on the oracle request or the cron rescheduling action.
Code located here
Download and test with zeus¶
To download and run the unit test the price feed with zeus simply run:
mkdir pricefeed; cd pricefeed # npm install -g @liquidapps/zeus-cmd zeus box create zeus unbox pricefeed zeus test -c
The unit test will run several requests, none of which will increment the CPU used past the first action unless the price deviats by 1% from the first price logged during the test.
Price feed settings¶
The following are the settings that can be customized with the
uint32_t threshold = 1;- this represents the minimum amount of DSPs that must respond to deem a price fetch valid, defaults to 1
float lower_bound_filter = 1;// lower bound check to see if a price has dropped by more than x%, if so, update the price and spend CPU to do so, if not assert reschedule the cron and spend no CPU, defaults 1%
float upper_bound_filter = 1;// upper bound check to see if a price has increased by more than x%, if so, update the price and spend CPU to do so, if not assert reschedule the cron and spend no CPU, defaults 1%
float lower_bound_dsp = 1;// lower bound check to compare all DSP results against, if any DSP result is less than the first reported price by x%, assert, defaults to 1%
float upper_bound_dsp = 1;// upper bound check to compare all DSP results against, if any DSP result is more than the first reported price by x%, assert, defaults to 1%
The example also allows an average or median consensus mechanism for calculating the most recent price.
Price feed actions¶
testfeed (std::vector<char> uri, uint32_t interval)- takes a LiquidHarmony URI and an interval to reschedule the price feed request
settings (uint32_t new_threshold_val, float lower_bound_filter, float upper_bound_filter, float lower_bound_dsp, float upper_bound_dsp)- update settings for price feed
stopstart (bool stopstart_bool)- toggles price feed cron on or off
# set settings cleos -u $EOS_ENDPOINT push action $KYLIN_TEST_ACCOUNT settings '[1,1,1,1,1]' -p $KYLIN_TEST_ACCOUNT # start feed for EOS price fetch every 15 seconds cleos -u $EOS_ENDPOINT push action $KYLIN_TEST_ACCOUNT testfeed '["68747470732b6a736f6e3a2f2f5553442f6d696e2d6170692e63727970746f636f6d706172652e636f6d2f646174612f70726963653f6673796d3d454f53267473796d733d555344266170695f6b65793d64356132346639653535616265633938316163396565346337366230346132663237643138303234613134313564663830666130306137393466343864636162",15]' -p $KYLIN_TEST_ACCOUNT # stop feed / enable feed to be restarted cleos -u $EOS_ENDPOINT push action $KYLIN_TEST_ACCOUNT stopstart '[false]' -p $KYLIN_TEST_ACCOUNT