hive-stream 3.0.2 → 3.0.3

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.
Files changed (197) hide show
  1. package/DOCUMENTATION.md +50 -2
  2. package/README.md +44 -3
  3. package/dist/adapters/base.adapter.d.ts +5 -0
  4. package/dist/adapters/base.adapter.js +9 -0
  5. package/dist/adapters/base.adapter.js.map +1 -1
  6. package/dist/adapters/mongodb.adapter.d.ts +6 -6
  7. package/dist/adapters/mongodb.adapter.js +36 -21
  8. package/dist/adapters/mongodb.adapter.js.map +1 -1
  9. package/dist/adapters/postgresql.adapter.d.ts +7 -0
  10. package/dist/adapters/postgresql.adapter.js +46 -19
  11. package/dist/adapters/postgresql.adapter.js.map +1 -1
  12. package/dist/adapters/sqlite.adapter.d.ts +4 -0
  13. package/dist/adapters/sqlite.adapter.js +10 -0
  14. package/dist/adapters/sqlite.adapter.js.map +1 -1
  15. package/dist/api.d.ts +13 -3
  16. package/dist/api.js +96 -62
  17. package/dist/api.js.map +1 -1
  18. package/dist/config.d.ts +7 -1
  19. package/dist/config.js +7 -1
  20. package/dist/config.js.map +1 -1
  21. package/dist/contracts/auctionhouse.contract.d.ts +4 -0
  22. package/dist/contracts/auctionhouse.contract.js +234 -0
  23. package/dist/contracts/auctionhouse.contract.js.map +1 -0
  24. package/dist/contracts/booking.contract.d.ts +4 -0
  25. package/dist/contracts/booking.contract.js +225 -0
  26. package/dist/contracts/booking.contract.js.map +1 -0
  27. package/dist/contracts/bountyboard.contract.d.ts +4 -0
  28. package/dist/contracts/bountyboard.contract.js +233 -0
  29. package/dist/contracts/bountyboard.contract.js.map +1 -0
  30. package/dist/contracts/bundlemarketplace.contract.d.ts +4 -0
  31. package/dist/contracts/bundlemarketplace.contract.js +195 -0
  32. package/dist/contracts/bundlemarketplace.contract.js.map +1 -0
  33. package/dist/contracts/charitymatch.contract.d.ts +4 -0
  34. package/dist/contracts/charitymatch.contract.js +172 -0
  35. package/dist/contracts/charitymatch.contract.js.map +1 -0
  36. package/dist/contracts/coinflip.contract.js +7 -1
  37. package/dist/contracts/coinflip.contract.js.map +1 -1
  38. package/dist/contracts/crowdfund.contract.d.ts +4 -0
  39. package/dist/contracts/crowdfund.contract.js +290 -0
  40. package/dist/contracts/crowdfund.contract.js.map +1 -0
  41. package/dist/contracts/dcabot.contract.d.ts +4 -0
  42. package/dist/contracts/dcabot.contract.js +217 -0
  43. package/dist/contracts/dcabot.contract.js.map +1 -0
  44. package/dist/contracts/dice.contract.js +7 -1
  45. package/dist/contracts/dice.contract.js.map +1 -1
  46. package/dist/contracts/domainregistry.contract.d.ts +4 -0
  47. package/dist/contracts/domainregistry.contract.js +232 -0
  48. package/dist/contracts/domainregistry.contract.js.map +1 -0
  49. package/dist/contracts/exchange.contract.js +209 -168
  50. package/dist/contracts/exchange.contract.js.map +1 -1
  51. package/dist/contracts/fanclub.contract.d.ts +4 -0
  52. package/dist/contracts/fanclub.contract.js +193 -0
  53. package/dist/contracts/fanclub.contract.js.map +1 -0
  54. package/dist/contracts/giftcard.contract.d.ts +4 -0
  55. package/dist/contracts/giftcard.contract.js +158 -0
  56. package/dist/contracts/giftcard.contract.js.map +1 -0
  57. package/dist/contracts/grantrounds.contract.d.ts +4 -0
  58. package/dist/contracts/grantrounds.contract.js +265 -0
  59. package/dist/contracts/grantrounds.contract.js.map +1 -0
  60. package/dist/contracts/groupbuy.contract.d.ts +4 -0
  61. package/dist/contracts/groupbuy.contract.js +198 -0
  62. package/dist/contracts/groupbuy.contract.js.map +1 -0
  63. package/dist/contracts/helpers.d.ts +64 -0
  64. package/dist/contracts/helpers.js +159 -0
  65. package/dist/contracts/helpers.js.map +1 -0
  66. package/dist/contracts/insurancepool.contract.d.ts +4 -0
  67. package/dist/contracts/insurancepool.contract.js +281 -0
  68. package/dist/contracts/insurancepool.contract.js.map +1 -0
  69. package/dist/contracts/invoice.contract.d.ts +4 -0
  70. package/dist/contracts/invoice.contract.js +193 -0
  71. package/dist/contracts/invoice.contract.js.map +1 -0
  72. package/dist/contracts/launchpad.contract.d.ts +4 -0
  73. package/dist/contracts/launchpad.contract.js +225 -0
  74. package/dist/contracts/launchpad.contract.js.map +1 -0
  75. package/dist/contracts/lotto.contract.js +53 -37
  76. package/dist/contracts/lotto.contract.js.map +1 -1
  77. package/dist/contracts/multisigtreasury.contract.d.ts +4 -0
  78. package/dist/contracts/multisigtreasury.contract.js +245 -0
  79. package/dist/contracts/multisigtreasury.contract.js.map +1 -0
  80. package/dist/contracts/nft.contract.d.ts +1 -0
  81. package/dist/contracts/nft.contract.js +236 -192
  82. package/dist/contracts/nft.contract.js.map +1 -1
  83. package/dist/contracts/oraclebounty.contract.d.ts +4 -0
  84. package/dist/contracts/oraclebounty.contract.js +250 -0
  85. package/dist/contracts/oraclebounty.contract.js.map +1 -0
  86. package/dist/contracts/payroll.contract.d.ts +4 -0
  87. package/dist/contracts/payroll.contract.js +232 -0
  88. package/dist/contracts/payroll.contract.js.map +1 -0
  89. package/dist/contracts/paywall.contract.d.ts +4 -0
  90. package/dist/contracts/paywall.contract.js +185 -0
  91. package/dist/contracts/paywall.contract.js.map +1 -0
  92. package/dist/contracts/poll.contract.js +2 -0
  93. package/dist/contracts/poll.contract.js.map +1 -1
  94. package/dist/contracts/predictionmarket.contract.d.ts +4 -0
  95. package/dist/contracts/predictionmarket.contract.js +213 -0
  96. package/dist/contracts/predictionmarket.contract.js.map +1 -0
  97. package/dist/contracts/proposaltimelock.contract.d.ts +4 -0
  98. package/dist/contracts/proposaltimelock.contract.js +250 -0
  99. package/dist/contracts/proposaltimelock.contract.js.map +1 -0
  100. package/dist/contracts/questpass.contract.d.ts +4 -0
  101. package/dist/contracts/questpass.contract.js +214 -0
  102. package/dist/contracts/questpass.contract.js.map +1 -0
  103. package/dist/contracts/referral.contract.d.ts +4 -0
  104. package/dist/contracts/referral.contract.js +238 -0
  105. package/dist/contracts/referral.contract.js.map +1 -0
  106. package/dist/contracts/rental.contract.d.ts +4 -0
  107. package/dist/contracts/rental.contract.js +221 -0
  108. package/dist/contracts/rental.contract.js.map +1 -0
  109. package/dist/contracts/revenuesplit.contract.d.ts +4 -0
  110. package/dist/contracts/revenuesplit.contract.js +211 -0
  111. package/dist/contracts/revenuesplit.contract.js.map +1 -0
  112. package/dist/contracts/rps.contract.js +17 -1
  113. package/dist/contracts/rps.contract.js.map +1 -1
  114. package/dist/contracts/savings.contract.d.ts +4 -0
  115. package/dist/contracts/savings.contract.js +208 -0
  116. package/dist/contracts/savings.contract.js.map +1 -0
  117. package/dist/contracts/subscription.contract.d.ts +4 -0
  118. package/dist/contracts/subscription.contract.js +241 -0
  119. package/dist/contracts/subscription.contract.js.map +1 -0
  120. package/dist/contracts/sweepstakes.contract.d.ts +4 -0
  121. package/dist/contracts/sweepstakes.contract.js +209 -0
  122. package/dist/contracts/sweepstakes.contract.js.map +1 -0
  123. package/dist/contracts/ticketing.contract.d.ts +4 -0
  124. package/dist/contracts/ticketing.contract.js +185 -0
  125. package/dist/contracts/ticketing.contract.js.map +1 -0
  126. package/dist/contracts/tipjar.contract.js +2 -0
  127. package/dist/contracts/tipjar.contract.js.map +1 -1
  128. package/dist/contracts/token.contract.js +135 -125
  129. package/dist/contracts/token.contract.js.map +1 -1
  130. package/dist/index.d.ts +39 -0
  131. package/dist/index.js +71 -1
  132. package/dist/index.js.map +1 -1
  133. package/dist/metadata.d.ts +7 -0
  134. package/dist/metadata.js +64 -1
  135. package/dist/metadata.js.map +1 -1
  136. package/dist/providers/block-provider.d.ts +22 -0
  137. package/dist/providers/block-provider.js +3 -0
  138. package/dist/providers/block-provider.js.map +1 -0
  139. package/dist/providers/haf-client.d.ts +30 -0
  140. package/dist/providers/haf-client.js +119 -0
  141. package/dist/providers/haf-client.js.map +1 -0
  142. package/dist/providers/haf-provider.d.ts +49 -0
  143. package/dist/providers/haf-provider.js +256 -0
  144. package/dist/providers/haf-provider.js.map +1 -0
  145. package/dist/providers/hive-provider.d.ts +13 -0
  146. package/dist/providers/hive-provider.js +25 -0
  147. package/dist/providers/hive-provider.js.map +1 -0
  148. package/dist/providers/index.d.ts +4 -0
  149. package/dist/providers/index.js +21 -0
  150. package/dist/providers/index.js.map +1 -0
  151. package/dist/streamer.d.ts +21 -1
  152. package/dist/streamer.js +187 -62
  153. package/dist/streamer.js.map +1 -1
  154. package/dist/utils.js +11 -2
  155. package/dist/utils.js.map +1 -1
  156. package/package.json +16 -1
  157. package/.claude/settings.local.json +0 -12
  158. package/.env.example +0 -3
  159. package/.travis.yml +0 -11
  160. package/AGENTS.md +0 -35
  161. package/CLAUDE.md +0 -75
  162. package/ecosystem.config.js +0 -17
  163. package/examples/contracts/README.md +0 -8
  164. package/examples/contracts/exchange.ts +0 -38
  165. package/examples/contracts/poll.ts +0 -21
  166. package/examples/contracts/rps.ts +0 -19
  167. package/examples/contracts/tipjar.ts +0 -19
  168. package/jest.config.js +0 -9
  169. package/test-contract-block.md +0 -19
  170. package/tests/actions.spec.ts +0 -252
  171. package/tests/adapters/actions-persistence.spec.ts +0 -144
  172. package/tests/adapters/postgresql.adapter.spec.ts +0 -127
  173. package/tests/adapters/sqlite.adapter.spec.ts +0 -181
  174. package/tests/config-input.spec.ts +0 -90
  175. package/tests/contracts/coinflip.contract.spec.ts +0 -94
  176. package/tests/contracts/dice.contract.spec.ts +0 -87
  177. package/tests/contracts/entrants.json +0 -729
  178. package/tests/contracts/exchange.contract.spec.ts +0 -84
  179. package/tests/contracts/lotto.contract.spec.ts +0 -59
  180. package/tests/contracts/nft.contract.spec.ts +0 -948
  181. package/tests/contracts/token.contract.spec.ts +0 -90
  182. package/tests/exchanges/coingecko.exchange.spec.ts +0 -169
  183. package/tests/exchanges/exchange.base.spec.ts +0 -246
  184. package/tests/helpers/mock-adapter.ts +0 -214
  185. package/tests/helpers/mock-fetch.ts +0 -165
  186. package/tests/hive-chain-features.spec.ts +0 -319
  187. package/tests/hive-rates.spec.ts +0 -443
  188. package/tests/integration/hive-rates.integration.spec.ts +0 -35
  189. package/tests/metadata.spec.ts +0 -63
  190. package/tests/setup.ts +0 -30
  191. package/tests/streamer-actions.spec.ts +0 -274
  192. package/tests/streamer.spec.ts +0 -342
  193. package/tests/types/rates.spec.ts +0 -216
  194. package/tests/utils.spec.ts +0 -113
  195. package/tsconfig.build.json +0 -4
  196. package/tslint.json +0 -21
  197. package/wallaby.js +0 -26
@@ -8,6 +8,7 @@ const bignumber_js_1 = __importDefault(require("bignumber.js"));
8
8
  const uuid_1 = require("uuid");
9
9
  const zod_1 = require("zod");
10
10
  const contract_1 = require("./contract");
11
+ const helpers_1 = require("./helpers");
11
12
  const DEFAULT_NAME = 'exchange';
12
13
  const DEFAULT_ACCOUNT = 'beggars';
13
14
  const SIDE_VALUES = ['buy', 'sell'];
@@ -156,10 +157,16 @@ function createExchangeContract(options = {}) {
156
157
  )
157
158
  `);
158
159
  };
159
- const getBalanceRow = async (accountName, asset) => {
160
- const rows = await state.adapter.query('SELECT available, locked FROM exchange_balances WHERE account = ? AND asset = ?', [accountName, asset]);
160
+ const withTransaction = async (work) => {
161
+ if (typeof state.adapter?.runInTransaction === 'function') {
162
+ return state.adapter.runInTransaction(work);
163
+ }
164
+ return work(state.adapter);
165
+ };
166
+ const getBalanceRow = async (accountName, asset, adapter = state.adapter) => {
167
+ const rows = await adapter.query('SELECT available, locked FROM exchange_balances WHERE account = ? AND asset = ?', [accountName, asset]);
161
168
  if (!rows || rows.length === 0) {
162
- await state.adapter.query('INSERT INTO exchange_balances (account, asset, available, locked) VALUES (?, ?, ?, ?)', [accountName, asset, '0', '0']);
169
+ await adapter.query('INSERT INTO exchange_balances (account, asset, available, locked) VALUES (?, ?, ?, ?)', [accountName, asset, '0', '0']);
163
170
  return { available: new bignumber_js_1.default(0), locked: new bignumber_js_1.default(0) };
164
171
  }
165
172
  return {
@@ -167,31 +174,36 @@ function createExchangeContract(options = {}) {
167
174
  locked: new bignumber_js_1.default(rows[0].locked || '0')
168
175
  };
169
176
  };
170
- const setBalanceRow = async (accountName, asset, available, locked) => {
171
- await state.adapter.query('UPDATE exchange_balances SET available = ?, locked = ? WHERE account = ? AND asset = ?', [formatAmount(available, getAssetPrecision(asset)), formatAmount(locked, getAssetPrecision(asset)), accountName, asset]);
177
+ const setBalanceRow = async (accountName, asset, available, locked, adapter = state.adapter) => {
178
+ await adapter.query('UPDATE exchange_balances SET available = ?, locked = ? WHERE account = ? AND asset = ?', [formatAmount(available, getAssetPrecision(asset)), formatAmount(locked, getAssetPrecision(asset)), accountName, asset]);
172
179
  };
173
- const ensurePairActive = async (base, quote) => {
174
- const rows = await state.adapter.query('SELECT active FROM exchange_pairs WHERE base_asset = ? AND quote_asset = ?', [base, quote]);
180
+ const ensurePairActive = async (base, quote, adapter = state.adapter) => {
181
+ const rows = await adapter.query('SELECT active FROM exchange_pairs WHERE base_asset = ? AND quote_asset = ?', [base, quote]);
175
182
  if (!rows || rows.length === 0 || rows[0].active !== 1) {
176
183
  throw new Error(`Trading pair ${base}/${quote} is not active`);
177
184
  }
178
185
  };
179
186
  const createPair = async (payload, ctx) => {
187
+ if (ctx.sender !== account) {
188
+ throw new Error('Only the exchange account can create trading pairs');
189
+ }
180
190
  if (payload.base === payload.quote) {
181
191
  throw new Error('Base and quote assets must differ');
182
192
  }
183
- const existing = await state.adapter.query('SELECT base_asset FROM exchange_pairs WHERE base_asset = ? AND quote_asset = ?', [payload.base, payload.quote]);
184
- if (existing && existing.length > 0) {
185
- throw new Error(`Pair ${payload.base}/${payload.quote} already exists`);
186
- }
187
- await state.adapter.query('INSERT INTO exchange_pairs (base_asset, quote_asset, active) VALUES (?, ?, 1)', [payload.base, payload.quote]);
188
- await state.adapter.addEvent(new Date(), name, 'createPair', payload, {
189
- action: 'pair_created',
190
- data: {
191
- base: payload.base,
192
- quote: payload.quote,
193
- createdBy: ctx.sender
193
+ await withTransaction(async (adapter) => {
194
+ const existing = await adapter.query('SELECT base_asset FROM exchange_pairs WHERE base_asset = ? AND quote_asset = ?', [payload.base, payload.quote]);
195
+ if (existing && existing.length > 0) {
196
+ throw new Error(`Pair ${payload.base}/${payload.quote} already exists`);
194
197
  }
198
+ await adapter.query('INSERT INTO exchange_pairs (base_asset, quote_asset, active) VALUES (?, ?, 1)', [payload.base, payload.quote]);
199
+ await adapter.addEvent(new Date(), name, 'createPair', payload, {
200
+ action: 'pair_created',
201
+ data: {
202
+ base: payload.base,
203
+ quote: payload.quote,
204
+ createdBy: ctx.sender
205
+ }
206
+ });
195
207
  });
196
208
  };
197
209
  const deposit = async (_payload, ctx) => {
@@ -202,17 +214,19 @@ function createExchangeContract(options = {}) {
202
214
  if (amount.isNaN() || amount.lte(0)) {
203
215
  throw new Error('Invalid deposit amount');
204
216
  }
205
- const balance = await getBalanceRow(ctx.sender, ctx.transfer.asset);
206
- const nextAvailable = balance.available.plus(amount);
207
- await setBalanceRow(ctx.sender, ctx.transfer.asset, nextAvailable, balance.locked);
208
- await state.adapter.query('INSERT INTO exchange_deposits (account, asset, amount, block_number, transaction_id, created_at) VALUES (?, ?, ?, ?, ?, ?)', [ctx.sender, ctx.transfer.asset, ctx.transfer.amount, ctx.block.number, ctx.transaction.id, new Date()]);
209
- await state.adapter.addEvent(new Date(), name, 'deposit', { asset: ctx.transfer.asset, amount: ctx.transfer.amount }, {
210
- action: 'deposit',
211
- data: {
212
- account: ctx.sender,
213
- asset: ctx.transfer.asset,
214
- amount: ctx.transfer.amount
215
- }
217
+ await withTransaction(async (adapter) => {
218
+ const balance = await getBalanceRow(ctx.sender, ctx.transfer.asset, adapter);
219
+ const nextAvailable = balance.available.plus(amount);
220
+ await setBalanceRow(ctx.sender, ctx.transfer.asset, nextAvailable, balance.locked, adapter);
221
+ await adapter.query('INSERT INTO exchange_deposits (account, asset, amount, block_number, transaction_id, created_at) VALUES (?, ?, ?, ?, ?, ?)', [ctx.sender, ctx.transfer.asset, ctx.transfer.amount, ctx.block.number, ctx.transaction.id, new Date()]);
222
+ await adapter.addEvent(new Date(), name, 'deposit', { asset: ctx.transfer.asset, amount: ctx.transfer.amount }, {
223
+ action: 'deposit',
224
+ data: {
225
+ account: ctx.sender,
226
+ asset: ctx.transfer.asset,
227
+ amount: ctx.transfer.amount
228
+ }
229
+ });
216
230
  });
217
231
  };
218
232
  const withdraw = async (payload, ctx) => {
@@ -224,98 +238,118 @@ function createExchangeContract(options = {}) {
224
238
  if (balance.available.lt(amount)) {
225
239
  throw new Error('Insufficient available balance');
226
240
  }
227
- const nextAvailable = balance.available.minus(amount);
228
- await setBalanceRow(ctx.sender, payload.asset, nextAvailable, balance.locked);
229
- const withdrawalId = await state.adapter.query('INSERT INTO exchange_withdrawals (account, asset, amount, status, block_number, transaction_id, created_at) VALUES (?, ?, ?, ?, ?, ?, ?)', [ctx.sender, payload.asset, payload.amount, 'pending', ctx.block.number, ctx.transaction.id, new Date()]);
241
+ const createdAt = new Date();
242
+ const withdrawalId = await withTransaction(async (adapter) => {
243
+ const currentBalance = await getBalanceRow(ctx.sender, payload.asset, adapter);
244
+ if (currentBalance.available.lt(amount)) {
245
+ throw new Error('Insufficient available balance');
246
+ }
247
+ const nextAvailable = currentBalance.available.minus(amount);
248
+ await setBalanceRow(ctx.sender, payload.asset, nextAvailable, currentBalance.locked, adapter);
249
+ await adapter.query('INSERT INTO exchange_withdrawals (account, asset, amount, status, block_number, transaction_id, created_at) VALUES (?, ?, ?, ?, ?, ?, ?)', [ctx.sender, payload.asset, payload.amount, 'pending', ctx.block.number, ctx.transaction.id, createdAt]);
250
+ const insertedRows = await adapter.query('SELECT id FROM exchange_withdrawals WHERE transaction_id = ? AND account = ? ORDER BY id DESC LIMIT 1', [ctx.transaction.id, ctx.sender]);
251
+ if (!insertedRows.length) {
252
+ throw new Error('Failed to locate newly created withdrawal');
253
+ }
254
+ return insertedRows[0].id;
255
+ });
230
256
  try {
231
257
  const to = payload.to || ctx.sender;
232
258
  await state.streamer.transferHiveTokens(account, to, payload.amount, payload.asset, 'Exchange withdrawal');
233
- await state.adapter.query('UPDATE exchange_withdrawals SET status = ? WHERE id = ?', ['completed', withdrawalId?.insertId ?? withdrawalId?.lastID ?? null]);
259
+ await state.adapter.query('UPDATE exchange_withdrawals SET status = ? WHERE id = ?', ['completed', withdrawalId]);
234
260
  }
235
261
  catch (error) {
236
- await setBalanceRow(ctx.sender, payload.asset, balance.available, balance.locked);
237
- await state.adapter.query('UPDATE exchange_withdrawals SET status = ? WHERE id = ?', ['failed', withdrawalId?.insertId ?? withdrawalId?.lastID ?? null]);
262
+ // Re-read current balance inside rollback to avoid stale state
263
+ await withTransaction(async (adapter) => {
264
+ const currentBalance = await getBalanceRow(ctx.sender, payload.asset, adapter);
265
+ await setBalanceRow(ctx.sender, payload.asset, currentBalance.available.plus(amount), currentBalance.locked, adapter);
266
+ await adapter.query('UPDATE exchange_withdrawals SET status = ? WHERE id = ?', ['failed', withdrawalId]);
267
+ });
238
268
  throw error;
239
269
  }
240
270
  };
241
271
  const placeOrder = async (payload, ctx) => {
242
- await ensurePairActive(payload.base, payload.quote);
243
272
  const price = new bignumber_js_1.default(payload.price);
244
273
  const amount = new bignumber_js_1.default(payload.amount);
245
274
  if (price.isNaN() || price.lte(0) || amount.isNaN() || amount.lte(0)) {
246
275
  throw new Error('Invalid price or amount');
247
276
  }
248
277
  const orderId = (0, uuid_1.v4)();
249
- if (payload.side === 'buy') {
250
- const cost = price.multipliedBy(amount);
251
- const balance = await getBalanceRow(ctx.sender, payload.quote);
252
- if (balance.available.lt(cost)) {
253
- throw new Error('Insufficient quote balance');
278
+ await withTransaction(async (adapter) => {
279
+ await ensurePairActive(payload.base, payload.quote, adapter);
280
+ if (payload.side === 'buy') {
281
+ const cost = price.multipliedBy(amount);
282
+ const balance = await getBalanceRow(ctx.sender, payload.quote, adapter);
283
+ if (balance.available.lt(cost)) {
284
+ throw new Error('Insufficient quote balance');
285
+ }
286
+ await setBalanceRow(ctx.sender, payload.quote, balance.available.minus(cost), balance.locked.plus(cost), adapter);
254
287
  }
255
- await setBalanceRow(ctx.sender, payload.quote, balance.available.minus(cost), balance.locked.plus(cost));
256
- }
257
- else {
258
- const balance = await getBalanceRow(ctx.sender, payload.base);
259
- if (balance.available.lt(amount)) {
260
- throw new Error('Insufficient base balance');
288
+ else {
289
+ const balance = await getBalanceRow(ctx.sender, payload.base, adapter);
290
+ if (balance.available.lt(amount)) {
291
+ throw new Error('Insufficient base balance');
292
+ }
293
+ await setBalanceRow(ctx.sender, payload.base, balance.available.minus(amount), balance.locked.plus(amount), adapter);
261
294
  }
262
- await setBalanceRow(ctx.sender, payload.base, balance.available.minus(amount), balance.locked.plus(amount));
263
- }
264
- await state.adapter.query('INSERT INTO exchange_orders (id, account, side, base_asset, quote_asset, price, amount, remaining, status, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', [
265
- orderId,
266
- ctx.sender,
267
- payload.side,
268
- payload.base,
269
- payload.quote,
270
- formatAmount(price, quotePrecision),
271
- formatAmount(amount, basePrecision),
272
- formatAmount(amount, basePrecision),
273
- 'open',
274
- new Date()
275
- ]);
276
- await state.adapter.addEvent(new Date(), name, 'placeOrder', payload, {
277
- action: 'order_opened',
278
- data: {
295
+ await adapter.query('INSERT INTO exchange_orders (id, account, side, base_asset, quote_asset, price, amount, remaining, status, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', [
279
296
  orderId,
280
- account: ctx.sender,
281
- side: payload.side,
282
- base: payload.base,
283
- quote: payload.quote,
284
- price: price.toFixed(),
285
- amount: amount.toFixed()
286
- }
297
+ ctx.sender,
298
+ payload.side,
299
+ payload.base,
300
+ payload.quote,
301
+ formatAmount(price, quotePrecision),
302
+ formatAmount(amount, basePrecision),
303
+ formatAmount(amount, basePrecision),
304
+ 'open',
305
+ new Date()
306
+ ]);
307
+ await adapter.addEvent(new Date(), name, 'placeOrder', payload, {
308
+ action: 'order_opened',
309
+ data: {
310
+ orderId,
311
+ account: ctx.sender,
312
+ side: payload.side,
313
+ base: payload.base,
314
+ quote: payload.quote,
315
+ price: price.toFixed(),
316
+ amount: amount.toFixed()
317
+ }
318
+ });
287
319
  });
288
320
  };
289
321
  const cancelOrder = async (payload, ctx) => {
290
- const rows = await state.adapter.query('SELECT * FROM exchange_orders WHERE id = ?', [payload.orderId]);
291
- if (!rows || rows.length === 0) {
292
- throw new Error('Order not found');
293
- }
294
- const order = rows[0];
295
- if (order.account !== ctx.sender) {
296
- throw new Error('Not authorized to cancel this order');
297
- }
298
- if (order.status !== 'open' && order.status !== 'partial') {
299
- throw new Error('Order cannot be canceled');
300
- }
301
- const remaining = new bignumber_js_1.default(order.remaining);
302
- if (order.side === 'buy') {
303
- const price = new bignumber_js_1.default(order.price);
304
- const refund = price.multipliedBy(remaining);
305
- const balance = await getBalanceRow(order.account, order.quote_asset);
306
- await setBalanceRow(order.account, order.quote_asset, balance.available.plus(refund), balance.locked.minus(refund));
307
- }
308
- else {
309
- const balance = await getBalanceRow(order.account, order.base_asset);
310
- await setBalanceRow(order.account, order.base_asset, balance.available.plus(remaining), balance.locked.minus(remaining));
311
- }
312
- await state.adapter.query('UPDATE exchange_orders SET status = ?, remaining = ? WHERE id = ?', ['canceled', '0', payload.orderId]);
313
- await state.adapter.addEvent(new Date(), name, 'cancelOrder', payload, {
314
- action: 'order_canceled',
315
- data: {
316
- orderId: payload.orderId,
317
- account: ctx.sender
322
+ await withTransaction(async (adapter) => {
323
+ const rows = await adapter.query('SELECT * FROM exchange_orders WHERE id = ?', [payload.orderId]);
324
+ if (!rows || rows.length === 0) {
325
+ throw new Error('Order not found');
326
+ }
327
+ const order = rows[0];
328
+ if (order.account !== ctx.sender) {
329
+ throw new Error('Not authorized to cancel this order');
318
330
  }
331
+ if (order.status !== 'open' && order.status !== 'partial') {
332
+ throw new Error('Order cannot be canceled');
333
+ }
334
+ const remaining = new bignumber_js_1.default(order.remaining);
335
+ if (order.side === 'buy') {
336
+ const price = new bignumber_js_1.default(order.price);
337
+ const refund = price.multipliedBy(remaining);
338
+ const balance = await getBalanceRow(order.account, order.quote_asset, adapter);
339
+ await setBalanceRow(order.account, order.quote_asset, balance.available.plus(refund), balance.locked.minus(refund), adapter);
340
+ }
341
+ else {
342
+ const balance = await getBalanceRow(order.account, order.base_asset, adapter);
343
+ await setBalanceRow(order.account, order.base_asset, balance.available.plus(remaining), balance.locked.minus(remaining), adapter);
344
+ }
345
+ await adapter.query('UPDATE exchange_orders SET status = ?, remaining = ? WHERE id = ?', ['canceled', '0', payload.orderId]);
346
+ await adapter.addEvent(new Date(), name, 'cancelOrder', payload, {
347
+ action: 'order_canceled',
348
+ data: {
349
+ orderId: payload.orderId,
350
+ account: ctx.sender
351
+ }
352
+ });
319
353
  });
320
354
  };
321
355
  const snapshotOrderBook = async (payload) => {
@@ -383,56 +417,65 @@ function createExchangeContract(options = {}) {
383
417
  const sellerFeeBps = buyIsMaker ? takerFeeBps : makerFeeBps;
384
418
  const buyerFeeBase = calculateFee(tradeAmount, buyerFeeBps);
385
419
  const sellerFeeQuote = calculateFee(tradeQuote, sellerFeeBps);
386
- // Update buyer balances
387
- const buyerBase = await getBalanceRow(buy.account, buy.base_asset);
388
- const buyerQuote = await getBalanceRow(buy.account, buy.quote_asset);
389
- const nextBuyRemaining = buyRemaining.minus(tradeAmount);
390
- const nextBuyLocked = buyPrice.multipliedBy(nextBuyRemaining);
391
- const buyerQuoteAvailable = buyerQuote.available.plus(buyerQuote.locked.minus(nextBuyLocked));
392
- await setBalanceRow(buy.account, buy.base_asset, buyerBase.available.plus(tradeAmount.minus(buyerFeeBase)), buyerBase.locked);
393
- await setBalanceRow(buy.account, buy.quote_asset, buyerQuoteAvailable, nextBuyLocked);
394
- // Update seller balances
395
- const sellerBase = await getBalanceRow(sell.account, sell.base_asset);
396
- const sellerQuote = await getBalanceRow(sell.account, sell.quote_asset);
397
- const nextSellRemaining = sellRemaining.minus(tradeAmount);
398
- const nextSellLocked = nextSellRemaining;
399
- await setBalanceRow(sell.account, sell.base_asset, sellerBase.available, nextSellLocked);
400
- await setBalanceRow(sell.account, sell.quote_asset, sellerQuote.available.plus(tradeQuote.minus(sellerFeeQuote)), sellerQuote.locked);
401
- if (buyerFeeBase.gt(0)) {
402
- const feeBaseBalance = await getBalanceRow(feeAccount, buy.base_asset);
403
- await setBalanceRow(feeAccount, buy.base_asset, feeBaseBalance.available.plus(buyerFeeBase), feeBaseBalance.locked);
404
- }
405
- if (sellerFeeQuote.gt(0)) {
406
- const feeQuoteBalance = await getBalanceRow(feeAccount, sell.quote_asset);
407
- await setBalanceRow(feeAccount, sell.quote_asset, feeQuoteBalance.available.plus(sellerFeeQuote), feeQuoteBalance.locked);
408
- }
409
- await state.adapter.query('UPDATE exchange_orders SET remaining = ?, status = ? WHERE id = ?', [formatAmount(nextBuyRemaining, basePrecision), nextBuyRemaining.eq(0) ? 'filled' : 'partial', buy.id]);
410
- await state.adapter.query('UPDATE exchange_orders SET remaining = ?, status = ? WHERE id = ?', [formatAmount(nextSellRemaining, basePrecision), nextSellRemaining.eq(0) ? 'filled' : 'partial', sell.id]);
411
- await state.adapter.query('INSERT INTO exchange_trades (buy_order_id, sell_order_id, price, amount, base_asset, quote_asset, buyer, seller, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)', [
412
- buy.id,
413
- sell.id,
414
- formatAmount(tradePrice, quotePrecision),
415
- formatAmount(tradeAmount, basePrecision),
416
- buy.base_asset,
417
- buy.quote_asset,
418
- buy.account,
419
- sell.account,
420
- new Date()
421
- ]);
422
- await state.adapter.addEvent(new Date(), name, 'matchOrders', { base: pair.base_asset, quote: pair.quote_asset }, {
423
- action: 'trade',
424
- data: {
425
- buyOrderId: buy.id,
426
- sellOrderId: sell.id,
427
- price: tradePrice.toFixed(),
428
- amount: tradeAmount.toFixed(),
429
- buyer: buy.account,
430
- seller: sell.account,
431
- buyerFeeBase: buyerFeeBase.toFixed(),
432
- sellerFeeQuote: sellerFeeQuote.toFixed(),
433
- maker: buyIsMaker ? buy.account : sell.account,
434
- taker: buyIsMaker ? sell.account : buy.account
420
+ await withTransaction(async (adapter) => {
421
+ // Re-read orders inside transaction to guard against stale state
422
+ const buyCheck = await adapter.query('SELECT * FROM exchange_orders WHERE id = ? AND status IN (\'open\', \'partial\')', [buy.id]);
423
+ const sellCheck = await adapter.query('SELECT * FROM exchange_orders WHERE id = ? AND status IN (\'open\', \'partial\')', [sell.id]);
424
+ if (!buyCheck.length || !sellCheck.length) {
425
+ return; // Order was canceled between read and transaction
426
+ }
427
+ const buyerBase = await getBalanceRow(buy.account, buy.base_asset, adapter);
428
+ const buyerQuote = await getBalanceRow(buy.account, buy.quote_asset, adapter);
429
+ // Cost at buy price for the traded amount (what was locked for this chunk)
430
+ const lockedCost = buyPrice.multipliedBy(tradeAmount);
431
+ // Actual cost at trade price (what the buyer actually pays)
432
+ const actualCost = tradeQuote;
433
+ // Price surplus: difference between what was locked and what's actually needed
434
+ const priceSurplus = lockedCost.minus(actualCost);
435
+ await setBalanceRow(buy.account, buy.base_asset, buyerBase.available.plus(tradeAmount.minus(buyerFeeBase)), buyerBase.locked, adapter);
436
+ await setBalanceRow(buy.account, buy.quote_asset, buyerQuote.available.plus(priceSurplus), buyerQuote.locked.minus(lockedCost), adapter);
437
+ const sellerBase = await getBalanceRow(sell.account, sell.base_asset, adapter);
438
+ const sellerQuote = await getBalanceRow(sell.account, sell.quote_asset, adapter);
439
+ await setBalanceRow(sell.account, sell.base_asset, sellerBase.available, sellerBase.locked.minus(tradeAmount), adapter);
440
+ await setBalanceRow(sell.account, sell.quote_asset, sellerQuote.available.plus(tradeQuote.minus(sellerFeeQuote)), sellerQuote.locked, adapter);
441
+ if (buyerFeeBase.gt(0)) {
442
+ const feeBaseBalance = await getBalanceRow(feeAccount, buy.base_asset, adapter);
443
+ await setBalanceRow(feeAccount, buy.base_asset, feeBaseBalance.available.plus(buyerFeeBase), feeBaseBalance.locked, adapter);
435
444
  }
445
+ if (sellerFeeQuote.gt(0)) {
446
+ const feeQuoteBalance = await getBalanceRow(feeAccount, sell.quote_asset, adapter);
447
+ await setBalanceRow(feeAccount, sell.quote_asset, feeQuoteBalance.available.plus(sellerFeeQuote), feeQuoteBalance.locked, adapter);
448
+ }
449
+ const nextBuyRemaining = buyRemaining.minus(tradeAmount);
450
+ const nextSellRemaining = sellRemaining.minus(tradeAmount);
451
+ await adapter.query('UPDATE exchange_orders SET remaining = ?, status = ? WHERE id = ?', [formatAmount(nextBuyRemaining, basePrecision), nextBuyRemaining.eq(0) ? 'filled' : 'partial', buy.id]);
452
+ await adapter.query('UPDATE exchange_orders SET remaining = ?, status = ? WHERE id = ?', [formatAmount(nextSellRemaining, basePrecision), nextSellRemaining.eq(0) ? 'filled' : 'partial', sell.id]);
453
+ await adapter.query('INSERT INTO exchange_trades (buy_order_id, sell_order_id, price, amount, base_asset, quote_asset, buyer, seller, created_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)', [
454
+ buy.id,
455
+ sell.id,
456
+ formatAmount(tradePrice, quotePrecision),
457
+ formatAmount(tradeAmount, basePrecision),
458
+ buy.base_asset,
459
+ buy.quote_asset,
460
+ buy.account,
461
+ sell.account,
462
+ new Date()
463
+ ]);
464
+ await adapter.addEvent(new Date(), name, 'matchOrders', { base: pair.base_asset, quote: pair.quote_asset }, {
465
+ action: 'trade',
466
+ data: {
467
+ buyOrderId: buy.id,
468
+ sellOrderId: sell.id,
469
+ price: tradePrice.toFixed(),
470
+ amount: tradeAmount.toFixed(),
471
+ buyer: buy.account,
472
+ seller: sell.account,
473
+ buyerFeeBase: buyerFeeBase.toFixed(),
474
+ sellerFeeQuote: sellerFeeQuote.toFixed(),
475
+ maker: buyIsMaker ? buy.account : sell.account,
476
+ taker: buyIsMaker ? sell.account : buy.account
477
+ }
478
+ });
436
479
  });
437
480
  matched += 1;
438
481
  }
@@ -446,35 +489,33 @@ function createExchangeContract(options = {}) {
446
489
  if (amount.isNaN() || amount.lte(0)) {
447
490
  throw new Error('Invalid transfer amount');
448
491
  }
449
- const senderBalance = await getBalanceRow(ctx.sender, payload.asset);
450
- if (senderBalance.available.lt(amount)) {
451
- throw new Error('Insufficient available balance');
452
- }
453
- const recipientBalance = await getBalanceRow(payload.to, payload.asset);
454
- await setBalanceRow(ctx.sender, payload.asset, senderBalance.available.minus(amount), senderBalance.locked);
455
- await setBalanceRow(payload.to, payload.asset, recipientBalance.available.plus(amount), recipientBalance.locked);
456
- await state.adapter.addEvent(new Date(), name, 'transfer', payload, {
457
- action: 'internal_transfer',
458
- data: {
459
- from: ctx.sender,
460
- to: payload.to,
461
- asset: payload.asset,
462
- amount: payload.amount
492
+ await withTransaction(async (adapter) => {
493
+ const senderBalance = await getBalanceRow(ctx.sender, payload.asset, adapter);
494
+ if (senderBalance.available.lt(amount)) {
495
+ throw new Error('Insufficient available balance');
463
496
  }
497
+ const recipientBalance = await getBalanceRow(payload.to, payload.asset, adapter);
498
+ await setBalanceRow(ctx.sender, payload.asset, senderBalance.available.minus(amount), senderBalance.locked, adapter);
499
+ await setBalanceRow(payload.to, payload.asset, recipientBalance.available.plus(amount), recipientBalance.locked, adapter);
500
+ await adapter.addEvent(new Date(), name, 'transfer', payload, {
501
+ action: 'internal_transfer',
502
+ data: {
503
+ from: ctx.sender,
504
+ to: payload.to,
505
+ asset: payload.asset,
506
+ amount: payload.amount
507
+ }
508
+ });
464
509
  });
465
510
  };
466
511
  return (0, contract_1.defineContract)({
467
512
  name,
468
513
  hooks: {
469
514
  create: async ({ adapter, streamer }) => {
515
+ (0, helpers_1.ensureSqlAdapter)(adapter);
470
516
  state.adapter = adapter;
471
517
  state.streamer = streamer;
472
- try {
473
- await initializeTables();
474
- }
475
- catch (error) {
476
- throw new Error('ExchangeContract requires a SQL-capable adapter');
477
- }
518
+ await initializeTables();
478
519
  }
479
520
  },
480
521
  actions: {
@@ -1 +1 @@
1
- {"version":3,"file":"exchange.contract.js","sourceRoot":"","sources":["../../src/contracts/exchange.contract.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"exchange.contract.js","sourceRoot":"","sources":["../../src/contracts/exchange.contract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export interface FanClubContractOptions {
2
+ name?: string;
3
+ }
4
+ export declare function createFanClubContract(options?: FanClubContractOptions): import("..").ContractDefinition;