2018-06-04 10:19:50 +02:00
|
|
|
// Copyright 2015-2018 Parity Technologies (UK) Ltd.
|
2016-07-06 11:23:29 +02:00
|
|
|
// 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 <http://www.gnu.org/licenses/>.
|
|
|
|
|
2018-01-10 13:35:18 +01:00
|
|
|
use ethereum_types::{U256, Address};
|
2017-09-06 20:47:45 +02:00
|
|
|
use bytes::Bytes;
|
2017-11-01 11:23:18 +01:00
|
|
|
|
2017-02-14 22:45:43 +01:00
|
|
|
use v1::types::{Origin, TransactionCondition};
|
2016-07-06 11:23:29 +02:00
|
|
|
|
|
|
|
/// Transaction request coming from RPC
|
|
|
|
#[derive(Debug, Clone, Default, Eq, PartialEq, Hash)]
|
|
|
|
pub struct TransactionRequest {
|
|
|
|
/// Sender
|
2017-01-30 21:08:36 +01:00
|
|
|
pub from: Option<Address>,
|
2016-07-06 11:23:29 +02:00
|
|
|
/// Recipient
|
|
|
|
pub to: Option<Address>,
|
|
|
|
/// Gas Price
|
|
|
|
pub gas_price: Option<U256>,
|
|
|
|
/// Gas
|
|
|
|
pub gas: Option<U256>,
|
|
|
|
/// Value of transaction in wei
|
|
|
|
pub value: Option<U256>,
|
|
|
|
/// Additional data sent with transaction
|
2016-08-03 10:36:54 +02:00
|
|
|
pub data: Option<Bytes>,
|
2016-07-06 11:23:29 +02:00
|
|
|
/// Transaction's nonce
|
|
|
|
pub nonce: Option<U256>,
|
2017-02-03 19:32:10 +01:00
|
|
|
/// Delay until this condition is met.
|
|
|
|
pub condition: Option<TransactionCondition>,
|
2016-07-06 11:23:29 +02:00
|
|
|
}
|
|
|
|
|
2016-08-03 10:36:54 +02:00
|
|
|
/// Transaction request coming from RPC with default values filled in.
|
2016-07-06 11:23:29 +02:00
|
|
|
#[derive(Debug, Clone, Default, Eq, PartialEq, Hash)]
|
2016-08-03 10:36:54 +02:00
|
|
|
pub struct FilledTransactionRequest {
|
|
|
|
/// Sender
|
|
|
|
pub from: Address,
|
2017-01-30 21:08:36 +01:00
|
|
|
/// Indicates if the sender was filled by default value.
|
|
|
|
pub used_default_from: bool,
|
2016-08-03 10:36:54 +02:00
|
|
|
/// Recipient
|
|
|
|
pub to: Option<Address>,
|
|
|
|
/// Gas Price
|
|
|
|
pub gas_price: U256,
|
|
|
|
/// Gas
|
|
|
|
pub gas: U256,
|
|
|
|
/// Value of transaction in wei
|
|
|
|
pub value: U256,
|
|
|
|
/// Additional data sent with transaction
|
|
|
|
pub data: Bytes,
|
|
|
|
/// Transaction's nonce
|
|
|
|
pub nonce: Option<U256>,
|
2017-02-03 19:32:10 +01:00
|
|
|
/// Delay until this condition is met.
|
|
|
|
pub condition: Option<TransactionCondition>,
|
2016-08-03 10:36:54 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
impl From<FilledTransactionRequest> for TransactionRequest {
|
|
|
|
fn from(r: FilledTransactionRequest) -> Self {
|
|
|
|
TransactionRequest {
|
2017-01-30 21:08:36 +01:00
|
|
|
from: Some(r.from),
|
2016-08-03 10:36:54 +02:00
|
|
|
to: r.to,
|
|
|
|
gas_price: Some(r.gas_price),
|
|
|
|
gas: Some(r.gas),
|
|
|
|
value: Some(r.value),
|
|
|
|
data: Some(r.data),
|
|
|
|
nonce: r.nonce,
|
2017-02-03 19:32:10 +01:00
|
|
|
condition: r.condition,
|
2016-08-03 10:36:54 +02:00
|
|
|
}
|
|
|
|
}
|
2016-07-06 11:23:29 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/// Call request
|
|
|
|
#[derive(Debug, Default, PartialEq)]
|
|
|
|
pub struct CallRequest {
|
|
|
|
/// From
|
|
|
|
pub from: Option<Address>,
|
|
|
|
/// To
|
|
|
|
pub to: Option<Address>,
|
|
|
|
/// Gas Price
|
|
|
|
pub gas_price: Option<U256>,
|
|
|
|
/// Gas
|
|
|
|
pub gas: Option<U256>,
|
|
|
|
/// Value
|
|
|
|
pub value: Option<U256>,
|
|
|
|
/// Data
|
|
|
|
pub data: Option<Vec<u8>>,
|
|
|
|
/// Nonce
|
|
|
|
pub nonce: Option<U256>,
|
|
|
|
}
|
2016-08-03 10:36:54 +02:00
|
|
|
|
|
|
|
/// Confirmation object
|
|
|
|
#[derive(Debug, Clone, Eq, PartialEq, Hash)]
|
|
|
|
pub struct ConfirmationRequest {
|
|
|
|
/// Id of this confirmation
|
|
|
|
pub id: U256,
|
|
|
|
/// Payload to confirm
|
|
|
|
pub payload: ConfirmationPayload,
|
2017-02-14 22:45:43 +01:00
|
|
|
/// Request origin
|
|
|
|
pub origin: Origin,
|
2016-08-03 10:36:54 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/// Payload to confirm in Trusted Signer
|
|
|
|
#[derive(Debug, Clone, Eq, PartialEq, Hash)]
|
|
|
|
pub enum ConfirmationPayload {
|
|
|
|
/// Transaction
|
2016-11-09 13:13:35 +01:00
|
|
|
SendTransaction(FilledTransactionRequest),
|
|
|
|
/// Sign Transaction
|
|
|
|
SignTransaction(FilledTransactionRequest),
|
2017-04-12 12:15:13 +02:00
|
|
|
/// Sign a message with an Ethereum specific security prefix.
|
|
|
|
EthSignMessage(Address, Bytes),
|
2016-10-15 14:44:08 +02:00
|
|
|
/// Decrypt request
|
|
|
|
Decrypt(Address, Bytes),
|
2016-08-03 10:36:54 +02:00
|
|
|
}
|
2016-11-09 13:13:35 +01:00
|
|
|
|
|
|
|
impl ConfirmationPayload {
|
|
|
|
pub fn sender(&self) -> Address {
|
|
|
|
match *self {
|
|
|
|
ConfirmationPayload::SendTransaction(ref request) => request.from,
|
|
|
|
ConfirmationPayload::SignTransaction(ref request) => request.from,
|
2017-04-12 12:15:13 +02:00
|
|
|
ConfirmationPayload::EthSignMessage(ref address, _) => *address,
|
2016-11-09 13:13:35 +01:00
|
|
|
ConfirmationPayload::Decrypt(ref address, _) => *address,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|