function userPurchaseAstro(address ownerAddress, uint astroID) payable external {
    
    require(msg.sender.balance >= msg.value);
    var record = purchasingBuyer[msg.sender];
    require(block.timestamp < record.time + priceValidSeconds);
    require(record.id == astroID);
    require(record.priceWei <= msg.value);

    uint royalties = uint(msg.value * novaTransferRate / 1000);
    ownerAddress.transfer(msg.value - royalties);
    cfoAddress.transfer(royalties);

    _transfer(ownerAddress, msg.sender, astroID);

    UserPurchasedAstro(msg.sender, ownerAddress, astroID, record.priceWei, msg.value);
    
    delete purchasingBuyer[msg.sender];
  }