Cryptocurrencies are a revolutionary idea for a financial transactions system that utilise a digital and programmable ledger. On Ethereum, for example, funds can be deposited into a smart contract which is a programmable account. The deposited funds can then be accessed and transferred to any other user who meets certain conditions defined in the smart contract. These conditional transfers of funds can pave the way to advanced marketing strategies, especially suited for dApps, that are the topic of this article.

Many marketing strategies are based on discounts, coupons or loyalty programs. An application built on a blockchain, i.e. a dApp, has access to a native and very sophisticated solution to implement such kind of campaigns. The underlying idea is to tie customer rewards to conditions that can be fulfilled by performing a certain action in the dApp. Using blockchain, simple campaigns like ‘buy three, get one for free’ or ‘buy within the next month and you get a 10% discount’ only require a few lines of code. Other marketing strategies can help to grow and maintain good customer relationships. For instance, long-term customers can get rewarded for using a platform for a certain amount of time or recommending it to friends. However, also more complex conditions can be set.

The example we have implemented on OD.exchange uses a multi-conditional smart contract called Bounty (view on Etherscan). The simple idea of this campaign is to encourage customers to be the first to interact with a certain contract, the so-called Master contract (view on Etherscan). The following lines of code show the structure of the contract in which the bounty program is realised.

pragma solidity ^0.5.8;

contract Bounty {

Master masterContract;

mapping(address => bool) bountyPermission;

uint bounty;

mapping(address => bool) gotBounty;

constructor (

address payable masterAddress

)

payable

public

{

bounty = 0.1 ether;

masterContract = Master(masterAddress);

}

function applyForBounty (

uint someParameters

)

payable

public

{

// Only once per customer:

require(!bountyPermission[msg.sender]);



/* DO SOMETHING INSIDE THE MASTER CONTRACT */

masterContract.doSomething(someParameters);



bountyPermission[msg.sender] = true;

}

function withdrawBounty ()

public

{

require(bountyPermission[msg.sender]);



/* CHECK THAT ACTION WAS PERFORMED IN MASTER CONTRACT */

require(masterContract.actionPerformed());



require(!gotBounty[msg.sender]);

gotBounty[msg.sender] = true;



msg.sender.transfer(bounty);

} }

In order to get a bounty, the user needs to meet certain conditions within the Master contract. As soon as these conditions are fulfilled, the user can withdraw the bounty. For many dApp developers, structuring a bounty program like this could be the method of choice as the Master contract is fully independent of the Bounty contract. Hence, many different Bounty contracts can be built on top of the Master contract without the need of changing anything in the latter. This gives developers a tool to design new campaigns without interfering with the underlying product.

In traditional “off-chain” marketing, implementing such marketing ideas in an automated way might require a customised and perhaps complicated payment solution. While marketers would design the campaign in the frontend, the corresponding accounting would need to be organised in the backend. Therefore, this can become a complex project involving people from numerous departments within a company. This not only drives costs but also limits the options marketers have due to usually limited resources.

In contrast, a blockchain provides a native solution for a seamless integration of marketing campaigns into backend accounting. Additionally, developers can connect their campaign to the product they want to market without interfering with it. Such marketing campaigns can be realised independently and without having to consult with the developers of the actual dApp. This enhances the options for marketing and greatly reduces the required resources.