-
Notifications
You must be signed in to change notification settings - Fork 1.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[FeeVote] Voting for fee change and its implications are unclear #2451
Comments
Thanks for the report. We'll look closely at this and get back to you. |
Thank you, can't wait your opinion ;) |
"Fee units" is an arbitrary unit for representing fees. Something like, you translate things into fee units and back so that the calculations are irrelevant to the scale of the actual monetary values involved? I'm sure it makes sense to @JoelKatz. So for example, the SetFee pseudo-tx has the That makes me wonder if the docs on SetFee are wrong about the Given that it's so confusing, I would not be surprised if some calculations did the wrong conversion... |
Docs on SetFee are describing actual situation (all votable parameters are in drops). I personally think that "Fee units" are meant to be arbitrary unit, but in fact they are not. They are fixed to value of '10' in code and calculations made in 'Fee units' actually work in current setup because Really would love to hear some wise and confident opinion on that :) |
* Proof of concept * Uses tagged_integers with tags for drops, fee units (LoadFeeTrack), and fee levels (TxQ). * Resolves XRPLF#2451
There was really never any specific intention to support a base reference other than 10 fee units for a minimum transaction (a simple transfer of XRP between two accounts that already exist). The reserves are voted on directly, so they are expressed in drops. The cost of a minimal transaction is also voted on directly, so it is expressed in drops. However, we can't express, for example, the cost of an extra signature in a multisigned transaction in drops because if we did, that would have to be voted on separately and be changed any time the cost of the reference transaction changed. So we express those fees in fee units (tenths of a reference transaction). |
* Proof of concept * Uses tagged_integers with tags for drops, fee units (LoadFeeTrack), and fee levels (TxQ). * Resolves XRPLF#2451
* Proof of concept * Uses tagged_integers with tags for drops, fee units (LoadFeeTrack), and fee levels (TxQ). * Resolves XRPLF#2451
* Proof of concept * Uses tagged_integers with tags for drops, fee units (LoadFeeTrack), and fee levels (TxQ). * Resolves XRPLF#2451
There was indeed an error in some of the calculations. I have submitted #2884 to resolve it and hopefully keep it from recurring. This issue should automatically close when that code is merged to develop |
yay! Now it will definitely be easier to read through fee tangles :) |
* Uses tagged_integers with tags for drops, fee units (LoadFeeTrack), and fee levels (TxQ). * Resolves XRPLF#2451
You're welcome! |
* Uses the boost::units library with units for drops, fee units (LoadFeeTrack), and fee levels (TxQ). * Resolves XRPLF#2451
* Uses the boost::units library with units for drops, fee units (LoadFeeTrack), and fee levels (TxQ). * Resolves XRPLF#2451
* Uses the boost::units library with units for drops, fee units (LoadFeeTrack), and fee levels (TxQ). * Resolves XRPLF#2451
* Uses the boost::units library with units for drops, fee units (LoadFeeTrack), and fee levels (TxQ). * Resolves XRPLF#2451
* Uses the boost::units library with units for drops, fee units (LoadFeeTrack), and fee levels (TxQ). * Resolves XRPLF#2451
* Uses the boost::units library with units for drops, fee units (LoadFeeTrack), and fee levels (TxQ). * Resolves XRPLF#2451
* Uses the boost::units library with units for drops, fee units (LoadFeeTrack), and fee levels (TxQ). * Resolves XRPLF#2451
* Uses the boost::units library with units for drops, fee units (LoadFeeTrack), and fee levels (TxQ). * Resolves XRPLF#2451
* Uses the boost::units library with units for drops, fee units (LoadFeeTrack), and fee levels (TxQ). * Resolves XRPLF#2451
* Uses the boost::units library with units for drops, fee units (LoadFeeTrack), and fee levels (TxQ). * Resolves XRPLF#2451
* Uses the boost::units library with units for drops, fee units (LoadFeeTrack), and fee levels (TxQ). * Resolves XRPLF#2451
* Uses existing XRPAmount with units for drops, and a new TaggedFee for fee units (LoadFeeTrack), and fee levels (TxQ). * Resolves XRPLF#2451
* Uses existing XRPAmount with units for drops, and a new TaggedFee for fee units (LoadFeeTrack), and fee levels (TxQ). * Resolves XRPLF#2451
* Uses existing XRPAmount with units for drops, and a new TaggedFee for fee units (LoadFeeTrack), and fee levels (TxQ). * Resolves XRPLF#2451
* Uses existing XRPAmount with units for drops, and a new TaggedFee for fee units (LoadFeeTrack), and fee levels (TxQ). * Resolves XRPLF#2451
* Uses existing XRPAmount with units for drops, and a new TaggedFee for fee units (LoadFeeTrack), and fee levels (TxQ). * Resolves XRPLF#2451
* Uses existing XRPAmount with units for drops, and a new TaggedFee for fee units (LoadFeeTrack), and fee levels (TxQ). * Resolves XRPLF#2451
* Uses existing XRPAmount with units for drops, and a new TaggedFee for fee units (LoadFeeTrack), and fee levels (TxQ). * Resolves XRPLF#2451
* Uses existing XRPAmount with units for drops, and a new TaggedFee for fee units (LoadFeeTrack), and fee levels (TxQ). * Resolves XRPLF#2451
* Uses existing XRPAmount with units for drops, and a new TaggedFee for fee units (LoadFeeTrack), and fee levels (TxQ). * Resolves XRPLF#2451
* Uses existing XRPAmount with units for drops, and a new TaggedFee for fee units (LoadFeeTrack), and fee levels (TxQ). * Resolves XRPLF#2451
* Uses existing XRPAmount with units for drops, and a new TaggedFee for fee units (LoadFeeTrack), and fee levels (TxQ). * Resolves XRPLF#2451
Hello!
On my rippled fork i'm trying to figure out how are all Fee-related things working. I think it might even be a bug in how certain fee-related variables are used in code.
There are several places from which we can obtain fee stats including:
at first i set up recommended values on my standalone server. and then advance 256 ledgers to first flag ledger and query server_state, server_info, fee
rozek@***:~$ tail /etc/rippled/rippled.cfg
[features]
MultiSign
[voting]
reference_fee = 10
account_reserve = 20000000
owner_reserve = 5000000
rozek@***:~$ /usr/bin/rippled --conf=/etc/rippled/rippled.cfg server_info
Loading: "/etc/rippled/rippled.cfg"
2018-Mar-23 12:38:54 HTTPClient:NFO Connecting to 127.0.0.1:5005
{
"result" : {
"info" : {
"build_version" : "1.0.0-b2",
"complete_ledgers" : "2-261",
"hostid" : "",
"io_latency_ms" : 1,
"jq_trans_overflow" : "0",
"last_close" : {
"converge_time_s" : 0.1,
"proposers" : 0
},
--- editors cut ---
"validated_ledger" : {
"base_fee_xrp" : 1e-05,
"hash" : "94B62A82705D7B241AA8B2BA4C0EBF772905E9A3F8CF76B4F971C1BCDA82D233",
"reserve_base_xrp" : 20,
"reserve_inc_xrp" : 5,
"seq" : 261
},
"validation_quorum" : 0,
"validator_list_expires" : "unknown"
},
"status" : "success"
}
}
rozek@:~$ /usr/bin/rippled --conf=/etc/rippled/rippled.cfg server_state
Loading: "/etc/rippled/rippled.cfg"
2018-Mar-23 12:38:57 HTTPClient:NFO Connecting to 127.0.0.1:5005
{
"result" : {
"state" : {
"build_version" : "1.0.0-b2",
"complete_ledgers" : "2-261",
"io_latency_ms" : 1,
"jq_trans_overflow" : "0",
"last_close" : {
"converge_time" : 100,
"proposers" : 0
},
"load" : {
"job_types" : [
{
"in_progress" : 1,
"job_type" : "clientCommand"
}
],
"threads" : 1
},
"load_base" : 256,
"load_factor" : 256,
"load_factor_fee_escalation" : 256,
"load_factor_fee_queue" : 256,
"load_factor_fee_reference" : 256,
"load_factor_server" : 256,
--- editors cut ---
"validated_ledger" : {
"base_fee" : 10,
"close_time" : 575124139,
"hash" : "94B62A82705D7B241AA8B2BA4C0EBF772905E9A3F8CF76B4F971C1BCDA82D233",
"reserve_base" : 20000000,
"reserve_inc" : 5000000,
"seq" : 261
},
"validation_quorum" : 0,
"validator_list_expires" : 0
},
"status" : "success"
}
}
so far so good, everything is allright.
now modify rippled.cfg to reference_fee = 100 and hit next flag ledger
rozek@***:~$ tail /etc/rippled/rippled.cfg
[features]
MultiSign
[voting]
reference_fee = 100
account_reserve = 20000000
owner_reserve = 5000000
in code reference_fee from conf file is mapped to FeeVote::Setup::reference_fee which is loaded to Fees::base (Ledger class member). there is also an Fees::units member which is not voteable (it is added to SetFee tx though) and hardcoded to 10.
Now what seems not correct to me is calculation of human-readable response to server_info command in NetworkOPs.cpp:2286
baseFee / baseRef gives fine result when both are equal to 10, but if baseFee (which is votable) changes, this also has impact on how values are reported in server_info.
similar construction * baseFee / baseRef is used in a few more places in code and i'm wondering if that has any logical impact on applied fees if fee is changed via voting?
proof malformed server_info below:
rozek@***:~$ /usr/bin/rippled --conf=/etc/rippled/rippled.cfg server_state
Loading: "/etc/rippled/rippled.cfg"
2018-Mar-23 12:44:57 HTTPClient:NFO Connecting to 127.0.0.1:5005
{
"result" : {
"state" : {
"build_version" : "1.0.0-b2",
"complete_ledgers" : "2-572",
"io_latency_ms" : 1,
"jq_trans_overflow" : "0",
"last_close" : {
"converge_time" : 100,
"proposers" : 0
},
"load" : {
"job_types" : [
{
"avg_time" : 4,
"in_progress" : 1,
"job_type" : "clientCommand",
"peak_time" : 29
},
{
"job_type" : "WriteNode",
"per_second" : 1
}
],
"threads" : 1
},
"load_base" : 256,
"load_factor" : 256,
"load_factor_fee_escalation" : 256,
"load_factor_fee_queue" : 256,
"load_factor_fee_reference" : 256,
"load_factor_server" : 256,
--- editors cut ---
"validated_ledger" : {
"base_fee" : 100,
"close_time" : 575124750,
"hash" : "E4773984777DCDBFEE7CF84077FB88FFE0AC920A58F9096E03D599D287F4B3B1",
"reserve_base" : 20000000,
"reserve_inc" : 5000000,
"seq" : 572
},
"validation_quorum" : 0,
"validator_list_expires" : 0
},
"status" : "success"
}
}
rozek@***:~$ /usr/bin/rippled --conf=/etc/rippled/rippled.cfg server_info
Loading: "/etc/rippled/rippled.cfg"
2018-Mar-23 12:45:13 HTTPClient:NFO Connecting to 127.0.0.1:5005
{
"result" : {
"info" : {
"build_version" : "1.0.0-b2",
"complete_ledgers" : "2-572",
"hostid" : "***",
"io_latency_ms" : 1,
"jq_trans_overflow" : "0",
--- editors cut ---
"validated_ledger" : {
"base_fee_xrp" : 0.0001,
"hash" : "E4773984777DCDBFEE7CF84077FB88FFE0AC920A58F9096E03D599D287F4B3B1",
"reserve_base_xrp" : 200,
"reserve_inc_xrp" : 50,
"seq" : 572
},
"validation_quorum" : 0,
"validator_list_expires" : "unknown"
},
"status" : "success"
}
}
Now my questions...
is it a bug in displaying human-readable values? ( i guess so?)
is it working as expected? if so, why fee increase results in account_reserve increase?
and most important: what does 'fee in fee units' or 'fee units' or FeeVote::Setup::reference_fee_units mean? could anyone enlighten me please?
(it is for instance referenced in TransactionSign.cpp in checkFee function)
Thank you very much in advance!
btw. Great work!
The text was updated successfully, but these errors were encountered: