git.delta.rocks / unique-network / refs/commits / 0f0494df1f4f

difftreelog

fix erc165 expect_selector

Yaroslav Bolyukin2023-01-12parent: #9cba02d.patch.diff
in: master

3 files changed

modifiedcrates/evm-coder/procedural/src/solidity_interface.rsdiffbeforeafterboth
811 let list = generics_list(gen);811 let list = generics_list(gen);
812 quote! { <#list> }812 quote! { <#list> }
813}813}
814fn generics_stub(gen: &Generics) -> proc_macro2::TokenStream {
815 if gen.params.is_empty() {
816 return quote! {};
817 }
818 let params = (0..gen.params.len()).map(|_| quote! {()});
819 quote! {<#(#params,)*>}
820}
814fn generics_data(gen: &Generics) -> proc_macro2::TokenStream {821fn generics_data(gen: &Generics) -> proc_macro2::TokenStream {
815 let list = generics_list(gen);822 let list = generics_list(gen);
816 if gen.params.len() == 1 {823 if gen.params.len() == 1 {
866 let generics = self.generics;873 let generics = self.generics;
867 let gen_ref = generics_reference(&generics);874 let gen_ref = generics_reference(&generics);
868 let gen_data = generics_data(&generics);875 let gen_data = generics_data(&generics);
876 let gen_stub = generics_stub(&generics);
869 let gen_where = &generics.where_clause;877 let gen_where = &generics.where_clause;
870878
871 let call_sub = self879 let call_sub = self
936 let solidity_events_idents = self.info.events.0.iter().map(|is| is.name.clone());944 let solidity_events_idents = self.info.events.0.iter().map(|is| is.name.clone());
937 let docs = &self.docs;945 let docs = &self.docs;
946
947 let expect_selector = self.info.expect_selector.map(|s| {
948 quote! {
949 const _: () = assert!(#s == u32::from_be_bytes(<#call_name #gen_stub>::interface_id()), "selector mismatch, review contained function selectors");
950 }
951 });
938952
939 quote! {953 quote! {
940 #(954 #(
953 )*967 )*
954 }968 }
969
970 #expect_selector
971
955 impl #gen_ref #call_name #gen_ref {972 impl #gen_ref #call_name #gen_ref {
956 #(973 #(
957 #consts974 #consts
958 )*975 )*
959 /// Return this call ERC165 selector976 /// Return this call ERC165 selector
960 pub fn interface_id() -> ::evm_coder::types::bytes4 {977 pub const fn interface_id() -> ::evm_coder::types::bytes4 {
961 let mut interface_id = 0;978 let mut interface_id = 0;
962 #(#interface_id)*979 #(#interface_id)*
963 #(#inline_interface_id)*980 #(#inline_interface_id)*
modifiedpallets/refungible/src/erc.rsdiffbeforeafterboth
--- a/pallets/refungible/src/erc.rs
+++ b/pallets/refungible/src/erc.rs
@@ -295,7 +295,9 @@
 	MintingFinished {},
 }
 
-#[solidity_interface(name = ERC721Metadata)]
+/// @title ERC-721 Non-Fungible Token Standard, optional metadata extension
+/// @dev See https://eips.ethereum.org/EIPS/eip-721
+#[solidity_interface(name = ERC721Metadata, expect_selector = 0x5b5e139f)]
 impl<T: Config> RefungibleHandle<T>
 where
 	T::AccountId: From<[u8; 32]> + AsRef<[u8; 32]>,
@@ -364,7 +366,7 @@
 
 /// @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 /// @dev See https://eips.ethereum.org/EIPS/eip-721
-#[solidity_interface(name = ERC721Enumerable)]
+#[solidity_interface(name = ERC721Enumerable, expect_selector = 0x780e9d63)]
 impl<T: Config> RefungibleHandle<T> {
 	/// @notice Enumerate valid RFTs
 	/// @param index A counter less than `totalSupply()`
@@ -391,7 +393,7 @@
 
 /// @title ERC-721 Non-Fungible Token Standard
 /// @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
-#[solidity_interface(name = ERC721, events(ERC721Events))]
+#[solidity_interface(name = ERC721, events(ERC721Events), expect_selector = 0x80ac58cd)]
 impl<T: Config> RefungibleHandle<T> {
 	/// @notice Count all RFTs assigned to an owner
 	/// @dev RFTs assigned to the zero address are considered invalid, and this
@@ -422,6 +424,7 @@
 	}
 
 	/// @dev Not implemented
+	#[solidity(rename_selector = "safeTransferFrom")]
 	fn safe_transfer_from_with_data(
 		&mut self,
 		_from: address,
@@ -434,6 +437,7 @@
 	}
 
 	/// @dev Not implemented
+	#[solidity(rename_selector = "safeTransferFrom")]
 	fn safe_transfer_from(
 		&mut self,
 		_from: address,
@@ -517,11 +521,6 @@
 
 		Ok(<Pallet<T>>::allowance_for_all(self, &owner, &operator))
 	}
-
-	/// @notice Returns collection helper contract address
-	fn collection_helper_address(&self) -> Result<address> {
-		Ok(T::ContractAddress::get())
-	}
 }
 
 /// Returns amount of pieces of `token` that `owner` have
@@ -1116,6 +1115,11 @@
 			token.try_into().map_err(|_| "token id overflow")?,
 		))
 	}
+
+	/// @notice Returns collection helper contract address
+	fn collection_helper_address(&self) -> Result<address> {
+		Ok(T::ContractAddress::get())
+	}
 }
 
 #[solidity_interface(
modifiedruntime/common/ethereum/sponsoring/refungible.rsdiffbeforeafterboth
--- a/runtime/common/ethereum/sponsoring/refungible.rs
+++ b/runtime/common/ethereum/sponsoring/refungible.rs
@@ -139,8 +139,7 @@
 			| BalanceOf { .. }
 			| OwnerOf { .. }
 			| GetApproved { .. }
-			| IsApprovedForAll { .. }
-			| CollectionHelperAddress => None,
+			| IsApprovedForAll { .. } => None,
 
 			// Not sponsored
 			SafeTransferFromWithData { .. }
@@ -230,7 +229,8 @@
 			| CrossOwnerOf { .. }
 			| Properties { .. }
 			| NextTokenId
-			| TokenContractAddress { .. } => None,
+			| TokenContractAddress { .. }
+			| CollectionHelperAddress => None,
 
 			// Not sponsored
 			BurnFrom { .. }