fixed U256 serialization, tests for transaction serialization
This commit is contained in:
parent
3adfebdc20
commit
b2c083ce56
@ -118,7 +118,7 @@ impl Eth for EthClient {
|
|||||||
// TODO: do not ignore block number param
|
// TODO: do not ignore block number param
|
||||||
fn code_at(&self, params: Params) -> Result<Value, Error> {
|
fn code_at(&self, params: Params) -> Result<Value, Error> {
|
||||||
match from_params::<(Address, BlockNumber)>(params) {
|
match from_params::<(Address, BlockNumber)>(params) {
|
||||||
Ok((address, _block_number)) => to_value(&Bytes::new(self.client.code(&address).unwrap_or_else(|| vec![]))),
|
Ok((address, _block_number)) => to_value(&self.client.code(&address).map_or_else(Bytes::default, Bytes::new)),
|
||||||
Err(err) => Err(err)
|
Err(err) => Err(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,8 @@
|
|||||||
pub mod traits;
|
pub mod traits;
|
||||||
mod impls;
|
mod impls;
|
||||||
mod types;
|
mod types;
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests;
|
||||||
|
|
||||||
pub use self::traits::{Web3, Eth, EthFilter, Net};
|
pub use self::traits::{Web3, Eth, EthFilter, Net};
|
||||||
pub use self::impls::*;
|
pub use self::impls::*;
|
||||||
|
1
rpc/src/v1/tests/mod.rs
Normal file
1
rpc/src/v1/tests/mod.rs
Normal file
@ -0,0 +1 @@
|
|||||||
|
//TODO: load custom blockchain state and test
|
@ -2,6 +2,7 @@ use rustc_serialize::hex::ToHex;
|
|||||||
use serde::{Serialize, Serializer};
|
use serde::{Serialize, Serializer};
|
||||||
|
|
||||||
/// Wrapper structure around vector of bytes.
|
/// Wrapper structure around vector of bytes.
|
||||||
|
#[derive(Debug)]
|
||||||
pub struct Bytes(Vec<u8>);
|
pub struct Bytes(Vec<u8>);
|
||||||
|
|
||||||
impl Bytes {
|
impl Bytes {
|
||||||
@ -11,6 +12,13 @@ impl Bytes {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Default for Bytes {
|
||||||
|
fn default() -> Self {
|
||||||
|
// default serialized value is 0x00
|
||||||
|
Bytes(vec![0])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl Serialize for Bytes {
|
impl Serialize for Bytes {
|
||||||
fn serialize<S>(&self, serializer: &mut S) -> Result<(), S::Error>
|
fn serialize<S>(&self, serializer: &mut S) -> Result<(), S::Error>
|
||||||
where S: Serializer {
|
where S: Serializer {
|
||||||
|
@ -18,8 +18,10 @@ mod block;
|
|||||||
mod block_number;
|
mod block_number;
|
||||||
mod bytes;
|
mod bytes;
|
||||||
mod sync;
|
mod sync;
|
||||||
|
mod transaction;
|
||||||
|
|
||||||
pub use self::block::Block;
|
pub use self::block::Block;
|
||||||
pub use self::block_number::BlockNumber;
|
pub use self::block_number::BlockNumber;
|
||||||
pub use self::bytes::Bytes;
|
pub use self::bytes::Bytes;
|
||||||
pub use self::sync::SyncStatus;
|
pub use self::sync::SyncStatus;
|
||||||
|
pub use self::transaction::Transaction;
|
||||||
|
36
rpc/src/v1/types/transaction.rs
Normal file
36
rpc/src/v1/types/transaction.rs
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
use util::hash::*;
|
||||||
|
use util::uint::*;
|
||||||
|
use v1::types::Bytes;
|
||||||
|
|
||||||
|
#[derive(Debug, Default, Serialize)]
|
||||||
|
pub struct Transaction {
|
||||||
|
hash: H256,
|
||||||
|
nonce: U256,
|
||||||
|
#[serde(rename="blockHash")]
|
||||||
|
block_hash: H256,
|
||||||
|
#[serde(rename="blockNumber")]
|
||||||
|
block_number: U256,
|
||||||
|
#[serde(rename="transactionIndex")]
|
||||||
|
transaction_index: U256,
|
||||||
|
from: Address,
|
||||||
|
to: Address,
|
||||||
|
value: U256,
|
||||||
|
#[serde(rename="gasPrice")]
|
||||||
|
gas_price: U256,
|
||||||
|
gas: U256,
|
||||||
|
input: Bytes
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
use serde_json;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_transaction_serialize() {
|
||||||
|
let t = Transaction::default();
|
||||||
|
let serialized = serde_json::to_string(&t).unwrap();
|
||||||
|
assert_eq!(serialized, r#"{"hash":"0x0000000000000000000000000000000000000000000000000000000000000000","nonce":"0x00","blockHash":"0x0000000000000000000000000000000000000000000000000000000000000000","blockNumber":"0x00","transactionIndex":"0x00","from":"0x0000000000000000000000000000000000000000","to":"0x0000000000000000000000000000000000000000","value":"0x00","gasPrice":"0x00","gas":"0x00","input":"0x00"}"#);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -458,7 +458,8 @@ macro_rules! construct_uint {
|
|||||||
let mut hex = "0x".to_owned();
|
let mut hex = "0x".to_owned();
|
||||||
let mut bytes = [0u8; 8 * $n_words];
|
let mut bytes = [0u8; 8 * $n_words];
|
||||||
self.to_bytes(&mut bytes);
|
self.to_bytes(&mut bytes);
|
||||||
hex.push_str(bytes.to_hex().as_ref());
|
let len = cmp::max((self.bits() + 7) / 8, 1);
|
||||||
|
hex.push_str(bytes[bytes.len() - len..].to_hex().as_ref());
|
||||||
serializer.visit_str(hex.as_ref())
|
serializer.visit_str(hex.as_ref())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user