Skip to content

Commit 18f4ac6

Browse files
committedMar 27, 2024
ton jewels init
0 parents  commit 18f4ac6

25 files changed

+7302
-0
lines changed
 

‎.gitignore

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
node_modules
2+
temp
3+
build
4+
dist
5+
.DS_Store
6+
.env

‎.prettierignore

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
build

‎.prettierrc

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"printWidth": 120,
3+
"tabWidth": 4,
4+
"singleQuote": true,
5+
"bracketSpacing": true,
6+
"semi": true
7+
}

‎README.md

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# TON_JEWELS
2+
3+
## Project structure
4+
5+
- `contracts` - source code of all the smart contracts of the project and their dependencies.
6+
- `wrappers` - wrapper classes (implementing `Contract` from ton-core) for the contracts, including any [de]serialization primitives and compilation functions.
7+
- `tests` - tests for the contracts.
8+
- `scripts` - scripts used by the project, mainly the deployment scripts.
9+
10+
## How to use
11+
12+
### Build
13+
14+
`npx blueprint build` or `yarn blueprint build`
15+
16+
### Test
17+
18+
`npx blueprint test` or `yarn blueprint test`
19+
20+
### Deploy or run another script
21+
22+
`npx blueprint run` or `yarn blueprint run`
23+
24+
### Add a new contract
25+
26+
`npx blueprint create ContractName` or `yarn blueprint create ContractName`

‎contracts/imports/stdlib.fc

+625
Large diffs are not rendered by default.

‎contracts/messages.tact

+74
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
message(0x693d3950) GetRoyaltyParams {
2+
query_id: Int as uint64;
3+
}
4+
5+
message(0xa8cb00ad) ReportRoyaltyParams {
6+
query_id: Int as uint64;
7+
numerator: Int as uint16;
8+
denominator: Int as uint16;
9+
destination: Address;
10+
}
11+
12+
message(0x5fcc3d14) Transfer {
13+
query_id: Int as uint64;
14+
new_owner: Address;
15+
response_destination: Address;
16+
custom_payload: Cell?;
17+
forward_amount: Int as coins;
18+
forward_payload: Slice as remaining;
19+
}
20+
21+
message(0x05138d91) OwnershipAssigned{
22+
query_id: Int as uint64;
23+
prev_owner: Address;
24+
forward_payload: Slice as remaining;
25+
}
26+
27+
message(0xd53276db) Excesses {
28+
query_id: Int as uint64;
29+
}
30+
31+
message(0x2fcb26a2) GetStaticData {
32+
query_id: Int as uint64;
33+
}
34+
35+
message(0x8b771735) ReportStaticData{
36+
query_id: Int as uint64;
37+
index_id: Int;
38+
collection: Address;
39+
}
40+
41+
message Mint {
42+
query_id: Int as uint64;
43+
}
44+
45+
message BatchMint {
46+
query_id: Int as uint64;
47+
size: Int as uint8;
48+
items: map<Int, Cell>;
49+
}
50+
51+
message SetCollectionMetaData {
52+
query_id: Int as uint64;
53+
new_collection_content: Cell;
54+
}
55+
56+
struct CollectionData {
57+
next_item_index: Int;
58+
collection_content: Cell;
59+
owner_address: Address;
60+
}
61+
62+
struct RoyaltyParams {
63+
numerator: Int;
64+
denominator: Int;
65+
destination: Address;
66+
}
67+
68+
struct GetNftData {
69+
is_initialized: Bool;
70+
index: Int;
71+
collection_address: Address;
72+
owner_address: Address;
73+
individual_content: Cell;
74+
}

‎contracts/nft_collection.tact

+119
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
import "@stdlib/deploy";
2+
import "@stdlib/ownable";
3+
import "./nft_item.tact";
4+
import "./messages.tact";
5+
6+
contract NftCollection with Deployable, Ownable {
7+
const minTonsForStorage: Int = ton("0.05");
8+
const gasFee: Int = ton("0.03");
9+
next_item_index: Int as uint32 = 0;
10+
owner: Address;
11+
collection_content: Cell;
12+
royalty_params: RoyaltyParams;
13+
14+
init(
15+
owner: Address,
16+
collection_content: Cell,
17+
royalty_params: RoyaltyParams
18+
19+
){
20+
self.owner = owner;
21+
self.collection_content = collection_content;
22+
self.royalty_params = royalty_params;
23+
24+
self.owner = sender();
25+
}
26+
27+
receive(msg: Mint){
28+
self.requireOwner();
29+
let ctx: Context = context();
30+
let msgValue: Int = ctx.value;
31+
let tonBalanceBeforeMsg: Int = myBalance() - msgValue;
32+
let storageFee: Int = self.minTonsForStorage - min(tonBalanceBeforeMsg, self.minTonsForStorage);
33+
msgValue = msgValue - (storageFee + self.gasFee);
34+
35+
self.mint(ctx.sender, msgValue);
36+
}
37+
38+
// ===== Private Methods ===== //
39+
fun mint(sender: Address, msgValue: Int) {
40+
require(self.next_item_index >= 0, "non-sequential NFTs");
41+
42+
let nft_init: StateInit = self.getNftItemInit(self.next_item_index);
43+
send(SendParameters{
44+
to: contractAddress(nft_init),
45+
value: msgValue,
46+
bounce: false,
47+
mode: SendIgnoreErrors,
48+
body: Transfer{
49+
query_id: 0,
50+
new_owner: sender,
51+
response_destination: self.owner,
52+
custom_payload: emptyCell(),
53+
forward_amount: 0,
54+
forward_payload: emptySlice()
55+
}.toCell(),
56+
code: nft_init.code,
57+
data: nft_init.data
58+
});
59+
60+
self.next_item_index = self.next_item_index + 1;
61+
}
62+
63+
fun claimAndMintNft(new_owner: Address, msgValue: Int) {
64+
let contractAddress: Address? = self.get_nft_address_by_index((self.next_item_index));
65+
self.mint(new_owner, msgValue);
66+
self.next_item_index += 1;
67+
}
68+
69+
receive(msg: GetRoyaltyParams) {
70+
send(SendParameters{
71+
to: sender(),
72+
value: 0,
73+
mode: 64,
74+
bounce: false,
75+
body: ReportRoyaltyParams {
76+
query_id: msg.query_id,
77+
numerator: self.royalty_params.numerator,
78+
denominator: self.royalty_params.denominator,
79+
destination: self.owner
80+
}.toCell()
81+
});
82+
}
83+
84+
// ------------------ Get Function ------------------ //
85+
get fun get_collection_data(): CollectionData{
86+
let b: StringBuilder = beginString();
87+
let collectionDataString: String = self.collection_content.asSlice().asString();
88+
b.append(collectionDataString);
89+
b.append("collection.json"); // You can changed this your self.
90+
91+
return CollectionData{
92+
next_item_index: self.next_item_index,
93+
collection_content: b.toCell(),
94+
owner_address: self.owner
95+
};
96+
}
97+
98+
get fun get_nft_address_by_index(item_index: Int): Address?{
99+
let initCode: StateInit = self.getNftItemInit(item_index);
100+
return contractAddress(initCode);
101+
}
102+
103+
get fun getNftItemInit(item_index: Int): StateInit {
104+
return initOf NftItem(myAddress(), item_index, self.owner, self.collection_content);
105+
}
106+
107+
get fun get_nft_content(index: Int, individual_content: Cell): Cell? {
108+
let b: StringBuilder = beginString();
109+
let ic: String = individual_content.asSlice().asString();
110+
let collectionDataString: String = self.collection_content.asSlice().asString();
111+
b.append(collectionDataString);
112+
b.append(ic);
113+
return b.toCell();
114+
}
115+
116+
get fun royalty_params(): RoyaltyParams {
117+
return self.royalty_params;
118+
}
119+
}

‎contracts/nft_item.tact

+115
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
import "@stdlib/deploy";
2+
import "@stdlib/ownable";
3+
import "./messages.tact";
4+
5+
contract NftItem with Deployable, Ownable {
6+
const minTonsForStorage: Int = ton("0.03");
7+
const gasFee: Int = ton("0.05");
8+
9+
collection_address: Address;
10+
item_index: Int;
11+
owner: Address;
12+
individual_content: Cell;
13+
is_initialized: Bool;
14+
15+
init(
16+
collection_address: Address,
17+
item_index: Int,
18+
owner: Address,
19+
individual_content: Cell
20+
){
21+
self.collection_address = collection_address;
22+
self.item_index = item_index;
23+
self.owner = collection_address;
24+
self.individual_content = individual_content;
25+
self.is_initialized = false;
26+
}
27+
28+
fun mint(new_owner: Address) {
29+
self.requireOwner();
30+
self.owner = new_owner;
31+
}
32+
33+
receive(msg: Transfer){
34+
let ctx: Context = context();
35+
36+
let msgValue: Int = ctx.value; // Check the gasFee for storage
37+
let tonBalanceBeforeMsg: Int = myBalance() - msgValue;
38+
let storageFee: Int = self.minTonsForStorage - min(tonBalanceBeforeMsg, self.minTonsForStorage);
39+
msgValue = msgValue - (storageFee + self.gasFee);
40+
41+
require(ctx.sender == self.owner, "not owner");
42+
if (self.is_initialized == false) { // Initial Transfer, aka Minting.
43+
require(msg.custom_payload != null, "custum_payload is not exist");
44+
45+
self.is_initialized = true;
46+
self.owner = msg.new_owner;
47+
self.individual_content = msg.custom_payload!!;
48+
send(SendParameters{
49+
to: msg.response_destination,
50+
value: msgValue,
51+
mode: SendIgnoreErrors,
52+
body: Excesses {
53+
query_id: msg.query_id
54+
}.toCell()
55+
});
56+
} else {
57+
self.owner = msg.new_owner; // change current owner to the new_owner
58+
if (msg.forward_amount > 0) {
59+
send(SendParameters{
60+
to: msg.new_owner,
61+
value: msg.forward_amount,
62+
mode: SendIgnoreErrors,
63+
bounce: false,
64+
body: OwnershipAssigned{
65+
query_id: msg.query_id,
66+
prev_owner: ctx.sender,
67+
forward_payload: msg.forward_payload
68+
}.toCell()
69+
});
70+
}
71+
msgValue = msgValue - ctx.readForwardFee();
72+
if (msg.response_destination != null) {
73+
send(SendParameters{
74+
to: msg.response_destination,
75+
value: msgValue - msg.forward_amount,
76+
mode: SendPayGasSeparately,
77+
body: Excesses { query_id: msg.query_id }.toCell() // 0xd53276db
78+
});
79+
}
80+
}
81+
}
82+
83+
receive(msg: GetStaticData){
84+
let ctx: Context = context();
85+
86+
send(SendParameters {
87+
to: ctx.sender,
88+
value: 0,
89+
mode: 64,
90+
bounce: true,
91+
body: ReportStaticData{
92+
query_id: msg.query_id,
93+
index_id: self.item_index,
94+
collection: self.owner
95+
}.toCell()
96+
});
97+
}
98+
99+
// --------- Get Function --------- //
100+
get fun get_nft_data(): GetNftData {
101+
102+
let b: StringBuilder = beginString();
103+
let collectionData: String = self.individual_content.asSlice().asString();
104+
b.append(collectionData);
105+
b.append(self.item_index.toString());
106+
107+
return GetNftData {
108+
is_initialized: self.is_initialized,
109+
index: self.item_index,
110+
collection_address: self.collection_address,
111+
owner_address: self.owner,
112+
individual_content: b.toCell()
113+
};
114+
}
115+
}

‎data/images/0.json

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"v":"5.3.1","fr":60,"ip":0,"op":180,"w":1200,"h":1200,"nm":"diamond","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":8,"ty":4,"nm":"1h","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[269.38,571.62,0],"ix":2},"a":{"a":0,"k":[131.22,42.3,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[0,0],[21.87,7.05]],"o":[[0,0],[21.87,7.05]],"v":[[0,0],[21.87,7.05]],"c":false}],"e":[{"i":[[10.305,3.097],[34.948,7.904]],"o":[[10.305,3.097],[34.948,7.904]],"v":[[10.305,3.097],[34.948,7.904]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":90,"s":[{"i":[[10.305,3.097],[34.948,7.904]],"o":[[10.305,3.097],[34.948,7.904]],"v":[[10.305,3.097],[34.948,7.904]],"c":false}],"e":[{"i":[[20.463,7.046],[49.482,7.081]],"o":[[20.463,7.046],[49.482,7.081]],"v":[[20.463,7.046],[49.482,7.081]],"c":false}]},{"t":180}],"ix":2},"nm":"Pfad 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0.9961,0.2824,0.2824,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"nm":"Kontur 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[1279.787,1215.61],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformieren","_render":true}],"nm":"Gruppe 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false,"_render":true}],"ip":0,"op":256,"st":0,"bm":0,"completed":true},{"ddd":0,"ind":9,"ty":4,"nm":"2h","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[584.68,613.92,0],"ix":2},"a":{"a":0,"k":[184.8,12,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[0,1],[30.8,1]],"o":[[0,1],[30.8,1]],"v":[[0,1],[30.8,1]],"c":false}],"e":[{"i":[[15.333,2],[42.633,-3]],"o":[[15.333,2],[42.633,-3]],"v":[[15.333,2],[42.633,-3]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":90,"s":[{"i":[[15.333,2],[42.633,-3]],"o":[[15.333,2],[42.633,-3]],"v":[[15.333,2],[42.633,-3]],"c":false}],"e":[{"i":[[30.917,1.083],[53.467,-6.333]],"o":[[30.917,1.083],[53.467,-6.333]],"v":[[30.917,1.083],[53.467,-6.333]],"c":false}]},{"t":180}],"ix":2},"nm":"Pfad 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0.9961,0.2824,0.2824,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"nm":"Kontur 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[1200,1200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformieren","_render":true}],"nm":"Gruppe 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false,"_render":true}],"ip":0,"op":256,"st":0,"bm":0,"completed":true},{"ddd":0,"ind":10,"ty":4,"nm":"3h 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[588.07,571.396,0],"ix":2},"a":{"a":0,"k":[-188.18,45.72,0],"ix":1},"s":{"a":0,"k":[-98.973,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[22.615,0.11],[14.055,-8.583]],"o":[[22.615,0.11],[14.055,-8.583]],"v":[[22.615,0.11],[14.055,-8.583]],"c":false}],"e":[{"i":[[11.158,3.287],[13.387,-3.25]],"o":[[11.158,3.287],[13.387,-3.25]],"v":[[11.158,3.287],[13.387,-3.25]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":90,"s":[{"i":[[11.158,3.287],[13.387,-3.25]],"o":[[11.158,3.287],[13.387,-3.25]],"v":[[11.158,3.287],[13.387,-3.25]],"c":false}],"e":[{"i":[[0.042,7.453],[21.97,0]],"o":[[0.042,7.453],[21.97,0]],"v":[[0.042,7.453],[21.97,0]],"c":false}]},{"t":180}],"ix":2},"nm":"Pfad 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0.9961,0.2824,0.2824,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"nm":"Kontur 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[1200,1200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformieren","_render":true}],"nm":"Gruppe 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false,"_render":true}],"ip":0,"op":256,"st":0,"bm":0,"completed":true},{"ddd":0,"ind":11,"ty":4,"nm":"3h","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[902.86,569.64,0],"ix":2},"a":{"a":0,"k":[131.82,45.72,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[0,7.62],[21.97,0]],"o":[[0,7.62],[21.97,0]],"v":[[0,7.62],[21.97,0]],"c":false}],"e":[{"i":[[12,3.12],[13.387,-3.25]],"o":[[12,3.12],[13.387,-3.25]],"v":[[12,3.12],[13.387,-3.25]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":90,"s":[{"i":[[12,3.12],[13.387,-3.25]],"o":[[12,3.12],[13.387,-3.25]],"v":[[12,3.12],[13.387,-3.25]],"c":false}],"e":[{"i":[[22.615,0.11],[13.887,-8.583]],"o":[[22.615,0.11],[13.887,-8.583]],"v":[[22.615,0.11],[13.887,-8.583]],"c":false}]},{"t":180}],"ix":2},"nm":"Pfad 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0.9961,0.2824,0.2824,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"nm":"Kontur 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[1200,1200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformieren","_render":true}],"nm":"Gruppe 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false,"_render":true}],"ip":0,"op":256,"st":0,"bm":0,"completed":true},{"ddd":0,"ind":12,"ty":4,"nm":"1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[361.06,600.6,0],"ix":2},"a":{"a":0,"k":[224.34,539.04,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[37.39,0],[0,38.56],[37.39,89.84]],"o":[[37.39,0],[0,38.56],[37.39,89.84]],"v":[[37.39,0],[0,38.56],[37.39,89.84]],"c":false}],"e":[{"i":[[37.39,0],[22,45.56],[37.39,89.84]],"o":[[37.39,0],[22,45.56],[37.39,89.84]],"v":[[37.39,0],[22,45.56],[37.39,89.84]],"c":false}]},{"t":180}],"ix":2},"nm":"Pfad 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0.9961,0.2824,0.2824,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"nm":"Kontur 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[1200,1200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformieren","_render":true}],"nm":"Gruppe 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false,"_render":true}],"ip":0,"op":256,"st":0,"bm":0,"completed":true},{"ddd":0,"ind":13,"ty":4,"nm":"2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[491.68,600.96,0],"ix":2},"a":{"a":0,"k":[92.88,539.88,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[15.48,0],[0,46.06],[15.48,89.98]],"o":[[15.48,0],[0,46.06],[15.48,89.98]],"v":[[15.48,0],[0,46.06],[15.48,89.98]],"c":false}],"e":[{"i":[[15.48,0],[31,45.988],[15.48,89.98]],"o":[[15.48,0],[31,45.988],[15.48,89.98]],"v":[[15.48,0],[31,45.988],[15.48,89.98]],"c":false}]},{"t":180}],"ix":2},"nm":"Pfad 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0.9961,0.2824,0.2824,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"nm":"Kontur 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[1200,1200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformieren","_render":true}],"nm":"Gruppe 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false,"_render":true}],"ip":0,"op":256,"st":0,"bm":0,"completed":true},{"ddd":0,"ind":14,"ty":4,"nm":"3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[680.98,600.96,0],"ix":2},"a":{"a":0,"k":[96.54,539.88,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[0,0],[16.09,46.06],[0,89.98]],"o":[[0,0],[16.09,46.06],[0,89.98]],"v":[[0,0],[16.09,46.06],[0,89.98]],"c":false}],"e":[{"i":[[0,0],[32.923,40.06],[0,89.98]],"o":[[0,0],[32.923,40.06],[0,89.98]],"v":[[0,0],[32.923,40.06],[0,89.98]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":135,"s":[{"i":[[0,0],[32.923,40.06],[0,89.98]],"o":[[0,0],[32.923,40.06],[0,89.98]],"v":[[0,0],[32.923,40.06],[0,89.98]],"c":false}],"e":[{"i":[[0,0],[38.09,38.56],[0,89.98]],"o":[[0,0],[38.09,38.56],[0,89.98]],"v":[[0,0],[38.09,38.56],[0,89.98]],"c":false}]},{"t":180}],"ix":2},"nm":"Pfad 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0.9961,0.2824,0.2824,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"nm":"Kontur 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[-0.273,0.242],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[1200,1200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformieren","_render":true}],"nm":"Gruppe 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false,"_render":true}],"ip":0,"op":256,"st":0,"bm":0,"completed":true},{"ddd":0,"ind":15,"ty":4,"nm":"5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[585.4,600.6,0],"ix":2},"a":{"a":0,"k":[0,539.04,0],"ix":1},"s":{"a":0,"k":[-99.195,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[0,0],[29.21,29.747],[37.986,38.786],[0,89.84]],"o":[[0,0],[29.21,29.747],[37.986,38.786],[0,89.84]],"v":[[0,0],[29.21,29.747],[37.986,38.786],[0,89.84]],"c":false}],"e":[{"i":[[0,0],[28.877,35.148],[26.48,42.144],[0,89.84]],"o":[[0,0],[28.877,35.148],[26.48,42.144],[0,89.84]],"v":[[0,0],[28.877,35.148],[26.48,42.144],[0,89.84]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":90,"s":[{"i":[[0,0],[28.877,35.148],[26.48,42.144],[0,89.84]],"o":[[0,0],[28.877,35.148],[26.48,42.144],[0,89.84]],"v":[[0,0],[28.877,35.148],[26.48,42.144],[0,89.84]],"c":false}],"e":[{"i":[[0,0],[38.21,38.56],[22.145,59.599],[0,89.84]],"o":[[0,0],[38.21,38.56],[22.145,59.599],[0,89.84]],"v":[[0,0],[38.21,38.56],[22.145,59.599],[0,89.84]],"c":false}]},{"t":180}],"ix":2},"nm":"Pfad 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0.9961,0.2824,0.2824,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"nm":"Kontur 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[1200,1200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformieren","_render":true}],"nm":"Gruppe 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false,"_render":true}],"ip":0,"op":256,"st":0,"bm":0,"completed":true},{"ddd":0,"ind":16,"ty":4,"nm":"4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[814.66,600.6,0],"ix":2},"a":{"a":0,"k":[229.26,539.04,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[0,0],[38.21,38.56],[22.145,59.599],[0,89.84]],"o":[[0,0],[38.21,38.56],[22.145,59.599],[0,89.84]],"v":[[0,0],[38.21,38.56],[22.145,59.599],[0,89.84]],"c":false}],"e":[{"i":[[0,0],[28.877,35.148],[27.488,41.977],[0,89.84]],"o":[[0,0],[28.877,35.148],[27.488,41.977],[0,89.84]],"v":[[0,0],[28.877,35.148],[27.488,41.977],[0,89.84]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":90,"s":[{"i":[[0,0],[28.877,35.148],[27.488,41.977],[0,89.84]],"o":[[0,0],[28.877,35.148],[27.488,41.977],[0,89.84]],"v":[[0,0],[28.877,35.148],[27.488,41.977],[0,89.84]],"c":false}],"e":[{"i":[[0,0],[29.21,29.747],[37.986,38.786],[0,89.84]],"o":[[0,0],[29.21,29.747],[37.986,38.786],[0,89.84]],"v":[[0,0],[29.21,29.747],[37.986,38.786],[0,89.84]],"c":false}]},{"t":180}],"ix":2},"nm":"Pfad 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0.9961,0.2824,0.2824,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"nm":"Kontur 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[1200,1200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformieren","_render":true}],"nm":"Gruppe 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false,"_render":true}],"ip":0,"op":256,"st":0,"bm":0,"completed":true}],"markers":[],"__complete":true}

‎data/images/logo.json

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"v":"5.3.1","fr":60,"ip":0,"op":180,"w":1200,"h":1200,"nm":"diamond","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":8,"ty":4,"nm":"1h","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[269.38,571.62,0],"ix":2},"a":{"a":0,"k":[131.22,42.3,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[0,0],[21.87,7.05]],"o":[[0,0],[21.87,7.05]],"v":[[0,0],[21.87,7.05]],"c":false}],"e":[{"i":[[10.305,3.097],[34.948,7.904]],"o":[[10.305,3.097],[34.948,7.904]],"v":[[10.305,3.097],[34.948,7.904]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":90,"s":[{"i":[[10.305,3.097],[34.948,7.904]],"o":[[10.305,3.097],[34.948,7.904]],"v":[[10.305,3.097],[34.948,7.904]],"c":false}],"e":[{"i":[[20.463,7.046],[49.482,7.081]],"o":[[20.463,7.046],[49.482,7.081]],"v":[[20.463,7.046],[49.482,7.081]],"c":false}]},{"t":180}],"ix":2},"nm":"Pfad 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0.9961,0.2824,0.2824,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"nm":"Kontur 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[1279.787,1215.61],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformieren","_render":true}],"nm":"Gruppe 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false,"_render":true}],"ip":0,"op":256,"st":0,"bm":0,"completed":true},{"ddd":0,"ind":9,"ty":4,"nm":"2h","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[584.68,613.92,0],"ix":2},"a":{"a":0,"k":[184.8,12,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[0,1],[30.8,1]],"o":[[0,1],[30.8,1]],"v":[[0,1],[30.8,1]],"c":false}],"e":[{"i":[[15.333,2],[42.633,-3]],"o":[[15.333,2],[42.633,-3]],"v":[[15.333,2],[42.633,-3]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":90,"s":[{"i":[[15.333,2],[42.633,-3]],"o":[[15.333,2],[42.633,-3]],"v":[[15.333,2],[42.633,-3]],"c":false}],"e":[{"i":[[30.917,1.083],[53.467,-6.333]],"o":[[30.917,1.083],[53.467,-6.333]],"v":[[30.917,1.083],[53.467,-6.333]],"c":false}]},{"t":180}],"ix":2},"nm":"Pfad 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0.9961,0.2824,0.2824,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"nm":"Kontur 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[1200,1200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformieren","_render":true}],"nm":"Gruppe 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false,"_render":true}],"ip":0,"op":256,"st":0,"bm":0,"completed":true},{"ddd":0,"ind":10,"ty":4,"nm":"3h 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[588.07,571.396,0],"ix":2},"a":{"a":0,"k":[-188.18,45.72,0],"ix":1},"s":{"a":0,"k":[-98.973,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[22.615,0.11],[14.055,-8.583]],"o":[[22.615,0.11],[14.055,-8.583]],"v":[[22.615,0.11],[14.055,-8.583]],"c":false}],"e":[{"i":[[11.158,3.287],[13.387,-3.25]],"o":[[11.158,3.287],[13.387,-3.25]],"v":[[11.158,3.287],[13.387,-3.25]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":90,"s":[{"i":[[11.158,3.287],[13.387,-3.25]],"o":[[11.158,3.287],[13.387,-3.25]],"v":[[11.158,3.287],[13.387,-3.25]],"c":false}],"e":[{"i":[[0.042,7.453],[21.97,0]],"o":[[0.042,7.453],[21.97,0]],"v":[[0.042,7.453],[21.97,0]],"c":false}]},{"t":180}],"ix":2},"nm":"Pfad 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0.9961,0.2824,0.2824,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"nm":"Kontur 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[1200,1200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformieren","_render":true}],"nm":"Gruppe 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false,"_render":true}],"ip":0,"op":256,"st":0,"bm":0,"completed":true},{"ddd":0,"ind":11,"ty":4,"nm":"3h","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[902.86,569.64,0],"ix":2},"a":{"a":0,"k":[131.82,45.72,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[0,7.62],[21.97,0]],"o":[[0,7.62],[21.97,0]],"v":[[0,7.62],[21.97,0]],"c":false}],"e":[{"i":[[12,3.12],[13.387,-3.25]],"o":[[12,3.12],[13.387,-3.25]],"v":[[12,3.12],[13.387,-3.25]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":90,"s":[{"i":[[12,3.12],[13.387,-3.25]],"o":[[12,3.12],[13.387,-3.25]],"v":[[12,3.12],[13.387,-3.25]],"c":false}],"e":[{"i":[[22.615,0.11],[13.887,-8.583]],"o":[[22.615,0.11],[13.887,-8.583]],"v":[[22.615,0.11],[13.887,-8.583]],"c":false}]},{"t":180}],"ix":2},"nm":"Pfad 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0.9961,0.2824,0.2824,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"nm":"Kontur 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[1200,1200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformieren","_render":true}],"nm":"Gruppe 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false,"_render":true}],"ip":0,"op":256,"st":0,"bm":0,"completed":true},{"ddd":0,"ind":12,"ty":4,"nm":"1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[361.06,600.6,0],"ix":2},"a":{"a":0,"k":[224.34,539.04,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[37.39,0],[0,38.56],[37.39,89.84]],"o":[[37.39,0],[0,38.56],[37.39,89.84]],"v":[[37.39,0],[0,38.56],[37.39,89.84]],"c":false}],"e":[{"i":[[37.39,0],[22,45.56],[37.39,89.84]],"o":[[37.39,0],[22,45.56],[37.39,89.84]],"v":[[37.39,0],[22,45.56],[37.39,89.84]],"c":false}]},{"t":180}],"ix":2},"nm":"Pfad 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0.9961,0.2824,0.2824,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"nm":"Kontur 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[1200,1200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformieren","_render":true}],"nm":"Gruppe 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false,"_render":true}],"ip":0,"op":256,"st":0,"bm":0,"completed":true},{"ddd":0,"ind":13,"ty":4,"nm":"2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[491.68,600.96,0],"ix":2},"a":{"a":0,"k":[92.88,539.88,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[15.48,0],[0,46.06],[15.48,89.98]],"o":[[15.48,0],[0,46.06],[15.48,89.98]],"v":[[15.48,0],[0,46.06],[15.48,89.98]],"c":false}],"e":[{"i":[[15.48,0],[31,45.988],[15.48,89.98]],"o":[[15.48,0],[31,45.988],[15.48,89.98]],"v":[[15.48,0],[31,45.988],[15.48,89.98]],"c":false}]},{"t":180}],"ix":2},"nm":"Pfad 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0.9961,0.2824,0.2824,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"nm":"Kontur 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[1200,1200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformieren","_render":true}],"nm":"Gruppe 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false,"_render":true}],"ip":0,"op":256,"st":0,"bm":0,"completed":true},{"ddd":0,"ind":14,"ty":4,"nm":"3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[680.98,600.96,0],"ix":2},"a":{"a":0,"k":[96.54,539.88,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[0,0],[16.09,46.06],[0,89.98]],"o":[[0,0],[16.09,46.06],[0,89.98]],"v":[[0,0],[16.09,46.06],[0,89.98]],"c":false}],"e":[{"i":[[0,0],[32.923,40.06],[0,89.98]],"o":[[0,0],[32.923,40.06],[0,89.98]],"v":[[0,0],[32.923,40.06],[0,89.98]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":135,"s":[{"i":[[0,0],[32.923,40.06],[0,89.98]],"o":[[0,0],[32.923,40.06],[0,89.98]],"v":[[0,0],[32.923,40.06],[0,89.98]],"c":false}],"e":[{"i":[[0,0],[38.09,38.56],[0,89.98]],"o":[[0,0],[38.09,38.56],[0,89.98]],"v":[[0,0],[38.09,38.56],[0,89.98]],"c":false}]},{"t":180}],"ix":2},"nm":"Pfad 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0.9961,0.2824,0.2824,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"nm":"Kontur 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[-0.273,0.242],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[1200,1200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformieren","_render":true}],"nm":"Gruppe 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false,"_render":true}],"ip":0,"op":256,"st":0,"bm":0,"completed":true},{"ddd":0,"ind":15,"ty":4,"nm":"5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[585.4,600.6,0],"ix":2},"a":{"a":0,"k":[0,539.04,0],"ix":1},"s":{"a":0,"k":[-99.195,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[0,0],[29.21,29.747],[37.986,38.786],[0,89.84]],"o":[[0,0],[29.21,29.747],[37.986,38.786],[0,89.84]],"v":[[0,0],[29.21,29.747],[37.986,38.786],[0,89.84]],"c":false}],"e":[{"i":[[0,0],[28.877,35.148],[26.48,42.144],[0,89.84]],"o":[[0,0],[28.877,35.148],[26.48,42.144],[0,89.84]],"v":[[0,0],[28.877,35.148],[26.48,42.144],[0,89.84]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":90,"s":[{"i":[[0,0],[28.877,35.148],[26.48,42.144],[0,89.84]],"o":[[0,0],[28.877,35.148],[26.48,42.144],[0,89.84]],"v":[[0,0],[28.877,35.148],[26.48,42.144],[0,89.84]],"c":false}],"e":[{"i":[[0,0],[38.21,38.56],[22.145,59.599],[0,89.84]],"o":[[0,0],[38.21,38.56],[22.145,59.599],[0,89.84]],"v":[[0,0],[38.21,38.56],[22.145,59.599],[0,89.84]],"c":false}]},{"t":180}],"ix":2},"nm":"Pfad 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0.9961,0.2824,0.2824,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"nm":"Kontur 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[1200,1200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformieren","_render":true}],"nm":"Gruppe 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false,"_render":true}],"ip":0,"op":256,"st":0,"bm":0,"completed":true},{"ddd":0,"ind":16,"ty":4,"nm":"4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[814.66,600.6,0],"ix":2},"a":{"a":0,"k":[229.26,539.04,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":0,"s":[{"i":[[0,0],[38.21,38.56],[22.145,59.599],[0,89.84]],"o":[[0,0],[38.21,38.56],[22.145,59.599],[0,89.84]],"v":[[0,0],[38.21,38.56],[22.145,59.599],[0,89.84]],"c":false}],"e":[{"i":[[0,0],[28.877,35.148],[27.488,41.977],[0,89.84]],"o":[[0,0],[28.877,35.148],[27.488,41.977],[0,89.84]],"v":[[0,0],[28.877,35.148],[27.488,41.977],[0,89.84]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"n":"0p833_0p833_0p167_0p167","t":90,"s":[{"i":[[0,0],[28.877,35.148],[27.488,41.977],[0,89.84]],"o":[[0,0],[28.877,35.148],[27.488,41.977],[0,89.84]],"v":[[0,0],[28.877,35.148],[27.488,41.977],[0,89.84]],"c":false}],"e":[{"i":[[0,0],[29.21,29.747],[37.986,38.786],[0,89.84]],"o":[[0,0],[29.21,29.747],[37.986,38.786],[0,89.84]],"v":[[0,0],[29.21,29.747],[37.986,38.786],[0,89.84]],"c":false}]},{"t":180}],"ix":2},"nm":"Pfad 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0.9961,0.2824,0.2824,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":1,"ix":5},"lc":2,"lj":2,"nm":"Kontur 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[1200,1200],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transformieren","_render":true}],"nm":"Gruppe 1","np":2,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false,"_render":true}],"ip":0,"op":256,"st":0,"bm":0,"completed":true}],"markers":[],"__complete":true}

‎data/metadata/0.json

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"name":"Jewels On TON NFT 01","description":"A unique jewel on TON","social_links":["https://t.me/JewelsOnTON"],"lottie":"ipfs://QmXhoS2xBJgu7ggvzK7ja5ZKWqH6BgEf9b8u9u6j9kpBLX/0.json"}

‎data/metadata/collection.json

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"name":"Jewels On TON","description":"A collection of unique jewels on TON","social_links":["https://t.me/JewelsOnTON"],"lottie":"ipfs://QmXhoS2xBJgu7ggvzK7ja5ZKWqH6BgEf9b8u9u6j9kpBLX/logo.json"}

‎jest.config.ts

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import type { Config } from 'jest';
2+
3+
const config: Config = {
4+
preset: 'ts-jest',
5+
testEnvironment: 'node',
6+
testPathIgnorePatterns: ['/node_modules/', '/dist/'],
7+
};
8+
9+
export default config;

‎package-lock.json

+6,068
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎package.json

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
{
2+
"name": "ton_jewels",
3+
"version": "0.0.1",
4+
"scripts": {
5+
"start": "blueprint run",
6+
"build": "blueprint build",
7+
"test": "jest --verbose"
8+
},
9+
"devDependencies": {
10+
"@ton/blueprint": "^0.18.0",
11+
"@ton/crypto": "^3.2.0",
12+
"@ton/sandbox": "^0.16.0",
13+
"@ton/test-utils": "^0.4.2",
14+
"@ton/ton": "^13.11.1",
15+
"@types/jest": "^29.5.12",
16+
"@types/node": "^20.11.20",
17+
"jest": "^29.7.0",
18+
"prettier": "^3.2.5",
19+
"ts-jest": "^29.1.2",
20+
"ts-node": "^10.9.2",
21+
"typescript": "^5.3.3"
22+
},
23+
"dependencies": {
24+
"@pinata/sdk": "^2.1.0",
25+
"@ton/core": "^0.56.3"
26+
}
27+
}

‎scripts/deployNftCollection.ts

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import { Address, Cell, beginCell, toNano } from '@ton/core';
2+
import { NftCollection } from '../wrappers/NftCollection';
3+
import { NetworkProvider } from '@ton/blueprint';
4+
5+
export async function run(provider: NetworkProvider) {
6+
const OFFCHAIN_CONTENT_PREFIX = 0x01;
7+
const metadata_link =
8+
'https://red-worthy-guppy-897.mypinata.cloud/ipfs/QmVYorCALFHZVLvLpuCKFmEHdZ1ihh74MNbZ6hMrtea2qF/'; // will need to add this IPFS url
9+
10+
let newContent: Cell = beginCell().storeInt(OFFCHAIN_CONTENT_PREFIX, 8).storeStringRefTail(metadata_link).endCell();
11+
let owner = Address.parse('0QBF8FbAT-vy21plzrkO9lNpw_XMcUgwojwlPNVE8rVcCsJc');
12+
13+
let nftCollection = provider.open(
14+
await NftCollection.fromInit(owner, newContent, {
15+
$$type: 'RoyaltyParams',
16+
numerator: 350n, // 350n = 35%
17+
denominator: 1000n,
18+
destination: owner,
19+
}),
20+
);
21+
22+
await nftCollection.send(
23+
provider.sender(),
24+
{
25+
value: toNano('0.05'),
26+
},
27+
{
28+
$$type: 'Deploy',
29+
queryId: 0n,
30+
},
31+
);
32+
33+
await provider.waitForDeploy(nftCollection.address);
34+
console.log('Collection smart contract has successfully deployed!');
35+
}

‎scripts/deployNftItem.ts

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import { Address, Cell, beginCell, toNano } from '@ton/core';
2+
import { NftItem } from '../wrappers/NftItem';
3+
import { NetworkProvider } from '@ton/blueprint';
4+
import { Mint, NftCollection } from '../wrappers/NftCollection';
5+
6+
export async function run(provider: NetworkProvider) {
7+
const nft_collection_address = Address.parse('EQCqvOz-vBx7Uc7L_r8VPt1Vhkw89-QiwHcrsSuPMY8K6BIS');
8+
const nftCollection = provider.open(NftCollection.fromAddress(nft_collection_address));
9+
const message: Mint = {
10+
$$type: 'Mint',
11+
query_id: 0n,
12+
};
13+
14+
await nftCollection.send(
15+
provider.sender(),
16+
{
17+
value: toNano('0.2'),
18+
},
19+
message,
20+
);
21+
22+
const collectionData = await nftCollection.getGetCollectionData();
23+
const nftItemAddress = await nftCollection.getGetNftAddressByIndex(collectionData.next_item_index);
24+
25+
await provider.waitForDeploy(nftItemAddress as Address);
26+
console.log('NFT ITEM smart contract has successfully deployed!');
27+
}
28+
function encodeNftItem(arg0: string): import('ton-core').Cell {
29+
throw new Error('Function not implemented.');
30+
}

‎scripts/upload_metadata.ts

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import pinataSDK from '@pinata/sdk';
2+
import { readdirSync } from 'fs';
3+
import { writeFile, readFile } from 'fs/promises';
4+
import path from 'path';
5+
6+
async function uploadFolderToIPFS(folderPath: string): Promise<string> {
7+
const pinata = new pinataSDK({
8+
pinataApiKey: process.env.PINATA_API_KEY,
9+
pinataSecretApiKey: process.env.PINATA_API_SECRET,
10+
});
11+
12+
const response = await pinata.pinFromFS(folderPath);
13+
return response.IpfsHash;
14+
}
15+
16+
async function updateMetadataFiles(metadataFolderPath: string, imagesIpfsHash: string): Promise<void> {
17+
const files = readdirSync(metadataFolderPath);
18+
19+
for (const filename of files) {
20+
const index = files.indexOf(filename);
21+
const filePath = path.join(metadataFolderPath, filename);
22+
const file = await readFile(filePath);
23+
24+
const metadata = JSON.parse(file.toString());
25+
// metadata.image =
26+
// index != files.length - 1 ? `ipfs://${imagesIpfsHash}/${index}.jpg` : `ipfs://${imagesIpfsHash}/logo.jpg`;
27+
metadata.lottie =
28+
index != files.length - 1 ? `ipfs://${imagesIpfsHash}/${index}.json` : `ipfs://${imagesIpfsHash}/logo.json`;
29+
30+
await writeFile(filePath, JSON.stringify(metadata));
31+
}
32+
}
33+
34+
export async function run() {
35+
const metadataFolderPath = './data/metadata/';
36+
const imagesFolderPath = './data/images/';
37+
38+
console.log('Started uploading images to IPFS...');
39+
const imagesIpfsHash = await uploadFolderToIPFS(imagesFolderPath);
40+
console.log(`Successfully uploaded the pictures to ipfs: https://gateway.pinata.cloud/ipfs/${imagesIpfsHash}`);
41+
42+
console.log('Started uploading metadata files to IPFS...');
43+
await updateMetadataFiles(metadataFolderPath, imagesIpfsHash);
44+
const metadataIpfsHash = await uploadFolderToIPFS(metadataFolderPath);
45+
console.log(`Successfully uploaded the metadata to ipfs: https://gateway.pinata.cloud/ipfs/${metadataIpfsHash}`);
46+
}
47+
48+
run();

‎tests/NftCollection.spec.ts

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import { Blockchain, SandboxContract, TreasuryContract } from '@ton/sandbox';
2+
import { toNano } from '@ton/core';
3+
import { NftCollection } from '../wrappers/NftCollection';
4+
import '@ton/test-utils';
5+
6+
describe('NftCollection', () => {
7+
let blockchain: Blockchain;
8+
let deployer: SandboxContract<TreasuryContract>;
9+
let nftCollection: SandboxContract<NftCollection>;
10+
11+
beforeEach(async () => {
12+
blockchain = await Blockchain.create();
13+
14+
nftCollection = blockchain.openContract(await NftCollection.fromInit());
15+
16+
deployer = await blockchain.treasury('deployer');
17+
18+
const deployResult = await nftCollection.send(
19+
deployer.getSender(),
20+
{
21+
value: toNano('0.05'),
22+
},
23+
{
24+
$$type: 'Deploy',
25+
queryId: 0n,
26+
}
27+
);
28+
29+
expect(deployResult.transactions).toHaveTransaction({
30+
from: deployer.address,
31+
to: nftCollection.address,
32+
deploy: true,
33+
success: true,
34+
});
35+
});
36+
37+
it('should deploy', async () => {
38+
// the check is done inside beforeEach
39+
// blockchain and nftCollection are ready to use
40+
});
41+
});

‎tests/NftItem.spec.ts

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import { Blockchain, SandboxContract, TreasuryContract } from '@ton/sandbox';
2+
import { toNano } from '@ton/core';
3+
import { NftItem } from '../wrappers/NftItem';
4+
import '@ton/test-utils';
5+
6+
describe('NftItem', () => {
7+
let blockchain: Blockchain;
8+
let deployer: SandboxContract<TreasuryContract>;
9+
let nftItem: SandboxContract<NftItem>;
10+
11+
beforeEach(async () => {
12+
blockchain = await Blockchain.create();
13+
14+
nftItem = blockchain.openContract(await NftItem.fromInit());
15+
16+
deployer = await blockchain.treasury('deployer');
17+
18+
const deployResult = await nftItem.send(
19+
deployer.getSender(),
20+
{
21+
value: toNano('0.05'),
22+
},
23+
{
24+
$$type: 'Deploy',
25+
queryId: 0n,
26+
}
27+
);
28+
29+
expect(deployResult.transactions).toHaveTransaction({
30+
from: deployer.address,
31+
to: nftItem.address,
32+
deploy: true,
33+
success: true,
34+
});
35+
});
36+
37+
it('should deploy', async () => {
38+
// the check is done inside beforeEach
39+
// blockchain and nftItem are ready to use
40+
});
41+
});

‎tsconfig.json

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"compilerOptions": {
3+
"target": "ES2020",
4+
"outDir": "dist",
5+
"module": "commonjs",
6+
"declaration": true,
7+
"esModuleInterop": true,
8+
"forceConsistentCasingInFileNames": true,
9+
"strict": true,
10+
"skipLibCheck": true
11+
}
12+
}

‎wrappers/NftCollection.compile.ts

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import { CompilerConfig } from '@ton/blueprint';
2+
3+
export const compile: CompilerConfig = {
4+
lang: 'tact',
5+
target: 'contracts/nft_collection.tact',
6+
};

‎wrappers/NftCollection.ts

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from '../build/NftCollection/tact_NftCollection';

‎wrappers/NftItem.compile.ts

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import { CompilerConfig } from '@ton/blueprint';
2+
3+
export const compile: CompilerConfig = {
4+
lang: 'tact',
5+
target: 'contracts/nft_item.tact',
6+
};

‎wrappers/NftItem.ts

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from '../build/NftItem/tact_NftItem';

0 commit comments

Comments
 (0)
Please sign in to comment.