difftreelog
fix erc165 expect_selector
in: master
3 files changed
crates/evm-coder/procedural/src/solidity_interface.rsdiffbeforeafterboth811 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;870878871 let call_sub = self879 let call_sub = self936 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;946947 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 });938952939 quote! {953 quote! {940 #(954 #(953 )*967 )*954 }968 }969970 #expect_selector971955 impl #gen_ref #call_name #gen_ref {972 impl #gen_ref #call_name #gen_ref {956 #(973 #(957 #consts974 #consts958 )*975 )*959 /// Return this call ERC165 selector976 /// Return this call ERC165 selector960 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)*pallets/refungible/src/erc.rsdiffbeforeafterboth295 MintingFinished {},295 MintingFinished {},296}296}297297298/// @title ERC-721 Non-Fungible Token Standard, optional metadata extension299/// @dev See https://eips.ethereum.org/EIPS/eip-721298#[solidity_interface(name = ERC721Metadata)]300#[solidity_interface(name = ERC721Metadata, expect_selector = 0x5b5e139f)]299impl<T: Config> RefungibleHandle<T>301impl<T: Config> RefungibleHandle<T>300where302where301 T::AccountId: From<[u8; 32]> + AsRef<[u8; 32]>,303 T::AccountId: From<[u8; 32]> + AsRef<[u8; 32]>,364366365/// @title ERC-721 Non-Fungible Token Standard, optional enumeration extension367/// @title ERC-721 Non-Fungible Token Standard, optional enumeration extension366/// @dev See https://eips.ethereum.org/EIPS/eip-721368/// @dev See https://eips.ethereum.org/EIPS/eip-721367#[solidity_interface(name = ERC721Enumerable)]369#[solidity_interface(name = ERC721Enumerable, expect_selector = 0x780e9d63)]368impl<T: Config> RefungibleHandle<T> {370impl<T: Config> RefungibleHandle<T> {369 /// @notice Enumerate valid RFTs371 /// @notice Enumerate valid RFTs370 /// @param index A counter less than `totalSupply()`372 /// @param index A counter less than `totalSupply()`391393392/// @title ERC-721 Non-Fungible Token Standard394/// @title ERC-721 Non-Fungible Token Standard393/// @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md395/// @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md394#[solidity_interface(name = ERC721, events(ERC721Events))]396#[solidity_interface(name = ERC721, events(ERC721Events), expect_selector = 0x80ac58cd)]395impl<T: Config> RefungibleHandle<T> {397impl<T: Config> RefungibleHandle<T> {396 /// @notice Count all RFTs assigned to an owner398 /// @notice Count all RFTs assigned to an owner397 /// @dev RFTs assigned to the zero address are considered invalid, and this399 /// @dev RFTs assigned to the zero address are considered invalid, and this422 }424 }423425424 /// @dev Not implemented426 /// @dev Not implemented427 #[solidity(rename_selector = "safeTransferFrom")]425 fn safe_transfer_from_with_data(428 fn safe_transfer_from_with_data(426 &mut self,429 &mut self,427 _from: address,430 _from: address,434 }437 }435438436 /// @dev Not implemented439 /// @dev Not implemented440 #[solidity(rename_selector = "safeTransferFrom")]437 fn safe_transfer_from(441 fn safe_transfer_from(438 &mut self,442 &mut self,439 _from: address,443 _from: address,518 Ok(<Pallet<T>>::allowance_for_all(self, &owner, &operator))522 Ok(<Pallet<T>>::allowance_for_all(self, &owner, &operator))519 }523 }520521 /// @notice Returns collection helper contract address522 fn collection_helper_address(&self) -> Result<address> {523 Ok(T::ContractAddress::get())524 }525}524}526525527/// Returns amount of pieces of `token` that `owner` have526/// Returns amount of pieces of `token` that `owner` have1117 ))1116 ))1118 }1117 }11181119 /// @notice Returns collection helper contract address1120 fn collection_helper_address(&self) -> Result<address> {1121 Ok(T::ContractAddress::get())1122 }1119}1123}112011241121#[solidity_interface(1125#[solidity_interface(runtime/common/ethereum/sponsoring/refungible.rsdiffbeforeafterboth140 | OwnerOf { .. }140 | OwnerOf { .. }141 | GetApproved { .. }141 | GetApproved { .. }142 | IsApprovedForAll { .. }142 | IsApprovedForAll { .. } => None,143 | CollectionHelperAddress => None,144143145 // Not sponsored144 // Not sponsored146 SafeTransferFromWithData { .. }145 SafeTransferFromWithData { .. }231 | Properties { .. }230 | Properties { .. }232 | NextTokenId231 | NextTokenId233 | TokenContractAddress { .. } => None,232 | TokenContractAddress { .. }233 | CollectionHelperAddress => None,234234235 // Not sponsored235 // Not sponsored236 BurnFrom { .. }236 BurnFrom { .. }