@silvana-one/nft 0.1.31 → 0.2.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/dist/node/index.cjs +57 -1
- package/dist/node/marketplace/bb.d.ts +18 -0
- package/dist/node/marketplace/bb.js +58 -0
- package/dist/node/marketplace/bb.js.map +1 -1
- package/dist/tsconfig.node.tsbuildinfo +1 -0
- package/dist/tsconfig.web.tsbuildinfo +1 -1
- package/dist/web/marketplace/bb.d.ts +18 -0
- package/dist/web/marketplace/bb.js +58 -0
- package/dist/web/marketplace/bb.js.map +1 -1
- package/package.json +88 -14
- package/src/marketplace/bb.ts +51 -0
- package/dist/tsconfig.tsbuildinfo +0 -1
|
@@ -100,6 +100,7 @@ class BulletinBoard extends SmartContract {
|
|
|
100
100
|
constructor() {
|
|
101
101
|
super(...arguments);
|
|
102
102
|
this.admin = State();
|
|
103
|
+
this.fee = State();
|
|
103
104
|
this.events = {
|
|
104
105
|
newCollection: BB_NewCollectionEvent,
|
|
105
106
|
offer: BB_OfferEvent,
|
|
@@ -109,11 +110,14 @@ class BulletinBoard extends SmartContract {
|
|
|
109
110
|
sale: BB_SaleEvent,
|
|
110
111
|
upgradeVerificationKey: BB_UpgradeVerificationKeyEvent,
|
|
111
112
|
changeAdmin: BB_ChangeAdminEvent,
|
|
113
|
+
withdraw: UInt64,
|
|
114
|
+
setFee: UInt64,
|
|
112
115
|
};
|
|
113
116
|
}
|
|
114
117
|
async deploy(args) {
|
|
115
118
|
await super.deploy(args);
|
|
116
119
|
this.admin.set(args.admin);
|
|
120
|
+
this.fee.set(args.fee ?? UInt64.from(100_000_000));
|
|
117
121
|
this.account.permissions.set({
|
|
118
122
|
...Permissions.default(),
|
|
119
123
|
send: Permissions.proof(),
|
|
@@ -121,11 +125,24 @@ class BulletinBoard extends SmartContract {
|
|
|
121
125
|
setPermissions: Permissions.impossible(),
|
|
122
126
|
});
|
|
123
127
|
}
|
|
128
|
+
/**
|
|
129
|
+
* Pays the fee to prevent spamming the BulletinBoard with fake events.
|
|
130
|
+
*/
|
|
131
|
+
async payFee() {
|
|
132
|
+
const fee = this.fee.getAndRequireEquals();
|
|
133
|
+
const sender = this.sender.getUnconstrained();
|
|
134
|
+
const feeUpdate = AccountUpdate.createSigned(sender);
|
|
135
|
+
feeUpdate.body.useFullCommitment = Bool(true); // Prevent memo and fee change
|
|
136
|
+
feeUpdate.balance.subInPlace(fee);
|
|
137
|
+
this.balance.addInPlace(fee);
|
|
138
|
+
return feeUpdate;
|
|
139
|
+
}
|
|
124
140
|
/**
|
|
125
141
|
* Emits a new collection event.
|
|
126
142
|
* @param collection - The collection address.
|
|
127
143
|
*/
|
|
128
144
|
async newCollection(collection) {
|
|
145
|
+
await this.payFee();
|
|
129
146
|
this.emitEvent("newCollection", new BB_NewCollectionEvent({
|
|
130
147
|
collection,
|
|
131
148
|
}));
|
|
@@ -138,6 +155,7 @@ class BulletinBoard extends SmartContract {
|
|
|
138
155
|
* @param price - The price.
|
|
139
156
|
*/
|
|
140
157
|
async offer(collection, nft, offer, price) {
|
|
158
|
+
await this.payFee();
|
|
141
159
|
this.emitEvent("offer", new BB_OfferEvent({ collection, nft, offer, price }));
|
|
142
160
|
}
|
|
143
161
|
/**
|
|
@@ -146,6 +164,7 @@ class BulletinBoard extends SmartContract {
|
|
|
146
164
|
* @param nft - The NFT address.
|
|
147
165
|
*/
|
|
148
166
|
async cancelOffer(collection, nft) {
|
|
167
|
+
await this.payFee();
|
|
149
168
|
this.emitEvent("cancelOffer", new BB_CancelOfferEvent({ collection, nft }));
|
|
150
169
|
}
|
|
151
170
|
/**
|
|
@@ -156,6 +175,7 @@ class BulletinBoard extends SmartContract {
|
|
|
156
175
|
* @param price - The price.
|
|
157
176
|
*/
|
|
158
177
|
async bid(collection, nft, bid, price) {
|
|
178
|
+
await this.payFee();
|
|
159
179
|
this.emitEvent("bid", new BB_BidEvent({ collection, nft, bid, price }));
|
|
160
180
|
}
|
|
161
181
|
/**
|
|
@@ -165,6 +185,7 @@ class BulletinBoard extends SmartContract {
|
|
|
165
185
|
* @param bid - The bid address.
|
|
166
186
|
*/
|
|
167
187
|
async cancelBid(collection, nft, bid) {
|
|
188
|
+
await this.payFee();
|
|
168
189
|
this.emitEvent("cancelBid", new BB_CancelBidEvent({ collection, nft, bid }));
|
|
169
190
|
}
|
|
170
191
|
/**
|
|
@@ -175,6 +196,7 @@ class BulletinBoard extends SmartContract {
|
|
|
175
196
|
* @param price - The price.
|
|
176
197
|
*/
|
|
177
198
|
async sale(collection, nft, buyer, price) {
|
|
199
|
+
await this.payFee();
|
|
178
200
|
this.emitEvent("sale", new BB_SaleEvent({ collection, nft, buyer, price }));
|
|
179
201
|
}
|
|
180
202
|
/**
|
|
@@ -198,6 +220,17 @@ class BulletinBoard extends SmartContract {
|
|
|
198
220
|
// Emit the change admin event
|
|
199
221
|
this.emitEvent("changeAdmin", new BB_ChangeAdminEvent({ admin }));
|
|
200
222
|
}
|
|
223
|
+
/**
|
|
224
|
+
* Changes the contract's fee
|
|
225
|
+
* @param fee - The new fee.
|
|
226
|
+
*/
|
|
227
|
+
async setFee(fee) {
|
|
228
|
+
await this.ensureOwnerSignature();
|
|
229
|
+
// Set the new fee
|
|
230
|
+
this.fee.set(fee);
|
|
231
|
+
// Emit the change fee event
|
|
232
|
+
this.emitEvent("setFee", fee);
|
|
233
|
+
}
|
|
201
234
|
/**
|
|
202
235
|
* Upgrades the contract's verification key after validating with the upgrade authority.
|
|
203
236
|
* @param vk - The new verification key to upgrade to.
|
|
@@ -209,11 +242,24 @@ class BulletinBoard extends SmartContract {
|
|
|
209
242
|
// Emit the upgrade event
|
|
210
243
|
this.emitEvent("upgradeVerificationKey", new BB_UpgradeVerificationKeyEvent({ vk: vk.hash }));
|
|
211
244
|
}
|
|
245
|
+
/**
|
|
246
|
+
* Withdraws the fee by admin
|
|
247
|
+
*/
|
|
248
|
+
async withdraw(amount) {
|
|
249
|
+
const adminUpdate = await this.ensureOwnerSignature();
|
|
250
|
+
adminUpdate.balance.addInPlace(amount);
|
|
251
|
+
this.balance.subInPlace(amount);
|
|
252
|
+
this.emitEvent("withdraw", amount);
|
|
253
|
+
}
|
|
212
254
|
}
|
|
213
255
|
__decorate([
|
|
214
256
|
state(PublicKey),
|
|
215
257
|
__metadata("design:type", Object)
|
|
216
258
|
], BulletinBoard.prototype, "admin", void 0);
|
|
259
|
+
__decorate([
|
|
260
|
+
state(UInt64),
|
|
261
|
+
__metadata("design:type", Object)
|
|
262
|
+
], BulletinBoard.prototype, "fee", void 0);
|
|
217
263
|
__decorate([
|
|
218
264
|
method,
|
|
219
265
|
__metadata("design:type", Function),
|
|
@@ -267,10 +313,22 @@ __decorate([
|
|
|
267
313
|
__metadata("design:paramtypes", [PublicKey]),
|
|
268
314
|
__metadata("design:returntype", Promise)
|
|
269
315
|
], BulletinBoard.prototype, "changeAdmin", null);
|
|
316
|
+
__decorate([
|
|
317
|
+
method,
|
|
318
|
+
__metadata("design:type", Function),
|
|
319
|
+
__metadata("design:paramtypes", [UInt64]),
|
|
320
|
+
__metadata("design:returntype", Promise)
|
|
321
|
+
], BulletinBoard.prototype, "setFee", null);
|
|
270
322
|
__decorate([
|
|
271
323
|
method,
|
|
272
324
|
__metadata("design:type", Function),
|
|
273
325
|
__metadata("design:paramtypes", [VerificationKey]),
|
|
274
326
|
__metadata("design:returntype", Promise)
|
|
275
327
|
], BulletinBoard.prototype, "upgradeVerificationKey", null);
|
|
328
|
+
__decorate([
|
|
329
|
+
method,
|
|
330
|
+
__metadata("design:type", Function),
|
|
331
|
+
__metadata("design:paramtypes", [UInt64]),
|
|
332
|
+
__metadata("design:returntype", Promise)
|
|
333
|
+
], BulletinBoard.prototype, "withdraw", null);
|
|
276
334
|
//# sourceMappingURL=bb.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bb.js","sourceRoot":"","sources":["../../../src/marketplace/bb.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,aAAa,EAEb,MAAM,EACN,WAAW,EACX,SAAS,EACT,KAAK,EACL,KAAK,EACL,MAAM,EACN,aAAa,EACb,IAAI,EACJ,KAAK,EACL,MAAM,EACN,eAAe,GAChB,MAAM,MAAM,CAAC;AACd;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EACL,qBAAqB,EACrB,aAAa,EACb,mBAAmB,EACnB,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,8BAA8B,EAC9B,mBAAmB,EACnB,aAAa,GAEd,CAAC;AAEF,MAAM,qBAAsB,SAAQ,MAAM,CAAC;IACzC,8BAA8B;IAC9B,UAAU,EAAE,SAAS;CACtB,CAAC;CAAG;AAEL,MAAM,aAAc,SAAQ,MAAM,CAAC;IACjC,8BAA8B;IAC9B,UAAU,EAAE,SAAS;IACrB,uBAAuB;IACvB,GAAG,EAAE,SAAS;IACd,yBAAyB;IACzB,KAAK,EAAE,SAAS;IAChB,iBAAiB;IACjB,KAAK,EAAE,MAAM;CACd,CAAC;CAAG;AAEL,MAAM,mBAAoB,SAAQ,MAAM,CAAC;IACvC,8BAA8B;IAC9B,UAAU,EAAE,SAAS;IACrB,uBAAuB;IACvB,GAAG,EAAE,SAAS;CACf,CAAC;CAAG;AAEL,MAAM,WAAY,SAAQ,MAAM,CAAC;IAC/B,8BAA8B;IAC9B,UAAU,EAAE,SAAS;IACrB,uBAAuB;IACvB,GAAG,EAAE,SAAS;IACd,uBAAuB;IACvB,GAAG,EAAE,SAAS;IACd,iBAAiB;IACjB,KAAK,EAAE,MAAM;CACd,CAAC;CAAG;AAEL,MAAM,iBAAkB,SAAQ,MAAM,CAAC;IACrC,8BAA8B;IAC9B,UAAU,EAAE,SAAS;IACrB,uBAAuB;IACvB,GAAG,EAAE,SAAS;IACd,uBAAuB;IACvB,GAAG,EAAE,SAAS;CACf,CAAC;CAAG;AAEL,MAAM,YAAa,SAAQ,MAAM,CAAC;IAChC,8BAA8B;IAC9B,UAAU,EAAE,SAAS;IACrB,uBAAuB;IACvB,GAAG,EAAE,SAAS;IACd,yBAAyB;IACzB,KAAK,EAAE,SAAS;IAChB,iBAAiB;IACjB,KAAK,EAAE,MAAM;CACd,CAAC;CAAG;AAEL,MAAM,8BAA+B,SAAQ,MAAM,CAAC;IAClD,gCAAgC;IAChC,EAAE,EAAE,KAAK;CACV,CAAC;CAAG;AAEL,MAAM,mBAAoB,SAAQ,MAAM,CAAC;IACvC,qBAAqB;IACrB,KAAK,EAAE,SAAS;CACjB,CAAC;CAAG;
|
|
1
|
+
{"version":3,"file":"bb.js","sourceRoot":"","sources":["../../../src/marketplace/bb.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,21 +1,25 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@silvana-one/nft",
|
|
3
|
-
"description": "
|
|
4
|
-
"version": "0.1
|
|
3
|
+
"description": "Mina NFT library",
|
|
4
|
+
"version": "0.2.1",
|
|
5
5
|
"author": "DFST",
|
|
6
6
|
"bugs": "https://github.com/SilvanaOne/silvana-lib/issues",
|
|
7
7
|
"dependencies": {
|
|
8
|
-
"mina-signer": "^3.0.7",
|
|
9
8
|
"tslib": "^2.8.1"
|
|
10
9
|
},
|
|
11
10
|
"devDependencies": {
|
|
12
|
-
"@silvana-one/
|
|
13
|
-
"@silvana-one/
|
|
14
|
-
"@silvana-one/
|
|
15
|
-
"@
|
|
11
|
+
"@silvana-one/mina-utils": "0.2.1",
|
|
12
|
+
"@silvana-one/storage": "0.2.1",
|
|
13
|
+
"@silvana-one/token": "0.2.1",
|
|
14
|
+
"@silvana-one/upgradable": "0.2.1",
|
|
15
|
+
"@types/node": "^22.13.8",
|
|
16
|
+
"c8": "^10.1.3",
|
|
17
|
+
"dotenv": "^16.4.7",
|
|
16
18
|
"esbuild": "^0.25.0",
|
|
17
19
|
"o1js": "^2.2.0",
|
|
18
|
-
"
|
|
20
|
+
"ts-node": "^10.9.2",
|
|
21
|
+
"typescript": "^5.8.2",
|
|
22
|
+
"unique-names-generator": "^4.7.1"
|
|
19
23
|
},
|
|
20
24
|
"engines": {
|
|
21
25
|
"node": ">=20.0.0"
|
|
@@ -46,9 +50,9 @@
|
|
|
46
50
|
"license": "Apache-2.0",
|
|
47
51
|
"main": "dist/web/index.js",
|
|
48
52
|
"peerDependencies": {
|
|
49
|
-
"@silvana-one/storage": "0.1
|
|
50
|
-
"@silvana-one/token": "0.1
|
|
51
|
-
"@silvana-one/upgradable": "0.1
|
|
53
|
+
"@silvana-one/storage": "0.2.1",
|
|
54
|
+
"@silvana-one/token": "0.2.1",
|
|
55
|
+
"@silvana-one/upgradable": "0.2.1",
|
|
52
56
|
"o1js": "^2.2.0"
|
|
53
57
|
},
|
|
54
58
|
"publishConfig": {
|
|
@@ -56,10 +60,80 @@
|
|
|
56
60
|
},
|
|
57
61
|
"repository": "SilvanaOne/silvana-lib.git",
|
|
58
62
|
"scripts": {
|
|
59
|
-
"build": "rm -rf dist && tsc && tsc --build tsconfig.web.json && node build-cjs.js",
|
|
63
|
+
"build": "rm -rf dist && tsc --build tsconfig.node.json && tsc --build tsconfig.web.json && node build-cjs.js",
|
|
60
64
|
"login": "npm login",
|
|
61
|
-
"release": "npm publish --access public"
|
|
65
|
+
"release": "npm publish --access public",
|
|
66
|
+
"coverage": "rm -rf coverage && c8 npm run local:all",
|
|
67
|
+
"test": "NODE_NO_WARNINGS=1 node --loader=ts-node/esm --enable-source-maps -r dotenv/config --require dotenv/config --env-file=.env --test",
|
|
68
|
+
"local:agent": "CHAIN=local CLOUD=local DEPLOY=true MINT=true TRANSFER=true SELL=true BUY=true npm run test test/agent.test.ts",
|
|
69
|
+
"devnet:agent": "CHAIN=devnet DEPLOY=true MINT=true TRANSFER=true SELL=true BUY=true npm run test test/agent.test.ts",
|
|
70
|
+
"local:contract": "CHAIN=local CLOUD=local ADVANCED=false npm run test test/contract.test.ts",
|
|
71
|
+
"devnet:contract": "CHAIN=devnet CLOUD=local ADVANCED=false npm run test test/contract.test.ts",
|
|
72
|
+
"lightnet:contract": "CHAIN=lightnet CLOUD=local ADVANCED=false npm run test test/contract.test.ts",
|
|
73
|
+
"zeko:contract": "CHAIN=zeko CLOUD=local ADVANCED=false npm run test test/contract.test.ts",
|
|
74
|
+
"local:bb": "CHAIN=local CLOUD=local npm run test test/bb.test.ts",
|
|
75
|
+
"devnet:bb": "CHAIN=devnet CLOUD=local npm run test test/bb.test.ts",
|
|
76
|
+
"lightnet:bb": "CHAIN=lightnet CLOUD=local npm run test test/bb.test.ts",
|
|
77
|
+
"zeko:bb": "CHAIN=zeko CLOUD=local npm run test test/bb.test.ts",
|
|
78
|
+
"local:auction": "CHAIN=local CLOUD=local SHARES=true WITHDRAW=false APPROVE_TRANSFER=true ADVANCED=true NO_LOG=false npm run test test/auction.test.ts",
|
|
79
|
+
"devnet:auction": "CHAIN=devnet CLOUD=local SHARES=true WITHDRAW=false APPROVE_TRANSFER=true ADVANCED=true NO_LOG=false npm run test test/auction.test.ts",
|
|
80
|
+
"zeko:auction": "CHAIN=zeko CLOUD=local SHARES=true WITHDRAW=false APPROVE_TRANSFER=true ADVANCED=true NO_LOG=false npm run test test/auction.test.ts",
|
|
81
|
+
"lightnet:auction": "CHAIN=lightnet CLOUD=local SHARES=true WITHDRAW=false APPROVE_TRANSFER=true ADVANCED=true NO_LOG=false npm run test test/auction.test.ts",
|
|
82
|
+
"local:mint": "CHAIN=local CLOUD=local npm run test test/mint.test.ts",
|
|
83
|
+
"devnet:mint": "CHAIN=devnet CLOUD=local npm run test test/mint.test.ts",
|
|
84
|
+
"lightnet:mint": "CHAIN=lightnet CLOUD=local npm run test test/mint.test.ts",
|
|
85
|
+
"devnet:algolia": "CHAIN=devnet npm run test test/algolia.test.ts",
|
|
86
|
+
"local:zkprogram": "CHAIN=local CLOUD=local READ_ONLY=false npm run test test/zkprogram.test.ts",
|
|
87
|
+
"devnet:zkprogram": "CHAIN=devnet CLOUD=local READ_ONLY=false npm run test test/zkprogram.test.ts",
|
|
88
|
+
"lightnet:zkprogram": "CHAIN=lightnet CLOUD=local READ_ONLY=false npm run test test/zkprogram.test.ts",
|
|
89
|
+
"local:auction:matrix": "CHAIN=local sh ./scripts/auction.zsh",
|
|
90
|
+
"devnet:auction:matrix": "CHAIN=devnet sh ./scripts/auction.zsh",
|
|
91
|
+
"zeko:auction:matrix": "CHAIN=zeko sh ./scripts/auction.zsh",
|
|
92
|
+
"devnet:auction:rerun": "CHAIN=devnet RERUN=6 sh ./scripts/auction.zsh",
|
|
93
|
+
"lightnet:auction:matrix": "CHAIN=lightnet sh ./scripts/auction.zsh",
|
|
94
|
+
"local:contract:matrix": "CHAIN=local sh ./scripts/contract.zsh",
|
|
95
|
+
"devnet:contract:matrix": "CHAIN=devnet sh ./scripts/contract.zsh",
|
|
96
|
+
"lightnet:contract:matrix": "CHAIN=lightnet sh ./scripts/contract.zsh",
|
|
97
|
+
"zeko:contract:matrix": "CHAIN=zeko sh ./scripts/contract.zsh",
|
|
98
|
+
"local:zkprogram:matrix": "CHAIN=local sh ./scripts/zkprogram.zsh",
|
|
99
|
+
"devnet:zkprogram:matrix": "CHAIN=devnet sh ./scripts/zkprogram.zsh",
|
|
100
|
+
"lightnet:zkprogram:matrix": "CHAIN=lightnet sh ./scripts/zkprogram.zsh",
|
|
101
|
+
"zeko:zkprogram:matrix": "CHAIN=zeko sh ./scripts/zkprogram.zsh",
|
|
102
|
+
"packed": "npm run test test/pack.test.ts",
|
|
103
|
+
"div": "npm run test test/div.test.ts",
|
|
104
|
+
"metadata": "npm run test test/metadata.test.ts",
|
|
105
|
+
"local:all": "npm run packed && npm run div && npm run metadata && NO_LOG=true npm run local:mint && npm run local:contract:matrix && npm run local:auction:matrix && npm run local:zkprogram:matrix && NO_LOG=true npm run local:bb",
|
|
106
|
+
"devnet:all": "npm run packed && npm run div && npm run metadata && NO_LOG=true npm run devnet:mint && npm run devnet:contract:matrix && npm run devnet:auction:matrix && npm run devnet:zkprogram:matrix && NO_LOG=true npm run devnet:bb",
|
|
107
|
+
"zeko:all": "npm run packed && npm run div && npm run metadata && NO_LOG=true npm run zeko:mint && npm run zeko:contract:matrix && npm run zeko:auction:matrix && npm run zeko:zkprogram:matrix && NO_LOG=true npm run zeko:bb",
|
|
108
|
+
"lightnet:all": "npm run packed && npm run div && NO_LOG=true npm run metadata && NO_LOG=true npm run lightnet:mint && npm run lightnet:contract:matrix && npm run lightnet:auction:matrix && npm run lightnet:zkprogram:matrix && NO_LOG=true npm run lightnet:bb"
|
|
62
109
|
},
|
|
63
110
|
"type": "module",
|
|
64
|
-
"types": "./dist/node/index.d.ts"
|
|
111
|
+
"types": "./dist/node/index.d.ts",
|
|
112
|
+
"c8": {
|
|
113
|
+
"extension": [
|
|
114
|
+
".ts"
|
|
115
|
+
],
|
|
116
|
+
"include": [
|
|
117
|
+
"src/**",
|
|
118
|
+
"../packages/upgradable/src/**",
|
|
119
|
+
"../packages/storage/src/**"
|
|
120
|
+
],
|
|
121
|
+
"exclude": [
|
|
122
|
+
"test/**",
|
|
123
|
+
"dist/**",
|
|
124
|
+
"coverage/**",
|
|
125
|
+
"scripts/**",
|
|
126
|
+
"**/*.d.ts"
|
|
127
|
+
],
|
|
128
|
+
"reporter": [
|
|
129
|
+
"text",
|
|
130
|
+
"lcov",
|
|
131
|
+
"html",
|
|
132
|
+
"json"
|
|
133
|
+
],
|
|
134
|
+
"all": true,
|
|
135
|
+
"instrument": true,
|
|
136
|
+
"source-map": true,
|
|
137
|
+
"produce-source-map": true
|
|
138
|
+
}
|
|
65
139
|
}
|
package/src/marketplace/bb.ts
CHANGED
|
@@ -111,6 +111,8 @@ class BB_ChangeAdminEvent extends Struct({
|
|
|
111
111
|
interface BulletinBoardDeployProps extends Exclude<DeployArgs, undefined> {
|
|
112
112
|
/** The admin. */
|
|
113
113
|
admin: PublicKey;
|
|
114
|
+
/** The fee. */
|
|
115
|
+
fee?: UInt64;
|
|
114
116
|
}
|
|
115
117
|
/**
|
|
116
118
|
* The BulletinBoard contract serves as a centralized event emitter for NFT marketplace activities.
|
|
@@ -128,10 +130,12 @@ interface BulletinBoardDeployProps extends Exclude<DeployArgs, undefined> {
|
|
|
128
130
|
*/
|
|
129
131
|
class BulletinBoard extends SmartContract {
|
|
130
132
|
@state(PublicKey) admin = State<PublicKey>();
|
|
133
|
+
@state(UInt64) fee = State<UInt64>();
|
|
131
134
|
|
|
132
135
|
async deploy(args: BulletinBoardDeployProps) {
|
|
133
136
|
await super.deploy(args);
|
|
134
137
|
this.admin.set(args.admin);
|
|
138
|
+
this.fee.set(args.fee ?? UInt64.from(100_000_000));
|
|
135
139
|
this.account.permissions.set({
|
|
136
140
|
...Permissions.default(),
|
|
137
141
|
send: Permissions.proof(),
|
|
@@ -150,13 +154,29 @@ class BulletinBoard extends SmartContract {
|
|
|
150
154
|
sale: BB_SaleEvent,
|
|
151
155
|
upgradeVerificationKey: BB_UpgradeVerificationKeyEvent,
|
|
152
156
|
changeAdmin: BB_ChangeAdminEvent,
|
|
157
|
+
withdraw: UInt64,
|
|
158
|
+
setFee: UInt64,
|
|
153
159
|
};
|
|
154
160
|
|
|
161
|
+
/**
|
|
162
|
+
* Pays the fee to prevent spamming the BulletinBoard with fake events.
|
|
163
|
+
*/
|
|
164
|
+
async payFee() {
|
|
165
|
+
const fee = this.fee.getAndRequireEquals();
|
|
166
|
+
const sender = this.sender.getUnconstrained();
|
|
167
|
+
const feeUpdate = AccountUpdate.createSigned(sender);
|
|
168
|
+
feeUpdate.body.useFullCommitment = Bool(true); // Prevent memo and fee change
|
|
169
|
+
feeUpdate.balance.subInPlace(fee);
|
|
170
|
+
this.balance.addInPlace(fee);
|
|
171
|
+
return feeUpdate;
|
|
172
|
+
}
|
|
173
|
+
|
|
155
174
|
/**
|
|
156
175
|
* Emits a new collection event.
|
|
157
176
|
* @param collection - The collection address.
|
|
158
177
|
*/
|
|
159
178
|
@method async newCollection(collection: PublicKey) {
|
|
179
|
+
await this.payFee();
|
|
160
180
|
this.emitEvent(
|
|
161
181
|
"newCollection",
|
|
162
182
|
new BB_NewCollectionEvent({
|
|
@@ -178,6 +198,7 @@ class BulletinBoard extends SmartContract {
|
|
|
178
198
|
offer: PublicKey,
|
|
179
199
|
price: UInt64
|
|
180
200
|
) {
|
|
201
|
+
await this.payFee();
|
|
181
202
|
this.emitEvent(
|
|
182
203
|
"offer",
|
|
183
204
|
new BB_OfferEvent({ collection, nft, offer, price })
|
|
@@ -190,6 +211,7 @@ class BulletinBoard extends SmartContract {
|
|
|
190
211
|
* @param nft - The NFT address.
|
|
191
212
|
*/
|
|
192
213
|
@method async cancelOffer(collection: PublicKey, nft: PublicKey) {
|
|
214
|
+
await this.payFee();
|
|
193
215
|
this.emitEvent("cancelOffer", new BB_CancelOfferEvent({ collection, nft }));
|
|
194
216
|
}
|
|
195
217
|
|
|
@@ -206,6 +228,7 @@ class BulletinBoard extends SmartContract {
|
|
|
206
228
|
bid: PublicKey,
|
|
207
229
|
price: UInt64
|
|
208
230
|
) {
|
|
231
|
+
await this.payFee();
|
|
209
232
|
this.emitEvent("bid", new BB_BidEvent({ collection, nft, bid, price }));
|
|
210
233
|
}
|
|
211
234
|
|
|
@@ -220,6 +243,7 @@ class BulletinBoard extends SmartContract {
|
|
|
220
243
|
nft: PublicKey,
|
|
221
244
|
bid: PublicKey
|
|
222
245
|
) {
|
|
246
|
+
await this.payFee();
|
|
223
247
|
this.emitEvent(
|
|
224
248
|
"cancelBid",
|
|
225
249
|
new BB_CancelBidEvent({ collection, nft, bid })
|
|
@@ -239,6 +263,7 @@ class BulletinBoard extends SmartContract {
|
|
|
239
263
|
buyer: PublicKey,
|
|
240
264
|
price: UInt64
|
|
241
265
|
) {
|
|
266
|
+
await this.payFee();
|
|
242
267
|
this.emitEvent("sale", new BB_SaleEvent({ collection, nft, buyer, price }));
|
|
243
268
|
}
|
|
244
269
|
|
|
@@ -268,6 +293,21 @@ class BulletinBoard extends SmartContract {
|
|
|
268
293
|
this.emitEvent("changeAdmin", new BB_ChangeAdminEvent({ admin }));
|
|
269
294
|
}
|
|
270
295
|
|
|
296
|
+
/**
|
|
297
|
+
* Changes the contract's fee
|
|
298
|
+
* @param fee - The new fee.
|
|
299
|
+
*/
|
|
300
|
+
@method
|
|
301
|
+
async setFee(fee: UInt64) {
|
|
302
|
+
await this.ensureOwnerSignature();
|
|
303
|
+
|
|
304
|
+
// Set the new fee
|
|
305
|
+
this.fee.set(fee);
|
|
306
|
+
|
|
307
|
+
// Emit the change fee event
|
|
308
|
+
this.emitEvent("setFee", fee);
|
|
309
|
+
}
|
|
310
|
+
|
|
271
311
|
/**
|
|
272
312
|
* Upgrades the contract's verification key after validating with the upgrade authority.
|
|
273
313
|
* @param vk - The new verification key to upgrade to.
|
|
@@ -285,4 +325,15 @@ class BulletinBoard extends SmartContract {
|
|
|
285
325
|
new BB_UpgradeVerificationKeyEvent({ vk: vk.hash })
|
|
286
326
|
);
|
|
287
327
|
}
|
|
328
|
+
|
|
329
|
+
/**
|
|
330
|
+
* Withdraws the fee by admin
|
|
331
|
+
*/
|
|
332
|
+
@method
|
|
333
|
+
async withdraw(amount: UInt64) {
|
|
334
|
+
const adminUpdate = await this.ensureOwnerSignature();
|
|
335
|
+
adminUpdate.balance.addInPlace(amount);
|
|
336
|
+
this.balance.subInPlace(amount);
|
|
337
|
+
this.emitEvent("withdraw", amount);
|
|
338
|
+
}
|
|
288
339
|
}
|