Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ You can find opened issues on the [https://github.com/fxhash/fxhash-website/issu
* fork the **dev** branch of this repo
* create a branch to implement a feature or fix a bug
* when done, push the branch to your git repository fork
* create a pull request againts the **dev** branch
* create a pull request against the **dev** branch
* the team will review it, and either request changes or merge it

If you find a bug with the front end, you can create an issue.
Expand All @@ -63,7 +63,7 @@ If you find a bug with the front end, you can create an issue.
* [typescript](https://www.typescriptlang.org/)
* [css modules](https://github.com/css-modules/css-modules) (with sass)
* [taquito](https://tezostaquito.io/) to interact with the blockchain
* [ApolloClient](https://www.apollographql.com/docs/react/) to run graphQL queries (both durring SSR and on the client-side), and handle the store (client-side)
* [ApolloClient](https://www.apollographql.com/docs/react/) to run graphQL queries (both during SSR and on the client-side), and handle the store (client-side)

### Project structure

Expand Down
4 changes: 2 additions & 2 deletions src/doc/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ An article is used to define an article object and point to the file where the c

# How does it work

Articles are written in **markdown** and can be found in the same directory as this `README.md` file. When the site is built, somes pages will be generated using the `doc.json` object. For each article, a page will be created.
Articles are written in **markdown** and can be found in the same directory as this `README.md` file. When the site is built, some pages will be generated using the `doc.json` object. For each article, a page will be created.

The `link` property in the category and article objects defines 2 things:
* where the content of the article is located
Expand Down Expand Up @@ -97,4 +97,4 @@ Here's an example:

In this case, there are 2 articles:
* `/artist/guide-publish-generative-token`
* `/artist/code-of-conduct`
* `/artist/code-of-conduct`
2 changes: 1 addition & 1 deletion src/doc/artist/code-of-conduct.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ In future, a tagging system will be implemented that will allow artists to add l

# Rescheduling

The scheduling feature is provided as a means to refresh your project's settings and have it appear back at the top of the list. Resheduling can only be used under the following circumstances:
The scheduling feature is provided as a means to refresh your project's settings and have it appear back at the top of the list. Rescheduling can only be used under the following circumstances:

- Something has gone wrong with your launch - a mistake or issue with the drop that caused the launch to be broken; or
- A significant change to the allow list; and
Expand Down
2 changes: 1 addition & 1 deletion src/doc/artist/collaborations.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ date: "2022-04-16"
description: "A full documentation on how to collaborate with other artists and publish together."
---

> fxhash comes with built-in tools so that the work that is the fruit of a collaboration between many artists can be released in the best possible conditions. We provides a collaboration factory contract which can be used to originate collaboration contracts between any number of entities.
> fxhash comes with built-in tools so that the work that is the fruit of a collaboration between many artists can be released in the best possible conditions. We provide a collaboration factory contract which can be used to originate collaboration contracts between any number of entities.

# What's a collaboration contract ?

Expand Down
4 changes: 2 additions & 2 deletions src/doc/artist/fxlens.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ description: "A documentation about fx(lens), fxhash local development studio."

# What is fx(lens) ?

fx(lens) is a web page which can be executed locally, designed to load and interact with fxhash projects in your local environment. It provides various tools which can be accessed via a minimalistic UI, facilitating the exploration of fxhash projects as they are being developped.
fx(lens) is a web page which can be executed locally, designed to load and interact with fxhash projects in your local environment. It provides various tools which can be accessed via a minimalistic UI, facilitating the exploration of fxhash projects as they are being developed.

![screenshot of fxlens](/images/doc/artist/lens/lens-1.png)

Expand Down Expand Up @@ -75,7 +75,7 @@ If everything went well, you should see the following page:

## How to work with the boilerplate

At the root of your the boilerplate folder, there is a `project` folder. This is where any file related to your project should go. The boilerplates comes with the following project structure:
At the root of your boilerplate folder, there is a `project` folder. This is where any file related to your project should go. The boilerplates comes with the following project structure:

```text
├── project
Expand Down
10 changes: 5 additions & 5 deletions src/doc/artist/guide-publish-generative-token.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ To facilitate the creation of fxhash projects, we have created a fully-featured

# How is a Generative Token structured

> This section covers different aspect on the structure and specifications of Generative Tokens. If you are using the fxhash boilerplate, many of the requirements are supported out-of-the-box.
> This section covers different aspects of the structure and specifications of Generative Tokens. If you are using the fxhash boilerplate, many of the requirements are supported out-of-the-box.

## Project structure

Expand Down Expand Up @@ -147,9 +147,9 @@ Testing often will also allow you to catch problems early that would become big

> Ensure your token looks the same in all resolutions and DPRs.

It is ideal if your token produces the same artwork at different sizes. Make sure to test your token often at different resolutions and DPRs. One of the most common pitfalls that artists fall into is not doing so and having their tokens look different at different sizes - as well as different to the preview - as a result.
It is ideal if your token produces the same artwork in different sizes. Make sure to test your token often at different resolutions and DPRs. One of the most common pitfalls that artists fall into is not doing so and having their tokens look different at different sizes - as well as different to the preview - as a result.

There are a number of different ways of getting your token to work in a resolution independent manor. Jump into the creator-support channel if you'd like to ask any questions.
There are a number of different ways of getting your token to work in a resolution independent manner. Jump into the creator-support channel if you'd like to ask any questions.

## WebGL

Expand All @@ -163,13 +163,13 @@ Some GPUs allow you to specify non power of two textures and framebuffers, howev

WebGL is an emulation layer on top of different graphics APIs which talk to hardware, as such implementation of basic things like sine calculation and float precision can vary.

One important thing to remember about WebGL is that you should be doing as muchof your calculation up-front, in javascript, and providing those values to WebGL as uniforms.
One important thing to remember about WebGL is that you should be doing as much of your calculation up-front, in javascript, and providing those values to WebGL as uniforms.

### WebGL and previews

As of right now the preview system doesn't have a GPU. As such, rendering your scene falls to the CPU, which will render WebGL but at an extremely low framerate.

If your token is WebGL then you want to make sure that you're rendering an accepable preview in the first couple of frames.
If your token is WebGL then you want to make sure that you're rendering an acceptable preview in the first couple of frames.

## Computational complexity and previews

Expand Down
2 changes: 1 addition & 1 deletion src/doc/artist/params.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ For each individual parameter that you specify, you can also set a specific upda
},
```

All updates on prameters with `update: "sync"` are received in the background in real-time. If your artwork is already running in some kind of draw loop (e.g. via `requestAnimationFrame`), you will receive those changes during the runtime of your loop.
All updates on parameters with `update: "sync"` are received in the background in real-time. If your artwork is already running in some kind of draw loop (e.g. via `requestAnimationFrame`), you will receive those changes during the runtime of your loop.

For even more advanced use cases, e.g. if you want to only re-render your artwork when the values of your parameters are changing, you can use the new event listeners described in the section [`$fx.on`](/doc/artist/snippet-api#fxoneventid-handler-ondone) on the snippet api page.

Expand Down
2 changes: 1 addition & 1 deletion src/doc/artist/pricing-your-project.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ description: "Some information on the different pricing strategies as well as so

# Pricing strategies

When publishing a project on fx, artists can chose to distribute their work with different pricing strategies. As of today, 2 strategies are available:
When publishing a project on fx, artists can choose to distribute their work with different pricing strategies. As of today, 2 strategies are available:

- fixed price
- dutch auction
Expand Down
12 changes: 6 additions & 6 deletions src/doc/artist/project-settings.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ The trigger defines when the capture module will take the preview after loading

## Target

This option defines what will be targetted by the capture module.
This option defines what will be targeted by the capture module.

- **From \<canvas\>**: capture module will directly grab the data of the canvas selected in the document with the CSS selector you provide. The preview will have the same size as the canvas.
- **Viewport capture**: the capture will be made on the whole viewport, set at the resolution you will provide.
Expand All @@ -45,7 +45,7 @@ If you don't use WebGL and only the regular canvas API, it's also possible that

## Recommendations

If your project is loading asynchronous requests from the project's folder, **always consider that one of those ressources may be slow to load**. In that regard, if you load resources please always use `fxpreview()` to trigger the capture.
If your project is loading asynchronous requests from the project's folder, **always consider that one of those resources may be slow to load**. In that regard, if you load resources please always use `fxpreview()` to trigger the capture.

# Explore variation settings

Expand All @@ -64,7 +64,7 @@ You can configure the following settings, for both **during the mint** period an
- **infinite**: viewers can explore any amount of variations and so randomly
- **limited set of hashes**: define a list of hashes the viewers will cycle through when clicking on the button

These settings should give enough control to define a strategy during the lifetime of your token. You can for instance disabled infinite exploration after token is minted, so that the front end only display a finite number of states through the minted collection of the token. You decide.
These settings should give enough control to define a strategy during the lifetime of your token. You can for instance disable infinite exploration after token is minted, so that the front end only displays a finite number of states through the minted collection of the token. You decide.

::infobox[Please note that the variation settings have no effect on the iterations which will be generated from your project.]

Expand Down Expand Up @@ -107,7 +107,7 @@ By having the ability to define multiple reserves, it gives you a fine control o

### Think about new users

We would recommend to keep new users in mind. It's great to reward your previous collectors, but we wouldn't want the platform to become gated for new-comers because of this feature. We are trusting your jugement in that regard.
We would recommend to keep new users in mind. It's great to reward your previous collectors, but we wouldn't want the platform to become gated for new-comers because of this feature. We are trusting your judgment in that regard.

### Limitations

Expand Down Expand Up @@ -142,11 +142,11 @@ tz1MGzgRu6qJ3RaBUErnpFDLarFVPgaApKrA;1

### Lock N editions for later

By setting a reserve as an access list to a burn address (or to yourself if you're not planning on consuming it), you can lock acertain number of editions which can then be safely unlocked.
By setting a reserve as an access list to a burn address (or to yourself if you're not planning on consuming it), you can lock a certain number of editions which can then be safely unlocked.

## Updating a reserve

Reserves are static. When a user mints from a reserve, it updates the smart contract storage, which then has to be indexed to be displayed on the UI with the update. It means that what you see on the UI may not be completly up-to-date with onchain storage. And so, consider the following case:
Reserves are static. When a user mints from a reserve, it updates the smart contract storage, which then has to be indexed to be displayed on the UI with the update. It means that what you see on the UI may not be completely up-to-date with onchain storage. And so, consider the following case:

![Race condition](/images/doc/artist/reserves/race.jpg)

Expand Down
8 changes: 4 additions & 4 deletions src/doc/artist/snippet-api.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ $fx.preview()
| [`getFeatures()`](#fxgetfeatures) | ()&nbsp;=>&nbsp;object | Return the features object (whole object defined through the `features()` function) |
| [`params()`](#fxparamsdefinition) | (array)&nbsp;=>&nbsp;void | This function can be called with an array of parameter definitions as an input. This is how you can define the parameters collectors will modulate before minting their iteration of your piece. |
| [`getParam()`](#fxgetparamid) | (string)&nbsp;=>&nbsp;any | Given a param ID, returns its current value based on the param values passed to the iteration. |
| [`getParams()`](#fxgetparams) | ()&nbsp;=>&nbsp;object | Return an map of param key value pairs, based on the provided params definition and the current values of all the parameters. |
| [`getParams()`](#fxgetparams) | ()&nbsp;=>&nbsp;object | Return a map of param key value pairs, based on the provided params definition and the current values of all the parameters. |
| [`getRawParam()`](#fxgetrawparamid) | (string)&nbsp;=>&nbsp;string | Returns the bytes string of a parameter as passed to the iteration. |
| [`on()`](#fxoneventid-handler-ondone) | (string, function, function)&nbsp;=>&nbsp;function | Adds an event listener to an event. returns a function to remove the event listener. |
| [`emit()`](#fxemiteventid-data) | (string, any)&nbsp;=>&nbsp;void | Emit an event to the parent context. Can be used to update parameters from the code for instance. |
Expand Down Expand Up @@ -72,7 +72,7 @@ const r2 = fxrand() // same effect as above

The fxhash snippet provides an implementation of SFC32 ([Standard Fast Counter 32](https://github.com/bryc/code/blob/master/jshash/PRNGs.md#sfc32)) as the PRNG.

`$fx.rand()` is a pointer to the `fxrand()` function. You can use any of these in your code, although we recommend using the `$fx` syntax for consistency accross your code.
`$fx.rand()` is a pointer to the `fxrand()` function. You can use any of these in your code, although we recommend using the `$fx` syntax for consistency across your code.

::infobox[It is not mandatory to use the `$fx.rand()` function as your source of randomness, you can implement the PRNG of your choice instead, as long as it uses the hash as the seed.]

Expand Down Expand Up @@ -115,7 +115,7 @@ const r2 = fxrandminter() // same effect as above

The fxhash snippet provides an implementation of SFC32 ([Standard Fast Counter 32](https://github.com/bryc/code/blob/master/jshash/PRNGs.md#sfc32)) as the PRNG.

`$fx.randminter()` is a pointer to the `fxrandminter()` function. You can use any of these in your code, although we recommend using the `$fx` syntax for consistency accross your code.
`$fx.randminter()` is a pointer to the `fxrandminter()` function. You can use any of these in your code, although we recommend using the `$fx` syntax for consistency across your code.

::infobox[It is not mandatory to use the `$fx.randminter()` function as your source of randomness, you can implement the PRNG of your choice instead, as long as it uses the minter address as the seed.]

Expand Down Expand Up @@ -241,7 +241,7 @@ setTimeout(() => {
}, 1000)
```

Fxhash automatically computes the rarity of a particular feature by counting the number of occurences among all the tokens of the collection. Two feature values are considered the same if a [strict equality](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Strict_equality) between those returns true. If you want the rarity of a feature to be meaningful, you must define its values in a way that ensures multiple occurences to appear.
Fxhash automatically computes the rarity of a particular feature by counting the number of occurrences among all the tokens of the collection. Two feature values are considered the same if a [strict equality](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Strict_equality) between those returns true. If you want the rarity of a feature to be meaningful, you must define its values in a way that ensures multiple occurrences to appear.

For instance, this will not work well with the rarity module:

Expand Down