1. 17 Jun, 2021 1 commit
  2. 12 Jan, 2021 1 commit
    • Hero Bird's avatar
      Implement ink! chain extensions (#592) · 59a7f5ed
      Hero Bird authored
      * add new tests for #[ink(namespace = ..)] and #[ink(selector = ..)] attrs
      * [lang] implement new errors for ink! attributes: namespace, selector
      * add #[ink(extension = N: u32)] attribute
      * apply rustfmt
      * [lang] add initial implementation of chain extension proc. macro
      * [lang] rename AttributeArg -> AttributeFrag
      * rename AttributeFrag::kind field to arg
      * rename AttributeArgKind -> AttributeArg
      Also introduce a new AttributeArgKind type and AttributeArg::kind method.
      * [lang] apply rustfmt
      * add Display impl for AttributeArgKind
      * [lang] use AttributeArgKind in sanitize_attributes and ensure_first methods
      * [lang/ir] improve error reporting for duplicate ink! attributes
      * [lang/ir] refactoring and improvements to chain extension IR impl
      * [lang/ir] add tests for IR implementation of chain extensions
      * [lang/ir] remove some code dupe
      * [lang/ir] add getters to ChainExtension
      * [lang/ir] add re-exports for ChainExtension definitions
      * [lang/codegen] add initial impl for ChainExtensions
      * [env] add ChainExtension assoc type to the Environment trait
      * [lang] initial impl to make it possible to use chain extension syntax
      * [env] improvements to chain extensions API
      Also removes the unstable crate feature guarding the feature.
      * [lang/macro] add UI test for chain extension
      * [lang/macro] register new UI test
      * [lang/codegen] fix some codegen bugs with new chain extension feature
      * [lang, env] apply rustfmt
      * [lang/ir] apply clippy suggestions and fix outdated error messages
      * [lang/ir] fix some tests and incorrect error messages
      * [examples] apply clippy suggestion
      * add ErrorCode to ink! chain extension trait
      * add FromStatusCode trait to ink_lang
      * add #[ink(expect_output)] and #[ink(expect_ok)] attributes
      Also add their handling for the #[ink::chain_extension] proc. macro.
      * add ink_lang::IsResultType trait
      * add ChainExtensionMethodInputs iterator
      * hide docs for IsResultType trait
      * add some docs to chain extension codegen
      * implement expect_ok and expect_output where bounds in codegen
      * apply code review suggestions by (cmichi)
      * add ReturnCode::into_u32 getter
      * change return type of ext::call_chain_extension: RetCode -> u32
      Chain extensions do not follow the general scheme of error return code because they have their own set of errors that is custom defined by the author of the chain extension.
      * [lang] add ChainExtension trait
      Not yet sure we need it.
      * change EnvBackend::call_chain_extension signature
      The new signature is much more low-level and supports all the different ways to call a chain extension method.
      This commit already implements the chain extension call on the on-chain environment.
      More work needs to be done to properly support this for the off-chain environment.
      * remove old high-level API for calling chain extension methods
      * [env] add new high-level module to handle chain extension calls
      * rename ChainExtensionMethodInstance -> ChainExtensionMethod
      * [env] add doc examples to chain extension method API
      * apply rustfmt
      * [env] clippy: allow complex type in ChainExtensionMethod type state
      * silence some warnings
      * re-export IsResultType from ink_lang crate
      * [lang] remove FromStatusCode trait
      This trait already exists in the ink_env crate.
      * [lang] update codegen for chain extensions
      Not yet done but close.
      * [lang] update simple chain extension test
      Compiles now again.
      * apply rustfmt
      * update some license headers
      * [env] fix where bound
      * extend chain extension test case to cover all cases
      * add messages for read_small, access and unlock_access
      * fix some bugs with chain extension method signatures in test
      * fix some bugs and docs in chain extension test
      * fix test
      * update quickcheck to 1.0
      * [env] implement chain extension calling for off-chain env
      The new interface is much more lower-level and it is still impossible to use chain state from within the chain extension call. The latter must be fixed as soon as the off-chain environment receives its rework.
      * apply rustfmt
      * add docs to #[ink::chain_extension] proc. macro
      * rename env_types -> env everywhere
      * make doc examples for #[ink::chain_extension] compile
      * add yet another technical limitation
      * make link to simple.rs test case more stable (point to revision)
      * fix docs (code suggestion)
      Co-authored-by: Michael Müller's avatarMichael Müller <michi@parity.io>
      * fix docs (code suggestion)
      Co-authored-by: Michael Müller's avatarMichael Müller <michi@parity.io>
      * fix docs (code suggestion)
      Co-authored-by: Michael Müller's avatarMichael Müller <michi@parity.io>
      * fix docs (code suggestion)
      Co-authored-by: Michael Müller's avatarMichael Müller <michi@parity.io>
      * add dev. note to Backend::call_chain_extension
      * fix docs example (code suggestion)
      Co-authored-by: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>
      * [env] chain extension: make doc examples/tests compile
      * fix some doc comments according to review suggestions
      * review suggestion: telling -> meaning
      * fix docs (review suggestion)
      Co-authored-by: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>
      * fix docs (review suggestion)
      Co-authored-by: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>
      * improve docs (review suggestion)
      Co-authored-by: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>
      * rename chain extension test file
      * analyse_error_code add doc comments for possible errors
      * rename expect_ok -> returns_result and expect_output -> handle_status
      Some examples and docs might be invalidated or outdated.
      * [lang/ir] improve error reporting for ink! namespace attribute with missing parameter
      * [lang/*] implement new handle_status and returns_result attributes
      * [env] apply rustfmt
      Co-authored-by: Michael Müller's avatarMichael Müller <michi@parity.io>
      Co-authored-by: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>
  3. 04 Jan, 2021 1 commit
  4. 08 Oct, 2020 1 commit
    • Hero Bird's avatar
      Rename EnvTypes -> Env (and many other renamings) (#513) · 8edbfd28
      Hero Bird authored
      * [env] rename Env -> EnvBackend, TypedEnv -> TypedEnvBackend
      * [env] rename EnvError -> Error
      * [*] rename ink_env::EnvTypes -> Environment
      Namely rename:
      ink_env::EnvTypes -> Environment
      ink_env::DefaultEnvTypes -> DefaultEnvironment
      * [*] update cfg-if dependency 0.1 -> 1.0
      * [alloc] rename ink_alloc -> ink_allocator
      * [env] forgot to rename in lib.rs
      * [env, lang] fix some bugs with ink_env::EnvError -> Error renaming
      * [ci] adjust renaming of ink_alloc -> ink_allocator
      * [env] apply rustfmt
      * [lang/macro] re-enable disabled UI test
      * [examples] DNS: apply rustfmt
      * [examples] ERC-20, ERC-721: apply rustfmt
  5. 29 Sep, 2020 1 commit
    • Hero Bird's avatar
      Move all ink! crates into the crates directory (#494) · 31276d89
      Hero Bird authored
      * [*] move all ink! crates into crates/ directory
      * [ci] adjust .gitab-ci.yml to crates/ directory
      * [ci] fix GitLab .gitlab-ci.yml (attempt #2)
      * [ci] forgot some lines in attempt #2
      * [examples] fix example smart contracts
      They need to readjust their paths for the crates/ directory.
  6. 02 Jul, 2020 1 commit
    • Hero Bird's avatar
      Implement trait support - Part 1/3 - New ink! IR (#451) · c24f0ff9
      Hero Bird authored
      * [lang/macro] move some items around
      * [lang/macro] rename AttributeFlag -> AttributeArg
      This is in order to sync naming with the syn crate.
      * [lang/macro] implement ink! config parameter parsing
      * [lang/macro] add doc comment to into_nested_meta helper function
      * [lang/macro] add preliminary ast module
      * [lang/macro] replace usage of ink_primitives::hash module
      * [lang/macro] slightly refactor Selector
      * [lang/macro] fully implement AttributeArgs definitions + tests
      * [lang/macro] add IntoIterator for AttributeArgs
      * [lang/macro] base ir2::Config on the new ast::AttributeArgs definitions
      * [lang/macro] apply rustfmt
      * [lang/macro] add some ToTokens implementations
      * [lang/macro] add unit tests for ir2::Config
      * [lang/macro] introduce general Error type
      * [lang/macro] remove RustItem
      * [lang/macro] follow-up: remove RustItem
      * [lang/macro] add ir2::contains_ink_attributes helper function
      * [lang/macro] initial skeleton for TryFrom<syn::Item> for ir2::Item impl
      * [lang/macro] add first_ink_attribute helper function
      * [lang/macro] refactor initial skeleton for ir2::Item TryFrom impl
      * [lang/macro] re-export first_ink_attribute to ir2 module
      * [lang/macro] add unit tests for contains_ink_attributes and first_ink_attribute
      * [lang/macro] enhance initial TryFrom skeleton for ir2::Item
      * [lang/macro] simplify item_attrs
      * [lang/macro] further simplify item_attrs
      * [lang/macro] minor improvement
      * [lang/macro] add ExtError to extend syn::Error
      * [lang/macro] add Attrs trait to extract attributes from syn types
      * [lang/macro] re-base error infrastructure on to syn::Error
      * [lang/macro] adjust unit tests for new error infrastructure
      * [lang/macro] remove old error types
      * [lang/macro] use syn::Error in ir2::Config
      * [lang/macro] adjust Config unit tests for syn::Error usage
      * [lang/macro] rename ensure_no_duplicates -> ensure_no_duplicate_attrs
      * [lang/macro] add AttributeArg::kind method
      * [lang/macro] use full type path
      * [lang/macro] implement InkAttribute::from_expanded
      * [lang/macro] implement ir2::Storage TryFrom
      * [lang/macro] minor refactor
      * [lang/macro] add InkAttribute::ensure_no_conflicts
      * [lang/macro] add some failure paths to TryFrom<_> for ink! Storage struct
      * [lang/macro] add unit tests for ink! storage struct conversion
      * [lang/macro] apply rustfmt
      * [lang/macro] fix some clippy warnings
      * [lang/macro] rename Storage::item_struct field to ast
      * [lang/macro] rename Event::item_struct -> ast
      * [lang/macro] add some method and an iterator to ink! event struct
      * [lang/macro] add initial implementation of ink! event's TryFrom
      * [lang/macro] add derives for Debug, PartialEq and Eq for ink! event
      * [lang/macro] add initial success path unit tests for TryFrom for ink! event
      * [lang/macro] fix bug with #[ink(topic)] annotated event fields
      * [lang/macro] apply rustfmt
      * [lang/macro] apply clippy suggestion
      * [lang/macro] add first bunch of failure event TryFrom unit tests
      * [lang/macro] normalize the current failure event unit tests
      * [lang/macro] add more event unit tests for topics on fields
      * [lang/macro] add Debug, PartialEq and Eq derives for some ir2 types
      * [lang/macro] add unit tests for ir2::Item
      * [lang/macro] add ir2::ImplBlock::is_ink_impl_block
      * [lang/macro] add doc comment note
      * [lang/macro] rename ImplBlockItem::Rust -> Other
      * [lang/macro] apply rustfmt
      * [lang/macro] add stub TryFrom impls for Constructor and Message
      * [lang/macro] add TryFrom impl for ir2::ImplBlockItem
      * [lang/macro] add initial skeleton for TryFrom impl for ir::ImplBlock
      * [lang/macro] implement ir2::sanitize_attributes
      * [lang/macro] split impl_block.rs into multiple files as sub modules
      * [lang/macro] apply rustfmt + remove unused imports
      * [lang/macro] split item module into multiple modules
      * [lang/macro] finalize move into multiple files from commit before
      * [lang/macro] add lots of error checks to TryFrom for Message
      * [lang/macro] improve TryFrom tests for ir2::ImplBlock
      * [lang/macro] make Event and Storage use ir2::sanitize_attributes
      * [lang/macro] add additional constructors for Iter{Constructors, Messages}
      * [lang/macro] add visibility check to Message TryFrom impl
      * [lang/macro] add Message::Visibility and getter
      * [lang/macro] implement Message::receiver getter
      * [lang/macro] extend ImplBlock doc comment note section
      * [lang/macro] add Message::Visibility getters
      * [lang/macro] refactor Receiver getters
      * [lang/macro] fix doc comment
      * [lang/macro] add unit test for Message::visibility getter
      * [lang/macro] add unit test for Message::receiver getter
      * [lang/macro] move Visibility from message.rs to impl_item.rs
      * [lang/macro] add Constructor::visibility getter
      * [lang/macro] implement callable.rs
      * [lang/macro] make use of new shared callable.rs utilities
      * [lang/macro] remove visibility from impl_item.rs
      * [lang/macro] fix some imports
      * [lang/macro] implement constructor check for missing return type
      * [lang/macro] implement constructor check for invalid self receiver
      * [lang/macro] add some ink! constructor try_from unit tests
      * [lang/macro] add ink! constructor visibility getter unit test
      * [lang/macro] fix unit test for ink! message visibility
      * [lang/macro] add many unit tests for ink! constructor TryFrom impl
      * [lang/macro] extend success TryFrom impl unit tests
      * [lang/macro] factor out sanitize_attributes for TryFrom impls
      * [lang/macro] remove salt from messages and constructors
      * [lang/macro] add salt extraction for ink! impl block
      * [lang/macro] add unit test for ink! impl block salt
      * [lang/macro] implement InkAttribute::{salt, selector} getters
      * [lang/macro] make use of InkAttribute::salt in TryFrom for ir2::ImplBlock
      * [lang/macro] apply rustfmt
      * [lang/macro] implement InkAttribute::is_payable
      * [lang/macro] make use of InkAttribute::{is_payable, selector}
      * [lang/macro] add module doc to callable.rs
      * [lang/macro] rename ImplBlock -> ItemImpl
      * [lang/macro] rename impl_block module to item_impl
      * [lang/macro] rename ImplBlockItem -> ImplItem
      * [lang/macro] add {Message, Constructor}::is_payable
      * [lang/macro] add doc note to ir2::ImplItem
      * [lang/macro] add implementation for InputsIter
      * [lang/macro] make use of InputsIter in ink! message and constructor
      * [lang/macro] add getter for the return type of an ink! message
      * [lang/macro] add unit test for ink! message is_payable
      * [lang/macro] add unit test for Constructor::is_payable
      * [lang/macro] rewrite receiver_works unit test for ink! message
      * [lang/macro] add unit test for ink! message inputs
      * [lang/macro] add unit test for ink! message output getter
      * [lang/macro] add identifier getter to ink! message and constructor
      * [lang/macro] apply rustfmt
      * [lang/macro] apply rustfmt
      * [lang/macro] implement clippy suggestions
      * [lang/macro] add unit test for Constructor::inputs
      * [lang/macro] refactor Storage::is_ink_storage
      * [lang/macro] add Event::is_ink_event
      * [lang/macro] add InkItem::is_ink_item
      * [lang/macro] apply rustfmt
      * [lang/macro] fix many non-dead-code warnings and allow dead-code for ir2
      * [lang/macro] implement Contract::config getter
      * [lang/macro] allow compile failure of some in-doc tests
      * [lang/macro] implement TryFrom for ir2::Module
      * [lang/macro] re-export ImplItem from ir2
      * [lang/macro] implement visibility check for ink! impl blocks
      * [lang/macro] fix unit test
      * [lang/macro] improve error message for visibility check
      * [lang/macro] add unit test for visibility failure
      * [lang/macro] apply rustfmt
      * [lang/macro] introduce Callable trait to unify ink! messages and constructors
      * [lang/macro] craft initial skeleton of compose_selector function
      * [lang/macro] implement ItemImpl::{self_type, trait_path, salt}
      * [lang/macro] extend compose_selector docs with a usage recommendation section
      * [lang/macro] implement initial version of compose_selector
      * [lang/macro] apply clippy suggestion
      * [lang/macro] fix some bugs in compose_selector implementation
      * [lang/macro] add unit tests for compose_selector
      * [lang/macro] rename ir2::Module -> ir2::ItemMod (syn)
      * [lang/macro] rename module.rs -> item_mod.rs
      * [lang/macro] remove some imports, use names directly
      * [lang/macro] rename Event::ast -> item
      * [lang/macro] refactor event fields iterator
      * rebase resolve conflict
      * [lang/macro] move ir2 and ast modules to new crate
      * [lang/ir] some general renamings after crate move
      * [lang/macro] no longer refer to ast and ir2 modules
      * [lang/macro] get rid of all bail! and bail_span! macro calls
      They hide significant control flow which is bad for readability.
      * [lang/ir] export error macros
      * [lang/ir] remove unused import
      * [lang/macro] make use of new ink_lang_ir crate
      * [lang/ir] improve documentation and module structure
      * [lang/ir] apply clippy suggestions + formatting
      * [lang/macro] apply clippy suggestions
      * [lang/ir] further improvements to the documentation
      * [lang/ir] fix error macro docs
      * [lang/ir] add missing re-export for ir::Contract
      * [lang/ir] improve ir::Contract docs
      * [lang/ir] minor refactor of ir::Contract
      * [lang/ir] extend docs for ir::Contract
      * [lang/ir] make ast::AttributeArgs::args field private
      * [lang/ir] apply rustfmt
      * [lang/ir] improve docs
      * [lang/ir] further documentation improvements
      * [lang/ir] add missing exports
      * [lang/ir] adjust format_err to require its expr to be T:Spanned
      Formerly this was T:ToTokens which is more restrictive than it should have been.
      * [lang/ir] refactor format_err_span and format_err macros + docs
      * [lang/ir] rename format_err macro -> format_err_spanned
      * [lang/ir] rename format_err_span macro -> format_err
      * [lang/ir] apply rustfmt
      * [lang/ir] minor improvements to format_err{_spanned}
      * [lang/ir] implement ToTokens for all ink! IR structures
      This is useful because T:ToTokens automatically implements syn::spanned::Spanned while being simpler to implement than syn::spanned::Spanned.
      * [lang/ir] add links to tracking issue for format_err{_spanned}
      * [lang/ir] minor docs improvements
      * [lang/ir] do not re-export everything that belongs to attributes
      * [lang/ir] fix compilation in test mode
      * [lang/ir] add ir::ItemMod checks for ink! storage, message and constructor quantities
      * [lang/ir] make ast module private and move ir module to root
      * [lang/ir] rename IterItemImpls -> IterItemImpls
      * [lang/ir] remove ir::EnvTypes from public API
      * [lang/ir] rename ir::ItemMod::impl_blocks -> item_impls
      * [lang/ir] rename ir::Module::item_impls -> impls
      * [lang/ir] make ir::Config::env_types return syn::Path
      * [lang/ir] move mod doc to lib doc
      * [lang/ir] fix event doc test
      * [lang/ir] make Event::is_ink_event module private
      * [lang/ir] apply rustfmt
      * [lang/ir] fix Storage doc test
      * [lang/ir] remove unnecessary rust annotation for doc test
      * [lang/ir] fix doc tests for constructor and message
      * [lang/ir] fix fmt todo! avoidance
      * [lang/ir] remove unneded let binding
      * [lang/ir] fix doc tests of impl_item/mod.rs
      * [lang/ir] make ItemImpl::is_ink_impl_block module private
      * [lang/ir] re-export InputsIter
      * [lang/ir] add getter for ir::ItemImpl::items
      * [lang/ir] rename salt -> namespace
      * add doc link in MetaNameValue doc
      Co-authored-by: Michael Müller's avatarMichael Müller <mich@elmueller.net>
      * [lang/ir] rename Callable::selector -> user_provided_selector
      This is going to avoid confusion with composed selector concept.
      * [lang/ir] make Storage::is_ink_storage module private
      * [lang/ir] fix doc link
      * [lang/ir] expose composed selector through messages and constructors iter
      * [lang/ir] apply rustfmt
      * [lang/ir] fix item_mod.rs doc tests
      * [lang/ir] ignore contract doc test for now
      It is hard to test because of the unknown ink::contract attribute at the top.
      * [lang/ir] add item getter to CallableWithSelector
      * [lang/ir] add Callable::statements getter
      * [lang/ir] add ir::ItemMod::ensure_no_overlapping_selectors + tests
      * [lang/ir] remove duplicate code
      * fix typo
      Co-authored-by: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>
      * fix typo
      Co-authored-by: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>
      * fix typo
      Co-authored-by: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>
      * [lang/ir] move config.rs -> attr_args.rs
      * [lang/ir] update doc comments
      * [lang/ir] some more doc polishing
      * [lang/ir] fix outdated doc comment
      * [lang/ir] remove outdated doc comment
      * fix typo
      Co-authored-by: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>
      * fix typo
      Co-authored-by: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>
      * [lang/ir] remove unneeded let binding in doc test
      * [lang/ir] fix conflicting constructor attribute closure
      Co-authored-by: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>
      * [lang/ir] fix doc comment
      * [lang/ir] remove outdated doc comment
      * fix doc comment
      Co-authored-by: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>
      * [lang/ir] rename 'outer label to 'repeat
      * [ci] add lang/ir to ALL_CRATES
      * [lang/ir] update blake2 dependency from 0.8 -> 0.9
      * [lang/macro] remove unneeded blake2 dependency
      * [lang/ir] take last segment of trait path
      * [lang/ir] slightly improve overlapping selector error message
      * [lang/ir] improve overlapping selector formatting
      * [lang/ir] add unit test for composed selector with relative trait path
      * [lang/ir] improve unit test for relative trait path composed selector
      * [lang/ir] fix bug that namespace was a valid attribute on ink! messages
      * [lang/ir] add unit test to check against conflicting attributes on ink! messages
      * [lang/ir] fix bug that namespace was an allowed attribute for ink! constructors
      * [lang/ir] add unit test to check against conflicting ink! constructor attributes
      * [lang/ir] add success tests for ir::ItemMod TryFrom
      * [lang/ir] fix out-of-line ink! module error message
      * [lang/ir] add a bunch of ink! module TryFrom failure unit tests
      * [lang/ir] add unit test for ink! event fields iterator
      * [lang/ir] apply rustfmt
      Co-authored-by: Michael Müller's avatarMichael Müller <mich@elmueller.net>
      Co-authored-by: Andrew Jones's avatarAndrew Jones <ascjones@gmail.com>