git.delta.rocks / unique-network / refs/commits / 7d542e4157ec

difftreelog

refac: rename string -> String

Trubnikov Sergey2023-01-18parent: #a4ecd38.patch.diff
in: master

16 files changed

modifiedcrates/evm-coder/procedural/src/solidity_interface.rsdiffbeforeafterboth
--- a/crates/evm-coder/procedural/src/solidity_interface.rs
+++ b/crates/evm-coder/procedural/src/solidity_interface.rs
@@ -999,7 +999,7 @@
 						)*),
 					};
 
-					let mut out = ::evm_coder::types::string::new();
+					let mut out = ::evm_coder::types::String::new();
 					if #solidity_name.starts_with("Inline") {
 						out.push_str("/// @dev inlined interface\n");
 					}
modifiedcrates/evm-coder/procedural/src/to_log.rsdiffbeforeafterboth
--- a/crates/evm-coder/procedural/src/to_log.rs
+++ b/crates/evm-coder/procedural/src/to_log.rs
@@ -222,7 +222,7 @@
 							#solidity_functions,
 						)*),
 					};
-					let mut out = string::new();
+					let mut out = ::evm_coder::types::String::new();
 					out.push_str("/// @dev inlined interface\n");
 					let _ = interface.format(is_impl, &mut out, tc);
 					tc.collect(out);
modifiedcrates/evm-coder/src/abi/impls.rsdiffbeforeafterboth
--- a/crates/evm-coder/src/abi/impls.rs
+++ b/crates/evm-coder/src/abi/impls.rs
@@ -63,7 +63,7 @@
 impl_abi!(u128, uint128, false);
 impl_abi!(U256, uint256, false);
 impl_abi!(H160, address, false);
-impl_abi!(string, string, true);
+impl_abi!(String, string, true);
 
 impl_abi_writeable!(&str, string);
 
modifiedcrates/evm-coder/src/abi/mod.rsdiffbeforeafterboth
before · crates/evm-coder/src/abi/mod.rs
1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617//! Implementation of EVM RLP reader/writer1819#![allow(dead_code)]2021mod traits;22pub use traits::*;23mod impls;2425#[cfg(test)]26mod test;2728#[cfg(not(feature = "std"))]29use alloc::vec::Vec;30use evm_core::ExitError;31use primitive_types::{H160, U256};3233use crate::{34	execution::{Result, Error},35	types::*,36};3738const ABI_ALIGNMENT: usize = 32;3940/// View into RLP data, which provides method to read typed items from it41#[derive(Clone)]42pub struct AbiReader<'i> {43	buf: &'i [u8],44	subresult_offset: usize,45	offset: usize,46}47impl<'i> AbiReader<'i> {48	/// Start reading RLP buffer, assuming there is no padding bytes49	pub fn new(buf: &'i [u8]) -> Self {50		Self {51			buf,52			subresult_offset: 0,53			offset: 0,54		}55	}56	/// Start reading RLP buffer, parsing first 4 bytes as selector57	pub fn new_call(buf: &'i [u8]) -> Result<(Bytes4, Self)> {58		if buf.len() < 4 {59			return Err(Error::Error(ExitError::OutOfOffset));60		}61		let mut method_id = [0; 4];62		method_id.copy_from_slice(&buf[0..4]);6364		Ok((65			method_id,66			Self {67				buf,68				subresult_offset: 4,69				offset: 4,70			},71		))72	}7374	fn read_pad<const S: usize>(75		buf: &[u8],76		offset: usize,77		pad_start: usize,78		pad_end: usize,79		block_start: usize,80		block_end: usize,81	) -> Result<[u8; S]> {82		if buf.len() - offset < ABI_ALIGNMENT {83			return Err(Error::Error(ExitError::OutOfOffset));84		}85		let mut block = [0; S];86		let is_pad_zeroed = buf[pad_start..pad_end].iter().all(|&v| v == 0);87		if !is_pad_zeroed {88			return Err(Error::Error(ExitError::InvalidRange));89		}90		block.copy_from_slice(&buf[block_start..block_end]);91		Ok(block)92	}9394	fn read_padleft<const S: usize>(&mut self) -> Result<[u8; S]> {95		let offset = self.offset;96		self.offset += ABI_ALIGNMENT;97		Self::read_pad(98			self.buf,99			offset,100			offset,101			offset + ABI_ALIGNMENT - S,102			offset + ABI_ALIGNMENT - S,103			offset + ABI_ALIGNMENT,104		)105	}106107	fn read_padright<const S: usize>(&mut self) -> Result<[u8; S]> {108		let offset = self.offset;109		self.offset += ABI_ALIGNMENT;110		Self::read_pad(111			self.buf,112			offset,113			offset + S,114			offset + ABI_ALIGNMENT,115			offset,116			offset + S,117		)118	}119120	/// Read [`H160`] at current position, then advance121	pub fn address(&mut self) -> Result<H160> {122		Ok(H160(self.read_padleft()?))123	}124125	/// Read [`bool`] at current position, then advance126	pub fn bool(&mut self) -> Result<bool> {127		let data: [u8; 1] = self.read_padleft()?;128		match data[0] {129			0 => Ok(false),130			1 => Ok(true),131			_ => Err(Error::Error(ExitError::InvalidRange)),132		}133	}134135	/// Read [`[u8; 4]`] at current position, then advance136	pub fn bytes4(&mut self) -> Result<[u8; 4]> {137		self.read_padright()138	}139140	/// Read [`Vec<u8>`] at current position, then advance141	pub fn bytes(&mut self) -> Result<Vec<u8>> {142		let mut subresult = self.subresult(None)?;143		let length = subresult.uint32()? as usize;144		if subresult.buf.len() < subresult.offset + length {145			return Err(Error::Error(ExitError::OutOfOffset));146		}147		Ok(subresult.buf[subresult.offset..subresult.offset + length].into())148	}149150	/// Read [`string`] at current position, then advance151	pub fn string(&mut self) -> Result<string> {152		string::from_utf8(self.bytes()?).map_err(|_| Error::Error(ExitError::InvalidRange))153	}154155	/// Read [`u8`] at current position, then advance156	pub fn uint8(&mut self) -> Result<u8> {157		Ok(self.read_padleft::<1>()?[0])158	}159160	/// Read [`u32`] at current position, then advance161	pub fn uint32(&mut self) -> Result<u32> {162		Ok(u32::from_be_bytes(self.read_padleft()?))163	}164165	/// Read [`u128`] at current position, then advance166	pub fn uint128(&mut self) -> Result<u128> {167		Ok(u128::from_be_bytes(self.read_padleft()?))168	}169170	/// Read [`U256`] at current position, then advance171	pub fn uint256(&mut self) -> Result<U256> {172		let buf: [u8; 32] = self.read_padleft()?;173		Ok(U256::from_big_endian(&buf))174	}175176	/// Read [`u64`] at current position, then advance177	pub fn uint64(&mut self) -> Result<u64> {178		Ok(u64::from_be_bytes(self.read_padleft()?))179	}180181	/// Read [`usize`] at current position, then advance182	#[deprecated = "dangerous, as usize may have different width in wasm and native execution"]183	pub fn read_usize(&mut self) -> Result<usize> {184		Ok(usize::from_be_bytes(self.read_padleft()?))185	}186187	/// Slice recursive buffer, advance one word for buffer offset188	/// If `size` is [`None`] then [`Self::offset`] and [`Self::subresult_offset`] evals from [`Self::buf`].189	pub fn subresult(&mut self, size: Option<usize>) -> Result<AbiReader<'i>> {190		let subresult_offset = self.subresult_offset;191		let offset = if let Some(size) = size {192			self.offset += size;193			0194		} else {195			self.uint32()? as usize196		};197198		if offset + self.subresult_offset > self.buf.len() {199			return Err(Error::Error(ExitError::InvalidRange));200		}201202		let new_offset = offset + subresult_offset;203		Ok(AbiReader {204			buf: self.buf,205			subresult_offset: new_offset,206			offset: new_offset,207		})208	}209210	/// Notify about readed data portion.211	pub fn bytes_read(&mut self, size: usize) {212		self.subresult_offset += size;213	}214215	/// Is this parser reached end of buffer?216	pub fn is_finished(&self) -> bool {217		self.buf.len() == self.offset218	}219}220221/// Writer for RLP encoded data222#[derive(Default)]223pub struct AbiWriter {224	static_part: Vec<u8>,225	dynamic_part: Vec<(usize, AbiWriter)>,226	had_call: bool,227	is_dynamic: bool,228}229impl AbiWriter {230	/// Initialize internal buffers for output data, assuming no padding required231	pub fn new() -> Self {232		Self::default()233	}234235	/// Initialize internal buffers with data size236	pub fn new_dynamic(is_dynamic: bool) -> Self {237		Self {238			is_dynamic,239			..Default::default()240		}241	}242	/// Initialize internal buffers, inserting method selector at beginning243	pub fn new_call(method_id: u32) -> Self {244		let mut val = Self::new();245		val.static_part.extend(&method_id.to_be_bytes());246		val.had_call = true;247		val248	}249250	fn write_padleft(&mut self, block: &[u8]) {251		assert!(block.len() <= ABI_ALIGNMENT);252		self.static_part253			.extend(&[0; ABI_ALIGNMENT][0..ABI_ALIGNMENT - block.len()]);254		self.static_part.extend(block);255	}256257	fn write_padright(&mut self, block: &[u8]) {258		assert!(block.len() <= ABI_ALIGNMENT);259		self.static_part.extend(block);260		self.static_part261			.extend(&[0; ABI_ALIGNMENT][0..ABI_ALIGNMENT - block.len()]);262	}263264	/// Write [`H160`] to end of buffer265	pub fn address(&mut self, address: &H160) {266		self.write_padleft(&address.0)267	}268269	/// Write [`bool`] to end of buffer270	pub fn bool(&mut self, value: &bool) {271		self.write_padleft(&[if *value { 1 } else { 0 }])272	}273274	/// Write [`u8`] to end of buffer275	pub fn uint8(&mut self, value: &u8) {276		self.write_padleft(&[*value])277	}278279	/// Write [`u32`] to end of buffer280	pub fn uint32(&mut self, value: &u32) {281		self.write_padleft(&u32::to_be_bytes(*value))282	}283284	/// Write [`u64`] to end of buffer285	pub fn uint64(&mut self, value: &u64) {286		self.write_padleft(&u64::to_be_bytes(*value))287	}288289	/// Write [`u128`] to end of buffer290	pub fn uint128(&mut self, value: &u128) {291		self.write_padleft(&u128::to_be_bytes(*value))292	}293294	/// Write [`U256`] to end of buffer295	pub fn uint256(&mut self, value: &U256) {296		let mut out = [0; 32];297		value.to_big_endian(&mut out);298		self.write_padleft(&out)299	}300301	/// Write [`usize`] to end of buffer302	#[deprecated = "dangerous, as usize may have different width in wasm and native execution"]303	pub fn write_usize(&mut self, value: &usize) {304		self.write_padleft(&usize::to_be_bytes(*value))305	}306307	/// Append recursive data, writing pending offset at end of buffer308	pub fn write_subresult(&mut self, result: Self) {309		self.dynamic_part.push((self.static_part.len(), result));310		// Empty block, to be filled later311		self.write_padleft(&[]);312	}313314	fn memory(&mut self, value: &[u8]) {315		let mut sub = Self::new();316		sub.uint32(&(value.len() as u32));317		for chunk in value.chunks(ABI_ALIGNMENT) {318			sub.write_padright(chunk);319		}320		self.write_subresult(sub);321	}322323	/// Append recursive [`str`] at end of buffer324	pub fn string(&mut self, value: &str) {325		self.memory(value.as_bytes())326	}327328	/// Append recursive [`[u8]`] at end of buffer329	pub fn bytes(&mut self, value: &[u8]) {330		self.memory(value)331	}332333	/// Finish writer, concatenating all internal buffers334	pub fn finish(mut self) -> Vec<u8> {335		for (static_offset, part) in self.dynamic_part {336			let part_offset = self.static_part.len()337				- if self.had_call { 4 } else { 0 }338				- if self.is_dynamic { ABI_ALIGNMENT } else { 0 };339340			let encoded_dynamic_offset = usize::to_be_bytes(part_offset);341			let start = static_offset + ABI_ALIGNMENT - encoded_dynamic_offset.len();342			let stop = static_offset + ABI_ALIGNMENT;343			self.static_part[start..stop].copy_from_slice(&encoded_dynamic_offset);344			self.static_part.extend(part.finish())345		}346		self.static_part347	}348}
after · crates/evm-coder/src/abi/mod.rs
1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617//! Implementation of EVM RLP reader/writer1819#![allow(dead_code)]2021mod traits;22pub use traits::*;23mod impls;2425#[cfg(test)]26mod test;2728#[cfg(not(feature = "std"))]29use alloc::vec::Vec;30use evm_core::ExitError;31use primitive_types::{H160, U256};3233use crate::{34	execution::{Result, Error},35	types::*,36};3738const ABI_ALIGNMENT: usize = 32;3940/// View into RLP data, which provides method to read typed items from it41#[derive(Clone)]42pub struct AbiReader<'i> {43	buf: &'i [u8],44	subresult_offset: usize,45	offset: usize,46}47impl<'i> AbiReader<'i> {48	/// Start reading RLP buffer, assuming there is no padding bytes49	pub fn new(buf: &'i [u8]) -> Self {50		Self {51			buf,52			subresult_offset: 0,53			offset: 0,54		}55	}56	/// Start reading RLP buffer, parsing first 4 bytes as selector57	pub fn new_call(buf: &'i [u8]) -> Result<(Bytes4, Self)> {58		if buf.len() < 4 {59			return Err(Error::Error(ExitError::OutOfOffset));60		}61		let mut method_id = [0; 4];62		method_id.copy_from_slice(&buf[0..4]);6364		Ok((65			method_id,66			Self {67				buf,68				subresult_offset: 4,69				offset: 4,70			},71		))72	}7374	fn read_pad<const S: usize>(75		buf: &[u8],76		offset: usize,77		pad_start: usize,78		pad_end: usize,79		block_start: usize,80		block_end: usize,81	) -> Result<[u8; S]> {82		if buf.len() - offset < ABI_ALIGNMENT {83			return Err(Error::Error(ExitError::OutOfOffset));84		}85		let mut block = [0; S];86		let is_pad_zeroed = buf[pad_start..pad_end].iter().all(|&v| v == 0);87		if !is_pad_zeroed {88			return Err(Error::Error(ExitError::InvalidRange));89		}90		block.copy_from_slice(&buf[block_start..block_end]);91		Ok(block)92	}9394	fn read_padleft<const S: usize>(&mut self) -> Result<[u8; S]> {95		let offset = self.offset;96		self.offset += ABI_ALIGNMENT;97		Self::read_pad(98			self.buf,99			offset,100			offset,101			offset + ABI_ALIGNMENT - S,102			offset + ABI_ALIGNMENT - S,103			offset + ABI_ALIGNMENT,104		)105	}106107	fn read_padright<const S: usize>(&mut self) -> Result<[u8; S]> {108		let offset = self.offset;109		self.offset += ABI_ALIGNMENT;110		Self::read_pad(111			self.buf,112			offset,113			offset + S,114			offset + ABI_ALIGNMENT,115			offset,116			offset + S,117		)118	}119120	/// Read [`H160`] at current position, then advance121	pub fn address(&mut self) -> Result<H160> {122		Ok(H160(self.read_padleft()?))123	}124125	/// Read [`bool`] at current position, then advance126	pub fn bool(&mut self) -> Result<bool> {127		let data: [u8; 1] = self.read_padleft()?;128		match data[0] {129			0 => Ok(false),130			1 => Ok(true),131			_ => Err(Error::Error(ExitError::InvalidRange)),132		}133	}134135	/// Read [`[u8; 4]`] at current position, then advance136	pub fn bytes4(&mut self) -> Result<[u8; 4]> {137		self.read_padright()138	}139140	/// Read [`Vec<u8>`] at current position, then advance141	pub fn bytes(&mut self) -> Result<Vec<u8>> {142		let mut subresult = self.subresult(None)?;143		let length = subresult.uint32()? as usize;144		if subresult.buf.len() < subresult.offset + length {145			return Err(Error::Error(ExitError::OutOfOffset));146		}147		Ok(subresult.buf[subresult.offset..subresult.offset + length].into())148	}149150	/// Read [`string`] at current position, then advance151	pub fn string(&mut self) -> Result<String> {152		String::from_utf8(self.bytes()?).map_err(|_| Error::Error(ExitError::InvalidRange))153	}154155	/// Read [`u8`] at current position, then advance156	pub fn uint8(&mut self) -> Result<u8> {157		Ok(self.read_padleft::<1>()?[0])158	}159160	/// Read [`u32`] at current position, then advance161	pub fn uint32(&mut self) -> Result<u32> {162		Ok(u32::from_be_bytes(self.read_padleft()?))163	}164165	/// Read [`u128`] at current position, then advance166	pub fn uint128(&mut self) -> Result<u128> {167		Ok(u128::from_be_bytes(self.read_padleft()?))168	}169170	/// Read [`U256`] at current position, then advance171	pub fn uint256(&mut self) -> Result<U256> {172		let buf: [u8; 32] = self.read_padleft()?;173		Ok(U256::from_big_endian(&buf))174	}175176	/// Read [`u64`] at current position, then advance177	pub fn uint64(&mut self) -> Result<u64> {178		Ok(u64::from_be_bytes(self.read_padleft()?))179	}180181	/// Read [`usize`] at current position, then advance182	#[deprecated = "dangerous, as usize may have different width in wasm and native execution"]183	pub fn read_usize(&mut self) -> Result<usize> {184		Ok(usize::from_be_bytes(self.read_padleft()?))185	}186187	/// Slice recursive buffer, advance one word for buffer offset188	/// If `size` is [`None`] then [`Self::offset`] and [`Self::subresult_offset`] evals from [`Self::buf`].189	pub fn subresult(&mut self, size: Option<usize>) -> Result<AbiReader<'i>> {190		let subresult_offset = self.subresult_offset;191		let offset = if let Some(size) = size {192			self.offset += size;193			0194		} else {195			self.uint32()? as usize196		};197198		if offset + self.subresult_offset > self.buf.len() {199			return Err(Error::Error(ExitError::InvalidRange));200		}201202		let new_offset = offset + subresult_offset;203		Ok(AbiReader {204			buf: self.buf,205			subresult_offset: new_offset,206			offset: new_offset,207		})208	}209210	/// Notify about readed data portion.211	pub fn bytes_read(&mut self, size: usize) {212		self.subresult_offset += size;213	}214215	/// Is this parser reached end of buffer?216	pub fn is_finished(&self) -> bool {217		self.buf.len() == self.offset218	}219}220221/// Writer for RLP encoded data222#[derive(Default)]223pub struct AbiWriter {224	static_part: Vec<u8>,225	dynamic_part: Vec<(usize, AbiWriter)>,226	had_call: bool,227	is_dynamic: bool,228}229impl AbiWriter {230	/// Initialize internal buffers for output data, assuming no padding required231	pub fn new() -> Self {232		Self::default()233	}234235	/// Initialize internal buffers with data size236	pub fn new_dynamic(is_dynamic: bool) -> Self {237		Self {238			is_dynamic,239			..Default::default()240		}241	}242	/// Initialize internal buffers, inserting method selector at beginning243	pub fn new_call(method_id: u32) -> Self {244		let mut val = Self::new();245		val.static_part.extend(&method_id.to_be_bytes());246		val.had_call = true;247		val248	}249250	fn write_padleft(&mut self, block: &[u8]) {251		assert!(block.len() <= ABI_ALIGNMENT);252		self.static_part253			.extend(&[0; ABI_ALIGNMENT][0..ABI_ALIGNMENT - block.len()]);254		self.static_part.extend(block);255	}256257	fn write_padright(&mut self, block: &[u8]) {258		assert!(block.len() <= ABI_ALIGNMENT);259		self.static_part.extend(block);260		self.static_part261			.extend(&[0; ABI_ALIGNMENT][0..ABI_ALIGNMENT - block.len()]);262	}263264	/// Write [`H160`] to end of buffer265	pub fn address(&mut self, address: &H160) {266		self.write_padleft(&address.0)267	}268269	/// Write [`bool`] to end of buffer270	pub fn bool(&mut self, value: &bool) {271		self.write_padleft(&[if *value { 1 } else { 0 }])272	}273274	/// Write [`u8`] to end of buffer275	pub fn uint8(&mut self, value: &u8) {276		self.write_padleft(&[*value])277	}278279	/// Write [`u32`] to end of buffer280	pub fn uint32(&mut self, value: &u32) {281		self.write_padleft(&u32::to_be_bytes(*value))282	}283284	/// Write [`u64`] to end of buffer285	pub fn uint64(&mut self, value: &u64) {286		self.write_padleft(&u64::to_be_bytes(*value))287	}288289	/// Write [`u128`] to end of buffer290	pub fn uint128(&mut self, value: &u128) {291		self.write_padleft(&u128::to_be_bytes(*value))292	}293294	/// Write [`U256`] to end of buffer295	pub fn uint256(&mut self, value: &U256) {296		let mut out = [0; 32];297		value.to_big_endian(&mut out);298		self.write_padleft(&out)299	}300301	/// Write [`usize`] to end of buffer302	#[deprecated = "dangerous, as usize may have different width in wasm and native execution"]303	pub fn write_usize(&mut self, value: &usize) {304		self.write_padleft(&usize::to_be_bytes(*value))305	}306307	/// Append recursive data, writing pending offset at end of buffer308	pub fn write_subresult(&mut self, result: Self) {309		self.dynamic_part.push((self.static_part.len(), result));310		// Empty block, to be filled later311		self.write_padleft(&[]);312	}313314	fn memory(&mut self, value: &[u8]) {315		let mut sub = Self::new();316		sub.uint32(&(value.len() as u32));317		for chunk in value.chunks(ABI_ALIGNMENT) {318			sub.write_padright(chunk);319		}320		self.write_subresult(sub);321	}322323	/// Append recursive [`str`] at end of buffer324	pub fn string(&mut self, value: &str) {325		self.memory(value.as_bytes())326	}327328	/// Append recursive [`[u8]`] at end of buffer329	pub fn bytes(&mut self, value: &[u8]) {330		self.memory(value)331	}332333	/// Finish writer, concatenating all internal buffers334	pub fn finish(mut self) -> Vec<u8> {335		for (static_offset, part) in self.dynamic_part {336			let part_offset = self.static_part.len()337				- if self.had_call { 4 } else { 0 }338				- if self.is_dynamic { ABI_ALIGNMENT } else { 0 };339340			let encoded_dynamic_offset = usize::to_be_bytes(part_offset);341			let start = static_offset + ABI_ALIGNMENT - encoded_dynamic_offset.len();342			let stop = static_offset + ABI_ALIGNMENT;343			self.static_part[start..stop].copy_from_slice(&encoded_dynamic_offset);344			self.static_part.extend(part.finish())345		}346		self.static_part347	}348}
modifiedcrates/evm-coder/src/abi/test.rsdiffbeforeafterboth
--- a/crates/evm-coder/src/abi/test.rs
+++ b/crates/evm-coder/src/abi/test.rs
@@ -138,7 +138,7 @@
 
 #[test]
 fn encode_decode_vec_tuple_uint256_string() {
-	test_impl::<Vec<(U256, string)>>(
+	test_impl::<Vec<(U256, String)>>(
         0xdeadbeef,
         vec![
             (1.into(), "Test URI 0".to_string()),
@@ -261,7 +261,7 @@
 	let (call, mut decoder) = AbiReader::new_call(encoded_data).unwrap();
 	assert_eq!(call, u32::to_be_bytes(decoded_data.0));
 	let address = decoder.address().unwrap();
-	let data = <Vec<(U256, string)>>::abi_read(&mut decoder).unwrap();
+	let data = <Vec<(U256, String)>>::abi_read(&mut decoder).unwrap();
 	assert_eq!(data, decoded_data.1);
 
 	let mut writer = AbiWriter::new_call(decoded_data.0);
@@ -273,7 +273,7 @@
 
 #[test]
 fn encode_decode_vec_tuple_string_bytes() {
-	test_impl::<Vec<(string, bytes)>>(
+	test_impl::<Vec<(String, bytes)>>(
 		0xdeadbeef,
 		vec![
 			(
modifiedcrates/evm-coder/src/lib.rsdiffbeforeafterboth
--- a/crates/evm-coder/src/lib.rs
+++ b/crates/evm-coder/src/lib.rs
@@ -136,9 +136,9 @@
 	pub type Topic = H256;
 
 	#[cfg(not(feature = "std"))]
-	pub type string = ::alloc::string::String;
+	pub type String = ::alloc::string::String;
 	#[cfg(feature = "std")]
-	pub type string = ::std::string::String;
+	pub type String = ::std::string::String;
 
 	#[derive(Default, Debug, PartialEq, Eq, Clone)]
 	pub struct bytes(pub Vec<u8>);
modifiedcrates/evm-coder/src/solidity/impls.rsdiffbeforeafterboth
--- a/crates/evm-coder/src/solidity/impls.rs
+++ b/crates/evm-coder/src/solidity/impls.rs
@@ -29,7 +29,7 @@
 	U256 => "uint256" true = "0",
 	Bytes4 => "bytes4" true = "bytes4(0)",
 	H160 => "address" true = "0x0000000000000000000000000000000000000000",
-	string => "string" false = "\"\"",
+	String => "string" false = "\"\"",
 	bytes => "bytes" false = "hex\"\"",
 	bool => "bool" true = "false",
 }
@@ -72,10 +72,10 @@
 macro_rules! impl_tuples {
 	($($ident:ident)+) => {
 		impl<$($ident: SolidityTypeName + 'static),+> SolidityTupleTy for ($($ident,)+) {
-			fn fields(tc: &TypeCollector) -> Vec<string> {
+			fn fields(tc: &TypeCollector) -> Vec<String> {
 				let mut collected = Vec::with_capacity(Self::len());
 				$({
-					let mut out = string::new();
+					let mut out = String::new();
 					$ident::solidity_name(&mut out, tc).expect("no fmt error");
 					collected.push(out);
 				})*;
modifiedcrates/evm-coder/src/solidity/mod.rsdiffbeforeafterboth
--- a/crates/evm-coder/src/solidity/mod.rs
+++ b/crates/evm-coder/src/solidity/mod.rs
@@ -26,7 +26,7 @@
 mod impls;
 
 #[cfg(not(feature = "std"))]
-use alloc::{string::String, vec::Vec, collections::BTreeMap, format};
+use alloc::{vec::Vec, collections::BTreeMap, format};
 #[cfg(feature = "std")]
 use std::collections::BTreeMap;
 use core::{
@@ -42,16 +42,16 @@
 pub struct TypeCollector {
 	/// Code => id
 	/// id ordering is required to perform topo-sort on the resulting data
-	structs: RefCell<BTreeMap<string, usize>>,
-	anonymous: RefCell<BTreeMap<Vec<string>, usize>>,
-	// generic: RefCell<BTreeMap<string, usize>>,
+	structs: RefCell<BTreeMap<String, usize>>,
+	anonymous: RefCell<BTreeMap<Vec<String>, usize>>,
+	// generic: RefCell<BTreeMap<String, usize>>,
 	id: Cell<usize>,
 }
 impl TypeCollector {
 	pub fn new() -> Self {
 		Self::default()
 	}
-	pub fn collect(&self, item: string) {
+	pub fn collect(&self, item: String) {
 		let id = self.next_id();
 		self.structs.borrow_mut().insert(item, id);
 	}
@@ -84,7 +84,7 @@
 	pub fn collect_enum<T: SolidityEnumTy>(&self) -> String {
 		T::generate_solidity_interface(self)
 	}
-	pub fn finish(self) -> Vec<string> {
+	pub fn finish(self) -> Vec<String> {
 		let mut data = self.structs.into_inner().into_iter().collect::<Vec<_>>();
 		data.sort_by_key(|(_, id)| Reverse(*id));
 		data.into_iter().map(|(code, _)| code).collect()
modifiedpallets/common/src/erc.rsdiffbeforeafterboth
--- a/pallets/common/src/erc.rs
+++ b/pallets/common/src/erc.rs
@@ -94,7 +94,7 @@
 	/// @param value Propery value.
 	#[solidity(hide)]
 	#[weight(<SelfWeightOf<T>>::set_collection_properties(1))]
-	fn set_collection_property(&mut self, caller: caller, key: string, value: bytes) -> Result<()> {
+	fn set_collection_property(&mut self, caller: caller, key: String, value: bytes) -> Result<()> {
 		let caller = T::CrossAccountId::from_eth(caller);
 		let key = <Vec<u8>>::from(key)
 			.try_into()
@@ -130,7 +130,7 @@
 	/// @param key Property key.
 	#[solidity(hide)]
 	#[weight(<SelfWeightOf<T>>::delete_collection_properties(1))]
-	fn delete_collection_property(&mut self, caller: caller, key: string) -> Result<()> {
+	fn delete_collection_property(&mut self, caller: caller, key: String) -> Result<()> {
 		let caller = T::CrossAccountId::from_eth(caller);
 		let key = <Vec<u8>>::from(key)
 			.try_into()
@@ -143,7 +143,7 @@
 	///
 	/// @param keys Properties keys.
 	#[weight(<SelfWeightOf<T>>::delete_collection_properties(keys.len() as u32))]
-	fn delete_collection_properties(&mut self, caller: caller, keys: Vec<string>) -> Result<()> {
+	fn delete_collection_properties(&mut self, caller: caller, keys: Vec<String>) -> Result<()> {
 		let caller = T::CrossAccountId::from_eth(caller);
 		let keys = keys
 			.into_iter()
@@ -164,7 +164,7 @@
 	///
 	/// @param key Property key.
 	/// @return bytes The property corresponding to the key.
-	fn collection_property(&self, key: string) -> Result<bytes> {
+	fn collection_property(&self, key: String) -> Result<bytes> {
 		let key = <Vec<u8>>::from(key)
 			.try_into()
 			.map_err(|_| "key too large")?;
@@ -179,7 +179,7 @@
 	///
 	/// @param keys Properties keys. Empty keys for all propertyes.
 	/// @return Vector of properties key/value pairs.
-	fn collection_properties(&self, keys: Vec<string>) -> Result<Vec<eth::Property>> {
+	fn collection_properties(&self, keys: Vec<String>) -> Result<Vec<eth::Property>> {
 		let keys = keys
 			.into_iter()
 			.map(|key| {
@@ -616,7 +616,7 @@
 	/// Returns collection type
 	///
 	/// @return `Fungible` or `NFT` or `ReFungible`
-	fn unique_collection_type(&self) -> Result<string> {
+	fn unique_collection_type(&self) -> Result<String> {
 		let mode = match self.collection.mode {
 			CollectionMode::Fungible(_) => "Fungible",
 			CollectionMode::NFT => "NFT",
modifiedpallets/common/src/eth.rsdiffbeforeafterboth
--- a/pallets/common/src/eth.rs
+++ b/pallets/common/src/eth.rs
@@ -118,7 +118,7 @@
 /// Ethereum representation of collection [`PropertyKey`](up_data_structs::PropertyKey) and [`PropertyValue`](up_data_structs::PropertyValue).
 #[derive(Debug, Default, AbiCoder)]
 pub struct Property {
-	key: evm_coder::types::string,
+	key: evm_coder::types::String,
 	value: evm_coder::types::bytes,
 }
 
@@ -126,7 +126,7 @@
 	type Error = evm_coder::execution::Error;
 
 	fn try_from(from: up_data_structs::Property) -> Result<Self, Self::Error> {
-		let key = evm_coder::types::string::from_utf8(from.key.into())
+		let key = evm_coder::types::String::from_utf8(from.key.into())
 			.map_err(|e| Self::Error::Revert(format!("utf8 conversion error: {}", e)))?;
 		let value = evm_coder::types::bytes(from.value.to_vec());
 		Ok(Property { key, value })
@@ -342,7 +342,7 @@
 #[derive(Debug, Default, AbiCoder)]
 pub struct TokenPropertyPermission {
 	/// Token property key.
-	key: evm_coder::types::string,
+	key: evm_coder::types::String,
 	/// Token property permissions.
 	permissions: Vec<PropertyPermission>,
 }
@@ -360,7 +360,7 @@
 		),
 	) -> Self {
 		let (key, permission) = value;
-		let key = evm_coder::types::string::from_utf8(key.into_inner())
+		let key = evm_coder::types::String::from_utf8(key.into_inner())
 			.expect("Stored key must be valid");
 		let permissions = PropertyPermission::into_vec(permission);
 		Self { key, permissions }
modifiedpallets/fungible/src/erc.rsdiffbeforeafterboth
--- a/pallets/fungible/src/erc.rs
+++ b/pallets/fungible/src/erc.rs
@@ -59,13 +59,13 @@
 
 #[solidity_interface(name = ERC20, events(ERC20Events))]
 impl<T: Config> FungibleHandle<T> {
-	fn name(&self) -> Result<string> {
+	fn name(&self) -> Result<String> {
 		Ok(decode_utf16(self.name.iter().copied())
 			.map(|r| r.unwrap_or(REPLACEMENT_CHARACTER))
-			.collect::<string>())
+			.collect::<String>())
 	}
-	fn symbol(&self) -> Result<string> {
-		Ok(string::from_utf8_lossy(&self.token_prefix).into())
+	fn symbol(&self) -> Result<String> {
+		Ok(String::from_utf8_lossy(&self.token_prefix).into())
 	}
 	fn total_supply(&self) -> Result<U256> {
 		self.consume_store_reads(1)?;
@@ -167,10 +167,10 @@
 	T::AccountId: From<[u8; 32]>,
 {
 	/// @notice A description for the collection.
-	fn description(&self) -> Result<string> {
+	fn description(&self) -> Result<String> {
 		Ok(decode_utf16(self.description.iter().copied())
 			.map(|r| r.unwrap_or(REPLACEMENT_CHARACTER))
-			.collect::<string>())
+			.collect::<String>())
 	}
 
 	#[weight(<SelfWeightOf<T>>::create_item())]
modifiedpallets/nonfungible/src/erc.rsdiffbeforeafterboth
--- a/pallets/nonfungible/src/erc.rs
+++ b/pallets/nonfungible/src/erc.rs
@@ -64,7 +64,7 @@
 	fn set_token_property_permission(
 		&mut self,
 		caller: caller,
-		key: string,
+		key: String,
 		is_mutable: bool,
 		collection_admin: bool,
 		token_owner: bool,
@@ -123,7 +123,7 @@
 		&mut self,
 		caller: caller,
 		token_id: U256,
-		key: string,
+		key: String,
 		value: bytes,
 	) -> Result<()> {
 		let caller = T::CrossAccountId::from_eth(caller);
@@ -187,7 +187,7 @@
 	/// @param key Property key.
 	#[solidity(hide)]
 	#[weight(<SelfWeightOf<T>>::delete_token_properties(1))]
-	fn delete_property(&mut self, token_id: U256, caller: caller, key: string) -> Result<()> {
+	fn delete_property(&mut self, token_id: U256, caller: caller, key: String) -> Result<()> {
 		let caller = T::CrossAccountId::from_eth(caller);
 		let token_id: u32 = token_id.try_into().map_err(|_| "token id overflow")?;
 		let key = <Vec<u8>>::from(key)
@@ -211,7 +211,7 @@
 		&mut self,
 		token_id: U256,
 		caller: caller,
-		keys: Vec<string>,
+		keys: Vec<String>,
 	) -> Result<()> {
 		let caller = T::CrossAccountId::from_eth(caller);
 		let token_id: u32 = token_id.try_into().map_err(|_| "token id overflow")?;
@@ -239,7 +239,7 @@
 	/// @param tokenId ID of the token.
 	/// @param key Property key.
 	/// @return Property value bytes
-	fn property(&self, token_id: U256, key: string) -> Result<bytes> {
+	fn property(&self, token_id: U256, key: String) -> Result<bytes> {
 		let token_id: u32 = token_id.try_into().map_err(|_| "token id overflow")?;
 		let key = <Vec<u8>>::from(key)
 			.try_into()
@@ -301,14 +301,14 @@
 	/// @notice A descriptive name for a collection of NFTs in this contract
 	/// @dev real implementation of this function lies in `ERC721UniqueExtensions`
 	#[solidity(hide, rename_selector = "name")]
-	fn name_proxy(&self) -> Result<string> {
+	fn name_proxy(&self) -> Result<String> {
 		self.name()
 	}
 
 	/// @notice An abbreviated name for NFTs in this contract
 	/// @dev real implementation of this function lies in `ERC721UniqueExtensions`
 	#[solidity(hide, rename_selector = "symbol")]
-	fn symbol_proxy(&self) -> Result<string> {
+	fn symbol_proxy(&self) -> Result<String> {
 		self.symbol()
 	}
 
@@ -322,7 +322,7 @@
 	///
 	/// @return token's const_metadata
 	#[solidity(rename_selector = "tokenURI")]
-	fn token_uri(&self, token_id: U256) -> Result<string> {
+	fn token_uri(&self, token_id: U256) -> Result<String> {
 		let token_id_u32: u32 = token_id.try_into().map_err(|_| "token id overflow")?;
 
 		match get_token_property(self, token_id_u32, &key::url()).as_deref() {
@@ -335,7 +335,7 @@
 		let base_uri =
 			pallet_common::Pallet::<T>::get_collection_property(self.id, &key::base_uri())
 				.map(BoundedVec::into_inner)
-				.map(string::from_utf8)
+				.map(String::from_utf8)
 				.transpose()
 				.map_err(|e| {
 					Error::Revert(alloc::format!(
@@ -595,7 +595,7 @@
 		&mut self,
 		caller: caller,
 		to: Address,
-		token_uri: string,
+		token_uri: String,
 	) -> Result<U256> {
 		let token_id: U256 = <TokensMinted<T>>::get(self.id)
 			.checked_add(1)
@@ -618,7 +618,7 @@
 		caller: caller,
 		to: Address,
 		token_id: U256,
-		token_uri: string,
+		token_uri: String,
 	) -> Result<bool> {
 		let key = key::url();
 		let permission = get_token_permission::<T>(self.id, &key)?;
@@ -670,12 +670,12 @@
 	collection: &CollectionHandle<T>,
 	token_id: u32,
 	key: &up_data_structs::PropertyKey,
-) -> Result<string> {
+) -> Result<String> {
 	collection.consume_store_reads(1)?;
 	let properties = <TokenProperties<T>>::try_get((collection.id, token_id))
 		.map_err(|_| Error::Revert("Token properties not found".into()))?;
 	if let Some(property) = properties.get(key) {
-		return Ok(string::from_utf8_lossy(property).into());
+		return Ok(String::from_utf8_lossy(property).into());
 	}
 
 	Err("Property tokenURI not found".into())
@@ -691,7 +691,7 @@
 		.get(key)
 		.map(Clone::clone)
 		.ok_or_else(|| {
-			let key = string::from_utf8(key.clone().into_inner()).unwrap_or_default();
+			let key = String::from_utf8(key.clone().into_inner()).unwrap_or_default();
 			Error::Revert(alloc::format!("No permission for key {}", key))
 		})?;
 	Ok(a)
@@ -704,22 +704,22 @@
 	T::AccountId: From<[u8; 32]> + AsRef<[u8; 32]>,
 {
 	/// @notice A descriptive name for a collection of NFTs in this contract
-	fn name(&self) -> Result<string> {
+	fn name(&self) -> Result<String> {
 		Ok(decode_utf16(self.name.iter().copied())
 			.map(|r| r.unwrap_or(REPLACEMENT_CHARACTER))
-			.collect::<string>())
+			.collect::<String>())
 	}
 
 	/// @notice An abbreviated name for NFTs in this contract
-	fn symbol(&self) -> Result<string> {
-		Ok(string::from_utf8_lossy(&self.token_prefix).into())
+	fn symbol(&self) -> Result<String> {
+		Ok(String::from_utf8_lossy(&self.token_prefix).into())
 	}
 
 	/// @notice A description for the collection.
-	fn description(&self) -> Result<string> {
+	fn description(&self) -> Result<String> {
 		Ok(decode_utf16(self.description.iter().copied())
 			.map(|r| r.unwrap_or(REPLACEMENT_CHARACTER))
-			.collect::<string>())
+			.collect::<String>())
 	}
 
 	/// Returns the owner (in cross format) of the token.
@@ -736,7 +736,7 @@
 	/// @param tokenId Id for the token.
 	/// @param keys Properties keys. Empty keys for all propertyes.
 	/// @return Vector of properties key/value pairs.
-	fn properties(&self, token_id: U256, keys: Vec<string>) -> Result<Vec<eth::Property>> {
+	fn properties(&self, token_id: U256, keys: Vec<String>) -> Result<Vec<eth::Property>> {
 		let keys = keys
 			.into_iter()
 			.map(|key| {
@@ -948,7 +948,7 @@
 		&mut self,
 		caller: caller,
 		to: Address,
-		tokens: Vec<(U256, string)>,
+		tokens: Vec<(U256, String)>,
 	) -> Result<bool> {
 		let key = key::url();
 		let caller = T::CrossAccountId::from_eth(caller);
modifiedpallets/refungible/src/erc.rsdiffbeforeafterboth
--- a/pallets/refungible/src/erc.rs
+++ b/pallets/refungible/src/erc.rs
@@ -67,7 +67,7 @@
 	fn set_token_property_permission(
 		&mut self,
 		caller: caller,
-		key: string,
+		key: String,
 		is_mutable: bool,
 		collection_admin: bool,
 		token_owner: bool,
@@ -126,7 +126,7 @@
 		&mut self,
 		caller: caller,
 		token_id: U256,
-		key: string,
+		key: String,
 		value: bytes,
 	) -> Result<()> {
 		let caller = T::CrossAccountId::from_eth(caller);
@@ -190,7 +190,7 @@
 	/// @param key Property key.
 	#[solidity(hide)]
 	#[weight(<SelfWeightOf<T>>::delete_token_properties(1))]
-	fn delete_property(&mut self, token_id: U256, caller: caller, key: string) -> Result<()> {
+	fn delete_property(&mut self, token_id: U256, caller: caller, key: String) -> Result<()> {
 		let caller = T::CrossAccountId::from_eth(caller);
 		let token_id: u32 = token_id.try_into().map_err(|_| "token id overflow")?;
 		let key = <Vec<u8>>::from(key)
@@ -214,7 +214,7 @@
 		&mut self,
 		token_id: U256,
 		caller: caller,
-		keys: Vec<string>,
+		keys: Vec<String>,
 	) -> Result<()> {
 		let caller = T::CrossAccountId::from_eth(caller);
 		let token_id: u32 = token_id.try_into().map_err(|_| "token id overflow")?;
@@ -242,7 +242,7 @@
 	/// @param tokenId ID of the token.
 	/// @param key Property key.
 	/// @return Property value bytes
-	fn property(&self, token_id: U256, key: string) -> Result<bytes> {
+	fn property(&self, token_id: U256, key: String) -> Result<bytes> {
 		let token_id: u32 = token_id.try_into().map_err(|_| "token id overflow")?;
 		let key = <Vec<u8>>::from(key)
 			.try_into()
@@ -298,14 +298,14 @@
 	/// @notice A descriptive name for a collection of NFTs in this contract
 	/// @dev real implementation of this function lies in `ERC721UniqueExtensions`
 	#[solidity(hide, rename_selector = "name")]
-	fn name_proxy(&self) -> Result<string> {
+	fn name_proxy(&self) -> Result<String> {
 		self.name()
 	}
 
 	/// @notice An abbreviated name for NFTs in this contract
 	/// @dev real implementation of this function lies in `ERC721UniqueExtensions`
 	#[solidity(hide, rename_selector = "symbol")]
-	fn symbol_proxy(&self) -> Result<string> {
+	fn symbol_proxy(&self) -> Result<String> {
 		self.symbol()
 	}
 
@@ -319,7 +319,7 @@
 	///
 	/// @return token's const_metadata
 	#[solidity(rename_selector = "tokenURI")]
-	fn token_uri(&self, token_id: U256) -> Result<string> {
+	fn token_uri(&self, token_id: U256) -> Result<String> {
 		let token_id_u32: u32 = token_id.try_into().map_err(|_| "token id overflow")?;
 
 		match get_token_property(self, token_id_u32, &key::url()).as_deref() {
@@ -332,7 +332,7 @@
 		let base_uri =
 			pallet_common::Pallet::<T>::get_collection_property(self.id, &key::base_uri())
 				.map(BoundedVec::into_inner)
-				.map(string::from_utf8)
+				.map(String::from_utf8)
 				.transpose()
 				.map_err(|e| {
 					Error::Revert(alloc::format!(
@@ -631,7 +631,7 @@
 		&mut self,
 		caller: caller,
 		to: Address,
-		token_uri: string,
+		token_uri: String,
 	) -> Result<U256> {
 		let token_id: U256 = <TokensMinted<T>>::get(self.id)
 			.checked_add(1)
@@ -654,7 +654,7 @@
 		caller: caller,
 		to: Address,
 		token_id: U256,
-		token_uri: string,
+		token_uri: String,
 	) -> Result<bool> {
 		let key = key::url();
 		let permission = get_token_permission::<T>(self.id, &key)?;
@@ -708,12 +708,12 @@
 	collection: &CollectionHandle<T>,
 	token_id: u32,
 	key: &up_data_structs::PropertyKey,
-) -> Result<string> {
+) -> Result<String> {
 	collection.consume_store_reads(1)?;
 	let properties = <TokenProperties<T>>::try_get((collection.id, token_id))
 		.map_err(|_| Error::Revert("Token properties not found".into()))?;
 	if let Some(property) = properties.get(key) {
-		return Ok(string::from_utf8_lossy(property).into());
+		return Ok(String::from_utf8_lossy(property).into());
 	}
 
 	Err("Property tokenURI not found".into())
@@ -729,7 +729,7 @@
 		.get(key)
 		.map(Clone::clone)
 		.ok_or_else(|| {
-			let key = string::from_utf8(key.clone().into_inner()).unwrap_or_default();
+			let key = String::from_utf8(key.clone().into_inner()).unwrap_or_default();
 			Error::Revert(alloc::format!("No permission for key {}", key))
 		})?;
 	Ok(a)
@@ -742,22 +742,22 @@
 	T::AccountId: From<[u8; 32]> + AsRef<[u8; 32]>,
 {
 	/// @notice A descriptive name for a collection of NFTs in this contract
-	fn name(&self) -> Result<string> {
+	fn name(&self) -> Result<String> {
 		Ok(decode_utf16(self.name.iter().copied())
 			.map(|r| r.unwrap_or(REPLACEMENT_CHARACTER))
-			.collect::<string>())
+			.collect::<String>())
 	}
 
 	/// @notice An abbreviated name for NFTs in this contract
-	fn symbol(&self) -> Result<string> {
-		Ok(string::from_utf8_lossy(&self.token_prefix).into())
+	fn symbol(&self) -> Result<String> {
+		Ok(String::from_utf8_lossy(&self.token_prefix).into())
 	}
 
 	/// @notice A description for the collection.
-	fn description(&self) -> Result<string> {
+	fn description(&self) -> Result<String> {
 		Ok(decode_utf16(self.description.iter().copied())
 			.map(|r| r.unwrap_or(REPLACEMENT_CHARACTER))
-			.collect::<string>())
+			.collect::<String>())
 	}
 
 	/// Returns the owner (in cross format) of the token.
@@ -774,7 +774,7 @@
 	/// @param tokenId Id for the token.
 	/// @param keys Properties keys. Empty keys for all propertyes.
 	/// @return Vector of properties key/value pairs.
-	fn properties(&self, token_id: U256, keys: Vec<string>) -> Result<Vec<eth::Property>> {
+	fn properties(&self, token_id: U256, keys: Vec<String>) -> Result<Vec<eth::Property>> {
 		let keys = keys
 			.into_iter()
 			.map(|key| {
@@ -991,7 +991,7 @@
 		&mut self,
 		caller: caller,
 		to: Address,
-		tokens: Vec<(U256, string)>,
+		tokens: Vec<(U256, String)>,
 	) -> Result<bool> {
 		let key = key::url();
 		let caller = T::CrossAccountId::from_eth(caller);
modifiedpallets/refungible/src/erc_token.rsdiffbeforeafterboth
--- a/pallets/refungible/src/erc_token.rs
+++ b/pallets/refungible/src/erc_token.rs
@@ -92,15 +92,15 @@
 #[solidity_interface(name = ERC20, events(ERC20Events))]
 impl<T: Config> RefungibleTokenHandle<T> {
 	/// @return the name of the token.
-	fn name(&self) -> Result<string> {
+	fn name(&self) -> Result<String> {
 		Ok(decode_utf16(self.name.iter().copied())
 			.map(|r| r.unwrap_or(REPLACEMENT_CHARACTER))
-			.collect::<string>())
+			.collect::<String>())
 	}
 
 	/// @return the symbol of the token.
-	fn symbol(&self) -> Result<string> {
-		Ok(string::from_utf8_lossy(&self.token_prefix).into())
+	fn symbol(&self) -> Result<String> {
+		Ok(String::from_utf8_lossy(&self.token_prefix).into())
 	}
 
 	/// @dev Total number of tokens in existence
modifiedpallets/unique/src/eth/mod.rsdiffbeforeafterboth
--- a/pallets/unique/src/eth/mod.rs
+++ b/pallets/unique/src/eth/mod.rs
@@ -57,9 +57,9 @@
 
 fn convert_data<T: Config>(
 	caller: caller,
-	name: string,
-	description: string,
-	token_prefix: string,
+	name: String,
+	description: String,
+	token_prefix: String,
 ) -> Result<(
 	T::CrossAccountId,
 	CollectionName,
@@ -89,10 +89,10 @@
 fn create_collection_internal<T: Config>(
 	caller: caller,
 	value: value,
-	name: string,
+	name: String,
 	collection_mode: CollectionMode,
-	description: string,
-	token_prefix: string,
+	description: String,
+	token_prefix: String,
 ) -> Result<Address> {
 	let (caller, name, description, token_prefix) =
 		convert_data::<T>(caller, name, description, token_prefix)?;
@@ -151,9 +151,9 @@
 		&mut self,
 		caller: caller,
 		value: value,
-		name: string,
-		description: string,
-		token_prefix: string,
+		name: String,
+		description: String,
+		token_prefix: String,
 	) -> Result<Address> {
 		let (caller, name, description, token_prefix) =
 			convert_data::<T>(caller, name, description, token_prefix)?;
@@ -190,9 +190,9 @@
 		&mut self,
 		caller: caller,
 		value: value,
-		name: string,
-		description: string,
-		token_prefix: string,
+		name: String,
+		description: String,
+		token_prefix: String,
 	) -> Result<Address> {
 		create_collection_internal::<T>(
 			caller,
@@ -210,9 +210,9 @@
 		&mut self,
 		caller: caller,
 		value: value,
-		name: string,
-		description: string,
-		token_prefix: string,
+		name: String,
+		description: String,
+		token_prefix: String,
 	) -> Result<Address> {
 		create_collection_internal::<T>(
 			caller,
@@ -230,10 +230,10 @@
 		&mut self,
 		caller: caller,
 		value: value,
-		name: string,
+		name: String,
 		decimals: u8,
-		description: string,
-		token_prefix: string,
+		description: String,
+		token_prefix: String,
 	) -> Result<Address> {
 		create_collection_internal::<T>(
 			caller,
@@ -250,7 +250,7 @@
 		&mut self,
 		caller: caller,
 		collection: Address,
-		base_uri: string,
+		base_uri: String,
 	) -> Result<()> {
 		let caller = T::CrossAccountId::from_eth(caller);
 		let collection =
modifiedruntime/tests/src/tests.rsdiffbeforeafterboth
--- a/runtime/tests/src/tests.rs
+++ b/runtime/tests/src/tests.rs
@@ -323,7 +323,7 @@
 				.map(|d| { d.into() })
 				.collect()
 		));
-		for (index, data) in items_data.into_iter().enumerate() {
+		for (index, _data) in items_data.into_iter().enumerate() {
 			let balance = <pallet_refungible::Balance<Test>>::get((
 				CollectionId(1),
 				TokenId((index + 1) as u32),