Examples and helpers to build NFT contracts on CosmWasm

Related tags

Cryptography cw-nfts
Overview

CosmWasm NFTS

This repo is the official repository to work on all NFT standard and examples in the CosmWasm ecosystem. cw721 and cw721-base were moved from cw-plus to start this repo, but it shall evolve as driven by the community's needs.

Please feel free to modify cw721 as you need to support these projects and add many extensions and additional standards (like cw-2981) to meet the demands of the various NFT projects springing forth.

Maintainers

This repo is not maintained directly by Confio (although we can provide some code reviews and support), but rather by 4 highly active community members working on NFT projects of their own:

Contributing

If you are working on an NFT project as well and wish to give input, please raise issues and/or PRs. Additional maintainers can be added if they show commitment to the project.

You can also join the #nfts channel on CosmWasm Discord for more interactive discussion on these themes.

Comments
  • attempt to update cw-nft to add custom query and custom execute.

    attempt to update cw-nft to add custom query and custom execute.

    Hi,

    Here is an attempt to add support for custom queries and custom executes to cw-nft (https://github.com/CosmWasm/cw-nfts/issues/31).

    I was trying to extend cw-nft but It seems difficult to extend cw721-base without including it in your project.

    This is just an attempt, and I am not a rust daily developper. So if my diff is silly or useless feel free to ignore it.

    opened by SylvestreG 12
  • Add token_uri, on-chain metadata example

    Add token_uri, on-chain metadata example

    Implements the changes described here: https://github.com/CosmWasm/cw-nfts/issues/2

    cw721_base -- removes name, description, and image, only top level field is token_uri and extension. cw721_metadata_onchain -- example of Extension that moves metadata on-chain, supports name, description, image, and more

    opened by iLoveBusinessDevelopment 9
  • Allow inheritors of base contract to set their version correctly

    Allow inheritors of base contract to set their version correctly

    Fixes #44

    This is a starting point to discuss how to fix the issue that contracts wholesale inheriting the base instantiate message have the incorrect contract version info.

    This could be a problem when migrating, for example.

    This PR proposes to add an optional field that takes a struct of values from a child contract. If set to None it will just use the base contract version info.

    opened by the-frey 8
  • CW-2981 extension

    CW-2981 extension

    Appreciate this might need some refining and/or further discussion.

    A minimal example of the EIP-2981 spec implemented in CW-land. i.e. #7

    It's a very light wrapper/extension for CW721 compliant contracts that adds two additional query messages:

    • RoyaltyInfo to be called when selling an NFT, to find out what royalties are owed
    • CheckRoyalties to be called on the contract, to see if it implements CW-2981

    This adds royalty information at token mint time.

    The main thing are the queries that are called when the marketplace sells an NFT. Different contracts might implement them differently, e.g. to do more complex logic than the straight percentage here, but the returned queries should conform to the shape here.

    Aside - could move those (and the extension handlers) to a package, if it makes them more reusable.

    opened by the-frey 7
  • Consider using Uint256Key for Token IDs

    Consider using Uint256Key for Token IDs

    Continuing a discussion from Discord: https://discord.com/channels/737637324434833438/892092030870749214/892537033208254465

    What do we want for Token IDs?

    Currently, they are strings. @shanev brought up the point that "now with the existence of Uint256Key, there might be a better case for using it just like ERC-721". He also added:

    Because can run into iteration issues in the store if they can be arbitrary strings no?

    Personally, I've come across this recently with the all_tokens query when there are different token ids like "1" and "uuid-43123d-eaGg3Xz".

    @ethanfrey brought up some good questions:

    Having them all the same length may make enumeration nicer (alphabetical), but do you really want them encoded as integers ("183836284794036363790202743525168039373")? or rather hex encoded bytes? or enforce this is ascii and right pad with spaces?

    So hence this ticket.

    Uint256Key seems to make sense for me, but curious what others think. CC @ben2x4, @alwin-peng, @the-frey.

    opened by JakeHartnell 7
  • Using new cosmwasm_schema

    Using new cosmwasm_schema

    I try to implement what's in #81. Remaining issues:

    • In cw2981-royalites, QueryMsg<Cw2981QueryMsg> is used. As in cw721-base generates an empty response for Extension, there is no response generated for Cw2981QueryMsg. I haven't found a solution for this.
    • In cw721-non-transferable, most of QueryMsg enums are redefined. I want a more robust solution than copy lines from cw721-base.
    opened by peara 6
  • Contract level metadata

    Contract level metadata

    Adds support for an optional collection_uri for use in ics721, as well as extensible on chain collection level metadata.

    Also added a migrate entrypoint, messages, and tests.

    Closes #68.

    opened by JakeHartnell 6
  • add pagination for cw721 queries to enable easier access to data

    add pagination for cw721 queries to enable easier access to data

    Making use of cw-plus storage functionality skip for all queries which allow paging.

    This is a breaking change in smart contracts as functions that query now require an extra Option<u32> However for frontend it is non-breaking as request is an optional attribute.

    This does not change any of the current implementation, merely exposes an alternative way of pagination as opposed to the start_after field. We can now page by page index.

    opened by wrjanan 6
  • Bump cosmwasm to v1.1, tidy up dependencies, update schema, update CI

    Bump cosmwasm to v1.1, tidy up dependencies, update schema, update CI

    Changes

    • Versioning

      • Bump Rust edition to 2021
      • Bump cosmwasm-std to v1.1
      • Bump cw-plus packages to v0.14
      • Bump all contracts and packages in this repo to v0.14 to be consistent with cw-plus
    • CI

      • Bump Rust version used in CI to v1.60.0 (was 1.58.1)
      • Bump cosmwasm-vm used in CI to v1.1.0 (was 1.0.0-beta8)
    • Dependencies

      • Order all dependencies alphabetically
      • Removed a few unused dependencies
      • Moved a few dependencies that are only used in tests to dev-dependencies
    • Schema

      • Replace the derive statement with the new cw_serde decorator, and regenerate schema accordingly:
    - #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
    - #[serde(rename_all = "snake_case")]
    + #[cw_serde]
    
    • Imports
      • in cw721-base/src/helpers.rs it imports the wrong PhantomData:
    - use serde::__private::PhantomData;
    + use std::markers::PhantomData;
    

    I assume this is because someone used editor auto-completion for imports...

    Notes

    • The most powerful feature provided by cw v1.1, the query response derivation, does not work with cw721-base because it doesn't support query msgs that contain generics. I suggest removing QueryMsg::Extension.
    • For types that contain generics, it is necessary to rename them when generating schemas. See this example. That is, you want query_msg.json instead of query_msg_for__cw2891_query_msg.json. The latter won't be picked up by the ts-codegen so is kinda useless.
    opened by larry0x 5
  • Make CW721 equivalent to ERC721-Metadata

    Make CW721 equivalent to ERC721-Metadata

    The current implementation of CW721 is not directly compatible with ERC721 with metadata. The proposal is to remove some fields and add a token_uri field for a metadata extension.

    Collection-wide fields for CW721:

    • name (name of the NFT collection)
    • symbol (symbol of NFT collection)

    For each TokenId expect it to point to one field token_uri, like ERC721

    So mint would look like this:

    #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
    pub struct MintMsg {
        /// Unique ID of the NFT
        pub token_id: String,
        /// The owner of the newly minter NFT
        pub owner: String,
        /// A distinct Uniform Resource Identifier (URI) for a given asset.
        pub token_uri: String,
    }
    

    We expect the token_uri to point to a JSON file that conforms to the CW721 JSON schema (a direct copy of the ERC721 JSON schema):

    {
        "title": "Asset Metadata",
        "type": "object",
        "properties": {
            "name": {
                "type": "string",
                "description": "Identifies the asset to which this NFT represents"
            },
            "description": {
                "type": "string",
                "description": "Describes the asset to which this NFT represents"
            },
            "image": {
                "type": "string",
                "description": "A URI pointing to a resource with mime type image/* representing the asset to which this NFT represents. Consider making any images at a width between 320 and 1080 pixels and aspect ratio between 1.91:1 and 4:5 inclusive."
            }
        }
    }
    

    This where the fields name, description, and image go. Individual NFT creators can then add new JSON fields to extend their NFT:

    For example adding an attributes field to support traits:

    {
        "name": "name-of-my-asset",
        "description": "description-of-my-asset",
        "image": "image-url",
        "attributes": [
            {
              "trait_type": "Name of some trait", 
              "value": "Value of some trait"
            }, 
        ]
    }
    

    In general, extensions to the CW721 JSON schema should follow the opensea metadata standard.

    With cross chain initiatives and NFT bridges coming, we want to be able to bridge Ethereum NFTs to chains running CosmWasm, and the best way to enable this is to ensure there is a simple mapping between ERC721 and CW721. I would be happy to make this change (as well as a similar change to CW1155), if the devs think this is reasonable.

    opened by iLoveBusinessDevelopment 5
  • Error instantiating cw721-fixed-price

    Error instantiating cw721-fixed-price

    Let me preface this issue by saying I'm relatively new to Rust and cosmwasm so this could be "user error."

    I was able to mint an NFT on my local development with cw721-metadata-onchain but I'm having issues with cw721-fixed-price. Yes, all the tests pass, and I'm able to store it, but when I try to instantiate it I get:

    Error: rpc error: code = InvalidArgument desc = failed to execute message; message index: 0: dispatch: submessages: Error parsing into type cw721_fixed_price::msg::InstantiateMsg: missing field `owner`: instantiate wasm contract failed: invalid request
    

    I have tried including owner in the json object (and I get errors correctly when not adding unit_price, so I know the json is parsing correctly) but that didn't work. I have a feeling it's something with the submessages, maybe incorrect type handling between Cw721InstantiateMsg and InstantiateMsg. But really I have no idea. Any help would be appreciated. Thanks in advance.

    Also, in case versioning matters, I set up my local environment for Juno via the instructions on their site here: https://docs.junonetwork.io/smart-contracts-and-junod-development/junod-local-dev-setup#run-juno

    bug 
    opened by interphased 4
  • cw721: extension (compared to ERC721 metadata extension and enumeration extension)

    cw721: extension (compared to ERC721 metadata extension and enumeration extension)

    Quick question what extension means and is suppose to be: the purpose of cw721 extension is solely for metadata?

    Check here: https://github.com/CosmWasm/cw-nfts/blob/main/packages/cw721/src/query.rs#L120

    But reading the ERC721 spec there are 2 types of extensions: metadata and enumeration metadata: https://eips.ethereum.org/EIPS/eip-721

    Check here: https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md

    The metadata extension is OPTIONAL for ERC-721 smart contracts (see "caveats", below). This allows your smart contract to be interrogated for its name and for details about the assets which your NFTs represent.

    /// @title ERC-721 Non-Fungible Token Standard, optional metadata extension
    /// @dev See https://eips.ethereum.org/EIPS/eip-721
    ///  Note: the ERC-165 identifier for this interface is 0x5b5e139f.
    interface ERC721Metadata /* is ERC721 */ {
        /// @notice A descriptive name for a collection of NFTs in this contract
        function name() external view returns (string _name);
    
        /// @notice An abbreviated name for NFTs in this contract
        function symbol() external view returns (string _symbol);
    
        /// @notice A distinct Uniform Resource Identifier (URI) for a given asset.
        /// @dev Throws if `_tokenId` is not a valid NFT. URIs are defined in RFC
        ///  3986. The URI may point to a JSON file that conforms to the "ERC721
        ///  Metadata JSON Schema".
        function tokenURI(uint256 _tokenId) external view returns (string);
    }
    

    The enumeration extension is OPTIONAL for ERC-721 smart contracts (see "caveats", below). This allows your contract to publish its full list of NFTs and make them discoverable.

    /// @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
    /// @dev See https://eips.ethereum.org/EIPS/eip-721
    ///  Note: the ERC-165 identifier for this interface is 0x780e9d63.
    interface ERC721Enumerable /* is ERC721 */ {
        /// @notice Count NFTs tracked by this contract
        /// @return A count of valid NFTs tracked by this contract, where each one of
        ///  them has an assigned and queryable owner not equal to the zero address
        function totalSupply() external view returns (uint256);
    
        /// @notice Enumerate valid NFTs
        /// @dev Throws if `_index` >= `totalSupply()`.
        /// @param _index A counter less than `totalSupply()`
        /// @return The token identifier for the `_index`th NFT,
        ///  (sort order not specified)
        function tokenByIndex(uint256 _index) external view returns (uint256);
    
        /// @notice Enumerate NFTs assigned to an owner
        /// @dev Throws if `_index` >= `balanceOf(_owner)` or if
        ///  `_owner` is the zero address, representing invalid NFTs.
        /// @param _owner An address where we are interested in NFTs owned by them
        /// @param _index A counter less than `balanceOf(_owner)`
        /// @return The token identifier for the `_index`th NFT assigned to `_owner`,
        ///   (sort order not specified)
        function tokenOfOwnerByIndex(address _owner, uint256 _index) external view returns (uint256);
    }
    
    opened by taitruong 0
  • Delete `MintMsg`

    Delete `MintMsg`

    Current:

    enum ExecuteMsg<T> {
        Mint(MintMsg<T>),
    }
    
    struct MintMsg<T> {
        pub token_id: String,
        pub owner: String,
        pub token_uri: Option<String>,
        pub extension: T,
    }
    

    New:

    enum ExecuteMsg {
        Mint {
            token_id: String,
            owner: String,
            token_uri: Option<String>,
            extension: T,
        },
    }
    

    This is backward compatible because ExecuteMsg serializes to the same JSON.

    opened by larry0x 5
  • Cw4973

    Cw4973

    Cw4973 - Account-bound Tokens (ABT)

    Cw4973 is implemented based on the description of EIP-4973. Some requirements in the description will be changed for suitable with CosmWasm characteristics.

    In the contract, I also implement the signature based on ADR 036 and signature verification based on @cosmjs/amino.

    Specification

    Cw4973 is extended from Cw721-base with some modifications in execution section:

    • All the metadata structures are unchanged.
    • All the query functions and query messages are unchanged.
    • All the execute functions and execute messages are removed.
    • We add 3 following execute functions and execute messages to the contract:
      • Give
      • Take
      • Unequip
    opened by hoanm 0
  • Define a macro for extending CW721 execute/query messages

    Define a macro for extending CW721 execute/query messages

    The problem

    cw721::ExecuteMsg defines a minimum set of execute methods that all CW-721 variants are expected to implement. However, projects often want to extend it by adding their own methods. For example, cw721-base adds "mint" and "burn" methods. The process for adding these methods is rather cumbersome, for example:

    // cw721-base/src/msg.rs
    pub enum Cw721ExecuteMsg {
        // below are all copy-pasted from cw721::ExecuteMsg
        TransferNft { .. },
        SendNft { .. },
        Approve { .. },
        Revoke { .. },
        ApproveAll { .. },
    
        // only the following are new methods added by cw721-base
        RevokeAll { .. },
        Burn { .. }
    }
    

    Imo, there are two drawbacks with this approach:

    • A lot of copy-pasting is needed (very verbose)
    • It is not enforced that the execute message implements all variants required by CW721 specs (What if, say, TransferNft is omitted by mistake? Preferably we want an error to be thrown at compile time to alert the developer that they forgot something.)

    Proposed solution

    @0xekez showed me it is possible to "autofill" an enum with some pre-defined variants by a macro, which is an approach already used by DAO DAO: https://github.com/DA0-DA0/dao-contracts/blob/main/packages/cwd-macros/src/lib.rs

    I propose we create a #[cw721_execute] macro that if used the following way:

    use cw721::cw721_execute;
    
    #[cw721_execute]
    enum ExecuteMsg {
        Foo,
        Bar,
    }
    

    Will transform the enum to:

    #[cw_serde]
    enum ExecuteMsg {
        TransferNft { .. },
        SendNft { .. },
        Approve { .. },
        Revoke { .. },
        ApproveAll { .. },
        Foo,
        Bar,
    }
    

    This prevents the developer to have to copy all the CW721 enum variants over, and enforces all variants are included. Additionally, #[cw_serde] is automatically applied.

    In the cw721 crate, the execute message can simply be defined as:

    #[cw721_execute]
    pub enum ExecuteMsg {}
    

    Further suggestion

    It'd be even better if the following traits can be automatically implemented as well:

    impl From<cw721::ExecuteMsg> for ExecuteMsg {
        fn from(msg: cw721::ExecuteMsg) -> Self {
            match msg {
                cw721::ExecuteMsg::TransferNft { .. } => Self::TransferNft { .. },
                // ...
            }
        }
    }
    
    impl TryFrom<ExecuteMsg> for cw721::ExecuteMsg {
        type Error = String; // or other error type we prefer
        fn try_from(msg: ExecuteMsg) -> Result<Self, Self::Error> {
            match msg {
                ExecuteMsg::TransferNft { .. } => Ok(cw721::ExecuteMsg::TransferNft { .. }),
                // ...
                ExecuteMsg::Foo => Err("`cw721::ExecuteMsg` does not have variant `Foo`".to_string()),
                ExecuteMsg::Bar => Err("`cw721::ExecuteMsg` does not have variant `Bar`".to_string()),
            }
        }
    }
    

    This makes it much easier to implement execute entry point:

    #[entry_point]
    pub fn execute(
        deps: DepsMut,
        env: Env,
        info: MessageInfo,
        msg: ExecuteMsg,
    ) -> Result<Response, ContractError> {
        match msg {
            // For custom execute methods, dispatch to the appropriate
            // handler functions
            ExecuteMsg::Foo => execute_foo(deps, env, info),
            ExecuteMsg::Bar => execute_bar(deps, env, info),
    
            // For generic cw721 execute methods,
            // instead of writing a bunch of matching statements,
            // simply cast `ExecuteMsg` into the parent message type
            // and dispatch to the parent contract.
            msg => {
                let parent = Cw721Contract::<Empty, Empty>::default();
                parent.execute(deps, env, info, msg.try_into()?)
            },
        }
    }
    

    Notes

    • If adopted, this change will deprecate cw721::ExecuteMsg::Extension method as it is no longer needed.
    opened by larry0x 3
  • There is no easy way to query for existence of an operator

    There is no easy way to query for existence of an operator

    For operators added using ApproveAll, the only way to see them is using AllOperators query. However, that query is paginated which makes it hard to use from another contract. I suggest that we add a query type to directly check the existence of a <owner, operator> pair so operators can check immediately if their approval statuses.

    opened by peara 0
Releases(v0.16.0)
  • v0.16.0(Oct 25, 2022)

    Attached there are some build artifacts generated at this tag. Those are for development purposes only! Please use crates.io to find the packages of this release.

    What's Changed

    • feat: add cw721-non-transferable contract by @eliseoci in https://github.com/CosmWasm/cw-nfts/pull/85
    • Fix a clippy warning by @larry0x in https://github.com/CosmWasm/cw-nfts/pull/92
    • Replace the cw721::CustomMsg trait with cosmwasm_std::CustomMsg by @larry0x in https://github.com/CosmWasm/cw-nfts/pull/93
    • Use cargo workspace feature by @larry0x in https://github.com/CosmWasm/cw-nfts/pull/89
    • Update to v0.16 by @shanev in https://github.com/CosmWasm/cw-nfts/pull/95

    New Contributors

    • @eliseoci made their first contribution in https://github.com/CosmWasm/cw-nfts/pull/85

    Full Changelog: https://github.com/CosmWasm/cw-nfts/compare/v0.15.0...v0.16.0

    Source code(tar.gz)
    Source code(zip)
    checksums.txt(447 bytes)
    checksums_intermediate.txt(637 bytes)
    cw2981_royalties.wasm(296.10 KB)
    cw721_base.wasm(248.04 KB)
    cw721_fixed_price.wasm(167.62 KB)
    cw721_metadata_onchain.wasm(255.42 KB)
    cw721_non_transferable.wasm(281.84 KB)
  • v0.15.0(Sep 15, 2022)

  • v0.13.4(Jul 23, 2022)

    What's Changed

    • Fix TokenIndexes MultiIndex by @humanalgorithm in https://github.com/CosmWasm/cw-nfts/pull/64
    • Update workspace-optimizer to latest by @Reecepbcups in https://github.com/CosmWasm/cw-nfts/pull/66
    • Square cw721 spec with cw721-base by @lukepark327 in https://github.com/CosmWasm/cw-nfts/pull/65
    • [cw721-fixed-price] Fix receiving cw20 msg by @axvn in https://github.com/CosmWasm/cw-nfts/pull/49
    • cw721-fixed-price: Fix mint message sent to wrong contract address by @axvn in https://github.com/CosmWasm/cw-nfts/pull/46
    • Bump Max Query Limit by @JakeHartnell in https://github.com/CosmWasm/cw-nfts/pull/67
    • v0.13.4, bump versions by @JakeHartnell in https://github.com/CosmWasm/cw-nfts/pull/70
    • Explicitly set contract version and name in examples by @JakeHartnell in https://github.com/CosmWasm/cw-nfts/pull/72
    • Add Burn message to cw721 package by @JakeHartnell in https://github.com/CosmWasm/cw-nfts/pull/73

    New Contributors

    • @humanalgorithm made their first contribution in https://github.com/CosmWasm/cw-nfts/pull/64
    • @Reecepbcups made their first contribution in https://github.com/CosmWasm/cw-nfts/pull/66
    • @lukepark327 made their first contribution in https://github.com/CosmWasm/cw-nfts/pull/65

    Full Changelog: https://github.com/CosmWasm/cw-nfts/compare/v0.13.2...v0.13.4

    Source code(tar.gz)
    Source code(zip)
  • v0.13.2(Jul 22, 2022)

    What's Changed

    • Update version numbers and upgrade to CosmWasm 1.0.0-beta5 by @shanev in https://github.com/CosmWasm/cw-nfts/pull/55
    • Upgrade to lastest versions of cw-plus and CosmWasm by @shanev in https://github.com/CosmWasm/cw-nfts/pull/59
    • add missing owner attribute to mint event by @jhernandezb in https://github.com/CosmWasm/cw-nfts/pull/60
    • Update to CosmWasm 1.0.0-beta8 by @shanev in https://github.com/CosmWasm/cw-nfts/pull/61

    New Contributors

    • @shanev made their first contribution in https://github.com/CosmWasm/cw-nfts/pull/55
    • @jhernandezb made their first contribution in https://github.com/CosmWasm/cw-nfts/pull/60

    Full Changelog: https://github.com/CosmWasm/cw-nfts/compare/v0.11.1...v0.13.2

    Source code(tar.gz)
    Source code(zip)
  • v0.11.1(Feb 24, 2022)

    What's Changed

    • feat: add cw721-fixed-price contract by @verminator23 in https://github.com/CosmWasm/cw-nfts/pull/36
    • CW-2981 extension by @the-frey in https://github.com/CosmWasm/cw-nfts/pull/24
    • Upgrade rustc to fix the wasm-build by @axvn in https://github.com/CosmWasm/cw-nfts/pull/48
    • Approval query returns positive for Owner by @orkunkl in https://github.com/CosmWasm/cw-nfts/pull/47
    • Small readme fixes by @mikedotexe in https://github.com/CosmWasm/cw-nfts/pull/51
    • Set version: 0.11.1 by @JakeHartnell in https://github.com/CosmWasm/cw-nfts/pull/54

    New Contributors

    • @verminator23 made their first contribution in https://github.com/CosmWasm/cw-nfts/pull/36
    • @the-frey made their first contribution in https://github.com/CosmWasm/cw-nfts/pull/24
    • @axvn made their first contribution in https://github.com/CosmWasm/cw-nfts/pull/48

    Full Changelog: https://github.com/CosmWasm/cw-nfts/compare/v0.11.0...v0.11.1

    Source code(tar.gz)
    Source code(zip)
  • v0.11.0(Jan 2, 2022)

  • v0.10.1(Dec 13, 2021)

    What's Changed

    • Add some useful scripts by @ethanfrey in https://github.com/CosmWasm/cw-nfts/pull/29
    • Implement approval query; fix helper queries by @orkunkl in https://github.com/CosmWasm/cw-nfts/pull/32
    • Add user execute permissions to build.sh by @mikedotexe in https://github.com/CosmWasm/cw-nfts/pull/30
    • Rename all_approvals to operators; Fix approval queries by @orkunkl in https://github.com/CosmWasm/cw-nfts/pull/34
    • Expose cw721-base helper by @orkunkl in https://github.com/CosmWasm/cw-nfts/pull/35

    New Contributors

    • @orkunkl made their first contribution in https://github.com/CosmWasm/cw-nfts/pull/32
    • @mikedotexe made their first contribution in https://github.com/CosmWasm/cw-nfts/pull/30

    Full Changelog: https://github.com/CosmWasm/cw-nfts/compare/v0.10.0...v0.10.1

    Source code(tar.gz)
    Source code(zip)
    checksums.txt(176 bytes)
    checksums_intermediate.txt(252 bytes)
    cw721_base.wasm(245.86 KB)
    cw721_metadata_onchain.wasm(258.64 KB)
  • v0.10.0(Nov 9, 2021)

  • v0.9.2(Oct 14, 2021)

Owner
CosmWasm
Secure Multi-Chain Smart Contracts on the Cosmos SDK
CosmWasm
Cosmwasm in Cosmwasm through ComposableFi/cosmwasm-vm

Cosmwasmception Running Fastest way to run this contract would be through our vm. But note that our vm runs an already built version this contract, so

Abdullah Eryuzlu 3 Oct 5, 2022
CosmWasm/Sylvia counting contract w/ IBC enabled (Cosmos, Rust, CosmWasm, Sylvia)

CosmWasm/Sylvia counting contract w/ IBC enabled (Cosmos, Rust, CosmWasm, Sylvia) This repository contains counting contract created during the study

Alex Cryp 3 Nov 13, 2023
My code for the terra.academy course on CosmWasm smart contracts

CosmWasm Starter Pack This is a template to build smart contracts in Rust to run inside a Cosmos SDK module on all chains that enable it. To understan

Alex Incerti 0 Nov 7, 2021
A gRPC-based scripting library for interacting with CosmWasm smart-contracts.

Cosmos Rust Script Smart contract scripting library to ease CosmWasm smart contract development and deployment. cosm-script is inspired by terra-rust-

null 11 Nov 3, 2022
A simple example demonstrating cross-contract calls in CosmWasm smart contracts

Cross-contract calls This tutorial demonstrates cross-contract calls with CosmWasm v1. Overview An end user calls the reservation contract to register

csli Tools 3 Sep 12, 2022
A blazingly fast compiling & optimization tool for CosmWasm smart contracts.

cw-optimizoor A blazingly fast alternative to CosmWasm/rust-optimizer for compiling & optimizing CW smart contracts. It's primarily meant to speed up

Sebastian Mandrean 37 Apr 15, 2023
An example CosmWasm contract for connecting contracts over IBC.

CosmWasm IBC Example This is a simple IBC enabled CosmWasm smart contract. It expects to be deployed on two chains and, when prompted, will send messa

ekez 64 Jun 21, 2023
NFT & Marketplace Contracts with royalties and fungible token support. Sample React app included.

NFT Market Reference Implementation A PoC backbone for NFT Marketplaces on NEAR Protocol. Reference Changelog Changelog Progress: basic purchase of NF

NEAR App Examples 156 Apr 28, 2022
Minimal Substrate node configured for smart contracts via pallet-contracts.

substrate-contracts-node This repository contains Substrate's node-template configured to include Substrate's pallet-contracts ‒ a smart contract modu

Parity Technologies 73 Dec 30, 2022
evm2near compiles Solidity contracts into NEAR WebAssembly contracts.

EVM → NEAR evm2near is a project for compiling EVM bytecode into wasm bytecode, with the particular goal of having that wasm artifact be executable on

Aurora 125 Dec 3, 2022
Ticketed Discreet Log Contracts (DLCs) to enable instant buy-in for wager-like contracts on Bitcoin.

dlctix Ticketed Discreet Log Contracts (DLCs) to enable instant buy-in for wager-like contracts on Bitcoin. This project is part of the Backdrop Build

null 7 Feb 29, 2024
Substreams development kit for Ethereum chains, contains Firehose Block model and helpers as well as utilities for Ethereum ABI encoding/decoding.

Substreams Ethereum Substreams development kit for Ethereum chains, contains Rust Firehose Block model and helpers as well as utilities for Ethereum A

StreamingFast 15 Oct 25, 2022
Helpers crate to simplify ink! chain extension development

OpenBrush Chain Extension library The library provides tools and primitives to simplify the development of chain extensions for ink! and for the subst

Supercolony 7 Dec 1, 2022
This is a template to build secret contracts in Rust to run in Secret Network

Secret Contracts Starter Pack This is a template to build secret contracts in Rust to run in Secret Network. To understand the framework better, pleas

Ethan Gallucci 1 Jan 8, 2022
A template to build smart contracts in Rust to run inside a Cosmos SDK module on all chains that enable it.

CosmWasm Starter Pack This is a template to build smart contracts in Rust to run inside a Cosmos SDK module on all chains that enable it. To understan

null 1 Mar 7, 2022
Rust library for build smart contracts on Internet Computer, by the Spinner.Cash team.

Spinner Rust library for building smart contracts on the Internet Computer. More specifically it is used by Spinner.Cash, a decentralized layer-2 prot

Spinner 6 May 31, 2022
A CosmWasm Tutorial by Terra Academy.

CosmWasm Starter Pack This is a template to build smart contracts in Rust to run inside a Cosmos SDK module on all chains that enable it. To understan

Tantatorn Suksangwarn 1 Dec 24, 2021
Beaker helps simplify CosmWasm development workflow.

Beaker Beaker makes it easy to scaffold a new cosmwasm app, with all of the dependencies for osmosis hooked up, interactive console, and a sample fron

null 62 Dec 29, 2022
CosmWasm multi-contract testing framework

Multi Test: Test helpers for multi-contract interactions Warning: Alpha Software Designed for internal use only. This is used for testing cw-plus cont

CosmWasm 7 Dec 6, 2022