Skip to content

Instantly share code, notes, and snippets.

@pcfreak30
Created December 30, 2021 01:54
Show Gist options
  • Save pcfreak30/a4444258ebecb88991328158fe54e492 to your computer and use it in GitHub Desktop.
Save pcfreak30/a4444258ebecb88991328158fe54e492 to your computer and use it in GitHub Desktop.
The Skynet Token Framework
My journey started with four words: "money without a bank". Ten years ago today, those four words sucked me deep into a rabbit hole that I'm still falling down today. I've tumbled past Dubai, Hong Kong, West Africa, Tel Aviv, San Francisco, Paris, Montreal, often spending months at a time away from home.
In some ways, it really has been poison for my mind. The more I learn about the world, and the more abuses I see coming down from the plutocrats, the more fixated I become on a single idea: "how can we build infrastructure that has no ruling class?". Every other startup idea I've ever had will eventually be subject to the same pressures that corrupted Google, Microsoft, Apple, and all the others who were at one point the good guys. But maybe, just maybe, with blockchain I can build something that will stand up to the indefatigable corrosive omnipotence of trillions of dollars.
The shape of the modern economy is broken. The incentives are driven entirely around profits and returns, and have little alignment with actually improving people's lives. The regulations that are supposed to keep corporations in check have been captured by armies of lobbyists who themselves hold no responsibility to the population as a whole.
The most successful companies are not the ones that enrich people's lives, but rather the ones that acquire the most dollars irrespective of how those dollars are extracted. That's why everyone at the top is evil. The founders and teams that stayed true to their morals stayed small, while the keys to the minds and wallets of the billions were handed to the founders that chose to grow at all costs. The only way to be competitive at the scale of billions is to abandon all ethics in pursuit of growth.
Corruption is fundamentally linked to scale. The bigger the economy gets, with more participants and more moving parts, the easier it is for bad actors to find cracks and slip between them, and widen them for their friends. The growing corruption we see in the world today is not a consequence of humanity becoming more evil over time, but rather a consequence of the world becoming bigger and more heavily intertwined.
Humans were originally optimized to operate in groups of no more than about 150 members. Sociologists call this limit "the Dunbar Number". Below this number, corruption is almost impossible as everyone in the group knows everyone else. If you steal something from the group, everybody will know. "Isn't that Alice's necklace?".
Beyond the Dunbar number, groups of humans start to fall apart. To grow from tribes to societies, humanity had to develop social infrastructure that could identify and manage bad actors. We built infrastructure like policemen, courts, and legislation. It didn't come together all at once, but over the course of thousands of years of innovation we were able to grow society from tribes of 150 to cities of 10,000 to civilizations of 100,000,000.
The further our populations grew, the more we were confronted with the fact that the very infrastructure we built to fight corruption was itself vulnerable to corruption. The policemen that are tasked with controlling crime are themselves often without oversight. So too with courts, regulators, and legislators. Bad actors get larger an larger opportunities to build kingdoms for themselves, and become increasingly willing to work together to secure power at the cost of everyone else. As society grows, you need increasingly sophisticated systems of oversight to ensure that corruption is identified and eliminated.
Until Bitcoin, every system that we had designed for managing corruption had been made out of humans, who are themselves vulnerable to corruption. What makes Bitcoin unique in the history of scaling humanity is its ability to operate as social infrastructure without any sort of ruling class, and possibly even without any cracks or crevices in which corruption can hide and fester. Not everybody who works in Bitcoin understands this, and not everybody who understands it actually believes it, but this property is the reason I've spent more than 10 years plunging down the same rabbit hole, with no sign of ever coming back out.
The Ideal Money System
The core innovation of Bitcoin is the ability to create financial infrastructure that is highly resistant to corruption, but that innovation only helps society to the extent that Bitcoin is actually effective as money. If we want to make the most of blockchain technology, we need to take a dive into the societal purpose of money and establish what a good money is supposed to look like.
Money solves the problem of resource planning. It's an alternative to central planning, where a director group takes all of society's resources and determines how everything should be allocated. Money replaces central planning by giving every actor in society the ability to individually declare their needs and ensure that the most important things are handled first. One way to think about money is as a giant distributed computational system, where every actor in society is contributing brain power by deciding what things they want to buy.
In a healthy economy, a person can make the most money by solving the biggest and most important problems The more needs and wants that an actor can satisfy, the more money they will receive to spend on their own needs and wants. Money acts as a motivator: contribute to society by solving the problems of others and society will contribute back to you.
Money also acts as a deterrent to freeloaders. We want to build a society where everyone is contributing, and where freeloaders are unable to benefit from the fruits of society. When someone walks into a barber shop to get a haircut, money is used as an implicit assertion that they have contributed enough to society to deserve that haircut. And by giving their money to the barber, they are asserting to society that the barber has earned the right to extract value somewhere else.
The perfect money works almost like karma. Every time someone contributes to society in any way (even small tasks like picking litter up off the street) they should receive money proportional to that contribution. And similarly, every time someone causes damage to society (even small things like blocking traffic while jaywalking) they should lose money proportional to that damage. In this world, the amount of money (or debt) someone owns would be exactly equivalent to the value that they've contributed to society, which in turn makes money a perfect measurement of how good or evil a person is. 
Modern money does not operate like karma. Perhaps the most poignant example of this is the success of the Sackler family. The Sacklers - the family behind OxyContin - have built a multi-billion dollar estate for their family while growing a business that is credited with killing more than 200,000 people. And while the Sacklers stand out for how extreme their history is, corporate America is entirely dominated by top corporations that leave large wakes of destruction in their pursuit of profit.
The turmoil is owed to a widening gap between value creation and value extraction. As businesses have gotten more efficient, they have found more effective ways to extract value from society without contributing anything back. A better money would close that gap, ensuring that businesses only make money when they actually add value to society.
One of the great challenges of building the perfect money is that "value" is subjective: every person in society has a different set of values and ideals. Some people for example find the endeavors of SpaceX to be valuable merely because they like the idea that humans are expanding into the final frontier. Others don't intrinsically value SpaceX, both because of its reputation for having a toxic work culture, and also because they believe that the resources would be better spent tackling challenges like cancer or climate change or world hunger. If we want a money that mirrors value, we need a method of distinguishing between the different value systems that people have.
Notably, Bitcoin does not solve any of these issues better than the US dollar. Bitcoin's uncorruptability focuses on features like inflation and transaction censorship, rather than on the gap between value creation and value extraction. And at least one common feature stands out: fungibility.
Fungibility is a property that means every single item is the exact same as every other item. Every dollar - whether a bill or a coin, whether earned through giving haircuts or selling opioids - is the same as every other dollar. At the highest level, we want to use money to determine whether someone deserves to extract value from society, and fungibility gets in the way of that by ensuring that all wealth is treated as the same.
Values Cohorts
Any asset that is fungible and scarce creates a cohort where all of the money within that cohort represents the same set of values. People choose the values that define our economy by choosing what cohorts they participate in. When someone sells US dollars to buy Bitcoins, they reduce the total spending power of all US dollar holders, and increase the spending power of all Bitcoin holders. This has the net effect of reducing society's emphasis on the values of US dollar holders and increasing society's emphasis on the values of Bitcoin holders.
Of course, there is no clear definition of what values are represented by US dollar holders, nor is there a clear definition of what values are represented by Bitcoin holders. If we want to create an economy that is more responsive to the differences in values between individuals, we need asset cohorts that have more clarity around their values alignment, and we need a greater diversity of assets.
The stock market achieves this to a minimal degree. Assets like Tesla represent clearly defined values around ideas like environmental sustainability. By choosing to hold savings in an asset like Tesla stock, people can exert their economic influence to increase the overall focus of our economy on environmental sustainability. But Tesla is a large company with many strategies and objectives, not all of which are publicly disclosed. Choosing Tesla stock gives people better insight to the values they are supporting than choosing an asset like Bitcoin, but there is still significant uncertainty, and Tesla is ultimately not at all constrained to acting in the best interests of the environment.
Instead of having a financial system where values cohorts are billions of dollars in size, we want a financial system where cohorts can be clustered into much smaller pools, perhaps even as small as pennies. And we want to do it in a way that feels natural to use, where people are automatically moving their savings into cohorts that align with their values, without having to consciously ask themselves what values they have or what values they want to support in society at large.
The Skynet Token Framework
We've developed a novel economic engine that aims to get decentralized currency closer to the karmic ideal of money. We believe that we can create a more effective economy by turning everything into a token: every product, every video, every software commit, every invention, and even ephemeral and abstract ideas like a particular haircut or a genre of music. If something exists at all - even abstractly - you should be able to represent it with a token and be able to buy that token. This hyper-tokenization creates an economy with a much larger number of values cohorts, giving the economy greater sensitivity to the differences in values between individuals.
The design we landed on breaks tokens into two classes, identity tokens and concept tokens. Identity tokens are the building blocks. Every person gets their own identity token, and each identity token is associated with a single address that accrues value as the identity contributes to the economy. Identities can be cheaply created, and as numerous as necessary.
Concept tokens are the rich elaborations, establishing a relationship between a product, a piece of content, or an idea and the people responsible for creating it. Every content token contains a weighted list of credits that establish the identities (identity tokens) and prior art (other concept tokens) that contributed to the final result.
Let's walk through an example where two artists create a song, and then that song gets remixed by a third artist. The original song can be wrapped with a concept token that credits each of the artists with a different weight. Maybe the first artist gets 80% of the credit, and the second artist gets 20% of the credit. The remix can be wrapped with a concept token that splits the credit evenly between the remixer and the original song, giving 50% of the credit to each.
This example has 5 tokens total. There are tokens for the identities of each of the 3 artists, and tokens for each of the two works of art. If someone wants to mint tokens of one of the artists, the money spent on minting will be sent directly to the artists. If someone wants to mint tokens of one of the songs, the money spent on minting will be used to buy the tokens listed in the credits, which means that the money still ends up in the hands of the artists.
If someone mints concept tokens of the remix, 50% of the money will go towards buying tokens of the remixer, and 50% of the money will go towards buying tokens of the original song. That 50% is then used to buy tokens of the original artists, with 40% of the total value going towards the first artist, and 10% of the total value going towards the second artist.
When buying a concept token, money is spent buying the tokens of the credits (sometimes referred to as that concept's "credit tokens"). The credit tokens get placed into a pool that is shared by all of the owners of the corresponding concept token. The owners of the concept tokens can withdraw a proportional amount of the credit tokens at any time by destroying their concept tokens.
Applications of the Skynet Token Framework
One of the fundamental ideas of the Skynet economy is that people should buy tokens instead of buying things directly. The creator still ends up getting paid, but now the buyer has some tokens in addition to the item they purchased.
This token model creates a unique bidirectional relationship between the creators and their customers. It's similar to a loyalty program, except that their customers get to benefit directly from the growth of their products and their overall success. Being the first purchaser of a new song can be very lucrative if that song later becomes a hit.
This mutualism makes sense at a moral level. The earliest supporters and users of a product are incredibly influential to its overall growth and shape. They are contributors in the very least through providing testing and early feedback, if not contributors at a much deeper level. Often times, the first 100 customers is what makes the product financially viable at all. Creators regularly pay lip service to the importance of their first fans, and in a tokenized world we can turn that lip service into something that is financially meaningful.
People can own tokens for sentimental reasons, financial reasons, or social reasons. Someone might hold onto the tokens from their first ever concert regardless of how good the concert or band was simply as a commemoration. Someone might hold onto the tokens of a new software product despite having no use for it themselves because they believe in the growth potential of the project. And someone might hold onto the tokens of a journalist's article because they believe an important scandal was uncovered and they want to signal to the world that they believe in the importance of the work.
Ownership of tokens can be used to inform and structure communities. For example, someone could create an online forum that mandates ownership of at least $100 of rap tokens before a user is allowed to sign up. And while $100 may sound like a lot, it really only amounts to having visited 1–2 rap concerts and having bought 1–2 items of clothing while there. True rap fans are nearly always going to have more than $100 of rap tokens just from being involved in the rap community.
Twitch streamers could use token ownership to determine which viewers are allowed to use custom emoji's in the chat, airlines could use token holders to determine upgrade priority and lounge access, headphone companies could use token ownership to decide who should get early product prototypes, and software products could use token ownership to decide who gets to use the advanced features.
Token ownership lays the foundation for a more credible online review system. When deciding to buy a product, consumers can look at the ownership history of their friends and of established critics to see whether people have had success with that product or related products from the same company. Friends that bought the product and subsequently sold all the tokens are indicating a lack of faith in the product's future, while friends that bought even more tokens after getting the product are signaling high praise. The ownership graph can also be used to analyze things like repeat purchases.
Perhaps the superlative benefit of the crediting system is the role that it can play in professional creative software. Software for tasks like photo editing, video editing, composing music, and even things like blogging platforms can be given away for free, earning revenue instead by being listed in the credits of the concept tokens of the resulting products. If the products are successful, the developers will also be successful. This structure both better aligns incentives, and also ensures that anyone - regardless of economic status - can start their career using state-of-the-art creative tools even without funding.
Mechanics of the Skynet Token Framework
So far we've introduced two types of tokens: identity tokens and concept tokens. The only difference between these types of tokens is that one (identity tokens) handles all incoming money by sending it to a specific address, and the other (concept tokens) handles all incoming money by using it to buy the tokens credited by the concept. Because these two token types are the same in every other respect, we will refer to the set as RFTs, which is short for 'restricted fungibility token'.
All RFTs start life by being declared off-chain. For example, when a user creates a MySky account, they also declare an identity token that will be associated with all of their activity on Skynet. If that user then uploads a photograph, a concept token can be declared in the metadata of the image that credits the user's identity token. At the time of declaration, neither the concept token nor the credited identity token need to exist on-chain. Both will be created on-chain when someone mints them.
The cost of minting new RFTs follows a continuous curve where the price increases by a factor of 10 every time the total supply doubles. If the cost of minting the 100,000th token is $1, the cost of minting the 200,000th token will be $10, and the cost of minting the 300,000th token will be $38.45.
Once the first tokens of an RFT have been minted, an on-chain marketplace is created for buying and selling the RFT. There will be millions and potentially billions of different RFTs in the Skynet ecosystem, many of which will be low-volume and low-liquidity. This makes it impractical to have a fully open marketplace, because each RFT will have its liquidity split between potentially millions or billions of trading pairs.
Instead, we introduce a central token that we call SKT or 'the Skynet token' and force all RFTs to be traded as a pair with SKT. By ensuring that every RFT only has a single trading pair, we maximize the total amount of liquidity in that trading pair and minimize the overall routing complexity. Converting from one RFT to another is always two hops (A -> SKT -> B) and each hop enjoys the maximum possible liquidity with minimal routing complexity. The marketplace itself is an Automated Market Maker (AMM) built roughly in the style of Uniswap v3.
Every RFT's minting curve intersects such that minting the 65,536th token costs exactly 1 SKT. This means that if you are the first buyer, spending 1 SKT will mint you just over 7,000 tokens. You can then choose to keep those tokens or to stake them on the AMM.
The minting curve has an invariant that the total cost of minting a number of coins will be roughly 23.1% of the resulting market cap of those coins. For concept tokens, this means that the total value of the token pool (which contains tokens purchased as a result of minting) will also be around 23.1% of the market cap.
The value of the token pool can change if the prices of the tokens inside of the token pool change. Without safeties, this can create theft opportunities. For example, if the value of the token pool goes up 10x, the cost of minting new tokens will be less than the value of the token pool that you gain access to, meaning that anyone can make a large amount of money for free in this scenario by minting a bunch of new tokens, effectively taking that money from existing token holders.
We can correct this with some rebalancing. In a theft-free transaction, a minter pays $1, provides $1 of new credit tokens to the token pool, then receives $1 of new tokens (at the minting price) and access to ~$0.23 worth of tokens in the minting pool. The value of the minted token itself is ~$0.77, putting the total value for the minter at $1.
If the tokens in the pool have gone up in value, the minter may receive access to more than $0.23 worth of tokens from the minting pool. We can correct for this by having the minter return some of the minted tokens, effectively paying a dividend to existing token holders. This also works in reverse, allowing the minter to take some extra tokens out of the pool if the tokens in the pool are worth less than $0.23 as compensation for adding a full $1 of value to the pool.
To determine the number of tokens that get exchanged with the pool, we use the equation 0.769*X + Y*X = 1 where Y is the value of the tokens in the pool as a percentage of the implied market cap, and X is the total number of tokens the minter should receive after minting a single token and rebalancing with the pool. In the theft-free case, the equation is 0.769*X + 0.231*X = 1, and solving for X results in a value of 1. If the tokens in the pool have shot up in value such that Y=0.5, solving for X results in ~0.79, meaning the minter will be giving ~0.21 tokens back to the pool. If Y=0, the minter will get ~1.30 tokens, and if Y=100 the minter will get ~0.01 tokens.
After the first person puts tokens on the AMM, future buyers have a choice between minting new tokens and buying tokens from the AMM. The blockchain provides a purchase type called an "optimal" purchase, which will balance between the two options such that the buyer ends up owning the maximum possible tokens total. The optimal purchase will take into account all of the theft protection measures that accompany minting.
The blockchain also offers a purchase type called a "direct" purchase, which bypasses the marketplace and acquires all tokens by minting them. Direct purchases are recursive, and result in the user getting fewer tokens total, but ensures that all of the money goes to the original creators instead of sellers on the marketplace.
Direct purchases can be specified as a percentage which indicates the minimum total percentage of the purchase that needs to be spent on minting. 0% is equivalent to an optimal purchase. 10% can be equivalent to an optimal purchase, but if the optimal purchase results in less than 10% total being spent on minting, the purchase will be adjusted accordingly.
Because of direct purchases, we need to adjust our anti-theft equation. In the original equation, the minter is adding a full $1 of value to the minting pool. With direct purchases, this can be lower as credit tokens are purchased at their minting price instead of their market price. 0.769*X+Y*X = Z is the full anti-theft equation, where Z is the total amount of value that that is being contributed to the minting pool.
Whether doing an optimal purchase or a direct purchase, the purchase is batched into a purchase group. All purchase groups span exactly 6 blocks, which is approximately one hour. All purchasers within the purchase group will get the same price, which reduces exposure to front-running and sandwich attacks.
For scalability reasons, credit tokens do not get purchased instantly when someone mints a concept token. Because concepts can credit other concepts, its possible for the total number of credits to be thousands or even millions of items large. To save on blockchain fees, we instead put SKT into the token pool, earmarked to be spent on buying specific credit tokens. Anyone - whether they own the concept token or not - can spend the transaction fees to execute the purchase. In doing so, they can take up to 0.1% of the tokens for themselves as a finder's fee.
Mechanics of the On-Chain AMMs
The on-chain AMMs all take the loose form of a Uniswap v3 AMM. Every AMM is bucketed into price ranges, where each range spans a 5% increase in price. There are an infinite number of buckets in each direction. Users can choose to add liquidity to the buckets one at a time, or can use a curve function to add liquidity to all of the buckets in one direction.
The bucket that contains the current market price is called the 'active bucket'. To join the active bucket, users need to provide both SKT and the appropriate RFT. For all buckets at a higher price than the active bucket, users only need to provide the RFT, and for all buckets at a lower price than the active bucket, users only need to provide SKT.
Users can withdraw their liquidity from the AMM at any time. If they are withdrawing from the active bucket, they will get SKT and the RFT in a ratio that matches the percentage progress the price is through the bucket. For example, if the price is exactly in the middle of the bucket, the user will get equal parts SKT and RFT. If the price is almost at the top of the bucket, the user will get a small amount of RFT and mostly SKT.
Users pay a spread when using the AMM. The spread is dynamic, and increases or decreases depending on the total amount of liquidity available in the active bucket. The base spread is 50% and reduces to 0% as more liquidity is added. The spread gets cut in half every time the liquidity is doubled, and the reductions start when the bucket contains 0.1% of the minting cost of all the tokens within the bucket's price range.
For example, the bucket that covers the price range from 1 SKT to 1.05 SKT has a total minting cost of ~993 SKT. The spread starts at 50% and begins reducing when the total value of the liquidity in the bucket reaches ~0.993 SKT. The spread will be 25% when the liquidity reaches ~1.99 SKT, and the spread will be 1% when the liquidity reaches ~49.7 SKT.
When users want to add liquidity to a bucket following an infinite curve, they can use one of the predefined curves. The curves are predefined so that multiple users adding liquidity to an infinite number of buckets can be batched together, improving scalability.
The steepest curve has a steepness of 50%, which means that 50% of all tokens remaining in the curve will be added at each price level. That means after one price level, the curve will have 50% of tokens left, after two price levels the curve will have 25% of tokens left, and so on. The other steepness curves are 12.5%, 5%, 2%, and 0.5%. Setting a steepness of 5% is roughly equivalent to keeping your portfolio value balanced between SKT and RFT as the price changes, growing gradually as you take a spread.
To improve scalability, the AMM is implemented such that every liquidity provider gets a weight which represents a quantity of tokens that can be withdrawn from the bucket. When tokens are added to the bucket, the newcomer mints new weight proportional to the percentage of tokens they added to the bucket. So for example, if the bucket has 100 SKT in it, and 100 weight total in it, and the newcomer adds 20 more SKT, they will receive 20 weight that they can use to redeem their tokens later.
As the bucket trades and earns a spread, the amount of SKT per weight will increase, but newcomers will still only mint weight proportional to their total contribution. If we extend the example above and say it then makes 120 SKT from spreads, the total weight is still 120 but the value is 240 SKT. A newcomer who adds 20 SKT to the bucket will receive 10 weight.
RFT Sale Restrictions
The most unique aspect of RFTs is the way users are restricted from selling them. Users are only allowed to sell a fraction of their RTFs if the price has gone down since being purchased. This restriction does not apply if the price has gone up - if the price goes up or stays flat, the user can sell all of their tokens. 
The restrictions follow the AMM buckets. Every time the price drops a bucket (5%) from the original purchasing price, the number of tokens that the user is allowed to sell drops by 10%. If the price goes back up, the user's selling power also goes back up. This means that at half the original price, a user is only allowed to sell ~24% of the tokens that they own. If they sell those tokens and then the price starts going back up, they will be able to sell more tokens.
This restriction eliminates an exploit where content creators were able to mint an infinite number of their own tokens for free and then dump them on the market, effectively stealing from all of the liquidity providers in the AMM.
With these sell restrictions in place, there is a finite number of tokens that can be in circulation at any given price. Even if a creator mints themselves an infinite number of tokens, the amount of tokens that can be sold at any given price is ~15.2% larger than the number of tokens that can be minted at or below that price. This impacts the way market cap is measured - the market cap of an RFT is measured based on the circulating supply, which excludes all tokens that are price-locked.
We need to adjust the anti-theft equation slightly to account for the RTF sale restrictions. Because newly minted RFTs aren't actually able to be sold except for a small fraction when the price is low, we need to adjust Z to discount all of the coins that can't be sold yet. So for example if you add 10 tokens to the token pool, but the minting price of those tokens twice the market price of the tokens, the anti-theft equation will only count them as ~2.4 tokens total being added to the pool when computing the value of Z.
This adjustment slightly favors the pool, because it fully discounts tokens that cannot be sold yet, even though they may one day have value. This bias can only be eliminated if there is an effective on-chain method for measuring the value of price-locked tokens. Current research indicates that this is not possible, so a small bias that favors the pool is chosen as an acceptable alternative.
If someone destroys their concept tokens, they receive a proportional number of RFTs from the token pool. The sell rights that accompany these RFTs will be determined by the prices of the tokens when the pool obtained them. This has to be determined by looking up previous moments in time where RFTs were deposited into the pool, and referencing against the historic all-time-high prices of the pool at that point. This is rather expensive, and means that withdrawing RFTs from the token pool can potentially result in high transaction fees. Current research has no effective way to make this scalable, but research is ongoing.
If someone sells their RFTs at a higher price than the purchase price, the buyer will receive RFTs with more restrictive sell rights than the tokens that were sold. This has been determined an acceptable form of loss, but does mean that as an RFT ages, the circulating supply at lower price levels will continually shrink, generally benefiting long term holders.
Governance
As much as possible, the Skynet monetization blockchain structures its governance after the Bitcoin blockchain. Which is to say that there are a group of core developers who maintain the primary node software, that they try to make mostly boring and uncontroversial changes, and that the main source of recourse for unhappy users is to hardfork the ecosystem or leave altogether. All of the code is going to be open source, and we are going to work to ensure that the barrier is as low as possible for derivative networks to form.
No part of the consensus code or wallet code is going to be subject to automatic updates. Every change and every fork will be user opt-in, and will strive to protect any minority dissenters as much as possible. This includes programming replay protection and wipeout protection into all hardforks. We will strive to make all forks hardforks as opposed to softforks, such that dissenting minorities will be able to default to using their preferred network, rather than needing to go out of their way to develop a functional fork.
Development of both Skynet and the Skynet blockchain will be funded by the blockchain. Revenue from the blockchain will be used for a combination of development, marketing, creator incentives, community events, and of course profit. A huge portion of the funds are intended to bootstrap the creator economy, which will mostly happen in the form of Skynet Labs buying RFTs from creators, developers, curators, and other contributors.
A 5% fee will be placed on the minting of all identity tokens. Instead of receiving the full value, creators will receive 95% of the value and the rest will go to Skynet Labs. There is no fee for minting concept tokens. The AMM will take a 0.1% fee on all trades which will go to Skynet Labs.
The blockchain itself will be a proof of work blockchain, and the mining will be funded by a block reward. A perpetual allocation of 10 SKT per block will be created to be distributed to miners. Accompanying this allocation is an allocation of 1 billion timelocked SKT which be distributed to Skynet Labs and unlock at a rate of 10 SKT per block. After 1 million blocks (about 20 years), the allocation for Skynet Labs will expire.
An initial allocation of 100 million tokens will be created, 50 million for Skynet Labs and 50 million for the community as an airdrop. The mechanics of the airdrop are still up for discussion (and indeed, everything in this paper is still up for discussion).
Using the Skynet Token Framework
On Skynet, most transactions happen in the background, funded by the user's portal. This is already the case even without the token framework in place. Everything on Skynet already costs money - every upload, every download, every pubkey lookup. The token framework will largely be an extension of this, allowing apps to request payments invisibly within the web applications.
Portals already manage a user's spending by ratelimiting their activity. By controlling the upload speeds and download speeds, a portal can make sure a user is not overspending. These same techniques can be applied to the token framework. For small token purchases, the portals will automatically make those purchases and manage the user by stalling the page load times slightly. Users paying higher monthly prices to the portals will experience shorter stalls.
For larger purchases, the user will be interrupted and asked directly via a secure pop-up. This allows users to make high value transactions such as paying a dollar to read a journal article without having to wait forever for the page to load, and also without having to fear that they are overspending.
We expect that nearly every action on the web will become tokenized. Loading a webpage will result in purchasing a small number (less than a penny's worth) of tokens of the author and developer. Upvoting a comment will result in purchasing a small number of tokens of the commenter. When the payments are small enough, the UX can be identical to the centralized web, except that the user is now paying $5 per month for access, and is also earning money on all of their online activity.
The actual on-chain transactions will be probabilistic, though this is an implementation detail that will be managed by the portal. The user will be charged fractions of a penny at a time, even if the portal occasionally is paying out multiple dollars all at once. The probabilistic nature of the transactions does mean however that a user's bag of tokens will be a random selection of the things they pay for, rather than a complete collection.
The user experience has been structured so that the wallet is a completely optional feature. Users can always pay the portal a standard monthly fee such as $5 per month and ignore everything else. Skynet will work seamlessly for such a user, and the user will have access to all paid content.
Advanced users will be able to see the RFTs in their wallet an interact with them, exploring things like the credit graph and exploring the tokens that their friends own. They will be able to trade their tokens, set portfolio constraints, buy more tokens of things they believe in, and get the full experience of a hypertokenized economy.
Privacy
In the default configuration, all of a user's tokens will exist under the same address, which means that much of their online activity will be able to be tracked over the blockchain.
We will be adding multi-seed support to Skynet so that users can switch between different online identities at any time, giving them access to privacy between their identities. Users will be able to use multiple identities for a single app, or they will be able to configure a particular identity to always be associated with a particular app.
In general, achieving privacy on a blockchain is an open challenge for the ecosystem. We do not have all of the answers at this time.
Using the Skynet Token Framework in Webapps
For developers, the central method of the Skynet Token Framework is buyTokens(tokenID, amount). This is a function that can be dropped nearly anywhere in an application, and will block until the user has purchased the specified amount of the specified token.
We expect that the most common use will be to place the function prior to loading key assets of a webpage. Examples would include calling the function prior to loading the page itself, calling the function prior to loading images on the page, and calling the function prior to loading comments on the page. The main idea behind Skynet monetization is that experiences like a webpage are built from a large collection of contributors, and that each contributor - whether they uploaded an image, wrote a comment, designed a font, retweeted an insightful message - should get paid in some form for their contribution. Some pages may call buyTokens() one hundred times or more in just a few seconds.
More calls to buyTokens() does not necessarily mean that the page will load more slowly, the limiting factor of the function call is the amount - a single expensive call may take longer to resolve than twenty or thirty low cost calls, depending on the user's spending limits.
This design puts the majority of the burden of monetization on developers. The decisions that a developer makes in monetizing their apps will decide how fast their pages load, how much their content creators earn, and ultimately the finer details of how the Skynet economy operates.
As an example, we're going to build monetization into the popular https://skysend.hns/. Our main goal in this case is to keep the user experience nearly identical, while at the same time allowing ourselves as developers and our users both to make money. The first place we're going to insert monetization is at the moment of upload. When a user uploads a file, we're going to call buyTokens(monetizedSkySend, $0.001), which is going to charge the user a tenth of a cent for uploading a file.
The token that the user receives is going to be a concept token for the app we are building, and that concept token is going to have us as 50% of the credit, and Redsolver (one of the original SkySend developers) at 25%, and Julian (the other original SkySend developer) at 25%. Already, we've created a passive income for both ourselves and also for the people whose app we are adapting. Every 2,000 uploads made using our app results in a dollar of revenue for us, and a dollar of revenue for the original devs. The price is low enough that even free users should not experience material slowdowns.
We can extend this further by adding monetization into the uploaded file itself. We can add a license to the metadata of the uploaded file that states a user must purchase $0.001 worth of that file's tokens to download the file. To encourage uploaders, we can construct the file's concept token such that 80% of the credit is given to the uploader, and 20% of the credit is given to the SkySend concept token. This means that for every 10,000 downloads, the original developers will get $1, we will get $1, and the uploader will get $8.
[graph with flow chart showing revenue paths]
We can do all of this while still preserving the axiom that the monetization is invisible to the user. If we want, we can add a more substantial purchase, such as requiring that files over 10 GB charge a full $1. We can do this by calling buyTokenRequest(), which is similar to buyToken() except that it spawns a pop-up that asks if the user wants to spend the full amount immediately rather than wait for the ratelimiter. Bypassing the ratelimiter with a pop-up interrupts the flow for the user, but allows the developer to request larger amounts of monetization without needing to impose massive wait times on the user.
As developers begin working monetization into their applications, we will continue to refine the SDKs and the recommended best practices. There will likely be several major iterations of the monetization flow as we polish out the user experience in a monetized Internet.
Blockchain Mechanics
The Skynet Token Framework is going to be launched on a new blockchain which is entirely hosted on Skynet. The user experience will be similar to using an ultra-light wallet, except that the user will be performing full blockchain validation. The user will get all the benefits of light clients with all the security guarantees and ecosystem benefits of full nodes.
There are several major innovations which make this possible, the most important being a technology called utreexo. Utreexo is a blockchain state and transaction design which allows the entire blockchain to be represented with just a few kilobytes of state, something a user can download from Skynet in under 100 milliseconds. The state is essentially merklized, and every transaction contains a merkle proof which proves that the state is being updated honestly. This makes transactions slightly larger, but provides enormous benefits when rapidly validating the blockchain.
The second major innovation is something called the Skynet kernel. We will be migrating the Skynet SDK to be entirely hosted in an iframe at https://kernel.siasky.net/,which is what most Skynet applications will use to interact with Skynet. The kernel has a lot of benefits such as performance and consistency, but one of the benefits is that any time an app is open and using Skynet, a background process can run which downloads and validates the Skynet blockchain.
We've also designed an entirely new proof-of-work algorithm that we intend to publish in the coming weeks. In contrast to the standard energy-heavy algorithms, this algorithm has been designed to consume almost no electricity at all. In typical mining setups, $10 million of hardware consumes roughly $10 million per year in electricity (plus or minus a large factor). With our new algorithm $10 million of hardware is expected to consume closer to $100,000 per year in electricity, which has substantial advantages and disadvantages over the design of traditional PoW algorithms.
The final innovation is Skynet itself. Because the entire node is hosted in a decentralized cloud, a user can access that node from any device. You only need to sync a full node one time ever to have trustless access to the blockchain everywhere.
There are a bunch of smaller tricks that we can use as well which allow us to bypass things like the mempool and the peer-to-peer gossip network, and build efficient explorers with simple proof-of-correctness that can be provided to users that have nothing more than a verified state hash. The long story short is that the Skynet blockchain is going to be a truly next-generation blockchain, deploying a lot of technologies and tricks that have never been used in production before, and the result will be a faster, better, and easier user experience with no compromise to decentralization.
Implementation Plan
At this time, Skynet Labs intends to implement everything described in this blog post. During development, we expect to make material changes based on research advancements and based on feedback from the community. We also may be required to make substantial changes based on the regulatory frameworks that are being established around crypto. Any number of circumstances could also result in us fully aborting the project, and we therefore make no commitment to seeing the project through nor remaining faithful to any of the details supplied in this post.
That said, we've build out an implementation plan which breaks implementation into five phases. Once again, completion and rollout of one phase does not imply or guarantee that the next phase will be completed, we may abort or change direction at any point.
Phase 1 will build a basic blockchain in the web browser. A browser extension will be built during the phase that allows users to be certain that their blockchain node is fully trustless, and not dependent on trusting portals to be honest. The first phase will include a consensus engine, a wallet, a transaction pool, a relay network for blocks and transactions, and a mining toolkit that uses the new proof-of-work algorithm. The only token will be SKT, however SKT will be fully functional as a blockchain asset by the end of phase 1.
Phase 2 will introduce RFTs, including all of the minting mechanics and anti-theft protections. The wallet will be extended to show users the list of RFTs that they own, and a basic explorer will be built to let users discover RFTs and see how other users are interacting with them. We will extend the skynet SDK to allow applications to start creating their own RFTs, so that developers and content creators can get monetized.
Phase 3 will introduce the AMMs and utreexo. Users will be able to start trading the RFTs that they own, and we will add support for the instant-sync and verification features. Utreexo may be accelerated if there is substantial growth in the ecosystem during phases 1 and 2, as utreexo enables massive scalability.
Phase 4 will introduce social features, such as following friends and trusting friends if they claim to have verified blocks. This will likely accompany a large increase in the block size, as the social features reduce the need of users to verify the entire blockchain themselves. Instead, they can split the work up with their trusted friends.
Phase 5 will focus on making a low-friction experience for users across all functions.
Epilogue
The first time I attempted to write this blog post was in 2014. I spent almost 2 weeks straight struggling through a lot of the ideas and concepts that I wanted to present, and ultimately scratched the article, realizing that my own understanding was not sufficient to credibly present to a wider audience. Since that failure, I have tried to write this post more than half a dozen times, each attempt representing several full days (12+ hours) of work. Money is a complex beast, and boiling everything down into the most important concepts took lots of trial and error, and lots of bumping up against frustrating dead ends. The final ideas really only started to take shape in March 2021, a full seven years after my first draft.
In every draft, the main driver was approximately the same. Bitcoin is an amazing technology, but as an actual money it really doesn't meet a standard that I am happy calling "progress". Bitcoin as it exists today could do a good job of preventing a mature economy like America's from sliding backwards, but it definitely doesn't move it forwards from where it is already. "How can we do better than Bitcoin" is a question I've been banging my head against doggedly since even before my first draft. 
Hopefully between the philosophy in the first section, the practical application in the second section, all of the elaborations in the appendices, and the technical overview in the third section I've managed to convince you that this novel token system is an experiment worth undertaking.
If it is exciting to you, there's a lot to build. The system laid out in this paper is explicitly designed to shed power away from central parties and instead towards the masses, which means its unlikely that the giants of today will embrace it. Instead, we're going to have to tear our economy from their hands by sheer force of will. We're going to need to rebuild all of our infrastructure. A new Facebook, a new YouTube, a new Snapchat, a new iPhone, really a new everything-on-the-Internet entirely.
Luckily, we're not alone. This token framework is just one piece of an entire movement that has been calling itself 'web3', and we're all marching together with a common goal of taking back the Internet. You can join our community at https://discord.gg/skynetlabs, or you can check out our documentation at https://docs.siasky.net. Or you can do some Googling and find any of the other excellent communities involved in pushing the web3 vision forward.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment