paint-brush
Како изградити он-ланац Паи-Пер-Виев протокол на Роотстоцк-уод стране@nescampos
376 читања
376 читања

Како изградити он-ланац Паи-Пер-Виев протокол на Роотстоцк-у

од стране Néstor Campos9m2024/11/30
Read on Terminal Reader

Предуго; Читати

Монетизадо је ланац паи-пер-виев протокол. Омогућава вам да уновчите било коју веб страницу и статички садржај преко Веб3.0. Може се користити за заштиту страница тако да га виде само претплатници.
featured image - Како изградити он-ланац Паи-Пер-Виев протокол на Роотстоцк-у
Néstor Campos HackerNoon profile picture

У економији пажње (Веб 2.0), корисници су „присиљени“ да плаћају претплату за приступ ексклузивном садржају (све врсте садржаја, укључујући садржај за одрасле), али ништа не гарантује да ћете добити погодности које плаћате, било због садржаја креатор не наставља да ствара нове ствари или се морате претплатити на дуже периоде када желите да платите само оно што конзумирате.


Међутим, Веб 3.0, економија намере, доноси могућност корисницима да плате само оно што конзумирају, уместо на дужи период, путем микроплаћања. Заузврат, то подстиче креаторе садржаја да остану у току са више креација, примајући свој приход одмах, уз веома ниске трошкове, без зависности од централизованих пролаза.

Монетизадо, он-ланац Паи-Пер-Виев протокол

Монетизадо је платформа са плаћањем по приказу на ланцу која вам омогућава да монетизујете било коју веб страницу и статички садржај (ако немате приступ позадину да бисте извршили промене) преко Веб3.


Монетизадо можете имплементирати на сајтовима са вестима, друштвеним мрежама, ексклузивним порталима садржаја и још много тога. Такође можете да га користите да подстакнете кориснике да плаћају и да не виде рекламе на вашим сајтовима.

Карактеристике

Монетизадо вам омогућава да:

  • Наведите заштићени садржај са одређеним износом који корисници морају да плате да би приступили.
  • Прегледајте заштићени садржај који сте креирали.
  • Вашим пратиоцима/корисницима, платите да бисте видели свој садржај.
  • Проверите да ли корисник има приступ вашем садржају.
  • Промените цену приступа садржају ако је потребно.
  • Уклоните заштиту садржаја (ако желите да га објавите свима неко време).
  • Повуците новац прикупљен за ваш садржај.

Случај употребе

Можете да користите монетизовано да заштитите странице тако да само претплатници могу да га виде, као у:

  • Новински портали.
  • Видеос.
  • Аудио.
  • Фајлови
  • Блогови.
  • Друштвене мреже.
  • И много више.

Девелопмент Стацк

Да бисмо направили ову платформу, користили смо:


  • Солидност, за паметни уговор
  • Ремиксујте, да бисте применили паметни уговор
  • Роотстоцк тестнет , као мрежа за пројекат
  • Јавасцрипт, за креирање СДК-а и интеграцију са веб локацијама.


Наш паметни уговор је прилично једноставан, омогућава вам да наведете назив садржаја који ће се уновчити, износ (у рБТЦ) и неколико функција за омогућавање/онемогућавање садржаја, као и плаћање и примање уплата, између осталог.


МонетизадоЛибрари.сол

 // 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; } }


Монетизадов1.сол

 // 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; } }


Поред тога, креирали смо Јавасцрипт СДК који омогућава коришћење паметног уговора на свим веб локацијама, посебно за кориснике који желе да плате за приступ одређеном садржају.

Како користити

  1. На страници коју желите да уновчите, увезите Веб3.ЈС и Етхерс.ЈС. То можете учинити из ЦДН-а, на пример:
 <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. Преузмите и увезите монетизадов1.јс
 <script src="./monetizado.js"></script>
  1. Креирајте заштићени садржај помоћу паметног уговора или у Менаџер .


  2. Додајте ознаку везе у заглавље ХТМЛ кода своје странице, са атрибутом „рел“ са вредношћу „монетизед“ и у хреф прати следећу структуру:


  • мрежа: То је мрежа на којој је садржај заштићен.


  • цреатор_аддресс: То је адреса (0к..) креатора садржаја. То може бити ваша адреса ако сте креатор.


  • секвенца_ид: То је ИД којим је уговор раскинут када сте навели нови заштићени садржај (почиње од 0 надаље, нумерички је).


на пример:

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


Претходни пример значи да је садржај заштићен (по ИД-у 0), од стране креатора (0кда3ец0б8бддд2е8бдедеде3333фбаф938фцц18ц5 на пример), а та комбинација је уплата мора бити извршена да би се откључао.


  1. Користите својство виндов.монетизадо ( упутства овде ).


Пројецт Валктхроугх

Овај пројекат је већ распоређен на Роотстоцк тестнету и можете истражити различите везе у наставку, укључујући спремишта и демо:

  1. Упутства за паметне уговоре: хттпс: //гитхуб.цом/Монетизадо/Цонтрацтс
  2. Јавасцрипт СДК: хттпс://гитхуб.цом/Монетизадо/монетизадојс
  3. Монетизадо Проки СДК (да би се омогућило уновчавање целих страница коришћењем посредничке странице за плаћање и верификацију): хттпс://гитхуб.цом/Монетизадо/прокијс
  4. Монетизадо Манагер (да бисте управљали својим садржајем, прикупљали новац и још много тога без интеракције са паметним уговором): хттпс://монетизадо.гитхуб.ио/манагер/
  5. Демо са Роотстоцк-ом: <хттпс://монетизадо.гитхуб.ио/демосмонетизадо/демо_роотстоцк.хтмл ](хттпс://монетизадо.гитхуб.ио/демосмонетизадо/демо_роотстоцк.хтмл)
  6. Видео демо: хттпс:


Изазови и решења

Посебно за ову идеју, поставили смо себи изазов да будемо у могућности да монетизујемо Веб 2.0 платформе користећи Веб3, без већег утицаја и на креатора садржаја и на корисника.


Због тога смо морали да креирамо СДК у Јавасцрипт-у који би омогућио монетизацију садржаја уз неколико промена на веб локацији, јер је врло вероватно да ће већина креатора садржаја имати потешкоћа са уређивањем својих веб локација (или користе спољне платформе на којима немају много простора уредити).


Са тим решењем, онда смо морали да видимо како да идентификујемо садржај који се монетизује, и ту смо искористили ХТМЛ ознаку везе да наведемо тај садржај, а СДК би открио износ у рБТЦ-у, ако је корисник већ платио и имао приступ, или је морао да плати.

Закључак

Роотстоцк представља огромну прилику у БитцоинФи-ју, користећи предности његових могућности и робусности као децентрализоване мреже. У овом контексту, извршити микроплаћања и повезати то са економијом стварања.


Овај пример, Монетизовано, показује једноставност коришћења Веб3 на Веб2 платформама, где постоји огроман простор за све типове корисника, смањујући трење за интеграцију ових технологија.