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“ 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.
Monetizado leidžia:
Galite naudoti pajamų gavimą puslapiams apsaugoti, kad juos matytų tik prenumeratoriai, kaip nurodyta:
Norėdami sukurti šią platformą, naudojome:
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.
<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>
<script src="./monetizado.js"></script>
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ą:
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.
Šis projektas jau įdiegtas Rootstock testnet tinkle ir galite naršyti įvairias toliau pateiktas nuorodas, įskaitant saugyklas ir demonstracinę versiją:
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.
„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.