@silvana-one/nft 0.1.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 (236) hide show
  1. package/README.md +1400 -0
  2. package/dist/node/admin/advanced.d.ts +469 -0
  3. package/dist/node/admin/advanced.js +525 -0
  4. package/dist/node/admin/advanced.js.map +1 -0
  5. package/dist/node/admin/index.d.ts +1 -0
  6. package/dist/node/admin/index.js +2 -0
  7. package/dist/node/admin/index.js.map +1 -0
  8. package/dist/node/contracts/admin.d.ts +140 -0
  9. package/dist/node/contracts/admin.js +336 -0
  10. package/dist/node/contracts/admin.js.map +1 -0
  11. package/dist/node/contracts/collection.d.ts +551 -0
  12. package/dist/node/contracts/collection.js +1049 -0
  13. package/dist/node/contracts/collection.js.map +1 -0
  14. package/dist/node/contracts/index.d.ts +3 -0
  15. package/dist/node/contracts/index.js +4 -0
  16. package/dist/node/contracts/index.js.map +1 -0
  17. package/dist/node/contracts/nft.d.ts +76 -0
  18. package/dist/node/contracts/nft.js +329 -0
  19. package/dist/node/contracts/nft.js.map +1 -0
  20. package/dist/node/contracts.d.ts +709 -0
  21. package/dist/node/contracts.js +61 -0
  22. package/dist/node/contracts.js.map +1 -0
  23. package/dist/node/index.cjs +5032 -0
  24. package/dist/node/index.d.ts +8 -0
  25. package/dist/node/index.js +9 -0
  26. package/dist/node/index.js.map +1 -0
  27. package/dist/node/interfaces/admin.d.ts +102 -0
  28. package/dist/node/interfaces/admin.js +2 -0
  29. package/dist/node/interfaces/admin.js.map +1 -0
  30. package/dist/node/interfaces/approval.d.ts +57 -0
  31. package/dist/node/interfaces/approval.js +62 -0
  32. package/dist/node/interfaces/approval.js.map +1 -0
  33. package/dist/node/interfaces/collection.d.ts +57 -0
  34. package/dist/node/interfaces/collection.js +2 -0
  35. package/dist/node/interfaces/collection.js.map +1 -0
  36. package/dist/node/interfaces/encoding.d.ts +24 -0
  37. package/dist/node/interfaces/encoding.js +32 -0
  38. package/dist/node/interfaces/encoding.js.map +1 -0
  39. package/dist/node/interfaces/events.d.ts +833 -0
  40. package/dist/node/interfaces/events.js +106 -0
  41. package/dist/node/interfaces/events.js.map +1 -0
  42. package/dist/node/interfaces/index.d.ts +10 -0
  43. package/dist/node/interfaces/index.js +11 -0
  44. package/dist/node/interfaces/index.js.map +1 -0
  45. package/dist/node/interfaces/ownable.d.ts +94 -0
  46. package/dist/node/interfaces/ownable.js +12 -0
  47. package/dist/node/interfaces/ownable.js.map +1 -0
  48. package/dist/node/interfaces/owner.d.ts +61 -0
  49. package/dist/node/interfaces/owner.js +101 -0
  50. package/dist/node/interfaces/owner.js.map +1 -0
  51. package/dist/node/interfaces/pausable.d.ts +74 -0
  52. package/dist/node/interfaces/pausable.js +14 -0
  53. package/dist/node/interfaces/pausable.js.map +1 -0
  54. package/dist/node/interfaces/types.d.ts +2297 -0
  55. package/dist/node/interfaces/types.js +507 -0
  56. package/dist/node/interfaces/types.js.map +1 -0
  57. package/dist/node/interfaces/update.d.ts +53 -0
  58. package/dist/node/interfaces/update.js +58 -0
  59. package/dist/node/interfaces/update.js.map +1 -0
  60. package/dist/node/marketplace/auction.d.ts +775 -0
  61. package/dist/node/marketplace/auction.js +430 -0
  62. package/dist/node/marketplace/auction.js.map +1 -0
  63. package/dist/node/marketplace/bid.d.ts +254 -0
  64. package/dist/node/marketplace/bid.js +260 -0
  65. package/dist/node/marketplace/bid.js.map +1 -0
  66. package/dist/node/marketplace/index.d.ts +5 -0
  67. package/dist/node/marketplace/index.js +6 -0
  68. package/dist/node/marketplace/index.js.map +1 -0
  69. package/dist/node/marketplace/nft-shares.d.ts +1083 -0
  70. package/dist/node/marketplace/nft-shares.js +398 -0
  71. package/dist/node/marketplace/nft-shares.js.map +1 -0
  72. package/dist/node/marketplace/offer.d.ts +192 -0
  73. package/dist/node/marketplace/offer.js +132 -0
  74. package/dist/node/marketplace/offer.js.map +1 -0
  75. package/dist/node/marketplace/types.d.ts +374 -0
  76. package/dist/node/marketplace/types.js +33 -0
  77. package/dist/node/marketplace/types.js.map +1 -0
  78. package/dist/node/metadata/index.d.ts +3 -0
  79. package/dist/node/metadata/index.js +4 -0
  80. package/dist/node/metadata/index.js.map +1 -0
  81. package/dist/node/metadata/metadata.d.ts +337 -0
  82. package/dist/node/metadata/metadata.js +439 -0
  83. package/dist/node/metadata/metadata.js.map +1 -0
  84. package/dist/node/metadata/text.d.ts +44 -0
  85. package/dist/node/metadata/text.js +42 -0
  86. package/dist/node/metadata/text.js.map +1 -0
  87. package/dist/node/metadata/tree.d.ts +75 -0
  88. package/dist/node/metadata/tree.js +85 -0
  89. package/dist/node/metadata/tree.js.map +1 -0
  90. package/dist/node/vk.d.ts +42 -0
  91. package/dist/node/vk.js +45 -0
  92. package/dist/node/vk.js.map +1 -0
  93. package/dist/node/zkprogram-example/game.d.ts +76 -0
  94. package/dist/node/zkprogram-example/game.js +108 -0
  95. package/dist/node/zkprogram-example/game.js.map +1 -0
  96. package/dist/node/zkprogram-example/index.d.ts +2 -0
  97. package/dist/node/zkprogram-example/index.js +3 -0
  98. package/dist/node/zkprogram-example/index.js.map +1 -0
  99. package/dist/node/zkprogram-example/update.d.ts +76 -0
  100. package/dist/node/zkprogram-example/update.js +85 -0
  101. package/dist/node/zkprogram-example/update.js.map +1 -0
  102. package/dist/tsconfig.tsbuildinfo +1 -0
  103. package/dist/tsconfig.web.tsbuildinfo +1 -0
  104. package/dist/web/admin/advanced.d.ts +469 -0
  105. package/dist/web/admin/advanced.js +525 -0
  106. package/dist/web/admin/advanced.js.map +1 -0
  107. package/dist/web/admin/index.d.ts +1 -0
  108. package/dist/web/admin/index.js +2 -0
  109. package/dist/web/admin/index.js.map +1 -0
  110. package/dist/web/contracts/admin.d.ts +140 -0
  111. package/dist/web/contracts/admin.js +336 -0
  112. package/dist/web/contracts/admin.js.map +1 -0
  113. package/dist/web/contracts/collection.d.ts +551 -0
  114. package/dist/web/contracts/collection.js +1049 -0
  115. package/dist/web/contracts/collection.js.map +1 -0
  116. package/dist/web/contracts/index.d.ts +3 -0
  117. package/dist/web/contracts/index.js +4 -0
  118. package/dist/web/contracts/index.js.map +1 -0
  119. package/dist/web/contracts/nft.d.ts +76 -0
  120. package/dist/web/contracts/nft.js +329 -0
  121. package/dist/web/contracts/nft.js.map +1 -0
  122. package/dist/web/contracts.d.ts +709 -0
  123. package/dist/web/contracts.js +61 -0
  124. package/dist/web/contracts.js.map +1 -0
  125. package/dist/web/index.d.ts +8 -0
  126. package/dist/web/index.js +9 -0
  127. package/dist/web/index.js.map +1 -0
  128. package/dist/web/interfaces/admin.d.ts +102 -0
  129. package/dist/web/interfaces/admin.js +2 -0
  130. package/dist/web/interfaces/admin.js.map +1 -0
  131. package/dist/web/interfaces/approval.d.ts +57 -0
  132. package/dist/web/interfaces/approval.js +62 -0
  133. package/dist/web/interfaces/approval.js.map +1 -0
  134. package/dist/web/interfaces/collection.d.ts +57 -0
  135. package/dist/web/interfaces/collection.js +2 -0
  136. package/dist/web/interfaces/collection.js.map +1 -0
  137. package/dist/web/interfaces/encoding.d.ts +24 -0
  138. package/dist/web/interfaces/encoding.js +32 -0
  139. package/dist/web/interfaces/encoding.js.map +1 -0
  140. package/dist/web/interfaces/events.d.ts +833 -0
  141. package/dist/web/interfaces/events.js +106 -0
  142. package/dist/web/interfaces/events.js.map +1 -0
  143. package/dist/web/interfaces/index.d.ts +10 -0
  144. package/dist/web/interfaces/index.js +11 -0
  145. package/dist/web/interfaces/index.js.map +1 -0
  146. package/dist/web/interfaces/ownable.d.ts +94 -0
  147. package/dist/web/interfaces/ownable.js +12 -0
  148. package/dist/web/interfaces/ownable.js.map +1 -0
  149. package/dist/web/interfaces/owner.d.ts +61 -0
  150. package/dist/web/interfaces/owner.js +101 -0
  151. package/dist/web/interfaces/owner.js.map +1 -0
  152. package/dist/web/interfaces/pausable.d.ts +74 -0
  153. package/dist/web/interfaces/pausable.js +14 -0
  154. package/dist/web/interfaces/pausable.js.map +1 -0
  155. package/dist/web/interfaces/types.d.ts +2297 -0
  156. package/dist/web/interfaces/types.js +507 -0
  157. package/dist/web/interfaces/types.js.map +1 -0
  158. package/dist/web/interfaces/update.d.ts +53 -0
  159. package/dist/web/interfaces/update.js +58 -0
  160. package/dist/web/interfaces/update.js.map +1 -0
  161. package/dist/web/marketplace/auction.d.ts +775 -0
  162. package/dist/web/marketplace/auction.js +430 -0
  163. package/dist/web/marketplace/auction.js.map +1 -0
  164. package/dist/web/marketplace/bid.d.ts +254 -0
  165. package/dist/web/marketplace/bid.js +260 -0
  166. package/dist/web/marketplace/bid.js.map +1 -0
  167. package/dist/web/marketplace/index.d.ts +5 -0
  168. package/dist/web/marketplace/index.js +6 -0
  169. package/dist/web/marketplace/index.js.map +1 -0
  170. package/dist/web/marketplace/nft-shares.d.ts +1083 -0
  171. package/dist/web/marketplace/nft-shares.js +398 -0
  172. package/dist/web/marketplace/nft-shares.js.map +1 -0
  173. package/dist/web/marketplace/offer.d.ts +192 -0
  174. package/dist/web/marketplace/offer.js +132 -0
  175. package/dist/web/marketplace/offer.js.map +1 -0
  176. package/dist/web/marketplace/types.d.ts +374 -0
  177. package/dist/web/marketplace/types.js +33 -0
  178. package/dist/web/marketplace/types.js.map +1 -0
  179. package/dist/web/metadata/index.d.ts +3 -0
  180. package/dist/web/metadata/index.js +4 -0
  181. package/dist/web/metadata/index.js.map +1 -0
  182. package/dist/web/metadata/metadata.d.ts +337 -0
  183. package/dist/web/metadata/metadata.js +439 -0
  184. package/dist/web/metadata/metadata.js.map +1 -0
  185. package/dist/web/metadata/text.d.ts +44 -0
  186. package/dist/web/metadata/text.js +42 -0
  187. package/dist/web/metadata/text.js.map +1 -0
  188. package/dist/web/metadata/tree.d.ts +75 -0
  189. package/dist/web/metadata/tree.js +85 -0
  190. package/dist/web/metadata/tree.js.map +1 -0
  191. package/dist/web/vk.d.ts +42 -0
  192. package/dist/web/vk.js +45 -0
  193. package/dist/web/vk.js.map +1 -0
  194. package/dist/web/zkprogram-example/game.d.ts +76 -0
  195. package/dist/web/zkprogram-example/game.js +108 -0
  196. package/dist/web/zkprogram-example/game.js.map +1 -0
  197. package/dist/web/zkprogram-example/index.d.ts +2 -0
  198. package/dist/web/zkprogram-example/index.js +3 -0
  199. package/dist/web/zkprogram-example/index.js.map +1 -0
  200. package/dist/web/zkprogram-example/update.d.ts +76 -0
  201. package/dist/web/zkprogram-example/update.js +85 -0
  202. package/dist/web/zkprogram-example/update.js.map +1 -0
  203. package/package.json +65 -0
  204. package/src/admin/advanced.ts +601 -0
  205. package/src/admin/index.ts +1 -0
  206. package/src/contracts/admin.ts +301 -0
  207. package/src/contracts/collection.ts +1172 -0
  208. package/src/contracts/index.ts +3 -0
  209. package/src/contracts/nft.ts +344 -0
  210. package/src/contracts.ts +107 -0
  211. package/src/index.ts +8 -0
  212. package/src/interfaces/admin.ts +127 -0
  213. package/src/interfaces/approval.ts +99 -0
  214. package/src/interfaces/collection.ts +68 -0
  215. package/src/interfaces/encoding.ts +32 -0
  216. package/src/interfaces/events.ts +115 -0
  217. package/src/interfaces/index.ts +10 -0
  218. package/src/interfaces/ownable.ts +32 -0
  219. package/src/interfaces/owner.ts +143 -0
  220. package/src/interfaces/pausable.ts +41 -0
  221. package/src/interfaces/types.ts +623 -0
  222. package/src/interfaces/update.ts +104 -0
  223. package/src/marketplace/auction.ts +527 -0
  224. package/src/marketplace/bid.ts +294 -0
  225. package/src/marketplace/index.ts +5 -0
  226. package/src/marketplace/nft-shares.ts +388 -0
  227. package/src/marketplace/offer.ts +153 -0
  228. package/src/marketplace/types.ts +33 -0
  229. package/src/metadata/index.ts +3 -0
  230. package/src/metadata/metadata.ts +603 -0
  231. package/src/metadata/text.ts +60 -0
  232. package/src/metadata/tree.ts +128 -0
  233. package/src/vk.ts +64 -0
  234. package/src/zkprogram-example/game.ts +136 -0
  235. package/src/zkprogram-example/index.ts +2 -0
  236. package/src/zkprogram-example/update.ts +98 -0
@@ -0,0 +1,430 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { AccountUpdate, method, Permissions, PublicKey, State, state, UInt64, SmartContract, Bool, UInt32, Field, Struct, assert, Provable, } from "o1js";
3
+ import { UInt64Option, TransferEvent, NFTTransactionContext, TransferExtendedParams, TransferParams, } from "../interfaces/index.js";
4
+ const MAX_SALE_FEE = 100000;
5
+ const MIN_STEP = 10; // 1% to previous bid
6
+ export class AuctionPacked extends Struct({
7
+ ownerX: Field,
8
+ collectionX: Field,
9
+ nftX: Field,
10
+ auctioneerX: Field,
11
+ bidderX: Field,
12
+ data: Field,
13
+ }) {
14
+ }
15
+ export class Auction extends Struct({
16
+ owner: PublicKey,
17
+ collection: PublicKey,
18
+ nft: PublicKey,
19
+ auctioneer: PublicKey,
20
+ bidder: PublicKey,
21
+ minimumPrice: UInt64,
22
+ transferFee: UInt64,
23
+ /** The sale fee percentage (e.g., 1000 = 1%, 100 = 0.1%, 10000 = 10%, 100000 = 100%). */
24
+ saleFee: UInt32,
25
+ auctionEndTime: UInt32,
26
+ withdrawPeriod: UInt32, // in slots
27
+ isOwnerPaid: Bool,
28
+ isNFTtransferred: Bool,
29
+ isNFTwithdrawn: Bool,
30
+ }) {
31
+ pack() {
32
+ const data = Field.fromBits([
33
+ ...this.minimumPrice.value.toBits(64),
34
+ ...this.transferFee.value.toBits(64),
35
+ ...this.saleFee.value.toBits(32),
36
+ ...this.auctionEndTime.value.toBits(32),
37
+ ...this.withdrawPeriod.value.toBits(32),
38
+ this.owner.isOdd,
39
+ this.collection.isOdd,
40
+ this.nft.isOdd,
41
+ this.auctioneer.isOdd,
42
+ this.bidder.isOdd,
43
+ this.isOwnerPaid,
44
+ this.isNFTtransferred,
45
+ this.isNFTwithdrawn,
46
+ ]);
47
+ return new AuctionPacked({
48
+ ownerX: this.owner.x,
49
+ collectionX: this.collection.x,
50
+ nftX: this.nft.x,
51
+ auctioneerX: this.auctioneer.x,
52
+ bidderX: this.bidder.x,
53
+ data,
54
+ });
55
+ }
56
+ static unpack(packed) {
57
+ const bits = packed.data.toBits(64 + 64 + 32 + 32 + 32 + 8);
58
+ const ownerX = packed.ownerX;
59
+ const collectionX = packed.collectionX;
60
+ const nftX = packed.nftX;
61
+ const auctioneerX = packed.auctioneerX;
62
+ const bidderX = packed.bidderX;
63
+ const ownerIsOdd = bits[64 + 64 + 32 + 32 + 32];
64
+ const collectionIsOdd = bits[64 + 64 + 32 + 32 + 32 + 1];
65
+ const nftIsOdd = bits[64 + 64 + 32 + 32 + 32 + 2];
66
+ const auctioneerIsOdd = bits[64 + 64 + 32 + 32 + 32 + 3];
67
+ const bidderIsOdd = bits[64 + 64 + 32 + 32 + 32 + 4];
68
+ const isOwnerPaid = bits[64 + 64 + 32 + 32 + 32 + 5];
69
+ const isNFTtransferred = bits[64 + 64 + 32 + 32 + 32 + 6];
70
+ const isNFTwithdrawn = bits[64 + 64 + 32 + 32 + 32 + 7];
71
+ const owner = PublicKey.from({ x: ownerX, isOdd: ownerIsOdd });
72
+ const collection = PublicKey.from({
73
+ x: collectionX,
74
+ isOdd: collectionIsOdd,
75
+ });
76
+ const nft = PublicKey.from({ x: nftX, isOdd: nftIsOdd });
77
+ const auctioneer = PublicKey.from({
78
+ x: auctioneerX,
79
+ isOdd: auctioneerIsOdd,
80
+ });
81
+ const bidder = PublicKey.from({
82
+ x: bidderX,
83
+ isOdd: bidderIsOdd,
84
+ });
85
+ const minimumPrice = UInt64.Unsafe.fromField(Field.fromBits(bits.slice(0, 64)));
86
+ const transferFee = UInt64.Unsafe.fromField(Field.fromBits(bits.slice(64, 64 + 64)));
87
+ const saleFee = UInt32.Unsafe.fromField(Field.fromBits(bits.slice(64 + 64, 64 + 64 + 32)));
88
+ const auctionEndTime = UInt32.Unsafe.fromField(Field.fromBits(bits.slice(64 + 64 + 32, 64 + 64 + 32 + 32)));
89
+ const withdrawPeriod = UInt32.Unsafe.fromField(Field.fromBits(bits.slice(64 + 64 + 32 + 32, 64 + 64 + 32 + 32 + 32)));
90
+ return new Auction({
91
+ owner,
92
+ collection,
93
+ nft,
94
+ auctioneer,
95
+ bidder,
96
+ minimumPrice,
97
+ transferFee,
98
+ saleFee,
99
+ auctionEndTime,
100
+ withdrawPeriod,
101
+ isOwnerPaid,
102
+ isNFTtransferred,
103
+ isNFTwithdrawn,
104
+ });
105
+ }
106
+ }
107
+ export class AuctionState extends Struct({
108
+ bidAmount: UInt64,
109
+ auction: Auction,
110
+ settled: Bool,
111
+ }) {
112
+ }
113
+ export class AuctionBidEvent extends Struct({
114
+ bidder: PublicKey,
115
+ price: UInt64,
116
+ }) {
117
+ }
118
+ /**
119
+ * Creates a new NFT Collection Contract class.
120
+ *
121
+ * @param params - Constructor parameters including admin and upgrade contracts, and network ID.
122
+ * @returns The Collection class extending TokenContract and implementing required interfaces.
123
+ */
124
+ export function AuctionFactory(params) {
125
+ const { collectionContract } = params;
126
+ class NonFungibleTokenAuctionContract extends SmartContract {
127
+ constructor() {
128
+ super(...arguments);
129
+ this.auctionData = State();
130
+ this.bidAmount = State(UInt64.zero);
131
+ this.settled = State(Bool(false));
132
+ this.events = {
133
+ bid: AuctionBidEvent,
134
+ settleAuction: TransferParams,
135
+ canTransfer: TransferEvent,
136
+ settlePayment: UInt64,
137
+ settleAuctioneerPayment: UInt64,
138
+ withdraw: UInt64,
139
+ };
140
+ }
141
+ async deploy(args) {
142
+ await super.deploy(args);
143
+ assert(args.saleFee.lessThanOrEqual(UInt32.from(MAX_SALE_FEE)), "Sale fee is too high");
144
+ this.auctionData.set(new Auction({
145
+ owner: args.owner,
146
+ collection: args.collection,
147
+ nft: args.nft,
148
+ auctioneer: args.auctioneer,
149
+ minimumPrice: args.minimumPrice,
150
+ transferFee: args.transferFee,
151
+ saleFee: args.saleFee,
152
+ auctionEndTime: args.auctionEndTime,
153
+ withdrawPeriod: args.withdrawPeriod,
154
+ bidder: PublicKey.empty(),
155
+ isOwnerPaid: Bool(false),
156
+ isNFTtransferred: Bool(false),
157
+ isNFTwithdrawn: Bool(false),
158
+ }).pack());
159
+ this.settled.set(Bool(false));
160
+ this.bidAmount.set(UInt64.zero);
161
+ this.account.permissions.set({
162
+ ...Permissions.default(),
163
+ send: Permissions.proof(),
164
+ setVerificationKey: Permissions.VerificationKey.impossibleDuringCurrentVersion(),
165
+ setPermissions: Permissions.impossible(),
166
+ });
167
+ }
168
+ getCollectionContract(address) {
169
+ const CollectionContract = collectionContract();
170
+ return new CollectionContract(address);
171
+ }
172
+ calculateSaleFee(params) {
173
+ const { price, saleFee, transferFee } = params;
174
+ saleFee.assertLessThanOrEqual(UInt32.from(MAX_SALE_FEE), "Sale fee is too high");
175
+ return price.div(MAX_SALE_FEE).mul(UInt64.from(saleFee));
176
+ }
177
+ // anyone can call this method to bid, paying the bid amount for the bidder
178
+ async bid(price, bidder) {
179
+ const settled = this.settled.getAndRequireEquals();
180
+ settled.assertFalse("Auction already finished");
181
+ const bidAmount = this.bidAmount.getAndRequireEquals();
182
+ this.account.balance.requireBetween(bidAmount, UInt64.MAXINT());
183
+ const auction = Auction.unpack(this.auctionData.getAndRequireEquals());
184
+ price.assertGreaterThanOrEqual(auction.minimumPrice, "Bid should be greater or equal than the minimum price");
185
+ price.assertGreaterThan(bidAmount.add(bidAmount.div(1000).mul(UInt64.from(MIN_STEP))), "Bid should be greater than the existing bid plus the minimum step");
186
+ this.network.globalSlotSinceGenesis.requireBetween(UInt32.from(0), auction.auctionEndTime);
187
+ const sender = this.sender.getUnconstrained();
188
+ const senderUpdate = AccountUpdate.createSigned(sender);
189
+ // if there is no bidder, this AccountUpdate will be ignored, similar to AccountUpdate.createIf()
190
+ const returnUpdate = AccountUpdate.create(auction.bidder);
191
+ senderUpdate.body.useFullCommitment = Bool(true);
192
+ returnUpdate.body.useFullCommitment = Bool(true);
193
+ // return the previous bidder's bid
194
+ this.balance.subInPlace(bidAmount);
195
+ returnUpdate.balance.addInPlace(bidAmount);
196
+ // get the new bid deposit
197
+ senderUpdate.balance.subInPlace(price);
198
+ this.balance.addInPlace(price);
199
+ this.bidAmount.set(price);
200
+ auction.bidder = bidder;
201
+ this.auctionData.set(auction.pack());
202
+ this.emitEvent("bid", new AuctionBidEvent({ bidder, price }));
203
+ return auction;
204
+ }
205
+ async getAuctionState() {
206
+ return new AuctionState({
207
+ auction: Auction.unpack(this.auctionData.getAndRequireEquals()),
208
+ bidAmount: this.bidAmount.getAndRequireEquals(),
209
+ settled: this.settled.getAndRequireEquals(),
210
+ });
211
+ }
212
+ // anyone can call this method to settle the auction
213
+ // but it is intended to be called by the auctioneer
214
+ // because the auctioneer is the one who will get the auction commission
215
+ // and pay the royalty to NFT creator
216
+ // This method is atomic, so it will settle the auction
217
+ async settleAuction() {
218
+ const settled = this.settled.getAndRequireEquals();
219
+ settled.assertFalse("Auction already settled");
220
+ this.settled.set(Bool(true));
221
+ const auction = Auction.unpack(this.auctionData.getAndRequireEquals());
222
+ this.network.globalSlotSinceGenesis.requireBetween(auction.auctionEndTime.add(1), UInt32.MAXINT());
223
+ const nftAddress = auction.nft;
224
+ const bidAmount = this.bidAmount.getAndRequireEquals();
225
+ auction.bidder.equals(PublicKey.empty()).assertFalse("No bidder");
226
+ bidAmount.assertGreaterThanOrEqual(auction.minimumPrice, "Bidder does not have enough balance");
227
+ const collection = this.getCollectionContract(auction.collection);
228
+ const transferParams = new TransferParams({
229
+ address: nftAddress,
230
+ from: this.address,
231
+ to: auction.bidder,
232
+ price: UInt64Option.fromValue(bidAmount),
233
+ context: new NFTTransactionContext({
234
+ custom: [Field(1), Field(0), Field(0)],
235
+ }),
236
+ });
237
+ await collection.transferByProof(transferParams);
238
+ this.emitEvent("settleAuction", transferParams);
239
+ }
240
+ // and pay the royalty to NFT creator
241
+ // This method is atomic, so it will settle the auction
242
+ async withdrawNFT() {
243
+ const settled = this.settled.getAndRequireEquals();
244
+ settled.assertFalse("Auction already settled");
245
+ this.settled.set(Bool(true));
246
+ const auction = Auction.unpack(this.auctionData.getAndRequireEquals());
247
+ auction.isNFTwithdrawn.assertFalse("NFT already withdrawn");
248
+ auction.isNFTtransferred.assertFalse("NFT already transferred");
249
+ this.network.globalSlotSinceGenesis.requireBetween(auction.auctionEndTime.add(auction.withdrawPeriod), UInt32.MAXINT());
250
+ const nftAddress = auction.nft;
251
+ const collection = this.getCollectionContract(auction.collection);
252
+ const transferParams = new TransferParams({
253
+ address: nftAddress,
254
+ from: this.address,
255
+ to: auction.owner,
256
+ price: UInt64Option.none(),
257
+ context: new NFTTransactionContext({
258
+ custom: [Field(2), Field(0), Field(0)],
259
+ }),
260
+ });
261
+ await collection.transferByProof(transferParams);
262
+ this.emitEvent("settleAuction", transferParams);
263
+ }
264
+ async canTransfer(params) {
265
+ this.settled.requireEquals(Bool(true));
266
+ const isSale = params.context.custom[0].equals(Field(1));
267
+ const isWithdraw = params.context.custom[0].equals(Field(2));
268
+ isSale.or(isWithdraw).assertTrue("Invalid context");
269
+ const auction = Auction.unpack(this.auctionData.getAndRequireEquals());
270
+ auction.isNFTtransferred.assertFalse("NFT already transferred");
271
+ auction.isNFTwithdrawn.assertFalse("NFT already withdrawn");
272
+ const collectionAddress = auction.collection;
273
+ const nftAddress = auction.nft;
274
+ const owner = auction.owner;
275
+ const bidder = auction.bidder;
276
+ const bidAmount = this.bidAmount.getAndRequireEquals();
277
+ this.network.globalSlotSinceGenesis.requireBetween(auction.auctionEndTime.add(Provable.if(isSale, UInt32.from(1), auction.withdrawPeriod)), UInt32.MAXINT());
278
+ params.collection.assertEquals(collectionAddress);
279
+ params.nft.assertEquals(nftAddress);
280
+ params.from
281
+ .equals(owner)
282
+ .and(params.approved.equals(this.address))
283
+ .or(params.from
284
+ .equals(this.address)
285
+ .and(params.approved.equals(PublicKey.empty())))
286
+ .assertTrue("Only owner or auction can transfer");
287
+ params.price.isSome.assertEquals(isSale);
288
+ params.price
289
+ .orElse(UInt64.zero)
290
+ .assertEquals(Provable.if(isSale, bidAmount, UInt64.zero));
291
+ params.price
292
+ .orElse(UInt64.MAXINT())
293
+ .assertGreaterThanOrEqual(auction.minimumPrice, "Bid should be greater or equal than the minimum price");
294
+ params.to.assertEquals(Provable.if(isSale, bidder, auction.owner));
295
+ const fee = params.fee.orElse(UInt64.zero);
296
+ fee.assertLessThanOrEqual(Provable.if(isSale, bidAmount, UInt64.MAXINT()), "Fee is higher than the bid");
297
+ const saleFee = this.calculateSaleFee({
298
+ price: bidAmount,
299
+ saleFee: auction.saleFee,
300
+ transferFee: auction.transferFee,
301
+ });
302
+ fee.assertLessThanOrEqual(Provable.if(isSale, saleFee, UInt64.MAXINT()), "Fee is higher than the sale fee");
303
+ auction.isNFTtransferred = isSale;
304
+ auction.isNFTwithdrawn = isWithdraw;
305
+ this.auctionData.set(auction.pack());
306
+ this.emitEvent("canTransfer", new TransferEvent({
307
+ ...params,
308
+ }));
309
+ return Bool(true);
310
+ }
311
+ async settlePayment() {
312
+ this.settled.getAndRequireEquals().assertTrue("Auction not settled");
313
+ const auction = Auction.unpack(this.auctionData.getAndRequireEquals());
314
+ auction.isOwnerPaid.assertFalse("Owner is not paid yet");
315
+ auction.isNFTtransferred.assertTrue("NFT not transferred");
316
+ const bidAmount = this.bidAmount.getAndRequireEquals();
317
+ this.network.globalSlotSinceGenesis.requireBetween(auction.auctionEndTime.add(1), UInt32.MAXINT());
318
+ const payment = bidAmount.sub(this.calculateSaleFee({
319
+ price: bidAmount,
320
+ saleFee: auction.saleFee,
321
+ transferFee: auction.transferFee,
322
+ }));
323
+ this.account.balance.requireBetween(payment, UInt64.MAXINT());
324
+ const ownerUpdate = AccountUpdate.create(auction.owner);
325
+ ownerUpdate.balance.addInPlace(payment);
326
+ this.balance.subInPlace(payment);
327
+ ownerUpdate.body.useFullCommitment = Bool(true);
328
+ auction.isOwnerPaid = Bool(true);
329
+ this.auctionData.set(auction.pack());
330
+ this.emitEvent("settlePayment", payment);
331
+ }
332
+ /*
333
+ const balance = this.account.balance.getAndRequireEquals();
334
+ is not stable and sometimes gives 0 on devnet during proving, so we put the amount as a parameter
335
+ This method can be called many times by anyone, allowing the auctioneer to use the hardware wallet and bots
336
+ */
337
+ async settleAuctioneerPayment(amount) {
338
+ this.settled.getAndRequireEquals().assertTrue("Auction not settled");
339
+ const auction = Auction.unpack(this.auctionData.getAndRequireEquals());
340
+ auction.isOwnerPaid.assertTrue("Owner is not paid yet, first call settlePayment");
341
+ this.network.globalSlotSinceGenesis.requireBetween(auction.auctionEndTime.add(1), UInt32.MAXINT());
342
+ this.account.balance.requireBetween(amount, UInt64.MAXINT());
343
+ const auctioneerUpdate = AccountUpdate.create(auction.auctioneer);
344
+ auctioneerUpdate.balance.addInPlace(amount);
345
+ this.balance.subInPlace(amount);
346
+ auctioneerUpdate.body.useFullCommitment = Bool(true);
347
+ this.emitEvent("settleAuctioneerPayment", amount);
348
+ }
349
+ /**
350
+ * Withdraw the deposit from the auction
351
+ * in case the auction is not settled during the WITHDRAW_PERIOD
352
+ * for any reason
353
+ * Anybody can call this method to allow the use of bots by the auctioneer or bidder
354
+ */
355
+ async withdraw() {
356
+ const auction = Auction.unpack(this.auctionData.getAndRequireEquals());
357
+ auction.isNFTtransferred.assertFalse("NFT already transferred");
358
+ this.network.globalSlotSinceGenesis.requireBetween(auction.auctionEndTime.add(auction.withdrawPeriod), UInt32.MAXINT());
359
+ const bidAmount = this.bidAmount.getAndRequireEquals();
360
+ const bidderUpdate = AccountUpdate.create(auction.bidder);
361
+ bidderUpdate.balance.addInPlace(bidAmount);
362
+ this.balance.subInPlace(bidAmount);
363
+ bidderUpdate.body.useFullCommitment = Bool(true);
364
+ this.settled.set(Bool(true));
365
+ this.emitEvent("withdraw", bidAmount);
366
+ }
367
+ }
368
+ __decorate([
369
+ state(AuctionPacked),
370
+ __metadata("design:type", Object)
371
+ ], NonFungibleTokenAuctionContract.prototype, "auctionData", void 0);
372
+ __decorate([
373
+ state(UInt64),
374
+ __metadata("design:type", Object)
375
+ ], NonFungibleTokenAuctionContract.prototype, "bidAmount", void 0);
376
+ __decorate([
377
+ state(Bool),
378
+ __metadata("design:type", Object)
379
+ ], NonFungibleTokenAuctionContract.prototype, "settled", void 0);
380
+ __decorate([
381
+ method.returns(Auction),
382
+ __metadata("design:type", Function),
383
+ __metadata("design:paramtypes", [UInt64, PublicKey]),
384
+ __metadata("design:returntype", Promise)
385
+ ], NonFungibleTokenAuctionContract.prototype, "bid", null);
386
+ __decorate([
387
+ method.returns(AuctionState),
388
+ __metadata("design:type", Function),
389
+ __metadata("design:paramtypes", []),
390
+ __metadata("design:returntype", Promise)
391
+ ], NonFungibleTokenAuctionContract.prototype, "getAuctionState", null);
392
+ __decorate([
393
+ method,
394
+ __metadata("design:type", Function),
395
+ __metadata("design:paramtypes", []),
396
+ __metadata("design:returntype", Promise)
397
+ ], NonFungibleTokenAuctionContract.prototype, "settleAuction", null);
398
+ __decorate([
399
+ method,
400
+ __metadata("design:type", Function),
401
+ __metadata("design:paramtypes", []),
402
+ __metadata("design:returntype", Promise)
403
+ ], NonFungibleTokenAuctionContract.prototype, "withdrawNFT", null);
404
+ __decorate([
405
+ method.returns(Bool),
406
+ __metadata("design:type", Function),
407
+ __metadata("design:paramtypes", [TransferExtendedParams]),
408
+ __metadata("design:returntype", Promise)
409
+ ], NonFungibleTokenAuctionContract.prototype, "canTransfer", null);
410
+ __decorate([
411
+ method,
412
+ __metadata("design:type", Function),
413
+ __metadata("design:paramtypes", []),
414
+ __metadata("design:returntype", Promise)
415
+ ], NonFungibleTokenAuctionContract.prototype, "settlePayment", null);
416
+ __decorate([
417
+ method,
418
+ __metadata("design:type", Function),
419
+ __metadata("design:paramtypes", [UInt64]),
420
+ __metadata("design:returntype", Promise)
421
+ ], NonFungibleTokenAuctionContract.prototype, "settleAuctioneerPayment", null);
422
+ __decorate([
423
+ method,
424
+ __metadata("design:type", Function),
425
+ __metadata("design:paramtypes", []),
426
+ __metadata("design:returntype", Promise)
427
+ ], NonFungibleTokenAuctionContract.prototype, "withdraw", null);
428
+ return NonFungibleTokenAuctionContract;
429
+ }
430
+ //# sourceMappingURL=auction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auction.js","sourceRoot":"","sources":["../../../src/marketplace/auction.ts"],"names":[],"mappings":"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"}