From d3a59ede1ff6a0928996d75c21233883b147380f Mon Sep 17 00:00:00 2001 From: Trubnikov Sergey Date: Fri, 21 Apr 2023 07:22:35 +0000 Subject: [PATCH] feat: impl balance_of_cross --- --- a/pallets/balances-adapter/src/erc.rs +++ b/pallets/balances-adapter/src/erc.rs @@ -58,6 +58,7 @@ // self.consume_store_reads(1)?; Err("Approve not supported now".into()) } + fn balance_of(&self, owner: Address) -> Result { // self.consume_store_reads(1)?; let owner = T::CrossAccountId::from_eth(owner); @@ -141,6 +142,13 @@ where T::AccountId: From<[u8; 32]>, { + fn balance_of_cross(&self, owner: CrossAddress) -> Result { + // self.consume_store_reads(1)?; + let owner = owner.into_sub_cross_account::()?; + let balance = ::Currency::free_balance(owner.as_sub()); + Ok(balance.into()) + } + // #[weight(>::transfer())] fn transfer_cross(&mut self, caller: Caller, to: CrossAddress, amount: U256) -> Result { let caller = T::CrossAccountId::from_eth(caller); --- a/pallets/balances-adapter/src/stubs/UniqueNativeFungible.sol +++ b/pallets/balances-adapter/src/stubs/UniqueNativeFungible.sol @@ -17,8 +17,17 @@ } } -/// @dev the ERC-165 identifier for this interface is 0xff15c6f4 +/// @dev the ERC-165 identifier for this interface is 0x1313556c contract ERC20UniqueExtensions is Dummy, ERC165 { + /// @dev EVM selector for this function is: 0xec069398, + /// or in textual repr: balanceOfCross((address,uint256)) + function balanceOfCross(CrossAddress memory owner) public view returns (uint256) { + require(false, stub_error); + owner; + dummy; + return 0; + } + /// @dev EVM selector for this function is: 0x2ada85ff, /// or in textual repr: transferCross((address,uint256),uint256) function transferCross(CrossAddress memory to, uint256 amount) public returns (bool) { --- a/tests/src/eth/abi/nativeFungible.json +++ b/tests/src/eth/abi/nativeFungible.json @@ -79,6 +79,23 @@ "type": "function" }, { + "inputs": [ + { + "components": [ + { "internalType": "address", "name": "eth", "type": "address" }, + { "internalType": "uint256", "name": "sub", "type": "uint256" } + ], + "internalType": "struct CrossAddress", + "name": "owner", + "type": "tuple" + } + ], + "name": "balanceOfCross", + "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], + "stateMutability": "view", + "type": "function" + }, + { "inputs": [], "name": "decimals", "outputs": [{ "internalType": "uint8", "name": "", "type": "uint8" }], --- a/tests/src/eth/api/UniqueNativeFungible.sol +++ b/tests/src/eth/api/UniqueNativeFungible.sol @@ -12,8 +12,12 @@ function supportsInterface(bytes4 interfaceID) external view returns (bool); } -/// @dev the ERC-165 identifier for this interface is 0xff15c6f4 +/// @dev the ERC-165 identifier for this interface is 0x1313556c interface ERC20UniqueExtensions is Dummy, ERC165 { + /// @dev EVM selector for this function is: 0xec069398, + /// or in textual repr: balanceOfCross((address,uint256)) + function balanceOfCross(CrossAddress memory owner) external view returns (uint256); + /// @dev EVM selector for this function is: 0x2ada85ff, /// or in textual repr: transferCross((address,uint256),uint256) function transferCross(CrossAddress memory to, uint256 amount) external returns (bool); -- gitstuff