Building the Lisk Crowd Project

Liskcrowd is a crowdfund platform where backers (investors) have more control over their donation. The fundraiser can allow periods of voting in which backers can cancel the project. When a project starts a crowdfund, they must indicate the amount of investment they need perperiod and how manyperiods are needed to realize their project. Hereafter we explain why it might be useful and how it works.

By Lisk

15 Sep 2020

building-the-lisk-crowd-project-OG@2x.png

Use Case - ‘A regulated crowdfund system’

Current situation

With the help of a crowdfund, a startup/entrepreneur can raise money to develop a product.

The startup/entrepreneur promises the backers that their money will be used to develop the product. There is no legal agreement stating how it will be invested and there is no return of investment for the backer to be made. Sometimes additional promises are made so that a backer will receive a product, or good when the startup/entrepreneur is successful.

After donating you no longer have control over the donation. You give the entrepreneur complete control and you will have to trust that he/she will deal with this seriously and in a proper manner.

This does not always go well. The product may fail. The team effort might fail. Or people can simply walk away with the money. Just like a kickstarter, an ICO can be seen as a crowdfunding campaign. We have seen that during the ICO hype (within the blockchain world) this has not always been handled professionally. Although the money is a donation, it does not mean that it is non-committal. It can be expected that every effort will be made to make the project successful.

Still, as an early-stage startup/entrepreneur, you want to use a crowdfunding mechanism to realize your dream/product. How can we ensure that the crowdfund / donation mechanism can be used in a more sustainable way? Therefore we came up with Lisk Crowd - A regulated crowdfund concept.

So how does it work?

Liskcrowd is a crowdfund platform where investors have more control over their investment. When a project starts a crowdfund, they must indicate the amount they need perperiod and how manyperiods are needed to realize the product. A fundraiser will raise funds through a crowdfund but they will have an obligation to the donors since the donors will get the opportunity to withdraw their investments if expectations are not met. Every X periods a voting round will be organized and backers are able to vote. The fundraiser itself determines how many voting rounds will be available. If more than 50 percent of the donors demand to stop the project, the project will be halted.

02 (1).png

03 (1).png

Now the fundraiser has an obligation to think in advance about how the money will be spent and they will have to keep informing the donors. This includes providing information about the progress & choices that are being made. As a startup, you will have to provide more insight in the costs you will incur and what you expect to deliver. In addition, it would be nice if a donor can also exercise some influence on this.

projectdetailpage (1).png

An example

For example: Startup y starts a crowdfund and indicates that they need 5k per 1 month (x) for 10 months. In total, the startup asks for 50k.

The difference with standard crowdfunding platforms is in the following; After each period (x) there is a reference point for the investors where they perform an onchain vote to determine whether the startup is entitled to investments the following month.

For example:

Every month all investors vote whether startup y has done enough work in the past month.

Option 1:More than 50% of investors vote yes (or didn’t vote, this will count as a yes vote to)

Result:The funding for the next period (x) is unlocked, giving the startup access to it.

Option 2 :More than 50% of the investors vote no

Result:The funding for all remaining periods is unlocked. In this case, the investors are given access to the funds left.

This way, the investor determines, based on the activities of the startup, whether the startup is entitled to claim the funds.

nextvote (1).png

timeline (1).png

Possible features for in the future

This new setup for crowdfunds might have all kinds of effects in the future. It may give startups/entrepreneurs an incentive to make better estimations of the costs and to plot them over time in order to get access to funding. It demands to set a standard for salaries and to provide regular feedback to the investors/donators to keep on receiving the money. This will automatically make the startup/entrepreneur more inclined to share information about the advances of the project. In the future, the monthly amount could be distinguished from a larger sum at the beginning of the project when large investments in advance would be needed.

Side effects

There might be several side effects due to the creation of “regulation” within a crowdfunding campaign. An example is that a donor can fully fund a project and exercise influence over the team in a way that was not intended for crowdfunds. This could be counteracted by providing a cap on investments or limiting the voting power of individuals compared to a group. These side effects could and should be estimated and can be done through the creation of scenarios.

Technical details

Components of the PoC

  • Back-end: Working custom transactions that can run on a blockchain.
  • An extended HTTP API connecting the back & front-end.
  • Front-end: A ReactJS front-end dashboard to create and manage crowdfunds,votes and donations. (interact with transactions).

Transactions

This Proof of Concept uses six different custom transactions which are listed below:

  • Making contract - To create a crowdfund with several details like; category, amount, vote period.
  • Contract funding - To make it possible for backers to donate to a specific project.
  • Start project - After a crowdfund is completely funded the fundraiser can start the project on a specific time this time will be the start of the first period.
  • Vote on contract - Decide as a backer if a project may continue.
    funded amount = vote weight Stake calculation
File name
1public calculateVoteStake(investments: Array<Investment>): bigint {
2  let voteStake = BigInt(0);
3  investments.map(investment => {
4    if (investment.address === this.senderId) {
5      voteStake += BigInt(investment.amount);
6    }
7  });
8
9  return voteStake;
10}
File name
1const voteWeightNo = votes
2      .filter(v => v.vote === 0)
3      .map(v => v.stake)
4      .reduce((accumulator, currentValue) => accumulator + currentValue);
  • Unlock contract by startup -, per x period, if no more than 50% votes no
File name
1public allowedToClaim(currentTime: number, startTime: number, payments: Array<Payment>): boolean {
2  const currentPeriod = this.calculateCurrentPeriod(currentTime, startTime);
3  if (payments.find(p =>
4    p.type === 0 &&
5    p.period === this.asset.period)) {
6    return false;
7  }
8  return currentPeriod >= this.asset.period && (this.asset.period * PERIOD) + startTime < currentTime;
9}
  • Unlock contract by investor, if more than 50%votes no or full funding is not achieved in time.

Create an account

To create an account we use the username and password to generate a public key. In this way, it's more user friendly to login. It might not be the most SAFE way to do it, though trying new things is part of doing experiments.

create-account (1).png

Create a crowdfund

Everyone with an account can create a crowdfund.

How does it work?

  • goal
  • voteTime (amount of period between each vote)
  • period (total amount of periods, total duration of crowdfund)
  • title
  • description
  • site (URL of the project website)
  • image (possible to choose from several predefined images and colors, which will be combined into one image with the background color. ex. Agreement#ee4b4b)
  • category
  • start (date and time when the crowdfund will start)

These assets will be used to create a new crowdfundAccount on the blockchain. The state of this account allows to either wait (do nothing with the crowdfundAccount), fund, refund (backers get their donation back), claim (the fundraiser can claim tokens for a period) or vote.

Fund crowdfund

When a backer funds a crowdfund the amount is recorded on the blockchain and later used as the amount of backers vote weight of the total amount of the crowdfund.

Vote in active crowdfund

Every crowdfund has defined when backers can vote, a day before a period in which backers are allowed to vote ends the polling opens and backers have until the start of the next period to vote. When the last submitted vote to stop the project passes 50% of the total vote weight the project is automatically stopped. A canceled project gives the backers the right to refund their donations, the amount they receive is equal to their vote weight * the amount of tokens left in the project.

Dynamic Fees

In this proof of concept we are using the sdk version 4. In this version of the sdk dynamic fees are already implemented, in the picture below you can see the fee for a fund transaction. When the message to the fundraiser is longer the fee will also increase. As you can see in the snippet it’s very easy to get this minimum fee by using the static minFee function from your transaction.

File name
1`const tx = { senderPublicKey: wallet.account.publicKey, networkIdentifier, nonce: wallet.account.nonce.toString(), passphrase: passphrase, asset: { fundraiser: fundraiser, amount: convertLSKToBeddows(amount.toString()), message } }; const transaction = new FundTransaction(tx); console.log(transaction.minFee.toString());`

dynamicfees (1).png

Resources

If you feel inspired and want to build your own proof of concept blockchain application, check out the Lisk Builders program. More information about the program and the application procedure can be found on the Lisk webpage for theLisk Grant program.

Disclaimer: This blog post was written by our community member, Jurre (Lisk.chat username: Jurre | Moosty) as part of his participation in the Lisk Builders program.