--- a/Cargo.lock +++ b/Cargo.lock @@ -5467,9 +5467,9 @@ [[package]] name = "once_cell" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b10983b38c53aebdf33f542c6275b0f58a238129d00c4ae0e6fb59738d783ca" +checksum = "7709cef83f0c1f58f666e746a08b21e0085f7440fa6a29cc194d68aac97a4225" [[package]] name = "opal-runtime" @@ -6830,7 +6830,6 @@ "parity-scale-codec 3.1.2", "scale-info", "serde", - "serde-json-core", "sp-core", "sp-io", "sp-runtime", @@ -10735,16 +10734,6 @@ ] [[package]] -name = "serde-json-core" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8014aeea272bca0f0779778d43253f2f3375b414185b30e6ecc4d3e4a9994781" -dependencies = [ - "ryu", - "serde", -] - -[[package]] name = "serde_derive" version = "1.0.137" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -12025,9 +12014,9 @@ [[package]] name = "target-lexicon" -version = "0.12.3" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7fa7e55043acb85fca6b3c01485a2eeb6b69c5d21002e273c79e465f43b7ac1" +checksum = "c02424087780c9b71cc96799eaeddff35af2bc513278cda5c99fc1f5d026d3c1" [[package]] name = "tempfile" --- a/Makefile +++ b/Makefile @@ -15,16 +15,13 @@ CONTRACT_HELPERS_STUBS=./pallets/evm-contract-helpers/src/stubs/ CONTRACT_HELPERS_ABI=./tests/src/eth/util/contractHelpersAbi.json -COLLECTION_STUBS=./pallets/unique/src/eth/stubs/ -COLLECTION_ABI=./tests/src/eth/collectionAbi.json - COLLECTION_HELPER_STUBS=$(COLLECTION_STUBS) COLLECTION_HELPER_ABI=./tests/src/eth/collectionHelperAbi.json TESTS_API=./tests/src/eth/api/ .PHONY: regenerate_solidity -regenerate_solidity: UniqueFungible.sol UniqueNFT.sol ContractHelpers.sol Collection.sol CollectionHelper.sol +regenerate_solidity: UniqueFungible.sol UniqueNFT.sol ContractHelpers.sol CollectionHelper.sol UniqueFungible.sol: PACKAGE=pallet-fungible NAME=erc::gen_iface OUTPUT=$(TESTS_API)/$@ ./.maintain/scripts/generate_sol.sh @@ -38,10 +35,6 @@ PACKAGE=pallet-evm-contract-helpers NAME=eth::contract_helpers_iface OUTPUT=$(TESTS_API)/$@ ./.maintain/scripts/generate_sol.sh PACKAGE=pallet-evm-contract-helpers NAME=eth::contract_helpers_impl OUTPUT=$(CONTRACT_HELPERS_STUBS)/$@ ./.maintain/scripts/generate_sol.sh -Collection.sol: - PACKAGE=pallet-unique NAME=eth::evm_collection::collection_iface OUTPUT=$(TESTS_API)/$@ ./.maintain/scripts/generate_sol.sh - PACKAGE=pallet-unique NAME=eth::evm_collection::collection_impl OUTPUT=$(COLLECTION_STUBS)/$@ ./.maintain/scripts/generate_sol.sh - CollectionHelper.sol: PACKAGE=pallet-unique NAME=eth::evm_collection::collection_helper_iface OUTPUT=$(TESTS_API)/$@ ./.maintain/scripts/generate_sol.sh PACKAGE=pallet-unique NAME=eth::evm_collection::collection_helper_impl OUTPUT=$(COLLECTION_HELPER_STUBS)/$@ ./.maintain/scripts/generate_sol.sh @@ -58,15 +51,11 @@ INPUT=$(CONTRACT_HELPERS_STUBS)/$< OUTPUT=$(CONTRACT_HELPERS_STUBS)/ContractHelpers.raw ./.maintain/scripts/compile_stub.sh INPUT=$(CONTRACT_HELPERS_STUBS)/$< OUTPUT=$(CONTRACT_HELPERS_ABI) ./.maintain/scripts/generate_abi.sh -Collection: Collection.sol - INPUT=$(COLLECTION_STUBS)/$< OUTPUT=$(COLLECTION_STUBS)/Collection.raw ./.maintain/scripts/compile_stub.sh - INPUT=$(COLLECTION_STUBS)/$< OUTPUT=$(COLLECTION_ABI) ./.maintain/scripts/generate_abi.sh - CollectionHelper: CollectionHelper.sol INPUT=$(COLLECTION_HELPER_STUBS)/$< OUTPUT=$(COLLECTION_HELPER_STUBS)/CollectionHelper.raw ./.maintain/scripts/compile_stub.sh INPUT=$(COLLECTION_HELPER_STUBS)/$< OUTPUT=$(COLLECTION_HELPER_ABI) ./.maintain/scripts/generate_abi.sh -evm_stubs: UniqueFungible UniqueNFT ContractHelpers Collection CollectionHelper +evm_stubs: UniqueFungible UniqueNFT ContractHelpers CollectionHelper .PHONY: _bench _bench: --- a/pallets/common/src/erc.rs +++ b/pallets/common/src/erc.rs @@ -14,9 +14,9 @@ // You should have received a copy of the GNU General Public License // along with Unique Network. If not, see . -use evm_coder::{solidity_interface, types::*, execution::Result}; +use evm_coder::{solidity_interface, types::*, execution::{Result, Error}}; pub use pallet_evm::{PrecompileOutput, PrecompileResult, account::CrossAccountId}; -use pallet_evm_coder_substrate::dispatch_to_evm; +use pallet_evm_coder_substrate::{dispatch_to_evm, SubstrateRecorder}; use sp_core::{H160, U256}; use sp_std::vec::Vec; use up_data_structs::Property; @@ -31,7 +31,7 @@ fn call(self, source: &H160, input: &[u8], value: U256) -> Option; } -#[solidity_interface(name = "CollectionProperties")] +#[solidity_interface(name = "Collection")] impl CollectionHandle { fn set_collection_property(&mut self, caller: caller, key: string, value: bytes) -> Result<()> { let caller = T::CrossAccountId::from_eth(caller); @@ -64,4 +64,70 @@ Ok(prop.to_vec()) } + + fn eth_set_sponsor( + &mut self, + caller: caller, + sponsor: address, + ) -> Result { + check_is_owner(caller, self)?; + + let sponsor = T::CrossAccountId::from_eth(sponsor); + self.set_sponsor(sponsor.as_sub().clone()); + save(self); + Ok(()) + } + + fn eth_confirm_sponsorship(&mut self, caller: caller) -> Result { + let caller = T::CrossAccountId::from_eth(caller); + if !self.confirm_sponsorship(caller.as_sub()) { + return Err(Error::Revert("Caller is not set as sponsor".into())); + } + save(self); + Ok(()) + } + + fn set_limits( + &self, + caller: caller, + limits_json: string, + ) -> Result { + // let mut collection = collection_from_address::(self.contract_address(caller).unwrap(), self.1.gas_left())?; + // check_is_owner(caller, &collection)?; + + // let limits = serde_json_core::from_str(limits_json.as_ref()) + // .map_err(|e| Error::Revert(format!("Parse JSON error: {}", e)))?; + // collection.limits = limits.0; + // collection.save().map_err(pallet_evm_coder_substrate::dispatch_to_evm::)?; + Ok(()) + } + + fn contract_address(&self, _caller: caller) -> Result
{ + Ok(crate::eth::collection_id_to_address(self.id)) + } +} + +fn collection_from_address( + collection_address: address, + gas_limit: u64 +) -> Result> { + let collection_id = crate::eth::map_eth_to_id(&collection_address) + .ok_or(Error::Revert("Contract is not an unique collection".into()))?; + let recorder = >::new(gas_limit); + let collection = + CollectionHandle::new_with_recorder(collection_id, recorder) + .ok_or(Error::Revert("Create collection handle error".into()))?; + Ok(collection) +} + +fn check_is_owner(caller: caller, collection: &CollectionHandle) -> Result<()> { + let caller = T::CrossAccountId::from_eth(caller); + collection + .check_is_owner(&caller) + .map_err(pallet_evm_coder_substrate::dispatch_to_evm::)?; + Ok(()) } + +fn save(collection: &CollectionHandle) { + >::insert(collection.id, collection.collection.clone()); +} \ No newline at end of file --- a/pallets/common/src/lib.rs +++ b/pallets/common/src/lib.rs @@ -20,7 +20,7 @@ use core::ops::{Deref, DerefMut}; use pallet_evm_coder_substrate::{SubstrateRecorder, WithRecorder}; -use sp_std::{vec::Vec, rc::Rc}; +use sp_std::vec::Vec; use pallet_evm::account::CrossAccountId; use frame_support::{ dispatch::{DispatchErrorWithPostInfo, DispatchResultWithPostInfo, Weight, PostDispatchInfo}, --- a/pallets/fungible/src/erc.rs +++ b/pallets/fungible/src/erc.rs @@ -24,7 +24,7 @@ use pallet_evm::account::CrossAccountId; use pallet_evm_coder_substrate::{call, dispatch_to_evm}; use pallet_structure::{SelfWeightOf as StructureWeight, weights::WeightInfo as _}; -use pallet_common::{CollectionHandle, erc::CollectionPropertiesCall}; +use pallet_common::{CollectionHandle, erc::CollectionCall}; use crate::{ Allowance, Balance, Config, FungibleHandle, Pallet, SelfWeightOf, TotalSupply, @@ -150,7 +150,7 @@ is( ERC20, ERC20UniqueExtensions, - via("CollectionHandle", common_mut, CollectionProperties) + via("CollectionHandle", common_mut, Collection) ) )] impl FungibleHandle {} --- a/pallets/nonfungible/src/erc.rs +++ b/pallets/nonfungible/src/erc.rs @@ -26,7 +26,7 @@ use sp_core::{H160, U256}; use sp_std::vec::Vec; use pallet_common::{ - erc::{CommonEvmHandler, PrecompileResult, CollectionPropertiesCall}, + erc::{CommonEvmHandler, PrecompileResult, CollectionCall}, CollectionHandle, }; use pallet_evm::account::CrossAccountId; @@ -513,7 +513,7 @@ ERC721UniqueExtensions, ERC721Mintable, ERC721Burnable, - via("CollectionHandle", common_mut, CollectionProperties), + via("CollectionHandle", common_mut, Collection), TokenProperties, ) )] --- a/pallets/nonfungible/src/stubs/UniqueNFT.sol +++ b/pallets/nonfungible/src/stubs/UniqueNFT.sol @@ -51,6 +51,67 @@ event MintingFinished(); } +// Selector: 38e33c60 +contract Collection is Dummy, ERC165 { + // Selector: setCollectionProperty(string,bytes) 2f073f66 + function setCollectionProperty(string memory key, bytes memory value) + public + { + require(false, stub_error); + key; + value; + dummy = 0; + } + + // Selector: deleteCollectionProperty(string) 7b7debce + function deleteCollectionProperty(string memory key) public { + require(false, stub_error); + key; + dummy = 0; + } + + // Throws error if key not found + // + // Selector: collectionProperty(string) cf24fd6d + function collectionProperty(string memory key) + public + view + returns (bytes memory) + { + require(false, stub_error); + key; + dummy; + return hex""; + } + + // Selector: ethSetSponsor(address) 8f9af356 + function ethSetSponsor(address sponsor) public { + require(false, stub_error); + sponsor; + dummy = 0; + } + + // Selector: ethConfirmSponsorship() a8580d1a + function ethConfirmSponsorship() public { + require(false, stub_error); + dummy = 0; + } + + // Selector: setLimits(string) 72cb345d + function setLimits(string memory limitsJson) public view { + require(false, stub_error); + limitsJson; + dummy; + } + + // Selector: contractAddress() f6b4dfb4 + function contractAddress() public view returns (address) { + require(false, stub_error); + dummy; + return 0x0000000000000000000000000000000000000000; + } +} + // Selector: 41369377 contract TokenProperties is Dummy, ERC165 { // Selector: setTokenPropertyPermission(string,bool,bool,bool) 222d97fa @@ -327,40 +388,6 @@ require(false, stub_error); dummy; return 0; - } -} - -// Selector: 9b5e29c5 -contract CollectionProperties is Dummy, ERC165 { - // Selector: setCollectionProperty(string,bytes) 2f073f66 - function setCollectionProperty(string memory key, bytes memory value) - public - { - require(false, stub_error); - key; - value; - dummy = 0; - } - - // Selector: deleteCollectionProperty(string) 7b7debce - function deleteCollectionProperty(string memory key) public { - require(false, stub_error); - key; - dummy = 0; - } - - // Throws error if key not found - // - // Selector: collectionProperty(string) cf24fd6d - function collectionProperty(string memory key) - public - view - returns (bytes memory) - { - require(false, stub_error); - key; - dummy; - return hex""; } } @@ -423,6 +450,6 @@ ERC721UniqueExtensions, ERC721Mintable, ERC721Burnable, - CollectionProperties, + Collection, TokenProperties {} --- a/pallets/unique/Cargo.toml +++ b/pallets/unique/Cargo.toml @@ -20,7 +20,6 @@ std = [ 'codec/std', 'serde/std', - 'serde-json-core/std', 'frame-support/std', 'frame-system/std', 'pallet-evm/std', @@ -42,10 +41,6 @@ default-features = false features = ['derive'] version = '1.0.130' - -[dependencies.serde-json-core] -default-features = false -version = "0.4" [dependencies.ethereum] version = "0.12.0" --- a/pallets/unique/src/eth/mod.rs +++ b/pallets/unique/src/eth/mod.rs @@ -110,17 +110,6 @@ } } - struct EvmCollection(H160, SubstrateRecorder); - impl WithRecorder for EvmCollection { - fn recorder(&self) -> &SubstrateRecorder { - &self.1 - } - - fn into_recorder(self) -> SubstrateRecorder { - self.1 - } - } - #[derive(ToLog)] pub enum EthCollectionEvent { CollectionCreated { @@ -129,78 +118,7 @@ #[indexed] collection_id: address, }, - } - - #[solidity_interface(name = "Collection")] - impl EvmCollection { - fn set_sponsor( - &self, - caller: caller, - sponsor: address, - ) -> Result { - let mut collection = collection_from_address::(self.contract_address(caller).unwrap(), self.1.gas_left())?; - check_is_owner(caller, &collection)?; - - let sponsor = T::CrossAccountId::from_eth(sponsor); - collection.set_sponsor(sponsor.as_sub().clone()); - collection.save().map_err(pallet_evm_coder_substrate::dispatch_to_evm::)?; - Ok(()) - } - - fn confirm_sponsorship(&self, caller: caller) -> Result { - let mut collection = collection_from_address::(self.contract_address(caller).unwrap(), self.1.gas_left())?; - let caller = T::CrossAccountId::from_eth(caller); - if !collection.confirm_sponsorship(caller.as_sub()) { - return Err(Error::Revert("Caller is not set as sponsor".into())); - } - collection.save().map_err(pallet_evm_coder_substrate::dispatch_to_evm::)?; - Ok(()) - } - - fn set_limits( - &self, - caller: caller, - limits_json: string, - ) -> Result { - let mut collection = collection_from_address::(self.contract_address(caller).unwrap(), self.1.gas_left())?; - check_is_owner(caller, &collection)?; - - let limits = serde_json_core::from_str(limits_json.as_ref()) - .map_err(|e| Error::Revert(format!("Parse JSON error: {}", e)))?; - collection.limits = limits.0; - collection.save().map_err(pallet_evm_coder_substrate::dispatch_to_evm::)?; - Ok(()) - } - - fn contract_address(&self, _caller: caller) -> Result
{ - Ok(self.0) - } - } - - fn error_feild_too_long(feild: &str, bound: u32) -> Error { - Error::Revert(format!("{} is too long. Max length is {}.", feild, bound)) } - - fn collection_from_address( - collection_address: address, - gas_limit: u64 - ) -> Result> { - let collection_id = pallet_common::eth::map_eth_to_id(&collection_address) - .ok_or(Error::Revert("Contract is not an unique collection".into()))?; - let recorder = >::new(gas_limit); - let collection = - pallet_common::CollectionHandle::new_with_recorder(collection_id, recorder) - .ok_or(Error::Revert("Create collection handle error".into()))?; - Ok(collection) - } - - fn check_is_owner(caller: caller, collection: &CollectionHandle) -> Result<()> { - let caller = T::CrossAccountId::from_eth(caller); - collection - .check_is_owner(&caller) - .map_err(pallet_evm_coder_substrate::dispatch_to_evm::)?; - Ok(()) - } pub struct CollectionHelperOnMethodCall(PhantomData<*const T>); impl OnMethodCall for CollectionHelperOnMethodCall { @@ -235,38 +153,8 @@ generate_stubgen!(collection_helper_impl, CollectionHelperCall<()>, true); generate_stubgen!(collection_helper_iface, CollectionHelperCall<()>, false); - - pub struct CollectionOnMethodCall(PhantomData<*const T>); - impl OnMethodCall for CollectionOnMethodCall { - fn is_reserved(contract: &sp_core::H160) -> bool { - contract == &T::ContractAddress::get() - } - - fn is_used(contract: &sp_core::H160) -> bool { - contract == &T::ContractAddress::get() - } - - fn call( - source: &sp_core::H160, - target: &sp_core::H160, - gas_left: u64, - input: &[u8], - value: sp_core::U256, - ) -> Option { - if !pallet_common::eth::is_collection(target) { - return None; - } - let helpers = EvmCollection::(*target, SubstrateRecorder::::new(gas_left)); - pallet_evm_coder_substrate::call(*source, helpers, value, input) - } - - fn get_code(contract: &sp_core::H160) -> Option> { - (contract == &T::ContractAddress::get()) - .then(|| include_bytes!("./stubs/Collection.raw").to_vec()) - } + fn error_feild_too_long(feild: &str, bound: u32) -> Error { + Error::Revert(format!("{} is too long. Max length is {}.", feild, bound)) } - - generate_stubgen!(collection_impl, CollectionCall<()>, true); - generate_stubgen!(collection_iface, CollectionCall<()>, false); } --- a/pallets/unique/src/eth/stubs/Collection.sol +++ /dev/null @@ -1,52 +0,0 @@ -// SPDX-License-Identifier: OTHER -// This code is automatically generated - -pragma solidity >=0.8.0 <0.9.0; - -// 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; - } -} - -// Selector: 15cc740e -contract Collection is Dummy, ERC165 { - // Selector: setSponsor(address) 59753fb1 - function setSponsor(address sponsor) public view { - require(false, stub_error); - sponsor; - dummy; - } - - // Selector: confirmSponsorship() c8c6a056 - function confirmSponsorship() public view { - require(false, stub_error); - dummy; - } - - // Selector: setLimits(string) 72cb345d - function setLimits(string memory limitsJson) public view { - require(false, stub_error); - limitsJson; - dummy; - } - - // Selector: contractAddress() f6b4dfb4 - function contractAddress() public view returns (address) { - require(false, stub_error); - dummy; - return 0x0000000000000000000000000000000000000000; - } -} --- a/runtime/opal/src/lib.rs +++ b/runtime/opal/src/lib.rs @@ -307,7 +307,6 @@ pallet_evm_migration::OnMethodCall, pallet_evm_contract_helpers::HelpersOnMethodCall, CollectionDispatchT, - evm_collection::CollectionOnMethodCall, evm_collection::CollectionHelperOnMethodCall, ); type OnCreate = pallet_evm_contract_helpers::HelpersOnCreate; --- a/runtime/quartz/src/lib.rs +++ b/runtime/quartz/src/lib.rs @@ -286,7 +286,6 @@ pallet_evm_migration::OnMethodCall, pallet_evm_contract_helpers::HelpersOnMethodCall, CollectionDispatchT, - evm_collection::CollectionOnMethodCall, evm_collection::CollectionHelperOnMethodCall, ); type OnCreate = pallet_evm_contract_helpers::HelpersOnCreate; --- a/runtime/unique/src/lib.rs +++ b/runtime/unique/src/lib.rs @@ -291,7 +291,6 @@ pallet_evm_migration::OnMethodCall, pallet_evm_contract_helpers::HelpersOnMethodCall, CollectionDispatchT, - evm_collection::CollectionOnMethodCall, evm_collection::CollectionHelperOnMethodCall, ); type OnCreate = pallet_evm_contract_helpers::HelpersOnCreate; --- a/tests/src/eth/api/UniqueNFT.sol +++ b/tests/src/eth/api/UniqueNFT.sol @@ -42,6 +42,36 @@ event MintingFinished(); } +// Selector: 38e33c60 +interface Collection is Dummy, ERC165 { + // Selector: setCollectionProperty(string,bytes) 2f073f66 + function setCollectionProperty(string memory key, bytes memory value) + external; + + // Selector: deleteCollectionProperty(string) 7b7debce + function deleteCollectionProperty(string memory key) external; + + // Throws error if key not found + // + // Selector: collectionProperty(string) cf24fd6d + function collectionProperty(string memory key) + external + view + returns (bytes memory); + + // Selector: ethSetSponsor(address) 8f9af356 + function ethSetSponsor(address sponsor) external; + + // Selector: ethConfirmSponsorship() a8580d1a + function ethConfirmSponsorship() external; + + // Selector: setLimits(string) 72cb345d + function setLimits(string memory limitsJson) external view; + + // Selector: contractAddress() f6b4dfb4 + function contractAddress() external view returns (address); +} + // Selector: 41369377 interface TokenProperties is Dummy, ERC165 { // Selector: setTokenPropertyPermission(string,bool,bool,bool) 222d97fa @@ -191,24 +221,6 @@ function totalSupply() external view returns (uint256); } -// Selector: 9b5e29c5 -interface CollectionProperties is Dummy, ERC165 { - // Selector: setCollectionProperty(string,bytes) 2f073f66 - function setCollectionProperty(string memory key, bytes memory value) - external; - - // Selector: deleteCollectionProperty(string) 7b7debce - function deleteCollectionProperty(string memory key) external; - - // Throws error if key not found - // - // Selector: collectionProperty(string) cf24fd6d - function collectionProperty(string memory key) - external - view - returns (bytes memory); -} - // Selector: d74d154f interface ERC721UniqueExtensions is Dummy, ERC165 { // Selector: transfer(address,uint256) a9059cbb @@ -240,6 +252,6 @@ ERC721UniqueExtensions, ERC721Mintable, ERC721Burnable, - CollectionProperties, + Collection, TokenProperties {} --- a/tests/src/eth/collectionAbi.json +++ /dev/null @@ -1,43 +0,0 @@ -[ - { - "inputs": [], - "name": "confirmSponsorship", - "outputs": [], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "contractAddress", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "string", "name": "limitsJson", "type": "string" } - ], - "name": "setLimits", - "outputs": [], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "sponsor", "type": "address" } - ], - "name": "setSponsor", - "outputs": [], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "bytes4", "name": "interfaceID", "type": "bytes4" } - ], - "name": "supportsInterface", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "view", - "type": "function" - } -] --- a/tests/src/eth/createCollection.test.ts +++ b/tests/src/eth/createCollection.test.ts @@ -88,13 +88,13 @@ const {collectionIdAddress, collectionId} = await getCollectionAddressFromResult(api, result); const sponsor = await createEthAccountWithBalance(api, web3); const collectionEvm = evmCollection(web3, owner, collectionIdAddress); - result = await collectionEvm.methods.setSponsor(sponsor).send(); + result = await collectionEvm.methods.ethSetSponsor(sponsor).send(); let collectionSub = (await getDetailedCollectionInfo(api, collectionId))!; expect(collectionSub.sponsorship.isUnconfirmed).to.be.true; expect(collectionSub.sponsorship.asUnconfirmed.toHuman()).to.be.eq(evmToAddress(sponsor)); - await expect(collectionEvm.methods.confirmSponsorship().call()).to.be.rejectedWith('Caller is not set as sponsor'); + await expect(collectionEvm.methods.ethConfirmSponsorship().call()).to.be.rejectedWith('Caller is not set as sponsor'); const sponsorCollection = evmCollection(web3, sponsor, collectionIdAddress); - await sponsorCollection.methods.confirmSponsorship().send(); + await sponsorCollection.methods.ethConfirmSponsorship().send(); collectionSub = (await getDetailedCollectionInfo(api, collectionId))!; expect(collectionSub.sponsorship.isConfirmed).to.be.true; expect(collectionSub.sponsorship.asConfirmed.toHuman()).to.be.eq(evmToAddress(sponsor)); --- a/tests/src/eth/nonFungibleAbi.json +++ b/tests/src/eth/nonFungibleAbi.json @@ -126,6 +126,13 @@ "type": "function" }, { + "inputs": [], + "name": "contractAddress", + "outputs": [{ "internalType": "address", "name": "", "type": "address" }], + "stateMutability": "view", + "type": "function" + }, + { "inputs": [{ "internalType": "string", "name": "key", "type": "string" }], "name": "deleteCollectionProperty", "outputs": [], @@ -144,6 +151,22 @@ }, { "inputs": [], + "name": "ethConfirmSponsorship", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { "internalType": "address", "name": "sponsor", "type": "address" } + ], + "name": "ethSetSponsor", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], "name": "finishMinting", "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], "stateMutability": "nonpayable", @@ -302,6 +325,15 @@ }, { "inputs": [ + { "internalType": "string", "name": "limitsJson", "type": "string" } + ], + "name": "setLimits", + "outputs": [], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "key", "type": "string" }, { "internalType": "bytes", "name": "value", "type": "bytes" } --- a/tests/src/eth/util/helpers.ts +++ b/tests/src/eth/util/helpers.ts @@ -28,7 +28,7 @@ import config from '../../config'; import privateKey from '../../substrate/privateKey'; import contractHelpersAbi from './contractHelpersAbi.json'; -import collectionAbi from '../collectionAbi.json'; +import collectionAbi from '../nonFungibleAbi.json'; import collectionHelperAbi from '../collectionHelperAbi.json'; import getBalance from '../../substrate/get-balance'; import waitNewBlocks from '../../substrate/wait-new-blocks';