Introduction to Steemit Escrow
Steemit is built on the Ethereum blockchain and allows users to create autonomous smart contracts known as escrows. An escrow acts as an impartial third-party holder of funds that can only be released according to the agreed-upon terms encoded in the contract. This allows buyers and sellers to transact in a trustless manner without relying on each other for fulfillment or payment.
When setting up an escrow, the buyer deposits cryptocurrency into the contract and specifies exactly what conditions must be met for the seller to receive the funds. This provides assurances for both parties and removes reliance on trust by programmatically enforcing their agreement.
Using Escrow for Publishing Projects
Steemit escrow is well-suited for managing ongoing payments between publishers and freelance writers for content production work. Some key aspects of how it could be implemented:
The publisher acts as the buyer, funding escrows for each project or batch of work
The writer is the seller and recipient of funds held in escrow
Escrow contracts specify deliverables, deadlines, and associated payment amounts
Publishers remain in control of funds until terms are verified on the blockchain
Dynamic payment schedules can be set up to release funds incrementally
All transaction details and timelines are immutably encoded for transparency
By wrapping agreements in self-executing smart contracts, escrow establishes clear expectations and properly incentivizes both sides to fulfill their obligations.
Implementing the Escrow Process
To utilize escrow, publishers and writers would take the following steps:
- Negotiate rates, deliverables, and payment schedule for the planned work
- The publisher deploys an escrow contract on Steemit specifying the agreed terms
- STEEM is deposited into escrow by the publisher to be held until conditions are met
- The writer begins work upon receiving hash of escrow details for verification
- Deliverables are submitted to the publisher for publication/approval
- The publisher verifies on-chain, triggering STEEM to be autonomously released
- Further payments are automatically dispersed per the encoded schedule
- Escrow settles once complete, refunding any unused deposited funds
By codifying their agreement into an escrow contract, publishers and writers can streamline the collaborative process and payment mechanics throughout projects.
Code Sample - Triggering Fund Releases
// Get escrow contract instance
const escrow = Escrow.at(contractAddress);
// Writer submits deliverable
escrow.submitWork(deliverableHash)
.send({from: writer})
.then(() => {
console.log('Work submitted');
});
// Publisher verifies and releases funds
escrow.verifyWork(deliverableHash)
.send({from: publisher})
.then(() => {
console.log('Funds released!');
});
This demonstrates how the escrow contract's API could be used to programmatically trigger payment releases upon completion of milestones.
Here are some example code snippets that could be used to implement the escrow process on Steemit:
Deploying the Escrow Contract
// Deploy escrow contract
const Escrow = new web3.eth.Contract(abi);
const deployTx = Escrow.deploy({
data: '0x'+bytecode,
arguments: [publisher, writer, amount, deadline]
});
deployTx.send({
from: publisher,
gas: 470000,
gasPrice: '20000000000'
})
.then(() => {
console.log('Escrow Contract Deployed!');
});
Triggering Fund Releases
// Get escrow contract instance
const escrow = Escrow.at(contractAddress);
// Writer submits deliverable
escrow.submitWork(deliverableHash)
.send({from: writer})
.then(() => {
console.log('Work submitted');
});
// Publisher verifies and releases funds
escrow.verifyWork(deliverableHash)
.send({from: publisher})
.then(() => {
console.log('Funds released!');
});
Cancelling & Refunding
// Cancel contract if deadline missed
escrow.cancel()
.send({from: publisher})
.then(() => {
console.log('Escrow cancelled');
// Refund publisher
escrow.refund()
.send({from: publisher})
.then(() => {
console.log('Funds refunded');
});
});
These examples demonstrate how the core escrow functions like deployment, payment triggers, and cancellation could be programmed using the contract's JavaScript API. Proper error handling and validation would need to be added for production usage.