@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.
- package/README.md +1400 -0
- package/dist/node/admin/advanced.d.ts +469 -0
- package/dist/node/admin/advanced.js +525 -0
- package/dist/node/admin/advanced.js.map +1 -0
- package/dist/node/admin/index.d.ts +1 -0
- package/dist/node/admin/index.js +2 -0
- package/dist/node/admin/index.js.map +1 -0
- package/dist/node/contracts/admin.d.ts +140 -0
- package/dist/node/contracts/admin.js +336 -0
- package/dist/node/contracts/admin.js.map +1 -0
- package/dist/node/contracts/collection.d.ts +551 -0
- package/dist/node/contracts/collection.js +1049 -0
- package/dist/node/contracts/collection.js.map +1 -0
- package/dist/node/contracts/index.d.ts +3 -0
- package/dist/node/contracts/index.js +4 -0
- package/dist/node/contracts/index.js.map +1 -0
- package/dist/node/contracts/nft.d.ts +76 -0
- package/dist/node/contracts/nft.js +329 -0
- package/dist/node/contracts/nft.js.map +1 -0
- package/dist/node/contracts.d.ts +709 -0
- package/dist/node/contracts.js +61 -0
- package/dist/node/contracts.js.map +1 -0
- package/dist/node/index.cjs +5032 -0
- package/dist/node/index.d.ts +8 -0
- package/dist/node/index.js +9 -0
- package/dist/node/index.js.map +1 -0
- package/dist/node/interfaces/admin.d.ts +102 -0
- package/dist/node/interfaces/admin.js +2 -0
- package/dist/node/interfaces/admin.js.map +1 -0
- package/dist/node/interfaces/approval.d.ts +57 -0
- package/dist/node/interfaces/approval.js +62 -0
- package/dist/node/interfaces/approval.js.map +1 -0
- package/dist/node/interfaces/collection.d.ts +57 -0
- package/dist/node/interfaces/collection.js +2 -0
- package/dist/node/interfaces/collection.js.map +1 -0
- package/dist/node/interfaces/encoding.d.ts +24 -0
- package/dist/node/interfaces/encoding.js +32 -0
- package/dist/node/interfaces/encoding.js.map +1 -0
- package/dist/node/interfaces/events.d.ts +833 -0
- package/dist/node/interfaces/events.js +106 -0
- package/dist/node/interfaces/events.js.map +1 -0
- package/dist/node/interfaces/index.d.ts +10 -0
- package/dist/node/interfaces/index.js +11 -0
- package/dist/node/interfaces/index.js.map +1 -0
- package/dist/node/interfaces/ownable.d.ts +94 -0
- package/dist/node/interfaces/ownable.js +12 -0
- package/dist/node/interfaces/ownable.js.map +1 -0
- package/dist/node/interfaces/owner.d.ts +61 -0
- package/dist/node/interfaces/owner.js +101 -0
- package/dist/node/interfaces/owner.js.map +1 -0
- package/dist/node/interfaces/pausable.d.ts +74 -0
- package/dist/node/interfaces/pausable.js +14 -0
- package/dist/node/interfaces/pausable.js.map +1 -0
- package/dist/node/interfaces/types.d.ts +2297 -0
- package/dist/node/interfaces/types.js +507 -0
- package/dist/node/interfaces/types.js.map +1 -0
- package/dist/node/interfaces/update.d.ts +53 -0
- package/dist/node/interfaces/update.js +58 -0
- package/dist/node/interfaces/update.js.map +1 -0
- package/dist/node/marketplace/auction.d.ts +775 -0
- package/dist/node/marketplace/auction.js +430 -0
- package/dist/node/marketplace/auction.js.map +1 -0
- package/dist/node/marketplace/bid.d.ts +254 -0
- package/dist/node/marketplace/bid.js +260 -0
- package/dist/node/marketplace/bid.js.map +1 -0
- package/dist/node/marketplace/index.d.ts +5 -0
- package/dist/node/marketplace/index.js +6 -0
- package/dist/node/marketplace/index.js.map +1 -0
- package/dist/node/marketplace/nft-shares.d.ts +1083 -0
- package/dist/node/marketplace/nft-shares.js +398 -0
- package/dist/node/marketplace/nft-shares.js.map +1 -0
- package/dist/node/marketplace/offer.d.ts +192 -0
- package/dist/node/marketplace/offer.js +132 -0
- package/dist/node/marketplace/offer.js.map +1 -0
- package/dist/node/marketplace/types.d.ts +374 -0
- package/dist/node/marketplace/types.js +33 -0
- package/dist/node/marketplace/types.js.map +1 -0
- package/dist/node/metadata/index.d.ts +3 -0
- package/dist/node/metadata/index.js +4 -0
- package/dist/node/metadata/index.js.map +1 -0
- package/dist/node/metadata/metadata.d.ts +337 -0
- package/dist/node/metadata/metadata.js +439 -0
- package/dist/node/metadata/metadata.js.map +1 -0
- package/dist/node/metadata/text.d.ts +44 -0
- package/dist/node/metadata/text.js +42 -0
- package/dist/node/metadata/text.js.map +1 -0
- package/dist/node/metadata/tree.d.ts +75 -0
- package/dist/node/metadata/tree.js +85 -0
- package/dist/node/metadata/tree.js.map +1 -0
- package/dist/node/vk.d.ts +42 -0
- package/dist/node/vk.js +45 -0
- package/dist/node/vk.js.map +1 -0
- package/dist/node/zkprogram-example/game.d.ts +76 -0
- package/dist/node/zkprogram-example/game.js +108 -0
- package/dist/node/zkprogram-example/game.js.map +1 -0
- package/dist/node/zkprogram-example/index.d.ts +2 -0
- package/dist/node/zkprogram-example/index.js +3 -0
- package/dist/node/zkprogram-example/index.js.map +1 -0
- package/dist/node/zkprogram-example/update.d.ts +76 -0
- package/dist/node/zkprogram-example/update.js +85 -0
- package/dist/node/zkprogram-example/update.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/tsconfig.web.tsbuildinfo +1 -0
- package/dist/web/admin/advanced.d.ts +469 -0
- package/dist/web/admin/advanced.js +525 -0
- package/dist/web/admin/advanced.js.map +1 -0
- package/dist/web/admin/index.d.ts +1 -0
- package/dist/web/admin/index.js +2 -0
- package/dist/web/admin/index.js.map +1 -0
- package/dist/web/contracts/admin.d.ts +140 -0
- package/dist/web/contracts/admin.js +336 -0
- package/dist/web/contracts/admin.js.map +1 -0
- package/dist/web/contracts/collection.d.ts +551 -0
- package/dist/web/contracts/collection.js +1049 -0
- package/dist/web/contracts/collection.js.map +1 -0
- package/dist/web/contracts/index.d.ts +3 -0
- package/dist/web/contracts/index.js +4 -0
- package/dist/web/contracts/index.js.map +1 -0
- package/dist/web/contracts/nft.d.ts +76 -0
- package/dist/web/contracts/nft.js +329 -0
- package/dist/web/contracts/nft.js.map +1 -0
- package/dist/web/contracts.d.ts +709 -0
- package/dist/web/contracts.js +61 -0
- package/dist/web/contracts.js.map +1 -0
- package/dist/web/index.d.ts +8 -0
- package/dist/web/index.js +9 -0
- package/dist/web/index.js.map +1 -0
- package/dist/web/interfaces/admin.d.ts +102 -0
- package/dist/web/interfaces/admin.js +2 -0
- package/dist/web/interfaces/admin.js.map +1 -0
- package/dist/web/interfaces/approval.d.ts +57 -0
- package/dist/web/interfaces/approval.js +62 -0
- package/dist/web/interfaces/approval.js.map +1 -0
- package/dist/web/interfaces/collection.d.ts +57 -0
- package/dist/web/interfaces/collection.js +2 -0
- package/dist/web/interfaces/collection.js.map +1 -0
- package/dist/web/interfaces/encoding.d.ts +24 -0
- package/dist/web/interfaces/encoding.js +32 -0
- package/dist/web/interfaces/encoding.js.map +1 -0
- package/dist/web/interfaces/events.d.ts +833 -0
- package/dist/web/interfaces/events.js +106 -0
- package/dist/web/interfaces/events.js.map +1 -0
- package/dist/web/interfaces/index.d.ts +10 -0
- package/dist/web/interfaces/index.js +11 -0
- package/dist/web/interfaces/index.js.map +1 -0
- package/dist/web/interfaces/ownable.d.ts +94 -0
- package/dist/web/interfaces/ownable.js +12 -0
- package/dist/web/interfaces/ownable.js.map +1 -0
- package/dist/web/interfaces/owner.d.ts +61 -0
- package/dist/web/interfaces/owner.js +101 -0
- package/dist/web/interfaces/owner.js.map +1 -0
- package/dist/web/interfaces/pausable.d.ts +74 -0
- package/dist/web/interfaces/pausable.js +14 -0
- package/dist/web/interfaces/pausable.js.map +1 -0
- package/dist/web/interfaces/types.d.ts +2297 -0
- package/dist/web/interfaces/types.js +507 -0
- package/dist/web/interfaces/types.js.map +1 -0
- package/dist/web/interfaces/update.d.ts +53 -0
- package/dist/web/interfaces/update.js +58 -0
- package/dist/web/interfaces/update.js.map +1 -0
- package/dist/web/marketplace/auction.d.ts +775 -0
- package/dist/web/marketplace/auction.js +430 -0
- package/dist/web/marketplace/auction.js.map +1 -0
- package/dist/web/marketplace/bid.d.ts +254 -0
- package/dist/web/marketplace/bid.js +260 -0
- package/dist/web/marketplace/bid.js.map +1 -0
- package/dist/web/marketplace/index.d.ts +5 -0
- package/dist/web/marketplace/index.js +6 -0
- package/dist/web/marketplace/index.js.map +1 -0
- package/dist/web/marketplace/nft-shares.d.ts +1083 -0
- package/dist/web/marketplace/nft-shares.js +398 -0
- package/dist/web/marketplace/nft-shares.js.map +1 -0
- package/dist/web/marketplace/offer.d.ts +192 -0
- package/dist/web/marketplace/offer.js +132 -0
- package/dist/web/marketplace/offer.js.map +1 -0
- package/dist/web/marketplace/types.d.ts +374 -0
- package/dist/web/marketplace/types.js +33 -0
- package/dist/web/marketplace/types.js.map +1 -0
- package/dist/web/metadata/index.d.ts +3 -0
- package/dist/web/metadata/index.js +4 -0
- package/dist/web/metadata/index.js.map +1 -0
- package/dist/web/metadata/metadata.d.ts +337 -0
- package/dist/web/metadata/metadata.js +439 -0
- package/dist/web/metadata/metadata.js.map +1 -0
- package/dist/web/metadata/text.d.ts +44 -0
- package/dist/web/metadata/text.js +42 -0
- package/dist/web/metadata/text.js.map +1 -0
- package/dist/web/metadata/tree.d.ts +75 -0
- package/dist/web/metadata/tree.js +85 -0
- package/dist/web/metadata/tree.js.map +1 -0
- package/dist/web/vk.d.ts +42 -0
- package/dist/web/vk.js +45 -0
- package/dist/web/vk.js.map +1 -0
- package/dist/web/zkprogram-example/game.d.ts +76 -0
- package/dist/web/zkprogram-example/game.js +108 -0
- package/dist/web/zkprogram-example/game.js.map +1 -0
- package/dist/web/zkprogram-example/index.d.ts +2 -0
- package/dist/web/zkprogram-example/index.js +3 -0
- package/dist/web/zkprogram-example/index.js.map +1 -0
- package/dist/web/zkprogram-example/update.d.ts +76 -0
- package/dist/web/zkprogram-example/update.js +85 -0
- package/dist/web/zkprogram-example/update.js.map +1 -0
- package/package.json +65 -0
- package/src/admin/advanced.ts +601 -0
- package/src/admin/index.ts +1 -0
- package/src/contracts/admin.ts +301 -0
- package/src/contracts/collection.ts +1172 -0
- package/src/contracts/index.ts +3 -0
- package/src/contracts/nft.ts +344 -0
- package/src/contracts.ts +107 -0
- package/src/index.ts +8 -0
- package/src/interfaces/admin.ts +127 -0
- package/src/interfaces/approval.ts +99 -0
- package/src/interfaces/collection.ts +68 -0
- package/src/interfaces/encoding.ts +32 -0
- package/src/interfaces/events.ts +115 -0
- package/src/interfaces/index.ts +10 -0
- package/src/interfaces/ownable.ts +32 -0
- package/src/interfaces/owner.ts +143 -0
- package/src/interfaces/pausable.ts +41 -0
- package/src/interfaces/types.ts +623 -0
- package/src/interfaces/update.ts +104 -0
- package/src/marketplace/auction.ts +527 -0
- package/src/marketplace/bid.ts +294 -0
- package/src/marketplace/index.ts +5 -0
- package/src/marketplace/nft-shares.ts +388 -0
- package/src/marketplace/offer.ts +153 -0
- package/src/marketplace/types.ts +33 -0
- package/src/metadata/index.ts +3 -0
- package/src/metadata/metadata.ts +603 -0
- package/src/metadata/text.ts +60 -0
- package/src/metadata/tree.ts +128 -0
- package/src/vk.ts +64 -0
- package/src/zkprogram-example/game.ts +136 -0
- package/src/zkprogram-example/index.ts +2 -0
- package/src/zkprogram-example/update.ts +98 -0
|
@@ -0,0 +1,439 @@
|
|
|
1
|
+
import { Field, Poseidon, Struct, Experimental } from "o1js";
|
|
2
|
+
import { fieldFromString } from "../interfaces/index.js";
|
|
3
|
+
import { Text } from "./text.js";
|
|
4
|
+
import { MetadataTree } from "./tree.js";
|
|
5
|
+
export { Metadata, MetadataMap, MetadataFieldTypeValues, MetadataValue, ColorPlugin, };
|
|
6
|
+
/**
|
|
7
|
+
* The height of the metadata Merkle tree.
|
|
8
|
+
*/
|
|
9
|
+
const METADATA_HEIGHT = 20;
|
|
10
|
+
const IndexedMerkleMap = Experimental.IndexedMerkleMap;
|
|
11
|
+
/**
|
|
12
|
+
* A specialized IndexedMerkleMap for storing metadata.
|
|
13
|
+
*/
|
|
14
|
+
class MetadataMap extends IndexedMerkleMap(METADATA_HEIGHT) {
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Represents a metadata value with its type and associated data.
|
|
18
|
+
*/
|
|
19
|
+
class MetadataValue extends Struct({
|
|
20
|
+
value: Field,
|
|
21
|
+
type: Field,
|
|
22
|
+
length: Field,
|
|
23
|
+
height: Field,
|
|
24
|
+
}) {
|
|
25
|
+
/**
|
|
26
|
+
* Creates a new MetadataValue instance.
|
|
27
|
+
* @param params - The parameters including value and type.
|
|
28
|
+
* @returns A new MetadataValue.
|
|
29
|
+
*/
|
|
30
|
+
static new(params) {
|
|
31
|
+
const { value, type } = params;
|
|
32
|
+
let valueField;
|
|
33
|
+
let length = Field(0);
|
|
34
|
+
let height = Field(0);
|
|
35
|
+
switch (type) {
|
|
36
|
+
case "string":
|
|
37
|
+
if (!(value instanceof Field))
|
|
38
|
+
throw new Error(`Invalid value type`);
|
|
39
|
+
valueField = value;
|
|
40
|
+
break;
|
|
41
|
+
case "text":
|
|
42
|
+
case "image":
|
|
43
|
+
case "url":
|
|
44
|
+
if (!(value instanceof Text))
|
|
45
|
+
throw new Error(`Invalid value type`);
|
|
46
|
+
valueField = value.root;
|
|
47
|
+
length = Field(value.size);
|
|
48
|
+
height = Field(value.height);
|
|
49
|
+
break;
|
|
50
|
+
case "field":
|
|
51
|
+
if (!(value instanceof Field))
|
|
52
|
+
throw new Error(`Invalid value type`);
|
|
53
|
+
valueField = value;
|
|
54
|
+
break;
|
|
55
|
+
case "map":
|
|
56
|
+
if (!(value instanceof Metadata))
|
|
57
|
+
throw new Error(`Invalid value type`);
|
|
58
|
+
valueField = value.map.root;
|
|
59
|
+
length = Field(value.map.length);
|
|
60
|
+
height = Field(value.map.height);
|
|
61
|
+
break;
|
|
62
|
+
case "tree":
|
|
63
|
+
if (!(value instanceof MetadataTree))
|
|
64
|
+
throw new Error(`Invalid value type`);
|
|
65
|
+
valueField = value.root;
|
|
66
|
+
length = Field(value.values.length);
|
|
67
|
+
height = Field(value.height);
|
|
68
|
+
break;
|
|
69
|
+
default:
|
|
70
|
+
throw new Error(`Unknown value type`);
|
|
71
|
+
}
|
|
72
|
+
return new MetadataValue({
|
|
73
|
+
value: valueField,
|
|
74
|
+
type: Field(MetadataFieldTypeValues[type].code),
|
|
75
|
+
length,
|
|
76
|
+
height,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Computes the Poseidon hash of the metadata value.
|
|
81
|
+
* @returns The hash as a Field.
|
|
82
|
+
*/
|
|
83
|
+
hash() {
|
|
84
|
+
return Poseidon.hash(MetadataValue.toFields(this));
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Abstract class for creating custom metadata plugins.
|
|
89
|
+
*/
|
|
90
|
+
class MetadataPlugin {
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* A plugin for handling color metadata.
|
|
94
|
+
*/
|
|
95
|
+
class ColorPlugin extends MetadataPlugin {
|
|
96
|
+
constructor() {
|
|
97
|
+
super(...arguments);
|
|
98
|
+
/**
|
|
99
|
+
* The name of the plugin.
|
|
100
|
+
*/
|
|
101
|
+
this.name = "color";
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Converts a color name or value into its numeric representation.
|
|
105
|
+
* @param value - The color value (name, string, or number).
|
|
106
|
+
* @returns The numeric representation of the color.
|
|
107
|
+
*/
|
|
108
|
+
getColor(value) {
|
|
109
|
+
if (typeof value === "string" &&
|
|
110
|
+
["blue", "red", "green", "yellow", "purple", "orange", "pink"].includes(value)) {
|
|
111
|
+
const colors = {
|
|
112
|
+
blue: 0x0000ff,
|
|
113
|
+
red: 0xff0000,
|
|
114
|
+
green: 0x00ff00,
|
|
115
|
+
yellow: 0xffff00,
|
|
116
|
+
purple: 0x800080,
|
|
117
|
+
orange: 0xffa500,
|
|
118
|
+
pink: 0xffc0cb,
|
|
119
|
+
};
|
|
120
|
+
return colors[value];
|
|
121
|
+
}
|
|
122
|
+
else if (typeof value === "number") {
|
|
123
|
+
return value;
|
|
124
|
+
}
|
|
125
|
+
else if (typeof value === "string") {
|
|
126
|
+
try {
|
|
127
|
+
// parse hex color like #0000ff
|
|
128
|
+
return parseInt(value.slice(1), 16);
|
|
129
|
+
}
|
|
130
|
+
catch (e) {
|
|
131
|
+
throw new Error("Invalid color value");
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
throw new Error("Invalid color value");
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Retrieves the trait representation of the color value.
|
|
138
|
+
* @param params - The parameters including key, type, and value.
|
|
139
|
+
* @returns An object containing the key, value, and canonical representation.
|
|
140
|
+
*/
|
|
141
|
+
getTrait(params) {
|
|
142
|
+
const { key, value } = params;
|
|
143
|
+
const color = this.getColor(value);
|
|
144
|
+
return {
|
|
145
|
+
key: fieldFromString(key),
|
|
146
|
+
value: new MetadataValue({
|
|
147
|
+
value: Field(color),
|
|
148
|
+
type: Field(10),
|
|
149
|
+
length: Field(0),
|
|
150
|
+
height: Field(0),
|
|
151
|
+
}),
|
|
152
|
+
canonicalRepresentation: color,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Converts the color value to a JSON string.
|
|
157
|
+
* @param value - The color value.
|
|
158
|
+
* @returns The JSON string representation.
|
|
159
|
+
*/
|
|
160
|
+
toJSON(value) {
|
|
161
|
+
return this.getColor(value).toString(16);
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Parses the color value from a JSON string or object.
|
|
165
|
+
* @param value - The JSON value.
|
|
166
|
+
* @returns The numeric representation of the color.
|
|
167
|
+
*/
|
|
168
|
+
fromJSON(value) {
|
|
169
|
+
if (typeof value !== "string")
|
|
170
|
+
throw new Error("Invalid color value");
|
|
171
|
+
return this.getColor(parseInt(value, 16));
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Represents the metadata for an NFT, including traits and associated data.
|
|
176
|
+
*/
|
|
177
|
+
class Metadata {
|
|
178
|
+
/**
|
|
179
|
+
* Creates a new Metadata instance.
|
|
180
|
+
* @param params - The parameters for the metadata, including name, image, description, banner, and plugins.
|
|
181
|
+
*/
|
|
182
|
+
constructor(params) {
|
|
183
|
+
/**
|
|
184
|
+
* Object containing the traits of the NFT.
|
|
185
|
+
*/
|
|
186
|
+
this.traits = {};
|
|
187
|
+
const { name, description, image, banner, plugins } = params;
|
|
188
|
+
this.plugins = plugins ?? [];
|
|
189
|
+
this.map = new MetadataMap();
|
|
190
|
+
this.addTrait({
|
|
191
|
+
key: "name",
|
|
192
|
+
type: "string",
|
|
193
|
+
value: name,
|
|
194
|
+
});
|
|
195
|
+
this.addTrait({
|
|
196
|
+
key: "image",
|
|
197
|
+
type: "image",
|
|
198
|
+
value: image,
|
|
199
|
+
});
|
|
200
|
+
if (description) {
|
|
201
|
+
this.addTrait({
|
|
202
|
+
key: "description",
|
|
203
|
+
type: "text",
|
|
204
|
+
value: description,
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
if (banner) {
|
|
208
|
+
this.addTrait({
|
|
209
|
+
key: "banner",
|
|
210
|
+
type: "image",
|
|
211
|
+
value: banner,
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
this.name = name;
|
|
215
|
+
this.image = image;
|
|
216
|
+
this.banner = banner;
|
|
217
|
+
this.description = description;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Adds a trait to the metadata.
|
|
221
|
+
* @param params - The parameters including key, type, value, and isPrivate.
|
|
222
|
+
* @returns An object containing the key and the metadata value.
|
|
223
|
+
*/
|
|
224
|
+
addTrait(params) {
|
|
225
|
+
const { key, type, value, isPrivate = false } = params;
|
|
226
|
+
let keyField = fieldFromString(key);
|
|
227
|
+
let metadataValue;
|
|
228
|
+
let canonicalRepresentation = value;
|
|
229
|
+
if (type in MetadataFieldTypeValues) {
|
|
230
|
+
let valueObject;
|
|
231
|
+
switch (type) {
|
|
232
|
+
case "string":
|
|
233
|
+
if (typeof value !== "string")
|
|
234
|
+
throw new Error(`Invalid trait value type`);
|
|
235
|
+
valueObject = fieldFromString(value);
|
|
236
|
+
break;
|
|
237
|
+
case "text":
|
|
238
|
+
case "image":
|
|
239
|
+
case "url":
|
|
240
|
+
if (typeof value !== "string")
|
|
241
|
+
throw new Error(`Invalid trait value type`);
|
|
242
|
+
valueObject = new Text(value);
|
|
243
|
+
break;
|
|
244
|
+
case "field":
|
|
245
|
+
if (!(value instanceof Field))
|
|
246
|
+
throw new Error(`Invalid trait value type`);
|
|
247
|
+
valueObject = value;
|
|
248
|
+
break;
|
|
249
|
+
case "map":
|
|
250
|
+
if (!(value instanceof Metadata))
|
|
251
|
+
throw new Error(`Invalid trait value type`);
|
|
252
|
+
valueObject = value;
|
|
253
|
+
break;
|
|
254
|
+
case "tree":
|
|
255
|
+
if (!(value instanceof MetadataTree))
|
|
256
|
+
throw new Error(`Invalid trait value type`);
|
|
257
|
+
valueObject = value;
|
|
258
|
+
break;
|
|
259
|
+
default:
|
|
260
|
+
throw new Error(`Unknown trait value type - internal error`);
|
|
261
|
+
}
|
|
262
|
+
metadataValue = MetadataValue.new({ value: valueObject, type });
|
|
263
|
+
}
|
|
264
|
+
else {
|
|
265
|
+
const index = this.plugins.findIndex((plugin) => plugin.name === type);
|
|
266
|
+
if (index !== -1) {
|
|
267
|
+
const plugin = this.plugins[index];
|
|
268
|
+
const pluginTrait = plugin.getTrait({ key, type, value, isPrivate });
|
|
269
|
+
metadataValue = pluginTrait.value;
|
|
270
|
+
keyField = pluginTrait.key;
|
|
271
|
+
canonicalRepresentation = pluginTrait.canonicalRepresentation;
|
|
272
|
+
}
|
|
273
|
+
else
|
|
274
|
+
throw new Error(`Unknown trait type`);
|
|
275
|
+
}
|
|
276
|
+
this.map.set(keyField, metadataValue.hash());
|
|
277
|
+
this.traits[key] = { type, value: canonicalRepresentation, isPrivate };
|
|
278
|
+
return { key: keyField, value: metadataValue };
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Converts the metadata to a JSON representation.
|
|
282
|
+
* @param includePrivateTraits - Whether to include private traits.
|
|
283
|
+
* @returns The JSON representation of the metadata.
|
|
284
|
+
*/
|
|
285
|
+
toJSON(includePrivateTraits = false) {
|
|
286
|
+
return {
|
|
287
|
+
name: this.name,
|
|
288
|
+
description: this.description,
|
|
289
|
+
image: this.image,
|
|
290
|
+
banner: this.banner,
|
|
291
|
+
metadataRoot: this.map.root.toJSON(),
|
|
292
|
+
traits: Object.entries(this.traits)
|
|
293
|
+
.filter(([_, { isPrivate }]) => includePrivateTraits || !isPrivate)
|
|
294
|
+
.map(([key, { type, value, isPrivate }]) => {
|
|
295
|
+
let jsonValue;
|
|
296
|
+
switch (type) {
|
|
297
|
+
case "string":
|
|
298
|
+
case "text":
|
|
299
|
+
case "image":
|
|
300
|
+
case "url":
|
|
301
|
+
if (typeof value !== "string")
|
|
302
|
+
throw new Error(`Invalid trait value type`);
|
|
303
|
+
jsonValue = value;
|
|
304
|
+
break;
|
|
305
|
+
case "field":
|
|
306
|
+
if (!(value instanceof Field))
|
|
307
|
+
throw new Error(`Invalid trait value type`);
|
|
308
|
+
jsonValue = value.toJSON();
|
|
309
|
+
break;
|
|
310
|
+
case "map":
|
|
311
|
+
if (!(value instanceof Metadata))
|
|
312
|
+
throw new Error(`Invalid trait value type`);
|
|
313
|
+
jsonValue = value.toJSON(includePrivateTraits);
|
|
314
|
+
break;
|
|
315
|
+
case "tree":
|
|
316
|
+
if (!(value instanceof MetadataTree))
|
|
317
|
+
throw new Error(`Invalid trait value type`);
|
|
318
|
+
jsonValue = value.toJSON();
|
|
319
|
+
break;
|
|
320
|
+
default:
|
|
321
|
+
const plugin = this.plugins.find((plugin) => plugin.name === type);
|
|
322
|
+
if (!plugin)
|
|
323
|
+
throw new Error(`Unknown trait type`);
|
|
324
|
+
jsonValue = plugin.toJSON(value);
|
|
325
|
+
}
|
|
326
|
+
return {
|
|
327
|
+
key,
|
|
328
|
+
type,
|
|
329
|
+
...(isPrivate ? { isPrivate } : {}),
|
|
330
|
+
value: jsonValue,
|
|
331
|
+
};
|
|
332
|
+
}),
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Constructs a Metadata instance from JSON data.
|
|
337
|
+
* @param params - The parameters including json data, checkRoot flag, and plugins.
|
|
338
|
+
* @returns A new Metadata instance.
|
|
339
|
+
*/
|
|
340
|
+
static fromJSON(params) {
|
|
341
|
+
const { json, checkRoot = false, plugins } = params;
|
|
342
|
+
const { name, description, image, banner, metadataRoot, traits } = json;
|
|
343
|
+
if (!name)
|
|
344
|
+
throw new Error(`Metadata name is required`);
|
|
345
|
+
if (typeof name !== "string")
|
|
346
|
+
throw new Error(`Invalid metadata name`);
|
|
347
|
+
if (!image || typeof image !== "string")
|
|
348
|
+
throw new Error(`Invalid metadata image`);
|
|
349
|
+
if (description && typeof description !== "string")
|
|
350
|
+
throw new Error(`Invalid metadata description`);
|
|
351
|
+
if (banner && typeof banner !== "string")
|
|
352
|
+
throw new Error(`Invalid metadata banner`);
|
|
353
|
+
if (!metadataRoot || typeof metadataRoot !== "string")
|
|
354
|
+
throw new Error(`Invalid metadata root`);
|
|
355
|
+
if (!traits || !Array.isArray(traits))
|
|
356
|
+
throw new Error(`Metadata traits are required`);
|
|
357
|
+
for (const { key, type, value, isPrivate } of traits) {
|
|
358
|
+
if (!key || typeof key !== "string")
|
|
359
|
+
throw new Error(`Invalid trait key`);
|
|
360
|
+
if (!type || typeof type !== "string")
|
|
361
|
+
throw new Error(`Invalid trait type`);
|
|
362
|
+
if (!value || (typeof value !== "string" && typeof value !== "object"))
|
|
363
|
+
throw new Error(`Invalid trait value`);
|
|
364
|
+
if (isPrivate && typeof isPrivate !== "boolean")
|
|
365
|
+
throw new Error(`Invalid trait isPrivate`);
|
|
366
|
+
}
|
|
367
|
+
const metadata = new Metadata({
|
|
368
|
+
name,
|
|
369
|
+
description,
|
|
370
|
+
image,
|
|
371
|
+
banner,
|
|
372
|
+
plugins,
|
|
373
|
+
});
|
|
374
|
+
for (const { key, type, value, isPrivate } of traits) {
|
|
375
|
+
let valueField;
|
|
376
|
+
switch (type) {
|
|
377
|
+
case "string":
|
|
378
|
+
case "text":
|
|
379
|
+
case "image":
|
|
380
|
+
case "url":
|
|
381
|
+
if (typeof value !== "string")
|
|
382
|
+
throw new Error(`Invalid trait value type`);
|
|
383
|
+
valueField = value;
|
|
384
|
+
break;
|
|
385
|
+
case "field":
|
|
386
|
+
if (typeof value !== "string")
|
|
387
|
+
throw new Error(`Invalid trait value type`);
|
|
388
|
+
valueField = Field.fromJSON(value);
|
|
389
|
+
break;
|
|
390
|
+
case "map":
|
|
391
|
+
if (typeof value !== "object")
|
|
392
|
+
throw new Error(`Invalid trait value type`);
|
|
393
|
+
valueField = Metadata.fromJSON({
|
|
394
|
+
json: value,
|
|
395
|
+
checkRoot,
|
|
396
|
+
});
|
|
397
|
+
break;
|
|
398
|
+
case "tree":
|
|
399
|
+
if (typeof value !== "object")
|
|
400
|
+
throw new Error(`Invalid trait value type`);
|
|
401
|
+
valueField = MetadataTree.fromJSON(value);
|
|
402
|
+
break;
|
|
403
|
+
default:
|
|
404
|
+
const plugin = metadata.plugins.find((plugin) => plugin.name === type);
|
|
405
|
+
if (!plugin)
|
|
406
|
+
throw new Error(`Unknown trait type`);
|
|
407
|
+
valueField = plugin.fromJSON(value);
|
|
408
|
+
}
|
|
409
|
+
metadata.addTrait({
|
|
410
|
+
key,
|
|
411
|
+
type,
|
|
412
|
+
value: valueField,
|
|
413
|
+
isPrivate: isPrivate ?? false,
|
|
414
|
+
});
|
|
415
|
+
}
|
|
416
|
+
if (checkRoot === true && metadata.map.root.toJSON() !== metadataRoot) {
|
|
417
|
+
throw new Error(`Invalid metadata root:${JSON.stringify({
|
|
418
|
+
params,
|
|
419
|
+
root: metadata.map.root.toJSON(),
|
|
420
|
+
checkRoot,
|
|
421
|
+
metadata: metadata.toJSON(true),
|
|
422
|
+
}, null, 2)}`);
|
|
423
|
+
}
|
|
424
|
+
return metadata;
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
/**
|
|
428
|
+
* Mapping of metadata field types to their code values and associated types.
|
|
429
|
+
*/
|
|
430
|
+
const MetadataFieldTypeValues = {
|
|
431
|
+
string: { code: 1n, inputType: "string", storedType: Field }, // Field
|
|
432
|
+
text: { code: 2n, inputType: "string", storedType: Text }, // Text
|
|
433
|
+
image: { code: 3n, inputType: "string", storedType: Text }, // Text
|
|
434
|
+
url: { code: 4n, inputType: "string", storedType: Text }, // Text
|
|
435
|
+
field: { code: 5n, inputType: Field, storedType: Field }, // Field
|
|
436
|
+
map: { code: 6n, inputType: Metadata, storedType: Metadata }, // Metadata
|
|
437
|
+
tree: { code: 7n, inputType: MetadataTree, storedType: MetadataTree }, // MetadataTree
|
|
438
|
+
};
|
|
439
|
+
//# sourceMappingURL=metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../../src/metadata/metadata.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Field } from "o1js";
|
|
2
|
+
export { Text, TEXT_TREE_HEIGHT };
|
|
3
|
+
/**
|
|
4
|
+
* The default height of the Merkle tree used to represent the text data.
|
|
5
|
+
*/
|
|
6
|
+
declare const TEXT_TREE_HEIGHT = 20;
|
|
7
|
+
/**
|
|
8
|
+
* The `Text` class represents textual data in the form of a Merkle tree. Each character of the text is converted to its
|
|
9
|
+
* ASCII code and stored as a leaf in the Merkle tree. The root of the tree can be used as a compact representation
|
|
10
|
+
* of the text data in cryptographic proofs.
|
|
11
|
+
*/
|
|
12
|
+
declare class Text {
|
|
13
|
+
/**
|
|
14
|
+
* The length of the text.
|
|
15
|
+
*/
|
|
16
|
+
readonly size: number;
|
|
17
|
+
/**
|
|
18
|
+
* The original text string.
|
|
19
|
+
*/
|
|
20
|
+
readonly text: string;
|
|
21
|
+
/**
|
|
22
|
+
* The root of the Merkle tree representing the text data.
|
|
23
|
+
*/
|
|
24
|
+
readonly root: Field;
|
|
25
|
+
/**
|
|
26
|
+
* The height of the Merkle tree.
|
|
27
|
+
*/
|
|
28
|
+
readonly height: number;
|
|
29
|
+
/**
|
|
30
|
+
* Constructs a new `Text` instance by creating a Merkle tree from the given text string.
|
|
31
|
+
* Each character in the text is converted to its ASCII code and stored as a leaf in the tree.
|
|
32
|
+
*
|
|
33
|
+
* @param text - The text string to be represented.
|
|
34
|
+
* @param height - The height of the Merkle tree. Defaults to `TEXT_TREE_HEIGHT`.
|
|
35
|
+
* @throws Will throw an error if the text length exceeds the number of leaves in the Merkle tree.
|
|
36
|
+
*/
|
|
37
|
+
constructor(text: string, height?: number);
|
|
38
|
+
/**
|
|
39
|
+
* Returns the original text string.
|
|
40
|
+
*
|
|
41
|
+
* @returns The text string.
|
|
42
|
+
*/
|
|
43
|
+
toString(): string;
|
|
44
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { MerkleTree, Field } from "o1js";
|
|
2
|
+
export { Text, TEXT_TREE_HEIGHT };
|
|
3
|
+
/**
|
|
4
|
+
* The default height of the Merkle tree used to represent the text data.
|
|
5
|
+
*/
|
|
6
|
+
const TEXT_TREE_HEIGHT = 20;
|
|
7
|
+
/**
|
|
8
|
+
* The `Text` class represents textual data in the form of a Merkle tree. Each character of the text is converted to its
|
|
9
|
+
* ASCII code and stored as a leaf in the Merkle tree. The root of the tree can be used as a compact representation
|
|
10
|
+
* of the text data in cryptographic proofs.
|
|
11
|
+
*/
|
|
12
|
+
class Text {
|
|
13
|
+
/**
|
|
14
|
+
* Constructs a new `Text` instance by creating a Merkle tree from the given text string.
|
|
15
|
+
* Each character in the text is converted to its ASCII code and stored as a leaf in the tree.
|
|
16
|
+
*
|
|
17
|
+
* @param text - The text string to be represented.
|
|
18
|
+
* @param height - The height of the Merkle tree. Defaults to `TEXT_TREE_HEIGHT`.
|
|
19
|
+
* @throws Will throw an error if the text length exceeds the number of leaves in the Merkle tree.
|
|
20
|
+
*/
|
|
21
|
+
constructor(text, height = TEXT_TREE_HEIGHT) {
|
|
22
|
+
this.text = text;
|
|
23
|
+
this.size = text.length;
|
|
24
|
+
const tree = new MerkleTree(height);
|
|
25
|
+
if (this.size > tree.leafCount)
|
|
26
|
+
throw new Error(`Text is too long`);
|
|
27
|
+
for (let i = 0; i < this.size; i++) {
|
|
28
|
+
tree.setLeaf(BigInt(i), Field.from(this.text.charCodeAt(i)));
|
|
29
|
+
}
|
|
30
|
+
this.root = tree.getRoot();
|
|
31
|
+
this.height = height;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Returns the original text string.
|
|
35
|
+
*
|
|
36
|
+
* @returns The text string.
|
|
37
|
+
*/
|
|
38
|
+
toString() {
|
|
39
|
+
return this.text;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../../src/metadata/text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC;AAElC;;GAEG;AACH,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAE5B;;;;GAIG;AACH,MAAM,IAAI;IAkBR;;;;;;;OAOG;IACH,YAAY,IAAY,EAAE,SAAiB,gBAAgB;QACzD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;QACxB,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACpE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;;;OAIG;IACI,QAAQ;QACb,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;CACF"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { Field } from "o1js";
|
|
2
|
+
/**
|
|
3
|
+
* Represents a metadata tree using a Merkle tree structure.
|
|
4
|
+
*
|
|
5
|
+
* The `MetadataTree` class is used to manage a set of key-value pairs representing metadata,
|
|
6
|
+
* storing them in a Merkle tree for efficient verification and integrity checks.
|
|
7
|
+
*
|
|
8
|
+
* This class is a utility within the NFT standard on Mina Protocol, enabling secure and verifiable
|
|
9
|
+
* storage of metadata. By leveraging the Merkle tree, clients can prove the inclusion of specific
|
|
10
|
+
* metadata entries without exposing the entire dataset.
|
|
11
|
+
*/
|
|
12
|
+
export declare class MetadataTree {
|
|
13
|
+
/**
|
|
14
|
+
* The list of key-value pairs stored in the tree.
|
|
15
|
+
* Each key is a `bigint` representing the index in the Merkle tree,
|
|
16
|
+
* and each value is a `Field` element from o1js.
|
|
17
|
+
*/
|
|
18
|
+
readonly values: {
|
|
19
|
+
key: bigint;
|
|
20
|
+
value: Field;
|
|
21
|
+
}[];
|
|
22
|
+
/**
|
|
23
|
+
* The height of the Merkle tree.
|
|
24
|
+
* Determines the maximum number of elements the tree can hold.
|
|
25
|
+
*/
|
|
26
|
+
readonly height: number;
|
|
27
|
+
/**
|
|
28
|
+
* The root of the Merkle tree.
|
|
29
|
+
* Used for verifying the integrity of the tree and its contents.
|
|
30
|
+
*/
|
|
31
|
+
readonly root: Field;
|
|
32
|
+
/**
|
|
33
|
+
* Constructs a new `MetadataTree` with the specified height and key-value pairs.
|
|
34
|
+
*
|
|
35
|
+
* @param height - The height of the Merkle tree (must be between 1 and 254).
|
|
36
|
+
* @param values - An array of key-value pairs to store in the tree.
|
|
37
|
+
*
|
|
38
|
+
* @throws Will throw an error if the number of values exceeds the maximum capacity of the tree.
|
|
39
|
+
* @throws Will throw an error if any key is out of bounds for the tree height.
|
|
40
|
+
*/
|
|
41
|
+
constructor(height: number, values: {
|
|
42
|
+
key: bigint;
|
|
43
|
+
value: Field;
|
|
44
|
+
}[]);
|
|
45
|
+
/**
|
|
46
|
+
* Serializes the `MetadataTree` to a JSON object.
|
|
47
|
+
*
|
|
48
|
+
* @returns An object containing the tree's height, root, and values.
|
|
49
|
+
*/
|
|
50
|
+
toJSON(): {
|
|
51
|
+
height: number;
|
|
52
|
+
root: string;
|
|
53
|
+
values: {
|
|
54
|
+
key: string;
|
|
55
|
+
value: string;
|
|
56
|
+
}[];
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Deserializes a JSON object into a `MetadataTree` instance.
|
|
60
|
+
*
|
|
61
|
+
* @param json - The JSON object containing the tree data.
|
|
62
|
+
*
|
|
63
|
+
* @returns A new `MetadataTree` instance constructed from the JSON data.
|
|
64
|
+
*
|
|
65
|
+
* @throws Will throw an error if the JSON data is invalid or inconsistent.
|
|
66
|
+
*/
|
|
67
|
+
static fromJSON(json: {
|
|
68
|
+
height: number;
|
|
69
|
+
root: string;
|
|
70
|
+
values: {
|
|
71
|
+
key: string;
|
|
72
|
+
value: string;
|
|
73
|
+
}[];
|
|
74
|
+
}): MetadataTree;
|
|
75
|
+
}
|