// Copyright 2015, 2016 Ethcore (UK) Ltd. // This file is part of Parity. // Parity is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // Parity is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with Parity. If not, see . //! Evm input params. use common::*; use ethjson; /// Transaction value #[derive(Clone, Debug)] pub enum ActionValue { /// Value that should be transfered Transfer(U256), /// Apparent value for transaction (not transfered) Apparent(U256) } impl ActionValue { /// Returns action value as U256. pub fn value(&self) -> U256 { match *self { ActionValue::Transfer(x) | ActionValue::Apparent(x) => x } } } // TODO: should be a trait, possible to avoid cloning everything from a Transaction(/View). /// Action (call/create) input params. Everything else should be specified in Externalities. #[derive(Clone, Debug)] pub struct ActionParams { /// Address of currently executed code. pub code_address: Address, /// Receive address. Usually equal to code_address, /// except when called using CALLCODE. pub address: Address, /// Sender of current part of the transaction. pub sender: Address, /// Transaction initiator. pub origin: Address, /// Gas paid up front for transaction execution pub gas: U256, /// Gas price. pub gas_price: U256, /// Transaction value. pub value: ActionValue, /// Code being executed. pub code: Option, /// Input data. pub data: Option } impl Default for ActionParams { /// Returns default ActionParams initialized with zeros fn default() -> ActionParams { ActionParams { code_address: Address::new(), address: Address::new(), sender: Address::new(), origin: Address::new(), gas: U256::zero(), gas_price: U256::zero(), value: ActionValue::Transfer(U256::zero()), code: None, data: None } } } impl From for ActionParams { fn from(t: ethjson::vm::Transaction) -> Self { ActionParams { code_address: Address::new(), address: t.address.into(), sender: t.sender.into(), origin: t.origin.into(), code: Some(t.code.into()), data: Some(t.data.into()), gas: t.gas.into(), gas_price: t.gas_price.into(), value: ActionValue::Transfer(t.value.into()), } } }