• Hernando Castano's avatar
    ERC-1155 Example (#800) · afc48714
    Hernando Castano authored
    
    
    * Add basic contract skeleton
    
    * Add dummy ERC-1155 trait implementations
    
    * Implement `balance_of` method
    
    * First attempt at `balance_of_batch` implementation
    
    I'm not sure if the output format is correct, need to read the docs
    more closely
    
    * Implement simple token transfer
    
    * Flatten balances BTreeMap
    
    * Clean up account usage in tests
    
    * Implement approval mechanism
    
    * Fix bug when sending tokens to an account with zero balance
    
    * Check approvals before sending tokens
    
    * Suppress warnings
    
    * Appease Clippy
    
    * Add crude support for token transfers to smart contracts
    
    * Simplify check for smart contract-ness
    
    * Handle receiving tokens as a smart contract
    
    * Implement `safe_transfer_from` method
    
    * Only do approval and recipient checks during in batch transfers
    
    * I was wrong about the compiler's cleverness...
    
    * Add documentation about interface
    
    * Make better use of some imports
    
    * Disallow owners from approving themselves for token tranfers
    
    * Allow creating and minting tokens
    
    * Derive default for storage struct
    
    * Add note on on-chain panic
    
    * Remove `with_balances` constructor
    
    It wasn't ERC-1155 compliant (no transfer events emitted) and it
    also leaked the internal structure of how balances were tracked.
    
    * RustFmt with Nightly
    
    Not sure I like some of the decisions though...
    
    * Tag on_received messages with selectors
    
    * Add missing event
    
    * Index topics in events
    
    * Remove note on BTreeSet usage
    
    Can't figure out how to get tests to compile with it.
    
    * Stop panicking on cross-contract call error
    
    However, this is only because I have no feedback on why this call
    is actually failing. This behaviour should be added back.
    
    * Nightly RustFmt
    
    * Fix RustDoc links
    
    * Remove inline questions
    
    * Remove unused `data` argument from `create/mint`
    
    * Rename magic value contants
    
    * Remove data argument from `mint/create` tests
    
    * Use entry API when decreasing account balance
    
    * Extract approvals pairs into struct
    
    This is better in terms of type safety and ease of use
    
    * Improve some of the panic messages
    
    * Cache calls to `self.env().caller()`
    
    * Allow `TransferSingle` events to contain Optional addresses
    
    This slightly deviates from the spec which says we should use the `0x00`
    address during certain operations, but this is more idiomatic Rust.
    
    * Add logging around calls to `onERC1155Received`
    
    * Improve debug message when receiving cross-contract results
    
    * Move warning lints to specific lines of code
    
    * Format code
    
    * Remove backticks from URLs
    Co-authored-by: Michael Müller's avatarMichael Müller <michi@parity.io>
    
    * Fix comment wording/typo
    
    * Add expected panic messages to tests
    
    * Move imports related to x-contract calls closer to use site
    
    * Change selector bytes to hex for the humans
    
    * Remove incorrect comment about off-chain environment testing
    
    * Add documentation for `TokenId`
    
    This will make sure that it doesn't show up as `u128` in
    the generated docs.
    
    * Nightly RustFmt
    
    * Uppercase selector bytes
    
    * Don't repeat `erc_1155` in `Erc1155TokenReceiver` methods
    
    * Nightly RustFmt
    
    * Appease the spellchecker
    
    * Use Environment typedef
    
    * Allow tests to run in stable and experimental off-chain envs
    
    * Add explanation as to why we don't accept tokens
    
    * Return `Result` when minting tokens
    
    * Allow (most) errors to be handled gracefully by caller
    
    * Nightly RustFmt
    
    * Add shorthand zero-address to allowed spelling list
    
    * Run tests with `--features ink-experimental-engine` in CI
    
    * Perform batch balance checks before trying to transfer tokens
    
    * Move smart contract transfer checks to their own helper function
    
    * Appease Clippy
    
    * Make `ensure` macro definition more explicit
    Co-authored-by: default avatarRobin Freyler <robin.freyler@gmail.com>
    
    * Iterate over values instead of references
    Co-authored-by: default avatarRobin Freyler <robin.freyler@gmail.com>
    
    * Iterate over references again
    
    * Return a value from `on_batch_received`
    
    * Don't collect into intermediate Vec
    
    * Wrap 0x00 in code blocks
    
    This way the spellchecker will ignore it and we
    can avoid adding it to our dictionary.
    Co-authored-by: Michael Müller's avatarMichael Müller <michi@parity.io>
    Co-authored-by: default avatarRobin Freyler <robin.freyler@gmail.com>
    afc48714