@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.
@@ -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":"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"}
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": "Silvana - Mina NFT library",
4
- "version": "0.1.31",
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/storage": "0.1.31",
13
- "@silvana-one/token": "0.1.31",
14
- "@silvana-one/upgradable": "0.1.31",
15
- "@types/node": "^22.10.2",
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
- "typescript": "^5.7.2"
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.31",
50
- "@silvana-one/token": "0.1.31",
51
- "@silvana-one/upgradable": "0.1.31",
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
  }
@@ -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
  }