wownero
/
wownerujo
Archived
4
0
Fork 0

fix restore height bug

openssl-1.1.0
fuwa 6 years ago
parent 5d5a4d1b46
commit c19189f37b

@ -396,22 +396,16 @@ public class GenerateFragment extends Fragment {
long height = 0; long height = 0;
String restoreHeight = etWalletRestoreHeight.getEditText().getText().toString().trim(); String restoreHeight = etWalletRestoreHeight.getEditText().getText().toString().trim();
Timber.d("Restore Height string %s", restoreHeight);
if (restoreHeight.isEmpty()) return -1; if (restoreHeight.isEmpty()) return -1;
try { try {
// is it a date? // is it a date?
SimpleDateFormat parser = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat parser = new SimpleDateFormat("yyyy-MM");
parser.setLenient(false); parser.setLenient(false);
height = RestoreHeight.getInstance().getHeight(parser.parse(restoreHeight)); height = RestoreHeight.getInstance().getHeight(parser.parse(restoreHeight));
} catch (ParseException ex) { } catch (ParseException ex) {
Timber.d("Failed to parse %s, %s", restoreHeight, ex);
} }
if (height <= 0)
try {
// is it a date without dashes?
SimpleDateFormat parser = new SimpleDateFormat("yyyyMMdd");
parser.setLenient(false);
height = RestoreHeight.getInstance().getHeight(parser.parse(restoreHeight));
} catch (ParseException ex) {
}
if (height <= 0) if (height <= 0)
try { try {
// or is it a height? // or is it a height?

@ -24,6 +24,7 @@ import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.TimeZone; import java.util.TimeZone;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import timber.log.Timber;
public class RestoreHeight { public class RestoreHeight {
static private RestoreHeight Singleton = null; static private RestoreHeight Singleton = null;
@ -42,79 +43,44 @@ public class RestoreHeight {
private Map<String, Long> blockheight = new HashMap<>(); private Map<String, Long> blockheight = new HashMap<>();
RestoreHeight() { RestoreHeight() {
blockheight.put("2018-05-01", 8000L); blockheight.put("2018-05", 8000L);
blockheight.put("2018-06-01", 17000L); blockheight.put("2018-06", 17000L);
blockheight.put("2018-07-01", 25000L); blockheight.put("2018-07", 25000L);
blockheight.put("2018-08-01", 34000L); blockheight.put("2018-08", 34000L);
blockheight.put("2018-09-01", 43000L); blockheight.put("2018-09", 43000L);
blockheight.put("2018-10-01", 52000L); blockheight.put("2018-10", 52000L);
} }
public long getHeight(String date) { long latestHeight = 52000L;
SimpleDateFormat parser = new SimpleDateFormat("yyyy-MM-dd");
parser.setTimeZone(TimeZone.getTimeZone("UTC"));
parser.setLenient(false);
try {
return getHeight(parser.parse(date));
} catch (ParseException ex) {
throw new IllegalArgumentException(ex);
}
}
public long getHeight(final Date date) { public long getHeight(final Date date) {
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC")); Timber.d("Restore Height date %s", date);
cal.set(Calendar.DST_OFFSET, 0);
Calendar cal = Calendar.getInstance();
cal.setTime(date); cal.setTime(date);
cal.add(Calendar.DAY_OF_MONTH, -4); // give it some leeway Timber.d("Restore Height cal %s", cal);
if (cal.get(Calendar.YEAR) < 2018) if (cal.get(Calendar.YEAR) < 2018)
return 0; return 0;
if ((cal.get(Calendar.YEAR) == 2018) && (cal.get(Calendar.MONTH) <= 4)) // Month is 0 based
// https://stackoverflow.com/a/7183009
if ((cal.get(Calendar.YEAR) == 2018) && ((cal.get(Calendar.MONTH) + 1) <= 4))
// before Apr 2018 // before Apr 2018
return 0; return 0;
Calendar query = (Calendar) cal.clone(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM");
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
formatter.setTimeZone(TimeZone.getTimeZone("UTC")); formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
String queryDate = formatter.format(date); String queryDate = formatter.format(date);
Timber.d("String query date %s", queryDate);
cal.set(Calendar.DAY_OF_MONTH, 1); long height = 0;
long prevTime = cal.getTimeInMillis(); if (blockheight.get(queryDate) == null) {
String prevDate = formatter.format(prevTime); height = latestHeight;
// lookup blockheight at first of the month
Long prevBc = blockheight.get(prevDate);
if (prevBc == null) {
// if too recent, go back in time and find latest one we have
while (prevBc == null) {
cal.add(Calendar.MONTH, -1);
if (cal.get(Calendar.YEAR) < 2018) {
throw new IllegalStateException("endless loop looking for blockheight");
}
prevTime = cal.getTimeInMillis();
prevDate = formatter.format(prevTime);
prevBc = blockheight.get(prevDate);
}
}
long height = prevBc;
// now we have a blockheight & a date ON or BEFORE the restore date requested
if (queryDate.equals(prevDate)) return height;
// see if we have a blockheight after this date
cal.add(Calendar.MONTH, 1);
long nextTime = cal.getTimeInMillis();
String nextDate = formatter.format(nextTime);
Long nextBc = blockheight.get(nextDate);
if (nextBc != null) { // we have a range - interpolate the blockheight we are looking for
long diff = nextBc - prevBc;
long diffDays = TimeUnit.DAYS.convert(nextTime - prevTime, TimeUnit.MILLISECONDS);
long days = TimeUnit.DAYS.convert(query.getTimeInMillis() - prevTime,
TimeUnit.MILLISECONDS);
height = Math.round(prevBc + diff * (1.0 * days / diffDays));
} else { } else {
long days = TimeUnit.DAYS.convert(query.getTimeInMillis() - prevTime, height = blockheight.get(queryDate);
TimeUnit.MILLISECONDS);
height = Math.round(prevBc + 1.0 * days * (24 * 60 / 2));
} }
return height; return height;
} }
} }

@ -171,7 +171,7 @@
<string name="generate_wallet_created">Το Πορτοφόλι δημιουργήθηκε</string> <string name="generate_wallet_created">Το Πορτοφόλι δημιουργήθηκε</string>
<string name="generate_wallet_create_failed">Η δημιουργία πορτοφολιού απέτυχε</string> <string name="generate_wallet_create_failed">Η δημιουργία πορτοφολιού απέτυχε</string>
<string name="generate_restoreheight_error">Βάλε αριθμό ή ημερομηνία (YYYY-MM-DD δλδ χρονιά-μήνας-μέρα)</string> <string name="generate_restoreheight_error">Βάλε αριθμό ή ημερομηνία (YYYY-MM δλδ χρονιά-μήνας-μέρα)</string>
<string name="generate_wallet_type_key">Κλειδιά</string> <string name="generate_wallet_type_key">Κλειδιά</string>
<string name="generate_wallet_type_new">Νέο</string> <string name="generate_wallet_type_new">Νέο</string>
@ -182,7 +182,7 @@
<string name="generate_viewkey_hint">Κλειδί Προβολής(View Key)</string> <string name="generate_viewkey_hint">Κλειδί Προβολής(View Key)</string>
<string name="generate_spendkey_hint">Κλειδί Ξοδεύματος(Spend Key)</string> <string name="generate_spendkey_hint">Κλειδί Ξοδεύματος(Spend Key)</string>
<string name="generate_mnemonic_hint">Μνημονικός Σπόρος(Mnemonic Seed) 25-Λέξεων</string> <string name="generate_mnemonic_hint">Μνημονικός Σπόρος(Mnemonic Seed) 25-Λέξεων</string>
<string name="generate_restoreheight_hint">Ύψος ανάκτησης ή Ημερομηνία (YYYY-MM-DD δλδ χρονιά-μήνας-μέρα)</string> <string name="generate_restoreheight_hint">Ύψος ανάκτησης ή Ημερομηνία (YYYY-MM δλδ χρονιά-μήνας-μέρα)</string>
<string name="generate_address_label">Δημόσια Διεύθυνση(Public Address)</string> <string name="generate_address_label">Δημόσια Διεύθυνση(Public Address)</string>
<string name="generate_viewkey_label">Κλειδί προβολής(View Key)</string> <string name="generate_viewkey_label">Κλειδί προβολής(View Key)</string>

@ -153,7 +153,7 @@
<string name="generate_viewkey_hint">Clave de Vista</string> <string name="generate_viewkey_hint">Clave de Vista</string>
<string name="generate_spendkey_hint">Clave de Gasto</string> <string name="generate_spendkey_hint">Clave de Gasto</string>
<string name="generate_mnemonic_hint">Semilla Mnemotécnica de 25 Palabras</string> <string name="generate_mnemonic_hint">Semilla Mnemotécnica de 25 Palabras</string>
<string name="generate_restoreheight_hint">Altura o Fecha (YYYY-MM-DD) de Restauración</string> <string name="generate_restoreheight_hint">Altura o Fecha (YYYY-MM) de Restauración</string>
<string name="generate_address_label">Dirección Pública</string> <string name="generate_address_label">Dirección Pública</string>
<string name="generate_viewkey_label">Clave de Vista</string> <string name="generate_viewkey_label">Clave de Vista</string>

@ -200,7 +200,7 @@
<string name="generate_wallet_created">Portefeuille créé</string> <string name="generate_wallet_created">Portefeuille créé</string>
<string name="generate_wallet_create_failed">Création du Portefeuille échouée</string> <string name="generate_wallet_create_failed">Création du Portefeuille échouée</string>
<string name="generate_restoreheight_error">Entrer un nombre ou une date (YYYY-MM-DD)</string> <string name="generate_restoreheight_error">Entrer un nombre ou une date (YYYY-MM)</string>
<string name="generate_wallet_type_key">Clefs</string> <string name="generate_wallet_type_key">Clefs</string>
<string name="generate_wallet_type_new">Nouveau</string> <string name="generate_wallet_type_new">Nouveau</string>
@ -211,7 +211,7 @@
<string name="generate_viewkey_hint">Clef d\'audit</string> <string name="generate_viewkey_hint">Clef d\'audit</string>
<string name="generate_spendkey_hint">Clef de dépense</string> <string name="generate_spendkey_hint">Clef de dépense</string>
<string name="generate_mnemonic_hint">Phrase Mnémonique</string> <string name="generate_mnemonic_hint">Phrase Mnémonique</string>
<string name="generate_restoreheight_hint">Hauteur ou date de restauration (YYYY-MM-DD)</string> <string name="generate_restoreheight_hint">Hauteur ou date de restauration (YYYY-MM)</string>
<string name="generate_address_label">Adresse publique</string> <string name="generate_address_label">Adresse publique</string>
<string name="generate_viewkey_label">Clef d\'audit</string> <string name="generate_viewkey_label">Clef d\'audit</string>

@ -199,7 +199,7 @@
<string name="generate_wallet_created">Кошелек создан</string> <string name="generate_wallet_created">Кошелек создан</string>
<string name="generate_wallet_create_failed">Не удалось создать кошелек</string> <string name="generate_wallet_create_failed">Не удалось создать кошелек</string>
<string name="generate_restoreheight_error">Введите номер блока или дату (YYYY-MM-DD)</string> <string name="generate_restoreheight_error">Введите номер блока или дату (YYYY-MM)</string>
<string name="generate_wallet_type_key">Ключ</string> <string name="generate_wallet_type_key">Ключ</string>
<string name="generate_wallet_type_new">Новый</string> <string name="generate_wallet_type_new">Новый</string>
@ -210,13 +210,13 @@
<string name="generate_viewkey_hint">View Key</string> <string name="generate_viewkey_hint">View Key</string>
<string name="generate_spendkey_hint">Spend Key</string> <string name="generate_spendkey_hint">Spend Key</string>
<string name="generate_mnemonic_hint">25-Word Mnemonic Seed</string> <string name="generate_mnemonic_hint">25-Word Mnemonic Seed</string>
<string name="generate_restoreheight_hint">Restore Height or Date (YYYY-MM-DD)</string> <string name="generate_restoreheight_hint">Restore Height or Date (YYYY-MM)</string>
<string name="generate_address_label">Публичный адрес</string> <string name="generate_address_label">Публичный адрес</string>
<string name="generate_viewkey_label">Ключ просмотра</string> <string name="generate_viewkey_label">Ключ просмотра</string>
<string name="generate_spendkey_label">Ключ траты</string> <string name="generate_spendkey_label">Ключ траты</string>
<string name="generate_mnemonic_label">Мнемоническая фраза</string> <string name="generate_mnemonic_label">Мнемоническая фраза</string>
<string name="generate_crazypass_label">Дата высоты восстановления (YYYY-MM-DD)</string> <string name="generate_crazypass_label">Дата высоты восстановления (YYYY-MM)</string>
<string name="generate_check_key">Введите действующий ключ</string> <string name="generate_check_key">Введите действующий ключ</string>
<string name="generate_check_address">Введите действующий адрес</string> <string name="generate_check_address">Введите действующий адрес</string>

@ -194,7 +194,7 @@
<string name="generate_wallet_created">钱包已建立</string> <string name="generate_wallet_created">钱包已建立</string>
<string name="generate_wallet_create_failed">钱包建立失败</string> <string name="generate_wallet_create_failed">钱包建立失败</string>
<string name="generate_restoreheight_error">输入区块高度或日期(YYYY-MM-DD)</string> <string name="generate_restoreheight_error">输入区块高度或日期(YYYY-MM)</string>
<string name="generate_wallet_type_key">密钥</string> <string name="generate_wallet_type_key">密钥</string>
<string name="generate_wallet_type_new">新增</string> <string name="generate_wallet_type_new">新增</string>
@ -205,7 +205,7 @@
<string name="generate_viewkey_hint">查看密钥</string> <string name="generate_viewkey_hint">查看密钥</string>
<string name="generate_spendkey_hint">花费密钥</string> <string name="generate_spendkey_hint">花费密钥</string>
<string name="generate_mnemonic_hint">25字记忆种子码</string> <string name="generate_mnemonic_hint">25字记忆种子码</string>
<string name="generate_restoreheight_hint">从区块高度或日期(YYYY-MM-DD)恢复</string> <string name="generate_restoreheight_hint">从区块高度或日期(YYYY-MM)恢复</string>
<string name="generate_address_label">公开地址</string> <string name="generate_address_label">公开地址</string>
<string name="generate_viewkey_label">查看密钥</string> <string name="generate_viewkey_label">查看密钥</string>

@ -196,7 +196,7 @@
<string name="generate_wallet_created">錢包已建立</string> <string name="generate_wallet_created">錢包已建立</string>
<string name="generate_wallet_create_failed">錢包建立失敗</string> <string name="generate_wallet_create_failed">錢包建立失敗</string>
<string name="generate_restoreheight_error">輸入區塊高度或日期(YYYY-MM-DD)</string> <string name="generate_restoreheight_error">輸入區塊高度或日期(YYYY-MM)</string>
<string name="generate_wallet_type_key">金鑰</string> <string name="generate_wallet_type_key">金鑰</string>
<string name="generate_wallet_type_new">新增</string> <string name="generate_wallet_type_new">新增</string>
@ -207,7 +207,7 @@
<string name="generate_viewkey_hint">查看金鑰</string> <string name="generate_viewkey_hint">查看金鑰</string>
<string name="generate_spendkey_hint">花費金鑰</string> <string name="generate_spendkey_hint">花費金鑰</string>
<string name="generate_mnemonic_hint">25字記憶種子碼</string> <string name="generate_mnemonic_hint">25字記憶種子碼</string>
<string name="generate_restoreheight_hint">從區塊高度或日期(YYYY-MM-DD)回復</string> <string name="generate_restoreheight_hint">從區塊高度或日期(YYYY-MM)回復</string>
<string name="generate_address_label">公開地址</string> <string name="generate_address_label">公開地址</string>
<string name="generate_viewkey_label">查看金鑰</string> <string name="generate_viewkey_label">查看金鑰</string>

@ -205,7 +205,7 @@
<string name="generate_wallet_created">Wallet created</string> <string name="generate_wallet_created">Wallet created</string>
<string name="generate_wallet_create_failed">Wallet create failed</string> <string name="generate_wallet_create_failed">Wallet create failed</string>
<string name="generate_restoreheight_error">Enter Number or Date (YYYY-MM-DD)</string> <string name="generate_restoreheight_error">Enter Number or Date (YYYY-MM)</string>
<string name="generate_wallet_type_key">Keys</string> <string name="generate_wallet_type_key">Keys</string>
<string name="generate_wallet_type_new">New</string> <string name="generate_wallet_type_new">New</string>
@ -216,7 +216,7 @@
<string name="generate_viewkey_hint">View Key</string> <string name="generate_viewkey_hint">View Key</string>
<string name="generate_spendkey_hint">Spend Key</string> <string name="generate_spendkey_hint">Spend Key</string>
<string name="generate_mnemonic_hint">25-Word Mnemonic Seed</string> <string name="generate_mnemonic_hint">25-Word Mnemonic Seed</string>
<string name="generate_restoreheight_hint">Restore Height or Date (YYYY-MM-DD)</string> <string name="generate_restoreheight_hint">Restore Height or Date (YYYY-MM)</string>
<string name="generate_address_label">Public Address</string> <string name="generate_address_label">Public Address</string>
<string name="generate_viewkey_label">View Key</string> <string name="generate_viewkey_label">View Key</string>
@ -373,7 +373,7 @@
<string name="send_sweepall">Send all confirmed funds in this account!</string> <string name="send_sweepall">Send all confirmed funds in this account!</string>
<string name="tx_subaddress">Subaddress #%1$d</string> <string name="tx_subaddress">Subaddress #%1$d</string>
<string name="generate_address_label_sub">Public Subaddress #%1$d</string> <string name="generate_address_label_sub">Public Subaddress #%1$d</string>
<string name="default_restore_height">2018-10-01</string> <string name="default_restore_height">2018-10</string>
<string name="menu_language">Language</string> <string name="menu_language">Language</string>
<string name="language_system_default">Use System Language</string> <string name="language_system_default">Use System Language</string>
</resources> </resources>