difftreelog
Merge pull request #825 from UniqueNetwork/feature/evm_coder_types_refactor
in: master
Feature/evm_coder_types_refactor
39 files changed
Cargo.lockdiffbeforeafterboth--- a/Cargo.lock
+++ b/Cargo.lock
@@ -2330,7 +2330,6 @@
"hex",
"hex-literal",
"impl-trait-for-tuples",
- "pallet-evm",
"primitive-types 0.12.1",
"sha3-const",
"similar-asserts",
crates/evm-coder/Cargo.tomldiffbeforeafterboth--- a/crates/evm-coder/Cargo.toml
+++ b/crates/evm-coder/Cargo.toml
@@ -19,8 +19,6 @@
# We have tuple-heavy code in solidity.rs
impl-trait-for-tuples = "0.2.2"
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.36" }
-
[dev-dependencies]
# We want to assert some large binary blobs equality in tests
hex = "0.4.3"
crates/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
@@ -347,14 +347,14 @@
fn is_value(&self) -> bool {
if let Ok(ident) = self.plain() {
- return ident == "value";
+ return ident == "Value";
}
false
}
fn is_caller(&self) -> bool {
if let Ok(ident) = self.plain() {
- return ident == "caller";
+ return ident == "Caller";
}
false
}
@@ -610,7 +610,7 @@
let custom_signature = self.expand_custom_signature();
quote! {
const #screaming_name_signature: ::evm_coder::custom_signature::SignatureUnit = #custom_signature;
- const #screaming_name: ::evm_coder::types::bytes4 = {
+ const #screaming_name: ::evm_coder::types::Bytes4 = {
let mut sum = ::evm_coder::sha3_const::Keccak256::new();
let mut pos = 0;
while pos < Self::#screaming_name_signature.len {
@@ -974,7 +974,7 @@
#consts
)*
/// Return this call ERC165 selector
- pub const fn interface_id() -> ::evm_coder::types::bytes4 {
+ pub const fn interface_id() -> ::evm_coder::types::Bytes4 {
let mut interface_id = 0;
#(#interface_id)*
#(#inline_interface_id)*
@@ -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");
}
@@ -1019,7 +1019,7 @@
}
}
impl #gen_ref ::evm_coder::Call for #call_name #gen_ref {
- fn parse(method_id: ::evm_coder::types::bytes4, reader: &mut ::evm_coder::abi::AbiReader) -> ::evm_coder::execution::Result<Option<Self>> {
+ fn parse(method_id: ::evm_coder::types::Bytes4, reader: &mut ::evm_coder::abi::AbiReader) -> ::evm_coder::execution::Result<Option<Self>> {
use ::evm_coder::abi::AbiRead;
match method_id {
::evm_coder::ERC165Call::INTERFACE_ID => return Ok(
@@ -1041,7 +1041,7 @@
#gen_where
{
/// Is this contract implements specified ERC165 selector
- pub fn supports_interface(this: &#name, interface_id: ::evm_coder::types::bytes4) -> bool {
+ pub fn supports_interface(this: &#name, interface_id: ::evm_coder::types::Bytes4) -> bool {
interface_id != u32::to_be_bytes(0xffffff) && (
interface_id == ::evm_coder::ERC165Call::INTERFACE_ID ||
interface_id == Self::interface_id()
crates/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
@@ -137,7 +137,7 @@
Self::#name {#(
#fields,
)*} => {
- topics.push(topic::from(Self::#name_screaming));
+ topics.push(::evm_coder::types::Topic::from(Self::#name_screaming));
#(
topics.push(#indexed.to_topic());
)*
@@ -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);
@@ -231,7 +231,7 @@
#[automatically_derived]
impl ::evm_coder::events::ToLog for #name {
- fn to_log(&self, contract: address) -> ::ethereum::Log {
+ fn to_log(&self, contract: Address) -> ::ethereum::Log {
use ::evm_coder::events::ToTopic;
use ::evm_coder::abi::AbiWrite;
let mut writer = ::evm_coder::abi::AbiWriter::new();
crates/evm-coder/src/abi/impls.rsdiffbeforeafterboth--- a/crates/evm-coder/src/abi/impls.rs
+++ b/crates/evm-coder/src/abi/impls.rs
@@ -63,27 +63,27 @@
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);
-impl_abi_type!(bytes, bytes, true);
+impl_abi_type!(Bytes, bytes, true);
-impl AbiRead for bytes {
- fn abi_read(reader: &mut AbiReader) -> Result<bytes> {
- Ok(bytes(reader.bytes()?))
+impl AbiRead for Bytes {
+ fn abi_read(reader: &mut AbiReader) -> Result<Bytes> {
+ Ok(Bytes(reader.bytes()?))
}
}
-impl AbiWrite for bytes {
+impl AbiWrite for Bytes {
fn abi_write(&self, writer: &mut AbiWriter) {
writer.bytes(self.0.as_slice())
}
}
-impl_abi_type!(bytes4, bytes4, false);
-impl AbiRead for bytes4 {
- fn abi_read(reader: &mut AbiReader) -> Result<bytes4> {
+impl_abi_type!(Bytes4, bytes4, false);
+impl AbiRead for Bytes4 {
+ fn abi_read(reader: &mut AbiReader) -> Result<Bytes4> {
reader.bytes4()
}
}
crates/evm-coder/src/abi/mod.rsdiffbeforeafterboth--- a/crates/evm-coder/src/abi/mod.rs
+++ b/crates/evm-coder/src/abi/mod.rs
@@ -54,7 +54,7 @@
}
}
/// Start reading RLP buffer, parsing first 4 bytes as selector
- pub fn new_call(buf: &'i [u8]) -> Result<(bytes4, Self)> {
+ pub fn new_call(buf: &'i [u8]) -> Result<(Bytes4, Self)> {
if buf.len() < 4 {
return Err(Error::Error(ExitError::OutOfOffset));
}
@@ -148,8 +148,8 @@
}
/// Read [`string`] at current position, then advance
- pub fn string(&mut self) -> Result<string> {
- string::from_utf8(self.bytes()?).map_err(|_| Error::Error(ExitError::InvalidRange))
+ pub fn string(&mut self) -> Result<String> {
+ String::from_utf8(self.bytes()?).map_err(|_| Error::Error(ExitError::InvalidRange))
}
/// Read [`u8`] at current position, then advance
crates/evm-coder/src/abi/test.rsdiffbeforeafterboth--- a/crates/evm-coder/src/abi/test.rs
+++ b/crates/evm-coder/src/abi/test.rs
@@ -39,22 +39,22 @@
#[test]
fn encode_decode_uint8() {
- test_impl_uint!(uint8);
+ test_impl_uint!(u8);
}
#[test]
fn encode_decode_uint32() {
- test_impl_uint!(uint32);
+ test_impl_uint!(u32);
}
#[test]
fn encode_decode_uint128() {
- test_impl_uint!(uint128);
+ test_impl_uint!(u128);
}
#[test]
fn encode_decode_uint256() {
- test_impl::<uint256>(
+ test_impl::<U256>(
0xdeadbeef,
U256([255, 0, 0, 0]),
&hex!(
@@ -101,7 +101,7 @@
#[test]
fn encode_decode_vec_tuple_address_uint256() {
- test_impl::<Vec<(address, uint256)>>(
+ test_impl::<Vec<(Address, U256)>>(
0x1ACF2D55,
vec![
(
@@ -138,7 +138,7 @@
#[test]
fn encode_decode_vec_tuple_uint256_string() {
- test_impl::<Vec<(uint256, 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<(uint256, 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,12 +273,12 @@
#[test]
fn encode_decode_vec_tuple_string_bytes() {
- test_impl::<Vec<(string, bytes)>>(
+ test_impl::<Vec<(String, Bytes)>>(
0xdeadbeef,
vec![
(
"Test URI 0".to_string(),
- bytes(vec![
+ Bytes(vec![
0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
@@ -287,14 +287,14 @@
),
(
"Test URI 1".to_string(),
- bytes(vec![
+ Bytes(vec![
0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,
]),
),
- ("Test URI 2".to_string(), bytes(vec![0x33, 0x33])),
+ ("Test URI 2".to_string(), Bytes(vec![0x33, 0x33])),
],
&hex!(
"
@@ -337,10 +337,10 @@
// #[ignore = "reason"]
fn encode_decode_tuple0_tuple1_uint8_tuple1_string_bytes_tuple1_uint8_bytes() {
let int = 0xff;
- let by = bytes(vec![0x11, 0x22, 0x33]);
+ let by = Bytes(vec![0x11, 0x22, 0x33]);
let string = "some string".to_string();
- test_impl::<((u8,), (String, bytes), (u8, bytes))>(
+ test_impl::<((u8,), (String, Bytes), (u8, Bytes))>(
0xdeadbeef,
((int,), (string.clone(), by.clone()), (int, by)),
&hex!(
@@ -485,9 +485,9 @@
#[test]
fn encode_decode_tuple0_tuple1_string_bytes() {
- test_impl::<((String, bytes),)>(
+ test_impl::<((String, Bytes),)>(
0xdeadbeef,
- (("some string".to_string(), bytes(vec![1, 2, 3])),),
+ (("some string".to_string(), Bytes(vec![1, 2, 3])),),
&hex!(
"
deadbeef
crates/evm-coder/src/events.rsdiffbeforeafterboth--- a/crates/evm-coder/src/events.rs
+++ b/crates/evm-coder/src/events.rs
@@ -15,7 +15,7 @@
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
use ethereum::Log;
-use primitive_types::{H160, H256};
+use primitive_types::{H160, H256, U256};
use crate::types::*;
@@ -45,7 +45,7 @@
}
}
-impl ToTopic for uint256 {
+impl ToTopic for U256 {
fn to_topic(&self) -> H256 {
let mut out = [0u8; 32];
self.to_big_endian(&mut out);
@@ -53,7 +53,7 @@
}
}
-impl ToTopic for address {
+impl ToTopic for Address {
fn to_topic(&self) -> H256 {
let mut out = [0u8; 32];
out[12..32].copy_from_slice(&self.0);
@@ -61,7 +61,7 @@
}
}
-impl ToTopic for uint32 {
+impl ToTopic for u32 {
fn to_topic(&self) -> H256 {
let mut out = [0u8; 32];
out[28..32].copy_from_slice(&self.to_be_bytes());
crates/evm-coder/src/lib.rsdiffbeforeafterboth--- a/crates/evm-coder/src/lib.rs
+++ b/crates/evm-coder/src/lib.rs
@@ -131,33 +131,23 @@
use alloc::{vec::Vec};
use primitive_types::{U256, H160, H256};
- pub type address = H160;
- pub type uint8 = u8;
- pub type uint16 = u16;
- pub type uint32 = u32;
- pub type uint64 = u64;
- pub type uint128 = u128;
- pub type uint256 = U256;
- pub type bytes4 = [u8; 4];
- pub type topic = H256;
+ pub type Address = H160;
+ pub type Bytes4 = [u8; 4];
+ 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>);
-
- /// Solidity doesn't have `void` type, however we have special implementation
- /// for empty tuple return type
- pub type void = ();
+ pub struct Bytes(pub Vec<u8>);
//#region Special types
/// Makes function payable
- pub type value = U256;
+ pub type Value = U256;
/// Makes function caller-sensitive
- pub type caller = address;
+ pub type Caller = Address;
//#endregion
/// Ethereum typed call message, similar to solidity
@@ -172,20 +162,20 @@
pub value: U256,
}
- impl From<Vec<u8>> for bytes {
+ impl From<Vec<u8>> for Bytes {
fn from(src: Vec<u8>) -> Self {
Self(src)
}
}
#[allow(clippy::from_over_into)]
- impl Into<Vec<u8>> for bytes {
+ impl Into<Vec<u8>> for Bytes {
fn into(self) -> Vec<u8> {
self.0
}
}
- impl bytes {
+ impl Bytes {
#[must_use]
pub fn len(&self) -> usize {
self.0.len()
@@ -201,7 +191,7 @@
/// Parseable EVM call, this trait should be implemented with [`solidity_interface`] macro
pub trait Call: Sized {
/// Parse call buffer into typed call enum
- fn parse(selector: types::bytes4, input: &mut AbiReader) -> execution::Result<Option<Self>>;
+ fn parse(selector: types::Bytes4, input: &mut AbiReader) -> execution::Result<Option<Self>>;
}
/// Intended to be used as `#[weight]` output type
@@ -237,22 +227,22 @@
/// implements specified interface
SupportsInterface {
/// Requested interface
- interface_id: types::bytes4,
+ interface_id: types::Bytes4,
},
}
impl ERC165Call {
/// ERC165 selector is provided by standard
- pub const INTERFACE_ID: types::bytes4 = u32::to_be_bytes(0x01ffc9a7);
+ pub const INTERFACE_ID: types::Bytes4 = u32::to_be_bytes(0x01ffc9a7);
}
impl Call for ERC165Call {
- fn parse(selector: types::bytes4, input: &mut AbiReader) -> execution::Result<Option<Self>> {
+ fn parse(selector: types::Bytes4, input: &mut AbiReader) -> execution::Result<Option<Self>> {
if selector != Self::INTERFACE_ID {
return Ok(None);
}
Ok(Some(Self::SupportsInterface {
- interface_id: types::bytes4::abi_read(input)?,
+ interface_id: types::Bytes4::abi_read(input)?,
}))
}
}
crates/evm-coder/src/solidity/impls.rsdiffbeforeafterboth--- a/crates/evm-coder/src/solidity/impls.rs
+++ b/crates/evm-coder/src/solidity/impls.rs
@@ -27,14 +27,14 @@
u64 => "uint64" true = "0",
u128 => "uint128" true = "0",
U256 => "uint256" true = "0",
- bytes4 => "bytes4" true = "bytes4(0)",
+ Bytes4 => "bytes4" true = "bytes4(0)",
H160 => "address" true = "0x0000000000000000000000000000000000000000",
- string => "string" false = "\"\"",
- bytes => "bytes" false = "hex\"\"",
+ String => "string" false = "\"\"",
+ Bytes => "bytes" false = "hex\"\"",
bool => "bool" true = "false",
}
-impl SolidityTypeName for void {
+impl SolidityTypeName for () {
fn solidity_name(_writer: &mut impl fmt::Write, _tc: &TypeCollector) -> fmt::Result {
Ok(())
}
@@ -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);
})*;
crates/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()
@@ -360,7 +360,7 @@
pub struct SolidityInterface<F: SolidityFunctions> {
pub docs: &'static [&'static str],
- pub selector: bytes4,
+ pub selector: Bytes4,
pub name: &'static str,
pub is: &'static [&'static str],
pub functions: F,
crates/evm-coder/tests/abi_derive_generation.rsdiffbeforeafterboth--- a/crates/evm-coder/tests/abi_derive_generation.rs
+++ b/crates/evm-coder/tests/abi_derive_generation.rs
@@ -1,6 +1,6 @@
mod test_struct {
use evm_coder_procedural::AbiCoder;
- use evm_coder::types::bytes;
+ use evm_coder::types::Bytes;
#[test]
fn empty_struct() {
@@ -27,13 +27,13 @@
#[derive(AbiCoder, PartialEq, Debug)]
struct TypeStruct2DynamicParam {
_a: String,
- _b: bytes,
+ _b: Bytes,
}
#[derive(AbiCoder, PartialEq, Debug)]
struct TypeStruct2MixedParam {
_a: u8,
- _b: bytes,
+ _b: Bytes,
}
#[derive(AbiCoder, PartialEq, Debug)]
@@ -236,10 +236,10 @@
struct TupleStruct2SimpleParam(u8, u32);
#[derive(AbiCoder, PartialEq, Debug)]
- struct TupleStruct2DynamicParam(String, bytes);
+ struct TupleStruct2DynamicParam(String, Bytes);
#[derive(AbiCoder, PartialEq, Debug)]
- struct TupleStruct2MixedParam(u8, bytes);
+ struct TupleStruct2MixedParam(u8, Bytes);
#[derive(AbiCoder, PartialEq, Debug)]
struct TupleStruct1DerivedSimpleParam(TupleStruct1SimpleParam);
@@ -562,8 +562,8 @@
#[test]
fn codec_struct_2_dynamic() {
let _a: String = "some string".into();
- let _b: bytes = bytes(vec![0x11, 0x22, 0x33]);
- test_impl::<(String, bytes), TupleStruct2DynamicParam, TypeStruct2DynamicParam>(
+ let _b: Bytes = Bytes(vec![0x11, 0x22, 0x33]);
+ test_impl::<(String, Bytes), TupleStruct2DynamicParam, TypeStruct2DynamicParam>(
(_a.clone(), _b.clone()),
TupleStruct2DynamicParam(_a.clone(), _b.clone()),
TypeStruct2DynamicParam { _a, _b },
@@ -573,8 +573,8 @@
#[test]
fn codec_struct_2_mixed() {
let _a: u8 = 0xff;
- let _b: bytes = bytes(vec![0x11, 0x22, 0x33]);
- test_impl::<(u8, bytes), TupleStruct2MixedParam, TypeStruct2MixedParam>(
+ let _b: Bytes = Bytes(vec![0x11, 0x22, 0x33]);
+ test_impl::<(u8, Bytes), TupleStruct2MixedParam, TypeStruct2MixedParam>(
(_a.clone(), _b.clone()),
TupleStruct2MixedParam(_a.clone(), _b.clone()),
TypeStruct2MixedParam { _a, _b },
@@ -605,9 +605,9 @@
#[test]
fn codec_struct_2_derived_dynamic() {
let _a = "some string".to_string();
- let _b = bytes(vec![0x11, 0x22, 0x33]);
+ let _b = Bytes(vec![0x11, 0x22, 0x33]);
test_impl::<
- ((String,), (String, bytes)),
+ ((String,), (String, Bytes)),
TupleStruct2DerivedDynamicParam,
TypeStruct2DerivedDynamicParam,
>(
@@ -626,10 +626,10 @@
#[test]
fn codec_struct_3_derived_mixed() {
let int = 0xff;
- let by = bytes(vec![0x11, 0x22, 0x33]);
+ let by = Bytes(vec![0x11, 0x22, 0x33]);
let string = "some string".to_string();
test_impl::<
- ((u8,), (String, bytes), (u8, bytes)),
+ ((u8,), (String, Bytes), (u8, Bytes)),
TupleStruct3DerivedMixedParam,
TypeStruct3DerivedMixedParam,
>(
crates/evm-coder/tests/conditional_is.rsdiffbeforeafterboth--- a/crates/evm-coder/tests/conditional_is.rs
+++ b/crates/evm-coder/tests/conditional_is.rs
@@ -4,14 +4,14 @@
#[solidity_interface(name = A)]
impl Contract {
- fn method_a() -> Result<void> {
+ fn method_a() -> Result<()> {
Ok(())
}
}
#[solidity_interface(name = B)]
impl Contract {
- fn method_b() -> Result<void> {
+ fn method_b() -> Result<()> {
Ok(())
}
}
crates/evm-coder/tests/generics.rsdiffbeforeafterboth--- a/crates/evm-coder/tests/generics.rs
+++ b/crates/evm-coder/tests/generics.rs
@@ -16,19 +16,20 @@
use std::marker::PhantomData;
use evm_coder::{execution::Result, generate_stubgen, solidity_interface, types::*};
+use primitive_types::U256;
pub struct Generic<T>(PhantomData<T>);
#[solidity_interface(name = GenericIs)]
impl<T> Generic<T> {
- fn test_1(&self) -> Result<uint256> {
+ fn test_1(&self) -> Result<U256> {
unreachable!()
}
}
#[solidity_interface(name = Generic, is(GenericIs))]
impl<T: Into<u32>> Generic<T> {
- fn test_2(&self) -> Result<uint256> {
+ fn test_2(&self) -> Result<U256> {
unreachable!()
}
}
@@ -40,7 +41,7 @@
where
T: core::fmt::Debug,
{
- fn test_3(&self) -> Result<uint256> {
+ fn test_3(&self) -> Result<U256> {
unreachable!()
}
}
crates/evm-coder/tests/log.rsdiffbeforeafterboth--- a/crates/evm-coder/tests/log.rs
+++ b/crates/evm-coder/tests/log.rs
@@ -17,19 +17,20 @@
#![allow(dead_code)]
use evm_coder::{ToLog, types::*};
+use primitive_types::U256;
#[derive(ToLog)]
enum ERC721Log {
Transfer {
#[indexed]
- from: address,
+ from: Address,
#[indexed]
- to: address,
- value: uint256,
+ to: Address,
+ value: U256,
},
Eee {
#[indexed]
- aaa: address,
- bbb: uint256,
+ aaa: Address,
+ bbb: U256,
},
}
crates/evm-coder/tests/random.rsdiffbeforeafterboth--- a/crates/evm-coder/tests/random.rs
+++ b/crates/evm-coder/tests/random.rs
@@ -19,19 +19,20 @@
use evm_coder::{
abi::AbiType, ToLog, execution::Result, solidity_interface, types::*, solidity, weight,
};
+use primitive_types::U256;
pub struct Impls;
#[solidity_interface(name = OurInterface)]
impl Impls {
- fn fn_a(&self, _input: uint256) -> Result<bool> {
+ fn fn_a(&self, _input: U256) -> Result<bool> {
unreachable!()
}
}
#[solidity_interface(name = OurInterface1)]
impl Impls {
- fn fn_b(&self, _input: uint128) -> Result<uint32> {
+ fn fn_b(&self, _input: u128) -> Result<u32> {
unreachable!()
}
}
@@ -39,12 +40,12 @@
#[derive(ToLog)]
enum OurEvents {
Event1 {
- field1: uint32,
+ field1: u32,
},
Event2 {
- field1: uint32,
+ field1: u32,
#[indexed]
- field2: uint32,
+ field2: u32,
},
}
@@ -56,27 +57,27 @@
)]
impl Impls {
#[solidity(rename_selector = "fnK")]
- fn fn_c(&self, _input: uint32) -> Result<uint8> {
+ fn fn_c(&self, _input: u32) -> Result<u8> {
unreachable!()
}
- fn fn_d(&self, _value: uint32) -> Result<uint32> {
+ fn fn_d(&self, _value: u32) -> Result<u32> {
unreachable!()
}
- fn caller_sensitive(&self, _caller: caller) -> Result<uint8> {
+ fn caller_sensitive(&self, _caller: Caller) -> Result<u8> {
unreachable!()
}
- fn payable(&mut self, _value: value) -> Result<uint8> {
+ fn payable(&mut self, _value: Value) -> Result<u8> {
unreachable!()
}
#[weight(*_weight)]
- fn with_weight(&self, _weight: uint64) -> Result<void> {
+ fn with_weight(&self, _weight: u64) -> Result<()> {
unreachable!()
}
/// Doccoment example
- fn with_doc(&self) -> Result<void> {
+ fn with_doc(&self) -> Result<()> {
unreachable!()
}
}
crates/evm-coder/tests/solidity_generation.rsdiffbeforeafterboth--- a/crates/evm-coder/tests/solidity_generation.rs
+++ b/crates/evm-coder/tests/solidity_generation.rs
@@ -15,34 +15,35 @@
// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.
use evm_coder::{abi::AbiType, execution::Result, generate_stubgen, solidity_interface, types::*};
+use primitive_types::U256;
pub struct ERC20;
#[solidity_interface(name = ERC20)]
impl ERC20 {
- fn decimals(&self) -> Result<uint8> {
+ fn decimals(&self) -> Result<u8> {
unreachable!()
}
/// Get balance of specified owner
- fn balance_of(&self, _owner: address) -> Result<uint256> {
+ fn balance_of(&self, _owner: Address) -> Result<U256> {
unreachable!()
}
- fn transfer(&mut self, _caller: caller, _to: address, _value: uint256) -> Result<bool> {
+ fn transfer(&mut self, _caller: Caller, _to: Address, _value: U256) -> Result<bool> {
unreachable!()
}
fn transfer_from(
&mut self,
- _caller: caller,
- _from: address,
- _to: address,
- _value: uint256,
+ _caller: Caller,
+ _from: Address,
+ _to: Address,
+ _value: U256,
) -> Result<bool> {
unreachable!()
}
- fn approve(&mut self, _caller: caller, _spender: address, _value: uint256) -> Result<bool> {
+ fn approve(&mut self, _caller: Caller, _spender: Address, _value: U256) -> Result<bool> {
unreachable!()
}
- fn allowance(&self, _owner: address, _spender: address) -> Result<uint256> {
+ fn allowance(&self, _owner: Address, _spender: Address) -> Result<U256> {
unreachable!()
}
}
pallets/common/src/erc.rsdiffbeforeafterboth--- a/pallets/common/src/erc.rs
+++ b/pallets/common/src/erc.rs
@@ -26,6 +26,7 @@
};
use pallet_evm_coder_substrate::dispatch_to_evm;
use sp_std::{vec, vec::Vec};
+use sp_core::U256;
use up_data_structs::{
AccessMode, CollectionMode, CollectionPermissions, OwnerRestrictedSet, Property,
SponsoringRateLimit, SponsorshipState,
@@ -42,32 +43,32 @@
CollectionCreated {
/// Collection owner.
#[indexed]
- owner: address,
+ owner: Address,
/// Collection ID.
#[indexed]
- collection_id: address,
+ collection_id: Address,
},
/// The collection has been destroyed.
CollectionDestroyed {
/// Collection ID.
#[indexed]
- collection_id: address,
+ collection_id: Address,
},
/// The collection has been changed.
CollectionChanged {
/// Collection ID.
#[indexed]
- collection_id: address,
+ collection_id: Address,
},
/// The token has been changed.
TokenChanged {
/// Collection ID.
#[indexed]
- collection_id: address,
+ collection_id: Address,
/// Token ID.
- token_id: uint256,
+ token_id: U256,
},
}
@@ -93,12 +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<void> {
+ 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()
@@ -115,9 +111,9 @@
#[weight(<SelfWeightOf<T>>::set_collection_properties(properties.len() as u32))]
fn set_collection_properties(
&mut self,
- caller: caller,
+ caller: Caller,
properties: Vec<eth::Property>,
- ) -> Result<void> {
+ ) -> Result<()> {
let caller = T::CrossAccountId::from_eth(caller);
let properties = properties
@@ -134,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()
@@ -147,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()
@@ -168,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")?;
@@ -176,14 +172,14 @@
let props = CollectionProperties::<T>::get(self.id);
let prop = props.get(&key).ok_or("key not found")?;
- Ok(bytes(prop.to_vec()))
+ Ok(Bytes(prop.to_vec()))
}
/// Get collection properties.
///
/// @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| {
@@ -212,7 +208,7 @@
///
/// @param sponsor Address of the sponsor from whose account funds will be debited for operations with the contract.
#[solidity(hide)]
- fn set_collection_sponsor(&mut self, caller: caller, sponsor: address) -> Result<void> {
+ fn set_collection_sponsor(&mut self, caller: Caller, sponsor: Address) -> Result<()> {
self.consume_store_reads_and_writes(1, 1)?;
let caller = T::CrossAccountId::from_eth(caller);
@@ -229,9 +225,9 @@
/// @param sponsor Cross account address of the sponsor from whose account funds will be debited for operations with the contract.
fn set_collection_sponsor_cross(
&mut self,
- caller: caller,
+ caller: Caller,
sponsor: eth::CrossAddress,
- ) -> Result<void> {
+ ) -> Result<()> {
self.consume_store_reads_and_writes(1, 1)?;
let caller = T::CrossAccountId::from_eth(caller);
@@ -252,7 +248,7 @@
/// Collection sponsorship confirmation.
///
/// @dev After setting the sponsor for the collection, it must be confirmed with this function.
- fn confirm_collection_sponsorship(&mut self, caller: caller) -> Result<void> {
+ fn confirm_collection_sponsorship(&mut self, caller: Caller) -> Result<()> {
self.consume_store_writes(1)?;
let caller = T::CrossAccountId::from_eth(caller);
@@ -261,7 +257,7 @@
}
/// Remove collection sponsor.
- fn remove_collection_sponsor(&mut self, caller: caller) -> Result<void> {
+ fn remove_collection_sponsor(&mut self, caller: Caller) -> Result<()> {
self.consume_store_reads_and_writes(1, 1)?;
let caller = T::CrossAccountId::from_eth(caller);
self.remove_sponsor(&caller).map_err(dispatch_to_evm::<T>)
@@ -343,11 +339,7 @@
/// @dev Throws error if limit not found.
/// @param limit Some limit.
#[solidity(rename_selector = "setCollectionLimit")]
- fn set_collection_limit(
- &mut self,
- caller: caller,
- limit: eth::CollectionLimit,
- ) -> Result<void> {
+ fn set_collection_limit(&mut self, caller: Caller, limit: eth::CollectionLimit) -> Result<()> {
self.consume_store_reads_and_writes(1, 1)?;
if !limit.has_value() {
@@ -359,7 +351,7 @@
}
/// Get contract address.
- fn contract_address(&self) -> Result<address> {
+ fn contract_address(&self) -> Result<Address> {
Ok(crate::eth::collection_id_to_address(self.id))
}
@@ -367,9 +359,9 @@
/// @param newAdmin Cross account administrator address.
fn add_collection_admin_cross(
&mut self,
- caller: caller,
+ caller: Caller,
new_admin: eth::CrossAddress,
- ) -> Result<void> {
+ ) -> Result<()> {
self.consume_store_reads_and_writes(2, 2)?;
let caller = T::CrossAccountId::from_eth(caller);
@@ -382,9 +374,9 @@
/// @param admin Cross account administrator address.
fn remove_collection_admin_cross(
&mut self,
- caller: caller,
+ caller: Caller,
admin: eth::CrossAddress,
- ) -> Result<void> {
+ ) -> Result<()> {
self.consume_store_reads_and_writes(2, 2)?;
let caller = T::CrossAccountId::from_eth(caller);
@@ -396,7 +388,7 @@
/// Add collection admin.
/// @param newAdmin Address of the added administrator.
#[solidity(hide)]
- fn add_collection_admin(&mut self, caller: caller, new_admin: address) -> Result<void> {
+ fn add_collection_admin(&mut self, caller: Caller, new_admin: Address) -> Result<()> {
self.consume_store_reads_and_writes(2, 2)?;
let caller = T::CrossAccountId::from_eth(caller);
@@ -409,7 +401,7 @@
///
/// @param admin Address of the removed administrator.
#[solidity(hide)]
- fn remove_collection_admin(&mut self, caller: caller, admin: address) -> Result<void> {
+ fn remove_collection_admin(&mut self, caller: Caller, admin: Address) -> Result<()> {
self.consume_store_reads_and_writes(2, 2)?;
let caller = T::CrossAccountId::from_eth(caller);
@@ -422,7 +414,7 @@
///
/// @param enable If "true" degenerates to nesting: 'Owner' else to nesting: 'Disabled'
#[solidity(rename_selector = "setCollectionNesting")]
- fn set_nesting_bool(&mut self, caller: caller, enable: bool) -> Result<void> {
+ fn set_nesting_bool(&mut self, caller: Caller, enable: bool) -> Result<()> {
self.consume_store_reads_and_writes(1, 1)?;
let caller = T::CrossAccountId::from_eth(caller);
@@ -443,10 +435,10 @@
#[solidity(rename_selector = "setCollectionNesting")]
fn set_nesting(
&mut self,
- caller: caller,
+ caller: Caller,
enable: bool,
- collections: Vec<address>,
- ) -> Result<void> {
+ collections: Vec<Address>,
+ ) -> Result<()> {
self.consume_store_reads_and_writes(1, 1)?;
if collections.is_empty() {
@@ -511,18 +503,12 @@
}
/// Set the collection access method.
/// @param mode Access mode
- /// 0 for Normal
- /// 1 for AllowList
- fn set_collection_access(&mut self, caller: caller, mode: uint8) -> Result<void> {
+ fn set_collection_access(&mut self, caller: Caller, mode: eth::AccessMode) -> Result<()> {
self.consume_store_reads_and_writes(1, 1)?;
let caller = T::CrossAccountId::from_eth(caller);
let permissions = CollectionPermissions {
- access: Some(match mode {
- 0 => AccessMode::Normal,
- 1 => AccessMode::AllowList,
- _ => return Err("not supported access mode".into()),
- }),
+ access: Some(mode.into()),
..Default::default()
};
<Pallet<T>>::update_permissions(&caller, self, permissions).map_err(dispatch_to_evm::<T>)
@@ -540,7 +526,7 @@
///
/// @param user Address of a trusted user.
#[solidity(hide)]
- fn add_to_collection_allow_list(&mut self, caller: caller, user: address) -> Result<void> {
+ fn add_to_collection_allow_list(&mut self, caller: Caller, user: Address) -> Result<()> {
self.consume_store_writes(1)?;
let caller = T::CrossAccountId::from_eth(caller);
@@ -554,9 +540,9 @@
/// @param user User cross account address.
fn add_to_collection_allow_list_cross(
&mut self,
- caller: caller,
+ caller: Caller,
user: eth::CrossAddress,
- ) -> Result<void> {
+ ) -> Result<()> {
self.consume_store_writes(1)?;
let caller = T::CrossAccountId::from_eth(caller);
@@ -569,7 +555,7 @@
///
/// @param user Address of a removed user.
#[solidity(hide)]
- fn remove_from_collection_allow_list(&mut self, caller: caller, user: address) -> Result<void> {
+ fn remove_from_collection_allow_list(&mut self, caller: Caller, user: Address) -> Result<()> {
self.consume_store_writes(1)?;
let caller = T::CrossAccountId::from_eth(caller);
@@ -583,9 +569,9 @@
/// @param user User cross account address.
fn remove_from_collection_allow_list_cross(
&mut self,
- caller: caller,
+ caller: Caller,
user: eth::CrossAddress,
- ) -> Result<void> {
+ ) -> Result<()> {
self.consume_store_writes(1)?;
let caller = T::CrossAccountId::from_eth(caller);
@@ -597,7 +583,7 @@
/// Switch permission for minting.
///
/// @param mode Enable if "true".
- fn set_collection_mint_mode(&mut self, caller: caller, mode: bool) -> Result<void> {
+ fn set_collection_mint_mode(&mut self, caller: Caller, mode: bool) -> Result<()> {
self.consume_store_reads_and_writes(1, 1)?;
let caller = T::CrossAccountId::from_eth(caller);
@@ -613,7 +599,7 @@
/// @param user account to verify
/// @return "true" if account is the owner or admin
#[solidity(hide, rename_selector = "isOwnerOrAdmin")]
- fn is_owner_or_admin_eth(&self, user: address) -> Result<bool> {
+ fn is_owner_or_admin_eth(&self, user: Address) -> Result<bool> {
let user = T::CrossAccountId::from_eth(user);
Ok(self.is_owner_or_admin(&user))
}
@@ -630,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",
@@ -654,7 +640,7 @@
/// @dev Owner can be changed only by current owner
/// @param newOwner new owner account
#[solidity(hide, rename_selector = "changeCollectionOwner")]
- fn set_owner(&mut self, caller: caller, new_owner: address) -> Result<void> {
+ fn set_owner(&mut self, caller: Caller, new_owner: Address) -> Result<()> {
self.consume_store_writes(1)?;
let caller = T::CrossAccountId::from_eth(caller);
@@ -680,9 +666,9 @@
/// @param newOwner new owner cross account
fn change_collection_owner_cross(
&mut self,
- caller: caller,
+ caller: Caller,
new_owner: eth::CrossAddress,
- ) -> Result<void> {
+ ) -> Result<()> {
self.consume_store_writes(1)?;
let caller = T::CrossAccountId::from_eth(caller);
pallets/common/src/eth.rsdiffbeforeafterboth--- a/pallets/common/src/eth.rs
+++ b/pallets/common/src/eth.rs
@@ -18,12 +18,9 @@
use alloc::format;
use sp_std::{vec, vec::Vec};
-use evm_coder::{
- AbiCoder,
- types::{uint256, address},
-};
+use evm_coder::{AbiCoder, types::Address};
pub use pallet_evm::{Config, account::CrossAccountId};
-use sp_core::H160;
+use sp_core::{H160, U256};
use up_data_structs::CollectionId;
// 0x17c4e6453Cc49AAAaEACA894e6D9683e00000001 - collection 1
@@ -33,7 +30,7 @@
];
/// Maps the ethereum address of the collection in substrate.
-pub fn map_eth_to_id(eth: &H160) -> Option<CollectionId> {
+pub fn map_eth_to_id(eth: &Address) -> Option<CollectionId> {
if eth[0..16] != ETH_COLLECTION_PREFIX {
return None;
}
@@ -43,7 +40,7 @@
}
/// Maps the substrate collection id in ethereum.
-pub fn collection_id_to_address(id: CollectionId) -> H160 {
+pub fn collection_id_to_address(id: CollectionId) -> Address {
let mut out = [0; 20];
out[0..16].copy_from_slice(Ð_COLLECTION_PREFIX);
out[16..20].copy_from_slice(&u32::to_be_bytes(id.0));
@@ -51,12 +48,12 @@
}
/// Check if the ethereum address is a collection.
-pub fn is_collection(address: &H160) -> bool {
+pub fn is_collection(address: &Address) -> bool {
address[0..16] == ETH_COLLECTION_PREFIX
}
-/// Convert `uint256` to `CrossAccountId`.
-pub fn convert_uint256_to_cross_account<T: Config>(from: uint256) -> T::CrossAccountId
+/// Convert `U256` to `CrossAccountId`.
+pub fn convert_uint256_to_cross_account<T: Config>(from: U256) -> T::CrossAccountId
where
T::AccountId: From<[u8; 32]>,
{
@@ -69,8 +66,8 @@
/// Cross account struct
#[derive(Debug, Default, AbiCoder)]
pub struct CrossAddress {
- pub(crate) eth: address,
- pub(crate) sub: uint256,
+ pub(crate) eth: Address,
+ pub(crate) sub: U256,
}
impl CrossAddress {
@@ -97,7 +94,7 @@
{
Self {
eth: Default::default(),
- sub: uint256::from_big_endian(account_id.as_ref()),
+ sub: U256::from_big_endian(account_id.as_ref()),
}
}
/// Converts [`CrossAddress`] to `CrossAccountId`.
@@ -121,17 +118,17 @@
/// 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,
- value: evm_coder::types::bytes,
+ key: evm_coder::types::String,
+ value: evm_coder::types::Bytes,
}
impl TryFrom<up_data_structs::Property> for Property {
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());
+ let value = evm_coder::types::Bytes(from.value.to_vec());
Ok(Property { key, value })
}
}
@@ -187,7 +184,7 @@
#[derive(Debug, Default, AbiCoder)]
pub struct CollectionLimit {
field: CollectionLimitField,
- value: Option<uint256>,
+ value: Option<U256>,
}
impl CollectionLimit {
@@ -345,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>,
}
@@ -363,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 }
@@ -393,12 +390,12 @@
#[derive(Debug, Default, AbiCoder)]
pub struct CollectionNesting {
token_owner: bool,
- ids: Vec<uint256>,
+ ids: Vec<U256>,
}
impl CollectionNesting {
/// Create [`CollectionNesting`].
- pub fn new(token_owner: bool, ids: Vec<uint256>) -> Self {
+ pub fn new(token_owner: bool, ids: Vec<U256>) -> Self {
Self { token_owner, ids }
}
}
@@ -416,3 +413,32 @@
Self { field, value }
}
}
+
+/// Ethereum representation of `AccessMode` (see [`up_data_structs::AccessMode`]).
+#[derive(AbiCoder, Copy, Clone, Default, Debug)]
+#[repr(u8)]
+pub enum AccessMode {
+ /// Access grant for owner and admins. Used as default.
+ #[default]
+ Normal,
+ /// Like a [`Normal`](AccessMode::Normal) but also users in allow list.
+ AllowList,
+}
+
+impl From<up_data_structs::AccessMode> for AccessMode {
+ fn from(value: up_data_structs::AccessMode) -> Self {
+ match value {
+ up_data_structs::AccessMode::Normal => AccessMode::Normal,
+ up_data_structs::AccessMode::AllowList => AccessMode::AllowList,
+ }
+ }
+}
+
+impl Into<up_data_structs::AccessMode> for AccessMode {
+ fn into(self) -> up_data_structs::AccessMode {
+ match self {
+ AccessMode::Normal => up_data_structs::AccessMode::Normal,
+ AccessMode::AllowList => up_data_structs::AccessMode::AllowList,
+ }
+ }
+}
pallets/evm-coder-substrate/src/lib.rsdiffbeforeafterboth--- a/pallets/evm-coder-substrate/src/lib.rs
+++ b/pallets/evm-coder-substrate/src/lib.rs
@@ -41,7 +41,7 @@
use evm_coder::{
abi::{AbiReader, AbiWrite, AbiWriter},
execution,
- types::{Msg, value},
+ types::{Msg, Value},
};
pub use pallet::*;
@@ -256,7 +256,7 @@
>(
caller: H160,
e: &mut E,
- value: value,
+ value: Value,
input: &[u8],
) -> execution::Result<Option<AbiWriter>> {
let (selector, mut reader) = AbiReader::new_call(input)?;
pallets/evm-contract-helpers/src/eth.rsdiffbeforeafterboth--- a/pallets/evm-contract-helpers/src/eth.rs
+++ b/pallets/evm-contract-helpers/src/eth.rs
@@ -49,25 +49,25 @@
ContractSponsorSet {
/// Contract address of the affected collection.
#[indexed]
- contract_address: address,
+ contract_address: Address,
/// New sponsor address.
- sponsor: address,
+ sponsor: Address,
},
/// New sponsor was confirm.
ContractSponsorshipConfirmed {
/// Contract address of the affected collection.
#[indexed]
- contract_address: address,
+ contract_address: Address,
/// New sponsor address.
- sponsor: address,
+ sponsor: Address,
},
/// Collection sponsor was removed.
ContractSponsorRemoved {
/// Contract address of the affected collection.
#[indexed]
- contract_address: address,
+ contract_address: Address,
},
}
@@ -96,7 +96,7 @@
/// @dev Returns zero address if contract does not exists
/// @param contractAddress Contract to get owner of
/// @return address Owner of contract
- fn contract_owner(&self, contract_address: address) -> Result<address> {
+ fn contract_owner(&self, contract_address: Address) -> Result<Address> {
Ok(<Owner<T>>::get(contract_address))
}
@@ -105,10 +105,10 @@
/// @param sponsor User address who set as pending sponsor.
fn set_sponsor(
&mut self,
- caller: caller,
- contract_address: address,
- sponsor: address,
- ) -> Result<void> {
+ caller: Caller,
+ contract_address: Address,
+ sponsor: Address,
+ ) -> Result<()> {
self.recorder().consume_sload()?;
self.recorder().consume_sstore()?;
@@ -125,7 +125,7 @@
/// Set contract as self sponsored.
///
/// @param contractAddress Contract for which a self sponsoring is being enabled.
- fn self_sponsored_enable(&mut self, caller: caller, contract_address: address) -> Result<void> {
+ fn self_sponsored_enable(&mut self, caller: Caller, contract_address: Address) -> Result<()> {
self.recorder().consume_sload()?;
self.recorder().consume_sstore()?;
@@ -146,7 +146,7 @@
/// Remove sponsor.
///
/// @param contractAddress Contract for which a sponsorship is being removed.
- fn remove_sponsor(&mut self, caller: caller, contract_address: address) -> Result<void> {
+ fn remove_sponsor(&mut self, caller: Caller, contract_address: Address) -> Result<()> {
self.recorder().consume_sload()?;
self.recorder().consume_sstore()?;
@@ -161,7 +161,7 @@
/// @dev Caller must be same that set via [`setSponsor`].
///
/// @param contractAddress Сontract for which need to confirm sponsorship.
- fn confirm_sponsorship(&mut self, caller: caller, contract_address: address) -> Result<void> {
+ fn confirm_sponsorship(&mut self, caller: Caller, contract_address: Address) -> Result<()> {
self.recorder().consume_sload()?;
self.recorder().consume_sstore()?;
@@ -175,7 +175,7 @@
///
/// @param contractAddress The contract for which a sponsor is requested.
/// @return Tuble with sponsor address and his substrate mirror. If there is no confirmed sponsor error "Contract has no sponsor" throw.
- fn sponsor(&self, contract_address: address) -> Result<Option<eth::CrossAddress>> {
+ fn sponsor(&self, contract_address: Address) -> Result<Option<eth::CrossAddress>> {
Ok(match Pallet::<T>::get_sponsor(contract_address) {
Some(ref value) => Some(eth::CrossAddress::from_sub_cross_account::<T>(value)),
None => None,
@@ -186,7 +186,7 @@
///
/// @param contractAddress The contract for which the presence of a confirmed sponsor is checked.
/// @return **true** if contract has confirmed sponsor.
- fn has_sponsor(&self, contract_address: address) -> Result<bool> {
+ fn has_sponsor(&self, contract_address: Address) -> Result<bool> {
Ok(Pallet::<T>::get_sponsor(contract_address).is_some())
}
@@ -194,23 +194,23 @@
///
/// @param contractAddress The contract for which the presence of a pending sponsor is checked.
/// @return **true** if contract has pending sponsor.
- fn has_pending_sponsor(&self, contract_address: address) -> Result<bool> {
+ fn has_pending_sponsor(&self, contract_address: Address) -> Result<bool> {
Ok(match Sponsoring::<T>::get(contract_address) {
SponsorshipState::Disabled | SponsorshipState::Confirmed(_) => false,
SponsorshipState::Unconfirmed(_) => true,
})
}
- fn sponsoring_enabled(&self, contract_address: address) -> Result<bool> {
+ fn sponsoring_enabled(&self, contract_address: Address) -> Result<bool> {
Ok(<Pallet<T>>::sponsoring_mode(contract_address) != SponsoringModeT::Disabled)
}
fn set_sponsoring_mode(
&mut self,
- caller: caller,
- contract_address: address,
+ caller: Caller,
+ contract_address: Address,
mode: SponsoringModeT,
- ) -> Result<void> {
+ ) -> Result<()> {
self.recorder().consume_sload()?;
self.recorder().consume_sstore()?;
@@ -223,7 +223,7 @@
/// Get current contract sponsoring rate limit
/// @param contractAddress Contract to get sponsoring rate limit of
/// @return uint32 Amount of blocks between two sponsored transactions
- fn sponsoring_rate_limit(&self, contract_address: address) -> Result<uint32> {
+ fn sponsoring_rate_limit(&self, contract_address: Address) -> Result<u32> {
self.recorder().consume_sload()?;
Ok(<SponsoringRateLimit<T>>::get(contract_address)
@@ -239,10 +239,10 @@
/// @dev Only contract owner can change this setting
fn set_sponsoring_rate_limit(
&mut self,
- caller: caller,
- contract_address: address,
- rate_limit: uint32,
- ) -> Result<void> {
+ caller: Caller,
+ contract_address: Address,
+ rate_limit: u32,
+ ) -> Result<()> {
self.recorder().consume_sload()?;
self.recorder().consume_sstore()?;
@@ -259,10 +259,10 @@
/// @dev Only contract owner can change this setting
fn set_sponsoring_fee_limit(
&mut self,
- caller: caller,
- contract_address: address,
- fee_limit: uint256,
- ) -> Result<void> {
+ caller: Caller,
+ contract_address: Address,
+ fee_limit: U256,
+ ) -> Result<()> {
self.recorder().consume_sload()?;
self.recorder().consume_sstore()?;
@@ -276,7 +276,7 @@
/// @param contractAddress Contract to get sponsoring fee limit of
/// @return uint256 Maximum amount of fee that could be spent by single
/// transaction
- fn sponsoring_fee_limit(&self, contract_address: address) -> Result<uint256> {
+ fn sponsoring_fee_limit(&self, contract_address: Address) -> Result<U256> {
self.recorder().consume_sload()?;
Ok(get_sponsoring_fee_limit::<T>(contract_address))
@@ -287,7 +287,7 @@
/// @param contractAddress Contract to check allowlist of
/// @param user User to check
/// @return bool Is specified users exists in contract allowlist
- fn allowed(&self, contract_address: address, user: address) -> Result<bool> {
+ fn allowed(&self, contract_address: Address, user: Address) -> Result<bool> {
self.0.consume_sload()?;
Ok(<Pallet<T>>::allowed(contract_address, user))
}
@@ -300,11 +300,11 @@
/// @dev Only contract owner can change this setting
fn toggle_allowed(
&mut self,
- caller: caller,
- contract_address: address,
- user: address,
+ caller: Caller,
+ contract_address: Address,
+ user: Address,
is_allowed: bool,
- ) -> Result<void> {
+ ) -> Result<()> {
self.recorder().consume_sload()?;
self.recorder().consume_sstore()?;
@@ -320,7 +320,7 @@
/// in case of allowlist access enabled, only users from allowlist may call this contract
/// @param contractAddress Contract to get allowlist access of
/// @return bool Is specified contract has allowlist access enabled
- fn allowlist_enabled(&self, contract_address: address) -> Result<bool> {
+ fn allowlist_enabled(&self, contract_address: Address) -> Result<bool> {
Ok(<AllowlistEnabled<T>>::get(contract_address))
}
@@ -329,10 +329,10 @@
/// @param enabled Should allowlist access to be enabled?
fn toggle_allowlist(
&mut self,
- caller: caller,
- contract_address: address,
+ caller: Caller,
+ contract_address: Address,
enabled: bool,
- ) -> Result<void> {
+ ) -> Result<()> {
self.recorder().consume_sload()?;
self.recorder().consume_sstore()?;
@@ -441,7 +441,7 @@
}
}
-fn get_sponsoring_fee_limit<T: Config>(contract_address: address) -> uint256 {
+fn get_sponsoring_fee_limit<T: Config>(contract_address: Address) -> U256 {
<SponsoringFeeLimit<T>>::get(contract_address)
.get(&0xffffffff)
.cloned()
pallets/fungible/src/erc.rsdiffbeforeafterboth--- a/pallets/fungible/src/erc.rs
+++ b/pallets/fungible/src/erc.rs
@@ -32,7 +32,7 @@
use pallet_evm::{account::CrossAccountId, PrecompileHandle};
use pallet_evm_coder_substrate::{call, dispatch_to_evm};
use pallet_structure::{SelfWeightOf as StructureWeight, weights::WeightInfo as _};
-use sp_core::Get;
+use sp_core::{U256, Get};
use crate::{
Allowance, Balance, Config, FungibleHandle, Pallet, SelfWeightOf, TotalSupply,
@@ -43,50 +43,50 @@
pub enum ERC20Events {
Transfer {
#[indexed]
- from: address,
+ from: Address,
#[indexed]
- to: address,
- value: uint256,
+ to: Address,
+ value: U256,
},
Approval {
#[indexed]
- owner: address,
+ owner: Address,
#[indexed]
- spender: address,
- value: uint256,
+ spender: Address,
+ value: U256,
},
}
#[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<uint256> {
+ fn total_supply(&self) -> Result<U256> {
self.consume_store_reads(1)?;
Ok(<TotalSupply<T>>::get(self.id).into())
}
- fn decimals(&self) -> Result<uint8> {
+ fn decimals(&self) -> Result<u8> {
Ok(if let CollectionMode::Fungible(decimals) = &self.mode {
*decimals
} else {
unreachable!()
})
}
- fn balance_of(&self, owner: address) -> Result<uint256> {
+ fn balance_of(&self, owner: Address) -> Result<U256> {
self.consume_store_reads(1)?;
let owner = T::CrossAccountId::from_eth(owner);
let balance = <Balance<T>>::get((self.id, owner));
Ok(balance.into())
}
#[weight(<SelfWeightOf<T>>::transfer())]
- fn transfer(&mut self, caller: caller, to: address, amount: uint256) -> Result<bool> {
+ fn transfer(&mut self, caller: Caller, to: Address, amount: U256) -> Result<bool> {
let caller = T::CrossAccountId::from_eth(caller);
let to = T::CrossAccountId::from_eth(to);
let amount = amount.try_into().map_err(|_| "amount overflow")?;
@@ -101,10 +101,10 @@
#[weight(<SelfWeightOf<T>>::transfer_from())]
fn transfer_from(
&mut self,
- caller: caller,
- from: address,
- to: address,
- amount: uint256,
+ caller: Caller,
+ from: Address,
+ to: Address,
+ amount: U256,
) -> Result<bool> {
let caller = T::CrossAccountId::from_eth(caller);
let from = T::CrossAccountId::from_eth(from);
@@ -119,7 +119,7 @@
Ok(true)
}
#[weight(<SelfWeightOf<T>>::approve())]
- fn approve(&mut self, caller: caller, spender: address, amount: uint256) -> Result<bool> {
+ fn approve(&mut self, caller: Caller, spender: Address, amount: U256) -> Result<bool> {
let caller = T::CrossAccountId::from_eth(caller);
let spender = T::CrossAccountId::from_eth(spender);
let amount = amount.try_into().map_err(|_| "amount overflow")?;
@@ -128,7 +128,7 @@
.map_err(dispatch_to_evm::<T>)?;
Ok(true)
}
- fn allowance(&self, owner: address, spender: address) -> Result<uint256> {
+ fn allowance(&self, owner: Address, spender: Address) -> Result<U256> {
self.consume_store_reads(1)?;
let owner = T::CrossAccountId::from_eth(owner);
let spender = T::CrossAccountId::from_eth(spender);
@@ -137,7 +137,7 @@
}
/// @notice Returns collection helper contract address
- fn collection_helper_address(&self) -> Result<address> {
+ fn collection_helper_address(&self) -> Result<Address> {
Ok(T::ContractAddress::get())
}
}
@@ -148,7 +148,7 @@
/// @param to account that will receive minted tokens
/// @param amount amount of tokens to mint
#[weight(<SelfWeightOf<T>>::create_item())]
- fn mint(&mut self, caller: caller, to: address, amount: uint256) -> Result<bool> {
+ fn mint(&mut self, caller: Caller, to: Address, amount: U256) -> Result<bool> {
let caller = T::CrossAccountId::from_eth(caller);
let to = T::CrossAccountId::from_eth(to);
let amount = amount.try_into().map_err(|_| "amount overflow")?;
@@ -167,18 +167,18 @@
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())]
fn mint_cross(
&mut self,
- caller: caller,
+ caller: Caller,
to: pallet_common::eth::CrossAddress,
- amount: uint256,
+ amount: U256,
) -> Result<bool> {
let caller = T::CrossAccountId::from_eth(caller);
let to = to.into_sub_cross_account::<T>()?;
@@ -194,9 +194,9 @@
#[weight(<SelfWeightOf<T>>::approve())]
fn approve_cross(
&mut self,
- caller: caller,
+ caller: Caller,
spender: pallet_common::eth::CrossAddress,
- amount: uint256,
+ amount: U256,
) -> Result<bool> {
let caller = T::CrossAccountId::from_eth(caller);
let spender = spender.into_sub_cross_account::<T>()?;
@@ -214,7 +214,7 @@
/// @param amount The amount that will be burnt.
#[solidity(hide)]
#[weight(<SelfWeightOf<T>>::burn_from())]
- fn burn_from(&mut self, caller: caller, from: address, amount: uint256) -> Result<bool> {
+ fn burn_from(&mut self, caller: Caller, from: Address, amount: U256) -> Result<bool> {
let caller = T::CrossAccountId::from_eth(caller);
let from = T::CrossAccountId::from_eth(from);
let amount = amount.try_into().map_err(|_| "amount overflow")?;
@@ -235,9 +235,9 @@
#[weight(<SelfWeightOf<T>>::burn_from())]
fn burn_from_cross(
&mut self,
- caller: caller,
+ caller: Caller,
from: pallet_common::eth::CrossAddress,
- amount: uint256,
+ amount: U256,
) -> Result<bool> {
let caller = T::CrossAccountId::from_eth(caller);
let from = from.into_sub_cross_account::<T>()?;
@@ -254,7 +254,7 @@
/// Mint tokens for multiple accounts.
/// @param amounts array of pairs of account address and amount
#[weight(<SelfWeightOf<T>>::create_multiple_items_ex(amounts.len() as u32))]
- fn mint_bulk(&mut self, caller: caller, amounts: Vec<(address, uint256)>) -> Result<bool> {
+ fn mint_bulk(&mut self, caller: Caller, amounts: Vec<(Address, U256)>) -> Result<bool> {
let caller = T::CrossAccountId::from_eth(caller);
let budget = self
.recorder
@@ -277,9 +277,9 @@
#[weight(<SelfWeightOf<T>>::transfer())]
fn transfer_cross(
&mut self,
- caller: caller,
+ caller: Caller,
to: pallet_common::eth::CrossAddress,
- amount: uint256,
+ amount: U256,
) -> Result<bool> {
let caller = T::CrossAccountId::from_eth(caller);
let to = to.into_sub_cross_account::<T>()?;
@@ -295,10 +295,10 @@
#[weight(<SelfWeightOf<T>>::transfer_from())]
fn transfer_from_cross(
&mut self,
- caller: caller,
+ caller: Caller,
from: pallet_common::eth::CrossAddress,
to: pallet_common::eth::CrossAddress,
- amount: uint256,
+ amount: U256,
) -> Result<bool> {
let caller = T::CrossAccountId::from_eth(caller);
let from = from.into_sub_cross_account::<T>()?;
pallets/fungible/src/stubs/UniqueFungible.rawdiffbeforeafterbothbinary blob — no preview
pallets/fungible/src/stubs/UniqueFungible.soldiffbeforeafterboth--- a/pallets/fungible/src/stubs/UniqueFungible.sol
+++ b/pallets/fungible/src/stubs/UniqueFungible.sol
@@ -274,11 +274,9 @@
/// Set the collection access method.
/// @param mode Access mode
- /// 0 for Normal
- /// 1 for AllowList
/// @dev EVM selector for this function is: 0x41835d4c,
/// or in textual repr: setCollectionAccess(uint8)
- function setCollectionAccess(uint8 mode) public {
+ function setCollectionAccess(AccessMode mode) public {
require(false, stub_error);
mode;
dummy = 0;
@@ -443,6 +441,14 @@
uint256 sub;
}
+/// Ethereum representation of `AccessMode` (see [`up_data_structs::AccessMode`]).
+enum AccessMode {
+ /// Access grant for owner and admins. Used as default.
+ Normal,
+ /// Like a [`Normal`](AccessMode::Normal) but also users in allow list.
+ AllowList
+}
+
/// Ethereum representation of `NestingPermissions` (see [`up_data_structs::NestingPermissions`]) field.
struct CollectionNestingPermission {
CollectionPermissionField field;
pallets/nonfungible/src/erc.rsdiffbeforeafterboth--- a/pallets/nonfungible/src/erc.rs
+++ b/pallets/nonfungible/src/erc.rs
@@ -43,7 +43,7 @@
use pallet_evm::{account::CrossAccountId, PrecompileHandle};
use pallet_evm_coder_substrate::call;
use pallet_structure::{SelfWeightOf as StructureWeight, weights::WeightInfo as _};
-use sp_core::Get;
+use sp_core::{U256, Get};
use crate::{
AccountBalance, Config, CreateItemData, NonfungibleHandle, Pallet, TokenData, TokensMinted,
@@ -63,8 +63,8 @@
#[solidity(hide)]
fn set_token_property_permission(
&mut self,
- caller: caller,
- key: string,
+ caller: Caller,
+ key: String,
is_mutable: bool,
collection_admin: bool,
token_owner: bool,
@@ -93,7 +93,7 @@
#[weight(<SelfWeightOf<T>>::set_token_property_permissions(permissions.len() as u32))]
fn set_token_property_permissions(
&mut self,
- caller: caller,
+ caller: Caller,
permissions: Vec<eth::TokenPropertyPermission>,
) -> Result<()> {
let caller = T::CrossAccountId::from_eth(caller);
@@ -121,10 +121,10 @@
#[weight(<SelfWeightOf<T>>::set_token_properties(1))]
fn set_property(
&mut self,
- caller: caller,
- token_id: uint256,
- key: string,
- value: bytes,
+ caller: Caller,
+ token_id: U256,
+ key: String,
+ value: Bytes,
) -> Result<()> {
let caller = T::CrossAccountId::from_eth(caller);
let token_id: u32 = token_id.try_into().map_err(|_| "token id overflow")?;
@@ -154,8 +154,8 @@
#[weight(<SelfWeightOf<T>>::set_token_properties(properties.len() as u32))]
fn set_properties(
&mut self,
- caller: caller,
- token_id: uint256,
+ caller: Caller,
+ token_id: U256,
properties: Vec<eth::Property>,
) -> 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: uint256, 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)
@@ -209,9 +209,9 @@
#[weight(<SelfWeightOf<T>>::delete_token_properties(keys.len() as u32))]
fn delete_properties(
&mut self,
- token_id: uint256,
- caller: caller,
- keys: Vec<string>,
+ token_id: U256,
+ caller: Caller,
+ 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: uint256, 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()
@@ -261,11 +261,11 @@
/// any transfer, the approved address for that NFT (if any) is reset to none.
Transfer {
#[indexed]
- from: address,
+ from: Address,
#[indexed]
- to: address,
+ to: Address,
#[indexed]
- token_id: uint256,
+ token_id: U256,
},
/// @dev This emits when the approved address for an NFT is changed or
/// reaffirmed. The zero address indicates there is no approved address.
@@ -273,20 +273,20 @@
/// address for that NFT (if any) is reset to none.
Approval {
#[indexed]
- owner: address,
+ owner: Address,
#[indexed]
- approved: address,
+ approved: Address,
#[indexed]
- token_id: uint256,
+ token_id: U256,
},
/// @dev This emits when an operator is enabled or disabled for an owner.
/// The operator can manage all NFTs of the owner.
#[allow(dead_code)]
ApprovalForAll {
#[indexed]
- owner: address,
+ owner: Address,
#[indexed]
- operator: address,
+ operator: Address,
approved: bool,
},
}
@@ -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: uint256) -> 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!(
@@ -368,12 +368,12 @@
/// @param index A counter less than `totalSupply()`
/// @return The token identifier for the `index`th NFT,
/// (sort order not specified)
- fn token_by_index(&self, index: uint256) -> Result<uint256> {
+ fn token_by_index(&self, index: U256) -> Result<U256> {
Ok(index)
}
/// @dev Not implemented
- fn token_of_owner_by_index(&self, _owner: address, _index: uint256) -> Result<uint256> {
+ fn token_of_owner_by_index(&self, _owner: Address, _index: U256) -> Result<U256> {
// TODO: Not implemetable
Err("not implemented".into())
}
@@ -381,7 +381,7 @@
/// @notice Count NFTs tracked by this contract
/// @return A count of valid NFTs tracked by this contract, where each one of
/// them has an assigned and queryable owner not equal to the zero address
- fn total_supply(&self) -> Result<uint256> {
+ fn total_supply(&self) -> Result<U256> {
self.consume_store_reads(1)?;
Ok(<Pallet<T>>::total_supply(self).into())
}
@@ -396,7 +396,7 @@
/// function throws for queries about the zero address.
/// @param owner An address for whom to query the balance
/// @return The number of NFTs owned by `owner`, possibly zero
- fn balance_of(&self, owner: address) -> Result<uint256> {
+ fn balance_of(&self, owner: Address) -> Result<U256> {
self.consume_store_reads(1)?;
let owner = T::CrossAccountId::from_eth(owner);
let balance = <AccountBalance<T>>::get((self.id, owner));
@@ -407,7 +407,7 @@
/// about them do throw.
/// @param tokenId The identifier for an NFT
/// @return The address of the owner of the NFT
- fn owner_of(&self, token_id: uint256) -> Result<address> {
+ fn owner_of(&self, token_id: U256) -> Result<Address> {
self.consume_store_reads(1)?;
let token: TokenId = token_id.try_into()?;
Ok(*<TokenData<T>>::get((self.id, token))
@@ -419,21 +419,16 @@
#[solidity(rename_selector = "safeTransferFrom")]
fn safe_transfer_from_with_data(
&mut self,
- _from: address,
- _to: address,
- _token_id: uint256,
- _data: bytes,
- ) -> Result<void> {
+ _from: Address,
+ _to: Address,
+ _token_id: U256,
+ _data: Bytes,
+ ) -> Result<()> {
// TODO: Not implemetable
Err("not implemented".into())
}
/// @dev Not implemented
- fn safe_transfer_from(
- &mut self,
- _from: address,
- _to: address,
- _token_id: uint256,
- ) -> Result<void> {
+ fn safe_transfer_from(&mut self, _from: Address, _to: Address, _token_id: U256) -> Result<()> {
// TODO: Not implemetable
Err("not implemented".into())
}
@@ -450,11 +445,11 @@
#[weight(<SelfWeightOf<T>>::transfer_from())]
fn transfer_from(
&mut self,
- caller: caller,
- from: address,
- to: address,
- token_id: uint256,
- ) -> Result<void> {
+ caller: Caller,
+ from: Address,
+ to: Address,
+ token_id: U256,
+ ) -> Result<()> {
let caller = T::CrossAccountId::from_eth(caller);
let from = T::CrossAccountId::from_eth(from);
let to = T::CrossAccountId::from_eth(to);
@@ -475,7 +470,7 @@
/// @param approved The new approved NFT controller
/// @param tokenId The NFT to approve
#[weight(<SelfWeightOf<T>>::approve())]
- fn approve(&mut self, caller: caller, approved: address, token_id: uint256) -> Result<void> {
+ fn approve(&mut self, caller: Caller, approved: Address, token_id: U256) -> Result<()> {
let caller = T::CrossAccountId::from_eth(caller);
let approved = T::CrossAccountId::from_eth(approved);
let token = token_id.try_into()?;
@@ -492,10 +487,10 @@
#[weight(<SelfWeightOf<T>>::set_allowance_for_all())]
fn set_approval_for_all(
&mut self,
- caller: caller,
- operator: address,
+ caller: Caller,
+ operator: Address,
approved: bool,
- ) -> Result<void> {
+ ) -> Result<()> {
let caller = T::CrossAccountId::from_eth(caller);
let operator = T::CrossAccountId::from_eth(operator);
@@ -505,14 +500,14 @@
}
/// @dev Not implemented
- fn get_approved(&self, _token_id: uint256) -> Result<address> {
+ fn get_approved(&self, _token_id: U256) -> Result<Address> {
// TODO: Not implemetable
Err("not implemented".into())
}
/// @notice Tells whether the given `owner` approves the `operator`.
#[weight(<SelfWeightOf<T>>::allowance_for_all())]
- fn is_approved_for_all(&self, owner: address, operator: address) -> Result<bool> {
+ fn is_approved_for_all(&self, owner: Address, operator: Address) -> Result<bool> {
let owner = T::CrossAccountId::from_eth(owner);
let operator = T::CrossAccountId::from_eth(operator);
@@ -528,7 +523,7 @@
/// operator of the current owner.
/// @param tokenId The NFT to approve
#[weight(<SelfWeightOf<T>>::burn_item())]
- fn burn(&mut self, caller: caller, token_id: uint256) -> Result<void> {
+ fn burn(&mut self, caller: Caller, token_id: U256) -> Result<()> {
let caller = T::CrossAccountId::from_eth(caller);
let token = token_id.try_into()?;
@@ -544,8 +539,8 @@
/// @param to The new owner
/// @return uint256 The id of the newly minted token
#[weight(<SelfWeightOf<T>>::create_item())]
- fn mint(&mut self, caller: caller, to: address) -> Result<uint256> {
- let token_id: uint256 = <TokensMinted<T>>::get(self.id)
+ fn mint(&mut self, caller: Caller, to: Address) -> Result<U256> {
+ let token_id: U256 = <TokensMinted<T>>::get(self.id)
.checked_add(1)
.ok_or("item id overflow")?
.into();
@@ -560,7 +555,7 @@
/// @param tokenId ID of the minted NFT
#[solidity(hide, rename_selector = "mint")]
#[weight(<SelfWeightOf<T>>::create_item())]
- fn mint_check_id(&mut self, caller: caller, to: address, token_id: uint256) -> Result<bool> {
+ fn mint_check_id(&mut self, caller: Caller, to: Address, token_id: U256) -> Result<bool> {
let caller = T::CrossAccountId::from_eth(caller);
let to = T::CrossAccountId::from_eth(to);
let token_id: u32 = token_id.try_into()?;
@@ -598,11 +593,11 @@
#[weight(<SelfWeightOf<T>>::create_item())]
fn mint_with_token_uri(
&mut self,
- caller: caller,
- to: address,
- token_uri: string,
- ) -> Result<uint256> {
- let token_id: uint256 = <TokensMinted<T>>::get(self.id)
+ caller: Caller,
+ to: Address,
+ token_uri: String,
+ ) -> Result<U256> {
+ let token_id: U256 = <TokensMinted<T>>::get(self.id)
.checked_add(1)
.ok_or("item id overflow")?
.into();
@@ -620,10 +615,10 @@
#[weight(<SelfWeightOf<T>>::create_item())]
fn mint_with_token_uri_check_id(
&mut self,
- caller: caller,
- to: address,
- token_id: uint256,
- token_uri: string,
+ caller: Caller,
+ to: Address,
+ token_id: U256,
+ token_uri: String,
) -> Result<bool> {
let key = key::url();
let permission = get_token_permission::<T>(self.id, &key)?;
@@ -675,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())
@@ -696,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)
@@ -709,28 +704,28 @@
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.
///
/// @param tokenId Id for the token.
- fn cross_owner_of(&self, token_id: uint256) -> Result<eth::CrossAddress> {
+ fn cross_owner_of(&self, token_id: U256) -> Result<eth::CrossAddress> {
Self::token_owner(&self, token_id.try_into()?)
.map(|o| eth::CrossAddress::from_sub_cross_account::<T>(&o))
.ok_or(Error::Revert("key too large".into()))
@@ -741,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: uint256, 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| {
@@ -770,10 +765,10 @@
#[weight(<SelfWeightOf<T>>::approve())]
fn approve_cross(
&mut self,
- caller: caller,
+ caller: Caller,
approved: eth::CrossAddress,
- token_id: uint256,
- ) -> Result<void> {
+ token_id: U256,
+ ) -> Result<()> {
let caller = T::CrossAccountId::from_eth(caller);
let approved = approved.into_sub_cross_account::<T>()?;
let token = token_id.try_into()?;
@@ -789,7 +784,7 @@
/// @param to The new owner
/// @param tokenId The NFT to transfer
#[weight(<SelfWeightOf<T>>::transfer())]
- fn transfer(&mut self, caller: caller, to: address, token_id: uint256) -> Result<void> {
+ fn transfer(&mut self, caller: Caller, to: Address, token_id: U256) -> Result<()> {
let caller = T::CrossAccountId::from_eth(caller);
let to = T::CrossAccountId::from_eth(to);
let token = token_id.try_into()?;
@@ -809,10 +804,10 @@
#[weight(<SelfWeightOf<T>>::transfer())]
fn transfer_cross(
&mut self,
- caller: caller,
+ caller: Caller,
to: eth::CrossAddress,
- token_id: uint256,
- ) -> Result<void> {
+ token_id: U256,
+ ) -> Result<()> {
let caller = T::CrossAccountId::from_eth(caller);
let to = to.into_sub_cross_account::<T>()?;
let token = token_id.try_into()?;
@@ -833,11 +828,11 @@
#[weight(<SelfWeightOf<T>>::transfer())]
fn transfer_from_cross(
&mut self,
- caller: caller,
+ caller: Caller,
from: eth::CrossAddress,
to: eth::CrossAddress,
- token_id: uint256,
- ) -> Result<void> {
+ token_id: U256,
+ ) -> Result<()> {
let caller = T::CrossAccountId::from_eth(caller);
let from = from.into_sub_cross_account::<T>()?;
let to = to.into_sub_cross_account::<T>()?;
@@ -858,7 +853,7 @@
/// @param tokenId The NFT to transfer
#[solidity(hide)]
#[weight(<SelfWeightOf<T>>::burn_from())]
- fn burn_from(&mut self, caller: caller, from: address, token_id: uint256) -> Result<void> {
+ fn burn_from(&mut self, caller: Caller, from: Address, token_id: U256) -> Result<()> {
let caller = T::CrossAccountId::from_eth(caller);
let from = T::CrossAccountId::from_eth(from);
let token = token_id.try_into()?;
@@ -880,10 +875,10 @@
#[weight(<SelfWeightOf<T>>::burn_from())]
fn burn_from_cross(
&mut self,
- caller: caller,
+ caller: Caller,
from: eth::CrossAddress,
- token_id: uint256,
- ) -> Result<void> {
+ token_id: U256,
+ ) -> Result<()> {
let caller = T::CrossAccountId::from_eth(caller);
let from = from.into_sub_cross_account::<T>()?;
let token = token_id.try_into()?;
@@ -897,7 +892,7 @@
}
/// @notice Returns next free NFT ID.
- fn next_token_id(&self) -> Result<uint256> {
+ fn next_token_id(&self) -> Result<U256> {
self.consume_store_reads(1)?;
Ok(<TokensMinted<T>>::get(self.id)
.checked_add(1)
@@ -912,7 +907,7 @@
/// @param tokenIds IDs of the minted NFTs
#[solidity(hide)]
#[weight(<SelfWeightOf<T>>::create_multiple_items(token_ids.len() as u32))]
- fn mint_bulk(&mut self, caller: caller, to: address, token_ids: Vec<uint256>) -> Result<bool> {
+ fn mint_bulk(&mut self, caller: Caller, to: Address, token_ids: Vec<U256>) -> Result<bool> {
let caller = T::CrossAccountId::from_eth(caller);
let to = T::CrossAccountId::from_eth(to);
let mut expected_index = <TokensMinted<T>>::get(self.id)
@@ -951,9 +946,9 @@
#[weight(<SelfWeightOf<T>>::create_multiple_items(tokens.len() as u32))]
fn mint_bulk_with_token_uri(
&mut self,
- caller: caller,
- to: address,
- tokens: Vec<(uint256, string)>,
+ caller: Caller,
+ to: Address,
+ tokens: Vec<(U256, String)>,
) -> Result<bool> {
let key = key::url();
let caller = T::CrossAccountId::from_eth(caller);
@@ -1002,10 +997,10 @@
#[weight(<SelfWeightOf<T>>::create_item())]
fn mint_cross(
&mut self,
- caller: caller,
+ caller: Caller,
to: eth::CrossAddress,
properties: Vec<eth::Property>,
- ) -> Result<uint256> {
+ ) -> Result<U256> {
let token_id = <TokensMinted<T>>::get(self.id)
.checked_add(1)
.ok_or("item id overflow")?;
@@ -1040,7 +1035,7 @@
}
/// @notice Returns collection helper contract address
- fn collection_helper_address(&self) -> Result<address> {
+ fn collection_helper_address(&self) -> Result<Address> {
Ok(T::ContractAddress::get())
}
}
pallets/nonfungible/src/stubs/UniqueNFT.rawdiffbeforeafterbothbinary blob — no preview
pallets/nonfungible/src/stubs/UniqueNFT.soldiffbeforeafterboth--- a/pallets/nonfungible/src/stubs/UniqueNFT.sol
+++ b/pallets/nonfungible/src/stubs/UniqueNFT.sol
@@ -416,11 +416,9 @@
/// Set the collection access method.
/// @param mode Access mode
- /// 0 for Normal
- /// 1 for AllowList
/// @dev EVM selector for this function is: 0x41835d4c,
/// or in textual repr: setCollectionAccess(uint8)
- function setCollectionAccess(uint8 mode) public {
+ function setCollectionAccess(AccessMode mode) public {
require(false, stub_error);
mode;
dummy = 0;
@@ -585,6 +583,14 @@
uint256 sub;
}
+/// Ethereum representation of `AccessMode` (see [`up_data_structs::AccessMode`]).
+enum AccessMode {
+ /// Access grant for owner and admins. Used as default.
+ Normal,
+ /// Like a [`Normal`](AccessMode::Normal) but also users in allow list.
+ AllowList
+}
+
/// Ethereum representation of `NestingPermissions` (see [`up_data_structs::NestingPermissions`]) field.
struct CollectionNestingPermission {
CollectionPermissionField field;
pallets/refungible/src/erc.rsdiffbeforeafterboth--- a/pallets/refungible/src/erc.rs
+++ b/pallets/refungible/src/erc.rs
@@ -39,7 +39,7 @@
use pallet_evm::{account::CrossAccountId, PrecompileHandle};
use pallet_evm_coder_substrate::{call, dispatch_to_evm};
use pallet_structure::{SelfWeightOf as StructureWeight, weights::WeightInfo as _};
-use sp_core::{H160, Get};
+use sp_core::{H160, U256, Get};
use sp_std::{collections::btree_map::BTreeMap, vec::Vec, vec};
use up_data_structs::{
CollectionId, CollectionPropertiesVec, mapping::TokenAddressMapping, Property, PropertyKey,
@@ -66,8 +66,8 @@
#[solidity(hide)]
fn set_token_property_permission(
&mut self,
- caller: caller,
- key: string,
+ caller: Caller,
+ key: String,
is_mutable: bool,
collection_admin: bool,
token_owner: bool,
@@ -96,7 +96,7 @@
#[weight(<SelfWeightOf<T>>::set_token_property_permissions(permissions.len() as u32))]
fn set_token_property_permissions(
&mut self,
- caller: caller,
+ caller: Caller,
permissions: Vec<eth::TokenPropertyPermission>,
) -> Result<()> {
let caller = T::CrossAccountId::from_eth(caller);
@@ -124,10 +124,10 @@
#[weight(<SelfWeightOf<T>>::set_token_properties(1))]
fn set_property(
&mut self,
- caller: caller,
- token_id: uint256,
- key: string,
- value: bytes,
+ caller: Caller,
+ token_id: U256,
+ key: String,
+ value: Bytes,
) -> Result<()> {
let caller = T::CrossAccountId::from_eth(caller);
let token_id: u32 = token_id.try_into().map_err(|_| "token id overflow")?;
@@ -157,8 +157,8 @@
#[weight(<SelfWeightOf<T>>::set_token_properties(properties.len() as u32))]
fn set_properties(
&mut self,
- caller: caller,
- token_id: uint256,
+ caller: Caller,
+ token_id: U256,
properties: Vec<eth::Property>,
) -> 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: uint256, 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)
@@ -212,9 +212,9 @@
#[weight(<SelfWeightOf<T>>::delete_token_properties(keys.len() as u32))]
fn delete_properties(
&mut self,
- token_id: uint256,
- caller: caller,
- keys: Vec<string>,
+ token_id: U256,
+ caller: Caller,
+ 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: uint256, 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()
@@ -262,28 +262,28 @@
/// may be created and assigned without emitting Transfer.
Transfer {
#[indexed]
- from: address,
+ from: Address,
#[indexed]
- to: address,
+ to: Address,
#[indexed]
- token_id: uint256,
+ token_id: U256,
},
/// @dev Not supported
Approval {
#[indexed]
- owner: address,
+ owner: Address,
#[indexed]
- approved: address,
+ approved: Address,
#[indexed]
- token_id: uint256,
+ token_id: U256,
},
/// @dev Not supported
#[allow(dead_code)]
ApprovalForAll {
#[indexed]
- owner: address,
+ owner: Address,
#[indexed]
- operator: address,
+ operator: Address,
approved: bool,
},
}
@@ -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: uint256) -> 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!(
@@ -365,12 +365,12 @@
/// @param index A counter less than `totalSupply()`
/// @return The token identifier for the `index`th NFT,
/// (sort order not specified)
- fn token_by_index(&self, index: uint256) -> Result<uint256> {
+ fn token_by_index(&self, index: U256) -> Result<U256> {
Ok(index)
}
/// Not implemented
- fn token_of_owner_by_index(&self, _owner: address, _index: uint256) -> Result<uint256> {
+ fn token_of_owner_by_index(&self, _owner: Address, _index: U256) -> Result<U256> {
// TODO: Not implemetable
Err("not implemented".into())
}
@@ -378,7 +378,7 @@
/// @notice Count RFTs tracked by this contract
/// @return A count of valid RFTs tracked by this contract, where each one of
/// them has an assigned and queryable owner not equal to the zero address
- fn total_supply(&self) -> Result<uint256> {
+ fn total_supply(&self) -> Result<U256> {
self.consume_store_reads(1)?;
Ok(<Pallet<T>>::total_supply(self).into())
}
@@ -393,7 +393,7 @@
/// function throws for queries about the zero address.
/// @param owner An address for whom to query the balance
/// @return The number of RFTs owned by `owner`, possibly zero
- fn balance_of(&self, owner: address) -> Result<uint256> {
+ fn balance_of(&self, owner: Address) -> Result<U256> {
self.consume_store_reads(1)?;
let owner = T::CrossAccountId::from_eth(owner);
let balance = <AccountBalance<T>>::get((self.id, owner));
@@ -407,7 +407,7 @@
/// the tokens that are partially owned.
/// @param tokenId The identifier for an RFT
/// @return The address of the owner of the RFT
- fn owner_of(&self, token_id: uint256) -> Result<address> {
+ fn owner_of(&self, token_id: U256) -> Result<Address> {
self.consume_store_reads(2)?;
let token = token_id.try_into()?;
let owner = <Pallet<T>>::token_owner(self.id, token);
@@ -420,23 +420,18 @@
#[solidity(rename_selector = "safeTransferFrom")]
fn safe_transfer_from_with_data(
&mut self,
- _from: address,
- _to: address,
- _token_id: uint256,
- _data: bytes,
- ) -> Result<void> {
+ _from: Address,
+ _to: Address,
+ _token_id: U256,
+ _data: Bytes,
+ ) -> Result<()> {
// TODO: Not implemetable
Err("not implemented".into())
}
/// @dev Not implemented
#[solidity(rename_selector = "safeTransferFrom")]
- fn safe_transfer_from(
- &mut self,
- _from: address,
- _to: address,
- _token_id: uint256,
- ) -> Result<void> {
+ fn safe_transfer_from(&mut self, _from: Address, _to: Address, _token_id: U256) -> Result<()> {
// TODO: Not implemetable
Err("not implemented".into())
}
@@ -454,11 +449,11 @@
#[weight(<SelfWeightOf<T>>::transfer_from_creating_removing())]
fn transfer_from(
&mut self,
- caller: caller,
- from: address,
- to: address,
- token_id: uint256,
- ) -> Result<void> {
+ caller: Caller,
+ from: Address,
+ to: Address,
+ token_id: U256,
+ ) -> Result<()> {
let caller = T::CrossAccountId::from_eth(caller);
let from = T::CrossAccountId::from_eth(from);
let to = T::CrossAccountId::from_eth(to);
@@ -477,7 +472,7 @@
}
/// @dev Not implemented
- fn approve(&mut self, _caller: caller, _approved: address, _token_id: uint256) -> Result<void> {
+ fn approve(&mut self, _caller: Caller, _approved: Address, _token_id: U256) -> Result<()> {
Err("not implemented".into())
}
@@ -488,10 +483,10 @@
#[weight(<SelfWeightOf<T>>::set_allowance_for_all())]
fn set_approval_for_all(
&mut self,
- caller: caller,
- operator: address,
+ caller: Caller,
+ operator: Address,
approved: bool,
- ) -> Result<void> {
+ ) -> Result<()> {
let caller = T::CrossAccountId::from_eth(caller);
let operator = T::CrossAccountId::from_eth(operator);
@@ -501,14 +496,14 @@
}
/// @dev Not implemented
- fn get_approved(&self, _token_id: uint256) -> Result<address> {
+ fn get_approved(&self, _token_id: U256) -> Result<Address> {
// TODO: Not implemetable
Err("not implemented".into())
}
/// @notice Tells whether the given `owner` approves the `operator`.
#[weight(<SelfWeightOf<T>>::allowance_for_all())]
- fn is_approved_for_all(&self, owner: address, operator: address) -> Result<bool> {
+ fn is_approved_for_all(&self, owner: Address, operator: Address) -> Result<bool> {
let owner = T::CrossAccountId::from_eth(owner);
let operator = T::CrossAccountId::from_eth(operator);
@@ -556,7 +551,7 @@
/// operator of the current owner.
/// @param tokenId The RFT to approve
#[weight(<SelfWeightOf<T>>::burn_item_fully())]
- fn burn(&mut self, caller: caller, token_id: uint256) -> Result<void> {
+ fn burn(&mut self, caller: Caller, token_id: U256) -> Result<()> {
let caller = T::CrossAccountId::from_eth(caller);
let token = token_id.try_into()?;
@@ -575,8 +570,8 @@
/// @param to The new owner
/// @return uint256 The id of the newly minted token
#[weight(<SelfWeightOf<T>>::create_item())]
- fn mint(&mut self, caller: caller, to: address) -> Result<uint256> {
- let token_id: uint256 = <TokensMinted<T>>::get(self.id)
+ fn mint(&mut self, caller: Caller, to: Address) -> Result<U256> {
+ let token_id: U256 = <TokensMinted<T>>::get(self.id)
.checked_add(1)
.ok_or("item id overflow")?
.into();
@@ -591,7 +586,7 @@
/// @param tokenId ID of the minted RFT
#[solidity(hide, rename_selector = "mint")]
#[weight(<SelfWeightOf<T>>::create_item())]
- fn mint_check_id(&mut self, caller: caller, to: address, token_id: uint256) -> Result<bool> {
+ fn mint_check_id(&mut self, caller: Caller, to: Address, token_id: U256) -> Result<bool> {
let caller = T::CrossAccountId::from_eth(caller);
let to = T::CrossAccountId::from_eth(to);
let token_id: u32 = token_id.try_into()?;
@@ -634,11 +629,11 @@
#[weight(<SelfWeightOf<T>>::create_item())]
fn mint_with_token_uri(
&mut self,
- caller: caller,
- to: address,
- token_uri: string,
- ) -> Result<uint256> {
- let token_id: uint256 = <TokensMinted<T>>::get(self.id)
+ caller: Caller,
+ to: Address,
+ token_uri: String,
+ ) -> Result<U256> {
+ let token_id: U256 = <TokensMinted<T>>::get(self.id)
.checked_add(1)
.ok_or("item id overflow")?
.into();
@@ -656,10 +651,10 @@
#[weight(<SelfWeightOf<T>>::create_item())]
fn mint_with_token_uri_check_id(
&mut self,
- caller: caller,
- to: address,
- token_id: uint256,
- token_uri: string,
+ caller: Caller,
+ to: Address,
+ token_id: U256,
+ token_uri: String,
) -> Result<bool> {
let key = key::url();
let permission = get_token_permission::<T>(self.id, &key)?;
@@ -713,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())
@@ -734,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)
@@ -747,28 +742,28 @@
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.
///
/// @param tokenId Id for the token.
- fn cross_owner_of(&self, token_id: uint256) -> Result<eth::CrossAddress> {
+ fn cross_owner_of(&self, token_id: U256) -> Result<eth::CrossAddress> {
Self::token_owner(&self, token_id.try_into()?)
.map(|o| eth::CrossAddress::from_sub_cross_account::<T>(&o))
.ok_or(Error::Revert("key too large".into()))
@@ -779,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: uint256, 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| {
@@ -805,7 +800,7 @@
/// @param to The new owner
/// @param tokenId The RFT to transfer
#[weight(<SelfWeightOf<T>>::transfer_creating_removing())]
- fn transfer(&mut self, caller: caller, to: address, token_id: uint256) -> Result<void> {
+ fn transfer(&mut self, caller: Caller, to: Address, token_id: U256) -> Result<()> {
let caller = T::CrossAccountId::from_eth(caller);
let to = T::CrossAccountId::from_eth(to);
let token = token_id.try_into()?;
@@ -830,10 +825,10 @@
#[weight(<SelfWeightOf<T>>::transfer_creating_removing())]
fn transfer_cross(
&mut self,
- caller: caller,
+ caller: Caller,
to: eth::CrossAddress,
- token_id: uint256,
- ) -> Result<void> {
+ token_id: U256,
+ ) -> Result<()> {
let caller = T::CrossAccountId::from_eth(caller);
let to = to.into_sub_cross_account::<T>()?;
let token = token_id.try_into()?;
@@ -858,11 +853,11 @@
#[weight(<SelfWeightOf<T>>::transfer_creating_removing())]
fn transfer_from_cross(
&mut self,
- caller: caller,
+ caller: Caller,
from: eth::CrossAddress,
to: eth::CrossAddress,
- token_id: uint256,
- ) -> Result<void> {
+ token_id: U256,
+ ) -> Result<()> {
let caller = T::CrossAccountId::from_eth(caller);
let from = from.into_sub_cross_account::<T>()?;
let to = to.into_sub_cross_account::<T>()?;
@@ -888,7 +883,7 @@
/// @param tokenId The RFT to transfer
#[solidity(hide)]
#[weight(<SelfWeightOf<T>>::burn_from())]
- fn burn_from(&mut self, caller: caller, from: address, token_id: uint256) -> Result<void> {
+ fn burn_from(&mut self, caller: Caller, from: Address, token_id: U256) -> Result<()> {
let caller = T::CrossAccountId::from_eth(caller);
let from = T::CrossAccountId::from_eth(from);
let token = token_id.try_into()?;
@@ -914,10 +909,10 @@
#[weight(<SelfWeightOf<T>>::burn_from())]
fn burn_from_cross(
&mut self,
- caller: caller,
+ caller: Caller,
from: eth::CrossAddress,
- token_id: uint256,
- ) -> Result<void> {
+ token_id: U256,
+ ) -> Result<()> {
let caller = T::CrossAccountId::from_eth(caller);
let from = from.into_sub_cross_account::<T>()?;
let token = token_id.try_into()?;
@@ -934,7 +929,7 @@
}
/// @notice Returns next free RFT ID.
- fn next_token_id(&self) -> Result<uint256> {
+ fn next_token_id(&self) -> Result<U256> {
self.consume_store_reads(1)?;
Ok(<TokensMinted<T>>::get(self.id)
.checked_add(1)
@@ -949,7 +944,7 @@
/// @param tokenIds IDs of the minted RFTs
#[solidity(hide)]
#[weight(<SelfWeightOf<T>>::create_multiple_items(token_ids.len() as u32))]
- fn mint_bulk(&mut self, caller: caller, to: address, token_ids: Vec<uint256>) -> Result<bool> {
+ fn mint_bulk(&mut self, caller: Caller, to: Address, token_ids: Vec<U256>) -> Result<bool> {
let caller = T::CrossAccountId::from_eth(caller);
let to = T::CrossAccountId::from_eth(to);
let mut expected_index = <TokensMinted<T>>::get(self.id)
@@ -994,9 +989,9 @@
#[weight(<SelfWeightOf<T>>::create_multiple_items(tokens.len() as u32))]
fn mint_bulk_with_token_uri(
&mut self,
- caller: caller,
- to: address,
- tokens: Vec<(uint256, string)>,
+ caller: Caller,
+ to: Address,
+ tokens: Vec<(U256, String)>,
) -> Result<bool> {
let key = key::url();
let caller = T::CrossAccountId::from_eth(caller);
@@ -1051,10 +1046,10 @@
#[weight(<SelfWeightOf<T>>::create_item())]
fn mint_cross(
&mut self,
- caller: caller,
+ caller: Caller,
to: eth::CrossAddress,
properties: Vec<eth::Property>,
- ) -> Result<uint256> {
+ ) -> Result<U256> {
let token_id = <TokensMinted<T>>::get(self.id)
.checked_add(1)
.ok_or("item id overflow")?;
@@ -1093,7 +1088,7 @@
/// Returns EVM address for refungible token
///
/// @param token ID of the token
- fn token_contract_address(&self, token: uint256) -> Result<address> {
+ fn token_contract_address(&self, token: U256) -> Result<Address> {
Ok(T::EvmTokenAddressMapping::token_to_address(
self.id,
token.try_into().map_err(|_| "token id overflow")?,
@@ -1101,7 +1096,7 @@
}
/// @notice Returns collection helper contract address
- fn collection_helper_address(&self) -> Result<address> {
+ fn collection_helper_address(&self) -> Result<Address> {
Ok(T::ContractAddress::get())
}
}
pallets/refungible/src/erc_token.rsdiffbeforeafterboth--- a/pallets/refungible/src/erc_token.rs
+++ b/pallets/refungible/src/erc_token.rs
@@ -37,6 +37,7 @@
use pallet_evm_coder_substrate::{call, dispatch_to_evm, WithRecorder};
use pallet_structure::{SelfWeightOf as StructureWeight, weights::WeightInfo as _};
use sp_std::vec::Vec;
+use sp_core::U256;
use up_data_structs::TokenId;
use crate::{
@@ -51,11 +52,11 @@
#[solidity_interface(name = ERC1633)]
impl<T: Config> RefungibleTokenHandle<T> {
- fn parent_token(&self) -> Result<address> {
+ fn parent_token(&self) -> Result<Address> {
Ok(collection_id_to_address(self.id))
}
- fn parent_token_id(&self) -> Result<uint256> {
+ fn parent_token_id(&self) -> Result<U256> {
Ok(self.1.into())
}
}
@@ -68,19 +69,19 @@
/// of burning tokens the transfer is to 0.
Transfer {
#[indexed]
- from: address,
+ from: Address,
#[indexed]
- to: address,
- value: uint256,
+ to: Address,
+ value: U256,
},
/// @dev This event is emitted when the amount of tokens (value) is approved
/// by the owner to be used by the spender.
Approval {
#[indexed]
- owner: address,
+ owner: Address,
#[indexed]
- spender: address,
- value: uint256,
+ spender: Address,
+ value: U256,
},
}
@@ -91,25 +92,25 @@
#[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
- fn total_supply(&self) -> Result<uint256> {
+ fn total_supply(&self) -> Result<U256> {
self.consume_store_reads(1)?;
Ok(<TotalSupply<T>>::get((self.id, self.1)).into())
}
/// @dev Not supported
- fn decimals(&self) -> Result<uint8> {
+ fn decimals(&self) -> Result<u8> {
// Decimals aren't supported for refungible tokens
Ok(0)
}
@@ -117,7 +118,7 @@
/// @dev Gets the balance of the specified address.
/// @param owner The address to query the balance of.
/// @return An uint256 representing the amount owned by the passed address.
- fn balance_of(&self, owner: address) -> Result<uint256> {
+ fn balance_of(&self, owner: Address) -> Result<U256> {
self.consume_store_reads(1)?;
let owner = T::CrossAccountId::from_eth(owner);
let balance = <Balance<T>>::get((self.id, self.1, owner));
@@ -128,7 +129,7 @@
/// @param to The address to transfer to.
/// @param amount The amount to be transferred.
#[weight(<CommonWeights<T>>::transfer())]
- fn transfer(&mut self, caller: caller, to: address, amount: uint256) -> Result<bool> {
+ fn transfer(&mut self, caller: Caller, to: Address, amount: U256) -> Result<bool> {
let caller = T::CrossAccountId::from_eth(caller);
let to = T::CrossAccountId::from_eth(to);
let amount = amount.try_into().map_err(|_| "amount overflow")?;
@@ -148,10 +149,10 @@
#[weight(<CommonWeights<T>>::transfer_from())]
fn transfer_from(
&mut self,
- caller: caller,
- from: address,
- to: address,
- amount: uint256,
+ caller: Caller,
+ from: Address,
+ to: Address,
+ amount: U256,
) -> Result<bool> {
let caller = T::CrossAccountId::from_eth(caller);
let from = T::CrossAccountId::from_eth(from);
@@ -174,7 +175,7 @@
/// @param spender The address which will spend the funds.
/// @param amount The amount of tokens to be spent.
#[weight(<SelfWeightOf<T>>::approve())]
- fn approve(&mut self, caller: caller, spender: address, amount: uint256) -> Result<bool> {
+ fn approve(&mut self, caller: Caller, spender: Address, amount: U256) -> Result<bool> {
let caller = T::CrossAccountId::from_eth(caller);
let spender = T::CrossAccountId::from_eth(spender);
let amount = amount.try_into().map_err(|_| "amount overflow")?;
@@ -188,7 +189,7 @@
/// @param owner address The address which owns the funds.
/// @param spender address The address which will spend the funds.
/// @return A uint256 specifying the amount of tokens still available for the spender.
- fn allowance(&self, owner: address, spender: address) -> Result<uint256> {
+ fn allowance(&self, owner: Address, spender: Address) -> Result<U256> {
self.consume_store_reads(1)?;
let owner = T::CrossAccountId::from_eth(owner);
let spender = T::CrossAccountId::from_eth(spender);
@@ -208,7 +209,7 @@
/// @param amount The amount that will be burnt.
#[weight(<SelfWeightOf<T>>::burn_from())]
#[solidity(hide)]
- fn burn_from(&mut self, caller: caller, from: address, amount: uint256) -> Result<bool> {
+ fn burn_from(&mut self, caller: Caller, from: Address, amount: U256) -> Result<bool> {
let caller = T::CrossAccountId::from_eth(caller);
let from = T::CrossAccountId::from_eth(from);
let amount = amount.try_into().map_err(|_| "amount overflow")?;
@@ -228,9 +229,9 @@
#[weight(<SelfWeightOf<T>>::burn_from())]
fn burn_from_cross(
&mut self,
- caller: caller,
+ caller: Caller,
from: pallet_common::eth::CrossAddress,
- amount: uint256,
+ amount: U256,
) -> Result<bool> {
let caller = T::CrossAccountId::from_eth(caller);
let from = from.into_sub_cross_account::<T>()?;
@@ -254,9 +255,9 @@
#[weight(<SelfWeightOf<T>>::approve())]
fn approve_cross(
&mut self,
- caller: caller,
+ caller: Caller,
spender: pallet_common::eth::CrossAddress,
- amount: uint256,
+ amount: U256,
) -> Result<bool> {
let caller = T::CrossAccountId::from_eth(caller);
let spender = spender.into_sub_cross_account::<T>()?;
@@ -270,7 +271,7 @@
/// Throws if `msg.sender` doesn't owns all of the tokens.
/// @param amount New total amount of the tokens.
#[weight(<SelfWeightOf<T>>::repartition_item())]
- fn repartition(&mut self, caller: caller, amount: uint256) -> Result<bool> {
+ fn repartition(&mut self, caller: Caller, amount: U256) -> Result<bool> {
let caller = T::CrossAccountId::from_eth(caller);
let amount = amount.try_into().map_err(|_| "amount overflow")?;
@@ -284,9 +285,9 @@
#[weight(<CommonWeights<T>>::transfer())]
fn transfer_cross(
&mut self,
- caller: caller,
+ caller: Caller,
to: pallet_common::eth::CrossAddress,
- amount: uint256,
+ amount: U256,
) -> Result<bool> {
let caller = T::CrossAccountId::from_eth(caller);
let to = to.into_sub_cross_account::<T>()?;
@@ -307,10 +308,10 @@
#[weight(<CommonWeights<T>>::transfer_from())]
fn transfer_from_cross(
&mut self,
- caller: caller,
+ caller: Caller,
from: pallet_common::eth::CrossAddress,
to: pallet_common::eth::CrossAddress,
- amount: uint256,
+ amount: U256,
) -> Result<bool> {
let caller = T::CrossAccountId::from_eth(caller);
let from = from.into_sub_cross_account::<T>()?;
pallets/refungible/src/stubs/UniqueRefungible.rawdiffbeforeafterbothbinary blob — no preview
pallets/refungible/src/stubs/UniqueRefungible.soldiffbeforeafterboth--- a/pallets/refungible/src/stubs/UniqueRefungible.sol
+++ b/pallets/refungible/src/stubs/UniqueRefungible.sol
@@ -416,11 +416,9 @@
/// Set the collection access method.
/// @param mode Access mode
- /// 0 for Normal
- /// 1 for AllowList
/// @dev EVM selector for this function is: 0x41835d4c,
/// or in textual repr: setCollectionAccess(uint8)
- function setCollectionAccess(uint8 mode) public {
+ function setCollectionAccess(AccessMode mode) public {
require(false, stub_error);
mode;
dummy = 0;
@@ -585,6 +583,14 @@
uint256 sub;
}
+/// Ethereum representation of `AccessMode` (see [`up_data_structs::AccessMode`]).
+enum AccessMode {
+ /// Access grant for owner and admins. Used as default.
+ Normal,
+ /// Like a [`Normal`](AccessMode::Normal) but also users in allow list.
+ AllowList
+}
+
/// Ethereum representation of `NestingPermissions` (see [`up_data_structs::NestingPermissions`]) field.
struct CollectionNestingPermission {
CollectionPermissionField field;
pallets/unique/src/eth/mod.rsdiffbeforeafterboth--- a/pallets/unique/src/eth/mod.rs
+++ b/pallets/unique/src/eth/mod.rs
@@ -56,10 +56,10 @@
}
fn convert_data<T: Config>(
- caller: caller,
- name: string,
- description: string,
- token_prefix: string,
+ caller: Caller,
+ name: String,
+ description: String,
+ token_prefix: String,
) -> Result<(
T::CrossAccountId,
CollectionName,
@@ -87,13 +87,13 @@
#[inline(always)]
fn create_collection_internal<T: Config>(
- caller: caller,
- value: value,
- name: string,
+ caller: Caller,
+ value: Value,
+ name: String,
collection_mode: CollectionMode,
- description: string,
- token_prefix: string,
-) -> Result<address> {
+ description: String,
+ token_prefix: String,
+) -> Result<Address> {
let (caller, name, description, token_prefix) =
convert_data::<T>(caller, name, description, token_prefix)?;
let data = CreateCollectionData {
@@ -118,7 +118,7 @@
Ok(address)
}
-fn check_sent_amount_equals_collection_creation_price<T: Config>(value: value) -> Result<()> {
+fn check_sent_amount_equals_collection_creation_price<T: Config>(value: Value) -> Result<()> {
let value = value.as_u128();
let creation_price: u128 = T::CollectionCreationPrice::get()
.try_into()
@@ -149,12 +149,12 @@
#[solidity(rename_selector = "createNFTCollection")]
fn create_nft_collection(
&mut self,
- caller: caller,
- value: value,
- name: string,
- description: string,
- token_prefix: string,
- ) -> Result<address> {
+ caller: Caller,
+ value: Value,
+ name: String,
+ description: String,
+ token_prefix: String,
+ ) -> Result<Address> {
let (caller, name, description, token_prefix) =
convert_data::<T>(caller, name, description, token_prefix)?;
let data = CreateCollectionData {
@@ -188,12 +188,12 @@
#[solidity(hide)]
fn create_nonfungible_collection(
&mut self,
- caller: caller,
- value: value,
- name: string,
- description: string,
- token_prefix: string,
- ) -> Result<address> {
+ caller: Caller,
+ value: Value,
+ name: String,
+ description: String,
+ token_prefix: String,
+ ) -> Result<Address> {
create_collection_internal::<T>(
caller,
value,
@@ -208,12 +208,12 @@
#[solidity(rename_selector = "createRFTCollection")]
fn create_rft_collection(
&mut self,
- caller: caller,
- value: value,
- name: string,
- description: string,
- token_prefix: string,
- ) -> Result<address> {
+ caller: Caller,
+ value: Value,
+ name: String,
+ description: String,
+ token_prefix: String,
+ ) -> Result<Address> {
create_collection_internal::<T>(
caller,
value,
@@ -228,13 +228,13 @@
#[solidity(rename_selector = "createFTCollection")]
fn create_fungible_collection(
&mut self,
- caller: caller,
- value: value,
- name: string,
- decimals: uint8,
- description: string,
- token_prefix: string,
- ) -> Result<address> {
+ caller: Caller,
+ value: Value,
+ name: String,
+ decimals: u8,
+ description: String,
+ token_prefix: String,
+ ) -> Result<Address> {
create_collection_internal::<T>(
caller,
value,
@@ -248,9 +248,9 @@
#[solidity(rename_selector = "makeCollectionERC721MetadataCompatible")]
fn make_collection_metadata_compatible(
&mut self,
- caller: caller,
- collection: address,
- base_uri: string,
+ caller: Caller,
+ collection: Address,
+ base_uri: String,
) -> Result<()> {
let caller = T::CrossAccountId::from_eth(caller);
let collection =
@@ -334,7 +334,7 @@
}
#[weight(<SelfWeightOf<T>>::destroy_collection())]
- fn destroy_collection(&mut self, caller: caller, collection_address: address) -> Result<void> {
+ fn destroy_collection(&mut self, caller: Caller, collection_address: Address) -> Result<()> {
let caller = T::CrossAccountId::from_eth(caller);
let collection_id = pallet_common::eth::map_eth_to_id(&collection_address)
@@ -346,7 +346,7 @@
/// Check if a collection exists
/// @param collectionAddress Address of the collection in question
/// @return bool Does the collection exist?
- fn is_collection_exist(&self, _caller: caller, collection_address: address) -> Result<bool> {
+ fn is_collection_exist(&self, _caller: Caller, collection_address: Address) -> Result<bool> {
if let Some(id) = pallet_common::eth::map_eth_to_id(&collection_address) {
let collection_id = id;
return Ok(<CollectionById<T>>::contains_key(collection_id));
@@ -355,7 +355,7 @@
Ok(false)
}
- fn collection_creation_fee(&self) -> Result<value> {
+ fn collection_creation_fee(&self) -> Result<Value> {
let price: u128 = T::CollectionCreationPrice::get()
.try_into()
.map_err(|_| ()) // workaround for `expect` requiring `Debug` trait
@@ -366,14 +366,14 @@
/// Returns address of a collection.
/// @param collectionId - CollectionId of the collection
/// @return eth mirror address of the collection
- fn collection_address(&self, collection_id: uint32) -> Result<address> {
+ fn collection_address(&self, collection_id: u32) -> Result<Address> {
Ok(collection_id_to_address(collection_id.into()))
}
/// Returns collectionId of a collection.
/// @param collectionAddress - Eth address of the collection
/// @return collectionId of the collection
- fn collection_id(&self, collection_address: address) -> Result<uint32> {
+ fn collection_id(&self, collection_address: Address) -> Result<u32> {
map_eth_to_id(&collection_address)
.map(|id| id.0)
.ok_or(Error::Revert(format!(
runtime/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),
tests/src/eth/abi/fungible.jsondiffbeforeafterboth--- a/tests/src/eth/abi/fungible.json
+++ b/tests/src/eth/abi/fungible.json
@@ -488,7 +488,9 @@
"type": "function"
},
{
- "inputs": [{ "internalType": "uint8", "name": "mode", "type": "uint8" }],
+ "inputs": [
+ { "internalType": "enum AccessMode", "name": "mode", "type": "uint8" }
+ ],
"name": "setCollectionAccess",
"outputs": [],
"stateMutability": "nonpayable",
tests/src/eth/abi/nonFungible.jsondiffbeforeafterboth1[2 {3 "anonymous": false,4 "inputs": [5 {6 "indexed": true,7 "internalType": "address",8 "name": "owner",9 "type": "address"10 },11 {12 "indexed": true,13 "internalType": "address",14 "name": "approved",15 "type": "address"16 },17 {18 "indexed": true,19 "internalType": "uint256",20 "name": "tokenId",21 "type": "uint256"22 }23 ],24 "name": "Approval",25 "type": "event"26 },27 {28 "anonymous": false,29 "inputs": [30 {31 "indexed": true,32 "internalType": "address",33 "name": "owner",34 "type": "address"35 },36 {37 "indexed": true,38 "internalType": "address",39 "name": "operator",40 "type": "address"41 },42 {43 "indexed": false,44 "internalType": "bool",45 "name": "approved",46 "type": "bool"47 }48 ],49 "name": "ApprovalForAll",50 "type": "event"51 },52 {53 "anonymous": false,54 "inputs": [55 {56 "indexed": true,57 "internalType": "address",58 "name": "from",59 "type": "address"60 },61 {62 "indexed": true,63 "internalType": "address",64 "name": "to",65 "type": "address"66 },67 {68 "indexed": true,69 "internalType": "uint256",70 "name": "tokenId",71 "type": "uint256"72 }73 ],74 "name": "Transfer",75 "type": "event"76 },77 {78 "inputs": [79 {80 "components": [81 { "internalType": "address", "name": "eth", "type": "address" },82 { "internalType": "uint256", "name": "sub", "type": "uint256" }83 ],84 "internalType": "struct CrossAddress",85 "name": "newAdmin",86 "type": "tuple"87 }88 ],89 "name": "addCollectionAdminCross",90 "outputs": [],91 "stateMutability": "nonpayable",92 "type": "function"93 },94 {95 "inputs": [96 {97 "components": [98 { "internalType": "address", "name": "eth", "type": "address" },99 { "internalType": "uint256", "name": "sub", "type": "uint256" }100 ],101 "internalType": "struct CrossAddress",102 "name": "user",103 "type": "tuple"104 }105 ],106 "name": "addToCollectionAllowListCross",107 "outputs": [],108 "stateMutability": "nonpayable",109 "type": "function"110 },111 {112 "inputs": [113 {114 "components": [115 { "internalType": "address", "name": "eth", "type": "address" },116 { "internalType": "uint256", "name": "sub", "type": "uint256" }117 ],118 "internalType": "struct CrossAddress",119 "name": "user",120 "type": "tuple"121 }122 ],123 "name": "allowlistedCross",124 "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],125 "stateMutability": "view",126 "type": "function"127 },128 {129 "inputs": [130 { "internalType": "address", "name": "approved", "type": "address" },131 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }132 ],133 "name": "approve",134 "outputs": [],135 "stateMutability": "nonpayable",136 "type": "function"137 },138 {139 "inputs": [140 {141 "components": [142 { "internalType": "address", "name": "eth", "type": "address" },143 { "internalType": "uint256", "name": "sub", "type": "uint256" }144 ],145 "internalType": "struct CrossAddress",146 "name": "approved",147 "type": "tuple"148 },149 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }150 ],151 "name": "approveCross",152 "outputs": [],153 "stateMutability": "nonpayable",154 "type": "function"155 },156 {157 "inputs": [158 { "internalType": "address", "name": "owner", "type": "address" }159 ],160 "name": "balanceOf",161 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],162 "stateMutability": "view",163 "type": "function"164 },165 {166 "inputs": [167 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }168 ],169 "name": "burn",170 "outputs": [],171 "stateMutability": "nonpayable",172 "type": "function"173 },174 {175 "inputs": [176 {177 "components": [178 { "internalType": "address", "name": "eth", "type": "address" },179 { "internalType": "uint256", "name": "sub", "type": "uint256" }180 ],181 "internalType": "struct CrossAddress",182 "name": "from",183 "type": "tuple"184 },185 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }186 ],187 "name": "burnFromCross",188 "outputs": [],189 "stateMutability": "nonpayable",190 "type": "function"191 },192 {193 "inputs": [194 {195 "components": [196 { "internalType": "address", "name": "eth", "type": "address" },197 { "internalType": "uint256", "name": "sub", "type": "uint256" }198 ],199 "internalType": "struct CrossAddress",200 "name": "newOwner",201 "type": "tuple"202 }203 ],204 "name": "changeCollectionOwnerCross",205 "outputs": [],206 "stateMutability": "nonpayable",207 "type": "function"208 },209 {210 "inputs": [],211 "name": "collectionAdmins",212 "outputs": [213 {214 "components": [215 { "internalType": "address", "name": "eth", "type": "address" },216 { "internalType": "uint256", "name": "sub", "type": "uint256" }217 ],218 "internalType": "struct CrossAddress[]",219 "name": "",220 "type": "tuple[]"221 }222 ],223 "stateMutability": "view",224 "type": "function"225 },226 {227 "inputs": [],228 "name": "collectionHelperAddress",229 "outputs": [{ "internalType": "address", "name": "", "type": "address" }],230 "stateMutability": "view",231 "type": "function"232 },233 {234 "inputs": [],235 "name": "collectionLimits",236 "outputs": [237 {238 "components": [239 {240 "internalType": "enum CollectionLimitField",241 "name": "field",242 "type": "uint8"243 },244 {245 "components": [246 { "internalType": "bool", "name": "status", "type": "bool" },247 { "internalType": "uint256", "name": "value", "type": "uint256" }248 ],249 "internalType": "struct OptionUint256",250 "name": "value",251 "type": "tuple"252 }253 ],254 "internalType": "struct CollectionLimit[]",255 "name": "",256 "type": "tuple[]"257 }258 ],259 "stateMutability": "view",260 "type": "function"261 },262 {263 "inputs": [],264 "name": "collectionNestingPermissions",265 "outputs": [266 {267 "components": [268 {269 "internalType": "enum CollectionPermissionField",270 "name": "field",271 "type": "uint8"272 },273 { "internalType": "bool", "name": "value", "type": "bool" }274 ],275 "internalType": "struct CollectionNestingPermission[]",276 "name": "",277 "type": "tuple[]"278 }279 ],280 "stateMutability": "view",281 "type": "function"282 },283 {284 "inputs": [],285 "name": "collectionNestingRestrictedCollectionIds",286 "outputs": [287 {288 "components": [289 { "internalType": "bool", "name": "token_owner", "type": "bool" },290 { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }291 ],292 "internalType": "struct CollectionNesting",293 "name": "",294 "type": "tuple"295 }296 ],297 "stateMutability": "view",298 "type": "function"299 },300 {301 "inputs": [],302 "name": "collectionOwner",303 "outputs": [304 {305 "components": [306 { "internalType": "address", "name": "eth", "type": "address" },307 { "internalType": "uint256", "name": "sub", "type": "uint256" }308 ],309 "internalType": "struct CrossAddress",310 "name": "",311 "type": "tuple"312 }313 ],314 "stateMutability": "view",315 "type": "function"316 },317 {318 "inputs": [319 { "internalType": "string[]", "name": "keys", "type": "string[]" }320 ],321 "name": "collectionProperties",322 "outputs": [323 {324 "components": [325 { "internalType": "string", "name": "key", "type": "string" },326 { "internalType": "bytes", "name": "value", "type": "bytes" }327 ],328 "internalType": "struct Property[]",329 "name": "",330 "type": "tuple[]"331 }332 ],333 "stateMutability": "view",334 "type": "function"335 },336 {337 "inputs": [{ "internalType": "string", "name": "key", "type": "string" }],338 "name": "collectionProperty",339 "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }],340 "stateMutability": "view",341 "type": "function"342 },343 {344 "inputs": [],345 "name": "collectionSponsor",346 "outputs": [347 {348 "components": [349 { "internalType": "address", "name": "eth", "type": "address" },350 { "internalType": "uint256", "name": "sub", "type": "uint256" }351 ],352 "internalType": "struct CrossAddress",353 "name": "",354 "type": "tuple"355 }356 ],357 "stateMutability": "view",358 "type": "function"359 },360 {361 "inputs": [],362 "name": "confirmCollectionSponsorship",363 "outputs": [],364 "stateMutability": "nonpayable",365 "type": "function"366 },367 {368 "inputs": [],369 "name": "contractAddress",370 "outputs": [{ "internalType": "address", "name": "", "type": "address" }],371 "stateMutability": "view",372 "type": "function"373 },374 {375 "inputs": [376 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }377 ],378 "name": "crossOwnerOf",379 "outputs": [380 {381 "components": [382 { "internalType": "address", "name": "eth", "type": "address" },383 { "internalType": "uint256", "name": "sub", "type": "uint256" }384 ],385 "internalType": "struct CrossAddress",386 "name": "",387 "type": "tuple"388 }389 ],390 "stateMutability": "view",391 "type": "function"392 },393 {394 "inputs": [395 { "internalType": "string[]", "name": "keys", "type": "string[]" }396 ],397 "name": "deleteCollectionProperties",398 "outputs": [],399 "stateMutability": "nonpayable",400 "type": "function"401 },402 {403 "inputs": [404 { "internalType": "uint256", "name": "tokenId", "type": "uint256" },405 { "internalType": "string[]", "name": "keys", "type": "string[]" }406 ],407 "name": "deleteProperties",408 "outputs": [],409 "stateMutability": "nonpayable",410 "type": "function"411 },412 {413 "inputs": [],414 "name": "description",415 "outputs": [{ "internalType": "string", "name": "", "type": "string" }],416 "stateMutability": "view",417 "type": "function"418 },419 {420 "inputs": [421 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }422 ],423 "name": "getApproved",424 "outputs": [{ "internalType": "address", "name": "", "type": "address" }],425 "stateMutability": "view",426 "type": "function"427 },428 {429 "inputs": [],430 "name": "hasCollectionPendingSponsor",431 "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],432 "stateMutability": "view",433 "type": "function"434 },435 {436 "inputs": [437 { "internalType": "address", "name": "owner", "type": "address" },438 { "internalType": "address", "name": "operator", "type": "address" }439 ],440 "name": "isApprovedForAll",441 "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],442 "stateMutability": "view",443 "type": "function"444 },445 {446 "inputs": [447 {448 "components": [449 { "internalType": "address", "name": "eth", "type": "address" },450 { "internalType": "uint256", "name": "sub", "type": "uint256" }451 ],452 "internalType": "struct CrossAddress",453 "name": "user",454 "type": "tuple"455 }456 ],457 "name": "isOwnerOrAdminCross",458 "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],459 "stateMutability": "view",460 "type": "function"461 },462 {463 "inputs": [{ "internalType": "address", "name": "to", "type": "address" }],464 "name": "mint",465 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],466 "stateMutability": "nonpayable",467 "type": "function"468 },469 {470 "inputs": [471 {472 "components": [473 { "internalType": "address", "name": "eth", "type": "address" },474 { "internalType": "uint256", "name": "sub", "type": "uint256" }475 ],476 "internalType": "struct CrossAddress",477 "name": "to",478 "type": "tuple"479 },480 {481 "components": [482 { "internalType": "string", "name": "key", "type": "string" },483 { "internalType": "bytes", "name": "value", "type": "bytes" }484 ],485 "internalType": "struct Property[]",486 "name": "properties",487 "type": "tuple[]"488 }489 ],490 "name": "mintCross",491 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],492 "stateMutability": "nonpayable",493 "type": "function"494 },495 {496 "inputs": [497 { "internalType": "address", "name": "to", "type": "address" },498 { "internalType": "string", "name": "tokenUri", "type": "string" }499 ],500 "name": "mintWithTokenURI",501 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],502 "stateMutability": "nonpayable",503 "type": "function"504 },505 {506 "inputs": [],507 "name": "name",508 "outputs": [{ "internalType": "string", "name": "", "type": "string" }],509 "stateMutability": "view",510 "type": "function"511 },512 {513 "inputs": [],514 "name": "nextTokenId",515 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],516 "stateMutability": "view",517 "type": "function"518 },519 {520 "inputs": [521 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }522 ],523 "name": "ownerOf",524 "outputs": [{ "internalType": "address", "name": "", "type": "address" }],525 "stateMutability": "view",526 "type": "function"527 },528 {529 "inputs": [530 { "internalType": "uint256", "name": "tokenId", "type": "uint256" },531 { "internalType": "string[]", "name": "keys", "type": "string[]" }532 ],533 "name": "properties",534 "outputs": [535 {536 "components": [537 { "internalType": "string", "name": "key", "type": "string" },538 { "internalType": "bytes", "name": "value", "type": "bytes" }539 ],540 "internalType": "struct Property[]",541 "name": "",542 "type": "tuple[]"543 }544 ],545 "stateMutability": "view",546 "type": "function"547 },548 {549 "inputs": [550 { "internalType": "uint256", "name": "tokenId", "type": "uint256" },551 { "internalType": "string", "name": "key", "type": "string" }552 ],553 "name": "property",554 "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }],555 "stateMutability": "view",556 "type": "function"557 },558 {559 "inputs": [560 {561 "components": [562 { "internalType": "address", "name": "eth", "type": "address" },563 { "internalType": "uint256", "name": "sub", "type": "uint256" }564 ],565 "internalType": "struct CrossAddress",566 "name": "admin",567 "type": "tuple"568 }569 ],570 "name": "removeCollectionAdminCross",571 "outputs": [],572 "stateMutability": "nonpayable",573 "type": "function"574 },575 {576 "inputs": [],577 "name": "removeCollectionSponsor",578 "outputs": [],579 "stateMutability": "nonpayable",580 "type": "function"581 },582 {583 "inputs": [584 {585 "components": [586 { "internalType": "address", "name": "eth", "type": "address" },587 { "internalType": "uint256", "name": "sub", "type": "uint256" }588 ],589 "internalType": "struct CrossAddress",590 "name": "user",591 "type": "tuple"592 }593 ],594 "name": "removeFromCollectionAllowListCross",595 "outputs": [],596 "stateMutability": "nonpayable",597 "type": "function"598 },599 {600 "inputs": [601 { "internalType": "address", "name": "from", "type": "address" },602 { "internalType": "address", "name": "to", "type": "address" },603 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }604 ],605 "name": "safeTransferFrom",606 "outputs": [],607 "stateMutability": "nonpayable",608 "type": "function"609 },610 {611 "inputs": [612 { "internalType": "address", "name": "from", "type": "address" },613 { "internalType": "address", "name": "to", "type": "address" },614 { "internalType": "uint256", "name": "tokenId", "type": "uint256" },615 { "internalType": "bytes", "name": "data", "type": "bytes" }616 ],617 "name": "safeTransferFrom",618 "outputs": [],619 "stateMutability": "nonpayable",620 "type": "function"621 },622 {623 "inputs": [624 { "internalType": "address", "name": "operator", "type": "address" },625 { "internalType": "bool", "name": "approved", "type": "bool" }626 ],627 "name": "setApprovalForAll",628 "outputs": [],629 "stateMutability": "nonpayable",630 "type": "function"631 },632 {633 "inputs": [{ "internalType": "uint8", "name": "mode", "type": "uint8" }],634 "name": "setCollectionAccess",635 "outputs": [],636 "stateMutability": "nonpayable",637 "type": "function"638 },639 {640 "inputs": [641 {642 "components": [643 {644 "internalType": "enum CollectionLimitField",645 "name": "field",646 "type": "uint8"647 },648 {649 "components": [650 { "internalType": "bool", "name": "status", "type": "bool" },651 { "internalType": "uint256", "name": "value", "type": "uint256" }652 ],653 "internalType": "struct OptionUint256",654 "name": "value",655 "type": "tuple"656 }657 ],658 "internalType": "struct CollectionLimit",659 "name": "limit",660 "type": "tuple"661 }662 ],663 "name": "setCollectionLimit",664 "outputs": [],665 "stateMutability": "nonpayable",666 "type": "function"667 },668 {669 "inputs": [{ "internalType": "bool", "name": "mode", "type": "bool" }],670 "name": "setCollectionMintMode",671 "outputs": [],672 "stateMutability": "nonpayable",673 "type": "function"674 },675 {676 "inputs": [{ "internalType": "bool", "name": "enable", "type": "bool" }],677 "name": "setCollectionNesting",678 "outputs": [],679 "stateMutability": "nonpayable",680 "type": "function"681 },682 {683 "inputs": [684 { "internalType": "bool", "name": "enable", "type": "bool" },685 {686 "internalType": "address[]",687 "name": "collections",688 "type": "address[]"689 }690 ],691 "name": "setCollectionNesting",692 "outputs": [],693 "stateMutability": "nonpayable",694 "type": "function"695 },696 {697 "inputs": [698 {699 "components": [700 { "internalType": "string", "name": "key", "type": "string" },701 { "internalType": "bytes", "name": "value", "type": "bytes" }702 ],703 "internalType": "struct Property[]",704 "name": "properties",705 "type": "tuple[]"706 }707 ],708 "name": "setCollectionProperties",709 "outputs": [],710 "stateMutability": "nonpayable",711 "type": "function"712 },713 {714 "inputs": [715 {716 "components": [717 { "internalType": "address", "name": "eth", "type": "address" },718 { "internalType": "uint256", "name": "sub", "type": "uint256" }719 ],720 "internalType": "struct CrossAddress",721 "name": "sponsor",722 "type": "tuple"723 }724 ],725 "name": "setCollectionSponsorCross",726 "outputs": [],727 "stateMutability": "nonpayable",728 "type": "function"729 },730 {731 "inputs": [732 { "internalType": "uint256", "name": "tokenId", "type": "uint256" },733 {734 "components": [735 { "internalType": "string", "name": "key", "type": "string" },736 { "internalType": "bytes", "name": "value", "type": "bytes" }737 ],738 "internalType": "struct Property[]",739 "name": "properties",740 "type": "tuple[]"741 }742 ],743 "name": "setProperties",744 "outputs": [],745 "stateMutability": "nonpayable",746 "type": "function"747 },748 {749 "inputs": [750 {751 "components": [752 { "internalType": "string", "name": "key", "type": "string" },753 {754 "components": [755 {756 "internalType": "enum TokenPermissionField",757 "name": "code",758 "type": "uint8"759 },760 { "internalType": "bool", "name": "value", "type": "bool" }761 ],762 "internalType": "struct PropertyPermission[]",763 "name": "permissions",764 "type": "tuple[]"765 }766 ],767 "internalType": "struct TokenPropertyPermission[]",768 "name": "permissions",769 "type": "tuple[]"770 }771 ],772 "name": "setTokenPropertyPermissions",773 "outputs": [],774 "stateMutability": "nonpayable",775 "type": "function"776 },777 {778 "inputs": [779 { "internalType": "bytes4", "name": "interfaceID", "type": "bytes4" }780 ],781 "name": "supportsInterface",782 "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],783 "stateMutability": "view",784 "type": "function"785 },786 {787 "inputs": [],788 "name": "symbol",789 "outputs": [{ "internalType": "string", "name": "", "type": "string" }],790 "stateMutability": "view",791 "type": "function"792 },793 {794 "inputs": [795 { "internalType": "uint256", "name": "index", "type": "uint256" }796 ],797 "name": "tokenByIndex",798 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],799 "stateMutability": "view",800 "type": "function"801 },802 {803 "inputs": [804 { "internalType": "address", "name": "owner", "type": "address" },805 { "internalType": "uint256", "name": "index", "type": "uint256" }806 ],807 "name": "tokenOfOwnerByIndex",808 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],809 "stateMutability": "view",810 "type": "function"811 },812 {813 "inputs": [],814 "name": "tokenPropertyPermissions",815 "outputs": [816 {817 "components": [818 { "internalType": "string", "name": "key", "type": "string" },819 {820 "components": [821 {822 "internalType": "enum TokenPermissionField",823 "name": "code",824 "type": "uint8"825 },826 { "internalType": "bool", "name": "value", "type": "bool" }827 ],828 "internalType": "struct PropertyPermission[]",829 "name": "permissions",830 "type": "tuple[]"831 }832 ],833 "internalType": "struct TokenPropertyPermission[]",834 "name": "",835 "type": "tuple[]"836 }837 ],838 "stateMutability": "view",839 "type": "function"840 },841 {842 "inputs": [843 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }844 ],845 "name": "tokenURI",846 "outputs": [{ "internalType": "string", "name": "", "type": "string" }],847 "stateMutability": "view",848 "type": "function"849 },850 {851 "inputs": [],852 "name": "totalSupply",853 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],854 "stateMutability": "view",855 "type": "function"856 },857 {858 "inputs": [859 { "internalType": "address", "name": "to", "type": "address" },860 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }861 ],862 "name": "transfer",863 "outputs": [],864 "stateMutability": "nonpayable",865 "type": "function"866 },867 {868 "inputs": [869 {870 "components": [871 { "internalType": "address", "name": "eth", "type": "address" },872 { "internalType": "uint256", "name": "sub", "type": "uint256" }873 ],874 "internalType": "struct CrossAddress",875 "name": "to",876 "type": "tuple"877 },878 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }879 ],880 "name": "transferCross",881 "outputs": [],882 "stateMutability": "nonpayable",883 "type": "function"884 },885 {886 "inputs": [887 { "internalType": "address", "name": "from", "type": "address" },888 { "internalType": "address", "name": "to", "type": "address" },889 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }890 ],891 "name": "transferFrom",892 "outputs": [],893 "stateMutability": "nonpayable",894 "type": "function"895 },896 {897 "inputs": [898 {899 "components": [900 { "internalType": "address", "name": "eth", "type": "address" },901 { "internalType": "uint256", "name": "sub", "type": "uint256" }902 ],903 "internalType": "struct CrossAddress",904 "name": "from",905 "type": "tuple"906 },907 {908 "components": [909 { "internalType": "address", "name": "eth", "type": "address" },910 { "internalType": "uint256", "name": "sub", "type": "uint256" }911 ],912 "internalType": "struct CrossAddress",913 "name": "to",914 "type": "tuple"915 },916 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }917 ],918 "name": "transferFromCross",919 "outputs": [],920 "stateMutability": "nonpayable",921 "type": "function"922 },923 {924 "inputs": [],925 "name": "uniqueCollectionType",926 "outputs": [{ "internalType": "string", "name": "", "type": "string" }],927 "stateMutability": "view",928 "type": "function"929 }930]1[2 {3 "anonymous": false,4 "inputs": [5 {6 "indexed": true,7 "internalType": "address",8 "name": "owner",9 "type": "address"10 },11 {12 "indexed": true,13 "internalType": "address",14 "name": "approved",15 "type": "address"16 },17 {18 "indexed": true,19 "internalType": "uint256",20 "name": "tokenId",21 "type": "uint256"22 }23 ],24 "name": "Approval",25 "type": "event"26 },27 {28 "anonymous": false,29 "inputs": [30 {31 "indexed": true,32 "internalType": "address",33 "name": "owner",34 "type": "address"35 },36 {37 "indexed": true,38 "internalType": "address",39 "name": "operator",40 "type": "address"41 },42 {43 "indexed": false,44 "internalType": "bool",45 "name": "approved",46 "type": "bool"47 }48 ],49 "name": "ApprovalForAll",50 "type": "event"51 },52 {53 "anonymous": false,54 "inputs": [55 {56 "indexed": true,57 "internalType": "address",58 "name": "from",59 "type": "address"60 },61 {62 "indexed": true,63 "internalType": "address",64 "name": "to",65 "type": "address"66 },67 {68 "indexed": true,69 "internalType": "uint256",70 "name": "tokenId",71 "type": "uint256"72 }73 ],74 "name": "Transfer",75 "type": "event"76 },77 {78 "inputs": [79 {80 "components": [81 { "internalType": "address", "name": "eth", "type": "address" },82 { "internalType": "uint256", "name": "sub", "type": "uint256" }83 ],84 "internalType": "struct CrossAddress",85 "name": "newAdmin",86 "type": "tuple"87 }88 ],89 "name": "addCollectionAdminCross",90 "outputs": [],91 "stateMutability": "nonpayable",92 "type": "function"93 },94 {95 "inputs": [96 {97 "components": [98 { "internalType": "address", "name": "eth", "type": "address" },99 { "internalType": "uint256", "name": "sub", "type": "uint256" }100 ],101 "internalType": "struct CrossAddress",102 "name": "user",103 "type": "tuple"104 }105 ],106 "name": "addToCollectionAllowListCross",107 "outputs": [],108 "stateMutability": "nonpayable",109 "type": "function"110 },111 {112 "inputs": [113 {114 "components": [115 { "internalType": "address", "name": "eth", "type": "address" },116 { "internalType": "uint256", "name": "sub", "type": "uint256" }117 ],118 "internalType": "struct CrossAddress",119 "name": "user",120 "type": "tuple"121 }122 ],123 "name": "allowlistedCross",124 "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],125 "stateMutability": "view",126 "type": "function"127 },128 {129 "inputs": [130 { "internalType": "address", "name": "approved", "type": "address" },131 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }132 ],133 "name": "approve",134 "outputs": [],135 "stateMutability": "nonpayable",136 "type": "function"137 },138 {139 "inputs": [140 {141 "components": [142 { "internalType": "address", "name": "eth", "type": "address" },143 { "internalType": "uint256", "name": "sub", "type": "uint256" }144 ],145 "internalType": "struct CrossAddress",146 "name": "approved",147 "type": "tuple"148 },149 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }150 ],151 "name": "approveCross",152 "outputs": [],153 "stateMutability": "nonpayable",154 "type": "function"155 },156 {157 "inputs": [158 { "internalType": "address", "name": "owner", "type": "address" }159 ],160 "name": "balanceOf",161 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],162 "stateMutability": "view",163 "type": "function"164 },165 {166 "inputs": [167 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }168 ],169 "name": "burn",170 "outputs": [],171 "stateMutability": "nonpayable",172 "type": "function"173 },174 {175 "inputs": [176 {177 "components": [178 { "internalType": "address", "name": "eth", "type": "address" },179 { "internalType": "uint256", "name": "sub", "type": "uint256" }180 ],181 "internalType": "struct CrossAddress",182 "name": "from",183 "type": "tuple"184 },185 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }186 ],187 "name": "burnFromCross",188 "outputs": [],189 "stateMutability": "nonpayable",190 "type": "function"191 },192 {193 "inputs": [194 {195 "components": [196 { "internalType": "address", "name": "eth", "type": "address" },197 { "internalType": "uint256", "name": "sub", "type": "uint256" }198 ],199 "internalType": "struct CrossAddress",200 "name": "newOwner",201 "type": "tuple"202 }203 ],204 "name": "changeCollectionOwnerCross",205 "outputs": [],206 "stateMutability": "nonpayable",207 "type": "function"208 },209 {210 "inputs": [],211 "name": "collectionAdmins",212 "outputs": [213 {214 "components": [215 { "internalType": "address", "name": "eth", "type": "address" },216 { "internalType": "uint256", "name": "sub", "type": "uint256" }217 ],218 "internalType": "struct CrossAddress[]",219 "name": "",220 "type": "tuple[]"221 }222 ],223 "stateMutability": "view",224 "type": "function"225 },226 {227 "inputs": [],228 "name": "collectionHelperAddress",229 "outputs": [{ "internalType": "address", "name": "", "type": "address" }],230 "stateMutability": "view",231 "type": "function"232 },233 {234 "inputs": [],235 "name": "collectionLimits",236 "outputs": [237 {238 "components": [239 {240 "internalType": "enum CollectionLimitField",241 "name": "field",242 "type": "uint8"243 },244 {245 "components": [246 { "internalType": "bool", "name": "status", "type": "bool" },247 { "internalType": "uint256", "name": "value", "type": "uint256" }248 ],249 "internalType": "struct OptionUint256",250 "name": "value",251 "type": "tuple"252 }253 ],254 "internalType": "struct CollectionLimit[]",255 "name": "",256 "type": "tuple[]"257 }258 ],259 "stateMutability": "view",260 "type": "function"261 },262 {263 "inputs": [],264 "name": "collectionNestingPermissions",265 "outputs": [266 {267 "components": [268 {269 "internalType": "enum CollectionPermissionField",270 "name": "field",271 "type": "uint8"272 },273 { "internalType": "bool", "name": "value", "type": "bool" }274 ],275 "internalType": "struct CollectionNestingPermission[]",276 "name": "",277 "type": "tuple[]"278 }279 ],280 "stateMutability": "view",281 "type": "function"282 },283 {284 "inputs": [],285 "name": "collectionNestingRestrictedCollectionIds",286 "outputs": [287 {288 "components": [289 { "internalType": "bool", "name": "token_owner", "type": "bool" },290 { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }291 ],292 "internalType": "struct CollectionNesting",293 "name": "",294 "type": "tuple"295 }296 ],297 "stateMutability": "view",298 "type": "function"299 },300 {301 "inputs": [],302 "name": "collectionOwner",303 "outputs": [304 {305 "components": [306 { "internalType": "address", "name": "eth", "type": "address" },307 { "internalType": "uint256", "name": "sub", "type": "uint256" }308 ],309 "internalType": "struct CrossAddress",310 "name": "",311 "type": "tuple"312 }313 ],314 "stateMutability": "view",315 "type": "function"316 },317 {318 "inputs": [319 { "internalType": "string[]", "name": "keys", "type": "string[]" }320 ],321 "name": "collectionProperties",322 "outputs": [323 {324 "components": [325 { "internalType": "string", "name": "key", "type": "string" },326 { "internalType": "bytes", "name": "value", "type": "bytes" }327 ],328 "internalType": "struct Property[]",329 "name": "",330 "type": "tuple[]"331 }332 ],333 "stateMutability": "view",334 "type": "function"335 },336 {337 "inputs": [{ "internalType": "string", "name": "key", "type": "string" }],338 "name": "collectionProperty",339 "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }],340 "stateMutability": "view",341 "type": "function"342 },343 {344 "inputs": [],345 "name": "collectionSponsor",346 "outputs": [347 {348 "components": [349 { "internalType": "address", "name": "eth", "type": "address" },350 { "internalType": "uint256", "name": "sub", "type": "uint256" }351 ],352 "internalType": "struct CrossAddress",353 "name": "",354 "type": "tuple"355 }356 ],357 "stateMutability": "view",358 "type": "function"359 },360 {361 "inputs": [],362 "name": "confirmCollectionSponsorship",363 "outputs": [],364 "stateMutability": "nonpayable",365 "type": "function"366 },367 {368 "inputs": [],369 "name": "contractAddress",370 "outputs": [{ "internalType": "address", "name": "", "type": "address" }],371 "stateMutability": "view",372 "type": "function"373 },374 {375 "inputs": [376 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }377 ],378 "name": "crossOwnerOf",379 "outputs": [380 {381 "components": [382 { "internalType": "address", "name": "eth", "type": "address" },383 { "internalType": "uint256", "name": "sub", "type": "uint256" }384 ],385 "internalType": "struct CrossAddress",386 "name": "",387 "type": "tuple"388 }389 ],390 "stateMutability": "view",391 "type": "function"392 },393 {394 "inputs": [395 { "internalType": "string[]", "name": "keys", "type": "string[]" }396 ],397 "name": "deleteCollectionProperties",398 "outputs": [],399 "stateMutability": "nonpayable",400 "type": "function"401 },402 {403 "inputs": [404 { "internalType": "uint256", "name": "tokenId", "type": "uint256" },405 { "internalType": "string[]", "name": "keys", "type": "string[]" }406 ],407 "name": "deleteProperties",408 "outputs": [],409 "stateMutability": "nonpayable",410 "type": "function"411 },412 {413 "inputs": [],414 "name": "description",415 "outputs": [{ "internalType": "string", "name": "", "type": "string" }],416 "stateMutability": "view",417 "type": "function"418 },419 {420 "inputs": [421 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }422 ],423 "name": "getApproved",424 "outputs": [{ "internalType": "address", "name": "", "type": "address" }],425 "stateMutability": "view",426 "type": "function"427 },428 {429 "inputs": [],430 "name": "hasCollectionPendingSponsor",431 "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],432 "stateMutability": "view",433 "type": "function"434 },435 {436 "inputs": [437 { "internalType": "address", "name": "owner", "type": "address" },438 { "internalType": "address", "name": "operator", "type": "address" }439 ],440 "name": "isApprovedForAll",441 "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],442 "stateMutability": "view",443 "type": "function"444 },445 {446 "inputs": [447 {448 "components": [449 { "internalType": "address", "name": "eth", "type": "address" },450 { "internalType": "uint256", "name": "sub", "type": "uint256" }451 ],452 "internalType": "struct CrossAddress",453 "name": "user",454 "type": "tuple"455 }456 ],457 "name": "isOwnerOrAdminCross",458 "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],459 "stateMutability": "view",460 "type": "function"461 },462 {463 "inputs": [{ "internalType": "address", "name": "to", "type": "address" }],464 "name": "mint",465 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],466 "stateMutability": "nonpayable",467 "type": "function"468 },469 {470 "inputs": [471 {472 "components": [473 { "internalType": "address", "name": "eth", "type": "address" },474 { "internalType": "uint256", "name": "sub", "type": "uint256" }475 ],476 "internalType": "struct CrossAddress",477 "name": "to",478 "type": "tuple"479 },480 {481 "components": [482 { "internalType": "string", "name": "key", "type": "string" },483 { "internalType": "bytes", "name": "value", "type": "bytes" }484 ],485 "internalType": "struct Property[]",486 "name": "properties",487 "type": "tuple[]"488 }489 ],490 "name": "mintCross",491 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],492 "stateMutability": "nonpayable",493 "type": "function"494 },495 {496 "inputs": [497 { "internalType": "address", "name": "to", "type": "address" },498 { "internalType": "string", "name": "tokenUri", "type": "string" }499 ],500 "name": "mintWithTokenURI",501 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],502 "stateMutability": "nonpayable",503 "type": "function"504 },505 {506 "inputs": [],507 "name": "name",508 "outputs": [{ "internalType": "string", "name": "", "type": "string" }],509 "stateMutability": "view",510 "type": "function"511 },512 {513 "inputs": [],514 "name": "nextTokenId",515 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],516 "stateMutability": "view",517 "type": "function"518 },519 {520 "inputs": [521 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }522 ],523 "name": "ownerOf",524 "outputs": [{ "internalType": "address", "name": "", "type": "address" }],525 "stateMutability": "view",526 "type": "function"527 },528 {529 "inputs": [530 { "internalType": "uint256", "name": "tokenId", "type": "uint256" },531 { "internalType": "string[]", "name": "keys", "type": "string[]" }532 ],533 "name": "properties",534 "outputs": [535 {536 "components": [537 { "internalType": "string", "name": "key", "type": "string" },538 { "internalType": "bytes", "name": "value", "type": "bytes" }539 ],540 "internalType": "struct Property[]",541 "name": "",542 "type": "tuple[]"543 }544 ],545 "stateMutability": "view",546 "type": "function"547 },548 {549 "inputs": [550 { "internalType": "uint256", "name": "tokenId", "type": "uint256" },551 { "internalType": "string", "name": "key", "type": "string" }552 ],553 "name": "property",554 "outputs": [{ "internalType": "bytes", "name": "", "type": "bytes" }],555 "stateMutability": "view",556 "type": "function"557 },558 {559 "inputs": [560 {561 "components": [562 { "internalType": "address", "name": "eth", "type": "address" },563 { "internalType": "uint256", "name": "sub", "type": "uint256" }564 ],565 "internalType": "struct CrossAddress",566 "name": "admin",567 "type": "tuple"568 }569 ],570 "name": "removeCollectionAdminCross",571 "outputs": [],572 "stateMutability": "nonpayable",573 "type": "function"574 },575 {576 "inputs": [],577 "name": "removeCollectionSponsor",578 "outputs": [],579 "stateMutability": "nonpayable",580 "type": "function"581 },582 {583 "inputs": [584 {585 "components": [586 { "internalType": "address", "name": "eth", "type": "address" },587 { "internalType": "uint256", "name": "sub", "type": "uint256" }588 ],589 "internalType": "struct CrossAddress",590 "name": "user",591 "type": "tuple"592 }593 ],594 "name": "removeFromCollectionAllowListCross",595 "outputs": [],596 "stateMutability": "nonpayable",597 "type": "function"598 },599 {600 "inputs": [601 { "internalType": "address", "name": "from", "type": "address" },602 { "internalType": "address", "name": "to", "type": "address" },603 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }604 ],605 "name": "safeTransferFrom",606 "outputs": [],607 "stateMutability": "nonpayable",608 "type": "function"609 },610 {611 "inputs": [612 { "internalType": "address", "name": "from", "type": "address" },613 { "internalType": "address", "name": "to", "type": "address" },614 { "internalType": "uint256", "name": "tokenId", "type": "uint256" },615 { "internalType": "bytes", "name": "data", "type": "bytes" }616 ],617 "name": "safeTransferFrom",618 "outputs": [],619 "stateMutability": "nonpayable",620 "type": "function"621 },622 {623 "inputs": [624 { "internalType": "address", "name": "operator", "type": "address" },625 { "internalType": "bool", "name": "approved", "type": "bool" }626 ],627 "name": "setApprovalForAll",628 "outputs": [],629 "stateMutability": "nonpayable",630 "type": "function"631 },632 {633 "inputs": [634 { "internalType": "enum AccessMode", "name": "mode", "type": "uint8" }635 ],636 "name": "setCollectionAccess",637 "outputs": [],638 "stateMutability": "nonpayable",639 "type": "function"640 },641 {642 "inputs": [643 {644 "components": [645 {646 "internalType": "enum CollectionLimitField",647 "name": "field",648 "type": "uint8"649 },650 {651 "components": [652 { "internalType": "bool", "name": "status", "type": "bool" },653 { "internalType": "uint256", "name": "value", "type": "uint256" }654 ],655 "internalType": "struct OptionUint256",656 "name": "value",657 "type": "tuple"658 }659 ],660 "internalType": "struct CollectionLimit",661 "name": "limit",662 "type": "tuple"663 }664 ],665 "name": "setCollectionLimit",666 "outputs": [],667 "stateMutability": "nonpayable",668 "type": "function"669 },670 {671 "inputs": [{ "internalType": "bool", "name": "mode", "type": "bool" }],672 "name": "setCollectionMintMode",673 "outputs": [],674 "stateMutability": "nonpayable",675 "type": "function"676 },677 {678 "inputs": [{ "internalType": "bool", "name": "enable", "type": "bool" }],679 "name": "setCollectionNesting",680 "outputs": [],681 "stateMutability": "nonpayable",682 "type": "function"683 },684 {685 "inputs": [686 { "internalType": "bool", "name": "enable", "type": "bool" },687 {688 "internalType": "address[]",689 "name": "collections",690 "type": "address[]"691 }692 ],693 "name": "setCollectionNesting",694 "outputs": [],695 "stateMutability": "nonpayable",696 "type": "function"697 },698 {699 "inputs": [700 {701 "components": [702 { "internalType": "string", "name": "key", "type": "string" },703 { "internalType": "bytes", "name": "value", "type": "bytes" }704 ],705 "internalType": "struct Property[]",706 "name": "properties",707 "type": "tuple[]"708 }709 ],710 "name": "setCollectionProperties",711 "outputs": [],712 "stateMutability": "nonpayable",713 "type": "function"714 },715 {716 "inputs": [717 {718 "components": [719 { "internalType": "address", "name": "eth", "type": "address" },720 { "internalType": "uint256", "name": "sub", "type": "uint256" }721 ],722 "internalType": "struct CrossAddress",723 "name": "sponsor",724 "type": "tuple"725 }726 ],727 "name": "setCollectionSponsorCross",728 "outputs": [],729 "stateMutability": "nonpayable",730 "type": "function"731 },732 {733 "inputs": [734 { "internalType": "uint256", "name": "tokenId", "type": "uint256" },735 {736 "components": [737 { "internalType": "string", "name": "key", "type": "string" },738 { "internalType": "bytes", "name": "value", "type": "bytes" }739 ],740 "internalType": "struct Property[]",741 "name": "properties",742 "type": "tuple[]"743 }744 ],745 "name": "setProperties",746 "outputs": [],747 "stateMutability": "nonpayable",748 "type": "function"749 },750 {751 "inputs": [752 {753 "components": [754 { "internalType": "string", "name": "key", "type": "string" },755 {756 "components": [757 {758 "internalType": "enum TokenPermissionField",759 "name": "code",760 "type": "uint8"761 },762 { "internalType": "bool", "name": "value", "type": "bool" }763 ],764 "internalType": "struct PropertyPermission[]",765 "name": "permissions",766 "type": "tuple[]"767 }768 ],769 "internalType": "struct TokenPropertyPermission[]",770 "name": "permissions",771 "type": "tuple[]"772 }773 ],774 "name": "setTokenPropertyPermissions",775 "outputs": [],776 "stateMutability": "nonpayable",777 "type": "function"778 },779 {780 "inputs": [781 { "internalType": "bytes4", "name": "interfaceID", "type": "bytes4" }782 ],783 "name": "supportsInterface",784 "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }],785 "stateMutability": "view",786 "type": "function"787 },788 {789 "inputs": [],790 "name": "symbol",791 "outputs": [{ "internalType": "string", "name": "", "type": "string" }],792 "stateMutability": "view",793 "type": "function"794 },795 {796 "inputs": [797 { "internalType": "uint256", "name": "index", "type": "uint256" }798 ],799 "name": "tokenByIndex",800 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],801 "stateMutability": "view",802 "type": "function"803 },804 {805 "inputs": [806 { "internalType": "address", "name": "owner", "type": "address" },807 { "internalType": "uint256", "name": "index", "type": "uint256" }808 ],809 "name": "tokenOfOwnerByIndex",810 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],811 "stateMutability": "view",812 "type": "function"813 },814 {815 "inputs": [],816 "name": "tokenPropertyPermissions",817 "outputs": [818 {819 "components": [820 { "internalType": "string", "name": "key", "type": "string" },821 {822 "components": [823 {824 "internalType": "enum TokenPermissionField",825 "name": "code",826 "type": "uint8"827 },828 { "internalType": "bool", "name": "value", "type": "bool" }829 ],830 "internalType": "struct PropertyPermission[]",831 "name": "permissions",832 "type": "tuple[]"833 }834 ],835 "internalType": "struct TokenPropertyPermission[]",836 "name": "",837 "type": "tuple[]"838 }839 ],840 "stateMutability": "view",841 "type": "function"842 },843 {844 "inputs": [845 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }846 ],847 "name": "tokenURI",848 "outputs": [{ "internalType": "string", "name": "", "type": "string" }],849 "stateMutability": "view",850 "type": "function"851 },852 {853 "inputs": [],854 "name": "totalSupply",855 "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }],856 "stateMutability": "view",857 "type": "function"858 },859 {860 "inputs": [861 { "internalType": "address", "name": "to", "type": "address" },862 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }863 ],864 "name": "transfer",865 "outputs": [],866 "stateMutability": "nonpayable",867 "type": "function"868 },869 {870 "inputs": [871 {872 "components": [873 { "internalType": "address", "name": "eth", "type": "address" },874 { "internalType": "uint256", "name": "sub", "type": "uint256" }875 ],876 "internalType": "struct CrossAddress",877 "name": "to",878 "type": "tuple"879 },880 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }881 ],882 "name": "transferCross",883 "outputs": [],884 "stateMutability": "nonpayable",885 "type": "function"886 },887 {888 "inputs": [889 { "internalType": "address", "name": "from", "type": "address" },890 { "internalType": "address", "name": "to", "type": "address" },891 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }892 ],893 "name": "transferFrom",894 "outputs": [],895 "stateMutability": "nonpayable",896 "type": "function"897 },898 {899 "inputs": [900 {901 "components": [902 { "internalType": "address", "name": "eth", "type": "address" },903 { "internalType": "uint256", "name": "sub", "type": "uint256" }904 ],905 "internalType": "struct CrossAddress",906 "name": "from",907 "type": "tuple"908 },909 {910 "components": [911 { "internalType": "address", "name": "eth", "type": "address" },912 { "internalType": "uint256", "name": "sub", "type": "uint256" }913 ],914 "internalType": "struct CrossAddress",915 "name": "to",916 "type": "tuple"917 },918 { "internalType": "uint256", "name": "tokenId", "type": "uint256" }919 ],920 "name": "transferFromCross",921 "outputs": [],922 "stateMutability": "nonpayable",923 "type": "function"924 },925 {926 "inputs": [],927 "name": "uniqueCollectionType",928 "outputs": [{ "internalType": "string", "name": "", "type": "string" }],929 "stateMutability": "view",930 "type": "function"931 }932]tests/src/eth/abi/reFungible.jsondiffbeforeafterboth--- a/tests/src/eth/abi/reFungible.json
+++ b/tests/src/eth/abi/reFungible.json
@@ -612,7 +612,9 @@
"type": "function"
},
{
- "inputs": [{ "internalType": "uint8", "name": "mode", "type": "uint8" }],
+ "inputs": [
+ { "internalType": "enum AccessMode", "name": "mode", "type": "uint8" }
+ ],
"name": "setCollectionAccess",
"outputs": [],
"stateMutability": "nonpayable",
tests/src/eth/api/UniqueFungible.soldiffbeforeafterboth--- a/tests/src/eth/api/UniqueFungible.sol
+++ b/tests/src/eth/api/UniqueFungible.sol
@@ -175,11 +175,9 @@
/// Set the collection access method.
/// @param mode Access mode
- /// 0 for Normal
- /// 1 for AllowList
/// @dev EVM selector for this function is: 0x41835d4c,
/// or in textual repr: setCollectionAccess(uint8)
- function setCollectionAccess(uint8 mode) external;
+ function setCollectionAccess(AccessMode mode) external;
/// Checks that user allowed to operate with collection.
///
@@ -285,6 +283,14 @@
uint256 sub;
}
+/// Ethereum representation of `AccessMode` (see [`up_data_structs::AccessMode`]).
+enum AccessMode {
+ /// Access grant for owner and admins. Used as default.
+ Normal,
+ /// Like a [`Normal`](AccessMode::Normal) but also users in allow list.
+ AllowList
+}
+
/// Ethereum representation of `NestingPermissions` (see [`up_data_structs::NestingPermissions`]) field.
struct CollectionNestingPermission {
CollectionPermissionField field;
tests/src/eth/api/UniqueNFT.soldiffbeforeafterboth--- a/tests/src/eth/api/UniqueNFT.sol
+++ b/tests/src/eth/api/UniqueNFT.sol
@@ -275,11 +275,9 @@
/// Set the collection access method.
/// @param mode Access mode
- /// 0 for Normal
- /// 1 for AllowList
/// @dev EVM selector for this function is: 0x41835d4c,
/// or in textual repr: setCollectionAccess(uint8)
- function setCollectionAccess(uint8 mode) external;
+ function setCollectionAccess(AccessMode mode) external;
/// Checks that user allowed to operate with collection.
///
@@ -385,6 +383,14 @@
uint256 sub;
}
+/// Ethereum representation of `AccessMode` (see [`up_data_structs::AccessMode`]).
+enum AccessMode {
+ /// Access grant for owner and admins. Used as default.
+ Normal,
+ /// Like a [`Normal`](AccessMode::Normal) but also users in allow list.
+ AllowList
+}
+
/// Ethereum representation of `NestingPermissions` (see [`up_data_structs::NestingPermissions`]) field.
struct CollectionNestingPermission {
CollectionPermissionField field;
tests/src/eth/api/UniqueRefungible.soldiffbeforeafterboth--- a/tests/src/eth/api/UniqueRefungible.sol
+++ b/tests/src/eth/api/UniqueRefungible.sol
@@ -275,11 +275,9 @@
/// Set the collection access method.
/// @param mode Access mode
- /// 0 for Normal
- /// 1 for AllowList
/// @dev EVM selector for this function is: 0x41835d4c,
/// or in textual repr: setCollectionAccess(uint8)
- function setCollectionAccess(uint8 mode) external;
+ function setCollectionAccess(AccessMode mode) external;
/// Checks that user allowed to operate with collection.
///
@@ -385,6 +383,14 @@
uint256 sub;
}
+/// Ethereum representation of `AccessMode` (see [`up_data_structs::AccessMode`]).
+enum AccessMode {
+ /// Access grant for owner and admins. Used as default.
+ Normal,
+ /// Like a [`Normal`](AccessMode::Normal) but also users in allow list.
+ AllowList
+}
+
/// Ethereum representation of `NestingPermissions` (see [`up_data_structs::NestingPermissions`]) field.
struct CollectionNestingPermission {
CollectionPermissionField field;