View difference between Paste ID: P2zXLPfq and JK5CQuA4
SHOW: | | - or go back to the newest paste.
1
What you will need: 
2
 
3
● 600 bits+ on your Bustabit account 
4
● A script (included) 
5
● Calculator  
6
● Hope 
7
 
8
If you’ve played Bustabit for a while but can’t seem to churn out profit then you have 
9
a fundamental problem. There are many causes as to why this may happen such as 
10
betting to high, cashing out too late, or being affected by the “rape trains.” 
11
 
12
Our solution to this problem is to change the traditional system and turn it into 
13
something that allows you to have continuous success. 
14
 
15
Our solution:  
16
 
17
First thing we need to do is to change the base bet. You will need to calculate 
18
whether you have enough bits to survive through rape trains. The best formula for 
19
this is: 
20
 
21
Your Bits / 96  
22
 
23
This will give you enough bits to bet and return a profit whilst being considerate of 
24
rape trains happening. 
25
 
26
 
27
 
28
Second thing we need to fix is the base multiplier or as it’s commonly known, the 
29
auto­cashout. Normally it’s set to 1.10 or 1.13. What’s the point of that? You’re 
30
missing out on the ripeness of plum that’s being picked. The best base multiplier is 
31
either 1.25x or 1.33x (you decide on this one!). This will allow you to continuously 
32
make a decent profit when compared to cashing out at 1.10x. 
33
 
34
 
35
 
36
The third, yet final thing we need to change is the loss multiplier. When rape trains 
37
happens this is essentially your life support so that you can return any losses. The 
38
problem with the default value of the loss multiplier (4) is that if you lose five times in 
39
a row, as an example, you lose all your bits. We need to change this value to something lower to either 3 or 2. 
40
When the value is set to 2 it doubles the value 
41
rather than quadrupling it, it also cashes out at 1.5x. When the value is set to 3 it 
42
triples your loss, this may not seem like much of an improvement from quadrupling 
43
the value but in the end it may save your bits which is what you want.This value 
44
causes it to cash out at 1.33x on loss, also. 
45
46
47
48
 
49
As you can see from my gains this method smells and looks like success without any 
50
major losses. In the Bustabit community we call this the ‘slow, but steady’ method. It 
51
takes advantage of the ‘slow and steady wins the race’ philosophy.  
52
 
53
This method benefits you the most when you invest money into it.  
54
 
55
This method does semi­work with less than 600 bits but it is quite risky and you have 
56
a higher chance of losing most of your bits. 
57
 
58
 
59
60
61
In this book we’re going to be explaining the reasoning and logic behind the original 
62
book. 
63
 
64
How much to properly bet. 
65
 
66
In the initial book I had made a vague statement about how much to bet. This had 
67
people getting more likely to lose their hard earned money during a rape train. I’m 
68
going to better explain why I chose 96 and 128. 
69
 
70
When I had chosen those numbers I had done it so it was in binary accounting for 
71
rape trains. Eg. 3, 9, 27, 81, 243 etc. This seems logical as it would protect you 
72
against 5 continuous rapes. If you had the multiply on loss set to 3 then that binary 
73
would of done well against 4 rape trains (as it was 96 divided your total). 
74
 
75
If you would want to set your multiply on loss you 2 you could do 2, 4, 8, 16, 32, 64, 
76
128, 256 etc. This protects you against 8 rapetrains and you’re spending way less 
77
compared to the 3, but you cash out at x1.5. 
78
 
79
If you’re interested in a script that changes the bet as you earn more bits than I 
80
recommend this: var baseBet = Math.round(engine.getBalance() / 100 / 256); You 
81
need to change the last number if you want to do multiply on loss at 3.  
82
 
83
Note: ​Removing the 100 from the variable above will make you bet all your bits as it 
84
is done in satoshi’s. The 100 divides satoshis so that you can bet in bits.  
85
 
86
87
88
How much to ideally multiply on loss. 
89
 
90
The default multiplier of Procon is set to 4. I’ve suggested 2 or 3 cashout. I 
91
personally use cashout of 2 and I’ve never lost any money during rapetrains with 
92
this. It has been a different story when I use 3 though. I now suggest setting cashout 
93
at 2 instead of 3 because you’ll save money and you won’t lose it all during rape 
94
trains. 
95
 
96
Advice: ​If variablebase is set to true, set it to false. That way it won’t bet 2 bits when 
97
you set it to do higher. 
98
 
99
 
100
 
101
102
103
104
// Settings
105
var baseBet = 6; // In bits
106
var baseMultiplier = 1.33; // Target multiplier: 1.13 recommended
107
var variableBase = false; // Enable variable mode (very experimental), read streakSecurity.
108
var streakSecurity = 4; // Number of loss-streak you wanna be safe for. Increasing this massively reduces the variableBase calculated. (1-loss = 20%, 2-loss = 5%, 3-loss = 1.25% of your maximum balance). Recommended: 2+
109
var maximumBet = 999999; // Maximum bet the bot will do (in bits).
110
111
// Variables - Do not touch!
112
var baseSatoshi = baseBet * 100; // Calculated
113
var currentBet = baseSatoshi;
114
var currentMultiplier = baseMultiplier;
115
var currentGameID = -1;
116
var firstGame = true;
117
var lossStreak = 0;
118
var coolingDown = false;
119
120
// Initialization
121
console.log('====== Procon\'s BustaBit Bot ======');
122
console.log('My username is: ' + engine.getUsername());
123
console.log('Starting balance: ' + (engine.getBalance() / 100).toFixed(2) + ' bits');
124
var startingBalance = engine.getBalance();
125
126
if (variableBase) {
127
      console.warn('[WARN] Variable mode is enabled and not fully tested. Bot is resillient to ' + streakSecurity + '-loss streaks.');
128
}
129
130
// On a game starting, place the bet.
131
engine.on('game_starting', function(info) {
132
      console.log('====== New Game ======');
133
    console.log('[Bot] Game #' + info.game_id);
134
      currentGameID = info.game_id;
135
136
      if (coolingDown) {     
137
      if (lossStreak == 0) {
138
      coolingDown = false;
139
      }
140
      else {
141
      lossStreak--;
142
      console.log('[Bot] Cooling down! Games remaining: ' + lossStreak);
143
      return;
144
      }
145
      }
146
147
      if (!firstGame) { // Display data only after first game played.
148
      console.log('[Stats] Session profit: ' + ((engine.getBalance() - startingBalance) / 100).toFixed(2) + ' bits');
149
      console.log('[Stats] Profit percentage: ' + (((engine.getBalance() / startingBalance) - 1) * 100).toFixed(2) + '%');
150
      }
151
152
      if (engine.lastGamePlay() == 'LOST' && !firstGame) { // If last game loss:
153
      lossStreak++;
154
      var totalLosses = 0; // Total satoshi lost.
155
      var lastLoss = currentBet; // Store our last bet.
156
      while (lastLoss >= baseSatoshi) { // Until we get down to base bet, add the previous losses.
157
      totalLosses += lastLoss;
158
      lastLoss /= 4;
159
      }
160
161
      if (lossStreak > streakSecurity) { // If we're on a loss streak, wait a few games!
162
      coolingDown = true;
163
      return;
164
      }
165
166
      currentBet *= 3; // Then multiply base bet by 4!
167
      currentMultiplier = 1 + (totalLosses / currentBet);
168
      }
169
      else { // Otherwise if win or first game:
170
      lossStreak = 0; // If it was a win, we reset the lossStreak.
171
      if (variableBase) { // If variable bet enabled.
172
      // Variable mode resists (currently) 1 loss, by making sure you have enough to cover the base and the 4x base bet.
173
      var divider = 100;
174
      for (i = 0; i < streakSecurity; i++) {
175
      divider += (100 * Math.pow(4, (i + 1)));
176
      }
177
178
      newBaseBet = Math.min(Math.max(1, Math.floor(engine.getBalance() / divider)), maximumBet * 100); // In bits
179
      newBaseSatoshi = newBaseBet * 100;
180
181
      if ((newBaseBet != baseBet) || (newBaseBet == 1)) {
182
      console.log('[Bot] Variable mode has changed base bet to: ' + newBaseBet + ' bits');
183
      baseBet = newBaseBet;
184
      baseSatoshi = newBaseSatoshi;
185
      }
186
      }
187
      // Update bet.
188
      currentBet = baseSatoshi; // in Satoshi
189
      currentMultiplier = baseMultiplier;
190
      }
191
192
      // Message and set first game to false to be sure.
193
      console.log('[Bot] Betting ' + (currentBet / 100) + ' bits, cashing out at ' + currentMultiplier + 'x');
194
      firstGame = false;
195
196
      if (currentBet <= engine.getBalance()) { // Ensure we have enough to bet
197
      if (currentBet > (maximumBet * 100)) { // Ensure you only bet the maximum.
198
      console.warn('[Warn] Bet size exceeds maximum bet, lowering bet to ' + (maximumBet * 100) + ' bits');
199
      currentBet = maximumBet;
200
      }
201
      engine.placeBet(currentBet, Math.round(currentMultiplier * 100), false);
202
      }
203
      else { // Otherwise insufficent funds...
204
      if (engine.getBalance() < 100) {
205
      console.error('[Bot] Insufficent funds to do anything... stopping');
206
      engine.stop();
207
      }
208
      else {
209
      console.warn('[Bot] Insufficent funds to bet ' + (currentBet / 100) + ' bits.');
210
      console.warn('[Bot] Resetting to 1 bit basebet');
211
      baseBet = 1;
212
      baseSatoshi = 100;
213
      }
214
      }
215
});
216
217
engine.on('game_started', function(data) {
218
    if (!firstGame) { console.log('[Bot] Game #' + currentGameID + ' has started!'); }
219
});
220
221
engine.on('cashed_out', function(data) {
222
    if (data.username == engine.getUsername()) {      
223
      console.log('[Bot] Successfully cashed out at ' + (data.stopped_at / 100) + 'x');
224
      }
225
});
226
227
engine.on('game_crash', function(data) {
228
    if (!firstGame) { console.log('[Bot] Game crashed at ' + (data.game_crash / 100) + 'x'); }
229
});