hive-stream 3.0.2 → 3.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/DOCUMENTATION.md +50 -2
- package/README.md +44 -3
- 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/config.d.ts +7 -1
- package/dist/config.js +7 -1
- 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 +7 -1
- 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 +7 -1
- 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 +64 -0
- package/dist/contracts/helpers.js +159 -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 +236 -192
- 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 +17 -1
- 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 +39 -0
- package/dist/index.js +71 -1
- package/dist/index.js.map +1 -1
- package/dist/metadata.d.ts +7 -0
- package/dist/metadata.js +64 -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 +21 -1
- package/dist/streamer.js +187 -62
- package/dist/streamer.js.map +1 -1
- package/dist/utils.js +11 -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,245 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createMultisigTreasuryContract = createMultisigTreasuryContract;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const contract_1 = require("./contract");
|
|
6
|
+
const helpers_1 = require("./helpers");
|
|
7
|
+
const DEFAULT_NAME = 'multisigtreasury';
|
|
8
|
+
function createMultisigTreasuryContract(options = {}) {
|
|
9
|
+
const name = options.name || DEFAULT_NAME;
|
|
10
|
+
const state = (0, helpers_1.createContractState)();
|
|
11
|
+
const createVaultSchema = zod_1.z.object({
|
|
12
|
+
vaultId: helpers_1.identifierSchema,
|
|
13
|
+
title: zod_1.z.string().min(3).max(140),
|
|
14
|
+
signers: zod_1.z.array(zod_1.z.string().min(3).max(32)).min(1).max(25),
|
|
15
|
+
threshold: zod_1.z.number().int().min(1).max(25),
|
|
16
|
+
metadata: zod_1.z.record(zod_1.z.any()).optional()
|
|
17
|
+
});
|
|
18
|
+
const proposeTransferSchema = zod_1.z.object({
|
|
19
|
+
vaultId: helpers_1.identifierSchema,
|
|
20
|
+
proposalId: helpers_1.identifierSchema,
|
|
21
|
+
title: zod_1.z.string().min(3).max(140),
|
|
22
|
+
to: zod_1.z.string().min(3).max(32),
|
|
23
|
+
amount: helpers_1.amountSchema,
|
|
24
|
+
asset: helpers_1.assetSchema,
|
|
25
|
+
memo: zod_1.z.string().max(280).optional()
|
|
26
|
+
});
|
|
27
|
+
const proposalSchema = zod_1.z.object({
|
|
28
|
+
proposalId: helpers_1.identifierSchema
|
|
29
|
+
});
|
|
30
|
+
const markExecutedSchema = zod_1.z.object({
|
|
31
|
+
proposalId: helpers_1.identifierSchema,
|
|
32
|
+
txId: zod_1.z.string().max(120).optional()
|
|
33
|
+
});
|
|
34
|
+
const initialize = async () => {
|
|
35
|
+
await (0, helpers_1.initializeTables)(state.adapter, [
|
|
36
|
+
`
|
|
37
|
+
CREATE TABLE IF NOT EXISTS treasury_vaults (
|
|
38
|
+
vault_id TEXT PRIMARY KEY,
|
|
39
|
+
owner TEXT NOT NULL,
|
|
40
|
+
title TEXT NOT NULL,
|
|
41
|
+
threshold INTEGER NOT NULL,
|
|
42
|
+
signers TEXT NOT NULL,
|
|
43
|
+
status TEXT NOT NULL,
|
|
44
|
+
metadata TEXT,
|
|
45
|
+
created_at DATETIME NOT NULL
|
|
46
|
+
)
|
|
47
|
+
`,
|
|
48
|
+
`
|
|
49
|
+
CREATE TABLE IF NOT EXISTS treasury_proposals (
|
|
50
|
+
proposal_id TEXT PRIMARY KEY,
|
|
51
|
+
vault_id TEXT NOT NULL,
|
|
52
|
+
proposer TEXT NOT NULL,
|
|
53
|
+
title TEXT NOT NULL,
|
|
54
|
+
operation_type TEXT NOT NULL,
|
|
55
|
+
operation_json TEXT NOT NULL,
|
|
56
|
+
approvals_count INTEGER NOT NULL,
|
|
57
|
+
status TEXT NOT NULL,
|
|
58
|
+
created_at DATETIME NOT NULL,
|
|
59
|
+
executed_at DATETIME
|
|
60
|
+
)
|
|
61
|
+
`,
|
|
62
|
+
`
|
|
63
|
+
CREATE TABLE IF NOT EXISTS treasury_approvals (
|
|
64
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
65
|
+
proposal_id TEXT NOT NULL,
|
|
66
|
+
signer TEXT NOT NULL,
|
|
67
|
+
approved_at DATETIME NOT NULL,
|
|
68
|
+
UNIQUE(proposal_id, signer)
|
|
69
|
+
)
|
|
70
|
+
`
|
|
71
|
+
]);
|
|
72
|
+
};
|
|
73
|
+
const createVault = async (payload, ctx) => {
|
|
74
|
+
const owner = (0, helpers_1.requireSender)(ctx);
|
|
75
|
+
const signers = (0, helpers_1.uniqueItems)([owner, ...payload.signers]);
|
|
76
|
+
if (payload.threshold > signers.length) {
|
|
77
|
+
throw new Error('Threshold cannot exceed the number of unique signers');
|
|
78
|
+
}
|
|
79
|
+
const existing = await state.adapter.query('SELECT vault_id FROM treasury_vaults WHERE vault_id = ?', [payload.vaultId]);
|
|
80
|
+
if (existing.length > 0) {
|
|
81
|
+
throw new Error(`Vault ${payload.vaultId} already exists`);
|
|
82
|
+
}
|
|
83
|
+
await state.adapter.query(`INSERT INTO treasury_vaults (
|
|
84
|
+
vault_id, owner, title, threshold, signers, status, metadata, created_at
|
|
85
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?)`, [
|
|
86
|
+
payload.vaultId,
|
|
87
|
+
owner,
|
|
88
|
+
payload.title,
|
|
89
|
+
payload.threshold,
|
|
90
|
+
JSON.stringify(signers),
|
|
91
|
+
'active',
|
|
92
|
+
JSON.stringify(payload.metadata || {}),
|
|
93
|
+
new Date()
|
|
94
|
+
]);
|
|
95
|
+
await (0, helpers_1.emitContractEvent)(state.adapter, name, 'createVault', payload, {
|
|
96
|
+
action: 'treasury_vault_created',
|
|
97
|
+
data: {
|
|
98
|
+
vaultId: payload.vaultId,
|
|
99
|
+
owner,
|
|
100
|
+
threshold: payload.threshold,
|
|
101
|
+
signers
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
};
|
|
105
|
+
const proposeTransfer = async (payload, ctx) => {
|
|
106
|
+
const proposer = (0, helpers_1.requireSender)(ctx);
|
|
107
|
+
const vaults = await state.adapter.query('SELECT * FROM treasury_vaults WHERE vault_id = ?', [payload.vaultId]);
|
|
108
|
+
if (vaults.length === 0) {
|
|
109
|
+
throw new Error(`Vault ${payload.vaultId} does not exist`);
|
|
110
|
+
}
|
|
111
|
+
const vault = vaults[0];
|
|
112
|
+
const signers = (0, helpers_1.parseJson)(vault.signers, []);
|
|
113
|
+
if (!signers.includes(proposer)) {
|
|
114
|
+
throw new Error('Only a vault signer can create proposals');
|
|
115
|
+
}
|
|
116
|
+
const existing = await state.adapter.query('SELECT proposal_id FROM treasury_proposals WHERE proposal_id = ?', [payload.proposalId]);
|
|
117
|
+
if (existing.length > 0) {
|
|
118
|
+
throw new Error(`Proposal ${payload.proposalId} already exists`);
|
|
119
|
+
}
|
|
120
|
+
await state.adapter.query(`INSERT INTO treasury_proposals (
|
|
121
|
+
proposal_id, vault_id, proposer, title, operation_type, operation_json, approvals_count, status, created_at, executed_at
|
|
122
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`, [
|
|
123
|
+
payload.proposalId,
|
|
124
|
+
payload.vaultId,
|
|
125
|
+
proposer,
|
|
126
|
+
payload.title,
|
|
127
|
+
'transfer',
|
|
128
|
+
JSON.stringify({
|
|
129
|
+
to: payload.to,
|
|
130
|
+
amount: payload.amount,
|
|
131
|
+
asset: payload.asset,
|
|
132
|
+
memo: payload.memo || ''
|
|
133
|
+
}),
|
|
134
|
+
0,
|
|
135
|
+
'pending',
|
|
136
|
+
new Date(),
|
|
137
|
+
null
|
|
138
|
+
]);
|
|
139
|
+
await (0, helpers_1.emitContractEvent)(state.adapter, name, 'proposeTransfer', payload, {
|
|
140
|
+
action: 'treasury_proposal_created',
|
|
141
|
+
data: {
|
|
142
|
+
proposalId: payload.proposalId,
|
|
143
|
+
vaultId: payload.vaultId,
|
|
144
|
+
proposer
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
};
|
|
148
|
+
const approveProposal = async (payload, ctx) => {
|
|
149
|
+
const signer = (0, helpers_1.requireSender)(ctx);
|
|
150
|
+
const proposalRows = await state.adapter.query('SELECT * FROM treasury_proposals WHERE proposal_id = ?', [payload.proposalId]);
|
|
151
|
+
if (proposalRows.length === 0) {
|
|
152
|
+
throw new Error(`Proposal ${payload.proposalId} does not exist`);
|
|
153
|
+
}
|
|
154
|
+
const proposal = proposalRows[0];
|
|
155
|
+
if (proposal.status === 'cancelled' || proposal.status === 'executed') {
|
|
156
|
+
throw new Error('Proposal is no longer active');
|
|
157
|
+
}
|
|
158
|
+
const vaultRows = await state.adapter.query('SELECT * FROM treasury_vaults WHERE vault_id = ?', [proposal.vault_id]);
|
|
159
|
+
const vault = vaultRows[0];
|
|
160
|
+
const signers = (0, helpers_1.parseJson)(vault.signers, []);
|
|
161
|
+
if (!signers.includes(signer)) {
|
|
162
|
+
throw new Error('Only a vault signer can approve this proposal');
|
|
163
|
+
}
|
|
164
|
+
await state.adapter.query('INSERT INTO treasury_approvals (proposal_id, signer, approved_at) VALUES (?, ?, ?)', [payload.proposalId, signer, new Date()]);
|
|
165
|
+
const approvalCountRows = await state.adapter.query('SELECT COUNT(*) AS count FROM treasury_approvals WHERE proposal_id = ?', [payload.proposalId]);
|
|
166
|
+
const approvalsCount = Number(approvalCountRows[0]?.count || 0);
|
|
167
|
+
const status = approvalsCount >= Number(vault.threshold)
|
|
168
|
+
? 'ready'
|
|
169
|
+
: 'pending';
|
|
170
|
+
await state.adapter.query('UPDATE treasury_proposals SET approvals_count = ?, status = ? WHERE proposal_id = ?', [approvalsCount, status, payload.proposalId]);
|
|
171
|
+
await (0, helpers_1.emitContractEvent)(state.adapter, name, 'approveProposal', payload, {
|
|
172
|
+
action: status === 'ready' ? 'treasury_proposal_ready' : 'treasury_proposal_approved',
|
|
173
|
+
data: {
|
|
174
|
+
proposalId: payload.proposalId,
|
|
175
|
+
signer,
|
|
176
|
+
approvalsCount,
|
|
177
|
+
threshold: vault.threshold
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
};
|
|
181
|
+
const cancelProposal = async (payload, ctx) => {
|
|
182
|
+
const sender = (0, helpers_1.requireSender)(ctx);
|
|
183
|
+
const proposals = await state.adapter.query('SELECT * FROM treasury_proposals WHERE proposal_id = ?', [payload.proposalId]);
|
|
184
|
+
if (proposals.length === 0) {
|
|
185
|
+
throw new Error(`Proposal ${payload.proposalId} does not exist`);
|
|
186
|
+
}
|
|
187
|
+
const proposal = proposals[0];
|
|
188
|
+
const vaultRows = await state.adapter.query('SELECT * FROM treasury_vaults WHERE vault_id = ?', [proposal.vault_id]);
|
|
189
|
+
const vault = vaultRows[0];
|
|
190
|
+
if (proposal.proposer !== sender && vault.owner !== sender) {
|
|
191
|
+
throw new Error('Only the proposer or vault owner can cancel this proposal');
|
|
192
|
+
}
|
|
193
|
+
await state.adapter.query('UPDATE treasury_proposals SET status = ? WHERE proposal_id = ?', ['cancelled', payload.proposalId]);
|
|
194
|
+
await (0, helpers_1.emitContractEvent)(state.adapter, name, 'cancelProposal', payload, {
|
|
195
|
+
action: 'treasury_proposal_cancelled',
|
|
196
|
+
data: {
|
|
197
|
+
proposalId: payload.proposalId,
|
|
198
|
+
cancelledBy: sender
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
};
|
|
202
|
+
const markExecuted = async (payload, ctx) => {
|
|
203
|
+
const sender = (0, helpers_1.requireSender)(ctx);
|
|
204
|
+
const proposals = await state.adapter.query('SELECT * FROM treasury_proposals WHERE proposal_id = ?', [payload.proposalId]);
|
|
205
|
+
if (proposals.length === 0) {
|
|
206
|
+
throw new Error(`Proposal ${payload.proposalId} does not exist`);
|
|
207
|
+
}
|
|
208
|
+
const proposal = proposals[0];
|
|
209
|
+
const vaultRows = await state.adapter.query('SELECT * FROM treasury_vaults WHERE vault_id = ?', [proposal.vault_id]);
|
|
210
|
+
const vault = vaultRows[0];
|
|
211
|
+
const signers = (0, helpers_1.parseJson)(vault.signers, []);
|
|
212
|
+
if (!signers.includes(sender)) {
|
|
213
|
+
throw new Error('Only a vault signer can mark this proposal executed');
|
|
214
|
+
}
|
|
215
|
+
if (proposal.status !== 'ready') {
|
|
216
|
+
throw new Error('Proposal is not ready for execution');
|
|
217
|
+
}
|
|
218
|
+
await state.adapter.query('UPDATE treasury_proposals SET status = ?, executed_at = ? WHERE proposal_id = ?', ['executed', new Date(), payload.proposalId]);
|
|
219
|
+
await (0, helpers_1.emitContractEvent)(state.adapter, name, 'markExecuted', payload, {
|
|
220
|
+
action: 'treasury_proposal_executed',
|
|
221
|
+
data: {
|
|
222
|
+
proposalId: payload.proposalId,
|
|
223
|
+
executedBy: sender,
|
|
224
|
+
txId: payload.txId || null
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
};
|
|
228
|
+
return (0, contract_1.defineContract)({
|
|
229
|
+
name,
|
|
230
|
+
hooks: {
|
|
231
|
+
create: async ({ adapter }) => {
|
|
232
|
+
state.adapter = adapter;
|
|
233
|
+
await initialize();
|
|
234
|
+
}
|
|
235
|
+
},
|
|
236
|
+
actions: {
|
|
237
|
+
createVault: (0, contract_1.action)(createVault, { schema: createVaultSchema, trigger: 'custom_json' }),
|
|
238
|
+
proposeTransfer: (0, contract_1.action)(proposeTransfer, { schema: proposeTransferSchema, trigger: 'custom_json' }),
|
|
239
|
+
approveProposal: (0, contract_1.action)(approveProposal, { schema: proposalSchema, trigger: 'custom_json' }),
|
|
240
|
+
cancelProposal: (0, contract_1.action)(cancelProposal, { schema: proposalSchema, trigger: 'custom_json' }),
|
|
241
|
+
markExecuted: (0, contract_1.action)(markExecuted, { schema: markExecutedSchema, trigger: 'custom_json' })
|
|
242
|
+
}
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
//# sourceMappingURL=multisigtreasury.contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multisigtreasury.contract.js","sourceRoot":"","sources":["../../src/contracts/multisigtreasury.contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@ export declare class NFTContract {
|
|
|
10
10
|
destroy(): void;
|
|
11
11
|
updateBlockInfo(blockNumber: number, blockId: string, previousBlockId: string, transactionId: string): void;
|
|
12
12
|
private initializeNFTTables;
|
|
13
|
+
private withTransaction;
|
|
13
14
|
private createCollection;
|
|
14
15
|
private mintNFT;
|
|
15
16
|
private updateNFT;
|