pub fn decode(data: &[u8]) -> Result<Self, ethabi::Error> {
        let tokens = ethabi::decode(
            &[
                ParamType::Uint(256),                      // tx ID
                ParamType::FixedBytes(32),                 // tx hash
                ParamType::Uint(64),                       // expiration block
                L2CanonicalTransaction::schema(),          // transaction data
                ParamType::Array(ParamType::Bytes.into()), // factory deps
            ],
            data,
        )?;
        let mut t = tokens.into_iter();
        // All the unwraps are save because `ethabi::decode()` has validated
        // the input.
        let mut next = || t.next().unwrap();
        Ok(Self {
            tx_id: next().into_uint().unwrap(),
            tx_hash: next().into_fixed_bytes().unwrap().try_into().unwrap(),
            expiration_timestamp: next().into_uint().unwrap().try_into().unwrap(),
            transaction: L2CanonicalTransaction::decode(next()).unwrap().into(),
            factory_deps: next()
                .into_array()
                .unwrap()
                .into_iter()
                .map(|t| t.into_bytes().unwrap())
                .collect(),
        })
    }
Decodes `NewPriorityRequest` from RLP encoding.
Returns an error if token doesn't match the `schema()`.
core/lib/types/src/abi.rs