--- a/Cargo.lock +++ b/Cargo.lock @@ -2445,8 +2445,8 @@ [[package]] name = "evm-coder" -version = "0.3.0" -source = "git+https://github.com/uniquenetwork/evm-coder?tag=v0.3.0#c4bfdf39d84fbe74c6178417177f2a7f81d92bdd" +version = "0.3.1" +source = "git+https://github.com/uniquenetwork/evm-coder?tag=v0.3.1#21e61c627f71337d6b8a03899fe8de14bfbf67aa" dependencies = [ "ethereum", "evm-coder-procedural", @@ -2457,8 +2457,8 @@ [[package]] name = "evm-coder-procedural" -version = "0.3.0" -source = "git+https://github.com/uniquenetwork/evm-coder?tag=v0.3.0#c4bfdf39d84fbe74c6178417177f2a7f81d92bdd" +version = "0.3.1" +source = "git+https://github.com/uniquenetwork/evm-coder?tag=v0.3.1#21e61c627f71337d6b8a03899fe8de14bfbf67aa" dependencies = [ "Inflector", "hex", --- a/Cargo.toml +++ b/Cargo.toml @@ -19,16 +19,9 @@ [workspace.dependencies] # Unique -evm-coder = { git = "https://github.com/uniquenetwork/evm-coder", tag = "v0.3.0", default-features = false } -struct-versioning = { path = "crates/struct-versioning" } -precompile-utils-macro = { path = "runtime/common/ethereum/precompiles/utils/macro" } -up-common = { path = "primitives/common", default-features = false } -up-data-structs = { path = "primitives/data-structs", default-features = false } -up-pov-estimate-rpc = { path = "primitives/pov-estimate-rpc", default-features = false } -up-rpc = { path = "primitives/rpc", default-features = false } -up-sponsorship = { default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v0.9.37" } -uc-rpc = { path = "client/rpc" } -unique-rpc = { path = "node/rpc" } +app-promotion-rpc = { path = "primitives/app_promotion_rpc", default-features = false } +evm-coder = { git = "https://github.com/uniquenetwork/evm-coder", tag = "v0.3.1", default-features = false } +pallet-app-promotion = { path = "pallets/app-promotion", default-features = false } pallet-charge-transaction = { package = "pallet-template-transaction-payment", default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v0.9.37" } pallet-collator-selection = { default-features = false, path = "pallets/collator-selection" } pallet-common = { default-features = false, path = "pallets/common" } @@ -45,56 +38,59 @@ pallet-nonfungible = { default-features = false, path = "pallets/nonfungible" } pallet-refungible = { default-features = false, path = "pallets/refungible" } pallet-structure = { default-features = false, path = "pallets/structure" } +pallet-test-utils = { default-features = false, path = "test-pallets/utils" } pallet-unique = { path = "pallets/unique", default-features = false } pallet-unique-scheduler-v2 = { path = "pallets/scheduler-v2", default-features = false } -pallet-test-utils = { default-features = false, path = "test-pallets/utils" } -pallet-app-promotion = { path = "pallets/app-promotion", default-features = false } -app-promotion-rpc = { path = "primitives/app_promotion_rpc", default-features = false } +precompile-utils-macro = { path = "runtime/common/ethereum/precompiles/utils/macro" } +struct-versioning = { path = "crates/struct-versioning" } +uc-rpc = { path = "client/rpc" } +unique-rpc = { path = "node/rpc" } +up-common = { path = "primitives/common", default-features = false } +up-data-structs = { path = "primitives/data-structs", default-features = false } +up-pov-estimate-rpc = { path = "primitives/pov-estimate-rpc", default-features = false } +up-rpc = { path = "primitives/rpc", default-features = false } +up-sponsorship = { default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v0.9.37" } # Unique: Runtimes +opal-runtime = { path = "runtime/opal" } +quartz-runtime = { path = "runtime/quartz" } unique-runtime = { path = "runtime/unique" } -quartz-runtime = { path = "runtime/quartz" } -opal-runtime = { path = "runtime/opal" } # Frontier (Unique patches over the Parity version) +fc-consensus = { git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" } +fc-db = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" } +fc-mapping-sync = { git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" } +fc-rpc = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" } +fc-rpc-core = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" } fp-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" } fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" } fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" } fp-self-contained = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" } -fc-db = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" } -fc-rpc = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" } -fc-rpc-core = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" } fp-storage = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" } -fc-consensus = { git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" } -fc-mapping-sync = { git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" } +pallet-base-fee = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" } pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" } pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" } -pallet-base-fee = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" } pallet-evm-precompile-simple = { default-features = false, git = "https://github.com/uniquenetwork/unique-frontier", branch = "unique-polkadot-v0.9.37" } # Parity codec = { default-features = false, features = ['derive'], package = 'parity-scale-codec', version = "3.2.2" } -scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } -polkadot-cli = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37" } -polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37" } -polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37" } cumulus-client-cli = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" } cumulus-client-consensus-aura = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" } cumulus-client-consensus-common = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" } cumulus-client-network = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" } cumulus-client-service = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" } -cumulus-primitives-parachain-inherent = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" } -cumulus-relay-chain-inprocess-interface = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" } -cumulus-relay-chain-interface = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" } -cumulus-relay-chain-minimal-node = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" } cumulus-pallet-aura-ext = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false } cumulus-pallet-dmp-queue = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false } cumulus-pallet-parachain-system = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false } cumulus-pallet-xcm = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false } cumulus-pallet-xcmp-queue = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false } cumulus-primitives-core = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false } +cumulus-primitives-parachain-inherent = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" } cumulus-primitives-timestamp = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false } cumulus-primitives-utility = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37", default-features = false } +cumulus-relay-chain-inprocess-interface = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" } +cumulus-relay-chain-interface = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" } +cumulus-relay-chain-minimal-node = { git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" } frame-executive = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } @@ -107,67 +103,71 @@ pallet-sudo = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } pallet-timestamp = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } pallet-transaction-payment = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } +pallet-transaction-payment-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } pallet-transaction-payment-rpc-runtime-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } pallet-treasury = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } pallet-xcm = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37", default-features = false } -pallet-transaction-payment-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } parachain-info = { default-features = false, git = "https://github.com/paritytech/cumulus", branch = "polkadot-v0.9.37" } +polkadot-cli = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37" } polkadot-parachain = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37", default-features = false } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37" } +polkadot-service = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37" } +sc-basic-authorship = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } +sc-chain-spec = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } +sc-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } +sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } +sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } +sc-consensus-manual-seal = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } +sc-executor = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } +sc-finality-grandpa = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } +sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } +sc-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } +sc-rpc-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } +sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } +sc-sysinfo = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } +sc-telemetry = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } +sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } +sc-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } +scale-info = { version = "2.1.1", default-features = false, features = ["derive"] } sp-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } sp-arithmetic = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } sp-block-builder = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } +sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } sp-consensus-aura = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } +sp-externalities = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } sp-inherents = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } sp-io = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } +sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } sp-offchain = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } sp-session = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sp-transaction-pool = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sp-version = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } sp-staking = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } +sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } +sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } +sp-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } sp-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sp-blockchain = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sp-keystore = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sp-timestamp = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sp-externalities = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sp-state-machine = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } +sp-transaction-pool = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } sp-trie = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sc-client-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sc-finality-grandpa = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sc-network = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sc-rpc = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sc-rpc-api = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sc-service = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sc-transaction-pool = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sc-basic-authorship = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sc-chain-spec = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sc-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sc-consensus = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sc-consensus-manual-seal = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sc-executor = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sc-sysinfo = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sc-telemetry = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -sc-tracing = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } +sp-version = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } substrate-frame-rpc-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } +substrate-prometheus-endpoint = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } xcm = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37", default-features = false } xcm-builder = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37", default-features = false } xcm-executor = { git = "https://github.com/paritytech/polkadot", branch = "release-v0.9.37", default-features = false } # Parity: Build utils +substrate-build-script-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } substrate-wasm-builder = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -substrate-build-script-utils = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } # Parity: Benchmarking +frame-benchmarking = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } frame-benchmarking-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } frame-system-benchmarking = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -frame-benchmarking = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } # Parity: Try Runtime +frame-try-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } try-runtime-cli = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } -frame-try-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.37" } # ORML orml-tokens = { git = "https://github.com/open-web3-stack/open-runtime-module-library", branch = "polkadot-v0.9.37", default-features = false } @@ -176,15 +176,15 @@ orml-xtokens = { git = "https://github.com/open-web3-stack/open-runtime-module-library", branch = "polkadot-v0.9.37", default-features = false } # Other -smallvec = "1.6.1" derivative = { version = "2.2.0", features = ["use_core"] } -serde = { default-features = false, features = ['derive'], version = "1.0.136" } -log = { version = "0.4.16", default-features = false } -num_enum = { version = "0.5.3", default-features = false } +ethereum = { version = "0.14.0", default-features = false } +evm-core = { default-features = false, version = "0.37.0" } hex-literal = "0.3.4" impl-trait-for-tuples = "0.2.2" +jsonrpsee = { version = "0.16.2", features = ["macros", "server"] } +log = { version = "0.4.16", default-features = false } logtest = "2.0.0" -ethereum = { version = "0.14.0", default-features = false } -evm-core = { default-features = false, version = "0.37.0" } +num_enum = { version = "0.5.3", default-features = false } primitive-types = { version = "0.12.1", default-features = false } -jsonrpsee = { version = "0.16.2", features = ["macros", "server"] } +serde = { default-features = false, features = ['derive'], version = "1.0.136" } +smallvec = "1.6.1" --- a/pallets/fungible/src/stubs/UniqueFungible.sol +++ b/pallets/fungible/src/stubs/UniqueFungible.sol @@ -0,0 +1,751 @@ +// SPDX-License-Identifier: OTHER +// This code is automatically generated + +pragma solidity >=0.8.0 <0.9.0; + +/// @dev common stubs holder +contract Dummy { + uint8 dummy; + string stub_error = "this contract is implemented in native"; +} + +contract ERC165 is Dummy { + function supportsInterface(bytes4 interfaceID) external view returns (bool) { + require(false, stub_error); + interfaceID; + return true; + } +} + +/// @title A contract that allows you to work with collections. +/// @dev the ERC-165 identifier for this interface is 0x2a14cfd1 +contract Collection is Dummy, ERC165 { + // /// Set collection property. + // /// + // /// @param key Property key. + // /// @param value Propery value. + // /// @dev EVM selector for this function is: 0x2f073f66, + // /// or in textual repr: setCollectionProperty(string,bytes) + // function setCollectionProperty(string memory key, bytes memory value) public { + // require(false, stub_error); + // key; + // value; + // dummy = 0; + // } + + /// Set collection properties. + /// + /// @param properties Vector of properties key/value pair. + /// @dev EVM selector for this function is: 0x50b26b2a, + /// or in textual repr: setCollectionProperties((string,bytes)[]) + function setCollectionProperties(Property[] memory properties) public { + require(false, stub_error); + properties; + dummy = 0; + } + + // /// Delete collection property. + // /// + // /// @param key Property key. + // /// @dev EVM selector for this function is: 0x7b7debce, + // /// or in textual repr: deleteCollectionProperty(string) + // function deleteCollectionProperty(string memory key) public { + // require(false, stub_error); + // key; + // dummy = 0; + // } + + /// Delete collection properties. + /// + /// @param keys Properties keys. + /// @dev EVM selector for this function is: 0xee206ee3, + /// or in textual repr: deleteCollectionProperties(string[]) + function deleteCollectionProperties(string[] memory keys) public { + require(false, stub_error); + keys; + dummy = 0; + } + + /// Get collection property. + /// + /// @dev Throws error if key not found. + /// + /// @param key Property key. + /// @return bytes The property corresponding to the key. + /// @dev EVM selector for this function is: 0xcf24fd6d, + /// or in textual repr: collectionProperty(string) + function collectionProperty(string memory key) public view returns (bytes memory) { + require(false, stub_error); + key; + dummy; + return hex""; + } + + /// Get collection properties. + /// + /// @param keys Properties keys. Empty keys for all propertyes. + /// @return Vector of properties key/value pairs. + /// @dev EVM selector for this function is: 0x285fb8e6, + /// or in textual repr: collectionProperties(string[]) + function collectionProperties(string[] memory keys) public view returns (Property[] memory) { + require(false, stub_error); + keys; + dummy; + return new Property[](0); + } + + // /// Set the sponsor of the collection. + // /// + // /// @dev In order for sponsorship to work, it must be confirmed on behalf of the sponsor. + // /// + // /// @param sponsor Address of the sponsor from whose account funds will be debited for operations with the contract. + // /// @dev EVM selector for this function is: 0x7623402e, + // /// or in textual repr: setCollectionSponsor(address) + // function setCollectionSponsor(address sponsor) public { + // require(false, stub_error); + // sponsor; + // dummy = 0; + // } + + /// Set the sponsor of the collection. + /// + /// @dev In order for sponsorship to work, it must be confirmed on behalf of the sponsor. + /// + /// @param sponsor Cross account address of the sponsor from whose account funds will be debited for operations with the contract. + /// @dev EVM selector for this function is: 0x84a1d5a8, + /// or in textual repr: setCollectionSponsorCross((address,uint256)) + function setCollectionSponsorCross(CrossAddress memory sponsor) public { + require(false, stub_error); + sponsor; + dummy = 0; + } + + /// Whether there is a pending sponsor. + /// @dev EVM selector for this function is: 0x058ac185, + /// or in textual repr: hasCollectionPendingSponsor() + function hasCollectionPendingSponsor() public view returns (bool) { + require(false, stub_error); + dummy; + return false; + } + + /// Collection sponsorship confirmation. + /// + /// @dev After setting the sponsor for the collection, it must be confirmed with this function. + /// @dev EVM selector for this function is: 0x3c50e97a, + /// or in textual repr: confirmCollectionSponsorship() + function confirmCollectionSponsorship() public { + require(false, stub_error); + dummy = 0; + } + + /// Remove collection sponsor. + /// @dev EVM selector for this function is: 0x6e0326a3, + /// or in textual repr: removeCollectionSponsor() + function removeCollectionSponsor() public { + require(false, stub_error); + dummy = 0; + } + + /// Get current sponsor. + /// + /// @return Tuble with sponsor address and his substrate mirror. If there is no confirmed sponsor error "Contract has no sponsor" throw. + /// @dev EVM selector for this function is: 0x6ec0a9f1, + /// or in textual repr: collectionSponsor() + function collectionSponsor() public view returns (CrossAddress memory) { + require(false, stub_error); + dummy; + return CrossAddress(0x0000000000000000000000000000000000000000, 0); + } + + /// Get current collection limits. + /// + /// @return Array of collection limits + /// @dev EVM selector for this function is: 0xf63bc572, + /// or in textual repr: collectionLimits() + function collectionLimits() public view returns (CollectionLimit[] memory) { + require(false, stub_error); + dummy; + return new CollectionLimit[](0); + } + + /// Set limits for the collection. + /// @dev Throws error if limit not found. + /// @param limit Some limit. + /// @dev EVM selector for this function is: 0x2316ee74, + /// or in textual repr: setCollectionLimit((uint8,(bool,uint256))) + function setCollectionLimit(CollectionLimit memory limit) public { + require(false, stub_error); + limit; + dummy = 0; + } + + /// Get contract address. + /// @dev EVM selector for this function is: 0xf6b4dfb4, + /// or in textual repr: contractAddress() + function contractAddress() public view returns (address) { + require(false, stub_error); + dummy; + return 0x0000000000000000000000000000000000000000; + } + + /// Add collection admin. + /// @param newAdmin Cross account administrator address. + /// @dev EVM selector for this function is: 0x859aa7d6, + /// or in textual repr: addCollectionAdminCross((address,uint256)) + function addCollectionAdminCross(CrossAddress memory newAdmin) public { + require(false, stub_error); + newAdmin; + dummy = 0; + } + + /// Remove collection admin. + /// @param admin Cross account administrator address. + /// @dev EVM selector for this function is: 0x6c0cd173, + /// or in textual repr: removeCollectionAdminCross((address,uint256)) + function removeCollectionAdminCross(CrossAddress memory admin) public { + require(false, stub_error); + admin; + dummy = 0; + } + + // /// Add collection admin. + // /// @param newAdmin Address of the added administrator. + // /// @dev EVM selector for this function is: 0x92e462c7, + // /// or in textual repr: addCollectionAdmin(address) + // function addCollectionAdmin(address newAdmin) public { + // require(false, stub_error); + // newAdmin; + // dummy = 0; + // } + + // /// Remove collection admin. + // /// + // /// @param admin Address of the removed administrator. + // /// @dev EVM selector for this function is: 0xfafd7b42, + // /// or in textual repr: removeCollectionAdmin(address) + // function removeCollectionAdmin(address admin) public { + // require(false, stub_error); + // admin; + // dummy = 0; + // } + + /// Toggle accessibility of collection nesting. + /// + /// @param enable If "true" degenerates to nesting: 'Owner' else to nesting: 'Disabled' + /// @dev EVM selector for this function is: 0x112d4586, + /// or in textual repr: setCollectionNesting(bool) + function setCollectionNesting(bool enable) public { + require(false, stub_error); + enable; + dummy = 0; + } + + /// Toggle accessibility of collection nesting. + /// + /// @param enable If "true" degenerates to nesting: {OwnerRestricted: [1, 2, 3]} else to nesting: 'Disabled' + /// @param collections Addresses of collections that will be available for nesting. + /// @dev EVM selector for this function is: 0x64872396, + /// or in textual repr: setCollectionNesting(bool,address[]) + function setCollectionNesting(bool enable, address[] memory collections) public { + require(false, stub_error); + enable; + collections; + dummy = 0; + } + + /// Returns nesting for a collection + /// @dev EVM selector for this function is: 0x22d25bfe, + /// or in textual repr: collectionNestingRestrictedCollectionIds() + function collectionNestingRestrictedCollectionIds() public view returns (CollectionNesting memory) { + require(false, stub_error); + dummy; + return CollectionNesting(false, new uint256[](0)); + } + + /// Returns permissions for a collection + /// @dev EVM selector for this function is: 0x5b2eaf4b, + /// or in textual repr: collectionNestingPermissions() + function collectionNestingPermissions() public view returns (CollectionNestingPermission[] memory) { + require(false, stub_error); + dummy; + return new CollectionNestingPermission[](0); + } + + /// Set the collection access method. + /// @param mode Access mode + /// @dev EVM selector for this function is: 0x41835d4c, + /// or in textual repr: setCollectionAccess(uint8) + function setCollectionAccess(AccessMode mode) public { + require(false, stub_error); + mode; + dummy = 0; + } + + /// Checks that user allowed to operate with collection. + /// + /// @param user User address to check. + /// @dev EVM selector for this function is: 0x91b6df49, + /// or in textual repr: allowlistedCross((address,uint256)) + function allowlistedCross(CrossAddress memory user) public view returns (bool) { + require(false, stub_error); + user; + dummy; + return false; + } + + // /// Add the user to the allowed list. + // /// + // /// @param user Address of a trusted user. + // /// @dev EVM selector for this function is: 0x67844fe6, + // /// or in textual repr: addToCollectionAllowList(address) + // function addToCollectionAllowList(address user) public { + // require(false, stub_error); + // user; + // dummy = 0; + // } + + /// Add user to allowed list. + /// + /// @param user User cross account address. + /// @dev EVM selector for this function is: 0xa0184a3a, + /// or in textual repr: addToCollectionAllowListCross((address,uint256)) + function addToCollectionAllowListCross(CrossAddress memory user) public { + require(false, stub_error); + user; + dummy = 0; + } + + // /// Remove the user from the allowed list. + // /// + // /// @param user Address of a removed user. + // /// @dev EVM selector for this function is: 0x85c51acb, + // /// or in textual repr: removeFromCollectionAllowList(address) + // function removeFromCollectionAllowList(address user) public { + // require(false, stub_error); + // user; + // dummy = 0; + // } + + /// Remove user from allowed list. + /// + /// @param user User cross account address. + /// @dev EVM selector for this function is: 0x09ba452a, + /// or in textual repr: removeFromCollectionAllowListCross((address,uint256)) + function removeFromCollectionAllowListCross(CrossAddress memory user) public { + require(false, stub_error); + user; + dummy = 0; + } + + /// Switch permission for minting. + /// + /// @param mode Enable if "true". + /// @dev EVM selector for this function is: 0x00018e84, + /// or in textual repr: setCollectionMintMode(bool) + function setCollectionMintMode(bool mode) public { + require(false, stub_error); + mode; + dummy = 0; + } + + // /// Check that account is the owner or admin of the collection + // /// + // /// @param user account to verify + // /// @return "true" if account is the owner or admin + // /// @dev EVM selector for this function is: 0x9811b0c7, + // /// or in textual repr: isOwnerOrAdmin(address) + // function isOwnerOrAdmin(address user) public view returns (bool) { + // require(false, stub_error); + // user; + // dummy; + // return false; + // } + + /// Check that account is the owner or admin of the collection + /// + /// @param user User cross account to verify + /// @return "true" if account is the owner or admin + /// @dev EVM selector for this function is: 0x3e75a905, + /// or in textual repr: isOwnerOrAdminCross((address,uint256)) + function isOwnerOrAdminCross(CrossAddress memory user) public view returns (bool) { + require(false, stub_error); + user; + dummy; + return false; + } + + /// Returns collection type + /// + /// @return `Fungible` or `NFT` or `ReFungible` + /// @dev EVM selector for this function is: 0xd34b55b8, + /// or in textual repr: uniqueCollectionType() + function uniqueCollectionType() public view returns (string memory) { + require(false, stub_error); + dummy; + return ""; + } + + /// Get collection owner. + /// + /// @return Tuble with sponsor address and his substrate mirror. + /// If address is canonical then substrate mirror is zero and vice versa. + /// @dev EVM selector for this function is: 0xdf727d3b, + /// or in textual repr: collectionOwner() + function collectionOwner() public view returns (CrossAddress memory) { + require(false, stub_error); + dummy; + return CrossAddress(0x0000000000000000000000000000000000000000, 0); + } + + // /// Changes collection owner to another account + // /// + // /// @dev Owner can be changed only by current owner + // /// @param newOwner new owner account + // /// @dev EVM selector for this function is: 0x4f53e226, + // /// or in textual repr: changeCollectionOwner(address) + // function changeCollectionOwner(address newOwner) public { + // require(false, stub_error); + // newOwner; + // dummy = 0; + // } + + /// Get collection administrators + /// + /// @return Vector of tuples with admins address and his substrate mirror. + /// If address is canonical then substrate mirror is zero and vice versa. + /// @dev EVM selector for this function is: 0x5813216b, + /// or in textual repr: collectionAdmins() + function collectionAdmins() public view returns (CrossAddress[] memory) { + require(false, stub_error); + dummy; + return new CrossAddress[](0); + } + + /// Changes collection owner to another account + /// + /// @dev Owner can be changed only by current owner + /// @param newOwner new owner cross account + /// @dev EVM selector for this function is: 0x6496c497, + /// or in textual repr: changeCollectionOwnerCross((address,uint256)) + function changeCollectionOwnerCross(CrossAddress memory newOwner) public { + require(false, stub_error); + newOwner; + dummy = 0; + } +} + +/// Cross account struct +struct CrossAddress { + address eth; + uint256 sub; +} + +/// Ethereum representation of `AccessMode` (see [`up_data_structs::AccessMode`]). +enum AccessMode { + /// Access grant for owner and admins. Used as default. + Normal, + /// Like a [`Normal`](AccessMode::Normal) but also users in allow list. + AllowList +} + +/// Ethereum representation of `NestingPermissions` (see [`up_data_structs::NestingPermissions`]) field. +struct CollectionNestingPermission { + CollectionPermissionField field; + bool value; +} + +/// Ethereum representation of `NestingPermissions` (see [`up_data_structs::NestingPermissions`]) fields as an enumeration. +enum CollectionPermissionField { + /// Owner of token can nest tokens under it. + TokenOwner, + /// Admin of token collection can nest tokens under token. + CollectionAdmin +} + +/// Nested collections. +struct CollectionNesting { + bool token_owner; + uint256[] ids; +} + +/// [`CollectionLimits`](up_data_structs::CollectionLimits) field representation for EVM. +struct CollectionLimit { + CollectionLimitField field; + OptionUint256 value; +} + +/// Optional value +struct OptionUint256 { + /// Shows the status of accessibility of value + bool status; + /// Actual value if `status` is true + uint256 value; +} + +/// [`CollectionLimits`](up_data_structs::CollectionLimits) fields representation for EVM. +enum CollectionLimitField { + /// How many tokens can a user have on one account. + AccountTokenOwnership, + /// How many bytes of data are available for sponsorship. + SponsoredDataSize, + /// In any case, chain default: [`SponsoringRateLimit::SponsoringDisabled`] + SponsoredDataRateLimit, + /// How many tokens can be mined into this collection. + TokenLimit, + /// Timeouts for transfer sponsoring. + SponsorTransferTimeout, + /// Timeout for sponsoring an approval in passed blocks. + SponsorApproveTimeout, + /// Whether the collection owner of the collection can send tokens (which belong to other users). + OwnerCanTransfer, + /// Can the collection owner burn other people's tokens. + OwnerCanDestroy, + /// Is it possible to send tokens from this collection between users. + TransferEnabled +} + +/// Ethereum representation of collection [`PropertyKey`](up_data_structs::PropertyKey) and [`PropertyValue`](up_data_structs::PropertyValue). +struct Property { + string key; + bytes value; +} + +/// @dev the ERC-165 identifier for this interface is 0x85d7dea6 +contract ERC20UniqueExtensions is Dummy, ERC165 { + /// @dev Function to check the amount of tokens that an owner allowed to a spender. + /// @param owner crossAddress The address which owns the funds. + /// @param spender crossAddress The address which will spend the funds. + /// @return A uint256 specifying the amount of tokens still available for the spender. + /// @dev EVM selector for this function is: 0xe0af4bd7, + /// or in textual repr: allowanceCross((address,uint256),(address,uint256)) + function allowanceCross(CrossAddress memory owner, CrossAddress memory spender) public view returns (uint256) { + require(false, stub_error); + owner; + spender; + dummy; + return 0; + } + + /// @notice A description for the collection. + /// @dev EVM selector for this function is: 0x7284e416, + /// or in textual repr: description() + function description() public view returns (string memory) { + require(false, stub_error); + dummy; + return ""; + } + + /// @dev EVM selector for this function is: 0x269e6158, + /// or in textual repr: mintCross((address,uint256),uint256) + function mintCross(CrossAddress memory to, uint256 amount) public returns (bool) { + require(false, stub_error); + to; + amount; + dummy = 0; + return false; + } + + /// @dev EVM selector for this function is: 0x0ecd0ab0, + /// or in textual repr: approveCross((address,uint256),uint256) + function approveCross(CrossAddress memory spender, uint256 amount) public returns (bool) { + require(false, stub_error); + spender; + amount; + dummy = 0; + return false; + } + + // /// Burn tokens from account + // /// @dev Function that burns an `amount` of the tokens of a given account, + // /// deducting from the sender's allowance for said account. + // /// @param from The account whose tokens will be burnt. + // /// @param amount The amount that will be burnt. + // /// @dev EVM selector for this function is: 0x79cc6790, + // /// or in textual repr: burnFrom(address,uint256) + // function burnFrom(address from, uint256 amount) public returns (bool) { + // require(false, stub_error); + // from; + // amount; + // dummy = 0; + // return false; + // } + + /// Burn tokens from account + /// @dev Function that burns an `amount` of the tokens of a given account, + /// deducting from the sender's allowance for said account. + /// @param from The account whose tokens will be burnt. + /// @param amount The amount that will be burnt. + /// @dev EVM selector for this function is: 0xbb2f5a58, + /// or in textual repr: burnFromCross((address,uint256),uint256) + function burnFromCross(CrossAddress memory from, uint256 amount) public returns (bool) { + require(false, stub_error); + from; + amount; + dummy = 0; + return false; + } + + /// Mint tokens for multiple accounts. + /// @param amounts array of pairs of account address and amount + /// @dev EVM selector for this function is: 0x1acf2d55, + /// or in textual repr: mintBulk((address,uint256)[]) + function mintBulk(AmountForAddress[] memory amounts) public returns (bool) { + require(false, stub_error); + amounts; + dummy = 0; + return false; + } + + /// @dev EVM selector for this function is: 0x2ada85ff, + /// or in textual repr: transferCross((address,uint256),uint256) + function transferCross(CrossAddress memory to, uint256 amount) public returns (bool) { + require(false, stub_error); + to; + amount; + dummy = 0; + return false; + } + + /// @dev EVM selector for this function is: 0xd5cf430b, + /// or in textual repr: transferFromCross((address,uint256),(address,uint256),uint256) + function transferFromCross( + CrossAddress memory from, + CrossAddress memory to, + uint256 amount + ) public returns (bool) { + require(false, stub_error); + from; + to; + amount; + dummy = 0; + return false; + } + + /// @notice Returns collection helper contract address + /// @dev EVM selector for this function is: 0x1896cce6, + /// or in textual repr: collectionHelperAddress() + function collectionHelperAddress() public view returns (address) { + require(false, stub_error); + dummy; + return 0x0000000000000000000000000000000000000000; + } +} + +struct AmountForAddress { + address to; + uint256 amount; +} + +/// @dev the ERC-165 identifier for this interface is 0x40c10f19 +contract ERC20Mintable is Dummy, ERC165 { + /// Mint tokens for `to` account. + /// @param to account that will receive minted tokens + /// @param amount amount of tokens to mint + /// @dev EVM selector for this function is: 0x40c10f19, + /// or in textual repr: mint(address,uint256) + function mint(address to, uint256 amount) public returns (bool) { + require(false, stub_error); + to; + amount; + dummy = 0; + return false; + } +} + +/// @dev inlined interface +contract ERC20Events { + event Transfer(address indexed from, address indexed to, uint256 value); + event Approval(address indexed owner, address indexed spender, uint256 value); +} + +/// @dev the ERC-165 identifier for this interface is 0x942e8b22 +contract ERC20 is Dummy, ERC165, ERC20Events { + /// @dev EVM selector for this function is: 0x06fdde03, + /// or in textual repr: name() + function name() public view returns (string memory) { + require(false, stub_error); + dummy; + return ""; + } + + /// @dev EVM selector for this function is: 0x95d89b41, + /// or in textual repr: symbol() + function symbol() public view returns (string memory) { + require(false, stub_error); + dummy; + return ""; + } + + /// @dev EVM selector for this function is: 0x18160ddd, + /// or in textual repr: totalSupply() + function totalSupply() public view returns (uint256) { + require(false, stub_error); + dummy; + return 0; + } + + /// @dev EVM selector for this function is: 0x313ce567, + /// or in textual repr: decimals() + function decimals() public view returns (uint8) { + require(false, stub_error); + dummy; + return 0; + } + + /// @dev EVM selector for this function is: 0x70a08231, + /// or in textual repr: balanceOf(address) + function balanceOf(address owner) public view returns (uint256) { + require(false, stub_error); + owner; + dummy; + return 0; + } + + /// @dev EVM selector for this function is: 0xa9059cbb, + /// or in textual repr: transfer(address,uint256) + function transfer(address to, uint256 amount) public returns (bool) { + require(false, stub_error); + to; + amount; + dummy = 0; + return false; + } + + /// @dev EVM selector for this function is: 0x23b872dd, + /// or in textual repr: transferFrom(address,address,uint256) + function transferFrom( + address from, + address to, + uint256 amount + ) public returns (bool) { + require(false, stub_error); + from; + to; + amount; + dummy = 0; + return false; + } + + /// @dev EVM selector for this function is: 0x095ea7b3, + /// or in textual repr: approve(address,uint256) + function approve(address spender, uint256 amount) public returns (bool) { + require(false, stub_error); + spender; + amount; + dummy = 0; + return false; + } + + /// @dev EVM selector for this function is: 0xdd62ed3e, + /// or in textual repr: allowance(address,address) + function allowance(address owner, address spender) public view returns (uint256) { + require(false, stub_error); + owner; + spender; + dummy; + return 0; + } +} + +contract UniqueFungible is Dummy, ERC165, ERC20, ERC20Mintable, ERC20UniqueExtensions, Collection {} --- a/tests/src/eth/api/UniqueFungible.sol +++ b/tests/src/eth/api/UniqueFungible.sol @@ -0,0 +1,485 @@ +// SPDX-License-Identifier: OTHER +// This code is automatically generated + +pragma solidity >=0.8.0 <0.9.0; + +/// @dev common stubs holder +interface Dummy { + +} + +interface ERC165 is Dummy { + function supportsInterface(bytes4 interfaceID) external view returns (bool); +} + +/// @title A contract that allows you to work with collections. +/// @dev the ERC-165 identifier for this interface is 0x2a14cfd1 +interface Collection is Dummy, ERC165 { + // /// Set collection property. + // /// + // /// @param key Property key. + // /// @param value Propery value. + // /// @dev EVM selector for this function is: 0x2f073f66, + // /// or in textual repr: setCollectionProperty(string,bytes) + // function setCollectionProperty(string memory key, bytes memory value) external; + + /// Set collection properties. + /// + /// @param properties Vector of properties key/value pair. + /// @dev EVM selector for this function is: 0x50b26b2a, + /// or in textual repr: setCollectionProperties((string,bytes)[]) + function setCollectionProperties(Property[] memory properties) external; + + // /// Delete collection property. + // /// + // /// @param key Property key. + // /// @dev EVM selector for this function is: 0x7b7debce, + // /// or in textual repr: deleteCollectionProperty(string) + // function deleteCollectionProperty(string memory key) external; + + /// Delete collection properties. + /// + /// @param keys Properties keys. + /// @dev EVM selector for this function is: 0xee206ee3, + /// or in textual repr: deleteCollectionProperties(string[]) + function deleteCollectionProperties(string[] memory keys) external; + + /// Get collection property. + /// + /// @dev Throws error if key not found. + /// + /// @param key Property key. + /// @return bytes The property corresponding to the key. + /// @dev EVM selector for this function is: 0xcf24fd6d, + /// or in textual repr: collectionProperty(string) + function collectionProperty(string memory key) external view returns (bytes memory); + + /// Get collection properties. + /// + /// @param keys Properties keys. Empty keys for all propertyes. + /// @return Vector of properties key/value pairs. + /// @dev EVM selector for this function is: 0x285fb8e6, + /// or in textual repr: collectionProperties(string[]) + function collectionProperties(string[] memory keys) external view returns (Property[] memory); + + // /// Set the sponsor of the collection. + // /// + // /// @dev In order for sponsorship to work, it must be confirmed on behalf of the sponsor. + // /// + // /// @param sponsor Address of the sponsor from whose account funds will be debited for operations with the contract. + // /// @dev EVM selector for this function is: 0x7623402e, + // /// or in textual repr: setCollectionSponsor(address) + // function setCollectionSponsor(address sponsor) external; + + /// Set the sponsor of the collection. + /// + /// @dev In order for sponsorship to work, it must be confirmed on behalf of the sponsor. + /// + /// @param sponsor Cross account address of the sponsor from whose account funds will be debited for operations with the contract. + /// @dev EVM selector for this function is: 0x84a1d5a8, + /// or in textual repr: setCollectionSponsorCross((address,uint256)) + function setCollectionSponsorCross(CrossAddress memory sponsor) external; + + /// Whether there is a pending sponsor. + /// @dev EVM selector for this function is: 0x058ac185, + /// or in textual repr: hasCollectionPendingSponsor() + function hasCollectionPendingSponsor() external view returns (bool); + + /// Collection sponsorship confirmation. + /// + /// @dev After setting the sponsor for the collection, it must be confirmed with this function. + /// @dev EVM selector for this function is: 0x3c50e97a, + /// or in textual repr: confirmCollectionSponsorship() + function confirmCollectionSponsorship() external; + + /// Remove collection sponsor. + /// @dev EVM selector for this function is: 0x6e0326a3, + /// or in textual repr: removeCollectionSponsor() + function removeCollectionSponsor() external; + + /// Get current sponsor. + /// + /// @return Tuble with sponsor address and his substrate mirror. If there is no confirmed sponsor error "Contract has no sponsor" throw. + /// @dev EVM selector for this function is: 0x6ec0a9f1, + /// or in textual repr: collectionSponsor() + function collectionSponsor() external view returns (CrossAddress memory); + + /// Get current collection limits. + /// + /// @return Array of collection limits + /// @dev EVM selector for this function is: 0xf63bc572, + /// or in textual repr: collectionLimits() + function collectionLimits() external view returns (CollectionLimit[] memory); + + /// Set limits for the collection. + /// @dev Throws error if limit not found. + /// @param limit Some limit. + /// @dev EVM selector for this function is: 0x2316ee74, + /// or in textual repr: setCollectionLimit((uint8,(bool,uint256))) + function setCollectionLimit(CollectionLimit memory limit) external; + + /// Get contract address. + /// @dev EVM selector for this function is: 0xf6b4dfb4, + /// or in textual repr: contractAddress() + function contractAddress() external view returns (address); + + /// Add collection admin. + /// @param newAdmin Cross account administrator address. + /// @dev EVM selector for this function is: 0x859aa7d6, + /// or in textual repr: addCollectionAdminCross((address,uint256)) + function addCollectionAdminCross(CrossAddress memory newAdmin) external; + + /// Remove collection admin. + /// @param admin Cross account administrator address. + /// @dev EVM selector for this function is: 0x6c0cd173, + /// or in textual repr: removeCollectionAdminCross((address,uint256)) + function removeCollectionAdminCross(CrossAddress memory admin) external; + + // /// Add collection admin. + // /// @param newAdmin Address of the added administrator. + // /// @dev EVM selector for this function is: 0x92e462c7, + // /// or in textual repr: addCollectionAdmin(address) + // function addCollectionAdmin(address newAdmin) external; + + // /// Remove collection admin. + // /// + // /// @param admin Address of the removed administrator. + // /// @dev EVM selector for this function is: 0xfafd7b42, + // /// or in textual repr: removeCollectionAdmin(address) + // function removeCollectionAdmin(address admin) external; + + /// Toggle accessibility of collection nesting. + /// + /// @param enable If "true" degenerates to nesting: 'Owner' else to nesting: 'Disabled' + /// @dev EVM selector for this function is: 0x112d4586, + /// or in textual repr: setCollectionNesting(bool) + function setCollectionNesting(bool enable) external; + + /// Toggle accessibility of collection nesting. + /// + /// @param enable If "true" degenerates to nesting: {OwnerRestricted: [1, 2, 3]} else to nesting: 'Disabled' + /// @param collections Addresses of collections that will be available for nesting. + /// @dev EVM selector for this function is: 0x64872396, + /// or in textual repr: setCollectionNesting(bool,address[]) + function setCollectionNesting(bool enable, address[] memory collections) external; + + /// Returns nesting for a collection + /// @dev EVM selector for this function is: 0x22d25bfe, + /// or in textual repr: collectionNestingRestrictedCollectionIds() + function collectionNestingRestrictedCollectionIds() external view returns (CollectionNesting memory); + + /// Returns permissions for a collection + /// @dev EVM selector for this function is: 0x5b2eaf4b, + /// or in textual repr: collectionNestingPermissions() + function collectionNestingPermissions() external view returns (CollectionNestingPermission[] memory); + + /// Set the collection access method. + /// @param mode Access mode + /// @dev EVM selector for this function is: 0x41835d4c, + /// or in textual repr: setCollectionAccess(uint8) + function setCollectionAccess(AccessMode mode) external; + + /// Checks that user allowed to operate with collection. + /// + /// @param user User address to check. + /// @dev EVM selector for this function is: 0x91b6df49, + /// or in textual repr: allowlistedCross((address,uint256)) + function allowlistedCross(CrossAddress memory user) external view returns (bool); + + // /// Add the user to the allowed list. + // /// + // /// @param user Address of a trusted user. + // /// @dev EVM selector for this function is: 0x67844fe6, + // /// or in textual repr: addToCollectionAllowList(address) + // function addToCollectionAllowList(address user) external; + + /// Add user to allowed list. + /// + /// @param user User cross account address. + /// @dev EVM selector for this function is: 0xa0184a3a, + /// or in textual repr: addToCollectionAllowListCross((address,uint256)) + function addToCollectionAllowListCross(CrossAddress memory user) external; + + // /// Remove the user from the allowed list. + // /// + // /// @param user Address of a removed user. + // /// @dev EVM selector for this function is: 0x85c51acb, + // /// or in textual repr: removeFromCollectionAllowList(address) + // function removeFromCollectionAllowList(address user) external; + + /// Remove user from allowed list. + /// + /// @param user User cross account address. + /// @dev EVM selector for this function is: 0x09ba452a, + /// or in textual repr: removeFromCollectionAllowListCross((address,uint256)) + function removeFromCollectionAllowListCross(CrossAddress memory user) external; + + /// Switch permission for minting. + /// + /// @param mode Enable if "true". + /// @dev EVM selector for this function is: 0x00018e84, + /// or in textual repr: setCollectionMintMode(bool) + function setCollectionMintMode(bool mode) external; + + // /// Check that account is the owner or admin of the collection + // /// + // /// @param user account to verify + // /// @return "true" if account is the owner or admin + // /// @dev EVM selector for this function is: 0x9811b0c7, + // /// or in textual repr: isOwnerOrAdmin(address) + // function isOwnerOrAdmin(address user) external view returns (bool); + + /// Check that account is the owner or admin of the collection + /// + /// @param user User cross account to verify + /// @return "true" if account is the owner or admin + /// @dev EVM selector for this function is: 0x3e75a905, + /// or in textual repr: isOwnerOrAdminCross((address,uint256)) + function isOwnerOrAdminCross(CrossAddress memory user) external view returns (bool); + + /// Returns collection type + /// + /// @return `Fungible` or `NFT` or `ReFungible` + /// @dev EVM selector for this function is: 0xd34b55b8, + /// or in textual repr: uniqueCollectionType() + function uniqueCollectionType() external view returns (string memory); + + /// Get collection owner. + /// + /// @return Tuble with sponsor address and his substrate mirror. + /// If address is canonical then substrate mirror is zero and vice versa. + /// @dev EVM selector for this function is: 0xdf727d3b, + /// or in textual repr: collectionOwner() + function collectionOwner() external view returns (CrossAddress memory); + + // /// Changes collection owner to another account + // /// + // /// @dev Owner can be changed only by current owner + // /// @param newOwner new owner account + // /// @dev EVM selector for this function is: 0x4f53e226, + // /// or in textual repr: changeCollectionOwner(address) + // function changeCollectionOwner(address newOwner) external; + + /// Get collection administrators + /// + /// @return Vector of tuples with admins address and his substrate mirror. + /// If address is canonical then substrate mirror is zero and vice versa. + /// @dev EVM selector for this function is: 0x5813216b, + /// or in textual repr: collectionAdmins() + function collectionAdmins() external view returns (CrossAddress[] memory); + + /// Changes collection owner to another account + /// + /// @dev Owner can be changed only by current owner + /// @param newOwner new owner cross account + /// @dev EVM selector for this function is: 0x6496c497, + /// or in textual repr: changeCollectionOwnerCross((address,uint256)) + function changeCollectionOwnerCross(CrossAddress memory newOwner) external; +} + +/// Cross account struct +struct CrossAddress { + address eth; + uint256 sub; +} + +/// Ethereum representation of `AccessMode` (see [`up_data_structs::AccessMode`]). +enum AccessMode { + /// Access grant for owner and admins. Used as default. + Normal, + /// Like a [`Normal`](AccessMode::Normal) but also users in allow list. + AllowList +} + +/// Ethereum representation of `NestingPermissions` (see [`up_data_structs::NestingPermissions`]) field. +struct CollectionNestingPermission { + CollectionPermissionField field; + bool value; +} + +/// Ethereum representation of `NestingPermissions` (see [`up_data_structs::NestingPermissions`]) fields as an enumeration. +enum CollectionPermissionField { + /// Owner of token can nest tokens under it. + TokenOwner, + /// Admin of token collection can nest tokens under token. + CollectionAdmin +} + +/// Nested collections. +struct CollectionNesting { + bool token_owner; + uint256[] ids; +} + +/// [`CollectionLimits`](up_data_structs::CollectionLimits) field representation for EVM. +struct CollectionLimit { + CollectionLimitField field; + OptionUint256 value; +} + +/// Optional value +struct OptionUint256 { + /// Shows the status of accessibility of value + bool status; + /// Actual value if `status` is true + uint256 value; +} + +/// [`CollectionLimits`](up_data_structs::CollectionLimits) fields representation for EVM. +enum CollectionLimitField { + /// How many tokens can a user have on one account. + AccountTokenOwnership, + /// How many bytes of data are available for sponsorship. + SponsoredDataSize, + /// In any case, chain default: [`SponsoringRateLimit::SponsoringDisabled`] + SponsoredDataRateLimit, + /// How many tokens can be mined into this collection. + TokenLimit, + /// Timeouts for transfer sponsoring. + SponsorTransferTimeout, + /// Timeout for sponsoring an approval in passed blocks. + SponsorApproveTimeout, + /// Whether the collection owner of the collection can send tokens (which belong to other users). + OwnerCanTransfer, + /// Can the collection owner burn other people's tokens. + OwnerCanDestroy, + /// Is it possible to send tokens from this collection between users. + TransferEnabled +} + +/// Ethereum representation of collection [`PropertyKey`](up_data_structs::PropertyKey) and [`PropertyValue`](up_data_structs::PropertyValue). +struct Property { + string key; + bytes value; +} + +/// @dev the ERC-165 identifier for this interface is 0x85d7dea6 +interface ERC20UniqueExtensions is Dummy, ERC165 { + /// @dev Function to check the amount of tokens that an owner allowed to a spender. + /// @param owner crossAddress The address which owns the funds. + /// @param spender crossAddress The address which will spend the funds. + /// @return A uint256 specifying the amount of tokens still available for the spender. + /// @dev EVM selector for this function is: 0xe0af4bd7, + /// or in textual repr: allowanceCross((address,uint256),(address,uint256)) + function allowanceCross(CrossAddress memory owner, CrossAddress memory spender) external view returns (uint256); + + /// @notice A description for the collection. + /// @dev EVM selector for this function is: 0x7284e416, + /// or in textual repr: description() + function description() external view returns (string memory); + + /// @dev EVM selector for this function is: 0x269e6158, + /// or in textual repr: mintCross((address,uint256),uint256) + function mintCross(CrossAddress memory to, uint256 amount) external returns (bool); + + /// @dev EVM selector for this function is: 0x0ecd0ab0, + /// or in textual repr: approveCross((address,uint256),uint256) + function approveCross(CrossAddress memory spender, uint256 amount) external returns (bool); + + // /// Burn tokens from account + // /// @dev Function that burns an `amount` of the tokens of a given account, + // /// deducting from the sender's allowance for said account. + // /// @param from The account whose tokens will be burnt. + // /// @param amount The amount that will be burnt. + // /// @dev EVM selector for this function is: 0x79cc6790, + // /// or in textual repr: burnFrom(address,uint256) + // function burnFrom(address from, uint256 amount) external returns (bool); + + /// Burn tokens from account + /// @dev Function that burns an `amount` of the tokens of a given account, + /// deducting from the sender's allowance for said account. + /// @param from The account whose tokens will be burnt. + /// @param amount The amount that will be burnt. + /// @dev EVM selector for this function is: 0xbb2f5a58, + /// or in textual repr: burnFromCross((address,uint256),uint256) + function burnFromCross(CrossAddress memory from, uint256 amount) external returns (bool); + + /// Mint tokens for multiple accounts. + /// @param amounts array of pairs of account address and amount + /// @dev EVM selector for this function is: 0x1acf2d55, + /// or in textual repr: mintBulk((address,uint256)[]) + function mintBulk(AmountForAddress[] memory amounts) external returns (bool); + + /// @dev EVM selector for this function is: 0x2ada85ff, + /// or in textual repr: transferCross((address,uint256),uint256) + function transferCross(CrossAddress memory to, uint256 amount) external returns (bool); + + /// @dev EVM selector for this function is: 0xd5cf430b, + /// or in textual repr: transferFromCross((address,uint256),(address,uint256),uint256) + function transferFromCross( + CrossAddress memory from, + CrossAddress memory to, + uint256 amount + ) external returns (bool); + + /// @notice Returns collection helper contract address + /// @dev EVM selector for this function is: 0x1896cce6, + /// or in textual repr: collectionHelperAddress() + function collectionHelperAddress() external view returns (address); +} + +struct AmountForAddress { + address to; + uint256 amount; +} + +/// @dev the ERC-165 identifier for this interface is 0x40c10f19 +interface ERC20Mintable is Dummy, ERC165 { + /// Mint tokens for `to` account. + /// @param to account that will receive minted tokens + /// @param amount amount of tokens to mint + /// @dev EVM selector for this function is: 0x40c10f19, + /// or in textual repr: mint(address,uint256) + function mint(address to, uint256 amount) external returns (bool); +} + +/// @dev inlined interface +interface ERC20Events { + event Transfer(address indexed from, address indexed to, uint256 value); + event Approval(address indexed owner, address indexed spender, uint256 value); +} + +/// @dev the ERC-165 identifier for this interface is 0x942e8b22 +interface ERC20 is Dummy, ERC165, ERC20Events { + /// @dev EVM selector for this function is: 0x06fdde03, + /// or in textual repr: name() + function name() external view returns (string memory); + + /// @dev EVM selector for this function is: 0x95d89b41, + /// or in textual repr: symbol() + function symbol() external view returns (string memory); + + /// @dev EVM selector for this function is: 0x18160ddd, + /// or in textual repr: totalSupply() + function totalSupply() external view returns (uint256); + + /// @dev EVM selector for this function is: 0x313ce567, + /// or in textual repr: decimals() + function decimals() external view returns (uint8); + + /// @dev EVM selector for this function is: 0x70a08231, + /// or in textual repr: balanceOf(address) + function balanceOf(address owner) external view returns (uint256); + + /// @dev EVM selector for this function is: 0xa9059cbb, + /// or in textual repr: transfer(address,uint256) + function transfer(address to, uint256 amount) external returns (bool); + + /// @dev EVM selector for this function is: 0x23b872dd, + /// or in textual repr: transferFrom(address,address,uint256) + function transferFrom( + address from, + address to, + uint256 amount + ) external returns (bool); + + /// @dev EVM selector for this function is: 0x095ea7b3, + /// or in textual repr: approve(address,uint256) + function approve(address spender, uint256 amount) external returns (bool); + + /// @dev EVM selector for this function is: 0xdd62ed3e, + /// or in textual repr: allowance(address,address) + function allowance(address owner, address spender) external view returns (uint256); +} + +interface UniqueFungible is Dummy, ERC165, ERC20, ERC20Mintable, ERC20UniqueExtensions, Collection {}