BlogNomic has moved!

The game is now running at blognomic.com

Monday, November 08, 2004

Call for Judgement: Exploit Fix

I apologize in advance for the length of this post.

I propose a call for judgement to eliminate the exploit discovered. If you want details of the exploit, scroll way down to the bottom of this post and look at the last quote bit of text. Its very detailed, and not exactly in a way that someone unfamiliar with mathematical proofs or CS would understand. I spent one hour polishing this post as it is. If you don't care what the exploit is and just want it fixed, keep reading and then vote Yes for the CfJ.

A vote for Yes for this CfJ causes the following changes:

The text for Rule 11 - Parties is changed to read the following:
A Lord’s Party and Vote for Speaker are tracked in the GNDT.

Any Lord may announce the creation of a new Party by posting an entry with the subject “Party Creation: [Party Name]”. Optionally any number of invites may be included in the format “Invite: [Lord Name]”. Lords who are invited in this way may immediately join the Party without requesting permission. If the creating Lord was already in a Party, creating a Party costs 10 Confidence and all other Lords in the Party lose 5 Confidence. Upon announcing the creation of a Party, a Lord's Party is set to that Party. Announcements may not be edited as soon as the announced Party has more than one Lord.

Parties have a Speaker. Any Lord in a Party and not Speaker of that Party is referred to as a Member. All Lords within a Party must name a Lord, within that Party, which they want to be the Speaker, and they may only change that nomination once per day. At any time, if the totaled number of Electoral Votes of all Lords thus naming a Lord for Speakership exceeds the totaled number of Electoral Votes of all Lords thus naming the current Speaker, any Lord in the effected Party may change the Party’s Speakership.

If a Party has currently no Speaker, any Lord of that Party may change the Party’s Speakership so it goes to the Lord with the higher totaled number of Electoral Votes of Lords naming him.

A Party’s Speakership is indicated by adding a * to the end of the Speaker’s Party name.

Lords who are not in a Party are not considered Lords for rules other than 1, 2, 3, 7, 8, 11 and 12.

If a Party has only one Lord, that Lord is called a Rogue. Rogue Lords are not considered Lords for the purpose of Requesting Audiences with any Party.

If at any time a Lord would be in multiple Parties, they are in the last Party they joined only.

Any time a Lord joins a Party, all invitations that have been extended for that Lord to join other Parties cease to apply.

If an invitation to join a Party has been standing for more than 48 hours, it ceases to apply.


Why? Eliminates the perilous case that happens when people write rules assuming Speakers are not Members, which was NOT the case in the previous ruleset.

Add the following sentence to the end of Rule 21 - Electoral Gain:

No Lord may gain an Electoral Vote in the 24 hours after joining a Party.


Replace the following text in Rule 21 - Electoral Gain:

Once within the period of 24 hours after the Speaker of Party has gained an Electoral Vote, that Speaker may choose to transfer that Vote to any Member of his Party.

Once within the period of 24 hours after the Speaker of Party was entitled to gain an Electoral Vote, but failed to do so due to a cap to his Electoral Votes, that Speaker may choose to award that Vote to any Member of his Party.

Once within the period of 24 hours after the High Lord has gained an Electoral Vote, he may choose to transfer that Vote to any Speaker of a Party.

Once within the period of 24 hours after the High Lord was entitled to gain an Electoral Vote, but failed to do so due to a cap to his Electoral Votes, he may choose to award that Vote to any Speaker of a Party.


with the text


Once within the period of 24 hours after the Speaker of Party has gained an Electoral Vote, if the Speakership of the Party has not been transferred since the gain took place, that Speaker may choose to transfer that Vote to any Member of his Party.

Once within the period of 24 hours after the Speaker of Party was entitled to gain an Electoral Vote, but failed to do so due to a cap to his Electoral Votes, if the Speakership of the Party has not been transferred since the gain took place, that Speaker may choose to award that Vote to any Member of his Party.

Once within the period of 24 hours after the High Lord has gained an Electoral Vote, he may choose to transfer that Vote to any Speaker of a Party who is not the High Lord.

Once within the period of 24 hours after the High Lord was entitled to gain an Electoral Vote, but failed to do so due to a cap to his Electoral Votes, he may choose to award that Vote to any Speaker of a Party who is not the High Lord.


Why? Breaks the recursion outlined, and stops the case of the High Lord assuming Speakership of a Party and being able to turn himself into a one man vote recursing machine (I won't detail this exploit -- its very similar to the one I'm fixing, and I decided to kill two birds with one stone).

Patio11's Confidence is set to 80 from whatever value it currently is. To eliminate the penalty for the failed Straw Poll Proposal and give me a reward for not being a bastard. The reward comes out to be a net of 5 Confidence, no big deal.

Any Lord with more than 3 Electoral Votes has their Electoral Vote total reduced to 1 and their Confidence reduced to the lower of one half of their current number, or 50. This is the penalty clause suggested for someone who immediately uses the exploit to game the system -- the exploit is the only feasible way to get your EV above 3 before the Call for Judgement passes.

The exploit:

Subroutine: In a two man Party you can swap Speakership if EV totals are equal. Banish current Speaker -- both people vote affirmative. Banish passes. Remove leader, install new leader. Invite old leader back. Note that this murders Confidence but since Confidence isn't a cost of the Banish action this doesn't matter -- it will just get zeroed eventually and then when the Party has achieved total dominance they can give themselves as much as they want.

Definition: float -- Take advantage of the rule which allows the Speaker to postpone gaining a vote for 24 hours if it would put them over the cap. Note that it doesn't ask if you were the Speaker when you gained the vote, and it does allow you to transfer the vote to yourself, because the Speaker is also a Member ("any Member of his Party") currently. "Take down float" means realize the gain of a floated electoral vote.


When you should stop the loop -- You can stop looping after your two-man alliance reaches 7 electoral votes (the number currently in play is 12 -- at most 10 of these are against you. 7 seems like an insurmountable lead at the moment, as it requires all but a unanimous vote of the other players to defeat you, and increasing your EV count after you have 7 is trivially easy -- sooner or later the unanimous vote will break. You CAN exploit up to 10 but its a little more difficult -- not significantly so, though). You also need to stop the loop, without victory, if I say "breaks the recursion" in the following description.

Little niggly bits -- This method doesn't require passing a single proposal until the loop is ended. The votes for Banishment and letting in the "new" alliance member are assumed to be automatic and instantaneous -- the only thing you can do meaningfully after the loop has started is to ban it or exploit it yourself, but faster. The loop takes an average of under 6 DICE to win when it and 3 DICE to fail to win, starting from a total of 3 EV controlled by the conspiracy Party, so you won't be at it all night (if you spot them extra votes, winning comes quicker, losing takes longer).

Loop invariants (These things must be true when you get to the loop):

A and B are in a two man Party.
A, B are both voting for themselves as Speaker.
At least one of A or B has EV > 1, and the other person has either the same number of votes or exactly one vote less.
The Speaker has just received an EV, and has not yet tarnished it (rolled dice or given it away).

Loop: If parity is odd (Speaker has one more vote than other. Without loss of generality, Speaker is A.)

A gives one vote to B. This causes B to float, and A and B are equal. Swap leader. B is now speaker. B takes down float. B = A + 1, B has just gained a vote. B makes dice roll.

Case 1: Both A & B lose one vote. Kills recursion if they both have only one. If not, odd parity, B gives one vote to A, A floats, swap leader, A takes down float. Recurse at odd.
Case 2: If A only had 1, don't care. B gives one vote to A, A floats, swap leader, A takes down float. Recurse at odd. If A has more than one vote, give one vote to A. A floats. Banish B, both vote in favor. Invite B, B has more votes than Speaker, equalize votes according to EV cap. A takes down float. Total votes decreases by one or two. Recurse at odd.
Case 3,4: B gives vote to A. A floats. Swap leader. A takes down float. Recurse at odd.
Case 5: A, B reach even parity. Total votes increases by one. Recurse at even.
Case 6: Odd parity maintained. Total votes increases by two. B gives vote to A, A floats. Swap leader. A takes down float. Recurse at odd.


Loop: Parity is even (Both have equal number of votes, but not equal to one. Loop invariants same as before. Without loss of generality, Speaker is A. If A doesn't have untarnished vote, then B does -- swap leader, and call the new Speaker A.)

Trigger die roll.

Case 1: Kills recursion if both have 1 vote. If not, recurse at even.
Case 2: Brings to odd parity. Note that you've used your roll, but not your give. A gives vote to B. B floats. Swap leader. B takes down float. Total number of votes decreases. Recurse at odd parity.
Case 3,4: Note you've used your roll, but not your give. A gives vote to B. B floats, immediately loses 1 vote due to having more votes than leader (equalizing votes). Swap leader. B takes down float. Total number of votes decreases. Recurse at odd parity.
Case 5: B gets float. Swap leader. B takes down float. Recurse at odd parity, Total votes++.
Case 6: Even parity maintained. Total votes +=2. Recurse at even parity.


OK, big deal you say, you need to get lucky for this to work. Nope -- I threw my computer at the problem and had it do a couple of thousand trials. Starting from A=2, B=1 gets the A-B alliance to a quorum busting 7 votes 25% of the time. If you start with 2/2, you get 40%. 3/2, you get 60%. 3/3, 75%. (I'm doing some rounding here) So it turns out that, when I said the exploit was trivial, it wasn't quite. But hey, a minimum 25% chance of breaking the game open per electoral vote gained is kinda scary, and assuming everyone jumped on the exploit bandwagon someone is almost guaranteed to win with this strategy, after overloading the poor computer with DICE requests.


I can give you the gawk script which demonstrates this vulnerability if you really want it. You have to buy that the vulernability works as I described, though -- if so, it outputs the percentage chance of Ascention given the initial EV totals of the pair of conspirators.
5-0 Reached Quorum. Ruleset and Gamestate amended by Orson, Nov 8