diff --git a/art-blocks-101/on-chain.md b/art-blocks-101/on-chain.md index 04880a77..c2c3e68d 100644 --- a/art-blocks-101/on-chain.md +++ b/art-blocks-101/on-chain.md @@ -84,7 +84,7 @@ Some NFTs (like some Art Blocks project tokens) may rely on published software l Art Blocks Flagship and Art Blocks Engine NFTs only rely on fully on-chain storage solutions, plus allowing a single dependency to be housed on a software registry. This provides an extremely high level of confidence that the NFTs will remain fully accessible and immutable for the foreseeable future. -While Art Blocks originally relied on widly used software registries to house dependencies, the Art Blocks team has since created a **fully on-chain software registry called the [Art Blocks Dependency Registry](https://github.com/ArtBlocks/artblocks-contracts/blob/main/packages/contracts/README.md#dependencyregistry)**. The registry is fully decentralized and is used by all Art Blocks Flagship NFTs. The registry enables dependencies to be stored fully on-chain, when the gas costs are justified. Art Blocks uploaded their first dependency, p5js v1.0.0, to the registry in January 2024, retiring any doubt that projects relying on p5js@1.0.0 would ever be unable to generate their outputs in the future. +While Art Blocks originally relied on widely used software registries to house dependencies, the Art Blocks team has since created a **fully on-chain software registry called the [Art Blocks Dependency Registry](https://github.com/ArtBlocks/artblocks-contracts/blob/main/packages/contracts/README.md#dependencyregistry)**. The registry is fully decentralized and is used by all Art Blocks Flagship NFTs. The registry enables dependencies to be stored fully on-chain, when the gas costs are justified. Art Blocks uploaded their first dependency, p5js v1.0.0, to the registry in January 2024, retiring any doubt that projects relying on p5js@1.0.0 would ever be unable to generate their outputs in the future. ### Engine Flex diff --git a/art-blocks-api/api-overview.md b/art-blocks-api/api-overview.md index 22a6e726..49b7d4c5 100644 --- a/art-blocks-api/api-overview.md +++ b/art-blocks-api/api-overview.md @@ -157,7 +157,7 @@ In addition to the standard static renders provided for each token, there are tw - HD Renders – `https://media.artblocks.io/hd/{tokenID}.png` - Thumbnail Renders – `https://media.artblocks.io/thumb/{tokenID}.png` -Please note that these additional static render formats are still currently being back-filled and may not yet be present for all tokens. Our current recommendation for those looking to depend on the "HD" or "thumbnail" responses is to a) first attempt the HD/thumb image resource that you would pefer, b) if this resource is not available, fall back to the standard sized image resource. For the current state of the ongoing backfill of HD and thumbnail assets, please refer to [this spreadsheet](https://docs.google.com/spreadsheets/d/1Li6TMieXL3MENtg5sq9omRVPsa8MWWb7eZU1uDwYxvU/edit?usp=drive_web&ouid=100711456886886984200). +Please note that these additional static render formats are still currently being back-filled and may not yet be present for all tokens. Our current recommendation for those looking to depend on the "HD" or "thumbnail" responses is to a) first attempt the HD/thumb image resource that you would prefer, b) if this resource is not available, fall back to the standard sized image resource. For the current state of the ongoing backfill of HD and thumbnail assets, please refer to [this spreadsheet](https://docs.google.com/spreadsheets/d/1Li6TMieXL3MENtg5sq9omRVPsa8MWWb7eZU1uDwYxvU/edit?usp=drive_web&ouid=100711456886886984200). Please also note that the Generator API and Media API links for a given token are included in the token response for that token from the Token API. @@ -436,4 +436,4 @@ const response = await fetch(AB_GRAPHQL_ENDPOINT, { For a full detailed overview of this GraphQL API, please reference: https://docs.artblocks.io/public-api-docs/ -Additionally, you can use this interactive Hasura plaground to test out queries: https://cloud.hasura.io/public/graphiql?endpoint=https://data.artblocks.io/v1/graphql +Additionally, you can use this interactive Hasura playground to test out queries: https://cloud.hasura.io/public/graphiql?endpoint=https://data.artblocks.io/v1/graphql diff --git a/art-blocks-api/artblocks-viewer.md b/art-blocks-api/artblocks-viewer.md index 0eecfc3d..e2ea804c 100644 --- a/art-blocks-api/artblocks-viewer.md +++ b/art-blocks-api/artblocks-viewer.md @@ -60,7 +60,7 @@ This is a running list of contract addresses for various Art Blocks and Engine ## Customizable Display -You can create a customizable display for any route on artblocks-viewer. This is done through query params added to the end of the url. In order to activate this ability you must first add `?useCustomViewParams=true` to the end of the whatever route you are using. [Here](https://live.artblocks.io/token/0x059edd72cd353df5106d2b9cc5ab83a52287ac3a-71?useCustomViewParams=true) is the most basic customized url of Chromie Squiggle mint #71 with just the squiggle centered in the middle of the page. +You can create a customizable display for any route on artblocks-viewer. This is done through query params added to the end of the url. In order to activate this ability you must first add `?useCustomViewParams=true` to the end of whatever route you are using. [Here](https://live.artblocks.io/token/0x059edd72cd353df5106d2b9cc5ab83a52287ac3a-71?useCustomViewParams=true) is the most basic customized url of Chromie Squiggle mint #71 with just the squiggle centered in the middle of the page. All of the customization that can be done and the default values are as follows: diff --git a/art-blocks-api/entities.md b/art-blocks-api/entities.md index f90d7509..5bfa83ce 100644 --- a/art-blocks-api/entities.md +++ b/art-blocks-api/entities.md @@ -43,7 +43,7 @@ Description: get various details about a specific project | artist | Account! | Artist that created the project | | artistAddress | Bytes! | Wallet address of the artist | | artistName | String | Artist name | -| baseIpfsUri | String | Uniform Resource Identifier Interplanetary File System (IPFS) of of a nonfungible token | +| baseIpfsUri | String | Uniform Resource Identifier Interplanetary File System (IPFS) of a nonfungible token | | baseUri | String | The base URI is the mutual part among each NFT's URI. By default, the URI is baseURI/tokenId | | complete | Boolean! | A project is complete when it has reached its maximum invocations | | completedAt | BigInt | Timestamp at which a project was completed | @@ -75,7 +75,7 @@ Description: get various details about a specific project | website | String | Artist or project website | | proposedArtistAddressesAndSplits | ProposedArtistAddressesAndSplit | Proposed Artist addresses and payment split percentages | | owners | [AccountProject!](#accountproject) | Accounts that own tokens of the project | -| createdAt | BigInt! | When project inititated | +| createdAt | BigInt! | When project initiated | | updatedAt | BigInt! | When project updated | | activatedAt | BigInt | WHen project activated | | scriptUpdatedAt | BigInt | when the script was updated | diff --git a/art-blocks-api/queries.md b/art-blocks-api/queries.md index 6ca40a5b..73407e84 100644 --- a/art-blocks-api/queries.md +++ b/art-blocks-api/queries.md @@ -12,7 +12,7 @@ You can build your own queries using a [GraphQL Explorer](https://graphiql-onlin ## Subgraph Querying Walkthrough -The following provides some examples on how to use the Art Blocks subgraph to perform a handful of common queries. +The following provides some examples of how to use the Art Blocks subgraph to perform a handful of common queries. #### Important Notes diff --git a/art-blocks-engine-onboarding/art-blocks-engine-101/Embroidery-on-Art-Blocks-Engine.md b/art-blocks-engine-onboarding/art-blocks-engine-101/Embroidery-on-Art-Blocks-Engine.md index 17bd0708..95e4c349 100644 --- a/art-blocks-engine-onboarding/art-blocks-engine-101/Embroidery-on-Art-Blocks-Engine.md +++ b/art-blocks-engine-onboarding/art-blocks-engine-101/Embroidery-on-Art-Blocks-Engine.md @@ -83,13 +83,13 @@ window.generateEmbroiderySVG = function(width, height) { In order to correctly generate files for embroidery, you must: - [ ] Implement a `generateEmbroiderySVG` global function that returns the full markup of an `` element as a string -- [ ] *Optional:* accept a `width` and `height` parameter (millimeters) used to resize the contents of the SVG to accomodate different garment sizes +- [ ] *Optional:* accept a `width` and `height` parameter (millimeters) used to resize the contents of the SVG to accommodate different garment sizes - [ ] Render a digital-only version of the art using a separate `` or `` that is displayed to the user and thumbnailed in token metadata (similar to any digital-only Art Blocks project) - [ ] Inline all libraries and code used in your project that are not configured as an on-chain dependency ## Known Limitations -- [ ] Avoid using SVG fills - instead, to create the visual appearance of a fill, the SVG should contains the exact paths the embroidery needle should follow +- [ ] Avoid using SVG fills - instead, to create the visual appearance of a fill, the SVG should contain the exact paths the embroidery needle should follow - [ ] Avoid using asynchronous code or promises inside of the `generateEmbroiderySVG` function - the function should return valid SVG markup immediately - [ ] Provide margins (bleed) matching the precision of the embroidery machine to improve manufacturing yield - [ ] Match all colors used in your design to the colors of thread available to you for embroidering diff --git a/art-blocks-engine-onboarding/art-blocks-engine-101/Engine-partner-onboarding-steps.md b/art-blocks-engine-onboarding/art-blocks-engine-101/Engine-partner-onboarding-steps.md index cfe999fb..c8f1c80a 100644 --- a/art-blocks-engine-onboarding/art-blocks-engine-101/Engine-partner-onboarding-steps.md +++ b/art-blocks-engine-onboarding/art-blocks-engine-101/Engine-partner-onboarding-steps.md @@ -105,7 +105,7 @@ OpenSea - https://docs.opensea.io/docs/10-setting-fees-on-secondary-sales LooksRare - https://docs.looksrare.org/guides/collection-management/set-or-edit-collection-royalties x2y2 - https://docs.x2y2.io/guides/collection-management/manage-your-collection -Note: The vast majority of secondary activity takes place on OpenSea. Currently, OpenSea does not recognize on-chain roylaties and needs to be set through their interface. However, they plan to recognize [Roylaty Registry](https://royaltyregistry.xyz/lookup) in the near-ish future. We highly encourage you to sign up for the Royalty Registry to avoid missed secondary roylaties. +Note: The vast majority of secondary activity takes place on OpenSea. Currently, OpenSea does not recognize on-chain royalties and needs to be set through their interface. However, they plan to recognize [Roylaty Registry](https://royaltyregistry.xyz/lookup) in the near-ish future. We highly encourage you to sign up for the Royalty Registry to avoid missed secondary royalties. Instructions on setting up Royalty Registry - https://docs.artblocks.io/creator-docs/art-blocks-engine-onboarding/art-blocks-engine-101/engine-royalty-registry-setup/ diff --git a/art-blocks-engine-onboarding/art-blocks-engine-101/Engine-project-launch.md b/art-blocks-engine-onboarding/art-blocks-engine-101/Engine-project-launch.md index 2dd2baaf..8efcb821 100644 --- a/art-blocks-engine-onboarding/art-blocks-engine-101/Engine-project-launch.md +++ b/art-blocks-engine-onboarding/art-blocks-engine-101/Engine-project-launch.md @@ -18,7 +18,7 @@ There are slight variations between V2 and V3 contracts, which will be noted in - (V2 only) Price-per-mint specified in WEI (e.g., 350000000000000000, or 0.35 ETH) 2. Navigate to your Engine Core Contract on Etherscan and connect your wallet. You can find this link in your `DEPLOYMENTS.md` log. [https://goerli.etherscan.io/address/0xd2363Acbf8CdF01A5FdfcB8f0295e0a5dF94518D#code](https://goerli.etherscan.io/address/0xd2363Acbf8CdF01A5FdfcB8f0295e0a5dF94518D#code)) 3. Click the "Write contract" tab and use the `addProject` method to create a new project shell, specifying the information collected in step 1. -4. Connect to the Art Blocks website with the artist wallet used in in Step 3. Your artist should be able to begin entering project details. +4. Connect to the Art Blocks website with the artist wallet used in Step 3. Your artist should be able to begin entering project details. Testnet URL: `https://artist-staging.artblocks.io/engine/[flex OR fullyonchain]/projects/[coreContractAddress]/[projectID]` example: https://artist-staging.artblocks.io/engine/flex/projects/0x28b82AA5bb6d00363ae0FBC5ecaD689Ae49BC82B/0 @@ -73,7 +73,7 @@ Before minting your first token (#0) on your new project shell, verify the follo ## Pre-launch (pre-open-minting) Flight Check -For a project to be avaialble for public purchase, the project must be activated by the admin, and unpaused by the artist. +For a project to be available for public purchase, the project must be activated by the admin, and unpaused by the artist. tldr: inactive + paused (default state) = private project shell and unable to purchase diff --git a/art-blocks-engine-onboarding/art-blocks-engine-101/Engine-royalty-registry-setup-(V2-only).md b/art-blocks-engine-onboarding/art-blocks-engine-101/Engine-royalty-registry-setup-(V2-only).md index 68ad06d6..2cf26bc6 100644 --- a/art-blocks-engine-onboarding/art-blocks-engine-101/Engine-royalty-registry-setup-(V2-only).md +++ b/art-blocks-engine-onboarding/art-blocks-engine-101/Engine-royalty-registry-setup-(V2-only).md @@ -29,7 +29,7 @@ For Engine contracts, the following addresses may receive royalties: ## Configuring Royalties -V3 and V2 Engine contracts are configured differently. V3 Engine contracts are the latest version of the Art Blocks Engine contracts. Since they were designed after the Royalty Registry was released, they automatically integrate with with the Royalty Registry. V2 Engine contracts also integrate with the Royalty Registry, but have a shim-layer that must also be configured. This is because V2 Engine contracts were designed before the Royalty Registry was released. +V3 and V2 Engine contracts are configured differently. V3 Engine contracts are the latest version of the Art Blocks Engine contracts. Since they were designed after the Royalty Registry was released, they automatically integrate with the Royalty Registry. V2 Engine contracts also integrate with the Royalty Registry, but have a shim-layer that must also be configured. This is because V2 Engine contracts were designed before the Royalty Registry was released. ## Configuring V3 Engine Contracts diff --git a/art-blocks-engine-onboarding/art-blocks-engine-101/Engine-technical-details.md b/art-blocks-engine-onboarding/art-blocks-engine-101/Engine-technical-details.md index bb6b02f7..d1cd5f9f 100644 --- a/art-blocks-engine-onboarding/art-blocks-engine-101/Engine-technical-details.md +++ b/art-blocks-engine-onboarding/art-blocks-engine-101/Engine-technical-details.md @@ -100,7 +100,7 @@ Note that for IPFS/Arweave external asset dependencies if your CID is pointing t ## Loading JS Libraries As External Asset Dependencies -If you are specifically looking to utilize an IPFS/ARWEAVE type external asset dependency as a JavaScript library in your project script, you cannot simply add it as a script element onto the page. You must load it in a blocking manner so that the browser does not attempt to run your project script code before the lib is fully loaded. Here is an example of how to do this with ES6 dynamic imports (supported by most modern browsers: https://caniuse.com/es6-module-dynamic-import): +If you are specifically looking to utilize an IPFS/ARWEAVE type external asset dependency as a JavaScript library in your project script, you cannot simply add it as a script element onto the page. You must load it in a blocking manner so that the browser does not attempt to run your project script code before the lib is fully loaded. Here is an example of how to do this with ES6 dynamic imports (supported by most modern browsers: https://caniuse.com/es6-module-dynamic-import): ```js (async () => { diff --git a/art-blocks-engine-onboarding/art-blocks-engine-101/Filebase-IPFS.md b/art-blocks-engine-onboarding/art-blocks-engine-101/Filebase-IPFS.md index ae01d010..b39cfd0e 100644 --- a/art-blocks-engine-onboarding/art-blocks-engine-101/Filebase-IPFS.md +++ b/art-blocks-engine-onboarding/art-blocks-engine-101/Filebase-IPFS.md @@ -32,11 +32,11 @@ Then, select your bucket from the Buckets menu and select 'Upload'. You can choo You will be prompted to select a file from your computer. Once uploaded, it'll be displayed in the Filebase web console and it will be given an IPFS CID value. ![cid](/static/Filebase_setup6.png) -When a file is uploaded to IPFS, the file’s contents are used to generate a cryptographic hash value. Then, this hash value is used to generate another value, which is used as the file’s content identifier (CID). CIDs are used to access files stored on IPFS, but instead of locating the file on the network based on it's name, the CID is based on the file's contents. Any changes to the file's contents or metadata will result in a new, unique CID. +When a file is uploaded to IPFS, the file’s contents are used to generate a cryptographic hash value. Then, this hash value is used to generate another value, which is used as the file’s content identifier (CID). CIDs are used to access files stored on IPFS, but instead of locating the file on the network based on its name, the CID is based on the file's contents. Any changes to the file's contents or metadata will result in a new, unique CID. The CID value is what is used within an Art Blocks generative script, under the 'CID' field. -To preview your file using it's IPFS CID and the Filebase public gateway, you can use the following URL format in any web browser: +To preview your file using its IPFS CID and the Filebase public gateway, you can use the following URL format in any web browser: https://ipfs.filebase.io/ipfs/[CID] diff --git a/art-blocks-engine-onboarding/art-blocks-engine-101/faqs.md b/art-blocks-engine-onboarding/art-blocks-engine-101/faqs.md index 68f0735f..565a02cb 100644 --- a/art-blocks-engine-onboarding/art-blocks-engine-101/faqs.md +++ b/art-blocks-engine-onboarding/art-blocks-engine-101/faqs.md @@ -103,7 +103,7 @@ We cannot deploy your contract until you provide the above information. **The na No, partners are responsible for creating and designing their customer-facing experience. -However, we do have a [front-end React template](https://github.com/ArtBlocks/artblocks-engine-react) with web3 functionality you need to launch a minting site. You will still be responsible for designing the user exerpeicne, but this significantly reduces the time needed to complete a front-end. +However, we do have a [front-end React template](https://github.com/ArtBlocks/artblocks-engine-react) with web3 functionality you need to launch a minting site. You will still be responsible for designing the user experience, but this significantly reduces the time needed to complete a front-end. ## How long will each stage of the process take? @@ -176,7 +176,7 @@ On the other hand, each **Minter contract** allows you to set max invocations fo ## How does `autoApproveArtistSplitProposals` work? -When `true`, `aproveArtistSplitProposals` is a feature thatallows artists to automatically change their royalty split payout address and the split percentage without requiring approval from the contract admin. This makes the process faster and more convenient for artists but may increase the risk of unauthorized changes to royalty wallets, which could complicate accounting or OFAC compliance. +When `true`, `aproveArtistSplitProposals` is a feature that allows artists to automatically change their royalty split payout address and the split percentage without requiring approval from the contract admin. This makes the process faster and more convenient for artists but may increase the risk of unauthorized changes to royalty wallets, which could complicate accounting or OFAC compliance. If set to `else` the contract admin will need to approve any changes to the artist's royalty wallet, adding a layer of security and control. diff --git a/art-blocks-engine-onboarding/art-blocks-engine-101/what is Art Blocks Engine.md b/art-blocks-engine-onboarding/art-blocks-engine-101/what is Art Blocks Engine.md index 649dff8b..611dd7c6 100644 --- a/art-blocks-engine-onboarding/art-blocks-engine-101/what is Art Blocks Engine.md +++ b/art-blocks-engine-onboarding/art-blocks-engine-101/what is Art Blocks Engine.md @@ -20,13 +20,13 @@ With Art Blocks Engine Flex artists are able to include off-chain assets, stored ## How does Art Blocks Engine Flex work? -With Art Blocks Engine Flex contracts, a per-project (as opposed to per-contract) field is available on all projects that allows an artist to set a single off-chain dependency or set of multiple off-chain dependencies based on the content ID locations where these dependencies are stored on IPFS or Arweave. +With Art Blocks Engine Flex contracts, a per-project (as opposed to per-contract) field is available on all projects that allow an artist to set a single off-chain dependency or set of multiple off-chain dependencies based on the content ID locations where these dependencies are stored on IPFS or Arweave. -Currently, we do not yet support the turnkey ability to programically upload/pin these dependencies to IPFS/Arweave within the Engine experience directly; however, our team is more than happy to assist partners in the process of uploading/pinning assets on IPFS/Arweave using existing third party solutions for doing so (e.g. Pinata in the case of IPFS). +Currently, we do not yet support the turnkey ability to programmatically upload/pin these dependencies to IPFS/Arweave within the Engine experience directly; however, our team is more than happy to assist partners in the process of uploading/pinning assets on IPFS/Arweave using existing third party solutions for doing so (e.g. Pinata in the case of IPFS). Note that for a single project, it is possible to have a single off-chain dependency (e.g. a single image file) or a set of off-chain dependencies (e.g. a series of images from a set). This means that is possible, for example, to have a project that creates 1of1ofX generative variants of a single base image asset, or one in which for a given token a random image is selected from the base image asset set, and then a generative process is applied to it. -It is also important to note that images are not the only supported external asset dependency type. It is possible to reference any file type that can be pinned/uploaded to IPFS or Arweave and intelligbly incorporated into a generative algorithm to create interesting artistic outputs. For example, a project could use `tensorflow.js` as its single-depedency, have its generative script be a tensorflow based creative coding algorithm, and store the model file for the machine learning model on IPFS or Arweave to support a ML/AI based project. +It is also important to note that images are not the only supported external asset dependency type. It is possible to reference any file type that can be pinned/uploaded to IPFS or Arweave and intelligibly incorporated into a generative algorithm to create interesting artistic outputs. For example, a project could use `tensorflow.js` as its single-dependency, have its generative script be a tensorflow based creative coding algorithm, and store the model file for the machine learning model on IPFS or Arweave to support a ML/AI based project. ## What is the smart contract architecture for Art Blocks Engine? @@ -90,7 +90,7 @@ Nonfungible tokens (NFT) are unique digital assets stored on blockchain technolo ## On-chain vs. off-chain -Art Blocks Engine enables creators to immutably store their generative NFT directly on the Ethereum blockchain (on-chain) or reference an external library or asset (off-chain). For an off-chain implimentation, partners can reference external off-chain assets using decentralized storage solutions like IPFS. +Art Blocks Engine enables creators to immutably store their generative NFT directly on the Ethereum blockchain (on-chain) or reference an external library or asset (off-chain). For an off-chain implementation, partners can reference external off-chain assets using decentralized storage solutions like IPFS. Decentralized and fully on-chain content is the most durable digital asset available. Typically, a creative coder writes a generative script in JavaScript and stores it directly on the blockchain. As long as you have access to a computer, a web browser, and Ethereum’s public ledger, you’ll always be able to reproduce the NFT in its original form and track ownership since creation. An on-chain NFT inherits the provenance, security, and durability of Ethereum itself, making them the highest quality digital asset available. diff --git a/core-contract-v3/manual-admin-operations.md b/core-contract-v3/manual-admin-operations.md index 7fc01dd5..d13edc45 100644 --- a/core-contract-v3/manual-admin-operations.md +++ b/core-contract-v3/manual-admin-operations.md @@ -18,7 +18,7 @@ For all V3 contracts, the contract admin can update the provider secondary royal - `function updateProviderPrimarySalesPercentages` - `function updateProviderSecondarySalesBPS` or `function updateProviderDefaultSecondarySalesBPS` (depending on minor version) -For v3.2+ contracts (deployed after May 2024), the contract admin must also propogate the contract-level changes to every project in the contract by calling the following function on the contract for each project: +For v3.2+ contracts (deployed after May 2024), the contract admin must also propagate the contract-level changes to every project in the contract by calling the following function on the contract for each project: - `syncProviderSecondaryForProjectToDefaults(uint256 projectId)` diff --git a/minter-suite/minter-suite-supplemental.md b/minter-suite/minter-suite-supplemental.md index 3d8b1d5c..278885f3 100644 --- a/minter-suite/minter-suite-supplemental.md +++ b/minter-suite/minter-suite-supplemental.md @@ -44,7 +44,7 @@ Tips: When using a Dutch auction, the auction will need to be reset and reconfigured. -This is a 2-step provess, and requires admin-intervention for security: +This is a 2-step process, and requires admin-intervention for security: 1. ADMIN - Call `resetAuctionDetails` on the minter contract 2. ARTIST - Configure the auction parameters via your typical process (e.g. artist dashboard) diff --git a/minter-suite/minting-philosophy.md b/minter-suite/minting-philosophy.md index a816c742..253dfdfc 100644 --- a/minter-suite/minting-philosophy.md +++ b/minter-suite/minting-philosophy.md @@ -91,7 +91,7 @@ In practice, it is difficult to achieve any of the above definitions of fairness Art Blocks aims to provide a variety of minting options for artists to choose from, each with their own set of tradeoffs. We believe that artists should be able to choose the minting paradigm that best fits their project's goals. -The minters provided by Art Blocks are intended to follow our design principles while also achieving some kind of fairness. However, each minter's amount of fairness and suceptibility to bots will vary based on: +The minters provided by Art Blocks are intended to follow our design principles while also achieving some kind of fairness. However, each minter's amount of fairness and susceptibility to bots will vary based on: - project demand/hype - project price