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,32 +3,46 @@ 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.createTokenContract = createTokenContract;
|
|
7
7
|
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
8
|
+
const zod_1 = require("zod");
|
|
9
|
+
const contract_1 = require("./contract");
|
|
10
|
+
const DEFAULT_NAME = 'hivetoken';
|
|
11
|
+
function createTokenContract(options = {}) {
|
|
12
|
+
const name = options.name || DEFAULT_NAME;
|
|
13
|
+
const state = {
|
|
14
|
+
streamer: null,
|
|
15
|
+
adapter: null
|
|
16
|
+
};
|
|
17
|
+
const createTokenSchema = zod_1.z.object({
|
|
18
|
+
symbol: zod_1.z.string().regex(/^[A-Z0-9]{1,10}$/),
|
|
19
|
+
name: zod_1.z.string().min(1).max(50),
|
|
20
|
+
url: zod_1.z.string().max(256).optional(),
|
|
21
|
+
precision: zod_1.z.number().int().min(0).max(8).optional(),
|
|
22
|
+
maxSupply: zod_1.z.string()
|
|
23
|
+
});
|
|
24
|
+
const issueTokensSchema = zod_1.z.object({
|
|
25
|
+
symbol: zod_1.z.string().min(1),
|
|
26
|
+
to: zod_1.z.string().min(1),
|
|
27
|
+
amount: zod_1.z.string().min(1),
|
|
28
|
+
memo: zod_1.z.string().optional()
|
|
29
|
+
});
|
|
30
|
+
const transferTokensSchema = zod_1.z.object({
|
|
31
|
+
symbol: zod_1.z.string().min(1),
|
|
32
|
+
to: zod_1.z.string().min(1),
|
|
33
|
+
amount: zod_1.z.string().min(1),
|
|
34
|
+
memo: zod_1.z.string().optional()
|
|
35
|
+
});
|
|
36
|
+
const getBalanceSchema = zod_1.z.object({
|
|
37
|
+
account: zod_1.z.string().min(1),
|
|
38
|
+
symbol: zod_1.z.string().min(1)
|
|
39
|
+
});
|
|
40
|
+
const getTokenInfoSchema = zod_1.z.object({
|
|
41
|
+
symbol: zod_1.z.string().min(1)
|
|
42
|
+
});
|
|
43
|
+
const initializeTokenTables = async () => {
|
|
30
44
|
try {
|
|
31
|
-
await
|
|
45
|
+
await state.adapter.query(`
|
|
32
46
|
CREATE TABLE IF NOT EXISTS tokens (
|
|
33
47
|
symbol TEXT PRIMARY KEY,
|
|
34
48
|
name TEXT NOT NULL,
|
|
@@ -40,7 +54,7 @@ class TokenContract {
|
|
|
40
54
|
created_at DATETIME NOT NULL
|
|
41
55
|
)
|
|
42
56
|
`);
|
|
43
|
-
await
|
|
57
|
+
await state.adapter.query(`
|
|
44
58
|
CREATE TABLE IF NOT EXISTS token_balances (
|
|
45
59
|
account TEXT NOT NULL,
|
|
46
60
|
symbol TEXT NOT NULL,
|
|
@@ -49,7 +63,7 @@ class TokenContract {
|
|
|
49
63
|
FOREIGN KEY (symbol) REFERENCES tokens(symbol)
|
|
50
64
|
)
|
|
51
65
|
`);
|
|
52
|
-
await
|
|
66
|
+
await state.adapter.query(`
|
|
53
67
|
CREATE TABLE IF NOT EXISTS token_transfers (
|
|
54
68
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
55
69
|
from_account TEXT NOT NULL,
|
|
@@ -67,14 +81,14 @@ class TokenContract {
|
|
|
67
81
|
catch (error) {
|
|
68
82
|
console.error('[TokenContract] Error initializing tables:', error);
|
|
69
83
|
}
|
|
70
|
-
}
|
|
71
|
-
async
|
|
84
|
+
};
|
|
85
|
+
const createToken = async (payload, ctx) => {
|
|
72
86
|
try {
|
|
73
|
-
const { symbol, name, url = '', precision = 3, maxSupply } = payload;
|
|
87
|
+
const { symbol, name: tokenName, url = '', precision = 3, maxSupply } = payload;
|
|
74
88
|
if (!symbol.match(/^[A-Z0-9]{1,10}$/)) {
|
|
75
89
|
throw new Error('Symbol must be 1-10 uppercase alphanumeric characters');
|
|
76
90
|
}
|
|
77
|
-
if (!
|
|
91
|
+
if (!tokenName || tokenName.length > 50) {
|
|
78
92
|
throw new Error('Name is required and must be 50 characters or less');
|
|
79
93
|
}
|
|
80
94
|
if (precision < 0 || precision > 8) {
|
|
@@ -87,40 +101,40 @@ class TokenContract {
|
|
|
87
101
|
if (url && url.length > 256) {
|
|
88
102
|
throw new Error('URL must be 256 characters or less');
|
|
89
103
|
}
|
|
90
|
-
const existingToken = await
|
|
104
|
+
const existingToken = await state.adapter.query('SELECT symbol FROM tokens WHERE symbol = ?', [symbol]);
|
|
91
105
|
if (existingToken && existingToken.length > 0) {
|
|
92
106
|
throw new Error(`Token with symbol ${symbol} already exists`);
|
|
93
107
|
}
|
|
94
|
-
await
|
|
108
|
+
await state.adapter.query(`
|
|
95
109
|
INSERT INTO tokens (symbol, name, url, precision, max_supply, current_supply, creator, created_at)
|
|
96
110
|
VALUES (?, ?, ?, ?, ?, '0', ?, ?)
|
|
97
|
-
`, [symbol,
|
|
98
|
-
await
|
|
111
|
+
`, [symbol, tokenName, url, precision, maxSupply, ctx.sender, new Date()]);
|
|
112
|
+
await state.adapter.addEvent(new Date(), name, 'createToken', payload, {
|
|
99
113
|
action: 'token_created',
|
|
100
114
|
data: {
|
|
101
115
|
symbol,
|
|
102
|
-
name,
|
|
103
|
-
creator: sender,
|
|
116
|
+
name: tokenName,
|
|
117
|
+
creator: ctx.sender,
|
|
104
118
|
maxSupply,
|
|
105
119
|
precision
|
|
106
120
|
}
|
|
107
121
|
});
|
|
108
|
-
console.log(`[TokenContract] Token ${symbol} created by ${sender}`);
|
|
122
|
+
console.log(`[TokenContract] Token ${symbol} created by ${ctx.sender}`);
|
|
109
123
|
}
|
|
110
124
|
catch (error) {
|
|
111
125
|
console.error('[TokenContract] Error creating token:', error);
|
|
112
126
|
throw error;
|
|
113
127
|
}
|
|
114
|
-
}
|
|
115
|
-
async
|
|
128
|
+
};
|
|
129
|
+
const issueTokens = async (payload, ctx) => {
|
|
116
130
|
try {
|
|
117
131
|
const { symbol, to, amount, memo = '' } = payload;
|
|
118
|
-
const token = await
|
|
132
|
+
const token = await state.adapter.query('SELECT * FROM tokens WHERE symbol = ?', [symbol]);
|
|
119
133
|
if (!token || token.length === 0) {
|
|
120
134
|
throw new Error(`Token ${symbol} does not exist`);
|
|
121
135
|
}
|
|
122
136
|
const tokenData = token[0];
|
|
123
|
-
if (tokenData.creator !== sender) {
|
|
137
|
+
if (tokenData.creator !== ctx.sender) {
|
|
124
138
|
throw new Error('Only the token creator can issue new tokens');
|
|
125
139
|
}
|
|
126
140
|
const amountBN = new bignumber_js_1.default(amount);
|
|
@@ -133,27 +147,28 @@ class TokenContract {
|
|
|
133
147
|
if (newSupplyBN.gt(maxSupplyBN)) {
|
|
134
148
|
throw new Error('Cannot issue tokens: would exceed maximum supply');
|
|
135
149
|
}
|
|
136
|
-
await
|
|
137
|
-
|
|
150
|
+
await state.adapter.query(`
|
|
151
|
+
UPDATE tokens SET current_supply = ? WHERE symbol = ?
|
|
152
|
+
`, [newSupplyBN.toString(), symbol]);
|
|
153
|
+
const existingBalance = await state.adapter.query('SELECT balance FROM token_balances WHERE account = ? AND symbol = ?', [to, symbol]);
|
|
138
154
|
if (existingBalance && existingBalance.length > 0) {
|
|
139
|
-
const
|
|
140
|
-
const newBalanceBN =
|
|
141
|
-
await
|
|
155
|
+
const balanceBN = new bignumber_js_1.default(existingBalance[0].balance);
|
|
156
|
+
const newBalanceBN = balanceBN.plus(amountBN);
|
|
157
|
+
await state.adapter.query('UPDATE token_balances SET balance = ? WHERE account = ? AND symbol = ?', [newBalanceBN.toString(), to, symbol]);
|
|
142
158
|
}
|
|
143
159
|
else {
|
|
144
|
-
await
|
|
160
|
+
await state.adapter.query('INSERT INTO token_balances (account, symbol, balance) VALUES (?, ?, ?)', [to, symbol, amountBN.toString()]);
|
|
145
161
|
}
|
|
146
|
-
await
|
|
162
|
+
await state.adapter.query(`
|
|
147
163
|
INSERT INTO token_transfers (from_account, to_account, amount, symbol, memo, block_number, transaction_id, timestamp)
|
|
148
164
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
149
|
-
`, ['null', to, amount, symbol, memo,
|
|
150
|
-
await
|
|
165
|
+
`, ['null', to, amount, symbol, memo, ctx.block.number, ctx.transaction.id, new Date()]);
|
|
166
|
+
await state.adapter.addEvent(new Date(), name, 'issueTokens', payload, {
|
|
151
167
|
action: 'tokens_issued',
|
|
152
168
|
data: {
|
|
153
|
-
symbol,
|
|
154
169
|
to,
|
|
155
170
|
amount,
|
|
156
|
-
|
|
171
|
+
symbol
|
|
157
172
|
}
|
|
158
173
|
});
|
|
159
174
|
console.log(`[TokenContract] Issued ${amount} ${symbol} to ${to}`);
|
|
@@ -162,70 +177,72 @@ class TokenContract {
|
|
|
162
177
|
console.error('[TokenContract] Error issuing tokens:', error);
|
|
163
178
|
throw error;
|
|
164
179
|
}
|
|
165
|
-
}
|
|
166
|
-
async
|
|
180
|
+
};
|
|
181
|
+
const transferTokens = async (payload, ctx) => {
|
|
167
182
|
try {
|
|
168
183
|
const { symbol, to, amount, memo = '' } = payload;
|
|
169
|
-
|
|
184
|
+
if (ctx.sender === to) {
|
|
185
|
+
throw new Error('Cannot transfer tokens to yourself');
|
|
186
|
+
}
|
|
187
|
+
const token = await state.adapter.query('SELECT * FROM tokens WHERE symbol = ?', [symbol]);
|
|
170
188
|
if (!token || token.length === 0) {
|
|
171
189
|
throw new Error(`Token ${symbol} does not exist`);
|
|
172
190
|
}
|
|
173
|
-
const precision = token[0].precision;
|
|
174
191
|
const amountBN = new bignumber_js_1.default(amount);
|
|
175
192
|
if (amountBN.isNaN() || amountBN.lte(0)) {
|
|
176
193
|
throw new Error('Amount must be a positive number');
|
|
177
194
|
}
|
|
178
|
-
const senderBalance = await
|
|
195
|
+
const senderBalance = await state.adapter.query('SELECT balance FROM token_balances WHERE account = ? AND symbol = ?', [ctx.sender, symbol]);
|
|
179
196
|
if (!senderBalance || senderBalance.length === 0) {
|
|
180
|
-
throw new Error(
|
|
197
|
+
throw new Error(`Account ${ctx.sender} does not have any ${symbol} tokens`);
|
|
181
198
|
}
|
|
182
199
|
const senderBalanceBN = new bignumber_js_1.default(senderBalance[0].balance);
|
|
183
200
|
if (senderBalanceBN.lt(amountBN)) {
|
|
184
201
|
throw new Error('Insufficient balance');
|
|
185
202
|
}
|
|
186
203
|
const newSenderBalanceBN = senderBalanceBN.minus(amountBN);
|
|
187
|
-
await
|
|
188
|
-
const receiverBalance = await
|
|
204
|
+
await state.adapter.query('UPDATE token_balances SET balance = ? WHERE account = ? AND symbol = ?', [newSenderBalanceBN.toString(), ctx.sender, symbol]);
|
|
205
|
+
const receiverBalance = await state.adapter.query('SELECT balance FROM token_balances WHERE account = ? AND symbol = ?', [to, symbol]);
|
|
189
206
|
if (receiverBalance && receiverBalance.length > 0) {
|
|
190
207
|
const receiverBalanceBN = new bignumber_js_1.default(receiverBalance[0].balance);
|
|
191
208
|
const newReceiverBalanceBN = receiverBalanceBN.plus(amountBN);
|
|
192
|
-
await
|
|
209
|
+
await state.adapter.query('UPDATE token_balances SET balance = ? WHERE account = ? AND symbol = ?', [newReceiverBalanceBN.toString(), to, symbol]);
|
|
193
210
|
}
|
|
194
211
|
else {
|
|
195
|
-
await
|
|
212
|
+
await state.adapter.query('INSERT INTO token_balances (account, symbol, balance) VALUES (?, ?, ?)', [to, symbol, amountBN.toString()]);
|
|
196
213
|
}
|
|
197
|
-
await
|
|
214
|
+
await state.adapter.query(`
|
|
198
215
|
INSERT INTO token_transfers (from_account, to_account, amount, symbol, memo, block_number, transaction_id, timestamp)
|
|
199
216
|
VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
200
|
-
`, [sender, to, amount, symbol, memo,
|
|
201
|
-
await
|
|
217
|
+
`, [ctx.sender, to, amount, symbol, memo, ctx.block.number, ctx.transaction.id, new Date()]);
|
|
218
|
+
await state.adapter.addEvent(new Date(), name, 'transferTokens', payload, {
|
|
202
219
|
action: 'tokens_transferred',
|
|
203
220
|
data: {
|
|
204
|
-
from: sender,
|
|
221
|
+
from: ctx.sender,
|
|
205
222
|
to,
|
|
206
223
|
amount,
|
|
207
224
|
symbol
|
|
208
225
|
}
|
|
209
226
|
});
|
|
210
|
-
console.log(`[TokenContract] Transferred ${amount} ${symbol} from ${sender} to ${to}`);
|
|
227
|
+
console.log(`[TokenContract] Transferred ${amount} ${symbol} from ${ctx.sender} to ${to}`);
|
|
211
228
|
}
|
|
212
229
|
catch (error) {
|
|
213
230
|
console.error('[TokenContract] Error transferring tokens:', error);
|
|
214
231
|
throw error;
|
|
215
232
|
}
|
|
216
|
-
}
|
|
217
|
-
async
|
|
233
|
+
};
|
|
234
|
+
const getBalance = async (payload, ctx) => {
|
|
218
235
|
try {
|
|
219
236
|
const { account, symbol } = payload;
|
|
220
|
-
const balance = await
|
|
237
|
+
const balance = await state.adapter.query('SELECT balance FROM token_balances WHERE account = ? AND symbol = ?', [account, symbol]);
|
|
221
238
|
const balanceAmount = balance && balance.length > 0 ? balance[0].balance : '0';
|
|
222
|
-
await
|
|
239
|
+
await state.adapter.addEvent(new Date(), name, 'getBalance', payload, {
|
|
223
240
|
action: 'balance_query',
|
|
224
241
|
data: {
|
|
225
242
|
account,
|
|
226
243
|
symbol,
|
|
227
244
|
balance: balanceAmount,
|
|
228
|
-
queried_by: sender
|
|
245
|
+
queried_by: ctx.sender
|
|
229
246
|
}
|
|
230
247
|
});
|
|
231
248
|
console.log(`[TokenContract] Balance query: ${account} has ${balanceAmount} ${symbol}`);
|
|
@@ -234,30 +251,61 @@ class TokenContract {
|
|
|
234
251
|
console.error('[TokenContract] Error getting balance:', error);
|
|
235
252
|
throw error;
|
|
236
253
|
}
|
|
237
|
-
}
|
|
238
|
-
async
|
|
254
|
+
};
|
|
255
|
+
const getTokenInfo = async (payload, ctx) => {
|
|
239
256
|
try {
|
|
240
257
|
const { symbol } = payload;
|
|
241
|
-
const token = await
|
|
258
|
+
const token = await state.adapter.query('SELECT * FROM tokens WHERE symbol = ?', [symbol]);
|
|
242
259
|
if (!token || token.length === 0) {
|
|
243
260
|
throw new Error(`Token ${symbol} does not exist`);
|
|
244
261
|
}
|
|
245
262
|
const tokenData = token[0];
|
|
246
|
-
await
|
|
263
|
+
await state.adapter.addEvent(new Date(), name, 'getTokenInfo', payload, {
|
|
247
264
|
action: 'token_info_query',
|
|
248
265
|
data: {
|
|
249
266
|
symbol,
|
|
250
|
-
queried_by: sender,
|
|
267
|
+
queried_by: ctx.sender,
|
|
251
268
|
token_info: tokenData
|
|
252
269
|
}
|
|
253
270
|
});
|
|
254
|
-
console.log(`[TokenContract] Token info query for ${symbol} by ${sender}`);
|
|
271
|
+
console.log(`[TokenContract] Token info query for ${symbol} by ${ctx.sender}`);
|
|
255
272
|
}
|
|
256
273
|
catch (error) {
|
|
257
274
|
console.error('[TokenContract] Error getting token info:', error);
|
|
258
275
|
throw error;
|
|
259
276
|
}
|
|
260
|
-
}
|
|
277
|
+
};
|
|
278
|
+
return (0, contract_1.defineContract)({
|
|
279
|
+
name,
|
|
280
|
+
hooks: {
|
|
281
|
+
create: async ({ streamer, adapter }) => {
|
|
282
|
+
state.streamer = streamer;
|
|
283
|
+
state.adapter = adapter;
|
|
284
|
+
await initializeTokenTables();
|
|
285
|
+
}
|
|
286
|
+
},
|
|
287
|
+
actions: {
|
|
288
|
+
createToken: (0, contract_1.action)(createToken, {
|
|
289
|
+
schema: createTokenSchema,
|
|
290
|
+
trigger: 'custom_json'
|
|
291
|
+
}),
|
|
292
|
+
issueTokens: (0, contract_1.action)(issueTokens, {
|
|
293
|
+
schema: issueTokensSchema,
|
|
294
|
+
trigger: 'custom_json'
|
|
295
|
+
}),
|
|
296
|
+
transferTokens: (0, contract_1.action)(transferTokens, {
|
|
297
|
+
schema: transferTokensSchema,
|
|
298
|
+
trigger: 'custom_json'
|
|
299
|
+
}),
|
|
300
|
+
getBalance: (0, contract_1.action)(getBalance, {
|
|
301
|
+
schema: getBalanceSchema,
|
|
302
|
+
trigger: 'custom_json'
|
|
303
|
+
}),
|
|
304
|
+
getTokenInfo: (0, contract_1.action)(getTokenInfo, {
|
|
305
|
+
schema: getTokenInfoSchema,
|
|
306
|
+
trigger: 'custom_json'
|
|
307
|
+
})
|
|
308
|
+
}
|
|
309
|
+
});
|
|
261
310
|
}
|
|
262
|
-
exports.TokenContract = TokenContract;
|
|
263
311
|
//# sourceMappingURL=token.contract.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token.contract.js","sourceRoot":"","sources":["../../src/contracts/token.contract.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"token.contract.js","sourceRoot":"","sources":["../../src/contracts/token.contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import { Exchange } from './exchange';
|
|
2
|
+
import { RateConfig } from '../types/rates';
|
|
2
3
|
export declare class CoinGeckoExchange extends Exchange {
|
|
3
|
-
exchangeId
|
|
4
|
+
readonly exchangeId = "coingecko";
|
|
5
|
+
private static readonly API_BASE;
|
|
6
|
+
private static readonly ENDPOINT;
|
|
7
|
+
constructor(config?: RateConfig);
|
|
4
8
|
fetchRates(): Promise<boolean>;
|
|
9
|
+
private parseRatesResponse;
|
|
10
|
+
private validateRates;
|
|
5
11
|
}
|
|
@@ -2,37 +2,54 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.CoinGeckoExchange = void 0;
|
|
4
4
|
const exchange_1 = require("./exchange");
|
|
5
|
+
const rates_1 = require("../types/rates");
|
|
5
6
|
class CoinGeckoExchange extends exchange_1.Exchange {
|
|
6
7
|
exchangeId = 'coingecko';
|
|
8
|
+
static API_BASE = 'https://api.coingecko.com/api/v3';
|
|
9
|
+
static ENDPOINT = '/simple/price?ids=hive,hive_dollar&vs_currencies=usd';
|
|
10
|
+
constructor(config) {
|
|
11
|
+
super(config);
|
|
12
|
+
}
|
|
7
13
|
async fetchRates() {
|
|
8
14
|
try {
|
|
9
|
-
|
|
10
|
-
const
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
return false;
|
|
15
|
-
}
|
|
16
|
-
const response = await request.json();
|
|
17
|
-
// Extract USD rates for HIVE and HBD
|
|
18
|
-
const usdHiveRate = response?.hive?.usd;
|
|
19
|
-
const usdHbdRate = response?.hive_dollar?.usd;
|
|
20
|
-
if (typeof usdHiveRate !== 'number' || typeof usdHbdRate !== 'number') {
|
|
21
|
-
console.warn('Invalid response format from CoinGecko API');
|
|
22
|
-
return false;
|
|
23
|
-
}
|
|
24
|
-
if (isNaN(usdHiveRate) || isNaN(usdHbdRate)) {
|
|
25
|
-
console.warn('Received NaN values from CoinGecko API');
|
|
26
|
-
return false;
|
|
27
|
-
}
|
|
15
|
+
const url = `${CoinGeckoExchange.API_BASE}${CoinGeckoExchange.ENDPOINT}`;
|
|
16
|
+
const response = await this.fetchWithTimeout(url);
|
|
17
|
+
const data = await response.json();
|
|
18
|
+
const { usdHiveRate, usdHbdRate } = this.parseRatesResponse(data);
|
|
19
|
+
this.validateRates(usdHiveRate, usdHbdRate);
|
|
28
20
|
this.rateUsdHive = usdHiveRate;
|
|
29
21
|
this.rateUsdHbd = usdHbdRate;
|
|
30
22
|
console.log(`CoinGecko rates updated: HIVE=$${usdHiveRate.toFixed(6)}, HBD=$${usdHbdRate.toFixed(6)}`);
|
|
31
23
|
return true;
|
|
32
24
|
}
|
|
33
25
|
catch (error) {
|
|
34
|
-
|
|
35
|
-
|
|
26
|
+
if (error instanceof rates_1.ValidationError || error instanceof rates_1.NetworkError) {
|
|
27
|
+
throw error;
|
|
28
|
+
}
|
|
29
|
+
throw new rates_1.NetworkError(`Unexpected error fetching rates: ${error instanceof Error ? error.message : String(error)}`, this.exchangeId);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
parseRatesResponse(data) {
|
|
33
|
+
if (!data || typeof data !== 'object') {
|
|
34
|
+
throw new rates_1.ValidationError('Invalid response format: expected object', this.exchangeId);
|
|
35
|
+
}
|
|
36
|
+
const usdHiveRate = data.hive?.usd;
|
|
37
|
+
const usdHbdRate = data.hive_dollar?.usd;
|
|
38
|
+
if (typeof usdHiveRate !== 'number' || typeof usdHbdRate !== 'number') {
|
|
39
|
+
throw new rates_1.ValidationError('Invalid response format: missing or invalid rate data', this.exchangeId);
|
|
40
|
+
}
|
|
41
|
+
return { usdHiveRate, usdHbdRate };
|
|
42
|
+
}
|
|
43
|
+
validateRates(hiveRate, hbdRate) {
|
|
44
|
+
if (isNaN(hiveRate) || isNaN(hbdRate)) {
|
|
45
|
+
throw new rates_1.ValidationError('Received NaN values from API', this.exchangeId);
|
|
46
|
+
}
|
|
47
|
+
if (hiveRate <= 0 || hbdRate <= 0) {
|
|
48
|
+
throw new rates_1.ValidationError('Received non-positive rate values', this.exchangeId);
|
|
49
|
+
}
|
|
50
|
+
// Sanity check: HIVE and HBD should be reasonable values (between $0.01 and $1000)
|
|
51
|
+
if (hiveRate < 0.01 || hiveRate > 1000 || hbdRate < 0.01 || hbdRate > 1000) {
|
|
52
|
+
throw new rates_1.ValidationError(`Rates outside expected range: HIVE=${hiveRate}, HBD=${hbdRate}`, this.exchangeId);
|
|
36
53
|
}
|
|
37
54
|
}
|
|
38
55
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coingecko.js","sourceRoot":"","sources":["../../src/exchanges/coingecko.ts"],"names":[],"mappings":";;;AAAA,yCAAsC;
|
|
1
|
+
{"version":3,"file":"coingecko.js","sourceRoot":"","sources":["../../src/exchanges/coingecko.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
rateUsdHive
|
|
5
|
-
rateUsdHbd
|
|
6
|
-
private lastFetch
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
import { ExchangeInterface, RateConfig } from '../types/rates';
|
|
2
|
+
export declare abstract class Exchange implements ExchangeInterface {
|
|
3
|
+
abstract readonly exchangeId: string;
|
|
4
|
+
rateUsdHive?: number;
|
|
5
|
+
rateUsdHbd?: number;
|
|
6
|
+
private lastFetch?;
|
|
7
|
+
private readonly config;
|
|
8
|
+
constructor(config?: RateConfig);
|
|
9
|
+
updateRates(): Promise<boolean>;
|
|
10
|
+
abstract fetchRates(): Promise<boolean>;
|
|
11
|
+
private fetchRatesWithRetry;
|
|
12
|
+
protected fetchWithTimeout(url: string): Promise<Response>;
|
|
13
|
+
private delay;
|
|
14
|
+
getLastFetchTime(): number | undefined;
|
|
15
|
+
isCacheValid(): boolean;
|
|
9
16
|
}
|
|
@@ -1,26 +1,80 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Exchange = void 0;
|
|
4
|
+
const rates_1 = require("../types/rates");
|
|
4
5
|
class Exchange {
|
|
5
|
-
exchangeId;
|
|
6
|
-
oneHour = 1000 * 60 * 60;
|
|
7
6
|
rateUsdHive;
|
|
8
7
|
rateUsdHbd;
|
|
9
8
|
lastFetch;
|
|
9
|
+
config;
|
|
10
|
+
constructor(config = {}) {
|
|
11
|
+
this.config = {
|
|
12
|
+
cacheDuration: config.cacheDuration ?? 60 * 60 * 1000, // 1 hour
|
|
13
|
+
maxRetries: config.maxRetries ?? 3,
|
|
14
|
+
retryDelay: config.retryDelay ?? 1000, // 1 second
|
|
15
|
+
timeout: config.timeout ?? 10000, // 10 seconds
|
|
16
|
+
};
|
|
17
|
+
}
|
|
10
18
|
async updateRates() {
|
|
11
|
-
const
|
|
12
|
-
//
|
|
13
|
-
if (this.lastFetch && this.lastFetch >
|
|
14
|
-
return false;
|
|
19
|
+
const cacheExpiry = Date.now() - this.config.cacheDuration;
|
|
20
|
+
// Return cached data if still valid
|
|
21
|
+
if (this.lastFetch && this.lastFetch > cacheExpiry) {
|
|
22
|
+
return false; // No update needed
|
|
15
23
|
}
|
|
16
|
-
const
|
|
17
|
-
if (
|
|
24
|
+
const success = await this.fetchRatesWithRetry();
|
|
25
|
+
if (success) {
|
|
18
26
|
this.lastFetch = Date.now();
|
|
19
27
|
}
|
|
20
|
-
return
|
|
28
|
+
return success;
|
|
29
|
+
}
|
|
30
|
+
async fetchRatesWithRetry() {
|
|
31
|
+
let lastError = null;
|
|
32
|
+
for (let attempt = 1; attempt <= this.config.maxRetries; attempt++) {
|
|
33
|
+
try {
|
|
34
|
+
const success = await this.fetchRates();
|
|
35
|
+
if (success) {
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
lastError = error instanceof Error ? error : new Error(String(error));
|
|
41
|
+
if (attempt < this.config.maxRetries) {
|
|
42
|
+
await this.delay(this.config.retryDelay * attempt);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
throw new rates_1.NetworkError(`Failed to fetch rates after ${this.config.maxRetries} attempts: ${lastError?.message}`, this.exchangeId);
|
|
47
|
+
}
|
|
48
|
+
async fetchWithTimeout(url) {
|
|
49
|
+
const controller = new AbortController();
|
|
50
|
+
const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);
|
|
51
|
+
try {
|
|
52
|
+
const response = await fetch(url, {
|
|
53
|
+
signal: controller.signal,
|
|
54
|
+
headers: {
|
|
55
|
+
'User-Agent': 'hive-stream/3.0.0',
|
|
56
|
+
'Accept': 'application/json',
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
if (!response.ok) {
|
|
60
|
+
throw new rates_1.NetworkError(`HTTP ${response.status}: ${response.statusText}`, this.exchangeId);
|
|
61
|
+
}
|
|
62
|
+
return response;
|
|
63
|
+
}
|
|
64
|
+
finally {
|
|
65
|
+
clearTimeout(timeoutId);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
delay(ms) {
|
|
69
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
21
70
|
}
|
|
22
|
-
|
|
23
|
-
return
|
|
71
|
+
getLastFetchTime() {
|
|
72
|
+
return this.lastFetch;
|
|
73
|
+
}
|
|
74
|
+
isCacheValid() {
|
|
75
|
+
if (!this.lastFetch)
|
|
76
|
+
return false;
|
|
77
|
+
return this.lastFetch > (Date.now() - this.config.cacheDuration);
|
|
24
78
|
}
|
|
25
79
|
}
|
|
26
80
|
exports.Exchange = Exchange;
|