difftreelog
refactor switch to new eth log logic
in: master
33 files changed
Cargo.lockdiffbeforeafterboth--- a/Cargo.lock
+++ b/Cargo.lock
@@ -2555,7 +2555,7 @@
[[package]]
name = "fc-consensus"
version = "2.0.0-dev"
-source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.21#4c0dea347d0388a7b261cbc36568170e288f3e7a"
+source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.21-logs#79cd4c4cf29106c431facd6779783fc887b21475"
dependencies = [
"async-trait",
"fc-db",
@@ -2574,7 +2574,7 @@
[[package]]
name = "fc-db"
version = "2.0.0-dev"
-source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.21#4c0dea347d0388a7b261cbc36568170e288f3e7a"
+source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.21-logs#79cd4c4cf29106c431facd6779783fc887b21475"
dependencies = [
"fp-storage",
"kvdb-rocksdb",
@@ -2588,7 +2588,7 @@
[[package]]
name = "fc-mapping-sync"
version = "2.0.0-dev"
-source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.21#4c0dea347d0388a7b261cbc36568170e288f3e7a"
+source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.21-logs#79cd4c4cf29106c431facd6779783fc887b21475"
dependencies = [
"fc-db",
"fp-consensus",
@@ -2605,7 +2605,7 @@
[[package]]
name = "fc-rpc"
version = "2.0.0-dev"
-source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.21#4c0dea347d0388a7b261cbc36568170e288f3e7a"
+source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.21-logs#79cd4c4cf29106c431facd6779783fc887b21475"
dependencies = [
"ethereum",
"ethereum-types",
@@ -2644,7 +2644,7 @@
[[package]]
name = "fc-rpc-core"
version = "1.1.0-dev"
-source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.21#4c0dea347d0388a7b261cbc36568170e288f3e7a"
+source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.21-logs#79cd4c4cf29106c431facd6779783fc887b21475"
dependencies = [
"ethereum",
"ethereum-types",
@@ -2777,7 +2777,7 @@
[[package]]
name = "fp-consensus"
version = "2.0.0-dev"
-source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.21#4c0dea347d0388a7b261cbc36568170e288f3e7a"
+source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.21-logs#79cd4c4cf29106c431facd6779783fc887b21475"
dependencies = [
"ethereum",
"parity-scale-codec",
@@ -2789,7 +2789,7 @@
[[package]]
name = "fp-evm"
version = "3.0.0-dev"
-source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.21#4c0dea347d0388a7b261cbc36568170e288f3e7a"
+source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.21-logs#79cd4c4cf29106c431facd6779783fc887b21475"
dependencies = [
"evm",
"impl-trait-for-tuples",
@@ -2802,7 +2802,7 @@
[[package]]
name = "fp-evm-mapping"
version = "0.1.0"
-source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.21#4c0dea347d0388a7b261cbc36568170e288f3e7a"
+source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.21-logs#79cd4c4cf29106c431facd6779783fc887b21475"
dependencies = [
"frame-support",
"sp-core",
@@ -2811,7 +2811,7 @@
[[package]]
name = "fp-rpc"
version = "3.0.0-dev"
-source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.21#4c0dea347d0388a7b261cbc36568170e288f3e7a"
+source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.21-logs#79cd4c4cf29106c431facd6779783fc887b21475"
dependencies = [
"ethereum",
"ethereum-types",
@@ -2828,7 +2828,7 @@
[[package]]
name = "fp-self-contained"
version = "1.0.0-dev"
-source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.21#4c0dea347d0388a7b261cbc36568170e288f3e7a"
+source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.21-logs#79cd4c4cf29106c431facd6779783fc887b21475"
dependencies = [
"ethereum",
"frame-support",
@@ -2844,7 +2844,7 @@
[[package]]
name = "fp-storage"
version = "2.0.0"
-source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.21#4c0dea347d0388a7b261cbc36568170e288f3e7a"
+source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.21-logs#79cd4c4cf29106c431facd6779783fc887b21475"
dependencies = [
"parity-scale-codec",
]
@@ -5741,7 +5741,7 @@
[[package]]
name = "pallet-base-fee"
version = "1.0.0"
-source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.21#4c0dea347d0388a7b261cbc36568170e288f3e7a"
+source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.21-logs#79cd4c4cf29106c431facd6779783fc887b21475"
dependencies = [
"fp-evm",
"frame-support",
@@ -5999,7 +5999,7 @@
[[package]]
name = "pallet-ethereum"
version = "4.0.0-dev"
-source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.21#4c0dea347d0388a7b261cbc36568170e288f3e7a"
+source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.21-logs#79cd4c4cf29106c431facd6779783fc887b21475"
dependencies = [
"ethereum",
"ethereum-types",
@@ -6029,7 +6029,7 @@
[[package]]
name = "pallet-evm"
version = "6.0.0-dev"
-source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.21#4c0dea347d0388a7b261cbc36568170e288f3e7a"
+source = "git+https://github.com/uniquenetwork/frontier?branch=unique-polkadot-v0.9.21-logs#79cd4c4cf29106c431facd6779783fc887b21475"
dependencies = [
"evm",
"fp-evm",
client/rpc/Cargo.tomldiffbeforeafterboth--- a/client/rpc/Cargo.toml
+++ b/client/rpc/Cargo.toml
@@ -18,4 +18,4 @@
sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.21" }
sp-rpc = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.21" }
sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.21" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
+pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
node/cli/Cargo.tomldiffbeforeafterboth--- a/node/cli/Cargo.toml
+++ b/node/cli/Cargo.toml
@@ -306,13 +306,13 @@
jsonrpc-pubsub = "18.0.0"
tokio = { version = "1.17.0", features = ["time"] }
-fc-rpc-core = { git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
-fc-consensus = { git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
-fc-mapping-sync = { git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
-fc-rpc = { git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
-fc-db = { git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
-fp-rpc = { git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
-pallet-ethereum = { git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
+fc-rpc-core = { git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
+fc-consensus = { git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
+fc-mapping-sync = { git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
+fc-rpc = { git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
+fc-db = { git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
+fp-rpc = { git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
+pallet-ethereum = { git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
unique-rpc = { default-features = false, path = "../rpc" }
node/rpc/Cargo.tomldiffbeforeafterboth--- a/node/rpc/Cargo.toml
+++ b/node/rpc/Cargo.toml
@@ -41,13 +41,13 @@
substrate-frame-rpc-system = { git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.21" }
tokio = { version = "0.2.25", features = ["macros", "sync"] }
-pallet-ethereum = { git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
-fc-rpc = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
-fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
-fp-storage = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
-fc-rpc-core = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
-fc-db = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
-fc-mapping-sync = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
+pallet-ethereum = { git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
+fc-rpc = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
+fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
+fp-storage = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
+fc-rpc-core = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
+fc-db = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
+fc-mapping-sync = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
pallet-common = { default-features = false, path = "../../pallets/common" }
unique-runtime-common = { default-features = false, path = "../../runtime/common" }
pallets/common/Cargo.tomldiffbeforeafterboth--- a/pallets/common/Cargo.toml
+++ b/pallets/common/Cargo.toml
@@ -16,11 +16,11 @@
sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.21" }
sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.21" }
sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.21" }
-fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
+fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
up-data-structs = { default-features = false, path = '../../primitives/data-structs' }
pallet-evm-coder-substrate = { default-features = false, path = '../../pallets/evm-coder-substrate' }
evm-coder = { default-features = false, path = '../../crates/evm-coder' }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
+pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
serde = { version = "1.0.130", default-features = false }
scale-info = { version = "2.0.1", default-features = false, features = [
"derive",
pallets/common/src/dispatch.rsdiffbeforeafterboth--- a/pallets/common/src/dispatch.rs
+++ b/pallets/common/src/dispatch.rs
@@ -52,8 +52,6 @@
}) => *weight += dispatch_weight::<T>(),
_ => {}
}
-
- dispatched.into_inner().submit_logs();
result
}
pallets/common/src/lib.rsdiffbeforeafterboth--- a/pallets/common/src/lib.rs
+++ b/pallets/common/src/lib.rs
@@ -66,7 +66,7 @@
<CollectionById<T>>::get(id).map(|collection| Self {
id,
collection,
- recorder: SubstrateRecorder::new(eth::collection_id_to_address(id), gas_limit),
+ recorder: SubstrateRecorder::new(gas_limit),
})
}
pub fn new(id: CollectionId) -> Option<Self> {
@@ -74,12 +74,6 @@
}
pub fn try_get(id: CollectionId) -> Result<Self, DispatchError> {
Ok(Self::new(id).ok_or(<Error<T>>::CollectionNotFound)?)
- }
- pub fn log_mirrored(&self, log: impl evm_coder::ToLog) {
- self.recorder.log_mirrored(log)
- }
- pub fn log_direct(&self, log: impl evm_coder::ToLog) {
- self.recorder.log_direct(log)
}
pub fn consume_store_reads(&self, reads: u64) -> evm_coder::execution::Result<()> {
self.recorder
@@ -96,12 +90,8 @@
.write
.saturating_mul(writes),
))
- }
- pub fn submit_logs(self) {
- self.recorder.submit_logs()
}
pub fn save(self) -> DispatchResult {
- self.recorder.submit_logs();
<CollectionById<T>>::insert(self.id, self.collection);
Ok(())
}
pallets/evm-coder-substrate/Cargo.tomldiffbeforeafterboth--- a/pallets/evm-coder-substrate/Cargo.toml
+++ b/pallets/evm-coder-substrate/Cargo.toml
@@ -12,8 +12,8 @@
sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.21" }
ethereum = { version = "0.12.0", default-features = false }
evm-coder = { default-features = false, path = "../../crates/evm-coder" }
-pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
+pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
+pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
frame-support = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.21" }
frame-system = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.21" }
frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.21" }
pallets/evm-coder-substrate/src/lib.rsdiffbeforeafterboth--- a/pallets/evm-coder-substrate/src/lib.rs
+++ b/pallets/evm-coder-substrate/src/lib.rs
@@ -24,7 +24,6 @@
use core::marker::PhantomData;
use sp_std::cell::RefCell;
-use sp_std::vec::Vec;
use codec::Decode;
use frame_support::pallet_prelude::DispatchError;
@@ -33,15 +32,13 @@
use up_data_structs::budget;
use pallet_evm::{
ExitError, ExitRevert, ExitSucceed, GasWeightMapping, PrecompileFailure, PrecompileOutput,
- PrecompileResult, runner::stack::MaybeMirroredLog,
+ PrecompileResult,
};
use sp_core::H160;
-use pallet_ethereum::EthereumTransactionSender;
// #[cfg(feature = "runtime-benchmarks")]
// pub mod benchmarking;
use evm_coder::{
- ToLog,
abi::{AbiReader, AbiWrite, AbiWriter},
execution::{self, Result},
types::{Msg, value},
@@ -70,7 +67,6 @@
#[pallet::config]
pub trait Config: frame_system::Config {
- type EthereumTransactionSender: pallet_ethereum::EthereumTransactionSender;
type GasWeightMapping: pallet_evm::GasWeightMapping;
}
@@ -107,43 +103,20 @@
#[derive(Default)]
pub struct SubstrateRecorder<T: Config> {
- contract: H160,
- logs: RefCell<Vec<MaybeMirroredLog>>,
initial_gas: u64,
gas_limit: RefCell<u64>,
_phantom: PhantomData<*const T>,
}
impl<T: Config> SubstrateRecorder<T> {
- pub fn new(contract: H160, gas_limit: u64) -> Self {
+ pub fn new(gas_limit: u64) -> Self {
Self {
- contract,
- logs: RefCell::new(Vec::new()),
initial_gas: gas_limit,
gas_limit: RefCell::new(gas_limit),
_phantom: PhantomData,
}
}
- pub fn is_empty(&self) -> bool {
- self.logs.borrow().is_empty()
- }
- // Logs emitted with log_direct appear as substrate evm.Log event
- pub fn log_direct(&self, log: impl ToLog) {
- self.logs
- .borrow_mut()
- .push(MaybeMirroredLog::direct(log.to_log(self.contract)))
- }
- /// If log already has substrate equivalent - then we don't need to emit evm.Log
- pub fn log_mirrored(&self, log: impl ToLog) {
- self.logs
- .borrow_mut()
- .push(MaybeMirroredLog::mirrored(log.to_log(self.contract)))
- }
- pub fn retrieve_logs(self) -> Vec<MaybeMirroredLog> {
- self.logs.into_inner()
- }
-
pub fn gas_left(&self) -> u64 {
*self.gas_limit.borrow()
}
@@ -207,8 +180,8 @@
Ok(Some(v)) => Ok(PrecompileOutput {
exit_status: ExitSucceed::Returned,
cost: self.initial_gas - self.gas_left(),
- // TODO: preserve mirroring status
- logs: self.retrieve_logs().into_iter().map(|l| l.log).collect(),
+ // We don't use this interface
+ logs: sp_std::vec![],
output: v.finish(),
}),
Ok(None) => return None,
@@ -225,14 +198,6 @@
Err(Error::Fatal(f)) => Err(f.into()),
Err(Error::Error(e)) => Err(e.into()),
})
- }
-
- pub fn submit_logs(self) {
- let logs = self.retrieve_logs();
- if logs.is_empty() {
- return;
- }
- T::EthereumTransactionSender::submit_logs_transaction(Default::default(), logs)
}
}
pallets/evm-contract-helpers/Cargo.tomldiffbeforeafterboth--- a/pallets/evm-contract-helpers/Cargo.toml
+++ b/pallets/evm-contract-helpers/Cargo.toml
@@ -15,8 +15,8 @@
sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.21" }
evm-coder = { default-features = false, path = '../../crates/evm-coder' }
pallet-evm-coder-substrate = { default-features = false, path = '../../pallets/evm-coder-substrate' }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
-fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
+pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
+fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
up-sponsorship = { version = "0.1.0", default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v0.9.21" }
log = "0.4.14"
pallets/evm-contract-helpers/src/eth.rsdiffbeforeafterboth--- a/pallets/evm-contract-helpers/src/eth.rs
+++ b/pallets/evm-contract-helpers/src/eth.rs
@@ -162,7 +162,7 @@
return None;
}
- let helpers = ContractHelpers::<T>(SubstrateRecorder::<T>::new(*target, gas_left));
+ let helpers = ContractHelpers::<T>(SubstrateRecorder::<T>::new(gas_left));
pallet_evm_coder_substrate::call(*source, helpers, value, input)
}
pallets/evm-migration/Cargo.tomldiffbeforeafterboth--- a/pallets/evm-migration/Cargo.toml
+++ b/pallets/evm-migration/Cargo.toml
@@ -15,8 +15,8 @@
sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.21" }
sp-io = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.21" }
sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.21" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
-fp-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
+pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
+fp-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
[dependencies.codec]
default-features = false
pallets/evm-migration/src/lib.rsdiffbeforeafterboth--- a/pallets/evm-migration/src/lib.rs
+++ b/pallets/evm-migration/src/lib.rs
@@ -28,6 +28,7 @@
use sp_core::{H160, H256};
use sp_std::vec::Vec;
use super::weights::WeightInfo;
+ use pallet_evm::Pallet as PalletEvm;
#[pallet::config]
pub trait Config: frame_system::Config + pallet_evm::Config {
@@ -56,8 +57,7 @@
pub fn begin(origin: OriginFor<T>, address: H160) -> DispatchResult {
ensure_root(origin)?;
ensure!(
- <pallet_evm::Pallet<T>>::is_account_empty(&address)
- && !<MigrationPending<T>>::get(&address),
+ <PalletEvm<T>>::is_account_empty(&address) && !<MigrationPending<T>>::get(&address),
<Error<T>>::AccountNotEmpty,
);
pallets/evm-transaction-payment/Cargo.tomldiffbeforeafterboth--- a/pallets/evm-transaction-payment/Cargo.toml
+++ b/pallets/evm-transaction-payment/Cargo.toml
@@ -14,11 +14,11 @@
sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.21" }
sp-io = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.21" }
sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.21" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
-fp-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
-pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
+pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
+fp-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
+pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
up-sponsorship = { version = "0.1.0", default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = "polkadot-v0.9.21" }
-fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
+fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
[dependencies.codec]
default-features = false
pallets/fungible/Cargo.tomldiffbeforeafterboth--- a/pallets/fungible/Cargo.toml
+++ b/pallets/fungible/Cargo.toml
@@ -23,7 +23,7 @@
pallet-evm-coder-substrate = { default-features = false, path = '../evm-coder-substrate' }
ethereum = { version = "0.12.0", default-features = false }
frame-benchmarking = { default-features = false, optional = true, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.21" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
+pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
scale-info = { version = "2.0.1", default-features = false, features = [
"derive",
] }
pallets/fungible/src/lib.rsdiffbeforeafterboth1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617#![cfg_attr(not(feature = "std"), no_std)]1819use core::ops::Deref;20use frame_support::{ensure};21use pallet_evm::account::CrossAccountId;22use up_data_structs::{23 AccessMode, CollectionId, TokenId, CreateCollectionData, mapping::TokenAddressMapping,24 budget::Budget,25};26use pallet_common::{27 Error as CommonError, Event as CommonEvent, Pallet as PalletCommon, CollectionHandle,28 dispatch::CollectionDispatch,29};30use pallet_structure::Pallet as PalletStructure;31use pallet_evm_coder_substrate::WithRecorder;32use sp_core::H160;33use sp_runtime::{ArithmeticError, DispatchError, DispatchResult};34use sp_std::collections::btree_map::BTreeMap;3536pub use pallet::*;3738use crate::erc::ERC20Events;39#[cfg(feature = "runtime-benchmarks")]40pub mod benchmarking;41pub mod common;42pub mod erc;43pub mod weights;4445pub type CreateItemData<T> = (<T as pallet_evm::account::Config>::CrossAccountId, u128);46pub(crate) type SelfWeightOf<T> = <T as Config>::WeightInfo;4748#[frame_support::pallet]49pub mod pallet {50 use frame_support::{Blake2_128, Blake2_128Concat, Twox64Concat, pallet_prelude::*, storage::Key};51 use up_data_structs::CollectionId;52 use super::weights::WeightInfo;5354 #[pallet::error]55 pub enum Error<T> {56 /// Not Fungible item data used to mint in Fungible collection.57 NotFungibleDataUsedToMintFungibleCollectionToken,58 /// Not default id passed as TokenId argument59 FungibleItemsHaveNoId,60 /// Tried to set data for fungible item61 FungibleItemsDontHaveData,62 /// Fungible token does not support nested63 FungibleDisallowsNesting,64 /// Setting item properties is not allowed65 SettingPropertiesNotAllowed,66 }6768 #[pallet::config]69 pub trait Config:70 frame_system::Config + pallet_common::Config + pallet_structure::Config71 {72 type WeightInfo: WeightInfo;73 }7475 #[pallet::pallet]76 #[pallet::generate_store(pub(super) trait Store)]77 pub struct Pallet<T>(_);7879 #[pallet::storage]80 pub type TotalSupply<T: Config> =81 StorageMap<Hasher = Twox64Concat, Key = CollectionId, Value = u128, QueryKind = ValueQuery>;8283 #[pallet::storage]84 pub type Balance<T: Config> = StorageNMap<85 Key = (86 Key<Twox64Concat, CollectionId>,87 Key<Blake2_128Concat, T::CrossAccountId>,88 ),89 Value = u128,90 QueryKind = ValueQuery,91 >;9293 #[pallet::storage]94 pub type Allowance<T: Config> = StorageNMap<95 Key = (96 Key<Twox64Concat, CollectionId>,97 Key<Blake2_128, T::CrossAccountId>,98 Key<Blake2_128Concat, T::CrossAccountId>,99 ),100 Value = u128,101 QueryKind = ValueQuery,102 >;103}104105pub struct FungibleHandle<T: Config>(pallet_common::CollectionHandle<T>);106impl<T: Config> FungibleHandle<T> {107 pub fn cast(inner: pallet_common::CollectionHandle<T>) -> Self {108 Self(inner)109 }110 pub fn into_inner(self) -> pallet_common::CollectionHandle<T> {111 self.0112 }113 pub fn common_mut(&mut self) -> &mut pallet_common::CollectionHandle<T> {114 &mut self.0115 }116}117impl<T: Config> WithRecorder<T> for FungibleHandle<T> {118 fn recorder(&self) -> &pallet_evm_coder_substrate::SubstrateRecorder<T> {119 self.0.recorder()120 }121 fn into_recorder(self) -> pallet_evm_coder_substrate::SubstrateRecorder<T> {122 self.0.into_recorder()123 }124}125impl<T: Config> Deref for FungibleHandle<T> {126 type Target = pallet_common::CollectionHandle<T>;127128 fn deref(&self) -> &Self::Target {129 &self.0130 }131}132133impl<T: Config> Pallet<T> {134 pub fn init_collection(135 owner: T::AccountId,136 data: CreateCollectionData<T::AccountId>,137 ) -> Result<CollectionId, DispatchError> {138 <PalletCommon<T>>::init_collection(owner, data)139 }140 pub fn destroy_collection(141 collection: FungibleHandle<T>,142 sender: &T::CrossAccountId,143 ) -> DispatchResult {144 let id = collection.id;145146 // =========147148 PalletCommon::destroy_collection(collection.0, sender)?;149150 <TotalSupply<T>>::remove(id);151 <Balance<T>>::remove_prefix((id,), None);152 <Allowance<T>>::remove_prefix((id,), None);153 Ok(())154 }155156 pub fn burn(157 collection: &FungibleHandle<T>,158 owner: &T::CrossAccountId,159 amount: u128,160 ) -> DispatchResult {161 let total_supply = <TotalSupply<T>>::get(collection.id)162 .checked_sub(amount)163 .ok_or(<CommonError<T>>::TokenValueTooLow)?;164165 let balance = <Balance<T>>::get((collection.id, owner))166 .checked_sub(amount)167 .ok_or(<CommonError<T>>::TokenValueTooLow)?;168169 if collection.access == AccessMode::AllowList {170 collection.check_allowlist(owner)?;171 }172173 // =========174175 if balance == 0 {176 <Balance<T>>::remove((collection.id, owner));177 } else {178 <Balance<T>>::insert((collection.id, owner), balance);179 }180 <TotalSupply<T>>::insert(collection.id, total_supply);181182 collection.log_mirrored(ERC20Events::Transfer {183 from: *owner.as_eth(),184 to: H160::default(),185 value: amount.into(),186 });187 <PalletCommon<T>>::deposit_event(CommonEvent::ItemDestroyed(188 collection.id,189 TokenId::default(),190 owner.clone(),191 amount,192 ));193 Ok(())194 }195196 pub fn transfer(197 collection: &FungibleHandle<T>,198 from: &T::CrossAccountId,199 to: &T::CrossAccountId,200 amount: u128,201 nesting_budget: &dyn Budget,202 ) -> DispatchResult {203 ensure!(204 collection.limits.transfers_enabled(),205 <CommonError<T>>::TransferNotAllowed,206 );207208 if collection.access == AccessMode::AllowList {209 collection.check_allowlist(from)?;210 collection.check_allowlist(to)?;211 }212 <PalletCommon<T>>::ensure_correct_receiver(to)?;213214 let balance_from = <Balance<T>>::get((collection.id, from))215 .checked_sub(amount)216 .ok_or(<CommonError<T>>::TokenValueTooLow)?;217 let balance_to = if from != to {218 Some(219 <Balance<T>>::get((collection.id, to))220 .checked_add(amount)221 .ok_or(ArithmeticError::Overflow)?,222 )223 } else {224 None225 };226227 if let Some(target) = T::CrossTokenAddressMapping::address_to_token(to) {228 let handle = <CollectionHandle<T>>::try_get(target.0)?;229 let dispatch = T::CollectionDispatch::dispatch(handle);230 let dispatch = dispatch.as_dyn();231232 dispatch.check_nesting(233 from.clone(),234 (collection.id, TokenId::default()),235 target.1,236 nesting_budget,237 )?;238 }239240 // =========241242 if let Some(balance_to) = balance_to {243 // from != to244 if balance_from == 0 {245 <Balance<T>>::remove((collection.id, from));246 } else {247 <Balance<T>>::insert((collection.id, from), balance_from);248 }249 <Balance<T>>::insert((collection.id, to), balance_to);250 }251252 collection.log_mirrored(ERC20Events::Transfer {253 from: *from.as_eth(),254 to: *to.as_eth(),255 value: amount.into(),256 });257 <PalletCommon<T>>::deposit_event(CommonEvent::Transfer(258 collection.id,259 TokenId::default(),260 from.clone(),261 to.clone(),262 amount,263 ));264 Ok(())265 }266267 pub fn create_multiple_items(268 collection: &FungibleHandle<T>,269 sender: &T::CrossAccountId,270 data: BTreeMap<T::CrossAccountId, u128>,271 nesting_budget: &dyn Budget,272 ) -> DispatchResult {273 if !collection.is_owner_or_admin(sender) {274 ensure!(275 collection.mint_mode,276 <CommonError<T>>::PublicMintingNotAllowed277 );278 collection.check_allowlist(sender)?;279280 for (owner, _) in data.iter() {281 collection.check_allowlist(owner)?;282 }283 }284285 let total_supply = data286 .iter()287 .map(|(_, v)| *v)288 .try_fold(<TotalSupply<T>>::get(collection.id), |acc, v| {289 acc.checked_add(v)290 })291 .ok_or(ArithmeticError::Overflow)?;292293 let mut balances = data;294 for (k, v) in balances.iter_mut() {295 *v = <Balance<T>>::get((collection.id, &k))296 .checked_add(*v)297 .ok_or(ArithmeticError::Overflow)?;298 }299300 for (to, _) in balances.iter() {301 if let Some(target) = T::CrossTokenAddressMapping::address_to_token(to) {302 let handle = <CollectionHandle<T>>::try_get(target.0)?;303 let dispatch = T::CollectionDispatch::dispatch(handle);304 let dispatch = dispatch.as_dyn();305306 dispatch.check_nesting(307 sender.clone(),308 (collection.id, TokenId::default()),309 target.1,310 nesting_budget,311 )?;312 }313 }314315 // =========316317 <TotalSupply<T>>::insert(collection.id, total_supply);318 for (user, amount) in balances {319 <Balance<T>>::insert((collection.id, &user), amount);320321 collection.log_mirrored(ERC20Events::Transfer {322 from: H160::default(),323 to: *user.as_eth(),324 value: amount.into(),325 });326 <PalletCommon<T>>::deposit_event(CommonEvent::ItemCreated(327 collection.id,328 TokenId::default(),329 user.clone(),330 amount,331 ));332 }333334 Ok(())335 }336337 fn set_allowance_unchecked(338 collection: &FungibleHandle<T>,339 owner: &T::CrossAccountId,340 spender: &T::CrossAccountId,341 amount: u128,342 ) {343 if amount == 0 {344 <Allowance<T>>::remove((collection.id, owner, spender));345 } else {346 <Allowance<T>>::insert((collection.id, owner, spender), amount);347 }348349 collection.log_mirrored(ERC20Events::Approval {350 owner: *owner.as_eth(),351 spender: *spender.as_eth(),352 value: amount.into(),353 });354 <PalletCommon<T>>::deposit_event(CommonEvent::Approved(355 collection.id,356 TokenId(0),357 owner.clone(),358 spender.clone(),359 amount,360 ));361 }362363 pub fn set_allowance(364 collection: &FungibleHandle<T>,365 owner: &T::CrossAccountId,366 spender: &T::CrossAccountId,367 amount: u128,368 ) -> DispatchResult {369 if collection.access == AccessMode::AllowList {370 collection.check_allowlist(owner)?;371 collection.check_allowlist(spender)?;372 }373374 if <Balance<T>>::get((collection.id, owner)) < amount {375 ensure!(376 collection.ignores_owned_amount(owner),377 <CommonError<T>>::CantApproveMoreThanOwned378 );379 }380381 // =========382383 Self::set_allowance_unchecked(collection, owner, spender, amount);384 Ok(())385 }386387 fn check_allowed(388 collection: &FungibleHandle<T>,389 spender: &T::CrossAccountId,390 from: &T::CrossAccountId,391 amount: u128,392 nesting_budget: &dyn Budget,393 ) -> Result<Option<u128>, DispatchError> {394 if spender.conv_eq(from) {395 return Ok(None);396 }397 if collection.access == AccessMode::AllowList {398 // `from`, `to` checked in [`transfer`]399 collection.check_allowlist(spender)?;400 }401 if let Some(source) = T::CrossTokenAddressMapping::address_to_token(from) {402 // TODO: should collection owner be allowed to perform this transfer?403 ensure!(404 <PalletStructure<T>>::check_indirectly_owned(405 spender.clone(),406 source.0,407 source.1,408 None,409 nesting_budget410 )?,411 <CommonError<T>>::ApprovedValueTooLow,412 );413 return Ok(None);414 }415 let allowance = <Allowance<T>>::get((collection.id, from, spender)).checked_sub(amount);416 if allowance.is_none() {417 ensure!(418 collection.ignores_allowance(spender),419 <CommonError<T>>::ApprovedValueTooLow420 );421 }422423 Ok(allowance)424 }425426 pub fn transfer_from(427 collection: &FungibleHandle<T>,428 spender: &T::CrossAccountId,429 from: &T::CrossAccountId,430 to: &T::CrossAccountId,431 amount: u128,432 nesting_budget: &dyn Budget,433 ) -> DispatchResult {434 let allowance = Self::check_allowed(collection, spender, from, amount, nesting_budget)?;435436 // =========437438 Self::transfer(collection, from, to, amount, nesting_budget)?;439 if let Some(allowance) = allowance {440 Self::set_allowance_unchecked(collection, from, spender, allowance);441 }442 Ok(())443 }444445 pub fn burn_from(446 collection: &FungibleHandle<T>,447 spender: &T::CrossAccountId,448 from: &T::CrossAccountId,449 amount: u128,450 nesting_budget: &dyn Budget,451 ) -> DispatchResult {452 let allowance = Self::check_allowed(collection, spender, from, amount, nesting_budget)?;453454 // =========455456 Self::burn(collection, from, amount)?;457 if let Some(allowance) = allowance {458 Self::set_allowance_unchecked(collection, from, spender, allowance);459 }460 Ok(())461 }462463 /// Delegated to `create_multiple_items`464 pub fn create_item(465 collection: &FungibleHandle<T>,466 sender: &T::CrossAccountId,467 data: CreateItemData<T>,468 nesting_budget: &dyn Budget,469 ) -> DispatchResult {470 Self::create_multiple_items(471 collection,472 sender,473 [(data.0, data.1)].into_iter().collect(),474 nesting_budget,475 )476 }477}1// Copyright 2019-2022 Unique Network (Gibraltar) Ltd.2// This file is part of Unique Network.34// Unique Network is free software: you can redistribute it and/or modify5// it under the terms of the GNU General Public License as published by6// the Free Software Foundation, either version 3 of the License, or7// (at your option) any later version.89// Unique Network is distributed in the hope that it will be useful,10// but WITHOUT ANY WARRANTY; without even the implied warranty of11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the12// GNU General Public License for more details.1314// You should have received a copy of the GNU General Public License15// along with Unique Network. If not, see <http://www.gnu.org/licenses/>.1617#![cfg_attr(not(feature = "std"), no_std)]1819use core::ops::Deref;20use evm_coder::ToLog;21use frame_support::{ensure};22use pallet_evm::account::CrossAccountId;23use up_data_structs::{24 AccessMode, CollectionId, TokenId, CreateCollectionData, mapping::TokenAddressMapping,25 budget::Budget,26};27use pallet_common::{28 Error as CommonError, Event as CommonEvent, Pallet as PalletCommon, CollectionHandle,29 dispatch::CollectionDispatch, eth::collection_id_to_address,30};31use pallet_evm::Pallet as PalletEvm;32use pallet_structure::Pallet as PalletStructure;33use pallet_evm_coder_substrate::WithRecorder;34use sp_core::H160;35use sp_runtime::{ArithmeticError, DispatchError, DispatchResult};36use sp_std::collections::btree_map::BTreeMap;3738pub use pallet::*;3940use crate::erc::ERC20Events;41#[cfg(feature = "runtime-benchmarks")]42pub mod benchmarking;43pub mod common;44pub mod erc;45pub mod weights;4647pub type CreateItemData<T> = (<T as pallet_evm::account::Config>::CrossAccountId, u128);48pub(crate) type SelfWeightOf<T> = <T as Config>::WeightInfo;4950#[frame_support::pallet]51pub mod pallet {52 use frame_support::{Blake2_128, Blake2_128Concat, Twox64Concat, pallet_prelude::*, storage::Key};53 use up_data_structs::CollectionId;54 use super::weights::WeightInfo;5556 #[pallet::error]57 pub enum Error<T> {58 /// Not Fungible item data used to mint in Fungible collection.59 NotFungibleDataUsedToMintFungibleCollectionToken,60 /// Not default id passed as TokenId argument61 FungibleItemsHaveNoId,62 /// Tried to set data for fungible item63 FungibleItemsDontHaveData,64 /// Fungible token does not support nested65 FungibleDisallowsNesting,66 /// Setting item properties is not allowed67 SettingPropertiesNotAllowed,68 }6970 #[pallet::config]71 pub trait Config:72 frame_system::Config + pallet_common::Config + pallet_structure::Config + pallet_evm::Config73 {74 type WeightInfo: WeightInfo;75 }7677 #[pallet::pallet]78 #[pallet::generate_store(pub(super) trait Store)]79 pub struct Pallet<T>(_);8081 #[pallet::storage]82 pub type TotalSupply<T: Config> =83 StorageMap<Hasher = Twox64Concat, Key = CollectionId, Value = u128, QueryKind = ValueQuery>;8485 #[pallet::storage]86 pub type Balance<T: Config> = StorageNMap<87 Key = (88 Key<Twox64Concat, CollectionId>,89 Key<Blake2_128Concat, T::CrossAccountId>,90 ),91 Value = u128,92 QueryKind = ValueQuery,93 >;9495 #[pallet::storage]96 pub type Allowance<T: Config> = StorageNMap<97 Key = (98 Key<Twox64Concat, CollectionId>,99 Key<Blake2_128, T::CrossAccountId>,100 Key<Blake2_128Concat, T::CrossAccountId>,101 ),102 Value = u128,103 QueryKind = ValueQuery,104 >;105}106107pub struct FungibleHandle<T: Config>(pallet_common::CollectionHandle<T>);108impl<T: Config> FungibleHandle<T> {109 pub fn cast(inner: pallet_common::CollectionHandle<T>) -> Self {110 Self(inner)111 }112 pub fn into_inner(self) -> pallet_common::CollectionHandle<T> {113 self.0114 }115 pub fn common_mut(&mut self) -> &mut pallet_common::CollectionHandle<T> {116 &mut self.0117 }118}119impl<T: Config> WithRecorder<T> for FungibleHandle<T> {120 fn recorder(&self) -> &pallet_evm_coder_substrate::SubstrateRecorder<T> {121 self.0.recorder()122 }123 fn into_recorder(self) -> pallet_evm_coder_substrate::SubstrateRecorder<T> {124 self.0.into_recorder()125 }126}127impl<T: Config> Deref for FungibleHandle<T> {128 type Target = pallet_common::CollectionHandle<T>;129130 fn deref(&self) -> &Self::Target {131 &self.0132 }133}134135impl<T: Config> Pallet<T> {136 pub fn init_collection(137 owner: T::AccountId,138 data: CreateCollectionData<T::AccountId>,139 ) -> Result<CollectionId, DispatchError> {140 <PalletCommon<T>>::init_collection(owner, data)141 }142 pub fn destroy_collection(143 collection: FungibleHandle<T>,144 sender: &T::CrossAccountId,145 ) -> DispatchResult {146 let id = collection.id;147148 // =========149150 PalletCommon::destroy_collection(collection.0, sender)?;151152 <TotalSupply<T>>::remove(id);153 <Balance<T>>::remove_prefix((id,), None);154 <Allowance<T>>::remove_prefix((id,), None);155 Ok(())156 }157158 pub fn burn(159 collection: &FungibleHandle<T>,160 owner: &T::CrossAccountId,161 amount: u128,162 ) -> DispatchResult {163 let total_supply = <TotalSupply<T>>::get(collection.id)164 .checked_sub(amount)165 .ok_or(<CommonError<T>>::TokenValueTooLow)?;166167 let balance = <Balance<T>>::get((collection.id, owner))168 .checked_sub(amount)169 .ok_or(<CommonError<T>>::TokenValueTooLow)?;170171 if collection.access == AccessMode::AllowList {172 collection.check_allowlist(owner)?;173 }174175 // =========176177 if balance == 0 {178 <Balance<T>>::remove((collection.id, owner));179 } else {180 <Balance<T>>::insert((collection.id, owner), balance);181 }182 <TotalSupply<T>>::insert(collection.id, total_supply);183184 <PalletEvm<T>>::deposit_log(185 ERC20Events::Transfer {186 from: *owner.as_eth(),187 to: H160::default(),188 value: amount.into(),189 }190 .to_log(collection_id_to_address(collection.id)),191 );192 <PalletCommon<T>>::deposit_event(CommonEvent::ItemDestroyed(193 collection.id,194 TokenId::default(),195 owner.clone(),196 amount,197 ));198 Ok(())199 }200201 pub fn transfer(202 collection: &FungibleHandle<T>,203 from: &T::CrossAccountId,204 to: &T::CrossAccountId,205 amount: u128,206 nesting_budget: &dyn Budget,207 ) -> DispatchResult {208 ensure!(209 collection.limits.transfers_enabled(),210 <CommonError<T>>::TransferNotAllowed,211 );212213 if collection.access == AccessMode::AllowList {214 collection.check_allowlist(from)?;215 collection.check_allowlist(to)?;216 }217 <PalletCommon<T>>::ensure_correct_receiver(to)?;218219 let balance_from = <Balance<T>>::get((collection.id, from))220 .checked_sub(amount)221 .ok_or(<CommonError<T>>::TokenValueTooLow)?;222 let balance_to = if from != to {223 Some(224 <Balance<T>>::get((collection.id, to))225 .checked_add(amount)226 .ok_or(ArithmeticError::Overflow)?,227 )228 } else {229 None230 };231232 if let Some(target) = T::CrossTokenAddressMapping::address_to_token(to) {233 let handle = <CollectionHandle<T>>::try_get(target.0)?;234 let dispatch = T::CollectionDispatch::dispatch(handle);235 let dispatch = dispatch.as_dyn();236237 dispatch.check_nesting(238 from.clone(),239 (collection.id, TokenId::default()),240 target.1,241 nesting_budget,242 )?;243 }244245 // =========246247 if let Some(balance_to) = balance_to {248 // from != to249 if balance_from == 0 {250 <Balance<T>>::remove((collection.id, from));251 } else {252 <Balance<T>>::insert((collection.id, from), balance_from);253 }254 <Balance<T>>::insert((collection.id, to), balance_to);255 }256257 <PalletEvm<T>>::deposit_log(258 ERC20Events::Transfer {259 from: *from.as_eth(),260 to: *to.as_eth(),261 value: amount.into(),262 }263 .to_log(collection_id_to_address(collection.id)),264 );265 <PalletCommon<T>>::deposit_event(CommonEvent::Transfer(266 collection.id,267 TokenId::default(),268 from.clone(),269 to.clone(),270 amount,271 ));272 Ok(())273 }274275 pub fn create_multiple_items(276 collection: &FungibleHandle<T>,277 sender: &T::CrossAccountId,278 data: BTreeMap<T::CrossAccountId, u128>,279 nesting_budget: &dyn Budget,280 ) -> DispatchResult {281 if !collection.is_owner_or_admin(sender) {282 ensure!(283 collection.mint_mode,284 <CommonError<T>>::PublicMintingNotAllowed285 );286 collection.check_allowlist(sender)?;287288 for (owner, _) in data.iter() {289 collection.check_allowlist(owner)?;290 }291 }292293 let total_supply = data294 .iter()295 .map(|(_, v)| *v)296 .try_fold(<TotalSupply<T>>::get(collection.id), |acc, v| {297 acc.checked_add(v)298 })299 .ok_or(ArithmeticError::Overflow)?;300301 let mut balances = data;302 for (k, v) in balances.iter_mut() {303 *v = <Balance<T>>::get((collection.id, &k))304 .checked_add(*v)305 .ok_or(ArithmeticError::Overflow)?;306 }307308 for (to, _) in balances.iter() {309 if let Some(target) = T::CrossTokenAddressMapping::address_to_token(to) {310 let handle = <CollectionHandle<T>>::try_get(target.0)?;311 let dispatch = T::CollectionDispatch::dispatch(handle);312 let dispatch = dispatch.as_dyn();313314 dispatch.check_nesting(315 sender.clone(),316 (collection.id, TokenId::default()),317 target.1,318 nesting_budget,319 )?;320 }321 }322323 // =========324325 <TotalSupply<T>>::insert(collection.id, total_supply);326 for (user, amount) in balances {327 <Balance<T>>::insert((collection.id, &user), amount);328329 <PalletEvm<T>>::deposit_log(330 ERC20Events::Transfer {331 from: H160::default(),332 to: *user.as_eth(),333 value: amount.into(),334 }335 .to_log(collection_id_to_address(collection.id)),336 );337 <PalletCommon<T>>::deposit_event(CommonEvent::ItemCreated(338 collection.id,339 TokenId::default(),340 user.clone(),341 amount,342 ));343 }344345 Ok(())346 }347348 fn set_allowance_unchecked(349 collection: &FungibleHandle<T>,350 owner: &T::CrossAccountId,351 spender: &T::CrossAccountId,352 amount: u128,353 ) {354 if amount == 0 {355 <Allowance<T>>::remove((collection.id, owner, spender));356 } else {357 <Allowance<T>>::insert((collection.id, owner, spender), amount);358 }359360 <PalletEvm<T>>::deposit_log(361 ERC20Events::Approval {362 owner: *owner.as_eth(),363 spender: *spender.as_eth(),364 value: amount.into(),365 }366 .to_log(collection_id_to_address(collection.id)),367 );368 <PalletCommon<T>>::deposit_event(CommonEvent::Approved(369 collection.id,370 TokenId(0),371 owner.clone(),372 spender.clone(),373 amount,374 ));375 }376377 pub fn set_allowance(378 collection: &FungibleHandle<T>,379 owner: &T::CrossAccountId,380 spender: &T::CrossAccountId,381 amount: u128,382 ) -> DispatchResult {383 if collection.access == AccessMode::AllowList {384 collection.check_allowlist(owner)?;385 collection.check_allowlist(spender)?;386 }387388 if <Balance<T>>::get((collection.id, owner)) < amount {389 ensure!(390 collection.ignores_owned_amount(owner),391 <CommonError<T>>::CantApproveMoreThanOwned392 );393 }394395 // =========396397 Self::set_allowance_unchecked(collection, owner, spender, amount);398 Ok(())399 }400401 fn check_allowed(402 collection: &FungibleHandle<T>,403 spender: &T::CrossAccountId,404 from: &T::CrossAccountId,405 amount: u128,406 nesting_budget: &dyn Budget,407 ) -> Result<Option<u128>, DispatchError> {408 if spender.conv_eq(from) {409 return Ok(None);410 }411 if collection.access == AccessMode::AllowList {412 // `from`, `to` checked in [`transfer`]413 collection.check_allowlist(spender)?;414 }415 if let Some(source) = T::CrossTokenAddressMapping::address_to_token(from) {416 // TODO: should collection owner be allowed to perform this transfer?417 ensure!(418 <PalletStructure<T>>::check_indirectly_owned(419 spender.clone(),420 source.0,421 source.1,422 None,423 nesting_budget424 )?,425 <CommonError<T>>::ApprovedValueTooLow,426 );427 return Ok(None);428 }429 let allowance = <Allowance<T>>::get((collection.id, from, spender)).checked_sub(amount);430 if allowance.is_none() {431 ensure!(432 collection.ignores_allowance(spender),433 <CommonError<T>>::ApprovedValueTooLow434 );435 }436437 Ok(allowance)438 }439440 pub fn transfer_from(441 collection: &FungibleHandle<T>,442 spender: &T::CrossAccountId,443 from: &T::CrossAccountId,444 to: &T::CrossAccountId,445 amount: u128,446 nesting_budget: &dyn Budget,447 ) -> DispatchResult {448 let allowance = Self::check_allowed(collection, spender, from, amount, nesting_budget)?;449450 // =========451452 Self::transfer(collection, from, to, amount, nesting_budget)?;453 if let Some(allowance) = allowance {454 Self::set_allowance_unchecked(collection, from, spender, allowance);455 }456 Ok(())457 }458459 pub fn burn_from(460 collection: &FungibleHandle<T>,461 spender: &T::CrossAccountId,462 from: &T::CrossAccountId,463 amount: u128,464 nesting_budget: &dyn Budget,465 ) -> DispatchResult {466 let allowance = Self::check_allowed(collection, spender, from, amount, nesting_budget)?;467468 // =========469470 Self::burn(collection, from, amount)?;471 if let Some(allowance) = allowance {472 Self::set_allowance_unchecked(collection, from, spender, allowance);473 }474 Ok(())475 }476477 /// Delegated to `create_multiple_items`478 pub fn create_item(479 collection: &FungibleHandle<T>,480 sender: &T::CrossAccountId,481 data: CreateItemData<T>,482 nesting_budget: &dyn Budget,483 ) -> DispatchResult {484 Self::create_multiple_items(485 collection,486 sender,487 [(data.0, data.1)].into_iter().collect(),488 nesting_budget,489 )490 }491}pallets/fungible/src/stubs/UniqueFungible.soldiffbeforeafterboth--- a/pallets/fungible/src/stubs/UniqueFungible.sol
+++ b/pallets/fungible/src/stubs/UniqueFungible.sol
@@ -8,13 +8,8 @@
uint8 dummy;
string stub_error = "this contract is implemented in native";
}
-
contract ERC165 is Dummy {
- function supportsInterface(bytes4 interfaceID)
- external
- view
- returns (bool)
- {
+ function supportsInterface(bytes4 interfaceID) external view returns (bool) {
require(false, stub_error);
interfaceID;
return true;
@@ -24,11 +19,36 @@
// Inline
contract ERC20Events {
event Transfer(address indexed from, address indexed to, uint256 value);
- event Approval(
- address indexed owner,
- address indexed spender,
- uint256 value
- );
+ event Approval(address indexed owner, address indexed spender, uint256 value);
+}
+
+// Selector: 56fd500b
+contract CollectionProperties is Dummy, ERC165 {
+ // Selector: setProperty(string,string) 62d9491f
+ function setProperty(string memory key, string memory value) public {
+ require(false, stub_error);
+ key;
+ value;
+ dummy = 0;
+ }
+ // Selector: deleteProperty(string) 34241914
+ function deleteProperty(string memory key) public {
+ require(false, stub_error);
+ key;
+ dummy = 0;
+ }
+}
+
+// Selector: 79cc6790
+contract ERC20UniqueExtensions is Dummy, ERC165 {
+ // Selector: burnFrom(address,uint256) 79cc6790
+ function burnFrom(address from, uint256 amount) public returns (bool) {
+ require(false, stub_error);
+ from;
+ amount;
+ dummy = 0;
+ return false;
+ }
}
// Selector: 942e8b22
@@ -39,28 +59,24 @@
dummy;
return "";
}
-
// Selector: symbol() 95d89b41
function symbol() public view returns (string memory) {
require(false, stub_error);
dummy;
return "";
}
-
// Selector: totalSupply() 18160ddd
function totalSupply() public view returns (uint256) {
require(false, stub_error);
dummy;
return 0;
}
-
// Selector: decimals() 313ce567
function decimals() public view returns (uint8) {
require(false, stub_error);
dummy;
return 0;
}
-
// Selector: balanceOf(address) 70a08231
function balanceOf(address owner) public view returns (uint256) {
require(false, stub_error);
@@ -68,7 +84,6 @@
dummy;
return 0;
}
-
// Selector: transfer(address,uint256) a9059cbb
function transfer(address to, uint256 amount) public returns (bool) {
require(false, stub_error);
@@ -77,13 +92,8 @@
dummy = 0;
return false;
}
-
// Selector: transferFrom(address,address,uint256) 23b872dd
- function transferFrom(
- address from,
- address to,
- uint256 amount
- ) public returns (bool) {
+ function transferFrom(address from, address to, uint256 amount) public returns (bool) {
require(false, stub_error);
from;
to;
@@ -91,7 +101,6 @@
dummy = 0;
return false;
}
-
// Selector: approve(address,uint256) 095ea7b3
function approve(address spender, uint256 amount) public returns (bool) {
require(false, stub_error);
@@ -100,13 +109,8 @@
dummy = 0;
return false;
}
-
// Selector: allowance(address,address) dd62ed3e
- function allowance(address owner, address spender)
- public
- view
- returns (uint256)
- {
+ function allowance(address owner, address spender) public view returns (uint256) {
require(false, stub_error);
owner;
spender;
@@ -115,4 +119,6 @@
}
}
-contract UniqueFungible is Dummy, ERC165, ERC20 {}
+contract UniqueFungible is Dummy, ERC165, ERC20, ERC20UniqueExtensions, CollectionProperties {
+}
+
pallets/nonfungible/Cargo.tomldiffbeforeafterboth--- a/pallets/nonfungible/Cargo.toml
+++ b/pallets/nonfungible/Cargo.toml
@@ -16,7 +16,7 @@
sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.21" }
sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.21" }
sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.21" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
+pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
pallet-common = { default-features = false, path = '../common' }
pallet-structure = { default-features = false, path = '../structure' }
up-data-structs = { default-features = false, path = '../../primitives/data-structs' }
pallets/nonfungible/src/lib.rsdiffbeforeafterboth--- a/pallets/nonfungible/src/lib.rs
+++ b/pallets/nonfungible/src/lib.rs
@@ -17,16 +17,17 @@
#![cfg_attr(not(feature = "std"), no_std)]
use erc::ERC721Events;
+use evm_coder::ToLog;
use frame_support::{BoundedVec, ensure, fail};
use up_data_structs::{
AccessMode, CollectionId, CustomDataLimit, TokenId, CreateCollectionData, CreateNftExData,
mapping::TokenAddressMapping, NestingRule, budget::Budget, Property, PropertyPermission,
PropertyKey, PropertyKeyPermission, Properties, TrySet,
};
-use pallet_evm::account::CrossAccountId;
+use pallet_evm::{account::CrossAccountId, Pallet as PalletEvm};
use pallet_common::{
Error as CommonError, Pallet as PalletCommon, Event as CommonEvent, CollectionHandle,
- dispatch::CollectionDispatch,
+ dispatch::CollectionDispatch, eth::collection_id_to_address,
};
use pallet_structure::Pallet as PalletStructure;
use pallet_evm_coder_substrate::{SubstrateRecorder, WithRecorder};
@@ -72,7 +73,7 @@
#[pallet::config]
pub trait Config:
- frame_system::Config + pallet_common::Config + pallet_structure::Config
+ frame_system::Config + pallet_common::Config + pallet_structure::Config + pallet_evm::Config
{
type WeightInfo: WeightInfo;
}
@@ -245,11 +246,14 @@
));
}
- collection.log_mirrored(ERC721Events::Transfer {
- from: *token_data.owner.as_eth(),
- to: H160::default(),
- token_id: token.into(),
- });
+ <PalletEvm<T>>::deposit_log(
+ ERC721Events::Transfer {
+ from: *token_data.owner.as_eth(),
+ to: H160::default(),
+ token_id: token.into(),
+ }
+ .to_log(collection_id_to_address(collection.id)),
+ );
<PalletCommon<T>>::deposit_event(CommonEvent::ItemDestroyed(
collection.id,
token,
@@ -357,7 +361,7 @@
}
if token_owner {
- check_result.or(check_token_owner())
+ check_result.and_then(|()| check_token_owner())
} else {
check_result
}
@@ -483,11 +487,14 @@
}
Self::set_allowance_unchecked(collection, from, token, None, true);
- collection.log_mirrored(ERC721Events::Transfer {
- from: *from.as_eth(),
- to: *to.as_eth(),
- token_id: token.into(),
- });
+ <PalletEvm<T>>::deposit_log(
+ ERC721Events::Transfer {
+ from: *from.as_eth(),
+ to: *to.as_eth(),
+ token_id: token.into(),
+ }
+ .to_log(collection_id_to_address(collection.id)),
+ );
<PalletCommon<T>>::deposit_event(CommonEvent::Transfer(
collection.id,
token,
@@ -583,11 +590,14 @@
data.properties.into_inner(),
)?;
- collection.log_mirrored(ERC721Events::Transfer {
- from: H160::default(),
- to: *data.owner.as_eth(),
- token_id: token.into(),
- });
+ <PalletEvm<T>>::deposit_log(
+ ERC721Events::Transfer {
+ from: H160::default(),
+ to: *data.owner.as_eth(),
+ token_id: token.into(),
+ }
+ .to_log(collection_id_to_address(collection.id)),
+ );
<PalletCommon<T>>::deposit_event(CommonEvent::ItemCreated(
collection.id,
TokenId(token),
@@ -610,11 +620,14 @@
<Allowance<T>>::insert((collection.id, token), spender);
// In ERC721 there is only one possible approved user of token, so we set
// approved user to spender
- collection.log_mirrored(ERC721Events::Approval {
- owner: *sender.as_eth(),
- approved: *spender.as_eth(),
- token_id: token.into(),
- });
+ <PalletEvm<T>>::deposit_log(
+ ERC721Events::Approval {
+ owner: *sender.as_eth(),
+ approved: *spender.as_eth(),
+ token_id: token.into(),
+ }
+ .to_log(collection_id_to_address(collection.id)),
+ );
// In Unique chain, any token can have any amount of approved users, so we need to
// set allowance of old owner to 0, and allowance of new owner to 1
if old_spender.as_ref() != Some(spender) {
@@ -640,11 +653,14 @@
if !assume_implicit_eth {
// In ERC721 there is only one possible approved user of token, so we set
// approved user to zero address
- collection.log_mirrored(ERC721Events::Approval {
- owner: *sender.as_eth(),
- approved: H160::default(),
- token_id: token.into(),
- });
+ <PalletEvm<T>>::deposit_log(
+ ERC721Events::Approval {
+ owner: *sender.as_eth(),
+ approved: H160::default(),
+ token_id: token.into(),
+ }
+ .to_log(collection_id_to_address(collection.id)),
+ );
}
// In Unique chain, any token can have any amount of approved users, so we need to
// set allowance of old owner to 0
pallets/refungible/Cargo.tomldiffbeforeafterboth--- a/pallets/refungible/Cargo.toml
+++ b/pallets/refungible/Cargo.toml
@@ -16,7 +16,7 @@
sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.21" }
sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.21" }
sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.21" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
+pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
pallet-common = { default-features = false, path = '../common' }
pallet-structure = { default-features = false, path = '../structure' }
up-data-structs = { default-features = false, path = '../../primitives/data-structs' }
pallets/unique/Cargo.tomldiffbeforeafterboth--- a/pallets/unique/Cargo.toml
+++ b/pallets/unique/Cargo.toml
@@ -83,5 +83,5 @@
scale-info = { version = "2.0.1", default-features = false, features = [
"derive",
] }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
+pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
pallet-common = { default-features = false, path = "../common" }
primitives/data-structs/Cargo.tomldiffbeforeafterboth--- a/primitives/data-structs/Cargo.toml
+++ b/primitives/data-structs/Cargo.toml
@@ -23,9 +23,9 @@
sp-core = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.21" }
sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.21" }
sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.21" }
-derivative = "2.2.0"
+derivative = { version = "2.2.0", features = ["use_core"] }
struct-versioning = { path = "../../crates/struct-versioning" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
+pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
[features]
default = ["std"]
primitives/rpc/Cargo.tomldiffbeforeafterboth--- a/primitives/rpc/Cargo.toml
+++ b/primitives/rpc/Cargo.toml
@@ -14,7 +14,7 @@
sp-std = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.21" }
sp-api = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.21" }
sp-runtime = { default-features = false, git = "https://github.com/paritytech/substrate", branch = "polkadot-v0.9.21" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
+pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
[features]
default = ["std"]
runtime/common/Cargo.tomldiffbeforeafterboth--- a/runtime/common/Cargo.toml
+++ b/runtime/common/Cargo.toml
@@ -101,9 +101,9 @@
[dependencies.fp-rpc]
default-features = false
git = "https://github.com/uniquenetwork/frontier"
-branch = "unique-polkadot-v0.9.21"
+branch = "unique-polkadot-v0.9.21-logs"
[dependencies]
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
+pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
evm-coder = { default-features = false, path = '../../crates/evm-coder' }
up-sponsorship = { default-features = false, git = "https://github.com/uniquenetwork/pallet-sponsoring", branch = 'polkadot-v0.9.21' }
runtime/opal/Cargo.tomldiffbeforeafterboth--- a/runtime/opal/Cargo.toml
+++ b/runtime/opal/Cargo.toml
@@ -397,7 +397,7 @@
derivative = "2.2.0"
pallet-unique = { path = '../../pallets/unique', default-features = false }
up-rpc = { path = "../../primitives/rpc", default-features = false }
-fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
+fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
pallet-inflation = { path = '../../pallets/inflation', default-features = false }
up-data-structs = { path = '../../primitives/data-structs', default-features = false }
pallet-common = { default-features = false, path = "../../pallets/common" }
@@ -412,11 +412,11 @@
pallet-evm-contract-helpers = { path = '../../pallets/evm-contract-helpers', default-features = false }
pallet-evm-transaction-payment = { path = '../../pallets/evm-transaction-payment', default-features = false }
pallet-evm-coder-substrate = { default-features = false, path = "../../pallets/evm-coder-substrate" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
-pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
-pallet-base-fee = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
-fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
-fp-self-contained = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
+pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
+pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
+pallet-base-fee = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
+fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
+fp-self-contained = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
################################################################################
# Build Dependencies
runtime/opal/src/lib.rsdiffbeforeafterboth--- a/runtime/opal/src/lib.rs
+++ b/runtime/opal/src/lib.rs
@@ -821,7 +821,6 @@
);
impl pallet_evm_coder_substrate::Config for Runtime {
- type EthereumTransactionSender = pallet_ethereum::Pallet<Self>;
type GasWeightMapping = FixedGasWeightMapping;
}
@@ -1070,6 +1069,7 @@
frame_system::CheckWeight<Runtime>,
pallet_charge_transaction::ChargeTransactionPayment<Runtime>,
//pallet_contract_helpers::ContractHelpersExtension<Runtime>,
+ pallet_ethereum::FakeTransactionFinalizer<Runtime>,
);
/// Unchecked extrinsic type as expected by this runtime.
pub type UncheckedExtrinsic =
runtime/quartz/Cargo.tomldiffbeforeafterboth--- a/runtime/quartz/Cargo.toml
+++ b/runtime/quartz/Cargo.toml
@@ -397,7 +397,7 @@
derivative = "2.2.0"
pallet-unique = { path = '../../pallets/unique', default-features = false }
up-rpc = { path = "../../primitives/rpc", default-features = false }
-fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
+fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
pallet-inflation = { path = '../../pallets/inflation', default-features = false }
up-data-structs = { path = '../../primitives/data-structs', default-features = false }
pallet-common = { default-features = false, path = "../../pallets/common" }
@@ -412,11 +412,11 @@
pallet-evm-contract-helpers = { path = '../../pallets/evm-contract-helpers', default-features = false }
pallet-evm-transaction-payment = { path = '../../pallets/evm-transaction-payment', default-features = false }
pallet-evm-coder-substrate = { default-features = false, path = "../../pallets/evm-coder-substrate" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
-pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
-pallet-base-fee = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
-fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
-fp-self-contained = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
+pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
+pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
+pallet-base-fee = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
+fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
+fp-self-contained = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
################################################################################
# Build Dependencies
runtime/quartz/src/lib.rsdiffbeforeafterboth--- a/runtime/quartz/src/lib.rs
+++ b/runtime/quartz/src/lib.rs
@@ -793,7 +793,6 @@
);
impl pallet_evm_coder_substrate::Config for Runtime {
- type EthereumTransactionSender = pallet_ethereum::Pallet<Self>;
type GasWeightMapping = FixedGasWeightMapping;
}
@@ -1048,6 +1047,7 @@
frame_system::CheckWeight<Runtime>,
pallet_charge_transaction::ChargeTransactionPayment<Runtime>,
//pallet_contract_helpers::ContractHelpersExtension<Runtime>,
+ pallet_ethereum::FakeTransactionFinalizer<Runtime>,
);
/// Unchecked extrinsic type as expected by this runtime.
pub type UncheckedExtrinsic =
runtime/tests/Cargo.tomldiffbeforeafterboth--- a/runtime/tests/Cargo.toml
+++ b/runtime/tests/Cargo.toml
@@ -12,7 +12,7 @@
sp-io = { git = 'https://github.com/paritytech/substrate', branch = 'polkadot-v0.9.21' }
sp-runtime = { git = 'https://github.com/paritytech/substrate', branch = 'polkadot-v0.9.21' }
-fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
+fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
frame-support = { git = 'https://github.com/paritytech/substrate', branch = 'polkadot-v0.9.21' }
frame-system = { git = 'https://github.com/paritytech/substrate', branch = 'polkadot-v0.9.21' }
@@ -21,8 +21,8 @@
pallet-transaction-payment = { git = 'https://github.com/paritytech/substrate', branch = 'polkadot-v0.9.21' }
pallet-timestamp = { git = 'https://github.com/paritytech/substrate', branch = 'polkadot-v0.9.21' }
-pallet-evm = { default-features = false, git = 'https://github.com/uniquenetwork/frontier', branch = 'unique-polkadot-v0.9.21' }
-pallet-ethereum = { default-features = false, git = 'https://github.com/uniquenetwork/frontier', branch = 'unique-polkadot-v0.9.21' }
+pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
+pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
pallet-common = { path = '../../pallets/common' }
pallet-structure = { path = '../../pallets/structure' }
runtime/tests/src/lib.rsdiffbeforeafterboth--- a/runtime/tests/src/lib.rs
+++ b/runtime/tests/src/lib.rs
@@ -16,10 +16,10 @@
#![allow(clippy::from_over_into)]
-use sp_core::{H160, H256};
+use sp_core::{H256, U256};
use frame_support::{
parameter_types,
- traits::{Everything, ConstU32},
+ traits::{Everything, ConstU32, ConstU64},
weights::IdentityFee,
};
use sp_runtime::{
@@ -28,7 +28,9 @@
};
use pallet_transaction_payment::{CurrencyAdapter};
use frame_system as system;
-use pallet_evm::{AddressMapping, runner::stack::MaybeMirroredLog, account::CrossAccountId};
+use pallet_evm::{
+ AddressMapping, account::CrossAccountId, EnsureAddressNever, SubstrateBlockHashMapping,
+};
use fp_evm_mapping::EvmBackwardsAddressMapping;
use parity_scale_codec::{Encode, Decode, MaxEncodedLen};
use scale_info::TypeInfo;
@@ -181,13 +183,31 @@
}
}
-pub struct TestEtheremTransactionSender;
-impl pallet_ethereum::EthereumTransactionSender for TestEtheremTransactionSender {
- fn submit_logs_transaction(_source: H160, _logs: Vec<MaybeMirroredLog>) {}
+parameter_types! {
+ pub BlockGasLimit: U256 = 0u32.into();
}
+impl pallet_evm::Config for Test {
+ type Event = ();
+ type FeeCalculator = ();
+ type GasWeightMapping = ();
+ type CallOrigin = EnsureAddressNever<Self::CrossAccountId>;
+ type WithdrawOrigin = EnsureAddressNever<Self::CrossAccountId>;
+ type AddressMapping = TestEvmAddressMapping;
+ type Currency = Balances;
+ type PrecompilesType = ();
+ type PrecompilesValue = ();
+ type Runner = pallet_evm::runner::stack::Runner<Self>;
+ type ChainId = ConstU64<0>;
+ type BlockGasLimit = BlockGasLimit;
+ type OnMethodCall = ();
+ type OnCreate = ();
+ type OnChargeTransaction = ();
+ type FindAuthor = ();
+ type BlockHashMapping = SubstrateBlockHashMapping<Self>;
+ type TransactionValidityHack = ();
+}
impl pallet_evm_coder_substrate::Config for Test {
- type EthereumTransactionSender = TestEtheremTransactionSender;
type GasWeightMapping = ();
}
runtime/unique/Cargo.tomldiffbeforeafterboth--- a/runtime/unique/Cargo.toml
+++ b/runtime/unique/Cargo.toml
@@ -411,12 +411,12 @@
pallet-evm-contract-helpers = { path = '../../pallets/evm-contract-helpers', default-features = false }
pallet-evm-transaction-payment = { path = '../../pallets/evm-transaction-payment', default-features = false }
pallet-evm-coder-substrate = { default-features = false, path = "../../pallets/evm-coder-substrate" }
-pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
-pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
-pallet-base-fee = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
-fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
-fp-self-contained = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
-fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21" }
+pallet-evm = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
+pallet-ethereum = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
+pallet-base-fee = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
+fp-rpc = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
+fp-self-contained = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
+fp-evm-mapping = { default-features = false, git = "https://github.com/uniquenetwork/frontier", branch = "unique-polkadot-v0.9.21-logs" }
################################################################################
# Build Dependencies
runtime/unique/src/lib.rsdiffbeforeafterboth--- a/runtime/unique/src/lib.rs
+++ b/runtime/unique/src/lib.rs
@@ -792,7 +792,6 @@
);
impl pallet_evm_coder_substrate::Config for Runtime {
- type EthereumTransactionSender = pallet_ethereum::Pallet<Self>;
type GasWeightMapping = FixedGasWeightMapping;
}
@@ -1046,6 +1045,7 @@
frame_system::CheckWeight<Runtime>,
pallet_charge_transaction::ChargeTransactionPayment<Runtime>,
//pallet_contract_helpers::ContractHelpersExtension<Runtime>,
+ pallet_ethereum::FakeTransactionFinalizer<Runtime>,
);
/// Unchecked extrinsic type as expected by this runtime.
pub type UncheckedExtrinsic =
tests/src/substrate/substrate-api.tsdiffbeforeafterboth--- a/tests/src/substrate/substrate-api.ts
+++ b/tests/src/substrate/substrate-api.ts
@@ -34,6 +34,10 @@
extrinsic: {},
payload: {},
},
+ FakeTransactionFinalizer: {
+ extrinsic: {},
+ payload: {},
+ },
},
rpc: {
unique: defs.unique.rpc,