OmniLayer / omniwallet

Omni Protocol Hybrid Web-Wallet
https://www.omniwallet.org
GNU Affero General Public License v3.0
327 stars 187 forks source link

Maidsafe coins sent to Omni then sent to Electrum 2fa addresses, cannot be sent back to Omni #1314

Closed MontyKirkman closed 8 years ago

MontyKirkman commented 8 years ago

I've raised this issue with help desk and someone is working on it but I thought I should mention here as well.

I used 2fa with Electrum thinking it would help with security, but it's turned into a nightmare. I've been trying to get my MAID and Synereo off Omni for 14 hours straight but with no luck.

I sent MAID coins from Exchange to Omni then on sent them to Electrum 2fa account. When returning them back to Omini...major problems bit me in the backside.

This address has all my MAID and Synero starts with 3JAX9xkuAc93............ (created in electrum 2FA) When I enter my private key to Omni for the above address I get this address 1KNzUe8RddBG3kTgi9rrfqmVgCNLokLQZK which doesn't show my MAID and Synereo When I put 3JAX9xkuAc93...............in as a watch address I can see it all sitting there but I can't do anything with it.

This is a major bug for anyone that wants to use 2fa (multisig) when storing Omnilayer coins. It's a serious 'gotcha' and users need to be warned about it somehow....

MrKaneF commented 8 years ago

I have the exact same problem. All of my maid is locked in a P2SH address on electrum. It is getting very disheartening with the prospect all of my maid might be all locked up.

zathras-crypto commented 8 years ago

Hi,

I used 2fa with Electrum thinking it would help with security, but it's turned into a nightmare

I'm sorry to hear you haven't had a great experience, however the Electrum wallet does not support Omni tokens, so there is not too much support we can provide for using Electrum with Omni.

Omni tokens require an "Omni-aware" wallet, of which Electrum is not one.

This address has all my MAID and Synero starts with 3JAX9xkuAc93

This is a multi-signature address. Electrum's 2FA wallets are multisig wallets where the 3rd key is held by a company called TrustedCoin.

When I enter my private key to Omni for the above address I get this address 1KNzUe8RddBG3kTgi9rrfqmVgCNLokLQZK

Your 3JAX address is a multisignature address, there is no single private key.

This is a major bug for anyone that wants to use 2fa (multisig) when storing Omnilayer coins.

This is not a bug in Omni or its software. Sadly this is caused by attempting to spend Omni tokens via a non-Omni compatible wallet.

Your coins are not lost, I've completed your 3JAX address and checked it, the tokens are still at the address. You just need a signed transaction from that address to move them.

As Electrum doesn't support Omni, it can't create this transaction. However it may be feasible to use Omni Core's raw transactions interface to create an unsigned Omni transaction from this multisig address and then pass it over to Electrum for signing.

@MrKaneF

I have the exact same problem. All of my maid is locked in a P2SH address on electrum. It is getting very disheartening with the prospect all of my maid might be all locked up.

The above should also apply to you.

I hope this helps.

Thanks Z

zathras-crypto commented 8 years ago

image

MontyKirkman commented 8 years ago

Hey MrKaneF, I assume you've lodged a ticket. Have you had a response back yet? This problem is going to catch a lot of Omni users out I'm afraid. It's a real gotcha. I really hope the fix is easy enough. I didn't realise the problem until MAID spiked the other day and I though I should liquidate a few and have some on hand to convert to Safe coins

MrKaneF commented 8 years ago

I have opened a ticket but have not received a response yet. Looks like our best bet is to trying to create a raw transaction with omnicore and sign that transaction in electrum.

MontyKirkman commented 8 years ago

This is not a bug in Omni or its software. Sadly this is caused by attempting to spend Omni tokens via a non-Omni compatible wallet.

Can you let us know what Omni aware wallets there are out there? Cheers

MontyKirkman commented 8 years ago

I have opened a ticket but have not received a response yet. Looks like our best bet is to trying to create a raw transaction with omnicore and sign that transaction in electrum.

I'm not a programmer, so I guess this is easy enough to do. Will a Omni dev need to do this for us, or is it something we can do?

MrKaneF commented 8 years ago

I will post here if it works or not.

MrKaneF commented 8 years ago

if you install omnicore it looks like there is an option to create a raw transaction where you can specify which omni asset you want to send by id, it is all by command line though. We would be able to sign that transaction in electrum(hopefully)

MontyKirkman commented 8 years ago

Well, I sincerely hope it works. I have my fingers crossed...for you and me :)

zathras-crypto commented 8 years ago

Can you let us know what Omni aware wallets there are out there?

The foundation sponsored wallets are OmniWallet (web) and our reference client OmniCore (server/desktop). There are quite a few other services & exchanges that support the Omni Layer technology & ecosystem, but we do not expressly endorse.

I'm not a programmer, so I guess this is easy enough to do. Will a Omni dev need to do this for us, or is it something we can do?

The raw transactions interface is CLI only yes, and is targeted for advanced users. Omni devs can assist, but it's not recommended you let some person on the internet craft a transaction you'll later sign :)

You'll need to attach an input (small one around 10K satoshis so don't need to worry about change) from the P2SH address (omni_createrawtx_input), along with a payload (create with omni_createpayload_simplesend and attach with omni_createrawtx_opreturn) & recipient address (omni_createrawtx_reference).

@dexX7 is there a current how-to these guys could follow can you recall?

if you install omnicore it looks like there is an option to create a raw transaction where you can specify which omni asset you want to send by id, it is all by command line though. We would be able to sign that transaction in electrum(hopefully)

That's it, yep. Note you don't need to wait for a blockchain sync to use the raw transactions interface.

MontyKirkman commented 8 years ago

Ok, So I install reference client Omnicore server/desktop and run this from within it?

You'll need to attach an input (small one around 10K satoshis so don't need to worry about change) from the P2SH address (omni_createrawtx_input), along with a payload (create with omni_createpayload_simplesend and attach with omni_createrawtx_opreturn) & recipient address (omni_createrawtx_reference).

MrKaneF commented 8 years ago

@zathras-crypto

In omnicore-cli is there any way to create a raw transaction without connecting to an rpc? None of the commands are working without an rpc.

MrKaneF commented 8 years ago

Just trying to create a raw transaction that can be imported into electrum for signing.

MrKaneF commented 8 years ago

omnicore-cli "omni_send" appears to be what we want because it specifies "from address" "to address" and a property id but it looks like it is only for use with the omnicore gui wallet itself.

MrKaneF commented 8 years ago

Never mind i think i got it....

MontyKirkman commented 8 years ago

@MrKaneF I'm so damn lucky a dev has the same problem as me. I'm so lost it's not funny....

MrKaneF commented 8 years ago

Ya, it's interesting working through the omnicore docs. I haven't created a raw transaction in a while...

zathras-crypto commented 8 years ago

In omnicore-cli is there any way to create a raw transaction without connecting to an rpc? None of the commands are working without an rpc.

I'm afraid not. The API is exposed via RPC. There is a CLI RPC client (omnicore-cli) included with the package.

omnicore-cli "omni_send" appears to be what we want because it specifies "from address" "to address" and a property id but it looks like it is only for use with the omnicore gui wallet itself.

omni_send RPC is a wallet call, and can only be made when the key(s) for the sending address are in the wallet.

Ok, So I install reference client Omnicore server/desktop and run this from within it?

Rough steps (I've asked a colleague if we have an existing how-to, but for now):

1) Send a 10K satoshi output to sendingaddress. Note the txid & vout of this output.

2) Add this output as input to a blank transaction: omni_createrawtx_input txidfromstep1 voutfromstep1

3) Create a payload to transfer the tokens: omni_createpayload_simplesend propertytosend amounttosend

4) Attach this payload to the transaction hex output from step 2: omni_createrawtx_opreturn rawhexfromstep2 payloadfromstep3

5) Attach the recipient to the transaction hex output from step 4: omni_createrawtx_reference rawhexfromstep4 recipientaddress

Then finally take the hex from step 5 and verify it: omni_decodetransaction rawhexfromstep5

Assuming the decoded transaction is from/to your desired addresses & for the right property & amount, you may then take that raw tx over to your alternate wallet & sign.

From memory that's about it...

MontyKirkman commented 8 years ago

From memory that's about it...

Yikes! that all looks like fun. I guess if I want my MAID and AMP back I'm going to have to learn real fast what it all means :)

MrKaneF commented 8 years ago

I unfortunately can't sync the entire bitcoin blockchain to be able to interact with the RPC-API , so I am not sure what other options i have :/ I should have never created a 2fa electrum wallet.

MontyKirkman commented 8 years ago

I should never have created a 2fa electrum wallet.

I'm with you there. So its not possible to sink the bitcoin blockchain?

On 15/08/2016 11:21 AM, "MrKaneF" notifications@github.com wrote:

I unfortunately can't sync the entire bitcoin blockchain to be able to interact with the RPC-API , so I am not sure what other options i have :/ I should have never created a 2fa electrum wallet.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/OmniLayer/omniwallet/issues/1314#issuecomment-239704484, or mute the thread https://github.com/notifications/unsubscribe-auth/AUCsEYtRMRpZPR-GSX4PnzKVq43z3pLlks5qf6MFgaJpZM4JjzTu .

MrKaneF commented 8 years ago

I just don't have enough space on my computer for 70+ gigabytes to store the blockchain just to create a raw transaction. You will be able to though if you have the space.

MontyKirkman commented 8 years ago

Ok..well I have a 2TB empty drive. So I can use that. Are the instructions above the correct way to go?

On 15/08/2016 11:28 AM, "MrKaneF" notifications@github.com wrote:

I just don't have enough space on my computer for 70+ gigabytes to store the blockchain just to create a raw transaction. You will be able to though if you have the space.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/OmniLayer/omniwallet/issues/1314#issuecomment-239704886, or mute the thread https://github.com/notifications/unsubscribe-auth/AUCsETNeEHTu6VbPiMRK01mwaHYVmqxeks5qf6SagaJpZM4JjzTu .

MrKaneF commented 8 years ago

Ya those are correct.

zathras-crypto commented 8 years ago

That's it, yep. Note you don't need to wait for a blockchain sync to use the raw transactions interface.

zathras-crypto commented 8 years ago

If performance is an issue (it's slow because it's downloading/verifying the chain) just disconnect from your network while you create the raw tx.

MrKaneF commented 8 years ago

I just keep getting an "error: couldn't connect to server" when trying to execute the commands.

MontyKirkman commented 8 years ago

@zathras-crypto Thanks for your help on this one. It's not going to be easy for me, but at least it's away out of this mess :)

MrKaneF commented 8 years ago

Or i just get a bitcoin.conf error :/

zathras-crypto commented 8 years ago

Or i just get a bitcoin.conf error :/

You'll need a basic bitcoin.conf with a rpcuser & rpcpassword in it to use Omni Core. If you have problems getting it running I'm happy to help.

Thanks for your help on this one. It's not going to be easy for me, but at least it's away out of this mess :)

No problems. Of course we could just create these transactions for you and give them to you to sign, but I don't want to encourage folks to blindly sign transactions from people they don't know (who knows where the funds were being sent) so I'd rather help you guys to do it yourselves :)

MrKaneF commented 8 years ago

Even with an rpcuser and rpc password in the bitcoin.conf file i just keep getting a "couldn't connect to server" error.

MrKaneF commented 8 years ago

ok i got it working

MrKaneF commented 8 years ago

No errors so far :)

MontyKirkman commented 8 years ago

@MrKaneF Whooo hooo....did you have to disconnect from the network as suggested to get things working?

MontyKirkman commented 8 years ago

@zathras-crypto

No problems. Of course we could just create these transactions for you and give them to you to sign, but I don't want to encourage folks to blindly sign transactions from people they don't know (who knows where the funds were being sent) so I'd rather help you guys to do it yourselves :)

Yes, I understand. Is there no way you could do this safely? I just know there are going to be others caught out with this who have no technical ability at all. I'm almost in that category but I think I can struggle through this one with a bit of help.

MrKaneF commented 8 years ago

Well I can actually interact with the RPC-API so that's nice. I'll keep updating my status.

zathras-crypto commented 8 years ago

Yes, I understand. Is there no way you could do this safely? I just know there are going to be others caught out with this who have no technical ability at all. I'm almost in that category but I think I can struggle through this one with a bit of help.

There is no way to do it "safely" - it's never safe to sign a transaction from someone you don't know unless you are going to first verify it yourself (to check what the transaction does). This is actually why I put a stop to the "Transaction Builder" stuff we were doing on OmniChest.info.

To be honest it's a scenario we see quite often (folks sending tokens to unsupported wallets - whether it be Electrum, Coinbase, Blockchain etc). It's a difficult one to solve, because how do you prevent users doing this other than saying "please don't try and use Omni with software that doesn't support it".

Well I can actually interact with the RPC-API so that's nice. I'll keep updating my status.

Great, let me know how you get on.

MrKaneF commented 8 years ago

@zathras-crypto I am trying to create a payload, but when i input a 3 for the property id i get an error "Property identifier does not exist."

MontyKirkman commented 8 years ago

@zathras-crypto That's fine. I have to keep reminding myself just how new this space is and to expect the unexpected.

MrKaneF commented 8 years ago

The only property ids that i have tested that work are 1 and 2 but maidsafe is property id 3 and that does not work:/

zathras-crypto commented 8 years ago

I am trying to create a payload, but when i input a 3 for the property id i get an error "Property identifier does not exist."

Ahh of course, the call is making a check and since we haven't synced up the blockchain as far as the state is concerned property 3 hasn't been created yet.

The payloads can be created manually, can you advise on the amount you want to include in the payload?

@dexX7 perhaps we should remove state checks from the omni_createpayload calls? What do you think?

MrKaneF commented 8 years ago

I would like to make a test transaction first of 10 maid then if that works send the rest of the maid.

MrKaneF commented 8 years ago

So i will need a payload for 12250 maid also ;)

zathras-crypto commented 8 years ago

Payload for prop 3 & amount of 10 is 0000000000000003000000000000000a. Payload for prop 3 & amount of 12250 is 00000000000000030000000000002fda

Please remember to run the prepared transaction through omni_decodetransaction before signing to make sure you're happy with what it's going to do.

Note also as the chain isn't synced you may need to supply a blockheight (use 425000 will be fine) to omni_decodetransaction to specify to use consensus rules as of that block. That call by default decodes transactions based on the rules as of current chain height (which on your client will be very low and before things like P2SH were enabled).

MrKaneF commented 8 years ago

Thanks a lot man. Never ever forget to decode a raw transaction before signing it ;)

MontyKirkman commented 8 years ago

@zathras-crypto

Could you do a payload prop for 82905 MAID. I have 82915, so I'll do 10 first then the rest. So for the first 10 units I use this 0000000000000003000000000000000a right?

I also have Synereo as well (AMP) 53344, So I'll need a Payload for prop 39 for 10 units then another for the rest 53334

Have I just asked for the correct info for my wallet?

MrKaneF commented 8 years ago

@zathras-crypto I am currently trying to decode the transaction but it returns an error: "Not a Master Protocol transaction" so then I input the blockheight for 425000, but it appears the "prevtxs" parameter is taking the integer but is expecting a string. I tried using the default prevtxs parameter but still no luck.

MrKaneF commented 8 years ago

ok i fixed the parameter issue, now i just get a "Not a Master Protocol transaction" error. Here is the raw transaction hex: "010000000159a794f6e940e2ea7e32971631428ab9bc21e388f133d9b3abec0ee90b68229a0000000000ffffffff020000000000000000166a146f6d6e690000000000000003000000000000000aaa0a0000000000001976a9145e34a4cda23cd59f9af60d88356609cf1f9941aa88ac00000000"

zathras-crypto commented 8 years ago

Ahh, to supply the block height we need to supply a null set of prev txs IIRC.

This must be an issue with decoding without a synced chain - thanks for the report we'll spin this up and debug it.

In the mean time, your raw hex decodes to:

c:\Program Files\Omni Core\daemon>omnicore-cli.exe omni_decodetransaction 010000000159a794f6e940e2ea7e32971631428ab9bc21
e388f133d9b3abec0ee90b68229a0000000000ffffffff020000000000000000166a146f6d6e690000000000000003000000000000000aaa0a000000
0000001976a9145e34a4cda23cd59f9af60d88356609cf1f9941aa88ac00000000
{
    "txid" : "525385a8101c732abce749ef11642f68492d032bceaf4d1fd86d5f20d908c247",
    "fee" : "0.00007270",
    "sendingaddress" : "3QvZquwUiFA2Qgq6Gjbfzp4FndGfuqF3zW",
    "referenceaddress" : "19b7anX8Rc9MogQ46ssky3ZJSU2YeXdBTP",
    "ismine" : false,
    "version" : 0,
    "type_int" : 0,
    "type" : "Simple Send",
    "propertyid" : 3,
    "divisible" : false,
    "amount" : "10",
    "confirmations" : 0
}