paint-brush
Kaip sukurti grandinės mokėjimo už peržiūrą protokolą šaknyjepateikė@nescampos
376 skaitymai
376 skaitymai

Kaip sukurti grandinės mokėjimo už peržiūrą protokolą šaknyje

pateikė Néstor Campos9m2024/11/30
Read on Terminal Reader

Per ilgai; Skaityti

Monetizado yra grandinės mokėjimo už peržiūrą protokolas. Tai leidžia gauti pajamų iš bet kurio tinklalapio ir statinio turinio per Web3.0. Jis gali būti naudojamas puslapiams apsaugoti, kad jį matytų tik prenumeratoriai.
featured image - Kaip sukurti grandinės mokėjimo už peržiūrą protokolą šaknyje
Néstor Campos HackerNoon profile picture

Dėmesingumo ekonomikoje (Web 2.0) vartotojai yra „verčiami“ mokėti už prenumeratas, kad galėtų pasiekti išskirtinį turinį (viso tipo turinį, įskaitant turinį suaugusiesiems), tačiau niekas neužtikrina, kad gausite naudą, už kurią mokate, nes turinys kūrėjas nekuria naujų dalykų arba turite užsiprenumeruoti ilgesniam laikui, kai norite mokėti tik už tai, ką vartojate.


Tačiau Web 3.0, ketinimų ekonomika, suteikia vartotojams galimybę mokėti tik už tai, ką jie vartoja, o ne už ilgesnį laikotarpį, naudojant mikromokėjimus. Savo ruožtu, tai skatina turinio kūrėjus nuolat atnaujinti savo kūrinius ir gauti pajamas iš karto, su labai mažomis sąnaudomis, neatsižvelgiant į centralizuotus šliuzus.

Monetizado, grandinės mokėjimo už peržiūrą protokolas

„Monetizado“ yra grandinės mokėjimo už peržiūrą platforma, leidžianti gauti pajamų iš bet kurio tinklalapio ir statinio turinio (jei neturite prieigos prie užpakalinės programos, kad galėtumėte atlikti pakeitimus) per Web3.


Monetizado galite įdiegti naujienų svetainėse, socialiniuose tinkluose, išskirtinio turinio portaluose ir kt. Taip pat galite jį naudoti norėdami paskatinti vartotojus mokėti ir nematyti reklamos jūsų svetainėse.

Savybės

Monetizado leidžia:

  • Nurodykite apsaugotą turinį su konkrečia suma, kurią vartotojai turi sumokėti, kad galėtų pasiekti.
  • Peržiūrėkite savo sukurtą apsaugotą turinį.
  • Savo pasekėjams / naudotojams mokėkite, kad matytumėte savo turinį.
  • Patikrinkite, ar vartotojas turi prieigą prie jūsų turinio.
  • Jei reikia, pakeiskite prieigos prie turinio kainą.
  • Panaikinkite turinio apsaugą (jei kurį laiką norite jį paskelbti visiems).
  • Išimkite pinigus, surinktus už turinį.

Naudojimo dėklas

Galite naudoti pajamų gavimą puslapiams apsaugoti, kad juos matytų tik prenumeratoriai, kaip nurodyta:

  • Naujienų portalai.
  • Vaizdo įrašai.
  • Garso įrašai.
  • Failai
  • Dienoraščiai.
  • Socialiniai tinklai.
  • Ir daug daugiau.

Plėtros kaminas

Norėdami sukurti šią platformą, naudojome:


  • Solidumas, už protingą sutartį
  • Remix, kad įdiegtumėte išmaniąją sutartį
  • Rootstock testnet , kaip projekto tinklas
  • Javascript, SDK sukurti ir integruoti su svetainėmis.


Mūsų išmanioji sutartis yra gana paprasta, leidžianti nurodyti turinio, iš kurio norite gauti pajamų, pavadinimą, sumą (rBTC) ir keletą funkcijų, leidžiančių įjungti / išjungti turinį, mokėti ir gauti mokėjimus, be kita ko.


MonetizadoLibrary.sol

 // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; library MonetizadoLibrary { struct ProtectedContent { string name; uint256 accessCost; bool isProtected; uint256 sequenceId; address creator; uint256 amountAvailable; uint256 amountCollected; mapping(address => Subscriber) subscribers; } struct Subscriber { bool paid; uint256 amount; } }


Monetizadov1.sol

 // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./MonetizadoLibrary.sol"; contract Monetizadov1 { // Struct with info about the protected content (for paying to access) struct ProtectedContentInfo { string name; uint256 accessCost; bool isProtected; uint256 sequenceId; address creator; uint256 amountAvailable; uint256 amountCollected; } mapping(address => bool) private creators; mapping(address => bool) public hosting; mapping(address => MonetizadoLibrary.ProtectedContent[]) private paginasProtegidas; event GrantedAccess(address usuario, address creator, uint256 sequenceId); address private _owner; uint256 private _platformFeePercentage; uint256 private _platformBalance; modifier onlyOwner() { require(msg.sender == _owner, "Only the owner can call this function"); _; } constructor() { _owner = msg.sender; _platformFeePercentage = 0; _platformBalance = 0; } function addProtectedContent(string memory name, uint256 accessCost) public returns (uint256) { uint256 cantidadPaginasCreador = paginasProtegidas[msg.sender].length; MonetizadoLibrary.ProtectedContent[] storage paginas = paginasProtegidas[msg.sender]; MonetizadoLibrary.ProtectedContent storage pagina = paginas.push(); pagina.name = name; pagina.accessCost = accessCost; pagina.isProtected = true; pagina.sequenceId = cantidadPaginasCreador; pagina.creator = msg.sender; pagina.amountCollected = 0; pagina.amountAvailable = 0; creators[msg.sender] = true; return cantidadPaginasCreador; } function getProtectedContentsForCurrentUser() public view returns (ProtectedContentInfo[] memory) { uint256 cantidadPaginasPorCreador = paginasProtegidas[msg.sender].length; ProtectedContentInfo[] memory paginas = new ProtectedContentInfo[](cantidadPaginasPorCreador); for (uint256 i = 0; i < cantidadPaginasPorCreador; i++) { MonetizadoLibrary.ProtectedContent storage pagina = paginasProtegidas[msg.sender][i]; paginas[i] = ProtectedContentInfo(pagina.name, pagina.accessCost, pagina.isProtected, pagina.sequenceId, pagina.creator, pagina.amountAvailable, pagina.amountCollected); } return paginas; } function getProtectedContentByAddressAndId(address creator, uint256 sequenceId) public view returns (ProtectedContentInfo memory) { MonetizadoLibrary.ProtectedContent storage pagina = paginasProtegidas[creator][sequenceId]; ProtectedContentInfo memory paginas = ProtectedContentInfo(pagina.name, pagina.accessCost, pagina.isProtected, pagina.sequenceId, pagina.creator, pagina.amountAvailable, pagina.amountCollected); return paginas; } function payAccess(address creator, uint256 sequenceId) external payable { MonetizadoLibrary.ProtectedContent storage pagina = paginasProtegidas[creator][sequenceId]; require(msg.value == pagina.accessCost, "Incorrect payment amount"); require(pagina.isProtected == true, "The page is not protected and you do not need to pay access"); MonetizadoLibrary.Subscriber storage subscriber = pagina.subscribers[msg.sender]; subscriber.paid = true; subscriber.amount = msg.value; pagina.amountCollected += msg.value; pagina.amountAvailable += msg.value; emit GrantedAccess(msg.sender, creator, sequenceId); } function currentUserHasAccess(address creator, uint256 sequenceId) public view returns(bool) { MonetizadoLibrary.ProtectedContent storage pagina = paginasProtegidas[creator][sequenceId]; return pagina.subscribers[msg.sender].paid; } function changeAccessCost(uint256 sequenceId, uint256 newCost) external { MonetizadoLibrary.ProtectedContent storage pagina = paginasProtegidas[msg.sender][sequenceId]; pagina.accessCost = newCost; } function unprotectContent(uint256 sequenceId) external { MonetizadoLibrary.ProtectedContent storage pagina = paginasProtegidas[msg.sender][sequenceId]; pagina.isProtected = false; } function protectContent(uint256 sequenceId) external { MonetizadoLibrary.ProtectedContent storage pagina = paginasProtegidas[msg.sender][sequenceId]; pagina.isProtected = true; } function changePlatformFee(uint256 feePlatform) external onlyOwner { require(feePlatform <= 100, "The fee should be between 0.01 to 1% (1 - 100 in a 10000 scale)"); _platformFeePercentage = feePlatform; } function withdrawMoneyFromContent(uint256 sequenceId,uint256 amount) external { MonetizadoLibrary.ProtectedContent storage pagina = paginasProtegidas[msg.sender][sequenceId]; require(pagina.amountAvailable >= amount, "Insufficient balance"); uint256 amountForPlatform = amount * _platformFeePercentage / 10000; _platformBalance += amountForPlatform; payable(_owner).transfer(amountForPlatform); payable(msg.sender).transfer(amount - amountForPlatform); pagina.amountAvailable -= amount; } function getPlatformFee() public view returns(uint256) { return _platformFeePercentage; } function getPlatformBalance() public view returns(uint256) { return _platformBalance; } function withdrawMoneyPlatform(uint256 amount) external onlyOwner { require(_platformBalance >= amount, "Insufficient balance"); payable(msg.sender).transfer(amount); _platformBalance -= amount; } }


Be to, sukūrėme „Javascript“ SDK , kuris leidžia naudoti išmaniąją sutartį visose svetainėse, ypač vartotojams, norintiems mokėti už prieigą prie konkretaus turinio.

Kaip naudoti

  1. Puslapyje, iš kurio norite gauti pajamų, importuokite Web3.JS ir Ethers.JS. Tai galite padaryti iš CDN, pavyzdžiui:
 <script src="https://cdn.jsdelivr.net/npm/web3@latest/dist/web3.min.js"></script> <script src="https://cdn.ethers.io/lib/ethers-5.2.umd.min.js" type="application/javascript"></script>


  1. Atsisiųskite ir importuokite monetizadov1.js
 <script src="./monetizado.js"></script>
  1. Sukurkite apsaugotą turinį naudodami išmaniąją sutartį arba į Vadovas .


  2. Pridėkite nuorodos žymą savo puslapio HTML kodo antraštėje su atributu „rel“ su reikšme „monetized“ ir „hrf“ ji turi tokią struktūrą:


  • tinklas: tai tinklas, kuriame turinys buvo apsaugotas.


  • creator_address: tai turinio kūrėjo adresas (0x..). Tai gali būti jūsų adresas, jei esate kūrėjas.


  • Sequence_id: Tai ID, kuriuo sutartis buvo nutraukta, kai nurodėte naują saugomą turinį (pradeda nuo 0, jis yra skaitinis).


Pavyzdžiui:

 <link rel="monetizado" href="rootstock:testnet://0xda3ec0b8bddd2e8bdedede3333fbaf938fcc18c5/0" />


Ankstesnis pavyzdys reiškia, kad turinį saugo (Id 0), kūrėjas (pavyzdžiui, 0xda3ec0b8bddd2e8bdedede3333fbaf938fcc18c5), o šis derinys reiškia, kad norint jį atrakinti, reikia sumokėti.


  1. Naudokite savybę window.monetizado ( instrukcijos čia ).


Projekto apžvalga

Šis projektas jau įdiegtas Rootstock testnet tinkle ir galite naršyti įvairias toliau pateiktas nuorodas, įskaitant saugyklas ir demonstracinę versiją:

  1. Išmaniosios sutarties instrukcijos: https://github.com/Monetizado/Contracts
  2. Javascript SDK: https://github.com/Monetizado/monetizadojs
  3. „Monetizado“ tarpinio serverio SDK (kad būtų galima gauti pajamų iš visų puslapių naudojant tarpinį puslapį mokėti ir patvirtinti): https://github.com/Monetizado/proxyjs
  4. „Monetizado“ vadybininkas (norėdamas tvarkyti turinį, rinkti pinigus ir daugiau nesinaudodamas išmaniąja sutartimi): https://monetizado.github.io/manager/
  5. Demonstracija su Rootstock: <https://monetizado.github.io/demosmonetizado/demo_rootstock.html ](https://monetizado.github.io/demosmonetizado/demo_rootstock.html)
  6. Vaizdo demonstracinė versija:


Iššūkiai ir sprendimai

Konkrečiai dėl šios idėjos mes iškėlėme sau iššūkį turėti galimybę užsidirbti pinigų iš Web 2.0 platformų naudojant Web3, nedarant didelio poveikio turinio kūrėjui ir vartotojui.


Todėl turėjome sukurti „Javascript“ SDK, kuris leistų gauti pajamų iš turinio atlikus keletą svetainės pakeitimų, nes labai tikėtina, kad dauguma turinio kūrėjų turės sunkumų redaguodami savo svetaines (arba jie naudojasi išorinėmis platformomis, kur neturi daug vietos redaguoti).


Naudodami šį sprendimą turėjome išsiaiškinti, kaip atpažinti turinį, iš kurio gaunama pajamų, ir ten pasinaudojome HTML nuorodos žyma, kad nurodytume tą turinį, o SDK aptiktų sumą rBTC, jei vartotojas jau sumokėjo. ir turėjo prieigą arba turėjo mokėti.

Išvada

„Rootstock“ yra didžiulė „BitcoinFi“ galimybė, pasinaudojant jos, kaip decentralizuoto tinklo, galimybėmis ir tvirtumu. Šiame kontekste atlikti mikromokėjimus ir susieti tai su kūrimo ekonomika.


Šis pavyzdys „Monetizuota“ parodo, kaip paprasta naudoti Web3 Web2 platformose, kur yra didžiulė erdvė visų tipų naudotojams, todėl sumažėja trintis integruojant šias technologijas.


L O A D I N G
. . . comments & more!

About Author

Néstor Campos HackerNoon profile picture
Néstor Campos@nescampos
I am a computer engineer and entrepreneur working with Web3 technologies.

PABAIGTI ŽYMES

ŠIS STRAIPSNIS BUVO PRISTATYMAS...