Can't Transfer OneName to Blockstack CLI

My OneName is “rawkode” and I’ve tried using the website to transfer. I got my address from running “blockstack import”.

OneName seems to think my profile is pending some change, and told me to wait 12 hours. I’ve waited about 3 months and gave up, but keen to resolve this now.

Thanks for posting @rawkode and happy to help you with your transfer.

Sometimes the exports get stuck and we can check on this for you. Tagging @muneeb on this one as well.

@rawkode Thanks for posting and sorry to hear that you had issues earlier. We’ll take a look.

Thanks. Hopefully something simple :slight_smile:

@rawkode I looked into this and can confirm that your name is not in the transfer queue. Your name was transferred out of onename.com in BLOCK #449730.

The reason why onename.com/rawkode is saying “profile pending” is because your data on the resolver and onename.com differs. The resolver is not resolving your profile data because your owner address has changed and the data is still signed by the previous key. We do this for security. You need to sign the data with the new owner key and upload it again for the profile to resolve.

Let us know if you need help. Thanks,

Sorry, I’m not entirely sure what that means.

Can you let me know what commands to perform?

Pinging @muneeb, any links to docs on how to do this or some commands would be great

Still looking for help with this, @ryan @muneeb

@rawkode Sorry for the delay. What this means is that you need to update your profile data and re-sign it with the new keys.

We’re working on an improved profile update command that makes it easy to do this. We’ll have a step-by-step command-line wizard that helps to generate a new valid profile.

With that said, here are the manual steps:

Take a look at https://resolver.onename.com/v2/users/rawkode, current output there is:

{
“rawkode”: {
“profile”: {},
“verifications”: [],
“zone_file”: "$ORIGIN rawkode.id\n$TTL 3600\n_http._tcp URI 10 1 "https://blockstack.s3.amazonaws.com/rawkode.id"\n",
“owner_address”: “1JNQFBEBQDLMTwaTVGFcNfADceBehfK2a4”
}
}

This means that your owner address is 1JNQFBEBQDLMTwaTVGFcNfADceBehfK2a4 and your zonefile is:

$TTL 3600
_http._tcp URI 10 1 "https://blockstack.s3.amazonaws.com/rawkode.id"```

If you go to https://blockstack.s3.amazonaws.com/rawkode.id you'll see that there is data there but it's signed by your old owner keypair. You need to generate your new profile data. This is where a step-by-step wizard can be really helpful. There are two packages [blockstack-profiles-js](https://github.com/blockstack/blockstack-profiles-js) and [blockstack-profiles-py](https://github.com/blockstack/blockstack-profiles-py) that can be used to create and sign a valid profile.

You can upload your data to your storage backend like S3. Let's assume you got the bucket "rawcode" then your URL would look something like https://rawcode.s3.amazonaws.com/rawkode.id. 

You can then create a new zonefile like:

```$ORIGIN rawkode.id
$TTL 3600
_http._tcp URI 10 1 "https://rawcode.s3.amazonaws.com/rawkode.id"```

And use the step in this [update tutorial](https://www.youtube.com/watch?v=wA01UJwu7CY&t=220s&list=PLXS8JJHIn4nGCU2uW85dHXpkQJ7QA5JkX&index=5) to update your zonefile. 

We realize that the manual steps are not user-friendly at all and we're working on automating this process for the users. I've started a [Github issue](https://github.com/blockstack/blockstack-core/issues/278) and you can track it to see when the new automated way of doing this gets merged. Once again thanks for your patience while we iron out the UX.
2 Likes

I’d also point out that @jude has been working on giving users a “default storage bucket” so that they can skip the steps about creating their own storage buckets at providers and then linking them. This would make the process similar to how users sign up on the Onename app and get a default storage space. Ideally, all users should use their own storage and not trust public default storage places provided by services.

OK. I’ve followed all these steps and made progress, but I’m at a loss again.

Re-exec /usr/bin/blockstack with ['/usr/bin/blockstack', 'lookup', 'rawkode.id']
[2017-04-06 16:48:56,501] [DEBUG] [spv:103] (2295.139767080576064) Using mainnet
[2017-04-06 16:48:56,558] [DEBUG] [client:86] (2295.139767080576064) Connect to node.blockstack.org:6264
[2017-04-06 16:48:56,587] [DEBUG] [client:120] (2295.139767080576064) Loaded storage driver "disk"
[2017-04-06 16:48:56,588] [DEBUG] [client:120] (2295.139767080576064) Loaded storage driver "blockstack_resolver"
[2017-04-06 16:48:56,588] [DEBUG] [client:120] (2295.139767080576064) Loaded storage driver "blockstack_server"
[2017-04-06 16:48:56,589] [DEBUG] [client:120] (2295.139767080576064) Loaded storage driver "http"
[2017-04-06 16:48:56,589] [DEBUG] [client:120] (2295.139767080576064) Loaded storage driver "dht"
[2017-04-06 16:48:58,328] [DEBUG] [storage:114] (2295.139767080576064) Comparing zonefile hashes: expected b5d3de50124501b8565d5ab86a33a55aa019e612, got b5d3de50124501b8565d5ab86a33a55aa019e612 (True)
[2017-04-06 16:48:58,328] [DEBUG] [zonefile:226] (2295.139767080576064) Fetched b5d3de50124501b8565d5ab86a33a55aa019e612 from Atlas peer node.blockstack.org:6264
[2017-04-06 16:48:58,338] [DEBUG] [storage:571] (2295.139767080576064) get_mutable_data rawkode.id fqu=None
[2017-04-06 16:48:58,338] [DEBUG] [storage:613] (2295.139767080576064) Try http (https://www.rawkode.com/blockstack.id)
[2017-04-06 16:48:59,785] [WARNING] [storage:354] (2295.139767080576064) Failed to verify with public key hash "1JNQFBEBQDLMTwaTVGFcNfADceBehfK2a4" ("1JNQFBEBQDLMTwaTVGFcNfADceBehfK2a4")
[2017-04-06 16:48:59,786] [ERROR] [storage:646] (2295.139767080576064) Unparseable data from "https://www.rawkode.com/blockstack.id"
[2017-04-06 16:48:59,786] [DEBUG] [profile:290] (2295.139767080576064) WARN: no user profile for rawkode.id

@muneeb, I decided instead of S3, to host on my website. I even paid the bitcoins to update the whois (Why is that?!) and it still doesn’t work :frowning:

Hey @rawkode, you did everything right. There’s just one more step you have to take, and that is to re-sign your profile with your new private key (i.e. not the one Onename used) and upload that to your S3 bucket.

To do so, run the following:

$ # get your profile
$ curl https://www.rawkode.com/blockstack.id > /tmp/blockstack.id
$ blockstack set_advanced_mode on
$ blockstack wallet | grep "owner_privkey"  # remember this ECDSA private key as $OWNER_PRIVKEY
$ blockstack sign_profile /tmp/blockstack.id $OWNER_PRIVKEY > /tmp/new_blockstack.id
$ # verify the signature worked
$ blockstack verify_profile rawkode.id /tmp/new_blockstack.id

Once that works, you can put /tmp/new_blockstack.id into your S3 bucket, and blockstack lookup should work as expected.

Hope this helps!

Thanks for replying @jude! I tried those commands, but I get

{
    "error": "Invalid public key"
}

Thanks for getting back to me, @rawkode!

Can you tell me which step produced this error? Could you retry that step with --debug passed, so we can see more output? Thanks!

Re-exec /usr/bin/blockstack with ['/usr/bin/blockstack', 'verify_profile', 'rawkode.id', '/tmp/new_blockstack.id']
[2017-04-06 22:26:11,500] [DEBUG] [spv:103] (21928.140533006365760) Using mainnet
[2017-04-06 22:26:11,558] [DEBUG] [client:86] (21928.140533006365760) Connect to node.blockstack.org:6264
[2017-04-06 22:26:11,574] [DEBUG] [client:120] (21928.140533006365760) Loaded storage driver "disk"
[2017-04-06 22:26:11,574] [DEBUG] [client:120] (21928.140533006365760) Loaded storage driver "blockstack_resolver"
[2017-04-06 22:26:11,574] [DEBUG] [client:120] (21928.140533006365760) Loaded storage driver "blockstack_server"
[2017-04-06 22:26:11,575] [DEBUG] [client:120] (21928.140533006365760) Loaded storage driver "http"
[2017-04-06 22:26:11,575] [DEBUG] [client:120] (21928.140533006365760) Loaded storage driver "dht"
{
    "error": "Invalid public key"
}

Perhaps I am generating my profile wrong, I used this JS:

const { makeECPrivateKey, wrapProfileToken, Person } = require('blockstack')

let me = {
  "@context": "http://schema.org/",
  "@type": "Person",
  "name": "David McKay",
  "url": "https://www.rawkode.com",
  "description": "Software & Technology Professional"
}


const privateKey = makeECPrivateKey()

const person = new Person(me)
const token = person.toToken(privateKey)
const tokenFile = [wrapProfileToken(token)]

console.log(JSON.stringify(tokenFile))

The console.log is my blockstack.id

I have also tried replacing makeECPrivateKey() with my owner_privkey, but that didn’t help either.

Sorry, I’m still learning all this stuff. I appreciate the help :thumbsup:

I have also tried replacing makeECPrivateKey() with my owner_privkey, but that didn’t help either.

Ah, that’s interesting. Will have to cc @ryanshea regarding the JS code.

Did you get a chance to try curl-ing your profile, and using blockstack sign_profile and blockstack verify_profile to re-generate it?

Sorry, I’m still learning all this stuff. I appreciate the help :thumbsup:

Always happy to help :slight_smile:

What was the issue here? Were you able to sign the profile with that key?

Yeah, I followed your instructions all the way through the first time, but I got the key error. Then I started experimenting, but the key error continues to persist.

I’ve even tried curling my old profile (below link) and using your steps with that. Still “Invalid public key”

I’m at a loss