The Account Creation Problem

Houston(...erm Austin). We have a problem.

I've always been taught the most effective way to essay it to introduce the topic, layout the body of work, then conclude. One of the issues faced by developers is explaining concepts in "English" and to this I'm no stranger. Most on Steem can state we have an on-boarding issue. Some on Steem can articulate this issue. Fewer can articulate why our on-boarding issue is also a network protection against attacks to both the chain and the reward pool. One thing is certain: decentralized systems and networks are very new and solutions to these problems represent some of the most important issues facing the future of both finance and governance.

If you're reading this with only a knowledge of Bitcoin or Ethereum you may be wondering why anybody would need to claim an account in the first place. This comes down to the nature of the blockchain, Steem is a Directed Acyclic Graph, DAG, which simply means that every action run by the witnesses is the result of a previous action. Having an account on Steem is different than having a key pair on Ethereum or Bitcoin, we can reset passwords, we don't need to protect our network from spam with fees, but each account has to be the result of an account creation transaction where the public keys for a steem account are distributed to the network. To protect against some individuals from flooding the network with bots and "Cybils" these accounts have a relatively high cost and start with no effect on the network rewards via voting.

HF20 (The 20th agreed upon consensus implemented by the Steem Witnesses) introduced a new nontransferable token called the "Account Creation Token," ACT. These allow the account that claimed an ACT to build a new account on the Steem blockchain for free.
Well, free like transactions are free. Truth be told these ACTs actually cost quite a bit in the currency of bandwidth. Bandwidth on steem is represented by Resource Credits, RCs, sometimes called mana. This is currently an amount attached to every account that recharges every 5 days and of which a portion is used by every transaction that is accepted on Steem. A transfer, post, vote, custom_json(playing @splinterlands or @hashkings), and claiming ACTs all cost RCs. In fact claiming an ACT costs about 0.001% of the whole networks RCs which very few accounts have a sufficient control of.

The alternative method for creating an account currently costs 3 Steem, which significantly more accounts control... but If you can't afford an ACT with RCs then 3 Steem will be at least 0.1% of your balance and likely much more.

Even Steemit Inc can't get around these new rules and account creation has dropped to around 200 to 300 per day. If we are to have a social network with global impact something needs to change.

Steem, I have one answer.

I've been building and testing sidechains on Steem for awhile. Most notably the DLUX sidechain which seeks to provide additional publishing services to steem, enabling amongst other things VR, AR, and WebApps/dApps to be built and served with out DNS or other methods of censorship like App Stores or upfront costs of any kind. Additionally I've built the @hashkings logic which allows delegation to a pool to create an economy with out the possibility of an exit scam. I know the coordination of parties via a consensus based sidechain is more than a possibility, it's a paradigm that will compete with every corporate business model in the future.

Since asking for funding from the Steem Proposal System I've been working toward solutions that will benefit the network as a whole instead of just my dreams for my corner of it.

I'm about half way through building a program to automate cooperative market based pricing of the ACTs as well as their real time redemption. The biggest hurdle here is that ACTs must be redeemed by the account that claimed them with an active key. If you have an account large enough to claim an ACT your active key controls at least 4000 SP and often millions of SP. A third party holding these keys to coordinate selling accounts is not an option.

A second hurdle is just claiming an account isn't going to allow that account to even make a post. It needs to be funded with SP. Delegating SP also requires and active key... And somebody who is mining ACTs with their RCs might not want to delegate to the accounts they've created. Thus a "relatively simple" escrow system with a dedicated middle-man or a networked 3rd party isn't an option.

So what exactly am I building?

This program will be run by parties interested in either delegating SP or exchanging ACTs for Steem at a market rate. Since it is ran is the same distributed manner as witnesses keys are never compromised. To solve the issue of using the purchase price for two different tasks the people running this software will also build between themselves a multi-signature, @dac.escrow (decentralized account creation / distributed autonomous company), account to hold funds in escrow.

This program takes one input, blockchain transactions as a stream, and develops a collective knowledge of necessary actions. For instance. If an account sends @dac.escrow the published price for an account and SP delegation then all parties running the software will autonomously know what to do next. Runners A and B will know they have to build a new account with the information contained in the memo of the transfer(public keys and username) and fund that account with SP. The signatories of the dac.escrow will know to send steem to runners A and B when those tasks are accomplished, either immediately or after the delegation period paid for has expired.

Because every runner of the software also has information about the inventory of accounts and SP available for delegating they can use rate based algorithms for determining the market price with the current demand.

The pricing algorithm

This particular problem has a Nash Equilibrium and is closely related to a network traffic problem.

Since these ACTs are minable with RCs there is a definite rate or resource renewal. Namely 5 days. The current algorithm designed breaks this renewable resource in to 40 3 hour periods and adjusts prices based on who is willing to sell their ACTs at what price. There will be a smaller effective inventory at low prices and a larger effective inventory at higher prices. If accounts sell out faster than the equilibrium supply at a price the price moves higher, opening up more inventory. If the accounts don't sell out in a given period the price moves down, constricting inventory.

function setPrice (num){ //call every 3600 blocks or out of inv
  var out = 0, newPrice = 0, newInv = {ei:0,q:{},keys:[]}, qi = [], qd = [] //queue for delegation is still under construction
  if(num % 3600 != 0){ //see how early acounts have run out.
    out = 3600 - (num % 3600)
  }
  if (out){
    newPrice = parseInt(state.stats.pri *parseFloat(1 + ((out/3600)/40))) //increase price ... for 3 hour periods in a  day recharge window
  } else {
    newPrice = parseInt(state.stats.pri *(((state.stats.invp - state.qa.length)/state.stats.invp)/40)) //decrease price
  }
  state.stats.pri = newPrice
  state.stats.so = out
  for (var agent in state.agents){
    if (state.agents[agent].l < newPrice){ //determine effective inventory and form the queue
      newInv.q[agent] = parseInt((state.agents[agent].i * state.agents[agent].r)/8)
      newInv.ei = parseInt(newInv.ei + newInv.q[agent])
    }
  }
  state.stats.invp = newInv.ei
  for(var i = 0; i < state.qa.length ; i++){ //queue continuation 
    if(newInv.q[state.qa[i]]){
      qi.push(state.qa[i])
      newInv.q[state.qa[i]]--
      newInv.ei--
    }
  }
  for(var a in newInv.q){ //remove empty qs
    if(!newInv.q[a])
    delete newInv.q[a]
  }
  newInv.keys = Object.keys(newInv.q) //queue agents based on their available inventory during this period
  for(var i = newInv.ei; i > 0; i--){
    newInv.q[newInv.keys[i % newInv.keys.length]]--
    qi.push(newInv.keys[i % newInv.keys.length])
    if(!newInv.q[newInv.keys[i % newInv.keys.length]]){
      newInv.keys.splice((i % newInv.keys.length),1,0)
    }
  }
  state.qa = qi
}

Technical Mumbo-Jumbo

This (github) paradigm will build a consensus side-chain where the top holders of the ACT tokens are also daily promoted to signatories on a multi-signature account. This allows for an open pool of funds to simply handle the several step account creation process.

Some of the features here:

  • The participants(agents) who run this poll outside information from steem like the public keys of the agents and the initial ACT inventory, and the availible Steem Power for delegating.
  • The agents also submit reference block numbers and prefixes along with what each believe is a time 9 minutes in the future. This allows for multi-signature operations to be developed in a deterministic way so each agent can sign the transaction with out passing the transaction between them. With each 100 blocks(5 minutes) they will sign the operations developed and submit the next reference information for polling. Once enough signatures are collected the operations will be submitted.
  • In addition to the autonomous multi-signature control, each individual participant will need to sign account claim, create claimed account, and delegate vesting shares transactions. This DAC will automate that process and verification.
  • Since all the information between them is shared, prices for delegation of SP and the cost of ACTs are dynamically changed to support market conditions. Building a business around this non-transferable resource that builds the Steem ecosystem.
  • Side-chain state is stored on IPFS... which allows for near instant restarts... which are also automated.
  • Delegators to the multi-signature account may be able to earn these as well.

Some things I'd like some help or thoughts on:

  • Is it possible to tokenize an ACT purchase to be used or sold later without creating a 2 party contract?

There is a lot more work to do, but as you can see progress comes quick and the need is great. This multi-party control of accounts can be the basis for completely open smart contract platforms and other cooperatives structures that have the ability to replace ANY third party trust with nothing but free speech, verification and cooperation. Since no single agent has to perform actions for the system to work this does not create a "trust" or "security" in the eyes of the SEC or FinCEN.

Far from a conclusion.

I wanted to provide an update on my progress toward true decentralized smart contracts. As a freelance developer with out a large stake in Steem working on this platform has been of little financial benefit to me personally, counting my initial investment I'm still in the red. This has been the major factor in requesting funding from the Steem Proposal System. Once this DAC is up and running it will do what block chains are meant to do, namely removing the middleman and the fees associated with dealing through people, I'm a middleman. I don't have a large enough stake to even get ACTs on my personal account. Though I might be able to benefit from delegating Steem Power to these new accounts. So if you feel I'm doing work that will benefit the ecosystem as a whole please approve (SteemConnect Signing Link) this proposal. Or buy me a coffee via Paypal

I would love to have your support and hear your feedback. #NewSteem can and should take the world by storm!

H2
H3
H4
3 columns
2 columns
1 column
Join the conversation now
Logo
Center