1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
use monero::cryptonote::hash::Hash;
use monero::{Address, Network};
use monero::util::key::PublicKey;
use curve25519_dalek::ristretto::RistrettoPoint;
use curve25519_dalek::edwards::CompressedEdwardsY;
use sha2::Sha512;

pub fn gen_burn_addr(tag: &[u8]) -> monero::Address {
    let view = PublicKey::from_private_key(&Hash::hash_to_scalar(&tag));
    let spend_ristretto = RistrettoPoint::hash_from_bytes::<Sha512>(&tag).compress();
    let spend = CompressedEdwardsY::from_slice(spend_ristretto.as_bytes());
    Address::standard(Network::Mainnet, PublicKey { point: spend }, view)
}