Code Monkey home page Code Monkey logo

shoyu's Introduction

Shoyu: Sushi NFT Exchange and Launchpad

We are looking to create an NFT platform that focuses on artists and creators needs to push the space forward. Current NFTs are limited by file format and sizing for artist and their creative abilities. Design wise we want the platform to be beautiful, functional and have that Japanese sensibility and aesthetic. We want artists and creators to be able to create NFTs that they are unable to make on other platforms. For collectors a beautiful place to curate and showcase their digital art.

Deployments

Mainnet

Rinkeby

Kovan

Features

1 Social Token

SocialTokens are built around an “ownership economy” principle with the premise that a community will be more valuable tomorrow than today. Creators can monetize their work as a non-fungible token (NFT) or social token, and supporters can give something back to show their loyalty.

1.1 Minting

Owner of the social token can mint a certain amount of tokens for an account, proportional to the contribution he's committed. The amount of the contribution will be observed off-chain by the owner.

1.2 Burning

Any holder of the social token can burn his/her own balance with a memo(bytes32). This can be used for a variety of scenarios such as a. burn-and-enter, b. burn-and-receive or c. burn-and-draw.

  • burn-and-enter: Users burn their tokens and get the entrance permission to a gallery, exhibition or a concert.
  • burn-and-receive: Users burn their tokens and leave their address. Then the artist delivers the merch or the product to their front door.
  • burn-and-draw: Users burn their tokens and get a lottery ticket. It can be designed such that the more he burns, the higher the chance to win the lottery.

1.3 Revenue Sharing

As an artist or a seller, the owner of the social token can make revenue and set the recipient to the holders of the social token. The revenue will then be distributed to the holders in proportion to the shares.

2 NFT-as-Exchange

Shoyu's ERC-721 and ERC-1155 contracts are equipped with NFT exchange functionality in themselves(NFT721 and NFT1155 respectively). This is the cheapest way to optimize gas and give the owner the full power to change configs needed for trades.

2.1 On-chain & Off-chain OrderBook

To optimize gas cost when submitting sell order, orders are kept off-chain basically. When an account wants to buy the nft, he can pick the order with the maker's signature(ERC-712) and execute it with a proper bid params such as the price.

It also supports on-chain order book, so you could submit ask orders. This feature was designed for contracts not EOAs. e.g.) If you're running a dao for NFTs, then contracts should be able to submit orders.

2.2 Variant Bidding Strategies

Strategies are separate from exchange contracts, so a variety of strategies can be plugged in to meet the seller's demand. Supported strategies are: a. FixedPriceSale, b. EnglishAuction and c. DutchAuction.

  • Fixed Price Sale: The first buyer who pays for the fixed price gets the NFT.

  • English Auction: An English auction is a process in which an asset is sold through a suggested opening bid reserve or a starting price that is set by the seller. Increasingly higher bids are accepted from the gamut of buyers. Ultimately, the price is adjusted in a direction that's unfavorable to the bidders.

  • Dutch Auction: A Dutch auction is a market structure in which the price of something offered is determined after taking in all bids to arrive at the highest price at which the total offering can be sold. In this type of auction, investors place a bid for the amount they are willing to buy in terms of quantity and price.

2.3 Royalties Distribution

NFT royalties give the owner a percentage of the sale price each time their NFT creation is sold on Shoyu. They can choose their royalty percentage(0-25%).

2.4 Charity Fund

Among the royalties they get, they can decide how much will go to the charity fund vault. This vault is managed by a multisig wallet operated by Sushi team.

2.5 NFT Tagging

NFTs can be categorised and tagged to allow better searching capabilities.

3 Fractional NFT Ownership & Governance

Fractional ownership allows users who have been previously priced out of certain NFTs or artists (such as Beeple) to be able to buy a piece of their work.

3.1 Liquidation

If you're holding a NFT721 token, you can call liquidate() function to turn your nft to a NFT721GovernanceToken (ERC-20) that's representing the value of your nft.

3.2 Governance

Token holders can vote for a sell proposal to run the NFT governance. If more than minimumQuorum balance power is for the proposal that were submitted, then it starts selling process; It could be an auction for a fixed price sale.

3.3 Profit Sharing

After the sale gets completed, the profit is shared by the owners in proportional to their balances.

4 Others

4.1 Protocol Fee

2.5% fee is charged for every trade and it goes to xSUSHI holders.

4.2 Exchange for non-Shoyu NFTs

Even though Shoyu's NFTs is equipped with exchange features, there could be a need to sell NFTs that were minted outside of Shoyu. In that case, you could use NFT721Exchange and NFT1155Exchange contracts.

4.3 Factories

To optimize the gas required for contract deployments, Shoyu utilizes factory patter at its maximum extent. Provided factories are: NFT721GovernanceTokenFactory, NFTFactory, PaymentSplitterFactory, and SocialTokenFactory.

License

Distributed under the MIT License. See LICENSE for more information.

Contact

shoyu's People

Contributors

levx-me avatar thegreathb avatar vladwulf avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

shoyu's Issues

Error: multiple matching functions (argument="name", value="initialize", code=INVALID_ARGUMENT, version=abi/5.4.0)

image
`import {ethers, upgrades} from "hardhat";
import { expect } from "chai";

describe("NFT721", async () => {
it("tests upgrades.deployProxy ", async() => {
const NFT721 = await ethers.getContractFactory("NFT721");
const nft721 = await upgrades.deployProxy(NFT721,
['', 'aa', 'bb', '0xBC8F16D2aeE17B096FC5ED558ABc8923425157C4', [0,1], '0xBC8F16D2aeE17B096FC5ED558ABc8923425157C4', 5]
, {initializer: "initialize"});

    expect((await nft721.address)).to.not('')

})})`

Testing infrastructure plans?

Hey all,

We'd love to explore contributing to this project. Are you planning on rolling out testing in the near term? I think longterm exhausive unit testing is necessary for large-scale adoption?

OpenZeppelin moved to hardhat ~10 months ago iirc and are using mocha/chai.

Royalty info for existing NFT721 contracts

The _transferFeesAndFunds method of BaseExchange.sol tries to retrieve the royalty info from the NFT contract. This requires the contract to implement the ERC2981.

try IERC2981(token).royaltyInfo(tokenId, amount) returns (
address royaltyFeeRecipient,
uint256 royaltyFeeAmount
) {
if (royaltyFeeAmount > 0) {
remainder -= royaltyFeeAmount;
_transferRoyaltyFee(currency, royaltyFeeRecipient, royaltyFeeAmount);
}
} catch {}

As I understand, for contracts not created via Shoyu and thus probably not having an exchange implemented, ERC721ExchangeV0.sol should act as a more generic version of the exchange allowing to trade allowed NFTs.

Shouldn't we allow existing NFT projects to set a royalty fee if ERC2981 isn't implemented in their existing contract? I'm concerned the marketplace wouldn't be a good fit for a lot of the existing projects otherwise.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.