difftreelog
refactor use new selector macros
in: master
1 file changed
pallets/nft/src/eth/mod.rsdiffbeforeafterboth646465 Ok(match method_id {65 Ok(match method_id {66 // function name() external view returns (string memory)66 // function name() external view returns (string memory)67 0x06fdde03 => {67 fn_selector!(name()) => {68 let name = collection.name.iter()68 let name = collection.name.iter()69 .map(|&e| e.try_into().ok() as Option<u8>)69 .map(|&e| e.try_into().ok() as Option<u8>)70 .collect::<Option<Vec<u8>>>()70 .collect::<Option<Vec<u8>>>()73 crate::abi_encode!(memory(&name))73 crate::abi_encode!(memory(&name))74 }74 }75 // function symbol() external view returns (string memory)75 // function symbol() external view returns (string memory)76 0x95d89b41 => {76 fn_selector!(symbol()) => {77 let name = collection.token_prefix.iter()77 let name = collection.token_prefix.iter()78 .map(|&e| e.is_ascii_uppercase().then(|| e))78 .map(|&e| e.is_ascii_uppercase().then(|| e))79 .collect::<Option<Vec<u8>>>()79 .collect::<Option<Vec<u8>>>()82 crate::abi_encode!(memory(&name))82 crate::abi_encode!(memory(&name))83 }83 }84 // function decimals() external view returns (uint8 decimals)84 // function decimals() external view returns (uint8 decimals)85 0x313ce567 if erc20 => {85 fn_selector!(decimals()) if erc20 => {86 if let CollectionMode::Fungible(decimals) = &collection.mode {86 if let CollectionMode::Fungible(decimals) = &collection.mode {87 crate::abi_encode!(uint8(*decimals))87 crate::abi_encode!(uint8(*decimals))88 } else {88 } else {89 unreachable!()89 unreachable!()90 } 90 }91 }91 }92 // function totalSupply() external view returns (uint256)92 // function totalSupply() external view returns (uint256)93 0x18160ddd if erc20 || erc721 => {93 fn_selector!(totalSupply()) if erc20 || erc721 => {94 // TODO: can't be implemented, as we don't track total amount of fungibles94 // TODO: can't be implemented, as we don't track total amount of fungibles95 crate::abi_encode!(uint256(0))95 crate::abi_encode!(uint256(0))96 }96 }97 // function balanceOf(address account) external view returns (uint256)97 // function balanceOf(address account) external view returns (uint256)98 0x70a08231 if erc20 || erc721 => {98 fn_selector!(balanceOf(address)) if erc20 || erc721 => {99 crate::abi_decode!(input, account: address);99 crate::abi_decode!(input, account: address);100 let account = T::EvmAddressMapping::into_account_id(account);100 let account = T::EvmAddressMapping::into_account_id(account);101 let balance = <Balance<T>>::get(collection.id, account);101 let balance = <Balance<T>>::get(collection.id, account);102 crate::abi_encode!(uint256(balance))102 crate::abi_encode!(uint256(balance))103 }103 }104 // function ownerOf(uint256 tokenId) external view returns (address)104 // function ownerOf(uint256 tokenId) external view returns (address)105 0x6352211e if erc721 => {105 fn_selector!(ownerOf(uint256)) if erc721 => {106 crate::abi_decode!(input, token_id: uint256);106 crate::abi_decode!(input, token_id: uint256);107 let token_id: u32 = token_id.try_into().map_err(|_| "bad token id")?;107 let token_id: u32 = token_id.try_into().map_err(|_| "bad token id")?;108108111 crate::abi_encode!(address(token.owner.as_eth().clone()))111 crate::abi_encode!(address(token.owner.as_eth().clone()))112 }112 }113 // function transfer(address recipient, uint256 amount) external returns (bool) {113 // function transfer(address recipient, uint256 amount) external returns (bool) {114 0xa9059cbb if erc20 => {114 fn_selector!(transfer(address, uint256)) if erc20 => {115 crate::abi_decode!(input, recipient: address, amount: uint256);115 crate::abi_decode!(input, recipient: address, amount: uint256);116 let sender = T::CrossAccountId::from_eth(sender);116 let sender = T::CrossAccountId::from_eth(sender);117 let recipient = T::CrossAccountId::from_eth(recipient);117 let recipient = T::CrossAccountId::from_eth(recipient);126126127 crate::abi_encode!(bool(true))127 crate::abi_encode!(bool(true))128 } 128 }129 // function transfer(address recipient, uint256 token) external returns (bool) {129130 0xa9059cbb if erc721 => {130 fn_selector!(transfer(address, uint256)) if erc721 => {131 crate::abi_decode!(input, recipient: address, token_id: uint256);131 crate::abi_decode!(input, recipient: address, token_id: uint256);132 let sender = T::CrossAccountId::from_eth(sender);132 let sender = T::CrossAccountId::from_eth(sender);133 let recipient = T::CrossAccountId::from_eth(recipient);133 let recipient = T::CrossAccountId::from_eth(recipient);145 }145 }146146 // function allowance(address owner, address spender) external view returns (uint256)147 // function allowance(address owner, address spender) external view returns (uint256)147 0xdd62ed3e if erc20 => {148 fn_selector!(allowance(address, address)) if erc20 => {148 crate::abi_decode!(input, owner: address, spender: address);149 crate::abi_decode!(input, owner: address, spender: address);149 let owner = T::EvmAddressMapping::into_account_id(owner);150 let owner = T::EvmAddressMapping::into_account_id(owner);150 let spender = T::EvmAddressMapping::into_account_id(spender);151 let spender = T::EvmAddressMapping::into_account_id(spender);154 // function approve(address spender, uint256 amount) external returns (bool)155 // function approve(address spender, uint256 amount) external returns (bool)155 // FIXME: All current implementations resets amount to specified value, ours - adds it156 // FIXME: All current implementations resets amount to specified value, ours - adds it156 // FIXME: Our implementation doesn't handle resets (approve with zero amount)157 // FIXME: Our implementation doesn't handle resets (approve with zero amount)157 0x095ea7b3 if erc20 => {158 fn_selector!(approve(address, uint256)) if erc20 => {158 crate::abi_decode!(input, spender: address, amount: uint256);159 crate::abi_decode!(input, spender: address, amount: uint256);159 let sender = T::CrossAccountId::from_eth(sender);160 let sender = T::CrossAccountId::from_eth(sender);160 let spender = T::CrossAccountId::from_eth(spender);161 let spender = T::CrossAccountId::from_eth(spender);170 crate::abi_encode!(bool(true))171 crate::abi_encode!(bool(true))171 }172 }172 // function approve(address approved, uint256 tokenId) external payable173 // function approve(address approved, uint256 tokenId) external payable173 0x095ea7b3 if erc721 => {174 fn_selector!(approve(address, uint256)) if erc721 => {174 crate::abi_decode!(input, approved: address, token_id: uint256);175 crate::abi_decode!(input, approved: address, token_id: uint256);175 let sender = T::CrossAccountId::from_eth(sender);176 let sender = T::CrossAccountId::from_eth(sender);176 let approved = T::CrossAccountId::from_eth(approved);177 let approved = T::CrossAccountId::from_eth(approved);186 crate::abi_encode!()187 crate::abi_encode!()187 }188 }188 // function transferFrom(address sender, address recipient, uint256 amount) external returns (bool)189 // function transferFrom(address sender, address recipient, uint256 amount) external returns (bool)189 0x23b872dd if erc20 => {190 fn_selector!(transferFrom(address, address, uint256)) if erc20 => {190 crate::abi_decode!(input, from: address, recipient: address, amount: uint256);191 crate::abi_decode!(input, from: address, recipient: address, amount: uint256);191 let sender = T::CrossAccountId::from_eth(sender);192 let sender = T::CrossAccountId::from_eth(sender);192 let from = T::CrossAccountId::from_eth(from);193 let from = T::CrossAccountId::from_eth(from);204 crate::abi_encode!(bool(true))205 crate::abi_encode!(bool(true))205 }206 }206 // function transferFrom(address from, address to, uint256 tokenId) external payable207 // function transferFrom(address from, address to, uint256 tokenId) external payable207 0x23b872dd if erc721 => {208 fn_selector!(transferFrom(address, address, uint256)) if erc721 => {208 crate::abi_decode!(input, from: address, recipient: address, token_id: uint256);209 crate::abi_decode!(input, from: address, recipient: address, token_id: uint256);209 let sender = T::CrossAccountId::from_eth(sender);210 let sender = T::CrossAccountId::from_eth(sender);210 let from = T::CrossAccountId::from_eth(from);211 let from = T::CrossAccountId::from_eth(from);223 crate::abi_encode!()224 crate::abi_encode!()224 }225 }225 // function supportsInterface(bytes4 interfaceID) public pure returns (bool)226 // function supportsInterface(bytes4 interfaceID) public pure returns (bool)226 0x01ffc9a7 => {227 fn_selector!(supportsInterface(bytes4)) => {227 crate::abi_decode!(input, interface_id: uint32);228 crate::abi_decode!(input, interface_id: uint32);228 let supports = match interface_id {229 let supports = match interface_id {229 // ERC165230 // ERC165274 }275 }275}276}276277277/// event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);278pub const TRANSFER_NFT_TOPIC: H256 = H256(hex_literal::hex!("ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"));278pub const TRANSFER_NFT_TOPIC: H256 = event_topic!(Transfer(address, address, uint256));279/// event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);280pub const APPROVAL_NFT_TOPIC: H256 = H256(hex_literal::hex!("8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925"));279pub const APPROVAL_NFT_TOPIC: H256 = event_topic!(Approval(address, address, uint256));281// TODO: event ApprovalForAll(address indexed owner, address indexed operator, bool approved);280// TODO: event ApprovalForAll(address indexed owner, address indexed operator, bool approved);282281283/// event Transfer(address indexed from, address indexed to, uint256 amount);284pub const TRANSFER_FUNGIBLE_TOPIC: H256 = H256(hex_literal::hex!("ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"));282pub const TRANSFER_FUNGIBLE_TOPIC: H256 = event_topic!(Transfer(address, address, uint256));285/// event Approval(address indexed owner, address indexed approved, uint256 amount);286pub const APPROVAL_FUNGIBLE_TOPIC: H256 = H256(hex_literal::hex!("8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925"));283pub const APPROVAL_FUNGIBLE_TOPIC: H256 = event_topic!(Approval(address, address, uint256));287284288pub fn address_to_topic(address: &H160) -> H256 {285pub fn address_to_topic(address: &H160) -> H256 {289 let mut output = [0; 32];286 let mut output = [0; 32];