eth.rs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. use num_bigint::BigUint;
  2. use simplelog::{ColorChoice, LevelFilter, TermLogger, TerminalMode};
  3. use drk::{
  4. service::eth::{erc20_transfer_data, EthClient, EthTx, Keypair},
  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(
  19. "/home/parazyd/.ethereum/ropsten/geth.ipc".to_string(),
  20. String::from("foobar"),
  21. );
  22. eth.set_main_keypair(&Keypair { private_key: key, public_key: acc.clone() });
  23. //let key = generate_privkey();
  24. //let passphrase = "foobar".to_string();
  25. //let rep = eth.import_privkey(&key, &passphrase).await?;
  26. //println!("{:#?}", rep);
  27. let passphrase = "foobar".to_string();
  28. // Recipient address
  29. let dest = "0xcD640A363305c21255c58Ba9C8c1C508e6997a12".to_string();
  30. // Latest known block, used to calculate present balance.
  31. let block = eth.block_number().await?;
  32. let block = block.as_str().unwrap();
  33. // Native ETH balance
  34. let hexbalance = eth.get_eth_balance(&acc, block).await?;
  35. let hexbalance = hexbalance.as_str().unwrap().trim_start_matches("0x");
  36. let balance = BigUint::parse_bytes(hexbalance.as_bytes(), 16).unwrap();
  37. println!("{}", encode_base10(balance, 18));
  38. /*
  39. // Transfer native ETH
  40. let tx = EthTx::new(
  41. &acc,
  42. &dest,
  43. None,
  44. None,
  45. Some(decode_base10("0.051", 18, true)?),
  46. None,
  47. None,
  48. );
  49. let rep = eth.send_transaction(&tx, &passphrase).await?;
  50. println!("TXID: {}", rep.as_str().unwrap());
  51. */
  52. // ERC20 Token balance
  53. let mint = "0xad6d458402f60fd3bd25163575031acdce07538d"; // Ropsten DAI (get on Uniswap)
  54. let hexbalance = eth.get_erc20_balance(&acc, mint).await?;
  55. let hexbalance = hexbalance.as_str().unwrap().trim_start_matches("0x");
  56. let balance = BigUint::parse_bytes(hexbalance.as_bytes(), 16).unwrap();
  57. println!("{}", encode_base10(balance, 18));
  58. // Transfer ERC20 token
  59. let tx = EthTx::new(
  60. &acc,
  61. mint,
  62. None,
  63. None,
  64. None,
  65. Some(erc20_transfer_data(&dest, decode_base10("1", 18, true)?)),
  66. None,
  67. );
  68. let rep = eth.send_transaction(&tx, &passphrase).await?;
  69. println!("TXID: {}", rep.as_str().unwrap());
  70. Ok(())
  71. }