# Grant Application - Modernizing ethcontract-rs: Complete Migration to Alloy

**URL:** <https://forum.cow.fi/t/grant-application-modernizing-ethcontract-rs-complete-migration-to-alloy/3330>\
**Category:** CoW Grants Program\
**Tags:** grant-funded\
**Created:** [January 7, 2026, 9:06am UTC](https://forum.cow.fi/t/grant-application-modernizing-ethcontract-rs-complete-migration-to-alloy/3330 "2026-01-07T09:06:15Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![No-rush](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.cow.fi/no-rush/32/1290_2.png) [@No-rush](https://forum.cow.fi/u/No-rush)\
**Post date:** [January 7, 2026, 9:06am UTC](https://forum.cow.fi/t/grant-application-modernizing-ethcontract-rs-complete-migration-to-alloy/3330/1 "2026-01-07T09:06:15Z")

</div>

## Grant Title

**Grant Application - Modernising ethcontract-rs: Complete Migration to Alloy Stack**

* * *

## Author(s)

**GitHub:** [@abhishekkochar](https://github.com/Abhishekkochar)

* * *

## Experiences and qualifications

- Blockchain Engineer with 5 years of experience in Rust, Solidity, and TypeScript

- Built production systems using Rust, Alloy, and Reth (crvUSD liquidation solution)

- Developed and maintained open-source SDKs and Rust libraries

## Grant Description

### Problem

The [ethcontract-rs](https://github.com/cowprotocol/ethcontract-rs) library is a critical piece of CoW Protocol infrastructure, providing type-safe Rust bindings for Ethereum smart contract interactions. With 321 stars and 150+ dependents, it serves as a foundational library for the CoW ecosystem.

However, the library currently depends on the `web3` crate ([rust-web3](https://github.com/tomusdrw/rust-web3)) and [ethabi](https://github.com/rust-ethereum/ethabi), both of these are **barely maintained** according to their own documentation. The maintainer explicitly states for web3:

> _“Note this package is barely maintained and I am looking for an active maintainer. If you are starting a new project, I’d recommend choosing ethers-rs instead.”_

Furthermore, `ethers-rs` itself has now been **officially deprecated** in favor of [Alloy](https://github.com/alloy-rs/alloy).

Additionally, ethcontract-rs depends on several crates from [parity-common](https://github.com/paritytech/parity-common) including:

- **`rlp`** - RLP encoding/decoding

- **`primitive-types`** - Core Ethereum primitive types (U256, H256, etc.)

- **`ethereum-types`** - Ethereum-specific type definitions

- **`ethbloom`** - Bloom filter implementation

- **`keccak-hash`** - Keccak hashing utilities

- **`fixed-hash`** - Fixed-size hash types

While these parity-common crates are still actively maintained, Alloy provides equivalent functionality through `alloy-primitives` and `alloy-rlp`. Migrating to Alloy’s implementations ensures stack consistency, reduces the total number of dependencies, and aligns with the direction of the broader Rust/Ethereum ecosystem.

**This creates several critical issues for the CoW Protocol ecosystem:**

1. Security vulnerabilities in unmaintained dependencies may go unpatched

2. Incompatibility with modern Rust tooling and newer compiler versions

3. Missing support for newer Ethereum features and EIPs

4. Developer hesitancy to build on deprecated foundations

5. Maintenance burden increases as web3 drifts further from modern standards

6. Dependency fragmentation - mixing parity-common types with other libraries requires constant type conversions

### Solution

This grant proposes a comprehensive migration of ethcontract-rs to the Alloy stack, replacing both the deprecated `web3` crate and the parity-common dependencies with their Alloy equivalents. This ensures a unified, consistent technology stack throughout the library.

Target: [Alloy](https://github.com/alloy-rs/alloy) - the modern, high-performance Ethereum library that is the official successor to both `web3` and `ethers-rs`. Alloy is actively maintained by the Paradigm team and represents the future of Rust-based Ethereum development.

### Goals and Impact

1. **Future-proof CoW Protocol infrastructure:** Ensure ethcontract-rs remains viable and secure for years to come

2. **Achieve full stack consistency:** Unify all Ethereum primitives, RLP encoding, and types under a single Alloy-based stack

3. **Improve developer experience:** Leverage Alloy’s superior documentation, better error messages, and modern patterns

4. **Maintain backward compatibility:** Provide a smooth migration path for existing users of ethcontract-rs (150+ dependents)

5. **Enable new integrations:** Support modern Ethereum features (EIP-4844 blob transactions, EIP-1559, etc.)

6. **Reduce dependency count:** Consolidate multiple parity-common crates into unified Alloy equivalents

7. **Strengthen ecosystem:** Align CoW Protocol tooling with the broader Rust/Ethereum community direction

### Technologies

- Alloy (alloy-rs) - Core Ethereum library

- alloy-primitives - Replacing primitive-types, ethereum-types, fixed-hash, uint, keccak-hash, ethbloom

- alloy-rlp - Replacing rlp and rlp-derive

- alloy-transport - Replacing web3 transports

- alloy-sol-types - Replacing ethabi

- alloy-contract - Contract interaction layer

## Type of Grant

**Milestone-Based Grant**

This project has clearly defined deliverables and outcomes that can be measured at each milestone.

## Milestones

| Milestone | Title | Due Date | Funding Request |
| --- | --- | --- | --- |
| Milestone 1 | Primitives & RLP Migration | 3 weeks after acceptance | 3,000 xDAI |
| Milestone 2 | Transport Layer Migration | 6 weeks after acceptance | 3,000 xDAI |
| Milestone 3 | Contract Bindings | 9 weeks after acceptance | 3,000 xDAI |
| Milestone 4 | Testing & Documentation | 11 weeks after acceptance | 2,500 xDAI |
| Milestone 5 | Review & Polish | 13 weeks after acceptance | 1,500 xDAI |
| **TOTAL** | | **13 weeks** | **13,000 xDAI** |

### Specifics: Milestone 1 - Primitives & RLP Migration

**Duration:** 3 weeks  
**Funding:** 3,000 xDAI

**Description:** Replace all parity-common primitive types and RLP encoding with Alloy equivalents. This is the foundational milestone as all other components depend on these types.

**Deliverables:**

- Replace `primitive-types` (U256, U128, H256, H160, etc.) with `alloy-primitives`

- Migrate `ethereum-types` to Alloy equivalents

- Replace `fixed-hash` macro usages with Alloy’s fixed-size types

- Migrate `rlp` encoding/decoding to `alloy-rlp`

- Replace `rlp-derive` procedural macro with `alloy-rlp` derive macros

- Update `keccak-hash` usages to use Alloy’s `keccak256`

- Migrate `ethbloom` bloom filter to Alloy’s `Bloom` type

- Implement conversion traits (`From`/`Into`) for backward compatibility

**Success Criteria:**

- All primitive type tests pass with Alloy types

- RLP encoding/decoding produces identical results to current implementation

- No parity-common primitive dependencies remain in Cargo.toml

**Specifics: Milestone 2 - Transport Layer Migration**

**Duration:** 3 weeks (weeks 4-6)  
**Funding:** 3,000 xDAI

**Description:** Replace the deprecated web3 transport and provider layer with Alloy’s modern transport system.

**Deliverables:**

- Replace `web3::transports` with `alloy-transport` (HTTP, WebSocket, IPC)

- Update transaction building and signing to use Alloy’s transaction types

- Implement provider abstraction layer for backward compatibility

- Migrate gas estimation and nonce management

- Update block and receipt types

**Success Criteria:**

- All transport tests pass with Alloy backend

- Basic contract calls work end-to-end

- Transaction signing produces valid signatures

- All existing transport features (HTTP, WS, IPC) functional

### Specifics: Milestone 3 - Contract Bindings

**Duration:** 3 weeks (weeks 7-9)  
**Funding:** 3,000 xDAI

**Description:** Update the procedural macro system and contract generation to work with Alloy types and ABI handling.

**Deliverables:**

- Update `ethcontract-derive` procedural macro for Alloy compatibility

- Migrate ABI encoding/decoding to `alloy-sol-types`

- Update `ethcontract-generate` for build.rs script usage

- Maintain support for Truffle and Hardhat artifacts

- Update `ethcontract-common` shared types

- Update event filtering and log parsing

**Success Criteria:**

- Contract macro generates valid Alloy-based bindings

- All existing examples compile and function correctly

- Event subscriptions work correctly

- ABI encoding/decoding matches current behaviour

### Specifics: Milestone 4 - Testing & Documentation

**Duration:** 2 weeks (weeks 10-11)  
**Funding:** 2,500 xDAI

**Description:** Comprehensive testing and documentation to ensure feature parity and provide migration guidance for existing users.

**Deliverables:**

- Port and update existing test suite (all current tests passing)

- Add integration tests against mainnet forks (using Anvil) where applicable

- Write comprehensive migration guide for existing users

- Update all examples in the repository

- Update README and documentation

**Success Criteria:**

- 100% test parity with original test suite

- Migration guide reviewed and approved by CoW team

- All examples functional and documented

### Specifics: Milestone 5 - Review & Polish

**Duration:** 2 weeks (weeks 12-13)  
**Funding:** 1,500 xDAI

**Description:** Final review, optimization, and release preparation based on feedback from the CoW team and community.

**Deliverables:**

- Address code review feedback from CoW team

- Performance benchmarking and optimization

- Prepare release candidate and changelog

- Publish updated version to [crates.io](http://crates.io)

- Final documentation polish

**Success Criteria:**

- Code review approved by CoW team

- No performance regression vs. web3/parity-common implementation

- Successfully published to [crates.io](http://crates.io)

- All deprecated dependencies removed

**Phase 2: Maintenance**

Following Phase 1 completion, I commit to maintaining the migrated ethcontract-rs for 1 year:

- Bug fixes and security patches

- Compatibility updates with new Alloy releases

- Community support and issue triage

Maintenance funding to be discussed upon Phase 1 completion, potentially through Volume Grants Program or a separate maintenance grant.

## Length

**Total Duration:** 13 weeks PTE (Part time employment), corresponds to 20hrs per week for 13 weeks. Amount to 260hrs.

**Commencement Date:** Upon successful passing of the proposal on Snapshot

**Expected Completion:** 13 weeks after commencement.

## Funding Request

**Total Funding Requested:** 14,500 xDAI

| Category | Amount |
| --- | --- |
| Development/labor (primitives, transport, bindings, testing) | 13,000 xDAI |
| **Total** | **13,000 xDAI** |

**Gnosis Chain Address (to receive the grant):**

gno:0xa87a0BE15A8507e0e652f80B0f898301c9a7906D

## Terms and Conditions

By submitting this grant application, I acknowledge and agree to be bound by the [CoW DAO Participation Agreement](https://gateway.pinata.cloud/ipfs/Qmf9MYhcG2pFrDoVy13p6FWeVF4nG9HbJvRfYYbhazTCFe) and the [CoW DAO Grant Agreement Terms](https://bafkreifcftgaleyxkekkic36beyveiomqmlwyduyfh3s25zj3uyngr6ht4.ipfs.dweb.link/).

* * *

**NOTE TO COMMITTEE:**  
Please notify the Grantee of their reviewer and their steward in the thread and latest upon successful approval of the Grant on Snapshot.

---

<div class="post-metadata">

**Author:** ![mfw78](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.cow.fi/mfw78/32/1598_2.png) [@mfw78](https://forum.cow.fi/u/mfw78)\
**Post date:** [January 7, 2026, 1:30pm UTC](https://forum.cow.fi/t/grant-application-modernizing-ethcontract-rs-complete-migration-to-alloy/3330/2 "2026-01-07T13:30:32Z")

</div>

The CoW Protocol services is currently being migrated to alloy, at which point `ethcontract-rs` will be deprecated, so I don’t think that this is in alignment / of value for the CoW DAO ecosystem.

---

<div class="post-metadata">

**Author:** ![No-rush](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.cow.fi/no-rush/32/1290_2.png) [@No-rush](https://forum.cow.fi/u/No-rush)\
**Post date:** [January 8, 2026, 12:56am UTC](https://forum.cow.fi/t/grant-application-modernizing-ethcontract-rs-complete-migration-to-alloy/3330/3 "2026-01-08T00:56:52Z")

</div>

Make sense. Thanks for the info.
