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.
Files changed (101) hide show
  1. package/AGENTS.md +35 -0
  2. package/DOCUMENTATION.md +380 -0
  3. package/README.md +113 -22
  4. package/dist/actions.d.ts +3 -3
  5. package/dist/actions.js +7 -7
  6. package/dist/actions.js.map +1 -1
  7. package/dist/adapters/base.adapter.d.ts +19 -1
  8. package/dist/adapters/base.adapter.js +16 -0
  9. package/dist/adapters/base.adapter.js.map +1 -1
  10. package/dist/adapters/mongodb.adapter.d.ts +5 -11
  11. package/dist/adapters/mongodb.adapter.js +10 -10
  12. package/dist/adapters/mongodb.adapter.js.map +1 -1
  13. package/dist/adapters/postgresql.adapter.d.ts +17 -0
  14. package/dist/adapters/postgresql.adapter.js +99 -8
  15. package/dist/adapters/postgresql.adapter.js.map +1 -1
  16. package/dist/adapters/sqlite.adapter.d.ts +17 -0
  17. package/dist/adapters/sqlite.adapter.js +99 -8
  18. package/dist/adapters/sqlite.adapter.js.map +1 -1
  19. package/dist/api.js +86 -0
  20. package/dist/api.js.map +1 -1
  21. package/dist/config.d.ts +3 -0
  22. package/dist/config.js +6 -3
  23. package/dist/config.js.map +1 -1
  24. package/dist/contracts/coinflip.contract.d.ts +8 -26
  25. package/dist/contracts/coinflip.contract.js +123 -144
  26. package/dist/contracts/coinflip.contract.js.map +1 -1
  27. package/dist/contracts/contract.d.ts +3 -0
  28. package/dist/contracts/contract.js +26 -0
  29. package/dist/contracts/contract.js.map +1 -0
  30. package/dist/contracts/dice.contract.d.ts +9 -36
  31. package/dist/contracts/dice.contract.js +135 -200
  32. package/dist/contracts/dice.contract.js.map +1 -1
  33. package/dist/contracts/exchange.contract.d.ts +11 -0
  34. package/dist/contracts/exchange.contract.js +492 -0
  35. package/dist/contracts/exchange.contract.js.map +1 -0
  36. package/dist/contracts/lotto.contract.d.ts +15 -19
  37. package/dist/contracts/lotto.contract.js +154 -162
  38. package/dist/contracts/lotto.contract.js.map +1 -1
  39. package/dist/contracts/nft.contract.d.ts +4 -0
  40. package/dist/contracts/nft.contract.js +65 -0
  41. package/dist/contracts/nft.contract.js.map +1 -1
  42. package/dist/contracts/poll.contract.d.ts +4 -0
  43. package/dist/contracts/poll.contract.js +105 -0
  44. package/dist/contracts/poll.contract.js.map +1 -0
  45. package/dist/contracts/rps.contract.d.ts +9 -0
  46. package/dist/contracts/rps.contract.js +217 -0
  47. package/dist/contracts/rps.contract.js.map +1 -0
  48. package/dist/contracts/tipjar.contract.d.ts +4 -0
  49. package/dist/contracts/tipjar.contract.js +60 -0
  50. package/dist/contracts/tipjar.contract.js.map +1 -0
  51. package/dist/contracts/token.contract.d.ts +3 -17
  52. package/dist/contracts/token.contract.js +128 -80
  53. package/dist/contracts/token.contract.js.map +1 -1
  54. package/dist/exchanges/coingecko.d.ts +7 -1
  55. package/dist/exchanges/coingecko.js +38 -21
  56. package/dist/exchanges/coingecko.js.map +1 -1
  57. package/dist/exchanges/exchange.d.ts +15 -8
  58. package/dist/exchanges/exchange.js +65 -11
  59. package/dist/exchanges/exchange.js.map +1 -1
  60. package/dist/hive-rates.d.ts +29 -4
  61. package/dist/hive-rates.js +179 -92
  62. package/dist/hive-rates.js.map +1 -1
  63. package/dist/index.d.ts +10 -3
  64. package/dist/index.js +18 -4
  65. package/dist/index.js.map +1 -1
  66. package/dist/streamer.d.ts +101 -8
  67. package/dist/streamer.js +410 -140
  68. package/dist/streamer.js.map +1 -1
  69. package/dist/test.js +11 -12
  70. package/dist/test.js.map +1 -1
  71. package/dist/types/hive-stream.d.ts +85 -14
  72. package/dist/types/rates.d.ts +47 -0
  73. package/dist/types/rates.js +29 -0
  74. package/dist/types/rates.js.map +1 -0
  75. package/dist/utils.d.ts +318 -11
  76. package/dist/utils.js +804 -115
  77. package/dist/utils.js.map +1 -1
  78. package/examples/contracts/README.md +8 -0
  79. package/examples/contracts/exchange.ts +38 -0
  80. package/examples/contracts/poll.ts +21 -0
  81. package/examples/contracts/rps.ts +19 -0
  82. package/examples/contracts/tipjar.ts +19 -0
  83. package/package.json +20 -19
  84. package/tests/actions.spec.ts +7 -7
  85. package/tests/adapters/actions-persistence.spec.ts +4 -4
  86. package/tests/adapters/sqlite.adapter.spec.ts +2 -2
  87. package/tests/contracts/coinflip.contract.spec.ts +26 -154
  88. package/tests/contracts/dice.contract.spec.ts +24 -140
  89. package/tests/contracts/exchange.contract.spec.ts +84 -0
  90. package/tests/contracts/lotto.contract.spec.ts +30 -295
  91. package/tests/contracts/token.contract.spec.ts +72 -316
  92. package/tests/exchanges/coingecko.exchange.spec.ts +169 -0
  93. package/tests/exchanges/exchange.base.spec.ts +246 -0
  94. package/tests/helpers/mock-fetch.ts +165 -0
  95. package/tests/hive-chain-features.spec.ts +238 -0
  96. package/tests/hive-rates.spec.ts +443 -0
  97. package/tests/integration/hive-rates.integration.spec.ts +35 -0
  98. package/tests/streamer-actions.spec.ts +29 -18
  99. package/tests/streamer.spec.ts +142 -49
  100. package/tests/types/rates.spec.ts +216 -0
  101. package/tests/utils.spec.ts +27 -6
@@ -3,245 +3,237 @@ 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.LottoContract = void 0;
7
- const utils_1 = require("@hiveio/dhive/lib/utils");
8
- const utils_2 = require("./../utils");
9
- const seedrandom_1 = __importDefault(require("seedrandom"));
6
+ exports.createLottoContract = createLottoContract;
10
7
  const bignumber_js_1 = __importDefault(require("bignumber.js"));
11
- const CONTRACT_NAME = 'hivelotto';
12
- const ACCOUNT = 'beggars';
13
- const FEE_ACCOUNT = 'beggars';
14
- const TOKEN_SYMBOL = 'HIVE';
15
- const VALID_CURRENCIES = ['HIVE'];
16
- const VALID_DRAW_TYPES = ['hourly', 'daily'];
17
- // How much does a ticket cost?
18
- const COST = 10;
19
- // Minimum number of entries required for draws to payout
20
- const MIN_ENTRIES_HOURLY = 25;
21
- const MIN_ENTRIES_DAILY = 100;
22
- // How many winners to pick for the hourly draw
23
- const HOURLY_WINNERS_PICK = 3;
24
- // How many winners to pick for the daily draw
25
- const DAILY_WINNERS_PICK = 10;
26
- // Max tickets per user, prevents users from harvesting by overwhelmingly buying tickets
27
- const MAX_TICKETS_PER_USER = 3;
28
- // The percentage the site keeps (5%)
29
- const PERCENTAGE = 5;
8
+ const seedrandom_1 = __importDefault(require("seedrandom"));
9
+ const zod_1 = require("zod");
10
+ const contract_1 = require("./contract");
11
+ const utils_1 = require("../utils");
12
+ const DEFAULT_NAME = 'hivelotto';
13
+ const DEFAULT_ACCOUNT = 'beggars';
14
+ const DEFAULT_FEE_ACCOUNT = 'beggars';
15
+ const DEFAULT_TOKEN_SYMBOL = 'HIVE';
16
+ const DEFAULT_VALID_DRAW_TYPES = ['hourly', 'daily'];
17
+ const DEFAULT_COST = 10;
18
+ const DEFAULT_MIN_ENTRIES_HOURLY = 25;
19
+ const DEFAULT_MIN_ENTRIES_DAILY = 100;
20
+ const DEFAULT_HOURLY_WINNERS_PICK = 3;
21
+ const DEFAULT_DAILY_WINNERS_PICK = 10;
22
+ const DEFAULT_MAX_TICKETS_PER_USER = 3;
23
+ const DEFAULT_PERCENTAGE = 5;
30
24
  const COLLECTION_LOTTERY = 'lottery';
31
25
  const COLLECTION_SETTINGS = 'settings';
32
- const COLLECTION_WINNERS = 'winners';
33
26
  function rng(previousBlockId, blockId, transactionId, entropy, maximum = 100) {
34
27
  const random = (0, seedrandom_1.default)(`${previousBlockId}${blockId}${transactionId}${entropy}`).double();
35
- const randomRoll = Math.floor(random * maximum) + 1;
36
- return randomRoll;
28
+ return Math.floor(random * maximum) + 1;
37
29
  }
38
- class LottoContract {
39
- // tslint:disable-next-line: variable-name
40
- _instance;
41
- adapter;
42
- blockNumber;
43
- blockId;
44
- previousBlockId;
45
- transactionId;
46
- async create() {
47
- this.adapter = this._instance.getAdapter();
48
- const settings = await this.adapter.findOne(COLLECTION_SETTINGS, {});
49
- if (!settings) {
50
- this.adapter.insert(COLLECTION_SETTINGS, {
51
- contractInitiated: new Date(),
52
- enabled: true
53
- });
54
- }
55
- }
56
- destroy() {
57
- // Runs every time unregister is run for this contract
58
- // Close database connections, write to a database with state, etc
59
- }
60
- updateBlockInfo(blockNumber, blockId, previousBlockId, transactionId) {
61
- // Lifecycle method which sets block info
62
- this.blockNumber = blockNumber;
63
- this.blockId = blockId;
64
- this.previousBlockId = previousBlockId;
65
- this.transactionId = transactionId;
66
- }
67
- async getBalance() {
68
- const account = await this._instance['client'].database.getAccounts([ACCOUNT]);
69
- if (account?.[0]) {
70
- const balance = account[0].balance.split(' ');
71
- const amount = balance[0];
72
- return parseFloat(amount);
30
+ function createLottoContract(options = {}) {
31
+ const name = options.name || DEFAULT_NAME;
32
+ const account = options.account || DEFAULT_ACCOUNT;
33
+ const feeAccount = options.feeAccount || DEFAULT_FEE_ACCOUNT;
34
+ const tokenSymbol = options.tokenSymbol || DEFAULT_TOKEN_SYMBOL;
35
+ const validCurrencies = options.validCurrencies || [tokenSymbol];
36
+ const validDrawTypes = options.validDrawTypes || DEFAULT_VALID_DRAW_TYPES;
37
+ const cost = options.cost ?? DEFAULT_COST;
38
+ const minEntriesHourly = options.minEntriesHourly ?? DEFAULT_MIN_ENTRIES_HOURLY;
39
+ const minEntriesDaily = options.minEntriesDaily ?? DEFAULT_MIN_ENTRIES_DAILY;
40
+ const hourlyWinnersPick = options.hourlyWinnersPick ?? DEFAULT_HOURLY_WINNERS_PICK;
41
+ const dailyWinnersPick = options.dailyWinnersPick ?? DEFAULT_DAILY_WINNERS_PICK;
42
+ const maxTicketsPerUser = options.maxTicketsPerUser ?? DEFAULT_MAX_TICKETS_PER_USER;
43
+ const feePercentage = options.feePercentage ?? DEFAULT_PERCENTAGE;
44
+ const state = {
45
+ streamer: null,
46
+ adapter: null
47
+ };
48
+ const buySchema = zod_1.z.object({
49
+ type: zod_1.z.enum(['hourly', 'daily'])
50
+ });
51
+ const getBalance = async () => {
52
+ const accountInfo = await state.streamer['client'].database.getAccounts([account]);
53
+ if (accountInfo?.[0]) {
54
+ const balance = accountInfo[0].balance.split(' ');
55
+ return parseFloat(balance[0]);
73
56
  }
74
57
  return null;
75
- }
76
- async getPreviousUserTicketsForCurrentDrawType(type, account) {
77
- const lotto = await this.adapter.find(COLLECTION_LOTTERY, { status: 'active', type: type });
58
+ };
59
+ const getPreviousUserTicketsForCurrentDrawType = async (type, accountName) => {
60
+ const lotto = await state.adapter.find(COLLECTION_LOTTERY, { status: 'active', type });
78
61
  if (!lotto[0] || !lotto[0].entries) {
79
62
  return 0;
80
63
  }
81
- const userEntries = lotto[0].entries.filter(e => e.account === account);
64
+ const userEntries = lotto[0].entries.filter((entry) => entry.account === accountName);
82
65
  return userEntries.length;
83
- }
84
- async buy(payload, { sender, amount }) {
85
- const { type } = payload;
86
- const amountTrim = amount.split(' ');
66
+ };
67
+ const buy = async (payload, ctx) => {
68
+ if (!ctx.transfer) {
69
+ throw new Error('Transfer context required for buy');
70
+ }
71
+ const sender = ctx.sender;
72
+ const amountRaw = ctx.transfer.rawAmount;
73
+ const amountTrim = amountRaw.split(' ');
87
74
  const amountParsed = parseFloat(amountTrim[0]);
88
75
  const amountCurrency = amountTrim[1].trim();
89
- const transaction = await this._instance.getTransaction(this.blockNumber, this.transactionId);
90
- const verify = await this._instance.verifyTransfer(transaction, sender, ACCOUNT, amount);
76
+ const transaction = await state.streamer.getTransaction(ctx.block.number, ctx.transaction.id);
77
+ const verify = await state.streamer.verifyTransfer(transaction, sender, account, amountRaw);
91
78
  if (verify) {
92
- // User sent an invalid currency
93
- if (!VALID_CURRENCIES.includes(amountCurrency)) {
94
- await this._instance.transferHiveTokens(ACCOUNT, sender, amountTrim[0], amountTrim[1], `[Refund] You sent an invalid currency.`);
79
+ if (!validCurrencies.includes(amountCurrency)) {
80
+ await state.streamer.transferHiveTokens(account, sender, amountTrim[0], amountTrim[1], '[Refund] You sent an invalid currency.');
95
81
  return;
96
82
  }
97
- // User did not specify a valid entry type, refund them
98
- if (!VALID_DRAW_TYPES.includes(type)) {
99
- await this._instance.transferHiveTokens(ACCOUNT, sender, amountTrim[0], amountTrim[1], `[Refund] You specified an invalid draw type`);
83
+ if (!validDrawTypes.includes(payload.type)) {
84
+ await state.streamer.transferHiveTokens(account, sender, amountTrim[0], amountTrim[1], '[Refund] You specified an invalid draw type');
100
85
  return;
101
86
  }
102
- // If the user has already entered the maximum allowed times, refund them
103
- const previousEntriesCount = await this.getPreviousUserTicketsForCurrentDrawType(type, sender);
104
- if (previousEntriesCount === MAX_TICKETS_PER_USER) {
105
- await this._instance.transferHiveTokens(ACCOUNT, sender, amountTrim[0], amountTrim[1], `[Refund] You have exceeded the allowed number of entries`);
87
+ const previousEntriesCount = await getPreviousUserTicketsForCurrentDrawType(payload.type, sender);
88
+ if (previousEntriesCount === maxTicketsPerUser) {
89
+ await state.streamer.transferHiveTokens(account, sender, amountTrim[0], amountTrim[1], '[Refund] You have exceeded the allowed number of entries');
106
90
  return;
107
91
  }
108
- // User sent too much, refund the difference
109
- if (amountParsed > COST) {
110
- const difference = new bignumber_js_1.default(amountParsed).minus(COST).toFixed(3);
111
- await this._instance.transferHiveTokens(ACCOUNT, sender, difference, amountTrim[1], `[Refund] A ticket costs ${COST} HIVE. You sent ${amount}. You were refunded ${difference} HIVE.`);
92
+ if (amountParsed > cost) {
93
+ const difference = new bignumber_js_1.default(amountParsed).minus(cost).toFixed(3);
94
+ await state.streamer.transferHiveTokens(account, sender, difference, amountTrim[1], `[Refund] A ticket costs ${cost} ${tokenSymbol}. You sent ${amountRaw}. You were refunded ${difference} ${tokenSymbol}.`);
112
95
  return;
113
96
  }
114
- // Find an active lotto draw that is of status "active" and our type
115
- const lotto = await this.adapter.find(COLLECTION_LOTTERY, { status: 'active', type: type });
116
- // We have a lotto
97
+ const lotto = await state.adapter.find(COLLECTION_LOTTERY, { status: 'active', type: payload.type });
117
98
  if (lotto.length) {
118
99
  const draw = lotto[0];
119
100
  draw.entries.push({
120
101
  account: sender,
121
- transactionId: this.transactionId,
102
+ transactionId: ctx.transaction.id,
122
103
  date: new Date()
123
104
  });
124
- return await this.adapter.replace(COLLECTION_LOTTERY, { _id: draw._id }, draw);
105
+ await state.adapter.replace(COLLECTION_LOTTERY, { _id: draw._id }, draw);
106
+ return;
125
107
  }
126
- // We need to create a new lotto, no active draws for this type
127
108
  const entries = [{
128
109
  account: sender,
129
- transactionId: this.transactionId,
110
+ transactionId: ctx.transaction.id,
130
111
  date: new Date()
131
112
  }];
132
- return await this.adapter.insert(COLLECTION_LOTTERY, { status: 'active', type: type, entries });
113
+ await state.adapter.insert(COLLECTION_LOTTERY, { status: 'active', type: payload.type, entries });
114
+ }
115
+ };
116
+ const getWinners = async (count, entries, ctx) => {
117
+ const winners = [];
118
+ utils_1.Utils.shuffle(entries);
119
+ for (const entry of entries) {
120
+ if (winners.length < count) {
121
+ const winner = entries[rng(ctx.block.previousId + `${(0, seedrandom_1.default)().double()}`, ctx.block.id + `${(0, seedrandom_1.default)().double()}`, ctx.transaction.id + `${(0, seedrandom_1.default)().double()}`, (0, seedrandom_1.default)().double(), entries.length - 1)];
122
+ winners.push(winner);
123
+ await utils_1.Utils.sleep(300);
124
+ }
125
+ else {
126
+ break;
127
+ }
133
128
  }
134
- }
135
- async drawHourlyLottery() {
136
- const lotto = await this.adapter.find(COLLECTION_LOTTERY, { status: 'active', type: 'hourly' });
137
- // We found an hourly draw
129
+ return winners;
130
+ };
131
+ const drawHourlyLottery = async (_payload, ctx) => {
132
+ const lotto = await state.adapter.find(COLLECTION_LOTTERY, { status: 'active', type: 'hourly' });
138
133
  if (lotto.length) {
139
134
  const draw = lotto[0];
140
135
  const total = draw.entries.length;
141
- // Number of entrants is less than the minimum
142
- if (total < MIN_ENTRIES_HOURLY) {
136
+ if (total < minEntriesHourly) {
143
137
  const entrants = draw.entries.reduce((arr, entrant) => {
144
138
  arr.push(entrant.account);
145
139
  return arr;
146
140
  }, []);
147
- await this._instance.transferHiveTokensMultiple(ACCOUNT, entrants, '10.000', 'HIVE', '[Refund] The hourly lotto draw did not have enough contestants.');
141
+ await state.streamer.transferHiveTokensMultiple(account, entrants, '10.000', tokenSymbol, '[Refund] The hourly lotto draw did not have enough contestants.');
148
142
  return;
149
143
  }
150
- const balance = await this.getBalance();
151
- // Number of entrants multiplied by the entry cost is the total for this draw
152
- const winningsAmount = new bignumber_js_1.default(total).multipliedBy(COST).toNumber();
153
- // Calculate how much the account gets to keep
154
- const percentageFee = new bignumber_js_1.default(winningsAmount).dividedBy(100).multipliedBy(PERCENTAGE);
155
- // The amount minus the percentage to pay out to winners
144
+ const balance = await getBalance();
145
+ const winningsAmount = new bignumber_js_1.default(total).multipliedBy(cost).toNumber();
146
+ const percentageFee = new bignumber_js_1.default(winningsAmount).dividedBy(100).multipliedBy(feePercentage);
156
147
  const payoutTotal = new bignumber_js_1.default(winningsAmount).minus(percentageFee);
157
- // Amount each winner gets
158
- const amountPerWinner = new bignumber_js_1.default(payoutTotal).dividedBy(HOURLY_WINNERS_PICK).toFixed(3);
159
- // Send fee percentage to fee account
160
- if (ACCOUNT !== FEE_ACCOUNT) {
161
- await this._instance.transferHiveTokens(ACCOUNT, FEE_ACCOUNT, percentageFee.toFixed(3), 'HIVE', 'percentage fee');
162
- }
163
- // Winnings exceed balance
164
- if (payoutTotal.toNumber() > balance) {
148
+ const amountPerWinner = new bignumber_js_1.default(payoutTotal).dividedBy(hourlyWinnersPick).toFixed(3);
149
+ if (account !== feeAccount) {
150
+ await state.streamer.transferHiveTokens(account, feeAccount, percentageFee.toFixed(3), tokenSymbol, 'percentage fee');
151
+ }
152
+ if (balance !== null && payoutTotal.toNumber() > balance) {
165
153
  throw new Error('Balance is less than amount to pay out');
166
154
  }
167
- const winners = await this.getWinners(HOURLY_WINNERS_PICK, draw.entries);
155
+ const winners = await getWinners(hourlyWinnersPick, draw.entries, ctx);
168
156
  if (winners) {
169
157
  const winnerStrings = winners.reduce((arr, winner) => {
170
158
  arr.push(winner.account);
171
159
  return arr;
172
160
  }, []);
173
- await this._instance.transferHiveTokensMultiple(ACCOUNT, winnerStrings, amountPerWinner, TOKEN_SYMBOL, `Congratulations you won the hourly lottery. You won ${amountPerWinner} ${TOKEN_SYMBOL}. Winners: ${winnerStrings.join(', ')}`);
161
+ await state.streamer.transferHiveTokensMultiple(account, winnerStrings, amountPerWinner, tokenSymbol, `Congratulations you won the hourly lottery. You won ${amountPerWinner} ${tokenSymbol}. Winners: ${winnerStrings.join(', ')}`);
174
162
  const losers = draw.entries
175
- .filter(e => {
176
- return !winnerStrings.includes(e.account);
177
- })
163
+ .filter((entry) => !winnerStrings.includes(entry.account))
178
164
  .reduce((unique, value) => {
179
165
  return unique.includes(value.account) ? unique : [...unique, value.account];
180
166
  }, []);
181
- if (losers) {
182
- await this._instance.transferHiveTokensMultiple(ACCOUNT, losers, '0.001', TOKEN_SYMBOL, `Sorry, you didn't win the hourly draw. Winners: ${winnerStrings.join(', ')}`);
167
+ if (losers.length) {
168
+ await state.streamer.transferHiveTokensMultiple(account, losers, '0.001', tokenSymbol, `Sorry, you didn't win the hourly draw. Winners: ${winnerStrings.join(', ')}`);
183
169
  }
184
170
  }
185
- return winners;
171
+ return;
186
172
  }
187
- }
188
- async drawDailyLottery() {
189
- const lotto = await this.adapter.find(COLLECTION_LOTTERY, { status: 'active', type: 'daily' });
190
- // We found an hourly draw
173
+ return;
174
+ };
175
+ const drawDailyLottery = async (_payload, ctx) => {
176
+ const lotto = await state.adapter.find(COLLECTION_LOTTERY, { status: 'active', type: 'daily' });
191
177
  if (lotto.length) {
192
178
  const draw = lotto[0];
193
179
  const total = draw.entries.length;
194
- // Number of entrants is less than the minimum
195
- if (total < MIN_ENTRIES_DAILY) {
180
+ if (total < minEntriesDaily) {
196
181
  for (const entrant of draw.entries) {
197
- await this._instance.transferHiveTokens(ACCOUNT, entrant.account, '10.000', 'HIVE', '[Refund] The hourly lotto draw did not have enough contestants.');
198
- await utils_2.Utils.sleep(3000);
182
+ await state.streamer.transferHiveTokens(account, entrant.account, '10.000', tokenSymbol, '[Refund] The daily lotto draw did not have enough contestants.');
183
+ await utils_1.Utils.sleep(3000);
199
184
  }
200
185
  return;
201
186
  }
202
- const balance = await this.getBalance();
203
- // Number of entrants multiplied by the entry cost is the total for this draw
204
- const winningsAmount = new bignumber_js_1.default(total).multipliedBy(COST).toNumber();
205
- // Calculate how much the account gets to keep
206
- const percentageFee = new bignumber_js_1.default(winningsAmount).dividedBy(100).multipliedBy(PERCENTAGE);
207
- // The amount minus the percentage to pay out to winners
187
+ const balance = await getBalance();
188
+ const winningsAmount = new bignumber_js_1.default(total).multipliedBy(cost).toNumber();
189
+ const percentageFee = new bignumber_js_1.default(winningsAmount).dividedBy(100).multipliedBy(feePercentage);
208
190
  const payoutTotal = new bignumber_js_1.default(winningsAmount).minus(percentageFee);
209
- // Amount each winner gets
210
- const amountPerWinner = new bignumber_js_1.default(payoutTotal).dividedBy(DAILY_WINNERS_PICK).toFixed(3);
211
- // Send fee percentage to fee account
212
- if (ACCOUNT !== FEE_ACCOUNT) {
213
- await this._instance.transferHiveTokens(ACCOUNT, FEE_ACCOUNT, percentageFee.toFixed(3), 'HIVE', 'percentage fee');
214
- }
215
- // Winnings exceed balance
216
- if (payoutTotal.toNumber() > balance) {
191
+ const amountPerWinner = new bignumber_js_1.default(payoutTotal).dividedBy(dailyWinnersPick).toFixed(3);
192
+ if (account !== feeAccount) {
193
+ await state.streamer.transferHiveTokens(account, feeAccount, percentageFee.toFixed(3), tokenSymbol, 'percentage fee');
194
+ }
195
+ if (balance !== null && payoutTotal.toNumber() > balance) {
217
196
  throw new Error('Balance is less than amount to pay out');
218
197
  }
219
- const winners = await this.getWinners(DAILY_WINNERS_PICK, draw.entries);
198
+ const winners = await getWinners(dailyWinnersPick, draw.entries, ctx);
220
199
  if (winners) {
221
200
  const winnerStrings = winners.reduce((arr, winner) => {
222
201
  arr.push(winner.account);
223
202
  return arr;
224
203
  }, []);
225
- await this._instance.transferHiveTokensMultiple(ACCOUNT, winnerStrings, amountPerWinner, TOKEN_SYMBOL, `Congratulations you won the daily lottery. You won ${amountPerWinner} ${TOKEN_SYMBOL}`);
204
+ await state.streamer.transferHiveTokensMultiple(account, winnerStrings, amountPerWinner, tokenSymbol, `Congratulations you won the daily lottery. You won ${amountPerWinner} ${tokenSymbol}`);
226
205
  }
227
- return winners;
206
+ return;
228
207
  }
229
- }
230
- async getWinners(count, entries) {
231
- let winners = [];
232
- utils_2.Utils.shuffle(entries);
233
- for (const entry of entries) {
234
- if (winners.length < count) {
235
- const winner = entries[rng(this.previousBlockId + `${(0, seedrandom_1.default)().double()}`, this.blockId + `${(0, seedrandom_1.default)().double()}`, this.transactionId + `${(0, seedrandom_1.default)().double()}`, (0, seedrandom_1.default)().double(), entries.length - 1)];
236
- winners.push(winner);
237
- await (0, utils_1.sleep)(300);
238
- }
239
- else {
240
- break;
208
+ return;
209
+ };
210
+ return (0, contract_1.defineContract)({
211
+ name,
212
+ hooks: {
213
+ create: async ({ streamer, adapter }) => {
214
+ state.streamer = streamer;
215
+ state.adapter = adapter;
216
+ const settings = await state.adapter.findOne(COLLECTION_SETTINGS, {});
217
+ if (!settings) {
218
+ await state.adapter.insert(COLLECTION_SETTINGS, {
219
+ contractInitiated: new Date(),
220
+ enabled: true
221
+ });
222
+ }
241
223
  }
224
+ },
225
+ actions: {
226
+ buy: (0, contract_1.action)(buy, {
227
+ schema: buySchema,
228
+ trigger: 'transfer'
229
+ }),
230
+ drawHourlyLottery: (0, contract_1.action)(drawHourlyLottery, {
231
+ trigger: 'time'
232
+ }),
233
+ drawDailyLottery: (0, contract_1.action)(drawDailyLottery, {
234
+ trigger: 'time'
235
+ })
242
236
  }
243
- return winners;
244
- }
237
+ });
245
238
  }
246
- exports.LottoContract = LottoContract;
247
239
  //# sourceMappingURL=lotto.contract.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"lotto.contract.js","sourceRoot":"","sources":["../../src/contracts/lotto.contract.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lotto.contract.js","sourceRoot":"","sources":["../../src/contracts/lotto.contract.ts"],"names":[],"mappings":"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"}
@@ -22,3 +22,7 @@ export declare class NFTContract {
22
22
  private getCollectionInfo;
23
23
  private getUserTokens;
24
24
  }
25
+ export interface NFTContractOptions {
26
+ name?: string;
27
+ }
28
+ export declare function createNFTContract(options?: NFTContractOptions): import("..").ContractDefinition;
@@ -4,7 +4,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.NFTContract = void 0;
7
+ exports.createNFTContract = createNFTContract;
7
8
  const bignumber_js_1 = __importDefault(require("bignumber.js"));
9
+ const contract_1 = require("./contract");
8
10
  const CONTRACT_NAME = 'hivenft';
9
11
  class NFTContract {
10
12
  _instance;
@@ -530,4 +532,67 @@ class NFTContract {
530
532
  }
531
533
  }
532
534
  exports.NFTContract = NFTContract;
535
+ function createNFTContract(options = {}) {
536
+ const name = options.name || CONTRACT_NAME;
537
+ const instance = new NFTContract();
538
+ const callWithContext = async (payload, ctx, handler, meta) => {
539
+ instance.updateBlockInfo(ctx.block.number, ctx.block.id, ctx.block.previousId, ctx.transaction.id);
540
+ return handler(payload, meta);
541
+ };
542
+ return (0, contract_1.defineContract)({
543
+ name,
544
+ hooks: {
545
+ create: async ({ streamer }) => {
546
+ instance._instance = streamer;
547
+ await instance.create();
548
+ },
549
+ destroy: async () => {
550
+ await instance.destroy();
551
+ }
552
+ },
553
+ actions: {
554
+ createCollection: (0, contract_1.action)((payload, ctx) => callWithContext(payload, ctx, instance.createCollection.bind(instance), { sender: ctx.sender }), {
555
+ trigger: 'custom_json'
556
+ }),
557
+ mintNFT: (0, contract_1.action)((payload, ctx) => callWithContext(payload, ctx, instance.mintNFT.bind(instance), { sender: ctx.sender }), {
558
+ trigger: 'custom_json'
559
+ }),
560
+ updateNFT: (0, contract_1.action)((payload, ctx) => callWithContext(payload, ctx, instance.updateNFT.bind(instance), { sender: ctx.sender }), {
561
+ trigger: 'custom_json'
562
+ }),
563
+ transferNFT: (0, contract_1.action)((payload, ctx) => callWithContext(payload, ctx, instance.transferNFT.bind(instance), { sender: ctx.sender }), {
564
+ trigger: 'custom_json'
565
+ }),
566
+ burnNFT: (0, contract_1.action)((payload, ctx) => callWithContext(payload, ctx, instance.burnNFT.bind(instance), { sender: ctx.sender }), {
567
+ trigger: 'custom_json'
568
+ }),
569
+ listNFT: (0, contract_1.action)((payload, ctx) => callWithContext(payload, ctx, instance.listNFT.bind(instance), { sender: ctx.sender }), {
570
+ trigger: 'custom_json'
571
+ }),
572
+ unlistNFT: (0, contract_1.action)((payload, ctx) => callWithContext(payload, ctx, instance.unlistNFT.bind(instance), { sender: ctx.sender }), {
573
+ trigger: 'custom_json'
574
+ }),
575
+ buyNFT: (0, contract_1.action)((payload, ctx) => {
576
+ const amountRaw = ctx.transfer?.rawAmount || '';
577
+ const [amount, asset] = amountRaw.split(' ');
578
+ return callWithContext(payload, ctx, instance.buyNFT.bind(instance), {
579
+ sender: ctx.sender,
580
+ amount,
581
+ asset
582
+ });
583
+ }, {
584
+ trigger: 'transfer'
585
+ }),
586
+ getTokenInfo: (0, contract_1.action)((payload, ctx) => callWithContext(payload, ctx, instance.getTokenInfo.bind(instance), { sender: ctx.sender }), {
587
+ trigger: 'custom_json'
588
+ }),
589
+ getCollectionInfo: (0, contract_1.action)((payload, ctx) => callWithContext(payload, ctx, instance.getCollectionInfo.bind(instance), { sender: ctx.sender }), {
590
+ trigger: 'custom_json'
591
+ }),
592
+ getUserTokens: (0, contract_1.action)((payload, ctx) => callWithContext(payload, ctx, instance.getUserTokens.bind(instance), { sender: ctx.sender }), {
593
+ trigger: 'custom_json'
594
+ })
595
+ }
596
+ });
597
+ }
533
598
  //# sourceMappingURL=nft.contract.js.map