Applying Blockchain to the External Financing Needs of Small Business Owners

Building integrated smart contracts on Ethereum with web3.js, Node.js, and Ganache

Colin Kraczkowsky
Dec 5, 2020 · 27 min read

Small business owners from sole proprietors to solopreneurs find it difficult to get external financing: from loans for growing their business to mortgages for purchasing a house. Driving this need for external financing is the fact that it takes two to three years, on average, for a small business to turn a profit. A survey of small business owners run by the National Federation of Independent Business (NFIB) in September 2020 found that 1% of small business owners report that external financing is their top business problem with 2% reporting that their last loan was harder to obtain than previously. Investment firm Biz2Credit confirms this reporting that big banks granted only 13.6% of loan applications in August 2020 down from 13.8% in July.

In the last half of 2018, the Small Business Credit Survey, a national collaboration of the 12 Federal Reserve Banks, ran a survey of 6,614 small business owners to gather data to better understand their financing needs; the results were published in the 2019 Report on Employer Firms. According to this report, 43% of respondents had applied for external financing that year. The reason? Most respondents sought external financing to expand their business by pursuing new opportunities or acquiring business assets and/or to meet operating expenses. Most small business owners regularly use loans and lines of credit as their source of external financing, so it comes as no surprise that 85% of respondents that applied for external financing applied for a loan or a line of credit.

Note: Loans and lines of credit are two different ways to borrow from lenders. A loan gives the borrower one-time access to only the amount loaned on which the borrower subsequently makes principal and interest payments until the amount loaned is paid off. Conversely, a line of credit gives the borrower a set credit limit which they can access repeatedly while making regular payments composed of both principal and interest.

When seeking a loan or line of credit, small business owners have multiple options for both the type of financing as well as the lender providing that financing. The most popular type of external financing that small business owners pursued were business loans followed by business lines of credit followed by SBA loans/lines of credit. When it comes to lenders, 49% of small business owners applied at a large bank, 44% at a small bank, and 32% applied to an online lender according to the 2019 Report on Employer Firms. On average, the monetary amount of funding that small businesses seek is relatively low. According to Raddon, a financial research and analysis subsidiary of Fiserv, 95% of small businesses seek loans of less than $250,000 and the average loan amount sought is $75,000. Yet despite the high demand for business loans and the low amount of funding sought, only 67% of applications were approved. Small business owners had better luck with business lines of credit where 73% of applications were approved and even worse luck with SBA loans/lines of credit with an acceptance rate of only 52%. In total, the 2019 Report on Employer Firms found that only 47% of respondents that applied for external financing received the total amount that they sought.

Why is it that over half of the small business owners looking for financing experienced a “shortfall”, i.e. they obtained less funding than they sought. One could first look for answers from the lenders. What one would find is that overall most banks, especially big banks, have reduced their small business lending activity since 2006. According to the 2018 report How Did Bank Lending to Small Business in the United States Fare After the Financial Crisis? published by the U.S. Small Business Administration, small business lending from banks grew by 5% per year from 2009–2011 before growth dropped to less than 4% per year from 2012–2015.

After scrutinizing the lenders, one could then look for answers in the process for getting a loan. According to industry experts from The Balance Small Business, Fundbox, and Entrepreneur common reasons that loan applications from small business owners are rejected include insufficient collateral or lacking the right type of collateral, low credit score or lack of credit history, already carrying a lot of debt, and inadequate cash flow. According to the 2019 Report on Employer Firms these are also some of the same reasons that small business owners didn’t receive all of the funding they wanted.

Note: In fact, 61% of small businesses around the world struggle with cash flow issues. Among these issues, many business owners rank collecting payment quickly and accurately as their number one challenge. In a separate blog, I investigate how small business owners can leverage blockchain technology to approach cash flow issues and avoid becoming one of the 50% of SMBs that close within five years of opening.

In addition, Fundbox reports that one of the most common reasons small business loan applications are denied is that the applicant didn’t complete the application correctly, e.g. they didn’t include supporting documents like a business plan or they made a clerical error like inputting the wrong four-digit Standard Industrial Classification (SIC) code used to classify the industry the business is in, which isn’t surprising given that business owners often spend 20+ hours on a loan application.

Even after factoring in those who did not experience a shortfall, the majority of small business owners who applied for financing from big banks and online lenders reported challenges in the process. For big banks, the greatest challenges reported were the long wait to receive a decision and the difficulty of the application process. According to a survey conducted in 2019 of 1,000 small business owners and published in Small Business Trends, 16.3% of respondents reported waiting at least a month to hear back about a loan application while 7.5% reported waiting over six months. For online lenders, the greatest challenge reported was the high interest rates. According to Nav, a traditional bank loan the annual interest rate for a traditional bank loan ranges between 2% to 13% while the rate on a loan from an online lender can range from 7% to 100%.

There are clear problems inhibiting small business owners from getting external financing to pay for their various expenses. Their preferred lenders are approving fewer applications. The requirements to get an application approved are getting stricter. And the applications themselves are time-consuming and convoluted. There must be a solution to this problem. I believe that blockchain, and particularly smart contracts on the Ethereum blockchain, can provide such a solution.

Applying blockchain to this problem

Blockchain is quick and simple. The Ethereum blockchain is founded on the core technology of “smart contracts”. Smart contracts are a collection of data and logic that can be securely deployed to a blockchain network using cryptographically signed transactions. Conceptually this means that loan regulations could be added to smart contracts. Once the smart contract is filled, the borrower can publish it quickly and as funds start coming in they will be immediately accessible in their account. This digitalization of contracts in a secure environment enables lenders to validate transactions, verify legitimacy of the parties, and perform all loan administrative tasks in a fraction of the time as the traditional lending process. In addition, as described in the above, business owners often spend 20+ hours on a loan application yet many of these applications are denied because the application was not completed correctly. This alludes to complexity in the application process. Blockchain is a digital native technology benefiting from the simplicity that digital interfaces and processes provide. The developer of a smart contract can build and tailor a user experience that is intuitive and easy. Smart contracts have the potential to greatly accelerate the lending process which would lead to an additional benefit: reduced costs.

Blockchain is cost efficient. In the traditional lending process, people require intermediaries like a loan officer, bank, underwriter, and loan processor to build the trust to provide financing. Each of these entities are subject to regulations. Each additional intermediary and regulation in the lending process increases the fee the borrower has to pay. Blockchain could reduce these costs through time efficiencies and by allowing the borrowers to deal directly with lenders.

Blockchain provides transparency. A major factor in the problems with the traditional lending process is information asymmetry. Banks don’t want to approve a loan from an applicant with whom they have no previous relationship and for whom they can not be comfortably sure will repay the loan. Blockchain helps to establish this trust, or, from some perspectives, removes this need for trust altogether. One core component of blockchain is “distributed ledger technology” which enables all computers within the blockchain network to have the same copy of all transactions that are taking place on that blockchain where they are separately verified and protected by a consensus mechanism.This ensures that all transactions are immutable and that any alteration on the data within the blockchain is documented. Each transaction is time-stamped and includes the encrypted signature of the executor of the transaction for all participants of the blockchain to see. For lending markets, this enables information symmetry between borrowers and lenders. Borrowers can feel secure that the financing they are receiving is not at risk of being rescinded because the funds have already been spent multiple times. Lenders can see the borrowers transaction history to gauge the likelihood that they will be repaid.

Blockchain is borderless. This greatly increases the scope of blockchain. For lending markets, the current fiat system introduces challenges to procuring a loan. One challenge is time complexity. It takes time to wire money internationally getting it from the lender’s account into the borrower’s account. Many sources estimate that the wire could arrive anywhere between one and five business days. The first step is to initiate the international wire transfer at which point the funds are deducted from the sender’s account. Instructions for the transfer are then normally moved through the Society for Worldwide Interbank Financial Telecommunication (SWIFT) network, a network of over 10,000 banks and financial institutions in more than 200 countries, passing through various intermediary banks before finally landing at the recipient’s bank which then has its own processing delays. Often this processing is to avoid fraudulent transactions; refer to the paragraph above to see how blockchain can mitigate fraud. Once this money gets to the recipient’s account it very likely will need to go through further processing via an exchange into the local currency of the receiving party. This also takes time and typically incurs a fee at whatever is the current exchange rate. Compounding this is that different countries offer different lending interest rates. According to the World Bank the average interest rate for credit in 2019 was 19.82% in Ukraine, 67.26% in Argentina, 9.56% in Bangladesh, and 5.28% in the United States. Blockchain opens the opportunity for anyone around the world to get a loan in a reasonable time under a global interest rate and anyone, anywhere can contribute.

Now that we have developed a shared understanding of some of the ways in which blockchain can improve the lending process, let’s get to building something on the blockchain! We will build out solutions for the Ethereum blockchain where we can deploy smart contracts. The smart contracts will be written in the Solidity programming language. We will not be deploying to the production Ethereum blockchain. Instead, we will deploy to Ganache which created an instance of the Ethereum block on our local machine. The solution that we will build will enable a borrower to post a request for a loan that is backed by collateral in the form of a crypto asset. Any lender can then browse that request and choose to fund it. The borrower will then have access to that funding, and the lender will eventually be paid out the amount promised by the borrower. To achieve this, we will build two smart contracts: one to represent the loan request which will receive the funding and distribute the return and a second to represent the collateral backing the loan request.

To follow along, you can find the source code on my GitHub.

Building a smart contract on the Ethereum blockchain to represent a loan request

I go over the basics of writing smart contracts in a separate blog, so in this blog I dive right into the specifics of the code. To start, we set up our project and create a Solidity source file.

The LoanPlatform.sol file is going to hold the two smart contracts that we build in this blog.

Within the LoanPlatform.sol file, we write the contents of our smart contracts. The first part in our blockchain-enabled lending process requires the borrower to post a smart contract describing the requested loan amount, the amount that the lender will receive in return for funding this loan, and the amount of time that the borrower has to pay down this loan, i.e. four months from the deployment of the contract.

A contract is a special concept in Solidity that acts similarly to a class in an object-oriented programming language like JavaScript. Like a class, construction is the first stage in the lifecycle of a contract and likewise contains a constructor function. We use this function to initialize the variables that we defined earlier in the contract. Upon creation of a new instance of SmartLoan the smart contract expects to be provided a loanAmount, a payableAmount, and a timePeriod, which should be expressed in months. We create a variable to represent the start of the contract and initialize it to 0 as we do not want the clock to start until the lender sends the requested loan amount to the contract. Finally, we grab the address of the individual initiating the smart contract. These variables then get persisted by the smart contract in public variables accessible via the Ethereum blockchain for all parties to see.

Building a smart contract on the Ethereum blockchain to hold collateral backing a loan request

Now that we have enabled the borrower to create an instance of the SmartLoan smart contract to post a request for external financing, we assemble a mechanism for them to back this loan with some collateral. We achieve this through a second smart contract that will get its own address on the blockchain and be able to manage its value separately from that of the loan. In this step of the process, the borrower deploys the second smart contract and transfers into it the value of the collateral backing the loan. The collateral is in the form of a crypto asset that is untouchable by the borrower for a period of time if they don’t get the necessary money by the requested time.

In our BorrowerCollateral smart contract we utilize the fallback() payable mechanism of Solidity to capture any payments made to this contract’s address. We then define a withdrawCollateral function to hold the somewhat complicated logic for how this smart contract will handle withdrawals. This function expects to be provided the address of an instance of a SmartLoan smart contract which we will use to reference that contract. The first clause in our if statement is to handle the requirement that only the borrower can withdraw the collateral before the contract starts. To achieve this, we use the reference to the contractStart variable in our instance of SmartLoan which, recall from above, we initialize to 0 when the smart contract is created but before it has received funding. In this case, an attempt from anyone other than borrower to withdraw the collateral will be reverted by the Ethereum Virtual Machine (EVM). The next clause is to handle the requirement that the collateral can only be withdrawn by borrower either once the contract has ended or once they have paid the amount promised. To achieve this, we compare the current block timestamp with the end of the duration of the loan which we get from SmartLoan. Any attempts to withdraw the collateral in this case will be reverted first if the loan has not yet been paid off, the transaction will be reverted and second if the request is being made by anyone other than by borrower. If the payment has been made then borrower will be able to withdraw the full amount stored in the smart contract using the transfer method provided by Solidity to send Ether, in units of wei, to the calling address. The else statement represents our final clause to handle the requirement that if the borrower defaults on the loan, i.e. doesn’t pay the lender the amount promised by the end of the contract, then the collateral is forfeited to lender. We achieve this by reverting all calls to our withdrawCollateral function unless they are made by lender which we get from SmartLoan. Next, the borrower posts BorrowerCollateral and transfers the collateral amount to the newly created address.

Once the collateral has been funded, the borrower adds the collateral to their loan so that all information is contained within the loan.

To achieve this, we add a new addCollateral function to SmartLoan which accepts an address as a parameter. This address should be the address of an instance of BorrowerCollateral which we built above. We then create a new variable of the BorrowerCollateral type passing it the collected address to give us a reference to that specific instance. Finally, we use that reference to get the value of the collateral and store it in SmartLoan as the new collateralAmount variable.

Receiving funding for our loan on the Ethereum blockchain

In the next step of our lending process, a potential lender reviews the details of the deployed instance of SmartLoan and assesses the requested loan amount, the amount that they will receive in return, and the collateral attached to the loan request to decide whether or not to fund the loan.

Again we use the fallback() payable mechanism of Solidity to capture a payment from a lender. In the first line of this function, we insert a require function, a.k.a. a “convenience function”, provided by Solidity to assert that the payment made by the lender is the amount requested by the loan. Otherwise the transaction will be reverted. We then capture the address of the lender and store it in the lender variable for later use. We also start the clock on the loan now that it has received funding. Since the payment from lender will add a new block to the blockchain, we can access and store the timestamp of this block using block.timestamp which will reference the timestamp of the block that this transaction was included in as seconds since the Unix epoch, i.e. the time elapsed since 00:00:00 UTC January 1, 1970. That will represent the start of the contract. We now need to calculate the end of the contract. Recall from the Building a smart contract on the Ethereum blockchain to represent a loan request that we defined a timePeriod as a part of the construction of this smart contract to store the duration of the loan in months. As block.timestamp is returned in seconds, we perform a simple calculation to determine contractEnd as a function of timePeriod after that timestamp. For the purposes of this simple example, we are assuming that there are a standard 30 days per month. Now lender, contractStart, and contractEnd are persisted by the smart contract in public variables accessible via the Ethereum blockchain for all parties to see.

Managing the lifecycle of the loan

At this point in the lifecycle of our loan on the Ethereum blockchain, a borrower has posted a smart contract requesting financing for a loan as well as backed that request with collateral and a lender has been able to fund the loan. Now, we need to account for the various scenarios that could arise throughout that lifecycle until it terminates at the payment of the loan. For example, the borrower should be able to withdraw the financing at which point neither they nor the lender should have access to the collateral. In addition, the borrower should be able to repay the loan at which point the collateral should be available for them to reclaim. We implement these scenarios by coding additional functions and requirements into our smart contract.

We first enable the borrower to withdraw the financing by adding a withdrawLoanAmount function. This should only occur once, so we create the loanAmountWithdrawn variable of type bool to check for this. If the financing has not yet been withdrawn, we next check that the transfer request is coming from borrower. Recall from the Building a smart contract on the Ethereum blockchain to represent a loan request section above that we stored a reference to the address of the borrower in the construction of the smart contract which we use to perform this check. Having passed those requirements, the value of the smart contract is then moved to the requesting address using the transfer method provided by Solidity to send Ether, in units of wei, and withdrawLoanAmount is set to true to indicate that the financing has been withdrawn.

Next, we enable the borrower to make a payment on the loan by adding a makeBorrowerPayment function. For the purposes of this simple example, we require that the payment is the full amount promised at the construction of the smart contract. The makeBorrowerPayment function is of type payable making it available to receive transactions. I provide more information on the different types of functions in Solidity in a separate blog, but essentially any calls to a function of this type must contain a value which we can access via msg.value and store. Upon execution of our makeBorrowerPayment function, SmartLoan will now also hold the value of the payment that the borrower made. We store recognition of this payment in the newly added amountPaid variable. Updating the amountPaid variable will also unlock the collateral in our BorrowerCollateral contract so that the value can be reclaimed by the borrower.

Finally, we enable the lender to withdraw a payment on the loan by adding a withdrawBorrowerPayment function. Because our smart contract can exist without having received any funding, we first check that the loan has actually started. We do this by checking that lender is holding an actual address which would indicate that the loan has been funded. Next, we check that only lender can withdraw the payment. Once these are both satisfied, we initiate the transfer. Since the lender only has claim to the payment promised by the borrower, we supply borrowerPayment as an augment to the transfer function so that only that amount will be transferred.

Success! We have written two smart contracts representing our lending process on the blockchain. There are obvious room for improvements like support for interest rates, support for multiple lenders, option without collateral, auto-generation the fixed rate of interests based on the profile of a borrower, but these are all the scenarios that we will cover in this example. As our process and requirements grow we would add new code to our smart contract to handle them. Once we have built a smart contract that we are happy with, we are ready to compile and deploy it to the blockchain.

Deploying our solution to the Ethereum blockchain

Now that we have written our smart contracts, we need to make it executable by deploying it to the Ethereum blockchain. The blockchain that we use is Ganache, a personal, in-memory Ethereum blockchain. We also want to interact with our smart contract. We will do so by running a local Node.js server and loading the web3.js library, a popular JavaScript API for Ethereum. I go over how to use Ganache and the web3.js library in a separate blog, so I won’t dive into too much detail here.

We start by installing the dependencies.

In a terminal window, let’s launch Ganache CLI to see what has been installed.

Let’s arbitrarily pick one address to represent our fictional small business that is seeking external financing and a separate address to represent our fictional lender that is providing that financing.

We can view the details of our newly created accounts using the web3 library.

We see that each account came with 100,000,000,000,000,000,000 wei (100 Ether) preloaded, so we are ready to start executing some transactions on Ethereum! Our first transaction will be to get our smart contract deployed to the blockchain. In a separate window, we use the solcjs Solidity compiler that we installed earlier to compile our SmartInvoice source code into .bin and .abi files.

You will notice four new files appear in your project: the LoanPlatform_sol_BorrowerCollateral.abi file, the LoanPlatform_sol_BorrowerCollateral.bin file, the LoanPlatform_sol_SmartLoan.abi file, and the LoanPlatform_sol_SmartLoan.bin file. We need all of these files to deploy our smart contracts to Ethereum. We first deploy the SmartLoan contract from the borrower’s account. This example loan will request 2000 wei and promise 2200 wei in return after a period of 4 months.

We chose 0.000000098 as the gasPrice because, according to Eth Gas Station, that is the recommended gas price to process a transaction at a standard rate as of the time of this blog. In Ganache CLI, we see the following output:

Let’s store the address of the contract in a new variable. We will need it later in this blog.

Using web3, we can also see the cost of executing this transaction to the small business owner’s account.

That transaction cost 78,170,876,000,000,000 wei (0.078170876 Ether) to process. We can verify this because 797,662 units of gas * 0.000000098 Ether per unit of gas = 0.078170876 Ether. At the time of this blog, 1 Ether cost $590.67 USD meaning that this transaction cost $46.17 USD to produce. With this one-time cost our smart contract now exists on the blockchain forever, or at least until we decide to modify it.

Next, we deploy the BorrowerCollateral contract.

This transaction adds a new block to our Ethereuem blockchain.

Let’s store the address of this contract as well.

We now have both of our smart contracts deployed to the Ethereum blockchain running on our local machine with Ganache! We can now test that all of the logic is functioning appropriately.

Testing our solution with Ganache

Let’s run through some test cases to ensure that our SmartLoan smart contract and BorrowerCollateral smart contract are functioning as expected.

Test Case: Our BorrowerCollateral smart contract is able to receive transfers.

Test Case: If the loan has not yet started, only the borrower should be able to withdraw the funds stored in our BorrowerCollateral smart contract.

Test Case: The collateral can be added to our SmartLoan smart contract.

Test Case: Our SmartLoan smart contract is able to receive transfers only in the amount defined upon deployment of the contract. Upon receipt, the contract should be stamped with a start time and an end time.

Test Case: Only the borrower can withdraw the loan amount.

Test Case: Once the loan has been withdrawn, the borrower should not be able to withdraw the collateral unless the lender has been repaid.

Test Case: The borrower needs to make a repayment equal to the amount promised.

Test Case: Once the loan has been paid, only the lender should be able to withdraw the payment.

Test Case: Once the loan has been paid, only the borrower should be able to withdraw the collateral.

Test Case: If the borrower hasn’t made a payment by the time the contract has ended, only the lender may withdraw the collateral.

Perfect, all of our test cases passed!

Alternative options to traditional lending

Over the past decade, the world has seen a number of new lending options appear as an alternative to traditional lending through banks. In fact, the solution that we built throughout this blog is what some would consider a “peer-to-peer lending” solution. Around 2005, we saw the evolution of peer-to-peer lending, often abbreviated as “P2P”, as another option for small businesses to acquire external financing. Traditionally small business owners sought external financing from banks. The owner would submit an application to the bank and the bank would review their credit score, history, and income to determine how much money to loan them and the interest rate for which they would qualify. Rather than using credit score and history, P2P lending services rely on their own algorithms to assess credit worthiness enabling them to accept more applications that banks would consider too risky. Manifestations of P2P lending today are online services that connect borrowers with lenders. Borrowers submit a request for a loan and their information. Based on their information, the service determines an interest rate that the borrower will pay on top of their principal. This online presence allows these services to process requests much more quickly than traditional external financing options. The service then posts the loan at which point lenders can discover that loan and contribute an amount towards the total amount requested by that borrower. The lenders then receive a monthly sum of principal payments and interest payments. If the borrower defaults on the loan then the lenders either lose whatever remains of their investment or sell their remaining investment at a loss to another risk-tolerant investor who believes that the some value can still be recouped. Popular P2P services today are Funding Circle, Upstart, Prosper, and LendingClub.

According to MarketWatch, the market for P2P lending was valued at approximately $68 billion USD in 2019 and anticipated to grow at a rate of more than 30% over the next seven years. They cite enhanced transparency and low operating cost as a large factor driving that growth. As we have seen throughout this blog, the emergence of blockchain has a massive impact on those same factors and therefore can be expected to be a game changer in the P2P landscape and revive it as a viable means for raising capital for small businesses. As an immutable, decentralized ledger, there is no need for an intermediary in blockchain. Lenders are directly linked to the small business borrower with full transparency and a real-time look at the lending process. There are also cost savings from the elimination of typical overhead costs like upfront fees (e.g. P2P services today generate revenue by collecting a one-time fee from borrowers on funded loans and a loan servicing fee from investors), underwriting fees and closing costs. In addition, blockchain can introduce these borrowers to the potential of borderless financing and open up doors to capital that was not previously accessible to them.

While ostensibly this seems like a great situation for small businesses, as with any new technology and product, there is uncertainty around whether users will choose to use it. This concept was best characterized as “value risk” by technology product management thought leader Marty Cagan in his book INSPIRED, a must read for product people. The 2019 Report on Employer Firms introduced at the beginning of this blog shows a favorable trend towards reducing value risk. According to the report, trust in online lending has been rising among small business owners with 32% of respondents seeking funding from an online lender in 2018 up from only 19% in 2016. When pressed for the reasons for pursuing online lending, respondents largely credited the speed at which a decision on their application could be made as well as the likelihood that their application would be accepted. Vice versa, small businesses that pursued external financing from a traditional bank reported their existing relationship as the most significant factor in their decision. This is good news for the future of online lending and blockchain! If an existing relationship is the main reason why a small business owner would choose a lender and we are seeing a surge of small business owners establishing relationships with online lenders, then it is only a matter of time before online lending becomes a primary source of funding for small businesses. And, as we have discussed earlier in this section, the improvements that blockchain will enable for online lending will only reinforce the adoption of lending options running on a blockchain.

What were we talking about, again?

As we learned at the beginning of this blog, there is a problem in the lending market for small businesses. Small business owners want to expand their business, acquire business assets, and/or pay their operating expenses. To do so, they need capital which they turn to external financing to provide. The problem is that many small business owners are finding it difficult to get external financing via today’s channels with only 47% of applicants receiving the total amount sought. The reasons for this shortfall span both the lenders and the lending process. Big banks are reducing the number of accepted applications from small businesses. Simultaneously, small businesses are being denied for loans because of insufficient collateral or the right type of collateral, a low credit score or no credit history, they are already carrying a lot of debt, and/or they have inadequate cash flow.

To address this problem, we turned to blockchain which has the potential to open up new channels for external financing. Blockchain enables the lending process to be performed both quickly through decentralization of the process across a peer-to-peer network and securely through cryptography. This time-savings and reduction of intermediaries means that small business owners can receive funding more quickly and at a cheaper price. The entire lending experience can be simplified using smart contracts on the Ethereum blockchain which can be integrated with an intuitive web frontend limiting the number of applications that get denied due to clerical errors. This also opens a new channel of external financing for small business owners to supplement the shortfall in loans from other channels or to meet all of their lending needs.

Why should we care about this problem? Without access to external financing, small businesses will fail. We see this all the time. The Bureau of Labor Statistics within the United States Department of Labor reports that 20% of small businesses today will fail in their first year and 50% will fail by their fifth year. The owners of these small businesses are our friends and neighbors; especially those of us lucky enough to call New York City our home. According to an article in Small Business Trends published in 2019, New York City is home to the most small business owners with a total of 411K which is even greater than the combined totals of runners-up Los Angeles at 243K, San Francisco at 84K, and Boston at 81K small business owners. While small business owners are a minority compared to the working population, data shows that most of us actually want what these individuals have been brave enough to do. In fact, according to a survey run by the Organisation for Economic Co-operation and Development in 2015, 69% / 62% of adult men and 58% / 52% of adult women in the United States and Canada respectively want to build their own businesses. While this presents a clear economic opportunity, a convincing humanities argument could also be made to build solutions to problems that inhibit achievement of a dream so common across our fellow human beings.

But in order to enable small businesses to open and stay open, we need to open up new channels of external financing to small business owners!

If you are a small business owner and you’d like to get some hands on experience building smart contracts on Ethereum with Solidity and JavaScript, clone the source code from my GitHub of the application that we built throughout this blog and run it on your local machine.

About the author

Colin Kraczkowsky is passionate about building solutions that solve people’s problems and loves to learn and share his thoughts on new technologies. His latest interest is in blockchain, specifically Ethereum development, and its applications to solving problems for small businesses including sole proprietors, the self-employed, and solopreneurs. Colin’s professional history includes working in both enterprise and startup environments to code web and mobile applications, launch new products, build mockups and prototypes, analyze metrics, and continuously innovate.

In his spare time, Colin can be found checking out an REI camp bundle for a weekend away in the woods, field testing the latest HOKAs, hunting fresh powder on the mountain, or surfing the Horror section on Netflix.

Connect with Colin —

Get smarter at building your thing. Join The Startup’s +792K followers.

Sign up for Top 10 Stories

By The Startup

Get smarter at building your thing. Subscribe to receive The Startup's top 10 most read stories — delivered straight into your inbox, once a week. Take a look.

By signing up, you will create a Medium account if you don’t already have one. Review our Privacy Policy for more information about our privacy practices.

Check your inbox
Medium sent you an email at to complete your subscription.

The Startup
Colin Kraczkowsky

Written by

Problem solver wielding JavaScript and Python as my tools. Builder of RESTful web services and progressive web applications. Scholar of the newly possible.

The Startup

Get smarter at building your thing. Follow to join The Startup’s +8 million monthly readers & +792K followers.

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store