Skip to content


Switch branches/tags

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

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:



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:

  1. All Minters (Creators) must be validated in our Proof-of-Content Registry to help eliminate fraud/ impersonation/ spamming.
  2. 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 All Contract Methods

See test/



  • Install dependencies: $ npm install


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 +

Each public network deployment is git tagged (starting with v0.1) and recorded in

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.


Ethereum smart contract code for MSPT (time slot) tokens.






No packages published