draft
optional
This NIP defines the Bitcoin Social Network (HEART), which provides decentralized economic incentives for growing the adoption of decentralized social networks using the Nostr protocol.
The aim of the Bitcoin Social Network is to reduce the sats/byte fees to enable on-chain social networks without burdening everyday Bitcoin node operators, decreating the time to finality to make Bitcoin more acceptable for social media use cases, and removing the high energy demands to satisfy the environmental concerns of Proof-of-Work. This section provides a high level overview of how this can be achieved while maintaining a decentralization.
A user can get Hearts by:
- Staking their Bitcoin (BTC)
- Earning it on decentralized social networks by creating valuable content, or
- Holding it and earning daily Heart rewards
To begin earning Hearts by staking Bitcoin, create an event_request:
{
"id": <32-bytes lowercase hex-encoded sha256 of the serialized event data>,
"pubkey": <32-bytes hex-encoded public key of the event creator>,
"created_at": <unix timestamp in seconds>,
"kind": 21,
"tags": [
"p": "<pubkey of the bitcoin staking taproot address, as a hex string>",
"d": "<pubkey of the Social Network EVM address receiving hearts>",
],
"content": <additional data to be stored by relayers>,
"sig": <64-bytes lowercase hex of the signature of the sha256 hash of the serialized event data (same as the id field)>
}
Next, create a Partially Signed Bitcoin Transaction (PSBT):
import earthwallet from 'earth-wallet';
var earth = new earthwallet('yourprivatekey');
var amount = <amount in sats>
var stake_tx = earth.stake_bitcoin(event_request, amount);
// Submit stake_tx to a Bitcoin node
var tx = axios.get(`https://mempool.space/tx/${stake_tx}`);
console.log(`Successfully staked ${amount} sats for hearts! Transaction: https://mempool.space/tx/${tx}`)
After 7 confirmations on the Bitcoin network, your heart balance will be updated on the Social Network with satoshis_staked/total_satoshis_staked * total_heart_supply
, minus any network fees.
Users can additionally earn Hearts by posting valuable content which is saved by others to the Social Network, determined by:
{
"kind": 22,
"tags": [
"e": "event_id of the item being hearted",
"t": "unix timestamp to heart content until",
"r": "relayer requested to store the content"
],
"content": "reply or additional note"
...
}
And submitted to relayers with:
import earthwallet from 'earth-wallet';
var earth = new earthwallet('yourprivatekey');
var amount = <amount in heart>;
var heart_tx = earth.heart_event(event_request, amount);
// Submit heart_tx to a Social Network Relayer
var tx = axios.get(`wss://nodes.earthstaking.com/${heart_tx}`);
console.log(`Successfully hearted ${amount}! Transaction: https://mempool.space/tx/${tx}`)
If the social network relayer requested approves the content storage request, the event will be set to long term storage by the relayer, heart bonuses will be paid to the and the creator (30%) and relayer (70%), every week at 00:00 GMT according to:
Heart_allocated = '(event_data_size / network_capacity) * (unix_timestamp / t) * (2% total_heart_suppy / 52)'
The creation of heart will be set at a maximum of 2% per annum, and allocated to the most important content determined by the Social Network.
To redeem Hearts for Bitcoin, simply call the Heart token contract unstake(btc_address, amount)
function, with your BTC address, and the amount of Hearts being unstaked back to Bitcoin. Once confirmed on the Ethereum network, the Social Network relayers will transfer the 1/369 satoshis for every Heart unstaked, to the btc_address provided.
A users current HEART balance can be verified by making a GET request to https://social.network/.well-known/nostr.json?heart=b0635d6a9851d3aed0cd6c495b282167acf761729078d975fc341b22650b07b9:
369369369
Heart balances may be considered equal to 369 satoshis (sats) per heart, shown to 8 decimal places.