Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/rodoufu/erc20
Rust ERC20 parser
https://github.com/rodoufu/erc20
erc20 ethereum rust
Last synced: about 5 hours ago
JSON representation
Rust ERC20 parser
- Host: GitHub
- URL: https://github.com/rodoufu/erc20
- Owner: rodoufu
- License: mit
- Created: 2020-02-09T19:53:43.000Z (almost 5 years ago)
- Default Branch: master
- Last Pushed: 2020-12-09T19:09:13.000Z (almost 4 years ago)
- Last Synced: 2024-08-10T03:16:48.906Z (3 months ago)
- Topics: erc20, ethereum, rust
- Language: Rust
- Size: 49.8 KB
- Stars: 4
- Watchers: 3
- Forks: 3
- Open Issues: 19
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# erc20
## Rust ERC20 parser
This project intends to parse the Ethereum transactions from web3 into an abstraction that makes generic dealing
with Ethereum or ERC20 transfers.Available at https://crates.io/crates/erc20
## Code examples
### Parsing a transfer
```rust
let serialized_str = "a9059cbb0000000000000000000000006748f50f686bfbca6fe8ad62b22228b87f31ff2b00000000000000000000000000000000000000000000003635c9adc5dea00000";let transaction = Transaction {
hash: H256::from_str("43a5d6d13b6a9dca381e3f4b4677a4b9e5d9f80d1a5b6cfa2b1404fab733bcee").unwrap(),
nonce: Default::default(),
block_hash: None,
block_number: None,
transaction_index: None,
from: H160::random(),
to: Some(H160::random()),
value: Default::default(),
gas_price: Default::default(),
gas: Default::default(),
input: Bytes(hex::decode(serialized_str).unwrap()),
raw: None,
};let resp: Result = transaction.clone().try_into();
assert!(resp.is_ok());
let resp = resp.unwrap();
assert_eq!(transaction.from, resp.from());
```### Identifying an ERC20 contract address
```rust
let tusd_address = H160::from_str("0000000000085d4780B73119b644AE5ecd22b376").unwrap();
assert_eq!("0x0000000000085d4780b73119b644ae5ecd22b376".to_string(), format!("{:?}", tusd_address));let contract_address: ContractAddress = tusd_address.into();
assert_eq!(ContractAddress::TUSD, contract_address);let tusd_from_contract: H160 = contract_address.into();
assert_eq!(tusd_address, tusd_from_contract);
```## References
- https://eips.ethereum.org/EIPS/eip-20