hive-stream 3.0.0 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +35 -0
- package/DOCUMENTATION.md +380 -0
- package/README.md +113 -22
- package/dist/actions.d.ts +3 -3
- package/dist/actions.js +7 -7
- package/dist/actions.js.map +1 -1
- package/dist/adapters/base.adapter.d.ts +19 -1
- package/dist/adapters/base.adapter.js +16 -0
- package/dist/adapters/base.adapter.js.map +1 -1
- package/dist/adapters/mongodb.adapter.d.ts +5 -11
- package/dist/adapters/mongodb.adapter.js +10 -10
- package/dist/adapters/mongodb.adapter.js.map +1 -1
- package/dist/adapters/postgresql.adapter.d.ts +17 -0
- package/dist/adapters/postgresql.adapter.js +99 -8
- package/dist/adapters/postgresql.adapter.js.map +1 -1
- package/dist/adapters/sqlite.adapter.d.ts +17 -0
- package/dist/adapters/sqlite.adapter.js +99 -8
- package/dist/adapters/sqlite.adapter.js.map +1 -1
- package/dist/api.js +86 -0
- package/dist/api.js.map +1 -1
- package/dist/config.d.ts +3 -0
- package/dist/config.js +6 -3
- package/dist/config.js.map +1 -1
- package/dist/contracts/coinflip.contract.d.ts +8 -26
- package/dist/contracts/coinflip.contract.js +123 -144
- package/dist/contracts/coinflip.contract.js.map +1 -1
- package/dist/contracts/contract.d.ts +3 -0
- package/dist/contracts/contract.js +26 -0
- package/dist/contracts/contract.js.map +1 -0
- package/dist/contracts/dice.contract.d.ts +9 -36
- package/dist/contracts/dice.contract.js +135 -200
- package/dist/contracts/dice.contract.js.map +1 -1
- package/dist/contracts/exchange.contract.d.ts +11 -0
- package/dist/contracts/exchange.contract.js +492 -0
- package/dist/contracts/exchange.contract.js.map +1 -0
- package/dist/contracts/lotto.contract.d.ts +15 -19
- package/dist/contracts/lotto.contract.js +154 -162
- package/dist/contracts/lotto.contract.js.map +1 -1
- package/dist/contracts/nft.contract.d.ts +4 -0
- package/dist/contracts/nft.contract.js +65 -0
- package/dist/contracts/nft.contract.js.map +1 -1
- package/dist/contracts/poll.contract.d.ts +4 -0
- package/dist/contracts/poll.contract.js +105 -0
- package/dist/contracts/poll.contract.js.map +1 -0
- package/dist/contracts/rps.contract.d.ts +9 -0
- package/dist/contracts/rps.contract.js +217 -0
- package/dist/contracts/rps.contract.js.map +1 -0
- package/dist/contracts/tipjar.contract.d.ts +4 -0
- package/dist/contracts/tipjar.contract.js +60 -0
- package/dist/contracts/tipjar.contract.js.map +1 -0
- package/dist/contracts/token.contract.d.ts +3 -17
- package/dist/contracts/token.contract.js +128 -80
- package/dist/contracts/token.contract.js.map +1 -1
- package/dist/exchanges/coingecko.d.ts +7 -1
- package/dist/exchanges/coingecko.js +38 -21
- package/dist/exchanges/coingecko.js.map +1 -1
- package/dist/exchanges/exchange.d.ts +15 -8
- package/dist/exchanges/exchange.js +65 -11
- package/dist/exchanges/exchange.js.map +1 -1
- package/dist/hive-rates.d.ts +29 -4
- package/dist/hive-rates.js +179 -92
- package/dist/hive-rates.js.map +1 -1
- package/dist/index.d.ts +10 -3
- package/dist/index.js +18 -4
- package/dist/index.js.map +1 -1
- package/dist/streamer.d.ts +101 -8
- package/dist/streamer.js +410 -140
- package/dist/streamer.js.map +1 -1
- package/dist/test.js +11 -12
- package/dist/test.js.map +1 -1
- package/dist/types/hive-stream.d.ts +85 -14
- package/dist/types/rates.d.ts +47 -0
- package/dist/types/rates.js +29 -0
- package/dist/types/rates.js.map +1 -0
- package/dist/utils.d.ts +318 -11
- package/dist/utils.js +804 -115
- package/dist/utils.js.map +1 -1
- package/examples/contracts/README.md +8 -0
- package/examples/contracts/exchange.ts +38 -0
- package/examples/contracts/poll.ts +21 -0
- package/examples/contracts/rps.ts +19 -0
- package/examples/contracts/tipjar.ts +19 -0
- package/package.json +20 -19
- package/tests/actions.spec.ts +7 -7
- package/tests/adapters/actions-persistence.spec.ts +4 -4
- package/tests/adapters/sqlite.adapter.spec.ts +2 -2
- package/tests/contracts/coinflip.contract.spec.ts +26 -154
- package/tests/contracts/dice.contract.spec.ts +24 -140
- package/tests/contracts/exchange.contract.spec.ts +84 -0
- package/tests/contracts/lotto.contract.spec.ts +30 -295
- package/tests/contracts/token.contract.spec.ts +72 -316
- package/tests/exchanges/coingecko.exchange.spec.ts +169 -0
- package/tests/exchanges/exchange.base.spec.ts +246 -0
- package/tests/helpers/mock-fetch.ts +165 -0
- package/tests/hive-chain-features.spec.ts +238 -0
- package/tests/hive-rates.spec.ts +443 -0
- package/tests/integration/hive-rates.integration.spec.ts +35 -0
- package/tests/streamer-actions.spec.ts +29 -18
- package/tests/streamer.spec.ts +142 -49
- package/tests/types/rates.spec.ts +216 -0
- package/tests/utils.spec.ts +27 -6
|
@@ -3,71 +3,62 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.createCoinflipContract = createCoinflipContract;
|
|
7
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
7
8
|
const seedrandom_1 = __importDefault(require("seedrandom"));
|
|
8
9
|
const uuid_1 = require("uuid");
|
|
9
|
-
const
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
// Provably Fair Random Number Generator for coinflip
|
|
17
|
-
// Uses deterministic blockchain data to ensure results are verifiable by users
|
|
10
|
+
const zod_1 = require("zod");
|
|
11
|
+
const contract_1 = require("./contract");
|
|
12
|
+
const DEFAULT_NAME = 'coinflip';
|
|
13
|
+
const DEFAULT_ACCOUNT = 'beggars';
|
|
14
|
+
const DEFAULT_TOKEN_SYMBOL = 'HIVE';
|
|
15
|
+
const DEFAULT_MIN_AMOUNT = 0.001;
|
|
16
|
+
const DEFAULT_MAX_AMOUNT = 20;
|
|
18
17
|
function rng(previousBlockId, blockId, transactionId, serverSeed, clientSeed = '') {
|
|
19
|
-
// Validate inputs to prevent manipulation
|
|
20
18
|
if (!previousBlockId || !blockId || !transactionId || !serverSeed) {
|
|
21
19
|
throw new Error('Invalid RNG parameters');
|
|
22
20
|
}
|
|
23
21
|
const random = (0, seedrandom_1.default)(`${previousBlockId}${blockId}${transactionId}${clientSeed}${serverSeed}`).double();
|
|
24
22
|
const randomRoll = Math.floor(random * 2) + 1;
|
|
25
|
-
// Ensure result is within expected range
|
|
26
23
|
if (randomRoll < 1 || randomRoll > 2) {
|
|
27
24
|
throw new Error('RNG generated invalid result');
|
|
28
25
|
}
|
|
29
26
|
return randomRoll === 1 ? 'heads' : 'tails';
|
|
30
27
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
* Get Balance with caching
|
|
53
|
-
*/
|
|
54
|
-
async getBalance() {
|
|
28
|
+
function createCoinflipContract(options = {}) {
|
|
29
|
+
const name = options.name || DEFAULT_NAME;
|
|
30
|
+
const account = options.account || DEFAULT_ACCOUNT;
|
|
31
|
+
const tokenSymbol = options.tokenSymbol || DEFAULT_TOKEN_SYMBOL;
|
|
32
|
+
const validCurrencies = options.validCurrencies || [tokenSymbol];
|
|
33
|
+
const minAmount = options.minAmount ?? DEFAULT_MIN_AMOUNT;
|
|
34
|
+
const maxAmount = options.maxAmount ?? DEFAULT_MAX_AMOUNT;
|
|
35
|
+
const state = {
|
|
36
|
+
streamer: null,
|
|
37
|
+
adapter: null,
|
|
38
|
+
balanceCache: null,
|
|
39
|
+
balanceCacheTimeout: 30000,
|
|
40
|
+
betQueue: [],
|
|
41
|
+
processingQueue: false,
|
|
42
|
+
pendingPayouts: new bignumber_js_1.default(0)
|
|
43
|
+
};
|
|
44
|
+
const flipSchema = zod_1.z.object({
|
|
45
|
+
guess: zod_1.z.enum(['heads', 'tails']),
|
|
46
|
+
seed: zod_1.z.string().optional()
|
|
47
|
+
});
|
|
48
|
+
const getBalance = async () => {
|
|
55
49
|
const now = Date.now();
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
return this.balanceCache.balance;
|
|
50
|
+
if (state.balanceCache && (now - state.balanceCache.timestamp) < state.balanceCacheTimeout) {
|
|
51
|
+
return state.balanceCache.balance;
|
|
59
52
|
}
|
|
60
53
|
try {
|
|
61
|
-
const
|
|
62
|
-
if (
|
|
63
|
-
const
|
|
64
|
-
const amount = new bignumber_js_1.default(
|
|
65
|
-
// Validate the amount is a valid number
|
|
54
|
+
const accountInfo = await state.streamer['client'].database.getAccounts([account]);
|
|
55
|
+
if (accountInfo?.[0]) {
|
|
56
|
+
const balanceParts = accountInfo[0].balance.split(' ');
|
|
57
|
+
const amount = new bignumber_js_1.default(balanceParts[0]);
|
|
66
58
|
if (amount.isNaN() || !amount.isFinite()) {
|
|
67
59
|
throw new Error('Invalid balance format received from API');
|
|
68
60
|
}
|
|
69
|
-
|
|
70
|
-
this.balanceCache = {
|
|
61
|
+
state.balanceCache = {
|
|
71
62
|
balance: amount,
|
|
72
63
|
timestamp: now
|
|
73
64
|
};
|
|
@@ -76,43 +67,19 @@ class CoinflipContract {
|
|
|
76
67
|
}
|
|
77
68
|
catch (error) {
|
|
78
69
|
console.error('[CoinflipContract] Error fetching balance:', error);
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
return this.balanceCache.balance;
|
|
70
|
+
if (state.balanceCache) {
|
|
71
|
+
return state.balanceCache.balance;
|
|
82
72
|
}
|
|
83
73
|
}
|
|
84
74
|
return new bignumber_js_1.default(0);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
this.blockNumber = blockNumber;
|
|
89
|
-
this.blockId = blockId;
|
|
90
|
-
this.previousBlockId = previousBlockId;
|
|
91
|
-
this.transactionId = transactionId;
|
|
92
|
-
}
|
|
93
|
-
async flip(payload, { sender, amount }) {
|
|
94
|
-
// Add bet to queue for processing
|
|
95
|
-
return new Promise((resolve, reject) => {
|
|
96
|
-
this.betQueue.push(async () => {
|
|
97
|
-
try {
|
|
98
|
-
await this.processFlip(payload, { sender, amount });
|
|
99
|
-
resolve();
|
|
100
|
-
}
|
|
101
|
-
catch (error) {
|
|
102
|
-
reject(error);
|
|
103
|
-
}
|
|
104
|
-
});
|
|
105
|
-
// Start processing queue if not already running
|
|
106
|
-
this.processQueue();
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
|
-
async processQueue() {
|
|
110
|
-
if (this.processingQueue || this.betQueue.length === 0) {
|
|
75
|
+
};
|
|
76
|
+
const processQueue = async () => {
|
|
77
|
+
if (state.processingQueue || state.betQueue.length === 0) {
|
|
111
78
|
return;
|
|
112
79
|
}
|
|
113
|
-
|
|
114
|
-
while (
|
|
115
|
-
const nextBet =
|
|
80
|
+
state.processingQueue = true;
|
|
81
|
+
while (state.betQueue.length > 0) {
|
|
82
|
+
const nextBet = state.betQueue.shift();
|
|
116
83
|
if (nextBet) {
|
|
117
84
|
try {
|
|
118
85
|
await nextBet();
|
|
@@ -122,133 +89,145 @@ class CoinflipContract {
|
|
|
122
89
|
}
|
|
123
90
|
}
|
|
124
91
|
}
|
|
125
|
-
|
|
126
|
-
}
|
|
127
|
-
async
|
|
92
|
+
state.processingQueue = false;
|
|
93
|
+
};
|
|
94
|
+
const processFlip = async (payload, ctx) => {
|
|
95
|
+
if (!ctx.transfer) {
|
|
96
|
+
throw new Error('Transfer context required for flip');
|
|
97
|
+
}
|
|
98
|
+
const sender = ctx.sender;
|
|
99
|
+
const amountRaw = ctx.transfer.rawAmount;
|
|
128
100
|
try {
|
|
129
|
-
|
|
130
|
-
if (!payload || typeof payload !== 'object') {
|
|
131
|
-
throw new Error('Invalid payload structure');
|
|
132
|
-
}
|
|
133
|
-
const { guess, seed } = payload;
|
|
134
|
-
const VALID_GUESSES = ['heads', 'tails'];
|
|
135
|
-
// Validate amount format
|
|
136
|
-
if (!amount || typeof amount !== 'string' || !amount.includes(' ')) {
|
|
101
|
+
if (!amountRaw || typeof amountRaw !== 'string' || !amountRaw.includes(' ')) {
|
|
137
102
|
throw new Error('Invalid amount format');
|
|
138
103
|
}
|
|
139
|
-
const amountTrim =
|
|
104
|
+
const amountTrim = amountRaw.split(' ');
|
|
140
105
|
if (amountTrim.length !== 2) {
|
|
141
106
|
throw new Error('Invalid amount format');
|
|
142
107
|
}
|
|
143
|
-
// Parse the numeric value using BigNumber for precision
|
|
144
108
|
const amountParsed = new bignumber_js_1.default(amountTrim[0]);
|
|
145
|
-
// Validate the parsed amount
|
|
146
109
|
if (amountParsed.isNaN() || !amountParsed.isFinite() || amountParsed.isNegative()) {
|
|
147
110
|
throw new Error('Invalid amount value');
|
|
148
111
|
}
|
|
149
112
|
const amountCurrency = amountTrim[1].trim();
|
|
150
|
-
const transaction = await
|
|
151
|
-
const verify = await
|
|
152
|
-
|
|
153
|
-
const
|
|
154
|
-
// Calculate available balance (total - pending payouts)
|
|
155
|
-
const availableBalance = balance.minus(this.pendingPayouts);
|
|
113
|
+
const transaction = await state.streamer.getTransaction(ctx.block.number, ctx.transaction.id);
|
|
114
|
+
const verify = await state.streamer.verifyTransfer(transaction, sender, account, amountRaw);
|
|
115
|
+
const balance = await getBalance();
|
|
116
|
+
const availableBalance = balance.minus(state.pendingPayouts);
|
|
156
117
|
if (verify) {
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
await this._instance.transferHiveTokens(ACCOUNT, sender, amountTrim[0], amountTrim[1], `[Refund] You sent an invalid currency.`);
|
|
118
|
+
if (!validCurrencies.includes(amountCurrency)) {
|
|
119
|
+
await state.streamer.transferHiveTokens(account, sender, amountTrim[0], amountTrim[1], '[Refund] You sent an invalid currency.');
|
|
160
120
|
return;
|
|
161
121
|
}
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
await this._instance.transferHiveTokens(ACCOUNT, sender, amountTrim[0], amountTrim[1], `[Refund] Bet amount too small. Minimum: ${MIN_AMOUNT} ${amountCurrency}.`);
|
|
122
|
+
if (amountParsed.isLessThan(minAmount)) {
|
|
123
|
+
await state.streamer.transferHiveTokens(account, sender, amountTrim[0], amountTrim[1], `[Refund] Bet amount too small. Minimum: ${minAmount} ${amountCurrency}.`);
|
|
165
124
|
return;
|
|
166
125
|
}
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
await this._instance.transferHiveTokens(ACCOUNT, sender, amountTrim[0], amountTrim[1], `[Refund] You sent too much. Maximum: ${MAX_AMOUNT} ${amountCurrency}.`);
|
|
126
|
+
if (amountParsed.isGreaterThan(maxAmount)) {
|
|
127
|
+
await state.streamer.transferHiveTokens(account, sender, amountTrim[0], amountTrim[1], `[Refund] You sent too much. Maximum: ${maxAmount} ${amountCurrency}.`);
|
|
170
128
|
return;
|
|
171
129
|
}
|
|
172
|
-
// Calculate potential payout (2x bet amount)
|
|
173
130
|
const potentialPayout = amountParsed.multipliedBy(2);
|
|
174
|
-
// Check if server can afford the payout
|
|
175
131
|
if (potentialPayout.isGreaterThan(availableBalance)) {
|
|
176
|
-
await
|
|
177
|
-
return;
|
|
178
|
-
}
|
|
179
|
-
// Invalid guess
|
|
180
|
-
if (!guess || !VALID_GUESSES.includes(guess)) {
|
|
181
|
-
await this._instance.transferHiveTokens(ACCOUNT, sender, amountTrim[0], amountTrim[1], `[Refund] Invalid guess. Please only send heads or tails.`);
|
|
132
|
+
await state.streamer.transferHiveTokens(account, sender, amountTrim[0], amountTrim[1], '[Refund] The server cannot afford this bet payout.');
|
|
182
133
|
return;
|
|
183
134
|
}
|
|
184
|
-
|
|
185
|
-
this.pendingPayouts = this.pendingPayouts.plus(potentialPayout);
|
|
135
|
+
state.pendingPayouts = state.pendingPayouts.plus(potentialPayout);
|
|
186
136
|
try {
|
|
187
137
|
const serverSeed = (0, uuid_1.v4)();
|
|
188
|
-
// Validate server seed was generated
|
|
189
138
|
if (!serverSeed || typeof serverSeed !== 'string') {
|
|
190
139
|
throw new Error('Failed to generate server seed');
|
|
191
140
|
}
|
|
192
|
-
const generatedGuess = rng(
|
|
193
|
-
if (generatedGuess === guess) {
|
|
194
|
-
await
|
|
141
|
+
const generatedGuess = rng(ctx.block.previousId, ctx.block.id, ctx.transaction.id, serverSeed, payload.seed ?? '');
|
|
142
|
+
if (generatedGuess === payload.guess) {
|
|
143
|
+
await state.adapter.addEvent(new Date(), name, 'flip', payload, {
|
|
195
144
|
action: 'transfer',
|
|
196
145
|
data: {
|
|
197
146
|
date: new Date(),
|
|
198
|
-
guess,
|
|
147
|
+
guess: payload.guess,
|
|
199
148
|
serverSeed,
|
|
200
|
-
previousBlockId:
|
|
201
|
-
blockId:
|
|
202
|
-
transactionId:
|
|
149
|
+
previousBlockId: ctx.block.previousId,
|
|
150
|
+
blockId: ctx.block.id,
|
|
151
|
+
transactionId: ctx.transaction.id,
|
|
203
152
|
userWon: 'true'
|
|
204
153
|
}
|
|
205
154
|
});
|
|
206
|
-
await
|
|
155
|
+
await state.streamer.transferHiveTokens(account, sender, potentialPayout.toFixed(3), amountTrim[1], `[Winner] | Guess: ${payload.guess} | Server Roll: ${generatedGuess} | Previous block id: ${ctx.block.previousId} | BlockID: ${ctx.block.id} | Trx ID: ${ctx.transaction.id} | Server Seed: ${serverSeed}`);
|
|
207
156
|
return;
|
|
208
157
|
}
|
|
209
|
-
await
|
|
158
|
+
await state.adapter.addEvent(new Date(), name, 'flip', payload, {
|
|
210
159
|
action: 'transfer',
|
|
211
160
|
data: {
|
|
212
|
-
guess,
|
|
161
|
+
guess: payload.guess,
|
|
213
162
|
serverSeed,
|
|
214
|
-
previousBlockId:
|
|
215
|
-
blockId:
|
|
216
|
-
transactionId:
|
|
163
|
+
previousBlockId: ctx.block.previousId,
|
|
164
|
+
blockId: ctx.block.id,
|
|
165
|
+
transactionId: ctx.transaction.id,
|
|
217
166
|
userWon: 'false'
|
|
218
167
|
}
|
|
219
168
|
});
|
|
220
|
-
await
|
|
169
|
+
await state.streamer.transferHiveTokens(account, sender, '0.001', amountTrim[1], `[Lost] | Guess: ${payload.guess} | Server Roll: ${generatedGuess} | Previous block id: ${ctx.block.previousId} | BlockID: ${ctx.block.id} | Trx ID: ${ctx.transaction.id} | Server Seed: ${serverSeed}`);
|
|
221
170
|
}
|
|
222
171
|
finally {
|
|
223
|
-
|
|
224
|
-
this.pendingPayouts = this.pendingPayouts.minus(potentialPayout);
|
|
172
|
+
state.pendingPayouts = state.pendingPayouts.minus(potentialPayout);
|
|
225
173
|
}
|
|
226
174
|
}
|
|
227
175
|
}
|
|
228
176
|
catch (e) {
|
|
229
177
|
const error = e instanceof Error ? e : new Error(String(e));
|
|
230
|
-
console.error(
|
|
178
|
+
console.error('[CoinflipContract] Flip processing error:', {
|
|
231
179
|
sender,
|
|
232
|
-
amount,
|
|
180
|
+
amount: amountRaw,
|
|
233
181
|
payload,
|
|
234
|
-
|
|
182
|
+
message: error.message
|
|
235
183
|
});
|
|
236
|
-
// Attempt to refund on error if amount is valid
|
|
237
184
|
try {
|
|
238
|
-
if (
|
|
239
|
-
const [amountStr, currency] =
|
|
185
|
+
if (amountRaw && typeof amountRaw === 'string' && amountRaw.includes(' ')) {
|
|
186
|
+
const [amountStr, currency] = amountRaw.split(' ');
|
|
240
187
|
const amountBN = new bignumber_js_1.default(amountStr);
|
|
241
188
|
if (!amountBN.isNaN() && amountBN.isFinite() && !amountBN.isNegative()) {
|
|
242
|
-
await
|
|
189
|
+
await state.streamer.transferHiveTokens(account, sender, amountStr, currency, '[Refund] Processing error occurred.');
|
|
243
190
|
}
|
|
244
191
|
}
|
|
245
192
|
}
|
|
246
193
|
catch (refundError) {
|
|
247
|
-
console.error(
|
|
194
|
+
console.error('[CoinflipContract] Failed to refund after error:', refundError);
|
|
248
195
|
}
|
|
249
196
|
throw error;
|
|
250
197
|
}
|
|
251
|
-
}
|
|
198
|
+
};
|
|
199
|
+
const flip = async (payload, ctx) => {
|
|
200
|
+
return new Promise((resolve, reject) => {
|
|
201
|
+
state.betQueue.push(async () => {
|
|
202
|
+
try {
|
|
203
|
+
await processFlip(payload, ctx);
|
|
204
|
+
resolve();
|
|
205
|
+
}
|
|
206
|
+
catch (error) {
|
|
207
|
+
reject(error);
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
processQueue();
|
|
211
|
+
});
|
|
212
|
+
};
|
|
213
|
+
return (0, contract_1.defineContract)({
|
|
214
|
+
name,
|
|
215
|
+
hooks: {
|
|
216
|
+
create: ({ streamer, adapter }) => {
|
|
217
|
+
state.streamer = streamer;
|
|
218
|
+
state.adapter = adapter;
|
|
219
|
+
},
|
|
220
|
+
destroy: () => {
|
|
221
|
+
state.betQueue = [];
|
|
222
|
+
state.processingQueue = false;
|
|
223
|
+
}
|
|
224
|
+
},
|
|
225
|
+
actions: {
|
|
226
|
+
flip: (0, contract_1.action)(flip, {
|
|
227
|
+
schema: flipSchema,
|
|
228
|
+
trigger: 'transfer'
|
|
229
|
+
})
|
|
230
|
+
}
|
|
231
|
+
});
|
|
252
232
|
}
|
|
253
|
-
exports.CoinflipContract = CoinflipContract;
|
|
254
233
|
//# sourceMappingURL=coinflip.contract.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coinflip.contract.js","sourceRoot":"","sources":["../../src/contracts/coinflip.contract.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"coinflip.contract.js","sourceRoot":"","sources":["../../src/contracts/coinflip.contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { ContractActionDefinition, ContractContext, ContractDefinition } from '../types/hive-stream';
|
|
2
|
+
export declare function action<Payload>(handler: (payload: Payload, ctx: ContractContext) => void | Promise<void>, options?: Omit<ContractActionDefinition<Payload>, 'handler'>): ContractActionDefinition<Payload>;
|
|
3
|
+
export declare function defineContract(definition: ContractDefinition): ContractDefinition;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.action = action;
|
|
4
|
+
exports.defineContract = defineContract;
|
|
5
|
+
function action(handler, options = {}) {
|
|
6
|
+
return {
|
|
7
|
+
handler,
|
|
8
|
+
...options,
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
function defineContract(definition) {
|
|
12
|
+
if (!definition || typeof definition !== 'object') {
|
|
13
|
+
throw new Error('Contract definition must be an object');
|
|
14
|
+
}
|
|
15
|
+
if (!definition.name || typeof definition.name !== 'string') {
|
|
16
|
+
throw new Error('Contract definition requires a name');
|
|
17
|
+
}
|
|
18
|
+
if (!definition.actions || typeof definition.actions !== 'object') {
|
|
19
|
+
throw new Error(`Contract '${definition.name}' must define actions`);
|
|
20
|
+
}
|
|
21
|
+
if (Object.keys(definition.actions).length === 0) {
|
|
22
|
+
throw new Error(`Contract '${definition.name}' must define at least one action`);
|
|
23
|
+
}
|
|
24
|
+
return definition;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/contracts/contract.ts"],"names":[],"mappings":";;AAEA,wBAQC;AAED,wCAkBC;AA5BD,SAAgB,MAAM,CAClB,OAAyE,EACzE,UAA8D,EAAE;IAEhE,OAAO;QACH,OAAO;QACP,GAAG,OAAO;KACb,CAAC;AACN,CAAC;AAED,SAAgB,cAAc,CAAC,UAA8B;IACzD,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,OAAO,UAAU,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,OAAO,IAAI,OAAO,UAAU,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChE,MAAM,IAAI,KAAK,CAAC,aAAa,UAAU,CAAC,IAAI,uBAAuB,CAAC,CAAC;IACzE,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,aAAa,UAAU,CAAC,IAAI,mCAAmC,CAAC,CAAC;IACrF,CAAC;IAED,OAAO,UAAU,CAAC;AACtB,CAAC"}
|
|
@@ -1,37 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
private readonly balanceCacheTimeout;
|
|
10
|
-
private betQueue;
|
|
11
|
-
private processingQueue;
|
|
12
|
-
private pendingPayouts;
|
|
13
|
-
create(): void;
|
|
14
|
-
destroy(): void;
|
|
15
|
-
updateBlockInfo(blockNumber: any, blockId: any, previousBlockId: any, transactionId: any): void;
|
|
16
|
-
/**
|
|
17
|
-
* Get Balance
|
|
18
|
-
*
|
|
19
|
-
* Helper method for getting the contract account balance with caching
|
|
20
|
-
* We cache the balance to reduce API calls since it doesn't change frequently
|
|
21
|
-
*
|
|
22
|
-
* @returns number
|
|
23
|
-
*/
|
|
24
|
-
private getBalance;
|
|
25
|
-
/**
|
|
26
|
-
* Roll
|
|
27
|
-
*
|
|
28
|
-
* Automatically called when a custom JSON action matches the following method
|
|
29
|
-
*
|
|
30
|
-
* @param payload
|
|
31
|
-
* @param param1 - sender and amount
|
|
32
|
-
*/
|
|
33
|
-
private roll;
|
|
34
|
-
private processQueue;
|
|
35
|
-
private processRoll;
|
|
36
|
-
private testauto;
|
|
1
|
+
export interface DiceContractOptions {
|
|
2
|
+
name?: string;
|
|
3
|
+
account?: string;
|
|
4
|
+
tokenSymbol?: string;
|
|
5
|
+
validCurrencies?: string[];
|
|
6
|
+
houseEdge?: number;
|
|
7
|
+
minBet?: number;
|
|
8
|
+
maxBet?: number;
|
|
37
9
|
}
|
|
10
|
+
export declare function createDiceContract(options?: DiceContractOptions): import("..").ContractDefinition;
|