A Tale SOLD By An Idiot: Part IV “PEERticipation”

in #dmovies4 years ago (edited)

Boy howdy! What a time to have joined the Steemit community! Ultimately, what everyone seems to want is communication and leadership to foster working relationships between passionate communities - which brings us back to Torrents and Filmmakers:

Last month, I unpacked traditional distribution “Waterfalls” for my past films as a way to design my own “Decentralized Waterfall” to release my next film as a Loss Leader to experiment with tokenizing media files on the peer-to-peer sharing platform, BitTorrent.

I am optimistic and committed to this experiment, especially now that it demonstrates the collaboration between different elements and communities in decentralization and our shared struggle for adoption...and a post-covid film industry.

NoGoingTo.gif

While there is a LOT of work to be done to design and execute a smart contract that simultaneously tokenizes the distribution and creation of original media content, the first and most obvious question is:

How does everyone get paid?

For our first dMovie, A Tale Told By An Idiot, BitTorrent’s ecosystem will essentially assume the role of a traditional “Distributor” by incentivizing its users to Seed a tokenized file of the Film. Furthermore, Seed participation could help market and promote the movie which increases the value of their participation.

Looking at my own deals for previous independent films, a 20% “Distributor’s Fee” is a generous off-the-top payment to compensate all aspects of distribution, including a “transaction fee,” a “platform fee” and “Seed payouts.” This would convert all BitTorrent “Peers” into “Participants” in the revenue generated by sharing the film.

Distributors

So 20% of all tokens deposited by viewers who want to torrent my movie would be distributed:

  • 1% gross for Transaction,
  • 4% gross for the Platform, and
  • 15% gross for the Seeds, based on their participation in sharing the file.

[This will probably get its own dedicated post, but currently I am exploring whether the 15% Seed Tokens would be distributed to Seeds based on the percentage of the file hash they personally Seed per transaction (you seed 30% of the file, you receive 30% of the Seed Tokens) -or- airdropped to all Seeds based on their rank on a “Leaderboard” of lifetime seeding of the file. I am very open to the community’s thoughts and ideas below, especially if you already Seed content on BitTorrentSpeed]

DistributorFee.png

A Smart(er) Contract

First and foremost, when a Downloader deposits tokens to watch my movie, I want to immediately “split off” 1% for the Transaction and 4% for the Platform. These are standard payouts we see on most digital purchases. As I’ve never built a smart contract before, I found a simple “splitter” contract from Steve Anderson of The Blockchain Show to evenly distribute donations into static wallets:


javascript
function splitter() public {
}
function getAddresses() constant returns (address[]) { return recipients; }
modifier onlyowner {if (msg.sender == owner) _ }
function Payout() public {
uint SplitAmount = this.balance/4;
recipients[0].send(SplitAmount);
recipients[1].send(SplitAmount);
recipients[2].send(SplitAmount);
recipients[3].send(SplitAmount);
}

Steve and I started talking on Twitter about modifying his code to designate different percentages to different “Groups” and I now have a script that (I hope) assigns a percentage of token to each tier of participant…
1% transactionPayment
4% platformPayout
15% seedPayout

`
function distribute(address payable[] memory seedersAddr, uint256[] memory seedersUpload) public payable returns(bool) {
require(msg.tokenid == id,"BTT token is required");
require(msg.tokenvalue >= 1000000, "Sent value is not enough");
require(msg.sender.tokenBalance(id) >= msg.tokenvalue, "Balance insufficient");
uint256 value = msg.tokenvalue;

    transactionPayout(split(value,1000000));
    platformPayout(split(value,4000000));
    seedPayout(split(value,15000000), seedersAddr, seedersUpload);
    restPayout();
    
    download++;
    return true;
}

`
Note, to account for multiple participants, the script will quantify token deposits using hexadecimal so we can give team members fractions of tokens, enabling them to participate in every transaction, even if a user only deposited one single BTT. (This will be important later for team members who may have only worked one day and earn a fraction of a percentage point.)

Because the contract only recognizes integers, 1BTT will be interpreted by the contract as 1000000, so I may assign percentages under "1."


uint256 private constant precision = 100000000;
    mapping(address => uint256) private lifeTimeReceived;
    mapping(address => mapping(uint256 => uint256)) private received;

Next, we need to retrieve the Seeds’ wallet addresses to payout the remaining 15% of the "Distributor Gross." This should feel similar to any online partner program or affiliate marketing. You help with the sale, you get your commission. However, currently, I can only figure out how to retrieve a User ID using https://webtorrent.io

Recent announcements from BitTorrentFileShare to set daemons to earn and/or spend BTT suggest this functionality should be possible so I have asked BitTorrent staff for help to retrieve BitTorrentSpeed Wallet address for payouts and genuinely welcome ANYONE in the community with ideas or insights to share them!

HitUsUp.gif

Huzzah! we've now compensated all the Peers who help the Distribution of my film. But what about all my IRL peers who actually helped make the film? The cleanest thing to do is explore traditional formulas for "profit participation."

But before we calculate how team members participate in any “profits,” we need to build a layer to define “profit.” For A Tale Told By An Idiot, we crowdfunded the micro-budget and absorbed any overages with personal savings and sweat equity. But future films will want a way to actually “recoup” their budget before paying others.

Recoup Budget

So we need an “holding account” in our Waterfall to hold deposits until the project “recoups” a static budget threshold that each film can individually define. For now, this is just a placeholder, so I’ll just set the threshold at $0.01, or roughly 7.376646BTT.

If users paid 1BTT each to download the file, the first 8 transactions would be deposited into a static “Recoupment Wallet,” (after paying out the transaction and seeds) with the 9th transaction depositing 0.8519752BTT to the “Recoupment Wallet” and defining the remaining 0.1480248 as “Profit Participation.” The 10th transaction would verify the budget threshold had been met and define all tokens as profit.

dMovieWaterfall.png

Traditionally, any “profits” would then “flow” to the centralized production entity, or “Rightsholder.” Based on their internal accounting and agreements with team members, the Rightsholder would be expected to accurately report and pay any costs or royalties. For this film, that is me. So I have every right to treat profits differently.

In the spirit of true decentralization, I want to directly compensate all team members in real-time based on their participation in the film. Why rely on a centralized entity, when the smart contract can just deposit tokens into everyone’s personal wallet?

SwimDance.gif

This is where the entertainment industry gets a little quirky. It takes so many people to make a movie and they work under very different contracts and payment protocols. Love em or hate em, the “Suits” help get projects financed and green-lit. Meanwhile, the movie is actually “lit” by electricians.

This is the beauty of smart contracts on the blockchain. Why rely on human error and altruism when the code will execute a reliable algorithm of payment conditions and provide a ledger that anyone can audit in real time?

Profit Sharing

In my experience, there are TWO main categories of participation we need to honor and demonstrate:

  • Executive compensation, and
  • Labor compensation.

ProfitSharing.png

Say I develop or finance a creative property… My compensation may not be a “day rate,” but instead might be a “stake” in the success, often referred to as “backend” or “points.” If you think a Hollywood Producer’s eyes glaze over when you describe how blockchain works, imagine telling them they are not getting paid. By preserving a category of compensation for Executives, and Recapturing revenue that is currently being lost on BitTorrent, I hope to incentivize industry decision makers to adopt this new model.

But who makes movies? While we can often be fooled by the rhetoric about “The Hollywood Elite,” I hate to break it to y’all that most people who works in the entertainment industry do not have a 14-room mansion and a Lambo. Yes, there are mega-stars who make the Forbes list every year, but the backbone of the entertainment industry is skilled labor - carpenters, electricians, technicians, transportation, meal service, writers, day player and background performers…

Just like any other industry, we rarely hear the stories of average people, living month-to-month, cobbling together a career. For some of these workers, their lifeblood is “residuals” or royalty payments. Each time their work is exhibited (and therefore monetized) their Unions are sent residuals based on the worker’s labor hours. Each Union handles these payments slightly differently…so shouldn’t our smart contract also include a way for these laborers to work, live, and retire with dignity?

Unfortunately, the current model relies on Rightsholders reporting and paying residuals. To date only TWO independent projects pay me residuals. I average about $5 per month from each of them. Imagine if all 100+ of my IMDb credits paid me at least $5 per month??? Also, I suspect I'd see more residuals if all transactions were listed on a public ledger.

Misrepresent.gif

Full transparency, for A Tale Told By An Idiot, I fall into both categories across multiple jobs. I have personally invested 1,000+ hours to co-write, direct, act, edit, operate camera, co-produce, process payroll, make props and costumes, and teach myself to build and render 3D animation. It is unproductive for me to arbitrarily decide which component of my participation has brought more “value” to the film, so I am electing to honor both groups equally.

  • 40% of gross will be split among the “Executive” roles and
  • 40% gross will be split among “Labor” roles.

So now our smart contract needs to split the total deposit into these two groups and payout each participant according to their predetermined, static percentage:

Executive Compensation

Executive compensation will be split according to the “backend” negotiated by the producers and writers of the film. For example the below distributes 15%, 35%, and 50% of the tokens in the Executive Group to wallets 1, 2 and 3:

function executivePayout(uint256 value) private {
        address payable wallet;
        
        wallet = convertFromTronInt(0x41B78AB1CC3C316ADC512481B9C49B4C2524801E1A); //WALLET001ADDRESSPLACEHOLDER
        setTransfer(wallet, split(value,15000000));
        
        wallet = convertFromTronInt(0x41B78AB1CC3C316ADC512481B9C49B4C2524801E1A); //WALLET002ADDRESSPLACEHOLDER
        setTransfer(wallet, split(value,35000000));
        
        wallet = convertFromTronInt(0x41B78AB1CC3C316ADC512481B9C49B4C2524801E1A); //WALLET003ADDRESSPLACEHOLDER
        setTransfer(wallet, split(value,50000000));
        
    }

Labor Compensation

Meanwhile Team compensation will be split according to payroll reports (labor hours divided by total labor hours of all team members). This is where our hex-decimal helps so in the example below, a team member who worked for 8 hours can receive 0.186124% of each token distributed to the Labor Group.

       wallet = convertFromTronInt(0x410711E640F5E647CFDA11F5BC88C7B44A595087FC); //
WALLET000DAYWORKER8HOURS000PLACEHOLDER
        setTransfer(wallet,split(valueLabor,186124));

I need an entry like the above for every cast and crew member who worked on the project, with their personal wallet address, and their percentage of Labor Participation in the project.

Keeping Track

If we run the contract correctly on the Tron mainnet, it should generate a Transaction Report each and every time tokens are deposited into the contract, showing all payouts to all wallets. I’ve also added a function to tabulate the “Lifetime Payouts” of the contract.

 function getLifeTimeReceived(address addr) public view returns(uint256) {
        return lifeTimeReceived[addr];
    }
    
    function getReceived(address addr, uint256 downl) public view returns(uint256) {
        return received[addr][downl];
    }
    
    function getLatestDownload() public view returns(uint256) {
        return download;
    }

Onboarding

So now we have a first contract that fairly compensates all our “Peer-ticipants” including Distribution, Budget Recoupment, Executives and Workers...in real-time...with complete transparency. We just need to input verified wallet addresses for each participant so they will receive and control their tokens.

But, wait…most of my team members have never owned or traded cryptocurrency.

WheresEverybodyGoing.gif

So now I need to onboard 50+ newbies and teach them to safely and reliably access their future payouts.

If you have a wallet or exchange that you prefer, let me know in the comments!

Thanks for your time and talent,
-@brendanAbradley

Sort:  

Interesting project. Going to follow along now to learn more.

Thanks! check my profile for the posts that lead to this point as well :) and let me know any ideas you have

I don't know if reading a fair few more times will help me understand that any better but I did get most of it I think? XD

I think honouring both sides equally is a good idea as I really don't think if you somehow managed to quantify everything (is that even possible) one side would have contributed more than the other.

Also I'm assuming that if torrent is distribution that once someone pays the little bit to watch it, that's a one off unless their computer explodes and they have to redownload it? I don't know if this is jumping too far ahead or not XD


just buzzing around here for a bit more as I miss some of you ;D

ps sorry if this posts multiple times steem hates me today

You understand it as well as I do :-) We are right up against where the tech seems to be right now...but the question is: Can we ReCapture some of the lost revenue for indie films in the torrent space...and if so, could indie creators PARTNER with torrenters to incentivize non-pirate sharing.

Ideally, the payment is a "rental fee" for one-machine use, but even monetizing 20% of the downloads of an indie film can be the difference between making the next movie and going bankrupt.

Would it work with a pay what you want/think it's worth model? More curious than anything else as this is my preferred :)

I think it certainly could. But I also think a hurdle for all creators is that audiences don't think they should have to pay anything for content. Pay what you can generally becomes paying nothing. The traditional answer to this was to seek ad placement or sponsors, but now viewers don't they should have to watch ads either. As content obviously cost something to produce, revenue will need to be identified from somewhere for the sustainability of the ecosystem. My hope is by inviting the torrent community to become participants in the success of small stories, we can champion the rights and revenues of each other.

I've usually found the opposite (people want to pay for things, but if unnecessary stupidity like region locking keeps getting in the way then they're going to pirate). Otherwise well there's always going to be freeloaders.

One thing I seem to keep missing or misunderstanding if it's already been explained countless times in all your docs, would any given torrenter be able to just start seeding something to be able to earn the tokens to then start watching stuff or is a buy in required?

Coin Marketplace

STEEM 0.21
TRX 0.13
JST 0.030
BTC 67167.83
ETH 3499.47
USDT 1.00
SBD 2.81