@silvana-one/nft 0.2.11 → 1.0.0

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.
Files changed (81) hide show
  1. package/README.md +12 -0
  2. package/dist/node/contracts/admin.d.ts +100 -10
  3. package/dist/node/contracts/admin.js +130 -29
  4. package/dist/node/contracts/admin.js.map +1 -1
  5. package/dist/node/contracts/collection.d.ts +51 -34
  6. package/dist/node/contracts/collection.js +162 -71
  7. package/dist/node/contracts/collection.js.map +1 -1
  8. package/dist/node/contracts/nft.js +3 -0
  9. package/dist/node/contracts/nft.js.map +1 -1
  10. package/dist/node/contracts.d.ts +36 -30
  11. package/dist/node/index.cjs +447 -182
  12. package/dist/node/interfaces/collection.d.ts +5 -5
  13. package/dist/node/interfaces/events.d.ts +306 -16
  14. package/dist/node/interfaces/events.js +42 -4
  15. package/dist/node/interfaces/events.js.map +1 -1
  16. package/dist/node/interfaces/ownable.d.ts +7 -7
  17. package/dist/node/interfaces/ownable.js.map +1 -1
  18. package/dist/node/interfaces/pausable.d.ts +3 -3
  19. package/dist/node/interfaces/pausable.js.map +1 -1
  20. package/dist/node/interfaces/types.d.ts +182 -27
  21. package/dist/node/interfaces/types.js +120 -71
  22. package/dist/node/interfaces/types.js.map +1 -1
  23. package/dist/node/marketplace/auction.d.ts +2 -2
  24. package/dist/node/marketplace/auction.js +4 -4
  25. package/dist/node/marketplace/auction.js.map +1 -1
  26. package/dist/node/marketplace/bid.js +3 -5
  27. package/dist/node/marketplace/bid.js.map +1 -1
  28. package/dist/node/marketplace/nft-shares.d.ts +2 -2
  29. package/dist/node/util/div.js +10 -5
  30. package/dist/node/util/div.js.map +1 -1
  31. package/dist/node/vk.js +6 -6
  32. package/dist/node/vk.js.map +1 -1
  33. package/dist/node/zkprogram-example/game.d.ts +2 -2
  34. package/dist/node/zkprogram-example/update.d.ts +2 -2
  35. package/dist/tsconfig.node.tsbuildinfo +1 -1
  36. package/dist/tsconfig.web.tsbuildinfo +1 -1
  37. package/dist/web/contracts/admin.d.ts +100 -10
  38. package/dist/web/contracts/admin.js +130 -29
  39. package/dist/web/contracts/admin.js.map +1 -1
  40. package/dist/web/contracts/collection.d.ts +51 -34
  41. package/dist/web/contracts/collection.js +162 -71
  42. package/dist/web/contracts/collection.js.map +1 -1
  43. package/dist/web/contracts/nft.js +3 -0
  44. package/dist/web/contracts/nft.js.map +1 -1
  45. package/dist/web/contracts.d.ts +36 -30
  46. package/dist/web/interfaces/collection.d.ts +5 -5
  47. package/dist/web/interfaces/events.d.ts +306 -16
  48. package/dist/web/interfaces/events.js +42 -4
  49. package/dist/web/interfaces/events.js.map +1 -1
  50. package/dist/web/interfaces/ownable.d.ts +7 -7
  51. package/dist/web/interfaces/ownable.js.map +1 -1
  52. package/dist/web/interfaces/pausable.d.ts +3 -3
  53. package/dist/web/interfaces/pausable.js.map +1 -1
  54. package/dist/web/interfaces/types.d.ts +182 -27
  55. package/dist/web/interfaces/types.js +120 -71
  56. package/dist/web/interfaces/types.js.map +1 -1
  57. package/dist/web/marketplace/auction.d.ts +2 -2
  58. package/dist/web/marketplace/auction.js +4 -4
  59. package/dist/web/marketplace/auction.js.map +1 -1
  60. package/dist/web/marketplace/bid.js +3 -5
  61. package/dist/web/marketplace/bid.js.map +1 -1
  62. package/dist/web/marketplace/nft-shares.d.ts +2 -2
  63. package/dist/web/util/div.js +10 -5
  64. package/dist/web/util/div.js.map +1 -1
  65. package/dist/web/vk.js +6 -6
  66. package/dist/web/vk.js.map +1 -1
  67. package/dist/web/zkprogram-example/game.d.ts +2 -2
  68. package/dist/web/zkprogram-example/update.d.ts +2 -2
  69. package/package.json +8 -8
  70. package/src/contracts/admin.ts +137 -24
  71. package/src/contracts/collection.ts +188 -96
  72. package/src/contracts/nft.ts +3 -0
  73. package/src/interfaces/collection.ts +11 -5
  74. package/src/interfaces/events.ts +47 -3
  75. package/src/interfaces/ownable.ts +1 -1
  76. package/src/interfaces/pausable.ts +1 -1
  77. package/src/interfaces/types.ts +152 -78
  78. package/src/marketplace/auction.ts +5 -4
  79. package/src/marketplace/bid.ts +4 -6
  80. package/src/util/div.ts +12 -5
  81. package/src/vk.ts +6 -6
@@ -1 +1 @@
1
- {"version":3,"file":"div.js","sourceRoot":"","sources":["../../../src/util/div.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEhE,MAAM,OAAO,YAAa,SAAQ,MAAM,CAAC;IACvC,MAAM,EAAE,MAAM;IACd,SAAS,EAAE,MAAM;CAClB,CAAC;CAAG;AAEL,MAAM,oBAAqB,SAAQ,MAAM,CAAC;IACxC,MAAM,EAAE,KAAK;IACb,SAAS,EAAE,KAAK;CACjB,CAAC;CAAG;AAEL,MAAM,UAAU,MAAM,CAAC,MAItB;IACC,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IAClD,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAC,8CAA8C;IAC/G,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,oBAAoB,EAAE,GAAG,EAAE;QACzD,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QACrC,MAAM,gBAAgB,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC;QAC/C,MAAM,iBAAiB,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAC;QACjD,oGAAoG;QACpG,IAAI,iBAAiB,KAAK,EAAE,EAAE,CAAC;YAC7B,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QAC/D,CAAC;QACD,MAAM,MAAM,GAAG,CAAC,WAAW,GAAG,gBAAgB,CAAC,GAAG,iBAAiB,CAAC;QACpE,MAAM,SAAS,GACb,WAAW,GAAG,gBAAgB,GAAG,MAAM,GAAG,iBAAiB,CAAC;QAC9D,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;IAC1E,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACpC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACvC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,8CAA8C;IAClG,MAAM,CAAC,MAAM;SACV,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC;SACtB,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC;SACrB,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,8CAA8C;IAClG,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;QAC9C,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC;KACrD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"div.js","sourceRoot":"","sources":["../../../src/util/div.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEhE,MAAM,OAAO,YAAa,SAAQ,MAAM,CAAC;IACvC,MAAM,EAAE,MAAM;IACd,SAAS,EAAE,MAAM;CAClB,CAAC;CAAG;AAEL,MAAM,oBAAqB,SAAQ,MAAM,CAAC;IACxC,MAAM,EAAE,KAAK;IACb,SAAS,EAAE,KAAK;CACjB,CAAC;CAAG;AAEL,MAAM,UAAU,MAAM,CAAC,MAItB;IACC,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IAClD,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAC,8CAA8C;IAC/G,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,oBAAoB,EAAE,GAAG,EAAE;QACzD,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QACrC,MAAM,gBAAgB,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC;QAC/C,MAAM,iBAAiB,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAC;QACjD,oGAAoG;QACpG,IAAI,iBAAiB,KAAK,EAAE,EAAE,CAAC;YAC7B,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QAC/D,CAAC;QACD,MAAM,MAAM,GAAG,CAAC,WAAW,GAAG,gBAAgB,CAAC,GAAG,iBAAiB,CAAC;QACpE,MAAM,SAAS,GACb,WAAW,GAAG,gBAAgB,GAAG,MAAM,GAAG,iBAAiB,CAAC;QAC9D,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;IAC1E,CAAC,CAAC,CAAC;IACH,yHAAyH;IACzH,6EAA6E;IAC7E,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtD,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAE5D,SAAS,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,8CAA8C;IAErF,oEAAoE;IACpE,MAAM,CAAC,KAAK;SACT,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC;SACtB,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC;SACpB,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,8CAA8C;IAClG,OAAO;QACL,MAAM;QACN,SAAS;KACV,CAAC;AACJ,CAAC"}
package/dist/web/vk.js CHANGED
@@ -22,21 +22,21 @@
22
22
  */
23
23
  export const nftVerificationKeys = {
24
24
  devnet: {
25
- o1js: "2.2.0",
25
+ o1js: "2.3.0",
26
26
  vk: {
27
27
  NFT: {
28
- hash: "11840382732064931640435917684245815329181717734233274982467687213333743677377",
29
- data: "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",
28
+ hash: "9783798445384315170525620826037823720996093317060506623212107011216804106668",
29
+ data: "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",
30
30
  type: "nft",
31
31
  },
32
32
  },
33
33
  },
34
34
  mainnet: {
35
- o1js: "2.2.0",
35
+ o1js: "2.3.0",
36
36
  vk: {
37
37
  NFT: {
38
- hash: "11510318025893859422482952918693907155880273225165466507725691048640041393360",
39
- data: "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",
38
+ hash: "22175359608429605539570936386638550990144108869927626059283446793366639887120",
39
+ data: "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",
40
40
  type: "nft",
41
41
  },
42
42
  },
@@ -1 +1 @@
1
- {"version":3,"file":"vk.js","sourceRoot":"","sources":["../../src/vk.ts"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAW5B;IACF,MAAM,EAAE;QACN,IAAI,EAAE,OAAO;QACb,EAAE,EAAE;YACF,GAAG,EAAE;gBACH,IAAI,EAAE,+EAA+E;gBACrF,IAAI,EAAE,81EAA81E;gBACp2E,IAAI,EAAE,KAAK;aACZ;SACF;KACF;IACD,OAAO,EAAE;QACP,IAAI,EAAE,OAAO;QACb,EAAE,EAAE;YACF,GAAG,EAAE;gBACH,IAAI,EAAE,+EAA+E;gBACrF,IAAI,EAAE,81EAA81E;gBACp2E,IAAI,EAAE,KAAK;aACZ;SACF;KACF;CACF,CAAC"}
1
+ {"version":3,"file":"vk.js","sourceRoot":"","sources":["../../src/vk.ts"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAW5B;IACF,MAAM,EAAE;QACN,IAAI,EAAE,OAAO;QACb,EAAE,EAAE;YACF,GAAG,EAAE;gBACH,IAAI,EAAE,8EAA8E;gBACpF,IAAI,EAAE,81EAA81E;gBACp2E,IAAI,EAAE,KAAK;aACZ;SACF;KACF;IACD,OAAO,EAAE;QACP,IAAI,EAAE,OAAO;QACb,EAAE,EAAE;YACF,GAAG,EAAE;gBACH,IAAI,EAAE,+EAA+E;gBACrF,IAAI,EAAE,81EAA81E;gBACp2E,IAAI,EAAE,KAAK;aACZ;SACF;KACF;CACF,CAAC"}
@@ -129,7 +129,7 @@ declare const NFTGameProgram: {
129
129
  storage: Storage | {
130
130
  url: import("node_modules/o1js/dist/node/lib/provable/field.js").Field[] | bigint[];
131
131
  };
132
- version: number | bigint | import("o1js").UInt32;
132
+ version: number | bigint | import("o1js").UInt64;
133
133
  isPaused: boolean | import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool;
134
134
  metadataVerificationKeyHash: string | number | bigint | import("node_modules/o1js/dist/node/lib/provable/field.js").Field;
135
135
  creator: PublicKey | {
@@ -197,7 +197,7 @@ declare const NFTGameProgram: {
197
197
  storage: Storage | {
198
198
  url: import("node_modules/o1js/dist/node/lib/provable/field.js").Field[] | bigint[];
199
199
  };
200
- version: number | bigint | import("o1js").UInt32;
200
+ version: number | bigint | import("o1js").UInt64;
201
201
  isPaused: boolean | import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool;
202
202
  metadataVerificationKeyHash: string | number | bigint | import("node_modules/o1js/dist/node/lib/provable/field.js").Field;
203
203
  creator: PublicKey | {
@@ -129,7 +129,7 @@ declare const NFTProgram: {
129
129
  storage: import("@silvana-one/storage").Storage | {
130
130
  url: import("node_modules/o1js/dist/node/lib/provable/field.js").Field[] | bigint[];
131
131
  };
132
- version: number | bigint | import("o1js").UInt32;
132
+ version: number | bigint | import("o1js").UInt64;
133
133
  isPaused: boolean | import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool;
134
134
  metadataVerificationKeyHash: string | number | bigint | import("node_modules/o1js/dist/node/lib/provable/field.js").Field;
135
135
  creator: import("o1js").PublicKey | {
@@ -192,7 +192,7 @@ declare const NFTProgram: {
192
192
  storage: import("@silvana-one/storage").Storage | {
193
193
  url: import("node_modules/o1js/dist/node/lib/provable/field.js").Field[] | bigint[];
194
194
  };
195
- version: number | bigint | import("o1js").UInt32;
195
+ version: number | bigint | import("o1js").UInt64;
196
196
  isPaused: boolean | import("node_modules/o1js/dist/node/lib/provable/bool.js").Bool;
197
197
  metadataVerificationKeyHash: string | number | bigint | import("node_modules/o1js/dist/node/lib/provable/field.js").Field;
198
198
  creator: import("o1js").PublicKey | {
package/package.json CHANGED
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "name": "@silvana-one/nft",
3
3
  "description": "Mina NFT library",
4
- "version": "0.2.11",
4
+ "version": "1.0.0",
5
5
  "author": "DFST",
6
6
  "bugs": "https://github.com/SilvanaOne/silvana-lib/issues",
7
7
  "dependencies": {
8
8
  "tslib": "^2.8.1"
9
9
  },
10
10
  "devDependencies": {
11
- "@silvana-one/mina-utils": "0.2.11",
12
- "@silvana-one/storage": "0.2.11",
13
- "@silvana-one/token": "0.2.11",
14
- "@silvana-one/upgradable": "0.2.11",
11
+ "@silvana-one/mina-utils": "1.0.0",
12
+ "@silvana-one/storage": "1.0.0",
13
+ "@silvana-one/token": "1.0.0",
14
+ "@silvana-one/upgradable": "1.0.0",
15
15
  "@types/node": "^22.13.8",
16
16
  "c8": "^10.1.3",
17
17
  "dotenv": "^16.4.7",
@@ -50,9 +50,9 @@
50
50
  "license": "Apache-2.0",
51
51
  "main": "dist/web/index.js",
52
52
  "peerDependencies": {
53
- "@silvana-one/storage": "0.2.11",
54
- "@silvana-one/token": "0.2.11",
55
- "@silvana-one/upgradable": "0.2.11",
53
+ "@silvana-one/storage": "1.0.0",
54
+ "@silvana-one/token": "1.0.0",
55
+ "@silvana-one/upgradable": "1.0.0",
56
56
  "o1js": "^2.3.0"
57
57
  },
58
58
  "publishConfig": {
@@ -12,6 +12,9 @@ import {
12
12
  Field,
13
13
  AccountUpdate,
14
14
  UInt32,
15
+ UInt8,
16
+ Struct,
17
+ assert,
15
18
  } from "o1js";
16
19
  import {
17
20
  MintRequest,
@@ -24,7 +27,7 @@ import {
24
27
  OwnableContract,
25
28
  TransferEvent,
26
29
  } from "../interfaces/index.js";
27
- export { NFTAdmin, NFTAdminDeployProps };
30
+ export { NFTAdmin, NFTAdminDeployProps, NFTAdminAllowFlags };
28
31
 
29
32
  interface NFTAdminDeployProps extends Exclude<DeployArgs, undefined> {
30
33
  admin: PublicKey;
@@ -32,9 +35,52 @@ interface NFTAdminDeployProps extends Exclude<DeployArgs, undefined> {
32
35
  canBePaused?: Bool;
33
36
  allowChangeRoyalty?: Bool;
34
37
  allowChangeTransferFee?: Bool;
38
+ allowPauseCollection?: Bool;
35
39
  isPaused?: Bool;
36
40
  }
37
41
 
42
+ /**
43
+ * Contains flags for the admin contract related to the NFT collection permissions.
44
+ */
45
+ class NFTAdminAllowFlags extends Struct({
46
+ allowChangeRoyalty: Bool,
47
+ allowChangeTransferFee: Bool,
48
+ allowPauseCollection: Bool,
49
+ }) {
50
+ /**
51
+ * Packs the NFTAdminAllowFlags into a UInt8 representation for efficient storage.
52
+ * @returns The packed UInt8 instance.
53
+ */
54
+ pack(): UInt8 {
55
+ return UInt8.from(
56
+ Field.fromBits([
57
+ this.allowChangeRoyalty,
58
+ this.allowChangeTransferFee,
59
+ this.allowPauseCollection,
60
+ ])
61
+ );
62
+ }
63
+
64
+ /**
65
+ * Unpacks a UInt8 instance into a NFTAdminAllowFlags instance.
66
+ * @param packed The packed UInt8 instance.
67
+ * @returns A new NFTAdminAllowFlags instance.
68
+ */
69
+ static unpack(packed: UInt8): NFTAdminAllowFlags {
70
+ const bits = packed.value.toBits(3);
71
+
72
+ const allowChangeRoyalty = bits[0];
73
+ const allowChangeTransferFee = bits[1];
74
+ const allowPauseCollection = bits[2];
75
+
76
+ return new NFTAdminAllowFlags({
77
+ allowChangeRoyalty,
78
+ allowChangeTransferFee,
79
+ allowPauseCollection,
80
+ });
81
+ }
82
+ }
83
+
38
84
  /**
39
85
  * The **NFTAdmin** contract serves as the foundational administrative layer for NFT collections on the Mina Protocol.
40
86
  * It provides essential functionalities such as contract upgrades, pausing and resuming operations, and ownership management.
@@ -51,6 +97,11 @@ class NFTAdmin
51
97
  */
52
98
  @state(PublicKey) admin = State<PublicKey>();
53
99
 
100
+ /**
101
+ * The public key of the contract's pending administrator.
102
+ */
103
+ @state(PublicKey) pendingAdmin = State<PublicKey>();
104
+
54
105
  /**
55
106
  * A boolean flag indicating whether the contract is currently paused.
56
107
  * When `true`, certain operations are disabled.
@@ -64,14 +115,9 @@ class NFTAdmin
64
115
  @state(Bool) canBePaused = State<Bool>();
65
116
 
66
117
  /**
67
- * A boolean flag indicating whether the contract has the ability to change the royalty fee.
118
+ * A boolean flags indicating whether the collection is allowed to change the royalty fee, transfer fee and pause the collection.
68
119
  */
69
- @state(Bool) allowChangeRoyalty = State<Bool>();
70
-
71
- /**
72
- * A boolean flag indicating whether the contract has the ability to change the transfer fee.
73
- */
74
- @state(Bool) allowChangeTransferFee = State<Bool>();
120
+ @state(UInt8) flags = State<UInt8>();
75
121
 
76
122
  /**
77
123
  * Deploys the contract with initial settings.
@@ -79,12 +125,22 @@ class NFTAdmin
79
125
  */
80
126
  async deploy(props: NFTAdminDeployProps) {
81
127
  await super.deploy(props);
128
+ const isPaused = props.isPaused ?? Bool(false);
129
+ const canBePaused = props.canBePaused ?? Bool(true);
130
+ assert(
131
+ isPaused.equals(Bool(false)).or(canBePaused.equals(Bool(true))),
132
+ "Cannot deploy paused contract that cannot be resumed"
133
+ );
82
134
  this.admin.set(props.admin);
83
- this.isPaused.set(props.isPaused ?? Bool(false));
84
- this.canBePaused.set(props.canBePaused ?? Bool(true));
85
- this.allowChangeRoyalty.set(props.allowChangeRoyalty ?? Bool(false));
86
- this.allowChangeTransferFee.set(
87
- props.allowChangeTransferFee ?? Bool(false)
135
+ this.pendingAdmin.set(PublicKey.empty());
136
+ this.isPaused.set(isPaused);
137
+ this.canBePaused.set(canBePaused);
138
+ this.flags.set(
139
+ new NFTAdminAllowFlags({
140
+ allowChangeRoyalty: props.allowChangeRoyalty ?? Bool(false),
141
+ allowChangeTransferFee: props.allowChangeTransferFee ?? Bool(false),
142
+ allowPauseCollection: props.allowPauseCollection ?? Bool(true),
143
+ }).pack()
88
144
  );
89
145
  this.account.zkappUri.set(props.uri);
90
146
  this.account.permissions.set({
@@ -96,8 +152,8 @@ class NFTAdmin
96
152
  setPermissions: Permissions.impossible(),
97
153
  access: Permissions.proof(),
98
154
  send: Permissions.proof(),
99
- setZkappUri: Permissions.none(),
100
- setTokenSymbol: Permissions.none(),
155
+ setZkappUri: Permissions.proof(),
156
+ setTokenSymbol: Permissions.proof(),
101
157
  });
102
158
  }
103
159
 
@@ -112,7 +168,9 @@ class NFTAdmin
112
168
  /** Emitted when the contract is resumed. */
113
169
  resume: PauseEvent,
114
170
  /** Emitted when ownership of the contract changes. */
115
- ownershipChange: OwnershipChangeEvent,
171
+ ownershipTransfer: OwnershipChangeEvent,
172
+ /** Emitted when ownership of the contract is accepted. */
173
+ ownershipAccepted: OwnershipChangeEvent,
116
174
  };
117
175
 
118
176
  /**
@@ -149,6 +207,8 @@ class NFTAdmin
149
207
  */
150
208
  @method.returns(MintParamsOption)
151
209
  async canMint(mintRequest: MintRequest): Promise<MintParamsOption> {
210
+ const isPaused = this.isPaused.getAndRequireEquals();
211
+ isPaused.assertFalse("Contract is paused");
152
212
  // Only the creator can mint by default
153
213
  return MintParamsOption.none();
154
214
  }
@@ -162,6 +222,8 @@ class NFTAdmin
162
222
  */
163
223
  @method.returns(Bool)
164
224
  async canUpdate(input: NFTState, output: NFTState): Promise<Bool> {
225
+ const isPaused = this.isPaused.getAndRequireEquals();
226
+ isPaused.assertFalse("Contract is paused");
165
227
  return Bool(true);
166
228
  }
167
229
 
@@ -172,6 +234,8 @@ class NFTAdmin
172
234
  */
173
235
  @method.returns(Bool)
174
236
  async canTransfer(transferEvent: TransferEvent): Promise<Bool> {
237
+ const isPaused = this.isPaused.getAndRequireEquals();
238
+ isPaused.assertFalse("Contract is paused");
175
239
  return Bool(true);
176
240
  }
177
241
 
@@ -202,17 +266,18 @@ class NFTAdmin
202
266
  /**
203
267
  * Transfers ownership of the contract to a new admin.
204
268
  * @param to - The public key of the new owner.
205
- * @returns The public key of the previous owner.
269
+ * @returns The public key of the previous admin.
206
270
  */
207
271
  @method.returns(PublicKey)
208
272
  async transferOwnership(to: PublicKey): Promise<PublicKey> {
209
273
  const isPaused = this.isPaused.getAndRequireEquals();
210
- isPaused.assertTrue("Contract is paused");
274
+ isPaused.assertFalse("Contract is paused");
211
275
  await this.ensureOwnerSignature();
212
276
  const from = this.admin.getAndRequireEquals();
213
- this.admin.set(to);
277
+ // Pending admin public key can be empty, it cancels the transfer
278
+ this.pendingAdmin.set(to);
214
279
  this.emitEvent(
215
- "ownershipChange",
280
+ "ownershipTransfer",
216
281
  new OwnershipChangeEvent({
217
282
  from,
218
283
  to,
@@ -221,6 +286,34 @@ class NFTAdmin
221
286
  return from;
222
287
  }
223
288
 
289
+ /**
290
+ * Accept transfer of the ownership of the contract.
291
+ * @returns The public key of the previous admin.
292
+ */
293
+ @method.returns(PublicKey)
294
+ async acceptOwnership(): Promise<PublicKey> {
295
+ const isPaused = this.isPaused.getAndRequireEquals();
296
+ isPaused.assertFalse("Contract is paused");
297
+ const admin = this.admin.getAndRequireEquals();
298
+ const pendingAdmin = this.pendingAdmin.getAndRequireEquals();
299
+ pendingAdmin
300
+ .equals(PublicKey.empty())
301
+ .assertFalse("Pending admin is not set");
302
+ // pendingAdmin can be different from the sender, but it should sign the tx
303
+ const pendingAminUpdate = AccountUpdate.createSigned(pendingAdmin);
304
+ pendingAminUpdate.body.useFullCommitment = Bool(true); // Prevent memo and fee change
305
+ this.admin.set(pendingAdmin);
306
+ this.pendingAdmin.set(PublicKey.empty());
307
+ this.emitEvent(
308
+ "ownershipAccepted",
309
+ new OwnershipChangeEvent({
310
+ from: admin,
311
+ to: pendingAdmin,
312
+ })
313
+ );
314
+ return admin;
315
+ }
316
+
224
317
  @method.returns(Bool)
225
318
  async canChangeVerificationKey(
226
319
  vk: VerificationKey,
@@ -236,6 +329,8 @@ class NFTAdmin
236
329
  */
237
330
  @method.returns(Bool)
238
331
  async canChangeName(name: Field): Promise<Bool> {
332
+ const isPaused = this.isPaused.getAndRequireEquals();
333
+ isPaused.assertFalse("Contract is paused");
239
334
  return Bool(false);
240
335
  }
241
336
 
@@ -244,6 +339,8 @@ class NFTAdmin
244
339
  */
245
340
  @method.returns(Bool)
246
341
  async canChangeCreator(creator: PublicKey): Promise<Bool> {
342
+ const isPaused = this.isPaused.getAndRequireEquals();
343
+ isPaused.assertFalse("Contract is paused");
247
344
  return Bool(false);
248
345
  }
249
346
 
@@ -252,6 +349,8 @@ class NFTAdmin
252
349
  */
253
350
  @method.returns(Bool)
254
351
  async canChangeBaseUri(baseUri: Field): Promise<Bool> {
352
+ const isPaused = this.isPaused.getAndRequireEquals();
353
+ isPaused.assertFalse("Contract is paused");
255
354
  return Bool(false);
256
355
  }
257
356
 
@@ -260,8 +359,11 @@ class NFTAdmin
260
359
  */
261
360
  @method.returns(Bool)
262
361
  async canChangeRoyalty(royaltyFee: UInt32): Promise<Bool> {
362
+ const isPaused = this.isPaused.getAndRequireEquals();
363
+ isPaused.assertFalse("Contract is paused");
263
364
  await this.ensureOwnerSignature();
264
- return this.allowChangeRoyalty.getAndRequireEquals();
365
+ const flags = NFTAdminAllowFlags.unpack(this.flags.getAndRequireEquals());
366
+ return flags.allowChangeRoyalty;
265
367
  }
266
368
 
267
369
  /**
@@ -269,8 +371,11 @@ class NFTAdmin
269
371
  */
270
372
  @method.returns(Bool)
271
373
  async canChangeTransferFee(transferFee: UInt64): Promise<Bool> {
374
+ const isPaused = this.isPaused.getAndRequireEquals();
375
+ isPaused.assertFalse("Contract is paused");
272
376
  await this.ensureOwnerSignature();
273
- return this.allowChangeTransferFee.getAndRequireEquals();
377
+ const flags = NFTAdminAllowFlags.unpack(this.flags.getAndRequireEquals());
378
+ return flags.allowChangeTransferFee;
274
379
  }
275
380
 
276
381
  /**
@@ -278,6 +383,8 @@ class NFTAdmin
278
383
  */
279
384
  @method.returns(Bool)
280
385
  async canSetAdmin(admin: PublicKey): Promise<Bool> {
386
+ const isPaused = this.isPaused.getAndRequireEquals();
387
+ isPaused.assertFalse("Contract is paused");
281
388
  return Bool(false);
282
389
  }
283
390
 
@@ -286,8 +393,11 @@ class NFTAdmin
286
393
  */
287
394
  @method.returns(Bool)
288
395
  async canPause(): Promise<Bool> {
396
+ const isPaused = this.isPaused.getAndRequireEquals();
397
+ isPaused.assertFalse("Contract is paused");
289
398
  await this.ensureOwnerSignature();
290
- return this.canBePaused.getAndRequireEquals();
399
+ const flags = NFTAdminAllowFlags.unpack(this.flags.getAndRequireEquals());
400
+ return flags.allowPauseCollection;
291
401
  }
292
402
 
293
403
  /**
@@ -295,7 +405,10 @@ class NFTAdmin
295
405
  */
296
406
  @method.returns(Bool)
297
407
  async canResume(): Promise<Bool> {
408
+ const isPaused = this.isPaused.getAndRequireEquals();
409
+ isPaused.assertFalse("Contract is paused");
298
410
  await this.ensureOwnerSignature();
299
- return this.canBePaused.getAndRequireEquals();
411
+ const flags = NFTAdminAllowFlags.unpack(this.flags.getAndRequireEquals());
412
+ return flags.allowPauseCollection;
300
413
  }
301
414
  }