Bitcoin Forum
March 29, 2024, 01:31:17 PM *
News: Latest Bitcoin Core release: 26.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: [BOUNTY] Input diversifyer via MtGox  (Read 779 times)
2weiX (OP)
Legendary
*
Offline Offline

Activity: 2058
Merit: 1005

this space intentionally left blank


View Profile
November 22, 2013, 05:46:24 PM
 #1

What I need:

A script (php) that, using my MtGox account, does the following:

- Create a privkey/pubkey for an mtgox deposit
- Display the pubkey QR for deposit
- Take note of the amount deposited to that key
- Let me supply a bitcoin address as designater output address and a number "X"
- Check if the address supplied is in fact a valid address
- Withdraws Input/X to the output address X times via mtgox green address

doable?
1711719077
Hero Member
*
Offline Offline

Posts: 1711719077

View Profile Personal Message (Offline)

Ignore
1711719077
Reply with quote  #2

1711719077
Report to moderator
Bitcoin addresses contain a checksum, so it is very unlikely that mistyping an address will cause you to lose money.
Advertised sites are not endorsed by the Bitcoin Forum. They may be unsafe, untrustworthy, or illegal in your jurisdiction.
1711719077
Hero Member
*
Offline Offline

Posts: 1711719077

View Profile Personal Message (Offline)

Ignore
1711719077
Reply with quote  #2

1711719077
Report to moderator
Terk
Hero Member
*****
Offline Offline

Activity: 616
Merit: 522



View Profile
November 22, 2013, 06:01:18 PM
 #2

So basically you want to use MtGox as coin mixer and automate the thing?

Just one thing:

- Create a privkey/pubkey for an mtgox deposit

If we're talking about address for MtGox deposit, this will be a pubkey only as privkey is held by MtGox.

It's doable. What's the bounty?

qwk
Donator
Legendary
*
Offline Offline

Activity: 3542
Merit: 3410


Shitcoin Minimalist


View Profile
November 22, 2013, 06:03:00 PM
 #3

- Create a privkey/pubkey for an mtgox deposit
- Display the pubkey QR for deposit
- Take note of the amount deposited to that key
- Let me supply a bitcoin address as designater output address and a number "X"
- Check if the address supplied is in fact a valid address
- Withdraws Input/X to the output address X times via mtgox green address
Probably not that difficult.
Most of the above is quite trivial and has nothing to do with MtGox, but rather would use some bitcoin library.
I'm not familiar with a PHP library, but just in case, there would also be sx tools.


Withdrawing from the green address of MtGox is available through the API:

Withdraw bitcoins
https://data.mtgox.com/api/1/generic/bitcoin/send_simple
Send bitcoins from your account to a bitcoin address.
Parameters:
Name    Value    Required    Example
address    string    Yes    N/A
amount_int    int    Yes    N/A
fee_int    int    No    N/A
no_instant    bool    No    N/A
green    bool    No    N/A
Answer unknown at the time of writing
Example Error
{u'token': u'unknown_error', u'result': u'error', u'error': u'Parameter amount_int or amount is required'}


Also, if you like, you may even redeem your created privkeys from step 1, so no need fo handling that manually:

redeem a private key
https://data.mtgox.com/api/1/generic/private/bitcoin/addpriv
allows you to add a private key to your account
parameters :
"key":code "keytype":"auto" "description":description
returns the btc adress and the total number of btcs in this private key

Yeah, well, I'm gonna go build my own blockchain. With blackjack and hookers! In fact forget the blockchain.
2weiX (OP)
Legendary
*
Offline Offline

Activity: 2058
Merit: 1005

this space intentionally left blank


View Profile
November 22, 2013, 06:46:09 PM
 #4

So basically you want to use MtGox as coin mixer and automate the thing?

Just one thing:

- Create a privkey/pubkey for an mtgox deposit

If we're talking about address for MtGox deposit, this will be a pubkey only as privkey is held by MtGox.

It's doable. What's the bounty?

Not really to use as a mixer, but to use as an input-splitter.
Thought - even better if I could enter a multitude of addresses and it would split the BTC evenly across all addresses, in X transactions.

The only problem could be that mtgox needs 6 blocks to credit the coins, so withdrawals created via the API are likely to be discarded due to missing balance - what do you think?

Bounty depends on the amount of time you think this would take.
No more than .3 to .5 BTC, I reckon.
2weiX (OP)
Legendary
*
Offline Offline

Activity: 2058
Merit: 1005

this space intentionally left blank


View Profile
November 22, 2013, 06:49:24 PM
 #5

- Create a privkey/pubkey for an mtgox deposit
- Display the pubkey QR for deposit
- Take note of the amount deposited to that key
- Let me supply a bitcoin address as designater output address and a number "X"
- Check if the address supplied is in fact a valid address
- Withdraws Input/X to the output address X times via mtgox green address
Probably not that difficult.
Most of the above is quite trivial and has nothing to do with MtGox, but rather would use some bitcoin library.
I'm not familiar with a PHP library, but just in case, there would also be sx tools.


Withdrawing from the green address of MtGox is available through the API:

Withdraw bitcoins
https://data.mtgox.com/api/1/generic/bitcoin/send_simple
Send bitcoins from your account to a bitcoin address.
Parameters:
Name    Value    Required    Example
address    string    Yes    N/A
amount_int    int    Yes    N/A
fee_int    int    No    N/A
no_instant    bool    No    N/A
green    bool    No    N/A
Answer unknown at the time of writing
Example Error
{u'token': u'unknown_error', u'result': u'error', u'error': u'Parameter amount_int or amount is required'}


Also, if you like, you may even redeem your created privkeys from step 1, so no need fo handling that manually:

redeem a private key
https://data.mtgox.com/api/1/generic/private/bitcoin/addpriv
allows you to add a private key to your account
parameters :
"key":code "keytype":"auto" "description":description
returns the btc adress and the total number of btcs in this private key

I have an mtgox amount that's dormant, so I figured it would be convenient to use that - I don't want to set up yet another service.
Terk
Hero Member
*****
Offline Offline

Activity: 616
Merit: 522



View Profile
November 22, 2013, 07:46:43 PM
 #6

The only problem could be that mtgox needs 6 blocks to credit the coins, so withdrawals created via the API are likely to be discarded due to missing balance - what do you think?

Well, of course you'd need either to have matching balance on your MtGox account beforehand or to wait until deposited funds are available on your MtGox account (6 confirmations plus sometimes couple minutes delay). Of course the script could handle it and wait until funds are available to make withdrawals. It would require you to have access to cron to run the script every couple of minutes and some data store (e.g. database) to keep data between script runs.

Summarizing: the script should talk to MtGox API for deposit address, then repeatedly talk to Blockchain API to wait for actual deposit, then repeatedly talk to MtGox API to wait for funds being available, then talk to MtGox API to make withdrawals. It should keep and manage data in a database to make it persistent during the whole process. And it should provide some simple interface to initiate the process and define destination addresses.

Bounty depends on the amount of time you think this would take.
No more than .3 to .5 BTC, I reckon.

You probably could have it done by a junior developer for 0.5 BTC. At my rates I could do it for 2 BTC.

But

Not really to use as a mixer, but to use as an input-splitter.

If you actually care only about effortless splitting and not mixing, then involving MtGox doesn't make sense (and it complicates things). I suggest to create a Blockchain.info wallet and use their wallet API. If you already have a Blockchain.info wallet, then just create another one, purposed only to use by this script (and don't use it for anything else, as the PHP script will have access to it). The script would create new deposit address for each request and send bitcoins further into split destinations as soon as the deposit is made - without waiting for any confirmations.

This I could do for 1 BTC.

2weiX (OP)
Legendary
*
Offline Offline

Activity: 2058
Merit: 1005

this space intentionally left blank


View Profile
November 22, 2013, 07:52:06 PM
 #7

The only problem could be that mtgox needs 6 blocks to credit the coins, so withdrawals created via the API are likely to be discarded due to missing balance - what do you think?

Well, of course you'd need either to have matching balance on your MtGox account beforehand or to wait until deposited funds are available on your MtGox account (6 confirmations plus sometimes couple minutes delay). Of course the script could handle it and wait until funds are available to make withdrawals. It would require you to have access to cron to run the script every couple of minutes and some data store (e.g. database) to keep data between script runs.

Summarizing: the script should talk to MtGox API for deposit address, then repeatedly talk to Blockchain API to wait for actual deposit, then repeatedly talk to MtGox API to wait for funds being available, then talk to MtGox API to make withdrawals. It should keep and manage data in a database to make it persistent during the whole process. And it should provide some simple interface to initiate the process and define destination addresses.

Bounty depends on the amount of time you think this would take.
No more than .3 to .5 BTC, I reckon.

You probably could have it done by a junior developer for 0.5 BTC. At my rates I could do it for 2 BTC.

But

Not really to use as a mixer, but to use as an input-splitter.

If you actually care only about effortless splitting and not mixing, then involving MtGox doesn't make sense (and it complicates things). I suggest to create a Blockchain.info wallet and use their wallet API. If you already have a Blockchain.info wallet, then just create another one, purposed only to use by this script (and don't use it for anything else, as the PHP script will have access to it). The script would create new deposit address for each request and send bitcoins further into split destinations as soon as the deposit is made - without waiting for any confirmations.

This I could do for 1 BTC.

1BTC seems quite steep, but then again I don't know jack about programming :-D
You raise some valid points, valuable input.

Could this be the foundation of a service that's publicly available and take 0.5% fee to remain in the wallet?

Just checking if I could spend this as an investment, actually.

Because, the trouble it takes to just resend 10x manually every once in a while really is <<<<< 1BTC.

qwk
Donator
Legendary
*
Offline Offline

Activity: 3542
Merit: 3410


Shitcoin Minimalist


View Profile
November 22, 2013, 07:59:08 PM
 #8

I still don't understand what you're actually trying to achieve?

As a blackbox, it looks like:

a) insert amount X of bitcoins
b) chose recipient address A split factor Y
c) send Y * X/Y to A

You'll finally end up with amount X on address A, so why not send all at once? Huh

Yeah, well, I'm gonna go build my own blockchain. With blackjack and hookers! In fact forget the blockchain.
2weiX (OP)
Legendary
*
Offline Offline

Activity: 2058
Merit: 1005

this space intentionally left blank


View Profile
November 22, 2013, 08:04:10 PM
 #9

I still don't understand what you're actually trying to achieve?

As a blackbox, it looks like:

a) insert amount X of bitcoins
b) chose recipient address A split factor Y
c) send Y * X/Y to A

You'll finally end up with amount X on address A, so why not send all at once? Huh


because I encountered, repeatedly, the situation where I had, say 50BTC in my wallet, received in one transaction.

I then went to pay me beer with BTC, say, 0.001244BTC

The transaction would, for whatever reason, stay unconfirmed for hours (sometimes because the app simply didn't add a fee, sometimes because the blocks simply weren't updating). The rest of the 50 BTC are completely unusable, since they are part of the output, and I cannot send them until they are confirmed. This has at some occasion led to one unconfirmed transaction stacking ontop of the other - if any which one of these bounces, all the others do, too.

So I'd really like to have my BTCs on the same address, but in X inputs.
Even better if I could specify Y different addresses, which then each receive X transactions:

For an amount of BTC (B) each Address (Y) would get a number of transactions (X), divided by number of Addresses (A)

Y(1..A) = B / X / A

Terk
Hero Member
*****
Offline Offline

Activity: 616
Merit: 522



View Profile
November 22, 2013, 08:04:59 PM
 #10

1BTC seems quite steep, but then again I don't know jack about programming :-D

It is, but I am good in what I do and I value my time and work Smiley

You raise some valid points, valuable input.

Well this alone is something which you wouldn't get from anyone who'd implement your original idea for 0.3-0.5 BTC. He would take your points and implement exactly what you wanted, creating a lot of messy dependencies and introducing unnecessary unreliability. I can make you a reliable and tested script that works well and solves your problem (instead of making a software that blindly implements your specification).

Could this be the foundation of a service that's publicly available and take 0.5% fee to remain in the wallet?

Just checking if I could spend this as an investment, actually.

It could, if you think it's a service that people will need. I personally doubt there will be any significant demand for that. Also, keep in mind that implementing a feature is one thing, making it a service for people is also some more stuff/features needed to build around the core feature.


Because, the trouble it takes to just resend 10x manually every once in a while really is <<<<< 1BTC.

Agree. For me the trouble it takes to just send it manually is even << trouble of writing this post and even thinking of any automated script to do this, yet you created this thread Smiley

moderate
Member
**
Offline Offline

Activity: 98
Merit: 10

nearly dead


View Profile
November 22, 2013, 08:19:55 PM
 #11


Well, of course you'd need either to have matching balance on your MtGox account beforehand or to wait until deposited funds are available on your MtGox account (6 confirmations plus sometimes couple minutes delay). Of course the script could handle it and wait until funds are available to make withdrawals. It would require you to have access to cron to run the script every couple of minutes and some data store (e.g. database) to keep data between script runs.

Summarizing: the script should talk to MtGox API for deposit address, then repeatedly talk to Blockchain API to wait for actual deposit, then repeatedly talk to MtGox API to wait for funds being available, then talk to MtGox API to make withdrawals. It should keep and manage data in a database to make it persistent during the whole process. And it should provide some simple interface to initiate the process and define destination addresses.

snip

Oh dear lord and the incompetence of the self-entitled-good-developers. Blockchain is a very different thing from blockchain.info, the site, anyone claiming to produce any good code related to bitcoin shouldn't me distributing this confusion made by the very newbies.

MtGox provides a websockets API, so scratch all the "repeatedly" words from your text, as well your line of thought to how to code this.

Also, there is zero need for PHP here. If the guy wants to continue with a browser-only solution, javascript is enough to provide all he needs.
qwk
Donator
Legendary
*
Offline Offline

Activity: 3542
Merit: 3410


Shitcoin Minimalist


View Profile
November 22, 2013, 08:43:15 PM
 #12

Summarizing: the script should talk to
Oh dear lord and the incompetence of the self-entitled-good-developers. Blockchain is a very different thing from blockchain.info, the site, anyone claiming to produce any good code related to bitcoin shouldn't me distributing this confusion made by the very newbies.
Oh dear lord, that from someone who is unable to even get the quotes on this forum right. Roll Eyes
That was not 2weiX in the above quote.
Also, nowhere did anyone distribute any confusion.

Also, there is zero need for PHP here.
Agreed, it could be done with anything else. But you're not helping.

Now, if you could be so kind as to either contribute or leave?

Yeah, well, I'm gonna go build my own blockchain. With blackjack and hookers! In fact forget the blockchain.
Terk
Hero Member
*****
Offline Offline

Activity: 616
Merit: 522



View Profile
November 22, 2013, 08:46:54 PM
 #13

Oh dear lord and the incompetence of the self-entitled-good-developers. Blockchain is a very different thing from blockchain.info, the site, anyone claiming to produce any good code related to bitcoin shouldn't me distributing this confusion made by the very newbies.

And where did you see anyone confusing Blockchain with Blockchain.info in this thread, other than you of course? I was writing about Blockchain API that was needed for his original solution involving MtGox to verify that the deposit was actually made. This means an API that provides access to the Blockchain. It could be Blockchain.info which provides such API, but it could be bitcoind that provides such API as well or any other tool that provides API to access Blockchain. I was referring to a general category. Reading with understanding is an important skill. It's like if I wrote about “social network website” or “search engine” and you understood it as “Facebook” or “Google” respectively. Please don't confuse Blockchain with Blockchain.info.

MtGox provides a websockets API, so scratch all the "repeatedly" words from your text, as well your line of thought to how to code this.

PHP (which he wanted to use) isn't very suitable tool to continuously run a script, especially if you don't control or at least know the runtime environment (many hosting providers kill PHP scripts that run more than couple of minutes). You need a reliable environment in which your script can be working 24/7 without interruptions if you want to handle an over-hour-long process in a single run. PHP environments usually aren't good for that (unless you control them on your own). Anyway, solution involving MtGox (and requiring either very long runtime or a cron job) wasn't a good one and I suggested changing the design to entirely different one, which doesn't require periodic checks.

Also, there is zero need for PHP here. If the guy wants to continue with a browser-only solution, javascript is enough to provide all he needs.

This is correct. But you need to remember of either not closing the page before the process is finished or you need to use local storage in the browser to keep the data - and then remember to reopen the script to finish the process after deposit has been made.

Blockchain.info wallet API provides a nice callback notifications over HTTP. This way your script can be notified as soon as the deposit is made and finish the second part of the process. This won't be possible using client-side JS only.

Using hosted PHP solution and Blockchain.info API callback, you can start the process by generating a deposit address and then you can send this address to someone else and then close your browser and forget. You don't need to keep your browser open or even be online until that person sends you bitcoins (what might happen half day later). As soon as the other person deposits, Blockchain.info API would notify the script and the script would split bitcoins and distribute them to destination addresses automatically.

moderate
Member
**
Offline Offline

Activity: 98
Merit: 10

nearly dead


View Profile
November 22, 2013, 09:00:23 PM
 #14

Oh dear lord and the incompetence of the self-entitled-good-developers. Blockchain is a very different thing from blockchain.info, the site, anyone claiming to produce any good code related to bitcoin shouldn't me distributing this confusion made by the very newbies.

And where did you see anyone confusing Blockchain with Blockchain.info in this thread, other than you of course? I was writing about Blockchain API that was needed for his original solution involving MtGox to verify that the deposit was actually made. This means an API that provides access to the Blockchain. It could be Blockchain.info which provides such API, but it could be bitcoind that provides such API as well or any other tool that provides API to access Blockchain. I was referring to a general category. Reading with understanding is an important skill. It's like if I wrote about “social network website” or “search engine” and you understood it as “Facebook” or “Google” respectively. Please don't confuse Blockchain with Blockchain.info.


You're just worsening your initial error:



Summarizing: ... then repeatedly talk to Blockchain API to wait for actual deposit


If you are really talking about any kind of API that provides access to the blockchain (and not just trying to correct your error), then you don't wait for an "actual deposit", you wait for blocks. bitcoind has no need to repeatedly "talk to the blockchain", as it has an option for notifying of new blocks.

You were surely not referring to a general category, since you're assuming the way an specific API works. It is important to recognize mistakes (just say it was a typo or a some temporary brain damage, maybe?), instead of trying to fix an error with another one.
moderate
Member
**
Offline Offline

Activity: 98
Merit: 10

nearly dead


View Profile
November 22, 2013, 09:02:10 PM
 #15

Summarizing: the script should talk to
Oh dear lord and the incompetence of the self-entitled-good-developers. Blockchain is a very different thing from blockchain.info, the site, anyone claiming to produce any good code related to bitcoin shouldn't me distributing this confusion made by the very newbies.
Oh dear lord, that from someone who is unable to even get the quotes on this forum right. Roll Eyes
That was not 2weiX in the above quote.

Yes, I incorrectly removed the second most top quote (instead of the top most) and that happened. I had no intention to include the other quote.
Terk
Hero Member
*****
Offline Offline

Activity: 616
Merit: 522



View Profile
November 22, 2013, 10:10:45 PM
 #16

If you are really talking about any kind of API that provides access to the blockchain (and not just trying to correct your error), then you don't wait for an "actual deposit", you wait for blocks. bitcoind has no need to repeatedly "talk to the blockchain", as it has an option for notifying of new blocks.

You still have problems either with logic or with understanding. I write about “script talking to API” and that “this API could be bitcoind”. One plus one together is “script talking to bitcoind”. You understood it as “bitcoind talking to the blockchain” (which is ridiculous).


You were surely not referring to a general category, since you're assuming the way an specific API works. It is important to recognize mistakes (just say it was a typo or a some temporary brain damage, maybe?), instead of trying to fix an error with another one.

I described a general way for checking if a deposit was made using *any* blockchain API (that doesn't necessarily provides notifications), which is repeatedly checking if expected transaction has been made. If you talk about notifications, then it's you who must have some specific API in mind or you're mistaking the blockchain with bitcoind, because blockchain itself doesn't have any notifications and couldn't have - it's just data).

This is EOD with you from my side as I lost interest in feeding online trolls long time ago.

moderate
Member
**
Offline Offline

Activity: 98
Merit: 10

nearly dead


View Profile
November 22, 2013, 10:59:24 PM
 #17

I described a general way for checking if a deposit was made using *any* blockchain API (that doesn't necessarily provides notifications), which is repeatedly checking if expected transaction has been made. If you talk about notifications, then it's you who must have some specific API in mind or you're mistaking the blockchain with bitcoind, because blockchain itself doesn't have any notifications and couldn't have - it's just data).

Nice distortion to try to fix yet another error, but now you just made another mistake, again. The blockchain doesn't have any API, so "blockchain API" is meaningless.

I talked about notifications specially because I mentioned bitcoind along with it, I'm sure you can re-read that. You were talking about repeatedly talking to some API because you had some other API in mind, like blockchain.info which you are trying so hard to avoid, just because of the initial mistake.
Terk
Hero Member
*****
Offline Offline

Activity: 616
Merit: 522



View Profile
November 22, 2013, 11:23:36 PM
 #18

Nice distortion to try to fix yet another error, but now you just made another mistake, again. The blockchain doesn't have any API, so "blockchain API" is meaningless.

Yeah, and payment doesn't have any API, so “payment API” is meaningless. Also maps don't have any API so “maps API” is meaningless. These are categories of products. There are hundreds payment APIs, dozens maps APIs and at least couple blockchain APIs.


You were talking about repeatedly talking to some API because you had some other API in mind, like blockchain.info which you are trying so hard to avoid, just because of the initial mistake.

It's obvious that when I talk about “some API I want to use” then I must have some specific API in mind. Otherwise I couldn't really propose a solution if I didn't know how to implement it (if I didn't know what API to use).

And of course I intended to use blockchain.info API as it's most suitable to use in an unknown environment, as opposed to bitcoind which is impossible to use in most standard hosting environments (because you won't be able to install it and have it running there). That doesn't change the fact that I wrote about generic API to access the blockchain and I never mistaken blockchain with blockchain.info (it's you who started confusing them).

It's like telling “let me search that in the internet” while planning to search in Google, but also knowing that if Google won't be suitable, there are other search engines that I can use. And then @moderate comes and shouts “Ha! you mistake internet with google! You must mean search in google but you wrote about searching in the internet - you clearly don't know what you're taking about”. I'd rather say that the person who thinks “search in internet === search in google” is the one who is confused.

Truly EOD.

moderate
Member
**
Offline Offline

Activity: 98
Merit: 10

nearly dead


View Profile
November 22, 2013, 11:53:58 PM
 #19


It's like telling “let me search that in the internet” while planning to search in Google, but also knowing that if Google won't be suitable, there are other search engines that I can use. And then @moderate comes and shouts “Ha! you mistake internet with google! You must mean search in google but you wrote about searching in the internet - you clearly don't know what you're taking about”. I'd rather say that the person who thinks “search in internet === search in google” is the one who is confused.


I don't get why you are so mad over this, it is like your reputation was hurt by that simple mistake.

Your confusion is that, just like in your example, you think the person pointing out the mistake is the one making the confusion, which clearly is not the case. The person that made the mistake may or may not know what he is talking about (most likely the later, but will go to greater extents to disguise that), the person that pointed the mistake did just that: pointed the mistake.
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!