zkcloudworker 0.14.9 → 0.15.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/lib/ts/src/mina/index.d.ts +1 -0
- package/lib/ts/src/mina/index.js +1 -0
- package/lib/ts/src/mina/nft/index.d.ts +3 -0
- package/lib/ts/src/mina/nft/index.js +19 -0
- package/lib/ts/src/mina/nft/types.d.ts +1254 -0
- package/lib/ts/src/mina/nft/types.js +236 -0
- package/lib/ts/src/mina/nft/whitelist-admin.d.ts +21 -0
- package/lib/ts/src/mina/nft/whitelist-admin.js +131 -0
- package/lib/ts/src/mina/nft/whitelist.d.ts +20 -0
- package/lib/ts/src/mina/nft/whitelist.js +113 -0
- package/lib/ts/src/mina/token/FungibleToken.d.ts +2 -2
- package/lib/ts/src/mina/token/FungibleToken.js +34 -16
- package/lib/ts/tsconfig.tsbuildinfo +1 -1
- package/lib/web/src/mina/index.d.ts +1 -0
- package/lib/web/src/mina/index.js +1 -0
- package/lib/web/src/mina/index.js.map +1 -1
- package/lib/web/src/mina/nft/index.d.ts +3 -0
- package/lib/web/src/mina/nft/index.js +4 -0
- package/lib/web/src/mina/nft/index.js.map +1 -0
- package/lib/web/src/mina/nft/types.d.ts +1254 -0
- package/lib/web/src/mina/nft/types.js +227 -0
- package/lib/web/src/mina/nft/types.js.map +1 -0
- package/lib/web/src/mina/nft/whitelist-admin.d.ts +21 -0
- package/lib/web/src/mina/nft/whitelist-admin.js +120 -0
- package/lib/web/src/mina/nft/whitelist-admin.js.map +1 -0
- package/lib/web/src/mina/nft/whitelist.d.ts +20 -0
- package/lib/web/src/mina/nft/whitelist.js +106 -0
- package/lib/web/src/mina/nft/whitelist.js.map +1 -0
- package/lib/web/src/mina/token/FungibleToken.d.ts +2 -2
- package/lib/web/src/mina/token/FungibleToken.js +36 -18
- package/lib/web/src/mina/token/FungibleToken.js.map +1 -1
- package/lib/web/tsconfig.web.tsbuildinfo +1 -1
- package/package.json +2 -2
@@ -0,0 +1,227 @@
|
|
1
|
+
import { Field, PublicKey, Bool, VerificationKey, Struct, UInt32, UInt64, Encoding, Provable, DynamicProof, FeatureFlags, } from "o1js";
|
2
|
+
export { Storage, MintParams, MintSignatureData, NFTData, CollectionData, NFTState, NFTImmutableState, NFTUpdateProof, };
|
3
|
+
class Storage extends Struct({
|
4
|
+
url: Provable.Array(Field, 2),
|
5
|
+
}) {
|
6
|
+
constructor(value) {
|
7
|
+
super(value);
|
8
|
+
}
|
9
|
+
static assertEquals(a, b) {
|
10
|
+
a.url[0].assertEquals(b.url[0]);
|
11
|
+
a.url[1].assertEquals(b.url[1]);
|
12
|
+
}
|
13
|
+
static equals(a, b) {
|
14
|
+
return a.url[0].equals(b.url[0]).and(a.url[1].equals(b.url[1]));
|
15
|
+
}
|
16
|
+
static fromURL(url) {
|
17
|
+
const fields = Encoding.stringToFields(url);
|
18
|
+
if (fields.length !== 2)
|
19
|
+
throw new Error("Invalid URL");
|
20
|
+
return new Storage({ url: [fields[0], fields[1]] });
|
21
|
+
}
|
22
|
+
toURL() {
|
23
|
+
return Encoding.stringFromFields(this.url);
|
24
|
+
}
|
25
|
+
}
|
26
|
+
class NFTImmutableState extends Struct({
|
27
|
+
creator: PublicKey, // readonly
|
28
|
+
canChangeOwner: Bool, // readonly
|
29
|
+
canChangeMetadata: Bool, // readonly
|
30
|
+
canChangePrice: Bool, // readonly
|
31
|
+
canChangeStorage: Bool, // readonly
|
32
|
+
canChangeName: Bool, // readonly
|
33
|
+
canChangeMetadataVerificationKeyHash: Bool, // readonly
|
34
|
+
canPause: Bool, // readonly
|
35
|
+
address: PublicKey, // readonly
|
36
|
+
tokenId: Field, // readonly
|
37
|
+
}) {
|
38
|
+
static assertEqual(a, b) {
|
39
|
+
a.creator.assertEquals(b.creator);
|
40
|
+
a.canChangeOwner.assertEquals(b.canChangeOwner);
|
41
|
+
a.canChangeMetadata.assertEquals(b.canChangeMetadata);
|
42
|
+
a.canChangePrice.assertEquals(b.canChangePrice);
|
43
|
+
a.canChangeStorage.assertEquals(b.canChangeStorage);
|
44
|
+
a.canChangeName.assertEquals(b.canChangeName);
|
45
|
+
a.canChangeMetadataVerificationKeyHash.assertEquals(b.canChangeMetadataVerificationKeyHash);
|
46
|
+
a.canPause.assertEquals(b.canPause);
|
47
|
+
a.address.assertEquals(b.address);
|
48
|
+
a.tokenId.assertEquals(b.tokenId);
|
49
|
+
}
|
50
|
+
}
|
51
|
+
class NFTState extends Struct({
|
52
|
+
immutableState: NFTImmutableState,
|
53
|
+
name: Field,
|
54
|
+
metadata: Field,
|
55
|
+
storage: Storage,
|
56
|
+
owner: PublicKey,
|
57
|
+
price: UInt64,
|
58
|
+
version: UInt32,
|
59
|
+
isPaused: Bool,
|
60
|
+
}) {
|
61
|
+
static assertEqual(a, b) {
|
62
|
+
NFTImmutableState.assertEqual(a.immutableState, b.immutableState);
|
63
|
+
a.name.assertEquals(b.name);
|
64
|
+
a.metadata.assertEquals(b.metadata);
|
65
|
+
Storage.assertEquals(a.storage, b.storage);
|
66
|
+
a.owner.assertEquals(b.owner);
|
67
|
+
a.price.assertEquals(b.price);
|
68
|
+
a.version.assertEquals(b.version);
|
69
|
+
a.isPaused.assertEquals(b.isPaused);
|
70
|
+
}
|
71
|
+
}
|
72
|
+
class NFTUpdateProof extends DynamicProof {
|
73
|
+
}
|
74
|
+
NFTUpdateProof.publicInputType = NFTState;
|
75
|
+
NFTUpdateProof.publicOutputType = NFTState;
|
76
|
+
NFTUpdateProof.maxProofsVerified = 2;
|
77
|
+
NFTUpdateProof.featureFlags = FeatureFlags.allMaybe;
|
78
|
+
class NFTData extends Struct({
|
79
|
+
price: UInt64,
|
80
|
+
version: UInt32,
|
81
|
+
canChangeOwner: Bool, // readonly
|
82
|
+
canChangeMetadata: Bool, // readonly
|
83
|
+
canChangePrice: Bool, // readonly
|
84
|
+
canChangeStorage: Bool, // readonly
|
85
|
+
canChangeName: Bool, // readonly
|
86
|
+
canChangeMetadataVerificationKeyHash: Bool, // readonly
|
87
|
+
canPause: Bool, // readonly
|
88
|
+
isPaused: Bool,
|
89
|
+
// what else?
|
90
|
+
}) {
|
91
|
+
new(params = {}) {
|
92
|
+
const { price, version, canChangeOwner, canChangeMetadata, canChangePrice, canChangeStorage, canChangeName, canChangeMetadataVerificationKeyHash, canPause, isPaused, } = params;
|
93
|
+
return new NFTData({
|
94
|
+
price: UInt64.from(price ?? 0),
|
95
|
+
version: UInt32.from(version ?? 0),
|
96
|
+
canChangeOwner: Bool(canChangeOwner ?? true),
|
97
|
+
canChangeMetadata: Bool(canChangeMetadata ?? false),
|
98
|
+
canChangePrice: Bool(canChangePrice ?? true),
|
99
|
+
canChangeStorage: Bool(canChangeStorage ?? false),
|
100
|
+
canChangeName: Bool(canChangeName ?? false),
|
101
|
+
canChangeMetadataVerificationKeyHash: Bool(canChangeMetadataVerificationKeyHash ?? false),
|
102
|
+
canPause: Bool(canPause ?? false),
|
103
|
+
isPaused: Bool(isPaused ?? false),
|
104
|
+
});
|
105
|
+
}
|
106
|
+
pack() {
|
107
|
+
const price = this.price.value.toBits(64);
|
108
|
+
const version = this.version.value.toBits(32);
|
109
|
+
return Field.fromBits([
|
110
|
+
...price,
|
111
|
+
...version,
|
112
|
+
this.canChangeOwner,
|
113
|
+
this.canChangeMetadata,
|
114
|
+
this.canChangePrice,
|
115
|
+
this.canChangeStorage,
|
116
|
+
this.canChangeName,
|
117
|
+
this.canChangeMetadataVerificationKeyHash,
|
118
|
+
this.canPause,
|
119
|
+
this.isPaused,
|
120
|
+
]);
|
121
|
+
}
|
122
|
+
static unpack(packed) {
|
123
|
+
const bits = packed.toBits(64 + 32 + 8);
|
124
|
+
const price = UInt64.Unsafe.fromField(Field.fromBits(bits.slice(0, 64)));
|
125
|
+
const version = UInt32.Unsafe.fromField(Field.fromBits(bits.slice(64, 64 + 32)));
|
126
|
+
const canChangeOwner = bits[64 + 32];
|
127
|
+
const canChangeMetadata = bits[64 + 32 + 1];
|
128
|
+
const canChangePrice = bits[64 + 32 + 2];
|
129
|
+
const canChangeStorage = bits[64 + 32 + 3];
|
130
|
+
const canChangeName = bits[64 + 32 + 4];
|
131
|
+
const canChangeMetadataVerificationKeyHash = bits[64 + 32 + 5];
|
132
|
+
const canPause = bits[64 + 32 + 6];
|
133
|
+
const isPaused = bits[64 + 32 + 7];
|
134
|
+
return new NFTData({
|
135
|
+
price,
|
136
|
+
version,
|
137
|
+
canChangeOwner,
|
138
|
+
canChangeMetadata,
|
139
|
+
canChangePrice,
|
140
|
+
canChangeStorage,
|
141
|
+
canChangeName,
|
142
|
+
canChangeMetadataVerificationKeyHash,
|
143
|
+
canPause,
|
144
|
+
isPaused,
|
145
|
+
});
|
146
|
+
}
|
147
|
+
}
|
148
|
+
class CollectionData extends Struct({
|
149
|
+
requireTransferApproval: Bool,
|
150
|
+
requireUpdateApproval: Bool,
|
151
|
+
requireSaleApproval: Bool,
|
152
|
+
requireBuyApproval: Bool,
|
153
|
+
requireMintApproval: Bool,
|
154
|
+
canMint: Bool,
|
155
|
+
canPause: Bool,
|
156
|
+
canResume: Bool,
|
157
|
+
canChangeName: Bool,
|
158
|
+
canChangeCreator: Bool,
|
159
|
+
canChangeBaseUri: Bool,
|
160
|
+
canChangeSaleCommission: Bool,
|
161
|
+
isPaused: Bool,
|
162
|
+
}) {
|
163
|
+
pack() {
|
164
|
+
return Field.fromBits([
|
165
|
+
this.requireTransferApproval,
|
166
|
+
this.requireUpdateApproval,
|
167
|
+
this.requireSaleApproval,
|
168
|
+
this.requireMintApproval,
|
169
|
+
this.requireBuyApproval,
|
170
|
+
this.canMint,
|
171
|
+
this.canChangeName,
|
172
|
+
this.canChangeCreator,
|
173
|
+
this.canChangeBaseUri,
|
174
|
+
this.canChangeSaleCommission,
|
175
|
+
this.canPause,
|
176
|
+
this.canResume,
|
177
|
+
this.isPaused,
|
178
|
+
]);
|
179
|
+
}
|
180
|
+
static unpack(packed) {
|
181
|
+
const bits = packed.toBits(13);
|
182
|
+
return new CollectionData({
|
183
|
+
requireTransferApproval: bits[0],
|
184
|
+
requireUpdateApproval: bits[1],
|
185
|
+
requireSaleApproval: bits[2],
|
186
|
+
requireMintApproval: bits[3],
|
187
|
+
requireBuyApproval: bits[4],
|
188
|
+
canMint: bits[5],
|
189
|
+
canChangeName: bits[6],
|
190
|
+
canChangeCreator: bits[7],
|
191
|
+
canChangeBaseUri: bits[8],
|
192
|
+
canChangeSaleCommission: bits[9],
|
193
|
+
canPause: bits[10],
|
194
|
+
canResume: bits[11],
|
195
|
+
isPaused: bits[12],
|
196
|
+
});
|
197
|
+
}
|
198
|
+
}
|
199
|
+
class MintParams extends Struct({
|
200
|
+
name: Field,
|
201
|
+
address: PublicKey,
|
202
|
+
tokenId: Field,
|
203
|
+
owner: PublicKey,
|
204
|
+
data: NFTData,
|
205
|
+
fee: UInt64,
|
206
|
+
metadata: Field,
|
207
|
+
storage: Storage,
|
208
|
+
metadataVerificationKey: VerificationKey,
|
209
|
+
nftVerificationKey: VerificationKey,
|
210
|
+
expiry: UInt32,
|
211
|
+
}) {
|
212
|
+
}
|
213
|
+
class MintSignatureData extends Struct({
|
214
|
+
name: Field,
|
215
|
+
address: PublicKey,
|
216
|
+
tokenId: Field,
|
217
|
+
owner: PublicKey,
|
218
|
+
packedData: Field,
|
219
|
+
fee: UInt64,
|
220
|
+
metadata: Field,
|
221
|
+
storage: Storage,
|
222
|
+
metadataVerificationKeyHash: Field,
|
223
|
+
nftVerificationKeyHash: Field,
|
224
|
+
expiry: UInt32,
|
225
|
+
}) {
|
226
|
+
}
|
227
|
+
//# sourceMappingURL=types.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../src/mina/nft/types.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
import { DeployArgs, PublicKey, SmartContract, State, VerificationKey, UInt64, Field } from "o1js";
|
2
|
+
import { MintParams, NFTState, NFTAdminBase, Storage } from "./types";
|
3
|
+
export interface NFTWhitelistedAdminDeployProps extends Exclude<DeployArgs, undefined> {
|
4
|
+
admin: PublicKey;
|
5
|
+
whitelist: Field;
|
6
|
+
storage: Storage;
|
7
|
+
}
|
8
|
+
export declare class NFTWhitelistedAdmin extends SmartContract implements NFTAdminBase {
|
9
|
+
admin: State<PublicKey>;
|
10
|
+
whitelist: State<import("o1js/dist/node/lib/provable/field").Field>;
|
11
|
+
storage: State<Storage>;
|
12
|
+
deploy(props: NFTWhitelistedAdminDeployProps): Promise<void>;
|
13
|
+
isWhitelisted(address: PublicKey, amount: UInt64): Promise<import("o1js/dist/node/lib/provable/bool").Bool>;
|
14
|
+
updateVerificationKey(vk: VerificationKey): Promise<void>;
|
15
|
+
canMint(params: MintParams): Promise<import("o1js/dist/node/lib/provable/bool").Bool>;
|
16
|
+
canUpdate(input: NFTState, output: NFTState): Promise<import("o1js/dist/node/lib/provable/bool").Bool>;
|
17
|
+
canTransfer(address: PublicKey, from: PublicKey, to: PublicKey): Promise<import("o1js/dist/node/lib/provable/bool").Bool>;
|
18
|
+
canSell(address: PublicKey, seller: PublicKey, price: UInt64): Promise<import("o1js/dist/node/lib/provable/bool").Bool>;
|
19
|
+
canBuy(address: PublicKey, seller: PublicKey, buyer: PublicKey, price: UInt64): Promise<import("o1js/dist/node/lib/provable/bool").Bool>;
|
20
|
+
updateMerkleMapRoot(root: Field): Promise<void>;
|
21
|
+
}
|
@@ -0,0 +1,120 @@
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
2
|
+
import { Bool, method, Permissions, Provable, PublicKey, SmartContract, State, state, VerificationKey, UInt64, Field, Poseidon, } from "o1js";
|
3
|
+
import { Whitelist, loadWhitelist } from "./whitelist";
|
4
|
+
import { MintParams, NFTState, Storage } from "./types";
|
5
|
+
export class NFTWhitelistedAdmin extends SmartContract {
|
6
|
+
constructor() {
|
7
|
+
super(...arguments);
|
8
|
+
this.admin = State();
|
9
|
+
this.whitelist = State();
|
10
|
+
this.storage = State();
|
11
|
+
}
|
12
|
+
async deploy(props) {
|
13
|
+
await super.deploy(props);
|
14
|
+
this.admin.set(props.admin);
|
15
|
+
this.whitelist.set(props.whitelist);
|
16
|
+
this.storage.set(props.storage);
|
17
|
+
this.account.permissions.set({
|
18
|
+
...Permissions.default(),
|
19
|
+
setVerificationKey: Permissions.VerificationKey.impossibleDuringCurrentVersion(),
|
20
|
+
setPermissions: Permissions.impossible(),
|
21
|
+
});
|
22
|
+
}
|
23
|
+
async isWhitelisted(address, amount) {
|
24
|
+
const whitelist = this.whitelist.getAndRequireEquals();
|
25
|
+
const storage = this.storage.getAndRequireEquals();
|
26
|
+
const map = await Provable.witnessAsync(Whitelist, async () => {
|
27
|
+
return await loadWhitelist(storage);
|
28
|
+
});
|
29
|
+
map.root.assertEquals(whitelist);
|
30
|
+
const key = Poseidon.hash(address.toFields());
|
31
|
+
map.assertIncluded(key, "Address not whitelisted");
|
32
|
+
const value = map.get(key);
|
33
|
+
value.assertLessThanOrEqual(Field(UInt64.MAXINT().value));
|
34
|
+
const maxAmount = UInt64.Unsafe.fromField(value);
|
35
|
+
return Bool(amount.lessThanOrEqual(maxAmount));
|
36
|
+
}
|
37
|
+
async updateVerificationKey(vk) {
|
38
|
+
const sender = this.sender.getAndRequireSignature();
|
39
|
+
this.admin.getAndRequireEquals().assertEquals(sender);
|
40
|
+
this.account.verificationKey.set(vk);
|
41
|
+
}
|
42
|
+
async canMint(params) {
|
43
|
+
return await this.isWhitelisted(params.owner, UInt64.from(0));
|
44
|
+
}
|
45
|
+
async canUpdate(input, output) {
|
46
|
+
return await this.isWhitelisted(output.owner, UInt64.from(0));
|
47
|
+
}
|
48
|
+
async canTransfer(address, from, to) {
|
49
|
+
return await this.isWhitelisted(to, UInt64.from(0));
|
50
|
+
}
|
51
|
+
async canSell(address, seller, price) {
|
52
|
+
return await this.isWhitelisted(address, price);
|
53
|
+
}
|
54
|
+
async canBuy(address, seller, buyer, price) {
|
55
|
+
return (await this.isWhitelisted(buyer, price)).and(await this.isWhitelisted(seller, price));
|
56
|
+
}
|
57
|
+
async updateMerkleMapRoot(root) {
|
58
|
+
const sender = this.sender.getAndRequireSignature();
|
59
|
+
this.admin.getAndRequireEquals().assertEquals(sender);
|
60
|
+
this.whitelist.set(root);
|
61
|
+
}
|
62
|
+
}
|
63
|
+
__decorate([
|
64
|
+
state(PublicKey),
|
65
|
+
__metadata("design:type", Object)
|
66
|
+
], NFTWhitelistedAdmin.prototype, "admin", void 0);
|
67
|
+
__decorate([
|
68
|
+
state(Field),
|
69
|
+
__metadata("design:type", Object)
|
70
|
+
], NFTWhitelistedAdmin.prototype, "whitelist", void 0);
|
71
|
+
__decorate([
|
72
|
+
state(Storage),
|
73
|
+
__metadata("design:type", Object)
|
74
|
+
], NFTWhitelistedAdmin.prototype, "storage", void 0);
|
75
|
+
__decorate([
|
76
|
+
method,
|
77
|
+
__metadata("design:type", Function),
|
78
|
+
__metadata("design:paramtypes", [VerificationKey]),
|
79
|
+
__metadata("design:returntype", Promise)
|
80
|
+
], NFTWhitelistedAdmin.prototype, "updateVerificationKey", null);
|
81
|
+
__decorate([
|
82
|
+
method.returns(Bool),
|
83
|
+
__metadata("design:type", Function),
|
84
|
+
__metadata("design:paramtypes", [MintParams]),
|
85
|
+
__metadata("design:returntype", Promise)
|
86
|
+
], NFTWhitelistedAdmin.prototype, "canMint", null);
|
87
|
+
__decorate([
|
88
|
+
method.returns(Bool),
|
89
|
+
__metadata("design:type", Function),
|
90
|
+
__metadata("design:paramtypes", [NFTState, NFTState]),
|
91
|
+
__metadata("design:returntype", Promise)
|
92
|
+
], NFTWhitelistedAdmin.prototype, "canUpdate", null);
|
93
|
+
__decorate([
|
94
|
+
method.returns(Bool),
|
95
|
+
__metadata("design:type", Function),
|
96
|
+
__metadata("design:paramtypes", [PublicKey, PublicKey, PublicKey]),
|
97
|
+
__metadata("design:returntype", Promise)
|
98
|
+
], NFTWhitelistedAdmin.prototype, "canTransfer", null);
|
99
|
+
__decorate([
|
100
|
+
method.returns(Bool),
|
101
|
+
__metadata("design:type", Function),
|
102
|
+
__metadata("design:paramtypes", [PublicKey, PublicKey, UInt64]),
|
103
|
+
__metadata("design:returntype", Promise)
|
104
|
+
], NFTWhitelistedAdmin.prototype, "canSell", null);
|
105
|
+
__decorate([
|
106
|
+
method.returns(Bool),
|
107
|
+
__metadata("design:type", Function),
|
108
|
+
__metadata("design:paramtypes", [PublicKey,
|
109
|
+
PublicKey,
|
110
|
+
PublicKey,
|
111
|
+
UInt64]),
|
112
|
+
__metadata("design:returntype", Promise)
|
113
|
+
], NFTWhitelistedAdmin.prototype, "canBuy", null);
|
114
|
+
__decorate([
|
115
|
+
method,
|
116
|
+
__metadata("design:type", Function),
|
117
|
+
__metadata("design:paramtypes", [Field]),
|
118
|
+
__metadata("design:returntype", Promise)
|
119
|
+
], NFTWhitelistedAdmin.prototype, "updateMerkleMapRoot", null);
|
120
|
+
//# sourceMappingURL=whitelist-admin.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"whitelist-admin.js","sourceRoot":"","sources":["../../../../../../src/mina/nft/whitelist-admin.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,20 @@
|
|
1
|
+
import { Storage } from "./types";
|
2
|
+
declare const IndexedMerkleMap: typeof import("o1js/dist/node/lib/provable/merkle-tree-indexed").IndexedMerkleMap;
|
3
|
+
declare const Whitelist_base: typeof import("o1js/dist/node/lib/provable/merkle-tree-indexed").IndexedMerkleMapBase;
|
4
|
+
export declare class Whitelist extends Whitelist_base {
|
5
|
+
}
|
6
|
+
export declare function loadWhitelist(storage: Storage): Promise<Whitelist>;
|
7
|
+
interface IndexedMapSerialized {
|
8
|
+
height: number;
|
9
|
+
root: string;
|
10
|
+
length: string;
|
11
|
+
nodes: string;
|
12
|
+
sortedLeaves: string;
|
13
|
+
}
|
14
|
+
export declare function serializeWhitelist(map: Whitelist): string;
|
15
|
+
export declare function deserializeWhitelist(params: {
|
16
|
+
serializedIndexedMap: string;
|
17
|
+
type?: ReturnType<typeof IndexedMerkleMap>;
|
18
|
+
}): InstanceType<ReturnType<typeof IndexedMerkleMap>> | undefined;
|
19
|
+
export declare function parseIndexedMapSerialized(serializedMap: string): IndexedMapSerialized;
|
20
|
+
export {};
|
@@ -0,0 +1,106 @@
|
|
1
|
+
import { Experimental, Field } from "o1js";
|
2
|
+
import { bigintToBase64, bigintFromBase64 } from "../../cloud";
|
3
|
+
const { IndexedMerkleMap } = Experimental;
|
4
|
+
const height = 10;
|
5
|
+
export class Whitelist extends IndexedMerkleMap(height) {
|
6
|
+
}
|
7
|
+
export async function loadWhitelist(storage) {
|
8
|
+
const url = "https://gateway.pinata.cloud/ipfs/" + storage.toURL();
|
9
|
+
const response = await fetch(url);
|
10
|
+
if (!response.ok) {
|
11
|
+
throw new Error("Failed to fetch whitelist");
|
12
|
+
}
|
13
|
+
const json = await response.text();
|
14
|
+
const map = deserializeWhitelist({
|
15
|
+
serializedIndexedMap: json,
|
16
|
+
type: Whitelist,
|
17
|
+
});
|
18
|
+
if (!map) {
|
19
|
+
throw new Error("Failed to deserialize whitelist");
|
20
|
+
}
|
21
|
+
return map;
|
22
|
+
}
|
23
|
+
export function serializeWhitelist(map) {
|
24
|
+
const serializedMap = JSON.stringify({
|
25
|
+
height: map.height,
|
26
|
+
root: map.root.toJSON(),
|
27
|
+
length: map.length.toJSON(),
|
28
|
+
nodes: JSON.stringify(map.data.get().nodes, (_, v) => typeof v === "bigint" ? "n" + bigintToBase64(v) : v),
|
29
|
+
sortedLeaves: JSON.stringify(map.data
|
30
|
+
.get()
|
31
|
+
.sortedLeaves.map((v) => [
|
32
|
+
bigintToBase64(v.key),
|
33
|
+
bigintToBase64(v.nextKey),
|
34
|
+
bigintToBase64(v.value),
|
35
|
+
bigintToBase64(BigInt(v.index)),
|
36
|
+
])),
|
37
|
+
}, null, 2);
|
38
|
+
return serializedMap;
|
39
|
+
}
|
40
|
+
export function deserializeWhitelist(params) {
|
41
|
+
try {
|
42
|
+
const { serializedIndexedMap, type } = params;
|
43
|
+
const json = parseIndexedMapSerialized(serializedIndexedMap);
|
44
|
+
return deserializeIndexedMapInternal({
|
45
|
+
json,
|
46
|
+
type: type ?? IndexedMerkleMap(json.height),
|
47
|
+
});
|
48
|
+
}
|
49
|
+
catch (error) {
|
50
|
+
console.error("Error deserializing map:", error?.message ?? error);
|
51
|
+
return undefined;
|
52
|
+
}
|
53
|
+
}
|
54
|
+
export function parseIndexedMapSerialized(serializedMap) {
|
55
|
+
const json = JSON.parse(serializedMap);
|
56
|
+
if (json.height === undefined ||
|
57
|
+
json.root === undefined ||
|
58
|
+
json.length === undefined ||
|
59
|
+
json.nodes === undefined ||
|
60
|
+
json.sortedLeaves === undefined)
|
61
|
+
throw new Error("wrong IndexedMerkleMap json format");
|
62
|
+
if (typeof json.height !== "number")
|
63
|
+
throw new Error("wrong IndexedMerkleMap height format");
|
64
|
+
if (typeof json.root !== "string")
|
65
|
+
throw new Error("wrong IndexedMerkleMap root format");
|
66
|
+
if (typeof json.length !== "string")
|
67
|
+
throw new Error("wrong IndexedMerkleMap length format");
|
68
|
+
if (typeof json.nodes !== "string")
|
69
|
+
throw new Error("wrong IndexedMerkleMap nodes format");
|
70
|
+
if (typeof json.sortedLeaves !== "string")
|
71
|
+
throw new Error("wrong IndexedMerkleMap sortedLeaves format");
|
72
|
+
return json;
|
73
|
+
}
|
74
|
+
function deserializeIndexedMapInternal(params) {
|
75
|
+
const { json, type } = params;
|
76
|
+
const map = new type();
|
77
|
+
if (json.height !== map.height) {
|
78
|
+
throw new Error("wrong IndexedMap height");
|
79
|
+
}
|
80
|
+
const nodes = JSON.parse(json.nodes, (_, v) => {
|
81
|
+
// Check if the value is a string that represents a BigInt
|
82
|
+
if (typeof v === "string" && v[0] === "n") {
|
83
|
+
// Remove the first 'n' and convert the string to a BigInt
|
84
|
+
return bigintFromBase64(v.slice(1));
|
85
|
+
}
|
86
|
+
return v;
|
87
|
+
});
|
88
|
+
const sortedLeaves = JSON.parse(json.sortedLeaves).map((row) => {
|
89
|
+
return {
|
90
|
+
key: bigintFromBase64(row[0]),
|
91
|
+
nextKey: bigintFromBase64(row[1]),
|
92
|
+
value: bigintFromBase64(row[2]),
|
93
|
+
index: Number(bigintFromBase64(row[3])),
|
94
|
+
};
|
95
|
+
});
|
96
|
+
map.root = Field.fromJSON(json.root);
|
97
|
+
map.length = Field.fromJSON(json.length);
|
98
|
+
map.data.updateAsProver(() => {
|
99
|
+
return {
|
100
|
+
nodes: nodes.map((row) => [...row]),
|
101
|
+
sortedLeaves: [...sortedLeaves],
|
102
|
+
};
|
103
|
+
});
|
104
|
+
return map;
|
105
|
+
}
|
106
|
+
//# sourceMappingURL=whitelist.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"whitelist.js","sourceRoot":"","sources":["../../../../../../src/mina/nft/whitelist.ts"],"names":[],"mappings":"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"}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { AccountUpdate, AccountUpdateForest, Bool, DeployArgs, Field, Int64, PublicKey, State,
|
1
|
+
import { AccountUpdate, AccountUpdateForest, Bool, DeployArgs, Field, Int64, PublicKey, State, TokenContract, Types, UInt64, UInt8, VerificationKey } from "o1js";
|
2
2
|
import { FungibleTokenAdminBase } from "./FungibleTokenAdmin.js";
|
3
3
|
interface FungibleTokenDeployProps extends Exclude<DeployArgs, undefined> {
|
4
4
|
/** The token symbol. */
|
@@ -19,7 +19,7 @@ export declare const FungibleTokenErrors: {
|
|
19
19
|
flashMinting: string;
|
20
20
|
unbalancedTransaction: string;
|
21
21
|
};
|
22
|
-
export declare class FungibleToken extends
|
22
|
+
export declare class FungibleToken extends TokenContract {
|
23
23
|
decimals: State<UInt8>;
|
24
24
|
admin: State<PublicKey>;
|
25
25
|
paused: State<import("o1js/dist/node/lib/provable/bool.js").Bool>;
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { __decorate, __metadata } from "tslib";
|
2
|
-
import { AccountUpdate, AccountUpdateForest, assert, Bool, Int64, method, Permissions, Provable, PublicKey, State, state, Struct,
|
3
|
-
import { FungibleTokenAdmin } from "./FungibleTokenAdmin.js";
|
2
|
+
import { AccountUpdate, AccountUpdateForest, assert, Bool, Int64, method, Permissions, Provable, PublicKey, State, state, Struct, TokenContract, Types, UInt64, UInt8, VerificationKey, } from "o1js";
|
3
|
+
import { FungibleTokenAdmin, } from "./FungibleTokenAdmin.js";
|
4
4
|
export const FungibleTokenErrors = {
|
5
5
|
noAdminKey: "could not fetch admin contract key",
|
6
6
|
noPermissionToChangeAdmin: "Not allowed to change admin contract",
|
@@ -13,7 +13,7 @@ export const FungibleTokenErrors = {
|
|
13
13
|
flashMinting: "Flash-minting or unbalanced transaction detected. Please make sure that your transaction is balanced, and that your `AccountUpdate`s are ordered properly, so that tokens are not received before they are sent.",
|
14
14
|
unbalancedTransaction: "Transaction is unbalanced",
|
15
15
|
};
|
16
|
-
export class FungibleToken extends
|
16
|
+
export class FungibleToken extends TokenContract {
|
17
17
|
constructor() {
|
18
18
|
super(...arguments);
|
19
19
|
this.decimals = State();
|
@@ -70,7 +70,7 @@ export class FungibleToken extends TokenContractV2 {
|
|
70
70
|
return pk;
|
71
71
|
});
|
72
72
|
this.admin.requireEquals(admin);
|
73
|
-
return
|
73
|
+
return new FungibleToken.AdminContract(admin);
|
74
74
|
}
|
75
75
|
async setAdmin(admin) {
|
76
76
|
const adminContract = await this.getAdminContract();
|
@@ -80,12 +80,16 @@ export class FungibleToken extends TokenContractV2 {
|
|
80
80
|
this.emitEvent("SetAdmin", new SetAdminEvent({ adminKey: admin }));
|
81
81
|
}
|
82
82
|
async mint(recipient, amount) {
|
83
|
-
this.paused
|
83
|
+
this.paused
|
84
|
+
.getAndRequireEquals()
|
85
|
+
.assertFalse(FungibleTokenErrors.tokenPaused);
|
84
86
|
const accountUpdate = this.internal.mint({ address: recipient, amount });
|
85
87
|
const adminContract = await this.getAdminContract();
|
86
88
|
const canMint = await adminContract.canMint(accountUpdate);
|
87
89
|
canMint.assertTrue(FungibleTokenErrors.noPermissionToMint);
|
88
|
-
recipient
|
90
|
+
recipient
|
91
|
+
.equals(this.address)
|
92
|
+
.assertFalse(FungibleTokenErrors.noTransferFromCirculation);
|
89
93
|
this.approve(accountUpdate);
|
90
94
|
this.emitEvent("Mint", new MintEvent({ recipient, amount }));
|
91
95
|
const circulationUpdate = AccountUpdate.create(this.address, this.deriveTokenId());
|
@@ -93,11 +97,15 @@ export class FungibleToken extends TokenContractV2 {
|
|
93
97
|
return accountUpdate;
|
94
98
|
}
|
95
99
|
async burn(from, amount) {
|
96
|
-
this.paused
|
100
|
+
this.paused
|
101
|
+
.getAndRequireEquals()
|
102
|
+
.assertFalse(FungibleTokenErrors.tokenPaused);
|
97
103
|
const accountUpdate = this.internal.burn({ address: from, amount });
|
98
104
|
const circulationUpdate = AccountUpdate.create(this.address, this.deriveTokenId());
|
99
|
-
from
|
100
|
-
|
105
|
+
from
|
106
|
+
.equals(this.address)
|
107
|
+
.assertFalse(FungibleTokenErrors.noTransferFromCirculation);
|
108
|
+
circulationUpdate.balanceChange = Int64.fromUnsigned(amount).neg();
|
101
109
|
this.emitEvent("Burn", new BurnEvent({ from, amount }));
|
102
110
|
return accountUpdate;
|
103
111
|
}
|
@@ -116,8 +124,12 @@ export class FungibleToken extends TokenContractV2 {
|
|
116
124
|
this.emitEvent("Pause", new PauseEvent({ isPaused: Bool(false) }));
|
117
125
|
}
|
118
126
|
async transfer(from, to, amount) {
|
119
|
-
this.paused
|
120
|
-
|
127
|
+
this.paused
|
128
|
+
.getAndRequireEquals()
|
129
|
+
.assertFalse(FungibleTokenErrors.tokenPaused);
|
130
|
+
from
|
131
|
+
.equals(this.address)
|
132
|
+
.assertFalse(FungibleTokenErrors.noTransferFromCirculation);
|
121
133
|
to.equals(this.address).assertFalse(FungibleTokenErrors.noTransferFromCirculation);
|
122
134
|
this.internal.send({ from, to, amount });
|
123
135
|
}
|
@@ -134,16 +146,24 @@ export class FungibleToken extends TokenContractV2 {
|
|
134
146
|
* @argument {AccountUpdateForest} updates - The `AccountUpdate`s to approve. Note that the forest size is limited by the base token contract, @see TokenContractV2.MAX_ACCOUNT_UPDATES The current limit is 9.
|
135
147
|
*/
|
136
148
|
async approveBase(updates) {
|
137
|
-
this.paused
|
149
|
+
this.paused
|
150
|
+
.getAndRequireEquals()
|
151
|
+
.assertFalse(FungibleTokenErrors.tokenPaused);
|
138
152
|
let totalBalance = Int64.from(0);
|
139
153
|
this.forEachUpdate(updates, (update, usesToken) => {
|
140
154
|
// Make sure that the account permissions are not changed
|
141
155
|
this.checkPermissionsUpdate(update);
|
142
|
-
this.emitEventIf(usesToken, "BalanceChange", new BalanceChangeEvent({
|
156
|
+
this.emitEventIf(usesToken, "BalanceChange", new BalanceChangeEvent({
|
157
|
+
address: update.publicKey,
|
158
|
+
amount: update.balanceChange,
|
159
|
+
}));
|
143
160
|
// Don't allow transfers to/from the account that's tracking circulation
|
144
|
-
update.publicKey
|
161
|
+
update.publicKey
|
162
|
+
.equals(this.address)
|
163
|
+
.and(usesToken)
|
164
|
+
.assertFalse(FungibleTokenErrors.noTransferFromCirculation);
|
145
165
|
totalBalance = Provable.if(usesToken, totalBalance.add(update.balanceChange), totalBalance);
|
146
|
-
totalBalance.
|
166
|
+
totalBalance.isPositive().assertFalse(FungibleTokenErrors.flashMinting);
|
147
167
|
});
|
148
168
|
totalBalance.assertEquals(Int64.zero, FungibleTokenErrors.unbalancedTransaction);
|
149
169
|
}
|
@@ -189,9 +209,7 @@ __decorate([
|
|
189
209
|
__decorate([
|
190
210
|
method,
|
191
211
|
__metadata("design:type", Function),
|
192
|
-
__metadata("design:paramtypes", [PublicKey,
|
193
|
-
UInt8,
|
194
|
-
Bool]),
|
212
|
+
__metadata("design:paramtypes", [PublicKey, UInt8, Bool]),
|
195
213
|
__metadata("design:returntype", Promise)
|
196
214
|
], FungibleToken.prototype, "initialize", null);
|
197
215
|
__decorate([
|