garavel

Bittorrent speed withdraws on pending

Recommended Posts

hey @techster  let us know the time frame at least. some news floating that exchange will be up by 22-05-2021 is that true... You know that crypto market is going to rough patch that is why asking out of concern

Share this post


Link to post
Share on other sites

I tried to transfer the BTT in the BTFS wallet to CRYPTO, but it just evaporated without a record in the transactions.

Can you tell me why? @techster

Edited by Kinox

Share this post


Link to post
Share on other sites
On 5/18/2021 at 4:53 AM, techster said:

The Exchange hasn't been fully enabled yet. Sorry for that.

We ran it shortly over the weekend and now analyze the data before re-launching and re-filling it.

It's been some days already! Will you log in and provide us with some information? It looking not serious from your side.  I think that will be fair to tell us a real date that the payment system will work finaly! 

  • Like 3

Share this post


Link to post
Share on other sites
57 minutes ago, garavel said:

It's been some days already! Will you log in and provide us with some information? It looking not serious from your side.  I think that will be fair to tell us a real date that the payment system will work finaly! 

I agree with you. Because of the developers, we missed the moment when it was high in price, and now there is no point in withdrawing it, because it is a penny

 

  • Like 1

Share this post


Link to post
Share on other sites

The Exchange service has been down for several days for maintenance and updates. We are still testing the upgraded version of the Exchange to help our users solve existing transfer issues. Thank you for your patience!

  • Like 1

Share this post


Link to post
Share on other sites

@techster We are going to appreciate some clear information on the update of Exchange system. Would be nice to also know how long we have to wait to see it live. Please provide some information for all the members that waiting to hear from you! 

  • Like 7

Share this post


Link to post
Share on other sites

Hello all ! I'am literaly reposting some cool dude material  " Posted by u/lpxxfaintxx "

Here is what really happening behind the scene.

 

Anyways, let's dive right in.

On May 12th, the BTT Speed wallet exchange went down. The announcement was that it was going to be a 2 hour maintenance, but it actually ended up being... more than 2 weeks now. The exchange is still down.

On May 12th, the day of the announced maintenance downtime, a new codebase used to facilitate the uTorrent and BT Client's Web API with the BTT exchange protocol was pushed out to all uTorrent 3.5.5 and BT 7.10.5 clients, regardless of whether you used BTT Speed or not. We stumbled across this by accident as we were attempting to reverse engineer some of their code to improve the back-end ourselves out of frustration. All the evidence and code can still be found and examined yourself in the webUI helper update that was pushed out (located in /AppData/Roaming/uTorrent/ folder)

The BTT Speed wallet uses VueJS so it's not really code you can hide. You can obfuscate, but it seems that they didn't even attempt that. The Findings:

New API Endpoints (lines 2423 - 2456):

// GET REQUESTS

email: {
				get: {},
				post: {}
			},
			"binance/binance_info": {
				get: {},
				post: {
					body: String
				}
			},
			"binance/quote_info": {
				get: {},
				post: {
					params: {
						crypto_currency: String,
						base_currency: String,
						fiat_currency: String,
						requested_amount: String,
						pay_type: String,
						quote_id: String
					}
				}
			},
			"binance/create_transaction": {
				post: {
					params: {
						order_id: String,
						quote_id: String
					}
				}
			},
			"binance/recent_transactions": {
				get: {}
			}

New VueJS Functions:

			fetchEmailInfo: {
				type: Function,
				default: function () {}
			},
			emailInfo: {
				type: Object,
				default: function () {
					return {
						email: String,
						isVerified: Boolean
					}
				}
			},
			createAndApproveQuote: {
				type: Function,
				default: function () {}
			},
			checkBinanceUserStatus: {
				type: Function,
				default: function () {}
			},
			preCheckRedirectUrl: {
				type: String,
				default: ""
			},
			bindRedirectUrl: {
				type: String,
				default: ""
			},
			fetchBinanceTransactions: {
				type: Function,
				default: function () {}
			},
			binanceTransactions: {
				type: Object,
				default: function () {
					return {
						total: 0,
						rows: []
					}
				}
			},

New Vue Data, Compute, and Misc Methods:

		data: function () {
			return {
				cryptoCurrencyStr: "",
				baseCurrencyStr: "",
				isValidatorEnabled: !1,
				step: 1,
				email: "",
				emailMessage: "Please check your email inbox to verify.",
				isEmailInvalid: !1,
				isLoading: !1,
				binancePoolInterval: null,
				redirectTimeout: 5,
				showTransferSuccessModal: !1,
				alert: {
					alertFirstMessage: "",
					alertSecondMessage: "",
					type: "",
					isShow: !1
				}
			}
		},
		computed: {
			currentBalance: function () {
				return c.default.formatMicroTokenToLocale(this.inAppBalance, {
					minimumFractionDigits: 0
				})
			},
			maxTransactionAmount: function () {
				return this.transactionLimits.max
			},
			minTransactionAmount: function () {
				return this.transactionLimits.min
			},
			cryptoCurrencyAmount: function () {
				return c.default.isValidToken(this.cryptoCurrencyStr, "token") ? c.default.convertToMicroToken(this.cryptoCurrencyStr) : 0
			},
			baseCurrencyAmount: function () {
				return c.default.isValidToken(this.baseCurrencyStr, "token") ? c.default.convertToMicroToken(this.baseCurrencyStr) : 0
			},
			localeExchangeRate: function () {
				return c.default.formatMicroTokenToLocale(1 / this.exchangeRate, {
					minimumFractionDigits: 0
				})
			},
                
        
                    ........

			}
		},

		created: (l = v(regeneratorRuntime.mark((function e() {
			return regeneratorRuntime.wrap((function (e) {
				for (;;) switch (e.prev = e.next) {
					case 0:
						this.getInitialData(), this.startPoolBinance(), this.handleGAEvent("QuotePageScreen");
					case 3:
					case "end":
						return e.stop()
				}
			}), e, this)
		}))), function () {
			return l.apply(this, arguments)
		}),
		destroyed: function () {
			clearInterval(this.binancePoolInterval)
		},
		methods: {
			getInitialData: (s = v(regeneratorRuntime.mark((function e() {
				return regeneratorRuntime.wrap((function (e) {
					for (;;) switch (e.prev = e.next) {
						case 0:
							return this.handleLoading(!0), e.prev = 1, e.next = 4, Promise.all([this.fetchEmailInfo(), this.fetchExchangeRate()]);
						case 4:
							return e.next = 6, this.handleFetchBinanceTransactions();
						case 6:
							e.next = 11;
							break;
						case 8:
							e.prev = 8, e.t0 = e.catch(1), this.handleLoading(!1);
						case 11:
							this.handleLoading(!1);
						case 12:
						case "end":
							return e.stop()
					}
				}), e, this, [
					[1, 8]
				])
			}))), function () {
				return s.apply(this, arguments)
			}),
			startPoolBinance: function () {
				var e = this;
				this.binancePoolInterval = setInterval((function () {
					1 === e.step && e.fetchExchangeRate()
				}), 1e4)
			},



                                    ........


			},
			goNext: (o = v(regeneratorRuntime.mark((function e() {
				return regeneratorRuntime.wrap((function (e) {
					for (;;) switch (e.prev = e.next) {
						case 0:
							if (this.thiscryptoCurrencyStr || this.baseCurrencyStr || (this.isValidatorEnabled = !0), !this.isInvalidBaseCurrency) {
								e.next = 3;
								break
							}
							return e.abrupt("return");
						case 3:
							if (this.handleGAEvent("QuotePageBuyClick"), this.emailInfo.isVerified && this.emailInfo.email) {
								e.next = 7;
								break
							}
							return this.handleStepChange(2), e.abrupt("return");
						case 7:
							return this.handleLoading(!0), e.next = 10, this.handleCheckBinanceUserStatus();
						case 10:
							if (!this.bindRedirectUrl) {
								e.next = 13;
								break
							}
							return this.handleLoading(!1), e.abrupt("return");
						case 13:
							return e.next = 15, this.handleCreateAndApproveQuote(3);
						case 15:
						case "end":
							return e.stop()
					}
				}), e, this)
			}))), function () {
				return o.apply(this, arguments)
			}),
			handleStepChange: function (e) {
				e !== this.step && (this.step = e)
			},
			handleCheckBinanceUserStatus: (i = v(regeneratorRuntime.mark((function e(t) {
				return regeneratorRuntime.wrap((function (e) {
					for (;;) switch (e.prev = e.next) {
						case 0:
							return e.next = 2, this.checkBinanceUserStatus(this.emailInfo.email, this.isBackendProd);


                        ...............


			},
			handleLoading: function (e) {
				this.isLoading = e
			},
			handleFetchBinanceTransactions: (r = v(regeneratorRuntime.mark((function e() {
				return regeneratorRuntime.wrap((function (e) {
					for (;;) switch (e.prev = e.next) {
						case 0:
							if (!this.emailInfo.email) {
								e.next = 5;
								break
							}
							return this.handleLoading(!0), e.next = 4, this.fetchBinanceTransactions(this.emailInfo.email, this.isBackendProd);

					}
				}), e, this)
			}))), function () {
				return r.apply(this, arguments)
			}),
			closeTransferSuccessModal: function () {
				this.showTransferSuccessModal = !1
			},

New Vue Front-End Components and Helpers:

			columns: function () {
				return [{
					label: this.$t("Date & Time"),
					field: "created_time",
					width: "160px"
				}, {
					label: "Pay",
					field: "requested_amount",
					type: "number",
					thClass: "binance-table-th-content-center",
					tdClass: "binance-table-td-content-center"
				}, {
					label: "Receive",
					field: "obtain_amount",
					type: "number",
					formatFn: this.formatAmount,
					thClass: "binance-table-th-content-center",
					tdClass: "binance-table-td-content-center"
				}, {
					label: "Status",
					field: "status",
					width: "100px",
					thClass: "binance-table-th-content-center",
					tdClass: "binance-table-td-content-center"
				}]
			},
			filterCheckedArr: function () {
				return this.filterArr.filter((function (e) {
					return e.isChecked
				})).map((function (e) {
					return e.name
				}))
			}

                
                ............................

		created: function () {
			this.checkPreCheckRedirectUrl(), this.handleGAEvent("PaymentPageScreen")
		},
		mounted: function () {
			this.waitUntillIframeLoaded()
		},
		methods: {
			checkPreCheckRedirectUrl: function () {
				this.preCheckRedirectUrl.length
			},
			waitUntillIframeLoaded: function () {
				var e = this;
				document.getElementById("binance-iframe").addEventListener("load", (function () {
					e.handleLoading(!1)
				}))
			}
		}
    
                        ........................

[e._v("\n            You will be redirected to Binance to complete the verification process after " + e._s(e.redirectTimeout) + " sec\n        ")])]) : e._e(), e._v(" "), e._e(), e._v(" "), e.showTransferSuccessModal ? n("wallet-buy-success-modal", {
				attrs: {
					handleModalCancelClick: e.closeTransferSuccessModal
				}
			}) : e._e(), e._v(" "), 1 === e.step ? [n("div", {
				staticClass: "wallet-buy-step-1"
			}, [n("bt-card", {
				staticClass: "exchange-sell-card"
			}, [n("div", {
				staticClass: "card-item-grid"
			}, [n("div", {
				staticClass: "sub-card"
			}, [n("div", {
				staticClass: "title"
			}, [e._v("PAY")]), e._v(" "), n("div", {
				staticClass: "balance center"
			}, [n("bt-select", {
				attrs: {
					options: {
						first: {
							nativeName: "USD",
							value: "USD"
						}
					}
				}
			}, [n("div", {
				staticClass: "option-selected",
				attrs: {
					slot: "option-selected"
				},
				slot: "option-selected"
			}, [n("div", {
				staticClass: "text"
			}, [e._v("\n                                        USD\n                                    ")])])]), e._v(" "), n("bt-input-box", {
				staticClass: "amount",
				attrs: {
					inputType: "crypto",
					"data-testid": "sell",
					placeholder: "0.00",
					message: e.baseCurrencyMessage,
					showMessage: e.isInvalidBaseCurrency,
					isInvalid: e.isInvalidBaseCurrency
				},
				on: {
					input: e.updateCryptoCurrencyStr
				},
				model: {
					value: e.baseCurrencyStr,
					callback: function (t) {
						e.baseCurrencyStr = t
					},
					expression: "baseCurrencyStr"
				}
			})], 1)])])]), e._v(" "), n("svg-icon", {
				staticClass: "arrow-forward-icon",
				attrs: {
					icon: "arrow-forward"
				}
			}), e._v(" "), n("bt-card", {
				staticClass: "exchange-buy-card"
			}, [n("div", {
				staticClass: "card-item-grid"
			}, [n("div", {
				staticClass: "sub-card"
			}, [n("div", {
				staticClass: "title"
			}, [e._v("Estimated Receive")]), e._v(" "), n("div", {
				staticClass: "balance center"
			}, [n("div", {
				staticClass: "buy-btt-box"
			}, [n("div", {
				staticClass: "buy-btt-box-top"
			}, [n("svg-icon", {
				staticClass: "speed-icon",
				attrs: {
					icon: "speed"
				}
			}), e._v(" "), n("span", [e._v("BTT in-app")])], 1), e._v(" "), n("div", {
				staticClass: "buy-btt-box-bottom"
			}, [n("span", [e._v(e._s(e.currentBalance))])])]), e._v(" "), n("bt-input-box", {
				staticClass: "amount",
				attrs: {
					inputType: "crypto",
					"data-testid": "buy",
					placeholder: "0.00"
				},
				on: {
					input: e.updateBaseCurrencyStr
				},
				model: {
					value: e.cryptoCurrencyStr,
					callback: function (t) {
						e.cryptoCurrencyStr = t
					},
					expression: "cryptoCurrencyStr"
				}

                ..................

		a = [function () {
			var e = this,
				t = e.$createElement,
				n = e._self._c || t;
			return n("div", {
				staticClass: "top"
			}, [n("span", {
				staticClass: "top-title"
			}, [e._v("Email Verification")]), e._v(" "), n("span", {
				staticClass: "content-text"
			}, [n("p", [e._v("\n                    To continue, please provide a valid email address. If you already have a Binance account, please use\n                    the same one.\n                ")]), e._v(" "), n("p", [e._v("\n                    This service is provided in collaboration with\n                    "), n("a", {
				attrs: {
					href: "https://www.binance.com/",
					target: "_blank"
				}
			}, [e._v("Binance")]), e._v(" in accordance with our\n                    "), n("a", {
				attrs: {
					href: "https://www.bittorrent.com/legal/privacy-policy/",
					target: "_blank"
				}
			}, [e._v("Privacy Policy")]), e._v(".\n                ")])])])
		}]

... and it goes on, with 70 more mentions of "Binance" in the following 60,000 lines of code that follows.

Okay, fast forward to more than 2 weeks later. The uTorrent forum, and BTT Speed communities are furious and getting very impatient about the exchange downtime. To understand a bit more, we'll get into how we are able to transfer BTT from uTorrent/BTorrent into our actual wallets.

  1. An API request is sent to the Tron network using your wallet and private key (this is done automatically when you make a withdrawal request)

  2. The exchange wallet (TA1EHWb1PymZ1qpBNfNj9uTaxd18ubrC7a) then processes the request, and sends real BTT to your wallet on-chain.

  3. Since May 12th, the exchange wallet has mostly been empty of BTT, frustrating seeders and not allowing people to withdraw.

  4. Yesterday, the exchange wallet was refilled with a considerable amount of BTT, more than the little amounts they filled here and there. If my memory serves correctly, it was around the ballpark of 50-200 million tokens (too lazy to go check atm, but it was enough for the exchange to come back online for a few hours).

  5. Of course, I began analysis right away, especially w/ monitoring the API calls being made and network traffic.

And sure enough, there was plenty of chatter going back and forth that mentioned Binance. The temporary opening of the exchange was most likely devs doing more testing.

I'm not the type to spread baseless FUD or pump-designed news, but I think there's evidence beyond reasonable doubt that an official BTT Speed wallet <> Binance exchange partnership or integration is coming soon. I know there's both a buy and sell function, but I can't speculate further on the exact nature of this direct integration, nor the official announcement date, but all the code and evidence is there. Yesterday's API activity was confirmation that there is indeed an API server out there that is responding to the newly added API calls and functions. So it's not just BTT dev(s) writing non-sense Binance related code into the BTT Speed backend. People also noticed that huge amounts of BTT were being moved to a few wallets, which was highly suspicious. However, it appears that those wallets actually belong to Binance.

What's concerning: the initial code was pushed out on the 12th, but the exchange is yet to be back online, not a SINGLE dev has come out and explained why, PR is absolutely silent about the matter and posting memes on Twitter. They posted job listings for BTT Speed devs AFTER the failure to launch within the 2 hour timeframe that they initially announced, and it is clear that they are seriously lacking power in the JS dev department whether in SF or Asia. Something has either 1) gone horribly wrong to the point that they couldn't fix it in almost 3 weeks now, 2) the Binance integration isn't going as planned, and they are re-thinking the exchange protocol; 3) I don't fucking know.

What's promising: although it seems that there is no activity going on in the world of BTT Speed, it is clear that they are up to something, though normal every day people don't get to see it because it's hidden in (a bit shitty) code. Nonetheless, a direct uTorrent/BitTorrent client <> Binance integration would be definitely be something that would propel the BTT ecosystem in the long-term.

Closing thoughts: I'm sorry for waiting all this time to share this with you guys, but I thought everyone could use a little bit of good news. Tron is in so many projects right now I don't blame Justin for not making BTT a priority, but it would be an insult to all the OG uTorrent and BT protocol developers that worked tirelessly on what we can call one of the first "decentralized" networks if he just let it die out. They had two years to make improvements to the BT clients, as well as the BTT protocol, but there was been literally almost no changes, improvements, or upgrades in nearly 3 years since BitTorrent was acquired by Tron. Integration with Binance is great, but I want to see the protocol improve, because right now it's a mess. Hopefully this extremely prolonged downtime and the thousands of complaints pouring in is a wake up call to them. Let's keep pushing the team to work hard. Both on BTT Speed and BTFS.

 

 
 
 
  • Like 3
  • Thanks 3

Share this post


Link to post
Share on other sites

Justin Sun wrote that he will complete the "TRC20" integration on June 10, maybe we are very close to the end. I do not know

Edited by BEMRE
  • Like 1
  • Haha 1

Share this post


Link to post
Share on other sites

@techster Isn't it time to finaly share some news with us ? Please share some updates regarding the payment system and when the dev team planning to bring it back online. It's getting annoying to play hide and seek with refresh button , checking if there is some changes in wallet. It's been a lot of time that you didnt show up and share, so please  give some information. 

Share this post


Link to post
Share on other sites
On 6/4/2021 at 11:13 AM, BEMRE said:

Justin Sun wrote that he will complete the "TRC20" integration on June 10, maybe we are very close to the end. I do not know

That's just a bad joke, nothing works properly. Also, if you try to message him on facebook to point out the obvious problems of BTT Speed, all you get is an automated standard response. They took our little gains and filled their pockets. They don't care about the people, all they're interested in is their own personal gain.

Share this post


Link to post
Share on other sites

Let me help you guys . STOP SPAMMING @techster оr ask whether the exchange service will be restored .... There is a section called "ACTIVITY" - click it before spam or create another useless topic ...

  • Haha 1
  • Confused 1

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.