-
br-m
<rucknium> MRL meeting in this room in two hours.
-
DataHoarder
matrix.org downtime seems still ongoing and they are taking the slow path
-
DataHoarder
bsky.app/profile/matrix.org/post/3lxuslbzjuc2t for anyone in matrix.org having issues they can temporarily join IRC :)
-
br-m
<rucknium> Meeting time!
monero-project/meta #1263
-
br-m
<rucknium> 1. Greetings
-
br-m
<articmine> Hi
-
rbrunner
Hello
-
br-m
<vtnerd> hi
-
br-m
<jberman> waves
-
br-m
<boog900> hi
-
br-m
<venture> Hello
-
br-m
<0xfffc> Hi everyone
-
ArticMine
hi connecting from IRC
-
br-m
<rucknium> We are probably missing people from matrix.org Matrix servers. Logging into the Libera IRC network still works.
-
br-m
<rucknium> 2. Updates. What is everyone working on?
-
br-m
<vtnerd> me: primarily bugs in lws and lwsf. sadly several were reported nearly the same time, and I’ve been going through them
-
br-m
<rucknium> me: Testing rolling DNS checkpoints and created this issue about it:
monero-project/monero #10064 . Reading papers about selfish mining. Productionizing transaction spamming code for FCMP alpha stressnet.
-
DataHoarder
me: For fun implemented a DNS + DNSSEC server that can server a single DNS checkpointing domain directly, via nameserver delegation
git.gammaspectra.live/P2Pool/monero-highway and holding own keys. Supports Ed25519/ECDSA and other keys
-
br-m
<rucknium> @jeffro256:monero.social: Ping
-
br-m
<jberman> me: sped up popping blocks/reorg handling in the wallet to handle trimming the fcmp++ tree quickly, fixed a bug in the wallet's tree builder path member reference counter, benchmarked tx and membership proof verification using kayaba's latest
-
br-m
<jeffro256> Howdy
-
br-m
<venture> I have been working on a monte carlo simulation of Publish-Or-Perish
-
br-m
-
br-m
<jeffro256> me: lots of review, documenting and refining HW wallet support for FCMP++, and refactoring in preparation of a key image generator hash function change proposed by @kayabanerve:monero.social
-
ArticMine
I have updated the fee calculations in
seraphis-migration/monero #44 With an increase in the penalty free zone, ZM from 1000000 bytes to 200000 bytes, an increase in the reference transaction size from 10000 bytes to 20000 bytes and an increase in fees by 4x by elimination the lo fee in the implementation. Then we can have a flat fee structure with fee proportional to weight up to 128 inputs.
-
br-m
<jeffro256> @diego:cypherstack.com: reached out to me with a first draft of the follow up audit, we're discussing it now. Thanks Cypherstack! Not too much to report until after that's done tho
-
br-m
<jeffro256> Haven't heard back in a couple days, I wonder if it might have to do with the Matrix federation security issues
-
br-m
-
br-m
-
br-m
<rucknium> Do markdown links not appear properly on IRC side, or is it just the monerologs.net parsing that erases the text?
-
rbrunner
So far no problems for me with the links of today
-
br-m
<rucknium> Anything to say about hash-to-point now?
-
ArticMine
In some cases it is lag. I am actually on IRC at the same time
-
br-m
<articmine> See my comment above
-
br-m
<rucknium> I am feeling some lag on the Matrix side. Maybe because martix.org is coming back online?
-
br-m
<rucknium> matrix.org*
-
br-m
-
DataHoarder
19:17:08 <br-m> <rucknium> Do markdown links not appear properly on IRC side, or is it just the monerologs.net parsing that erases the text?
-
DataHoarder
there is a markdown parser, but it removes the description as I could not find a proper format for it. Let's discuss alternate formats for that after the meeting
-
br-m
<rucknium> Ok I will post them as regular, separate links for now.
-
br-m
<rucknium> The current agenda item is "Transaction volume scaling parameters after FCMP hard fork. "
-
ArticMine
As I mentioned before I am recommending both an increase in the minimum penalty free zone and an increase in fee to address these issues.
-
ArticMine
this is also after reviewing the comments in the last MRL regarding the use of 4 in transactions
-
br-m
<jeffro256> Personally, I think that the penalty free zone shouldn't be increased to much over 2x the max tx size + a coinbase tx size. A 6x increase is pretty aggressive when the average FCMP++ transaction isn't going to be 6x the size of a 16-member CLSAG tx. What's the primary thrust of why it would be increased so much ?
-
br-m
<jberman> My initial read of this latest is that fees are determined entirely by overall tx byte size, and unaffected by tx verif time, or membership proof size/verification (aside from the effect of the memb proof on the overall tx size)
-
ArticMine
Yes this is correct
-
tevador
A larger penalty free zone means a malicious miner can spam the blockchain more.
-
br-m
<jeffro256> ^^^
-
ArticMine
Yes but there is also an increase in fees
-
tevador
Fees don't affect the miner.
-
br-m
<jeffro256> not if colluding with a miner
-
ArticMine
A penalty free zone 2x the max tx fee was tried in 2017 and it did not work
-
ArticMine
The fees are just too high
-
br-m
<jeffro256> Only for max size txs, though, right?
-
br-m
<jeffro256> Assuming other traffic
-
ArticMine
in 2017 it was all txs
-
ArticMine
We had a 2in 2 out tx at 135000 bytes and a penalty free zone of 60000 bytes
-
br-m
<jeffro256> 2017 was before bulletproofs. I feel like the change to bulletproofs (a huge drop in transaction size) lowered the fees more than the increase in the minimum penalty-free zone
-
br-m
<jeffro256> But I'm just spitballing
-
ArticMine
Even after the increase to 300000 bytes fee were still very hihg
-
ArticMine
It was only by not reducing the penalty free zone after bulletprrof that we go reasonable fees
-
br-m
<jeffro256> I'm a bit biased because I'm also of the opinion that the fees should be higher than they currently are
-
tevador
If the tx volume is sufficient, the penalty free zone will adjust. A smaller minimum value is more spam resistant.
-
ArticMine
I am actually proposing both a fee increase and an increase in the penalty free zone
-
ArticMine
The current fee structure is very well received by the users. A massive increase in fees is something I cannot support
-
br-m
<jeffro256> > Even after the increase to 300000 bytes fee were still very hihg
-
br-m
<jeffro256> > So you agree that increasing the penalty-free zone didn't do much to lower small-tx fees?
-
ArticMine
It did not go far enough in 2017
-
br-m
<jeffro256> So if you also want to raise fees, then why are we raising the penalty free zone?
-
ArticMine
We needed a penalty free zone in the 1000000 - 200000 bytes back then
-
ArticMine
to 2000000 bytes
-
ArticMine
We need both
-
ArticMine
raise fees and the penalty free zone
-
br-m
<boog900> why do we need it
-
tevador
What would be the verification time for a 2MB block?
-
br-m
<rucknium> @ofrnxmr:monero.social: Insight about that ^ with FCMP private testnet experiments?
-
ArticMine
~12.5x that of a 128 input tx
-
ArticMine
we have to be realistic here
-
br-m
<jeffro256> If all 1-in,2-out, then 2MB*(1 tx / 6261 B)*(30 ms / tx) ~ 9600 ms of CPU time
-
ArticMine
One we can use parallel processing to the block, unlike single large txs
-
br-m
<jeffro256> (in response to tevador's question)
-
br-m
<boog900> IMO 1 MB blocks is already too big
-
br-m
<boog900> which was the original proposal
-
ArticMine
I have said for a long time that we are going to need parallel processing to address verification time
-
br-m
<jberman> you can parallel process at every level theoretically, even within verifying a single 128-in tx. but finding the sweet spot of where to apply the parallel verif to maximize CPU utilization is another q
-
br-m
<jeffro256> @jeffro256: Also that 9.6s figure for 2MB of FCMP++ transactions didn't include BP+ range proof verification. It is a small, but certainly noticeable part of the verification time
-
br-m
<jberman> right now the implementation batch verifies all FCMP++ proofs synchronously
-
br-m
<jberman> so verification time of a large block should be somewhat faster than time to verify each proof in the block individually, ignoring parallelism at any level
-
ArticMine
are you excluding any palatalization implementations at the OS level?
-
br-m
<jeffro256> This is true, I am not considering batching. That's if verifying independently
-
br-m
<jeffro256> But we already do multi-threaded verification in monerod
-
br-m
<jberman> fcmp++ verification is currently batched, and not multi-threaded
-
ArticMine
On a CPU with say 64 threads this cam make a major difference
-
br-m
<jberman> yes
-
br-m
<rucknium> I will limit this agenda item to 30 minutes of discussion. That means ending at 17:52
-
br-m
<jberman> I think it could be easily updated to batch in groups of some max size, and do parallel batch verification within each block
-
br-m
<ofrnxmr> Jeffro,that must be 9600ms if firsttime seeing the txs?
-
br-m
<jeffro256> @ofrnxmr:monero.social: yes for full verification
-
br-m
<ofrnxmr> Ok, because if i aready have the txs, a 15mb block takes about 5 seconds
-
br-m
<jeffro256> During block propagation, assuming the tx is already in the pool, the FCMP would have already been verified, so it won't take that long when verifying an incoming block
-
br-m
<ofrnxmr> 5 seconds from notified to "synced". So not all verification time, some of that is bandwidth
-
tevador
I don't think I would support going above 600 KB with the minimum penalty free zone. That's still ~80 tx per block. Min tx fee for 8000 byte tx would be ~0.0001, about $0.03.
-
tevador
If my calculations are correct.
-
br-m
<articmine> I cannot support anything below 1000000
-
br-m
<articmine> bytes
-
tevador
I don't find a fee of $0.03 to be excessive. Might even be too low IMO.
-
br-m
<rucknium> Let's continue the agenda:
-
br-m
-
br-m
<rucknium> There has been movement in
seraphis-migration/monero #81 , the last thing to be merged before alpha stressnet
-
br-m
<jberman> In PR 81, I modified some of wallet2's reorg handling logic to:
-
br-m
<jberman> -- always request blocks starting from 1 higher from current known tip
-
br-m
<jberman> -- if reorg detected, then request 3 blocks back
-
br-m
<jberman> -- if reorg still detected, then request 100 blocks back (100 is the default max reorg depth)
-
br-m
<jberman> @jeffro256:monero.social highlighted how this incurs extra cost for daemons to handle reorgs (e.g. in a 10 block reorg, wallets will end up requesting 100 blocks back from tip to handle the reorg)
-
br-m
<jberman> I'm planning to revert back to behavior that does not incur extra cost to handle such a reorg, hopefully will complete that today
-
br-m
<jeffro256> I honestly don't think that 81 should be a blocker personally
-
br-m
<jberman> ofrn reported various refresh issues similar to issue #45 that the PR solved for him
-
br-m
<jeffro256> Okay fair
-
br-m
<jeffro256> Which part of the PR actually fixeD the reorg issue ?
-
br-m
<jeffro256> it was an issue with reorgs right ?
-
br-m
<jberman> yep, the reason I widened the PR's scope to remove init hash download was because that part touches on similar areas that would need changing. So I figured better to kill 2 birds with 1 stone and not need to make more changes separately
-
br-m
<ofrnxmr> @jeffro256: There were numerous isues
-
br-m
<ofrnxmr> One of them was that the wallet was broken if you had a non-0 restore height
-
br-m
<ofrnxmr> I dm'd you another one a moment ago and will send another in a few mins
-
br-m
<rucknium> IMHO, with stressnet, keeping wallets working without manual fixes will be important.
-
br-m
<rucknium> Starting with my scripts that I used to spam last year's stressnet, I have written "easy-to-use" functions that can create an arbitrary number of wallets and monero-wallet-rpc instances. Wallets need to be generated programatically because 1in/2out tx creation times seem to go from 0.1 seconds to 5 seconds with current FCMP [... too long, see
mrelay.p2pool.observer/e/-auB0rEKcmJKZXYx ]
-
br-m
<rucknium> On last year's stressnet, I had 3-4 wallets spamming at a time IIRC. I could manually fix them when they encountered problems, but dozens of wallets would be harder.
-
br-m
<ofrnxmr> Lots of wallets or slow blocktimes
-
br-m
<ofrnxmr> I'm testing 15 subaccounts right now - i think subaccounts might be broken
-
br-m
<rucknium> @ofrnxmr: On FCMP?
-
br-m
<ofrnxmr> Yeab
-
br-m
<rucknium> My spamming functions don't work without accounts.
-
br-m
<rucknium> I was promised accounts work 😢
-
br-m
<rucknium> Did you limit subaddress lookahead? I don't know if that could help anything.
-
br-m
<jeffro256> They should work AFAIK and are planned to worl but plz lmk if they don't
-
br-m
<ofrnxmr> check dm
-
br-m
<rucknium> More discussion of stressnet planning can happen in #monero-stressnet:monero.social ( ##monero-stressnet on IRC I think).
-
br-m
<rucknium> I am wondering if the spamming code should be published or not. That discussion can happen at another time or asynchronously.
-
br-m
<rucknium> Any other major things about FCMP alpha stressnet to discuss?
-
br-m
<jberman> nothing from me
-
br-m
<rucknium> 7. Mining pool centralization: Temporary rolling DNS checkpoints
monero-project/monero #10064 and Publish or Perish
monero-project/research-lab #144
-
br-m
<rucknium> Do we talk to talk about DNS checkpoints and PoP together, or separately and in which order?
-
br-m
<ofrnxmr> bug found: when checkpointed chain reverts a reorg, the shared-ring-db gets borked
-
br-m
<rucknium> Does that happen with every re-org, or just ones involving checkpointing?
-
br-m
<ofrnxmr> just checkpointing
-
tevador
DNS checkpoints can work by themselves, so I think it can be discussed separately. They can prevent deep reorgs that are bad for UX. But they can't stop selfish mining and might even help the selfish miner in some cases.
-
br-m
<rucknium> Note that the network connectivity of the Qubic adversary is quite poor. They are losing almost every block propagation race. DataHoarder: is that correct?
-
DataHoarder
Only if it's a race. usually it's not a race and they are ahead
-
br-m
<ofrnxmr> I think they are losing because they have to broadcast their txs with the blocks
-
DataHoarder
They take an extra penalty for unknown txs having to get verified
-
br-m
<rucknium> But maybe they could improve their network connectivity in the future.
-
DataHoarder
Plus sometimes their blocks or changes are delayed 8-20 seconds
-
br-m
<ofrnxmr> If they were doing just empty blocks, would be faster
-
tevador
What might help would be to connect the checkpointing node directly to a few large honest pool nodes.
-
br-m
<rucknium> DNS checkpoints help the selfish miner if they can push their blocks to honest miners faster/earlier.
-
br-m
<rucknium> AFAIK
-
DataHoarder
p2pool is testing a few changes to broadcast non-p2pool blocks across its network
-
DataHoarder
which submits to monerod directly
-
tevador
It's enough if they push their blocks faster to the checkpointing node.
-
DataHoarder
so that makes all blocks spread across faster, alt or not
-
br-m
<rucknium> tevador: Right. maintaining connectivity and a common view of the network's block is important.
-
br-m
<venture> Regarding PoP, basic monte carlo sim is set up (honest miner case, with fork-resolution-policy, the soft fork proposal, no vesting / reward-splitting). The selfish-miner is implemented as well but lacks "proficiency" in my model. it performs not well / based on a simple heuristic currently.
-
DataHoarder
I am testing a "connector" network where they share view of multiple monerod nodes, local or remote, and share available information across (for checkpointing purposes). It needs more work to show as a proof of concept, but has more uses besides checkpointing (good for pools to broadcast blocks to each other quick and other information)
-
br-m
<venture> i noticed (probably obvious) that the fork probability (even in the honest case only), depends on the window and the block frequency. so D=5s on 1 min blocks (more forks) than on 2 min blocks. up to 3.5%
-
Guest28
couldn't qubic just join p2pool?
-
br-m
<rucknium> I wrote some thoughts about the heart of selfish mining last meeting, but didn't post because they were related to changing the hashpower sampling rate. tevador has some good points against increasing the sampling rate. But I think it's useful to think about common network view:
-
br-m
<bawdyanarchist:matrix.org> Speaking of Monte Carlo, I released my first rev of a Monero sim. Still a WIP, but normal honest miner behavior appears to be working, the structure is solid, and it's at a point that adding new strategies is fully pluggable.
-
br-m
-
DataHoarder
Guest28: in regards to what? No need to even join p2pool, it's just to speed up block transmission across the network. any monerod from a user using p2pool will have its blocks also broadcasted
-
br-m
<rucknium> In "Lay Down the Common Metrics: Evaluating Proof-of-Work Consensus Protocols' Security", the authors have a section "What Goes Wrong: Information Asymmetry" that gets to the heart of the matter. I think it explains why an attacker with minority hashpower can gain an advantage over honest miners (and honest merchants). A minor [... too long, see
mrelay.p2pool.observer/e/s5C70rEKOXlsQzRM ]
-
br-m
<rucknium> I have developed my own analogy.
-
br-m
<rucknium> It's a gambling analogy, of course.
-
br-m
<rucknium> In blackjack, "the house always wins" because the ruleset creates biased odds...or does it?
en.wikipedia.org/wiki/Card_counting can help a blackjack player get an advantage over the casino. If, by chance, the cards remaining in the dealing deck are high-numbered cards, then the player is temporarily at an advantage. In [... too long, see
mrelay.p2pool.observer/e/wOa80rEKM0FsNEVB ]
-
br-m
<rucknium> A selfish miner acts in the same way. It knows the blocks produced by itself and the honest miners. When it is ahead of the honest miners because of randomly being luckier than its hashrate would normally allow, it "bets big" by withholding blocks. I think this analogy can help us understand why minority-hashpower selfish miners can get an advantage and maybe how they could be defeated.
-
br-m
<rucknium> Aumayr et al. (2025) "Optimal Reward Allocation via Proportional Splitting"
arxiv.org/abs/2503.10185 is like re-shuffling the deck often, which decreases the card-counter's edge. But that costs RandomX hash verification time. Too much, probably. And it would require a hard fork.
-
br-m
<bawdyanarchist:matrix.org> @rucknium:monero.social: The "Optimal Reward Allocation" team said that they followed closely the MDP implementation from "Laying Down the Common Metrics" (cited the same MATLAB source you found.
-
br-m
<bawdyanarchist:matrix.org> > In our case, we only adapted the "reward splitting" MDP to follow our reward sharing variant ("proportional reward splitting" - PRS), so it is mostly the same as this repo's implementation.
-
br-m
-
DataHoarder
in those same analogues, a checkpoint would be a "deck change" @rucknium where any new information from old deck is useless unless it was already abused?
-
br-m
<rucknium> @bawdyanarchist:matrix.org: Awesome. Thank you!
-
tevador
The DNS checkpointing issue didn't receive many comments. So I guess we can go ahead with it? Are any changes in monerod needed? It can stay opt-in since it's a soft fork.
-
br-m
<rucknium> DataHoarder: I think it would be similar. Here are other card counting countermeasures:
en.wikipedia.org/wiki/Card_counting#Countermeasures
-
DataHoarder
"20:13:19 <br-m> <ofrnxmr> bug found: when checkpointed chain reverts a reorg, the shared-ring-db gets borked"
-
DataHoarder
^ that'd need addressing
-
br-m
<vtnerd> the thing about opt-in is the solo miners joining the selfish-mining, etc
-
DataHoarder
also, alt blocks even close to a tip do not get shared across peers unless they are longer, or forced flushed
-
br-m
<rucknium> @vtnerd:monero.social has done some "procedure smoothing" coding on monerod.
-
DataHoarder
if we want the network to switch, at least, some of these should get broadcasted across the network and not just kept locally
-
tevador
If the majority of the network hashrate opts in, everyone will eventually end up on the checkpointed chain.
-
br-m
<rucknium> DataHoarder has been thinking of ways to get alt blocks propagated more reliably.
-
br-m
<vtnerd> there’s also whether we have one source publishing checkpoints or multiple (as they could disagree and cause some headaches)
-
DataHoarder
the problem is for the majority of the network to even get those blocks in the first place, if it's a race
-
br-m
<ofrnxmr> Tevador - need changes to frequency of checking and reduction of bantime. Patches for that are ready
-
DataHoarder
we can "manage" for public nodes. additionally RPC has some issues with old blocks (which Qubic encountered and blamed pools instead!)
-
br-m
<vtnerd> tevadoryour correct, its just that having people on the “wrong chain” temporarily hurts my head a bit
-
br-m
<vtnerd> I guess its no different than a reorg though
-
DataHoarder
I have some of my own local WiP patches for me to address this, but some proper solution might be nice. Can talk a bit after discussion
-
br-m
<rucknium> I think @kayabanerve:matrix.org 's idea for an RPC method to checkpoint blocks is a good idea for the checkpointing nodes. You want them to stand on a block without the round-trip latency of querying DNS.
-
DataHoarder
^ local temporary checkpoint that doesn't survive restarts?
-
br-m
-
DataHoarder
call it, block pinning?
-
br-m
<venture> is this received on IRC side
-
br-m
<venture> ?
-
DataHoarder
yes, nice svg
-
br-m
<vtnerd> my other thought with banning is whether we create a semi-permanent netsplit, the banning side would need to keeping retrying those nodes for a bit
-
br-m
<rucknium> Some group of nodes tell a checkpointing script that they all (or a {super} majority) have some block and wish to "finalize" it. Then the checkpointing script sends a finalize command to all those nodes and updates the TXT DNS record.
-
br-m
<venture> it's the simulation. with view for each miner (lane) .. including their branches (which they would have to maintain up to k , with the soft fork proposal)
-
br-m
<vtnerd> Im not sure if the current retry algorithm is sufficient for that potential netsplit case
-
tevador
I guess the fact that the checkpointed chain won't be relayed if qubic's chain is longer might be an issue.
-
br-m
<venture> the last lane is the selfish one
-
DataHoarder
@rucknium I had that "finalize" step on majority on my test tool but didn't involve getting these back to monerod somehow, I should incorporate that in my simulations
-
DataHoarder
indeed tevador. There are workarounds *now* but a .patch release that allows broadcasts would help a lot
-
DataHoarder
even just a couple of nodes doing so would unclog most of the network if we want these altchains
-
br-m
<bawdyanarchist:matrix.org> @venture:monero.social: Did you publish your code yet for it? Can you share the link?
-
DataHoarder
we can reach public nodes directly, but not hidden or outbound only nodes
-
br-m
<rucknium> My basic checkpointing script on testnet just assume that the single checkpointing node will get the DNS checkpoint instruction soon after it's posted, but there are gaps there with DNS caching and having 4 domains.
-
tevador
I think it would be quite safe to relay alt block up to a certain depth even if the chain is shorter.
-
br-m
<venture> @bawdyanarchist:matrix.org: i will. but no, it's not yet on github
-
DataHoarder
an alternative would be querying a local DNS server that the checkpointing script runs, @rucknium, that has the most recent fetched value faster
-
br-m
<rucknium> I wonder what the reason for not relaying alt blocks that clear the difficulty threshold is? If they clear difficulty, DDoS risk is low.
-
DataHoarder
tevador: something like max desired reorg depth, or, up to last randomx epoch, those were my two "sane" min/max bounds for that distance
-
tevador
Exactly, the DoS risk is nonexistent if the PoW is checked first.
-
br-m
<rucknium> By the way, on testnet we were able to produce empirical evidence that a 10-block re-org can invalidate txs:
libera.monerologs.net/monero-research-lounge/20250903#c579433-c579443
-
DataHoarder
I'm looking at nodes out there with open rpc and over time checking their /get_alt_blocks_hashes output too, fetching the full blocks, then relaying these blocks around
-
br-m
<rucknium> I'm not 100% sure if the 7 invalidated txs were actually mined in a block or were just waiting in txpool. (If in txpool, they would have been included in the next block).
-
rbrunner7
Thanks for that, Rucknium! Nice to have it documented
-
tevador
The fact that transactions get stuck in the mempool for a week is much worse than just invalidating.
-
br-m
<boog900> DataHoarder: Ah I saw someone sent my node a deep alt block and was a bit confused :D
-
br-m
<rucknium> @ofrnxmr:monero.social was able to spend those outputs later because he cleared his node's txpool. I think another node mined it, not his. But @ofrnxmr:monero.social can confirm
-
DataHoarder
to make it more obvious, the transactions with the key image stay in mempool so other new transactions can't replace this invalid one
-
DataHoarder
just in case the old chain comes back
-
br-m
<rucknium> And clear some things in the wlalet cache I think.
-
br-m
<rucknium> Ordinary users would find it difficulty to clear everything.
-
DataHoarder
@boog900: it might not have been me, snatching some of qubic lost chains is tricky so these are the ones I'm focused in finding
-
DataHoarder
and it'd stay in other node mempools
-
DataHoarder
so it'd block transmission or broadcasts, or mining
-
br-m
<rucknium> In a scenario where the community and other agents are reluctant to enable DNS checkpoints, a grim trigger strategy can be followed
en.wikipedia.org/wiki/Grim_trigger
-
br-m
<rucknium> Set up infrastructure for DNS checkpoints, but don't post checkpointed blocks to the DNS records unless Qubic re-orgs more than 9 blocks (or they facilitate a short-chain double-spend tx). If they do, issue checkpointed blocks indefinitely.
-
br-m
<rucknium> Rolling DNS checkpoints reduces Monero's decentralization, so it isn't idea for the Monero protocol, either.
-
br-m
<rucknium> I don't see much opposition to it at the moment.
-
DataHoarder
it's understood it's a bandaid until measures can be implemented in the longer term
-
br-m
<rucknium> The Core Team would need to agree since they manage the DNS records. You need most big mining pools to agree and enable checkpoint enforcing (and probably a new monerod release with procedure smoothing).
-
br-m
<rucknium> It's in the mining pools' interest to enable checkpointing enforcement if they are mostly all in it together.
-
DataHoarder
the cadence changes and improvements can be done ahead of time, as they also smooth over any future need of it even if it's not for qubic
-
DataHoarder
(broadcasts, reorg ring db fix, check intervals, etc.) before agreeing to issuing them or not
-
DataHoarder
that way it's ready, instead of lagging for all that to be available. monero users can sometimes delay updates quite a bit
-
br-m
<rucknium> If there are not objections here, then timeline, tasks, and personnel should be decided.
-
br-m
<rucknium> i.e. who does what, and when.
-
br-m
<rucknium> DataHoarder has good understanding of the DNS issues involved. And the block propagation issues. He could lead on that. @vtnerd:monero.social could help with additional smoothing changes to monerod.
-
tevador
Tracking issues can be openened first.
-
br-m
<rucknium> The Core Team would need to reach a consensus on this. @articmine:monero.social could lead on that if desired.
-
br-m
<rucknium> Mining pools need to be contacted and their internal decision processes need to be worked through, and their decision communicated.
-
ArticMine
i will bring it up with the core team
-
br-m
<rucknium> ArticMine: Thank you!
-
br-m
<rucknium> From previous experience, hashvault, moneroocean, supportxmr, and nanopool seemed quick to implement changes to their mining procedures when contacted:
rucknium.me/posts/monero-transactions-60-seconds-faster
-
DataHoarder
I have a list of issues that we encountered while monitoring and operating monerod in a different capacity, and data to back the reasoning behind these fixes. as long as scope is limited @rucknium I can take care of that part
-
br-m
<rucknium> DataHoarder: Fantastic. Thank you!
-
br-m
<rucknium> Try to pass improvements to @ofrnxmr:monero.social and myself, which are performing checkpointing experiments on testnet.
-
tevador
hashvault, moneroocean, supportxmr, and nanopool are together >50%, enough for a soft fork.
-
br-m
<rucknium> Who will craft the message and contact mining pools? Last time, at least @ofrnxmr:monero.social and @ack-j:matrix.org helped contact mining pools.
-
br-m
<ofrnxmr> Plowsof also helped
-
br-m
<ofrnxmr> "ofrnxmr was able to spend those outputs later because he cleared his node's txpool. I think another node mined it, not his. But ofrnxmr can confirm" correct
-
br-m
<rucknium> By last time, I mean the block template updating config fix:
rucknium.me/posts/monero-transactions-60-seconds-faster
-
br-m
<rucknium> selsta would be the person to coordinate a new point release of monerod. He has said he is standing by to assist on that.
-
br-m
<rucknium> What else would need to be done?
-
DataHoarder
address MoneroPulse page if it's decided to change so people are informed on their opt-in decision if wanted
-
br-m
<rucknium> If anyone thinks of something else that can be done and/or wants to take on a task, say it later in this room and/or on the GitHub issue:
monero-project/monero #10064
-
br-m
<rucknium> DataHoarder: Good idea. That could be folded in with crafting a blog post on getmonero.org and broadcasting info to Core'e email list so that the message is consistent.
-
br-m
<venture> i wanted to ask, do we have numbers on orphan rate pre qubic? that way the propagation time can be inferred from the poisson distribution
-
br-m
<rucknium> @rucknium: I may take on these communication tasks if no one else wants to.
-
DataHoarder
@venture we have historical p2pool logs and what miners were mining when they found their shares, every 10 seconds. sometimes you see half the miners mining on an orphan block. unknown if we have other longer term data besides monero nodes keeping alternate blocks pre-qubic
-
br-m
<rucknium> @venture:monero.social: Did you see my info about empirical block propagation times in issue 10064?
-
br-m
<rucknium> There is also an analysis of logs in a research-lab issue by @chaser:monero.social IIRC
-
br-m
<venture> ah nice. will check it out. no, wasn't aware of 10064
-
br-m
<rucknium> Next: Publish or Perish:
monero-project/research-lab #144
-
br-m
<venture> ah shit. Thought was already on the agenda. my svg related. but work in progress :)
-
br-m
<rucknium> I have been considering the methodology of these papers.
-
br-m
<rucknium> Most of these papers use Markov Decision Process (MDP) to decide the adversary's optimal behavior.
-
br-m
<rucknium> But there are two limitations to MDP. They can only model stationary processes. MDP is a subset of Stochastic Dynamic Programming (SDP), which can also model non-stationary processes.
-
br-m
<venture> my guess is they implement a miner from scratch (without PoW), and have a gloval eventqueue that calls on_mine based on poisson distribution and thinning by shares.
-
br-m
<venture> That queue gets emptied at each t and calls on_deliver
-
br-m
<rucknium> MDP also can only model a single agent's decision. The honest miners are basically on autopilot and inert.
-
br-m
<venture> and once that was set-up, they did the policy MDP..
-
br-m
<rucknium> A process is stationary if its statistical/probability processes do not depend on time.
-
br-m
<venture> @rucknium: yes, autopilot, ie always broadcasts on_mine
-
br-m
<rucknium> Mining is a Poisson process, which is memoryless. So far, so good. But difficulty adjustment is not memoryless. And a selfish minor alters difficulty adjustment.
-
br-m
<venture> yeah.. diff adjustment is often not considered in these papers. only the one with selfish-mining re-examined
-
br-m
<rucknium> Grunspan & Pérez-Marco (2019) "On profitability of selfish mining"
arxiv.org/abs/1805.08281 give a critique of modeling selfish mining in a MDP framework in this ^ basis.
-
br-m
<rucknium> on this basis*
-
br-m
<rucknium> I don't know how much this critique matters in the current scenario.
-
br-m
<rucknium> Related, I winder if the objective function in the PoP's MDP could be easily modified from relative revenue to "propaganda value", or something, since Qubic seems to care a lot about that.
-
br-m
<venture> unfortunately they didn't publish their solved MDP I thinik
-
br-m
<rucknium> On the single-player limitation to MDP, I have only seem two-player modeling in Aumayr et al. (2025) "Optimal Reward Allocation via Proportional Splitting"
arxiv.org/abs/2503.10185
-
br-m
<rucknium> They say their protocol has a Nash equilibrium for some parameter values. Maybe other papers do game theory modeling. I haven't read them all in this area.
-
br-m
<rucknium> Aumayr et al. (2025) also does MDP as a complement to their game theory modeling.
-
br-m
<rucknium> @venture:monero.social: Here was the orphan analysis by @chaser:monero.social
monero-project/research-lab #102#issuecomment-1577827259
-
br-m
<rucknium> Did Negy, Rizun, & Sirer (2020) "Selfish mining re-examined" use MDP?
-
br-m
<rucknium> My big-picture impression of PoP is that it bites most fiercely in its k parameter. The other changes seem to have the biggest effect for tie/races/near-ties. For a very strong adversary, k rules.
-
br-m
<venture> @rucknium: around 15 reorgs per month, that's insanely low, good propagation. man qubic seems well connected in sniping in between with their blocks
-
br-m
<rucknium> k is a mirror image of the rule in Bitcoin Cash (for example) that won't re-org to a chain when the re-org is more than n blocks deep. The k rule is that a node will not re-org to a chain that is less than k deep. k = infinity means that both the N and k rules are in effect, basically. That is what I understand.
-
br-m
<bawdyanarchist:matrix.org> ls
-
br-m
<bawdyanarchist:matrix.org> *sorry. stray keypres
-
br-m
<rucknium> It is possible that Negy, Rizun, & Sirer (2020) "Selfish mining re-examined" doesn't use MDP because they agree with the critique of Grunspan & Pérez-Marco (2019) , but say they don't go far enough.
-
br-m
<antilt:we2.ee> > In case of two competing chains of equal weight, the PoP paper calls for a random selection to be made, but I would suggest to use a deterministic tie breaking rule (e.g. with hashing).
-
br-m
<antilt:we2.ee> @tevador: how would that work ?
-
tevador
rucknium: with k=∞ you can still reorg, just not to a selfish chain that will have a weight of zero
-
br-m
<venture> i think diff adjustment is not elastic enough in monero for a selfish-miner.. def. worth looking into, but "static" is also valuable and should help short-term selfish-mine mitigation
-
tevador
antilt: I've been thinking about this and it seems that the random selection they propose has a reason. The attacker can't know in advance if they will win a race.
-
tevador
With deterministic selection, you plug in both chains into a hash function and that will tell you which chain to select. The attacker can do this check before deciding to publish its chain.
-
br-m
<venture> yeah. that's a downside. but uniform splits the hashrate in half
-
br-m
<venture> but even with deterministic selection, he can't the uncle in...
-
br-m
<venture> can't *get
-
br-m
<rucknium> "About 80 percent of blocks arrived at all five Monero nodes within a one-second interval."
rucknium.me/posts/monero-pool-transaction-delay
-
br-m
<rucknium> In early 2023
-
br-m
<rucknium> The magic of fluffy blocks
-
br-m
<rucknium> Stochastic dynamic programming could relax the stationarity assumption. In theory I could try that since Stochastic dynamic programming is used in economics a lot, but I don't know how difficult it would be in this case.
-
tevador
With deterministic selection, the attacker will only release a block if it wins the selection. So a probability of 1.0 to win. With random selection, the chance is (1.0+α)/2, which is < 1.0.
-
br-m
<venture> probability of 1 omits the cases where he lost hashrate effort and never broadcasts (that's not visible, but still there)
-
br-m
<antilt:we2.ee> tevador with k=3 this case would happen quite often. How do checkpoints fit in here?
-
tevador
If he loses the selection, he mines a secret block N+2 with the honest uncle.
-
br-m
<rucknium> Doesn't the attacker have to waste more hashpower to get a winning block wit deterministic selection? Throw a whole block away if it is losing?
-
br-m
<venture> tevador: i need to get my head around this memoryless thing. he would start over at this point.. but maybe that has no downside..
-
tevador
He wouldn't throw it away, he'd continue mining N+2, so his chain will have an equal weight if N+2 is released in time using the honest N+1 uncle. So the overall chance of winning is 75% for the 2 attempts.
-
br-m
<venture> i hope i can share some simulation numbers soon, with the 2 variants, uniform, deterministic
-
br-m
<venture> but what about changing the second rule, to only go for the heighest weight, if it is >= 2
-
tevador
^ Then you would have longer honest chain splits.
-
tevador
All this will probably need to be simulated first.
-
br-m
<rucknium> We can end the meeting here. Feel free to continue discussing. Thanks everyone.
-
tevador
antilt: the idea was to use k=∞ with checkpoints.
-
tevador
k=3 makes more sense without checkpoints
-
br-m
<articmine> I will respond to the fee and minimum penalty free issue in the GitHub issue
-
br-m
<articmine> tevador: ping
-
br-m
<antilt:we2.ee> thx. an attacker would <<51% and a custom strategy iiuc
-
br-m
<antilt:we2.ee> *would need
-
sech1
Rucknium next p2pool release will fast propagate all Monero blocks, so we can expect <1 second propagation times once enough p2pool miners update. My tests show propagation delay <3 ms per one hop, compared to Monero's 400+ ms
-
DataHoarder
-
DataHoarder
I touched on it lightly sech1 as well :)
-
DataHoarder
so if pools want faster propagation, all they have to do is run *a* p2pool instance, no need to mine on it, connected to one of their monerod
-
DataHoarder
p2pool should receive blocks via ZMQ and broadcast to other peers who don't have it, which in turn if these have other p2pool (like mini/nano) they would also broadcast it to most participants
-
DataHoarder
p2pool will also submit_block to that monerod with new incoming blocks
-
br-m
<rucknium> sech1: Great :)
-
br-m
<rucknium> According to my network construction simulations, all reachable nodes should get a message within 4 hops:
monero-project/monero #9939#discussion_r2285992169
-
DataHoarder
so it's a two-way bridge for faster blocks
-
br-m
<rucknium> Add reachable nodes and you would get a max of 5 total since all unreachable nodes must have an outbound connection to a reachable node (unreachable nodes cannot connect to each other).
-
sech1
Yeah, most important is that major Monero pools start running p2pool nodes connected to their block producing nodes, via zmq
-
sech1
But even without it, this change will speed up the network
-
sech1
I expect pools' effective hashrate to get >1% free boost :) Just because everyone will get new blocks faster
-
br-m
<venture> put my current simulator online here
github.com/venture-life/mining-simulator