forked from woodser/monero-java
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtodo.txt
More file actions
212 lines (204 loc) · 13.8 KB
/
todo.txt
File metadata and controls
212 lines (204 loc) · 13.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
HIGH
remove years from copyrights
collapse MoneroOutputWallet, MoneroTxWallet into MoneroOutput, MoneroTx?
recover wallet when stuck opened by another application
logging config for rpc requests
support wallet.changePassword()
moveTo(path, password) password not supported, update to be like monero-javascript
restore height is lost after closing wallet in JNI but not WASM
organize todos
sync(listener, startHeight) api change
test that 2 wallets do not interfere with each other's notifications
all wallet methods top-level, can use base if wanted
delete jni listener when wallet closed
collapse MoneroWalletListener, MoneroWalletListenerI, and MoneroSyncListener?
support ssl
delete old local branches
update readme sample with MoneroUtils
collect and report monero-wallet-rpc issues
cpp library deserialization log warning for unrecognized fields
cpp library uses unmodified monero-project submodule?
wallet rpc support getting public view key, public spend key?
basic test which exercises most of wallet
all deserialization methods should log warning for unrecognized field keys (monero_utils.cpp)
support pay for service in wallet, get/set_rpc_client_secret_key
convert MoneroTx extra to string
standardize expected test failures vs exceptions
exclude heavy tests by config, e.g. testMultisig
cpp use rapidjson for model deserialization
daemon.getNextBlockHeader() sometimes hangs, daemon hangs
update wasm cpp
new rpc api will need containers for every call
remove dependency on libwallet_merged, randomx if possible
add ability for jni and c++ wallets to disallow rpc version misamtch by configuration
automate sweep tests by funding wallets, waiting, then testing, rather than manually running funded wallets
replace MoneroIntegratedAddress and MoneroDecodedAddress with MoneroAddress with address, address type, network type, primaryAddress, paymentId?
compare by merging when appropriate
testSyncFromMnemonicFromStartHeight() onDone() assertion error when daemon is actively syncing blocks
cleanup: order all methods and tests the same, even overrides
should sweepUnlocked() sweep all accounts if not specified?
prevent common occasional test failures caused by testing equality instead of mergeability (e.g. tx num confirmations increasing is expected)
only have send() and createTxs() which return tx set?
new MoneroWalletFull(new MoneroWalletConfig().setMnemonic("hello").setRestoreHeight(1234).setPath("/asdfasdfasdfafd").setPassword("....").setDaemonUri(new MoneroDaemonUri()), etc
support cold wallet with sign_transfer, submit_transfer
approximate chain height
tx.getNumConfirmations() should be initialized whenever tx.getHeight() is
add any open init steps from make_from_json?
optimize multisig tests: profile diff with/without startSyncing() running
support wallet.open(password) after close?
rpc wallet listener
rpc on_generate_from_keys
add types to model
remove merge by key images since multiple outputs can map to common key image?
add output min, max, height to output query, transfer query
update send end height mid sync so 100% figure is accurate
tx pool stats and other binary calls
performance tests (memory leaks, concurrent wallets, etc)
sync progress can made more accurate by basing on output distribution
test force split transactions
if txs are split or only specific vouts/outputs are requested, tx amounts, isIncoming, etc will be incomplete and not based on all sub-transfers. Issue at all?
auto-select account index for send request if not given?
support rpc wallet sync(listener)
remove createAccount() and addAccount(), manage automatically as sparse matrix?
rpc sweepAllUnlocked() modifies original send request
test changing wallet password with moveTo()
preserve original send request instead of modifying it? implement copy constructor
getAddressIndex() -> getSubaddress(String address) and that returns full subaddress info?
wallet.getIsSynced() should return false after block added to chain if not auto syncing
full ux test among multiple wallets
support args rescanBlockchain(bool hard, bool refresh, bool keep_key_images)
test pruning
local vs remote requests per second auto-adjusts like gui wallet.cpp:2204
define specification for rct_signatures, rct_prunable, multisig_txset, unsigned_tx_set
retrival by ranges end height should be exclusive? would be inconsistent with current rpc api
random wallet should be synced if created with rpc connection?
introduce query object for accounts? includeSubaddresses
MoneroTransfer accountIdx, subaddressIdx could be int. only query needs to support null. same with other models
testSendWithPaymentId() test that unconfirmed tx is immediately returned from getTxs() with payment id filter
test out of range subaddress access for offline access
architecture diagram
LOW
testCreateAndReceive() or other registered listeners cause all tests to hang if not closed
get_balance / get_unlocked_balance should throw exception if multisig needed? can balance be useful otherwise?
optimize multisig tests: jni can keep references of open jni wallets so wallets are not closed and re-opened
switch jni bridge json serialization to automated construction of native types for performance
wallet.getLanguage() api even if rpc doesn't support?
testGetNewKeyImagesFromLastImport
connect to peers
support syncAsync() - immediate asynchronous invocation
rescanAsync()
waitForTxsToClear() should refresh more frequently than blocks so it continues if pool manually flushed
tests cap creation of accounts by ignoring test if more than X accounts already exist
tx in pool can reconcile to failed
add warnings to all deserialization methods for unrecognized fields
test wallet gets should send test transaction so unconfirmed tx can be tested with the others
test querying with not relayed
scan code for issues using automated tool
rename getLanguages() to getSupportedLanguages()?
BIG PICTURE
open library issues
open monero-project issues
testGetReserveProofAccount() still fails if 0 confirmations, could prevent with tx pool tracker
separate tests which demonstrate monero-project issues
investigate monero-project issues
swap gui's lib with monero-cpp
(in no particular order...)
Monero REST API 2.0 based on refined model
refactor wallet2 to support wasm
native javascript binding
integrate gui
cpp test suite
bisq
javascript local wallet ui
MyMonero implementations
stress tester
--------- MONERO PROJECT ISSUES ---------
TO OPEN
less lag when starting wallet sync
monero-wallet-rpc zmq notifications
wallet2 recognizes pool tx vouts but not vins (e.g. if funds sent from another copy of wallet)
keys wallet setDaemonConnection not working with authentication
daemon cannot check for update while mining
syncing wallet does not update failed txs
wallet rpc sweep_all subaddr_indices_all gathers subaddresses with 0 unlocked balance which then fails
OPEN ISSUES
testGetReserveProofAccount() exception, re-enable test reserves or report issue - issue #6595
User experience: let users spend low confirmation funds without being locked for 10 blocks: https://github.com/monero-project/monero/issues/5810
wallet2 does not fully sync transactions in the pool: https://github.com/monero-project/monero/issues/5811
wallet2 import_key_images erases incoming transfers: https://github.com/monero-project/monero/issues/5812
wallet2 does not report incoming transfers with outgoing counterpart from same account (older): https://github.com/monero-project/monero/issues/4500
monero-wallet-rpc on_transfer_split throw error if no transactions are created
Separate wallet2 core wallet functionality from networking, persistence, and other application-specific dependencies
Generalize multisig wallet creation to 1) prepare, 2) make, 3) exchange for M-N times
ISSUES TO OPEN
monero-wallet-rpc set_daemon doesn't support username/password
getGetReserveProofAccount() still seg faulting on 0 conf, crashes eclipse
support seed offset in createWalletFromKeys()
ability to get mnemonic from wallet rpc restored from keys
ability to get mnemonic language, restore height from wallet rpc
ability to set mnemonic language and get different mnemonic?
sweep address or account leaving behind dust
sweeping address or account with dust fails with "No unlocked balance in the specified subaddress(es)", catch in sweepWallet()?
outgoing transactions should expire: e.g. send tx, pending, shut down, return 1 day later, tx gets sent then, but recipient could have expired destination
peer.getLastSeenTimestamp() occasionally returns -1, -4, -7, -8, etc
MEDIUM / OUTDATED?
test rapid send through a wallet
incoming outputs do not appear until first confirmation, sub-issue?
getReserveProofAccount() seg faulting (with no unlocked balance / spending 0-conf???), wallet rpc get_reserve_proof
save network type with wallet export/import
getTxPool() occasionally hangs (have no peer connections?)
rpc testCreateWalletFromMnemonic() sometimes wallet is synced after fresh creation when run with other tests
Mining to subaddress isn't supported yet
failed tx in pool (after testUpdateLockedDifferentAccounts()) causes non-originating saved wallets to return duplicate incoming transfers but one has amount/numSuggestedConfirmations of 0, possibly no outgoingTransfer
wallet2 get_payments() min_height is exclusive and max_height is inclusive: #5598, #5751
wallet.cpp:2093 doRefresh() calls find_and_save_rings but wallet rpc run() does not?
start height processed > requested start height unless restore height manually set
my daemon on stagenet says `Sync data returned a new top block candidate: 365062 -> 365545`. if I mine, the daemon seems to mine on 365062. if I create a new wallet, its restore height is set to 365545, but daemon `get_height` reports 365062
don't require writing to disk to make working wallet
add all_accounts to incoming_transfers, would be huge time saver
sometimes see non-zero spent amount in testCheckReserve()
one time: testCheckTxKey() -24: No tx secret key is stored for this tx, RPC request: 'get_tx_key' with params: {"txid":"e779dbb7fbff77544ea39de062b12c1d722901ed937a833307c1b5b3cea41069"}
Marking output 18666(<9cd46fd977f2d8f6112cc87592677cbd76801b318c6e607dd31b9a25dd7d9530>) as unspent, it was marked as spent
cannot send: -4: Known ring does not include the spent output: 1255232 (this fixed itself, not sure how)
file issue to get received timestamp for unconfirmed wallet txs if wanted
No message store file found: /Applications/190322-monero-master//test_wallet_1.mms
WARNING: key proof indicates no funds received despite transfer (txid=76983ebf1d2e62141c19e190355e146145cb03988c5bfaf857b65dc0e15d378f, key=5246bf34d97dd379843ea31cb2bddfe41a89db73be4bd72fdc1ffe1b4d8ac70d, address=76gP3JEGAhnS5sgnB7LHRP2tbidL8ChvkJATJADQF4SpBcbN8bUgSZyQmTpdMQqyW129dh3zV5XscaBhkU6WTUKQVdDykFV, amount=44933)
cannot save after creating wallet2 because store()/store_to() does not generate cache file when initially generated with empty strings
store() does nothing if no name previously set, throw exception instead?
store_to() is actually move(), deleting old files if they exist. support "save as"
new wallet() without connection but restoreHeight is checkpointed; where is that data cached?
wallet_rpc_server.cpp:404: entry.address = m_wallet->get_subaddress_as_str({pd.m_subaddr_account, 0}) will always use subaddress idx 0, ignoring all actual subaddress indices
suggested_confirmations_threshold comes back as 0 for some (not all) outgoing transfers, but always >0 for incoming transfers, even if they’re transfers to/from the same wallet. Can a value of 0 make sense?
document query_key spend_key parameter
wallet2->get_payments() does not return transfers in order of height, probably others
no way to get order of block txs from wallet2
typos on monero-wallet-rpc tx proofs, wrong output on check_reserve_proof
get_transfer add tx_size, tx_key (out or pending), destinations (pending), key_image (in or mempool)
get_transfers should default to all subaddresses, else all subaddresses must be pre-fetched to get all txs in account
get_transfer_by_txid add tx_size
incoming_transfers add address (low priority), fee, timestamp, unlock_time, is_double_spend, height, tx_size (misdocumented)
get transactions per block
lots of internal wallet errors when daemon rpc tests run
add final keyword to method args where appropriate
update send end height mid sync so 100% figure is accurate
failure in sync test does not propagate back through c++ and back to Java to indicate test failure
wallet2 sweep_all if subaddress_indices are not specified it chooses random subaddress, 0 last in create_transactions_all()
LOW
on_money_spent() tx in vs out are same tx always
on_money_spent() / on_money_received() do not provide output index
common wallet tests test structures of txs, transfers, and outputs in testGetTxs(), etc
should vouts be part of incoming transfers? typically one vout per transfer but not necessarily?
wallet.cpp m_synchronized only ever set to true, never false
get_reserve_proof document default account 0
check_reserve_proof documentation spent and total not documented as outputs
-1: Failed to open wallet if wallet is already open; better code and message
don't return incorrect balance information if multisig, instead return error
get_transfers defaults [0, 0], incoming_transfers defaults [0, all], get_bulk_payments defaults [all, all] (especially get_transfers should default to all else call to get_address is required first)
get_transfers returns all transactions whereas incoming_transfers returns incoming outputs; clarify terminology or both could return transactions for consistency
document get_transfers account_index and subaddr_indices defaults
document that rescan_bc destroys wallet cache (destination addresses, etc)
height vs block_height inconsistent
address book entries work by index instead of id which changes
tx_hash in incoming_transfers vs txid in get_transfers; standardize on tx_hash or tx_id
standardize terminology transactions vs transfers
standardize terminology payment vs output; one payment may be fulfilled with multiple outputs