-
Notifications
You must be signed in to change notification settings - Fork 175
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Epic: Account Creation Engine V1 #1752
Comments
I see a couple of potential issues with this approach:
One way to limit abuse of 'free account creation' may be to require users to limit the number of free accounts that a user can create, and require that the user verifies this with an email or phone number. This would be inconvenient for any seed phrase and ledger users, but may be the price you pay for a free account.
Above options are not bullet proof, but seem to offer a bit higher barrier for abuse. |
I agree that we should never grant an account to a user with full access only to have it reclaimed or revoked. This is unexpected (no matter how much it is explained beforehand), and also makes the user feel like there is a central authority that can modify their account access at any time. My opinion is that if we are going to require that a user funds their own account, then we should require this before the account is created. There is no benefit for the user to create an account only to then require them to fund the account in order to retain access. This pivot makes me question our original intent with reCAPTCHA. I understand that we need to address the fact that the current implementation can be abused, but if we knew that this would occur and that we would have to inevitably revert to a user-funded solution, I guess I'm missing what our goals were? My understanding was that we wanted to eliminate the need for users to fund their own accounts since this is not a one-click process. Now we are saying that we need to reintroduce the requirement for users to fund their own accounts, which to me seems to go against the intent of the reCAPTCHA implementation. |
reCaptcha was put there as a temporary measure to allow account creation without today's friction, while we can work on a more structured onboarding process that can properly mitigate all adversarial scenarios (sweeping funds and namesquatting). Re original intent: we still have users that get confused when they fund their account, opening ticket such as:
Please note the funding step: this is not a "free account creation", this is a way to avoid the funding step. I'm open to having a different and easier flow than the above. I support the idea of having the funding only via one-time email and SMS, although you probably know that Gmail supports the TL;DR: this is not a free account creation filtered by a reCaptcha. This is a different onboarding approach that still requires the funding step - but without the confusing change of the address. Incidentally, this way of creating accounts introduced namesquatting, and we are here now to mitigate that problem =) |
I think it's important how we frame it. I don't think we should give the user any indication that their account is actually claimed before it's been properly funded. So once the user has finished setting up their recovery method, we'd show them something like "Almost there... now send at least 1 NEAR to {accountId} within 48 hours to claim it." However, even in this case, some users will end up sending NEAR to their account ID after the 48 hour period, and they'd lose the funds and account. |
True, I can see the issue with that. 48 hours is an arbitrary number that can be adjusted, we may just have to measure the actual gap between reserving the name and paying for it. In that case, the user may try again to register the named account or take the risk of being "front-runned" as soon as the name becomes available again. This is anyway an issue for real humans, and would anyway mitigate the risks of having a bunch of names squatted almost for free (at the cost of solving a reCaptcha) |
Cool yeah we're on the same page @stefanopepe. I forgot about the changes we intially proposed to funding implicit vs named 👍 Wanted to share a revised flow here to see what everyone thinks. There are still some rough edges here, but I wanted to address the critical path, so please ignore small details and try to focus on the order of events + copy. |
I think this is an improvement over current funding flow. However, it seems that with any type of temporary reservation of account ID, implicit account/funding address, etc. we inevitably risk causing issues for some users as some users will think that they control the account before completing all the steps. I think it's easy to just assume that if I send funds to the indicated account ID/address (at any point), I've secured my account and do not have to take additional actions to complete the process. I'm not sure if the user actually has to 'claim my account' once the funds have arrived - what is the action that the user is actually taking there? cc @vgrichina. Could we skip the middle step all together? |
@Patrick1904 you're right that this step may not be necessary from a technical perspective. The goal here is to show the user that their initial deposit was successfully received and that their account has been activated. It's really just a form of reassurance and confirms their initial deposit details and account activation. Alternatively, we can combine this with the "Welcome to NEAR" screen. |
@Patrick1904 I suppose this is not too different from registering a domain name: the fact that Since we have the "chicken and egg" problem of paying fees upfront to record the wallet address name, we need this additional step (along with @vgrichina contract) to avoid an overflow of fake users who simply squat names without really using them. |
Yep fair point. I think the fact that the user receives the 'keys' to the account, especially the way we send the recovery email, does imply that the user has secured the account already. Same with Ledger, I've secured the key, so I assume that I now own the key.
That makes sense. Even if we have to make an additional action after the account has been funded, we could do it in the background, and as @corwinharrell suggested, combine the two steps if possible. We're already listening for the account to get funded in the background. |
Here's what the different end states look like now (without the extra welcome screen @Patrick1904). I'll be adding some iconography potentially to better communicate the failed state, but just wanted to get the copy in.
|
Looks great to me - assuming that the user won't have to take any additional chain action after sending enough funds to the account. That would be great because then it doesn't matter if the user comes back to the funding page again (after sending on binance, etc.), which seems to happen quite often. |
I haven't read the whole thread but just wanted to chime in:
This is generally a setup for many many users loosing their assets. Users will ignore this and will not expect their account to disappear after some time. This is not something that happens in ANY other experience. Not in web2, real world or especially in crypto (where your keys -> your crypto). Here are examples of failure modes:
Faucet is fine as a short term solution to create accounts for people and fund the storage for them. |
@ilblackdragon thanks for your feedback! The idea is to keep the account on hold until it gets funding. Essentially, until some tokens are deposited there's no way to access the dashboard and perform a login (to authorize transfers) like today. The 48 hours window is arbitrary and can be easily extended to a few weeks, or even one year. The final account creation experience won't be too different from the current one, with a funding step that asks deposits to the named account instead of the implicit one (see the UI at #1752 (comment)). The experience shouldn't be too far from ENS, where you check if a name is available, wait for the on-chain consensus (in our case, a transaction by From what I could test, when an account is manually deleted the transfer will fail with an RPC error Corner cases I thought of:
The solution proposed by @vgrichina is to list expired names on Near Bet, but this wouldn't prevent the problem at 1. Solutions/Mitigations:
Right now we have already one or more bots iteratively processing long lists of names, countries, famous brands (you name it) and I don't want to run this feature without this important passage. |
The most recent version of the design/UX for this can be seen here As @stefanopepe mentioned above, we can easily decide to extend the "reservation window" to be any length of time and to omit explicit references to this window, which in my opinion is the best solution here without adding additional overhead. That being said I just wanted to get this in front of everyone for feedback. I've spent a good amount of time on the UX and copy here and am fairly pleased with the language and how things are articulated in the context of the flow. I also believe all edge cases have been accounted for, but please feel free to point anything out that might have been missed. |
I think regardless of how long we make the window, there will inevitably be some users that do not follow instructions and end up losing access to funds or/and accounts. It feels risky for me as a user to have to rely on checking to make sure I've actually secured my account within the time period, whether it's 48 hrs or more. I very much prefer to give users the opportunity to claim a named account at creation, however, if we considered giving users an implicit account at first, and then make it super easy for users to create named accounts post account creation, using their implicit account for funding, we would essentially eliminate the issues. It could look something like this:
There's a few pro's with this approach:
The main con that I see with this approach is that we're not making the named account the primary option, even though it's a great NEAR feature, though it eliminates a lot of risks and potential confusion. |
I agree with this concern. We for sure cannot be letting in users immediately into account for such faucet. They should see funding screen any time they try to do any interaction, including when using recovery method to recover account.
User cannot do it before funding account and adding full access key.
User cannot do it before funding account and adding full access key. @ilblackdragon I feel like you are assuming that with I think the worst potential failure mode here is like following (far less probable than what we are seeing with implicit accounts IMO):
This can be mitigated if we reserve a specific suffix for accounts (say |
So this is not solving the problem that faucet and implicit account are solving - get an account that people can use in other apps even without immediate funding. We are adding more and more options that allow people to either send assets from Ethereum or to earn directly. Generally, we should be reducing friction to onboard people instead of increasing it. If we have a solution that doesn't involve breaking people's flow - let's do it otherwise let's do implicit accounts and stop this unending discussion. |
Name squatting is not really an issue for .near but introducing a 1m delay between account creation on the same IP address can reduce this very dramatically without much user hit. |
Sharing the latest iteration with the removal of language around the "reservation window". This way, users get a better impression that their account has been successfully created even before an initial deposit, but that it is still required to make use of the wallet. @stefanopepe, @Patrick1904 and I discussed this earlier today, and are looking for a bit of clarity around the strictness of the limitation that we are placing on the account before the user has made an initial deposit. If I understand correctly, we will persist the QR code screen until the user makes an initial deposit, and the user will not be able to interact with their wallet until this condition is met. Is this correct? @Patrick1904 you can weigh in here on the technical considerations of a "hard block". |
Given bridge and other tools can receive tokens based on just account id -
a user can easily register, not read the memo and ask a friend and or use
bridge UI that doesn't require to login to send tokens to this account.
The example with I think I've registered illia.near, and then ask a friend
to send me to that account 100k DAI is very simple.
Given you are breaking every single pattern that people are used to (after
registering, one forever has an account) - I am still completely against
anything temporary in account flow. Let's start moving into simplifying
cognitive load on the user, not making it more complex.
…On Mon, May 24, 2021 at 10:48 AM Corwin Harrell ***@***.***> wrote:
Sharing the latest iteration with the removal of language around the
"reservation window". This way, users get a better impression that their
account has been successfully created even before an initial deposit, but
that it is still required to make use of the wallet.
[image: Screen Shot 2021-05-24 at 1 41 45 PM]
<https://user-images.githubusercontent.com/5934188/119386963-45607e00-bc96-11eb-9576-64f7d4927301.png>
@stefanopepe <https://github.com/stefanopepe>, @Patrick1904
<https://github.com/Patrick1904> and I discussed this earlier today, and
are looking for a bit of clarity around the strictness of the limitation
that we are placing on the account before the user has made an initial
deposit. If I understand correctly, we will persist the QR code screen
until the user makes an initial deposit, and the user will not be able to
interact with their wallet until this condition is met. Is this correct?
@Patrick1904 <https://github.com/Patrick1904> you can weigh in here on
the technical considerations of a "hard block".
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#1752 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AABK27QYDXFY3CZYA2L3533TPKGPRANCNFSM4444OO7Q>
.
--
Best regards,
Illia Polosukhin
|
@ilblackdragon I'm leaning on @stefanopepe here to provide context on the resolutions you two have arrived at during your discussions regarding this work, but I do have a couple of questions:
|
I suggest we add a flag in our Proposed changes:
|
To keep the ball rolling, I decided to move to an intermediate step that will ask the user to fund the account before giving access to the dashboard. |
@Patrick1904 👍 that'll do it! I think it's our best option without having something added to e.g. the wallet indexer that keeps track of whether a coin-op funded account has ever had funds sent to it.
|
Not sure how exactly you can use implicit account in apps without funding, may you elaborate?
The only option so far that allows to send assets from Ethereum without having funded NEAR account before is Liquality which has it's own implicit account support (as do multiple other third party wallets BTW).
Letting users roll with implicit accounts creates extra friction towards them getting
I feel like we screwed up with introducing implicit accounts in general vs support to fund accounts at protocol level. So that you could send NEAR tokens to some special address like
Not sure what do you mean by "doesn't involve breaking people's flow". We at some point have to break user's flow for them to pay for gas or somebody has to pay for gas for them, implicit or non-implicit accounts. |
@ilblackdragon I agree with this concern. I think I commented elsewhere on potential solution (but somehow cannot find it).
|
The discussion went off-topic and it's hard to extrapolate actionable feedback around the problem statement. While I agree we have a wide margin to improve the implicit account management (see #1453), this is not the thread to discuss such a feature.
Actionable items:
|
Just a follow-up note after chatting with @Patrick1904 about complexity of the current wallet frontend changes, and @stefanopepe about release schedule, and with a consideration that Monday is Memorial Day holiday in the USA. Our intention is to be able to test the new code on Tuesday (06/01), with a possible release late on Tuesday or perhaps Wednesday, depending on what (if any) issues we shake out during testing. However, we can add some funds to |
Update: There are 4 related 'amounts of NEAR':
A. We're going to start using the same amount of tokens for #1, #2, and #3. Up until now, implicit accounts asked to send at least 1 near, but the staking and send pages showed that a minimum account balance of
From the user's perspective:
|
Problem
With V0, we wanted to streamline the account creation, allowing users to create their
.near
wallet without sending funds in advance - lowering the friction for account creation. The original problem was going through the legacy process of: implicit account creation > funding > deleting implicit account > sweeping funds to named account.With V0 the wallet provides a minimal amount of tokens, just enough to pay for the gas and the storage fees, allowing the user to select any desired name after solving a simple reCaptcha.
As we know, reCaptcha is a weak barrier against sybil attacks, so we end up enabling automated bots "namesquat" the entire
.near
namespace, without never really using these accounts.The Account Creation Engine V1 will mitigate the issue by keeping the named account availability on hold until the user sent additional tokens to it.
Related roadmap item: near/near-wallet-roadmap#20
How did we discover this problem?
By surfing the explorer at the address https://explorer.near.org/accounts/coin-op.near we can see the list of created accounts in real-time.
So far, a large portion of them lies there empty/unused, with costs in terms of blockspace and availability for future and more engaged users.
Acceptance criteria (needs to be triaged)
.near
nameHave a countdown of 48 hours to complete the transfer, or the name will be claimed backWhat are we planning to do about it?
.near
account, releasing it when it receives the fundsOverall, we have to:
What are we not planning to do about it?
Resources
NOTE: this is pre-release, needs review by @corwinharrell for UX and @MaximusHaximus for coding
The text was updated successfully, but these errors were encountered: