@silvana-one/token 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 (68) hide show
  1. package/README.md +1 -0
  2. package/dist/node/BondingCurveAdmin.d.ts +690 -0
  3. package/dist/node/BondingCurveAdmin.js +504 -0
  4. package/dist/node/BondingCurveAdmin.js.map +1 -0
  5. package/dist/node/FungibleToken.d.ts +414 -0
  6. package/dist/node/FungibleToken.js +7 -0
  7. package/dist/node/FungibleToken.js.map +1 -0
  8. package/dist/node/FungibleTokenAdvancedAdmin.d.ts +124 -0
  9. package/dist/node/FungibleTokenAdvancedAdmin.js +226 -0
  10. package/dist/node/FungibleTokenAdvancedAdmin.js.map +1 -0
  11. package/dist/node/FungibleTokenContract.d.ts +526 -0
  12. package/dist/node/FungibleTokenContract.js +295 -0
  13. package/dist/node/FungibleTokenContract.js.map +1 -0
  14. package/dist/node/FungibleTokenStandardAdmin.d.ts +27 -0
  15. package/dist/node/FungibleTokenStandardAdmin.js +101 -0
  16. package/dist/node/FungibleTokenStandardAdmin.js.map +1 -0
  17. package/dist/node/bid.d.ts +86 -0
  18. package/dist/node/bid.js +168 -0
  19. package/dist/node/bid.js.map +1 -0
  20. package/dist/node/claim.d.ts +89 -0
  21. package/dist/node/claim.js +156 -0
  22. package/dist/node/claim.js.map +1 -0
  23. package/dist/node/index.cjs +1576 -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/offer.d.ts +87 -0
  28. package/dist/node/offer.js +169 -0
  29. package/dist/node/offer.js.map +1 -0
  30. package/dist/tsconfig.tsbuildinfo +1 -0
  31. package/dist/tsconfig.web.tsbuildinfo +1 -0
  32. package/dist/web/BondingCurveAdmin.d.ts +690 -0
  33. package/dist/web/BondingCurveAdmin.js +504 -0
  34. package/dist/web/BondingCurveAdmin.js.map +1 -0
  35. package/dist/web/FungibleToken.d.ts +414 -0
  36. package/dist/web/FungibleToken.js +7 -0
  37. package/dist/web/FungibleToken.js.map +1 -0
  38. package/dist/web/FungibleTokenAdvancedAdmin.d.ts +124 -0
  39. package/dist/web/FungibleTokenAdvancedAdmin.js +226 -0
  40. package/dist/web/FungibleTokenAdvancedAdmin.js.map +1 -0
  41. package/dist/web/FungibleTokenContract.d.ts +526 -0
  42. package/dist/web/FungibleTokenContract.js +295 -0
  43. package/dist/web/FungibleTokenContract.js.map +1 -0
  44. package/dist/web/FungibleTokenStandardAdmin.d.ts +27 -0
  45. package/dist/web/FungibleTokenStandardAdmin.js +101 -0
  46. package/dist/web/FungibleTokenStandardAdmin.js.map +1 -0
  47. package/dist/web/bid.d.ts +86 -0
  48. package/dist/web/bid.js +168 -0
  49. package/dist/web/bid.js.map +1 -0
  50. package/dist/web/claim.d.ts +89 -0
  51. package/dist/web/claim.js +156 -0
  52. package/dist/web/claim.js.map +1 -0
  53. package/dist/web/index.d.ts +8 -0
  54. package/dist/web/index.js +9 -0
  55. package/dist/web/index.js.map +1 -0
  56. package/dist/web/offer.d.ts +87 -0
  57. package/dist/web/offer.js +169 -0
  58. package/dist/web/offer.js.map +1 -0
  59. package/package.json +64 -0
  60. package/src/BondingCurveAdmin.ts +590 -0
  61. package/src/FungibleToken.ts +11 -0
  62. package/src/FungibleTokenAdvancedAdmin.ts +260 -0
  63. package/src/FungibleTokenContract.ts +337 -0
  64. package/src/FungibleTokenStandardAdmin.ts +95 -0
  65. package/src/bid.ts +170 -0
  66. package/src/claim.ts +151 -0
  67. package/src/index.ts +8 -0
  68. package/src/offer.ts +164 -0
@@ -0,0 +1,226 @@
1
+ import { __decorate, __metadata } from "tslib";
2
+ import { AccountUpdate, Bool, method, Permissions, Provable, PublicKey, State, state, TokenContract, UInt64, VerificationKey, Struct, Field, TokenId, } from "o1js";
3
+ import { Whitelist } from "@silvana-one/storage";
4
+ export class AdvancedAdminData extends Struct({
5
+ totalSupply: UInt64,
6
+ requireAdminSignatureForMint: Bool,
7
+ anyoneCanMint: Bool,
8
+ }) {
9
+ static new(params = {}) {
10
+ const { totalSupply, requireAdminSignatureForMint, anyoneCanMint } = params;
11
+ return new AdvancedAdminData({
12
+ totalSupply: UInt64.from(totalSupply ?? 0),
13
+ requireAdminSignatureForMint: Bool(requireAdminSignatureForMint ?? false),
14
+ anyoneCanMint: Bool(anyoneCanMint ?? false),
15
+ });
16
+ }
17
+ pack() {
18
+ const totalSupplyBits = this.totalSupply.value.toBits(64);
19
+ return Field.fromBits([
20
+ ...totalSupplyBits,
21
+ this.requireAdminSignatureForMint,
22
+ this.anyoneCanMint,
23
+ ]);
24
+ }
25
+ static unpack(packed) {
26
+ const bits = packed.toBits(64 + 1 + 1);
27
+ const totalSupply = UInt64.Unsafe.fromField(Field.fromBits(bits.slice(0, 64)));
28
+ const requireAdminSignatureForMint = bits[64];
29
+ const anyoneCanMint = bits[64 + 1];
30
+ return new AdvancedAdminData({
31
+ totalSupply,
32
+ requireAdminSignatureForMint,
33
+ anyoneCanMint,
34
+ });
35
+ }
36
+ }
37
+ /** A contract that grants permissions for administrative actions on a token.
38
+ *
39
+ * We separate this out into a dedicated contract. That way, when issuing a token, a user can
40
+ * specify their own rules for administrative actions, without changing the token contract itself.
41
+ *
42
+ * The advantage is that third party applications that only use the token in a non-privileged way
43
+ * can integrate against the unchanged token contract.
44
+ */
45
+ export class FungibleTokenAdvancedAdmin extends TokenContract {
46
+ constructor() {
47
+ super(...arguments);
48
+ this.adminPublicKey = State();
49
+ this.tokenContract = State();
50
+ this.whitelist = State();
51
+ this.adminData = State();
52
+ this.events = { updateWhitelist: Whitelist };
53
+ }
54
+ /**
55
+ * Overrides the approveBase method to prevent transfers of tokens.
56
+ *
57
+ * @param forest - The account update forest.
58
+ */
59
+ async approveBase(forest) {
60
+ throw Error("Transfer not allowed");
61
+ }
62
+ async deploy(props) {
63
+ await super.deploy(props);
64
+ this.adminPublicKey.set(props.adminPublicKey);
65
+ this.tokenContract.set(props.tokenContract);
66
+ this.adminData.set(new AdvancedAdminData({
67
+ totalSupply: props.totalSupply,
68
+ requireAdminSignatureForMint: props.requireAdminSignatureForMint,
69
+ anyoneCanMint: props.anyoneCanMint,
70
+ }).pack());
71
+ this.whitelist.set(props.whitelist);
72
+ this.account.permissions.set({
73
+ ...Permissions.default(),
74
+ setVerificationKey: Permissions.VerificationKey.proofDuringCurrentVersion(),
75
+ setPermissions: Permissions.impossible(),
76
+ });
77
+ }
78
+ /** Update the verification key.
79
+ * Note that because we have set the permissions for setting
80
+ * the verification key to `impossibleDuringCurrentVersion()`,
81
+ * this will only be possible in case of a protocol update that requires an update.
82
+ */
83
+ async updateVerificationKey(vk) {
84
+ await this.ensureAdminSignature();
85
+ this.account.verificationKey.set(vk);
86
+ }
87
+ async ensureAdminSignature() {
88
+ // We do not fetch the admin public key here to allow error handling during
89
+ // the fetching of the admin public key that should be done before calling this method
90
+ const admin = this.adminPublicKey.getAndRequireEquals();
91
+ const adminUpdate = AccountUpdate.createSigned(admin);
92
+ adminUpdate.body.useFullCommitment = Bool(true);
93
+ return adminUpdate;
94
+ }
95
+ async canMint(_accountUpdate) {
96
+ // We use many conditional account updates here to allow other contracts to call this method
97
+ // without hitting the account update limit
98
+ const address = _accountUpdate.body.publicKey;
99
+ const balanceChange = _accountUpdate.body.balanceChange;
100
+ balanceChange.isPositive().assertTrue();
101
+ const amount = balanceChange.magnitude;
102
+ const adminData = AdvancedAdminData.unpack(this.adminData.getAndRequireEquals());
103
+ amount.assertLessThanOrEqual(adminData.totalSupply);
104
+ const tokenContract = this.tokenContract.getAndRequireEquals();
105
+ const tokenId = TokenId.derive(tokenContract); // it is NOT this.tokenId
106
+ const adminTokenId = this.deriveTokenId(); // it is NOT this.tokenId
107
+ // Does this guarantee that the call is from the token contract?
108
+ // TODO: If not, consider adding a sync method to handle the case when
109
+ // the contract will be called not from the token contract
110
+ // and the totalSupply will run out of sync with the token contract
111
+ _accountUpdate.body.tokenId.assertEquals(tokenId);
112
+ // Create a conditional AccountUpdate to check total supply in case it is limited
113
+ const maxAdditionalSupply = adminData.totalSupply.sub(amount);
114
+ const tokenUpdate = AccountUpdate.createIf(adminData.totalSupply.equals(UInt64.MAXINT()).not(), this.address, adminTokenId);
115
+ tokenUpdate.account.balance.requireBetween(UInt64.zero, maxAdditionalSupply);
116
+ tokenUpdate.balance.addInPlace(amount);
117
+ this.self.approve(tokenUpdate);
118
+ const whitelist = this.whitelist.getAndRequireEquals();
119
+ const whitelistedAmount = await whitelist.getWhitelistedAmount(address);
120
+ whitelistedAmount.isSome
121
+ .or(adminData.anyoneCanMint)
122
+ .assertTrue("Cannot mint to non-whitelisted address");
123
+ const maxMintAmount = Provable.if(adminData.anyoneCanMint, Provable.if(whitelistedAmount.isSome, whitelistedAmount.value, UInt64.MAXINT()), // blacklist
124
+ whitelistedAmount.value);
125
+ amount.assertLessThanOrEqual(maxMintAmount);
126
+ // create a conditional account update to check if the tokens already have been minted
127
+ // we will keep track of the total amount minted in the admin contract
128
+ // It is the responsibility of Mina.transaction to fund the new account
129
+ // We will not handle it here to save one account update
130
+ const trackMintUpdate = AccountUpdate.createIf(whitelist.isSome(), // we do not track minting if the whitelist is empty
131
+ address, adminTokenId);
132
+ trackMintUpdate.account.balance.requireBetween(UInt64.zero, maxMintAmount.sub(amount));
133
+ trackMintUpdate.balance.addInPlace(amount);
134
+ this.self.approve(trackMintUpdate);
135
+ // This conditional account update will be created only if admin signature is required
136
+ const adminSignatureUpdate = AccountUpdate.createIf(adminData.requireAdminSignatureForMint, this.adminPublicKey.getAndRequireEquals());
137
+ adminSignatureUpdate.requireSignature();
138
+ adminSignatureUpdate.body.useFullCommitment = Bool(true);
139
+ // We return true as we already checked that the mint is allowed
140
+ return Bool(true);
141
+ }
142
+ async canChangeAdmin(_admin) {
143
+ await this.ensureAdminSignature();
144
+ return Bool(true);
145
+ }
146
+ async canPause() {
147
+ await this.ensureAdminSignature();
148
+ return Bool(true);
149
+ }
150
+ async canResume() {
151
+ await this.ensureAdminSignature();
152
+ return Bool(true);
153
+ }
154
+ async updateWhitelist(whitelist) {
155
+ const admin = this.adminPublicKey.getAndRequireEquals();
156
+ const sender = this.sender.getUnconstrained();
157
+ const senderUpdate = AccountUpdate.createSigned(sender);
158
+ senderUpdate.body.useFullCommitment = Bool(true);
159
+ admin.assertEquals(sender);
160
+ this.whitelist.set(whitelist);
161
+ this.emitEvent("updateWhitelist", whitelist);
162
+ }
163
+ async canChangeVerificationKey(_vk) {
164
+ await this.ensureAdminSignature();
165
+ return Bool(true);
166
+ }
167
+ }
168
+ __decorate([
169
+ state(PublicKey),
170
+ __metadata("design:type", Object)
171
+ ], FungibleTokenAdvancedAdmin.prototype, "adminPublicKey", void 0);
172
+ __decorate([
173
+ state(PublicKey),
174
+ __metadata("design:type", Object)
175
+ ], FungibleTokenAdvancedAdmin.prototype, "tokenContract", void 0);
176
+ __decorate([
177
+ state(Whitelist),
178
+ __metadata("design:type", Object)
179
+ ], FungibleTokenAdvancedAdmin.prototype, "whitelist", void 0);
180
+ __decorate([
181
+ state(Field),
182
+ __metadata("design:type", Object)
183
+ ], FungibleTokenAdvancedAdmin.prototype, "adminData", void 0);
184
+ __decorate([
185
+ method,
186
+ __metadata("design:type", Function),
187
+ __metadata("design:paramtypes", [VerificationKey]),
188
+ __metadata("design:returntype", Promise)
189
+ ], FungibleTokenAdvancedAdmin.prototype, "updateVerificationKey", null);
190
+ __decorate([
191
+ method.returns(Bool),
192
+ __metadata("design:type", Function),
193
+ __metadata("design:paramtypes", [AccountUpdate]),
194
+ __metadata("design:returntype", Promise)
195
+ ], FungibleTokenAdvancedAdmin.prototype, "canMint", null);
196
+ __decorate([
197
+ method.returns(Bool),
198
+ __metadata("design:type", Function),
199
+ __metadata("design:paramtypes", [PublicKey]),
200
+ __metadata("design:returntype", Promise)
201
+ ], FungibleTokenAdvancedAdmin.prototype, "canChangeAdmin", null);
202
+ __decorate([
203
+ method.returns(Bool),
204
+ __metadata("design:type", Function),
205
+ __metadata("design:paramtypes", []),
206
+ __metadata("design:returntype", Promise)
207
+ ], FungibleTokenAdvancedAdmin.prototype, "canPause", null);
208
+ __decorate([
209
+ method.returns(Bool),
210
+ __metadata("design:type", Function),
211
+ __metadata("design:paramtypes", []),
212
+ __metadata("design:returntype", Promise)
213
+ ], FungibleTokenAdvancedAdmin.prototype, "canResume", null);
214
+ __decorate([
215
+ method,
216
+ __metadata("design:type", Function),
217
+ __metadata("design:paramtypes", [Whitelist]),
218
+ __metadata("design:returntype", Promise)
219
+ ], FungibleTokenAdvancedAdmin.prototype, "updateWhitelist", null);
220
+ __decorate([
221
+ method.returns(Bool),
222
+ __metadata("design:type", Function),
223
+ __metadata("design:paramtypes", [VerificationKey]),
224
+ __metadata("design:returntype", Promise)
225
+ ], FungibleTokenAdvancedAdmin.prototype, "canChangeVerificationKey", null);
226
+ //# sourceMappingURL=FungibleTokenAdvancedAdmin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FungibleTokenAdvancedAdmin.js","sourceRoot":"","sources":["../../src/FungibleTokenAdvancedAdmin.ts"],"names":[],"mappings":"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"}