Reserved IP Address°C
02-15-2025

Failed to fetch data

Getting your Trinity Audio player ready...

This post was first published on Medium.

According to Wikipedia:

pyramid scheme is a business model that recruits members via a promise of payments or services for enrolling others into the scheme, rather than supplying investments or sale of products.

Pyramid Scheme concept

We develop a pyramid scheme based on a smart contract. To join, every participant has to pay a fee to interact with the contract. The contract guarantees the new participant a 100% return¹, as long as he can recruit two more participants. Since the whole pyramid scheme is automatically enforced by smart contract, it is transparent and trustless.

Pyramid Transactions: numbers in red after / denote satoshis
Pyramid Transactions: numbers in red after / denote satoshis

In the example above, Alice has paid a entry fee of x, which entitles her to be the beneficiary in UTXO0. If she convinces Bob and Charlie to join, each paying x, she is guaranteed to be paid 2x, which in turn renews the scheme but with Bob and Charlie as the new beneficiaries. The scheme continues, as long as new investors can be found.

The full code is shown below.

// A transparent Pyramid scheme
contract Pyramid {
@state
PubKeyHash schemer;
// satoshi amount required to enter the scheme
int entryFee;
// dust limit
static const int DUST = 1;
// recruite two members to get double payout
public function recruit(PubKeyHash recruit0, PubKeyHash recruit1, SigHashPreimage txPreimage) {
// use ANYONECANPAY so recruits can deposit
SigHashType sigHashType = SigHash.ANYONECANPAY | SigHash.ALL | SigHash.FORKID;
require(Tx.checkPreimageSigHashType(txPreimage, sigHashType));
// commission payout: double the original entry fee
bytes commissionScript = Utils.buildPublicKeyHashScript(this.schemer);
bytes commissionOutput = Utils.buildOutput(commissionScript, 2 * this.entryFee);
// keep the scheme going from recruit0
this.schemer = recruit0;
bytes recruitScript0 = this.getStateScript();
bytes recruitOutput0 = Utils.buildOutput(recruitScript0, DUST);
// keep the scheme going from recruit1
this.schemer = recruit1;
bytes recruitScript1 = this.getStateScript();
bytes recruitOutput1 = Utils.buildOutput(recruitScript1, DUST);
bytes output = commissionOutput + recruitOutput0 + recruitOutput1;
require(hash256(output) == SigHash.hashOutputs(txPreimage));
}
}
view raw Pyramid.js hosted with ❤ by GitHub
Contract Pyramid

Line 15 use ANYONECANPAY so Bob and Charlie can add their inputs independently, each having satoshis².

***

NOTES:

[1] This assumes dust limit is negligible. The first participant earns more than 100% since he only has to pay the transaction fee to deploy the contract.

[2] We ignore transaction fee, which can be easily covered by another input.

Watch: CoinGeek New York panel, BSV vs. Other Blockchains: Differences that Matter for Developers & Businesses

Recommended for you

Evaluating Bitcoin upgrade proposals
As sCrypt says, these proposals aim to enable Bitcoin's limited functionalities rather than tackling the broader need for expressivity and...
February 12, 2025
Bitcoin OP_CAT use cases series #5: Drivechain
sCrypt has created a smart contract operating similarly to the hashrate escrow mechanism in Bitcoin’s Drivechain proposal.
February 10, 2025
Advertisement
Advertisement
Advertisement