git.delta.rocks / unique-network / refs/commits / 2d71e7a206db

difftreelog

refactor use new selector macros

Yaroslav Bolyukin2021-05-31parent: #6d1d1e8.patch.diff
in: master

1 file changed

modifiedpallets/nft/src/eth/mod.rsdiffbeforeafterboth
6464
65 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 fungibles
95 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")?;
108108
111 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);
126126
127 crate::abi_encode!(bool(true))127 crate::abi_encode!(bool(true))
128 } 128 }
129 // function transfer(address recipient, uint256 token) external returns (bool) {129
130 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 }
146
146 // 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 it
156 // 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 payable
173 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 payable
207 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 // ERC165
274 }275 }
275}276}
276277
277/// 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);
282281
283/// 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));
287284
288pub 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];