fix: incorrect encoding on TransactionReceipt (#1661)

* fix TransactionReceipt rlp encoding

* add tests

* update changelog
This commit is contained in:
Noah Citron 2022-09-04 13:59:53 -04:00 committed by GitHub
parent de90662725
commit 744d5c055e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 1 deletions

View File

@ -4,6 +4,7 @@
### Unreleased ### Unreleased
- Fix RLP encoding of `TransactionReceipt`
- Add `Unit8` helper type [#1639](https://github.com/gakonst/ethers-rs/pull/1639) - Add `Unit8` helper type [#1639](https://github.com/gakonst/ethers-rs/pull/1639)
- Add `evm.deployedBytecode.immutableReferences` output selector [#1523](https://github.com/gakonst/ethers-rs/pull/1523) - Add `evm.deployedBytecode.immutableReferences` output selector [#1523](https://github.com/gakonst/ethers-rs/pull/1523)
- Added `get_erc1155_token_transfer_events` function for etherscan client [#1503](https://github.com/gakonst/ethers-rs/pull/1503) - Added `get_erc1155_token_transfer_events` function for etherscan client [#1503](https://github.com/gakonst/ethers-rs/pull/1503)

View File

@ -425,7 +425,7 @@ pub struct TransactionReceipt {
impl rlp::Encodable for TransactionReceipt { impl rlp::Encodable for TransactionReceipt {
fn rlp_append(&self, s: &mut RlpStream) { fn rlp_append(&self, s: &mut RlpStream) {
s.begin_list(4); s.begin_list(4);
s.append(&self.status); rlp_opt(s, &self.status);
s.append(&self.cumulative_gas_used); s.append(&self.cumulative_gas_used);
s.append(&self.logs_bloom); s.append(&self.logs_bloom);
s.append_list(&self.logs); s.append_list(&self.logs);
@ -457,6 +457,8 @@ impl PartialOrd<Self> for TransactionReceipt {
#[cfg(test)] #[cfg(test)]
#[cfg(not(feature = "celo"))] #[cfg(not(feature = "celo"))]
mod tests { mod tests {
use rlp::Encodable;
use crate::types::transaction::eip2930::AccessListItem; use crate::types::transaction::eip2930::AccessListItem;
use super::*; use super::*;
@ -907,6 +909,17 @@ mod tests {
assert_eq!(v, receipt); assert_eq!(v, receipt);
} }
#[test]
fn rlp_encode_receipt() {
let receipt = TransactionReceipt { status: Some(1u64.into()), ..Default::default() };
let encoded = receipt.rlp_bytes();
assert_eq!(
encoded,
hex::decode("f901060180b9010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0").unwrap(),
);
}
#[test] #[test]
fn can_sort_receipts() { fn can_sort_receipts() {
let mut a = TransactionReceipt { block_number: Some(0u64.into()), ..Default::default() }; let mut a = TransactionReceipt { block_number: Some(0u64.into()), ..Default::default() };