stacks-network / stacks Goto Github PK
View Code? Open in Web Editor NEWOverview of Bitcoin's Stacks layer.
Home Page: https://www.stacks.co/
Overview of Bitcoin's Stacks layer.
Home Page: https://www.stacks.co/
The resources of Blockstack are currently quite scattered. Some of it is hard to find. It would be nice if we could gather that so it'd be simpler to find.
One thing is the talks (videos) etc, which would be great to link to. Some other resources like presentations or diagrams/explainers/posters could be stored in the (or a) repository.
Muneeb suggested starting by listing up what exists.
I am having the same issue others were having a while back and you reissued the tx for a few, maybe I need this as well. I get a different NameCoin address when I convert the pass phrase. I should say I created the usrername when the service was first announced I am just now trying to get control of my key and ran into this.
Oh by the way it's
u/grapeape
Nevermind I suspect now this is something I'm doing wrong (of course).
I think I have the right key now but for some reason I can't import it into NameCoin QT anyway not a onename issue.....
Can you please add a field so users can indicate what their stealth address is?
With the release of DarkWallet, stealth addresses are starting to become widely used and they are excellent for ensuring that bitcoins are sent to the individual without having to send a payment request or sending coin to an address that the receiver doesn't want to re-use.
Example of a stealth address:
vJmuhe8BU5WPaUHcamoN9aaE1bEotZexJPytCH8H9FsUM5PFHgmzzDJuTRZezkzPoo9HZa7U5AFYhHTsULUo4N6HZESWJLVvrTp2fP
The wiki content is mostly about blockchain ID, so this repo's name can be changed to "blockstack/blockchain-id" and we will create another "blockstack/blockstack" repo with general information about Blockstack.
There should be a dedicated section that discusses exactly what sorts of privacy-relevant information about users is revealed by this system.
Perhaps it could also be elaborated whether it's possible for users to use the system completely anonymously, and if so, how.
I propose that we add a rename operation to the Blockstack core instruction set.
This would allow us to have a user's serial number travel from one name to another, thus providing continuity of identity across names.
The API interface could look like this:
GET /v2/identity/<serial-number>
GET /v2/identity/392782-492
{
"serial_number": "392782-492",
"domain_name": "judecn.id",
"zone_file": "",
"owner_address”: ""
}
GET /v2/identity/<domain-name>
GET /v2/identity/judecn.id
{
"serial_number": "392782-492",
"domain_name": "judecn.id",
"zone_file": "",
"owner_address”: ""
}
POST /v2/identity/<domain-name>
POST /v2/identity/judecn.id
PAYLOAD: <transaction with OP_RETURN data that specifies a renaming of judecn.id to jude.id>
{
"previous_name": "judecn.id",
"new_name": "jude.id"
}
Tagging @muneeb-ali @jcnelson for comments.
Quoted suggestion from @justusranvier:
The fingerprints array is used to associate public keys with Namecoin identities.
Defined types of the Fingerprints array:
Defined attributes for the Fingerprints array:
none
What format record in blockchain ,so blockstore can read out them from coin's blockchain ?
OP_RETURN /u/name:lizhi
Can you give me help informations ?
I'd like to propose the idea of renaming the "openname" protocol as I feel there is a fundamental communication issue with the naming convention. I feel there is a better way, a more descriptive way, to communicate the protocol. A clearly identifiable name that developers and users alike will grasp.
A few services built on top of openname, like Onename (the company I work for), have used terms like "digital passport" in their communications. I actually think digital passport very aptly describes the account/profile that users get when they register as a user on the protocol.
For this reason, I'd like to explore the idea of renaming the protocol from openname to digital passport. This is a clear, descriptive name that everyone can identify with. The word "passport" is one of the most common forms of identification and is easy for everyone to visualize without putting any thought into it. And since the passport (identification) is a virtual form of ID it's only natural to call it a "digital" passport.
We have been sharing this new concept with others in the community over the past month or so in order to get other's feedback and the idea has been well received. The concepts "passport" and "digital passport" are very clear to all of the users that we've spoken to. Conversely, the concept of an "openname" usually takes some time to communicate. Users are very likely to ask, "what is openname?"
From a marketing/communications point of view I could see users adopting, "I have a digital passport." As opposed to, "I have an openname username." Another point to be made is that users mostly used the word "openname" to refer to the "username". So what do you get when you register on the system? Well, you get a "digital passport" i.e., your profile. By using the term "digital passport," it gives the user visual recognition that they can identify as a tangible object in their mind. Something one owns and holds onto for life.
I hope everyone will consider this change for, what I feel is, the better of the protocol and the community.
Cheers, Guy
The traditional way to associate information with an identity is to put the raw user data in the key-value store in the blockchain, like so:
{
"name": "Satoshi Nakamoto"
}
I'd like to propose an alternate method in which one could include a list of name servers that are able to return the user data, and then make sure that the data returned is signed by the owning keypair:
{
"nameservers": [
"172.8.0.1:5000/satoshi",
"172.8.0.9:9000/satoshi"
]
}
Where the data would be formatted like so:
$ curl 172.8.0.1:5000/satoshi
Message:
{
"profile: {
"name": "Satoshi Nakamoto"
},
"previous": "cd372fb85148700fa88095e3492d3f9f5beb43e555e5ff26d95f5a6adc36f8e6"
}
Signature:
HNGhFYwjtfdU4TTAT3+xIYaXmQvmjezks/zH9HETThqL8lZ5RwMBKMst6ThrurEn6J/IzUypfMrDWiw5whjFjfo=
As you can see, the data returned includes a message and a signature. The message includes the profile of the user, as well as the hash of the previously signed message.
This has various pros and cons, which I'll bring up in a further comment.
Quoted suggestion from @justusranvier:
The location field is used to associate a geographical location with their Namecoin identity.
Defined types of the Location array:
Defined attributes for the Location array:
Quoted suggestion frrom @justusranvier:
Asynchronous communication methods are anything where the recipient and sender do not need to be online at the same time. Basically this means email and everything that behaves like email.
Defined types for the Asynchronous array:
Defined attributes for the Asynchronous array:
Synchronous communication methods are ones where the sender and recipent communitate in real time. Instant messaging, phone calls, etc
Defined types for the Synchronous array:
Defined attributes for the Synchronous array:
Currently I'm using "DRAFT" to indicate a resolver spec is liable to rapid and potentially significant change.
Once that settles down, what term should be used to indicate that the spec has reached a state of completion upon which it is safe to create implementations upon?
Some suggestions:
Or something else?
It could be nice to be able to include your phone number in the profile and verify it.
Update README.md file to reflect the latest Blockstack branding and communications
Successfully built blockstack blockstore registrar blockstack-client base58 virtualchain kademlia keychain blockstore-client blockcypher tinydb basicrpc protocoin blockstack-profiles pybitcoin Twisted bitcoin python-dateutil jsontokens keylib zone-file commontools pycparser
Installing collected packages: requests, ecdsa, commontools, base58, cachetools, bitmerchant, bitcoin, keychain, pybitcoin, Twisted, virtualchain, kademlia, boto, basicrpc, protocoin, blockstore-client, blockstore, python-dateutil, blockcypher, pymongo, tinydb, registrar, enum34, ipaddress, pyasn1, idna, pycparser, cffi, cryptography, keylib, jsontokens, zone-file, blockstack-profiles, blockstack-client, blockstack
Found existing installation: requests 2.5.1
Uninstalling requests-2.5.1:
Successfully uninstalled requests-2.5.1
Found existing installation: ecdsa 0.11
Uninstalling ecdsa-0.11:
Successfully uninstalled ecdsa-0.11
Found existing installation: bitcoin 1.1.38
Uninstalling bitcoin-1.1.38:
Successfully uninstalled bitcoin-1.1.38
Found existing installation: Twisted 15.0.0
Uninstalling Twisted-15.0.0:
Successfully uninstalled Twisted-15.0.0
Found existing installation: kademlia 0.4
Uninstalling kademlia-0.4:
Successfully uninstalled kademlia-0.4
Found existing installation: blockstore 0.0.3
Uninstalling blockstore-0.0.3:
Successfully uninstalled blockstore-0.0.3
Successfully installed Twisted base58 basicrpc bitcoin bitmerchant blockcypher blockstack blockstack-client blockstack-profiles blockstore blockstore-client boto cachetools cffi commontools cryptography ecdsa enum34 idna ipaddress jsontokens kademlia keychain keylib protocoin pyasn1 pybitcoin pycparser pymongo python-dateutil registrar requests tinydb virtualchain zone-file
Traceback (most recent call last):
File "/usr/local/bin/pip", line 11, in <module>
sys.exit(main())
File "/usr/local/lib/python2.7/site-packages/pip/__init__.py", line 217, in main
return command.main(cmd_args)
File "/usr/local/lib/python2.7/site-packages/pip/basecommand.py", line 246, in main
pip_version_check(session)
File "/usr/local/lib/python2.7/site-packages/pip/utils/outdated.py", line 102, in pip_version_check
installed_version = get_installed_version("pip")
File "/usr/local/lib/python2.7/site-packages/pip/utils/__init__.py", line 848, in get_installed_version
working_set = pkg_resources.WorkingSet()
File "/usr/local/lib/python2.7/site-packages/pip/_vendor/pkg_resources/__init__.py", line 626, in __init__
self.add_entry(entry)
File "/usr/local/lib/python2.7/site-packages/pip/_vendor/pkg_resources/__init__.py", line 682, in add_entry
for dist in find_distributions(entry, True):
File "/usr/local/lib/python2.7/site-packages/pip/_vendor/pkg_resources/__init__.py", line 2080, in find_eggs_in_zip
if metadata.has_metadata('PKG-INFO'):
File "/usr/local/lib/python2.7/site-packages/pip/_vendor/pkg_resources/__init__.py", line 1610, in has_metadata
return self.egg_info and self._has(self._fn(self.egg_info, name))
File "/usr/local/lib/python2.7/site-packages/pip/_vendor/pkg_resources/__init__.py", line 1968, in _has
return zip_path in self.zipinfo or zip_path in self._index()
File "/usr/local/lib/python2.7/site-packages/pip/_vendor/pkg_resources/__init__.py", line 1848, in zipinfo
return self._zip_manifests.load(self.loader.archive)
File "/usr/local/lib/python2.7/site-packages/pip/_vendor/pkg_resources/__init__.py", line 1788, in load
mtime = os.stat(path).st_mtime
OSError: [Errno 2] No such file or directory: '/usr/local/lib/python2.7/site-packages/ecdsa-0.11-py2.7.egg'
I had transferred the name to new a address. So I have a feeling I screwed things up here somehow by making a change through he profile explorer after transferring the name to a new address.
Now only changes through the profile explorer take effect. I still show I own the name under Managed Names with QT but no changes take effect with QT now. They did before I made a change through the profile explorer.
Any thoughts on how to straighten this out?
EDIT: I've gone ahead and transferred the name back to the original address and then I'll see if that has any effect....
I know this is all my fault but I am confused about how or why onename was able to take back control of the name when I logged in with the onename profile explorer.
I'm working on an anonymous messaging client that uses the openname profile as a way to make the UX more personable (formatted names/avatars etc). The sender can enter his openname and it triggers the recipient's client to download the profile json and avatar. But at present there is no way to validate that the sender is the actual owner of the openname.
What I need is for the sender to put his address in his profile so the recipient can verify the address in the profile matches the address from which the message was sent.
The "public key" field would likely be fine, unless you guys think a separate field for "messengers" would be needed.
But I would need a way to enter it via the website since it's too much work to manually make a broadcast a namecoin tx.
It used to be here: https://github.com/namesystem/namesystem/blob/master/resolvers.md
Here's our copy: https://github.com/okTurtles/openname-specifications/blob/resolvers/resolvers.md
I'm interested in adding a devcoin address (or insert your favorite community's currency here) to my namecoin entry. Any thoughts on the best approach for that? Would we want to add another field to the top level of the spec (e.g. just slip in a "devcoin" key, or "litecoin", or ... entry)? Or are there ideas around abstracting it a bit and putting things under a top level key like "payments" or something like that?
If an error is made, how do people change their profile?
https://github.com/blockstack/blockchain-id/wiki/Blockchain-ID-Schema-v2
Bitcoin is not the only crypto, and one could argue that smart contracts are an easier storage mechanism for persona that Bitcoin. Regardless we should all be on the same page for the spec.
Add blockstack logo to wiki
If images had an additional field for checksum (sha256?) then images could be ensured when shown, that they have not been tampered with, or live in expired accounts, etc.
I don't think javascript can validate the sha256 of an image (or can it? maybe ajax it as binary?) but for the sake of services like onename.io, the website could easily download the image and ensure it is valid before returning it to the browser.
Just an idea.
twister.net.co handle support and proof for ownership, like twitter and facebook
Previously I had an issue with registering a name where I was able to pay for the same name 4 times from the same instance of blockstack within a few hours. Eventually the name confirmed about 6 hours later. This was a practice for the name I actually wanted which after registering and paying for, is now still showing available to buy again.
I'm assuming after 3 days this name is not going to confirm. Please, I've taken every precaution to ensure this valued name is not lost.
Trying to register another random name give me the error "cannot broadcast" so I'm assuming this could be part of the problem and the transaction has somehow not been properly broadcast. Any help would be greatly appreciated.
Is the Passcard username called "passname"?
What's the best way to prompt users when we want them to enter their Passcard (in an input field for example)?
#4 seems like it would be easiest to understand
#1 sounds the best to my ears/eyes - and I think it's clear when there's a text input box that you don't want the user to type all of their profile data in.
I'm mostly concerned with how to present this to end users, but this nomeclature comes up frequently in code: does a variable/field/attribute passcard
refer to the string identifier or an object with all the profile/verification contents of a user's Passcard? Would love to have a community consensus and accepted convention.
@guylepage3 commented on Thu Sep 29 2016
Design YouTube Channel graphics and content
@guylepage3 commented on Thu Sep 29 2016
@guylepage3 commented on Thu Sep 29 2016
I think instead of re-inventing a new schema, we should use exist Linked data schemas, FOAF for example or Person from schema.org. In this way ons can integrate with cool new features of the web (the new coming WebID for example).
It doesn't have to be RDF, you can still use JSON, with the "@context" field, so it is a JSON-LD.
In other words, switching your existing schema into an already existing open format takes little and it will have a huge potential.
When using the blockstack register
command, the software appears to add a default fee of .00016 BTC. Add a way to estimate the fee necessary to have the transaction included in the next block (or show options for "slow," "medium," "expedited" transaction fees).
Heya!
I didn't see anything in the spec, so I was just wondering whether a "prev" is also required in a chunk? It seems the without that, someone could hijack my information in an overflow chunk. Or is the onetime name prefix enforced?
If I have u/ricmoo => i/ricmoo-1 and in i/ricmoo-1 I have my PGP key and signed proof, then someone else, u/nightman can create a next=i/ricmoo-1, and upon resolving the u/nightman, will be able to lay claim that they own that PGP key along with its proof...
What do you think of allowing people to add miscellaneous data to a "misc" object? For example, there is currently no support for Litecoin or other altcoins, so they'll be able to add unsupported key => values that they want others to see. This could also allow for unconventional sites. For example, most people in the bitcoin world know Gavin Andresen, and he would be able to link to his bitcointalk.com profile. Likewise, someone well known in, say, marketing, could post his profile on warriorforum.com, or a drag racer to his drag racing profile on some site, etc. This will allow more open-ended and open use cases.
In the case that a service/site/anything becomes very popular, it can be moved out of the "misc" section and standardized.
There would likely be no way to standardize proof for anything in the "misc" section, as each site will be different, so people looking for verifications would need to use the existing options to verify for themselves (using Twitter, for example.)
The downside: allowing people to add miscellaneous information can bloat the size of each onename and make it a slightly more tedious for profile explorers to get the main data they need (the non misc stuff). Perhaps this can be addressed by requiring misc stuff to go into their own namecoin store, such as u/username-misc-1
, u/username-misc-2
, etc. That would make them optional, yet available to those that want them.
Additionally, and this is slightly off topic, I think it may be a bad idea to allow any unregistered Namecoin key for chunking profiles. In the example in the docs, you use i/username-1
as the key. This means that you're essentially putting onename into an entirely different namespace. This will make it harder for others to use that namespace, and all other namespaces that will be used to chunk profiles. If dashes are not allowed in usernames, why not just use u/username-1
as a continuation and keep everything in one place?
Just something to think about.
I like the approach it is taking is v0.3 is taking.
Quick question. Something that isn't obvious in the v0.3 spec. How would proofs like like? Similar to v0.2?
"profiles": [{
"username": "naval", "type": "twitter", "proof": {"url": }
}],
I assume it will be similar?
Then. Considering the "i/" namespace which is where you "overflow" to if it gets too big. Currently, it just adds the rest of the information there. But with v0.3, should it have the same structure (at the behest of taking up more space?)
What are your plans with this?
I'm thinking, in the next i namespace, take out basics, and then keep the same structure. Additional profiles is also under the profiles key. Additional payments, under the payments key and so forth? If there is no additional fields, then it is not simply there? And what are plans on extending it into the future?
Let's say someone adds 20 payments (for 20 altcoins), will it fill up the space i-1 and then move onto i-2? And let's say i-1 gets full, and they add a new profile (from 2 to 3 profiles), does it modify i-1 to take out a payment field and push that payment field to i-2, or does it keep i-1 full (less operations), and put that profile field in i-2 (meaning there are thus profiles in 'u' and 'i-2', not 'i-1')?
Am I explaining it properly?
https://github.com/openname/specifications/wiki/Authentication#deep-linking-on-mobile
I was unaware of what it meant. Apparently it refers to switching between apps on a mobile device? (Is it mobile specific?)
this includes importing private keys
I was talking to a friend recently about this (we talk about onename a lot) and I had this idea for a security model, and just want to put it out there to get some feedback.
The goal is to have 3 levels of security:
So, an idea to implement this, assuming you want the username ricmoo (a script would do this... Never do it by hand):
A couple of optional steps
Anyways... Just something I'm thinking of putting together, and wanted to get some feedback
RicMoo
I hope that Blockstack can be used globally and not just limited to English speaking world. I'm opening this ticket to start a discussion about how the spec and movement can accommodate that.
Many (most?) Internet users don't use the latin alphabet. Should we force someone who's name is 李兆京 (me!) to pick a romanized version of his name? Seems culturally insensitive. DNS was ascii only because of various historical reasons. We don't have the same excuse.
Many people live their lives in a multilingual environment. New immigrants in the US often have family and friend in their original country with him they interact in one language and new friends in the US they interact with in English. In places like Hong Kong (where I live), most people have two legal names: a Chinese name and an English name. In Europe, many people have friends across the continent with whom they communicate with English and family and friends in their country of residence who may only read and write the local language.
We could either:
For names: Twitter takes the first approach. Facebook takes the latter. I would prefer the latter as well. https://www.facebook.com/help/217868321565724
A name & message that translates well across linguistic and cultural borders. (Will also bring this up in #41)
Love to hear what everyone else thinks!
"The decentralized identity system built on Bitcoin." on the main README
Isn't it build on...Namecoin? Not sure what the intent of this statement is.
Good for user privacy and speed improvements by SPDY (if you upgrade your cloudflare plan!)
(Not sure if this is right repo for comments on passcard.info. Which repo has the current site source?)
https://github.com/openname/specifications/wiki/Authentication#desktop-login-w-browser-extension
If the app requires no data, Alice is simply logged in. Otherwise, Alice is shown a view where she approves the request and is logged in.
Maybe a few sentences on what it means for an app to require data and why it results in a different situation?
Remove references to "Passcard" and "Blockchain Name System," replace with "blockchain ID."
https://github.com/blockstack/blockstack/blob/master/images/blockstack-1.png
In the wiki, it suggests a user go to a registrar to register his name. Is a registrar a trusted third party? In which case, this scheme is as bad as DNS but just less popular.
If the goal is to truly decentralize ownership of identity, there should be no third party.
Can the user simply publish his identity on to the blockchain (using a browser plugin or script for example) and have it verifiable by others?
I just started looking at blockstack last night. I installed it from the instructions on https://blockstack.org/docs/installation on a fairly clean ubuntu-based VM. Today, after rebooting the next time, when I tried to run it, I ran into errors with being unable to find python modules (bitcoin was the particular one it couldn't find). I reinstalled the bitcoin module with pip and now it complains about not finding bitmerchant.wallet. So I reinstalled bitmerchant with pip, but it still can't find it. I'm not a regular python user, so I'm not sure if this is a python configuration problem or what. I haven't done anything to customize my python install. I've tried reinstalling pip, bitcoin, bitmerchant, and blockstack, but this error won't go away:
dennis@ubuntu:~$ blockstack info
Traceback (most recent call last):
File "/usr/local/bin/blockstack", line 34, in <module>
from blockstore_client.blockstore_cli import run_cli, exit_with_error
File "/usr/local/lib/python2.7/dist-packages/blockstore_client/__init__.py", line 24, in <module>
import client
File "/usr/local/lib/python2.7/dist-packages/blockstore_client/client.py", line 37, in <module>
import parsing, schemas, storage, drivers, config, spv, utils
File "/usr/local/lib/python2.7/dist-packages/blockstore_client/schemas.py", line 26, in <module>
from pybitcoin.formatcheck import is_b58check_address
File "/usr/local/lib/python2.7/dist-packages/pybitcoin/__init__.py", line 46, in <module>
from keychain import PrivateKeychain, PublicKeychain
File "/usr/local/lib/python2.7/dist-packages/keychain/__init__.py", line 1, in <module>
from .private_keychain import PrivateKeychain
File "/usr/local/lib/python2.7/dist-packages/keychain/private_keychain.py", line 1, in <module>
from bitmerchant.wallet import Wallet as HDWallet
ImportError: No module named wallet
How do I fix this?
The default Bitcoin address we generated for you is derived from your passphrase, which acts as a brain wallet. Only you have access to the funds in your address as only you have the passphrase and thus the recipe for generating the private key. We currently don't have functionality on OneName.io for you to spend your Bitcoins but you can currently generate your WIF private key and import it into a wallet like MultiBit or Bitcoin-Qt.
One way to do this is to download and open a local copy of brainwallet.org (https://github.com/brainwallet/brainwallet.github.com/archive/master.zip) and input your passphrase there (I wouldn't recommend using the live site, as they could conceivably snoop your PKs).
Hope this is helpful. We're working on improving the process and making it much simpler for the end user.
Hello guys,
I just was surfing around and found this interesting project.
And this pic draw my curiosity:
I began to think how did you use the bitcoin network, and I found
This doc says:
For example, a Bitcoin node may look at a Blockstack transaction and only see that bitcoins are moving from one address to another and that an unintelligible sequence of data has been attached in a data field (e.g. a field identified by OP_RETURN). Meanwhile, a Blockstack node will look at that data and will know how to interpret it in a way that updates the name database.
Is this mean that
1
is true, who or which node take the responsibility to manage bitcoin, every node? And a blockstack node need to keep some Bitcoin all the time?Build app on bitcoin network is fresh to me, so I really want to get it out.
I was trying to figure out how the namespaces work, but had a hard time finding anything. It seems like more people are wondering about it too.
This is what I was looking for:
I'd like to understand how namespaces works. How much money is needed, how that is controlled. I guess it's just some sum of money that the blockstack software "needs" to be burned in order to open the namespace? And when opening the namespace, that person also gets to set the options for said namespace?
Can they also update the data later? Or is a namespace a fire-forget deal?
Basically, where can I learn more?
This bug is for tracking getting some better namespace documentation.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.