@silvana-one/nft 0.1.30 → 0.2.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/dist/node/index.cjs +57 -1
- package/dist/node/marketplace/bb.d.ts +18 -0
- package/dist/node/marketplace/bb.js +58 -0
- package/dist/node/marketplace/bb.js.map +1 -1
- package/dist/tsconfig.node.tsbuildinfo +1 -0
- package/dist/web/src/admin/advanced.js.map +1 -0
- package/dist/web/src/admin/index.js.map +1 -0
- package/dist/web/src/contracts/admin.js.map +1 -0
- package/dist/web/src/contracts/collection.js.map +1 -0
- package/dist/web/src/contracts/index.js.map +1 -0
- package/dist/web/src/contracts/nft.js.map +1 -0
- package/dist/web/src/contracts.js.map +1 -0
- package/dist/web/src/index.js.map +1 -0
- package/dist/web/{interfaces → src/interfaces}/admin.js.map +1 -1
- package/dist/web/src/interfaces/approval.js.map +1 -0
- package/dist/web/src/interfaces/collection.js.map +1 -0
- package/dist/web/src/interfaces/encoding.js.map +1 -0
- package/dist/web/src/interfaces/events.js.map +1 -0
- package/dist/web/src/interfaces/index.js.map +1 -0
- package/dist/web/src/interfaces/ownable.js.map +1 -0
- package/dist/web/src/interfaces/owner.js.map +1 -0
- package/dist/web/src/interfaces/pausable.js.map +1 -0
- package/dist/web/src/interfaces/types.js.map +1 -0
- package/dist/web/src/interfaces/update.js.map +1 -0
- package/dist/web/src/marketplace/auction.js.map +1 -0
- package/dist/web/{marketplace → src/marketplace}/bb.d.ts +18 -0
- package/dist/web/{marketplace → src/marketplace}/bb.js +58 -0
- package/dist/web/src/marketplace/bb.js.map +1 -0
- package/dist/web/src/marketplace/bid.js.map +1 -0
- package/dist/web/src/marketplace/index.js.map +1 -0
- package/dist/web/src/marketplace/nft-shares.js.map +1 -0
- package/dist/web/src/marketplace/offer.js.map +1 -0
- package/dist/web/src/marketplace/types.js.map +1 -0
- package/dist/web/src/metadata/address.js.map +1 -0
- package/dist/web/src/metadata/index.js.map +1 -0
- package/dist/web/src/metadata/metadata.js.map +1 -0
- package/dist/web/src/metadata/pin.js.map +1 -0
- package/dist/web/src/metadata/text.js.map +1 -0
- package/dist/web/src/metadata/tree.js.map +1 -0
- package/dist/web/src/util/div.js.map +1 -0
- package/dist/web/src/util/index.js.map +1 -0
- package/dist/web/src/vk.js.map +1 -0
- package/dist/web/src/zkprogram-example/game.js.map +1 -0
- package/dist/web/src/zkprogram-example/index.js.map +1 -0
- package/dist/web/src/zkprogram-example/update.js.map +1 -0
- package/dist/web/test/auction.test.d.ts +1212 -0
- package/dist/web/test/auction.test.js +1248 -0
- package/dist/web/test/auction.test.js.map +1 -0
- package/dist/web/test/bb.test.d.ts +1 -0
- package/dist/web/test/bb.test.js +159 -0
- package/dist/web/test/bb.test.js.map +1 -0
- package/dist/web/test/contract.test.d.ts +1 -0
- package/dist/web/test/contract.test.js +1333 -0
- package/dist/web/test/contract.test.js.map +1 -0
- package/dist/web/test/div.test.d.ts +1 -0
- package/dist/web/test/div.test.js +55 -0
- package/dist/web/test/div.test.js.map +1 -0
- package/dist/web/test/helpers/config.d.ts +4 -0
- package/dist/web/test/helpers/config.js +103 -0
- package/dist/web/test/helpers/config.js.map +1 -0
- package/dist/web/test/helpers/metadata.d.ts +30 -0
- package/dist/web/test/helpers/metadata.js +155 -0
- package/dist/web/test/helpers/metadata.js.map +1 -0
- package/dist/web/test/helpers/utils.d.ts +16 -0
- package/dist/web/test/helpers/utils.js +36 -0
- package/dist/web/test/helpers/utils.js.map +1 -0
- package/dist/web/test/helpers/validators.d.ts +15 -0
- package/dist/web/test/helpers/validators.js +46 -0
- package/dist/web/test/helpers/validators.js.map +1 -0
- package/dist/web/test/metadata.test.d.ts +1 -0
- package/dist/web/test/metadata.test.js +66 -0
- package/dist/web/test/metadata.test.js.map +1 -0
- package/dist/web/test/mint.test.d.ts +1 -0
- package/dist/web/test/mint.test.js +262 -0
- package/dist/web/test/mint.test.js.map +1 -0
- package/dist/web/test/pack.test.d.ts +1 -0
- package/dist/web/test/pack.test.js +141 -0
- package/dist/web/test/pack.test.js.map +1 -0
- package/dist/web/test/zkprogram.test.d.ts +1 -0
- package/dist/web/test/zkprogram.test.js +728 -0
- package/dist/web/test/zkprogram.test.js.map +1 -0
- package/dist/web/tsconfig.web.tsbuildinfo +1 -0
- package/package.json +88 -14
- package/src/marketplace/bb.ts +51 -0
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/dist/tsconfig.web.tsbuildinfo +0 -1
- package/dist/web/admin/advanced.js.map +0 -1
- package/dist/web/admin/index.js.map +0 -1
- package/dist/web/contracts/admin.js.map +0 -1
- package/dist/web/contracts/collection.js.map +0 -1
- package/dist/web/contracts/index.js.map +0 -1
- package/dist/web/contracts/nft.js.map +0 -1
- package/dist/web/contracts.js.map +0 -1
- package/dist/web/index.js.map +0 -1
- package/dist/web/interfaces/approval.js.map +0 -1
- package/dist/web/interfaces/collection.js.map +0 -1
- package/dist/web/interfaces/encoding.js.map +0 -1
- package/dist/web/interfaces/events.js.map +0 -1
- package/dist/web/interfaces/index.js.map +0 -1
- package/dist/web/interfaces/ownable.js.map +0 -1
- package/dist/web/interfaces/owner.js.map +0 -1
- package/dist/web/interfaces/pausable.js.map +0 -1
- package/dist/web/interfaces/types.js.map +0 -1
- package/dist/web/interfaces/update.js.map +0 -1
- package/dist/web/marketplace/auction.js.map +0 -1
- package/dist/web/marketplace/bb.js.map +0 -1
- package/dist/web/marketplace/bid.js.map +0 -1
- package/dist/web/marketplace/index.js.map +0 -1
- package/dist/web/marketplace/nft-shares.js.map +0 -1
- package/dist/web/marketplace/offer.js.map +0 -1
- package/dist/web/marketplace/types.js.map +0 -1
- package/dist/web/metadata/address.js.map +0 -1
- package/dist/web/metadata/index.js.map +0 -1
- package/dist/web/metadata/metadata.js.map +0 -1
- package/dist/web/metadata/pin.js.map +0 -1
- package/dist/web/metadata/text.js.map +0 -1
- package/dist/web/metadata/tree.js.map +0 -1
- package/dist/web/util/div.js.map +0 -1
- package/dist/web/util/index.js.map +0 -1
- package/dist/web/vk.js.map +0 -1
- package/dist/web/zkprogram-example/game.js.map +0 -1
- package/dist/web/zkprogram-example/index.js.map +0 -1
- package/dist/web/zkprogram-example/update.js.map +0 -1
- /package/dist/web/{admin → src/admin}/advanced.d.ts +0 -0
- /package/dist/web/{admin → src/admin}/advanced.js +0 -0
- /package/dist/web/{admin → src/admin}/index.d.ts +0 -0
- /package/dist/web/{admin → src/admin}/index.js +0 -0
- /package/dist/web/{contracts → src/contracts}/admin.d.ts +0 -0
- /package/dist/web/{contracts → src/contracts}/admin.js +0 -0
- /package/dist/web/{contracts → src/contracts}/collection.d.ts +0 -0
- /package/dist/web/{contracts → src/contracts}/collection.js +0 -0
- /package/dist/web/{contracts → src/contracts}/index.d.ts +0 -0
- /package/dist/web/{contracts → src/contracts}/index.js +0 -0
- /package/dist/web/{contracts → src/contracts}/nft.d.ts +0 -0
- /package/dist/web/{contracts → src/contracts}/nft.js +0 -0
- /package/dist/web/{contracts.d.ts → src/contracts.d.ts} +0 -0
- /package/dist/web/{contracts.js → src/contracts.js} +0 -0
- /package/dist/web/{index.d.ts → src/index.d.ts} +0 -0
- /package/dist/web/{index.js → src/index.js} +0 -0
- /package/dist/web/{interfaces → src/interfaces}/admin.d.ts +0 -0
- /package/dist/web/{interfaces → src/interfaces}/admin.js +0 -0
- /package/dist/web/{interfaces → src/interfaces}/approval.d.ts +0 -0
- /package/dist/web/{interfaces → src/interfaces}/approval.js +0 -0
- /package/dist/web/{interfaces → src/interfaces}/collection.d.ts +0 -0
- /package/dist/web/{interfaces → src/interfaces}/collection.js +0 -0
- /package/dist/web/{interfaces → src/interfaces}/encoding.d.ts +0 -0
- /package/dist/web/{interfaces → src/interfaces}/encoding.js +0 -0
- /package/dist/web/{interfaces → src/interfaces}/events.d.ts +0 -0
- /package/dist/web/{interfaces → src/interfaces}/events.js +0 -0
- /package/dist/web/{interfaces → src/interfaces}/index.d.ts +0 -0
- /package/dist/web/{interfaces → src/interfaces}/index.js +0 -0
- /package/dist/web/{interfaces → src/interfaces}/ownable.d.ts +0 -0
- /package/dist/web/{interfaces → src/interfaces}/ownable.js +0 -0
- /package/dist/web/{interfaces → src/interfaces}/owner.d.ts +0 -0
- /package/dist/web/{interfaces → src/interfaces}/owner.js +0 -0
- /package/dist/web/{interfaces → src/interfaces}/pausable.d.ts +0 -0
- /package/dist/web/{interfaces → src/interfaces}/pausable.js +0 -0
- /package/dist/web/{interfaces → src/interfaces}/types.d.ts +0 -0
- /package/dist/web/{interfaces → src/interfaces}/types.js +0 -0
- /package/dist/web/{interfaces → src/interfaces}/update.d.ts +0 -0
- /package/dist/web/{interfaces → src/interfaces}/update.js +0 -0
- /package/dist/web/{marketplace → src/marketplace}/auction.d.ts +0 -0
- /package/dist/web/{marketplace → src/marketplace}/auction.js +0 -0
- /package/dist/web/{marketplace → src/marketplace}/bid.d.ts +0 -0
- /package/dist/web/{marketplace → src/marketplace}/bid.js +0 -0
- /package/dist/web/{marketplace → src/marketplace}/index.d.ts +0 -0
- /package/dist/web/{marketplace → src/marketplace}/index.js +0 -0
- /package/dist/web/{marketplace → src/marketplace}/nft-shares.d.ts +0 -0
- /package/dist/web/{marketplace → src/marketplace}/nft-shares.js +0 -0
- /package/dist/web/{marketplace → src/marketplace}/offer.d.ts +0 -0
- /package/dist/web/{marketplace → src/marketplace}/offer.js +0 -0
- /package/dist/web/{marketplace → src/marketplace}/types.d.ts +0 -0
- /package/dist/web/{marketplace → src/marketplace}/types.js +0 -0
- /package/dist/web/{metadata → src/metadata}/address.d.ts +0 -0
- /package/dist/web/{metadata → src/metadata}/address.js +0 -0
- /package/dist/web/{metadata → src/metadata}/index.d.ts +0 -0
- /package/dist/web/{metadata → src/metadata}/index.js +0 -0
- /package/dist/web/{metadata → src/metadata}/metadata.d.ts +0 -0
- /package/dist/web/{metadata → src/metadata}/metadata.js +0 -0
- /package/dist/web/{metadata → src/metadata}/pin.d.ts +0 -0
- /package/dist/web/{metadata → src/metadata}/pin.js +0 -0
- /package/dist/web/{metadata → src/metadata}/text.d.ts +0 -0
- /package/dist/web/{metadata → src/metadata}/text.js +0 -0
- /package/dist/web/{metadata → src/metadata}/tree.d.ts +0 -0
- /package/dist/web/{metadata → src/metadata}/tree.js +0 -0
- /package/dist/web/{util → src/util}/div.d.ts +0 -0
- /package/dist/web/{util → src/util}/div.js +0 -0
- /package/dist/web/{util → src/util}/index.d.ts +0 -0
- /package/dist/web/{util → src/util}/index.js +0 -0
- /package/dist/web/{vk.d.ts → src/vk.d.ts} +0 -0
- /package/dist/web/{vk.js → src/vk.js} +0 -0
- /package/dist/web/{zkprogram-example → src/zkprogram-example}/game.d.ts +0 -0
- /package/dist/web/{zkprogram-example → src/zkprogram-example}/game.js +0 -0
- /package/dist/web/{zkprogram-example → src/zkprogram-example}/index.d.ts +0 -0
- /package/dist/web/{zkprogram-example → src/zkprogram-example}/index.js +0 -0
- /package/dist/web/{zkprogram-example → src/zkprogram-example}/update.d.ts +0 -0
- /package/dist/web/{zkprogram-example → src/zkprogram-example}/update.js +0 -0
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { describe, it } from "node:test";
|
|
2
|
+
import assert from "node:assert";
|
|
3
|
+
import { Metadata, ColorPlugin } from "../src/index.js";
|
|
4
|
+
import { randomMap, randomImage } from "./helpers/metadata.js";
|
|
5
|
+
const NUMBER_OF_ITERATIONS = 5;
|
|
6
|
+
const printMetadata = false;
|
|
7
|
+
describe("Test serializing and deserializing Metadata", () => {
|
|
8
|
+
it("should serialize and deserialize Metadata with plugins", async () => {
|
|
9
|
+
const map = new Metadata({
|
|
10
|
+
name: "test",
|
|
11
|
+
image: randomImage(),
|
|
12
|
+
plugins: [new ColorPlugin()],
|
|
13
|
+
});
|
|
14
|
+
map.addTrait({
|
|
15
|
+
key: "color1",
|
|
16
|
+
type: "color",
|
|
17
|
+
value: "blue",
|
|
18
|
+
});
|
|
19
|
+
map.addTrait({
|
|
20
|
+
key: "color2",
|
|
21
|
+
type: "color",
|
|
22
|
+
value: "#800080",
|
|
23
|
+
});
|
|
24
|
+
map.addTrait({
|
|
25
|
+
key: "color3",
|
|
26
|
+
type: "color",
|
|
27
|
+
value: 0xffa500,
|
|
28
|
+
});
|
|
29
|
+
const serializedPublic = JSON.stringify(map.toJSON(false), null, 2);
|
|
30
|
+
const serializedPrivate = JSON.stringify(map.toJSON(true), null, 2);
|
|
31
|
+
if (printMetadata)
|
|
32
|
+
console.log("Serialized", serializedPrivate);
|
|
33
|
+
assert(!serializedPublic.includes("isPrivate"));
|
|
34
|
+
const deserializedPublic = Metadata.fromJSON({
|
|
35
|
+
json: JSON.parse(serializedPublic),
|
|
36
|
+
checkRoot: false,
|
|
37
|
+
plugins: [new ColorPlugin()],
|
|
38
|
+
});
|
|
39
|
+
const deserializedPrivate = Metadata.fromJSON({
|
|
40
|
+
json: JSON.parse(serializedPrivate),
|
|
41
|
+
checkRoot: true,
|
|
42
|
+
plugins: [new ColorPlugin()],
|
|
43
|
+
});
|
|
44
|
+
assert.deepStrictEqual(deserializedPrivate, map);
|
|
45
|
+
});
|
|
46
|
+
it("should serialize and deserialize Metadata", async () => {
|
|
47
|
+
for (let i = 0; i < NUMBER_OF_ITERATIONS; i++) {
|
|
48
|
+
const map = randomMap();
|
|
49
|
+
const serializedPublic = JSON.stringify(map.toJSON(false), null, 2);
|
|
50
|
+
const serializedPrivate = JSON.stringify(map.toJSON(true), null, 2);
|
|
51
|
+
if (printMetadata)
|
|
52
|
+
console.log("Serialized", serializedPrivate);
|
|
53
|
+
assert(!serializedPublic.includes("isPrivate"));
|
|
54
|
+
const deserializedPublic = Metadata.fromJSON({
|
|
55
|
+
json: JSON.parse(serializedPublic),
|
|
56
|
+
checkRoot: false,
|
|
57
|
+
});
|
|
58
|
+
const deserializedPrivate = Metadata.fromJSON({
|
|
59
|
+
json: JSON.parse(serializedPrivate),
|
|
60
|
+
checkRoot: true,
|
|
61
|
+
});
|
|
62
|
+
assert.deepStrictEqual(deserializedPrivate, map);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
//# sourceMappingURL=metadata.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata.test.js","sourceRoot":"","sources":["../../../test/metadata.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
import { afterEach, beforeEach, describe, it } from "node:test";
|
|
2
|
+
import assert from "node:assert";
|
|
3
|
+
import { Mina, Field, AccountUpdate, UInt32, Cache, UInt64, fetchLastBlock, PublicKey, } from "o1js";
|
|
4
|
+
import { fetchMinaAccount, initBlockchain, accountBalanceMina, Memory, sendTx, } from "@silvana-one/mina-utils";
|
|
5
|
+
import { TEST_ACCOUNTS } from "./helpers/config.js";
|
|
6
|
+
import { NFT, Collection, NFTAdmin, CollectionData, fieldFromString, NFTData, MintParams, nftVerificationKeys, } from "../src/index.js";
|
|
7
|
+
import { Storage } from "@silvana-one/storage";
|
|
8
|
+
import { processArguments } from "./helpers/utils.js";
|
|
9
|
+
import { randomMetadata } from "./helpers/metadata.js";
|
|
10
|
+
let { chain, approveTransfer, noLog } = processArguments();
|
|
11
|
+
const NUMBER_OF_NFTS = 3;
|
|
12
|
+
const networkId = chain === "mainnet" ? "mainnet" : "devnet";
|
|
13
|
+
const expectedTxStatus = chain === "zeko" ? "pending" : "included";
|
|
14
|
+
const vk = nftVerificationKeys[networkId].vk;
|
|
15
|
+
const { TestPublicKey } = Mina;
|
|
16
|
+
let nftContractVk;
|
|
17
|
+
let nftProgramVk;
|
|
18
|
+
let collectionVk;
|
|
19
|
+
let adminVk;
|
|
20
|
+
const cache = Cache.FileSystem("./cache");
|
|
21
|
+
const zkCollectionKey = TestPublicKey.random();
|
|
22
|
+
const zkAdminKey = TestPublicKey.random();
|
|
23
|
+
const collectionContract = new Collection(zkCollectionKey);
|
|
24
|
+
const tokenId = collectionContract.deriveTokenId();
|
|
25
|
+
const adminContract = new NFTAdmin(zkAdminKey);
|
|
26
|
+
const NUMBER_OF_USERS = 1;
|
|
27
|
+
let admin;
|
|
28
|
+
let faucet;
|
|
29
|
+
const whitelistedUsers = TEST_ACCOUNTS.slice(NUMBER_OF_USERS)
|
|
30
|
+
.map((account) => TestPublicKey.fromBase58(account.privateKey))
|
|
31
|
+
.slice(0, NUMBER_OF_USERS);
|
|
32
|
+
const validators = [
|
|
33
|
+
TestPublicKey.random(),
|
|
34
|
+
TestPublicKey.random(),
|
|
35
|
+
TestPublicKey.random(),
|
|
36
|
+
];
|
|
37
|
+
const creator = whitelistedUsers[0];
|
|
38
|
+
const nftParams = [];
|
|
39
|
+
describe(`NFT mint tests: ${chain} ${approveTransfer ? "approve " : ""}${noLog ? "noLog" : ""}`, () => {
|
|
40
|
+
const originalConsoleLog = console.log;
|
|
41
|
+
if (noLog) {
|
|
42
|
+
beforeEach(() => {
|
|
43
|
+
console.log = () => { };
|
|
44
|
+
});
|
|
45
|
+
afterEach(() => {
|
|
46
|
+
console.log = originalConsoleLog;
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
it("should initialize a blockchain", async () => {
|
|
50
|
+
if (chain === "devnet" || chain === "zeko" || chain === "mainnet") {
|
|
51
|
+
await initBlockchain(chain);
|
|
52
|
+
admin = TestPublicKey.fromBase58(TEST_ACCOUNTS[0].privateKey);
|
|
53
|
+
}
|
|
54
|
+
else if (chain === "local") {
|
|
55
|
+
const { keys } = await initBlockchain(chain, 2);
|
|
56
|
+
faucet = TestPublicKey(keys[0].key);
|
|
57
|
+
admin = TestPublicKey(keys[1].key);
|
|
58
|
+
}
|
|
59
|
+
else if (chain === "lightnet") {
|
|
60
|
+
const { keys } = await initBlockchain(chain, 2);
|
|
61
|
+
faucet = TestPublicKey(keys[0].key);
|
|
62
|
+
admin = TestPublicKey(keys[1].key);
|
|
63
|
+
}
|
|
64
|
+
console.log("chain:", chain);
|
|
65
|
+
console.log("networkId:", Mina.getNetworkId());
|
|
66
|
+
console.log("Collection contract address:", zkCollectionKey.toBase58());
|
|
67
|
+
console.log("Admin contract address:", zkAdminKey.toBase58());
|
|
68
|
+
if (chain === "local" || chain === "lightnet") {
|
|
69
|
+
await fetchMinaAccount({ publicKey: faucet, force: true });
|
|
70
|
+
let nonce = Number(Mina.getAccount(faucet).nonce.toBigint());
|
|
71
|
+
let txs = [];
|
|
72
|
+
for (const user of whitelistedUsers) {
|
|
73
|
+
await fetchMinaAccount({ publicKey: user, force: true });
|
|
74
|
+
const balance = await accountBalanceMina(user);
|
|
75
|
+
if (balance > 30) {
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
const transaction = await Mina.transaction({
|
|
79
|
+
sender: faucet,
|
|
80
|
+
fee: 100_000_000,
|
|
81
|
+
memo: "topup",
|
|
82
|
+
nonce: nonce++,
|
|
83
|
+
}, async () => {
|
|
84
|
+
const senderUpdate = AccountUpdate.createSigned(faucet);
|
|
85
|
+
if (balance === 0)
|
|
86
|
+
senderUpdate.balance.subInPlace(1000000000);
|
|
87
|
+
senderUpdate.send({ to: user, amount: 100_000_000_000 });
|
|
88
|
+
});
|
|
89
|
+
txs.push(await sendTx({
|
|
90
|
+
tx: transaction.sign([faucet.key]),
|
|
91
|
+
description: "topup",
|
|
92
|
+
wait: false,
|
|
93
|
+
}));
|
|
94
|
+
}
|
|
95
|
+
for (const tx of txs) {
|
|
96
|
+
if (tx?.status === "pending") {
|
|
97
|
+
const txIncluded = await tx.safeWait();
|
|
98
|
+
if (txIncluded.status !== expectedTxStatus) {
|
|
99
|
+
throw new Error("Transaction not included");
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
console.log("Topup tx included:", txIncluded.hash);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
else
|
|
106
|
+
throw new Error("Topup transaction not pending");
|
|
107
|
+
}
|
|
108
|
+
console.log("Topup done");
|
|
109
|
+
}
|
|
110
|
+
console.log("Creator", creator.toBase58(), "balance:", await accountBalanceMina(creator));
|
|
111
|
+
console.log("Admin ", admin.toBase58(), "balance:", await accountBalanceMina(admin));
|
|
112
|
+
Memory.info("before compiling");
|
|
113
|
+
});
|
|
114
|
+
it("should compile NFT Contract", async () => {
|
|
115
|
+
console.log("compiling...");
|
|
116
|
+
console.time("compiled NFTContract");
|
|
117
|
+
const { verificationKey } = await NFT.compile({ cache });
|
|
118
|
+
nftContractVk = verificationKey;
|
|
119
|
+
console.timeEnd("compiled NFTContract");
|
|
120
|
+
assert.strictEqual(nftContractVk.hash.toJSON(), vk.NFT.hash);
|
|
121
|
+
assert.strictEqual(nftContractVk.data, vk.NFT.data);
|
|
122
|
+
});
|
|
123
|
+
it("should compile Admin", async () => {
|
|
124
|
+
console.time("compiled Admin");
|
|
125
|
+
const { verificationKey } = await NFTAdmin.compile({ cache });
|
|
126
|
+
adminVk = verificationKey;
|
|
127
|
+
console.timeEnd("compiled Admin");
|
|
128
|
+
console.log("Admin vk hash:", adminVk.hash.toJSON());
|
|
129
|
+
});
|
|
130
|
+
it("should compile Collection", async () => {
|
|
131
|
+
console.time("compiled Collection");
|
|
132
|
+
const { verificationKey } = await Collection.compile({ cache });
|
|
133
|
+
collectionVk = verificationKey;
|
|
134
|
+
console.timeEnd("compiled Collection");
|
|
135
|
+
console.log("Collection vk hash:", collectionVk.hash.toJSON());
|
|
136
|
+
});
|
|
137
|
+
it("should deploy a Collection", async () => {
|
|
138
|
+
console.time("deployed Collection");
|
|
139
|
+
const { metadataRoot, ipfsHash, serializedMap, name, privateMetadata } = await randomMetadata({
|
|
140
|
+
includePrivateTraits: false,
|
|
141
|
+
includeBanner: true,
|
|
142
|
+
});
|
|
143
|
+
if (!ipfsHash) {
|
|
144
|
+
throw new Error("IPFS hash is undefined");
|
|
145
|
+
}
|
|
146
|
+
const slot = chain === "local"
|
|
147
|
+
? Mina.currentSlot()
|
|
148
|
+
: chain === "zeko"
|
|
149
|
+
? UInt32.zero
|
|
150
|
+
: (await fetchLastBlock()).globalSlotSinceGenesis;
|
|
151
|
+
const expiry = slot.add(UInt32.from(100000));
|
|
152
|
+
const masterNFT = new MintParams({
|
|
153
|
+
name: fieldFromString(name),
|
|
154
|
+
address: zkCollectionKey,
|
|
155
|
+
tokenId,
|
|
156
|
+
data: NFTData.new({
|
|
157
|
+
owner: creator,
|
|
158
|
+
}),
|
|
159
|
+
fee: UInt64.zero,
|
|
160
|
+
metadata: metadataRoot,
|
|
161
|
+
storage: Storage.fromString(ipfsHash),
|
|
162
|
+
metadataVerificationKeyHash: Field(0),
|
|
163
|
+
expiry,
|
|
164
|
+
});
|
|
165
|
+
await fetchMinaAccount({ publicKey: creator, force: true });
|
|
166
|
+
const tx = await Mina.transaction({
|
|
167
|
+
sender: creator,
|
|
168
|
+
fee: 100_000_000,
|
|
169
|
+
memo: `Deploy Collection ${name}`.substring(0, 30),
|
|
170
|
+
}, async () => {
|
|
171
|
+
AccountUpdate.fundNewAccount(creator, 3);
|
|
172
|
+
await adminContract.deploy({
|
|
173
|
+
admin: creator,
|
|
174
|
+
uri: `AdminContract`,
|
|
175
|
+
});
|
|
176
|
+
// deploy() and initialize() create 2 account updates for the same publicKey, it is intended
|
|
177
|
+
await collectionContract.deploy({
|
|
178
|
+
creator,
|
|
179
|
+
collectionName: fieldFromString(name),
|
|
180
|
+
baseURL: fieldFromString("ipfs"),
|
|
181
|
+
admin: zkAdminKey,
|
|
182
|
+
symbol: "NFT",
|
|
183
|
+
url: `https://${chain}.minanft.io`,
|
|
184
|
+
});
|
|
185
|
+
await collectionContract.initialize(masterNFT, CollectionData.new({
|
|
186
|
+
requireTransferApproval: approveTransfer,
|
|
187
|
+
royaltyFee: 10, // 10%
|
|
188
|
+
transferFee: 1_000_000_000, // 1 MINA
|
|
189
|
+
}));
|
|
190
|
+
});
|
|
191
|
+
await tx.prove();
|
|
192
|
+
assert.strictEqual((await sendTx({
|
|
193
|
+
tx: tx.sign([creator.key, zkCollectionKey.key, zkAdminKey.key]),
|
|
194
|
+
description: "deploy Collection",
|
|
195
|
+
}))?.status, expectedTxStatus);
|
|
196
|
+
console.timeEnd("deployed Collection");
|
|
197
|
+
});
|
|
198
|
+
it("should mint NFT", async () => {
|
|
199
|
+
Memory.info("before mint");
|
|
200
|
+
console.time("minted NFT");
|
|
201
|
+
for (let i = 0; i < NUMBER_OF_NFTS; i++) {
|
|
202
|
+
const { name, ipfsHash, metadataRoot, privateMetadata } = await randomMetadata();
|
|
203
|
+
if (!ipfsHash) {
|
|
204
|
+
throw new Error("IPFS hash is undefined");
|
|
205
|
+
}
|
|
206
|
+
const zkNFTKey = TestPublicKey.random();
|
|
207
|
+
console.log(`NFT ${i}:`, zkNFTKey.toBase58());
|
|
208
|
+
nftParams.push({
|
|
209
|
+
name,
|
|
210
|
+
address: zkNFTKey,
|
|
211
|
+
collection: zkCollectionKey,
|
|
212
|
+
privateMetadata,
|
|
213
|
+
});
|
|
214
|
+
await fetchMinaAccount({ publicKey: creator, force: true });
|
|
215
|
+
await fetchMinaAccount({ publicKey: zkCollectionKey, force: true });
|
|
216
|
+
await fetchMinaAccount({ publicKey: zkAdminKey, force: true });
|
|
217
|
+
const slot = chain === "local"
|
|
218
|
+
? Mina.currentSlot()
|
|
219
|
+
: chain === "zeko"
|
|
220
|
+
? UInt32.zero
|
|
221
|
+
: (await fetchLastBlock()).globalSlotSinceGenesis;
|
|
222
|
+
const expiry = slot.add(UInt32.from(100000));
|
|
223
|
+
const tx = await Mina.transaction({
|
|
224
|
+
sender: creator,
|
|
225
|
+
fee: 100_000_000,
|
|
226
|
+
memo: `Mint NFT ${name}`.substring(0, 30),
|
|
227
|
+
}, async () => {
|
|
228
|
+
await collectionContract.mintByCreator({
|
|
229
|
+
name: fieldFromString(name),
|
|
230
|
+
address: zkNFTKey,
|
|
231
|
+
tokenId,
|
|
232
|
+
metadata: metadataRoot,
|
|
233
|
+
data: NFTData.new({
|
|
234
|
+
canChangeMetadata: false,
|
|
235
|
+
canPause: false,
|
|
236
|
+
owner: creator,
|
|
237
|
+
}),
|
|
238
|
+
metadataVerificationKeyHash: Field(0),
|
|
239
|
+
expiry,
|
|
240
|
+
fee: UInt64.from(10_000_000_000),
|
|
241
|
+
storage: Storage.fromString(ipfsHash),
|
|
242
|
+
});
|
|
243
|
+
});
|
|
244
|
+
await tx.prove();
|
|
245
|
+
assert.strictEqual((await sendTx({
|
|
246
|
+
tx: tx.sign([creator.key, zkNFTKey.key]),
|
|
247
|
+
description: "mint",
|
|
248
|
+
}))?.status, expectedTxStatus);
|
|
249
|
+
await fetchMinaAccount({ publicKey: zkNFTKey, tokenId, force: true });
|
|
250
|
+
const nft = new NFT(zkNFTKey, tokenId);
|
|
251
|
+
const dataCheck = NFTData.unpack(nft.packedData.get());
|
|
252
|
+
console.log("owner", creator.toBase58());
|
|
253
|
+
console.log("ownerCheck", dataCheck.owner.toBase58());
|
|
254
|
+
console.log("approvalCheck", dataCheck.approved.toBase58());
|
|
255
|
+
console.log("creator", creator.toBase58());
|
|
256
|
+
assert.strictEqual(dataCheck.owner.equals(creator).toBoolean(), true);
|
|
257
|
+
assert.strictEqual(dataCheck.approved.equals(PublicKey.empty()).toBoolean(), true);
|
|
258
|
+
}
|
|
259
|
+
console.timeEnd("minted NFT");
|
|
260
|
+
});
|
|
261
|
+
});
|
|
262
|
+
//# sourceMappingURL=mint.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mint.test.js","sourceRoot":"","sources":["../../../test/mint.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { describe, it } from "node:test";
|
|
2
|
+
import assert from "node:assert";
|
|
3
|
+
import { UInt32, Bool, UInt64, PrivateKey, PublicKey, Field } from "o1js";
|
|
4
|
+
import { NFTData, CollectionData, AdminData } from "../src/index.js";
|
|
5
|
+
import { Storage } from "@silvana-one/storage";
|
|
6
|
+
import { UpgradeDatabaseState, PublicKeyOption } from "@silvana-one/upgradable";
|
|
7
|
+
const NUMBER_OF_ITERATIONS = 1000;
|
|
8
|
+
const randomBool = () => Math.random() < 0.5;
|
|
9
|
+
describe("Test packing and unpacking", async () => {
|
|
10
|
+
it("should pack and unpack NFTData", async () => {
|
|
11
|
+
for (let i = 0; i < NUMBER_OF_ITERATIONS; i++) {
|
|
12
|
+
const randomVersion = UInt32.from(Math.floor(Math.random() * 2 ** 32));
|
|
13
|
+
const randomId = UInt64.from(Math.floor(Math.random() * 2 ** 64));
|
|
14
|
+
const original = new NFTData({
|
|
15
|
+
owner: PrivateKey.random().toPublicKey(),
|
|
16
|
+
approved: PrivateKey.random().toPublicKey(),
|
|
17
|
+
version: randomVersion,
|
|
18
|
+
id: randomId,
|
|
19
|
+
canChangeOwnerByProof: Bool(randomBool()),
|
|
20
|
+
canTransfer: Bool(randomBool()),
|
|
21
|
+
canApprove: Bool(randomBool()),
|
|
22
|
+
canChangeMetadata: Bool(randomBool()),
|
|
23
|
+
canChangeStorage: Bool(randomBool()),
|
|
24
|
+
canChangeName: Bool(randomBool()),
|
|
25
|
+
canChangeMetadataVerificationKeyHash: Bool(randomBool()),
|
|
26
|
+
canPause: Bool(randomBool()),
|
|
27
|
+
isPaused: Bool(randomBool()),
|
|
28
|
+
requireOwnerAuthorizationToUpgrade: Bool(randomBool()),
|
|
29
|
+
});
|
|
30
|
+
const packed = original.pack();
|
|
31
|
+
const unpacked = NFTData.unpack(packed);
|
|
32
|
+
assert.strictEqual(unpacked.owner.equals(original.owner).toBoolean(), true);
|
|
33
|
+
assert.strictEqual(unpacked.approved.equals(original.approved).toBoolean(), true);
|
|
34
|
+
assert.strictEqual(unpacked.version.toBigint(), original.version.toBigint());
|
|
35
|
+
assert.strictEqual(unpacked.id.toBigInt(), original.id.toBigInt());
|
|
36
|
+
assert.strictEqual(unpacked.canChangeOwnerByProof.toBoolean(), original.canChangeOwnerByProof.toBoolean());
|
|
37
|
+
assert.strictEqual(unpacked.canTransfer.toBoolean(), original.canTransfer.toBoolean());
|
|
38
|
+
assert.strictEqual(unpacked.canApprove.toBoolean(), original.canApprove.toBoolean());
|
|
39
|
+
assert.strictEqual(unpacked.canChangeMetadata.toBoolean(), original.canChangeMetadata.toBoolean());
|
|
40
|
+
assert.strictEqual(unpacked.canChangeStorage.toBoolean(), original.canChangeStorage.toBoolean());
|
|
41
|
+
assert.strictEqual(unpacked.canChangeName.toBoolean(), original.canChangeName.toBoolean());
|
|
42
|
+
assert.strictEqual(unpacked.canChangeMetadataVerificationKeyHash.toBoolean(), original.canChangeMetadataVerificationKeyHash.toBoolean());
|
|
43
|
+
assert.strictEqual(unpacked.canPause.toBoolean(), original.canPause.toBoolean());
|
|
44
|
+
assert.strictEqual(unpacked.isPaused.toBoolean(), original.isPaused.toBoolean());
|
|
45
|
+
assert.strictEqual(unpacked.requireOwnerAuthorizationToUpgrade.toBoolean(), original.requireOwnerAuthorizationToUpgrade.toBoolean());
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
it("should pack and unpack CollectionData", async () => {
|
|
49
|
+
for (let i = 0; i < NUMBER_OF_ITERATIONS; i++) {
|
|
50
|
+
const publicKey = PrivateKey.random().toPublicKey();
|
|
51
|
+
const original = new CollectionData({
|
|
52
|
+
royaltyFee: UInt32.from(Math.floor(Math.random() * 2 ** 32)),
|
|
53
|
+
transferFee: UInt64.from(Math.floor(Math.random() * 2 ** 64)),
|
|
54
|
+
requireTransferApproval: Bool(randomBool()),
|
|
55
|
+
mintingIsLimited: Bool(randomBool()),
|
|
56
|
+
isPaused: Bool(randomBool()),
|
|
57
|
+
});
|
|
58
|
+
const packed = original.pack();
|
|
59
|
+
const unpacked = CollectionData.unpack(packed);
|
|
60
|
+
assert.strictEqual(unpacked.requireTransferApproval.toBoolean(), original.requireTransferApproval.toBoolean());
|
|
61
|
+
assert.strictEqual(unpacked.mintingIsLimited.toBoolean(), original.mintingIsLimited.toBoolean());
|
|
62
|
+
assert.strictEqual(unpacked.isPaused.toBoolean(), original.isPaused.toBoolean());
|
|
63
|
+
assert.strictEqual(unpacked.royaltyFee.toBigint() === original.royaltyFee.toBigint(), true);
|
|
64
|
+
assert.strictEqual(unpacked.transferFee.toBigInt() === original.transferFee.toBigInt(), true);
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
it("should pack and unpack PublicKey", async () => {
|
|
68
|
+
for (let i = 0; i < NUMBER_OF_ITERATIONS; i++) {
|
|
69
|
+
const publicKey = PrivateKey.random().toPublicKey();
|
|
70
|
+
const x = publicKey.x;
|
|
71
|
+
const isOdd = publicKey.isOdd;
|
|
72
|
+
const restored = PublicKey.from({ x, isOdd });
|
|
73
|
+
assert.strictEqual(restored.equals(publicKey).toBoolean(), true);
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
it("should pack and unpack AdminData", async () => {
|
|
77
|
+
for (let i = 0; i < NUMBER_OF_ITERATIONS; i++) {
|
|
78
|
+
const original = new AdminData({
|
|
79
|
+
canPause: Bool(randomBool()),
|
|
80
|
+
isPaused: Bool(randomBool()),
|
|
81
|
+
allowChangeRoyalty: Bool(randomBool()),
|
|
82
|
+
allowChangeTransferFee: Bool(randomBool()),
|
|
83
|
+
allowChangeBaseUri: Bool(randomBool()),
|
|
84
|
+
allowChangeCreator: Bool(randomBool()),
|
|
85
|
+
allowChangeAdmin: Bool(randomBool()),
|
|
86
|
+
allowChangeName: Bool(randomBool()),
|
|
87
|
+
});
|
|
88
|
+
const packed = original.pack();
|
|
89
|
+
const unpacked = AdminData.unpack(packed);
|
|
90
|
+
assert.strictEqual(unpacked.canPause.toBoolean(), original.canPause.toBoolean());
|
|
91
|
+
assert.strictEqual(unpacked.isPaused.toBoolean(), original.isPaused.toBoolean());
|
|
92
|
+
assert.strictEqual(unpacked.allowChangeRoyalty.toBoolean(), original.allowChangeRoyalty.toBoolean());
|
|
93
|
+
assert.strictEqual(unpacked.allowChangeTransferFee.toBoolean(), original.allowChangeTransferFee.toBoolean());
|
|
94
|
+
assert.strictEqual(unpacked.allowChangeBaseUri.toBoolean(), original.allowChangeBaseUri.toBoolean());
|
|
95
|
+
assert.strictEqual(unpacked.allowChangeCreator.toBoolean(), original.allowChangeCreator.toBoolean());
|
|
96
|
+
assert.strictEqual(unpacked.allowChangeAdmin.toBoolean(), original.allowChangeAdmin.toBoolean());
|
|
97
|
+
assert.strictEqual(unpacked.allowChangeName.toBoolean(), original.allowChangeName.toBoolean());
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
it("should pack and unpack UpgradeDatabaseState", async () => {
|
|
101
|
+
const original = UpgradeDatabaseState.empty();
|
|
102
|
+
const packed = original.pack();
|
|
103
|
+
const unpacked = UpgradeDatabaseState.unpack(packed);
|
|
104
|
+
assert.strictEqual(unpacked.root.equals(original.root).toBoolean(), true);
|
|
105
|
+
assert.strictEqual(Storage.equals(unpacked.storage, original.storage).toBoolean(), true);
|
|
106
|
+
assert.strictEqual(unpacked.nextUpgradeAuthority.value
|
|
107
|
+
.equals(original.nextUpgradeAuthority.value)
|
|
108
|
+
.toBoolean(), true);
|
|
109
|
+
assert.strictEqual(unpacked.nextUpgradeAuthority.isSome.toBoolean() ===
|
|
110
|
+
original.nextUpgradeAuthority.isSome.toBoolean(), true);
|
|
111
|
+
assert.strictEqual(unpacked.version.toBigint(), original.version.toBigint());
|
|
112
|
+
assert.strictEqual(unpacked.validFrom.toBigint(), original.validFrom.toBigint());
|
|
113
|
+
for (let i = 0; i < NUMBER_OF_ITERATIONS; i++) {
|
|
114
|
+
const randomVersion = UInt32.from(Math.floor(Math.random() * 2 ** 32));
|
|
115
|
+
const randomValidFrom = UInt32.from(Math.floor(Math.random() * 2 ** 32));
|
|
116
|
+
const randomStorage = new Storage({
|
|
117
|
+
url: [Field.random(), Field.random()],
|
|
118
|
+
});
|
|
119
|
+
const original = new UpgradeDatabaseState({
|
|
120
|
+
root: Field.random(),
|
|
121
|
+
storage: randomStorage,
|
|
122
|
+
nextUpgradeAuthority: Math.random() < 0.5
|
|
123
|
+
? PublicKeyOption.from(PrivateKey.random().toPublicKey())
|
|
124
|
+
: PublicKeyOption.none(),
|
|
125
|
+
validFrom: randomValidFrom,
|
|
126
|
+
version: randomVersion,
|
|
127
|
+
});
|
|
128
|
+
const packed = original.pack();
|
|
129
|
+
const unpacked = UpgradeDatabaseState.unpack(packed);
|
|
130
|
+
assert.strictEqual(unpacked.root.equals(original.root).toBoolean(), true);
|
|
131
|
+
assert.strictEqual(Storage.equals(unpacked.storage, original.storage).toBoolean(), true);
|
|
132
|
+
assert.strictEqual(unpacked.nextUpgradeAuthority.value
|
|
133
|
+
.equals(original.nextUpgradeAuthority.value)
|
|
134
|
+
.toBoolean(), true);
|
|
135
|
+
assert.strictEqual(unpacked.nextUpgradeAuthority.isSome.toBoolean() ===
|
|
136
|
+
original.nextUpgradeAuthority.isSome.toBoolean(), true);
|
|
137
|
+
assert.strictEqual(unpacked.validFrom.toBigint(), original.validFrom.toBigint());
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
//# sourceMappingURL=pack.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pack.test.js","sourceRoot":"","sources":["../../../test/pack.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|