hive-stream 3.0.2 → 3.0.4
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/DOCUMENTATION.md +50 -2
- package/README.md +282 -4
- package/dist/adapters/base.adapter.d.ts +5 -0
- package/dist/adapters/base.adapter.js +9 -0
- package/dist/adapters/base.adapter.js.map +1 -1
- package/dist/adapters/mongodb.adapter.d.ts +6 -6
- package/dist/adapters/mongodb.adapter.js +36 -21
- package/dist/adapters/mongodb.adapter.js.map +1 -1
- package/dist/adapters/postgresql.adapter.d.ts +7 -0
- package/dist/adapters/postgresql.adapter.js +46 -19
- package/dist/adapters/postgresql.adapter.js.map +1 -1
- package/dist/adapters/sqlite.adapter.d.ts +4 -0
- package/dist/adapters/sqlite.adapter.js +10 -0
- package/dist/adapters/sqlite.adapter.js.map +1 -1
- package/dist/api.d.ts +13 -3
- package/dist/api.js +96 -62
- package/dist/api.js.map +1 -1
- package/dist/builders.d.ts +176 -0
- package/dist/builders.js +727 -0
- package/dist/builders.js.map +1 -0
- package/dist/config.d.ts +16 -1
- package/dist/config.js +95 -3
- package/dist/config.js.map +1 -1
- package/dist/contracts/auctionhouse.contract.d.ts +4 -0
- package/dist/contracts/auctionhouse.contract.js +234 -0
- package/dist/contracts/auctionhouse.contract.js.map +1 -0
- package/dist/contracts/booking.contract.d.ts +4 -0
- package/dist/contracts/booking.contract.js +225 -0
- package/dist/contracts/booking.contract.js.map +1 -0
- package/dist/contracts/bountyboard.contract.d.ts +4 -0
- package/dist/contracts/bountyboard.contract.js +233 -0
- package/dist/contracts/bountyboard.contract.js.map +1 -0
- package/dist/contracts/bundlemarketplace.contract.d.ts +4 -0
- package/dist/contracts/bundlemarketplace.contract.js +195 -0
- package/dist/contracts/bundlemarketplace.contract.js.map +1 -0
- package/dist/contracts/charitymatch.contract.d.ts +4 -0
- package/dist/contracts/charitymatch.contract.js +172 -0
- package/dist/contracts/charitymatch.contract.js.map +1 -0
- package/dist/contracts/coinflip.contract.js +25 -22
- package/dist/contracts/coinflip.contract.js.map +1 -1
- package/dist/contracts/crowdfund.contract.d.ts +4 -0
- package/dist/contracts/crowdfund.contract.js +290 -0
- package/dist/contracts/crowdfund.contract.js.map +1 -0
- package/dist/contracts/dcabot.contract.d.ts +4 -0
- package/dist/contracts/dcabot.contract.js +217 -0
- package/dist/contracts/dcabot.contract.js.map +1 -0
- package/dist/contracts/dice.contract.js +25 -22
- package/dist/contracts/dice.contract.js.map +1 -1
- package/dist/contracts/domainregistry.contract.d.ts +4 -0
- package/dist/contracts/domainregistry.contract.js +232 -0
- package/dist/contracts/domainregistry.contract.js.map +1 -0
- package/dist/contracts/exchange.contract.js +209 -168
- package/dist/contracts/exchange.contract.js.map +1 -1
- package/dist/contracts/fanclub.contract.d.ts +4 -0
- package/dist/contracts/fanclub.contract.js +193 -0
- package/dist/contracts/fanclub.contract.js.map +1 -0
- package/dist/contracts/giftcard.contract.d.ts +4 -0
- package/dist/contracts/giftcard.contract.js +158 -0
- package/dist/contracts/giftcard.contract.js.map +1 -0
- package/dist/contracts/grantrounds.contract.d.ts +4 -0
- package/dist/contracts/grantrounds.contract.js +265 -0
- package/dist/contracts/grantrounds.contract.js.map +1 -0
- package/dist/contracts/groupbuy.contract.d.ts +4 -0
- package/dist/contracts/groupbuy.contract.js +198 -0
- package/dist/contracts/groupbuy.contract.js.map +1 -0
- package/dist/contracts/helpers.d.ts +66 -0
- package/dist/contracts/helpers.js +166 -0
- package/dist/contracts/helpers.js.map +1 -0
- package/dist/contracts/insurancepool.contract.d.ts +4 -0
- package/dist/contracts/insurancepool.contract.js +281 -0
- package/dist/contracts/insurancepool.contract.js.map +1 -0
- package/dist/contracts/invoice.contract.d.ts +4 -0
- package/dist/contracts/invoice.contract.js +193 -0
- package/dist/contracts/invoice.contract.js.map +1 -0
- package/dist/contracts/launchpad.contract.d.ts +4 -0
- package/dist/contracts/launchpad.contract.js +225 -0
- package/dist/contracts/launchpad.contract.js.map +1 -0
- package/dist/contracts/lotto.contract.js +53 -37
- package/dist/contracts/lotto.contract.js.map +1 -1
- package/dist/contracts/multisigtreasury.contract.d.ts +4 -0
- package/dist/contracts/multisigtreasury.contract.js +245 -0
- package/dist/contracts/multisigtreasury.contract.js.map +1 -0
- package/dist/contracts/nft.contract.d.ts +1 -0
- package/dist/contracts/nft.contract.js +234 -195
- package/dist/contracts/nft.contract.js.map +1 -1
- package/dist/contracts/oraclebounty.contract.d.ts +4 -0
- package/dist/contracts/oraclebounty.contract.js +250 -0
- package/dist/contracts/oraclebounty.contract.js.map +1 -0
- package/dist/contracts/payroll.contract.d.ts +4 -0
- package/dist/contracts/payroll.contract.js +232 -0
- package/dist/contracts/payroll.contract.js.map +1 -0
- package/dist/contracts/paywall.contract.d.ts +4 -0
- package/dist/contracts/paywall.contract.js +185 -0
- package/dist/contracts/paywall.contract.js.map +1 -0
- package/dist/contracts/poll.contract.js +2 -0
- package/dist/contracts/poll.contract.js.map +1 -1
- package/dist/contracts/predictionmarket.contract.d.ts +4 -0
- package/dist/contracts/predictionmarket.contract.js +213 -0
- package/dist/contracts/predictionmarket.contract.js.map +1 -0
- package/dist/contracts/proposaltimelock.contract.d.ts +4 -0
- package/dist/contracts/proposaltimelock.contract.js +250 -0
- package/dist/contracts/proposaltimelock.contract.js.map +1 -0
- package/dist/contracts/questpass.contract.d.ts +4 -0
- package/dist/contracts/questpass.contract.js +214 -0
- package/dist/contracts/questpass.contract.js.map +1 -0
- package/dist/contracts/referral.contract.d.ts +4 -0
- package/dist/contracts/referral.contract.js +238 -0
- package/dist/contracts/referral.contract.js.map +1 -0
- package/dist/contracts/rental.contract.d.ts +4 -0
- package/dist/contracts/rental.contract.js +221 -0
- package/dist/contracts/rental.contract.js.map +1 -0
- package/dist/contracts/revenuesplit.contract.d.ts +4 -0
- package/dist/contracts/revenuesplit.contract.js +211 -0
- package/dist/contracts/revenuesplit.contract.js.map +1 -0
- package/dist/contracts/rps.contract.js +48 -20
- package/dist/contracts/rps.contract.js.map +1 -1
- package/dist/contracts/savings.contract.d.ts +4 -0
- package/dist/contracts/savings.contract.js +208 -0
- package/dist/contracts/savings.contract.js.map +1 -0
- package/dist/contracts/subscription.contract.d.ts +4 -0
- package/dist/contracts/subscription.contract.js +241 -0
- package/dist/contracts/subscription.contract.js.map +1 -0
- package/dist/contracts/sweepstakes.contract.d.ts +4 -0
- package/dist/contracts/sweepstakes.contract.js +209 -0
- package/dist/contracts/sweepstakes.contract.js.map +1 -0
- package/dist/contracts/ticketing.contract.d.ts +4 -0
- package/dist/contracts/ticketing.contract.js +185 -0
- package/dist/contracts/ticketing.contract.js.map +1 -0
- package/dist/contracts/tipjar.contract.js +2 -0
- package/dist/contracts/tipjar.contract.js.map +1 -1
- package/dist/contracts/token.contract.js +135 -125
- package/dist/contracts/token.contract.js.map +1 -1
- package/dist/index.d.ts +40 -0
- package/dist/index.js +72 -1
- package/dist/index.js.map +1 -1
- package/dist/metadata.d.ts +20 -0
- package/dist/metadata.js +320 -1
- package/dist/metadata.js.map +1 -1
- package/dist/providers/block-provider.d.ts +22 -0
- package/dist/providers/block-provider.js +3 -0
- package/dist/providers/block-provider.js.map +1 -0
- package/dist/providers/haf-client.d.ts +30 -0
- package/dist/providers/haf-client.js +119 -0
- package/dist/providers/haf-client.js.map +1 -0
- package/dist/providers/haf-provider.d.ts +49 -0
- package/dist/providers/haf-provider.js +256 -0
- package/dist/providers/haf-provider.js.map +1 -0
- package/dist/providers/hive-provider.d.ts +13 -0
- package/dist/providers/hive-provider.js +25 -0
- package/dist/providers/hive-provider.js.map +1 -0
- package/dist/providers/index.d.ts +4 -0
- package/dist/providers/index.js +21 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/streamer.d.ts +65 -4
- package/dist/streamer.js +768 -72
- package/dist/streamer.js.map +1 -1
- package/dist/types/hive-stream.d.ts +317 -0
- package/dist/utils.d.ts +33 -0
- package/dist/utils.js +198 -2
- package/dist/utils.js.map +1 -1
- package/package.json +16 -1
- package/.claude/settings.local.json +0 -12
- package/.env.example +0 -3
- package/.travis.yml +0 -11
- package/AGENTS.md +0 -35
- package/CLAUDE.md +0 -75
- package/ecosystem.config.js +0 -17
- package/examples/contracts/README.md +0 -8
- package/examples/contracts/exchange.ts +0 -38
- package/examples/contracts/poll.ts +0 -21
- package/examples/contracts/rps.ts +0 -19
- package/examples/contracts/tipjar.ts +0 -19
- package/jest.config.js +0 -9
- package/test-contract-block.md +0 -19
- package/tests/actions.spec.ts +0 -252
- package/tests/adapters/actions-persistence.spec.ts +0 -144
- package/tests/adapters/postgresql.adapter.spec.ts +0 -127
- package/tests/adapters/sqlite.adapter.spec.ts +0 -181
- package/tests/config-input.spec.ts +0 -90
- package/tests/contracts/coinflip.contract.spec.ts +0 -94
- package/tests/contracts/dice.contract.spec.ts +0 -87
- package/tests/contracts/entrants.json +0 -729
- package/tests/contracts/exchange.contract.spec.ts +0 -84
- package/tests/contracts/lotto.contract.spec.ts +0 -59
- package/tests/contracts/nft.contract.spec.ts +0 -948
- package/tests/contracts/token.contract.spec.ts +0 -90
- package/tests/exchanges/coingecko.exchange.spec.ts +0 -169
- package/tests/exchanges/exchange.base.spec.ts +0 -246
- package/tests/helpers/mock-adapter.ts +0 -214
- package/tests/helpers/mock-fetch.ts +0 -165
- package/tests/hive-chain-features.spec.ts +0 -319
- package/tests/hive-rates.spec.ts +0 -443
- package/tests/integration/hive-rates.integration.spec.ts +0 -35
- package/tests/metadata.spec.ts +0 -63
- package/tests/setup.ts +0 -30
- package/tests/streamer-actions.spec.ts +0 -274
- package/tests/streamer.spec.ts +0 -342
- package/tests/types/rates.spec.ts +0 -216
- package/tests/utils.spec.ts +0 -113
- package/tsconfig.build.json +0 -4
- package/tslint.json +0 -21
- package/wallaby.js +0 -26
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createBundleMarketplaceContract = createBundleMarketplaceContract;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const contract_1 = require("./contract");
|
|
6
|
+
const helpers_1 = require("./helpers");
|
|
7
|
+
const DEFAULT_NAME = 'bundlemarketplace';
|
|
8
|
+
function createBundleMarketplaceContract(options = {}) {
|
|
9
|
+
const name = options.name || DEFAULT_NAME;
|
|
10
|
+
const state = (0, helpers_1.createContractState)();
|
|
11
|
+
const createBundleSchema = zod_1.z.object({
|
|
12
|
+
bundleId: helpers_1.identifierSchema,
|
|
13
|
+
title: zod_1.z.string().min(3).max(140),
|
|
14
|
+
price: helpers_1.amountSchema,
|
|
15
|
+
asset: helpers_1.assetSchema,
|
|
16
|
+
items: zod_1.z.array(zod_1.z.string().min(1).max(140)).min(1).max(25),
|
|
17
|
+
inventory: zod_1.z.number().int().min(1).max(1000000).optional(),
|
|
18
|
+
metadata: zod_1.z.record(zod_1.z.any()).optional()
|
|
19
|
+
});
|
|
20
|
+
const idSchema = zod_1.z.object({
|
|
21
|
+
bundleId: helpers_1.identifierSchema
|
|
22
|
+
});
|
|
23
|
+
const updateSchema = zod_1.z.object({
|
|
24
|
+
bundleId: helpers_1.identifierSchema,
|
|
25
|
+
title: zod_1.z.string().min(3).max(140).optional(),
|
|
26
|
+
price: helpers_1.amountSchema.optional(),
|
|
27
|
+
inventory: zod_1.z.number().int().min(0).max(1000000).optional(),
|
|
28
|
+
active: zod_1.z.boolean().optional(),
|
|
29
|
+
metadata: zod_1.z.record(zod_1.z.any()).optional()
|
|
30
|
+
});
|
|
31
|
+
const fulfillSchema = zod_1.z.object({
|
|
32
|
+
purchaseId: zod_1.z.number().int().min(1),
|
|
33
|
+
notes: zod_1.z.string().max(280).optional()
|
|
34
|
+
});
|
|
35
|
+
const initialize = async () => {
|
|
36
|
+
await (0, helpers_1.initializeTables)(state.adapter, [
|
|
37
|
+
`
|
|
38
|
+
CREATE TABLE IF NOT EXISTS bundle_marketplace_bundles (
|
|
39
|
+
bundle_id TEXT PRIMARY KEY,
|
|
40
|
+
owner TEXT NOT NULL,
|
|
41
|
+
title TEXT NOT NULL,
|
|
42
|
+
price TEXT NOT NULL,
|
|
43
|
+
asset TEXT NOT NULL,
|
|
44
|
+
items_json TEXT NOT NULL,
|
|
45
|
+
inventory INTEGER,
|
|
46
|
+
sold_count INTEGER NOT NULL,
|
|
47
|
+
active INTEGER NOT NULL,
|
|
48
|
+
metadata TEXT,
|
|
49
|
+
created_at DATETIME NOT NULL,
|
|
50
|
+
updated_at DATETIME NOT NULL
|
|
51
|
+
)
|
|
52
|
+
`,
|
|
53
|
+
`
|
|
54
|
+
CREATE TABLE IF NOT EXISTS bundle_marketplace_purchases (
|
|
55
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
56
|
+
bundle_id TEXT NOT NULL,
|
|
57
|
+
buyer TEXT NOT NULL,
|
|
58
|
+
amount_paid TEXT NOT NULL,
|
|
59
|
+
asset TEXT NOT NULL,
|
|
60
|
+
status TEXT NOT NULL,
|
|
61
|
+
notes TEXT,
|
|
62
|
+
created_at DATETIME NOT NULL,
|
|
63
|
+
updated_at DATETIME NOT NULL
|
|
64
|
+
)
|
|
65
|
+
`
|
|
66
|
+
]);
|
|
67
|
+
};
|
|
68
|
+
const createBundle = async (payload, ctx) => {
|
|
69
|
+
const owner = (0, helpers_1.requireSender)(ctx);
|
|
70
|
+
const existing = await state.adapter.query('SELECT bundle_id FROM bundle_marketplace_bundles WHERE bundle_id = ?', [payload.bundleId]);
|
|
71
|
+
if (existing.length > 0) {
|
|
72
|
+
throw new Error(`Bundle ${payload.bundleId} already exists`);
|
|
73
|
+
}
|
|
74
|
+
await state.adapter.query(`INSERT INTO bundle_marketplace_bundles (
|
|
75
|
+
bundle_id, owner, title, price, asset, items_json, inventory, sold_count, active, metadata, created_at, updated_at
|
|
76
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
|
|
77
|
+
payload.bundleId,
|
|
78
|
+
owner,
|
|
79
|
+
payload.title,
|
|
80
|
+
payload.price,
|
|
81
|
+
payload.asset,
|
|
82
|
+
JSON.stringify(payload.items),
|
|
83
|
+
payload.inventory || null,
|
|
84
|
+
0,
|
|
85
|
+
1,
|
|
86
|
+
JSON.stringify(payload.metadata || {}),
|
|
87
|
+
new Date(),
|
|
88
|
+
new Date()
|
|
89
|
+
]);
|
|
90
|
+
await (0, helpers_1.emitContractEvent)(state.adapter, name, 'createBundle', payload, {
|
|
91
|
+
action: 'bundle_created',
|
|
92
|
+
data: {
|
|
93
|
+
bundleId: payload.bundleId,
|
|
94
|
+
owner
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
};
|
|
98
|
+
const updateBundle = async (payload, ctx) => {
|
|
99
|
+
const owner = (0, helpers_1.requireSender)(ctx);
|
|
100
|
+
const rows = await state.adapter.query('SELECT * FROM bundle_marketplace_bundles WHERE bundle_id = ?', [payload.bundleId]);
|
|
101
|
+
if (rows.length === 0) {
|
|
102
|
+
throw new Error(`Bundle ${payload.bundleId} does not exist`);
|
|
103
|
+
}
|
|
104
|
+
const bundle = rows[0];
|
|
105
|
+
if (bundle.owner !== owner) {
|
|
106
|
+
throw new Error('Only the bundle owner can update the bundle');
|
|
107
|
+
}
|
|
108
|
+
await state.adapter.query(`UPDATE bundle_marketplace_bundles
|
|
109
|
+
SET title = ?, price = ?, inventory = ?, active = ?, metadata = ?, updated_at = ?
|
|
110
|
+
WHERE bundle_id = ?`, [
|
|
111
|
+
payload.title || bundle.title,
|
|
112
|
+
payload.price || bundle.price,
|
|
113
|
+
typeof payload.inventory === 'number' ? payload.inventory : bundle.inventory,
|
|
114
|
+
typeof payload.active === 'boolean' ? (payload.active ? 1 : 0) : bundle.active,
|
|
115
|
+
JSON.stringify(payload.metadata || (0, helpers_1.parseJson)(bundle.metadata, {})),
|
|
116
|
+
new Date(),
|
|
117
|
+
payload.bundleId
|
|
118
|
+
]);
|
|
119
|
+
await (0, helpers_1.emitContractEvent)(state.adapter, name, 'updateBundle', payload, {
|
|
120
|
+
action: 'bundle_updated',
|
|
121
|
+
data: {
|
|
122
|
+
bundleId: payload.bundleId,
|
|
123
|
+
owner
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
};
|
|
127
|
+
const buyBundle = async (payload, ctx) => {
|
|
128
|
+
const buyer = (0, helpers_1.requireSender)(ctx);
|
|
129
|
+
const payment = (0, helpers_1.getIncomingPayment)(ctx);
|
|
130
|
+
const rows = await state.adapter.query('SELECT * FROM bundle_marketplace_bundles WHERE bundle_id = ?', [payload.bundleId]);
|
|
131
|
+
if (rows.length === 0) {
|
|
132
|
+
throw new Error(`Bundle ${payload.bundleId} does not exist`);
|
|
133
|
+
}
|
|
134
|
+
const bundle = rows[0];
|
|
135
|
+
if (!bundle.active) {
|
|
136
|
+
throw new Error('Bundle is not active');
|
|
137
|
+
}
|
|
138
|
+
(0, helpers_1.assertAssetMatches)(payment.asset, bundle.asset);
|
|
139
|
+
if (!(0, helpers_1.toBigNumber)(payment.amount).eq(bundle.price)) {
|
|
140
|
+
throw new Error(`Bundle price is ${bundle.price} ${bundle.asset}`);
|
|
141
|
+
}
|
|
142
|
+
if (bundle.inventory !== null && Number(bundle.inventory) <= 0) {
|
|
143
|
+
throw new Error('Bundle is out of stock');
|
|
144
|
+
}
|
|
145
|
+
await state.adapter.query('INSERT INTO bundle_marketplace_purchases (bundle_id, buyer, amount_paid, asset, status, notes, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)', [payload.bundleId, buyer, payment.amount, payment.asset, 'paid', '', new Date(), new Date()]);
|
|
146
|
+
const nextInventory = bundle.inventory === null ? null : Number(bundle.inventory) - 1;
|
|
147
|
+
await state.adapter.query('UPDATE bundle_marketplace_bundles SET inventory = ?, sold_count = ?, updated_at = ? WHERE bundle_id = ?', [nextInventory, Number(bundle.sold_count) + 1, new Date(), payload.bundleId]);
|
|
148
|
+
await (0, helpers_1.emitContractEvent)(state.adapter, name, 'buyBundle', payload, {
|
|
149
|
+
action: 'bundle_purchased',
|
|
150
|
+
data: {
|
|
151
|
+
bundleId: payload.bundleId,
|
|
152
|
+
buyer,
|
|
153
|
+
items: (0, helpers_1.parseJson)(bundle.items_json, [])
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
};
|
|
157
|
+
const fulfillPurchase = async (payload, ctx) => {
|
|
158
|
+
const owner = (0, helpers_1.requireSender)(ctx);
|
|
159
|
+
const purchaseRows = await state.adapter.query('SELECT * FROM bundle_marketplace_purchases WHERE id = ?', [payload.purchaseId]);
|
|
160
|
+
if (purchaseRows.length === 0) {
|
|
161
|
+
throw new Error(`Purchase ${payload.purchaseId} does not exist`);
|
|
162
|
+
}
|
|
163
|
+
const purchase = purchaseRows[0];
|
|
164
|
+
const bundleRows = await state.adapter.query('SELECT * FROM bundle_marketplace_bundles WHERE bundle_id = ?', [purchase.bundle_id]);
|
|
165
|
+
const bundle = bundleRows[0];
|
|
166
|
+
if (bundle.owner !== owner) {
|
|
167
|
+
throw new Error('Only the bundle owner can fulfill purchases');
|
|
168
|
+
}
|
|
169
|
+
await state.adapter.query('UPDATE bundle_marketplace_purchases SET status = ?, notes = ?, updated_at = ? WHERE id = ?', ['fulfilled', payload.notes || '', new Date(), payload.purchaseId]);
|
|
170
|
+
await (0, helpers_1.emitContractEvent)(state.adapter, name, 'fulfillPurchase', payload, {
|
|
171
|
+
action: 'bundle_purchase_fulfilled',
|
|
172
|
+
data: {
|
|
173
|
+
purchaseId: payload.purchaseId,
|
|
174
|
+
bundleId: purchase.bundle_id,
|
|
175
|
+
buyer: purchase.buyer
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
};
|
|
179
|
+
return (0, contract_1.defineContract)({
|
|
180
|
+
name,
|
|
181
|
+
hooks: {
|
|
182
|
+
create: async ({ adapter }) => {
|
|
183
|
+
state.adapter = adapter;
|
|
184
|
+
await initialize();
|
|
185
|
+
}
|
|
186
|
+
},
|
|
187
|
+
actions: {
|
|
188
|
+
createBundle: (0, contract_1.action)(createBundle, { schema: createBundleSchema, trigger: 'custom_json' }),
|
|
189
|
+
updateBundle: (0, contract_1.action)(updateBundle, { schema: updateSchema, trigger: 'custom_json' }),
|
|
190
|
+
buyBundle: (0, contract_1.action)(buyBundle, { schema: idSchema, trigger: ['transfer', 'recurrent_transfer'] }),
|
|
191
|
+
fulfillPurchase: (0, contract_1.action)(fulfillPurchase, { schema: fulfillSchema, trigger: 'custom_json' })
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=bundlemarketplace.contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundlemarketplace.contract.js","sourceRoot":"","sources":["../../src/contracts/bundlemarketplace.contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createCharityMatchContract = createCharityMatchContract;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const contract_1 = require("./contract");
|
|
6
|
+
const helpers_1 = require("./helpers");
|
|
7
|
+
const DEFAULT_NAME = 'charitymatch';
|
|
8
|
+
function createCharityMatchContract(options = {}) {
|
|
9
|
+
const name = options.name || DEFAULT_NAME;
|
|
10
|
+
const state = (0, helpers_1.createContractState)();
|
|
11
|
+
const createCampaignSchema = zod_1.z.object({
|
|
12
|
+
campaignId: helpers_1.identifierSchema,
|
|
13
|
+
title: zod_1.z.string().min(3).max(140),
|
|
14
|
+
beneficiary: zod_1.z.string().min(3).max(32),
|
|
15
|
+
asset: helpers_1.assetSchema,
|
|
16
|
+
matchCap: helpers_1.amountSchema,
|
|
17
|
+
matchBps: zod_1.z.number().int().min(0).max(100000),
|
|
18
|
+
closesAt: zod_1.z.string(),
|
|
19
|
+
metadata: zod_1.z.record(zod_1.z.any()).optional()
|
|
20
|
+
});
|
|
21
|
+
const campaignIdSchema = zod_1.z.object({
|
|
22
|
+
campaignId: helpers_1.identifierSchema
|
|
23
|
+
});
|
|
24
|
+
const initialize = async () => {
|
|
25
|
+
await (0, helpers_1.initializeTables)(state.adapter, [
|
|
26
|
+
`
|
|
27
|
+
CREATE TABLE IF NOT EXISTS charity_match_campaigns (
|
|
28
|
+
campaign_id TEXT PRIMARY KEY,
|
|
29
|
+
sponsor TEXT NOT NULL,
|
|
30
|
+
title TEXT NOT NULL,
|
|
31
|
+
beneficiary TEXT NOT NULL,
|
|
32
|
+
asset TEXT NOT NULL,
|
|
33
|
+
match_cap TEXT NOT NULL,
|
|
34
|
+
match_bps INTEGER NOT NULL,
|
|
35
|
+
total_donations TEXT NOT NULL,
|
|
36
|
+
matched_total TEXT NOT NULL,
|
|
37
|
+
status TEXT NOT NULL,
|
|
38
|
+
closes_at DATETIME NOT NULL,
|
|
39
|
+
metadata TEXT,
|
|
40
|
+
created_at DATETIME NOT NULL,
|
|
41
|
+
closed_at DATETIME
|
|
42
|
+
)
|
|
43
|
+
`,
|
|
44
|
+
`
|
|
45
|
+
CREATE TABLE IF NOT EXISTS charity_match_donations (
|
|
46
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
47
|
+
campaign_id TEXT NOT NULL,
|
|
48
|
+
donor TEXT NOT NULL,
|
|
49
|
+
amount TEXT NOT NULL,
|
|
50
|
+
asset TEXT NOT NULL,
|
|
51
|
+
created_at DATETIME NOT NULL
|
|
52
|
+
)
|
|
53
|
+
`
|
|
54
|
+
]);
|
|
55
|
+
};
|
|
56
|
+
const createCampaign = async (payload, ctx) => {
|
|
57
|
+
const sponsor = (0, helpers_1.requireSender)(ctx);
|
|
58
|
+
const existing = await state.adapter.query('SELECT campaign_id FROM charity_match_campaigns WHERE campaign_id = ?', [payload.campaignId]);
|
|
59
|
+
if (existing.length > 0) {
|
|
60
|
+
throw new Error(`Campaign ${payload.campaignId} already exists`);
|
|
61
|
+
}
|
|
62
|
+
const closesAt = (0, helpers_1.parseDateValue)(payload.closesAt);
|
|
63
|
+
if (!closesAt || closesAt <= new Date()) {
|
|
64
|
+
throw new Error('Campaign close time must be in the future');
|
|
65
|
+
}
|
|
66
|
+
await state.adapter.query(`INSERT INTO charity_match_campaigns (
|
|
67
|
+
campaign_id, sponsor, title, beneficiary, asset, match_cap, match_bps, total_donations, matched_total, status, closes_at, metadata, created_at, closed_at
|
|
68
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
|
|
69
|
+
payload.campaignId,
|
|
70
|
+
sponsor,
|
|
71
|
+
payload.title,
|
|
72
|
+
payload.beneficiary,
|
|
73
|
+
payload.asset,
|
|
74
|
+
payload.matchCap,
|
|
75
|
+
payload.matchBps,
|
|
76
|
+
'0',
|
|
77
|
+
'0',
|
|
78
|
+
'open',
|
|
79
|
+
closesAt,
|
|
80
|
+
JSON.stringify(payload.metadata || {}),
|
|
81
|
+
new Date(),
|
|
82
|
+
null
|
|
83
|
+
]);
|
|
84
|
+
await (0, helpers_1.emitContractEvent)(state.adapter, name, 'createCampaign', payload, {
|
|
85
|
+
action: 'charity_match_campaign_created',
|
|
86
|
+
data: {
|
|
87
|
+
campaignId: payload.campaignId,
|
|
88
|
+
sponsor,
|
|
89
|
+
beneficiary: payload.beneficiary
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
};
|
|
93
|
+
const donate = async (payload, ctx) => {
|
|
94
|
+
const donor = (0, helpers_1.requireSender)(ctx);
|
|
95
|
+
const payment = (0, helpers_1.getIncomingPayment)(ctx);
|
|
96
|
+
const rows = await state.adapter.query('SELECT * FROM charity_match_campaigns WHERE campaign_id = ?', [payload.campaignId]);
|
|
97
|
+
if (rows.length === 0) {
|
|
98
|
+
throw new Error(`Campaign ${payload.campaignId} does not exist`);
|
|
99
|
+
}
|
|
100
|
+
const campaign = rows[0];
|
|
101
|
+
if (campaign.status !== 'open') {
|
|
102
|
+
throw new Error('Campaign is not open');
|
|
103
|
+
}
|
|
104
|
+
if (((0, helpers_1.parseDateValue)(campaign.closes_at) || new Date()) <= new Date()) {
|
|
105
|
+
throw new Error('Campaign has already closed');
|
|
106
|
+
}
|
|
107
|
+
(0, helpers_1.assertAssetMatches)(payment.asset, campaign.asset);
|
|
108
|
+
const totalDonations = (0, helpers_1.toBigNumber)(campaign.total_donations).plus(payment.amount);
|
|
109
|
+
const potentialMatch = totalDonations.multipliedBy(Number(campaign.match_bps)).dividedBy(10000);
|
|
110
|
+
const nextMatched = potentialMatch.gt(campaign.match_cap)
|
|
111
|
+
? (0, helpers_1.toBigNumber)(campaign.match_cap)
|
|
112
|
+
: potentialMatch;
|
|
113
|
+
await state.adapter.query('INSERT INTO charity_match_donations (campaign_id, donor, amount, asset, created_at) VALUES (?, ?, ?, ?, ?)', [payload.campaignId, donor, payment.amount, payment.asset, new Date()]);
|
|
114
|
+
await state.adapter.query('UPDATE charity_match_campaigns SET total_donations = ?, matched_total = ? WHERE campaign_id = ?', [totalDonations.toFixed(), nextMatched.toFixed(), payload.campaignId]);
|
|
115
|
+
await (0, helpers_1.emitContractEvent)(state.adapter, name, 'donate', payload, {
|
|
116
|
+
action: 'charity_donation_received',
|
|
117
|
+
data: {
|
|
118
|
+
campaignId: payload.campaignId,
|
|
119
|
+
donor,
|
|
120
|
+
amount: payment.amount,
|
|
121
|
+
asset: payment.asset,
|
|
122
|
+
totalDonations: totalDonations.toFixed(),
|
|
123
|
+
matchedTotal: nextMatched.toFixed()
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
};
|
|
127
|
+
const closeCampaign = async (payload, ctx) => {
|
|
128
|
+
const rows = await state.adapter.query('SELECT * FROM charity_match_campaigns WHERE campaign_id = ?', [payload.campaignId]);
|
|
129
|
+
if (rows.length === 0) {
|
|
130
|
+
throw new Error(`Campaign ${payload.campaignId} does not exist`);
|
|
131
|
+
}
|
|
132
|
+
const campaign = rows[0];
|
|
133
|
+
if (campaign.status === 'closed') {
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
if (ctx.trigger !== 'time') {
|
|
137
|
+
const sender = (0, helpers_1.requireSender)(ctx);
|
|
138
|
+
if (sender !== campaign.sponsor) {
|
|
139
|
+
throw new Error('Only the sponsor can close this campaign');
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
if (((0, helpers_1.parseDateValue)(campaign.closes_at) || new Date()) > new Date()) {
|
|
143
|
+
throw new Error('Campaign cannot be closed before its close time');
|
|
144
|
+
}
|
|
145
|
+
await state.adapter.query('UPDATE charity_match_campaigns SET status = ?, closed_at = ? WHERE campaign_id = ?', ['closed', new Date(), payload.campaignId]);
|
|
146
|
+
await (0, helpers_1.emitContractEvent)(state.adapter, name, 'closeCampaign', payload, {
|
|
147
|
+
action: 'charity_match_campaign_closed',
|
|
148
|
+
data: {
|
|
149
|
+
campaignId: payload.campaignId,
|
|
150
|
+
beneficiary: campaign.beneficiary,
|
|
151
|
+
totalDonations: campaign.total_donations,
|
|
152
|
+
matchedTotal: campaign.matched_total,
|
|
153
|
+
asset: campaign.asset
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
};
|
|
157
|
+
return (0, contract_1.defineContract)({
|
|
158
|
+
name,
|
|
159
|
+
hooks: {
|
|
160
|
+
create: async ({ adapter }) => {
|
|
161
|
+
state.adapter = adapter;
|
|
162
|
+
await initialize();
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
actions: {
|
|
166
|
+
createCampaign: (0, contract_1.action)(createCampaign, { schema: createCampaignSchema, trigger: 'custom_json' }),
|
|
167
|
+
donate: (0, contract_1.action)(donate, { schema: campaignIdSchema, trigger: ['transfer', 'recurrent_transfer'] }),
|
|
168
|
+
closeCampaign: (0, contract_1.action)(closeCampaign, { schema: campaignIdSchema, trigger: ['custom_json', 'time'] })
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=charitymatch.contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"charitymatch.contract.js","sourceRoot":"","sources":["../../src/contracts/charitymatch.contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@ const seedrandom_1 = __importDefault(require("seedrandom"));
|
|
|
9
9
|
const uuid_1 = require("uuid");
|
|
10
10
|
const zod_1 = require("zod");
|
|
11
11
|
const contract_1 = require("./contract");
|
|
12
|
+
const helpers_1 = require("./helpers");
|
|
12
13
|
const DEFAULT_NAME = 'coinflip';
|
|
13
14
|
const DEFAULT_ACCOUNT = 'beggars';
|
|
14
15
|
const DEFAULT_TOKEN_SYMBOL = 'HIVE';
|
|
@@ -53,11 +54,7 @@ function createCoinflipContract(options = {}) {
|
|
|
53
54
|
try {
|
|
54
55
|
const accountInfo = await state.streamer['client'].database.getAccounts([account]);
|
|
55
56
|
if (accountInfo?.[0]) {
|
|
56
|
-
const
|
|
57
|
-
const amount = new bignumber_js_1.default(balanceParts[0]);
|
|
58
|
-
if (amount.isNaN() || !amount.isFinite()) {
|
|
59
|
-
throw new Error('Invalid balance format received from API');
|
|
60
|
-
}
|
|
57
|
+
const amount = (0, helpers_1.parseBlockchainAmount)(accountInfo[0].balance).value;
|
|
61
58
|
state.balanceCache = {
|
|
62
59
|
balance: amount,
|
|
63
60
|
timestamp: now
|
|
@@ -98,41 +95,42 @@ function createCoinflipContract(options = {}) {
|
|
|
98
95
|
const sender = ctx.sender;
|
|
99
96
|
const amountRaw = ctx.transfer.rawAmount;
|
|
100
97
|
try {
|
|
101
|
-
|
|
102
|
-
|
|
98
|
+
let parsedAmount;
|
|
99
|
+
try {
|
|
100
|
+
parsedAmount = (0, helpers_1.parseBlockchainAmount)(amountRaw);
|
|
103
101
|
}
|
|
104
|
-
|
|
105
|
-
if (amountTrim.length !== 2) {
|
|
102
|
+
catch (error) {
|
|
106
103
|
throw new Error('Invalid amount format');
|
|
107
104
|
}
|
|
108
|
-
const amountParsed =
|
|
109
|
-
if (amountParsed.
|
|
105
|
+
const amountParsed = parsedAmount.value;
|
|
106
|
+
if (amountParsed.isNegative()) {
|
|
110
107
|
throw new Error('Invalid amount value');
|
|
111
108
|
}
|
|
112
|
-
const amountCurrency =
|
|
109
|
+
const amountCurrency = parsedAmount.asset;
|
|
113
110
|
const transaction = await state.streamer.getTransaction(ctx.block.number, ctx.transaction.id);
|
|
114
111
|
const verify = await state.streamer.verifyTransfer(transaction, sender, account, amountRaw);
|
|
115
112
|
const balance = await getBalance();
|
|
116
113
|
const availableBalance = balance.minus(state.pendingPayouts);
|
|
117
114
|
if (verify) {
|
|
118
115
|
if (!validCurrencies.includes(amountCurrency)) {
|
|
119
|
-
await state.streamer.transferHiveTokens(account, sender,
|
|
116
|
+
await state.streamer.transferHiveTokens(account, sender, parsedAmount.amount, parsedAmount.asset, '[Refund] You sent an invalid currency.');
|
|
120
117
|
return;
|
|
121
118
|
}
|
|
122
119
|
if (amountParsed.isLessThan(minAmount)) {
|
|
123
|
-
await state.streamer.transferHiveTokens(account, sender,
|
|
120
|
+
await state.streamer.transferHiveTokens(account, sender, parsedAmount.amount, parsedAmount.asset, `[Refund] Bet amount too small. Minimum: ${minAmount} ${amountCurrency}.`);
|
|
124
121
|
return;
|
|
125
122
|
}
|
|
126
123
|
if (amountParsed.isGreaterThan(maxAmount)) {
|
|
127
|
-
await state.streamer.transferHiveTokens(account, sender,
|
|
124
|
+
await state.streamer.transferHiveTokens(account, sender, parsedAmount.amount, parsedAmount.asset, `[Refund] You sent too much. Maximum: ${maxAmount} ${amountCurrency}.`);
|
|
128
125
|
return;
|
|
129
126
|
}
|
|
130
127
|
const potentialPayout = amountParsed.multipliedBy(2);
|
|
131
128
|
if (potentialPayout.isGreaterThan(availableBalance)) {
|
|
132
|
-
await state.streamer.transferHiveTokens(account, sender,
|
|
129
|
+
await state.streamer.transferHiveTokens(account, sender, parsedAmount.amount, parsedAmount.asset, '[Refund] The server cannot afford this bet payout.');
|
|
133
130
|
return;
|
|
134
131
|
}
|
|
135
132
|
state.pendingPayouts = state.pendingPayouts.plus(potentialPayout);
|
|
133
|
+
let payoutIncremented = true;
|
|
136
134
|
try {
|
|
137
135
|
const serverSeed = (0, uuid_1.v4)();
|
|
138
136
|
if (!serverSeed || typeof serverSeed !== 'string') {
|
|
@@ -152,7 +150,9 @@ function createCoinflipContract(options = {}) {
|
|
|
152
150
|
userWon: 'true'
|
|
153
151
|
}
|
|
154
152
|
});
|
|
155
|
-
await state.streamer.transferHiveTokens(account, sender,
|
|
153
|
+
await state.streamer.transferHiveTokens(account, sender, (0, helpers_1.formatBlockchainAmount)(potentialPayout), parsedAmount.asset, `[Winner] | Guess: ${payload.guess} | Server Roll: ${generatedGuess} | Previous block id: ${ctx.block.previousId} | BlockID: ${ctx.block.id} | Trx ID: ${ctx.transaction.id} | Server Seed: ${serverSeed}`);
|
|
154
|
+
// Invalidate balance cache after payout
|
|
155
|
+
state.balanceCache = null;
|
|
156
156
|
return;
|
|
157
157
|
}
|
|
158
158
|
await state.adapter.addEvent(new Date(), name, 'flip', payload, {
|
|
@@ -166,10 +166,13 @@ function createCoinflipContract(options = {}) {
|
|
|
166
166
|
userWon: 'false'
|
|
167
167
|
}
|
|
168
168
|
});
|
|
169
|
-
await state.streamer.transferHiveTokens(account, sender, '0.001',
|
|
169
|
+
await state.streamer.transferHiveTokens(account, sender, '0.001', parsedAmount.asset, `[Lost] | Guess: ${payload.guess} | Server Roll: ${generatedGuess} | Previous block id: ${ctx.block.previousId} | BlockID: ${ctx.block.id} | Trx ID: ${ctx.transaction.id} | Server Seed: ${serverSeed}`);
|
|
170
170
|
}
|
|
171
171
|
finally {
|
|
172
|
-
|
|
172
|
+
if (payoutIncremented) {
|
|
173
|
+
state.pendingPayouts = state.pendingPayouts.minus(potentialPayout);
|
|
174
|
+
payoutIncremented = false;
|
|
175
|
+
}
|
|
173
176
|
}
|
|
174
177
|
}
|
|
175
178
|
}
|
|
@@ -183,10 +186,10 @@ function createCoinflipContract(options = {}) {
|
|
|
183
186
|
});
|
|
184
187
|
try {
|
|
185
188
|
if (amountRaw && typeof amountRaw === 'string' && amountRaw.includes(' ')) {
|
|
186
|
-
const
|
|
187
|
-
const amountBN =
|
|
189
|
+
const parsedAmount = (0, helpers_1.parseBlockchainAmount)(amountRaw);
|
|
190
|
+
const amountBN = parsedAmount.value;
|
|
188
191
|
if (!amountBN.isNaN() && amountBN.isFinite() && !amountBN.isNegative()) {
|
|
189
|
-
await state.streamer.transferHiveTokens(account, sender,
|
|
192
|
+
await state.streamer.transferHiveTokens(account, sender, parsedAmount.amount, parsedAmount.asset, '[Refund] Processing error occurred.');
|
|
190
193
|
}
|
|
191
194
|
}
|
|
192
195
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coinflip.contract.js","sourceRoot":"","sources":["../../src/contracts/coinflip.contract.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"coinflip.contract.js","sourceRoot":"","sources":["../../src/contracts/coinflip.contract.ts"],"names":[],"mappings":"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"}
|