eth.rs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. use num_bigint::BigUint;
  2. use simplelog::{ColorChoice, LevelFilter, TermLogger, TerminalMode};
  3. use darkfi::{
  4. service::eth::{erc20_transfer_data, EthClient, EthTx},
  5. util::{decode_base10, encode_base10},
  6. Result,
  7. };
  8. #[async_std::main]
  9. async fn main() -> Result<()> {
  10. TermLogger::init(
  11. LevelFilter::Trace,
  12. simplelog::Config::default(),
  13. TerminalMode::Mixed,
  14. ColorChoice::Auto,
  15. )?;
  16. let acc = "0x113b6648f34f4d0340d04ff171cbcf0b49d47827".to_string();
  17. let key = "67cbb73cb293eea5fa2a7025d5479dbd50319010c03fd8821917ad0d9d53276c".to_string();
  18. let mut eth = EthClient::new("", "/home/parazyd/.ethereum/ropsten/geth.ipc", "foobar");
  19. eth.main_keypair.private_key = key;
  20. eth.main_keypair.public_key = acc.clone();
  21. //let key = generate_privkey();
  22. //let passphrase = "foobar".to_string();
  23. //let rep = eth.import_privkey(&key, &passphrase).await?;
  24. //println!("{:#?}", rep);
  25. let passphrase = "foobar".to_string();
  26. // Recipient address
  27. let dest = "0xcD640A363305c21255c58Ba9C8c1C508e6997a12".to_string();
  28. // Latest known block, used to calculate present balance.
  29. let block = eth.block_number().await?;
  30. let block = block.as_str().unwrap();
  31. // Native ETH balance
  32. let hexbalance = eth.get_eth_balance(&acc, block).await?;
  33. let hexbalance = hexbalance.as_str().unwrap().trim_start_matches("0x");
  34. let balance = BigUint::parse_bytes(hexbalance.as_bytes(), 16).unwrap();
  35. println!("{}", encode_base10(balance, 18));
  36. /*
  37. // Transfer native ETH
  38. let tx = EthTx::new(
  39. &acc,
  40. &dest,
  41. None,
  42. None,
  43. Some(decode_base10("0.051", 18, true)?),
  44. None,
  45. None,
  46. );
  47. let rep = eth.send_transaction(&tx, &passphrase).await?;
  48. println!("TXID: {}", rep.as_str().unwrap());
  49. */
  50. // ERC20 Token balance
  51. let mint = "0xad6d458402f60fd3bd25163575031acdce07538d"; // Ropsten DAI (get on Uniswap)
  52. let hexbalance = eth.get_erc20_balance(&acc, mint).await?;
  53. let hexbalance = hexbalance.as_str().unwrap().trim_start_matches("0x");
  54. let balance = BigUint::parse_bytes(hexbalance.as_bytes(), 16).unwrap();
  55. println!("{}", encode_base10(balance, 18));
  56. // Transfer ERC20 token
  57. let tx = EthTx::new(
  58. &acc,
  59. mint,
  60. None,
  61. None,
  62. None,
  63. Some(erc20_transfer_data(&dest, decode_base10("1", 18, true)?)),
  64. None,
  65. );
  66. let rep = eth.send_transaction(&tx, &passphrase).await?;
  67. println!("TXID: {}", rep.as_str().unwrap());
  68. Ok(())
  69. }