Tarti is an NFT application and a generative AI system that allows you to give birth to unique intelligent entities that live on the blockchain and make art. Each entity is an NFT and each piece of art that it creates is also an NFT (On the TARTIST and TARTI contracts, respectively.)
For now the art they make is always original professional music compositions. But the Tarti bots' diverse skillset will be exposed more over time.
Tarti is made up of:
- Two Ethereum smart contracts: Tartist.sol and Tarti.sol.
- An event listener, service bus queue, and service worker
- A Dapp call Tartiweb
- An off-chain generative AI system called TRAIT AI
- An HTTP interface to the TRAIT AI Engine called TraitHttpIO
What does it do?
- TRAIT AI Bots can do anything. They're kinda like people. Right now they're good at making music, but they can do other stuff too.
- Tarti provides an interface to TRAIT AI via Ethereum ERC721 Smart Contracts.
- Tarti provides proof of ownership, chain pf custody, royalty payouts, and right ownership selling and trading via the smart contracts.
For demos and more check out my Twitter.
Simply put, a Tartist is a bot. Presently, Tartists are all music producers. A Tartist is also an NFT. It is unique as an NFT in that it can create other NFTs. The NFTs that Tartists create are called Tartis.
A Tarti is an NFT. As of now, Tartis are all music and related files.
When a Tartist or Tarti is minted, an off chain service will create the related multimedia and store it on IPFS at tarti.eth, which will be linked by the NFTs metadata.
A Dapp to interact with these contracts can be found at Github
The copyrights for the art generated by a Tartist are automatically owned by whomever holds the Tartist token for that Tartist at the time the art is generated. To designate ownership of a particular Tartist, a Tartist token can be held by an account on the Ethereum blockchain. The Tartist token is a fully compliant ERC721 Non Funglible Token (NFT).
When a Tartist generates art, they mint a Tarti token on the blockchain. This Tarti token lives in the Tarti smart contract and is automatically transferred to the owner of the Tartist token for the Tartist who generated the art. Therefor, the owner of a Tartist token will automatically inherit ownership of any Tarti tokens generated by the Tartist. When a Tartist token is sold/transferred, copyrights to any future pieces of art will belong to the new holder of the Tartist token.
Tartsists and Tartis can be transferred and/or sold on public marketplaces such as OpenSea.io like any other NFT. Tartis can be transferred independent of Tartists.
Royalties New 2023/08/01
A Tartist owner can now allow other people to mint Tartis using their Tartist. The mineter will be the owner of the Tarti and must pay a royalty to the owner of the Tartist. The Tartist owner sets the royalty rate. If the royalty rate is set to 0 (default), then only the Tartist owner can mint Tartis. If the royalty rate is greater than zero, then the Tartist is available for hire to create new Tartis for anyone who pays.
Bug/feature: If the Royalty rate is set, then the owner of the Tartist must also pay the royalty, which gets paid back to themselves. I might change/fix this before mainnet.
- Solidity
- OpenZepplin
- Truffle
I considered L2 and cross chain solutions. I just am not sure of the state of the market and where things are going. I might be a bit behind. It seemed like all the big projects were on Ethereum despite the cost, so I decided to go that route.
I just read some PRs in the OpenZepplin repo. They are getting rid of PullPayments, which I use. Their justification is a "change in the crosschain landscape". So, I might decide to go crosschain if I ever do a V2. I will at least learn more and see what the trends are and why.
The Tartist contract expsoses these functions (in addition to standard ERC721 functions)
giveBirth( address recipient, uint256[] memory traits, string[] memory dynamicTraitValues, uint8[] memory traitDominance )
newArt(uint8 artistId)
setRoyaltyRate(uint8 artistId, uint256 ratePerTarti)
getTraits(uint256 tokenId)
getTraitValues(uint256 tokenId)
The Tarti contract expsoses these functions (in addition to standard ERC721 functions)
artByArtist(uint8 artistId, uint256 artOrdinal)
Porting over from Jira soon...
Reach out to the maintainer at one of the following places:
- GitHub issues
- Contact options listed on this GitHub profile
- Mint a Bot! (Coming to Testnet soon!)
- Add a GitHub Star to the project.
These contracts will be deployed and immutable soon, but any help appreciated in the meantime.
This repository is by Evan de la Cruz.
Tarti avoids re entrance attacks
This project is licensed under the MIT license.
See LICENSE for more information.
- OpenSea docs