MSPT: Microsponsors Time Slot NFTs
ERC-721 compatible Non-Fungible Tokens (NFTs)
Adapted from Open Zeppelin's ERC721.sol templates at git tag v.2.4.0-beta.2
(git sha: d1158ea)
Each MSPT can be queried by tokenId:
tokenTimeSlot(23);
Returns:
{
minter, // Ethereum address of the token's Minter/Creator
owner, // Ethereum address of the token's current owner
contentId, // the creator's web domain, url, social media account or email
startTime, // UTC timestamp; when the time slot begins
endTime, // UTC timestamp; when the time slot ends
isSecondaryTradingEnabled, // can be true or false, up to the Minter/Creator
federationId, // which registry to check for transfer restrictions
}
Minting & Transfer Restrictions
Note that there are transfer restrictions on these tokens, to satisfy the following business requirements:
- All Minters (Creators) must be validated in our Proof-of-Content Registry to help eliminate fraud/ impersonation/ spamming.
- Microsponsors NFTs give Minters the option to disable token resale to third-parties, to ensure that their time slots aren't sold to anyone they do not wish to transact with.
Path to Federation
We plan to Federate so that other organizations can implement their own rules and logic around Registration, token minting, selling and re-selling (think: DAOs, game studios, media orgs, agencies, consultants, freelancers, etc).
More information about how this will work in our Proof-of-Content Registry.
Smart Contract Addresses/ Deployments
See DEPLOYS.md
See All Contract Methods
Develop
Install
- Install dependencies:
$ npm install
Lint
Install solhint globally and run the linter:
$ npm install -g solhint
$ npm run lint
Local Compile & Deploy
- Start Ganache in another terminal:
$ ganache-cli -p 8545
- Deploy the Registry contract first, copy its contract address from output
- Paste Registry's contract address in
migrations/2_deploy_contracts.js
- Compile:
$ npm run compile
. Rebuilds/build
dir. - Deploy to local ganache instance:
$ truffle migrate --network development
- Or... Compile & Deploy in one step:
$ npm run deploy
Solidity Compiler Version
- Compiler: 0.5.11
Note: .sol files are marked pragma solidity ^0.5.11
and we're using same in truffle-config.js compilers.solc.version
.
Flatten for Remix Deploy
$ npm run flatten
Remix & Versioning
In Remix, there is a warning about the use of extcodehash
unless you compile with the following settings:
- Compiler 0.5.11
- Language Solidity
- EVM Version:
petersburg
- Check "Enable optimization"
Git tag + DEPLOYS.md
Each public network deployment is git tagged (starting with v0.1
) and recorded in DEPLOYS.md
Note on ABIEncoderV2
This contract is using pragma experimental ABIEncoderV2
. Because both 0x and dydx have been using it for many months, and critical bugs were fixed as far back as Solidity 0.5.4, we think its probably ok to use in production. Remarks on this from the dydx team via Open Zeppelin blog.