-
Notifications
You must be signed in to change notification settings - Fork 9
Description
Right now tokens are the atomic unit of signed data in Blockstack. Profiles are broken up into pieces and signed as tokens, and tokens are reconstructed to form profiles.
With just the tokens, you can do all of these basic operations. However, there are some other cool features that you get if you have metadata extraneous to the token. (1) You can work with encrypted tokens (2) you can work with tokens that can be passed around to others without them being tied to you initially (you can prove they're yours at a later date by showing that a child key of your parent key signed them).
I'm thinking, though, that the current structure of token files is a bit complicated and it can be unclear where the token begins and ends. It sounds like @christianlundkvist and the uPort team are sticking to using basic tokens, where the additional data is not needed and adds to complexity.
As a result, I'd like to propose a simpler construction for token files, which is included at the bottom of this post.
The tokens field contains a list of encoded tokens, the decodedTokens field contains a list of human-friendly decoded tokens, and the tokenMetadata field contains optional information about the tokens.
Would love any and all thoughts on this.
{
"version": 0.2,
"tokenMetadata": [
{
"parentPublicKey": "02d8200a863d0ed55807f45072e8c4ef623e9df81160953b09535f18531d1b08e0",
"derivationEntropy": "fca5556afe1d796bd7094be6cb2ee94b585962aba05415a46be4a0d7e17d92d4",
"encrypted": false
},
{
"parentPublicKey": "02d8200a863d0ed55807f45072e8c4ef623e9df81160953b09535f18531d1b08e0",
"derivationEntropy": "1d73570f8b7e4e1311179a58a095b18e168f273598c98893fef058d1cc1e7f0c",
"encrypted": false
},
{
"parentPublicKey": "02d8200a863d0ed55807f45072e8c4ef623e9df81160953b09535f18531d1b08e0",
"derivationEntropy": "f3e8c65f816babd0faa61b3f5223d24d872be0506881c8942843fca7fb0cd628",
"encrypted": false
},
{
"parentPublicKey": "02d8200a863d0ed55807f45072e8c4ef623e9df81160953b09535f18531d1b08e0",
"derivationEntropy": "278e9cccc777592feeb5776537ae69943e5bc795fc60b68f0453077bbe1178a8",
"encrypted": false
}
],
"tokens": [
"eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NksifQ.eyJjbGFpbSI6eyJAdHlwZSI6IlBlcnNvbiIsIkBjb250ZXh0IjoiaHR0cDovL3NjaGVtYS5vcmcvIiwibmFtZSI6Ik5hdmFsIFJhdmlrYW50IiwiZ2l2ZW5OYW1lIjoiTmF2YWwiLCJmYW1pbHlOYW1lIjoiUmF2aWthbnQiLCJkZXNjcmlwdGlvbiI6IkNvLWZvdW5kZXIgb2YgQW5nZWxMaXN0IiwiaW1hZ2UiOlt7IkB0eXBlIjoiSW1hZ2VPYmplY3QiLCJuYW1lIjoiYXZhdGFyIiwiY29udGVudFVybCI6Imh0dHBzOi8vcGJzLnR3aW1nLmNvbS9wcm9maWxlX2ltYWdlcy8zNjk2NjE3MzI4LzY2Nzg3NGM1OTM2NzY0ZDkzZDU2Y2NjNzZhMmJjYzEzLmpwZWcifSx7IkB0eXBlIjoiSW1hZ2VPYmplY3QiLCJuYW1lIjoiYmFja2dyb3VuZCIsImNvbnRlbnRVcmwiOiJodHRwczovL3Bicy50d2ltZy5jb20vcHJvZmlsZV9iYW5uZXJzLzc0NTI3My8xMzU1NzA1Nzc3L3dlYl9yZXRpbmEifV0sIndlYnNpdGUiOlt7IkB0eXBlIjoiV2ViU2l0ZSIsInVybCI6ImFuZ2VsLmNvIn1dLCJhY2NvdW50IjpbeyJAdHlwZSI6IkFjY291bnQiLCJzZXJ2aWNlIjoiZmFjZWJvb2siLCJpZGVudGlmaWVyIjoibmF2YWxyIiwicHJvb2ZUeXBlIjoiaHR0cCIsInByb29mVXJsIjoiaHR0cHM6Ly9mYWNlYm9vay5jb20vbmF2YWxyL3Bvc3RzLzEwMTUyMTkwNzM0MDc3MjYxIn0seyJAdHlwZSI6IkFjY291bnQiLCJzZXJ2aWNlIjoidHdpdHRlciIsImlkZW50aWZpZXIiOiJuYXZhbCIsInByb29mVHlwZSI6Imh0dHAiLCJwcm9vZlVybCI6Imh0dHBzOi8vdHdpdHRlci5jb20vbmF2YWwvc3RhdHVzLzQ4NjYwOTI2NjIxMjQ5OTQ1NiJ9LHsiQHR5cGUiOiJBY2NvdW50Iiwic2VydmljZSI6ImdpdGh1YiIsImlkZW50aWZpZXIiOiJuYXZhbHIiLCJwcm9vZlR5cGUiOiJodHRwIiwicHJvb2ZVcmwiOiJodHRwczovL2dpc3QuZ2l0aHViLmNvbS9uYXZhbHIvZjMxYTc0MDU0Zjg1OWVjMGFjNmEifSx7IkB0eXBlIjoiQWNjb3VudCIsInNlcnZpY2UiOiJiaXRjb2luIiwicm9sZSI6InBheW1lbnQiLCJpZGVudGlmaWVyIjoiMTkxOVVyaFl5aHM0NzFwczhDRmNKM0RScFdTZGE4cXRTayIsInByb29mVHlwZSI6InNpZ25hdHVyZSIsInByb29mTWVzc2FnZSI6IlZlcmlmeWluZyB0aGF0ICtuYXZhbCBpcyBteSBibG9ja2NoYWluIElELiIsInByb29mU2lnbmF0dXJlIjoiSUN1UkErRHE1RG44QWlZOVArbWNMekd5aWJQZ0cwZWM5Q3BodE1rNTEydVBkQjVlQW5jRFNIaFFaWS83a3ljdmw2UExGRXVSK2ozT00vSzJWZXkxK0VVPSJ9XSwid29ya3NGb3IiOlt7IkB0eXBlIjoiT3JnYW5pemF0aW9uIiwiQGlkIjoiYW5nZWxsaXN0LmlkIn1dLCJrbm93cyI6W3siQHR5cGUiOiJQZXJzb24iLCJAaWQiOiJtdW5lZWIuaWQifSx7IkB0eXBlIjoiUGVyc29uIiwiQGlkIjoicnlhbi5pZCJ9XX0sInN1YmplY3QiOnsicHVibGljS2V5IjoiMDM0OGViNTY3ZWI2Y2NjYWZmN2ZlZTY3Nzg3Y2FjZTJjMDg5ZmEyZWEzMmE3NmZkODcyZWVjZjJlN2VhYjE5ODczIn0sImlzc3VlciI6eyJwdWJsaWNLZXkiOiIwMzQ4ZWI1NjdlYjZjY2NhZmY3ZmVlNjc3ODdjYWNlMmMwODlmYTJlYTMyYTc2ZmQ4NzJlZWNmMmU3ZWFiMTk4NzMifSwiaXNzdWVkQXQiOiIyMDE2LTA0LTE5VDE1OjA2OjI5LjE2MloiLCJleHBpcmVzQXQiOiIyMDE3LTA0LTE5VDE1OjA2OjI5LjE2MloifQ.MSEgP2dTxcnk_rM5h-YUOAM3IES5sxp23tKHEu3SaIx_07Fh6utBSHruPUfAOjFCroLiIBjx0HyjH7lgcEnOoA",
"eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NksifQ.eyJjbGFpbSI6eyJ0YXhJRCI6IjAwMC0wMC0wMDAwIn0sInN1YmplY3QiOnsicHVibGljS2V5IjoiMDI5ZDQxYTMyM2M2ZjRmM2YyYTZhNjkxYzQ5NmFkNWY3ODYwMjI4ZTMzMmI1YzRlYzJhOTBhODdhMDBjODgyOGYwIn0sImlzc3VlciI6eyJwdWJsaWNLZXkiOiIwMjlkNDFhMzIzYzZmNGYzZjJhNmE2OTFjNDk2YWQ1Zjc4NjAyMjhlMzMyYjVjNGVjMmE5MGE4N2EwMGM4ODI4ZjAifSwiaXNzdWVkQXQiOiIyMDE2LTA0LTE5VDE1OjA2OjI5LjI5NVoiLCJleHBpcmVzQXQiOiIyMDE3LTA0LTE5VDE1OjA2OjI5LjI5NVoifQ.29oUfki0k3dwJc_nbmyJDgHJkVO-_xcw5HoifJixDYJKQGPzApWGft-NhlMObUJCNtR8cUXgJqGJFreCIMILUw",
"eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NksifQ.eyJjbGFpbSI6eyJiaXJ0aERhdGUiOiIxOTczLTAxLTAxIn0sInN1YmplY3QiOnsicHVibGljS2V5IjoiMDM2Y2FiZmNiNmQ3OTZlMGMzYWQyNzI0N2Y5YTAxZGRhZTU5MmU2YjM4MmZjNjBlZjliOTBkNzczMDBkZTg4MTczIn0sImlzc3VlciI6eyJwdWJsaWNLZXkiOiIwMzZjYWJmY2I2ZDc5NmUwYzNhZDI3MjQ3ZjlhMDFkZGFlNTkyZTZiMzgyZmM2MGVmOWI5MGQ3NzMwMGRlODgxNzMifSwiaXNzdWVkQXQiOiIyMDE2LTA0LTE5VDE1OjA2OjI5LjQzMloiLCJleHBpcmVzQXQiOiIyMDE3LTA0LTE5VDE1OjA2OjI5LjQzMloifQ.2kQr6vDkgrUim71aXSbWOxndz8yfYCqeRMnI-N-eCg4HShBITjS8sAh6lHXApI6LQiKxR3VMe_eIbk0kToEXGA",
"eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NksifQ.eyJjbGFpbSI6eyJhZGRyZXNzIjp7IkB0eXBlIjoiUG9zdGFsQWRkcmVzcyIsInN0cmVldEFkZHJlc3MiOiIxNiBNYWlkZW4gTG4iLCJhZGRyZXNzTG9jYWxpdHkiOiJTYW4gRnJhbmNpc2NvLCBDQSIsInBvc3RhbENvZGUiOiI5NDEwOCIsImFkZHJlc3NDb3VudHJ5IjoiVW5pdGVkIFN0YXRlcyJ9fSwic3ViamVjdCI6eyJwdWJsaWNLZXkiOiIwMmM3N2NjOWY1NTk5ZGJkNDYxNjQ1ZjA1ZGEzMjhjMzFlZTMwYzc2YTJiNzU5ZDFmNjAxZDRlMjY2ZWRjYjYyMGUifSwiaXNzdWVyIjp7InB1YmxpY0tleSI6IjAyYzc3Y2M5ZjU1OTlkYmQ0NjE2NDVmMDVkYTMyOGMzMWVlMzBjNzZhMmI3NTlkMWY2MDFkNGUyNjZlZGNiNjIwZSJ9LCJpc3N1ZWRBdCI6IjIwMTYtMDQtMTlUMTU6MDY6MjkuNTY1WiIsImV4cGlyZXNBdCI6IjIwMTctMDQtMTlUMTU6MDY6MjkuNTY1WiJ9.46_4Sy-492FRt7_TyPomQVe7PKHSaL2AbY36Xl1OpN5jBE7mdNeckuuGM5Jy5-I2jRqdhzFijMP1MjT0KhsDRQ"
],
"decodedTokens": [
{
"header": {
"typ": "JWT",
"alg": "ES256K"
},
"payload": {
"claim": {
"@type": "Person",
"@context": "http://schema.org/",
"name": "Naval Ravikant",
"givenName": "Naval",
"familyName": "Ravikant",
"description": "Co-founder of AngelList",
"image": [
{
"@type": "ImageObject",
"name": "avatar",
"contentUrl": "https://pbs.twimg.com/profile_images/3696617328/667874c5936764d93d56ccc76a2bcc13.jpeg"
},
{
"@type": "ImageObject",
"name": "background",
"contentUrl": "https://pbs.twimg.com/profile_banners/745273/1355705777/web_retina"
}
],
"website": [
{
"@type": "WebSite",
"url": "angel.co"
}
],
"account": [
{
"@type": "Account",
"service": "facebook",
"identifier": "navalr",
"proofType": "http",
"proofUrl": "https://facebook.com/navalr/posts/10152190734077261"
},
{
"@type": "Account",
"service": "twitter",
"identifier": "naval",
"proofType": "http",
"proofUrl": "https://twitter.com/naval/status/486609266212499456"
},
{
"@type": "Account",
"service": "github",
"identifier": "navalr",
"proofType": "http",
"proofUrl": "https://gist.github.com/navalr/f31a74054f859ec0ac6a"
},
{
"@type": "Account",
"service": "bitcoin",
"role": "payment",
"identifier": "1919UrhYyhs471ps8CFcJ3DRpWSda8qtSk",
"proofType": "signature",
"proofMessage": "Verifying that +naval is my blockchain ID.",
"proofSignature": "ICuRA+Dq5Dn8AiY9P+mcLzGyibPgG0ec9CphtMk512uPdB5eAncDSHhQZY/7kycvl6PLFEuR+j3OM/K2Vey1+EU="
}
],
"worksFor": [
{
"@type": "Organization",
"@id": "angellist.id"
}
],
"knows": [
{
"@type": "Person",
"@id": "muneeb.id"
},
{
"@type": "Person",
"@id": "ryan.id"
}
]
},
"subject": {
"publicKey": "0348eb567eb6cccaff7fee67787cace2c089fa2ea32a76fd872eecf2e7eab19873"
},
"issuer": {
"publicKey": "0348eb567eb6cccaff7fee67787cace2c089fa2ea32a76fd872eecf2e7eab19873"
},
"issuedAt": "2016-04-19T15:06:29.162Z",
"expiresAt": "2017-04-19T15:06:29.162Z"
},
"signature": "MSEgP2dTxcnk_rM5h-YUOAM3IES5sxp23tKHEu3SaIx_07Fh6utBSHruPUfAOjFCroLiIBjx0HyjH7lgcEnOoA"
},
{
"header": {
"typ": "JWT",
"alg": "ES256K"
},
"payload": {
"claim": {
"taxID": "000-00-0000"
},
"subject": {
"publicKey": "029d41a323c6f4f3f2a6a691c496ad5f7860228e332b5c4ec2a90a87a00c8828f0"
},
"issuer": {
"publicKey": "029d41a323c6f4f3f2a6a691c496ad5f7860228e332b5c4ec2a90a87a00c8828f0"
},
"issuedAt": "2016-04-19T15:06:29.295Z",
"expiresAt": "2017-04-19T15:06:29.295Z"
},
"signature": "29oUfki0k3dwJc_nbmyJDgHJkVO-_xcw5HoifJixDYJKQGPzApWGft-NhlMObUJCNtR8cUXgJqGJFreCIMILUw"
},
{
"header": {
"typ": "JWT",
"alg": "ES256K"
},
"payload": {
"claim": {
"birthDate": "1973-01-01"
},
"subject": {
"publicKey": "036cabfcb6d796e0c3ad27247f9a01ddae592e6b382fc60ef9b90d77300de88173"
},
"issuer": {
"publicKey": "036cabfcb6d796e0c3ad27247f9a01ddae592e6b382fc60ef9b90d77300de88173"
},
"issuedAt": "2016-04-19T15:06:29.432Z",
"expiresAt": "2017-04-19T15:06:29.432Z"
},
"signature": "2kQr6vDkgrUim71aXSbWOxndz8yfYCqeRMnI-N-eCg4HShBITjS8sAh6lHXApI6LQiKxR3VMe_eIbk0kToEXGA"
},
{
"header": {
"typ": "JWT",
"alg": "ES256K"
},
"payload": {
"claim": {
"address": {
"@type": "PostalAddress",
"streetAddress": "16 Maiden Ln",
"addressLocality": "San Francisco, CA",
"postalCode": "94108",
"addressCountry": "United States"
}
},
"subject": {
"publicKey": "02c77cc9f5599dbd461645f05da328c31ee30c76a2b759d1f601d4e266edcb620e"
},
"issuer": {
"publicKey": "02c77cc9f5599dbd461645f05da328c31ee30c76a2b759d1f601d4e266edcb620e"
},
"issuedAt": "2016-04-19T15:06:29.565Z",
"expiresAt": "2017-04-19T15:06:29.565Z"
},
"signature": "46_4Sy-492FRt7_TyPomQVe7PKHSaL2AbY36Xl1OpN5jBE7mdNeckuuGM5Jy5-I2jRqdhzFijMP1MjT0KhsDRQ"
}
]
}