implemented eth_sendRawTransaction
This commit is contained in:
parent
068c0f3782
commit
0e5395013a
@ -23,13 +23,13 @@ use ethminer::{MinerService, AccountDetails};
|
|||||||
use jsonrpc_core::*;
|
use jsonrpc_core::*;
|
||||||
use util::numbers::*;
|
use util::numbers::*;
|
||||||
use util::sha3::*;
|
use util::sha3::*;
|
||||||
use util::rlp::encode;
|
use util::rlp::{encode, UntrustedRlp, View};
|
||||||
use ethcore::client::*;
|
use ethcore::client::*;
|
||||||
use ethcore::block::IsBlock;
|
use ethcore::block::IsBlock;
|
||||||
use ethcore::views::*;
|
use ethcore::views::*;
|
||||||
use ethcore::ethereum::Ethash;
|
use ethcore::ethereum::Ethash;
|
||||||
use ethcore::ethereum::denominations::shannon;
|
use ethcore::ethereum::denominations::shannon;
|
||||||
use ethcore::transaction::Transaction as EthTransaction;
|
use ethcore::transaction::{Transaction as EthTransaction, SignedTransaction};
|
||||||
use v1::traits::{Eth, EthFilter};
|
use v1::traits::{Eth, EthFilter};
|
||||||
use v1::types::{Block, BlockTransactions, BlockNumber, Bytes, SyncStatus, SyncInfo, Transaction, TransactionRequest, OptionalValue, Index, Filter, Log, Receipt};
|
use v1::types::{Block, BlockTransactions, BlockNumber, Bytes, SyncStatus, SyncInfo, Transaction, TransactionRequest, OptionalValue, Index, Filter, Log, Receipt};
|
||||||
use v1::helpers::{PollFilter, PollManager, ExternalMinerService, ExternalMiner};
|
use v1::helpers::{PollFilter, PollManager, ExternalMinerService, ExternalMiner};
|
||||||
@ -408,6 +408,33 @@ impl<C, S, A, M, EM> Eth for EthClient<C, S, A, M, EM>
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn send_raw_transaction(&self, params: Params) -> Result<Value, Error> {
|
||||||
|
from_params::<(Bytes, )>(params)
|
||||||
|
.and_then(|(raw_transaction, )| {
|
||||||
|
let decoded: Result<SignedTransaction, _> = UntrustedRlp::new(&raw_transaction.to_vec()).as_val();
|
||||||
|
match decoded {
|
||||||
|
Ok(signed_tx) => {
|
||||||
|
let miner = take_weak!(self.miner);
|
||||||
|
let client = take_weak!(self.client);
|
||||||
|
|
||||||
|
let hash = signed_tx.hash();
|
||||||
|
let import = miner.import_transactions(vec![signed_tx], |a: &Address| AccountDetails {
|
||||||
|
nonce: client.nonce(a),
|
||||||
|
balance: client.balance(a),
|
||||||
|
});
|
||||||
|
match import.into_iter().collect::<Result<Vec<_>, _>>() {
|
||||||
|
Ok(_) => to_value(&hash),
|
||||||
|
Err(e) => {
|
||||||
|
warn!("Error sending transaction: {:?}", e);
|
||||||
|
to_value(&U256::zero())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Err(_) => { to_value(&U256::zero()) }
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
fn call(&self, params: Params) -> Result<Value, Error> {
|
fn call(&self, params: Params) -> Result<Value, Error> {
|
||||||
from_params::<(TransactionRequest, BlockNumber)>(params)
|
from_params::<(TransactionRequest, BlockNumber)>(params)
|
||||||
.and_then(|(transaction_request, _block_number)| {
|
.and_then(|(transaction_request, _block_number)| {
|
||||||
|
Loading…
Reference in New Issue
Block a user